@dative-gpi/foundation-core-components 1.0.57 → 1.0.58-groupings

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 (82) hide show
  1. package/components/autocompletes/FSAutocompleteChart.vue +15 -8
  2. package/components/autocompletes/FSAutocompleteDashboard.vue +14 -6
  3. package/components/autocompletes/FSAutocompleteDashboardOrganisation.vue +7 -1
  4. package/components/autocompletes/FSAutocompleteDataCategory.vue +11 -5
  5. package/components/autocompletes/FSAutocompleteDataDefinition.vue +7 -1
  6. package/components/autocompletes/FSAutocompleteGroup.vue +7 -1
  7. package/components/autocompletes/FSAutocompleteLocation.vue +6 -0
  8. package/components/autocompletes/FSAutocompleteManufacturer.vue +8 -0
  9. package/components/autocompletes/FSAutocompleteModel.vue +9 -1
  10. package/components/autocompletes/FSAutocompleteOrganisationType.vue +7 -1
  11. package/components/autocompletes/FSAutocompleteRole.vue +14 -6
  12. package/components/autocompletes/FSAutocompleteServiceAccountRoleOrganisation.vue +7 -1
  13. package/components/autocompletes/FSAutocompleteUserOrganisation.vue +9 -1
  14. package/components/customProperties/FSMetaField.vue +35 -40
  15. package/components/customProperties/FSMetaFormContent.vue +4 -3
  16. package/components/customProperties/FSMetaHistory.vue +2 -2
  17. package/components/customProperties/FSMetaValue.vue +63 -31
  18. package/components/customProperties/helpers.ts +57 -165
  19. package/components/entities/FSBaseEntitiesList.vue +14 -4
  20. package/components/entities/FSDialogSelectEntities.vue +28 -106
  21. package/components/entities/FSEntityField.vue +75 -14
  22. package/components/entities/FSSelectEntitiesList.vue +225 -0
  23. package/components/explorers/FSBaseDevicesExplorer.vue +312 -0
  24. package/components/explorers/FSBaseFoldersExplorer.vue +286 -0
  25. package/components/lists/FSDataTable.vue +23 -21
  26. package/components/lists/alerts/FSBaseAlertsList.vue +95 -97
  27. package/components/lists/alerts/FSButtonAcknowledgeAlert.vue +4 -4
  28. package/components/lists/authTokens/FSBaseAuthTokensList.vue +6 -4
  29. package/components/lists/chartOrganisationTypes/FSBaseChartOrganisationTypesList.vue +103 -38
  30. package/components/lists/chartOrganisations/FSBaseChartOrganisationsList.vue +104 -39
  31. package/components/lists/charts/FSBaseChartsList.vue +147 -66
  32. package/components/lists/comments/FSBaseCommentsList.vue +39 -23
  33. package/components/lists/connectivityScenarios/FSBaseConnectivityScenariosList.vue +128 -0
  34. package/components/lists/dashboardOrganisationTypes/FSBaseDashboardOrganisationTypesList.vue +39 -7
  35. package/components/lists/dashboards/FSBaseDashboardsList.vue +44 -13
  36. package/components/lists/dashboards/FSSimpleDashboardsList.vue +33 -7
  37. package/components/lists/dataCategories/FSBaseDataCategoriesList.vue +6 -5
  38. package/components/lists/dataDefinitions/FSBaseDataDefinitionsList.vue +6 -4
  39. package/components/lists/deviceOrganisations/FSBaseDeviceOrganisationsList.vue +179 -61
  40. package/components/lists/folders/FSBaseFoldersList.vue +37 -146
  41. package/components/lists/groupings/FSBaseGroupingsList.vue +117 -0
  42. package/components/lists/groups/FSBaseGroupsList.vue +24 -7
  43. package/components/lists/locations/FSBaseLocationsList.vue +52 -13
  44. package/components/lists/models/FSBaseModelsList.vue +45 -15
  45. package/components/lists/roleOrganisationTypes/FSBaseRoleOrganisationTypesList.vue +17 -10
  46. package/components/lists/roleOrganisations/FSBaseRoleOrganisationsList.vue +28 -21
  47. package/components/lists/scenarioOrganisationTypes/FSBaseScenarioOrganisationTypesList.vue +56 -13
  48. package/components/lists/scenarioOrganisations/FSBaseScenarioOrganisationsList.vue +56 -12
  49. package/components/lists/scenarios/FSBaseScenariosList.vue +122 -81
  50. package/components/lists/serviceAccountOrganisations/FSBaseServiceAccountOrganisationsList.vue +31 -18
  51. package/components/lists/serviceAccountRoleOrganisations/FSBaseServiceAccountRoleOrganisationsList.vue +128 -0
  52. package/components/lists/userOrganisations/FSBaseUserOrganisationsList.vue +30 -19
  53. package/components/lists/userOrganisations/FSChipUserOrganisationsList.vue +61 -0
  54. package/components/tiles/FSChartTile.vue +71 -0
  55. package/components/tiles/FSDashboardOrganisationTile.vue +3 -3
  56. package/components/tiles/FSDashboardOrganisationTypeTile.vue +3 -3
  57. package/components/tiles/FSDashboardShallowTile.vue +3 -3
  58. package/components/tiles/FSDeviceOrganisationTile.vue +12 -5
  59. package/components/tiles/FSFolderTile.vue +3 -3
  60. package/components/tiles/FSGroupTile.vue +3 -3
  61. package/components/tiles/FSLocationTile.vue +5 -3
  62. package/components/tiles/FSModelTile.vue +64 -0
  63. package/components/tiles/FSServiceAccountOrganisationTile.vue +3 -3
  64. package/components/tiles/FSUserOrganisationTile.vue +3 -3
  65. package/components/treeviews/FSTreeViewFolder.vue +15 -3
  66. package/components/treeviews/FSTreeViewGroup.vue +22 -4
  67. package/package.json +9 -9
  68. package/utils/dashboards.ts +3 -3
  69. package/utils/index.ts +0 -1
  70. package/utils/roles.ts +3 -3
  71. package/utils/users.ts +3 -3
  72. package/components/selects/FSAggregationSelector.vue +0 -51
  73. package/components/selects/FSAxisTypeSelector.vue +0 -48
  74. package/components/selects/FSDisplayAsSelector.vue +0 -52
  75. package/components/selects/FSFilterTypeSelector.vue +0 -53
  76. package/components/selects/FSHeatmapRuleSelector.vue +0 -52
  77. package/components/selects/FSOperationOnSelector.vue +0 -51
  78. package/components/selects/FSPlanningTypeSelector.vue +0 -51
  79. package/components/selects/FSPlotPerSelector.vue +0 -51
  80. package/components/selects/FSSelectEntityType.vue +0 -59
  81. package/components/selects/FSSerieTypeSelector.vue +0 -51
  82. package/utils/charts.ts +0 -137
