45 lines
1.1 KiB
TypeScript
45 lines
1.1 KiB
TypeScript
import { Selector, createSelector } from '@ngrx/store';
|
|
import { EntityState, createEntityAdapter } from '@ngrx/entity';
|
|
import { UserInfo } from '@ucap/protocol-sync';
|
|
|
|
export interface BuddyState extends EntityState<UserInfo> {
|
|
syncDate: string;
|
|
}
|
|
export const adapterBuddy = createEntityAdapter<UserInfo>({
|
|
selectId: userInfo => userInfo.seq
|
|
});
|
|
|
|
export interface State {
|
|
buddies: BuddyState;
|
|
}
|
|
|
|
const buddyInitialState: BuddyState = adapterBuddy.getInitialState({
|
|
syncDate: ''
|
|
});
|
|
|
|
export const initialState: State = {
|
|
buddies: buddyInitialState
|
|
};
|
|
|
|
const {
|
|
selectAll: selectAllForBuddy,
|
|
selectEntities: selectEntitiesForBuddy,
|
|
selectIds: selectIdsForBuddy,
|
|
selectTotal: selectTotalForBuddy
|
|
} = adapterBuddy.getSelectors();
|
|
|
|
export function selectors<S>(selector: Selector<any, State>) {
|
|
const selectBuddies = createSelector(
|
|
selector,
|
|
(state: State) => state.buddies
|
|
);
|
|
|
|
return {
|
|
buddies: createSelector(selectBuddies, selectAllForBuddy),
|
|
buddySyncDate: createSelector(
|
|
selectBuddies,
|
|
buddyState => buddyState.syncDate
|
|
)
|
|
};
|
|
}
|