@verisoft/ui-govcz 20.1.0 → 20.1.2

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 (223) hide show
  1. package/fesm2022/verisoft-ui-govcz.mjs +3770 -0
  2. package/fesm2022/verisoft-ui-govcz.mjs.map +1 -0
  3. package/index.d.ts +1013 -0
  4. package/package.json +19 -7
  5. package/styles/dist/main.css +13 -0
  6. package/styles/dist/main.css.map +1 -0
  7. package/.eslintrc.json +0 -60
  8. package/jest.config.ts +0 -21
  9. package/ng-package.json +0 -28
  10. package/project.json +0 -49
  11. package/src/config.d.ts +0 -10
  12. package/src/index.ts +0 -1
  13. package/src/lib/components/breadcrumb/breadcrumb.component.html +0 -25
  14. package/src/lib/components/breadcrumb/breadcrumb.component.scss +0 -0
  15. package/src/lib/components/breadcrumb/breadcrumb.component.spec.ts +0 -21
  16. package/src/lib/components/breadcrumb/breadcrumb.component.ts +0 -28
  17. package/src/lib/components/breadcrumb/index.ts +0 -1
  18. package/src/lib/components/button/button.component.html +0 -28
  19. package/src/lib/components/button/button.component.scss +0 -21
  20. package/src/lib/components/button/button.component.ts +0 -77
  21. package/src/lib/components/button/index.ts +0 -1
  22. package/src/lib/components/calendar/calendar.component.html +0 -28
  23. package/src/lib/components/calendar/calendar.component.scss +0 -0
  24. package/src/lib/components/calendar/calendar.component.ts +0 -77
  25. package/src/lib/components/calendar/index.ts +0 -1
  26. package/src/lib/components/checkbox/checkbox.component.html +0 -23
  27. package/src/lib/components/checkbox/checkbox.component.scss +0 -0
  28. package/src/lib/components/checkbox/checkbox.component.ts +0 -61
  29. package/src/lib/components/checkbox/index.ts +0 -1
  30. package/src/lib/components/confirm-dialog/confirm-dialog.component.html +0 -50
  31. package/src/lib/components/confirm-dialog/confirm-dialog.component.scss +0 -4
  32. package/src/lib/components/confirm-dialog/confirm-dialog.component.ts +0 -79
  33. package/src/lib/components/confirm-dialog/index.ts +0 -1
  34. package/src/lib/components/dropdown/dropdown-item.component.html +0 -8
  35. package/src/lib/components/dropdown/dropdown-item.component.ts +0 -18
  36. package/src/lib/components/dropdown/dropdown.component.html +0 -91
  37. package/src/lib/components/dropdown/dropdown.component.scss +0 -108
  38. package/src/lib/components/dropdown/dropdown.component.spec.ts +0 -21
  39. package/src/lib/components/dropdown/dropdown.component.ts +0 -296
  40. package/src/lib/components/dropdown/dropdown.model.ts +0 -6
  41. package/src/lib/components/dropdown/index.ts +0 -1
  42. package/src/lib/components/dropdown-button/dropdown-button.component.html +0 -31
  43. package/src/lib/components/dropdown-button/dropdown-button.component.ts +0 -34
  44. package/src/lib/components/dropdown-button/index.ts +0 -1
  45. package/src/lib/components/errors/error.component.html +0 -11
  46. package/src/lib/components/errors/error.component.scss +0 -0
  47. package/src/lib/components/errors/error.component.spec.ts +0 -19
  48. package/src/lib/components/errors/error.component.ts +0 -29
  49. package/src/lib/components/errors/index.ts +0 -1
  50. package/src/lib/components/feature-list/directives/feature-list-column.directive.ts +0 -32
  51. package/src/lib/components/feature-list/directives/feature-list-filter-field.directive.ts +0 -8
  52. package/src/lib/components/feature-list/feature-list-filter.pipe.ts +0 -20
  53. package/src/lib/components/feature-list/feature-list-page.component.ts +0 -30
  54. package/src/lib/components/feature-list/feature-list-page.model.ts +0 -42
  55. package/src/lib/components/feature-list/feature-list.component.html +0 -67
  56. package/src/lib/components/feature-list/feature-list.component.scss +0 -10
  57. package/src/lib/components/feature-list/feature-list.component.ts +0 -360
  58. package/src/lib/components/feature-list/index.ts +0 -5
  59. package/src/lib/components/filter/directives/filter-field.directive.ts +0 -35
  60. package/src/lib/components/filter/filter.component.html +0 -78
  61. package/src/lib/components/filter/filter.component.scss +0 -32
  62. package/src/lib/components/filter/filter.component.spec.ts +0 -21
  63. package/src/lib/components/filter/filter.component.stories.ts +0 -23
  64. package/src/lib/components/filter/filter.component.ts +0 -286
  65. package/src/lib/components/filter/filter.model.ts +0 -18
  66. package/src/lib/components/filter/index.ts +0 -2
  67. package/src/lib/components/form-field/form-field.component.html +0 -14
  68. package/src/lib/components/form-field/form-field.component.scss +0 -0
  69. package/src/lib/components/form-field/form-field.component.spec.ts +0 -21
  70. package/src/lib/components/form-field/form-field.component.ts +0 -76
  71. package/src/lib/components/form-field/index.ts +0 -1
  72. package/src/lib/components/header/header.component.html +0 -122
  73. package/src/lib/components/header/header.component.scss +0 -0
  74. package/src/lib/components/header/header.component.ts +0 -90
  75. package/src/lib/components/header/index.ts +0 -1
  76. package/src/lib/components/icon/icon.component.html +0 -11
  77. package/src/lib/components/icon/icon.component.scss +0 -20
  78. package/src/lib/components/icon/icon.component.ts +0 -110
  79. package/src/lib/components/icon/index.ts +0 -2
  80. package/src/lib/components/index.ts +0 -37
  81. package/src/lib/components/input-group/index.ts +0 -1
  82. package/src/lib/components/input-group/input-group.component.html +0 -41
  83. package/src/lib/components/input-group/input-group.component.scss +0 -0
  84. package/src/lib/components/input-group/input-group.component.ts +0 -75
  85. package/src/lib/components/loader/index.ts +0 -1
  86. package/src/lib/components/loader/loader.component.html +0 -7
  87. package/src/lib/components/loader/loader.component.scss +0 -0
  88. package/src/lib/components/loader/loader.component.spec.ts +0 -21
  89. package/src/lib/components/loader/loader.component.ts +0 -33
  90. package/src/lib/components/multiselect/index.ts +0 -1
  91. package/src/lib/components/multiselect/multiselect.component.html +0 -21
  92. package/src/lib/components/multiselect/multiselect.component.scss +0 -0
  93. package/src/lib/components/multiselect/multiselect.component.spec.ts +0 -21
  94. package/src/lib/components/multiselect/multiselect.component.ts +0 -117
  95. package/src/lib/components/number-input/index.ts +0 -1
  96. package/src/lib/components/number-input/number-input.component.html +0 -48
  97. package/src/lib/components/number-input/number-input.component.scss +0 -0
  98. package/src/lib/components/number-input/number-input.component.ts +0 -80
  99. package/src/lib/components/page-header/index.ts +0 -1
  100. package/src/lib/components/page-header/page-header.component.html +0 -3
  101. package/src/lib/components/page-header/page-header.component.scss +0 -11
  102. package/src/lib/components/page-header/page-header.component.spec.ts +0 -21
  103. package/src/lib/components/page-header/page-header.component.ts +0 -27
  104. package/src/lib/components/password/index.ts +0 -1
  105. package/src/lib/components/password/password.component.html +0 -31
  106. package/src/lib/components/password/password.component.scss +0 -0
  107. package/src/lib/components/password/password.component.spec.ts +0 -21
  108. package/src/lib/components/password/password.component.ts +0 -83
  109. package/src/lib/components/radiobutton/index.ts +0 -1
  110. package/src/lib/components/radiobutton/radiobutton.component.html +0 -23
  111. package/src/lib/components/radiobutton/radiobutton.component.scss +0 -0
  112. package/src/lib/components/radiobutton/radiobutton.component.ts +0 -61
  113. package/src/lib/components/search/index.ts +0 -1
  114. package/src/lib/components/search/search.component.html +0 -23
  115. package/src/lib/components/search/search.component.scss +0 -0
  116. package/src/lib/components/search/search.component.ts +0 -45
  117. package/src/lib/components/section/index.ts +0 -1
  118. package/src/lib/components/section/section.component.html +0 -26
  119. package/src/lib/components/section/section.component.scss +0 -0
  120. package/src/lib/components/section/section.component.ts +0 -55
  121. package/src/lib/components/side-menu/index.ts +0 -2
  122. package/src/lib/components/side-menu/side-menu.component.html +0 -22
  123. package/src/lib/components/side-menu/side-menu.component.scss +0 -17
  124. package/src/lib/components/side-menu/side-menu.component.ts +0 -42
  125. package/src/lib/components/side-menu/side-menu.module.ts +0 -56
  126. package/src/lib/components/snackbar/index.ts +0 -2
  127. package/src/lib/components/snackbar/services/snackbar.service.ts +0 -73
  128. package/src/lib/components/snackbar/snackbar.component.html +0 -14
  129. package/src/lib/components/snackbar/snackbar.component.scss +0 -0
  130. package/src/lib/components/snackbar/snackbar.component.spec.ts +0 -21
  131. package/src/lib/components/snackbar/snackbar.component.ts +0 -44
  132. package/src/lib/components/snackbar/snackbar.model.ts +0 -10
  133. package/src/lib/components/stepper/index.ts +0 -1
  134. package/src/lib/components/stepper/stepper.component.html +0 -35
  135. package/src/lib/components/stepper/stepper.component.scss +0 -9
  136. package/src/lib/components/stepper/stepper.component.ts +0 -60
  137. package/src/lib/components/switch/index.ts +0 -1
  138. package/src/lib/components/switch/switch.component.html +0 -16
  139. package/src/lib/components/switch/switch.component.scss +0 -0
  140. package/src/lib/components/switch/switch.component.ts +0 -39
  141. package/src/lib/components/tab-view/index.ts +0 -2
  142. package/src/lib/components/tab-view/tab-view-item.component.ts +0 -23
  143. package/src/lib/components/tab-view/tab-view.component.html +0 -51
  144. package/src/lib/components/tab-view/tab-view.component.scss +0 -43
  145. package/src/lib/components/tab-view/tab-view.component.ts +0 -64
  146. package/src/lib/components/tab-view/tab-view.module.ts +0 -25
  147. package/src/lib/components/table/index.ts +0 -1
  148. package/src/lib/components/table/table-pagination-info.component.html +0 -9
  149. package/src/lib/components/table/table-pagination-info.component.ts +0 -22
  150. package/src/lib/components/table/table.component.html +0 -199
  151. package/src/lib/components/table/table.component.scss +0 -192
  152. package/src/lib/components/table/table.component.ts +0 -390
  153. package/src/lib/components/table/table.model.ts +0 -17
  154. package/src/lib/components/table/table.models.ts +0 -12
  155. package/src/lib/components/tag/index.ts +0 -3
  156. package/src/lib/components/tag/tag.component.html +0 -12
  157. package/src/lib/components/tag/tag.component.scss +0 -4
  158. package/src/lib/components/tag/tag.component.ts +0 -44
  159. package/src/lib/components/tag/tag.model.ts +0 -7
  160. package/src/lib/components/textarea/index.ts +0 -1
  161. package/src/lib/components/textarea/textarea.component.html +0 -50
  162. package/src/lib/components/textarea/textarea.component.scss +0 -0
  163. package/src/lib/components/textarea/textarea.component.ts +0 -77
  164. package/src/lib/components/textfield/index.ts +0 -1
  165. package/src/lib/components/textfield/textfield.component.html +0 -34
  166. package/src/lib/components/textfield/textfield.component.scss +0 -0
  167. package/src/lib/components/textfield/textfield.component.ts +0 -112
  168. package/src/lib/components/tooltip/index.ts +0 -1
  169. package/src/lib/components/tooltip/tooltip.component.html +0 -9
  170. package/src/lib/components/tooltip/tooltip.component.ts +0 -19
  171. package/src/lib/icons.ts +0 -36
  172. package/src/lib/index.ts +0 -5
  173. package/src/lib/init.service.ts +0 -11
  174. package/src/lib/interceptors/http-error-message.interceptor.ts +0 -45
  175. package/src/lib/pages/bad-request-page/bad-request-page.component.html +0 -5
  176. package/src/lib/pages/bad-request-page/bad-request-page.component.scss +0 -0
  177. package/src/lib/pages/bad-request-page/bad-request-page.component.ts +0 -14
  178. package/src/lib/pages/error-page/error-page.component.html +0 -5
  179. package/src/lib/pages/error-page/error-page.component.scss +0 -0
  180. package/src/lib/pages/error-page/error-page.component.ts +0 -31
  181. package/src/lib/pages/error-page/error-page.constants.ts +0 -19
  182. package/src/lib/pages/index.ts +0 -3
  183. package/src/lib/pages/internal-server-error-page/internal-server-error-page.component.html +0 -5
  184. package/src/lib/pages/internal-server-error-page/internal-server-error-page.component.scss +0 -0
  185. package/src/lib/pages/internal-server-error-page/internal-server-error-page.component.ts +0 -15
  186. package/src/lib/pages/not-authenticated/index.ts +0 -1
  187. package/src/lib/pages/not-authenticated/not-authenticated.component.html +0 -5
  188. package/src/lib/pages/not-authenticated/not-authenticated.component.ts +0 -13
  189. package/src/lib/pages/not-authorized/index.ts +0 -1
  190. package/src/lib/pages/not-authorized/not-authorized.component.html +0 -5
  191. package/src/lib/pages/not-authorized/not-authorized.component.ts +0 -17
  192. package/src/lib/pages/not-found/index.ts +0 -1
  193. package/src/lib/pages/not-found/not-found.component.html +0 -5
  194. package/src/lib/pages/not-found/not-found.component.ts +0 -17
  195. package/src/lib/pages/not-found-page/not-found-page.component.html +0 -6
  196. package/src/lib/pages/not-found-page/not-found-page.component.scss +0 -0
  197. package/src/lib/pages/not-found-page/not-found-page.component.ts +0 -15
  198. package/src/lib/pipes/color/color.pipe.ts +0 -24
  199. package/src/lib/pipes/index.ts +0 -3
  200. package/src/lib/pipes/multiselect/multiselect-options.pipe.ts +0 -61
  201. package/src/lib/pipes/size/size.pipe.ts +0 -24
  202. package/src/test-setup.ts +0 -8
  203. package/tsconfig.json +0 -30
  204. package/tsconfig.lib.json +0 -17
  205. package/tsconfig.lib.prod.json +0 -9
  206. package/tsconfig.spec.json +0 -16
  207. /package/{src → styles}/sass/foundations/_colors.scss +0 -0
  208. /package/{src → styles}/sass/foundations/index.scss +0 -0
  209. /package/{src → styles}/sass/header.css +0 -0
  210. /package/{src → styles}/sass/header.scss +0 -0
  211. /package/{src → styles}/sass/integrations/_bootstrap.scss +0 -0
  212. /package/{src → styles}/sass/integrations/index.scss +0 -0
  213. /package/{src → styles}/sass/main.scss +0 -0
  214. /package/{src → styles}/sass/overrides/_gov.scss +0 -0
  215. /package/{src → styles}/sass/overrides/index.scss +0 -0
  216. /package/{src → styles}/sass/scrollbar.scss +0 -0
  217. /package/{src → styles}/sass/tokens/_theme-dark.scss +0 -0
  218. /package/{src → styles}/sass/tokens/_theme-light.scss +0 -0
  219. /package/{src → styles}/sass/tokens/index.scss +0 -0
  220. /package/{src → styles}/sass/utils/_table_filter.scss +0 -0
  221. /package/{src → styles}/sass/utils/_utils.scss +0 -0
  222. /package/{src → styles}/sass/utils/index.scss +0 -0
  223. /package/{src → styles}/sass/vendors/_bootstrap.scss +0 -0
