/
QuickMeet
/
Chat.Desktop
Обзор
Документация
Войти
/
QuickMeet
/
Chat.Desktop
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/ui/selectors.ts
40 строк
1 KB
Jean Brito
chore: Update fuselage (#2673)
03 авг 2023, 01:31
Не верифицирован
03 авг 2023, 01:31
4d68ba5
Код
Авторство
О чём код?
import { createSelector } from 'reselect'; import type { Server } from '../servers/common'; import type { RootState } from '../store/rootReducer'; export type Selector<T> = (state: RootState) => T; export type RootSelector<T extends keyof RootState> = Selector<RootState[T]>; export const selectGlobalBadge = ({ servers }: RootState): Server['badge'] => { const badges = servers.map(({ badge }) => badge); const mentionCount = badges .filter((badge): badge is number => Number.isInteger(badge)) .reduce<number>((sum, count: number) => sum + count, 0); return mentionCount || (badges.some((badge) => !!badge) && '•') || undefined; }; export const selectGlobalBadgeText = createSelector( selectGlobalBadge, (badge) => { if (badge === '•') { return '•'; } if (Number.isInteger(badge)) { return String(badge); } return ''; } ); const isBadgeCount = (badge: Server['badge']): badge is number => Number.isInteger(badge); export const selectGlobalBadgeCount = createSelector( selectGlobalBadge, (badge): number => (isBadgeCount(badge) ? badge : 0) );