1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- import { createSelector } from '@reduxjs/toolkit';
- import { Record as ImmutableRecord } from 'immutable';
- import { accountDefaultValues } from 'mastodon/models/account';
- import type { Account, AccountShape } from 'mastodon/models/account';
- import type { Relationship } from 'mastodon/models/relationship';
- import type { RootState } from 'mastodon/store';
- const getAccountBase = (state: RootState, id: string) =>
- state.accounts.get(id, null);
- const getAccountRelationship = (state: RootState, id: string) =>
- state.relationships.get(id, null);
- const getAccountMoved = (state: RootState, id: string) => {
- const movedToId = state.accounts.get(id)?.moved;
- if (!movedToId) return undefined;
- return state.accounts.get(movedToId);
- };
- interface FullAccountShape extends Omit<AccountShape, 'moved'> {
- relationship: Relationship | null;
- moved: Account | null;
- }
- const FullAccountFactory = ImmutableRecord<FullAccountShape>({
- ...accountDefaultValues,
- moved: null,
- relationship: null,
- });
- export function makeGetAccount() {
- return createSelector(
- [getAccountBase, getAccountRelationship, getAccountMoved],
- (base, relationship, moved) => {
- if (base === null) {
- return null;
- }
- return FullAccountFactory(base)
- .set('relationship', relationship)
- .set('moved', moved ?? null);
- },
- );
- }
|