@@ -5,8 +5,10 @@
5
5
  :itemTo="$props.itemTo"
6
6
  :items="alertsOrdered"
7
7
  :loading="fetchingAlerts"
8
+ :headersOptions="headersOptions"
8
9
  :tableCode="$props.tableCode"
9
10
  :modelValue="$props.modelValue"
11
+ :selectable="$props.selectable"
10
12
  @update:modelValue="$emit('update:modelValue', $event)"
11
13
  v-bind="$attrs"
12
14
  >
@@ -19,31 +21,12 @@
19
21
  v-bind="slotData"
20
22
  />
21
23
  </template>
22
- <template
23
- #toolbar
24
- >
25
- <FSButtonCheckbox
26
- :label="$tr('page.alerts.not-acknowledged-only', 'Not acknowledged only')"
27
- :color="ColorEnum.Warning"
28
- v-model="innerNotTreatedOnly"
29
- />
30
- <FSButtonCheckbox
31
- :label="$tr('page.alerts.hide-pending', 'Hide pending')"
32
- :color="ColorEnum.Light"
33
- variant="full"
34
- v-model="innerHidePending"
35
- />
36
- <FSTermField
37
- variant="default"
38
- :editable="!innerNotTreatedOnly"
39
- v-model:startDate="startDate"
40
- v-model:endDate="endDate"
41
- />
42
- </template>
24
+
43
25
  <template
