@smartsoft001/crud-shell-angular 1.2.90 → 2.69.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.
Files changed (214) hide show
  1. package/.storybook/addons.js +1 -0
  2. package/.storybook/config.js +5 -0
  3. package/.storybook/tsconfig.json +8 -0
  4. package/.storybook/webpack.config.js +7 -0
  5. package/jest.config.ts +38 -0
  6. package/ng-package.json +7 -0
  7. package/package.json +12 -23
  8. package/project.json +49 -0
  9. package/src/index.ts +13 -0
  10. package/src/lib/+state/crud.facade.ts +82 -0
  11. package/src/lib/+state/crud.feature.methods.ts +258 -0
  12. package/src/lib/+state/crud.feature.store.ts +77 -0
  13. package/src/lib/components/components.module.ts +58 -0
  14. package/src/lib/components/export/export.component.ts +69 -0
  15. package/src/lib/components/filter/base/base.component.ts +175 -0
  16. package/src/lib/components/filter/check/check.component.scss +25 -0
  17. package/src/lib/components/filter/check/check.component.ts +72 -0
  18. package/src/lib/components/filter/date/date.component.html +30 -0
  19. package/src/lib/components/filter/date/date.component.ts +70 -0
  20. package/src/lib/components/filter/date-time/date-time.component.html +62 -0
  21. package/src/lib/components/filter/date-time/date-time.component.ts +56 -0
  22. package/src/lib/components/filter/date-with-edit/date-with-edit.component.html +109 -0
  23. package/src/lib/components/filter/date-with-edit/date-with-edit.component.ts +70 -0
  24. package/src/lib/components/filter/filter.component.html +52 -0
  25. package/src/lib/components/filter/filter.component.ts +34 -0
  26. package/src/lib/components/filter/flag/flag.component.ts +55 -0
  27. package/src/lib/components/filter/index.ts +9 -0
  28. package/src/lib/components/filter/int/int.component.html +74 -0
  29. package/src/lib/components/filter/int/int.component.ts +57 -0
  30. package/src/lib/components/filter/radio/radio.component.ts +74 -0
  31. package/src/lib/components/filter/text/text.component.ts +46 -0
  32. package/src/lib/components/filters/filters.component.scss +150 -0
  33. package/src/lib/components/filters/filters.component.ts +157 -0
  34. package/src/lib/components/filters-config/filters-config.component.ts +69 -0
  35. package/src/lib/components/group/group.component.ts +93 -0
  36. package/src/lib/components/index.ts +7 -0
  37. package/src/lib/components/multiselect/multiselect.component.html +41 -0
  38. package/src/lib/components/multiselect/multiselect.component.scss +125 -0
  39. package/src/lib/components/multiselect/multiselect.component.ts +104 -0
  40. package/src/lib/crud-full.module.ts +51 -0
  41. package/src/lib/crud.config.ts +79 -0
  42. package/src/lib/crud.module.ts +72 -0
  43. package/src/lib/factories/list-pagination/list-pagination.factory.ts +77 -0
  44. package/src/lib/models/index.ts +1 -0
  45. package/src/lib/models/interfaces.ts +34 -0
  46. package/src/lib/pages/index.ts +6 -0
  47. package/src/lib/pages/item/base/base.component.ts +54 -0
  48. package/src/lib/pages/item/item.component.ts +513 -0
  49. package/src/lib/pages/item/standard/standard.component.scss +0 -0
  50. package/src/lib/pages/item/standard/standard.component.ts +50 -0
  51. package/src/lib/pages/list/base/base.component.ts +29 -0
  52. package/src/lib/pages/list/list.component.stories.ts +77 -0
  53. package/src/lib/pages/list/list.component.ts +438 -0
  54. package/src/lib/pages/list/standard/standard.component.ts +42 -0
  55. package/src/lib/pipes/form-options/form-options.pipe.ts +61 -0
  56. package/src/lib/pipes/index.ts +2 -0
  57. package/src/lib/pipes/pipes.module.ts +9 -0
  58. package/src/lib/providers/model-possibilities/model-possibilities.provider.ts +19 -0
  59. package/src/lib/services/crud/crud.service.spec.ts +303 -0
  60. package/src/lib/services/crud/crud.service.ts +178 -0
  61. package/src/lib/services/list-group/list-group.service.spec.ts +87 -0
  62. package/src/lib/services/list-group/list-group.service.ts +65 -0
  63. package/src/lib/services/page/page.service.spec.ts +143 -0
  64. package/src/lib/services/page/page.service.ts +44 -0
  65. package/src/lib/services/search/search.service.spec.ts +134 -0
  66. package/src/lib/services/search/search.service.ts +42 -0
  67. package/test-setup.ts +0 -0
  68. package/tsconfig.json +13 -0
  69. package/tsconfig.lib.json +31 -0
  70. package/tsconfig.lib.prod.json +11 -0
  71. package/tsconfig.spec.json +10 -0
  72. package/tslint.json +10 -0
  73. package/esm2022/index.mjs +0 -18
  74. package/esm2022/lib/+state/crud.actions.mjs +0 -224
  75. package/esm2022/lib/+state/crud.effects.mjs +0 -182
  76. package/esm2022/lib/+state/crud.facade.mjs +0 -91
  77. package/esm2022/lib/+state/crud.reducer.mjs +0 -214
  78. package/esm2022/lib/+state/crud.selectors.mjs +0 -11
  79. package/esm2022/lib/components/components.module.mjs +0 -110
  80. package/esm2022/lib/components/export/export.component.mjs +0 -47
  81. package/esm2022/lib/components/filter/base/base.component.mjs +0 -152
  82. package/esm2022/lib/components/filter/check/check.component.mjs +0 -36
  83. package/esm2022/lib/components/filter/date/date.component.mjs +0 -47
  84. package/esm2022/lib/components/filter/date-time/date-time.component.mjs +0 -43
  85. package/esm2022/lib/components/filter/date-with-edit/date-with-edit.component.mjs +0 -49
  86. package/esm2022/lib/components/filter/filter.component.mjs +0 -30
  87. package/esm2022/lib/components/filter/flag/flag.component.mjs +0 -16
  88. package/esm2022/lib/components/filter/index.mjs +0 -10
  89. package/esm2022/lib/components/filter/int/int.component.mjs +0 -38
  90. package/esm2022/lib/components/filter/radio/radio.component.mjs +0 -16
  91. package/esm2022/lib/components/filter/text/text.component.mjs +0 -16
  92. package/esm2022/lib/components/filters/filters.component.mjs +0 -111
  93. package/esm2022/lib/components/filters-config/filters-config.component.mjs +0 -37
  94. package/esm2022/lib/components/group/group.component.mjs +0 -54
  95. package/esm2022/lib/components/index.mjs +0 -8
  96. package/esm2022/lib/components/multiselect/multiselect.component.mjs +0 -71
  97. package/esm2022/lib/crud-full.module.mjs +0 -103
  98. package/esm2022/lib/crud.config.mjs +0 -17
  99. package/esm2022/lib/crud.module.mjs +0 -106
  100. package/esm2022/lib/factories/list-pagination/list-pagination.factory.mjs +0 -69
  101. package/esm2022/lib/models/index.mjs +0 -2
  102. package/esm2022/lib/models/interfaces.mjs +0 -2
  103. package/esm2022/lib/pages/index.mjs +0 -7
  104. package/esm2022/lib/pages/item/base/base.component.mjs +0 -44
  105. package/esm2022/lib/pages/item/item.component.mjs +0 -395
  106. package/esm2022/lib/pages/item/standard/standard.component.mjs +0 -15
  107. package/esm2022/lib/pages/list/base/base.component.mjs +0 -23
  108. package/esm2022/lib/pages/list/list.component.mjs +0 -355
  109. package/esm2022/lib/pages/list/standard/standard.component.mjs +0 -34
  110. package/esm2022/lib/pipes/form-options/form-options.pipe.mjs +0 -55
  111. package/esm2022/lib/pipes/index.mjs +0 -3
  112. package/esm2022/lib/pipes/pipes.module.mjs +0 -20
  113. package/esm2022/lib/providers/model-possibilities/model-possibilities.provider.mjs +0 -11
  114. package/esm2022/lib/services/crud/crud.service.mjs +0 -138
  115. package/esm2022/lib/services/list-group/list-group.service.mjs +0 -60
  116. package/esm2022/lib/services/page/page.service.mjs +0 -41
  117. package/esm2022/lib/services/search/search.service.mjs +0 -41
  118. package/esm2022/lib/services/socket/socket.service.mjs +0 -17
  119. package/esm2022/smartsoft001-crud-shell-angular.mjs +0 -5
  120. package/fesm2022/smartsoft001-crud-shell-angular.mjs +0 -2810
  121. package/fesm2022/smartsoft001-crud-shell-angular.mjs.map +0 -1
  122. package/index.d.ts +0 -18
  123. package/index.d.ts.map +0 -1
  124. package/lib/+state/crud.actions.d.ts +0 -152
  125. package/lib/+state/crud.actions.d.ts.map +0 -1
  126. package/lib/+state/crud.effects.d.ts +0 -18
  127. package/lib/+state/crud.effects.d.ts.map +0 -1
  128. package/lib/+state/crud.facade.d.ts +0 -44
  129. package/lib/+state/crud.facade.d.ts.map +0 -1
  130. package/lib/+state/crud.reducer.d.ts +0 -43
  131. package/lib/+state/crud.reducer.d.ts.map +0 -1
  132. package/lib/+state/crud.selectors.d.ts +0 -10
  133. package/lib/+state/crud.selectors.d.ts.map +0 -1
  134. package/lib/components/components.module.d.ts +0 -27
  135. package/lib/components/components.module.d.ts.map +0 -1
  136. package/lib/components/export/export.component.d.ts +0 -21
  137. package/lib/components/export/export.component.d.ts.map +0 -1
  138. package/lib/components/filter/base/base.component.d.ts +0 -39
  139. package/lib/components/filter/base/base.component.d.ts.map +0 -1
  140. package/lib/components/filter/check/check.component.d.ts +0 -19
  141. package/lib/components/filter/check/check.component.d.ts.map +0 -1
  142. package/lib/components/filter/date/date.component.d.ts +0 -16
  143. package/lib/components/filter/date/date.component.d.ts.map +0 -1
  144. package/lib/components/filter/date-time/date-time.component.d.ts +0 -15
  145. package/lib/components/filter/date-time/date-time.component.d.ts.map +0 -1
  146. package/lib/components/filter/date-with-edit/date-with-edit.component.d.ts +0 -17
  147. package/lib/components/filter/date-with-edit/date-with-edit.component.d.ts.map +0 -1
  148. package/lib/components/filter/filter.component.d.ts +0 -14
  149. package/lib/components/filter/filter.component.d.ts.map +0 -1
  150. package/lib/components/filter/flag/flag.component.d.ts +0 -8
  151. package/lib/components/filter/flag/flag.component.d.ts.map +0 -1
  152. package/lib/components/filter/index.d.ts +0 -10
  153. package/lib/components/filter/index.d.ts.map +0 -1
  154. package/lib/components/filter/int/int.component.d.ts +0 -15
  155. package/lib/components/filter/int/int.component.d.ts.map +0 -1
  156. package/lib/components/filter/radio/radio.component.d.ts +0 -8
  157. package/lib/components/filter/radio/radio.component.d.ts.map +0 -1
  158. package/lib/components/filter/text/text.component.d.ts +0 -8
  159. package/lib/components/filter/text/text.component.d.ts.map +0 -1
  160. package/lib/components/filters/filters.component.d.ts +0 -83
  161. package/lib/components/filters/filters.component.d.ts.map +0 -1
  162. package/lib/components/filters-config/filters-config.component.d.ts +0 -19
  163. package/lib/components/filters-config/filters-config.component.d.ts.map +0 -1
  164. package/lib/components/group/group.component.d.ts +0 -23
  165. package/lib/components/group/group.component.d.ts.map +0 -1
  166. package/lib/components/index.d.ts +0 -8
  167. package/lib/components/index.d.ts.map +0 -1
  168. package/lib/components/multiselect/multiselect.component.d.ts +0 -28
  169. package/lib/components/multiselect/multiselect.component.d.ts.map +0 -1
  170. package/lib/crud-full.module.d.ts +0 -28
  171. package/lib/crud-full.module.d.ts.map +0 -1
  172. package/lib/crud.config.d.ts +0 -65
  173. package/lib/crud.config.d.ts.map +0 -1
  174. package/lib/crud.module.d.ts +0 -34
  175. package/lib/crud.module.d.ts.map +0 -1
  176. package/lib/factories/list-pagination/list-pagination.factory.d.ts +0 -20
  177. package/lib/factories/list-pagination/list-pagination.factory.d.ts.map +0 -1
  178. package/lib/models/index.d.ts +0 -2
  179. package/lib/models/index.d.ts.map +0 -1
  180. package/lib/models/interfaces.d.ts +0 -30
  181. package/lib/models/interfaces.d.ts.map +0 -1
  182. package/lib/pages/index.d.ts +0 -7
  183. package/lib/pages/index.d.ts.map +0 -1
  184. package/lib/pages/item/base/base.component.d.ts +0 -25
  185. package/lib/pages/item/base/base.component.d.ts.map +0 -1
  186. package/lib/pages/item/item.component.d.ts +0 -70
  187. package/lib/pages/item/item.component.d.ts.map +0 -1
  188. package/lib/pages/item/standard/standard.component.d.ts +0 -8
  189. package/lib/pages/item/standard/standard.component.d.ts.map +0 -1
  190. package/lib/pages/list/base/base.component.d.ts +0 -15
  191. package/lib/pages/list/base/base.component.d.ts.map +0 -1
  192. package/lib/pages/list/list.component.d.ts +0 -54
  193. package/lib/pages/list/list.component.d.ts.map +0 -1
  194. package/lib/pages/list/standard/standard.component.d.ts +0 -14
  195. package/lib/pages/list/standard/standard.component.d.ts.map +0 -1
  196. package/lib/pipes/form-options/form-options.pipe.d.ts +0 -15
  197. package/lib/pipes/form-options/form-options.pipe.d.ts.map +0 -1
  198. package/lib/pipes/index.d.ts +0 -3
  199. package/lib/pipes/index.d.ts.map +0 -1
  200. package/lib/pipes/pipes.module.d.ts +0 -8
  201. package/lib/pipes/pipes.module.d.ts.map +0 -1
  202. package/lib/providers/model-possibilities/model-possibilities.provider.d.ts +0 -18
  203. package/lib/providers/model-possibilities/model-possibilities.provider.d.ts.map +0 -1
  204. package/lib/services/crud/crud.service.d.ts +0 -38
  205. package/lib/services/crud/crud.service.d.ts.map +0 -1
  206. package/lib/services/list-group/list-group.service.d.ts +0 -15
  207. package/lib/services/list-group/list-group.service.d.ts.map +0 -1
  208. package/lib/services/page/page.service.d.ts +0 -12
  209. package/lib/services/page/page.service.d.ts.map +0 -1
  210. package/lib/services/search/search.service.d.ts +0 -16
  211. package/lib/services/search/search.service.d.ts.map +0 -1
  212. package/lib/services/socket/socket.service.d.ts +0 -10
  213. package/lib/services/socket/socket.service.d.ts.map +0 -1
  214. package/smartsoft001-crud-shell-angular.d.ts.map +0 -1
