import { Selector, createSelector } from '@ngrx/store'; import { UserInfo, GroupDetailData } from '@ucap-webmessenger/protocol-sync'; import { RoomInfo, UserInfoShort, UserInfo as RoomUserInfo } from '@ucap-webmessenger/protocol-room'; export interface State { buddyInfoList: UserInfo[]; buddy2SyncDate: string; groupList: GroupDetailData[]; group2SyncDate: string; roomList: RoomInfo[]; roomUserInfoMap: { [param: string]: { userInfoShortList: UserInfoShort[]; userInfoList: RoomUserInfo[]; }; }; roomSyncDate: string; } export const initialState: State = { buddyInfoList: [], buddy2SyncDate: '', groupList: [], group2SyncDate: '', roomList: [], roomUserInfoMap: {}, roomSyncDate: '' }; export function selectors(selector: Selector) { return { buddyInfoList: createSelector( selector, (state: State) => state.buddyInfoList ), buddy2SyncDate: createSelector( selector, (state: State) => state.buddy2SyncDate ), groupList: createSelector( selector, (state: State) => state.groupList ), group2SyncDate: createSelector( selector, (state: State) => state.group2SyncDate ), groupListAndBuddyList: createSelector( selector, (state: State) => { return { groupList: state.groupList, buddyList: state.buddyInfoList }; } ), roomList: createSelector( selector, (state: State) => state.roomList ), roomSyncDate: createSelector( selector, (state: State) => state.roomSyncDate ) }; }