Changeset View
Changeset View
Standalone View
Standalone View
lib/selectors/thread-selectors.js
Show All 24 Lines | import { | ||||
getRandomDefaultEmojiAvatar, | getRandomDefaultEmojiAvatar, | ||||
} from '../shared/avatar-utils.js'; | } from '../shared/avatar-utils.js'; | ||||
import { createEntryInfo } from '../shared/entry-utils.js'; | import { createEntryInfo } from '../shared/entry-utils.js'; | ||||
import { getMostRecentNonLocalMessageID } from '../shared/message-utils.js'; | import { getMostRecentNonLocalMessageID } from '../shared/message-utils.js'; | ||||
import { | import { | ||||
threadInHomeChatList, | threadInHomeChatList, | ||||
threadInBackgroundChatList, | threadInBackgroundChatList, | ||||
threadInFilterList, | threadInFilterList, | ||||
threadInfoFromRawThreadInfo, | serverThreadInfoFromRawThreadInfo, | ||||
threadHasPermission, | threadHasPermission, | ||||
threadInChatList, | threadInChatList, | ||||
threadHasAdminRole, | threadHasAdminRole, | ||||
roleIsAdminRole, | roleIsAdminRole, | ||||
threadIsPending, | threadIsPending, | ||||
getPendingThreadID, | getPendingThreadID, | ||||
} from '../shared/thread-utils.js'; | } from '../shared/thread-utils.js'; | ||||
import type { ClientAvatar, ClientEmojiAvatar } from '../types/avatar-types'; | import type { ClientAvatar, ClientEmojiAvatar } from '../types/avatar-types'; | ||||
Show All 23 Lines | |||||
type ThreadInfoSelectorType = (state: BaseAppState<>) => { | type ThreadInfoSelectorType = (state: BaseAppState<>) => { | ||||
+[id: string]: ThreadInfo, | +[id: string]: ThreadInfo, | ||||
}; | }; | ||||
const threadInfoSelector: ThreadInfoSelectorType = createObjectSelector( | const threadInfoSelector: ThreadInfoSelectorType = createObjectSelector( | ||||
(state: BaseAppState<>) => state.threadStore.threadInfos, | (state: BaseAppState<>) => state.threadStore.threadInfos, | ||||
(state: BaseAppState<>) => state.currentUserInfo && state.currentUserInfo.id, | (state: BaseAppState<>) => state.currentUserInfo && state.currentUserInfo.id, | ||||
(state: BaseAppState<>) => state.userStore.userInfos, | (state: BaseAppState<>) => state.userStore.userInfos, | ||||
threadInfoFromRawThreadInfo, | serverThreadInfoFromRawThreadInfo, | ||||
tomek: It doesn't sound right to use `server` function in a client selector. Maybe we can find a… | |||||
); | ); | ||||
const communityThreadSelector: ( | const communityThreadSelector: ( | ||||
state: BaseAppState<>, | state: BaseAppState<>, | ||||
) => $ReadOnlyArray<ThreadInfo> = createSelector( | ) => $ReadOnlyArray<ThreadInfo> = createSelector( | ||||
threadInfoSelector, | threadInfoSelector, | ||||
(threadInfos: { +[id: string]: ThreadInfo }) => { | (threadInfos: { +[id: string]: ThreadInfo }) => { | ||||
const result = []; | const result = []; | ||||
▲ Show 20 Lines • Show All 507 Lines • Show Last 20 Lines |
It doesn't sound right to use server function in a client selector. Maybe we can find a better name?