@@ -0,0 +1,79 @@
1
+ import { Injectable, Type } from '@angular/core';
2
+
3
+ import {
4
+ IIconButtonOptions,
5
+ ICellPipe,
6
+ InputBaseComponent,
7
+ ListMode,
8
+ PaginationMode,
9
+ } from '@smartsoft001/angular';
10
+
11
+ import { ICrudFilterQueryItem, ICrudListGroup } from './models';
12
+
13
+ @Injectable()
14
+ export class CrudConfig<T> {
15
+ apiUrl: string;
16
+ entity: string;
17
+ type?: any;
18
+ reducerFactory?: () => any;
19
+ baseQuery?: Array<ICrudFilterQueryItem>;
20
+ }
21
+
22
+ @Injectable()
23
+ export class CrudFullConfig<T> extends CrudConfig<T> {
24
+ type: any;
25
+ title: string;
26
+ details?:
27
+ | boolean
28
+ | {
29
+ cellPipe?: ICellPipe<T>;
30
+ components?: {
31
+ top?: any;
32
+ bottom?: any;
33
+ };
34
+ };
35
+ edit?:
36
+ | boolean
37
+ | {
38
+ cellPipe?: ICellPipe<T>;
39
+ components?: {
40
+ top?: any;
41
+ bottom?: any;
42
+ };
43
+ };
44
+ add?:
45
+ | boolean
46
+ | {
47
+ components?: {
48
+ top?: any;
49
+ bottom?: any;
50
+ };
51
+ };
52
+ remove?: boolean;
53
+ search?: boolean;
54
+ export?: boolean;
55
+ pagination?: {
56
+ limit: number;
57
+ };
58
+ sort?:
59
+ | boolean
60
+ | {
61
+ default?: string;
62
+ defaultDesc?: boolean;
63
+ };
64
+ list?: {
65
+ cellPipe?: ICellPipe<T>;
66
+ components?: {
67
+ top?: any;
68
+ multi?: any;
69
+ };
70
+ mode?: ListMode;
71
+ paginationMode?: PaginationMode;
72
+ resetQuery?: 'beforeInit';
73
+ groups?: Array<ICrudListGroup>;
74
+ };
75
+ buttons?: Array<IIconButtonOptions>;
76
+ inputComponents?: {
77
+ [key: string]: Type<InputBaseComponent<T>>;
78
+ };
79
+ }
@@ -0,0 +1,72 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { ModuleWithProviders, NgModule } from '@angular/core';
3
+ import { FormsModule } from '@angular/forms';
4
+
5
+ import {
6
+ FILE_SERVICE_CONFIG,
7
+ IFileServiceConfig,
8
+ SharedModule,
9
+ } from '@smartsoft001/angular';
10
+ import { IEntity } from '@smartsoft001/domain-core';
11
+
12
+ import { CrudFacade } from './+state/crud.facade';
13
+ import { CrudComponentsModule } from './components';
14
+ import { CrudFullModule } from './crud-full.module';
15
+ import { CrudConfig, CrudFullConfig } from './crud.config';
16
+ import { CrudListPaginationFactory } from './factories/list-pagination/list-pagination.factory';
17
+ import { CrudPipesModule } from './pipes';
18
+ import { CrudService } from './services/crud/crud.service';
19
+ import { CrudListGroupService } from './services/list-group/list-group.service';
20
+ import { PageService } from './services/page/page.service';
21
+
22
+ @NgModule({
23
+ imports: [
24
+ SharedModule,
25
+ CrudPipesModule,
26
+ FormsModule,
27
+ CommonModule,
28
+ CrudComponentsModule,
29
+ ],
30
+ exports: [CrudComponentsModule],
31
+ providers: [
32
+ CrudService,
33
+ CrudListGroupService,
34
+ PageService,
35
+ CrudFacade,
36
+ CrudListPaginationFactory,
37
+ ],
38
+ })
39
+ export class CrudCoreModule {}
40
+
41
+ @NgModule({})
42
+ export class CrudModule<T extends IEntity<string>> {
43
+ static forFeature<T extends IEntity<string>>(
44
+ options:
45
+ | ICrudModuleOptionsWithRoutng<T>
46
+ | ICrudModuleOptionsWithoutRoutng<T>,
47
+ ): ModuleWithProviders<CrudModule<any>> {
48
+ return {
49
+ ngModule: options.routing ? CrudFullModule : CrudCoreModule,
50
+ providers: [
51
+ { provide: CrudConfig, useValue: options.config },
52
+ { provide: CrudFullConfig, useValue: options.config },
53
+ {
54
+ provide: FILE_SERVICE_CONFIG,
55
+ useValue: { apiUrl: options.config.apiUrl } as IFileServiceConfig,
56
+ },
57
+ ],
58
+ };
59
+ }
60
+ }
61
+
62
+ export interface ICrudModuleOptionsWithRoutng<T> {
63
+ config: CrudFullConfig<T>;
64
+ socket?: boolean;
65
+ routing: true;
66
+ }
67
+
68
+ export interface ICrudModuleOptionsWithoutRoutng<T> {
69
+ config: CrudConfig<T>;
70
+ socket?: boolean;
71
+ routing: false;
72
+ }
@@ -0,0 +1,77 @@
1
+ import { computed, inject, Injectable } from '@angular/core';
2
+
3
+ import { IListPaginationOptions, PaginationMode } from '@smartsoft001/angular';
4
+ import { IEntity } from '@smartsoft001/domain-core';
5
+
6
+ import { CrudFacade } from '../../+state/crud.facade';
7
+ import { ICrudFilter } from '../../models';
8
+
9
+ @Injectable()
10
+ export class CrudListPaginationFactory<T extends IEntity<string>> {
11
+ private readonly facade = inject(CrudFacade<T>);
12
+
13
+ async create(options: {
14
+ mode?: PaginationMode;
15
+ limit: number;
16
+ provider: {
17
+ getLinks(): any;
18
+ getFilter(): ICrudFilter;
19
+ };
20
+ }): Promise<IListPaginationOptions> {
21
+ return {
22
+ mode: options.mode,
23
+ limit: options.limit,
24
+ loadNextPage: () => {
25
+ if (!options.provider.getLinks() || !options.provider.getLinks().next)
26
+ return Promise.resolve(false);
27
+
28
+ return new Promise((res) => {
29
+ if (this.facade.loaded()) {
30
+ setTimeout(() => {
31
+ res(
32
+ options.provider.getLinks() && options.provider.getLinks().next,
33
+ );
34
+ });
35
+ }
36
+
37
+ const filter = options.provider.getFilter();
38
+ this.facade.read({
39
+ ...filter,
40
+ offset: filter.offset + filter.limit,
41
+ });
42
+ });
43
+ },
44
+ loadPrevPage: () => {
45
+ if (!options.provider.getLinks() || !options.provider.getLinks().prev)
46
+ return Promise.resolve(false);
47
+
48
+ return new Promise((res) => {
49
+ const loaded = this.facade.loaded();
50
+ if (loaded) {
51
+ setTimeout(() => {
52
+ res(
53
+ options.provider.getLinks() && options.provider.getLinks().prev,
54
+ );
55
+ });
56
+ }
57
+
58
+ this.facade.read({
59
+ ...options.provider.getFilter(),
60
+ offset:
61
+ options.provider.getFilter().offset -
62
+ options.provider.getFilter().limit,
63
+ });
64
+ });
65
+ },
66
+ page: computed(() => {
67
+ const f = this.facade.filter();
68
+ return f?.limit ? f.offset / f.limit + 1 : 0;
69
+ }),
70
+ totalPages: computed(() => {
71
+ const filter = this.facade.filter();
72
+ const totalCount = this.facade.totalCount();
73
+ return filter?.limit ? Math.ceil(totalCount / filter.limit) : 0;
74
+ }),
75
+ };
76
+ }
77
+ }
@@ -0,0 +1 @@
1
+ export * from './interfaces';
@@ -0,0 +1,34 @@
1
+ import { PaginationMode } from '@smartsoft001/angular';
2
+ import { IModelFilter } from '@smartsoft001/models';
3
+
4
+ export interface ICrudFilter {
5
+ searchText?: string;
6
+ sortBy?: string;
7
+ sortDesc?: boolean;
8
+ offset?: number;
9
+ limit?: number;
10
+ paginationMode?: PaginationMode;
11
+ query?: Array<ICrudFilterQueryItem>;
12
+ }
13
+
14
+ export interface ICrudFilterQueryItem extends IModelFilter {
15
+ key: string;
16
+ value: any;
17
+ type: '=' | '!=' | '>=' | '<=' | '<' | '>';
18
+ hidden?: boolean;
19
+ }
20
+
21
+ export interface ICrudCreateManyOptions {
22
+ mode: CrudCreateManyMode;
23
+ }
24
+
25
+ export interface ICrudListGroup {
26
+ key: string;
27
+ value: string;
28
+ text: string;
29
+ show?: boolean;
30
+ changed?: boolean;
31
+ children?: Array<ICrudListGroup>;
32
+ }
33
+
34
+ export type CrudCreateManyMode = 'default' | 'replace';
@@ -0,0 +1,6 @@
1
+ export * from './item/base/base.component';
2
+ export * from './item/item.component';
3
+ export * from './item/standard/standard.component';
4
+ export * from './list/list.component';
5
+ export * from './list/base/base.component';
6
+ export * from './list/standard/standard.component';
@@ -0,0 +1,54 @@
1
+ import {
2
+ Directive,
3
+ inject,
4
+ input,
5
+ output,
6
+ Signal,
7
+ viewChild,
8
+ viewChildren,
9
+ ViewContainerRef,
10
+ } from '@angular/core';
11
+
12
+ import {
13
+ BaseComponent,
14
+ DynamicComponentType,
15
+ FormComponent,
16
+ IDetailsOptions,
17
+ } from '@smartsoft001/angular';
18
+ import { IEntity } from '@smartsoft001/domain-core';
19
+
20
+ import { CrudFacade } from '../../../+state/crud.facade';
21
+ import { CrudFullConfig } from '../../../crud.config';
22
+
23
+ @Directive()
24
+ export abstract class CrudItemPageBaseComponent<
25
+ T extends IEntity<string>,
26
+ > extends BaseComponent {
27
+ public config = inject(CrudFullConfig<T>);
28
+ public facade = inject(CrudFacade<T>);
29
+
30
+ static smartType: DynamicComponentType = 'crud-item-page';
31
+
32
+ selected: Signal<T>;
33
+
34
+ contentTpl = viewChild<ViewContainerRef>('contentTpl');
35
+
36
+ formComponents = viewChildren(FormComponent);
37
+
38
+ detailsOptions = input<IDetailsOptions<T>>();
39
+
40
+ mode = input<string>();
41
+
42
+ uniqueProvider = input<(values: Record<keyof T, any>) => Promise<boolean>>();
43
+
44
+ onPartialChange = output<Partial<T>>();
45
+
46
+ onChange = output<T>();
47
+
48
+ onValidChange = output<boolean>();
49
+
50
+ constructor() {
51
+ super();
52
+ this.selected = this.facade.selected;
53
+ }
54
+ }