@eui/tools 6.6.2 → 6.7.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.
Files changed (71) hide show
  1. package/.version.properties +1 -1
  2. package/CHANGELOG.md +18 -0
  3. package/package.json +1 -1
  4. package/scripts/app/public/index.html +41 -32
  5. package/scripts/app/public/index.js +34 -25
  6. package/scripts/app/public/package-init.html +11 -0
  7. package/scripts/app/public/package-init.js +2 -0
  8. package/scripts/app/routes/index.js +22 -22
  9. package/scripts/csdr/cli/constants.js +2 -1
  10. package/scripts/csdr/cli/package-build-frontend.js +6 -10
  11. package/scripts/csdr/cli/skeletons/package/frontend/15.x/default/assets/i18n/en.json +6 -0
  12. package/scripts/csdr/cli/skeletons/package/frontend/15.x/default/assets/i18n/fr.json +6 -0
  13. package/scripts/csdr/cli/skeletons/package/frontend/15.x/default/src/index.ts +2 -0
  14. package/scripts/csdr/cli/skeletons/package/frontend/15.x/default/src/lib/components/main.component.html +57 -0
  15. package/scripts/csdr/cli/skeletons/package/frontend/15.x/default/src/lib/components/main.component.ts +8 -0
  16. package/scripts/csdr/cli/skeletons/package/frontend/15.x/default/src/lib/constants.ts +1 -0
  17. package/scripts/csdr/cli/skeletons/package/frontend/15.x/default/src/lib/containers/container.component.ts +28 -0
  18. package/scripts/csdr/cli/skeletons/package/frontend/15.x/default/src/lib/module.ts +79 -0
  19. package/scripts/csdr/cli/skeletons/package/frontend/15.x/default/src/lib/routing-module.ts +23 -0
  20. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/.eslintrc.json +79 -0
  21. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/assets/i18n/en.json +6 -0
  22. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/assets/i18n/fr.json +6 -0
  23. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/dependencies-base.json +2 -0
  24. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/dependencies-composite.json +3 -0
  25. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/gitignore_TO_REPLACE +46 -0
  26. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/karma.conf.js +7 -0
  27. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/ng-package.json +7 -0
  28. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/package.json +4 -0
  29. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/dummy.spec.ts.TO_REPLACE +5 -0
  30. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/index.ts +4 -0
  31. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/lib/blocks/sample/components/sample.component.html +1 -0
  32. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/lib/blocks/sample/components/sample.component.ts +14 -0
  33. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/lib/blocks/sample/containers/container.component.ts +36 -0
  34. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/lib/blocks/sample/models/block.model.ts +5 -0
  35. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/lib/blocks/sample/models/index.ts +1 -0
  36. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/lib/blocks/sample/module.ts +37 -0
  37. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/lib/main/components/sample.component.html +1 -0
  38. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/lib/main/components/sample.component.ts +14 -0
  39. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/lib/main/constants.ts +1 -0
  40. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/lib/main/containers/block-store.service.ts +33 -0
  41. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/lib/main/containers/container.component.ts +44 -0
  42. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/lib/main/containers/generic-block-resolver.service.ts +32 -0
  43. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/lib/main/models/block-type.model.ts +6 -0
  44. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/lib/main/models/block.model.ts +10 -0
  45. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/lib/main/models/index.ts +2 -0
  46. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/lib/main/module.ts +60 -0
  47. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/lib/main/store/actions/block.actions.ts +26 -0
  48. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/lib/main/store/reducers/block.reducer.ts +48 -0
  49. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/lib/main/store/reducers/index.ts +22 -0
  50. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/lib/main/store/selectors/block.selectors.ts +29 -0
  51. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/lib/module.ts +17 -0
  52. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/src/test.ts.TO_REPLACE +21 -0
  53. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/tsconfig.lib.json +32 -0
  54. package/scripts/csdr/cli/skeletons/package/frontend/15.x/participant/tsconfig.spec.json +17 -0
  55. package/scripts/csdr/config/remotes.js +1 -1
  56. package/scripts/utils/tools.js +1 -0
  57. package/scripts/csdr/cli/skeletons/package/frontend-eui15/assets/i18n/en.json +0 -3
  58. package/scripts/csdr/cli/skeletons/package/frontend-eui15/assets/i18n/fr.json +0 -3
  59. package/scripts/csdr/cli/skeletons/package/frontend-eui15/src/index.ts +0 -1
  60. package/scripts/csdr/cli/skeletons/package/frontend-eui15/src/lib/module.ts +0 -11
  61. /package/scripts/csdr/cli/skeletons/package/{frontend-eui15 → frontend/15.x/default}/.eslintrc.json +0 -0
  62. /package/scripts/csdr/cli/skeletons/package/{frontend-eui15 → frontend/15.x/default}/dependencies-base.json +0 -0
  63. /package/scripts/csdr/cli/skeletons/package/{frontend-eui15 → frontend/15.x/default}/dependencies-composite.json +0 -0
  64. /package/scripts/csdr/cli/skeletons/package/{frontend-eui15 → frontend/15.x/default}/gitignore_TO_REPLACE +0 -0
  65. /package/scripts/csdr/cli/skeletons/package/{frontend-eui15 → frontend/15.x/default}/karma.conf.js +0 -0
  66. /package/scripts/csdr/cli/skeletons/package/{frontend-eui15 → frontend/15.x/default}/ng-package.json +0 -0
  67. /package/scripts/csdr/cli/skeletons/package/{frontend-eui15 → frontend/15.x/default}/package.json +0 -0
  68. /package/scripts/csdr/cli/skeletons/package/{frontend-eui15 → frontend/15.x/default}/src/dummy.spec.ts.TO_REPLACE +0 -0
  69. /package/scripts/csdr/cli/skeletons/package/{frontend-eui15 → frontend/15.x/default}/src/test.ts.TO_REPLACE +0 -0
  70. /package/scripts/csdr/cli/skeletons/package/{frontend-eui15 → frontend/15.x/default}/tsconfig.lib.json +0 -0
  71. /package/scripts/csdr/cli/skeletons/package/{frontend-eui15 → frontend/15.x/default}/tsconfig.spec.json +0 -0
