signal-desktop/ts/state/selectors/storyDistributionLists.ts

39 lines
1.2 KiB
TypeScript
Raw Normal View History

2022-06-30 20:52:03 -04:00
// Copyright 2022 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { createSelector } from 'reselect';
import type { StateType } from '../reducer';
import type { StoryDistributionListDataType } from '../ducks/storyDistributionLists';
import type { StoryDistributionListWithMembersDataType } from '../../types/Stories';
import { getConversationSelector } from './conversations';
import { MY_STORY_ID } from '../../types/Stories';
2022-06-30 20:52:03 -04:00
export const getDistributionLists = (
2022-06-30 20:52:03 -04:00
state: StateType
): Array<StoryDistributionListDataType> =>
2022-08-10 14:37:19 -04:00
state.storyDistributionLists.distributionLists
.filter(list => !list.deletedAtTimestamp)
.sort(list => (list.id === MY_STORY_ID ? -1 : 1));
2022-06-30 20:52:03 -04:00
export const getDistributionListSelector = createSelector(
getDistributionLists,
distributionLists => (id: string) =>
distributionLists.find(list => list.id === id)
);
export const getDistributionListsWithMembers = createSelector(
getConversationSelector,
getDistributionLists,
(
conversationSelector,
distributionLists
): Array<StoryDistributionListWithMembersDataType> =>
distributionLists.map(list => ({
...list,
members: list.memberServiceIds.map(serviceId =>
conversationSelector(serviceId)
),
}))
);