44
26
  #item.criticity="{ item }"
45
27
  >
46
28
  <FSRow
29
+ :wrap="false"
47
30
  align="center-left"
48
31
  gap="2px"
49
32
  >
@@ -69,7 +52,7 @@
69
52
  >
70
53
  <FSTagGroup
71
54
  variant="slide"
72
- :editable="false"
55
+ :showRemove="false"
73
56
  :tags="item.tags"
74
57
  />
75
58
  </template>
@@ -79,7 +62,7 @@
79
62
  <FSTagGroup
80
63
  variant="slide"
81
64
  :tags="item.groupByValues.map((gbv: any) => `${gbv.label}: ${gbv.value}`)"
82
- :editable="false"
65
+ :showRemove="false"
83
66
  />
84
67
  </template>
85
68
  <template
@@ -90,6 +73,7 @@
90
73
  width="32px"
91
74
  height="32px"
92
75
  :imageId="item.deviceOrganisationImageId"
76
+ :thumbnail="true"
93
77
  />
94
78
  </template>
95
79
  <template
@@ -109,7 +93,7 @@
109
93
  v-else
110
94
  font="text-overline"
111
95
  >
112
- {{ $tr('entity.alert.not-acknowledged', 'Not acknowledged') }}
96
+ {{ $tr('ui.alert.not-acknowledged', 'Not acknowledged') }}
113
97
  </FSSpan>
114
98
  </template>
115
99
  <template
@@ -120,6 +104,7 @@
120
104
  width="32px"
121
105
  height="32px"
122
106
  :imageId="item.acknowledgingUserImageId"
107
+ :thumbnail="true"
123
108
  />
124
109
  </template>
125
110
  <template
@@ -137,7 +122,7 @@
137
122
  <FSTagGroup
138
123
  variant="slide"
139
124
  :tags="item.history.map((h: any) => AlertTools.statusLabel(h.status))"
140
- :editable="false"
125
+ :showRemove="false"
141
126
  />
142
127
  </template>
143
128
  <template
@@ -150,25 +135,7 @@
150
135
  </FSSpan>
151
136
  </template>
152
137
  <template
153
- #item.triggerSourceTimestamp="{ item }"
154
- >
155
- <FSSpan
156
- font="text-overline"
157
- >
158
- {{ epochToShortTimeFormat(item.triggerSourceTimestamp) }}
159
- </FSSpan>
160
- </template>
161
- <template
162
- #item.triggerEnqueuedTimestamp="{ item }"
163
- >
164
- <FSSpan
165
- font="text-overline"
166
- >
167
- {{ epochToShortTimeFormat(item.triggerEnqueuedTimestamp) }}
168
- </FSSpan>
169
- </template>
170
- <template
171
- #item.triggerProcessedTimestamp="{ item }"
138
+ #item.triggerActualTimestamp="{ item }"
172
139
  >
173
140
  <FSSpan
174
141
  font="text-overline"
@@ -186,31 +153,38 @@
186
153
  </FSSpan>
187
154
  </template>
188
155
  <template
189
- #item.currentSourceTimestamp="{ item }"
156
+ #item.currentActualTimestamp="{ item }"
190
157
  >
191
158
  <FSSpan
192
159
  font="text-overline"
193
160
  >
194
- {{ epochToShortTimeFormat(item.currentSourceTimestamp) }}
161
+ {{ epochToShortTimeFormat(item.currentActualTimestamp) }}
195
162
  </FSSpan>
196
163
  </template>
197
164
  <template
198
- #item.currentEnqueuedTimestamp="{ item }"
165
+ #item.currentStatus="{ item }"
199
166
  >
200
167
  <FSSpan
201
168
  font="text-overline"
202
169
  >
203
- {{ epochToShortTimeFormat(item.currentEnqueuedTimestamp) }}
170
+ {{ AlertTools.statusLabel(item.currentStatus) }}
204
171
  </FSSpan>
205
172
  </template>
206
173
  <template
207
- #item.currentProcessedTimestamp="{ item }"
174
+ #item.tile="{ item, toggleSelect }"
208
175
  >
