@verisoft/store 18.0.0 → 18.1.0

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/.eslintrc.json CHANGED
@@ -1,43 +1,43 @@
1
- {
2
- "extends": ["../../../.eslintrc.base.json"],
3
- "ignorePatterns": ["!**/*"],
4
- "overrides": [
5
- {
6
- "files": ["*.ts"],
7
- "extends": [
8
- "plugin:@nx/angular",
9
- "plugin:@angular-eslint/template/process-inline-templates"
10
- ],
11
- "rules": {
12
- "@angular-eslint/directive-selector": [
13
- "error",
14
- {
15
- "type": "attribute",
16
- "prefix": "lib",
17
- "style": "camelCase"
18
- }
19
- ],
20
- "@angular-eslint/component-selector": [
21
- "error",
22
- {
23
- "type": "element",
24
- "prefix": "lib",
25
- "style": "kebab-case"
26
- }
27
- ]
28
- }
29
- },
30
- {
31
- "files": ["*.html"],
32
- "extends": ["plugin:@nx/angular-template"],
33
- "rules": {}
34
- },
35
- {
36
- "files": ["*.json"],
37
- "parser": "jsonc-eslint-parser",
38
- "rules": {
39
- "@nx/dependency-checks": "error"
40
- }
41
- }
42
- ]
43
- }
1
+ {
2
+ "extends": ["../../../.eslintrc.base.json"],
3
+ "ignorePatterns": ["!**/*"],
4
+ "overrides": [
5
+ {
6
+ "files": ["*.ts"],
7
+ "extends": [
8
+ "plugin:@nx/angular",
9
+ "plugin:@angular-eslint/template/process-inline-templates"
10
+ ],
11
+ "rules": {
12
+ "@angular-eslint/directive-selector": [
13
+ "error",
14
+ {
15
+ "type": "attribute",
16
+ "prefix": "lib",
17
+ "style": "camelCase"
18
+ }
19
+ ],
20
+ "@angular-eslint/component-selector": [
21
+ "error",
22
+ {
23
+ "type": "element",
24
+ "prefix": "lib",
25
+ "style": "kebab-case"
26
+ }
27
+ ]
28
+ }
29
+ },
30
+ {
31
+ "files": ["*.html"],
32
+ "extends": ["plugin:@nx/angular-template"],
33
+ "rules": {}
34
+ },
35
+ {
36
+ "files": ["*.json"],
37
+ "parser": "jsonc-eslint-parser",
38
+ "rules": {
39
+ "@nx/dependency-checks": "error"
40
+ }
41
+ }
42
+ ]
43
+ }
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
- # store
2
-
3
- This library was generated with [Nx](https://nx.dev).
4
-
5
- ## Running unit tests
6
-
7
- Run `nx test store` to execute the unit tests.
1
+ # store
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Running unit tests
6
+
7
+ Run `nx test store` to execute the unit tests.
package/jest.config.ts CHANGED
@@ -1,22 +1,22 @@
1
- /* eslint-disable */
2
- export default {
3
- displayName: 'store',
4
- preset: '../../../jest.preset.js',
5
- setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
6
- coverageDirectory: '../../../coverage/src/libs/store',
7
- transform: {
8
- '^.+\\.(ts|mjs|js|html)$': [
9
- 'jest-preset-angular',
10
- {
11
- tsconfig: '<rootDir>/tsconfig.spec.json',
12
- stringifyContentPathRegex: '\\.(html|svg)$',
13
- },
14
- ],
15
- },
16
- transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'],
17
- snapshotSerializers: [
18
- 'jest-preset-angular/build/serializers/no-ng-attributes',
19
- 'jest-preset-angular/build/serializers/ng-snapshot',
20
- 'jest-preset-angular/build/serializers/html-comment',
21
- ],
22
- };
1
+ /* eslint-disable */
2
+ export default {
3
+ displayName: 'store',
4
+ preset: '../../../jest.preset.js',
5
+ setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
6
+ coverageDirectory: '../../../coverage/src/libs/store',
7
+ transform: {
8
+ '^.+\\.(ts|mjs|js|html)$': [
9
+ 'jest-preset-angular',
10
+ {
11
+ tsconfig: '<rootDir>/tsconfig.spec.json',
12
+ stringifyContentPathRegex: '\\.(html|svg)$',
13
+ },
14
+ ],
15
+ },
16
+ transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'],
17
+ snapshotSerializers: [
18
+ 'jest-preset-angular/build/serializers/no-ng-attributes',
19
+ 'jest-preset-angular/build/serializers/ng-snapshot',
20
+ 'jest-preset-angular/build/serializers/html-comment',
21
+ ],
22
+ };
package/ng-package.json CHANGED
@@ -1,7 +1,7 @@
1
- {
2
- "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
3
- "dest": "../../../dist/src/libs/store",
4
- "lib": {
5
- "entryFile": "src/index.ts"
6
- }
7
- }
1
+ {
2
+ "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
3
+ "dest": "../../../dist/src/libs/store",
4
+ "lib": {
5
+ "entryFile": "src/index.ts"
6
+ }
7
+ }
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
- {
2
- "name": "@verisoft/store",
3
- "version": "18.0.0",
4
- "peerDependencies": {
5
- "@ngrx/store": "^18.0.2",
6
- "@ngrx/effects": "^18.0.2",
7
- "rxjs": "~7.8.0",
8
- "@verisoft/core": "0.0.1"
9
- },
10
- "dependencies": {},
11
- "sideEffects": false
12
- }
1
+ {
2
+ "name": "@verisoft/store",
3
+ "version": "18.1.0",
4
+ "peerDependencies": {
5
+ "@ngrx/store": "^18.0.2",
6
+ "@ngrx/effects": "^18.0.2",
7
+ "rxjs": "~7.8.0",
8
+ "@verisoft/core": "0.0.1"
9
+ },
10
+ "dependencies": {},
11
+ "sideEffects": false
12
+ }
package/project.json CHANGED
@@ -1,36 +1,36 @@
1
- {
2
- "name": "store",
3
- "$schema": "../../../node_modules/nx/schemas/project-schema.json",
4
- "sourceRoot": "src/libs/store/src",
5
- "prefix": "lib",
6
- "projectType": "library",
7
- "tags": [],
8
- "targets": {
9
- "build": {
10
- "executor": "@nx/angular:package",
11
- "outputs": ["{workspaceRoot}/dist/{projectRoot}"],
12
- "options": {
13
- "project": "src/libs/store/ng-package.json"
14
- },
15
- "configurations": {
16
- "production": {
17
- "tsConfig": "src/libs/store/tsconfig.lib.prod.json"
18
- },
19
- "development": {
20
- "tsConfig": "src/libs/store/tsconfig.lib.json"
21
- }
22
- },
23
- "defaultConfiguration": "production"
24
- },
25
- "test": {
26
- "executor": "@nx/jest:jest",
27
- "outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
28
- "options": {
29
- "jestConfig": "src/libs/store/jest.config.ts"
30
- }
31
- },
32
- "lint": {
33
- "executor": "@nx/eslint:lint"
34
- }
35
- }
36
- }
1
+ {
2
+ "name": "store",
3
+ "$schema": "../../../node_modules/nx/schemas/project-schema.json",
4
+ "sourceRoot": "src/libs/store/src",
5
+ "prefix": "lib",
6
+ "projectType": "library",
7
+ "tags": [],
8
+ "targets": {
9
+ "build": {
10
+ "executor": "@nx/angular:package",
11
+ "outputs": ["{workspaceRoot}/dist/{projectRoot}"],
12
+ "options": {
13
+ "project": "src/libs/store/ng-package.json"
14
+ },
15
+ "configurations": {
16
+ "production": {
17
+ "tsConfig": "src/libs/store/tsconfig.lib.prod.json"
18
+ },
19
+ "development": {
20
+ "tsConfig": "src/libs/store/tsconfig.lib.json"
21
+ }
22
+ },
23
+ "defaultConfiguration": "production"
24
+ },
25
+ "test": {
26
+ "executor": "@nx/jest:jest",
27
+ "outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
28
+ "options": {
29
+ "jestConfig": "src/libs/store/jest.config.ts"
30
+ }
31
+ },
32
+ "lint": {
33
+ "executor": "@nx/eslint:lint"
34
+ }
35
+ }
36
+ }
package/src/index.ts CHANGED
@@ -1,9 +1,9 @@
1
- export * from './lib/detail-state/detail.actions';
2
- export * from './lib/detail-state/detail.reducer';
3
- export * from './lib/detail-state/detail.effects';
4
- export * from './lib/detail-state/detail.models';
5
-
6
- export * from './lib/table-state/actions';
7
- export * from './lib/table-state/reducers';
8
- export * from './lib/table-state/effects';
9
- export * from './lib/table-state/models';
1
+ export * from './lib/detail-state/detail.actions';
2
+ export * from './lib/detail-state/detail.reducer';
3
+ export * from './lib/detail-state/detail.effects';
4
+ export * from './lib/detail-state/detail.models';
5
+
6
+ export * from './lib/table-state/actions';
7
+ export * from './lib/table-state/reducers';
8
+ export * from './lib/table-state/effects';
9
+ export * from './lib/table-state/models';
@@ -1,63 +1,63 @@
1
- import { createAction, props } from '@ngrx/store';
2
- import { FormState } from './detail.models';
3
-
4
- export function createInitDetailAction(detailsRepository: string) {
5
- return createAction(
6
- `[${detailsRepository} Page] Init`,
7
- props<{ obj: string | null | number | undefined | any }>()
8
- );
9
- }
10
-
11
- export function createLoadDetailSuccessAction<T>(detailsRepository: string) {
12
- return createAction(
13
- `[${detailsRepository}/API] Load ${detailsRepository} Success`,
14
- props<{ item: T }>()
15
- );
16
- }
17
-
18
- export function createLoadDetailFailureAction(detailsRepository: string) {
19
- return createAction(
20
- `[${detailsRepository}/API] Load ${detailsRepository} Failure`,
21
- props<{ error: any }>()
22
- );
23
- }
24
-
25
- export function createUpdateDetailAction<T>(detailsRepository: string) {
26
- return createAction(
27
- `[${detailsRepository}/API] Update ${detailsRepository}`,
28
- props<{ item: T }>()
29
- );
30
- }
31
-
32
- export function createUpdateFormStateAction(detailsRepository: string) {
33
- return createAction(
34
- `[${detailsRepository}/API] Update Form State`,
35
- props<{ formState: FormState }>()
36
- );
37
- }
38
-
39
- export function createSaveDetailAction(detailsRepository: string) {
40
- return createAction(`[${detailsRepository}/API] Save Detail `);
41
- }
42
-
43
- export function createSaveDetailSuccessAction<T>(detailsRepository: string) {
44
- return createAction(
45
- `[${detailsRepository}/API] Save Detail Success`,
46
- props<{ item: T }>()
47
- );
48
- }
49
-
50
- export function createSaveDetailFailureAction(detailsRepository: string) {
51
- return createAction(
52
- `[${detailsRepository}/API] Save Detail Failure`,
53
- props<{ error: any }>()
54
- );
55
- }
56
-
57
- export function createUpdateSaveDetailAction(detailsRepository: string) {
58
- return createAction(`[${detailsRepository}/API] Update Detail `);
59
- }
60
-
61
- export function createResetStateAction(detailsRepository: string) {
62
- return createAction(`[${detailsRepository}/API] Reset State`);
63
- }
1
+ import { createAction, props } from '@ngrx/store';
2
+ import { FormState } from './detail.models';
3
+
4
+ export function createInitDetailAction(detailsRepository: string) {
5
+ return createAction(
6
+ `[${detailsRepository} Page] Init`,
7
+ props<{ obj: string | null | number | undefined | any }>()
8
+ );
9
+ }
10
+
11
+ export function createLoadDetailSuccessAction<T>(detailsRepository: string) {
12
+ return createAction(
13
+ `[${detailsRepository}/API] Load ${detailsRepository} Success`,
14
+ props<{ item: T }>()
15
+ );
16
+ }
17
+
18
+ export function createLoadDetailFailureAction(detailsRepository: string) {
19
+ return createAction(
20
+ `[${detailsRepository}/API] Load ${detailsRepository} Failure`,
21
+ props<{ error: any }>()
22
+ );
23
+ }
24
+
25
+ export function createUpdateDetailAction<T>(detailsRepository: string) {
26
+ return createAction(
27
+ `[${detailsRepository}/API] Update ${detailsRepository}`,
28
+ props<{ item: T }>()
29
+ );
30
+ }
31
+
32
+ export function createUpdateFormStateAction(detailsRepository: string) {
33
+ return createAction(
34
+ `[${detailsRepository}/API] Update Form State`,
35
+ props<{ formState: FormState }>()
36
+ );
37
+ }
38
+
39
+ export function createSaveDetailAction(detailsRepository: string) {
40
+ return createAction(`[${detailsRepository}/API] Save Detail `);
41
+ }
42
+
43
+ export function createSaveDetailSuccessAction<T>(detailsRepository: string) {
44
+ return createAction(
45
+ `[${detailsRepository}/API] Save Detail Success`,
46
+ props<{ item: T }>()
47
+ );
48
+ }
49
+
50
+ export function createSaveDetailFailureAction(detailsRepository: string) {
51
+ return createAction(
52
+ `[${detailsRepository}/API] Save Detail Failure`,
53
+ props<{ error: any }>()
54
+ );
55
+ }
56
+
57
+ export function createUpdateSaveDetailAction(detailsRepository: string) {
58
+ return createAction(`[${detailsRepository}/API] Update Detail `);
59
+ }
60
+
61
+ export function createResetStateAction(detailsRepository: string) {
62
+ return createAction(`[${detailsRepository}/API] Reset State`);
63
+ }
@@ -1,131 +1,131 @@
1
- import { Actions, createEffect, ofType } from '@ngrx/effects';
2
- import { BaseHttpService } from '@verisoft/core';
3
- import {
4
- catchError,
5
- EMPTY,
6
- map,
7
- Observable,
8
- of,
9
- switchMap,
10
- tap,
11
- withLatestFrom,
12
- } from 'rxjs';
13
- import {
14
- createInitDetailAction,
15
- createLoadDetailFailureAction,
16
- createLoadDetailSuccessAction,
17
- createSaveDetailAction,
18
- createSaveDetailFailureAction,
19
- createSaveDetailSuccessAction,
20
- } from './detail.actions';
21
-
22
- export interface CreateInitFormConfig<T> {
23
- service?: BaseHttpService<T>;
24
- get?: (obj: any) => Observable<T>;
25
- snackbar?: any;
26
- errorMessage?: string;
27
- successMessge?: string;
28
- }
29
-
30
- export function createInitDetailEffect<T>(
31
- detailsRepository: string,
32
- actions$: Actions,
33
- config: CreateInitFormConfig<T>
34
- ) {
35
- return createEffect(() => {
36
- return actions$.pipe(
37
- ofType(createInitDetailAction(detailsRepository)),
38
- switchMap(({ obj }) => {
39
- const get$: Observable<any> = (config?.service?.get(obj as any) ??
40
- config?.get?.(obj)) as Observable<any>;
41
- if(!get$) return EMPTY;
42
- return get$?.pipe(
43
- map((item) => {
44
- return createLoadDetailSuccessAction(detailsRepository)({ item });
45
- }),
46
- catchError((error) => {
47
- console.error('Error', error);
48
- config?.snackbar?.showError(config?.errorMessage ?? error);
49
- return of(
50
- createLoadDetailFailureAction(detailsRepository)({ error })
51
- );
52
- })
53
- );
54
- })
55
- );
56
- });
57
- }
58
-
59
- export function createSaveDetailEffect<
60
- T extends { id: number },
61
- SERVICE extends BaseHttpService<T>
62
- >(
63
- detailsRepository: string,
64
- actions$: Actions,
65
- service: SERVICE,
66
- detail$: Observable<T | undefined>,
67
- ) {
68
- return createEffect(() =>
69
- actions$.pipe(
70
- ofType(createSaveDetailAction(detailsRepository)),
71
- withLatestFrom(detail$),
72
- switchMap(([, savedItem]) => {
73
- const isNew = !savedItem?.id;
74
- const saveAction = isNew
75
- ? service.post(savedItem as T)
76
- : service.put(savedItem.id, savedItem);
77
- return saveAction.pipe(
78
- map((item) => {
79
- return createSaveDetailSuccessAction(detailsRepository)({
80
- item: item,
81
- });
82
- }),
83
- catchError((error) => {
84
- console.error('Error', error);
85
- return of(
86
- createSaveDetailFailureAction(detailsRepository)({ error })
87
- );
88
- })
89
- );
90
- })
91
- )
92
- );
93
- }
94
-
95
- export function createSaveDetailSuccessEffect(
96
- detailsRepository: string,
97
- actions$: Actions,
98
- config?: CreateInitFormConfig<unknown>,
99
- ) {
100
- return createEffect(
101
- () =>
102
- actions$.pipe(
103
- ofType(createSaveDetailSuccessAction(detailsRepository)),
104
- tap(() => {
105
- config?.snackbar?.showSuccess(config?.successMessge ?? `Item successfully saved.`);
106
- })
107
- ),
108
- {
109
- dispatch: false,
110
- }
111
- );
112
- }
113
-
114
- export function createSaveDetailFailureEffect(
115
- detailsRepository: string,
116
- actions$: Actions,
117
- config?: CreateInitFormConfig<unknown>,
118
- ) {
119
- return createEffect(
120
- () =>
121
- actions$.pipe(
122
- ofType(createSaveDetailFailureAction(detailsRepository)),
123
- tap(({error}) => {
124
- config?.snackbar?.showError(config.errorMessage ?? `Error saving item. ${error.message}`);
125
- })
126
- ),
127
- {
128
- dispatch: false,
129
- }
130
- );
131
- }
1
+ import { Actions, createEffect, ofType } from '@ngrx/effects';
2
+ import { BaseHttpService } from '@verisoft/core';
3
+ import {
4
+ catchError,
5
+ EMPTY,
6
+ map,
7
+ Observable,
8
+ of,
9
+ switchMap,
10
+ tap,
11
+ withLatestFrom,
12
+ } from 'rxjs';
13
+ import {
14
+ createInitDetailAction,
15
+ createLoadDetailFailureAction,
16
+ createLoadDetailSuccessAction,
17
+ createSaveDetailAction,
18
+ createSaveDetailFailureAction,
19
+ createSaveDetailSuccessAction,
20
+ } from './detail.actions';
21
+
22
+ export interface CreateInitFormConfig<T> {
23
+ service?: BaseHttpService<T>;
24
+ get?: (obj: any) => Observable<T>;
25
+ snackbar?: any;
26
+ errorMessage?: string;
27
+ successMessge?: string;
28
+ }
29
+
30
+ export function createInitDetailEffect<T>(
31
+ detailsRepository: string,
32
+ actions$: Actions,
33
+ config: CreateInitFormConfig<T>
34
+ ) {
35
+ return createEffect(() => {
36
+ return actions$.pipe(
37
+ ofType(createInitDetailAction(detailsRepository)),
38
+ switchMap(({ obj }) => {
39
+ const get$: Observable<any> = (config?.service?.get(obj as any) ??
40
+ config?.get?.(obj)) as Observable<any>;
41
+ if(!get$) return EMPTY;
42
+ return get$?.pipe(
43
+ map((item) => {
44
+ return createLoadDetailSuccessAction(detailsRepository)({ item });
45
+ }),
46
+ catchError((error) => {
47
+ console.error('Error', error);
48
+ config?.snackbar?.showError(config?.errorMessage ?? error);
49
+ return of(
50
+ createLoadDetailFailureAction(detailsRepository)({ error })
51
+ );
52
+ })
53
+ );
54
+ })
55
+ );
56
+ });
57
+ }
58
+
59
+ export function createSaveDetailEffect<
60
+ T extends { id: number },
61
+ SERVICE extends BaseHttpService<T>
62
+ >(
63
+ detailsRepository: string,
64
+ actions$: Actions,
65
+ service: SERVICE,
66
+ detail$: Observable<T | undefined>,
67
+ ) {
68
+ return createEffect(() =>
69
+ actions$.pipe(
70
+ ofType(createSaveDetailAction(detailsRepository)),
71
+ withLatestFrom(detail$),
72
+ switchMap(([, savedItem]) => {
73
+ const isNew = !savedItem?.id;
74
+ const saveAction = isNew
75
+ ? service.post(savedItem as T)
76
+ : service.put(savedItem.id, savedItem);
77
+ return saveAction.pipe(
78
+ map((item) => {
79
+ return createSaveDetailSuccessAction(detailsRepository)({
80
+ item: item,
81
+ });
82
+ }),
83
+ catchError((error) => {
84
+ console.error('Error', error);
85
+ return of(
86
+ createSaveDetailFailureAction(detailsRepository)({ error })
87
+ );
88
+ })
89
+ );
90
+ })
91
+ )
92
+ );
93
+ }
94
+
95
+ export function createSaveDetailSuccessEffect(
96
+ detailsRepository: string,
97
+ actions$: Actions,
98
+ config?: CreateInitFormConfig<unknown>,
99
+ ) {
100
+ return createEffect(
101
+ () =>
102
+ actions$.pipe(
103
+ ofType(createSaveDetailSuccessAction(detailsRepository)),
104
+ tap(() => {
105
+ config?.snackbar?.showSuccess(config?.successMessge ?? `Item successfully saved.`);
106
+ })
107
+ ),
108
+ {
109
+ dispatch: false,
110
+ }
111
+ );
112
+ }
113
+
114
+ export function createSaveDetailFailureEffect(
115
+ detailsRepository: string,
116
+ actions$: Actions,
117
+ config?: CreateInitFormConfig<unknown>,
118
+ ) {
119
+ return createEffect(
120
+ () =>
121
+ actions$.pipe(
122
+ ofType(createSaveDetailFailureAction(detailsRepository)),
123
+ tap(({error}) => {
124
+ config?.snackbar?.showError(config.errorMessage ?? `Error saving item. ${error.message}`);
125
+ })
126
+ ),
127
+ {
128
+ dispatch: false,
129
+ }
130
+ );
131
+ }