@@ -0,0 +1,23 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { RouterModule, Routes } from '@angular/router';
3
+
4
+ import { @module.class.name@ContainerComponent } from './containers/container.component';
5
+
6
+ export const routes: Routes = [
7
+ {
8
+ path: '',
9
+ pathMatch: 'full',
10
+ component: @module.class.name@ContainerComponent,
11
+ },
12
+ ];
13
+
14
+ @NgModule({
15
+ imports: [
16
+ RouterModule.forChild(routes),
17
+ ],
18
+ exports: [
19
+ RouterModule,
20
+ ],
21
+ })
22
+ export class RoutingModule {
23
+ }
@@ -0,0 +1,79 @@
1
+ {
2
+ "extends": "../../.eslintrc.json",
3
+ "ignorePatterns": [
4
+ "!**/*",
5
+ "**/*.d.ts",
6
+ "dist"
7
+ ],
8
+ "overrides": [
9
+ {
10
+ "files": [
11
+ "*.ts"
12
+ ],
13
+ "parserOptions": {
14
+ "createDefaultProgram": true
15
+ },
16
+ "rules": {
17
+ "@angular-eslint/component-selector": [
18
+ "error",
19
+ {
20
+ "type": "element",
21
+ "prefix": "@module.scope.string@",
22
+ "style": "kebab-case"
23
+ }
24
+ ],
25
+ "@angular-eslint/directive-selector": [
26
+ "error",
27
+ {
28
+ "type": "attribute",
29
+ "prefix": "@module.scope.string@",
30
+ "style": "camelCase"
31
+ }
32
+ ],
33
+ "@typescript-eslint/ban-ts-comment": "off",
34
+ "@typescript-eslint/ban-types": "error",
35
+ "@typescript-eslint/consistent-type-definitions": "off",
36
+ "@typescript-eslint/dot-notation": "off",
37
+ "@typescript-eslint/explicit-member-accessibility": [
38
+ "off",
39
+ {
40
+ "accessibility": "explicit"
41
+ }
42
+ ],
43
+ "@typescript-eslint/no-inferrable-types": "off",
44
+ "@typescript-eslint/no-unused-vars": "off",
45
+ "@typescript-eslint/no-var-requires": "error",
46
+ "@typescript-eslint/require-await": "error",
47
+ "id-blacklist": "off",
48
+ "id-match": "off",
49
+ "max-len": [
50
+ "error",
51
+ {
52
+ "code": 160
53
+ }
54
+ ],
55
+ "no-duplicate-case": "error",
56
+ "no-duplicate-imports": "off",
57
+ "no-invalid-this": "error",
58
+ "no-multiple-empty-lines": [
59
+ "error",
60
+ {
61
+ "max": 1
62
+ }
63
+ ],
64
+ "no-new-func": "error",
65
+ "no-template-curly-in-string": "error",
66
+ "no-underscore-dangle": "off",
67
+ "no-var": "off",
68
+ "prefer-const": "off",
69
+ "comma-dangle": "off"
70
+ }
71
+ },
72
+ {
73
+ "files": [
74
+ "*.html"
75
+ ],
76
+ "rules": {}
77
+ }
78
+ ]
79
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "@module.scope-name@.TITLE": "@module.scope-name@",
3
+ "@module.scope-name@.FILTER": "Search filter",
4
+ "@module.scope-name@.QUICK_SECTION": "Quick filter",
5
+ "@module.scope-name@.SEARCH_RESULT": "Filter results"
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "@module.scope-name@.TITLE": "**fr** @module.scope-name@ **fr**",
3
+ "@module.scope-name@.FILTER": "**fr** Search filter **fr**",
4
+ "@module.scope-name@.QUICK_SECTION": "**fr** Quick filter **fr**",
5
+ "@module.scope-name@.SEARCH_RESULT": "**fr** Filter results **fr**"
6
+ }
@@ -0,0 +1,46 @@
1
+ # See http://help.github.com/ignore-files/ for more about ignoring files.
2
+
3
+ # compiled output
4
+ **/node_modules
5
+ **/target
6
+ **/build
7
+ **/dist
8
+ **/out-tsc
9
+ **/tmp
10
+ **/test/reports
11
+
12
+ # IDEs and editors
13
+ /.idea
14
+ .project
15
+ .classpath
16
+ .c9/
17
+ *.launch
18
+ .settings/
19
+ *.sublime-workspace
20
+
21
+ # IDE - VSCode
22
+ .vscode/*
23
+ !.vscode/settings.json
24
+ !.vscode/tasks.json
25
+ !.vscode/launch.json
26
+ !.vscode/extensions.json
27
+
28
+ # misc
29
+ /.sass-cache
30
+ /connect.lock
31
+ /coverage
32
+ /libpeerconnection.log
33
+ npm-debug.log
34
+ testem.log
35
+ /typings
36
+ yarn-error.log
37
+
38
+ # e2e
39
+ /e2e/*.js
40
+ /e2e/*.map
41
+ **/src/**/*.js
42
+ **/src/**/*.map
43
+
44
+ # System Files
45
+ .DS_Store
46
+ Thumbs.db
@@ -0,0 +1,7 @@
1
+ const karmaConfig = require('@eui/tools/karma/karma.conf.pkg');
2
+
3
+ module.exports = function (config) {
4
+ config.set(
5
+ karmaConfig.get(config, '@module.full.name@', {})
6
+ );
7
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
3
+ "dest": "./dist",
4
+ "lib": {
5
+ "entryFile": "src/index.ts"
6
+ }
7
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "name": "@module.scope@/@module.name@",
3
+ "version": "1.0.0"
4
+ }
@@ -0,0 +1,5 @@
1
+ describe('First test', () => {
2
+ it('should work', () => {
3
+ expect(true).toBe(true);
4
+ });
5
+ });
@@ -0,0 +1,4 @@
1
+ export { @module.class.name@Module } from './lib/module';
2
+
3
+ export { MainParticipantModule } from './lib/main/module';
4
+ export { @module.class.name@ContainerComponent } from './lib/main/containers/container.component';
@@ -0,0 +1,14 @@
1
+ import { Component, Input } from '@angular/core';
2
+
3
+ import { Block } from '../models';
4
+
5
+ @Component({
6
+ selector: '@module.scope-name@-cp',
7
+ templateUrl: './sample.component.html',
8
+ })
9
+ export class SampleComponent {
10
+ @Input() block: Block;
11
+
12
+ constructor() {
13
+ }
14
+ }
@@ -0,0 +1,36 @@
1
+ import { ChangeDetectionStrategy, Component, Input, OnInit, OnDestroy } from '@angular/core';
2
+
3
+ import { Observable } from 'rxjs';
4
+
5
+ import { BlockComponent } from '@cc/shared';
6
+
7
+ import { Block } from '../models';
8
+
9
+ @Component({
10
+ selector: '@module.scope-name@-ct',
11
+ changeDetection: ChangeDetectionStrategy.OnPush,
12
+ template: `
13
+ <@module.scope-name@-cp
14
+ [block]="block$ | async">
15
+ </@module.scope-name@-cp>`,
16
+ })
17
+ export class ContainerComponent implements BlockComponent, OnInit, OnDestroy {
18
+ @Input() readonly block: Block;
19
+
20
+ block$: Observable<Block>;
21
+
22
+ constructor() {
23
+ }
24
+
25
+ ngOnInit(): void {
26
+ this.asyncPipeObs();
27
+ }
28
+
29
+ ngOnDestroy(): void {
30
+ }
31
+
32
+ private asyncPipeObs(): void {
33
+ // todo: retrieve block$ from the store
34
+ // this.block$
35
+ }
36
+ }
@@ -0,0 +1,5 @@
1
+ import { ParticipantBlock } from '@cc/shared';
2
+
3
+ export interface Block extends ParticipantBlock {
4
+
5
+ }
@@ -0,0 +1,37 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+
4
+ import { TranslateModule } from '@ngx-translate/core';
5
+
6
+ import { CcSharedModule } from '@cc/shared';
7
+
8
+ // -- Components --
9
+ import { SampleComponent } from './components/sample.component';
10
+
11
+ const COMPONENTS = [
12
+ SampleComponent,
13
+ ];
14
+
15
+ // -- Containers --
16
+ import { ContainerComponent } from './containers/container.component';
17
+
18
+ const CONTAINERS = [
19
+ ContainerComponent,
20
+ ];
21
+
22
+ @NgModule({
23
+ imports: [
24
+ CommonModule,
25
+ TranslateModule,
26
+ CcSharedModule,
27
+ ],
28
+ declarations: [
29
+ ...COMPONENTS,
30
+ ...CONTAINERS,
31
+ ],
32
+ exports: [
33
+ ContainerComponent,
34
+ ],
35
+ })
36
+ export class @module.class.name@BlockSampleModule {
37
+ }
@@ -0,0 +1 @@
1
+ <cc-generic-block-ct [block]="block"></cc-generic-block-ct>
@@ -0,0 +1,14 @@
1
+ import { Component, Input } from '@angular/core';
2
+
3
+ import { Block } from '../models';
4
+
5
+ @Component({
6
+ selector: '@module.scope-name@-cp',
7
+ templateUrl: './sample.component.html',
8
+ })
9
+ export class @module.class.name@Component {
10
+ @Input() block: Block;
11
+
12
+ constructor() {
13
+ }
14
+ }
@@ -0,0 +1 @@
1
+ export const namespace = '@module.class.name@:participant';
@@ -0,0 +1,33 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Store, select } from '@ngrx/store';
3
+
4
+ import { Observable } from 'rxjs';
5
+
6
+ import * as block from '../store/actions/block.actions';
7
+
8
+ import {
9
+ Block,
10
+ } from '../models';
11
+
12
+ import * as fromBlockReducer from '../store/reducers/block.reducer';
13
+
14
+ import * as fromBlockSelectors from '../store/selectors/block.selectors';
15
+
16
+ @Injectable()
17
+ export class BlockStoreService {
18
+
19
+ constructor(private store$: Store<fromBlockReducer.State>) {
20
+ }
21
+
22
+ getBlockById(id: string): Observable<Block> {
23
+ return this.store$.pipe(select(fromBlockSelectors.getBlockById(id)));
24
+ }
25
+
26
+ upsertBlock(b: Block): void {
27
+ this.store$.dispatch(new block.UpsertBlock({ block: b }));
28
+ }
29
+
30
+ removeBlock(id: string): void {
31
+ this.store$.dispatch(new block.RemoveBlock({ id }));
32
+ }
33
+ }
@@ -0,0 +1,44 @@
1
+ import { ChangeDetectionStrategy, Component, Input, OnInit, OnDestroy } from '@angular/core';
2
+
3
+ import { Observable } from 'rxjs';
4
+
5
+ import { BlockComponent, GENERIC_BLOCK_RESOLVER_TOKEN } from '@cc/shared';
6
+
7
+ import { Block } from '../models';
8
+
9
+ import { BlockStoreService } from './block-store.service';
10
+ import { GenericBlockResolverService } from './generic-block-resolver.service';
11
+
12
+ @Component({
13
+ selector: '@module.scoe-name@-ct',
14
+ changeDetection: ChangeDetectionStrategy.OnPush,
15
+ providers: [
16
+ BlockStoreService,
17
+ { provide: GENERIC_BLOCK_RESOLVER_TOKEN, useClass: GenericBlockResolverService },
18
+ ],
19
+ template: `
20
+ <@module.scope-name@-cp
21
+ [block]="block$ | async">
22
+ </@module.scope-name@-cp>`,
23
+ })
24
+ export class @module.class.name@ContainerComponent implements BlockComponent, OnInit, OnDestroy {
25
+ @Input() readonly block: Block;
26
+
27
+ block$: Observable<Block>;
28
+
29
+ constructor(private blockStore: BlockStoreService) {
30
+ }
31
+
32
+ ngOnInit(): void {
33
+ this.asyncPipeObs();
34
+
35
+ this.blockStore.upsertBlock(this.block);
36
+ }
37
+
38
+ ngOnDestroy(): void {
39
+ }
40
+
41
+ private asyncPipeObs(): void {
42
+ this.block$ = this.blockStore.getBlockById(this.block.id);
43
+ }
44
+ }
@@ -0,0 +1,32 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+
3
+ import { CONFIG_TOKEN } from '@eui/core';
4
+
5
+ import { BlockConfig, IGenericBlock, UnknownBlockComponent } from '@cc/shared';
6
+
7
+ // BLOCKS
8
+ import { ContainerComponent } from '../../blocks/sample/containers/container.component';
9
+
10
+ import { BlockType } from '../models';
11
+
12
+ @Injectable()
13
+ export class GenericBlockResolverService implements IGenericBlock {
14
+
15
+ constructor(@Inject(CONFIG_TOKEN) private config: any) {
16
+ }
17
+
18
+ getComponentForBlock(block: BlockConfig): any {
19
+ switch (block?.config.subType) {
20
+ case BlockType.@module.class.name@: {
21
+ return ContainerComponent;
22
+ }
23
+ default: {
24
+ return UnknownBlockComponent;
25
+ }
26
+ }
27
+ }
28
+
29
+ enrichBlock(block: BlockConfig): BlockConfig {
30
+ return block;
31
+ }
32
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Sub-blocks
3
+ */
4
+ export class BlockType {
5
+ static @module.class.name@ = '@module.class.name@';
6
+ }
@@ -0,0 +1,10 @@
1
+ import { ParticipantBlock } from '@cc/shared';
2
+
3
+ import { BlockType } from './block-type.model';
4
+
5
+ export interface Block extends ParticipantBlock {
6
+
7
+ config: {
8
+ subType: BlockType;
9
+ }
10
+ }
@@ -0,0 +1,2 @@
1
+ export * from './block.model';
2
+ export * from './block-type.model';
@@ -0,0 +1,60 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { StoreModule } from '@ngrx/store';
4
+ import { EffectsModule } from '@ngrx/effects';
5
+
6
+ import { TranslateModule } from '@ngx-translate/core';
7
+
8
+ import { CcSharedModule } from '@cc/shared';
9
+
10
+ // -- Components --
11
+ import { @module.class.name@Component } from './components/sample.component';
12
+
13
+ const COMPONENTS = [
14
+ @module.class.name@Component,
15
+ ];
16
+
17
+ // -- Containers --
18
+ import { @module.class.name@ContainerComponent } from './containers/container.component';
19
+
20
+ const CONTAINERS = [
21
+ @module.class.name@ContainerComponent,
22
+ ];
23
+
24
+ // -- Effects --
25
+ const EFFECTS = [
26
+ ];
27
+
28
+ // -- Reducer --
29
+ import { TOKEN, reducerProvider } from './store/reducers';
30
+
31
+ // -- Services --
32
+ const SERVICES = [
33
+ ];
34
+
35
+ // -- Constants --
36
+ import { namespace } from './constants';
37
+
38
+ @NgModule({
39
+ imports: [
40
+ CommonModule,
41
+ StoreModule.forFeature(namespace, TOKEN),
42
+ EffectsModule.forFeature(EFFECTS),
43
+ TranslateModule,
44
+
45
+ CcSharedModule,
46
+ ],
47
+ declarations: [
48
+ ...COMPONENTS,
49
+ ...CONTAINERS,
50
+ ],
51
+ providers: [
52
+ reducerProvider,
53
+ ...SERVICES,
54
+ ],
55
+ exports: [
56
+ @module.class.name@ContainerComponent,
57
+ ],
58
+ })
59
+ export class MainParticipantModule {
60
+ }
@@ -0,0 +1,26 @@
1
+ import { Action } from '@ngrx/store';
2
+
3
+ import { Block } from '../../models';
4
+
5
+ export enum BlockActionType {
6
+ UPSERT_BLOCK = '[@module.class.name@ - Block] Upsert block',
7
+ REMOVE_BLOCK = '[@module.class.name@ - Block] Remove block',
8
+ }
9
+
10
+ export class UpsertBlock implements Action {
11
+ readonly type = BlockActionType.UPSERT_BLOCK;
12
+
13
+ constructor(public payload: { block: Block }) {
14
+ }
15
+ }
16
+
17
+ export class RemoveBlock implements Action {
18
+ readonly type = BlockActionType.REMOVE_BLOCK;
19
+
20
+ constructor(public payload: { id: string }) {
21
+ }
22
+ }
23
+
24
+ export type BlockActions =
25
+ UpsertBlock |
26
+ RemoveBlock;
@@ -0,0 +1,48 @@
1
+ import { createSelector } from '@ngrx/store';
2
+ import { createEntityAdapter, Dictionary, EntityAdapter, EntityState } from '@ngrx/entity';
3
+
4
+ import {
5
+ BlockActionType,
6
+ BlockActions,
7
+ } from '../actions/block.actions';
8
+
9
+ import { Block } from '../../models';
10
+
11
+ export interface State extends EntityState<Block> {
12
+ }
13
+
14
+ export const adapter: EntityAdapter<Block> = createEntityAdapter<Block>({
15
+ selectId: (block: Block) => block.id,
16
+ });
17
+
18
+ export const initialState: State = adapter.getInitialState({});
19
+
20
+ export function reducer(state = initialState, action: BlockActions): State {
21
+ switch (action.type) {
22
+ case BlockActionType.UPSERT_BLOCK: {
23
+ return adapter.upsertOne(action.payload.block, state);
24
+ }
25
+ case BlockActionType.REMOVE_BLOCK: {
26
+ return adapter.removeOne(action.payload.id, state);
27
+ }
28
+ default: {
29
+ return state;
30
+ }
31
+ }
32
+ }
33
+
34
+ export const {
35
+ selectIds: getIds,
36
+ selectEntities: getEntities,
37
+ selectAll: getAll,
38
+ selectTotal: getTotal,
39
+ } = adapter.getSelectors();
40
+
41
+ export const getEntityById = (id: string) => {
42
+ return createSelector(
43
+ getEntities,
44
+ (entities: Dictionary<Block>) => {
45
+ return entities[id];
46
+ },
47
+ );
48
+ };
@@ -0,0 +1,22 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { ActionReducerMap } from '@ngrx/store';
3
+
4
+ import * as fromBlock from './block.reducer';
5
+
6
+ export interface State {
7
+ block: fromBlock.State;
8
+ }
9
+
10
+ // -----------------
11
+ // ------------ AOT
12
+ export const TOKEN = new InjectionToken<ActionReducerMap<State>>('@module.class.name@Reducers');
13
+
14
+ export function getReducers(): ActionReducerMap<State, any> {
15
+ return {
16
+ block: fromBlock.reducer,
17
+ };
18
+ }
19
+
20
+ export const reducerProvider = [
21
+ { provide: TOKEN, useFactory: getReducers },
22
+ ];
@@ -0,0 +1,29 @@
1
+ import {
2
+ createSelector,
3
+ createFeatureSelector,
4
+ } from '@ngrx/store';
5
+
6
+ import { State } from '../reducers';
7
+
8
+ import * as fromBlock from '../reducers/block.reducer';
9
+
10
+ import { Block } from '../../models';
11
+
12
+ import { namespace } from '../../constants';
13
+
14
+ // -----------------
15
+ // --- feature selector
16
+ const get@module.class.name@State = createFeatureSelector<State>(namespace);
17
+
18
+ // -----------------
19
+ // ----- block
20
+ const getBlockState = createSelector(get@module.class.name@State, state => {
21
+ return state.block;
22
+ });
23
+
24
+ export const getBlockById = (id: string) => {
25
+ return createSelector(
26
+ getBlockState,
27
+ fromBlock.getEntityById(id),
28
+ );
29
+ };