209
- <FSSpan
210
- font="text-overline"
211
- >
212
- {{ epochToShortTimeFormat(item.currentProcessedTimestamp) }}
213
- </FSSpan>
176
+ <FSAlertTileUI
177
+ variant="standard"
178
+ :label="item.label"
179
+ :deviceOrganisationLabel="item.deviceOrganisationLabel"
180
+ :icon="item.icon"
181
+ :selectable="$props.selectable"
182
+ :triggerProcessedTimestamp="item.triggerProcessedTimestamp"
183
+ :to="$props.itemTo && $props.itemTo(item)"
184
+ :modelValue="isSelected(item.id)"
185
+ :color="alertColorByCriticity(item.criticity)"
186
+ @update:modelValue="toggleSelect(item)"
187
+ />
214
188
  </template>
215
189
  </FSDataTable>
216
190
  </template>
@@ -218,13 +192,17 @@
218
192
  <script lang="ts">
219
193
  import type { PropType} from "vue";
220
194
  import type { RouteLocation } from "vue-router";
221
- import { computed, defineComponent, ref, watch } from "vue";
195
+ import { computed, defineComponent, watch } from "vue";
222
196
  import _ from "lodash";
223
197
 
198
+ import { useTranslations } from "@dative-gpi/bones-ui";
199
+
224
200
  import type { AlertFilters, AlertInfos } from "@dative-gpi/foundation-core-domain/models";
225
201
  import { useDateFormat } from "@dative-gpi/foundation-shared-services/composables";
202
+ import { getEnumEntries } from "@dative-gpi/foundation-shared-domain/tools";
226
203
  import { useAlerts } from "@dative-gpi/foundation-core-services/composables";
227
204
  import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
205
+ import { Criticity } from "@dative-gpi/foundation-shared-domain/enums";
228
206
  import { AlertStatus } from "@dative-gpi/foundation-shared-domain/enums";
229
207
 
230
208
  import { AlertTools } from "@dative-gpi/foundation-shared-components/tools";
@@ -236,23 +214,27 @@ import FSSpan from "@dative-gpi/foundation-shared-components/components/FSSpan.v
236
214
  import FSIcon from "@dative-gpi/foundation-shared-components/components/FSIcon.vue";
237
215
  import FSImage from "@dative-gpi/foundation-shared-components/components/FSImage.vue";
238
216
  import FSTagGroup from "@dative-gpi/foundation-shared-components/components/FSTagGroup.vue";
239
- import FSTermField from "@dative-gpi/foundation-shared-components/components/fields/FSTermField.vue";
240
- import FSButtonCheckbox from "@dative-gpi/foundation-shared-components/components/buttons/FSButtonCheckbox.vue";
217
+ import FSAlertTileUI from "@dative-gpi/foundation-shared-components/components/tiles/FSAlertTileUI.vue";
218
+
241
219
 
