@ngrx-traits/common 0.0.1
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/README.md +7 -0
- package/async-action/async-action.model.d.ts +19 -0
- package/async-action/async-action.trait.d.ts +59 -0
- package/async-action/index.d.ts +2 -0
- package/bundles/ngrx-traits-common.umd.js +2126 -0
- package/bundles/ngrx-traits-common.umd.js.map +1 -0
- package/crud-entities/crud-entities.model.d.ts +76 -0
- package/crud-entities/crud-entities.trait.actions.d.ts +2 -0
- package/crud-entities/crud-entities.trait.d.ts +35 -0
- package/crud-entities/crud-entities.trait.mutators.d.ts +3 -0
- package/crud-entities/crud-entities.trait.reducer.d.ts +7 -0
- package/crud-entities/crud-entities.trait.selectors.d.ts +3 -0
- package/crud-entities/index.d.ts +2 -0
- package/entities-pagination/entities-pagination.model.d.ts +82 -0
- package/entities-pagination/entities-pagination.model.internal.d.ts +12 -0
- package/entities-pagination/entities-pagination.trait.actions.d.ts +2 -0
- package/entities-pagination/entities-pagination.trait.d.ts +55 -0
- package/entities-pagination/entities-pagination.trait.effects.d.ts +8 -0
- package/entities-pagination/entities-pagination.trait.mutators.d.ts +3 -0
- package/entities-pagination/entities-pagination.trait.reducer.d.ts +7 -0
- package/entities-pagination/entities-pagination.trait.selectors.d.ts +4 -0
- package/entities-pagination/index.d.ts +2 -0
- package/esm2015/async-action/async-action.model.js +2 -0
- package/esm2015/async-action/async-action.model.js.map +1 -0
- package/esm2015/async-action/async-action.trait.js +96 -0
- package/esm2015/async-action/async-action.trait.js.map +1 -0
- package/esm2015/async-action/index.js +3 -0
- package/esm2015/async-action/index.js.map +1 -0
- package/esm2015/crud-entities/crud-entities.model.js +8 -0
- package/esm2015/crud-entities/crud-entities.model.js.map +1 -0
- package/esm2015/crud-entities/crud-entities.trait.actions.js +20 -0
- package/esm2015/crud-entities/crud-entities.trait.actions.js.map +1 -0
- package/esm2015/crud-entities/crud-entities.trait.js +53 -0
- package/esm2015/crud-entities/crud-entities.trait.js.map +1 -0
- package/esm2015/crud-entities/crud-entities.trait.mutators.js +101 -0
- package/esm2015/crud-entities/crud-entities.trait.mutators.js.map +1 -0
- package/esm2015/crud-entities/crud-entities.trait.reducer.js +15 -0
- package/esm2015/crud-entities/crud-entities.trait.reducer.js.map +1 -0
- package/esm2015/crud-entities/crud-entities.trait.selectors.js +70 -0
- package/esm2015/crud-entities/crud-entities.trait.selectors.js.map +1 -0
- package/esm2015/crud-entities/index.js +3 -0
- package/esm2015/crud-entities/index.js.map +1 -0
- package/esm2015/entities-pagination/entities-pagination.model.internal.js +2 -0
- package/esm2015/entities-pagination/entities-pagination.model.internal.js.map +1 -0
- package/esm2015/entities-pagination/entities-pagination.model.js +2 -0
- package/esm2015/entities-pagination/entities-pagination.model.js.map +1 -0
- package/esm2015/entities-pagination/entities-pagination.trait.actions.js +20 -0
- package/esm2015/entities-pagination/entities-pagination.trait.actions.js.map +1 -0
- package/esm2015/entities-pagination/entities-pagination.trait.effects.js +54 -0
- package/esm2015/entities-pagination/entities-pagination.trait.effects.js.map +1 -0
- package/esm2015/entities-pagination/entities-pagination.trait.js +80 -0
- package/esm2015/entities-pagination/entities-pagination.trait.js.map +1 -0
- package/esm2015/entities-pagination/entities-pagination.trait.mutators.js +23 -0
- package/esm2015/entities-pagination/entities-pagination.trait.mutators.js.map +1 -0
- package/esm2015/entities-pagination/entities-pagination.trait.reducer.js +33 -0
- package/esm2015/entities-pagination/entities-pagination.trait.reducer.js.map +1 -0
- package/esm2015/entities-pagination/entities-pagination.trait.selectors.js +65 -0
- package/esm2015/entities-pagination/entities-pagination.trait.selectors.js.map +1 -0
- package/esm2015/entities-pagination/index.js +3 -0
- package/esm2015/entities-pagination/index.js.map +1 -0
- package/esm2015/filter-entities/filter-entities.model.internal.js +2 -0
- package/esm2015/filter-entities/filter-entities.model.internal.js.map +1 -0
- package/esm2015/filter-entities/filter-entities.model.js +2 -0
- package/esm2015/filter-entities/filter-entities.model.js.map +1 -0
- package/esm2015/filter-entities/filter-entities.trait.actions.js +16 -0
- package/esm2015/filter-entities/filter-entities.trait.actions.js.map +1 -0
- package/esm2015/filter-entities/filter-entities.trait.effect.js +56 -0
- package/esm2015/filter-entities/filter-entities.trait.effect.js.map +1 -0
- package/esm2015/filter-entities/filter-entities.trait.js +68 -0
- package/esm2015/filter-entities/filter-entities.trait.js.map +1 -0
- package/esm2015/filter-entities/filter-entities.trait.mutators.js +7 -0
- package/esm2015/filter-entities/filter-entities.trait.mutators.js.map +1 -0
- package/esm2015/filter-entities/filter-entities.trait.reducer.js +9 -0
- package/esm2015/filter-entities/filter-entities.trait.reducer.js.map +1 -0
- package/esm2015/filter-entities/filter-entities.trait.selectors.js +9 -0
- package/esm2015/filter-entities/filter-entities.trait.selectors.js.map +1 -0
- package/esm2015/filter-entities/index.js +3 -0
- package/esm2015/filter-entities/index.js.map +1 -0
- package/esm2015/index.js +12 -0
- package/esm2015/index.js.map +1 -0
- package/esm2015/load-entities/index.js +3 -0
- package/esm2015/load-entities/index.js.map +1 -0
- package/esm2015/load-entities/load-entities.model.js +2 -0
- package/esm2015/load-entities/load-entities.model.js.map +1 -0
- package/esm2015/load-entities/load-entities.mutators.js +8 -0
- package/esm2015/load-entities/load-entities.mutators.js.map +1 -0
- package/esm2015/load-entities/load-entities.trait.actions.js +10 -0
- package/esm2015/load-entities/load-entities.trait.actions.js.map +1 -0
- package/esm2015/load-entities/load-entities.trait.js +57 -0
- package/esm2015/load-entities/load-entities.trait.js.map +1 -0
- package/esm2015/load-entities/load-entities.trait.reducer.js +12 -0
- package/esm2015/load-entities/load-entities.trait.reducer.js.map +1 -0
- package/esm2015/load-entities/load-entities.trait.selectors.js +33 -0
- package/esm2015/load-entities/load-entities.trait.selectors.js.map +1 -0
- package/esm2015/load-entities/load-entities.utils.js +10 -0
- package/esm2015/load-entities/load-entities.utils.js.map +1 -0
- package/esm2015/load-entity/index.js +3 -0
- package/esm2015/load-entity/index.js.map +1 -0
- package/esm2015/load-entity/load-entity.model.js +2 -0
- package/esm2015/load-entity/load-entity.model.js.map +1 -0
- package/esm2015/load-entity/load-entity.traits.js +65 -0
- package/esm2015/load-entity/load-entity.traits.js.map +1 -0
- package/esm2015/ngrx-traits-common.js +5 -0
- package/esm2015/ngrx-traits-common.js.map +1 -0
- package/esm2015/public_api.js +2 -0
- package/esm2015/public_api.js.map +1 -0
- package/esm2015/reset/index.js +2 -0
- package/esm2015/reset/index.js.map +1 -0
- package/esm2015/reset/reset.trait.js +66 -0
- package/esm2015/reset/reset.trait.js.map +1 -0
- package/esm2015/select-entities/index.js +4 -0
- package/esm2015/select-entities/index.js.map +1 -0
- package/esm2015/select-entities/select-entities.model.js +2 -0
- package/esm2015/select-entities/select-entities.model.js.map +1 -0
- package/esm2015/select-entities/select-entities.trait.actions.js +11 -0
- package/esm2015/select-entities/select-entities.trait.actions.js.map +1 -0
- package/esm2015/select-entities/select-entities.trait.js +50 -0
- package/esm2015/select-entities/select-entities.trait.js.map +1 -0
- package/esm2015/select-entities/select-entities.trait.mutators.js +21 -0
- package/esm2015/select-entities/select-entities.trait.mutators.js.map +1 -0
- package/esm2015/select-entities/select-entities.trait.reducer.js +40 -0
- package/esm2015/select-entities/select-entities.trait.reducer.js.map +1 -0
- package/esm2015/select-entities/select-entities.trait.selectors.js +28 -0
- package/esm2015/select-entities/select-entities.trait.selectors.js.map +1 -0
- package/esm2015/select-entities/select-entities.utils.js +25 -0
- package/esm2015/select-entities/select-entities.utils.js.map +1 -0
- package/esm2015/select-entity/index.js +3 -0
- package/esm2015/select-entity/index.js.map +1 -0
- package/esm2015/select-entity/select-entity.model.js +2 -0
- package/esm2015/select-entity/select-entity.model.js.map +1 -0
- package/esm2015/select-entity/select-entity.trait.actions.js +9 -0
- package/esm2015/select-entity/select-entity.trait.actions.js.map +1 -0
- package/esm2015/select-entity/select-entity.trait.js +47 -0
- package/esm2015/select-entity/select-entity.trait.js.map +1 -0
- package/esm2015/select-entity/select-entity.trait.mutators.js +17 -0
- package/esm2015/select-entity/select-entity.trait.mutators.js.map +1 -0
- package/esm2015/select-entity/select-entity.trait.reducer.js +26 -0
- package/esm2015/select-entity/select-entity.trait.reducer.js.map +1 -0
- package/esm2015/select-entity/select-entity.trait.selectors.js +13 -0
- package/esm2015/select-entity/select-entity.trait.selectors.js.map +1 -0
- package/esm2015/set-entity/index.js +3 -0
- package/esm2015/set-entity/index.js.map +1 -0
- package/esm2015/set-entity/set-entity.model.js +2 -0
- package/esm2015/set-entity/set-entity.model.js.map +1 -0
- package/esm2015/set-entity/set-entity.trait.js +52 -0
- package/esm2015/set-entity/set-entity.trait.js.map +1 -0
- package/esm2015/sort-entities/index.js +4 -0
- package/esm2015/sort-entities/index.js.map +1 -0
- package/esm2015/sort-entities/sort-entities.model.js +2 -0
- package/esm2015/sort-entities/sort-entities.model.js.map +1 -0
- package/esm2015/sort-entities/sort-entities.trait.actions.js +8 -0
- package/esm2015/sort-entities/sort-entities.trait.actions.js.map +1 -0
- package/esm2015/sort-entities/sort-entities.trait.effect.js +28 -0
- package/esm2015/sort-entities/sort-entities.trait.effect.js.map +1 -0
- package/esm2015/sort-entities/sort-entities.trait.js +53 -0
- package/esm2015/sort-entities/sort-entities.trait.js.map +1 -0
- package/esm2015/sort-entities/sort-entities.trait.mutators.js +13 -0
- package/esm2015/sort-entities/sort-entities.trait.mutators.js.map +1 -0
- package/esm2015/sort-entities/sort-entities.trait.reducer.js +22 -0
- package/esm2015/sort-entities/sort-entities.trait.reducer.js.map +1 -0
- package/esm2015/sort-entities/sort-entities.trait.selectors.js +10 -0
- package/esm2015/sort-entities/sort-entities.trait.selectors.js.map +1 -0
- package/esm2015/sort-entities/sort-entities.utils.js +61 -0
- package/esm2015/sort-entities/sort-entities.utils.js.map +1 -0
- package/fesm2015/ngrx-traits-common.js +1511 -0
- package/fesm2015/ngrx-traits-common.js.map +1 -0
- package/filter-entities/filter-entities.model.d.ts +57 -0
- package/filter-entities/filter-entities.model.internal.d.ts +14 -0
- package/filter-entities/filter-entities.trait.actions.d.ts +2 -0
- package/filter-entities/filter-entities.trait.d.ts +42 -0
- package/filter-entities/filter-entities.trait.effect.d.ts +6 -0
- package/filter-entities/filter-entities.trait.mutators.d.ts +2 -0
- package/filter-entities/filter-entities.trait.reducer.d.ts +5 -0
- package/filter-entities/filter-entities.trait.selectors.d.ts +4 -0
- package/filter-entities/index.d.ts +2 -0
- package/index.d.ts +11 -0
- package/load-entities/index.d.ts +2 -0
- package/load-entities/load-entities.model.d.ts +97 -0
- package/load-entities/load-entities.mutators.d.ts +3 -0
- package/load-entities/load-entities.trait.actions.d.ts +2 -0
- package/load-entities/load-entities.trait.d.ts +39 -0
- package/load-entities/load-entities.trait.reducer.d.ts +4 -0
- package/load-entities/load-entities.trait.selectors.d.ts +3 -0
- package/load-entities/load-entities.utils.d.ts +4 -0
- package/load-entity/index.d.ts +2 -0
- package/load-entity/load-entity.model.d.ts +9 -0
- package/load-entity/load-entity.traits.d.ts +64 -0
- package/ngrx-traits-common.d.ts +5 -0
- package/package.json +28 -0
- package/public_api.d.ts +1 -0
- package/reset/index.d.ts +1 -0
- package/reset/reset.trait.d.ts +32 -0
- package/select-entities/index.d.ts +3 -0
- package/select-entities/select-entities.model.d.ts +41 -0
- package/select-entities/select-entities.trait.actions.d.ts +2 -0
- package/select-entities/select-entities.trait.d.ts +34 -0
- package/select-entities/select-entities.trait.mutators.d.ts +2 -0
- package/select-entities/select-entities.trait.reducer.d.ts +8 -0
- package/select-entities/select-entities.trait.selectors.d.ts +3 -0
- package/select-entities/select-entities.utils.d.ts +7 -0
- package/select-entity/index.d.ts +2 -0
- package/select-entity/select-entity.model.d.ts +33 -0
- package/select-entity/select-entity.trait.actions.d.ts +2 -0
- package/select-entity/select-entity.trait.d.ts +30 -0
- package/select-entity/select-entity.trait.mutators.d.ts +2 -0
- package/select-entity/select-entity.trait.reducer.d.ts +8 -0
- package/select-entity/select-entity.trait.selectors.d.ts +2 -0
- package/set-entity/index.d.ts +2 -0
- package/set-entity/set-entity.model.d.ts +16 -0
- package/set-entity/set-entity.trait.d.ts +39 -0
- package/sort-entities/index.d.ts +3 -0
- package/sort-entities/sort-entities.model.d.ts +35 -0
- package/sort-entities/sort-entities.trait.actions.d.ts +2 -0
- package/sort-entities/sort-entities.trait.d.ts +33 -0
- package/sort-entities/sort-entities.trait.effect.d.ts +6 -0
- package/sort-entities/sort-entities.trait.mutators.d.ts +3 -0
- package/sort-entities/sort-entities.trait.reducer.d.ts +4 -0
- package/sort-entities/sort-entities.trait.selectors.d.ts +2 -0
- package/sort-entities/sort-entities.utils.d.ts +8 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { capitalize, createTraitFactory, } from '@ngrx-traits/core';
|
|
2
|
+
import { createAction, createReducer, on } from '@ngrx/store';
|
|
3
|
+
/**
|
|
4
|
+
* Generates ngrx code needed to set and entity in the store state
|
|
5
|
+
* @param entityName - Entity name, should be in camel case
|
|
6
|
+
* @param options.actionProps - param for the main request action,
|
|
7
|
+
* use the props() function for its value
|
|
8
|
+
* @returns the trait factory
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* const traits = createEntityFeatureFactory(
|
|
12
|
+
* addSetEntityTraits({
|
|
13
|
+
* entityName: 'client',
|
|
14
|
+
* actionProps: props<{ client: { id: number; name: string } }
|
|
15
|
+
* }),
|
|
16
|
+
* )({
|
|
17
|
+
* actionsGroupKey: 'Client',
|
|
18
|
+
* featureSelector: createFeatureSelector<
|
|
19
|
+
* SetEntityState<Client, 'client'>
|
|
20
|
+
* >('client'),
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* // will generate
|
|
24
|
+
* traits.actions.setClient({client: {id:123, name: 'gabs'}});
|
|
25
|
+
* traits.selectors.selectClient
|
|
26
|
+
*/
|
|
27
|
+
export function addSetEntityTrait({ entityName, actionProps, }) {
|
|
28
|
+
const capitalizedName = capitalize(entityName);
|
|
29
|
+
return createTraitFactory({
|
|
30
|
+
key: `load${capitalizedName}`,
|
|
31
|
+
config: { entityName, actionProps },
|
|
32
|
+
actions: ({ actionsGroupKey }) => {
|
|
33
|
+
const setEntity = createAction(`${actionsGroupKey} Set ${capitalizedName}`, actionProps);
|
|
34
|
+
return {
|
|
35
|
+
[`set${capitalizedName}`]: setEntity,
|
|
36
|
+
};
|
|
37
|
+
},
|
|
38
|
+
selectors: () => {
|
|
39
|
+
function selectEntity(state) {
|
|
40
|
+
return state[`${entityName}`];
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
[`select${capitalizedName}`]: selectEntity,
|
|
44
|
+
};
|
|
45
|
+
},
|
|
46
|
+
initialState: ({ previousInitialState }) => previousInitialState,
|
|
47
|
+
reducer: ({ initialState, allActions }) => {
|
|
48
|
+
return createReducer(initialState, on(allActions[`set${capitalizedName}`], (state, action) => (Object.assign(Object.assign({}, state), { [entityName]: action[entityName] }))));
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=set-entity.trait.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set-entity.trait.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/set-entity/set-entity.trait.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,kBAAkB,GAEnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAY9D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,iBAAiB,CAK/B,EACA,UAAU,EACV,WAAW,GAIZ;IACC,MAAM,eAAe,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAE/C,OAAO,kBAAkB,CAAC;QACxB,GAAG,EAAE,OAAO,eAAe,EAAE;QAC7B,MAAM,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE;QACnC,OAAO,EAAE,CAAC,EAAE,eAAe,EAA6B,EAAE,EAAE;YAC1D,MAAM,SAAS,GAAG,YAAY,CAC5B,GAAG,eAAe,QAAQ,eAAe,EAAE,EAC3C,WAAkB,CACnB,CAAC;YAEF,OAAO;gBACL,CAAC,MAAM,eAAe,EAAE,CAAC,EAAE,SAAS;aACL,CAAC;QACpC,CAAC;QACD,SAAS,EAAE,GAAG,EAAE;YACd,SAAS,YAAY,CAAC,KAAY;gBAChC,OAAQ,KAAa,CAAC,GAAG,UAAU,EAAE,CAAW,CAAC;YACnD,CAAC;YAED,OAAO;gBACL,CAAC,SAAS,eAAe,EAAE,CAAC,EAAE,YAAY;aACV,CAAC;QACrC,CAAC;QACD,YAAY,EAAE,CAAC,EAAE,oBAAoB,EAAkC,EAAE,EAAE,CACzE,oBAA6B;QAC/B,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE;YACxC,OAAO,aAAa,CAClB,YAAY,EACZ,EAAE,CACC,UAAkB,CAAC,MAAM,eAAe,EAAE,CAAC,EAC5C,CAAC,KAAU,EAAE,MAAW,EAAE,EAAE,CAAC,iCACxB,KAAK,KACR,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,IAChC,CACH,CACF,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC","sourcesContent":["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 * const traits = createEntityFeatureFactory(\n * addSetEntityTraits({\n * entityName: 'client',\n * actionProps: props<{ client: { id: number; name: string } }\n * }),\n * )({\n * actionsGroupKey: 'Client',\n * featureSelector: createFeatureSelector<\n * SetEntityState<Client, 'client'>\n * >('client'),\n * });\n *\n * // will generate\n * traits.actions.setClient({client: {id:123, name: 'gabs'}});\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 = 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"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/sort-entities/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC","sourcesContent":["export * from './sort-entities.model';\nexport * from './sort-entities.trait';\nexport * from './sort-entities.utils';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-entities.model.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.model.ts"],"names":[],"mappings":"AA6CA,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC","sourcesContent":["import { LoadEntitiesState } from '../load-entities/load-entities.model';\n\nimport { ActionCreator, TypedAction } from '@ngrx/store/src/models';\nimport { KeyedConfig } from '@ngrx-traits/core';\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> & TypedAction<string>\n >;\n /**\n * Sets the default sort back\n */\n resetEntitiesSort: ActionCreator<string, () => TypedAction<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"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createAction, props } from '@ngrx/store';
|
|
2
|
+
export function createSortTraitActions(actionsGroupKey, entitiesName) {
|
|
3
|
+
return {
|
|
4
|
+
sortEntities: createAction(`${actionsGroupKey} Sort ${entitiesName}`, props()),
|
|
5
|
+
resetEntitiesSort: createAction(`${actionsGroupKey} Reset ${entitiesName} Sort`),
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=sort-entities.trait.actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-entities.trait.actions.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,UAAU,sBAAsB,CACpC,eAAuB,EACvB,YAAoB;IAEpB,OAAO;QACL,YAAY,EAAE,YAAY,CACxB,GAAG,eAAe,SAAS,YAAY,EAAE,EACzC,KAAK,EAAgB,CACtB;QACD,iBAAiB,EAAE,YAAY,CAC7B,GAAG,eAAe,UAAU,YAAY,OAAO,CAChD;KACF,CAAC;AACJ,CAAC","sourcesContent":["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"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { TraitEffect } from '@ngrx-traits/core';
|
|
3
|
+
import { createEffect, ofType } from '@ngrx/effects';
|
|
4
|
+
import { concatMap } from 'rxjs/operators';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export function createSortTraitEffect(allActions, allConfigs) {
|
|
7
|
+
const { remote } = allConfigs.sort;
|
|
8
|
+
class SortEffect extends TraitEffect {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments);
|
|
11
|
+
this.remoteSort$ = createEffect(() => {
|
|
12
|
+
return this.actions$.pipe(ofType(allActions.sortEntities, allActions.resetEntitiesSort), concatMap(() => allActions.loadEntitiesFirstPage
|
|
13
|
+
? [
|
|
14
|
+
allActions.clearEntitiesPagesCache(),
|
|
15
|
+
allActions.loadEntitiesFirstPage(),
|
|
16
|
+
]
|
|
17
|
+
: [allActions.loadEntities()]));
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
SortEffect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: SortEffect, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
22
|
+
SortEffect.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: SortEffect });
|
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: SortEffect, decorators: [{
|
|
24
|
+
type: Injectable
|
|
25
|
+
}] });
|
|
26
|
+
return remote ? [SortEffect] : [];
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=sort-entities.trait.effect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-entities.trait.effect.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.effect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;;AAY3C,MAAM,UAAU,qBAAqB,CACnC,UAE2B,EAC3B,UAA6E;IAE7E,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,IAAK,CAAC;IAEpC,MACM,UAAW,SAAQ,WAAW;QADpC;;YAEE,gBAAW,GAAG,YAAY,CAAC,GAAG,EAAE;gBAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CACvB,MAAM,CAAC,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,iBAAiB,CAAC,EAC7D,SAAS,CAAC,GAAG,EAAE,CACb,UAAU,CAAC,qBAAqB;oBAC9B,CAAC,CAAC;wBACE,UAAU,CAAC,uBAAuB,EAAE;wBACpC,UAAU,CAAC,qBAAqB,EAAE;qBACnC;oBACH,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAChC,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;SACJ;;2GAdK,UAAU;+GAAV,UAAU;+FAAV,UAAU;sBADf,UAAU;;IAgBX,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;CACnC","sourcesContent":["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"]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { createSortTraitMutators } from './sort-entities.trait.mutators';
|
|
2
|
+
import { createSortInitialState, createSortTraitReducer, } from './sort-entities.trait.reducer';
|
|
3
|
+
import { createSortTraitSelectors } from './sort-entities.trait.selectors';
|
|
4
|
+
import { createSortTraitEffect } from './sort-entities.trait.effect';
|
|
5
|
+
import { sortTraitKey, } from './sort-entities.model';
|
|
6
|
+
import { loadEntitiesTraitKey, } from '../load-entities/load-entities.model';
|
|
7
|
+
import { createTraitFactory } from '@ngrx-traits/core';
|
|
8
|
+
import { createSortTraitActions } from './sort-entities.trait.actions';
|
|
9
|
+
/**
|
|
10
|
+
* Generates ngrx code to sort locally or remotely a list of entities
|
|
11
|
+
* @param config
|
|
12
|
+
* @param config.defaultSort - Required, Default entity prop for the sort
|
|
13
|
+
* @param config.remote - Optional field, default to false, when true disables local
|
|
14
|
+
* sorting and every sort action call will now trigger a loadEntities action and the backend
|
|
15
|
+
* should sort the data, use selectSort in the effect that call backend to get the requested sort,
|
|
16
|
+
* when false all sorting is done in memory when the sort action is fired
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* // The following trait config
|
|
20
|
+
* export interface TestState
|
|
21
|
+
* extends EntityAndStatusState<Todo>, SortState<Todo>{}
|
|
22
|
+
*
|
|
23
|
+
* const traits = createEntityFeatureFactory(
|
|
24
|
+
* addLoadEntitiesTrait<Todo>(),
|
|
25
|
+
* addSortEntitiesTrait<Todo>({
|
|
26
|
+
* defaultSort: {active:'id', direction:'asc'}
|
|
27
|
+
* })
|
|
28
|
+
* )({
|
|
29
|
+
* actionsGroupKey: '[Todos]',
|
|
30
|
+
* featureSelector: createFeatureSelector<TestState>>(
|
|
31
|
+
* 'todos',
|
|
32
|
+
* ),
|
|
33
|
+
* });
|
|
34
|
+
* // will generate the following actions and selectors, plus the ones generated by other traits
|
|
35
|
+
* traits.actions.sortTodos({active:'id', direction:'desc'})
|
|
36
|
+
* traits.actions.resetTodosSort()
|
|
37
|
+
*
|
|
38
|
+
* traits.selectors.selectTodosSort()
|
|
39
|
+
*/
|
|
40
|
+
export function addSortEntitiesTrait({ remote = false, defaultSort, }) {
|
|
41
|
+
return createTraitFactory({
|
|
42
|
+
key: sortTraitKey,
|
|
43
|
+
depends: [loadEntitiesTraitKey],
|
|
44
|
+
config: { remote, defaultSort },
|
|
45
|
+
actions: ({ actionsGroupKey, entitiesName }) => createSortTraitActions(actionsGroupKey, entitiesName),
|
|
46
|
+
selectors: () => createSortTraitSelectors(),
|
|
47
|
+
mutators: ({ allSelectors, allConfigs }) => createSortTraitMutators(allSelectors, allConfigs),
|
|
48
|
+
initialState: ({ previousInitialState, allConfigs, }) => createSortInitialState(previousInitialState, allConfigs),
|
|
49
|
+
reducer: ({ initialState, allActions, allMutators, allConfigs }) => createSortTraitReducer(initialState, allActions, allMutators, allConfigs),
|
|
50
|
+
effects: ({ allActions, allConfigs }) => createSortTraitEffect(allActions, allConfigs),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=sort-entities.trait.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-entities.trait.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EACL,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAKL,YAAY,GACb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAIL,oBAAoB,GACrB,MAAM,sCAAsC,CAAC;AAK9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAOvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,oBAAoB,CAAS,EAC3C,MAAM,GAAG,KAAK,EACd,WAAW,GACgB;IAC3B,OAAO,kBAAkB,CAAC;QACxB,GAAG,EAAE,YAAY;QACjB,OAAO,EAAE,CAAC,oBAAoB,CAAC;QAC/B,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,EAAgC;QAC7D,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,YAAY,EAA6B,EAAE,EAAE,CACxE,sBAAsB,CAAS,eAAe,EAAE,YAAY,CAAC;QAC/D,SAAS,EAAE,GAAG,EAAE,CAAC,wBAAwB,EAAU;QACnD,QAAQ,EAAE,CAAC,EAAE,YAAY,EAAE,UAAU,EAAmC,EAAE,EAAE,CAC1E,uBAAuB,CACrB,YAC+B,EAC/B,UAAU,CACX;QACH,YAAY,EAAE,CAAC,EACb,oBAAoB,EACpB,UAAU,GACqB,EAAE,EAAE,CACnC,sBAAsB,CAAS,oBAAoB,EAAE,UAAU,CAAC;QAClE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,EAAE,CACjE,sBAAsB,CACpB,YAAY,EACZ,UAAuE,EACvE,WAAW,EACX,UAEiC,CAClC;QACH,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,CACtC,qBAAqB,CACnB,UAE2B,EAC3B,UACiC,CAClC;KACJ,CAAC,CAAC;AACL,CAAC","sourcesContent":["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, Default entity prop for the sort\n * @param config.remote - Optional 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 * addLoadEntitiesTrait<Todo>(),\n * addSortEntitiesTrait<Todo>({\n * defaultSort: {active:'id', direction:'asc'}\n * })\n * )({\n * actionsGroupKey: '[Todos]',\n * featureSelector: createFeatureSelector<TestState>>(\n * 'todos',\n * ),\n * });\n * // will generate the following actions and selectors, plus the ones generated by other traits\n * traits.actions.sortTodos({active:'id', direction:'desc'})\n * traits.actions.resetTodosSort()\n *\n * traits.selectors.selectTodosSort()\n */\nexport function addSortEntitiesTrait<Entity>({\n remote = false,\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"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { sortData } from './sort-entities.utils';
|
|
2
|
+
export function createSortTraitMutators({ selectEntitiesList }, allConfigs) {
|
|
3
|
+
function sortEntities({ active, direction }, state) {
|
|
4
|
+
const { adapter } = allConfigs.loadEntities;
|
|
5
|
+
const entities = selectEntitiesList(state);
|
|
6
|
+
const sortedIds = sortData(entities, { active, direction }).map((v) => adapter.selectId(v));
|
|
7
|
+
return Object.assign(Object.assign({}, state), { ids: sortedIds, sort: Object.assign(Object.assign({}, state.sort), { current: { active, direction } }) });
|
|
8
|
+
}
|
|
9
|
+
return {
|
|
10
|
+
sortEntities,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=sort-entities.trait.mutators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-entities.trait.mutators.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.mutators.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,MAAM,UAAU,uBAAuB,CACrC,EAAE,kBAAkB,EAAiC,EACrD,UAA2C;IAE3C,SAAS,YAAY,CAEnB,EAAE,MAAM,EAAE,SAAS,EAAgB,EAAE,KAAQ;QAC7C,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,YAAa,CAAC;QAC7C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACpE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CACpB,CAAC;QACF,uCACK,KAAK,KACR,GAAG,EAAE,SAAS,EACd,IAAI,kCAAO,KAAK,CAAC,IAAI,KAAE,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OACrD;IACJ,CAAC;IACD,OAAO;QACL,YAAY;KACb,CAAC;AACJ,CAAC","sourcesContent":["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 function sortEntities<\n S extends LoadEntitiesState<Entity> & SortEntitiesState<Entity>\n >({ active, direction }: Sort<Entity>, state: S) {\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"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createReducer, on } from '@ngrx/store';
|
|
2
|
+
export function createSortInitialState(previousInitialState, allConfigs) {
|
|
3
|
+
const { defaultSort } = allConfigs.sort;
|
|
4
|
+
return Object.assign(Object.assign({}, previousInitialState), { sort: {
|
|
5
|
+
current: defaultSort,
|
|
6
|
+
default: defaultSort,
|
|
7
|
+
} });
|
|
8
|
+
}
|
|
9
|
+
export function createSortTraitReducer(initialState, allActions, allMutators, allConfigs) {
|
|
10
|
+
const { remote } = allConfigs.sort;
|
|
11
|
+
return createReducer(initialState, on(allActions.sortEntities, (state, { active, direction }) => !remote
|
|
12
|
+
? allMutators.sortEntities({ active, direction }, state)
|
|
13
|
+
: Object.assign(Object.assign({}, state), { sort: Object.assign(Object.assign({}, state.sort), { current: { active, direction } }) })), on(allActions.resetEntitiesSort, (state) => {
|
|
14
|
+
var _a, _b, _c;
|
|
15
|
+
return ((_a = state.sort) === null || _a === void 0 ? void 0 : _a.default)
|
|
16
|
+
? !remote
|
|
17
|
+
? allMutators.sortEntities((_b = state.sort) === null || _b === void 0 ? void 0 : _b.default, state)
|
|
18
|
+
: Object.assign(Object.assign({}, state), { sort: Object.assign(Object.assign({}, state.sort), { current: (_c = state.sort) === null || _c === void 0 ? void 0 : _c.default }) })
|
|
19
|
+
: state;
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=sort-entities.trait.reducer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-entities.trait.reducer.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.reducer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAahD,MAAM,UAAU,sBAAsB,CACpC,oBAAyB,EACzB,UAA2C;IAE3C,MAAM,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,IAAK,CAAC;IAEzC,uCACK,oBAAoB,KACvB,IAAI,EAAE;YACJ,OAAO,EAAE,WAAW;YACpB,OAAO,EAAE,WAAW;SACrB,IACD;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAMpC,YAAe,EACf,UAAqE,EACrE,WAAyC,EACzC,UAA6E;IAE7E,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,IAAK,CAAC;IAEpC,OAAO,aAAa,CAClB,YAAY,EACZ,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,CAC3D,CAAC,MAAM;QACL,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC;QACxD,CAAC,iCACM,KAAK,KACR,IAAI,kCAAO,KAAK,CAAC,IAAI,KAAE,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MACtD,CACN,EACD,EAAE,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE;;QACzC,OAAA,CAAA,MAAA,KAAK,CAAC,IAAI,0CAAE,OAAO;YACjB,CAAC,CAAC,CAAC,MAAM;gBACP,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,MAAA,KAAK,CAAC,IAAI,0CAAE,OAAO,EAAE,KAAK,CAAC;gBACtD,CAAC,iCACM,KAAK,KACR,IAAI,kCAAO,KAAK,CAAC,IAAI,KAAE,OAAO,EAAE,MAAA,KAAK,CAAC,IAAI,0CAAE,OAAO,MACpD;YACL,CAAC,CAAC,KAAK,CAAA;KAAA,CACV,CACF,CAAC;AACJ,CAAC","sourcesContent":["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 const { remote } = allConfigs.sort!;\n\n return createReducer(\n initialState,\n on(allActions.sortEntities, (state, { active, direction }) =>\n !remote\n ? allMutators.sortEntities({ active, direction }, state)\n : {\n ...state,\n sort: { ...state.sort, current: { active, direction } },\n }\n ),\n on(allActions.resetEntitiesSort, (state) =>\n state.sort?.default\n ? !remote\n ? allMutators.sortEntities(state.sort?.default, state)\n : {\n ...state,\n sort: { ...state.sort, current: state.sort?.default },\n }\n : state\n )\n );\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function createSortTraitSelectors() {
|
|
2
|
+
function selectEntitiesSort(state) {
|
|
3
|
+
var _a;
|
|
4
|
+
return (_a = state.sort) === null || _a === void 0 ? void 0 : _a.current;
|
|
5
|
+
}
|
|
6
|
+
return {
|
|
7
|
+
selectEntitiesSort,
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=sort-entities.trait.selectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-entities.trait.selectors.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.trait.selectors.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,wBAAwB;IAGtC,SAAS,kBAAkB,CAAC,KAAgC;;QAC1D,OAAO,MAAA,KAAK,CAAC,IAAI,0CAAE,OAAO,CAAC;IAC7B,CAAC;IACD,OAAO;QACL,kBAAkB;KACnB,CAAC;AACJ,CAAC","sourcesContent":["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"]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
const MAX_SAFE_INTEGER = 9007199254740991;
|
|
2
|
+
export function _isNumberValue(value) {
|
|
3
|
+
// parseFloat(value) handles most of the cases we're interested in (it treats null, empty string,
|
|
4
|
+
// and other non-number values as NaN, where Number just uses 0) but it considers the string
|
|
5
|
+
// '123hello' to be a valid number. Therefore we also check if Number(value) is NaN.
|
|
6
|
+
return !isNaN(parseFloat(value)) && !isNaN(Number(value));
|
|
7
|
+
}
|
|
8
|
+
function sortingDataAccessor(data, sortHeaderId) {
|
|
9
|
+
const value = data[sortHeaderId];
|
|
10
|
+
if (_isNumberValue(value)) {
|
|
11
|
+
const numberValue = Number(value);
|
|
12
|
+
// Numbers beyond `MAX_SAFE_INTEGER` can't be compared reliably so we
|
|
13
|
+
// leave them as strings. For more info: https://goo.gl/y5vbSg
|
|
14
|
+
return numberValue < MAX_SAFE_INTEGER ? numberValue : value;
|
|
15
|
+
}
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Gets a sorted copy of the data array based on the state of the Sort.
|
|
20
|
+
* @param data The array of data that should be sorted.
|
|
21
|
+
* @param sort The connected MatSort that holds the current sort state.
|
|
22
|
+
*/
|
|
23
|
+
export function sortData(data, sort) {
|
|
24
|
+
const active = sort.active;
|
|
25
|
+
const direction = sort.direction;
|
|
26
|
+
if (!active || direction === '') {
|
|
27
|
+
return data;
|
|
28
|
+
}
|
|
29
|
+
return data.sort((a, b) => {
|
|
30
|
+
const valueA = sortingDataAccessor(a, active);
|
|
31
|
+
const valueB = sortingDataAccessor(b, active);
|
|
32
|
+
// If both valueA and valueB exist (truthy), then compare the two. Otherwise, check if
|
|
33
|
+
// one value exists while the other doesn't. In this case, existing value should come last.
|
|
34
|
+
// This avoids inconsistent results when comparing values to undefined/null.
|
|
35
|
+
// If neither value exists, return 0 (equal).
|
|
36
|
+
let comparatorResult = 0;
|
|
37
|
+
if (valueA != null && valueB != null) {
|
|
38
|
+
// Check if one value is greater than the other; if equal, comparatorResult should remain 0.
|
|
39
|
+
if (typeof valueA === 'string' || typeof valueB === 'string') {
|
|
40
|
+
// if either values are a string, then force both to be strings before localCompare
|
|
41
|
+
comparatorResult = valueA.toString().localeCompare(valueB.toString());
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
if (valueA > valueB) {
|
|
45
|
+
comparatorResult = 1;
|
|
46
|
+
}
|
|
47
|
+
else if (valueA < valueB) {
|
|
48
|
+
comparatorResult = -1;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else if (valueA != null) {
|
|
53
|
+
comparatorResult = 1;
|
|
54
|
+
}
|
|
55
|
+
else if (valueB != null) {
|
|
56
|
+
comparatorResult = -1;
|
|
57
|
+
}
|
|
58
|
+
return comparatorResult * (direction === 'asc' ? 1 : -1);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=sort-entities.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-entities.utils.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/common/src/lib/sort-entities/sort-entities.utils.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAE1C,MAAM,UAAU,cAAc,CAAC,KAAU;IACvC,iGAAiG;IACjG,4FAA4F;IAC5F,oFAAoF;IACpF,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,mBAAmB,CAC1B,IAAO,EACP,YAAoB;IAEpB,MAAM,KAAK,GAAI,IAA+B,CAAC,YAAY,CAAC,CAAC;IAE7D,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE;QACzB,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAElC,qEAAqE;QACrE,8DAA8D;QAC9D,OAAO,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC;KAC7D;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAI,IAAS,EAAE,IAAa;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACjC,IAAI,CAAC,MAAM,IAAI,SAAS,KAAK,EAAE,EAAE;QAC/B,OAAO,IAAI,CAAC;KACb;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,mBAAmB,CAAC,CAAC,EAAE,MAAgB,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,mBAAmB,CAAC,CAAC,EAAE,MAAgB,CAAC,CAAC;QAExD,sFAAsF;QACtF,2FAA2F;QAC3F,4EAA4E;QAC5E,6CAA6C;QAC7C,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE;YACpC,4FAA4F;YAE5F,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBAC5D,mFAAmF;gBACnF,gBAAgB,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;aACvE;iBAAM;gBACL,IAAI,MAAM,GAAG,MAAM,EAAE;oBACnB,gBAAgB,GAAG,CAAC,CAAC;iBACtB;qBAAM,IAAI,MAAM,GAAG,MAAM,EAAE;oBAC1B,gBAAgB,GAAG,CAAC,CAAC,CAAC;iBACvB;aACF;SACF;aAAM,IAAI,MAAM,IAAI,IAAI,EAAE;YACzB,gBAAgB,GAAG,CAAC,CAAC;SACtB;aAAM,IAAI,MAAM,IAAI,IAAI,EAAE;YACzB,gBAAgB,GAAG,CAAC,CAAC,CAAC;SACvB;QAED,OAAO,gBAAgB,GAAG,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["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 * 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"]}
|