@@ -1,360 +0,0 @@
1
- import { HttpClient } from '@angular/common/http';
2
- import {
3
- AfterViewInit,
4
- ChangeDetectionStrategy,
5
- ChangeDetectorRef,
6
- Component,
7
- ContentChildren,
8
- EventEmitter,
9
- inject,
10
- Input,
11
- Output,
12
- QueryList,
13
- ViewChild,
14
- } from '@angular/core';
15
- import {
16
- AllDataRequestParams,
17
- BASE_URL_PATH,
18
- BaseHttpService,
19
- convertDatasource,
20
- DatasourceType,
21
- DEFAULT_PAGE_SIZE,
22
- } from '@verisoft/core';
23
- import {
24
- ColumnModel,
25
- DialogService,
26
- downloadFile,
27
- GenericFieldDefinition,
28
- GovButtonType,
29
- GovButtonTypeType,
30
- MAX_COLUMN_CHAR_COUNT,
31
- TableDatasourceDirective,
32
- TableFilterDirective,
33
- TableSelectionMode,
34
- TableSelectionModeType,
35
- } from '@verisoft/ui-core';
36
- import { take, switchMap, forkJoin, Observable, of } from 'rxjs';
37
- import { Icons } from '../../icons';
38
- import { FilterComponent } from '../filter';
39
- import {
40
- ActionButtonComponent,
41
- ActionButtonGroupComponent,
42
- } from '../shared-components/action-button-group';
43
- import { TableComponent } from '../table';
44
- import { FeatureListFilterFieldDirective } from './directives/feature-list-filter-field.directive';
45
- import { FeatureListFilterPipe } from './feature-list-filter.pipe';
46
- import {
47
- FEATURE_LIST_COLUMN_PROVIDER,
48
- FeatureListColumnDefinition,
49
- FeatureListColumnProvider,
50
- } from './feature-list-page.model';
51
-
52
- @Component({
53
- selector: 'v-feature-list',
54
- imports: [
55
- TableComponent,
56
- TableDatasourceDirective,
57
- FilterComponent,
58
- TableFilterDirective,
59
- ActionButtonGroupComponent,
60
- ActionButtonComponent,
61
- FeatureListFilterPipe,
62
- ],
63
- templateUrl: './feature-list.component.html',
64
- styleUrls: ['./feature-list.component.scss'],
65
- changeDetection: ChangeDetectionStrategy.OnPush
66
- })
67
- export class FeatureListComponent<T> implements AfterViewInit {
68
- @ContentChildren(FEATURE_LIST_COLUMN_PROVIDER) viewColumns!: QueryList<
69
- FeatureListColumnProvider<T>
70
- >;
71
-
72
- @ContentChildren(FeatureListFilterFieldDirective)
73
- fieldDeclarations!: QueryList<FeatureListFilterFieldDirective>;
74
-
75
- @ViewChild(TableDatasourceDirective)
76
- tableDatasourceDirective!: TableDatasourceDirective<T>;
77
-
78
- @ViewChild('table')
79
- tableComponent!: TableComponent<T>;
80
-
81
- @Input() autoBind = true;
82
-
83
- @Input() title!: string;
84
-
85
- @Input() columns!: FeatureListColumnDefinition<T>[];
86
-
87
- @Input() filters!: GenericFieldDefinition[];
88
-
89
- @Input() maxVisibleActions = 2;
90
-
91
- @Input({ required: true }) tableName!: string;
92
-
93
- @Input() ngrxFeatureKey?: string;
94
-
95
- @Input() maxVisibleMobileActions = 0;
96
-
97
- @Input() showExtendedFilter = false;
98
-
99
- @Input() showDownload = false;
100
-
101
- @Input() showDelete = false;
102
-
103
- @Input() showAdd = false;
104
-
105
- @Input() canDownload = true;
106
-
107
- @Input() canDelete = true;
108
-
109
- @Input() canAdd = true;
110
-
111
- @Input() useRouterFilter = true;
112
-
113
- @Input() fulltextFieldName = 'searchField';
114
-
115
- @Input() showFulltext = true;
116
-
117
- @Input() applyLabel = 'Apply';
118
-
119
- @Input() clearLabel = 'Clear';
120
-
121
- @Input() recordsText = 'FILTER.RECORDS';
122
-
123
- @Input() buttonType: GovButtonTypeType = GovButtonType.solid;
124
-
125
- @Input() buttonOutlined = false;
126
-
127
- @Input() deleteConfirmMessage: string | undefined;
128
-
129
- @Input() autoDeleteEnabled = true;
130
-
131
- @Input() autoDownloadEnabled = true;
132
-
133
- @Input() downloadFileName = 'export.csv';
134
-
135
- @Input() datasource!: DatasourceType<T>;
136
-
137
- @Input() extraFilter!: any;
138
-
139
- @Input() disableCustomClicks = false;
140
-
141
- @Input() maximumColumnLength = MAX_COLUMN_CHAR_COUNT;
142
-
143
- @Output() addClick = new EventEmitter();
144
-
145
- @Output() downloadClick = new EventEmitter();
146
-
147
- @Output() deleteClick = new EventEmitter<T[]>();
148
-
149
- @Output() selectionChange = new EventEmitter();
150
-
151
- @Input() set selectionMode(mode: TableSelectionModeType | undefined) {
152
- this._selectionMode = mode;
153
- }
154
-
155
- get selectionMode(): TableSelectionModeType | undefined {
156
- return this.canDelete
157
- ? TableSelectionMode.single
158
- : this._selectionMode;
159
- }
160
-
161
- icons = Icons;
162
-
163
- private httpClient = inject(HttpClient);
164
-
165
- private baseUrl: string = inject(BASE_URL_PATH);
166
-
167
- private _selectionMode: TableSelectionModeType | undefined;
168
-
169
- private cdRef = inject(ChangeDetectorRef);
170
-
171
- private dialogService = inject(DialogService);
172
-
173
- selection: T[] = [];
174
-
175
- get tableTotal(): number | undefined {
176
- return this.tableComponent?.total;
177
- }
178
-
179
- ngAfterViewInit(): void {
180
- if (this.viewColumns?.length) {
181
- const vewColumns = this.viewColumns
182
- ?.toArray()
183
- .map((x) => x.getDefinition());
184
- this.columns = [...(this.columns ?? []), ...(vewColumns ?? [])];
185
- this.cdRef.detectChanges();
186
- }
187
-
188
- if (this.fieldDeclarations?.length) {
189
- this.filters = this.fieldDeclarations?.toArray();
190
- }
191
-
192
- this.cdRef.detectChanges();
193
- }
194
-
195
- selectItems(items: T[]) {
196
- this.selection = items ?? [];
197
-
198
- if (this.selectionMode !== undefined) {
199
- this.selectionChange.emit(
200
- this.selectionMode === 'multiple'
201
- ? this.selection
202
- : this.selection[0]
203
- );
204
- }
205
- }
206
-
207
- startDeleteItems() {
208
- if (!this.selection.length) {
209
- return;
210
- }
211
-
212
- if (this.deleteConfirmMessage) {
213
- const message = this.deleteConfirmMessage;
214
- this.dialogService.showDialog({
215
- innerHTML: message,
216
- confirmButtonFn: () => this.deleteItems(this.selection),
217
- });
218
- } else {
219
- this.deleteItems(this.selection);
220
- }
221
- }
222
-
223
- startDownload() {
224
- this.downloadClick.emit();
225
- if (!this.autoDownloadEnabled) {
226
- return;
227
- }
228
-
229
- const dowloadFn = this.createDownloadFn(this.datasource);
230
- if (dowloadFn) {
231
- this.tableDatasourceDirective.params$
232
- .pipe(
233
- take(1),
234
- switchMap((params) => dowloadFn(params))
235
- )
236
- .subscribe((blob) => {
237
- downloadFile(this.downloadFileName, blob);
238
- });
239
- }
240
- }
241
-
242
- private deleteItems(items: T[]) {
243
- if (!this.autoDeleteEnabled) {
244
- this.deleteClick.emit(items);
245
- } else {
246
- this.forceDelete(items);
247
- }
248
- }
249
-
250
- private forceDelete(items: T[]) {
251
- const deleteFn = this.createDeleteFn(this.datasource);
252
- if (deleteFn) {
253
- const deleteMethods = items.map((x) => deleteFn(x));
254
- forkJoin(deleteMethods)
255
- .pipe(take(1))
256
- .subscribe(() => this.finishDeletion(items));
257
- } else {
258
- this.finishDeletion(items);
259
- }
260
- }
261
-
262
- private createDeleteFn(
263
- datasource: DatasourceType<T>
264
- ): ((item: T) => Observable<unknown>) | undefined {
265
- if (!datasource) {
266
- return undefined;
267
- }
268
-
269
- if (typeof datasource === 'string') {
270
- const service = new BaseHttpService<T>(
271
- this.httpClient,
272
- this.baseUrl,
273
- datasource
274
- );
275
-
276
- return (item: T) => service.delete((item as { id: string }).id);
277
- }
278
-
279
- if (datasource instanceof BaseHttpService) {
280
- return (item: T) => datasource.delete((item as { id: string }).id);
281
- }
282
-
283
- return undefined;
284
- }
285
-
286
- private createDownloadFn(
287
- datasource: DatasourceType<T>
288
- ): ((request: AllDataRequestParams<T>) => Observable<Blob>) | undefined {
289
- if (!datasource) {
290
- return undefined;
291
- }
292
-
293
- if (typeof datasource === 'string') {
294
- const service = new BaseHttpService<T>(
295
- this.httpClient,
296
- this.baseUrl,
297
- datasource
298
- );
299
-
300
- return (request: AllDataRequestParams<T>) => service.export(request);
301
- }
302
-
303
- if (datasource instanceof BaseHttpService) {
304
- return (request: AllDataRequestParams<T>) => datasource.export(request);
305
- }
306
-
307
- const fetchFunction = convertDatasource(
308
- datasource,
309
- this.baseUrl,
310
- this.httpClient
311
- );
312
-
313
- return (request: AllDataRequestParams<T>) => {
314
- const allData: T[] = [];
315
- let offset = 0;
316
- const fetchAllData = (): Observable<Blob> => {
317
- return fetchFunction({
318
- ...request,
319
- offset,
320
- limit: DEFAULT_PAGE_SIZE,
321
- }).pipe(
322
- take(1),
323
- switchMap((response) => {
324
- allData.push(...response.data);
325
- if (allData.length < response.total) {
326
- offset = offset + DEFAULT_PAGE_SIZE;
327
- return fetchAllData();
328
- } else {
329
- return of(this.convertToBlob(allData));
330
- }
331
- })
332
- );
333
- };
334
-
335
- return fetchAllData();
336
- };
337
- }
338
-
339
- private finishDeletion(items: T[]) {
340
- if (this.datasource && Array.isArray(this.datasource)) {
341
- this.datasource = this.datasource.filter((x) => !items.includes(x));
342
- } else {
343
- this.tableDatasourceDirective.reload();
344
- }
345
-
346
- this.deleteClick.emit(items);
347
- }
348
-
349
- private convertToBlob(data: T[]): Blob {
350
- const columnModel = this.columns.map((x) => new ColumnModel(x));
351
- const headers = columnModel.map((x, index) => x.headerGetter(x.id, index));
352
- const dataValues = data.map((row, rowIndex) =>
353
- columnModel.map((column) => column.valueGetter(row, rowIndex))
354
- );
355
- const csvData = [headers, ...dataValues]
356
- .map((row) => row.join(','))
357
- .join('\n');
358
- return new Blob([csvData], { type: 'text/csv' });
359
- }
360
- }
@@ -1,5 +0,0 @@
1
- export * from './feature-list.component';
2
- export * from './feature-list-page.model';
3
- export * from './directives/feature-list-column.directive';
4
- export * from './directives/feature-list-filter-field.directive';
5
- export * from './feature-list-filter.pipe';
@@ -1,35 +0,0 @@
1
- import { Directive, Input } from '@angular/core';
2
- import { ValidatorFn } from '@angular/forms';
3
- import { DatasourceType } from '@verisoft/core';
4
- import { GenericFieldDefinition, GenericFieldType, GenericFieldTypeType } from '@verisoft/ui-core';
5
-
6
- @Directive({
7
- // eslint-disable-next-line @angular-eslint/directive-selector
8
- selector: 'v-filter-field',
9
- standalone: true,
10
- })
11
- export class FilterFieldDirective implements GenericFieldDefinition {
12
- @Input({ required: true }) name!: string;
13
-
14
- @Input() type: GenericFieldTypeType | undefined = GenericFieldType.text;
15
-
16
- @Input() label: string | undefined;
17
-
18
- @Input() optionLabel!: string;
19
-
20
- @Input() optionValue: string | undefined;
21
-
22
- @Input() options: unknown[] | undefined;
23
-
24
- @Input() value?: unknown;
25
-
26
- @Input() validator?: ValidatorFn[];
27
-
28
- @Input() datasource: DatasourceType<any> | undefined;
29
-
30
- @Input() filterField?: string;
31
-
32
- @Input() showFilter?: boolean;
33
-
34
- @Input() localSearch?: boolean;
35
- }
@@ -1,78 +0,0 @@
1
- <div class="v-filter w-100">
2
- @if (formGroup$ | async; as formGroup){
3
- <form [formGroup]="formGroup">
4
- <div class="v-filter__header d-flex align-items-center p-3">
5
- @if (title) {
6
- <div class="v-filter_title pe-4">
7
- <h2 class="m-0">{{ title }}</h2>
8
- </div>
9
- }
10
- @if (total !== undefined && showRecords) {
11
- <div class="v-filter_records pe-4">
12
- <span class="v-filter_records-text">{{ recordsText | translate: {count: total} }}</span>
13
- </div>
14
- }
15
- <div class="v-filter__fulltext flex-grow-1 pe-4">
16
- @if (showFulltext){
17
- <v-textfield
18
- placeholder="Search"
19
- size="large"
20
- [formControlName]="fulltextFieldName"
21
- type="search"
22
- [clearable]="true"
23
- />
24
- }
25
- </div>
26
- <div class="v-filter_action-buttons d-flex align-items-center gap-2">
27
- @if (!autoBind) {
28
- <v-button
29
- useShortCut
30
- [shortCutFn]="submitValue.bind(this)"
31
- shortCutKey="Enter"
32
- [type]="buttonType"
33
- [outlined]="buttonOutlined"
34
- size="small"
35
- [label]="applyLabel"
36
- (click)="submitValue()"
37
- />
38
- }
39
- @if (isExpanded) {
40
- <v-button
41
- useShortCut
42
- [shortCutFn]="clear.bind(this)"
43
- shortCutKey="Escape"
44
- size="small"
45
- [type]="buttonType"
46
- [outlined]="buttonOutlined"
47
- [label]="clearLabel"
48
- (click)="clear()"
49
- />
50
- }
51
- @if (simpleFormFieldDefinitions$ | async; as declaration){ @if
52
- (declaration.length) {
53
- <v-button
54
- size="small"
55
- [type]="buttonType"
56
- [outlined]="buttonOutlined"
57
- [icon]="icons.filter"
58
- [label]="$any(filledFiltersCount$ | async)"
59
- (click)="toggleFilters()"
60
- />
61
- } }
62
-
63
- <ng-content select="v-action-button-group"></ng-content>
64
- </div>
65
- </div>
66
- @if (simpleFormFieldDefinitions$ | async; as declaration){ @if (isExpanded
67
- && declaration.length) {
68
- <div class="v-filter__expanded p-3">
69
- <v-generic-form
70
- [fields]="declaration"
71
- [formGroup]="formGroup"
72
- [columns]="2"
73
- />
74
- </div>
75
- } }
76
- </form>
77
- }
78
- </div>
@@ -1,32 +0,0 @@
1
- :host {
2
- display: block;
3
- }
4
-
5
- .v-filter {
6
- background: var(--v-filter-background);
7
- border-radius: 0.5rem;
8
- }
9
-
10
- .v-filter__header {
11
- border-bottom: 1px solid var(--v-filter-border);
12
- background-color: var(--v-filter-header-background);
13
- }
14
-
15
- .v-filter_records-text {
16
- color: var(--v-filter-records-text-color);
17
- }
18
-
19
- .v-filter__expanded {
20
- animation: slideDown 0.3s ease-out;
21
- }
22
-
23
- @keyframes slideDown {
24
- from {
25
- opacity: 0;
26
- transform: translateY(-10px);
27
- }
28
- to {
29
- opacity: 1;
30
- transform: translateY(0);
31
- }
32
- }
@@ -1,21 +0,0 @@
1
- import { ComponentFixture, TestBed } from '@angular/core/testing';
2
- import { FilterComponent } from './filter.component';
3
-
4
- describe('VerisoftTableFilterComponent', () => {
5
- let component: FilterComponent<any>;
6
- let fixture: ComponentFixture<FilterComponent<any>>;
7
-
8
- beforeEach(async () => {
9
- await TestBed.configureTestingModule({
10
- imports: [FilterComponent],
11
- }).compileComponents();
12
-
13
- fixture = TestBed.createComponent(FilterComponent);
14
- component = fixture.componentInstance;
15
- fixture.detectChanges();
16
- });
17
-
18
- it('should create', () => {
19
- expect(component).toBeTruthy();
20
- });
21
- });
@@ -1,23 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/angular';
2
- import { FilterComponent } from './filter.component';
3
-
4
- const meta: Meta<FilterComponent<any>> = {
5
- component: FilterComponent,
6
- title: 'VerisoftTableFilterComponent',
7
- };
8
- export default meta;
9
- type Story = StoryObj<FilterComponent<any>>;
10
-
11
- export const Primary: Story = {
12
- args: {
13
- filterDefinitions: [],
14
- debounceTime: 0,
15
- },
16
- };
17
-
18
- export const Heading: Story = {
19
- args: {
20
- filterDefinitions: [],
21
- debounceTime: 0,
22
- },
23
- };