@ngrx-traits/common 18.5.0 → 19.0.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ngrx-traits-common.mjs +12 -12
- package/fesm2022/ngrx-traits-common.mjs.map +1 -1
- package/package.json +7 -9
- package/reset/reset.trait.d.ts +1 -1
- package/esm2022/async-action/async-action.model.mjs +0 -2
- package/esm2022/async-action/async-action.trait.mjs +0 -116
- package/esm2022/async-action/index.mjs +0 -3
- package/esm2022/crud-entities/crud-entities.model.mjs +0 -8
- package/esm2022/crud-entities/crud-entities.trait.actions.mjs +0 -20
- package/esm2022/crud-entities/crud-entities.trait.mjs +0 -58
- package/esm2022/crud-entities/crud-entities.trait.mutators.mjs +0 -121
- package/esm2022/crud-entities/crud-entities.trait.reducer.mjs +0 -17
- package/esm2022/crud-entities/crud-entities.trait.selectors.mjs +0 -54
- package/esm2022/crud-entities/index.mjs +0 -3
- package/esm2022/entities-pagination/entities-pagination.model.internal.mjs +0 -2
- package/esm2022/entities-pagination/entities-pagination.model.mjs +0 -2
- package/esm2022/entities-pagination/entities-pagination.trait.actions.mjs +0 -20
- package/esm2022/entities-pagination/entities-pagination.trait.effects.mjs +0 -63
- package/esm2022/entities-pagination/entities-pagination.trait.mjs +0 -94
- package/esm2022/entities-pagination/entities-pagination.trait.mutators.mjs +0 -66
- package/esm2022/entities-pagination/entities-pagination.trait.reducer.mjs +0 -79
- package/esm2022/entities-pagination/entities-pagination.trait.selectors.mjs +0 -84
- package/esm2022/entities-pagination/index.mjs +0 -3
- package/esm2022/entities-sync-to-route-query-params/entities-sync-to-route-query-params.mjs +0 -127
- package/esm2022/entities-sync-to-route-query-params/index.mjs +0 -2
- package/esm2022/filter-entities/filter-entities.model.internal.mjs +0 -2
- package/esm2022/filter-entities/filter-entities.model.mjs +0 -2
- package/esm2022/filter-entities/filter-entities.trait.actions.mjs +0 -16
- package/esm2022/filter-entities/filter-entities.trait.effect.mjs +0 -59
- package/esm2022/filter-entities/filter-entities.trait.mjs +0 -74
- package/esm2022/filter-entities/filter-entities.trait.mutators.mjs +0 -10
- package/esm2022/filter-entities/filter-entities.trait.reducer.mjs +0 -11
- package/esm2022/filter-entities/filter-entities.trait.selectors.mjs +0 -9
- package/esm2022/filter-entities/index.mjs +0 -3
- package/esm2022/index.mjs +0 -13
- package/esm2022/load-entities/index.mjs +0 -3
- package/esm2022/load-entities/load-entities.model.mjs +0 -2
- package/esm2022/load-entities/load-entities.mutators.mjs +0 -7
- package/esm2022/load-entities/load-entities.trait.actions.mjs +0 -10
- package/esm2022/load-entities/load-entities.trait.mjs +0 -62
- package/esm2022/load-entities/load-entities.trait.reducer.mjs +0 -27
- package/esm2022/load-entities/load-entities.trait.selectors.mjs +0 -38
- package/esm2022/load-entities/load-entities.utils.mjs +0 -10
- package/esm2022/load-entity/index.mjs +0 -3
- package/esm2022/load-entity/load-entity.model.mjs +0 -2
- package/esm2022/load-entity/load-entity.traits.mjs +0 -78
- package/esm2022/ngrx-traits-common.mjs +0 -5
- package/esm2022/reset/index.mjs +0 -2
- package/esm2022/reset/reset.trait.mjs +0 -37
- package/esm2022/select-entities/index.mjs +0 -4
- package/esm2022/select-entities/select-entities.model.mjs +0 -2
- package/esm2022/select-entities/select-entities.trait.actions.mjs +0 -11
- package/esm2022/select-entities/select-entities.trait.mjs +0 -55
- package/esm2022/select-entities/select-entities.trait.mutators.mjs +0 -27
- package/esm2022/select-entities/select-entities.trait.reducer.mjs +0 -42
- package/esm2022/select-entities/select-entities.trait.selectors.mjs +0 -28
- package/esm2022/select-entities/select-entities.utils.mjs +0 -30
- package/esm2022/select-entity/index.mjs +0 -3
- package/esm2022/select-entity/select-entity.model.mjs +0 -2
- package/esm2022/select-entity/select-entity.trait.actions.mjs +0 -9
- package/esm2022/select-entity/select-entity.trait.mjs +0 -52
- package/esm2022/select-entity/select-entity.trait.mutators.mjs +0 -26
- package/esm2022/select-entity/select-entity.trait.reducer.mjs +0 -35
- package/esm2022/select-entity/select-entity.trait.selectors.mjs +0 -13
- package/esm2022/set-entity/index.mjs +0 -3
- package/esm2022/set-entity/set-entity.model.mjs +0 -2
- package/esm2022/set-entity/set-entity.trait.mjs +0 -62
- package/esm2022/sort-entities/index.mjs +0 -4
- package/esm2022/sort-entities/sort-entities.model.mjs +0 -2
- package/esm2022/sort-entities/sort-entities.trait.actions.mjs +0 -8
- package/esm2022/sort-entities/sort-entities.trait.effect.mjs +0 -28
- package/esm2022/sort-entities/sort-entities.trait.mjs +0 -61
- package/esm2022/sort-entities/sort-entities.trait.mutators.mjs +0 -24
- package/esm2022/sort-entities/sort-entities.trait.reducer.mjs +0 -15
- package/esm2022/sort-entities/sort-entities.trait.selectors.mjs +0 -9
- package/esm2022/sort-entities/sort-entities.utils.mjs +0 -63
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngrx-traits-common.mjs","sources":["../../../../../libs/ngrx-traits/common/src/lib/load-entities/load-entities.model.ts","../../../../../libs/ngrx-traits/common/src/lib/load-entities/load-entities.trait.reducer.ts","../../../../../libs/ngrx-traits/common/src/lib/load-entities/load-entities.mutators.ts","../../../../../libs/ngrx-traits/common/src/lib/load-entities/load-entities.trait.actions.ts","../../../../../libs/ngrx-traits/common/src/lib/load-entities/load-entities.utils.ts","../../../../../libs/ngrx-traits/common/src/lib/filter-entities/filter-entities.trait.selectors.ts","../../../../../libs/ngrx-traits/common/src/lib/load-entities/load-entities.trait.selectors.ts","../../../../../libs/ngrx-traits/common/src/lib/load-entities/load-entities.trait.ts","../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/entities-pagination.model.ts","../../../../../libs/ngrx-traits/common/src/lib/filter-entities/filter-entities.trait.effect.ts","../../../../../libs/ngrx-traits/common/src/lib/filter-entities/filter-entities.trait.reducer.ts","../../../../../libs/ngrx-traits/common/src/lib/filter-entities/filter-entities.model.ts","../../../../../libs/ngrx-traits/common/src/lib/filter-entities/filter-entities.trait.mutators.ts","../../../../../libs/ngrx-traits/common/src/lib/filter-entities/filter-entities.trait.actions.ts","../../../../../libs/ngrx-traits/common/src/lib/filter-entities/filter-entities.trait.ts","../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/entities-pagination.trait.selectors.ts","../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/entities-pagination.trait.actions.ts","../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/entities-pagination.trait.reducer.ts","../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/entities-pagination.trait.effects.ts","../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/entities-pagination.trait.mutators.ts","../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/entities-pagination.trait.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entities/select-entities.trait.actions.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entities/select-entities.utils.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entities/select-entities.trait.selectors.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entities/select-entities.trait.reducer.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entities/select-entities.trait.mutators.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entities/select-entities.trait.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entity/select-entity.trait.actions.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entity/select-entity.trait.selectors.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entity/select-entity.trait.reducer.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entity/select-entity.trait.mutators.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entity/select-entity.trait.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entity/select-entity.model.ts","../../../../../libs/ngrx-traits/common/src/lib/crud-entities/crud-entities.model.ts","../../../../../libs/ngrx-traits/common/src/lib/crud-entities/crud-entities.trait.actions.ts","../../../../../libs/ngrx-traits/common/src/lib/crud-entities/crud-entities.trait.selectors.ts","../../../../../libs/ngrx-traits/common/src/lib/crud-entities/crud-entities.trait.reducer.ts","../../../../../libs/ngrx-traits/common/src/lib/crud-entities/crud-entities.trait.mutators.ts","../../../../../libs/ngrx-traits/common/src/lib/crud-entities/crud-entities.trait.ts","../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.model.ts","../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.utils.ts","../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.mutators.ts","../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.reducer.ts","../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.selectors.ts","../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.effect.ts","../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.actions.ts","../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.ts","../../../../../libs/ngrx-traits/common/src/lib/reset/reset.trait.ts","../../../../../libs/ngrx-traits/common/src/lib/async-action/async-action.trait.ts","../../../../../libs/ngrx-traits/common/src/lib/load-entity/load-entity.traits.ts","../../../../../libs/ngrx-traits/common/src/lib/set-entity/set-entity.trait.ts","../../../../../libs/ngrx-traits/common/src/lib/entities-sync-to-route-query-params/entities-sync-to-route-query-params.ts","../../../../../libs/ngrx-traits/common/src/lib/ngrx-traits-common.ts"],"sourcesContent":["import { KeyedConfig } from '@ngrx-traits/core';\nimport { Comparer, EntityAdapter, EntityState, IdSelector } from '@ngrx/entity';\nimport { Dictionary } from '@ngrx/entity/src/models';\nimport { Action, ActionCreator } from '@ngrx/store/src/models';\n\nexport type Status = 'loading' | 'success' | 'fail';\n\nexport interface StatusState {\n status?: Status;\n}\n\nexport interface LoadEntitiesState<T> extends EntityState<T>, StatusState {}\n\nexport type LoadEntitiesActions<T> = {\n /**\n * load entities from backend\n */\n loadEntities: ActionCreator<string, () => Action<string>>;\n /**\n * entities where loaded successfully\n */\n loadEntitiesSuccess: ActionCreator<\n string,\n (props: {\n entities: T[];\n total?: number;\n }) => { entities: T[]; total?: number } & Action<string>\n >;\n /**\n * entities failed loading\n */\n loadEntitiesFail: ActionCreator<\n string,\n (props?: { error?: string }) => { error?: string } & Action<string>\n >;\n};\n\nexport type LoadEntitiesSelectors<T> = {\n /**\n * returns all ids of the entities in an array\n * @param state\n */\n selectEntitiesIdsList: (state: LoadEntitiesState<T>) => string[] | number[];\n /**\n * returns all entities in a map with the id as key of the map\n * @param state\n */\n selectEntitiesMap: (state: LoadEntitiesState<T>) => Dictionary<T>;\n /**\n * returns all entities in an array\n * @param state\n */\n selectEntitiesList: (state: LoadEntitiesState<T>) => T[];\n /**\n * returns the total number of entities\n * @param state\n */\n selectEntitiesTotal: (state: LoadEntitiesState<T>) => number;\n /**\n * is currently loading entities\n * @param state\n */\n isEntitiesLoading: (state: LoadEntitiesState<T>) => boolean;\n /**\n * were the entities loaded successfully\n * @param state\n */\n isEntitiesLoadingSuccess: (state: LoadEntitiesState<T>) => boolean;\n /**\n * did the entities fail loading\n * @param state\n */\n isEntitiesLoadingFail: (state: LoadEntitiesState<T>) => boolean;\n};\n\nexport type LoadEntitiesMutators<T> = {\n /**\n * set or replace all entities currently in store\n * @param entities\n * @param state\n */\n setEntitiesList<S extends LoadEntitiesState<T>>(entities: T[], state: S): S;\n};\n\nexport type GenericActionCreator = ActionCreator<\n string,\n (...args: unknown[]) => Action<string>\n>;\n\nexport const loadEntitiesTraitKey = 'loadEntities';\n\nexport type LoadEntitiesConfig<T = unknown> = {\n /**\n * Function that returns the id of an entity if not set it attempts to return the values\n * of a property call id, this is pass to @ngrx/entity EntityAdapter\n */\n selectId?: IdSelector<T>;\n /**\n * Default sort function for to @ngrx/entity EntityAdapter\n */\n sortComparer?: false | Comparer<T>;\n /**\n * @ngrx/entity EntityAdapter\n */\n adapter: EntityAdapter<T>;\n};\n\nexport type LoadEntitiesKeyedConfig<T> = KeyedConfig<\n typeof loadEntitiesTraitKey,\n LoadEntitiesConfig<T>\n>;\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport {\n LoadEntitiesState,\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesMutators,\n} from './load-entities.model';\nimport { createReducer, on } from '@ngrx/store';\nimport { EntitiesPaginationKeyedConfig } from '../entities-pagination';\nimport { insertIf } from '@ngrx-traits/core';\n\nexport function createLoadEntitiesInitialState<Entity>(\n previousInitialState = {},\n allConfigs: LoadEntitiesKeyedConfig<Entity>\n): LoadEntitiesState<Entity> {\n const traitConfig = allConfigs.loadEntities;\n const adapter = traitConfig!.adapter;\n\n return {\n ...previousInitialState,\n ...adapter!.getInitialState(),\n status: undefined,\n };\n}\n\nexport function createLoadEntitiesTraitReducer<\n T,\n S extends LoadEntitiesState<T>\n>(\n initialState: S,\n actions: LoadEntitiesActions<T>,\n allMutators: LoadEntitiesMutators<T>,\n allConfigs: LoadEntitiesKeyedConfig<T> & EntitiesPaginationKeyedConfig\n) {\n const handleEntitiesMerge = !allConfigs?.pagination;\n\n return createReducer(\n initialState,\n on(actions.loadEntities, (state) => ({\n ...state,\n status: 'loading',\n })),\n on(actions.loadEntitiesFail, (state) => ({\n ...state,\n status: 'fail',\n })),\n on(actions.loadEntitiesSuccess, (state) => ({\n ...state,\n status: 'success',\n })),\n ...insertIf<S>(handleEntitiesMerge, () =>\n on(actions.loadEntitiesSuccess, (state, { entities }) =>\n allMutators.setEntitiesList(entities, {\n ...state,\n })\n )\n )\n );\n}\n","import {\n LoadEntitiesKeyedConfig,\n LoadEntitiesMutators,\n} from './load-entities.model';\nimport { EntitiesPaginationKeyedConfig } from '../entities-pagination';\n\nexport function createLoadEntitiesTraitMutators<Entity>(\n allConfigs: LoadEntitiesKeyedConfig<Entity> & EntitiesPaginationKeyedConfig\n) {\n const adapter = allConfigs?.loadEntities?.adapter;\n\n return {\n setEntitiesList: adapter?.setAll,\n } as LoadEntitiesMutators<Entity>;\n}\n","import { LoadEntitiesActions } from './load-entities.model';\nimport { createAction, props } from '@ngrx/store';\n\nexport function createLoadEntitiesTraitActions<Entity>(\n actionsGroupKey: string,\n entitiesName: string\n): LoadEntitiesActions<Entity> {\n const actions = {\n loadEntities: createAction(`${actionsGroupKey} Load ${entitiesName}`),\n loadEntitiesSuccess: createAction(\n `${actionsGroupKey} Load ${entitiesName} Success`,\n props<{ entities: Entity[]; total?: number }>()\n ),\n loadEntitiesFail: createAction(\n `${actionsGroupKey} Load ${entitiesName} Fail`,\n (props?: { error?: string }) => ({ error: props?.error })\n ),\n };\n\n return actions;\n}\n","import { StatusState } from './load-entities.model';\n\nexport function isLoading<S extends StatusState>(state: S) {\n return state.status === 'loading';\n}\nexport function isSuccess<S extends StatusState>(state: S) {\n return state.status === 'success';\n}\nexport function isFail<S extends StatusState>(state: S) {\n return state.status === 'fail';\n}\n","import {\n FilterEntitiesSelectors,\n FilterEntitiesState,\n} from './filter-entities.model';\nimport { LoadEntitiesState } from '../load-entities';\nexport function selectEntitiesFilter<Entity, F>(\n state: LoadEntitiesState<Entity> & FilterEntitiesState<F>\n) {\n return state.filters;\n}\n\nexport function createFilterTraitSelectors<\n Entity,\n F\n>(): FilterEntitiesSelectors<Entity, F> {\n return {\n selectEntitiesFilter,\n };\n}\n","import { Dictionary } from '@ngrx/entity';\nimport {\n LoadEntitiesKeyedConfig,\n LoadEntitiesSelectors,\n} from './load-entities.model';\nimport { FilterEntitiesKeyedConfig } from '../filter-entities';\nimport { isFail, isLoading, isSuccess } from './load-entities.utils';\nimport { createSelector } from '@ngrx/store';\nimport { selectEntitiesFilter } from '../filter-entities/filter-entities.trait.selectors';\n\nexport function createLoadEntitiesTraitSelectors<Entity>(\n allConfigs?: LoadEntitiesKeyedConfig<Entity> &\n FilterEntitiesKeyedConfig<Entity, unknown>\n) {\n const adapter = allConfigs?.loadEntities?.adapter;\n const entitySelectors = adapter!.getSelectors();\n\n const filterFunction = allConfigs?.filter?.filterFn;\n let selectors: LoadEntitiesSelectors<Entity> = {\n selectEntitiesList: entitySelectors.selectAll,\n selectEntitiesMap: entitySelectors.selectEntities,\n selectEntitiesIdsList: entitySelectors.selectIds,\n selectEntitiesTotal: entitySelectors.selectTotal,\n isEntitiesLoadingFail: isFail,\n isEntitiesLoading: isLoading,\n isEntitiesLoadingSuccess: isSuccess,\n };\n if (filterFunction && entitySelectors) {\n const selectEntitiesList = createSelector(\n entitySelectors.selectAll,\n selectEntitiesFilter,\n (entities, filters) =>\n filters ? entities.filter((e) => filterFunction(filters, e)) : entities\n );\n\n selectors = {\n ...selectors,\n selectEntitiesList,\n selectEntitiesMap: createSelector(\n selectors.selectEntitiesMap,\n selectEntitiesFilter,\n (entities, filters) => {\n const result: Dictionary<Entity> = {};\n for (const id in entities) {\n const e = entities[id];\n if (filterFunction(filters, e!)) {\n result[id] = e;\n }\n }\n return result;\n }\n ),\n selectEntitiesTotal: createSelector(\n selectEntitiesList,\n (entities) => entities.length\n ),\n selectEntitiesIdsList: createSelector(\n selectEntitiesList,\n (entities) =>\n entities.map((e) => adapter?.selectId(e)) as string[] | number[]\n ),\n } as unknown as LoadEntitiesSelectors<Entity>;\n }\n return selectors;\n}\n","import {\n createLoadEntitiesInitialState,\n createLoadEntitiesTraitReducer,\n} from './load-entities.trait.reducer';\nimport {\n LoadEntitiesState,\n LoadEntitiesConfig,\n LoadEntitiesKeyedConfig,\n loadEntitiesTraitKey,\n} from './load-entities.model';\nimport {\n TraitActionsFactoryConfig,\n TraitInitialStateFactoryConfig,\n TraitSelectorsFactoryConfig,\n TraitStateMutatorsFactoryConfig,\n} from '@ngrx-traits/core';\nimport { EntitiesPaginationKeyedConfig } from '../entities-pagination';\nimport { createLoadEntitiesTraitMutators } from './load-entities.mutators';\nimport { createTraitFactory } from '@ngrx-traits/core';\nimport { createEntityAdapter, EntityAdapter } from '@ngrx/entity';\nimport { createLoadEntitiesTraitActions } from './load-entities.trait.actions';\nimport { createLoadEntitiesTraitSelectors } from './load-entities.trait.selectors';\n\n/**\n * Generates the ngrx code needed to load a list of entities from the backend. This trait is the base for all other traits related\n * to a list of entities, the other will call loadEntities when needing data. See the example for the list of actions and selectors this generates\n *\n * @param traitConfig - Config object for the trait factory\n * @param traitConfig.selectId - Function that returns the id of an entity\n * @param traitConfig.sortComparer - Default sort function for to @ngrx/entity EntityAdapter\n *\n * @example\n * // The following trait config\n *\n * export interface TestState\n * extends LoadEntitiesState<Todo>{}\n *\n * const traits = createEntityFeatureFactory(\n * {entityName: 'Todo'},\n * addLoadEntitiesTrait<Todo>(),\n * )({\n * actionsGroupKey: '[Todos]',\n * featureSelector: createFeatureSelector<TestState>>(\n * 'todos',\n * ),\n * });\n *\n * // adds following props to the state:\n * // ids: string[] | number[];\n * // entities: Dictionary<Todo>;\n * // status?: 'loading' | 'success' | 'fail';\n *\n * // generated actions\n * traits.actions.loadTodos()\n * traits.actions.loadTodosSuccess({entities: todos})\n * traits.actions.loadTodosFail();\n * // generated selectors\n * traits.selectors.selectTodosList\n * traits.selectors.selectTodosMap\n * traits.selectors.selectTodosIds\n * traits.selectors.selectTodosTotal\n * traits.selectors.isTodosLoading\n * traits.selectors.isTodosLoadingSuccess\n * traits.selectors.isTodosLoadingFail\n */\nexport function addLoadEntitiesTrait<Entity>(\n traitConfig?: Omit<LoadEntitiesConfig<Entity>, 'adapter'>\n) {\n const adapter: EntityAdapter<Entity> = createEntityAdapter(traitConfig);\n\n return createTraitFactory({\n key: loadEntitiesTraitKey,\n config: { ...traitConfig, adapter } as LoadEntitiesConfig<Entity>,\n actions: ({ actionsGroupKey, entitiesName }: TraitActionsFactoryConfig) =>\n createLoadEntitiesTraitActions<Entity>(actionsGroupKey, entitiesName),\n selectors: ({ allConfigs }: TraitSelectorsFactoryConfig) =>\n createLoadEntitiesTraitSelectors<Entity>(\n allConfigs as LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig\n ),\n mutators: ({ allConfigs }: TraitStateMutatorsFactoryConfig) =>\n createLoadEntitiesTraitMutators<Entity>(\n allConfigs as LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig\n ),\n initialState: ({\n previousInitialState,\n allConfigs,\n }: TraitInitialStateFactoryConfig) =>\n createLoadEntitiesInitialState<Entity>(previousInitialState, allConfigs),\n reducer: ({ initialState, allActions, allMutators, allConfigs }) =>\n createLoadEntitiesTraitReducer<Entity, LoadEntitiesState<Entity>>(\n initialState,\n allActions,\n allMutators,\n allConfigs as LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig\n ),\n });\n}\n","/* eslint-disable @typescript-eslint/no-empty-interface */\nimport { Action, ActionCreator } from '@ngrx/store/src/models';\n\nimport { LoadEntitiesState } from '../load-entities';\n\nexport type CacheType = 'full' | 'partial' | 'grow';\nexport interface EntitiesPaginationState {\n pagination: {\n currentPage: number;\n requestPage: number;\n pageSize: number;\n total?: number;\n pagesToCache: number;\n cache: {\n type: CacheType;\n start: number;\n end: number;\n };\n };\n}\n\nexport type EntitiesPaginationActions = {\n loadEntitiesPage: ActionCreator<\n string,\n (props: {\n index: number;\n forceLoad?: boolean;\n }) => { index: number; forceLoad?: boolean } & Action<string>\n >;\n loadEntitiesPageSuccess: ActionCreator<string, () => Action<string>>;\n loadEntitiesPageFail: ActionCreator<string, () => Action<string>>;\n loadEntitiesNextPage: ActionCreator<string, () => Action<string>>;\n loadEntitiesPreviousPage: ActionCreator<string, () => Action<string>>;\n loadEntitiesFirstPage: ActionCreator<\n string,\n (forceLoad?: boolean) => { forceLoad?: boolean } & Action<string>\n >;\n loadEntitiesLastPage: ActionCreator<string, () => Action<string>>;\n clearEntitiesPagesCache: ActionCreator<string, () => Action<string>>;\n};\n\nexport type EntitiesPaginationSelectors<T> = {\n selectEntitiesCurrentPageList: (\n state: LoadEntitiesState<T> & EntitiesPaginationState,\n ) => T[];\n selectEntitiesCurrentPage: (\n state: LoadEntitiesState<T> & EntitiesPaginationState,\n ) => PageModel<T>;\n selectEntitiesPagedRequest: (\n state: LoadEntitiesState<T> & EntitiesPaginationState,\n ) => PagedRequest;\n selectEntitiesCurrentPageInfo: (\n state: LoadEntitiesState<T> & EntitiesPaginationState,\n ) => PageInfoModel;\n isLoadingEntitiesCurrentPage: (\n state: LoadEntitiesState<T> & EntitiesPaginationState,\n ) => boolean;\n};\n\nexport type EntitiesPaginationMutators<Entity> = {\n mergePaginatedEntities<\n S extends LoadEntitiesState<Entity> & EntitiesPaginationState,\n >(\n entities: Entity[],\n total: number | undefined,\n state: S,\n ): S;\n setEntitiesPage<\n Entity,\n S extends LoadEntitiesState<Entity> & EntitiesPaginationState,\n >(\n state: S,\n index: number,\n ): S;\n};\n\nexport interface PageModel<T> {\n entities: T[];\n isLoading: boolean;\n pageIndex: number;\n total: number | undefined;\n pageSize: number;\n pagesCount: number | undefined;\n hasPrevious: boolean;\n hasNext: boolean;\n}\n\nexport interface PageInfoModel {\n pageIndex: number;\n total: number | undefined;\n pageSize: number;\n pagesCount: number | undefined;\n hasPrevious: boolean;\n hasNext: boolean;\n cacheType: CacheType;\n}\n\nexport interface PagedRequest {\n startIndex: number;\n size: number;\n page: number;\n}\n\nexport const entitiesPaginationTraitKey = 'pagination';\n\nexport interface EntitiesPaginationConfig {\n cacheType?: CacheType;\n pageSize?: number;\n currentPage?: number;\n pagesToCache?: number;\n}\n\nexport interface EntitiesPaginationKeyedConfig {\n pagination?: EntitiesPaginationConfig;\n}\n","import { Injectable } from '@angular/core';\nimport { TraitEffect, Type } from '@ngrx-traits/core';\nimport { createEffect, ofType } from '@ngrx/effects';\nimport { asyncScheduler, EMPTY, of, pipe, timer } from 'rxjs';\nimport {\n concatMap,\n debounce,\n distinctUntilChanged,\n first,\n map,\n pairwise,\n startWith,\n} from 'rxjs/operators';\n\nimport { EntitiesPaginationActions } from '../entities-pagination';\nimport {\n LoadEntitiesActions,\n LoadEntitiesSelectors,\n} from '../load-entities/load-entities.model';\nimport {\n FilterEntitiesKeyedConfig,\n FilterEntitiesSelectors,\n} from './filter-entities.model';\nimport { ƟFilterEntitiesActions } from './filter-entities.model.internal';\n\nexport function createFilterTraitEffects<Entity, F>(\n allActions: ƟFilterEntitiesActions<F> &\n LoadEntitiesActions<Entity> &\n EntitiesPaginationActions,\n allSelectors: FilterEntitiesSelectors<Entity, F> &\n LoadEntitiesSelectors<Entity>,\n allConfigs: FilterEntitiesKeyedConfig<Entity, F>,\n): Type<TraitEffect>[] {\n const traitConfig = allConfigs.filter;\n @Injectable()\n class FilterEffect extends TraitEffect {\n storeFilter$ = createEffect(\n () =>\n ({\n debounce: debounceTime = traitConfig!.defaultDebounceTime,\n scheduler = asyncScheduler,\n } = {}) =>\n this.actions$.pipe(\n ofType(allActions.filterEntities),\n debounce((value) =>\n value?.forceLoad ? of({}) : timer(debounceTime, scheduler),\n ),\n concatMap((payload) =>\n payload.patch\n ? this.store.select(allSelectors.selectEntitiesFilter).pipe(\n first(),\n map((storedFilters) => ({\n ...payload,\n filters: { ...storedFilters, ...payload?.filters },\n })),\n )\n : of(payload),\n ),\n distinctUntilChanged(\n (previous, current) =>\n !current?.forceLoad &&\n JSON.stringify(previous?.filters) ===\n JSON.stringify(current?.filters),\n ),\n traitConfig?.isRemoteFilter\n ? pipe(\n startWith({\n filters: traitConfig.defaultFilter as F,\n patch: false,\n }),\n pairwise(),\n concatMap(([previous, current]) =>\n traitConfig?.isRemoteFilter!(\n previous?.filters,\n current?.filters,\n )\n ? [\n allActions.storeEntitiesFilter({\n filters: current?.filters,\n patch: current?.patch,\n }),\n allActions.loadEntities(),\n ]\n : [\n allActions.storeEntitiesFilter({\n filters: current?.filters,\n patch: current?.patch,\n }),\n ],\n ),\n )\n : map((action) =>\n allActions.storeEntitiesFilter({\n filters: action?.filters,\n patch: action?.patch,\n }),\n ),\n ),\n );\n\n loadEntities$ =\n (!traitConfig?.filterFn || traitConfig?.isRemoteFilter) &&\n createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions['storeEntitiesFilter']),\n concatMap(() =>\n allActions?.loadEntitiesFirstPage\n ? [\n allActions.clearEntitiesPagesCache(),\n allActions.loadEntitiesFirstPage(),\n ]\n : [allActions.loadEntities()],\n ),\n );\n });\n }\n\n return [FilterEffect];\n}\n","import { createReducer, on } from '@ngrx/store';\nimport {\n LoadEntitiesActions,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\nimport {\n FilterEntitiesKeyedConfig,\n FilterEntitiesMutators,\n FilterEntitiesState,\n} from './filter-entities.model';\nimport { ƟFilterEntitiesActions } from './filter-entities.model.internal';\n\nexport function createFilterInitialState<Entity, F>(\n previousInitialState: any,\n allConfigs: FilterEntitiesKeyedConfig<Entity, F>\n): LoadEntitiesState<Entity> & FilterEntitiesState<F> {\n return {\n ...previousInitialState,\n filters: allConfigs?.filter?.defaultFilter,\n };\n}\n\nexport function createFilterTraitReducer<\n T,\n F,\n S extends LoadEntitiesState<T> & FilterEntitiesState<F>\n>(\n initialState: S,\n allActions: ƟFilterEntitiesActions<F> & LoadEntitiesActions<T>,\n allMutators: FilterEntitiesMutators<T, F>\n) {\n return createReducer(\n initialState,\n on(allActions.storeEntitiesFilter, (state, { filters }) =>\n allMutators.setEntitiesFilters(filters, state)\n )\n );\n}\n","import { Action, ActionCreator } from '@ngrx/store/src/models';\n\nimport { LoadEntitiesState } from '../load-entities/load-entities.model';\n\nexport interface FilterEntitiesState<F> {\n filters?: F;\n}\n\ntype FilterPatchConditionalType<F, P> = P extends true ? Partial<F> : F;\n\nexport interface FilterActionOverload<F> {\n <P extends boolean>(props?: {\n filters: FilterPatchConditionalType<F, P>;\n forceLoad?: boolean;\n patch: P;\n }): {\n filters: FilterPatchConditionalType<F, P>;\n forceLoad: boolean;\n patch: P;\n } & Action<string>;\n (props?: { filters: F; forceLoad?: boolean }): {\n filters: F;\n forceLoad: boolean;\n patch: boolean;\n } & Action<string>;\n}\n\nexport type FilterEntitiesActions<F> = {\n /**\n * Store the filters param (read using selectFilter) and fires the loadEntities action\n * if the filters param has changed, this call is also debounce by default, to disable this\n * behavior you can use the forceLoad param as true or defaultDebounceTime to 0 in the trait config\n * to disable permanently.\n * If the `patch` param is set to true (default is false), the filters are merged with the previous value in the store,\n * otherwise they are replaced.\n */\n filterEntities: ActionCreator<string, FilterActionOverload<F>>;\n};\nexport type FilterEntitiesSelectors<T, F> = {\n /**\n * Returns the stored filters set by the filter action\n * @param state\n */\n selectEntitiesFilter: (\n state: LoadEntitiesState<T> & FilterEntitiesState<F>,\n ) => F | undefined;\n};\n\nexport type FilterEntitiesMutators<T, F> = {\n setEntitiesFilters<S extends LoadEntitiesState<T> & FilterEntitiesState<F>>(\n filter: F | undefined,\n state: S,\n ): S;\n};\n\nexport const filterEntitiesTraitKey = 'filter';\n\nexport type FilterEntitiesConfig<T, F> = {\n defaultFilter?: F;\n filterFn?: (filter: F, entity: T) => boolean;\n defaultDebounceTime?: number;\n isRemoteFilter?: (previous: F | undefined, current: F | undefined) => boolean;\n};\n\nexport type FilterEntitiesKeyedConfig<T, F> = {\n filter?: FilterEntitiesConfig<T, F>;\n};\n","import {\n FilterEntitiesMutators,\n FilterEntitiesState,\n} from './filter-entities.model';\nimport { LoadEntitiesState } from '../load-entities';\n\nexport function createFilterTraitMutators<Entity, F>(): FilterEntitiesMutators<\n Entity,\n F\n> {\n function setEntitiesFilters<\n S extends LoadEntitiesState<Entity> & FilterEntitiesState<F>\n >(filters: F, state: S) {\n return {\n ...state,\n filters,\n };\n }\n return { setEntitiesFilters };\n}\n","import { createAction } from '@ngrx/store';\nimport {\n FilterActionOverload,\n FilterEntitiesActions,\n} from './filter-entities.model';\nimport { ActionCreator } from '@ngrx/store/src/models';\nimport { ƟFilterEntitiesActions } from './filter-entities.model.internal';\n\nexport function createFilterTraitActions<F>(\n actionsGroupKey: string,\n entitiesName: string\n): FilterEntitiesActions<F> {\n const actions: ƟFilterEntitiesActions<F> = {\n filterEntities: createAction(\n `${actionsGroupKey} Filter ${entitiesName}`,\n (props?: {\n filters: F | Partial<F>;\n forceLoad?: boolean;\n patch?: boolean;\n }) => ({\n filters: props?.filters,\n forceLoad: props?.forceLoad,\n patch: props?.patch,\n })\n ) as ActionCreator<string, FilterActionOverload<F>>,\n storeEntitiesFilter: createAction(\n `${actionsGroupKey} Store ${entitiesName} Filter`,\n (props: { filters?: F; patch?: boolean }) => ({\n filters: props?.filters,\n patch: props?.patch,\n })\n ),\n };\n return actions;\n}\n","import {\n EntitiesPaginationActions,\n entitiesPaginationTraitKey,\n} from '../entities-pagination/entities-pagination.model';\nimport { createFilterTraitEffects } from './filter-entities.trait.effect';\nimport {\n createFilterInitialState,\n createFilterTraitReducer,\n} from './filter-entities.trait.reducer';\nimport {\n FilterEntitiesConfig,\n FilterEntitiesKeyedConfig,\n FilterEntitiesSelectors,\n filterEntitiesTraitKey,\n} from './filter-entities.model';\nimport { createFilterTraitSelectors } from './filter-entities.trait.selectors';\nimport {\n LoadEntitiesActions,\n LoadEntitiesSelectors,\n loadEntitiesTraitKey,\n} from '../load-entities/load-entities.model';\nimport { createFilterTraitMutators } from './filter-entities.trait.mutators';\nimport { createTraitFactory } from '@ngrx-traits/core';\nimport { createFilterTraitActions } from './filter-entities.trait.actions';\nimport { ƟFilterEntitiesActions } from './filter-entities.model.internal';\nimport {\n TraitActionsFactoryConfig,\n TraitInitialStateFactoryConfig,\n} from '@ngrx-traits/core';\n\n/**\n * Generates the ngrx code needed to filter a list of entities locally or remotely, adds a filter\n * action and a selectFilter selector, the filter action is debounced and the filter will only\n * call the loadEntities action if the params have changed, so there is no need to implement that in\n * the components. The filter action has a `forceLoad` param which can\n * be use to skip that restriction for one call or setting the `defaultDebounceTime` to 0 for all calls.\n * Calling the filter action will also replace the `filters` param in the store, if the `patch` param is set\n * the filters are merged with the previous value in the store.\n * @param traitConfig - Config object fot the trait factory\n * @param traitConfig.defaultFilter - Initial value for the filter\n * @param traitConfig.filterFn - Function to filter entities in memory, if not present then its expected\n * is filtered by the backend unless isRemoteFilter is defned\n * @param traitConfig.defaultDebounceTime - Value in milliseconds. Default to 400ms\n * @param traitConfig.isRemoteFilter - Function to when it returns true it fires loadEntities so a remote\n * backend filtering can run, otherwise it uses filterFn to do a local filtering\n *\n * @example\n * // The following trait config\n *\n * export interface TestState\n * extends LoadEntitiesState<Todo>, FilterEntitiesState<TodoFilter>{}\n *\n * const traits = createEntityFeatureFactory(\n * {entityName: 'Todo'},\n * addLoadEntitiesTrait<Todo>(),\n * //addFilterEntitiesTrait<Todo,TodoFilter>() // no params uses remote filtering\n * addFilterEntitiesTrait<Todo,TodoFilter>({filterFn: (filter, entity) => // local filtering\n * !filter.content || !!entity.content?.includes(filter.content.toLowerCase())\n * // or use the following function to switch between remote search and local\n * // depending on which properties have changed in the filter\n * // isRemoteFilter: (previous, current) => previous?.someRemoteParam !== current?.someRemoteParam,\n * )({\n * actionsGroupKey: '[Todos]',\n * featureSelector: createFeatureSelector<TestState>>(\n * 'todos',\n * ),\n * });\n *\n * // adds following props to the state:\n * // filters?: TodoFilter;\n *\n * // generated actions\n * traits.actions.filterTodos()\n * // generated selectors\n * traits.selectors.selectTodosFilter()\n */\nexport function addFilterEntitiesTrait<Entity, F>({\n defaultDebounceTime = 400,\n defaultFilter,\n filterFn,\n isRemoteFilter,\n}: FilterEntitiesConfig<Entity, F> = {}) {\n return createTraitFactory({\n key: filterEntitiesTraitKey,\n depends: [entitiesPaginationTraitKey, loadEntitiesTraitKey],\n config: {\n defaultDebounceTime,\n defaultFilter,\n filterFn,\n isRemoteFilter,\n } as FilterEntitiesConfig<Entity, F>,\n actions: ({ actionsGroupKey, entitiesName }: TraitActionsFactoryConfig) =>\n createFilterTraitActions<F>(actionsGroupKey, entitiesName),\n selectors: () => createFilterTraitSelectors<Entity, F>(),\n mutators: () => createFilterTraitMutators<Entity, F>(),\n initialState: ({\n previousInitialState,\n allConfigs,\n }: TraitInitialStateFactoryConfig) =>\n createFilterInitialState<Entity, F>(\n previousInitialState,\n allConfigs as FilterEntitiesKeyedConfig<Entity, F>\n ),\n reducer: ({ initialState, allActions, allMutators }) =>\n createFilterTraitReducer(\n initialState,\n allActions as ƟFilterEntitiesActions<F> & LoadEntitiesActions<Entity>,\n allMutators\n ),\n effects: ({ allActions, allSelectors, allConfigs }) =>\n createFilterTraitEffects(\n allActions as ƟFilterEntitiesActions<F> &\n LoadEntitiesActions<Entity> &\n EntitiesPaginationActions,\n allSelectors as FilterEntitiesSelectors<Entity, F> &\n LoadEntitiesSelectors<Entity>,\n allConfigs\n ),\n });\n}\n","import { createSelector } from '@ngrx/store';\nimport {\n CacheType,\n EntitiesPaginationSelectors,\n EntitiesPaginationState,\n PageModel,\n} from './entities-pagination.model';\nimport {\n LoadEntitiesSelectors,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\nimport { FilterEntitiesKeyedConfig } from '../filter-entities/filter-entities.model';\n\nexport function createPaginationTraitSelectors<Entity>(\n previousSelectors: LoadEntitiesSelectors<Entity>,\n allConfigs: FilterEntitiesKeyedConfig<Entity, unknown>\n): EntitiesPaginationSelectors<Entity> {\n const { selectEntitiesList, isEntitiesLoading } = previousSelectors;\n\n const filterFunction = allConfigs?.filter?.filterFn;\n\n function selectPagination(\n state: LoadEntitiesState<Entity> & EntitiesPaginationState\n ) {\n return state.pagination;\n }\n const selectPaginationFiltered: (\n state: LoadEntitiesState<Entity> & EntitiesPaginationState\n ) => EntitiesPaginationState['pagination'] = filterFunction\n ? createSelector(\n selectEntitiesList,\n selectPagination,\n (entities, pagination) => {\n return {\n ...pagination,\n total: entities.length,\n cache: {\n ...pagination.cache,\n start: 0,\n end: entities.length,\n },\n };\n }\n )\n : selectPagination;\n\n const selectEntitiesCurrentPageList = createSelector(\n selectEntitiesList,\n selectPaginationFiltered,\n (entities: Entity[], pagination) => {\n const page = pagination.currentPage;\n const startIndex = page * pagination.pageSize - pagination.cache.start;\n let endIndex = startIndex + pagination.pageSize;\n endIndex =\n endIndex < pagination.cache.end ? endIndex : pagination.cache.end;\n return entities.slice(startIndex, endIndex);\n }\n );\n\n const selectEntitiesCurrentPageInfo = createSelector(\n selectPaginationFiltered,\n (pagination) => {\n const pagesCount =\n pagination.total && pagination.total > 0\n ? Math.ceil(pagination.total / pagination.pageSize)\n : undefined;\n return {\n pageIndex: pagination.currentPage,\n total: pagination.total,\n pageSize: pagination.pageSize,\n pagesCount,\n hasPrevious: pagination.currentPage - 1 >= 0,\n hasNext:\n pagesCount && pagination.total && pagination.total > 0\n ? pagination.currentPage + 1 < pagesCount\n : true,\n cacheType: pagination.cache.type,\n };\n }\n );\n\n function isEntitiesPageInCache(\n page: number,\n pagination: {\n currentPage: number;\n requestPage: number;\n pageSize: number;\n total?: number;\n pagesToCache: number;\n cache: { type: CacheType; start: number; end: number };\n }\n ) {\n const startIndex = page * pagination.pageSize;\n let endIndex = startIndex + pagination.pageSize - 1;\n endIndex =\n pagination.total && endIndex > pagination.total\n ? pagination.total - 1\n : endIndex;\n return (\n startIndex >= pagination.cache.start && endIndex <= pagination.cache.end\n );\n }\n\n const isEntitiesCurrentPageInCache = createSelector(\n selectPaginationFiltered,\n (pagination) => {\n const page = pagination.currentPage;\n return isEntitiesPageInCache(page, pagination);\n }\n );\n const isEntitiesNextPageInCache = createSelector(\n selectPaginationFiltered,\n (pagination) => {\n const page = pagination.currentPage + 1;\n return isEntitiesPageInCache(page, pagination);\n }\n );\n const isLoadingEntitiesCurrentPage = createSelector(\n isEntitiesLoading,\n selectPagination,\n (isLoading, pagination) =>\n isLoading && pagination.requestPage === pagination.currentPage\n );\n\n const selectEntitiesCurrentPage = createSelector(\n selectEntitiesCurrentPageList,\n selectEntitiesCurrentPageInfo,\n isLoadingEntitiesCurrentPage,\n (entities, pageInfo, isLoading) =>\n ({\n entities,\n isLoading,\n ...pageInfo,\n } as PageModel<Entity>)\n );\n\n const selectEntitiesPagedRequest = createSelector(\n selectPagination,\n (pagination) => ({\n startIndex: pagination.pageSize * pagination.requestPage,\n size: pagination.pageSize * pagination.pagesToCache,\n page: pagination.requestPage,\n })\n );\n\n const selectors = {\n selectEntitiesCurrentPageList,\n isEntitiesNextPageInCache,\n isEntitiesCurrentPageInCache,\n selectEntitiesCurrentPage,\n selectEntitiesPagedRequest,\n selectEntitiesCurrentPageInfo,\n isLoadingEntitiesCurrentPage,\n };\n return selectors;\n}\n","import { EntitiesPaginationActions } from './entities-pagination.model';\nimport { createAction, props } from '@ngrx/store';\nimport { ƟPaginationActions } from './entities-pagination.model.internal';\n\nexport function createPaginationTraitActions(\n actionsGroupKey: string,\n entitiesName: string\n): EntitiesPaginationActions {\n const actions: ƟPaginationActions = {\n loadEntitiesPage: createAction(\n `${actionsGroupKey} Load ${entitiesName} Page`,\n ({ index, forceLoad }: { index: number; forceLoad?: boolean }) => ({\n index,\n forceLoad,\n })\n ),\n loadEntitiesPageSuccess: createAction(\n `${actionsGroupKey} Load ${entitiesName}\n Page Success`\n ),\n loadEntitiesPageFail: createAction(\n `${actionsGroupKey} Load ${entitiesName} Page Fail`\n ),\n loadEntitiesPreviousPage: createAction(\n `${actionsGroupKey} Load Previous ${entitiesName} Page`\n ),\n loadEntitiesNextPage: createAction(\n `${actionsGroupKey} Load Next ${entitiesName} Page`\n ),\n loadEntitiesFirstPage: createAction(\n `${actionsGroupKey} Load First ${entitiesName} Page`,\n (forceLoad?: boolean) => ({ forceLoad })\n ),\n loadEntitiesLastPage: createAction(\n `${actionsGroupKey} Load Last ${entitiesName} Page`\n ),\n clearEntitiesPagesCache: createAction(\n `${actionsGroupKey} Clear ${entitiesName} Cache`\n ),\n setEntitiesRequestPage: createAction(\n `${actionsGroupKey} Set ${entitiesName} Request Page`,\n props<{ index: number }>()\n ),\n };\n return actions;\n}\n","import {\n FilterEntitiesActions,\n FilterEntitiesKeyedConfig,\n} from '../filter-entities/filter-entities.model';\nimport { createReducer, on } from '@ngrx/store';\n\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesMutators,\n LoadEntitiesSelectors,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\nimport {\n EntitiesPaginationKeyedConfig,\n EntitiesPaginationMutators,\n EntitiesPaginationState,\n} from './entities-pagination.model';\nimport { CrudEntitiesActions } from '../crud-entities';\nimport { ƟPaginationActions } from './entities-pagination.model.internal';\nimport { insertIf } from '@ngrx-traits/core';\nimport { ƟFilterEntitiesActions } from '../filter-entities/filter-entities.model.internal';\n\nexport function createPaginationInitialState<Entity>(\n previousInitialState: any,\n allConfigs: EntitiesPaginationKeyedConfig\n): LoadEntitiesState<Entity> & EntitiesPaginationState {\n const { currentPage, pageSize, cacheType, pagesToCache } =\n allConfigs.pagination!;\n\n return {\n ...previousInitialState,\n pagination: {\n pageSize,\n currentPage,\n requestPage: currentPage,\n pagesToCache,\n cache: {\n type: cacheType,\n start: 0,\n end: 0,\n },\n },\n };\n}\n\nexport function createPaginationTraitReducer<\n Entity,\n S extends LoadEntitiesState<Entity> & EntitiesPaginationState\n>(\n initialState: S,\n allActions: ƟPaginationActions &\n ƟFilterEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n CrudEntitiesActions<Entity>,\n allSelectors: LoadEntitiesSelectors<Entity>,\n allMutators: EntitiesPaginationMutators<Entity> &\n LoadEntitiesMutators<Entity>,\n allConfigs: FilterEntitiesKeyedConfig<Entity, unknown> &\n LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig\n) {\n function addToCacheTotal<\n S extends LoadEntitiesState<Entity> & EntitiesPaginationState\n >(state: S, add: number) {\n return {\n ...state,\n pagination: {\n ...state.pagination,\n total: (state.pagination.total ?? 0) + add,\n },\n };\n }\n\n function clearPagesCache<\n S extends LoadEntitiesState<Entity> & EntitiesPaginationState\n >(state: S): S {\n return {\n ...state,\n entities: {},\n ids: [],\n pagination: {\n ...state.pagination,\n currentPage: 0,\n total: 0,\n cache: { ...state.pagination.cache, start: 0, end: 0 },\n },\n };\n }\n\n function recalculateTotal<\n S extends LoadEntitiesState<Entity> & EntitiesPaginationState\n >(state: S): S {\n const total = allSelectors.selectEntitiesTotal(state);\n return {\n ...state,\n status: 'success',\n pagination: {\n ...state.pagination,\n currentPage: 0,\n total,\n cache: {\n ...state.pagination.cache,\n start: 0,\n end: total,\n },\n },\n };\n }\n\n const filterRemote = !allConfigs?.filter?.filterFn;\n\n return createReducer(\n initialState,\n on(allActions.loadEntitiesPage, (state, { index }) =>\n allMutators.setEntitiesPage(state, index)\n ),\n on(allActions.setEntitiesRequestPage, (state, { index }) => ({\n ...state,\n pagination: {\n ...state.pagination,\n requestPage: index,\n },\n status: 'loading',\n })),\n on(allActions.loadEntitiesPageSuccess, (state) => ({\n ...state,\n status: 'success',\n })),\n on(allActions.loadEntitiesPageFail, (state) => ({\n ...state,\n status: 'fail',\n })),\n on(allActions.clearEntitiesPagesCache, (state) => clearPagesCache(state)),\n on(allActions.loadEntitiesSuccess, (state, { entities, total }) =>\n allMutators.mergePaginatedEntities(entities, total, {\n ...state,\n status: 'success',\n })\n ),\n ...insertIf<S>(allActions.addEntities, () =>\n on(allActions.addEntities, (state, { entities }) =>\n addToCacheTotal(state, entities.length)\n )\n ),\n ...insertIf<S>(allActions.removeEntities, () =>\n on(allActions.removeEntities, (state, { keys }) =>\n addToCacheTotal(state, -keys.length)\n )\n ),\n ...insertIf<S>(allActions.storeEntitiesFilter, () =>\n on(allActions.storeEntitiesFilter, (state) => recalculateTotal(state))\n ),\n ...insertIf<S>(allActions.removeAllEntities, () =>\n on(allActions.removeAllEntities, (state) => clearPagesCache(state))\n )\n );\n}\n","import { Injectable } from '@angular/core';\nimport { TraitEffect } from '@ngrx-traits/core';\nimport { Type } from '@ngrx-traits/core';\nimport { createEffect, ofType } from '@ngrx/effects';\nimport { concatLatestFrom } from '@ngrx/operators';\nimport {\n concatMap,\n concatMapTo,\n filter,\n first,\n map,\n tap,\n} from 'rxjs/operators';\n\nimport { CrudEntitiesActions } from '../crud-entities/crud-entities.model';\nimport { FilterEntitiesActions } from '../filter-entities/filter-entities.model';\nimport { LoadEntitiesActions, LoadEntitiesSelectors } from '../load-entities';\nimport { EntitiesPaginationSelectors } from './entities-pagination.model';\nimport {\n ƟEntitiesPaginationSelectors,\n ƟPaginationActions,\n} from './entities-pagination.model.internal';\n\nexport function createPaginationTraitEffects<Entity>(\n allActions: ƟPaginationActions &\n FilterEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n CrudEntitiesActions<Entity>,\n allSelectors: LoadEntitiesSelectors<Entity> &\n EntitiesPaginationSelectors<Entity>,\n): Type<TraitEffect>[] {\n @Injectable()\n class PaginationEffect extends TraitEffect {\n loadPage$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.loadEntitiesPage),\n concatLatestFrom(() =>\n this.store.select(\n (allSelectors as unknown as ƟEntitiesPaginationSelectors<Entity>)\n .isEntitiesCurrentPageInCache,\n ),\n ),\n map(([{ forceLoad }, isInCache]) =>\n !forceLoad && isInCache\n ? allActions.loadEntitiesPageSuccess()\n : allActions.loadEntities(),\n ),\n );\n });\n\n preloadNextPage$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.loadEntitiesPageSuccess),\n concatMapTo(\n this.store\n .select(allSelectors.selectEntitiesCurrentPageInfo)\n .pipe(first()),\n ),\n filter(\n (pageInfo) =>\n !!pageInfo.total &&\n pageInfo.hasNext &&\n pageInfo.cacheType !== 'full',\n ),\n concatMap((pageInfo) =>\n this.store\n .select(\n (allSelectors as unknown as ƟEntitiesPaginationSelectors<Entity>)\n .isEntitiesNextPageInCache,\n )\n .pipe(\n first(),\n map((isInCache) => (!isInCache && pageInfo) || undefined),\n ),\n ),\n filter((pageInfo) => !!pageInfo),\n concatMap((pageInfo) => [\n allActions.setEntitiesRequestPage({ index: pageInfo!.pageIndex + 1 }),\n allActions.loadEntities(),\n ]),\n );\n });\n\n loadFirstPage$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.loadEntitiesFirstPage),\n map(() => allActions.loadEntitiesPage({ index: 0 })),\n );\n });\n\n loadPreviousPage$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.loadEntitiesPreviousPage),\n concatMapTo(\n this.store\n .select(allSelectors.selectEntitiesCurrentPageInfo)\n .pipe(first()),\n ),\n map((page) =>\n page.hasPrevious\n ? allActions.loadEntitiesPage({ index: page.pageIndex - 1 })\n : allActions.loadEntitiesPageFail(),\n ),\n );\n });\n\n loadNextPage$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.loadEntitiesNextPage),\n concatMapTo(\n this.store\n .select(allSelectors.selectEntitiesCurrentPageInfo)\n .pipe(first()),\n ),\n map((page) =>\n page.hasNext\n ? allActions.loadEntitiesPage({ index: page.pageIndex + 1 })\n : allActions.loadEntitiesPageFail(),\n ),\n );\n });\n\n loadLastPage$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.loadEntitiesLastPage),\n concatMapTo(\n this.store\n .select(allSelectors.selectEntitiesCurrentPageInfo)\n .pipe(first()),\n ),\n map((page) =>\n page.hasNext && page.pagesCount\n ? allActions.loadEntitiesPage({ index: page.pagesCount - 1 })\n : allActions.loadEntitiesPageFail(),\n ),\n );\n });\n }\n return [PaginationEffect];\n}\n","import {\n EntitiesPaginationMutators,\n EntitiesPaginationSelectors,\n EntitiesPaginationState,\n} from './entities-pagination.model';\nimport { LoadEntitiesKeyedConfig, LoadEntitiesState } from '../load-entities';\n\nexport function createPaginationTraitMutators<Entity>(\n allSelectors: EntitiesPaginationSelectors<Entity>,\n allConfigs: LoadEntitiesKeyedConfig<Entity>\n): EntitiesPaginationMutators<Entity> {\n const adapter = allConfigs.loadEntities!.adapter;\n\n function mergePaginatedEntities<\n S extends LoadEntitiesState<Entity> & EntitiesPaginationState\n >(entities: Entity[], total = undefined, state: S): S {\n const cacheType = state.pagination.cache.type;\n\n switch (cacheType) {\n case 'full':\n return adapter.setAll(entities, {\n ...state,\n pagination: {\n ...state.pagination,\n total: entities.length,\n cache: {\n ...state.pagination.cache,\n start: 0,\n end: entities.length,\n },\n },\n });\n case 'partial': {\n const isPreloadNextPages =\n state.pagination.currentPage + 1 === state.pagination.requestPage;\n\n const start = state.pagination.currentPage * state.pagination.pageSize;\n const newEntities = isPreloadNextPages\n ? [...allSelectors.selectEntitiesCurrentPageList(state), ...entities]\n : entities;\n return adapter.setAll(newEntities, {\n ...state,\n pagination: {\n ...state.pagination,\n total,\n cache: {\n ...state.pagination.cache,\n start,\n end: start + entities.length,\n },\n },\n });\n }\n case 'grow':\n return adapter.addMany(entities, {\n ...state,\n pagination: {\n ...state.pagination,\n total,\n cache: {\n ...state.pagination.cache,\n end: state.ids.length + entities.length,\n },\n },\n });\n }\n\n return state;\n }\n function setEntitiesPage<\n Entity,\n S extends LoadEntitiesState<Entity> & EntitiesPaginationState\n >(state: S, index: number) {\n return {\n ...state,\n pagination: {\n ...state.pagination,\n currentPage: index,\n requestPage: index,\n },\n status: 'loading',\n };\n }\n return { mergePaginatedEntities, setEntitiesPage };\n}\n","import {\n EntitiesPaginationConfig,\n EntitiesPaginationKeyedConfig,\n EntitiesPaginationMutators,\n EntitiesPaginationSelectors,\n entitiesPaginationTraitKey,\n} from './entities-pagination.model';\nimport { createPaginationTraitSelectors } from './entities-pagination.trait.selectors';\nimport { createPaginationTraitActions } from './entities-pagination.trait.actions';\nimport {\n FilterEntitiesActions,\n FilterEntitiesKeyedConfig,\n} from '../filter-entities/filter-entities.model';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesMutators,\n LoadEntitiesSelectors,\n loadEntitiesTraitKey,\n} from '../load-entities/load-entities.model';\nimport {\n createPaginationInitialState,\n createPaginationTraitReducer,\n} from './entities-pagination.trait.reducer';\nimport { createPaginationTraitEffects } from './entities-pagination.trait.effects';\nimport { createTraitFactory } from '@ngrx-traits/core';\nimport { CrudEntitiesActions } from '../crud-entities/crud-entities.model';\nimport { createPaginationTraitMutators } from './entities-pagination.trait.mutators';\nimport {\n ƟEntitiesPaginationSelectors,\n ƟPaginationActions,\n} from './entities-pagination.model.internal';\nimport {\n TraitActionsFactoryConfig,\n TraitInitialStateFactoryConfig,\n TraitSelectorsFactoryConfig,\n} from '@ngrx-traits/core';\nimport { ƟFilterEntitiesActions } from '../filter-entities/filter-entities.model.internal';\n\n/**\n * Generates ngrx code to paginate a list of entities, this has 3 cache `cacheType`\n * - 'full': The full result is cache in memory and split in pages to render, useful\n * for small result but not so small that requires been render in pages\n * - 'partial': Backend returns partial results because is are to big, this has a cache a few pages forward\n * to avoid calling the backend on each page, the cache is clean when a new loadEntities is required\n * - 'grow': Similar to partial that the backend returns partial result, but in this case the cache grows,\n * after each loadEntities the cache is appended to the previous cache, this mode is ideal for infinite scrolls,\n * where you will only call loadNextPage.\n * To make the pagination experience smoother the loadEntities action is fired when the current page is equal\n * to the last cached page, so while the user is reading the page more pages are being loading in the background.\n * @param config\n * @param config.cacheType - Default to 'partial', change the cache mode\n * @param config.pageSize - Default to 10, number of entities on each page\n * @param config.currentPage - Default to 0, starting page\n * @param config.pagesToCache - Default to 3, used in partial and grow cache mode, is the number of\n * extra pages kept in cache to avoid calling the backend on each page\n *\n * @example\n * // The following trait config\n *\n * export interface TestState\n * extends EntityAndStatusState<Todo>,EntitiesPaginationState{}\n *\n * const traits = createEntityFeatureFactory(\n * {entityName: 'Todo'},\n * addLoadEntitiesTrait<Todo>(),\n * addEntitiesPaginationTrait<Todo>()\n * )({\n * actionsGroupKey: '[Todos]',\n * featureSelector: createFeatureSelector<TestState>>(\n * 'todos',\n * ),\n * });\n *\n * // adds following props to the state:\n * // pagination: {\n * // currentPage: number;\n * // requestPage: number;\n * // pageSize: number;\n * // total?: number;\n * // pagesToCache: number;\n * // cache: {\n * // type: 'full' | 'partial' | 'grow';\n * // start: number;\n * // end: number;\n * // }\n * // }\n *\n * // generated actions\n * traits.actions.loadTodosPage({index})\n * traits.actions.loadTodosPageSuccess()\n * traits.actions.loadTodosPageFail()\n * traits.actions.loadTodosNextPage()\n * traits.actions.loadTodosPreviousPage()\n * traits.actions.loadTodosFirstPage()\n * traits.actions.loadTodosLastPage()\n * traits.actions.clearTodosPagesCache()\n * // generated selectors\n * traits.selectors.selectTodosCurrentPageList()\n * traits.selectors.isLoadingTodosCurrentPage()\n * // use isLoadingTodosPage over isLoadingTodos (which will return true even\n * // if the page loading is not the current one)\n * traits.selectors.selectTodosCurrentPage()\n * traits.selectors.selectTodosPagedRequest()// use in effects to get paging parameter\n * traits.selectors.selectTodosCurrentPageInfo()\n */\nexport function addEntitiesPaginationTrait<Entity>({\n cacheType = 'partial',\n pageSize = 10,\n currentPage = 0,\n pagesToCache = 3,\n}: EntitiesPaginationConfig = {}) {\n return createTraitFactory({\n key: entitiesPaginationTraitKey,\n depends: [loadEntitiesTraitKey],\n config: {\n cacheType,\n pageSize,\n currentPage,\n pagesToCache,\n } as EntitiesPaginationConfig,\n actions: ({ actionsGroupKey, entitiesName }: TraitActionsFactoryConfig) =>\n createPaginationTraitActions(actionsGroupKey, entitiesName),\n selectors: ({\n previousSelectors,\n allConfigs,\n }: TraitSelectorsFactoryConfig) =>\n createPaginationTraitSelectors<Entity>(\n previousSelectors as LoadEntitiesSelectors<Entity>,\n allConfigs as EntitiesPaginationKeyedConfig &\n FilterEntitiesKeyedConfig<Entity, unknown>\n ),\n mutators: ({ allSelectors, allConfigs }) =>\n createPaginationTraitMutators<Entity>(\n allSelectors as EntitiesPaginationSelectors<Entity> &\n LoadEntitiesSelectors<Entity>,\n allConfigs as EntitiesPaginationKeyedConfig &\n LoadEntitiesKeyedConfig<Entity>\n ),\n initialState: ({\n previousInitialState,\n allConfigs,\n }: TraitInitialStateFactoryConfig) =>\n createPaginationInitialState<Entity>(\n previousInitialState,\n allConfigs as EntitiesPaginationKeyedConfig\n ),\n reducer: ({\n initialState,\n allActions,\n allSelectors,\n allMutators,\n allConfigs,\n }) =>\n createPaginationTraitReducer(\n initialState,\n allActions as ƟPaginationActions &\n ƟFilterEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n CrudEntitiesActions<Entity>,\n allSelectors as ƟEntitiesPaginationSelectors<Entity> &\n LoadEntitiesSelectors<Entity>,\n allMutators as EntitiesPaginationMutators<Entity> &\n LoadEntitiesMutators<Entity>,\n allConfigs as FilterEntitiesKeyedConfig<Entity, unknown> &\n LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig\n ),\n effects: ({ allActions, allSelectors }) =>\n createPaginationTraitEffects(\n allActions as ƟPaginationActions &\n FilterEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n CrudEntitiesActions<Entity>,\n allSelectors as ƟEntitiesPaginationSelectors<Entity> &\n LoadEntitiesSelectors<Entity>\n ),\n });\n}\n","import { createAction, props } from '@ngrx/store';\nimport { SelectEntitiesActions } from './select-entities.model';\n\nexport function createSelectEntitiesTraitActions(\n actionsGroupKey: string,\n entitiesName: string\n): SelectEntitiesActions {\n return {\n selectEntities: createAction(\n `${actionsGroupKey} Select ${entitiesName}`,\n props<{ id: number | string }>()\n ),\n deselectEntities: createAction(\n `${actionsGroupKey} Deselect ${entitiesName}`,\n props<{ id: number | string }>()\n ),\n toggleSelectEntities: createAction(\n `${actionsGroupKey} Toggle Select ${entitiesName}`,\n props<{ id: number | string }>()\n ),\n toggleSelectAllEntities: createAction(\n `${actionsGroupKey} Toggle Select All ${entitiesName}`\n ),\n clearEntitiesSelection: createAction(\n `${actionsGroupKey} Clear ${entitiesName} Selection`\n ),\n };\n}\n","import { SelectEntitiesState } from './select-entities.model';\nimport { LoadEntitiesState } from '../load-entities';\n\nexport function deselectEntities<S extends SelectEntitiesState>(\n id: number | string,\n state: S\n): S {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [id]: _value, ...selectedIds } = state.selectedIds;\n return {\n ...state,\n selectedIds: selectedIds,\n };\n}\n\nexport function selectEntities<S extends SelectEntitiesState>(\n id: number | string,\n state: S\n): S {\n return {\n ...state,\n selectedIds: { ...state.selectedIds, [id]: true },\n };\n}\n\nexport function toggleSelectEntities<S extends SelectEntitiesState>(\n id: number | string,\n state: S\n): S {\n const selected = state.selectedIds[id];\n if (selected) {\n return deselectEntities(id, state);\n } else {\n return selectEntities(id, state);\n }\n}\nexport function clearEntitiesSelection<S extends SelectEntitiesState>(\n state: S\n): S {\n return { ...state, selectedIds: {} };\n}\n\nexport function selectTotalSelectedEntities<\n Entity,\n S extends LoadEntitiesState<Entity> & SelectEntitiesState\n>(state: S): number {\n return Object.keys(state.selectedIds).length;\n}\n","import { createSelector } from '@ngrx/store';\nimport { selectTotalSelectedEntities } from './select-entities.utils';\nimport {\n SelectEntitiesSelectors,\n SelectEntitiesState,\n} from './select-entities.model';\nimport { LoadEntitiesSelectors, LoadEntitiesState } from '../load-entities';\nimport { Dictionary } from '@ngrx/entity/src/models';\n\nexport function createSelectEntitiesTraitSelectors<Entity>(\n previousSelectors: LoadEntitiesSelectors<Entity>\n): SelectEntitiesSelectors<Entity> {\n const { selectEntitiesMap, selectEntitiesTotal } = previousSelectors;\n\n function selectEntitiesIdsSelectedMap(\n state: LoadEntitiesState<Entity> & SelectEntitiesState\n ) {\n return state.selectedIds;\n }\n const selectEntitiesIdsSelectedList = createSelector(\n selectEntitiesIdsSelectedMap,\n (ids: Dictionary<boolean>) => Object.keys(ids)\n );\n const selectEntitiesSelectedMap = createSelector(\n selectEntitiesIdsSelectedList,\n selectEntitiesMap,\n (selectedIds, entities) =>\n selectedIds.reduce((acum: { [id: string]: Entity | undefined }, id) => {\n acum[id] = entities[id];\n return acum;\n }, {})\n );\n const selectEntitiesSelectedList = createSelector(\n selectEntitiesIdsSelectedList,\n selectEntitiesMap,\n (selectedIds, entities) => selectedIds.map((id) => entities[id]!)\n );\n\n const isAllEntitiesSelected = createSelector(\n (state: LoadEntitiesState<Entity> & SelectEntitiesState) =>\n selectEntitiesTotal(state),\n selectTotalSelectedEntities,\n (total, totalSelected) =>\n totalSelected > 0 && totalSelected === total\n ? 'all'\n : totalSelected === 0\n ? 'none'\n : 'some'\n );\n\n return {\n selectEntitiesIdsSelectedMap,\n selectEntitiesIdsSelectedList,\n selectEntitiesSelectedMap,\n selectEntitiesSelectedList,\n selectTotalSelectedEntities,\n isAllEntitiesSelected,\n };\n}\n","import {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\nimport {\n SortEntitiesActions,\n SortEntitiesKeyedConfig,\n} from '../sort-entities/sort-entities.model';\nimport {\n SelectEntitiesMutators,\n SelectEntitiesActions,\n SelectEntitiesState,\n} from './select-entities.model';\nimport { CrudEntitiesActions } from '../crud-entities/crud-entities.model';\nimport { Update } from '@ngrx/entity/src/models';\nimport { insertIf } from '@ngrx-traits/core';\nimport { createReducer, on } from '@ngrx/store';\nimport {\n EntitiesPaginationActions,\n EntitiesPaginationKeyedConfig,\n} from '../entities-pagination/entities-pagination.model';\nimport { FilterEntitiesActions } from '../filter-entities';\n\nexport function createSelectEntitiesInitialState<Entity>(\n previousInitialState: any\n): LoadEntitiesState<Entity> & SelectEntitiesState {\n return {\n ...previousInitialState,\n selectedIds: {},\n };\n}\n\nexport function createSelectEntitiesTraitReducer<\n Entity,\n S extends LoadEntitiesState<Entity> & SelectEntitiesState\n>(\n initialState: S,\n allActions: SelectEntitiesActions &\n CrudEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n FilterEntitiesActions<any> &\n EntitiesPaginationActions,\n allMutators: SelectEntitiesMutators<Entity>,\n allConfigs: LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig &\n SortEntitiesKeyedConfig<Entity>\n) {\n const { adapter } = allConfigs.loadEntities!;\n const sortRemote = allConfigs.sort?.remote;\n const paginationCacheType = allConfigs.pagination?.cacheType;\n\n function updateSelectedIdsChanged<\n S extends LoadEntitiesState<Entity> & SelectEntitiesState\n >(state: S, updates: Update<Entity>[]) {\n const changedIds = updates.reduce((acc, updated) => {\n const id = adapter.selectId(updated.changes as Entity);\n if (id && id !== updated.id && state.selectedIds[updated.id] != null) {\n acc.push(updated);\n return acc;\n }\n return acc;\n }, [] as Update<Entity>[]);\n if (changedIds.length) {\n const selectedIds = { ...state.selectedIds };\n changedIds.forEach((updated) => {\n const id = adapter.selectId(updated.changes as Entity);\n const value = selectedIds[updated.id];\n delete selectedIds[updated.id];\n selectedIds[id] = value;\n });\n return { ...state, selectedIds };\n }\n\n return state;\n }\n\n return createReducer(\n initialState,\n on(allActions.selectEntities, (state, { id }) =>\n allMutators.selectEntities(id, state)\n ),\n on(allActions.deselectEntities, (state, { id }) =>\n allMutators.deselectEntities(id, state)\n ),\n on(allActions.toggleSelectEntities, (state, { id }) =>\n allMutators.toggleSelectEntities(id, state)\n ),\n on(allActions.toggleSelectAllEntities, (state) =>\n allMutators.toggleSelectAllEntities(state)\n ),\n ...insertIf<S>(allActions.removeEntities, () =>\n on(allActions.removeEntities, (state, { keys }) => {\n const selectedIds = { ...state.selectedIds };\n keys.forEach((v: string | number) => {\n delete selectedIds[v];\n });\n return { ...state, selectedIds };\n })\n ),\n ...insertIf<S>(allActions.updateEntities, () =>\n on(allActions.updateEntities, (state, { updates }) =>\n updateSelectedIdsChanged(state, updates)\n )\n ),\n on(allActions.clearEntitiesSelection, (state) =>\n allMutators.clearEntitiesSelection(state)\n ),\n ...insertIf<S>(allActions.removeAllEntities, () =>\n on(allActions.removeAllEntities, (state) =>\n allMutators.clearEntitiesSelection(state)\n )\n ),\n ...insertIf<S>(sortRemote, () =>\n on(allActions.sortEntities, (state) =>\n allMutators.clearEntitiesSelection(state)\n )\n ),\n ...insertIf<S>(allActions.filterEntities, () =>\n on(allActions.filterEntities, (state) =>\n allMutators.clearEntitiesSelection(state)\n )\n ),\n ...insertIf<S>(!allActions.loadEntitiesPageSuccess, () =>\n on(allActions.loadEntitiesSuccess, (state) =>\n allMutators.clearEntitiesSelection(state)\n )\n ),\n ...insertIf<S>(\n !!allActions.loadEntitiesPageSuccess && paginationCacheType === 'partial',\n () =>\n on(allActions.loadEntitiesPageSuccess, (state) =>\n allMutators.clearEntitiesSelection(state)\n )\n )\n );\n}\n","import {\n SelectEntitiesMutators,\n SelectEntitiesSelectors,\n SelectEntitiesState,\n} from './select-entities.model';\nimport { toMap } from '@ngrx-traits/core';\nimport {\n clearEntitiesSelection,\n deselectEntities,\n selectEntities,\n toggleSelectEntities,\n} from './select-entities.utils';\nimport { LoadEntitiesState } from '../load-entities';\n\nexport function createSelectEntitiesTraitMutators<Entity>({\n isAllEntitiesSelected,\n}: SelectEntitiesSelectors<Entity>): SelectEntitiesMutators<Entity> {\n function toggleSelectAllEntities<\n S extends LoadEntitiesState<Entity> & SelectEntitiesState\n >(state: S): S {\n const allSelected = isAllEntitiesSelected(state);\n if (allSelected === 'all') {\n return {\n ...state,\n selectedIds: {},\n };\n } else {\n return {\n ...state,\n selectedIds: toMap(state.ids),\n };\n }\n }\n\n return {\n selectEntities,\n deselectEntities,\n toggleSelectEntities,\n toggleSelectAllEntities,\n clearEntitiesSelection,\n };\n}\n","import { createSelectEntitiesTraitActions } from './select-entities.trait.actions';\nimport { SortEntitiesActions, SortEntitiesKeyedConfig } from '../sort-entities';\nimport { createSelectEntitiesTraitSelectors } from './select-entities.trait.selectors';\nimport {\n SelectEntitiesSelectors,\n SelectEntitiesActions,\n} from './select-entities.model';\nimport {\n EntitiesPaginationActions,\n EntitiesPaginationKeyedConfig,\n} from '../entities-pagination/entities-pagination.model';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesSelectors,\n loadEntitiesTraitKey,\n} from '../load-entities/load-entities.model';\nimport { createTraitFactory } from '@ngrx-traits/core';\nimport { CrudEntitiesActions } from '../crud-entities/crud-entities.model';\nimport {\n createSelectEntitiesInitialState,\n createSelectEntitiesTraitReducer,\n} from './select-entities.trait.reducer';\nimport { createSelectEntitiesTraitMutators } from './select-entities.trait.mutators';\nimport { FilterEntitiesActions } from '../filter-entities';\nimport {\n TraitActionsFactoryConfig,\n TraitInitialStateFactoryConfig,\n TraitSelectorsFactoryConfig,\n TraitStateMutatorsFactoryConfig,\n} from '@ngrx-traits/core';\n\n/**\n * Generates ngrx code to add multi selection to a list\n *\n * @example\n * // The following trait config\n *\n * export interface TestState\n * extends EntityAndStatusState<Todo>,MultipleSelectionState{}\n *\n * const traits = createEntityFeatureFactory(\n * {entityName: 'Todo'},\n * addLoadEntitiesTrait<Todo>(),\n * addSelectEntitiesTrait<Todo>()\n * )({\n * actionsGroupKey: '[Todos]',\n * featureSelector: createFeatureSelector<TestState>>(\n * 'todos',\n * ),\n * });\n *\n * // adds following props to the state:\n * // selectedIds: Dictionary<boolean>;\n *\n * // generated actions\n * traits.actions.selectTodos({id})\n * traits.actions.deselectTodos({id})\n * traits.actions.toggleSectTodos({id})\n * traits.actions.toggleSelectAllTodos()\n * traits.actions.clearTodosSelection()\n * //generated selectors\n * traits.selectors.isAllTodosSelected()\n * traits.selectors.selectTodosIdsSelectedMap()\n * traits.selectors.selectTodosIdsSelectedList()\n * traits.selectors.selectTodosSelectedMap()\n * traits.selectors.selectTodosSelectedList()\n * traits.selectors.selectTotalSelectedTodos()\n */\nexport function addSelectEntitiesTrait<Entity>() {\n return createTraitFactory({\n key: 'SelectEntities',\n depends: [loadEntitiesTraitKey],\n actions: ({ actionsGroupKey, entitiesName }: TraitActionsFactoryConfig) =>\n createSelectEntitiesTraitActions(actionsGroupKey, entitiesName),\n selectors: ({ previousSelectors }: TraitSelectorsFactoryConfig) =>\n createSelectEntitiesTraitSelectors<Entity>(\n previousSelectors as LoadEntitiesSelectors<Entity>\n ),\n initialState: ({ previousInitialState }: TraitInitialStateFactoryConfig) =>\n createSelectEntitiesInitialState<Entity>(previousInitialState),\n mutators: ({ allSelectors }: TraitStateMutatorsFactoryConfig) =>\n createSelectEntitiesTraitMutators<Entity>(\n allSelectors as SelectEntitiesSelectors<Entity>\n ),\n reducer: ({ initialState, allActions, allMutators, allConfigs }) =>\n createSelectEntitiesTraitReducer(\n initialState,\n allActions as SelectEntitiesActions &\n CrudEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n FilterEntitiesActions<any> &\n EntitiesPaginationActions,\n allMutators,\n allConfigs as LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig &\n SortEntitiesKeyedConfig<Entity>\n ),\n });\n}\n","import { createAction, props } from '@ngrx/store';\nimport { SelectEntityActions } from './select-entity.model';\n\nexport function createSelectEntityTraitActions(\n actionsGroupKey: string,\n entityName: string\n): SelectEntityActions {\n return {\n selectEntity: createAction(\n `${actionsGroupKey} Select ${entityName}`,\n props<{ id: string | number }>()\n ),\n deselectEntity: createAction(`${actionsGroupKey} Deselect ${entityName}`),\n toggleSelectEntity: createAction(\n `${actionsGroupKey} Toggle Select ${entityName}`,\n props<{ id: string | number }>()\n ),\n };\n}\n","import {\n SelectEntitySelectors,\n SelectEntityState,\n} from './select-entity.model';\nimport { LoadEntitiesState } from '../load-entities';\n\nexport function createSelectEntityTraitSelectors<\n Entity\n>(): SelectEntitySelectors<Entity> {\n function selectEntityIdSelected(state: SelectEntityState) {\n return state.selectedId;\n }\n function selectEntitySelected<Entity>(\n state: LoadEntitiesState<Entity> & SelectEntityState\n ) {\n return (state.selectedId && state.entities[state.selectedId]) || undefined;\n }\n\n return {\n selectEntityIdSelected,\n selectEntitySelected,\n };\n}\n","import { createReducer, on } from '@ngrx/store';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\nimport {\n SortEntitiesActions,\n SortEntitiesKeyedConfig,\n} from '../sort-entities/sort-entities.model';\nimport {\n SelectEntityActions,\n SelectEntityKeyedConfig,\n SelectEntityMutators,\n SelectEntityState,\n} from './select-entity.model';\nimport { CrudEntitiesActions } from '../crud-entities/crud-entities.model';\nimport { insertIf } from '@ngrx-traits/core';\nimport {\n EntitiesPaginationActions,\n EntitiesPaginationKeyedConfig,\n} from '../entities-pagination/entities-pagination.model';\nimport { FilterEntitiesActions } from '../filter-entities';\nimport { createSelectEntityTraitActions } from './select-entity.trait.actions';\n\nexport function createSelectEntityInitialState<Entity>(\n previousInitialState: any,\n allConfigs: SelectEntityKeyedConfig\n): LoadEntitiesState<Entity> & SelectEntityState {\n const selectedId = allConfigs.singleSelection?.selectedId;\n return {\n ...previousInitialState,\n selectedId,\n };\n}\nexport function createSelectEntityTraitReducer<\n Entity,\n S extends LoadEntitiesState<Entity> & SelectEntityState\n>(\n initialState: S,\n allActions: SelectEntityActions &\n CrudEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n EntitiesPaginationActions &\n FilterEntitiesActions<any> &\n LoadEntitiesActions<Entity>,\n allMutators: SelectEntityMutators<Entity>,\n allConfigs: SelectEntityKeyedConfig &\n LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig &\n SortEntitiesKeyedConfig<Entity>\n) {\n const { adapter } = allConfigs.loadEntities!;\n\n const sortRemote = allConfigs.sort?.remote;\n const paginationCacheType = allConfigs.pagination?.cacheType;\n\n return createReducer(\n initialState,\n on(allActions.selectEntity, (state, { id }) =>\n allMutators.selectEntity(id, state)\n ),\n on(allActions.deselectEntity, (state) => allMutators.deselectEntity(state)),\n on(allActions.toggleSelectEntity, (state, { id }) =>\n allMutators.toggleSelectEntity(id, state)\n ),\n ...insertIf<S>(allActions.removeAllEntities, () =>\n on(allActions.removeAllEntities, (state) =>\n allMutators.deselectEntity(state)\n )\n ),\n ...insertIf<S>(sortRemote, () =>\n on(allActions.sortEntities, (state) => allMutators.deselectEntity(state))\n ),\n ...insertIf<S>(allActions.filterEntities, () =>\n on(allActions.filterEntities, (state) =>\n allMutators.deselectEntity(state)\n )\n ),\n ...insertIf<S>(!allActions.loadEntitiesPageSuccess, () =>\n on(allActions.loadEntitiesSuccess, (state) =>\n allMutators.deselectEntity(state)\n )\n ),\n ...insertIf<S>(\n !!allActions.loadEntitiesPageSuccess && paginationCacheType === 'partial',\n () =>\n on(allActions.loadEntitiesPageSuccess, (state) =>\n allMutators.deselectEntity(state)\n )\n ),\n ...insertIf<S>(allActions.removeEntities, () =>\n on(allActions.removeEntities, (state, { keys }) => {\n const shouldDeselect = keys.some(\n (v: string | number) => v === state.selectedId\n );\n return shouldDeselect\n ? {\n ...state,\n selectedId: undefined,\n }\n : state;\n })\n ),\n ...insertIf<S>(allActions.updateEntities, () =>\n on(allActions.updateEntities, (state, { updates }) => {\n const change = updates.find((updated) => {\n const id = adapter.selectId(updated.changes as Entity);\n return id && id !== updated.id && state.selectedId === updated.id;\n });\n return change\n ? {\n ...state,\n selectedId: adapter.selectId(change.changes as Entity),\n }\n : state;\n })\n )\n );\n}\n","import { SelectEntityMutators, SelectEntityState } from './select-entity.model';\nimport { LoadEntitiesState } from '../load-entities';\n\nexport function createSelectEntityTraitMutators<\n Entity\n>(): SelectEntityMutators<Entity> {\n function selectEntity<\n S extends LoadEntitiesState<Entity> & SelectEntityState\n >(id: string | number, state: S) {\n return {\n ...state,\n selectedId: id,\n };\n }\n function deselectEntity<\n S extends LoadEntitiesState<Entity> & SelectEntityState\n >(state: S) {\n return {\n ...state,\n selectedId: undefined,\n };\n }\n function toggleSelectEntity<\n S extends LoadEntitiesState<Entity> & SelectEntityState\n >(id: string | number, state: S) {\n return {\n ...state,\n selectedId: state.selectedId === id ? undefined : id,\n };\n }\n\n return {\n selectEntity,\n deselectEntity,\n toggleSelectEntity,\n };\n}\n","import {\n createTraitFactory,\n TraitActionsFactoryConfig,\n TraitInitialStateFactoryConfig,\n} from '@ngrx-traits/core';\n\nimport { createSelectEntityTraitActions } from './select-entity.trait.actions';\nimport { createSelectEntityTraitSelectors } from './select-entity.trait.selectors';\nimport {\n createSelectEntityInitialState,\n createSelectEntityTraitReducer,\n} from './select-entity.trait.reducer';\nimport { createSelectEntityTraitMutators } from './select-entity.trait.mutators';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n loadEntitiesTraitKey,\n} from '../load-entities/load-entities.model';\nimport {\n SortEntitiesActions,\n SortEntitiesKeyedConfig,\n} from '../sort-entities/sort-entities.model';\nimport {\n SelectEntityActions,\n SelectEntityConfig,\n SelectEntityKeyedConfig,\n} from './select-entity.model';\nimport { CrudEntitiesActions } from '../crud-entities/crud-entities.model';\nimport {\n EntitiesPaginationActions,\n EntitiesPaginationKeyedConfig,\n} from '../entities-pagination/entities-pagination.model';\nimport { FilterEntitiesActions } from '../filter-entities';\n\n/**\n * Generates ngrx code to add single selection to a list\n * @param config\n * @param config.selectedId - Default selected id\n *\n * @example\n * // The following trait config\n *\n * export interface TestState\n * extends EntityAndStatusState<Todo>,SelectEntityState{}\n *\n * const traits = createEntityFeatureFactory(\n * {entityName: 'Todo'},\n * addLoadEntitiesTrait<Todo>(),\n * addSelectEntityTrait<Todo>()\n * )({\n * actionsGroupKey: '[Todos]',\n * featureSelector: createFeatureSelector<TestState>>(\n * 'todos',\n * ),\n * });\n *\n * // adds following props to the state:\n * // selectedId?: number | string;\n *\n * // generated actions\n * traits.actions.selectTodo({id})\n * traits.actions.deselectTodo()\n * traits.actions.toggleSelectTodo({id})\n * //generated selectors\n * traits.selectors.selectTodoIdSelected()\n * traits.selectors.selectTodoSelected()\n */\nexport function addSelectEntityTrait<Entity>(config?: SelectEntityConfig) {\n return createTraitFactory({\n key: 'singleSelection',\n depends: [loadEntitiesTraitKey],\n config,\n actions: ({ actionsGroupKey, entityName }: TraitActionsFactoryConfig) =>\n createSelectEntityTraitActions(actionsGroupKey, entityName),\n selectors: () => createSelectEntityTraitSelectors<Entity>(),\n mutators: () => createSelectEntityTraitMutators(),\n initialState: ({\n previousInitialState,\n allConfigs,\n }: TraitInitialStateFactoryConfig) =>\n createSelectEntityInitialState<Entity>(\n previousInitialState,\n allConfigs as SelectEntityKeyedConfig\n ),\n reducer: ({ initialState, allActions, allMutators, allConfigs }) =>\n createSelectEntityTraitReducer(\n initialState,\n allActions as SelectEntityActions &\n CrudEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n EntitiesPaginationActions &\n FilterEntitiesActions<any> &\n LoadEntitiesActions<Entity>,\n allMutators,\n allConfigs as SelectEntityKeyedConfig &\n LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig &\n SortEntitiesKeyedConfig<Entity>\n ),\n });\n}\n","import { KeyedConfig } from '@ngrx-traits/core';\nimport { Action } from '@ngrx/store';\nimport { ActionCreator } from '@ngrx/store/src/models';\n\nimport { LoadEntitiesState } from '../load-entities/load-entities.model';\n\nexport interface SelectEntityState {\n selectedId?: number | string;\n}\n\nexport type SelectEntityActions = {\n selectEntity: ActionCreator<\n string,\n (props: { id: number | string }) => { id: number | string } & Action<string>\n >;\n deselectEntity: ActionCreator<string, () => Action<string>>;\n toggleSelectEntity: ActionCreator<\n string,\n (props: { id: number | string }) => { id: number | string } & Action<string>\n >;\n};\n\nexport type SelectEntitySelectors<T> = {\n selectEntityIdSelected: (\n state: LoadEntitiesState<T> & SelectEntityState,\n ) => string | number | undefined;\n selectEntitySelected: (\n state: LoadEntitiesState<T> & SelectEntityState,\n ) => T | undefined;\n};\n\nexport type SelectEntityMutators<T> = {\n selectEntity<S extends LoadEntitiesState<T> & SelectEntityState>(\n id: string | number,\n state: S,\n ): S;\n deselectEntity<S extends LoadEntitiesState<T> & SelectEntityState>(\n state: S,\n ): S;\n toggleSelectEntity<S extends LoadEntitiesState<T> & SelectEntityState>(\n id: string | number,\n state: S,\n ): S;\n};\n\nexport interface SelectEntityConfig {\n selectedId?: string | number;\n}\n\nexport const selectEntityTraitKey = 'singleSelection';\nexport type SelectEntityKeyedConfig = KeyedConfig<\n typeof selectEntityTraitKey,\n SelectEntityConfig\n>;\n","import { Predicate, Update } from '@ngrx/entity/src/models';\nimport { ActionCreator } from '@ngrx/store';\nimport { Action } from '@ngrx/store/src/models';\n\nimport { LoadEntitiesState } from '../load-entities/load-entities.model';\n\nexport enum ChangeType {\n CREATED = 'c',\n UPDATED = 'u',\n DELETED = 'd',\n}\nexport interface Change<T> {\n id: string | number;\n changeType: ChangeType;\n entityChanges?: Partial<T>;\n}\nexport interface EntityChange<T> {\n entity: T;\n changeType: ChangeType;\n}\nexport interface CrudEntitiesState<T> {\n changes: Change<T>[];\n}\n\nexport type CrudEntitiesActions<T> = {\n addEntities: ActionCreator<\n string,\n (...entities: T[]) => { entities: T[] } & Action<string>\n >;\n removeEntities: ActionCreator<\n string,\n (\n ...keys: string[] | number[]\n ) => { keys: string[] | number[] } & Action<string>\n >;\n updateEntities: ActionCreator<\n string,\n (...updates: Update<T>[]) => { updates: Update<T>[] } & Action<string>\n >;\n upsertEntities: ActionCreator<\n string,\n (...entities: T[]) => { entities: T[] } & Action<string>\n >;\n\n removeAllEntities: ActionCreator<\n string,\n (predicate?: Predicate<T>) => { predicate?: Predicate<T> } & Action<string>\n >;\n clearEntitiesChanges: ActionCreator<string, () => Action<string>>;\n};\n\nexport type CrudEntitiesSelectors<Entity> = {\n /**\n * Return all changes made to the list plus entities, and can be filtered\n * by change type\n * @param state\n * @param props\n */\n selectEntitiesChangesList: (\n state: LoadEntitiesState<Entity> & CrudEntitiesState<Entity>,\n ) => EntityChange<Entity>[];\n\n /**\n * Returns the entities plus the kind of change,\n * filters redundant changes ideal for a batch update\n * if you add and remove the same and items this changes are remove from the list\n * if you add and then update one or more times, the updates are discarded\n * if you update one or more times and then remove, the updates are discarded\n * @param state\n */\n selectFilteredEntitiesChangesList: (\n state: LoadEntitiesState<Entity> & CrudEntitiesState<Entity>,\n ) => EntityChange<Entity>[];\n};\n\nexport type CrudEntitiesMutators<Entity> = {\n addEntities<S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>>(\n entities: Entity[],\n state: S,\n ): S;\n\n removeEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>,\n >(\n keys: string[],\n state: S,\n ): S;\n removeEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>,\n >(\n keys: number[],\n state: S,\n ): S;\n removeEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>,\n >(\n predicate: Predicate<Entity>,\n state: S,\n ): S;\n\n removeAllEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>,\n >(\n state: S,\n ): S;\n\n clearEntitiesChanges<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>,\n >(\n state: S,\n ): S;\n\n updateEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>,\n >(\n updates: Update<Entity>[],\n state: S,\n ): S;\n upsertEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>,\n >(\n entities: Entity[],\n state: S,\n ): S;\n};\n\nexport interface CrudEntitiesConfig {\n storeChanges?: boolean;\n}\nexport const crudEntitiesTraitKey = 'crud';\n\nexport interface CrudEntitiesKeyedConfig {\n crud?: CrudEntitiesConfig;\n}\n","import { CrudEntitiesActions } from './crud-entities.model';\nimport { createAction } from '@ngrx/store';\nimport { Predicate, Update } from '@ngrx/entity';\n\nexport function createCrudTraitActions<Entity>(\n actionsGroupKey: string,\n entitiesName: string\n): CrudEntitiesActions<Entity> {\n return {\n addEntities: createAction(\n `${actionsGroupKey} Add ${entitiesName}`,\n (...entities: Entity[]) => ({\n entities,\n })\n ),\n removeEntities: createAction(\n `${actionsGroupKey} Remove ${entitiesName}`,\n (...keys: string[] | number[]) => ({\n keys,\n })\n ),\n updateEntities: createAction(\n `${actionsGroupKey} Update ${entitiesName}`,\n (...updates: Update<Entity>[]) => ({\n updates,\n })\n ),\n upsertEntities: createAction(\n `${actionsGroupKey} Upsert ${entitiesName}`,\n (...entities: Entity[]) => ({\n entities,\n })\n ),\n removeAllEntities: createAction(\n `${actionsGroupKey} Remove All ${entitiesName}`,\n (predicate?: Predicate<Entity>) => ({ predicate })\n ),\n clearEntitiesChanges: createAction(\n `${actionsGroupKey} Clear ${entitiesName} Changes`\n ),\n };\n}\n","import { createSelector } from '@ngrx/store';\nimport {\n Change,\n ChangeType,\n CrudEntitiesSelectors,\n CrudEntitiesState,\n EntityChange,\n} from './crud-entities.model';\nimport {\n LoadEntitiesSelectors,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\nimport { Dictionary } from '@ngrx/entity';\n\nexport function createCrudTraitSelectors<Entity>(\n previousSelectors: LoadEntitiesSelectors<Entity>\n): CrudEntitiesSelectors<Entity> {\n function selectChanges<S extends CrudEntitiesState<Entity>>(state: S) {\n return state.changes;\n }\n\n function selectFilteredChanges<S extends CrudEntitiesState<Entity>>(\n state: S\n ) {\n const cache: { [id: string]: ChangeType[] } = {};\n return state.changes.reduce((acc, value) => {\n const changes = cache[value.id];\n if (!changes) {\n cache[value.id] = [value.changeType];\n acc.push(value);\n return acc;\n }\n\n if (value.changeType === ChangeType.UPDATED) {\n return acc;\n }\n\n if (\n value.changeType === ChangeType.DELETED &&\n changes.includes(ChangeType.CREATED)\n ) {\n delete cache[value.id];\n return acc.filter((v) => v.id !== value.id);\n }\n\n if (value.changeType === ChangeType.DELETED) {\n delete cache[value.id];\n const newAcc = acc.filter((v) => v.id !== value.id);\n newAcc.push(value);\n return newAcc;\n }\n return acc;\n }, [] as Change<Entity>[]);\n }\n\n const { selectEntitiesMap } = previousSelectors;\n\n const selectEntitiesChangesList = createSelector(\n (state: LoadEntitiesState<Entity> & CrudEntitiesState<Entity>) =>\n selectEntitiesMap(state),\n selectChanges,\n (entities: Dictionary<Entity>, changed: Change<Entity>[]) => {\n const map = changed.map(\n (change) =>\n ({\n changeType: change.changeType,\n entity: entities[change.id] ?? {\n id: change.id,\n },\n } as EntityChange<Entity>)\n );\n return map;\n }\n );\n\n const selectFilteredEntitiesChangesList = createSelector(\n selectFilteredChanges,\n (state: LoadEntitiesState<Entity> & CrudEntitiesState<Entity>) =>\n selectEntitiesMap(state),\n (changes, entities) =>\n changes.map((c) => {\n return {\n entity: entities[c.id] ?? { id: c.id },\n changeType: c.changeType,\n } as EntityChange<Entity>;\n })\n );\n\n return {\n selectEntitiesChangesList,\n selectFilteredEntitiesChangesList,\n };\n}\n","import {\n FilterEntitiesActions,\n FilterEntitiesKeyedConfig,\n} from '../filter-entities/filter-entities.model';\nimport { createReducer, on } from '@ngrx/store';\nimport {\n CrudEntitiesActions,\n CrudEntitiesKeyedConfig,\n CrudEntitiesMutators,\n CrudEntitiesState,\n} from './crud-entities.model';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesState,\n} from '../load-entities';\nimport { SortEntitiesActions, SortEntitiesKeyedConfig } from '../sort-entities';\nimport {\n EntitiesPaginationActions,\n EntitiesPaginationKeyedConfig,\n} from '../entities-pagination';\nimport { insertIf } from '@ngrx-traits/core';\n\nexport function createCrudInitialState<Entity>(\n previousInitialState: any\n): LoadEntitiesState<Entity> & CrudEntitiesState<Entity> {\n return {\n ...previousInitialState,\n changes: [],\n };\n}\nexport function createCrudTraitReducer<\n Entity,\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n>(\n initialState: S,\n allActions: CrudEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n FilterEntitiesActions<any> &\n EntitiesPaginationActions,\n allMutators: CrudEntitiesMutators<Entity>,\n allConfigs: CrudEntitiesKeyedConfig &\n FilterEntitiesKeyedConfig<Entity, unknown> &\n LoadEntitiesKeyedConfig<Entity> &\n SortEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig\n) {\n const sortRemote = allConfigs.sort?.remote;\n const filterRemote = allConfigs.filter && !allConfigs.filter?.filterFn;\n const paginationCacheType = allConfigs.pagination?.cacheType;\n\n return createReducer(\n initialState,\n on(allActions.addEntities, (state, { entities }) =>\n allMutators.addEntities(entities, state)\n ),\n on(allActions.updateEntities, (state, { updates }) =>\n allMutators.updateEntities(updates, state)\n ),\n on(allActions.upsertEntities, (state, { entities }) =>\n allMutators.upsertEntities(entities, state)\n ),\n on(allActions.removeEntities, (state, { keys }) =>\n allMutators.removeEntities(keys as any[], state)\n ),\n on(allActions.removeAllEntities, (state, { predicate }) =>\n predicate\n ? allMutators.removeEntities(predicate, state)\n : allMutators.removeAllEntities(state)\n ),\n on(allActions.clearEntitiesChanges, (state) =>\n allMutators.clearEntitiesChanges(state)\n ),\n ...insertIf<S>(sortRemote, () =>\n on(allActions.sortEntities, (state) =>\n allMutators.clearEntitiesChanges(state)\n )\n ),\n ...insertIf<S>(filterRemote, () =>\n on(allActions.filterEntities, (state) =>\n allMutators.clearEntitiesChanges(state)\n )\n ),\n ...insertIf<S>(!allActions.loadEntitiesPageSuccess, () =>\n on(allActions.loadEntitiesSuccess, (state) =>\n allMutators.clearEntitiesChanges(state)\n )\n ),\n ...insertIf<S>(\n !!allActions.loadEntitiesPageSuccess && paginationCacheType === 'partial',\n () =>\n on(allActions.loadEntitiesPageSuccess, (state) =>\n allMutators.clearEntitiesChanges(state)\n )\n )\n );\n}\n","import {\n Change,\n ChangeType,\n CrudEntitiesKeyedConfig,\n CrudEntitiesMutators,\n CrudEntitiesState,\n} from './crud-entities.model';\nimport { Predicate, Update } from '@ngrx/entity';\nimport {\n LoadEntitiesKeyedConfig,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\n\nexport function createCrudTraitMutators<Entity>(\n allConfigs: CrudEntitiesKeyedConfig & LoadEntitiesKeyedConfig<Entity>\n): CrudEntitiesMutators<Entity> {\n const { storeChanges } = allConfigs.crud || {};\n const adapter = allConfigs!.loadEntities!.adapter;\n\n function generateChangeEntry(\n entity: Entity,\n changeType: ChangeType,\n customId?: string | number\n ) {\n return {\n id: customId ?? adapter.selectId(entity),\n changeType,\n entityChanges: (storeChanges && entity) || undefined,\n };\n }\n\n function addEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(entities: Entity[], state: S, addFirst = false) {\n const changes = [\n ...state.changes,\n ...entities.map((entity) =>\n generateChangeEntry(entity, ChangeType.CREATED)\n ),\n ];\n if (!addFirst)\n return adapter.addMany(entities, {\n ...state,\n changes,\n });\n\n const newIds = entities.map((e) => adapter.selectId(e));\n const newEntities = { ...state.entities };\n entities.forEach((e) => {\n const id = adapter.selectId(e);\n newEntities[id] = e;\n });\n return {\n ...state,\n ids: [...newIds, ...state.ids],\n entities: newEntities,\n changes,\n };\n }\n\n function upsertEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(entities: Entity[], state: S) {\n const oldChanges = [...state.changes];\n const existingIds = adapter.getSelectors().selectIds(state) as string[];\n\n const [additions, updates] = entities.reduce(\n ([a, u], entity) =>\n existingIds.indexOf(adapter.selectId(entity as Entity) as string) !== -1\n ? [a, [...u, entity]]\n : [[...a, entity], u],\n [new Array<Entity>(), new Array<Entity>()]\n );\n\n return adapter.upsertMany(entities, {\n ...state,\n changes: [\n ...oldChanges,\n\n ...additions.map((entity) =>\n generateChangeEntry(entity, ChangeType.CREATED)\n ),\n ...updates.map((entity) =>\n generateChangeEntry(entity, ChangeType.UPDATED)\n ),\n ],\n });\n }\n\n function removeEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(keys: number[], state: S): S;\n function removeEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(keys: string[], state: S): S;\n function removeEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(predicate: Predicate<Entity>, state: S): S;\n function removeEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(keysOrPredicate: Predicate<Entity> | string[] | number[], state: S): S {\n if (typeof keysOrPredicate === 'function') {\n return adapter.removeMany(keysOrPredicate, {\n ...state,\n changes: [\n ...state.changes,\n ...(state.ids as any[]).map((id) => ({\n id,\n changeType: ChangeType.DELETED,\n })),\n ],\n });\n }\n\n return adapter.removeMany(keysOrPredicate as string[], {\n ...state,\n changes: [\n ...state.changes,\n ...(keysOrPredicate as string[]).map((key: string) => ({\n id: key,\n changeType: ChangeType.DELETED,\n })),\n ],\n });\n }\n function removeAllEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(state: S): S {\n return adapter.removeAll({\n ...state,\n changes: [\n ...state.changes,\n ...(state.ids as any[]).map((id) => ({\n id,\n changeType: ChangeType.DELETED,\n })),\n ],\n });\n }\n function clearEntitiesChanges<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(state: S) {\n return { ...state, changes: [] };\n }\n\n function updateEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(updates: Update<Entity>[], state: S) {\n const oldChanges = [...state.changes];\n updates.forEach((updated) => {\n const id = adapter.selectId(updated.changes as Entity);\n if (id && id !== updated.id) {\n // if the id changes update the id of pold changes\n const index = oldChanges.findIndex((v) => v.id === updated.id);\n const oldChange = oldChanges[index];\n oldChanges[index] = { ...oldChange, id };\n }\n });\n return adapter.updateMany(updates, {\n ...state,\n changes: [\n ...oldChanges,\n ...updates.map(\n (updated) =>\n ({\n id: adapter.selectId(updated.changes as Entity) ?? updated.id,\n changeType: ChangeType.UPDATED,\n entityChanges: (storeChanges && updated.changes) || undefined,\n } as Change<Entity>)\n ),\n ],\n });\n }\n\n return {\n addEntities,\n removeEntities,\n updateEntities,\n removeAllEntities,\n clearEntitiesChanges,\n upsertEntities,\n };\n}\n","import {\n createTraitFactory,\n TraitActionsFactoryConfig,\n TraitInitialStateFactoryConfig,\n TraitSelectorsFactoryConfig,\n TraitStateMutatorsFactoryConfig,\n} from '@ngrx-traits/core';\nimport { createCrudTraitActions } from './crud-entities.trait.actions';\nimport { createCrudTraitSelectors } from './crud-entities.trait.selectors';\nimport {\n createCrudInitialState,\n createCrudTraitReducer,\n} from './crud-entities.trait.reducer';\nimport {\n SortEntitiesActions,\n SortEntitiesKeyedConfig,\n} from '../sort-entities/sort-entities.model';\nimport {\n CrudEntitiesActions,\n CrudEntitiesConfig,\n CrudEntitiesKeyedConfig,\n crudEntitiesTraitKey,\n} from './crud-entities.model';\nimport {\n FilterEntitiesActions,\n FilterEntitiesKeyedConfig,\n} from '../filter-entities/filter-entities.model';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesSelectors,\n loadEntitiesTraitKey,\n} from '../load-entities/load-entities.model';\nimport {\n EntitiesPaginationActions,\n EntitiesPaginationKeyedConfig,\n} from '../entities-pagination/entities-pagination.model';\nimport { createCrudTraitMutators } from './crud-entities.trait.mutators';\n\n/**\n * Generates ngrx code to add, remove update, upsert entities on a list, it also\n * tracks the changes made, helpful for implementing batch updates. The `storeChanges` (false by default),\n * will store for add and update the changed entity props in the property `entityChanges` of the `Change` object.\n * @param config\n * @param config.storeChanges - Will store the changes made, default fals\n *\n * @example\n * // The following trait config\n *\n * export interface TestState\n * extends EntityAndStatusState<Todo>, CrudState<Todo>{}\n *\n * const traits = createEntityFeatureFactory(\n * {entityName: 'Todo'},\n * addLoadEntitiesTrait<Todo>(),\n * addCrudEntitiesTrait<Todo>()\n * )({\n * actionsGroupKey: '[Todos]',\n * featureSelector: createFeatureSelector<TestState>>(\n * 'todos',\n * ),\n * });\n *\n * // adds following props to the state:\n * // changes: Change<Todo>[];\n *\n * // generated actions\n * traits.actions.addTodos(entity1,entity2...)\n * traits.actions.updateTodos({id: id1, changes:{prop1}},{id: id2, changes:{prop2}} ...)\n * traits.actions.upsertTodos(entity1,entity2...)\n * traits.actions.removeAllTodos()\n * traits.actions.clearTodosChanges()\n * // generated selectors\n * traits.selectors.selectTodosChangesList()\n * traits.selectors.selectFilteredTodosChangesList()\n * traits.selectors.selectAllFilteredChanges()\n */\nexport function addCrudEntitiesTrait<Entity>({\n storeChanges = false,\n}: CrudEntitiesConfig = {}) {\n return createTraitFactory({\n key: crudEntitiesTraitKey,\n depends: [loadEntitiesTraitKey],\n config: { storeChanges } as CrudEntitiesConfig,\n actions: ({ actionsGroupKey, entitiesName }: TraitActionsFactoryConfig) =>\n createCrudTraitActions<Entity>(actionsGroupKey, entitiesName),\n selectors: ({ previousSelectors }: TraitSelectorsFactoryConfig) =>\n createCrudTraitSelectors<Entity>(\n previousSelectors as LoadEntitiesSelectors<Entity>\n ),\n mutators: ({ allConfigs }: TraitStateMutatorsFactoryConfig) =>\n createCrudTraitMutators<Entity>(\n allConfigs as CrudEntitiesKeyedConfig & LoadEntitiesKeyedConfig<Entity>\n ),\n initialState: ({ previousInitialState }: TraitInitialStateFactoryConfig) =>\n createCrudInitialState<Entity>(previousInitialState),\n reducer: ({ initialState, allActions, allMutators, allConfigs }) =>\n createCrudTraitReducer(\n initialState,\n allActions as CrudEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n FilterEntitiesActions<any> &\n EntitiesPaginationActions,\n allMutators,\n allConfigs as CrudEntitiesKeyedConfig &\n FilterEntitiesKeyedConfig<Entity, unknown> &\n LoadEntitiesKeyedConfig<Entity> &\n SortEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig\n ),\n });\n}\n","import { KeyedConfig } from '@ngrx-traits/core';\nimport { Action } from '@ngrx/store';\nimport { ActionCreator } from '@ngrx/store/src/models';\n\nimport { LoadEntitiesState } from '../load-entities/load-entities.model';\n\nexport declare type SortDirection = 'asc' | 'desc' | '';\n\nexport interface Sort<T> {\n /** The id of the column being sorted. */\n active: keyof T;\n /** The sort direction. */\n direction: SortDirection;\n}\n\nexport interface SortEntitiesState<T> {\n sort: {\n current: Sort<T>;\n default: Sort<T>;\n };\n}\n\nexport type SortEntitiesActions<T> = {\n sortEntities: ActionCreator<\n string,\n (props: Sort<T>) => Sort<T> & Action<string>\n >;\n /**\n * Sets the default sort back\n */\n resetEntitiesSort: ActionCreator<string, () => Action<string>>;\n};\n\nexport type SortEntitiesSelectors<T> = {\n selectEntitiesSort: (\n state: LoadEntitiesState<T> & SortEntitiesState<T>,\n ) => Sort<T>;\n};\n\nexport type SortEntitiesMutators<T> = {\n sortEntities<S extends LoadEntitiesState<T> & SortEntitiesState<T>>(\n { active, direction }: Sort<T>,\n state: S,\n ): S;\n};\n\nexport const sortTraitKey = 'sort';\n\nexport interface SortEntitiesConfig<T> {\n defaultSort: Sort<T>;\n remote: boolean;\n}\n\nexport type SortEntitiesKeyedConfig<T> = KeyedConfig<\n typeof sortTraitKey,\n SortEntitiesConfig<T>\n>;\n","import { Sort } from './sort-entities.model';\n\nconst MAX_SAFE_INTEGER = 9007199254740991;\n\nexport function _isNumberValue(value: any): boolean {\n // parseFloat(value) handles most of the cases we're interested in (it treats null, empty string,\n // and other non-number values as NaN, where Number just uses 0) but it considers the string\n // '123hello' to be a valid number. Therefore we also check if Number(value) is NaN.\n return !isNaN(parseFloat(value as any)) && !isNaN(Number(value));\n}\n\nfunction sortingDataAccessor<T>(\n data: T,\n sortHeaderId: string\n): string | number {\n const value = (data as { [key: string]: any })[sortHeaderId];\n\n if (_isNumberValue(value)) {\n const numberValue = Number(value);\n\n // Numbers beyond `MAX_SAFE_INTEGER` can't be compared reliably so we\n // leave them as strings. For more info: https://goo.gl/y5vbSg\n return numberValue < MAX_SAFE_INTEGER ? numberValue : value;\n }\n\n return value;\n}\n\n/**\n * @internal\n * @ignore\n * Gets a sorted copy of the data array based on the state of the Sort.\n * @param data The array of data that should be sorted.\n * @param sort The connected MatSort that holds the current sort state.\n */\nexport function sortData<T>(data: T[], sort: Sort<T>): T[] {\n const active = sort.active;\n const direction = sort.direction;\n if (!active || direction === '') {\n return data;\n }\n\n return data.sort((a, b) => {\n const valueA = sortingDataAccessor(a, active as string);\n const valueB = sortingDataAccessor(b, active as string);\n\n // If both valueA and valueB exist (truthy), then compare the two. Otherwise, check if\n // one value exists while the other doesn't. In this case, existing value should come last.\n // This avoids inconsistent results when comparing values to undefined/null.\n // If neither value exists, return 0 (equal).\n let comparatorResult = 0;\n if (valueA != null && valueB != null) {\n // Check if one value is greater than the other; if equal, comparatorResult should remain 0.\n\n if (typeof valueA === 'string' || typeof valueB === 'string') {\n // if either values are a string, then force both to be strings before localCompare\n comparatorResult = valueA.toString().localeCompare(valueB.toString());\n } else {\n if (valueA > valueB) {\n comparatorResult = 1;\n } else if (valueA < valueB) {\n comparatorResult = -1;\n }\n }\n } else if (valueA != null) {\n comparatorResult = 1;\n } else if (valueB != null) {\n comparatorResult = -1;\n }\n\n return comparatorResult * (direction === 'asc' ? 1 : -1);\n });\n}\n","import {\n LoadEntitiesKeyedConfig,\n LoadEntitiesSelectors,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\nimport {\n Sort,\n SortEntitiesMutators,\n SortEntitiesState,\n} from './sort-entities.model';\nimport { sortData } from './sort-entities.utils';\n\nexport function createSortTraitMutators<Entity>(\n { selectEntitiesList }: LoadEntitiesSelectors<Entity>,\n allConfigs: LoadEntitiesKeyedConfig<Entity>\n): SortEntitiesMutators<Entity> {\n const { remote } = allConfigs.sort!;\n\n function sortEntities<\n S extends LoadEntitiesState<Entity> & SortEntitiesState<Entity>\n >({ active, direction }: Sort<Entity>, state: S) {\n if (remote) {\n return {\n ...state,\n sort: { ...state.sort, current: { active, direction } },\n };\n }\n\n const { adapter } = allConfigs.loadEntities!;\n const entities = selectEntitiesList(state);\n const sortedIds = sortData(entities, { active, direction }).map((v) =>\n adapter.selectId(v)\n );\n return {\n ...state,\n ids: sortedIds,\n sort: { ...state.sort, current: { active, direction } },\n };\n }\n return {\n sortEntities,\n };\n}\n","import { createReducer, on } from '@ngrx/store';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesState,\n} from '../load-entities';\nimport {\n SortEntitiesActions,\n SortEntitiesKeyedConfig,\n SortEntitiesMutators,\n SortEntitiesState,\n} from './sort-entities.model';\n\nexport function createSortInitialState<Entity>(\n previousInitialState: any,\n allConfigs: SortEntitiesKeyedConfig<Entity>\n): LoadEntitiesState<Entity> & SortEntitiesState<Entity> {\n const { defaultSort } = allConfigs.sort!;\n\n return {\n ...previousInitialState,\n sort: {\n current: defaultSort,\n default: defaultSort,\n },\n };\n}\n\nexport function createSortTraitReducer<\n Entity,\n S extends LoadEntitiesState<Entity> &\n SortEntitiesState<Entity> = LoadEntitiesState<Entity> &\n SortEntitiesState<Entity>\n>(\n initialState: S,\n allActions: SortEntitiesActions<Entity> & LoadEntitiesActions<Entity>,\n allMutators: SortEntitiesMutators<Entity>,\n allConfigs: LoadEntitiesKeyedConfig<Entity> & SortEntitiesKeyedConfig<Entity>\n) {\n return createReducer(\n initialState,\n on(allActions.sortEntities, (state, { active, direction }) =>\n allMutators.sortEntities({ active, direction }, state)\n ),\n on(allActions.resetEntitiesSort, (state) =>\n allMutators.sortEntities(state.sort?.default, state)\n )\n );\n}\n","import {\n SortEntitiesSelectors,\n SortEntitiesState,\n} from './sort-entities.model';\n\nexport function createSortTraitSelectors<\n Entity\n>(): SortEntitiesSelectors<Entity> {\n function selectEntitiesSort(state: SortEntitiesState<Entity>) {\n return state.sort?.current;\n }\n return {\n selectEntitiesSort,\n };\n}\n","import { Injectable } from '@angular/core';\nimport { TraitEffect } from '@ngrx-traits/core';\nimport { createEffect, ofType } from '@ngrx/effects';\nimport { concatMap } from 'rxjs/operators';\nimport { Type } from '@ngrx-traits/core';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n} from '../load-entities/load-entities.model';\nimport {\n SortEntitiesActions,\n SortEntitiesKeyedConfig,\n} from './sort-entities.model';\nimport { EntitiesPaginationActions } from '../entities-pagination/entities-pagination.model';\n\nexport function createSortTraitEffect<Entity>(\n allActions: LoadEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n EntitiesPaginationActions,\n allConfigs: LoadEntitiesKeyedConfig<Entity> & SortEntitiesKeyedConfig<Entity>\n): Type<TraitEffect>[] {\n const { remote } = allConfigs.sort!;\n\n @Injectable()\n class SortEffect extends TraitEffect {\n remoteSort$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.sortEntities, allActions.resetEntitiesSort),\n concatMap(() =>\n allActions.loadEntitiesFirstPage\n ? [\n allActions.clearEntitiesPagesCache(),\n allActions.loadEntitiesFirstPage(),\n ]\n : [allActions.loadEntities()]\n )\n );\n });\n }\n return remote ? [SortEffect] : [];\n}\n","import { createAction, props } from '@ngrx/store';\nimport { Sort, SortEntitiesActions } from './sort-entities.model';\n\nexport function createSortTraitActions<Entity>(\n actionsGroupKey: string,\n entitiesName: string\n): SortEntitiesActions<Entity> {\n return {\n sortEntities: createAction(\n `${actionsGroupKey} Sort ${entitiesName}`,\n props<Sort<Entity>>()\n ),\n resetEntitiesSort: createAction(\n `${actionsGroupKey} Reset ${entitiesName} Sort`\n ),\n };\n}\n","import { createSortTraitMutators } from './sort-entities.trait.mutators';\nimport {\n createSortInitialState,\n createSortTraitReducer,\n} from './sort-entities.trait.reducer';\nimport { createSortTraitSelectors } from './sort-entities.trait.selectors';\nimport { createSortTraitEffect } from './sort-entities.trait.effect';\nimport {\n SortEntitiesActions,\n SortEntitiesConfig,\n SortEntitiesKeyedConfig,\n SortEntitiesSelectors,\n sortTraitKey,\n} from './sort-entities.model';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesSelectors,\n loadEntitiesTraitKey,\n} from '../load-entities/load-entities.model';\nimport {\n EntitiesPaginationActions,\n EntitiesPaginationKeyedConfig,\n} from '../entities-pagination/entities-pagination.model';\nimport { createTraitFactory } from '@ngrx-traits/core';\nimport { createSortTraitActions } from './sort-entities.trait.actions';\nimport {\n TraitActionsFactoryConfig,\n TraitInitialStateFactoryConfig,\n TraitStateMutatorsFactoryConfig,\n} from '@ngrx-traits/core';\n\n/**\n * Generates ngrx code to sort locally or remotely a list of entities\n * @param config\n * @param config.defaultSort - Required field, Default entity prop for the sort\n * @param config.remote - Required field, default to false, when true disables local\n * sorting and every sort action call will now trigger a loadEntities action and the backend\n * should sort the data, use selectSort in the effect that call backend to get the requested sort,\n * when false all sorting is done in memory when the sort action is fired\n *\n * @example\n * // The following trait config\n * export interface TestState\n * extends EntityAndStatusState<Todo>, SortState<Todo>{}\n *\n * const traits = createEntityFeatureFactory(\n * {entityName: 'Todo'},\n * addLoadEntitiesTrait<Todo>(),\n * addSortEntitiesTrait<Todo>({\n * remote: true,\n * defaultSort: {active:'id', direction:'asc'}\n * })\n * )({\n * actionsGroupKey: '[Todos]',\n * featureSelector: createFeatureSelector<TestState>>(\n * 'todos',\n * ),\n * });\n * // adds following props to the state:\n * // sort: {\n * // current: Sort<Todo>;\n * // default: Sort<Todo>;\n * // }\n *\n * // generated actions\n * traits.actions.sortTodos({active:'id', direction:'desc'})\n * traits.actions.resetTodosSort()\n * //generated selectors\n * traits.selectors.selectTodosSort()\n */\nexport function addSortEntitiesTrait<Entity>({\n remote,\n defaultSort,\n}: SortEntitiesConfig<Entity>) {\n return createTraitFactory({\n key: sortTraitKey,\n depends: [loadEntitiesTraitKey],\n config: { remote, defaultSort } as SortEntitiesConfig<Entity>,\n actions: ({ actionsGroupKey, entitiesName }: TraitActionsFactoryConfig) =>\n createSortTraitActions<Entity>(actionsGroupKey, entitiesName),\n selectors: () => createSortTraitSelectors<Entity>(),\n mutators: ({ allSelectors, allConfigs }: TraitStateMutatorsFactoryConfig) =>\n createSortTraitMutators<Entity>(\n allSelectors as SortEntitiesSelectors<Entity> &\n LoadEntitiesSelectors<Entity>,\n allConfigs\n ),\n initialState: ({\n previousInitialState,\n allConfigs,\n }: TraitInitialStateFactoryConfig) =>\n createSortInitialState<Entity>(previousInitialState, allConfigs),\n reducer: ({ initialState, allActions, allMutators, allConfigs }) =>\n createSortTraitReducer<Entity>(\n initialState,\n allActions as SortEntitiesActions<Entity> & LoadEntitiesActions<Entity>,\n allMutators,\n allConfigs as LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig &\n SortEntitiesKeyedConfig<Entity>\n ),\n effects: ({ allActions, allConfigs }) =>\n createSortTraitEffect(\n allActions as LoadEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n EntitiesPaginationActions,\n allConfigs as LoadEntitiesKeyedConfig<Entity> &\n SortEntitiesKeyedConfig<Entity>\n ),\n });\n}\n","import { Injectable } from '@angular/core';\nimport { createTraitFactory, insertIf } from '@ngrx-traits/core';\nimport { TraitActionsFactoryConfig } from '@ngrx-traits/core';\nimport { TraitEffect } from '@ngrx-traits/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { createAction, createReducer, on, Store } from '@ngrx/store';\nimport { Action, ActionCreator } from '@ngrx/store/src/models';\nimport { mapTo } from 'rxjs/operators';\n\nimport { GenericActionCreator } from '../load-entities';\n\n/**\n * Generates the ngrx code needed to reset the current state to the initial state.\n * @param traitConfig - Config object fot the trait factory\n * @param traitConfig.resetOn - set an extra action which will also trigger a reset state,\n * useful if you want to create an action that reset several features states\n *\n * @example\n * // The following trait config\n *\n * const traits = createEntityFeatureFactory(\n * {entityName: 'Todo'},\n * addLoadEntitiesTrait<Todo>(),\n * addResetEntitiesStateTrait()\n * )({\n * actionsGroupKey: '[Todos]',\n * featureSelector: createFeatureSelector<TestState>>(\n * 'todos',\n * ),\n * });\n * // generated actions\n * traits.actions.resetTodosState()\n */\nexport function addResetEntitiesStateTrait(\n traitConfig: {\n resetOn?: readonly ActionCreator[];\n } = {},\n) {\n return createTraitFactory({\n key: 'reset',\n config: traitConfig,\n actions: ({\n actionsGroupKey,\n entitiesName,\n }: TraitActionsFactoryConfig) => ({\n resetEntitiesState: createAction(\n `${actionsGroupKey} Reset ${entitiesName} State`,\n ),\n }),\n reducer: ({ allActions, initialState }) =>\n createReducer(\n initialState,\n on(allActions.resetEntitiesState, () => initialState),\n ...insertIf<typeof initialState>(traitConfig.resetOn, () =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n on(...traitConfig.resetOn!, () => initialState),\n ),\n ),\n });\n}\n","import { createAction, createReducer, on } from '@ngrx/store';\nimport { ActionCreatorProps } from '@ngrx/store/src/models';\nimport { camelCaseToSentence, createTraitFactory } from '@ngrx-traits/core';\nimport {\n ActionCreatorWithOptionalProps,\n AsyncActionActions,\n AsyncActionSelectors,\n AsyncActionState,\n} from './async-action.model';\nimport {\n TraitActionsFactoryConfig,\n TraitInitialStateFactoryConfig,\n} from '@ngrx-traits/core';\n\n/**\n * Generates the typical ngrx code need to make a async action with\n * a request, success and failure actions, plus a status property to track its progress\n * and selectors to query the status. This trait can be added more thant once as long\n * as the name prop is different.\n *\n * @param options - Config object for the trait factory\n * @param options.name - Name of the main request action, should be in camel case\n * @param options.actionProps - Optional param for the main request action, use the props()\n * function for its value, if not present action will have no params,\n * @param options.actionSuccessProps - Optional param for the request success action,\n * use the props() function for its value, if not present action success will have no params\n * @param options.actionFailProps - Optional param for the request fail action,\n * use the props() function for its value, if not present action fail will have no params\n * @returns the trait factory\n *\n * @example\n *\n * export interface TestState\n * extends AsyncActionState<'createClient'>{}\n *\n * // The following trait config\n * const traits = createEntityFeatureFactory(\n * {entityName: 'Todo'},\n * addAsyncActionTrait({\n * name: 'createClient',\n * actionProps: props<{ name: string }>(),\n * actionSuccessProps: props<{ id: string }>(),\n * }),\n * )({\n * actionsGroupKey: 'Client',\n * featureSelector: createFeatureSelector<AsyncActionState<'createClient'>>(\n * 'client',\n * ),\n * });\n * // adds following props to the state:\n * // createClientStatus?: 'loading' | 'success' | 'fail';\n *\n * // generated actions\n * traits.actions.createClient({name:'Pedro'})\n * traits.actions.createClientSuccess({id:'123'})\n * traits.actions.createClientFail();\n * //generated selectors\n * traits.selectors.isLoadingCreateClient\n * traits.selectors.isSuccessCreateClient\n * traits.selectors.isFailCreateClient\n */\nexport function addAsyncActionTrait<\n J extends string,\n Request extends object | undefined = undefined,\n Response extends object | undefined = undefined,\n Failure extends object | undefined = undefined\n>({\n name,\n actionProps,\n actionSuccessProps,\n actionFailProps,\n}: {\n name: J;\n actionProps?: ActionCreatorProps<Request>;\n actionSuccessProps?: ActionCreatorProps<Response>;\n actionFailProps?: ActionCreatorProps<Failure>;\n}) {\n const nameAsSentence = camelCaseToSentence(name);\n\n let internalActions: AsyncActionActions<\n Request,\n Response,\n Failure,\n 'request'\n >;\n return createTraitFactory({\n key: name + '-call',\n config: {\n name,\n actionProps,\n actionSuccessProps,\n actionFailProps,\n },\n actions: ({\n actionsGroupKey,\n }: TraitActionsFactoryConfig): AsyncActionActions<\n Request,\n Response,\n Failure,\n J\n > => {\n internalActions = {\n request: (actionProps\n ? createAction(\n `${actionsGroupKey} ${nameAsSentence}`,\n actionProps as any\n )\n : createAction(\n `${actionsGroupKey} ${nameAsSentence}`\n )) as ActionCreatorWithOptionalProps<Request>,\n requestSuccess: (actionSuccessProps\n ? createAction(\n `${actionsGroupKey} ${nameAsSentence} Success`,\n actionSuccessProps as any\n )\n : createAction(\n `${actionsGroupKey} ${nameAsSentence} Success`\n )) as ActionCreatorWithOptionalProps<Response>,\n requestFail: (actionFailProps\n ? createAction(\n `${actionsGroupKey} ${nameAsSentence} Failure`,\n actionFailProps as any\n )\n : createAction(\n `${actionsGroupKey} ${nameAsSentence} Failure`\n )) as ActionCreatorWithOptionalProps<Failure>,\n };\n return {\n [`${name}`]: internalActions.request,\n [`${name}Success`]: internalActions.requestSuccess,\n [`${name}Fail`]: internalActions.requestFail,\n } as AsyncActionActions<Request, Response, Failure, J>;\n },\n selectors: () => {\n function isLoadingEntity<S extends AsyncActionState<J>>(state: S) {\n return (state as any)[`${name}Status`] === 'loading';\n }\n function isSuccessEntity<S extends AsyncActionState<J>>(state: S) {\n return (state as any)[`${name}Status`] === 'success';\n }\n function isFailEntity<S extends AsyncActionState<J>>(state: S) {\n return (state as any)[`${name}Status`] === 'fail';\n }\n const capitalizedName = name.charAt(0).toUpperCase() + name.slice(1);\n return {\n [`isLoading${capitalizedName}`]: isLoadingEntity,\n [`isSuccess${capitalizedName}`]: isSuccessEntity,\n [`isFail${capitalizedName}`]: isFailEntity,\n } as AsyncActionSelectors<J, AsyncActionState<J>>;\n },\n initialState: ({ previousInitialState }: TraitInitialStateFactoryConfig) =>\n previousInitialState as AsyncActionState<J>,\n reducer: ({ initialState }) => {\n // TypeScript error after migration to 4.9.5\n // Added 'any' to 'state' and removed 'as AsyncActionState<J>'\n // because OnReducer have a weird type for the state.\n // TODO: Investigate if possible to remove the 'any' type and have better type safety\n // tried remove the any seems to be a problex with ngrx on making the state unknown\n return createReducer(\n initialState,\n on(internalActions.request, (state: any) => ({\n ...state,\n [`${name}Status`]: 'loading',\n })),\n on(internalActions.requestFail, (state: any) => ({\n ...state,\n [`${name}Status`]: 'fail',\n })),\n on(internalActions.requestSuccess, (state: any) => ({\n ...state,\n [`${name}Status`]: 'success',\n }))\n );\n },\n });\n}\n","import { ActionCreatorProps } from '@ngrx/store/src/models';\nimport { capitalize, createTraitFactory } from '@ngrx-traits/core';\nimport { createReducer, on } from '@ngrx/store';\n\nimport { addAsyncActionTrait } from '../async-action/async-action.trait';\nimport { LoadEntitySelectors, LoadEntityState } from './load-entity.model';\nimport { TraitInitialStateFactoryConfig } from '@ngrx-traits/core';\n\ntype RecordEntity<T> = T extends Record<string, infer J> ? J : never;\n\n/**\n * Generates ngrx code needed to load and entity and store it in a state. This action can be added\n * more than once as long as the entityName para is different\n * @param entityName - Entity name, should be in camel case\n * @param options.actionProps - Optional param for the main request action,\n * use the props() function for its value, if not present action will have no params,\n * @param options.actionSuccessProps - Optional param for the request success\n * action, use the props() function for its value, if not present action success will have no params\n * @param options.actionFailProps - Optional param for the request fail action,\n * use the props() function for its value, if not present action fail will have no params\n * @returns the trait factory\n *\n * @example\n *\n * export interface TestState\n * extends LoadEntityState<Client,'client'>{}\n *\n * const traits = createEntityFeatureFactory(\n * ...addLoadEntityTraits({\n * entityName: 'client',\n * requestProps: props<{ id: string }>(),\n * responseProps: props<{ client: Client }>(),\n * }),\n * )({\n * actionsGroupKey: 'Client',\n * featureSelector: createFeatureSelector<\n * LoadEntityState<Client, 'client'>\n * >('client'),\n * });\n *\n * // adds following props to the state:\n * // loadClientStatus?: 'loading' | 'success' | 'fail';\n * // client?: Client;\n *\n * // generated actions\n * traits.actions.loadClient({id:123});\n * traits.actions.loadClientSuccess({client: {id: '123', name: 'gabs'}});\n * traits.actions.loadClientFail();\n * // generated selectors\n * traits.selectors.selectClient()\n * traits.selectors.isLoadingLoadClient()\n * traits.selectors.isSuccessLoadClient()\n * traits.selectors.isFailLoadClient()\n */\nexport function addLoadEntityTraits<\n J extends string,\n Request extends object | undefined = undefined,\n Response extends Record<J, any> | undefined = undefined,\n Failure extends object | undefined = undefined,\n Entity = RecordEntity<Response>,\n State extends LoadEntityState<any,string> = LoadEntityState<Entity, J>\n>({\n entityName,\n actionProps,\n actionSuccessProps,\n actionFailProps,\n}: {\n entityName: J;\n actionProps?: ActionCreatorProps<Request>;\n actionSuccessProps?: ActionCreatorProps<Response>;\n actionFailProps?: ActionCreatorProps<Failure>;\n}) {\n const capitalizedName = capitalize(entityName);\n\n type K = `load${Capitalize<J & string>}`;\n\n return [\n addAsyncActionTrait<K, Request, Response, Failure>({\n name: ('load' + capitalizedName) as K,\n actionProps,\n actionSuccessProps,\n actionFailProps,\n }),\n createTraitFactory({\n key: `load${capitalizedName}`,\n config: { entityName, actionProps, actionSuccessProps, actionFailProps },\n selectors: () => {\n function selectEntity(state: State) {\n return (state as any)[`${entityName}`] as Entity;\n }\n\n return {\n [`select${capitalizedName}`]: selectEntity,\n } as LoadEntitySelectors<Entity, J>;\n },\n initialState: ({\n previousInitialState,\n }: TraitInitialStateFactoryConfig) => previousInitialState as State,\n reducer: ({ initialState, allActions }) => {\n return createReducer(\n initialState,\n on(\n (allActions as any)[`load${capitalizedName}Success`],\n (state: any, action: any) => ({\n ...state,\n [entityName]: action[entityName],\n })\n )\n );\n },\n }),\n ] as const;\n}\n","import {\n capitalize,\n createTraitFactory,\n TraitActionsFactoryConfig,\n} from '@ngrx-traits/core';\nimport { createAction, createReducer, on } from '@ngrx/store';\n\nimport {\n SetEntityActions,\n SetEntitySelectors,\n SetEntityState,\n} from './set-entity.model';\nimport { TraitInitialStateFactoryConfig } from '@ngrx-traits/core';\nimport { ActionCreatorProps } from '@ngrx/store/src/models';\n\ntype RecordEntity<T> = T extends Record<string, infer J> ? J : never;\n\n/**\n * Generates ngrx code needed to set and entity in the store state\n * @param entityName - Entity name, should be in camel case\n * @param options.actionProps - param for the main request action,\n * use the props() function for its value\n * @returns the trait factory\n *\n * @example\n *\n * export interface TestState\n * extends SetEntityState<Client,'client'>{}\n *\n * const traits = createEntityFeatureFactory(\n * addSetEntityTraits({\n * entityName: 'client',\n * actionProps: props<{ client: Client }\n * }),\n * )({\n * actionsGroupKey: 'Client',\n * featureSelector: createFeatureSelector<\n * SetEntityState<Client, 'client'>\n * >('client'),\n * });\n * // adds following props to the state:\n * // client?: Client;\n *\n * // generated actions\n * traits.actions.setClient({client: {id:123, name: 'gabs'}});\n * //generated selectors\n * traits.selectors.selectClient()\n */\nexport function addSetEntityTrait<\n J extends string,\n Payload extends Record<J, any> | undefined = undefined,\n Entity = RecordEntity<Payload>,\n State extends SetEntityState<Entity, J>= SetEntityState<Entity, J>\n>({\n entityName,\n actionProps,\n}: {\n entityName: J;\n actionProps?: ActionCreatorProps<Payload>;\n}) {\n const capitalizedName = capitalize(entityName);\n\n return createTraitFactory({\n key: `load${capitalizedName}`,\n config: { entityName, actionProps },\n actions: ({ actionsGroupKey }: TraitActionsFactoryConfig) => {\n const setEntity = createAction(\n `${actionsGroupKey} Set ${capitalizedName}`,\n actionProps as any\n );\n\n return {\n [`set${capitalizedName}`]: setEntity,\n } as SetEntityActions<Payload, J>;\n },\n selectors: () => {\n function selectEntity(state: State) {\n return (state as any)[`${entityName}`] as Entity;\n }\n\n return {\n [`select${capitalizedName}`]: selectEntity,\n } as SetEntitySelectors<Entity, J>;\n },\n initialState: ({ previousInitialState }: TraitInitialStateFactoryConfig) =>\n previousInitialState as State,\n reducer: ({ initialState, allActions }) => {\n return createReducer(\n initialState,\n on(\n (allActions as any)[`set${capitalizedName}`],\n (state: any, action: any) => ({\n ...state,\n [entityName]: action[entityName],\n })\n )\n );\n },\n });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n createTraitFactory,\n TraitActionsFactoryConfig,\n TraitEffect,\n} from '@ngrx-traits/core';\nimport { createEffect, ofType } from '@ngrx/effects';\nimport { concatLatestFrom } from '@ngrx/operators';\nimport { createAction, createReducer, on, props } from '@ngrx/store';\nimport { Action, ActionCreator } from '@ngrx/store/src/models';\nimport { delay, map, mapTo, tap } from 'rxjs/operators';\n\nimport {\n EntitiesPaginationActions,\n EntitiesPaginationMutators,\n entitiesPaginationTraitKey,\n} from '../entities-pagination';\nimport {\n FilterEntitiesActions,\n FilterEntitiesMutators,\n filterEntitiesTraitKey,\n} from '../filter-entities';\nimport { LoadEntitiesActions } from '../load-entities';\nimport {\n SortEntitiesActions,\n SortEntitiesMutators,\n sortTraitKey,\n} from '../sort-entities';\n\n/**\n * Generates ngrx code necessary to load and set to the current route query params for the filter, sort and paging traits\n *\n * @example\n *\n * const traits = createEntityFeatureFactory(\n * {entityName: 'Todo'},\n * addLoadEntitiesTrait<Todo>(),\n * addFilterEntitiesTrait(),\n * addSortEntitiesTrait<Todo>({\n * remote: true,\n * defaultSort: {active:'id', direction:'asc'}\n * })\n * addEntitiesPaginationTrait<Todo>(),\n * addEntitiesSyncToRouteQueryParams()\n * )({\n * actionsGroupKey: '[Todos]',\n * featureSelector: createFeatureSelector<TestState>>(\n * 'todos',\n * ),\n * });\n *\n *\n * // generated actions\n * traits.actions.loadTodosUsingRouteQueryParams()\n */\nexport function addEntitiesSyncToRouteQueryParams() {\n let setEntitiesRouteQueryParams: ActionCreator<\n string,\n (props: { params: any }) => { params: any } & Action<string>\n >;\n return createTraitFactory({\n key: 'entitiesSyncToRouteQueryParams',\n depends: [entitiesPaginationTraitKey, sortTraitKey, filterEntitiesTraitKey],\n actions({ actionsGroupKey, entitiesName }: TraitActionsFactoryConfig) {\n const actions = {\n loadEntitiesUsingRouteQueryParams: createAction(\n `${actionsGroupKey} Load ${entitiesName} Using Route Query Params`,\n ),\n };\n setEntitiesRouteQueryParams = createAction(\n `${actionsGroupKey} Set ${entitiesName} Route Query Params`,\n props<{ params: any }>(),\n );\n return { ...actions, setEntitiesRouteQueryParams } as typeof actions;\n },\n reducer({ initialState, allMutators: m }) {\n const allMutators = m as EntitiesPaginationMutators<any> &\n FilterEntitiesMutators<any, any> &\n SortEntitiesMutators<any>;\n return createReducer(\n initialState,\n on(setEntitiesRouteQueryParams, (state, { params: p }) => {\n const params = { ...p };\n let newState = state;\n if (params.page) {\n newState = allMutators.setEntitiesPage(\n newState as any,\n +params.page,\n );\n delete params.page;\n }\n if (params.sortActive) {\n newState = allMutators.sortEntities(\n {\n active: params.sortActive,\n direction: params.sortDirection,\n },\n newState as any,\n );\n delete params.sortActive;\n delete params.sortDirection;\n }\n if (Object.keys(params).length) {\n newState = allMutators.setEntitiesFilters(params, newState as any);\n }\n\n return newState;\n }),\n );\n },\n effects({ allActions: a }) {\n const allActions = a as typeof a &\n FilterEntitiesActions<any> &\n SortEntitiesActions<any> &\n EntitiesPaginationActions;\n\n @Injectable()\n class SyncEntitiesStateToUrlEffect extends TraitEffect {\n activatedRoute = inject(ActivatedRoute);\n router = inject(Router);\n\n loadUrlParams$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.loadEntitiesUsingRouteQueryParams),\n concatLatestFrom(() => this.activatedRoute.queryParams),\n map(([_, params]) => setEntitiesRouteQueryParams({ params })),\n );\n });\n\n setUrlParams$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(setEntitiesRouteQueryParams),\n mapTo(\n (\n allActions as unknown as LoadEntitiesActions<any>\n ).loadEntities(),\n ),\n );\n });\n\n onFilter$ =\n !!allActions.filterEntities &&\n createEffect(\n () => {\n return this.actions$.pipe(\n ofType(allActions.filterEntities),\n tap(({ filters }) => {\n this.updateUrl(filters);\n }),\n );\n },\n { dispatch: false },\n );\n\n onSort$ =\n !!allActions.sortEntities &&\n createEffect(\n () => {\n return this.actions$.pipe(\n ofType(allActions.sortEntities),\n delay(0),\n tap(({ active, direction }) => {\n this.updateUrl({\n sortActive: active,\n sortDirection: direction,\n });\n }),\n );\n },\n { dispatch: false },\n );\n\n onPaginate$ =\n !!allActions.loadEntitiesPage &&\n createEffect(\n () => {\n return this.actions$.pipe(\n ofType(allActions.loadEntitiesPage),\n tap(({ index }) => {\n this.updateUrl({\n page: index,\n });\n }),\n );\n },\n { dispatch: false },\n );\n\n updateUrl(queryParams: any) {\n this.router.navigate([], {\n relativeTo: this.activatedRoute,\n queryParams,\n queryParamsHandling: 'merge', // remove to replace all query params by provided\n });\n }\n }\n return [SyncEntitiesStateToUrlEffect];\n },\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngrx-traits-common.mjs","sources":["../../../../../libs/ngrx-traits/common/src/lib/load-entities/load-entities.model.ts","../../../../../libs/ngrx-traits/common/src/lib/load-entities/load-entities.trait.reducer.ts","../../../../../libs/ngrx-traits/common/src/lib/load-entities/load-entities.mutators.ts","../../../../../libs/ngrx-traits/common/src/lib/load-entities/load-entities.trait.actions.ts","../../../../../libs/ngrx-traits/common/src/lib/load-entities/load-entities.utils.ts","../../../../../libs/ngrx-traits/common/src/lib/filter-entities/filter-entities.trait.selectors.ts","../../../../../libs/ngrx-traits/common/src/lib/load-entities/load-entities.trait.selectors.ts","../../../../../libs/ngrx-traits/common/src/lib/load-entities/load-entities.trait.ts","../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/entities-pagination.model.ts","../../../../../libs/ngrx-traits/common/src/lib/filter-entities/filter-entities.trait.effect.ts","../../../../../libs/ngrx-traits/common/src/lib/filter-entities/filter-entities.trait.reducer.ts","../../../../../libs/ngrx-traits/common/src/lib/filter-entities/filter-entities.model.ts","../../../../../libs/ngrx-traits/common/src/lib/filter-entities/filter-entities.trait.mutators.ts","../../../../../libs/ngrx-traits/common/src/lib/filter-entities/filter-entities.trait.actions.ts","../../../../../libs/ngrx-traits/common/src/lib/filter-entities/filter-entities.trait.ts","../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/entities-pagination.trait.selectors.ts","../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/entities-pagination.trait.actions.ts","../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/entities-pagination.trait.reducer.ts","../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/entities-pagination.trait.effects.ts","../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/entities-pagination.trait.mutators.ts","../../../../../libs/ngrx-traits/common/src/lib/entities-pagination/entities-pagination.trait.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entities/select-entities.trait.actions.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entities/select-entities.utils.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entities/select-entities.trait.selectors.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entities/select-entities.trait.reducer.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entities/select-entities.trait.mutators.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entities/select-entities.trait.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entity/select-entity.trait.actions.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entity/select-entity.trait.selectors.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entity/select-entity.trait.reducer.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entity/select-entity.trait.mutators.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entity/select-entity.trait.ts","../../../../../libs/ngrx-traits/common/src/lib/select-entity/select-entity.model.ts","../../../../../libs/ngrx-traits/common/src/lib/crud-entities/crud-entities.model.ts","../../../../../libs/ngrx-traits/common/src/lib/crud-entities/crud-entities.trait.actions.ts","../../../../../libs/ngrx-traits/common/src/lib/crud-entities/crud-entities.trait.selectors.ts","../../../../../libs/ngrx-traits/common/src/lib/crud-entities/crud-entities.trait.reducer.ts","../../../../../libs/ngrx-traits/common/src/lib/crud-entities/crud-entities.trait.mutators.ts","../../../../../libs/ngrx-traits/common/src/lib/crud-entities/crud-entities.trait.ts","../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.model.ts","../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.utils.ts","../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.mutators.ts","../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.reducer.ts","../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.selectors.ts","../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.effect.ts","../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.actions.ts","../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.ts","../../../../../libs/ngrx-traits/common/src/lib/reset/reset.trait.ts","../../../../../libs/ngrx-traits/common/src/lib/async-action/async-action.trait.ts","../../../../../libs/ngrx-traits/common/src/lib/load-entity/load-entity.traits.ts","../../../../../libs/ngrx-traits/common/src/lib/set-entity/set-entity.trait.ts","../../../../../libs/ngrx-traits/common/src/lib/entities-sync-to-route-query-params/entities-sync-to-route-query-params.ts","../../../../../libs/ngrx-traits/common/src/lib/ngrx-traits-common.ts"],"sourcesContent":["import { KeyedConfig } from '@ngrx-traits/core';\nimport { Comparer, EntityAdapter, EntityState, IdSelector } from '@ngrx/entity';\nimport { Dictionary } from '@ngrx/entity/src/models';\nimport { Action, ActionCreator } from '@ngrx/store/src/models';\n\nexport type Status = 'loading' | 'success' | 'fail';\n\nexport interface StatusState {\n status?: Status;\n}\n\nexport interface LoadEntitiesState<T> extends EntityState<T>, StatusState {}\n\nexport type LoadEntitiesActions<T> = {\n /**\n * load entities from backend\n */\n loadEntities: ActionCreator<string, () => Action<string>>;\n /**\n * entities where loaded successfully\n */\n loadEntitiesSuccess: ActionCreator<\n string,\n (props: {\n entities: T[];\n total?: number;\n }) => { entities: T[]; total?: number } & Action<string>\n >;\n /**\n * entities failed loading\n */\n loadEntitiesFail: ActionCreator<\n string,\n (props?: { error?: string }) => { error?: string } & Action<string>\n >;\n};\n\nexport type LoadEntitiesSelectors<T> = {\n /**\n * returns all ids of the entities in an array\n * @param state\n */\n selectEntitiesIdsList: (state: LoadEntitiesState<T>) => string[] | number[];\n /**\n * returns all entities in a map with the id as key of the map\n * @param state\n */\n selectEntitiesMap: (state: LoadEntitiesState<T>) => Dictionary<T>;\n /**\n * returns all entities in an array\n * @param state\n */\n selectEntitiesList: (state: LoadEntitiesState<T>) => T[];\n /**\n * returns the total number of entities\n * @param state\n */\n selectEntitiesTotal: (state: LoadEntitiesState<T>) => number;\n /**\n * is currently loading entities\n * @param state\n */\n isEntitiesLoading: (state: LoadEntitiesState<T>) => boolean;\n /**\n * were the entities loaded successfully\n * @param state\n */\n isEntitiesLoadingSuccess: (state: LoadEntitiesState<T>) => boolean;\n /**\n * did the entities fail loading\n * @param state\n */\n isEntitiesLoadingFail: (state: LoadEntitiesState<T>) => boolean;\n};\n\nexport type LoadEntitiesMutators<T> = {\n /**\n * set or replace all entities currently in store\n * @param entities\n * @param state\n */\n setEntitiesList<S extends LoadEntitiesState<T>>(entities: T[], state: S): S;\n};\n\nexport type GenericActionCreator = ActionCreator<\n string,\n (...args: unknown[]) => Action<string>\n>;\n\nexport const loadEntitiesTraitKey = 'loadEntities';\n\nexport type LoadEntitiesConfig<T = unknown> = {\n /**\n * Function that returns the id of an entity if not set it attempts to return the values\n * of a property call id, this is pass to @ngrx/entity EntityAdapter\n */\n selectId?: IdSelector<T>;\n /**\n * Default sort function for to @ngrx/entity EntityAdapter\n */\n sortComparer?: false | Comparer<T>;\n /**\n * @ngrx/entity EntityAdapter\n */\n adapter: EntityAdapter<T>;\n};\n\nexport type LoadEntitiesKeyedConfig<T> = KeyedConfig<\n typeof loadEntitiesTraitKey,\n LoadEntitiesConfig<T>\n>;\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport {\n LoadEntitiesState,\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesMutators,\n} from './load-entities.model';\nimport { createReducer, on } from '@ngrx/store';\nimport { EntitiesPaginationKeyedConfig } from '../entities-pagination';\nimport { insertIf } from '@ngrx-traits/core';\n\nexport function createLoadEntitiesInitialState<Entity>(\n previousInitialState = {},\n allConfigs: LoadEntitiesKeyedConfig<Entity>\n): LoadEntitiesState<Entity> {\n const traitConfig = allConfigs.loadEntities;\n const adapter = traitConfig!.adapter;\n\n return {\n ...previousInitialState,\n ...adapter!.getInitialState(),\n status: undefined,\n };\n}\n\nexport function createLoadEntitiesTraitReducer<\n T,\n S extends LoadEntitiesState<T>\n>(\n initialState: S,\n actions: LoadEntitiesActions<T>,\n allMutators: LoadEntitiesMutators<T>,\n allConfigs: LoadEntitiesKeyedConfig<T> & EntitiesPaginationKeyedConfig\n) {\n const handleEntitiesMerge = !allConfigs?.pagination;\n\n return createReducer(\n initialState,\n on(actions.loadEntities, (state) => ({\n ...state,\n status: 'loading',\n })),\n on(actions.loadEntitiesFail, (state) => ({\n ...state,\n status: 'fail',\n })),\n on(actions.loadEntitiesSuccess, (state) => ({\n ...state,\n status: 'success',\n })),\n ...insertIf<S>(handleEntitiesMerge, () =>\n on(actions.loadEntitiesSuccess, (state, { entities }) =>\n allMutators.setEntitiesList(entities, {\n ...state,\n })\n )\n )\n );\n}\n","import {\n LoadEntitiesKeyedConfig,\n LoadEntitiesMutators,\n} from './load-entities.model';\nimport { EntitiesPaginationKeyedConfig } from '../entities-pagination';\n\nexport function createLoadEntitiesTraitMutators<Entity>(\n allConfigs: LoadEntitiesKeyedConfig<Entity> & EntitiesPaginationKeyedConfig\n) {\n const adapter = allConfigs?.loadEntities?.adapter;\n\n return {\n setEntitiesList: adapter?.setAll,\n } as LoadEntitiesMutators<Entity>;\n}\n","import { LoadEntitiesActions } from './load-entities.model';\nimport { createAction, props } from '@ngrx/store';\n\nexport function createLoadEntitiesTraitActions<Entity>(\n actionsGroupKey: string,\n entitiesName: string\n): LoadEntitiesActions<Entity> {\n const actions = {\n loadEntities: createAction(`${actionsGroupKey} Load ${entitiesName}`),\n loadEntitiesSuccess: createAction(\n `${actionsGroupKey} Load ${entitiesName} Success`,\n props<{ entities: Entity[]; total?: number }>()\n ),\n loadEntitiesFail: createAction(\n `${actionsGroupKey} Load ${entitiesName} Fail`,\n (props?: { error?: string }) => ({ error: props?.error })\n ),\n };\n\n return actions;\n}\n","import { StatusState } from './load-entities.model';\n\nexport function isLoading<S extends StatusState>(state: S) {\n return state.status === 'loading';\n}\nexport function isSuccess<S extends StatusState>(state: S) {\n return state.status === 'success';\n}\nexport function isFail<S extends StatusState>(state: S) {\n return state.status === 'fail';\n}\n","import {\n FilterEntitiesSelectors,\n FilterEntitiesState,\n} from './filter-entities.model';\nimport { LoadEntitiesState } from '../load-entities';\nexport function selectEntitiesFilter<Entity, F>(\n state: LoadEntitiesState<Entity> & FilterEntitiesState<F>\n) {\n return state.filters;\n}\n\nexport function createFilterTraitSelectors<\n Entity,\n F\n>(): FilterEntitiesSelectors<Entity, F> {\n return {\n selectEntitiesFilter,\n };\n}\n","import { Dictionary } from '@ngrx/entity';\nimport {\n LoadEntitiesKeyedConfig,\n LoadEntitiesSelectors,\n} from './load-entities.model';\nimport { FilterEntitiesKeyedConfig } from '../filter-entities';\nimport { isFail, isLoading, isSuccess } from './load-entities.utils';\nimport { createSelector } from '@ngrx/store';\nimport { selectEntitiesFilter } from '../filter-entities/filter-entities.trait.selectors';\n\nexport function createLoadEntitiesTraitSelectors<Entity>(\n allConfigs?: LoadEntitiesKeyedConfig<Entity> &\n FilterEntitiesKeyedConfig<Entity, unknown>\n) {\n const adapter = allConfigs?.loadEntities?.adapter;\n const entitySelectors = adapter!.getSelectors();\n\n const filterFunction = allConfigs?.filter?.filterFn;\n let selectors: LoadEntitiesSelectors<Entity> = {\n selectEntitiesList: entitySelectors.selectAll,\n selectEntitiesMap: entitySelectors.selectEntities,\n selectEntitiesIdsList: entitySelectors.selectIds,\n selectEntitiesTotal: entitySelectors.selectTotal,\n isEntitiesLoadingFail: isFail,\n isEntitiesLoading: isLoading,\n isEntitiesLoadingSuccess: isSuccess,\n };\n if (filterFunction && entitySelectors) {\n const selectEntitiesList = createSelector(\n entitySelectors.selectAll,\n selectEntitiesFilter,\n (entities, filters) =>\n filters ? entities.filter((e) => filterFunction(filters, e)) : entities\n );\n\n selectors = {\n ...selectors,\n selectEntitiesList,\n selectEntitiesMap: createSelector(\n selectors.selectEntitiesMap,\n selectEntitiesFilter,\n (entities, filters) => {\n const result: Dictionary<Entity> = {};\n for (const id in entities) {\n const e = entities[id];\n if (filterFunction(filters, e!)) {\n result[id] = e;\n }\n }\n return result;\n }\n ),\n selectEntitiesTotal: createSelector(\n selectEntitiesList,\n (entities) => entities.length\n ),\n selectEntitiesIdsList: createSelector(\n selectEntitiesList,\n (entities) =>\n entities.map((e) => adapter?.selectId(e)) as string[] | number[]\n ),\n } as unknown as LoadEntitiesSelectors<Entity>;\n }\n return selectors;\n}\n","import {\n createLoadEntitiesInitialState,\n createLoadEntitiesTraitReducer,\n} from './load-entities.trait.reducer';\nimport {\n LoadEntitiesState,\n LoadEntitiesConfig,\n LoadEntitiesKeyedConfig,\n loadEntitiesTraitKey,\n} from './load-entities.model';\nimport {\n TraitActionsFactoryConfig,\n TraitInitialStateFactoryConfig,\n TraitSelectorsFactoryConfig,\n TraitStateMutatorsFactoryConfig,\n} from '@ngrx-traits/core';\nimport { EntitiesPaginationKeyedConfig } from '../entities-pagination';\nimport { createLoadEntitiesTraitMutators } from './load-entities.mutators';\nimport { createTraitFactory } from '@ngrx-traits/core';\nimport { createEntityAdapter, EntityAdapter } from '@ngrx/entity';\nimport { createLoadEntitiesTraitActions } from './load-entities.trait.actions';\nimport { createLoadEntitiesTraitSelectors } from './load-entities.trait.selectors';\n\n/**\n * Generates the ngrx code needed to load a list of entities from the backend. This trait is the base for all other traits related\n * to a list of entities, the other will call loadEntities when needing data. See the example for the list of actions and selectors this generates\n *\n * @param traitConfig - Config object for the trait factory\n * @param traitConfig.selectId - Function that returns the id of an entity\n * @param traitConfig.sortComparer - Default sort function for to @ngrx/entity EntityAdapter\n *\n * @example\n * // The following trait config\n *\n * export interface TestState\n * extends LoadEntitiesState<Todo>{}\n *\n * const traits = createEntityFeatureFactory(\n * {entityName: 'Todo'},\n * addLoadEntitiesTrait<Todo>(),\n * )({\n * actionsGroupKey: '[Todos]',\n * featureSelector: createFeatureSelector<TestState>>(\n * 'todos',\n * ),\n * });\n *\n * // adds following props to the state:\n * // ids: string[] | number[];\n * // entities: Dictionary<Todo>;\n * // status?: 'loading' | 'success' | 'fail';\n *\n * // generated actions\n * traits.actions.loadTodos()\n * traits.actions.loadTodosSuccess({entities: todos})\n * traits.actions.loadTodosFail();\n * // generated selectors\n * traits.selectors.selectTodosList\n * traits.selectors.selectTodosMap\n * traits.selectors.selectTodosIds\n * traits.selectors.selectTodosTotal\n * traits.selectors.isTodosLoading\n * traits.selectors.isTodosLoadingSuccess\n * traits.selectors.isTodosLoadingFail\n */\nexport function addLoadEntitiesTrait<Entity>(\n traitConfig?: Omit<LoadEntitiesConfig<Entity>, 'adapter'>\n) {\n const adapter: EntityAdapter<Entity> = createEntityAdapter(traitConfig);\n\n return createTraitFactory({\n key: loadEntitiesTraitKey,\n config: { ...traitConfig, adapter } as LoadEntitiesConfig<Entity>,\n actions: ({ actionsGroupKey, entitiesName }: TraitActionsFactoryConfig) =>\n createLoadEntitiesTraitActions<Entity>(actionsGroupKey, entitiesName),\n selectors: ({ allConfigs }: TraitSelectorsFactoryConfig) =>\n createLoadEntitiesTraitSelectors<Entity>(\n allConfigs as LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig\n ),\n mutators: ({ allConfigs }: TraitStateMutatorsFactoryConfig) =>\n createLoadEntitiesTraitMutators<Entity>(\n allConfigs as LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig\n ),\n initialState: ({\n previousInitialState,\n allConfigs,\n }: TraitInitialStateFactoryConfig) =>\n createLoadEntitiesInitialState<Entity>(previousInitialState, allConfigs),\n reducer: ({ initialState, allActions, allMutators, allConfigs }) =>\n createLoadEntitiesTraitReducer<Entity, LoadEntitiesState<Entity>>(\n initialState,\n allActions,\n allMutators,\n allConfigs as LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig\n ),\n });\n}\n","/* eslint-disable @typescript-eslint/no-empty-interface */\nimport { Action, ActionCreator } from '@ngrx/store/src/models';\n\nimport { LoadEntitiesState } from '../load-entities';\n\nexport type CacheType = 'full' | 'partial' | 'grow';\nexport interface EntitiesPaginationState {\n pagination: {\n currentPage: number;\n requestPage: number;\n pageSize: number;\n total?: number;\n pagesToCache: number;\n cache: {\n type: CacheType;\n start: number;\n end: number;\n };\n };\n}\n\nexport type EntitiesPaginationActions = {\n loadEntitiesPage: ActionCreator<\n string,\n (props: {\n index: number;\n forceLoad?: boolean;\n }) => { index: number; forceLoad?: boolean } & Action<string>\n >;\n loadEntitiesPageSuccess: ActionCreator<string, () => Action<string>>;\n loadEntitiesPageFail: ActionCreator<string, () => Action<string>>;\n loadEntitiesNextPage: ActionCreator<string, () => Action<string>>;\n loadEntitiesPreviousPage: ActionCreator<string, () => Action<string>>;\n loadEntitiesFirstPage: ActionCreator<\n string,\n (forceLoad?: boolean) => { forceLoad?: boolean } & Action<string>\n >;\n loadEntitiesLastPage: ActionCreator<string, () => Action<string>>;\n clearEntitiesPagesCache: ActionCreator<string, () => Action<string>>;\n};\n\nexport type EntitiesPaginationSelectors<T> = {\n selectEntitiesCurrentPageList: (\n state: LoadEntitiesState<T> & EntitiesPaginationState,\n ) => T[];\n selectEntitiesCurrentPage: (\n state: LoadEntitiesState<T> & EntitiesPaginationState,\n ) => PageModel<T>;\n selectEntitiesPagedRequest: (\n state: LoadEntitiesState<T> & EntitiesPaginationState,\n ) => PagedRequest;\n selectEntitiesCurrentPageInfo: (\n state: LoadEntitiesState<T> & EntitiesPaginationState,\n ) => PageInfoModel;\n isLoadingEntitiesCurrentPage: (\n state: LoadEntitiesState<T> & EntitiesPaginationState,\n ) => boolean;\n};\n\nexport type EntitiesPaginationMutators<Entity> = {\n mergePaginatedEntities<\n S extends LoadEntitiesState<Entity> & EntitiesPaginationState,\n >(\n entities: Entity[],\n total: number | undefined,\n state: S,\n ): S;\n setEntitiesPage<\n Entity,\n S extends LoadEntitiesState<Entity> & EntitiesPaginationState,\n >(\n state: S,\n index: number,\n ): S;\n};\n\nexport interface PageModel<T> {\n entities: T[];\n isLoading: boolean;\n pageIndex: number;\n total: number | undefined;\n pageSize: number;\n pagesCount: number | undefined;\n hasPrevious: boolean;\n hasNext: boolean;\n}\n\nexport interface PageInfoModel {\n pageIndex: number;\n total: number | undefined;\n pageSize: number;\n pagesCount: number | undefined;\n hasPrevious: boolean;\n hasNext: boolean;\n cacheType: CacheType;\n}\n\nexport interface PagedRequest {\n startIndex: number;\n size: number;\n page: number;\n}\n\nexport const entitiesPaginationTraitKey = 'pagination';\n\nexport interface EntitiesPaginationConfig {\n cacheType?: CacheType;\n pageSize?: number;\n currentPage?: number;\n pagesToCache?: number;\n}\n\nexport interface EntitiesPaginationKeyedConfig {\n pagination?: EntitiesPaginationConfig;\n}\n","import { Injectable } from '@angular/core';\nimport { TraitEffect, Type } from '@ngrx-traits/core';\nimport { createEffect, ofType } from '@ngrx/effects';\nimport { asyncScheduler, EMPTY, of, pipe, timer } from 'rxjs';\nimport {\n concatMap,\n debounce,\n distinctUntilChanged,\n first,\n map,\n pairwise,\n startWith,\n} from 'rxjs/operators';\n\nimport { EntitiesPaginationActions } from '../entities-pagination';\nimport {\n LoadEntitiesActions,\n LoadEntitiesSelectors,\n} from '../load-entities/load-entities.model';\nimport {\n FilterEntitiesKeyedConfig,\n FilterEntitiesSelectors,\n} from './filter-entities.model';\nimport { ƟFilterEntitiesActions } from './filter-entities.model.internal';\n\nexport function createFilterTraitEffects<Entity, F>(\n allActions: ƟFilterEntitiesActions<F> &\n LoadEntitiesActions<Entity> &\n EntitiesPaginationActions,\n allSelectors: FilterEntitiesSelectors<Entity, F> &\n LoadEntitiesSelectors<Entity>,\n allConfigs: FilterEntitiesKeyedConfig<Entity, F>,\n): Type<TraitEffect>[] {\n const traitConfig = allConfigs.filter;\n @Injectable()\n class FilterEffect extends TraitEffect {\n storeFilter$ = createEffect(\n () =>\n ({\n debounce: debounceTime = traitConfig!.defaultDebounceTime,\n scheduler = asyncScheduler,\n } = {}) =>\n this.actions$.pipe(\n ofType(allActions.filterEntities),\n debounce((value) =>\n value?.forceLoad ? of({}) : timer(debounceTime, scheduler),\n ),\n concatMap((payload) =>\n payload.patch\n ? this.store.select(allSelectors.selectEntitiesFilter).pipe(\n first(),\n map((storedFilters) => ({\n ...payload,\n filters: { ...storedFilters, ...payload?.filters },\n })),\n )\n : of(payload),\n ),\n distinctUntilChanged(\n (previous, current) =>\n !current?.forceLoad &&\n JSON.stringify(previous?.filters) ===\n JSON.stringify(current?.filters),\n ),\n traitConfig?.isRemoteFilter\n ? pipe(\n startWith({\n filters: traitConfig.defaultFilter as F,\n patch: false,\n }),\n pairwise(),\n concatMap(([previous, current]) =>\n traitConfig?.isRemoteFilter!(\n previous?.filters,\n current?.filters,\n )\n ? [\n allActions.storeEntitiesFilter({\n filters: current?.filters,\n patch: current?.patch,\n }),\n allActions.loadEntities(),\n ]\n : [\n allActions.storeEntitiesFilter({\n filters: current?.filters,\n patch: current?.patch,\n }),\n ],\n ),\n )\n : map((action) =>\n allActions.storeEntitiesFilter({\n filters: action?.filters,\n patch: action?.patch,\n }),\n ),\n ),\n );\n\n loadEntities$ =\n (!traitConfig?.filterFn || traitConfig?.isRemoteFilter) &&\n createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions['storeEntitiesFilter']),\n concatMap(() =>\n allActions?.loadEntitiesFirstPage\n ? [\n allActions.clearEntitiesPagesCache(),\n allActions.loadEntitiesFirstPage(),\n ]\n : [allActions.loadEntities()],\n ),\n );\n });\n }\n\n return [FilterEffect];\n}\n","import { createReducer, on } from '@ngrx/store';\nimport {\n LoadEntitiesActions,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\nimport {\n FilterEntitiesKeyedConfig,\n FilterEntitiesMutators,\n FilterEntitiesState,\n} from './filter-entities.model';\nimport { ƟFilterEntitiesActions } from './filter-entities.model.internal';\n\nexport function createFilterInitialState<Entity, F>(\n previousInitialState: any,\n allConfigs: FilterEntitiesKeyedConfig<Entity, F>\n): LoadEntitiesState<Entity> & FilterEntitiesState<F> {\n return {\n ...previousInitialState,\n filters: allConfigs?.filter?.defaultFilter,\n };\n}\n\nexport function createFilterTraitReducer<\n T,\n F,\n S extends LoadEntitiesState<T> & FilterEntitiesState<F>\n>(\n initialState: S,\n allActions: ƟFilterEntitiesActions<F> & LoadEntitiesActions<T>,\n allMutators: FilterEntitiesMutators<T, F>\n) {\n return createReducer(\n initialState,\n on(allActions.storeEntitiesFilter, (state, { filters }) =>\n allMutators.setEntitiesFilters(filters, state)\n )\n );\n}\n","import { Action, ActionCreator } from '@ngrx/store/src/models';\n\nimport { LoadEntitiesState } from '../load-entities/load-entities.model';\n\nexport interface FilterEntitiesState<F> {\n filters?: F;\n}\n\ntype FilterPatchConditionalType<F, P> = P extends true ? Partial<F> : F;\n\nexport interface FilterActionOverload<F> {\n <P extends boolean>(props?: {\n filters: FilterPatchConditionalType<F, P>;\n forceLoad?: boolean;\n patch: P;\n }): {\n filters: FilterPatchConditionalType<F, P>;\n forceLoad: boolean;\n patch: P;\n } & Action<string>;\n (props?: { filters: F; forceLoad?: boolean }): {\n filters: F;\n forceLoad: boolean;\n patch: boolean;\n } & Action<string>;\n}\n\nexport type FilterEntitiesActions<F> = {\n /**\n * Store the filters param (read using selectFilter) and fires the loadEntities action\n * if the filters param has changed, this call is also debounce by default, to disable this\n * behavior you can use the forceLoad param as true or defaultDebounceTime to 0 in the trait config\n * to disable permanently.\n * If the `patch` param is set to true (default is false), the filters are merged with the previous value in the store,\n * otherwise they are replaced.\n */\n filterEntities: ActionCreator<string, FilterActionOverload<F>>;\n};\nexport type FilterEntitiesSelectors<T, F> = {\n /**\n * Returns the stored filters set by the filter action\n * @param state\n */\n selectEntitiesFilter: (\n state: LoadEntitiesState<T> & FilterEntitiesState<F>,\n ) => F | undefined;\n};\n\nexport type FilterEntitiesMutators<T, F> = {\n setEntitiesFilters<S extends LoadEntitiesState<T> & FilterEntitiesState<F>>(\n filter: F | undefined,\n state: S,\n ): S;\n};\n\nexport const filterEntitiesTraitKey = 'filter';\n\nexport type FilterEntitiesConfig<T, F> = {\n defaultFilter?: F;\n filterFn?: (filter: F, entity: T) => boolean;\n defaultDebounceTime?: number;\n isRemoteFilter?: (previous: F | undefined, current: F | undefined) => boolean;\n};\n\nexport type FilterEntitiesKeyedConfig<T, F> = {\n filter?: FilterEntitiesConfig<T, F>;\n};\n","import {\n FilterEntitiesMutators,\n FilterEntitiesState,\n} from './filter-entities.model';\nimport { LoadEntitiesState } from '../load-entities';\n\nexport function createFilterTraitMutators<Entity, F>(): FilterEntitiesMutators<\n Entity,\n F\n> {\n function setEntitiesFilters<\n S extends LoadEntitiesState<Entity> & FilterEntitiesState<F>\n >(filters: F, state: S) {\n return {\n ...state,\n filters,\n };\n }\n return { setEntitiesFilters };\n}\n","import { createAction } from '@ngrx/store';\nimport {\n FilterActionOverload,\n FilterEntitiesActions,\n} from './filter-entities.model';\nimport { ActionCreator } from '@ngrx/store/src/models';\nimport { ƟFilterEntitiesActions } from './filter-entities.model.internal';\n\nexport function createFilterTraitActions<F>(\n actionsGroupKey: string,\n entitiesName: string\n): FilterEntitiesActions<F> {\n const actions: ƟFilterEntitiesActions<F> = {\n filterEntities: createAction(\n `${actionsGroupKey} Filter ${entitiesName}`,\n (props?: {\n filters: F | Partial<F>;\n forceLoad?: boolean;\n patch?: boolean;\n }) => ({\n filters: props?.filters,\n forceLoad: props?.forceLoad,\n patch: props?.patch,\n })\n ) as ActionCreator<string, FilterActionOverload<F>>,\n storeEntitiesFilter: createAction(\n `${actionsGroupKey} Store ${entitiesName} Filter`,\n (props: { filters?: F; patch?: boolean }) => ({\n filters: props?.filters,\n patch: props?.patch,\n })\n ),\n };\n return actions;\n}\n","import {\n EntitiesPaginationActions,\n entitiesPaginationTraitKey,\n} from '../entities-pagination/entities-pagination.model';\nimport { createFilterTraitEffects } from './filter-entities.trait.effect';\nimport {\n createFilterInitialState,\n createFilterTraitReducer,\n} from './filter-entities.trait.reducer';\nimport {\n FilterEntitiesConfig,\n FilterEntitiesKeyedConfig,\n FilterEntitiesSelectors,\n filterEntitiesTraitKey,\n} from './filter-entities.model';\nimport { createFilterTraitSelectors } from './filter-entities.trait.selectors';\nimport {\n LoadEntitiesActions,\n LoadEntitiesSelectors,\n loadEntitiesTraitKey,\n} from '../load-entities/load-entities.model';\nimport { createFilterTraitMutators } from './filter-entities.trait.mutators';\nimport { createTraitFactory } from '@ngrx-traits/core';\nimport { createFilterTraitActions } from './filter-entities.trait.actions';\nimport { ƟFilterEntitiesActions } from './filter-entities.model.internal';\nimport {\n TraitActionsFactoryConfig,\n TraitInitialStateFactoryConfig,\n} from '@ngrx-traits/core';\n\n/**\n * Generates the ngrx code needed to filter a list of entities locally or remotely, adds a filter\n * action and a selectFilter selector, the filter action is debounced and the filter will only\n * call the loadEntities action if the params have changed, so there is no need to implement that in\n * the components. The filter action has a `forceLoad` param which can\n * be use to skip that restriction for one call or setting the `defaultDebounceTime` to 0 for all calls.\n * Calling the filter action will also replace the `filters` param in the store, if the `patch` param is set\n * the filters are merged with the previous value in the store.\n * @param traitConfig - Config object fot the trait factory\n * @param traitConfig.defaultFilter - Initial value for the filter\n * @param traitConfig.filterFn - Function to filter entities in memory, if not present then its expected\n * is filtered by the backend unless isRemoteFilter is defned\n * @param traitConfig.defaultDebounceTime - Value in milliseconds. Default to 400ms\n * @param traitConfig.isRemoteFilter - Function to when it returns true it fires loadEntities so a remote\n * backend filtering can run, otherwise it uses filterFn to do a local filtering\n *\n * @example\n * // The following trait config\n *\n * export interface TestState\n * extends LoadEntitiesState<Todo>, FilterEntitiesState<TodoFilter>{}\n *\n * const traits = createEntityFeatureFactory(\n * {entityName: 'Todo'},\n * addLoadEntitiesTrait<Todo>(),\n * //addFilterEntitiesTrait<Todo,TodoFilter>() // no params uses remote filtering\n * addFilterEntitiesTrait<Todo,TodoFilter>({filterFn: (filter, entity) => // local filtering\n * !filter.content || !!entity.content?.includes(filter.content.toLowerCase())\n * // or use the following function to switch between remote search and local\n * // depending on which properties have changed in the filter\n * // isRemoteFilter: (previous, current) => previous?.someRemoteParam !== current?.someRemoteParam,\n * )({\n * actionsGroupKey: '[Todos]',\n * featureSelector: createFeatureSelector<TestState>>(\n * 'todos',\n * ),\n * });\n *\n * // adds following props to the state:\n * // filters?: TodoFilter;\n *\n * // generated actions\n * traits.actions.filterTodos()\n * // generated selectors\n * traits.selectors.selectTodosFilter()\n */\nexport function addFilterEntitiesTrait<Entity, F>({\n defaultDebounceTime = 400,\n defaultFilter,\n filterFn,\n isRemoteFilter,\n}: FilterEntitiesConfig<Entity, F> = {}) {\n return createTraitFactory({\n key: filterEntitiesTraitKey,\n depends: [entitiesPaginationTraitKey, loadEntitiesTraitKey],\n config: {\n defaultDebounceTime,\n defaultFilter,\n filterFn,\n isRemoteFilter,\n } as FilterEntitiesConfig<Entity, F>,\n actions: ({ actionsGroupKey, entitiesName }: TraitActionsFactoryConfig) =>\n createFilterTraitActions<F>(actionsGroupKey, entitiesName),\n selectors: () => createFilterTraitSelectors<Entity, F>(),\n mutators: () => createFilterTraitMutators<Entity, F>(),\n initialState: ({\n previousInitialState,\n allConfigs,\n }: TraitInitialStateFactoryConfig) =>\n createFilterInitialState<Entity, F>(\n previousInitialState,\n allConfigs as FilterEntitiesKeyedConfig<Entity, F>\n ),\n reducer: ({ initialState, allActions, allMutators }) =>\n createFilterTraitReducer(\n initialState,\n allActions as ƟFilterEntitiesActions<F> & LoadEntitiesActions<Entity>,\n allMutators\n ),\n effects: ({ allActions, allSelectors, allConfigs }) =>\n createFilterTraitEffects(\n allActions as ƟFilterEntitiesActions<F> &\n LoadEntitiesActions<Entity> &\n EntitiesPaginationActions,\n allSelectors as FilterEntitiesSelectors<Entity, F> &\n LoadEntitiesSelectors<Entity>,\n allConfigs\n ),\n });\n}\n","import { createSelector } from '@ngrx/store';\nimport {\n CacheType,\n EntitiesPaginationSelectors,\n EntitiesPaginationState,\n PageModel,\n} from './entities-pagination.model';\nimport {\n LoadEntitiesSelectors,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\nimport { FilterEntitiesKeyedConfig } from '../filter-entities/filter-entities.model';\n\nexport function createPaginationTraitSelectors<Entity>(\n previousSelectors: LoadEntitiesSelectors<Entity>,\n allConfigs: FilterEntitiesKeyedConfig<Entity, unknown>\n): EntitiesPaginationSelectors<Entity> {\n const { selectEntitiesList, isEntitiesLoading } = previousSelectors;\n\n const filterFunction = allConfigs?.filter?.filterFn;\n\n function selectPagination(\n state: LoadEntitiesState<Entity> & EntitiesPaginationState\n ) {\n return state.pagination;\n }\n const selectPaginationFiltered: (\n state: LoadEntitiesState<Entity> & EntitiesPaginationState\n ) => EntitiesPaginationState['pagination'] = filterFunction\n ? createSelector(\n selectEntitiesList,\n selectPagination,\n (entities, pagination) => {\n return {\n ...pagination,\n total: entities.length,\n cache: {\n ...pagination.cache,\n start: 0,\n end: entities.length,\n },\n };\n }\n )\n : selectPagination;\n\n const selectEntitiesCurrentPageList = createSelector(\n selectEntitiesList,\n selectPaginationFiltered,\n (entities: Entity[], pagination) => {\n const page = pagination.currentPage;\n const startIndex = page * pagination.pageSize - pagination.cache.start;\n let endIndex = startIndex + pagination.pageSize;\n endIndex =\n endIndex < pagination.cache.end ? endIndex : pagination.cache.end;\n return entities.slice(startIndex, endIndex);\n }\n );\n\n const selectEntitiesCurrentPageInfo = createSelector(\n selectPaginationFiltered,\n (pagination) => {\n const pagesCount =\n pagination.total && pagination.total > 0\n ? Math.ceil(pagination.total / pagination.pageSize)\n : undefined;\n return {\n pageIndex: pagination.currentPage,\n total: pagination.total,\n pageSize: pagination.pageSize,\n pagesCount,\n hasPrevious: pagination.currentPage - 1 >= 0,\n hasNext:\n pagesCount && pagination.total && pagination.total > 0\n ? pagination.currentPage + 1 < pagesCount\n : true,\n cacheType: pagination.cache.type,\n };\n }\n );\n\n function isEntitiesPageInCache(\n page: number,\n pagination: {\n currentPage: number;\n requestPage: number;\n pageSize: number;\n total?: number;\n pagesToCache: number;\n cache: { type: CacheType; start: number; end: number };\n }\n ) {\n const startIndex = page * pagination.pageSize;\n let endIndex = startIndex + pagination.pageSize - 1;\n endIndex =\n pagination.total && endIndex > pagination.total\n ? pagination.total - 1\n : endIndex;\n return (\n startIndex >= pagination.cache.start && endIndex <= pagination.cache.end\n );\n }\n\n const isEntitiesCurrentPageInCache = createSelector(\n selectPaginationFiltered,\n (pagination) => {\n const page = pagination.currentPage;\n return isEntitiesPageInCache(page, pagination);\n }\n );\n const isEntitiesNextPageInCache = createSelector(\n selectPaginationFiltered,\n (pagination) => {\n const page = pagination.currentPage + 1;\n return isEntitiesPageInCache(page, pagination);\n }\n );\n const isLoadingEntitiesCurrentPage = createSelector(\n isEntitiesLoading,\n selectPagination,\n (isLoading, pagination) =>\n isLoading && pagination.requestPage === pagination.currentPage\n );\n\n const selectEntitiesCurrentPage = createSelector(\n selectEntitiesCurrentPageList,\n selectEntitiesCurrentPageInfo,\n isLoadingEntitiesCurrentPage,\n (entities, pageInfo, isLoading) =>\n ({\n entities,\n isLoading,\n ...pageInfo,\n } as PageModel<Entity>)\n );\n\n const selectEntitiesPagedRequest = createSelector(\n selectPagination,\n (pagination) => ({\n startIndex: pagination.pageSize * pagination.requestPage,\n size: pagination.pageSize * pagination.pagesToCache,\n page: pagination.requestPage,\n })\n );\n\n const selectors = {\n selectEntitiesCurrentPageList,\n isEntitiesNextPageInCache,\n isEntitiesCurrentPageInCache,\n selectEntitiesCurrentPage,\n selectEntitiesPagedRequest,\n selectEntitiesCurrentPageInfo,\n isLoadingEntitiesCurrentPage,\n };\n return selectors;\n}\n","import { EntitiesPaginationActions } from './entities-pagination.model';\nimport { createAction, props } from '@ngrx/store';\nimport { ƟPaginationActions } from './entities-pagination.model.internal';\n\nexport function createPaginationTraitActions(\n actionsGroupKey: string,\n entitiesName: string\n): EntitiesPaginationActions {\n const actions: ƟPaginationActions = {\n loadEntitiesPage: createAction(\n `${actionsGroupKey} Load ${entitiesName} Page`,\n ({ index, forceLoad }: { index: number; forceLoad?: boolean }) => ({\n index,\n forceLoad,\n })\n ),\n loadEntitiesPageSuccess: createAction(\n `${actionsGroupKey} Load ${entitiesName}\n Page Success`\n ),\n loadEntitiesPageFail: createAction(\n `${actionsGroupKey} Load ${entitiesName} Page Fail`\n ),\n loadEntitiesPreviousPage: createAction(\n `${actionsGroupKey} Load Previous ${entitiesName} Page`\n ),\n loadEntitiesNextPage: createAction(\n `${actionsGroupKey} Load Next ${entitiesName} Page`\n ),\n loadEntitiesFirstPage: createAction(\n `${actionsGroupKey} Load First ${entitiesName} Page`,\n (forceLoad?: boolean) => ({ forceLoad })\n ),\n loadEntitiesLastPage: createAction(\n `${actionsGroupKey} Load Last ${entitiesName} Page`\n ),\n clearEntitiesPagesCache: createAction(\n `${actionsGroupKey} Clear ${entitiesName} Cache`\n ),\n setEntitiesRequestPage: createAction(\n `${actionsGroupKey} Set ${entitiesName} Request Page`,\n props<{ index: number }>()\n ),\n };\n return actions;\n}\n","import {\n FilterEntitiesActions,\n FilterEntitiesKeyedConfig,\n} from '../filter-entities/filter-entities.model';\nimport { createReducer, on } from '@ngrx/store';\n\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesMutators,\n LoadEntitiesSelectors,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\nimport {\n EntitiesPaginationKeyedConfig,\n EntitiesPaginationMutators,\n EntitiesPaginationState,\n} from './entities-pagination.model';\nimport { CrudEntitiesActions } from '../crud-entities';\nimport { ƟPaginationActions } from './entities-pagination.model.internal';\nimport { insertIf } from '@ngrx-traits/core';\nimport { ƟFilterEntitiesActions } from '../filter-entities/filter-entities.model.internal';\n\nexport function createPaginationInitialState<Entity>(\n previousInitialState: any,\n allConfigs: EntitiesPaginationKeyedConfig\n): LoadEntitiesState<Entity> & EntitiesPaginationState {\n const { currentPage, pageSize, cacheType, pagesToCache } =\n allConfigs.pagination!;\n\n return {\n ...previousInitialState,\n pagination: {\n pageSize,\n currentPage,\n requestPage: currentPage,\n pagesToCache,\n cache: {\n type: cacheType,\n start: 0,\n end: 0,\n },\n },\n };\n}\n\nexport function createPaginationTraitReducer<\n Entity,\n S extends LoadEntitiesState<Entity> & EntitiesPaginationState\n>(\n initialState: S,\n allActions: ƟPaginationActions &\n ƟFilterEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n CrudEntitiesActions<Entity>,\n allSelectors: LoadEntitiesSelectors<Entity>,\n allMutators: EntitiesPaginationMutators<Entity> &\n LoadEntitiesMutators<Entity>,\n allConfigs: FilterEntitiesKeyedConfig<Entity, unknown> &\n LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig\n) {\n function addToCacheTotal<\n S extends LoadEntitiesState<Entity> & EntitiesPaginationState\n >(state: S, add: number) {\n return {\n ...state,\n pagination: {\n ...state.pagination,\n total: (state.pagination.total ?? 0) + add,\n },\n };\n }\n\n function clearPagesCache<\n S extends LoadEntitiesState<Entity> & EntitiesPaginationState\n >(state: S): S {\n return {\n ...state,\n entities: {},\n ids: [],\n pagination: {\n ...state.pagination,\n currentPage: 0,\n total: 0,\n cache: { ...state.pagination.cache, start: 0, end: 0 },\n },\n };\n }\n\n function recalculateTotal<\n S extends LoadEntitiesState<Entity> & EntitiesPaginationState\n >(state: S): S {\n const total = allSelectors.selectEntitiesTotal(state);\n return {\n ...state,\n status: 'success',\n pagination: {\n ...state.pagination,\n currentPage: 0,\n total,\n cache: {\n ...state.pagination.cache,\n start: 0,\n end: total,\n },\n },\n };\n }\n\n const filterRemote = !allConfigs?.filter?.filterFn;\n\n return createReducer(\n initialState,\n on(allActions.loadEntitiesPage, (state, { index }) =>\n allMutators.setEntitiesPage(state, index)\n ),\n on(allActions.setEntitiesRequestPage, (state, { index }) => ({\n ...state,\n pagination: {\n ...state.pagination,\n requestPage: index,\n },\n status: 'loading',\n })),\n on(allActions.loadEntitiesPageSuccess, (state) => ({\n ...state,\n status: 'success',\n })),\n on(allActions.loadEntitiesPageFail, (state) => ({\n ...state,\n status: 'fail',\n })),\n on(allActions.clearEntitiesPagesCache, (state) => clearPagesCache(state)),\n on(allActions.loadEntitiesSuccess, (state, { entities, total }) =>\n allMutators.mergePaginatedEntities(entities, total, {\n ...state,\n status: 'success',\n })\n ),\n ...insertIf<S>(allActions.addEntities, () =>\n on(allActions.addEntities, (state, { entities }) =>\n addToCacheTotal(state, entities.length)\n )\n ),\n ...insertIf<S>(allActions.removeEntities, () =>\n on(allActions.removeEntities, (state, { keys }) =>\n addToCacheTotal(state, -keys.length)\n )\n ),\n ...insertIf<S>(allActions.storeEntitiesFilter, () =>\n on(allActions.storeEntitiesFilter, (state) => recalculateTotal(state))\n ),\n ...insertIf<S>(allActions.removeAllEntities, () =>\n on(allActions.removeAllEntities, (state) => clearPagesCache(state))\n )\n );\n}\n","import { Injectable } from '@angular/core';\nimport { TraitEffect } from '@ngrx-traits/core';\nimport { Type } from '@ngrx-traits/core';\nimport { createEffect, ofType } from '@ngrx/effects';\nimport { concatLatestFrom } from '@ngrx/operators';\nimport {\n concatMap,\n concatMapTo,\n filter,\n first,\n map,\n tap,\n} from 'rxjs/operators';\n\nimport { CrudEntitiesActions } from '../crud-entities/crud-entities.model';\nimport { FilterEntitiesActions } from '../filter-entities/filter-entities.model';\nimport { LoadEntitiesActions, LoadEntitiesSelectors } from '../load-entities';\nimport { EntitiesPaginationSelectors } from './entities-pagination.model';\nimport {\n ƟEntitiesPaginationSelectors,\n ƟPaginationActions,\n} from './entities-pagination.model.internal';\n\nexport function createPaginationTraitEffects<Entity>(\n allActions: ƟPaginationActions &\n FilterEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n CrudEntitiesActions<Entity>,\n allSelectors: LoadEntitiesSelectors<Entity> &\n EntitiesPaginationSelectors<Entity>,\n): Type<TraitEffect>[] {\n @Injectable()\n class PaginationEffect extends TraitEffect {\n loadPage$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.loadEntitiesPage),\n concatLatestFrom(() =>\n this.store.select(\n (allSelectors as unknown as ƟEntitiesPaginationSelectors<Entity>)\n .isEntitiesCurrentPageInCache,\n ),\n ),\n map(([{ forceLoad }, isInCache]) =>\n !forceLoad && isInCache\n ? allActions.loadEntitiesPageSuccess()\n : allActions.loadEntities(),\n ),\n );\n });\n\n preloadNextPage$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.loadEntitiesPageSuccess),\n concatMapTo(\n this.store\n .select(allSelectors.selectEntitiesCurrentPageInfo)\n .pipe(first()),\n ),\n filter(\n (pageInfo) =>\n !!pageInfo.total &&\n pageInfo.hasNext &&\n pageInfo.cacheType !== 'full',\n ),\n concatMap((pageInfo) =>\n this.store\n .select(\n (allSelectors as unknown as ƟEntitiesPaginationSelectors<Entity>)\n .isEntitiesNextPageInCache,\n )\n .pipe(\n first(),\n map((isInCache) => (!isInCache && pageInfo) || undefined),\n ),\n ),\n filter((pageInfo) => !!pageInfo),\n concatMap((pageInfo) => [\n allActions.setEntitiesRequestPage({ index: pageInfo!.pageIndex + 1 }),\n allActions.loadEntities(),\n ]),\n );\n });\n\n loadFirstPage$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.loadEntitiesFirstPage),\n map(() => allActions.loadEntitiesPage({ index: 0 })),\n );\n });\n\n loadPreviousPage$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.loadEntitiesPreviousPage),\n concatMapTo(\n this.store\n .select(allSelectors.selectEntitiesCurrentPageInfo)\n .pipe(first()),\n ),\n map((page) =>\n page.hasPrevious\n ? allActions.loadEntitiesPage({ index: page.pageIndex - 1 })\n : allActions.loadEntitiesPageFail(),\n ),\n );\n });\n\n loadNextPage$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.loadEntitiesNextPage),\n concatMapTo(\n this.store\n .select(allSelectors.selectEntitiesCurrentPageInfo)\n .pipe(first()),\n ),\n map((page) =>\n page.hasNext\n ? allActions.loadEntitiesPage({ index: page.pageIndex + 1 })\n : allActions.loadEntitiesPageFail(),\n ),\n );\n });\n\n loadLastPage$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.loadEntitiesLastPage),\n concatMapTo(\n this.store\n .select(allSelectors.selectEntitiesCurrentPageInfo)\n .pipe(first()),\n ),\n map((page) =>\n page.hasNext && page.pagesCount\n ? allActions.loadEntitiesPage({ index: page.pagesCount - 1 })\n : allActions.loadEntitiesPageFail(),\n ),\n );\n });\n }\n return [PaginationEffect];\n}\n","import {\n EntitiesPaginationMutators,\n EntitiesPaginationSelectors,\n EntitiesPaginationState,\n} from './entities-pagination.model';\nimport { LoadEntitiesKeyedConfig, LoadEntitiesState } from '../load-entities';\n\nexport function createPaginationTraitMutators<Entity>(\n allSelectors: EntitiesPaginationSelectors<Entity>,\n allConfigs: LoadEntitiesKeyedConfig<Entity>\n): EntitiesPaginationMutators<Entity> {\n const adapter = allConfigs.loadEntities!.adapter;\n\n function mergePaginatedEntities<\n S extends LoadEntitiesState<Entity> & EntitiesPaginationState\n >(entities: Entity[], total = undefined, state: S): S {\n const cacheType = state.pagination.cache.type;\n\n switch (cacheType) {\n case 'full':\n return adapter.setAll(entities, {\n ...state,\n pagination: {\n ...state.pagination,\n total: entities.length,\n cache: {\n ...state.pagination.cache,\n start: 0,\n end: entities.length,\n },\n },\n });\n case 'partial': {\n const isPreloadNextPages =\n state.pagination.currentPage + 1 === state.pagination.requestPage;\n\n const start = state.pagination.currentPage * state.pagination.pageSize;\n const newEntities = isPreloadNextPages\n ? [...allSelectors.selectEntitiesCurrentPageList(state), ...entities]\n : entities;\n return adapter.setAll(newEntities, {\n ...state,\n pagination: {\n ...state.pagination,\n total,\n cache: {\n ...state.pagination.cache,\n start,\n end: start + entities.length,\n },\n },\n });\n }\n case 'grow':\n return adapter.addMany(entities, {\n ...state,\n pagination: {\n ...state.pagination,\n total,\n cache: {\n ...state.pagination.cache,\n end: state.ids.length + entities.length,\n },\n },\n });\n }\n\n return state;\n }\n function setEntitiesPage<\n Entity,\n S extends LoadEntitiesState<Entity> & EntitiesPaginationState\n >(state: S, index: number) {\n return {\n ...state,\n pagination: {\n ...state.pagination,\n currentPage: index,\n requestPage: index,\n },\n status: 'loading',\n };\n }\n return { mergePaginatedEntities, setEntitiesPage };\n}\n","import {\n EntitiesPaginationConfig,\n EntitiesPaginationKeyedConfig,\n EntitiesPaginationMutators,\n EntitiesPaginationSelectors,\n entitiesPaginationTraitKey,\n} from './entities-pagination.model';\nimport { createPaginationTraitSelectors } from './entities-pagination.trait.selectors';\nimport { createPaginationTraitActions } from './entities-pagination.trait.actions';\nimport {\n FilterEntitiesActions,\n FilterEntitiesKeyedConfig,\n} from '../filter-entities/filter-entities.model';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesMutators,\n LoadEntitiesSelectors,\n loadEntitiesTraitKey,\n} from '../load-entities/load-entities.model';\nimport {\n createPaginationInitialState,\n createPaginationTraitReducer,\n} from './entities-pagination.trait.reducer';\nimport { createPaginationTraitEffects } from './entities-pagination.trait.effects';\nimport { createTraitFactory } from '@ngrx-traits/core';\nimport { CrudEntitiesActions } from '../crud-entities/crud-entities.model';\nimport { createPaginationTraitMutators } from './entities-pagination.trait.mutators';\nimport {\n ƟEntitiesPaginationSelectors,\n ƟPaginationActions,\n} from './entities-pagination.model.internal';\nimport {\n TraitActionsFactoryConfig,\n TraitInitialStateFactoryConfig,\n TraitSelectorsFactoryConfig,\n} from '@ngrx-traits/core';\nimport { ƟFilterEntitiesActions } from '../filter-entities/filter-entities.model.internal';\n\n/**\n * Generates ngrx code to paginate a list of entities, this has 3 cache `cacheType`\n * - 'full': The full result is cache in memory and split in pages to render, useful\n * for small result but not so small that requires been render in pages\n * - 'partial': Backend returns partial results because is are to big, this has a cache a few pages forward\n * to avoid calling the backend on each page, the cache is clean when a new loadEntities is required\n * - 'grow': Similar to partial that the backend returns partial result, but in this case the cache grows,\n * after each loadEntities the cache is appended to the previous cache, this mode is ideal for infinite scrolls,\n * where you will only call loadNextPage.\n * To make the pagination experience smoother the loadEntities action is fired when the current page is equal\n * to the last cached page, so while the user is reading the page more pages are being loading in the background.\n * @param config\n * @param config.cacheType - Default to 'partial', change the cache mode\n * @param config.pageSize - Default to 10, number of entities on each page\n * @param config.currentPage - Default to 0, starting page\n * @param config.pagesToCache - Default to 3, used in partial and grow cache mode, is the number of\n * extra pages kept in cache to avoid calling the backend on each page\n *\n * @example\n * // The following trait config\n *\n * export interface TestState\n * extends EntityAndStatusState<Todo>,EntitiesPaginationState{}\n *\n * const traits = createEntityFeatureFactory(\n * {entityName: 'Todo'},\n * addLoadEntitiesTrait<Todo>(),\n * addEntitiesPaginationTrait<Todo>()\n * )({\n * actionsGroupKey: '[Todos]',\n * featureSelector: createFeatureSelector<TestState>>(\n * 'todos',\n * ),\n * });\n *\n * // adds following props to the state:\n * // pagination: {\n * // currentPage: number;\n * // requestPage: number;\n * // pageSize: number;\n * // total?: number;\n * // pagesToCache: number;\n * // cache: {\n * // type: 'full' | 'partial' | 'grow';\n * // start: number;\n * // end: number;\n * // }\n * // }\n *\n * // generated actions\n * traits.actions.loadTodosPage({index})\n * traits.actions.loadTodosPageSuccess()\n * traits.actions.loadTodosPageFail()\n * traits.actions.loadTodosNextPage()\n * traits.actions.loadTodosPreviousPage()\n * traits.actions.loadTodosFirstPage()\n * traits.actions.loadTodosLastPage()\n * traits.actions.clearTodosPagesCache()\n * // generated selectors\n * traits.selectors.selectTodosCurrentPageList()\n * traits.selectors.isLoadingTodosCurrentPage()\n * // use isLoadingTodosPage over isLoadingTodos (which will return true even\n * // if the page loading is not the current one)\n * traits.selectors.selectTodosCurrentPage()\n * traits.selectors.selectTodosPagedRequest()// use in effects to get paging parameter\n * traits.selectors.selectTodosCurrentPageInfo()\n */\nexport function addEntitiesPaginationTrait<Entity>({\n cacheType = 'partial',\n pageSize = 10,\n currentPage = 0,\n pagesToCache = 3,\n}: EntitiesPaginationConfig = {}) {\n return createTraitFactory({\n key: entitiesPaginationTraitKey,\n depends: [loadEntitiesTraitKey],\n config: {\n cacheType,\n pageSize,\n currentPage,\n pagesToCache,\n } as EntitiesPaginationConfig,\n actions: ({ actionsGroupKey, entitiesName }: TraitActionsFactoryConfig) =>\n createPaginationTraitActions(actionsGroupKey, entitiesName),\n selectors: ({\n previousSelectors,\n allConfigs,\n }: TraitSelectorsFactoryConfig) =>\n createPaginationTraitSelectors<Entity>(\n previousSelectors as LoadEntitiesSelectors<Entity>,\n allConfigs as EntitiesPaginationKeyedConfig &\n FilterEntitiesKeyedConfig<Entity, unknown>\n ),\n mutators: ({ allSelectors, allConfigs }) =>\n createPaginationTraitMutators<Entity>(\n allSelectors as EntitiesPaginationSelectors<Entity> &\n LoadEntitiesSelectors<Entity>,\n allConfigs as EntitiesPaginationKeyedConfig &\n LoadEntitiesKeyedConfig<Entity>\n ),\n initialState: ({\n previousInitialState,\n allConfigs,\n }: TraitInitialStateFactoryConfig) =>\n createPaginationInitialState<Entity>(\n previousInitialState,\n allConfigs as EntitiesPaginationKeyedConfig\n ),\n reducer: ({\n initialState,\n allActions,\n allSelectors,\n allMutators,\n allConfigs,\n }) =>\n createPaginationTraitReducer(\n initialState,\n allActions as ƟPaginationActions &\n ƟFilterEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n CrudEntitiesActions<Entity>,\n allSelectors as ƟEntitiesPaginationSelectors<Entity> &\n LoadEntitiesSelectors<Entity>,\n allMutators as EntitiesPaginationMutators<Entity> &\n LoadEntitiesMutators<Entity>,\n allConfigs as FilterEntitiesKeyedConfig<Entity, unknown> &\n LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig\n ),\n effects: ({ allActions, allSelectors }) =>\n createPaginationTraitEffects(\n allActions as ƟPaginationActions &\n FilterEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n CrudEntitiesActions<Entity>,\n allSelectors as ƟEntitiesPaginationSelectors<Entity> &\n LoadEntitiesSelectors<Entity>\n ),\n });\n}\n","import { createAction, props } from '@ngrx/store';\nimport { SelectEntitiesActions } from './select-entities.model';\n\nexport function createSelectEntitiesTraitActions(\n actionsGroupKey: string,\n entitiesName: string\n): SelectEntitiesActions {\n return {\n selectEntities: createAction(\n `${actionsGroupKey} Select ${entitiesName}`,\n props<{ id: number | string }>()\n ),\n deselectEntities: createAction(\n `${actionsGroupKey} Deselect ${entitiesName}`,\n props<{ id: number | string }>()\n ),\n toggleSelectEntities: createAction(\n `${actionsGroupKey} Toggle Select ${entitiesName}`,\n props<{ id: number | string }>()\n ),\n toggleSelectAllEntities: createAction(\n `${actionsGroupKey} Toggle Select All ${entitiesName}`\n ),\n clearEntitiesSelection: createAction(\n `${actionsGroupKey} Clear ${entitiesName} Selection`\n ),\n };\n}\n","import { SelectEntitiesState } from './select-entities.model';\nimport { LoadEntitiesState } from '../load-entities';\n\nexport function deselectEntities<S extends SelectEntitiesState>(\n id: number | string,\n state: S\n): S {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [id]: _value, ...selectedIds } = state.selectedIds;\n return {\n ...state,\n selectedIds: selectedIds,\n };\n}\n\nexport function selectEntities<S extends SelectEntitiesState>(\n id: number | string,\n state: S\n): S {\n return {\n ...state,\n selectedIds: { ...state.selectedIds, [id]: true },\n };\n}\n\nexport function toggleSelectEntities<S extends SelectEntitiesState>(\n id: number | string,\n state: S\n): S {\n const selected = state.selectedIds[id];\n if (selected) {\n return deselectEntities(id, state);\n } else {\n return selectEntities(id, state);\n }\n}\nexport function clearEntitiesSelection<S extends SelectEntitiesState>(\n state: S\n): S {\n return { ...state, selectedIds: {} };\n}\n\nexport function selectTotalSelectedEntities<\n Entity,\n S extends LoadEntitiesState<Entity> & SelectEntitiesState\n>(state: S): number {\n return Object.keys(state.selectedIds).length;\n}\n","import { createSelector } from '@ngrx/store';\nimport { selectTotalSelectedEntities } from './select-entities.utils';\nimport {\n SelectEntitiesSelectors,\n SelectEntitiesState,\n} from './select-entities.model';\nimport { LoadEntitiesSelectors, LoadEntitiesState } from '../load-entities';\nimport { Dictionary } from '@ngrx/entity/src/models';\n\nexport function createSelectEntitiesTraitSelectors<Entity>(\n previousSelectors: LoadEntitiesSelectors<Entity>\n): SelectEntitiesSelectors<Entity> {\n const { selectEntitiesMap, selectEntitiesTotal } = previousSelectors;\n\n function selectEntitiesIdsSelectedMap(\n state: LoadEntitiesState<Entity> & SelectEntitiesState\n ) {\n return state.selectedIds;\n }\n const selectEntitiesIdsSelectedList = createSelector(\n selectEntitiesIdsSelectedMap,\n (ids: Dictionary<boolean>) => Object.keys(ids)\n );\n const selectEntitiesSelectedMap = createSelector(\n selectEntitiesIdsSelectedList,\n selectEntitiesMap,\n (selectedIds, entities) =>\n selectedIds.reduce((acum: { [id: string]: Entity | undefined }, id) => {\n acum[id] = entities[id];\n return acum;\n }, {})\n );\n const selectEntitiesSelectedList = createSelector(\n selectEntitiesIdsSelectedList,\n selectEntitiesMap,\n (selectedIds, entities) => selectedIds.map((id) => entities[id]!)\n );\n\n const isAllEntitiesSelected = createSelector(\n (state: LoadEntitiesState<Entity> & SelectEntitiesState) =>\n selectEntitiesTotal(state),\n selectTotalSelectedEntities,\n (total, totalSelected) =>\n totalSelected > 0 && totalSelected === total\n ? 'all'\n : totalSelected === 0\n ? 'none'\n : 'some'\n );\n\n return {\n selectEntitiesIdsSelectedMap,\n selectEntitiesIdsSelectedList,\n selectEntitiesSelectedMap,\n selectEntitiesSelectedList,\n selectTotalSelectedEntities,\n isAllEntitiesSelected,\n };\n}\n","import {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\nimport {\n SortEntitiesActions,\n SortEntitiesKeyedConfig,\n} from '../sort-entities/sort-entities.model';\nimport {\n SelectEntitiesMutators,\n SelectEntitiesActions,\n SelectEntitiesState,\n} from './select-entities.model';\nimport { CrudEntitiesActions } from '../crud-entities/crud-entities.model';\nimport { Update } from '@ngrx/entity/src/models';\nimport { insertIf } from '@ngrx-traits/core';\nimport { createReducer, on } from '@ngrx/store';\nimport {\n EntitiesPaginationActions,\n EntitiesPaginationKeyedConfig,\n} from '../entities-pagination/entities-pagination.model';\nimport { FilterEntitiesActions } from '../filter-entities';\n\nexport function createSelectEntitiesInitialState<Entity>(\n previousInitialState: any\n): LoadEntitiesState<Entity> & SelectEntitiesState {\n return {\n ...previousInitialState,\n selectedIds: {},\n };\n}\n\nexport function createSelectEntitiesTraitReducer<\n Entity,\n S extends LoadEntitiesState<Entity> & SelectEntitiesState\n>(\n initialState: S,\n allActions: SelectEntitiesActions &\n CrudEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n FilterEntitiesActions<any> &\n EntitiesPaginationActions,\n allMutators: SelectEntitiesMutators<Entity>,\n allConfigs: LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig &\n SortEntitiesKeyedConfig<Entity>\n) {\n const { adapter } = allConfigs.loadEntities!;\n const sortRemote = allConfigs.sort?.remote;\n const paginationCacheType = allConfigs.pagination?.cacheType;\n\n function updateSelectedIdsChanged<\n S extends LoadEntitiesState<Entity> & SelectEntitiesState\n >(state: S, updates: Update<Entity>[]) {\n const changedIds = updates.reduce((acc, updated) => {\n const id = adapter.selectId(updated.changes as Entity);\n if (id && id !== updated.id && state.selectedIds[updated.id] != null) {\n acc.push(updated);\n return acc;\n }\n return acc;\n }, [] as Update<Entity>[]);\n if (changedIds.length) {\n const selectedIds = { ...state.selectedIds };\n changedIds.forEach((updated) => {\n const id = adapter.selectId(updated.changes as Entity);\n const value = selectedIds[updated.id];\n delete selectedIds[updated.id];\n selectedIds[id] = value;\n });\n return { ...state, selectedIds };\n }\n\n return state;\n }\n\n return createReducer(\n initialState,\n on(allActions.selectEntities, (state, { id }) =>\n allMutators.selectEntities(id, state)\n ),\n on(allActions.deselectEntities, (state, { id }) =>\n allMutators.deselectEntities(id, state)\n ),\n on(allActions.toggleSelectEntities, (state, { id }) =>\n allMutators.toggleSelectEntities(id, state)\n ),\n on(allActions.toggleSelectAllEntities, (state) =>\n allMutators.toggleSelectAllEntities(state)\n ),\n ...insertIf<S>(allActions.removeEntities, () =>\n on(allActions.removeEntities, (state, { keys }) => {\n const selectedIds = { ...state.selectedIds };\n keys.forEach((v: string | number) => {\n delete selectedIds[v];\n });\n return { ...state, selectedIds };\n })\n ),\n ...insertIf<S>(allActions.updateEntities, () =>\n on(allActions.updateEntities, (state, { updates }) =>\n updateSelectedIdsChanged(state, updates)\n )\n ),\n on(allActions.clearEntitiesSelection, (state) =>\n allMutators.clearEntitiesSelection(state)\n ),\n ...insertIf<S>(allActions.removeAllEntities, () =>\n on(allActions.removeAllEntities, (state) =>\n allMutators.clearEntitiesSelection(state)\n )\n ),\n ...insertIf<S>(sortRemote, () =>\n on(allActions.sortEntities, (state) =>\n allMutators.clearEntitiesSelection(state)\n )\n ),\n ...insertIf<S>(allActions.filterEntities, () =>\n on(allActions.filterEntities, (state) =>\n allMutators.clearEntitiesSelection(state)\n )\n ),\n ...insertIf<S>(!allActions.loadEntitiesPageSuccess, () =>\n on(allActions.loadEntitiesSuccess, (state) =>\n allMutators.clearEntitiesSelection(state)\n )\n ),\n ...insertIf<S>(\n !!allActions.loadEntitiesPageSuccess && paginationCacheType === 'partial',\n () =>\n on(allActions.loadEntitiesPageSuccess, (state) =>\n allMutators.clearEntitiesSelection(state)\n )\n )\n );\n}\n","import {\n SelectEntitiesMutators,\n SelectEntitiesSelectors,\n SelectEntitiesState,\n} from './select-entities.model';\nimport { toMap } from '@ngrx-traits/core';\nimport {\n clearEntitiesSelection,\n deselectEntities,\n selectEntities,\n toggleSelectEntities,\n} from './select-entities.utils';\nimport { LoadEntitiesState } from '../load-entities';\n\nexport function createSelectEntitiesTraitMutators<Entity>({\n isAllEntitiesSelected,\n}: SelectEntitiesSelectors<Entity>): SelectEntitiesMutators<Entity> {\n function toggleSelectAllEntities<\n S extends LoadEntitiesState<Entity> & SelectEntitiesState\n >(state: S): S {\n const allSelected = isAllEntitiesSelected(state);\n if (allSelected === 'all') {\n return {\n ...state,\n selectedIds: {},\n };\n } else {\n return {\n ...state,\n selectedIds: toMap(state.ids),\n };\n }\n }\n\n return {\n selectEntities,\n deselectEntities,\n toggleSelectEntities,\n toggleSelectAllEntities,\n clearEntitiesSelection,\n };\n}\n","import { createSelectEntitiesTraitActions } from './select-entities.trait.actions';\nimport { SortEntitiesActions, SortEntitiesKeyedConfig } from '../sort-entities';\nimport { createSelectEntitiesTraitSelectors } from './select-entities.trait.selectors';\nimport {\n SelectEntitiesSelectors,\n SelectEntitiesActions,\n} from './select-entities.model';\nimport {\n EntitiesPaginationActions,\n EntitiesPaginationKeyedConfig,\n} from '../entities-pagination/entities-pagination.model';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesSelectors,\n loadEntitiesTraitKey,\n} from '../load-entities/load-entities.model';\nimport { createTraitFactory } from '@ngrx-traits/core';\nimport { CrudEntitiesActions } from '../crud-entities/crud-entities.model';\nimport {\n createSelectEntitiesInitialState,\n createSelectEntitiesTraitReducer,\n} from './select-entities.trait.reducer';\nimport { createSelectEntitiesTraitMutators } from './select-entities.trait.mutators';\nimport { FilterEntitiesActions } from '../filter-entities';\nimport {\n TraitActionsFactoryConfig,\n TraitInitialStateFactoryConfig,\n TraitSelectorsFactoryConfig,\n TraitStateMutatorsFactoryConfig,\n} from '@ngrx-traits/core';\n\n/**\n * Generates ngrx code to add multi selection to a list\n *\n * @example\n * // The following trait config\n *\n * export interface TestState\n * extends EntityAndStatusState<Todo>,MultipleSelectionState{}\n *\n * const traits = createEntityFeatureFactory(\n * {entityName: 'Todo'},\n * addLoadEntitiesTrait<Todo>(),\n * addSelectEntitiesTrait<Todo>()\n * )({\n * actionsGroupKey: '[Todos]',\n * featureSelector: createFeatureSelector<TestState>>(\n * 'todos',\n * ),\n * });\n *\n * // adds following props to the state:\n * // selectedIds: Dictionary<boolean>;\n *\n * // generated actions\n * traits.actions.selectTodos({id})\n * traits.actions.deselectTodos({id})\n * traits.actions.toggleSectTodos({id})\n * traits.actions.toggleSelectAllTodos()\n * traits.actions.clearTodosSelection()\n * //generated selectors\n * traits.selectors.isAllTodosSelected()\n * traits.selectors.selectTodosIdsSelectedMap()\n * traits.selectors.selectTodosIdsSelectedList()\n * traits.selectors.selectTodosSelectedMap()\n * traits.selectors.selectTodosSelectedList()\n * traits.selectors.selectTotalSelectedTodos()\n */\nexport function addSelectEntitiesTrait<Entity>() {\n return createTraitFactory({\n key: 'SelectEntities',\n depends: [loadEntitiesTraitKey],\n actions: ({ actionsGroupKey, entitiesName }: TraitActionsFactoryConfig) =>\n createSelectEntitiesTraitActions(actionsGroupKey, entitiesName),\n selectors: ({ previousSelectors }: TraitSelectorsFactoryConfig) =>\n createSelectEntitiesTraitSelectors<Entity>(\n previousSelectors as LoadEntitiesSelectors<Entity>\n ),\n initialState: ({ previousInitialState }: TraitInitialStateFactoryConfig) =>\n createSelectEntitiesInitialState<Entity>(previousInitialState),\n mutators: ({ allSelectors }: TraitStateMutatorsFactoryConfig) =>\n createSelectEntitiesTraitMutators<Entity>(\n allSelectors as SelectEntitiesSelectors<Entity>\n ),\n reducer: ({ initialState, allActions, allMutators, allConfigs }) =>\n createSelectEntitiesTraitReducer(\n initialState,\n allActions as SelectEntitiesActions &\n CrudEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n FilterEntitiesActions<any> &\n EntitiesPaginationActions,\n allMutators,\n allConfigs as LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig &\n SortEntitiesKeyedConfig<Entity>\n ),\n });\n}\n","import { createAction, props } from '@ngrx/store';\nimport { SelectEntityActions } from './select-entity.model';\n\nexport function createSelectEntityTraitActions(\n actionsGroupKey: string,\n entityName: string\n): SelectEntityActions {\n return {\n selectEntity: createAction(\n `${actionsGroupKey} Select ${entityName}`,\n props<{ id: string | number }>()\n ),\n deselectEntity: createAction(`${actionsGroupKey} Deselect ${entityName}`),\n toggleSelectEntity: createAction(\n `${actionsGroupKey} Toggle Select ${entityName}`,\n props<{ id: string | number }>()\n ),\n };\n}\n","import {\n SelectEntitySelectors,\n SelectEntityState,\n} from './select-entity.model';\nimport { LoadEntitiesState } from '../load-entities';\n\nexport function createSelectEntityTraitSelectors<\n Entity\n>(): SelectEntitySelectors<Entity> {\n function selectEntityIdSelected(state: SelectEntityState) {\n return state.selectedId;\n }\n function selectEntitySelected<Entity>(\n state: LoadEntitiesState<Entity> & SelectEntityState\n ) {\n return (state.selectedId && state.entities[state.selectedId]) || undefined;\n }\n\n return {\n selectEntityIdSelected,\n selectEntitySelected,\n };\n}\n","import { createReducer, on } from '@ngrx/store';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\nimport {\n SortEntitiesActions,\n SortEntitiesKeyedConfig,\n} from '../sort-entities/sort-entities.model';\nimport {\n SelectEntityActions,\n SelectEntityKeyedConfig,\n SelectEntityMutators,\n SelectEntityState,\n} from './select-entity.model';\nimport { CrudEntitiesActions } from '../crud-entities/crud-entities.model';\nimport { insertIf } from '@ngrx-traits/core';\nimport {\n EntitiesPaginationActions,\n EntitiesPaginationKeyedConfig,\n} from '../entities-pagination/entities-pagination.model';\nimport { FilterEntitiesActions } from '../filter-entities';\nimport { createSelectEntityTraitActions } from './select-entity.trait.actions';\n\nexport function createSelectEntityInitialState<Entity>(\n previousInitialState: any,\n allConfigs: SelectEntityKeyedConfig\n): LoadEntitiesState<Entity> & SelectEntityState {\n const selectedId = allConfigs.singleSelection?.selectedId;\n return {\n ...previousInitialState,\n selectedId,\n };\n}\nexport function createSelectEntityTraitReducer<\n Entity,\n S extends LoadEntitiesState<Entity> & SelectEntityState\n>(\n initialState: S,\n allActions: SelectEntityActions &\n CrudEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n EntitiesPaginationActions &\n FilterEntitiesActions<any> &\n LoadEntitiesActions<Entity>,\n allMutators: SelectEntityMutators<Entity>,\n allConfigs: SelectEntityKeyedConfig &\n LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig &\n SortEntitiesKeyedConfig<Entity>\n) {\n const { adapter } = allConfigs.loadEntities!;\n\n const sortRemote = allConfigs.sort?.remote;\n const paginationCacheType = allConfigs.pagination?.cacheType;\n\n return createReducer(\n initialState,\n on(allActions.selectEntity, (state, { id }) =>\n allMutators.selectEntity(id, state)\n ),\n on(allActions.deselectEntity, (state) => allMutators.deselectEntity(state)),\n on(allActions.toggleSelectEntity, (state, { id }) =>\n allMutators.toggleSelectEntity(id, state)\n ),\n ...insertIf<S>(allActions.removeAllEntities, () =>\n on(allActions.removeAllEntities, (state) =>\n allMutators.deselectEntity(state)\n )\n ),\n ...insertIf<S>(sortRemote, () =>\n on(allActions.sortEntities, (state) => allMutators.deselectEntity(state))\n ),\n ...insertIf<S>(allActions.filterEntities, () =>\n on(allActions.filterEntities, (state) =>\n allMutators.deselectEntity(state)\n )\n ),\n ...insertIf<S>(!allActions.loadEntitiesPageSuccess, () =>\n on(allActions.loadEntitiesSuccess, (state) =>\n allMutators.deselectEntity(state)\n )\n ),\n ...insertIf<S>(\n !!allActions.loadEntitiesPageSuccess && paginationCacheType === 'partial',\n () =>\n on(allActions.loadEntitiesPageSuccess, (state) =>\n allMutators.deselectEntity(state)\n )\n ),\n ...insertIf<S>(allActions.removeEntities, () =>\n on(allActions.removeEntities, (state, { keys }) => {\n const shouldDeselect = keys.some(\n (v: string | number) => v === state.selectedId\n );\n return shouldDeselect\n ? {\n ...state,\n selectedId: undefined,\n }\n : state;\n })\n ),\n ...insertIf<S>(allActions.updateEntities, () =>\n on(allActions.updateEntities, (state, { updates }) => {\n const change = updates.find((updated) => {\n const id = adapter.selectId(updated.changes as Entity);\n return id && id !== updated.id && state.selectedId === updated.id;\n });\n return change\n ? {\n ...state,\n selectedId: adapter.selectId(change.changes as Entity),\n }\n : state;\n })\n )\n );\n}\n","import { SelectEntityMutators, SelectEntityState } from './select-entity.model';\nimport { LoadEntitiesState } from '../load-entities';\n\nexport function createSelectEntityTraitMutators<\n Entity\n>(): SelectEntityMutators<Entity> {\n function selectEntity<\n S extends LoadEntitiesState<Entity> & SelectEntityState\n >(id: string | number, state: S) {\n return {\n ...state,\n selectedId: id,\n };\n }\n function deselectEntity<\n S extends LoadEntitiesState<Entity> & SelectEntityState\n >(state: S) {\n return {\n ...state,\n selectedId: undefined,\n };\n }\n function toggleSelectEntity<\n S extends LoadEntitiesState<Entity> & SelectEntityState\n >(id: string | number, state: S) {\n return {\n ...state,\n selectedId: state.selectedId === id ? undefined : id,\n };\n }\n\n return {\n selectEntity,\n deselectEntity,\n toggleSelectEntity,\n };\n}\n","import {\n createTraitFactory,\n TraitActionsFactoryConfig,\n TraitInitialStateFactoryConfig,\n} from '@ngrx-traits/core';\n\nimport { createSelectEntityTraitActions } from './select-entity.trait.actions';\nimport { createSelectEntityTraitSelectors } from './select-entity.trait.selectors';\nimport {\n createSelectEntityInitialState,\n createSelectEntityTraitReducer,\n} from './select-entity.trait.reducer';\nimport { createSelectEntityTraitMutators } from './select-entity.trait.mutators';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n loadEntitiesTraitKey,\n} from '../load-entities/load-entities.model';\nimport {\n SortEntitiesActions,\n SortEntitiesKeyedConfig,\n} from '../sort-entities/sort-entities.model';\nimport {\n SelectEntityActions,\n SelectEntityConfig,\n SelectEntityKeyedConfig,\n} from './select-entity.model';\nimport { CrudEntitiesActions } from '../crud-entities/crud-entities.model';\nimport {\n EntitiesPaginationActions,\n EntitiesPaginationKeyedConfig,\n} from '../entities-pagination/entities-pagination.model';\nimport { FilterEntitiesActions } from '../filter-entities';\n\n/**\n * Generates ngrx code to add single selection to a list\n * @param config\n * @param config.selectedId - Default selected id\n *\n * @example\n * // The following trait config\n *\n * export interface TestState\n * extends EntityAndStatusState<Todo>,SelectEntityState{}\n *\n * const traits = createEntityFeatureFactory(\n * {entityName: 'Todo'},\n * addLoadEntitiesTrait<Todo>(),\n * addSelectEntityTrait<Todo>()\n * )({\n * actionsGroupKey: '[Todos]',\n * featureSelector: createFeatureSelector<TestState>>(\n * 'todos',\n * ),\n * });\n *\n * // adds following props to the state:\n * // selectedId?: number | string;\n *\n * // generated actions\n * traits.actions.selectTodo({id})\n * traits.actions.deselectTodo()\n * traits.actions.toggleSelectTodo({id})\n * //generated selectors\n * traits.selectors.selectTodoIdSelected()\n * traits.selectors.selectTodoSelected()\n */\nexport function addSelectEntityTrait<Entity>(config?: SelectEntityConfig) {\n return createTraitFactory({\n key: 'singleSelection',\n depends: [loadEntitiesTraitKey],\n config,\n actions: ({ actionsGroupKey, entityName }: TraitActionsFactoryConfig) =>\n createSelectEntityTraitActions(actionsGroupKey, entityName),\n selectors: () => createSelectEntityTraitSelectors<Entity>(),\n mutators: () => createSelectEntityTraitMutators(),\n initialState: ({\n previousInitialState,\n allConfigs,\n }: TraitInitialStateFactoryConfig) =>\n createSelectEntityInitialState<Entity>(\n previousInitialState,\n allConfigs as SelectEntityKeyedConfig\n ),\n reducer: ({ initialState, allActions, allMutators, allConfigs }) =>\n createSelectEntityTraitReducer(\n initialState,\n allActions as SelectEntityActions &\n CrudEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n EntitiesPaginationActions &\n FilterEntitiesActions<any> &\n LoadEntitiesActions<Entity>,\n allMutators,\n allConfigs as SelectEntityKeyedConfig &\n LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig &\n SortEntitiesKeyedConfig<Entity>\n ),\n });\n}\n","import { KeyedConfig } from '@ngrx-traits/core';\nimport { Action } from '@ngrx/store';\nimport { ActionCreator } from '@ngrx/store/src/models';\n\nimport { LoadEntitiesState } from '../load-entities/load-entities.model';\n\nexport interface SelectEntityState {\n selectedId?: number | string;\n}\n\nexport type SelectEntityActions = {\n selectEntity: ActionCreator<\n string,\n (props: { id: number | string }) => { id: number | string } & Action<string>\n >;\n deselectEntity: ActionCreator<string, () => Action<string>>;\n toggleSelectEntity: ActionCreator<\n string,\n (props: { id: number | string }) => { id: number | string } & Action<string>\n >;\n};\n\nexport type SelectEntitySelectors<T> = {\n selectEntityIdSelected: (\n state: LoadEntitiesState<T> & SelectEntityState,\n ) => string | number | undefined;\n selectEntitySelected: (\n state: LoadEntitiesState<T> & SelectEntityState,\n ) => T | undefined;\n};\n\nexport type SelectEntityMutators<T> = {\n selectEntity<S extends LoadEntitiesState<T> & SelectEntityState>(\n id: string | number,\n state: S,\n ): S;\n deselectEntity<S extends LoadEntitiesState<T> & SelectEntityState>(\n state: S,\n ): S;\n toggleSelectEntity<S extends LoadEntitiesState<T> & SelectEntityState>(\n id: string | number,\n state: S,\n ): S;\n};\n\nexport interface SelectEntityConfig {\n selectedId?: string | number;\n}\n\nexport const selectEntityTraitKey = 'singleSelection';\nexport type SelectEntityKeyedConfig = KeyedConfig<\n typeof selectEntityTraitKey,\n SelectEntityConfig\n>;\n","import { Predicate, Update } from '@ngrx/entity/src/models';\nimport { ActionCreator } from '@ngrx/store';\nimport { Action } from '@ngrx/store/src/models';\n\nimport { LoadEntitiesState } from '../load-entities/load-entities.model';\n\nexport enum ChangeType {\n CREATED = 'c',\n UPDATED = 'u',\n DELETED = 'd',\n}\nexport interface Change<T> {\n id: string | number;\n changeType: ChangeType;\n entityChanges?: Partial<T>;\n}\nexport interface EntityChange<T> {\n entity: T;\n changeType: ChangeType;\n}\nexport interface CrudEntitiesState<T> {\n changes: Change<T>[];\n}\n\nexport type CrudEntitiesActions<T> = {\n addEntities: ActionCreator<\n string,\n (...entities: T[]) => { entities: T[] } & Action<string>\n >;\n removeEntities: ActionCreator<\n string,\n (\n ...keys: string[] | number[]\n ) => { keys: string[] | number[] } & Action<string>\n >;\n updateEntities: ActionCreator<\n string,\n (...updates: Update<T>[]) => { updates: Update<T>[] } & Action<string>\n >;\n upsertEntities: ActionCreator<\n string,\n (...entities: T[]) => { entities: T[] } & Action<string>\n >;\n\n removeAllEntities: ActionCreator<\n string,\n (predicate?: Predicate<T>) => { predicate?: Predicate<T> } & Action<string>\n >;\n clearEntitiesChanges: ActionCreator<string, () => Action<string>>;\n};\n\nexport type CrudEntitiesSelectors<Entity> = {\n /**\n * Return all changes made to the list plus entities, and can be filtered\n * by change type\n * @param state\n * @param props\n */\n selectEntitiesChangesList: (\n state: LoadEntitiesState<Entity> & CrudEntitiesState<Entity>,\n ) => EntityChange<Entity>[];\n\n /**\n * Returns the entities plus the kind of change,\n * filters redundant changes ideal for a batch update\n * if you add and remove the same and items this changes are remove from the list\n * if you add and then update one or more times, the updates are discarded\n * if you update one or more times and then remove, the updates are discarded\n * @param state\n */\n selectFilteredEntitiesChangesList: (\n state: LoadEntitiesState<Entity> & CrudEntitiesState<Entity>,\n ) => EntityChange<Entity>[];\n};\n\nexport type CrudEntitiesMutators<Entity> = {\n addEntities<S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>>(\n entities: Entity[],\n state: S,\n ): S;\n\n removeEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>,\n >(\n keys: string[],\n state: S,\n ): S;\n removeEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>,\n >(\n keys: number[],\n state: S,\n ): S;\n removeEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>,\n >(\n predicate: Predicate<Entity>,\n state: S,\n ): S;\n\n removeAllEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>,\n >(\n state: S,\n ): S;\n\n clearEntitiesChanges<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>,\n >(\n state: S,\n ): S;\n\n updateEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>,\n >(\n updates: Update<Entity>[],\n state: S,\n ): S;\n upsertEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>,\n >(\n entities: Entity[],\n state: S,\n ): S;\n};\n\nexport interface CrudEntitiesConfig {\n storeChanges?: boolean;\n}\nexport const crudEntitiesTraitKey = 'crud';\n\nexport interface CrudEntitiesKeyedConfig {\n crud?: CrudEntitiesConfig;\n}\n","import { CrudEntitiesActions } from './crud-entities.model';\nimport { createAction } from '@ngrx/store';\nimport { Predicate, Update } from '@ngrx/entity';\n\nexport function createCrudTraitActions<Entity>(\n actionsGroupKey: string,\n entitiesName: string\n): CrudEntitiesActions<Entity> {\n return {\n addEntities: createAction(\n `${actionsGroupKey} Add ${entitiesName}`,\n (...entities: Entity[]) => ({\n entities,\n })\n ),\n removeEntities: createAction(\n `${actionsGroupKey} Remove ${entitiesName}`,\n (...keys: string[] | number[]) => ({\n keys,\n })\n ),\n updateEntities: createAction(\n `${actionsGroupKey} Update ${entitiesName}`,\n (...updates: Update<Entity>[]) => ({\n updates,\n })\n ),\n upsertEntities: createAction(\n `${actionsGroupKey} Upsert ${entitiesName}`,\n (...entities: Entity[]) => ({\n entities,\n })\n ),\n removeAllEntities: createAction(\n `${actionsGroupKey} Remove All ${entitiesName}`,\n (predicate?: Predicate<Entity>) => ({ predicate })\n ),\n clearEntitiesChanges: createAction(\n `${actionsGroupKey} Clear ${entitiesName} Changes`\n ),\n };\n}\n","import { createSelector } from '@ngrx/store';\nimport {\n Change,\n ChangeType,\n CrudEntitiesSelectors,\n CrudEntitiesState,\n EntityChange,\n} from './crud-entities.model';\nimport {\n LoadEntitiesSelectors,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\nimport { Dictionary } from '@ngrx/entity';\n\nexport function createCrudTraitSelectors<Entity>(\n previousSelectors: LoadEntitiesSelectors<Entity>\n): CrudEntitiesSelectors<Entity> {\n function selectChanges<S extends CrudEntitiesState<Entity>>(state: S) {\n return state.changes;\n }\n\n function selectFilteredChanges<S extends CrudEntitiesState<Entity>>(\n state: S\n ) {\n const cache: { [id: string]: ChangeType[] } = {};\n return state.changes.reduce((acc, value) => {\n const changes = cache[value.id];\n if (!changes) {\n cache[value.id] = [value.changeType];\n acc.push(value);\n return acc;\n }\n\n if (value.changeType === ChangeType.UPDATED) {\n return acc;\n }\n\n if (\n value.changeType === ChangeType.DELETED &&\n changes.includes(ChangeType.CREATED)\n ) {\n delete cache[value.id];\n return acc.filter((v) => v.id !== value.id);\n }\n\n if (value.changeType === ChangeType.DELETED) {\n delete cache[value.id];\n const newAcc = acc.filter((v) => v.id !== value.id);\n newAcc.push(value);\n return newAcc;\n }\n return acc;\n }, [] as Change<Entity>[]);\n }\n\n const { selectEntitiesMap } = previousSelectors;\n\n const selectEntitiesChangesList = createSelector(\n (state: LoadEntitiesState<Entity> & CrudEntitiesState<Entity>) =>\n selectEntitiesMap(state),\n selectChanges,\n (entities: Dictionary<Entity>, changed: Change<Entity>[]) => {\n const map = changed.map(\n (change) =>\n ({\n changeType: change.changeType,\n entity: entities[change.id] ?? {\n id: change.id,\n },\n } as EntityChange<Entity>)\n );\n return map;\n }\n );\n\n const selectFilteredEntitiesChangesList = createSelector(\n selectFilteredChanges,\n (state: LoadEntitiesState<Entity> & CrudEntitiesState<Entity>) =>\n selectEntitiesMap(state),\n (changes, entities) =>\n changes.map((c) => {\n return {\n entity: entities[c.id] ?? { id: c.id },\n changeType: c.changeType,\n } as EntityChange<Entity>;\n })\n );\n\n return {\n selectEntitiesChangesList,\n selectFilteredEntitiesChangesList,\n };\n}\n","import {\n FilterEntitiesActions,\n FilterEntitiesKeyedConfig,\n} from '../filter-entities/filter-entities.model';\nimport { createReducer, on } from '@ngrx/store';\nimport {\n CrudEntitiesActions,\n CrudEntitiesKeyedConfig,\n CrudEntitiesMutators,\n CrudEntitiesState,\n} from './crud-entities.model';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesState,\n} from '../load-entities';\nimport { SortEntitiesActions, SortEntitiesKeyedConfig } from '../sort-entities';\nimport {\n EntitiesPaginationActions,\n EntitiesPaginationKeyedConfig,\n} from '../entities-pagination';\nimport { insertIf } from '@ngrx-traits/core';\n\nexport function createCrudInitialState<Entity>(\n previousInitialState: any\n): LoadEntitiesState<Entity> & CrudEntitiesState<Entity> {\n return {\n ...previousInitialState,\n changes: [],\n };\n}\nexport function createCrudTraitReducer<\n Entity,\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n>(\n initialState: S,\n allActions: CrudEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n FilterEntitiesActions<any> &\n EntitiesPaginationActions,\n allMutators: CrudEntitiesMutators<Entity>,\n allConfigs: CrudEntitiesKeyedConfig &\n FilterEntitiesKeyedConfig<Entity, unknown> &\n LoadEntitiesKeyedConfig<Entity> &\n SortEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig\n) {\n const sortRemote = allConfigs.sort?.remote;\n const filterRemote = allConfigs.filter && !allConfigs.filter?.filterFn;\n const paginationCacheType = allConfigs.pagination?.cacheType;\n\n return createReducer(\n initialState,\n on(allActions.addEntities, (state, { entities }) =>\n allMutators.addEntities(entities, state)\n ),\n on(allActions.updateEntities, (state, { updates }) =>\n allMutators.updateEntities(updates, state)\n ),\n on(allActions.upsertEntities, (state, { entities }) =>\n allMutators.upsertEntities(entities, state)\n ),\n on(allActions.removeEntities, (state, { keys }) =>\n allMutators.removeEntities(keys as any[], state)\n ),\n on(allActions.removeAllEntities, (state, { predicate }) =>\n predicate\n ? allMutators.removeEntities(predicate, state)\n : allMutators.removeAllEntities(state)\n ),\n on(allActions.clearEntitiesChanges, (state) =>\n allMutators.clearEntitiesChanges(state)\n ),\n ...insertIf<S>(sortRemote, () =>\n on(allActions.sortEntities, (state) =>\n allMutators.clearEntitiesChanges(state)\n )\n ),\n ...insertIf<S>(filterRemote, () =>\n on(allActions.filterEntities, (state) =>\n allMutators.clearEntitiesChanges(state)\n )\n ),\n ...insertIf<S>(!allActions.loadEntitiesPageSuccess, () =>\n on(allActions.loadEntitiesSuccess, (state) =>\n allMutators.clearEntitiesChanges(state)\n )\n ),\n ...insertIf<S>(\n !!allActions.loadEntitiesPageSuccess && paginationCacheType === 'partial',\n () =>\n on(allActions.loadEntitiesPageSuccess, (state) =>\n allMutators.clearEntitiesChanges(state)\n )\n )\n );\n}\n","import {\n Change,\n ChangeType,\n CrudEntitiesKeyedConfig,\n CrudEntitiesMutators,\n CrudEntitiesState,\n} from './crud-entities.model';\nimport { Predicate, Update } from '@ngrx/entity';\nimport {\n LoadEntitiesKeyedConfig,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\n\nexport function createCrudTraitMutators<Entity>(\n allConfigs: CrudEntitiesKeyedConfig & LoadEntitiesKeyedConfig<Entity>\n): CrudEntitiesMutators<Entity> {\n const { storeChanges } = allConfigs.crud || {};\n const adapter = allConfigs!.loadEntities!.adapter;\n\n function generateChangeEntry(\n entity: Entity,\n changeType: ChangeType,\n customId?: string | number\n ) {\n return {\n id: customId ?? adapter.selectId(entity),\n changeType,\n entityChanges: (storeChanges && entity) || undefined,\n };\n }\n\n function addEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(entities: Entity[], state: S, addFirst = false) {\n const changes = [\n ...state.changes,\n ...entities.map((entity) =>\n generateChangeEntry(entity, ChangeType.CREATED)\n ),\n ];\n if (!addFirst)\n return adapter.addMany(entities, {\n ...state,\n changes,\n });\n\n const newIds = entities.map((e) => adapter.selectId(e));\n const newEntities = { ...state.entities };\n entities.forEach((e) => {\n const id = adapter.selectId(e);\n newEntities[id] = e;\n });\n return {\n ...state,\n ids: [...newIds, ...state.ids],\n entities: newEntities,\n changes,\n };\n }\n\n function upsertEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(entities: Entity[], state: S) {\n const oldChanges = [...state.changes];\n const existingIds = adapter.getSelectors().selectIds(state) as string[];\n\n const [additions, updates] = entities.reduce(\n ([a, u], entity) =>\n existingIds.indexOf(adapter.selectId(entity as Entity) as string) !== -1\n ? [a, [...u, entity]]\n : [[...a, entity], u],\n [new Array<Entity>(), new Array<Entity>()]\n );\n\n return adapter.upsertMany(entities, {\n ...state,\n changes: [\n ...oldChanges,\n\n ...additions.map((entity) =>\n generateChangeEntry(entity, ChangeType.CREATED)\n ),\n ...updates.map((entity) =>\n generateChangeEntry(entity, ChangeType.UPDATED)\n ),\n ],\n });\n }\n\n function removeEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(keys: number[], state: S): S;\n function removeEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(keys: string[], state: S): S;\n function removeEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(predicate: Predicate<Entity>, state: S): S;\n function removeEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(keysOrPredicate: Predicate<Entity> | string[] | number[], state: S): S {\n if (typeof keysOrPredicate === 'function') {\n return adapter.removeMany(keysOrPredicate, {\n ...state,\n changes: [\n ...state.changes,\n ...(state.ids as any[]).map((id) => ({\n id,\n changeType: ChangeType.DELETED,\n })),\n ],\n });\n }\n\n return adapter.removeMany(keysOrPredicate as string[], {\n ...state,\n changes: [\n ...state.changes,\n ...(keysOrPredicate as string[]).map((key: string) => ({\n id: key,\n changeType: ChangeType.DELETED,\n })),\n ],\n });\n }\n function removeAllEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(state: S): S {\n return adapter.removeAll({\n ...state,\n changes: [\n ...state.changes,\n ...(state.ids as any[]).map((id) => ({\n id,\n changeType: ChangeType.DELETED,\n })),\n ],\n });\n }\n function clearEntitiesChanges<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(state: S) {\n return { ...state, changes: [] };\n }\n\n function updateEntities<\n S extends LoadEntitiesState<Entity> & CrudEntitiesState<Entity>\n >(updates: Update<Entity>[], state: S) {\n const oldChanges = [...state.changes];\n updates.forEach((updated) => {\n const id = adapter.selectId(updated.changes as Entity);\n if (id && id !== updated.id) {\n // if the id changes update the id of pold changes\n const index = oldChanges.findIndex((v) => v.id === updated.id);\n const oldChange = oldChanges[index];\n oldChanges[index] = { ...oldChange, id };\n }\n });\n return adapter.updateMany(updates, {\n ...state,\n changes: [\n ...oldChanges,\n ...updates.map(\n (updated) =>\n ({\n id: adapter.selectId(updated.changes as Entity) ?? updated.id,\n changeType: ChangeType.UPDATED,\n entityChanges: (storeChanges && updated.changes) || undefined,\n } as Change<Entity>)\n ),\n ],\n });\n }\n\n return {\n addEntities,\n removeEntities,\n updateEntities,\n removeAllEntities,\n clearEntitiesChanges,\n upsertEntities,\n };\n}\n","import {\n createTraitFactory,\n TraitActionsFactoryConfig,\n TraitInitialStateFactoryConfig,\n TraitSelectorsFactoryConfig,\n TraitStateMutatorsFactoryConfig,\n} from '@ngrx-traits/core';\nimport { createCrudTraitActions } from './crud-entities.trait.actions';\nimport { createCrudTraitSelectors } from './crud-entities.trait.selectors';\nimport {\n createCrudInitialState,\n createCrudTraitReducer,\n} from './crud-entities.trait.reducer';\nimport {\n SortEntitiesActions,\n SortEntitiesKeyedConfig,\n} from '../sort-entities/sort-entities.model';\nimport {\n CrudEntitiesActions,\n CrudEntitiesConfig,\n CrudEntitiesKeyedConfig,\n crudEntitiesTraitKey,\n} from './crud-entities.model';\nimport {\n FilterEntitiesActions,\n FilterEntitiesKeyedConfig,\n} from '../filter-entities/filter-entities.model';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesSelectors,\n loadEntitiesTraitKey,\n} from '../load-entities/load-entities.model';\nimport {\n EntitiesPaginationActions,\n EntitiesPaginationKeyedConfig,\n} from '../entities-pagination/entities-pagination.model';\nimport { createCrudTraitMutators } from './crud-entities.trait.mutators';\n\n/**\n * Generates ngrx code to add, remove update, upsert entities on a list, it also\n * tracks the changes made, helpful for implementing batch updates. The `storeChanges` (false by default),\n * will store for add and update the changed entity props in the property `entityChanges` of the `Change` object.\n * @param config\n * @param config.storeChanges - Will store the changes made, default fals\n *\n * @example\n * // The following trait config\n *\n * export interface TestState\n * extends EntityAndStatusState<Todo>, CrudState<Todo>{}\n *\n * const traits = createEntityFeatureFactory(\n * {entityName: 'Todo'},\n * addLoadEntitiesTrait<Todo>(),\n * addCrudEntitiesTrait<Todo>()\n * )({\n * actionsGroupKey: '[Todos]',\n * featureSelector: createFeatureSelector<TestState>>(\n * 'todos',\n * ),\n * });\n *\n * // adds following props to the state:\n * // changes: Change<Todo>[];\n *\n * // generated actions\n * traits.actions.addTodos(entity1,entity2...)\n * traits.actions.updateTodos({id: id1, changes:{prop1}},{id: id2, changes:{prop2}} ...)\n * traits.actions.upsertTodos(entity1,entity2...)\n * traits.actions.removeAllTodos()\n * traits.actions.clearTodosChanges()\n * // generated selectors\n * traits.selectors.selectTodosChangesList()\n * traits.selectors.selectFilteredTodosChangesList()\n * traits.selectors.selectAllFilteredChanges()\n */\nexport function addCrudEntitiesTrait<Entity>({\n storeChanges = false,\n}: CrudEntitiesConfig = {}) {\n return createTraitFactory({\n key: crudEntitiesTraitKey,\n depends: [loadEntitiesTraitKey],\n config: { storeChanges } as CrudEntitiesConfig,\n actions: ({ actionsGroupKey, entitiesName }: TraitActionsFactoryConfig) =>\n createCrudTraitActions<Entity>(actionsGroupKey, entitiesName),\n selectors: ({ previousSelectors }: TraitSelectorsFactoryConfig) =>\n createCrudTraitSelectors<Entity>(\n previousSelectors as LoadEntitiesSelectors<Entity>\n ),\n mutators: ({ allConfigs }: TraitStateMutatorsFactoryConfig) =>\n createCrudTraitMutators<Entity>(\n allConfigs as CrudEntitiesKeyedConfig & LoadEntitiesKeyedConfig<Entity>\n ),\n initialState: ({ previousInitialState }: TraitInitialStateFactoryConfig) =>\n createCrudInitialState<Entity>(previousInitialState),\n reducer: ({ initialState, allActions, allMutators, allConfigs }) =>\n createCrudTraitReducer(\n initialState,\n allActions as CrudEntitiesActions<Entity> &\n LoadEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n FilterEntitiesActions<any> &\n EntitiesPaginationActions,\n allMutators,\n allConfigs as CrudEntitiesKeyedConfig &\n FilterEntitiesKeyedConfig<Entity, unknown> &\n LoadEntitiesKeyedConfig<Entity> &\n SortEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig\n ),\n });\n}\n","import { KeyedConfig } from '@ngrx-traits/core';\nimport { Action } from '@ngrx/store';\nimport { ActionCreator } from '@ngrx/store/src/models';\n\nimport { LoadEntitiesState } from '../load-entities/load-entities.model';\n\nexport declare type SortDirection = 'asc' | 'desc' | '';\n\nexport interface Sort<T> {\n /** The id of the column being sorted. */\n active: keyof T;\n /** The sort direction. */\n direction: SortDirection;\n}\n\nexport interface SortEntitiesState<T> {\n sort: {\n current: Sort<T>;\n default: Sort<T>;\n };\n}\n\nexport type SortEntitiesActions<T> = {\n sortEntities: ActionCreator<\n string,\n (props: Sort<T>) => Sort<T> & Action<string>\n >;\n /**\n * Sets the default sort back\n */\n resetEntitiesSort: ActionCreator<string, () => Action<string>>;\n};\n\nexport type SortEntitiesSelectors<T> = {\n selectEntitiesSort: (\n state: LoadEntitiesState<T> & SortEntitiesState<T>,\n ) => Sort<T>;\n};\n\nexport type SortEntitiesMutators<T> = {\n sortEntities<S extends LoadEntitiesState<T> & SortEntitiesState<T>>(\n { active, direction }: Sort<T>,\n state: S,\n ): S;\n};\n\nexport const sortTraitKey = 'sort';\n\nexport interface SortEntitiesConfig<T> {\n defaultSort: Sort<T>;\n remote: boolean;\n}\n\nexport type SortEntitiesKeyedConfig<T> = KeyedConfig<\n typeof sortTraitKey,\n SortEntitiesConfig<T>\n>;\n","import { Sort } from './sort-entities.model';\n\nconst MAX_SAFE_INTEGER = 9007199254740991;\n\nexport function _isNumberValue(value: any): boolean {\n // parseFloat(value) handles most of the cases we're interested in (it treats null, empty string,\n // and other non-number values as NaN, where Number just uses 0) but it considers the string\n // '123hello' to be a valid number. Therefore we also check if Number(value) is NaN.\n return !isNaN(parseFloat(value as any)) && !isNaN(Number(value));\n}\n\nfunction sortingDataAccessor<T>(\n data: T,\n sortHeaderId: string\n): string | number {\n const value = (data as { [key: string]: any })[sortHeaderId];\n\n if (_isNumberValue(value)) {\n const numberValue = Number(value);\n\n // Numbers beyond `MAX_SAFE_INTEGER` can't be compared reliably so we\n // leave them as strings. For more info: https://goo.gl/y5vbSg\n return numberValue < MAX_SAFE_INTEGER ? numberValue : value;\n }\n\n return value;\n}\n\n/**\n * @internal\n * @ignore\n * Gets a sorted copy of the data array based on the state of the Sort.\n * @param data The array of data that should be sorted.\n * @param sort The connected MatSort that holds the current sort state.\n */\nexport function sortData<T>(data: T[], sort: Sort<T>): T[] {\n const active = sort.active;\n const direction = sort.direction;\n if (!active || direction === '') {\n return data;\n }\n\n return data.sort((a, b) => {\n const valueA = sortingDataAccessor(a, active as string);\n const valueB = sortingDataAccessor(b, active as string);\n\n // If both valueA and valueB exist (truthy), then compare the two. Otherwise, check if\n // one value exists while the other doesn't. In this case, existing value should come last.\n // This avoids inconsistent results when comparing values to undefined/null.\n // If neither value exists, return 0 (equal).\n let comparatorResult = 0;\n if (valueA != null && valueB != null) {\n // Check if one value is greater than the other; if equal, comparatorResult should remain 0.\n\n if (typeof valueA === 'string' || typeof valueB === 'string') {\n // if either values are a string, then force both to be strings before localCompare\n comparatorResult = valueA.toString().localeCompare(valueB.toString());\n } else {\n if (valueA > valueB) {\n comparatorResult = 1;\n } else if (valueA < valueB) {\n comparatorResult = -1;\n }\n }\n } else if (valueA != null) {\n comparatorResult = 1;\n } else if (valueB != null) {\n comparatorResult = -1;\n }\n\n return comparatorResult * (direction === 'asc' ? 1 : -1);\n });\n}\n","import {\n LoadEntitiesKeyedConfig,\n LoadEntitiesSelectors,\n LoadEntitiesState,\n} from '../load-entities/load-entities.model';\nimport {\n Sort,\n SortEntitiesMutators,\n SortEntitiesState,\n} from './sort-entities.model';\nimport { sortData } from './sort-entities.utils';\n\nexport function createSortTraitMutators<Entity>(\n { selectEntitiesList }: LoadEntitiesSelectors<Entity>,\n allConfigs: LoadEntitiesKeyedConfig<Entity>\n): SortEntitiesMutators<Entity> {\n const { remote } = allConfigs.sort!;\n\n function sortEntities<\n S extends LoadEntitiesState<Entity> & SortEntitiesState<Entity>\n >({ active, direction }: Sort<Entity>, state: S) {\n if (remote) {\n return {\n ...state,\n sort: { ...state.sort, current: { active, direction } },\n };\n }\n\n const { adapter } = allConfigs.loadEntities!;\n const entities = selectEntitiesList(state);\n const sortedIds = sortData(entities, { active, direction }).map((v) =>\n adapter.selectId(v)\n );\n return {\n ...state,\n ids: sortedIds,\n sort: { ...state.sort, current: { active, direction } },\n };\n }\n return {\n sortEntities,\n };\n}\n","import { createReducer, on } from '@ngrx/store';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesState,\n} from '../load-entities';\nimport {\n SortEntitiesActions,\n SortEntitiesKeyedConfig,\n SortEntitiesMutators,\n SortEntitiesState,\n} from './sort-entities.model';\n\nexport function createSortInitialState<Entity>(\n previousInitialState: any,\n allConfigs: SortEntitiesKeyedConfig<Entity>\n): LoadEntitiesState<Entity> & SortEntitiesState<Entity> {\n const { defaultSort } = allConfigs.sort!;\n\n return {\n ...previousInitialState,\n sort: {\n current: defaultSort,\n default: defaultSort,\n },\n };\n}\n\nexport function createSortTraitReducer<\n Entity,\n S extends LoadEntitiesState<Entity> &\n SortEntitiesState<Entity> = LoadEntitiesState<Entity> &\n SortEntitiesState<Entity>\n>(\n initialState: S,\n allActions: SortEntitiesActions<Entity> & LoadEntitiesActions<Entity>,\n allMutators: SortEntitiesMutators<Entity>,\n allConfigs: LoadEntitiesKeyedConfig<Entity> & SortEntitiesKeyedConfig<Entity>\n) {\n return createReducer(\n initialState,\n on(allActions.sortEntities, (state, { active, direction }) =>\n allMutators.sortEntities({ active, direction }, state)\n ),\n on(allActions.resetEntitiesSort, (state) =>\n allMutators.sortEntities(state.sort?.default, state)\n )\n );\n}\n","import {\n SortEntitiesSelectors,\n SortEntitiesState,\n} from './sort-entities.model';\n\nexport function createSortTraitSelectors<\n Entity\n>(): SortEntitiesSelectors<Entity> {\n function selectEntitiesSort(state: SortEntitiesState<Entity>) {\n return state.sort?.current;\n }\n return {\n selectEntitiesSort,\n };\n}\n","import { Injectable } from '@angular/core';\nimport { TraitEffect } from '@ngrx-traits/core';\nimport { createEffect, ofType } from '@ngrx/effects';\nimport { concatMap } from 'rxjs/operators';\nimport { Type } from '@ngrx-traits/core';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n} from '../load-entities/load-entities.model';\nimport {\n SortEntitiesActions,\n SortEntitiesKeyedConfig,\n} from './sort-entities.model';\nimport { EntitiesPaginationActions } from '../entities-pagination/entities-pagination.model';\n\nexport function createSortTraitEffect<Entity>(\n allActions: LoadEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n EntitiesPaginationActions,\n allConfigs: LoadEntitiesKeyedConfig<Entity> & SortEntitiesKeyedConfig<Entity>\n): Type<TraitEffect>[] {\n const { remote } = allConfigs.sort!;\n\n @Injectable()\n class SortEffect extends TraitEffect {\n remoteSort$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.sortEntities, allActions.resetEntitiesSort),\n concatMap(() =>\n allActions.loadEntitiesFirstPage\n ? [\n allActions.clearEntitiesPagesCache(),\n allActions.loadEntitiesFirstPage(),\n ]\n : [allActions.loadEntities()]\n )\n );\n });\n }\n return remote ? [SortEffect] : [];\n}\n","import { createAction, props } from '@ngrx/store';\nimport { Sort, SortEntitiesActions } from './sort-entities.model';\n\nexport function createSortTraitActions<Entity>(\n actionsGroupKey: string,\n entitiesName: string\n): SortEntitiesActions<Entity> {\n return {\n sortEntities: createAction(\n `${actionsGroupKey} Sort ${entitiesName}`,\n props<Sort<Entity>>()\n ),\n resetEntitiesSort: createAction(\n `${actionsGroupKey} Reset ${entitiesName} Sort`\n ),\n };\n}\n","import { createSortTraitMutators } from './sort-entities.trait.mutators';\nimport {\n createSortInitialState,\n createSortTraitReducer,\n} from './sort-entities.trait.reducer';\nimport { createSortTraitSelectors } from './sort-entities.trait.selectors';\nimport { createSortTraitEffect } from './sort-entities.trait.effect';\nimport {\n SortEntitiesActions,\n SortEntitiesConfig,\n SortEntitiesKeyedConfig,\n SortEntitiesSelectors,\n sortTraitKey,\n} from './sort-entities.model';\nimport {\n LoadEntitiesActions,\n LoadEntitiesKeyedConfig,\n LoadEntitiesSelectors,\n loadEntitiesTraitKey,\n} from '../load-entities/load-entities.model';\nimport {\n EntitiesPaginationActions,\n EntitiesPaginationKeyedConfig,\n} from '../entities-pagination/entities-pagination.model';\nimport { createTraitFactory } from '@ngrx-traits/core';\nimport { createSortTraitActions } from './sort-entities.trait.actions';\nimport {\n TraitActionsFactoryConfig,\n TraitInitialStateFactoryConfig,\n TraitStateMutatorsFactoryConfig,\n} from '@ngrx-traits/core';\n\n/**\n * Generates ngrx code to sort locally or remotely a list of entities\n * @param config\n * @param config.defaultSort - Required field, Default entity prop for the sort\n * @param config.remote - Required field, default to false, when true disables local\n * sorting and every sort action call will now trigger a loadEntities action and the backend\n * should sort the data, use selectSort in the effect that call backend to get the requested sort,\n * when false all sorting is done in memory when the sort action is fired\n *\n * @example\n * // The following trait config\n * export interface TestState\n * extends EntityAndStatusState<Todo>, SortState<Todo>{}\n *\n * const traits = createEntityFeatureFactory(\n * {entityName: 'Todo'},\n * addLoadEntitiesTrait<Todo>(),\n * addSortEntitiesTrait<Todo>({\n * remote: true,\n * defaultSort: {active:'id', direction:'asc'}\n * })\n * )({\n * actionsGroupKey: '[Todos]',\n * featureSelector: createFeatureSelector<TestState>>(\n * 'todos',\n * ),\n * });\n * // adds following props to the state:\n * // sort: {\n * // current: Sort<Todo>;\n * // default: Sort<Todo>;\n * // }\n *\n * // generated actions\n * traits.actions.sortTodos({active:'id', direction:'desc'})\n * traits.actions.resetTodosSort()\n * //generated selectors\n * traits.selectors.selectTodosSort()\n */\nexport function addSortEntitiesTrait<Entity>({\n remote,\n defaultSort,\n}: SortEntitiesConfig<Entity>) {\n return createTraitFactory({\n key: sortTraitKey,\n depends: [loadEntitiesTraitKey],\n config: { remote, defaultSort } as SortEntitiesConfig<Entity>,\n actions: ({ actionsGroupKey, entitiesName }: TraitActionsFactoryConfig) =>\n createSortTraitActions<Entity>(actionsGroupKey, entitiesName),\n selectors: () => createSortTraitSelectors<Entity>(),\n mutators: ({ allSelectors, allConfigs }: TraitStateMutatorsFactoryConfig) =>\n createSortTraitMutators<Entity>(\n allSelectors as SortEntitiesSelectors<Entity> &\n LoadEntitiesSelectors<Entity>,\n allConfigs\n ),\n initialState: ({\n previousInitialState,\n allConfigs,\n }: TraitInitialStateFactoryConfig) =>\n createSortInitialState<Entity>(previousInitialState, allConfigs),\n reducer: ({ initialState, allActions, allMutators, allConfigs }) =>\n createSortTraitReducer<Entity>(\n initialState,\n allActions as SortEntitiesActions<Entity> & LoadEntitiesActions<Entity>,\n allMutators,\n allConfigs as LoadEntitiesKeyedConfig<Entity> &\n EntitiesPaginationKeyedConfig &\n SortEntitiesKeyedConfig<Entity>\n ),\n effects: ({ allActions, allConfigs }) =>\n createSortTraitEffect(\n allActions as LoadEntitiesActions<Entity> &\n SortEntitiesActions<Entity> &\n EntitiesPaginationActions,\n allConfigs as LoadEntitiesKeyedConfig<Entity> &\n SortEntitiesKeyedConfig<Entity>\n ),\n });\n}\n","import { Injectable } from '@angular/core';\nimport { createTraitFactory, insertIf } from '@ngrx-traits/core';\nimport { TraitActionsFactoryConfig } from '@ngrx-traits/core';\nimport { TraitEffect } from '@ngrx-traits/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { createAction, createReducer, on, Store } from '@ngrx/store';\nimport { Action, ActionCreator } from '@ngrx/store/src/models';\nimport { mapTo } from 'rxjs/operators';\n\nimport { GenericActionCreator } from '../load-entities';\n\n/**\n * Generates the ngrx code needed to reset the current state to the initial state.\n * @param traitConfig - Config object fot the trait factory\n * @param traitConfig.resetOn - set an extra action which will also trigger a reset state,\n * useful if you want to create an action that reset several features states\n *\n * @example\n * // The following trait config\n *\n * const traits = createEntityFeatureFactory(\n * {entityName: 'Todo'},\n * addLoadEntitiesTrait<Todo>(),\n * addResetEntitiesStateTrait()\n * )({\n * actionsGroupKey: '[Todos]',\n * featureSelector: createFeatureSelector<TestState>>(\n * 'todos',\n * ),\n * });\n * // generated actions\n * traits.actions.resetTodosState()\n */\nexport function addResetEntitiesStateTrait(\n traitConfig: {\n resetOn?: readonly ActionCreator[];\n } = {},\n) {\n return createTraitFactory({\n key: 'reset',\n config: traitConfig,\n actions: ({\n actionsGroupKey,\n entitiesName,\n }: TraitActionsFactoryConfig) => ({\n resetEntitiesState: createAction(\n `${actionsGroupKey} Reset ${entitiesName} State`,\n ),\n }),\n reducer: ({ allActions, initialState }) =>\n createReducer(\n initialState,\n on(allActions.resetEntitiesState, () => initialState),\n ...insertIf<typeof initialState>(traitConfig.resetOn, () =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n on(...traitConfig.resetOn!, () => initialState),\n ),\n ),\n });\n}\n","import { createAction, createReducer, on } from '@ngrx/store';\nimport { ActionCreatorProps } from '@ngrx/store/src/models';\nimport { camelCaseToSentence, createTraitFactory } from '@ngrx-traits/core';\nimport {\n ActionCreatorWithOptionalProps,\n AsyncActionActions,\n AsyncActionSelectors,\n AsyncActionState,\n} from './async-action.model';\nimport {\n TraitActionsFactoryConfig,\n TraitInitialStateFactoryConfig,\n} from '@ngrx-traits/core';\n\n/**\n * Generates the typical ngrx code need to make a async action with\n * a request, success and failure actions, plus a status property to track its progress\n * and selectors to query the status. This trait can be added more thant once as long\n * as the name prop is different.\n *\n * @param options - Config object for the trait factory\n * @param options.name - Name of the main request action, should be in camel case\n * @param options.actionProps - Optional param for the main request action, use the props()\n * function for its value, if not present action will have no params,\n * @param options.actionSuccessProps - Optional param for the request success action,\n * use the props() function for its value, if not present action success will have no params\n * @param options.actionFailProps - Optional param for the request fail action,\n * use the props() function for its value, if not present action fail will have no params\n * @returns the trait factory\n *\n * @example\n *\n * export interface TestState\n * extends AsyncActionState<'createClient'>{}\n *\n * // The following trait config\n * const traits = createEntityFeatureFactory(\n * {entityName: 'Todo'},\n * addAsyncActionTrait({\n * name: 'createClient',\n * actionProps: props<{ name: string }>(),\n * actionSuccessProps: props<{ id: string }>(),\n * }),\n * )({\n * actionsGroupKey: 'Client',\n * featureSelector: createFeatureSelector<AsyncActionState<'createClient'>>(\n * 'client',\n * ),\n * });\n * // adds following props to the state:\n * // createClientStatus?: 'loading' | 'success' | 'fail';\n *\n * // generated actions\n * traits.actions.createClient({name:'Pedro'})\n * traits.actions.createClientSuccess({id:'123'})\n * traits.actions.createClientFail();\n * //generated selectors\n * traits.selectors.isLoadingCreateClient\n * traits.selectors.isSuccessCreateClient\n * traits.selectors.isFailCreateClient\n */\nexport function addAsyncActionTrait<\n J extends string,\n Request extends object | undefined = undefined,\n Response extends object | undefined = undefined,\n Failure extends object | undefined = undefined\n>({\n name,\n actionProps,\n actionSuccessProps,\n actionFailProps,\n}: {\n name: J;\n actionProps?: ActionCreatorProps<Request>;\n actionSuccessProps?: ActionCreatorProps<Response>;\n actionFailProps?: ActionCreatorProps<Failure>;\n}) {\n const nameAsSentence = camelCaseToSentence(name);\n\n let internalActions: AsyncActionActions<\n Request,\n Response,\n Failure,\n 'request'\n >;\n return createTraitFactory({\n key: name + '-call',\n config: {\n name,\n actionProps,\n actionSuccessProps,\n actionFailProps,\n },\n actions: ({\n actionsGroupKey,\n }: TraitActionsFactoryConfig): AsyncActionActions<\n Request,\n Response,\n Failure,\n J\n > => {\n internalActions = {\n request: (actionProps\n ? createAction(\n `${actionsGroupKey} ${nameAsSentence}`,\n actionProps as any\n )\n : createAction(\n `${actionsGroupKey} ${nameAsSentence}`\n )) as ActionCreatorWithOptionalProps<Request>,\n requestSuccess: (actionSuccessProps\n ? createAction(\n `${actionsGroupKey} ${nameAsSentence} Success`,\n actionSuccessProps as any\n )\n : createAction(\n `${actionsGroupKey} ${nameAsSentence} Success`\n )) as ActionCreatorWithOptionalProps<Response>,\n requestFail: (actionFailProps\n ? createAction(\n `${actionsGroupKey} ${nameAsSentence} Failure`,\n actionFailProps as any\n )\n : createAction(\n `${actionsGroupKey} ${nameAsSentence} Failure`\n )) as ActionCreatorWithOptionalProps<Failure>,\n };\n return {\n [`${name}`]: internalActions.request,\n [`${name}Success`]: internalActions.requestSuccess,\n [`${name}Fail`]: internalActions.requestFail,\n } as AsyncActionActions<Request, Response, Failure, J>;\n },\n selectors: () => {\n function isLoadingEntity<S extends AsyncActionState<J>>(state: S) {\n return (state as any)[`${name}Status`] === 'loading';\n }\n function isSuccessEntity<S extends AsyncActionState<J>>(state: S) {\n return (state as any)[`${name}Status`] === 'success';\n }\n function isFailEntity<S extends AsyncActionState<J>>(state: S) {\n return (state as any)[`${name}Status`] === 'fail';\n }\n const capitalizedName = name.charAt(0).toUpperCase() + name.slice(1);\n return {\n [`isLoading${capitalizedName}`]: isLoadingEntity,\n [`isSuccess${capitalizedName}`]: isSuccessEntity,\n [`isFail${capitalizedName}`]: isFailEntity,\n } as AsyncActionSelectors<J, AsyncActionState<J>>;\n },\n initialState: ({ previousInitialState }: TraitInitialStateFactoryConfig) =>\n previousInitialState as AsyncActionState<J>,\n reducer: ({ initialState }) => {\n // TypeScript error after migration to 4.9.5\n // Added 'any' to 'state' and removed 'as AsyncActionState<J>'\n // because OnReducer have a weird type for the state.\n // TODO: Investigate if possible to remove the 'any' type and have better type safety\n // tried remove the any seems to be a problex with ngrx on making the state unknown\n return createReducer(\n initialState,\n on(internalActions.request, (state: any) => ({\n ...state,\n [`${name}Status`]: 'loading',\n })),\n on(internalActions.requestFail, (state: any) => ({\n ...state,\n [`${name}Status`]: 'fail',\n })),\n on(internalActions.requestSuccess, (state: any) => ({\n ...state,\n [`${name}Status`]: 'success',\n }))\n );\n },\n });\n}\n","import { ActionCreatorProps } from '@ngrx/store/src/models';\nimport { capitalize, createTraitFactory } from '@ngrx-traits/core';\nimport { createReducer, on } from '@ngrx/store';\n\nimport { addAsyncActionTrait } from '../async-action/async-action.trait';\nimport { LoadEntitySelectors, LoadEntityState } from './load-entity.model';\nimport { TraitInitialStateFactoryConfig } from '@ngrx-traits/core';\n\ntype RecordEntity<T> = T extends Record<string, infer J> ? J : never;\n\n/**\n * Generates ngrx code needed to load and entity and store it in a state. This action can be added\n * more than once as long as the entityName para is different\n * @param entityName - Entity name, should be in camel case\n * @param options.actionProps - Optional param for the main request action,\n * use the props() function for its value, if not present action will have no params,\n * @param options.actionSuccessProps - Optional param for the request success\n * action, use the props() function for its value, if not present action success will have no params\n * @param options.actionFailProps - Optional param for the request fail action,\n * use the props() function for its value, if not present action fail will have no params\n * @returns the trait factory\n *\n * @example\n *\n * export interface TestState\n * extends LoadEntityState<Client,'client'>{}\n *\n * const traits = createEntityFeatureFactory(\n * ...addLoadEntityTraits({\n * entityName: 'client',\n * requestProps: props<{ id: string }>(),\n * responseProps: props<{ client: Client }>(),\n * }),\n * )({\n * actionsGroupKey: 'Client',\n * featureSelector: createFeatureSelector<\n * LoadEntityState<Client, 'client'>\n * >('client'),\n * });\n *\n * // adds following props to the state:\n * // loadClientStatus?: 'loading' | 'success' | 'fail';\n * // client?: Client;\n *\n * // generated actions\n * traits.actions.loadClient({id:123});\n * traits.actions.loadClientSuccess({client: {id: '123', name: 'gabs'}});\n * traits.actions.loadClientFail();\n * // generated selectors\n * traits.selectors.selectClient()\n * traits.selectors.isLoadingLoadClient()\n * traits.selectors.isSuccessLoadClient()\n * traits.selectors.isFailLoadClient()\n */\nexport function addLoadEntityTraits<\n J extends string,\n Request extends object | undefined = undefined,\n Response extends Record<J, any> | undefined = undefined,\n Failure extends object | undefined = undefined,\n Entity = RecordEntity<Response>,\n State extends LoadEntityState<any,string> = LoadEntityState<Entity, J>\n>({\n entityName,\n actionProps,\n actionSuccessProps,\n actionFailProps,\n}: {\n entityName: J;\n actionProps?: ActionCreatorProps<Request>;\n actionSuccessProps?: ActionCreatorProps<Response>;\n actionFailProps?: ActionCreatorProps<Failure>;\n}) {\n const capitalizedName = capitalize(entityName);\n\n type K = `load${Capitalize<J & string>}`;\n\n return [\n addAsyncActionTrait<K, Request, Response, Failure>({\n name: ('load' + capitalizedName) as K,\n actionProps,\n actionSuccessProps,\n actionFailProps,\n }),\n createTraitFactory({\n key: `load${capitalizedName}`,\n config: { entityName, actionProps, actionSuccessProps, actionFailProps },\n selectors: () => {\n function selectEntity(state: State) {\n return (state as any)[`${entityName}`] as Entity;\n }\n\n return {\n [`select${capitalizedName}`]: selectEntity,\n } as LoadEntitySelectors<Entity, J>;\n },\n initialState: ({\n previousInitialState,\n }: TraitInitialStateFactoryConfig) => previousInitialState as State,\n reducer: ({ initialState, allActions }) => {\n return createReducer(\n initialState,\n on(\n (allActions as any)[`load${capitalizedName}Success`],\n (state: any, action: any) => ({\n ...state,\n [entityName]: action[entityName],\n })\n )\n );\n },\n }),\n ] as const;\n}\n","import {\n capitalize,\n createTraitFactory,\n TraitActionsFactoryConfig,\n} from '@ngrx-traits/core';\nimport { createAction, createReducer, on } from '@ngrx/store';\n\nimport {\n SetEntityActions,\n SetEntitySelectors,\n SetEntityState,\n} from './set-entity.model';\nimport { TraitInitialStateFactoryConfig } from '@ngrx-traits/core';\nimport { ActionCreatorProps } from '@ngrx/store/src/models';\n\ntype RecordEntity<T> = T extends Record<string, infer J> ? J : never;\n\n/**\n * Generates ngrx code needed to set and entity in the store state\n * @param entityName - Entity name, should be in camel case\n * @param options.actionProps - param for the main request action,\n * use the props() function for its value\n * @returns the trait factory\n *\n * @example\n *\n * export interface TestState\n * extends SetEntityState<Client,'client'>{}\n *\n * const traits = createEntityFeatureFactory(\n * addSetEntityTraits({\n * entityName: 'client',\n * actionProps: props<{ client: Client }\n * }),\n * )({\n * actionsGroupKey: 'Client',\n * featureSelector: createFeatureSelector<\n * SetEntityState<Client, 'client'>\n * >('client'),\n * });\n * // adds following props to the state:\n * // client?: Client;\n *\n * // generated actions\n * traits.actions.setClient({client: {id:123, name: 'gabs'}});\n * //generated selectors\n * traits.selectors.selectClient()\n */\nexport function addSetEntityTrait<\n J extends string,\n Payload extends Record<J, any> | undefined = undefined,\n Entity = RecordEntity<Payload>,\n State extends SetEntityState<Entity, J>= SetEntityState<Entity, J>\n>({\n entityName,\n actionProps,\n}: {\n entityName: J;\n actionProps?: ActionCreatorProps<Payload>;\n}) {\n const capitalizedName = capitalize(entityName);\n\n return createTraitFactory({\n key: `load${capitalizedName}`,\n config: { entityName, actionProps },\n actions: ({ actionsGroupKey }: TraitActionsFactoryConfig) => {\n const setEntity = createAction(\n `${actionsGroupKey} Set ${capitalizedName}`,\n actionProps as any\n );\n\n return {\n [`set${capitalizedName}`]: setEntity,\n } as SetEntityActions<Payload, J>;\n },\n selectors: () => {\n function selectEntity(state: State) {\n return (state as any)[`${entityName}`] as Entity;\n }\n\n return {\n [`select${capitalizedName}`]: selectEntity,\n } as SetEntitySelectors<Entity, J>;\n },\n initialState: ({ previousInitialState }: TraitInitialStateFactoryConfig) =>\n previousInitialState as State,\n reducer: ({ initialState, allActions }) => {\n return createReducer(\n initialState,\n on(\n (allActions as any)[`set${capitalizedName}`],\n (state: any, action: any) => ({\n ...state,\n [entityName]: action[entityName],\n })\n )\n );\n },\n });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n createTraitFactory,\n TraitActionsFactoryConfig,\n TraitEffect,\n} from '@ngrx-traits/core';\nimport { createEffect, ofType } from '@ngrx/effects';\nimport { concatLatestFrom } from '@ngrx/operators';\nimport { createAction, createReducer, on, props } from '@ngrx/store';\nimport { Action, ActionCreator } from '@ngrx/store/src/models';\nimport { delay, map, mapTo, tap } from 'rxjs/operators';\n\nimport {\n EntitiesPaginationActions,\n EntitiesPaginationMutators,\n entitiesPaginationTraitKey,\n} from '../entities-pagination';\nimport {\n FilterEntitiesActions,\n FilterEntitiesMutators,\n filterEntitiesTraitKey,\n} from '../filter-entities';\nimport { LoadEntitiesActions } from '../load-entities';\nimport {\n SortEntitiesActions,\n SortEntitiesMutators,\n sortTraitKey,\n} from '../sort-entities';\n\n/**\n * Generates ngrx code necessary to load and set to the current route query params for the filter, sort and paging traits\n *\n * @example\n *\n * const traits = createEntityFeatureFactory(\n * {entityName: 'Todo'},\n * addLoadEntitiesTrait<Todo>(),\n * addFilterEntitiesTrait(),\n * addSortEntitiesTrait<Todo>({\n * remote: true,\n * defaultSort: {active:'id', direction:'asc'}\n * })\n * addEntitiesPaginationTrait<Todo>(),\n * addEntitiesSyncToRouteQueryParams()\n * )({\n * actionsGroupKey: '[Todos]',\n * featureSelector: createFeatureSelector<TestState>>(\n * 'todos',\n * ),\n * });\n *\n *\n * // generated actions\n * traits.actions.loadTodosUsingRouteQueryParams()\n */\nexport function addEntitiesSyncToRouteQueryParams() {\n let setEntitiesRouteQueryParams: ActionCreator<\n string,\n (props: { params: any }) => { params: any } & Action<string>\n >;\n return createTraitFactory({\n key: 'entitiesSyncToRouteQueryParams',\n depends: [entitiesPaginationTraitKey, sortTraitKey, filterEntitiesTraitKey],\n actions({ actionsGroupKey, entitiesName }: TraitActionsFactoryConfig) {\n const actions = {\n loadEntitiesUsingRouteQueryParams: createAction(\n `${actionsGroupKey} Load ${entitiesName} Using Route Query Params`,\n ),\n };\n setEntitiesRouteQueryParams = createAction(\n `${actionsGroupKey} Set ${entitiesName} Route Query Params`,\n props<{ params: any }>(),\n );\n return { ...actions, setEntitiesRouteQueryParams } as typeof actions;\n },\n reducer({ initialState, allMutators: m }) {\n const allMutators = m as EntitiesPaginationMutators<any> &\n FilterEntitiesMutators<any, any> &\n SortEntitiesMutators<any>;\n return createReducer(\n initialState,\n on(setEntitiesRouteQueryParams, (state, { params: p }) => {\n const params = { ...p };\n let newState = state;\n if (params.page) {\n newState = allMutators.setEntitiesPage(\n newState as any,\n +params.page,\n );\n delete params.page;\n }\n if (params.sortActive) {\n newState = allMutators.sortEntities(\n {\n active: params.sortActive,\n direction: params.sortDirection,\n },\n newState as any,\n );\n delete params.sortActive;\n delete params.sortDirection;\n }\n if (Object.keys(params).length) {\n newState = allMutators.setEntitiesFilters(params, newState as any);\n }\n\n return newState;\n }),\n );\n },\n effects({ allActions: a }) {\n const allActions = a as typeof a &\n FilterEntitiesActions<any> &\n SortEntitiesActions<any> &\n EntitiesPaginationActions;\n\n @Injectable()\n class SyncEntitiesStateToUrlEffect extends TraitEffect {\n activatedRoute = inject(ActivatedRoute);\n router = inject(Router);\n\n loadUrlParams$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(allActions.loadEntitiesUsingRouteQueryParams),\n concatLatestFrom(() => this.activatedRoute.queryParams),\n map(([_, params]) => setEntitiesRouteQueryParams({ params })),\n );\n });\n\n setUrlParams$ = createEffect(() => {\n return this.actions$.pipe(\n ofType(setEntitiesRouteQueryParams),\n mapTo(\n (\n allActions as unknown as LoadEntitiesActions<any>\n ).loadEntities(),\n ),\n );\n });\n\n onFilter$ =\n !!allActions.filterEntities &&\n createEffect(\n () => {\n return this.actions$.pipe(\n ofType(allActions.filterEntities),\n tap(({ filters }) => {\n this.updateUrl(filters);\n }),\n );\n },\n { dispatch: false },\n );\n\n onSort$ =\n !!allActions.sortEntities &&\n createEffect(\n () => {\n return this.actions$.pipe(\n ofType(allActions.sortEntities),\n delay(0),\n tap(({ active, direction }) => {\n this.updateUrl({\n sortActive: active,\n sortDirection: direction,\n });\n }),\n );\n },\n { dispatch: false },\n );\n\n onPaginate$ =\n !!allActions.loadEntitiesPage &&\n createEffect(\n () => {\n return this.actions$.pipe(\n ofType(allActions.loadEntitiesPage),\n tap(({ index }) => {\n this.updateUrl({\n page: index,\n });\n }),\n );\n },\n { dispatch: false },\n );\n\n updateUrl(queryParams: any) {\n this.router.navigate([], {\n relativeTo: this.activatedRoute,\n queryParams,\n queryParamsHandling: 'merge', // remove to replace all query params by provided\n });\n }\n }\n return [SyncEntitiesStateToUrlEffect];\n },\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|