242
220
  export default defineComponent({
243
221
  name: "FSBaseAlertsList",
244
222
  components: {
245
223
  FSButtonAcknowledgeAlert,
246
- FSButtonCheckbox,
224
+ FSAlertTileUI,
247
225
  FSDataTable,
248
- FSIcon,
226
+ FSTagGroup,
249
227
  FSImage,
250
- FSRow,
228
+ FSIcon,
251
229
  FSSpan,
252
- FSTagGroup,
253
- FSTermField,
230
+ FSRow
254
231
  },
255
232
  props: {
233
+ tableCode: {
234
+ type: String as PropType<string | null>,
235
+ required: false,
236
+ default: null
237
+ },
256
238
  alertFilters: {
257
239
  type: Object as PropType<AlertFilters>,
258
240
  required: false,
@@ -276,72 +258,88 @@ export default defineComponent({
276
258
  required: false,
277
259
  default: false
278
260
  },
279
- tableCode: {
280
- type: String,
281
- required: true
282
- },
283
261
  itemTo: {
284
262
  type: Function as PropType<(item: AlertInfos) => Partial<RouteLocation>>,
285
263
  required: false
264
+ },
265
+ selectable: {
266
+ type: Boolean,
267
+ required: false,
268
+ default: true
286
269
  }
287
270
  },
288
271
  emits: ["update:modelValue"],
289
272
  setup(props) {
273
+ const { $tr } = useTranslations();
290
274
  const { getMany: getManyAlerts, entities: alerts, fetching : fetchingAlerts } = useAlerts();
291
275
  const { epochToShortTimeFormat } = useDateFormat();
292
276
 
293
- const innerNotTreatedOnly = ref<boolean | undefined>(props.notAcknowledged);
294
- const innerHidePending = ref<boolean | undefined>(props.hidePending);
295
- const startDate = ref<string>("now - 1w");
296
- const endDate = ref<string>("now");
297
-
298
277
 
299
278
  const criticityColor = (row: any) => {
300
279
  return AlertTools.criticityColor(row.criticity);
301
280
  };
302
281
 
282
+ const alertColorByCriticity = (criticity: Criticity | number) => {
283
+ return AlertTools.criticityColor(criticity);
284
+ };
285
+
286
+ const isSelected = (id: string): boolean => {
287
+ return props.modelValue.includes(id);
288
+ };
289
+
303
290
  const alertsOrdered = computed(() => {
304
291
  const als = [...alerts.value]
305
292
  return als.sort((a: AlertInfos, b: AlertInfos) => {
306
293
  return (a.acknowledged === b.acknowledged) ?
307
- +b.currentSourceTimestamp! - +a.currentSourceTimestamp! : a.acknowledged ? 1 : -1
294
+ +b.currentActualTimestamp! - +a.currentActualTimestamp! : a.acknowledged ? 1 : -1
308
295
  });
309
296
  });
310
297
 
311
- watch(() => [props.alertFilters, innerNotTreatedOnly.value,startDate.value, endDate.value,innerHidePending.value], (next, previous) => {
298
+ const headersOptions = computed(() => ({
299
+ currentStatus: {
300
+ fixedFilters: getEnumEntries(AlertStatus).map(e => ({
301
+ value: e.value,
302
+ text: AlertTools.statusLabel(e.value)
303
+ })),
304
+ methodFilter: (value: AlertStatus, item: AlertStatus) => value == item
305
+ },
306
+ criticity: {
307
+ fixedFilters: getEnumEntries(Criticity).map(e => ({
308
+ value: e.value,
309
+ text: AlertTools.criticityLabel(e.value)
310
+ })),
311
+ methodFilter: (value: Criticity, item: Criticity) => value == item
312
+ },
313
+ acknowledged: {
314
+ fixedFilters: [
315
+ { value: true, text: $tr('entity.alert.acknowledged', 'Acknowledged') },
316
+ { value: false, text: $tr('ui.alert.not-acknowledged', 'Not acknowledged') }
317
+ ],
318
+ methodFilter: (value: boolean, item: boolean) => value === item
319
+ },
320
+ }));
321
+
322
+ watch([() => props.alertFilters, () => props.notAcknowledged, () => props.hidePending], (next, previous) => {
312
323
  if (!_.isEqual(next, previous)) {
313
- if(innerNotTreatedOnly.value){
314
- getManyAlerts({
315
- ...props.alertFilters,
316
- acknowledged: false,
317
- statuses: [AlertStatus.Unresolved, AlertStatus.Triggered],
318
- });
319
- }
320
- else{
321
- getManyAlerts({
322
- ...props.alertFilters,
323
- statuses: innerHidePending.value ?
324
- [AlertStatus.Unresolved, AlertStatus.Resolved, AlertStatus.Triggered] : undefined,
325
- startDate: startDate.value,
326
- endDate: endDate.value
327
- });
328
- }
329
-
324
+ getManyAlerts({
325
+ ...props.alertFilters,
326
+ acknowledged: props.notAcknowledged ? false : undefined,
327
+ statuses: props.hidePending ? [AlertStatus.Unresolved, AlertStatus.Triggered, AlertStatus.Resolved, AlertStatus.Abandoned] : undefined
328
+ });
330
329
  }
331
330
  }, { immediate: true });
332
331
 
333
332
 
334
333
  return {
335
- innerNotTreatedOnly,
334
+ fetchingAlerts,
335
+ headersOptions,
336
+ alertsOrdered,
336
337
  AlertTools,
337
338
  ColorEnum,
338
- alertsOrdered,
339
- fetchingAlerts,
340
- startDate,
341
- endDate,
342
- innerHidePending,
343
339
  epochToShortTimeFormat,
344
- criticityColor
340
+ alertColorByCriticity,
341
+ criticityColor,
342
+ isSelected
345
343
  };
346
344
  }
347
345
  });
@@ -1,11 +1,11 @@
1
1
  <template>
2
2
  <FSButton
3
3
  prependIcon="mdi-checkbox-blank-outline"
4
- :label="$tr('page.alert.acknowledge', 'Acknowledge')"
4
+ :label="$tr('ui.alert.acknowledge', 'Acknowledge')"
5
5
  @click="dialog = true"
6
6
  />
7
7
  <FSDialogSubmit
8
- :title="$tr('page.alert.acknowledge', 'Acknowledge')"
8
+ :title="$tr('ui.alert.acknowledge', 'Acknowledge')"
9
9
  :load="acknowledgingAlert"
10
10
  @click:submitButton="onAcknowledge"
11
11
  v-model="dialog"
@@ -26,12 +26,12 @@
26
26
  gap="2px"
27
27
  >
28
28
  <FSSpan>
29
- {{ $tr("page.alert.acknowledge-warning", "Do you want to acknowledge this alert?") }}
29
+ {{ $tr("ui.alert.acknowledge-warning", "Do you want to acknowledge this alert?") }}
30
30
  </FSSpan>
31
31
  </FSRow>
32
32
  </FSRow>
33
33
  <FSSpan>
34
- {{ $tr("page.alert.acknowledge-final-warning", "This action is definitive") }}
34
+ {{ $tr("ui.alert.acknowledge-final-warning", "This action is definitive") }}
35
35
  </FSSpan>
36
36
  <FSErrorToast
37
37
  v-if="error"
@@ -3,6 +3,7 @@
3
3
  :items="authTokens"
4
4
  :loading="fetchingAuthTokens"
5
5
  :tableCode="$props.tableCode"
6
+ :selectable="false"
6
7
  v-bind="$attrs"
7
8
  >
8
9
  <template
@@ -48,14 +49,15 @@ export default defineComponent({
48
49
  FSText
49
50
  },
50
51
  props: {
52
+ tableCode: {
53
+ type: String as PropType<string | null>,
54
+ required: false,
55
+ default: null
56
+ },
51
57
  authTokensFilters: {
52
58
  type: Object as PropType<AuthTokenFilters | null>,
53
59
  required: false,
54
60
  default: null
55
- },
56
- tableCode: {
57
- type: String,
58
- required: true
59
61
  }
60
62
  },
61
63
  setup(props) {
@@ -1,10 +1,14 @@
1
1
  <template>
2
2
  <FSDataTable
3
+ defaultMode="iterator"
3
4
  :items="chartOrganisationTypes"
4
5
  :itemTo="$props.itemTo"
5
6
  :loading="fetchingChartOrganisationTypes"
7
+ :headersOptions="headersOptions"
6
8
  :tableCode="$props.tableCode"
7
9
  :modelValue="$props.modelValue"
10
+ :selectable="$props.selectable"
11
+ :singleSelect="$props.singleSelect"
8
12
  @update:modelValue="$emit('update:modelValue', $event)"
9
13
  v-bind="$attrs"
10
14
  >
@@ -17,7 +21,13 @@
17
21
  v-bind="slotData"
18
22
  />
19
23
  </template>
20
-
24
+ <template
25
+ #header.imageId-title
26
+ >
27
+ <FSIcon>
28
+ mdi-panorama-variant-outline
29
+ </FSIcon>
30
+ </template>
21
31
  <template
22
32
  #item.icon="{ item }"
23
33
  >
@@ -25,7 +35,6 @@
25
35
  {{ item.icon }}
26
36
  </FSIcon>
27
37
  </template>
28
-
29
38
  <template
30
39
  #item.imageId="{ item }"
31
40
  >
@@ -34,36 +43,55 @@
34
43
  height="32px"
35
44
  width="32px"
36
45
  :imageId="item.imageId"
46
+ :thumbnail="true"
37
47
  />
38
48
  </template>
39
-
40
49
  <template
41
50
  #item.tags="{ item }"
42
51
  >
43
52
  <FSTagGroup
44
53
  variant="slide"
45
- :editable="false"
46
54
  :tags="item.tags"
55
+ :showRemove="false"
47
56
  />
48
57
  </template>
49
-
58
+ <template
59
+ #item.chartType="{ item }"
60
+ >
61
+ <FSRow
62
+ :wrap="false"
63
+ >
64
+ <FSIcon
65
+ :icon="chartIcon(item.chartType)"
66
+ />
67
+ <FSText>
68
+ {{ chartTypeLabel(item.chartType) }}
69
+ </FSText>
70
+ </FSRow>
71
+ </template>
50
72
  <template
51
73
  #item.modelsLabels="{ item }"
52
74
  >
53
75
  <FSTagGroup
54
- :editable="false"
76
+ variant="slide"
55
77
  :tags="item.modelsLabels.map((d: any) => d.label)"
78
+ :showRemove="false"
56
79
  />
57
80
  </template>
58
81
  <template
59
- #item.tile="{item}"
82
+ #item.tile="{ item, toggleSelect}"
60
83
  >
61
84
  <FSChartTileUI
62
85
  :label="item.label"
63
86
  :category-label="item.chartCategoryLabel"
87
+ :singleSelect="$props.singleSelect"
88
+ :selectable="$props.selectable"
64
89
  :icon="item.icon"
90
+ :scope="item.scope"
65
91
  :imageId="item.imageId"
66
92
  :type="item.chartType"
93
+ :modelValue="isSelected(item.id)"
94
+ @update:modelValue="toggleSelect(item)"
67
95
  :to="$props.itemTo && $props.itemTo(item)"
68
96
  />
69
97
  </template>
@@ -71,22 +99,26 @@
71
99
  </template>
72
100
 
73
101
  <script lang="ts">
74
- import _ from "lodash";
75
- import { defineComponent, type PropType, watch } from "vue";
102
+ import { computed, defineComponent, type PropType, watch } from "vue";
76
103
  import type { RouteLocation } from "vue-router";
104
+ import _ from "lodash";
77
105
 
78
- import {ColorEnum} from "@dative-gpi/foundation-shared-components/models";
79
-
80
- import type { ChartOrganisationFilters, ChartOrganisationTypeInfos } from "@dative-gpi/foundation-core-domain/models";
81
- import { PlotPer } from "@dative-gpi/foundation-shared-domain/enums";
106
+ import { ChartType } from "@dative-gpi/foundation-shared-domain/enums";
107
+ import { getEnumEntries } from "@dative-gpi/foundation-shared-domain/tools";
108
+ import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
109
+ import { chartTypeLabel, chartIcon } from "@dative-gpi/foundation-shared-components/tools";
82
110
 
111
+ import type { ChartModelLabel, ChartOrganisationTypeFilters, ChartOrganisationTypeInfos } from "@dative-gpi/foundation-core-domain/models";
83
112
  import { useChartOrganisationTypes } from "@dative-gpi/foundation-core-services/composables";
84
113
 
85
114
  import FSChartTileUI from "@dative-gpi/foundation-shared-components/components/tiles/FSChartTileUI.vue";
86
- import FSDataTable from "../FSDataTable.vue";
87
115
  import FSTagGroup from "@dative-gpi/foundation-shared-components/components/FSTagGroup.vue";
88
116
  import FSImage from "@dative-gpi/foundation-shared-components/components/FSImage.vue";
117
+ import FSText from "@dative-gpi/foundation-shared-components/components/FSText.vue";
89
118
  import FSIcon from "@dative-gpi/foundation-shared-components/components/FSIcon.vue";
119
+ import FSRow from "@dative-gpi/foundation-shared-components/components/FSRow.vue";
120
+
121
+ import FSDataTable from "../FSDataTable.vue";
90
122
 
91
123
  export default defineComponent({
92
124
  name: "FSBaseChartOrganisationTypesList",
@@ -95,61 +127,94 @@ export default defineComponent({
95
127
  FSDataTable,
96
128
  FSTagGroup,
97
129
  FSImage,
98
- FSIcon
130
+ FSIcon,
131
+ FSText,
132
+ FSRow
99
133
  },
100
134
  props: {
101
- modelValue: {
102
- type: Array as PropType<string[]>,
103
- default: () => [],
104
- required: false
105
- },
106
- chartOrganisationFilters: {
107
- type: Object as PropType<ChartOrganisationFilters>,
135
+ tableCode: {
136
+ type: String as PropType<string | null>,
108
137
  required: false,
109
138
  default: null
110
139
  },
111
- plotPer: {
112
- type: Number as PropType<PlotPer>,
140
+ chartOrganisationTypeFilters: {
141
+ type: Object as PropType<ChartOrganisationTypeFilters>,
113
142
  required: false,
114
- default: PlotPer.None
115
- },
116
- tableCode: {
117
- type: String,
118
- required: true
143
+ default: null
119
144
  },
120
145
  itemTo: {
121
146
  type: Function as PropType<(item: ChartOrganisationTypeInfos) => Partial<RouteLocation>>,
122
147
  required: false
148
+ },
149
+ modelValue: {
150
+ type: Array as PropType<string[]>,
151
+ default: () => [],
152
+ required: false
153
+ },
154
+ selectable: {
155
+ type: Boolean,
156
+ required: false,
157
+ default: true
158
+ },
159
+ singleSelect: {
160
+ type: Boolean,
161
+ required: false,
162
+ default: false
123
163
  }
124
164
  },
125
165
  emits: ["update:modelValue"],
126
166
  setup(props) {
127
-
128
167
  const { entities: chartOrganisationTypes, fetching: fetchingChartOrganisationTypes, getMany: getManyChartOrganisationTypes } = useChartOrganisationTypes();
129
168
 
169
+ const headersOptions = computed(() => ({
170
+ modelsLabels: {
171
+ fixedFilters: chartOrganisationTypes.value.map(c => c.modelsLabels).reduce((acc, models) => {
172
+ for (const m of models) {
173
+ if (!acc.map((m) => m.id).includes(m.id)) {
174
+ acc.push(m);
175
+ }
176
+ }
177
+ return acc;
178
+ }, []).map((m) => ({
179
+ value: m.id,
180
+ text: m.label
181
+ })).concat({
182
+ value: '',
183
+ text: '--'
184
+ }),
185
+ methodFilter: (value: string, items: ChartModelLabel[]) => (items.length == 0 && value == '') || (items.length > 0 && items.some(ml => ml.id == value))
186
+ },
187
+ chartType: {
188
+ fixedFilters: getEnumEntries(ChartType).map(e => ({
189
+ value: e.value,
190
+ text: chartTypeLabel(e.value)
191
+ })),
192
+ methodFilter: (value: ChartType, item: ChartType) => value == item
193
+ }
194
+ }));
195
+
130
196
  const isSelected = (id: string): boolean => {
131
197
  return props.modelValue.includes(id);
132
198
  };
133
199
 
134
200
  const fetch = () =>{
135
- if(props.plotPer === PlotPer.None) {
136
- getManyChartOrganisationTypes(props.chartOrganisationFilters);
137
- } else {
138
- getManyChartOrganisationTypes({ ...props.chartOrganisationFilters, plotPer: props.plotPer });
139
- }
201
+ getManyChartOrganisationTypes(props.chartOrganisationTypeFilters);
140
202
  };
141
203
 
142
- watch(() => [props.chartOrganisationFilters, props.plotPer], (next, previous) => {
204
+ watch(() => [props.chartOrganisationTypeFilters], (next, previous) => {
143
205
  if ((!next && !previous) || !_.isEqual(next, previous)) {
144
206
  fetch();
145
207
  }
146
208
  }, { immediate: true });
147
209
 
148
210
  return {
149
- ColorEnum,
150
211
  fetchingChartOrganisationTypes,
151
212
  chartOrganisationTypes,
152
- isSelected
213
+ headersOptions,
214
+ ColorEnum,
215
+ chartTypeLabel,
216
+ isSelected,
217
+ chartIcon
153
218
  };
154
219
  }
155
220
  });