You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.3 KiB
47 lines
1.3 KiB
import { Record as ImmutableRecord } from 'immutable'; |
|
import { createSelector } from 'reselect'; |
|
|
|
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); |
|
}, |
|
); |
|
}
|
|
|