import { createSelector } from 'reselect'; import Immutable from 'immutable'; const getAccountBase = (state, id) => state.getIn(['accounts', id], null); const getAccountCounters = (state, id) => state.getIn(['accounts_counters', id], null); const getAccountRelationship = (state, id) => state.getIn(['relationships', id], null); export const makeGetAccount = () => { return createSelector([getAccountBase, getAccountCounters, getAccountRelationship], (base, counters, relationship) => { if (base === null) { return null; } return base.merge(counters).set('relationship', relationship); }); }; export const makeGetStatus = () => { return createSelector( [ (state, id) => state.getIn(['statuses', id]), (state, id) => state.getIn(['statuses', state.getIn(['statuses', id, 'reblog'])]), (state, id) => state.getIn(['accounts', state.getIn(['statuses', id, 'account'])]), (state, id) => state.getIn(['accounts', state.getIn(['statuses', state.getIn(['statuses', id, 'reblog']), 'account'])]), ], (statusBase, statusReblog, accountBase, accountReblog) => { if (!statusBase) { return null; } if (statusReblog) { statusReblog = statusReblog.set('account', accountReblog); } else { statusReblog = null; } return statusBase.withMutations(map => { map.set('reblog', statusReblog); map.set('account', accountBase); }); } ); }; const getAlertsBase = state => state.get('alerts'); export const getAlerts = createSelector([getAlertsBase], (base) => { let arr = []; base.forEach(item => { arr.push({ message: item.get('message'), title: item.get('title'), key: item.get('key'), dismissAfter: 5000, barStyle: { zIndex: 200, }, }); }); return arr; }); export const makeGetNotification = () => { return createSelector([ (_, base) => base, (state, _, accountId) => state.getIn(['accounts', accountId]), ], (base, account) => { return base.set('account', account); }); }; export const getAccountGallery = createSelector([ (state, id) => state.getIn(['timelines', `account:${id}:media`, 'items'], Immutable.List()), state => state.get('statuses'), ], (statusIds, statuses) => { let medias = Immutable.List(); statusIds.forEach(statusId => { const status = statuses.get(statusId); medias = medias.concat(status.get('media_attachments').map(media => media.set('status', status))); }); return medias; });