@dative-gpi/foundation-core-components 1.0.139 → 1.0.140-selectable2

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 (42) hide show
  1. package/components/autocompletes/FSAutocompleteChart.vue +0 -2
  2. package/components/autocompletes/FSAutocompleteDashboard.vue +0 -2
  3. package/components/autocompletes/FSAutocompleteRole.vue +0 -2
  4. package/components/customProperties/FSMetaField.vue +8 -8
  5. package/components/customProperties/FSMetaFormContent.vue +4 -3
  6. package/components/customProperties/helpers.ts +3 -113
  7. package/components/entities/FSEntityField.vue +3 -3
  8. package/components/explorers/FSBaseDevicesExplorer.vue +5 -3
  9. package/components/explorers/FSBaseFoldersExplorer.vue +10 -1
  10. package/components/lists/alerts/FSBaseAlertsList.vue +19 -5
  11. package/components/lists/authTokens/FSBaseAuthTokensList.vue +1 -0
  12. package/components/lists/chartOrganisationTypes/FSBaseChartOrganisationTypesList.vue +19 -5
  13. package/components/lists/chartOrganisations/FSBaseChartOrganisationsList.vue +31 -17
  14. package/components/lists/charts/FSBaseChartsList.vue +24 -8
  15. package/components/lists/dashboardOrganisationTypes/FSBaseDashboardOrganisationTypesList.vue +18 -1
  16. package/components/lists/dashboards/FSBaseDashboardsList.vue +20 -2
  17. package/components/lists/dashboards/FSSimpleDashboardsList.vue +13 -3
  18. package/components/lists/deviceOrganisations/FSBaseDeviceOrganisationsList.vue +4 -3
  19. package/components/lists/folders/FSBaseFoldersList.vue +1 -1
  20. package/components/lists/groups/FSBaseGroupsList.vue +4 -4
  21. package/components/lists/locations/FSBaseLocationsList.vue +3 -3
  22. package/components/lists/models/FSBaseModelsList.vue +3 -2
  23. package/components/lists/roleOrganisationTypes/FSBaseRoleOrganisationTypesList.vue +3 -3
  24. package/components/lists/roleOrganisations/FSBaseRoleOrganisationsList.vue +3 -3
  25. package/components/lists/scenarioOrganisationTypes/FSBaseScenarioOrganisationTypesList.vue +3 -3
  26. package/components/lists/scenarioOrganisations/FSBaseScenarioOrganisationsList.vue +3 -3
  27. package/components/lists/scenarios/FSBaseScenariosList.vue +1 -1
  28. package/components/lists/serviceAccountOrganisations/FSBaseServiceAccountOrganisationsList.vue +4 -4
  29. package/components/lists/serviceAccountRoleOrganisations/FSBaseServiceAccountRoleOrganisationsList.vue +3 -3
  30. package/components/lists/userOrganisations/FSBaseUserOrganisationsList.vue +4 -4
  31. package/components/tiles/FSDashboardOrganisationTile.vue +3 -3
  32. package/components/tiles/FSDashboardOrganisationTypeTile.vue +3 -3
  33. package/components/tiles/FSDashboardShallowTile.vue +3 -3
  34. package/components/tiles/FSDeviceOrganisationTile.vue +3 -3
  35. package/components/tiles/FSFolderTile.vue +3 -3
  36. package/components/tiles/FSGroupTile.vue +3 -3
  37. package/components/tiles/FSLocationTile.vue +4 -3
  38. package/components/tiles/FSServiceAccountOrganisationTile.vue +3 -3
  39. package/components/tiles/FSUserOrganisationTile.vue +3 -3
  40. package/package.json +7 -7
  41. package/components/lists/reports/FSBaseReportExecutionsList.vue +0 -137
  42. package/components/lists/reports/FSBaseReportsList.vue +0 -135
@@ -25,7 +25,6 @@
25
25
  <FSChip
26
26
  :color="chartOriginColor(item.type)"
27
27
  :label="chartOriginLabel(item.type)"
28
- :editable="false"
29
28
  />
30
29
  </template>
31
30
  <template
@@ -46,7 +45,6 @@
46
45
  <FSChip
47
46
  :color="chartOriginColor(props.item.type)"
48
47
  :label="chartOriginLabel(props.item.type)"
49
- :editable="false"
50
48
  />
51
49
  </template>
52
50
  </FSButton>
@@ -25,7 +25,6 @@
25
25
  <FSChip
26
26
  :color="dashboardTypeColor(item.type)"
27
27
  :label="dashboardTypeLabel(item.type)"
28
- :editable="false"
29
28
  />
30
29
  </template>
31
30
  <template
@@ -46,7 +45,6 @@
46
45
  <FSChip
47
46
  :color="dashboardTypeColor(props.item.type)"
48
47
  :label="dashboardTypeLabel(props.item.type)"
49
- :editable="false"
50
48
  />
51
49
  </template>
52
50
  </FSButton>
@@ -25,7 +25,6 @@
25
25
  <FSChip
26
26
  :color="roleTypeColor(item.type)"
27
27
  :label="roleTypeLabel(item.type)"
28
- :editable="false"
29
28
  />
30
29
  </template>
31
30
  <template
@@ -46,7 +45,6 @@
46
45
  <FSChip
47
46
  :color="roleTypeColor(props.item.type)"
48
47
  :label="roleTypeLabel(props.item.type)"
49
- :editable="false"
50
48
  />
51
49
  </template>
52
50
  </FSButton>
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <FSSelectField
3
3
  v-if="$props.customProperty.useOnlyAllowedValues"
4
- :editable="$props.editable"
4
+ :disabled="$props.disabled"
5
5
  :itemTitle="itemTitle"
6
6
  :label="$props.label"
7
7
  :class="classes"
@@ -30,35 +30,35 @@
30
30
  >
31
31
  <FSNumberField
32
32
  v-if="$props.customProperty.dataType === PropertyDataType.Number"
33
- :editable="$props.editable"
33
+ :disabled="$props.disabled"
34
34
  :label="$props.label"
35
35
  :modelValue="asNumber()"
36
36
  @update:modelValue="onUpdate"
37
37
  />
38
38
  <FSSwitch
39
39
  v-else-if="$props.customProperty.dataType === PropertyDataType.Boolean"
40
- :editable="$props.editable"
40
+ :disabled="$props.disabled"
41
41
  :label="$props.label"
42
42
  :modelValue="asBoolean()"
43
43
  @update:modelValue="onUpdate"
44
44
  />
45
45
  <FSTextField
46
46
  v-else-if="$props.customProperty.dataType === PropertyDataType.String"
47
- :editable="$props.editable"
47
+ :disabled="$props.disabled"
48
48
  :label="$props.label"
49
49
  :modelValue="$props.modelValue"
50
50
  @update:modelValue="onUpdate"
51
51
  />
52
52
  <FSDateTimeField
53
53
  v-else-if="$props.customProperty.dataType === PropertyDataType.DateTime"
54
- :editable="$props.editable"
54
+ :disabled="$props.disabled"
55
55
  :label="$props.label"
56
56
  :modelValue="asNumber()"
57
57
  @update:modelValue="onUpdate"
58
58
  />
59
59
  <FSIconField
60
60
  v-else-if="$props.customProperty.dataType === PropertyDataType.Icon"
61
- :editable="$props.editable"
61
+ :disabled="$props.disabled"
62
62
  :label="$props.label"
63
63
  :modelValue="modelValue"
64
64
  @update:modelValue="onUpdate"
@@ -108,10 +108,10 @@ export default defineComponent({
108
108
  required: false,
109
109
  default: null
110
110
  },
111
- editable: {
111
+ disabled: {
112
112
  type: Boolean,
113
113
  required: false,
114
- default: true
114
+ default: false
115
115
  }
116
116
  },
117
117
  emits: ["update:modelValue"],
@@ -17,7 +17,7 @@
17
17
  <FSMetaField
18
18
  v-for="(property, index) in properties"
19
19
  :customProperty="property"
20
- :editable="editable"
20
+ :disabled="disabled"
21
21
  :key="index"
22
22
  :modelValue="modelValue[property.code]"
23
23
  @update:modelValue="(event) => $emit('update:modelValue', { ...modelValue, [property.code]: event})"
@@ -50,12 +50,13 @@ export default defineComponent({
50
50
  type: Object as PropType<{ [key: string]: string }>,
51
51
  required: true
52
52
  },
53
- editable: {
53
+ disabled: {
54
54
  type: Boolean,
55
55
  required: false,
56
- default: true
56
+ default: false
57
57
  }
58
58
  },
59
+ emits: ["update:modelValue"],
59
60
  setup(props) {
60
61
  const categories = props.customProperties.reduce((acc, curr) => {
61
62
  if (acc[curr.categoryLabel] === undefined) {
@@ -1,16 +1,16 @@
1
- import { useAppTimeZone } from "@dative-gpi/foundation-shared-services/composables";
1
+ import { useDateExpression } from "@dative-gpi/foundation-shared-services/composables";
2
2
  import { FilterType, PropertyDataType } from "@dative-gpi/foundation-shared-domain/enums";
3
3
 
4
4
  import { type CustomPropertyInfos, } from "../../../foundation-core-domain/models";
5
5
 
6
- const { getOffsetDifference } = useAppTimeZone();
6
+ const { convert: convertExpressionToEpoch } = useDateExpression();
7
7
 
8
8
  export const getColor = (property: CustomPropertyInfos, value: string): string | undefined => {
9
9
  if (property.colorful) {
10
10
  for (const color of [...property.colorMap].sort((a, b) => b.priority - a.priority)) {
11
11
  let filterValues = [...color.filterValues];
12
12
  if ([PropertyDataType.DateTime].includes(property.dataType)) {
13
- filterValues = filterValues.map(fv => getEpoch(fv));
13
+ filterValues = filterValues.map(fv => convertExpressionToEpoch(fv).toString());
14
14
  }
15
15
  switch (color.filterType) {
16
16
  case FilterType.None: return color.color;
@@ -80,113 +80,3 @@ export const getColor = (property: CustomPropertyInfos, value: string): string |
80
80
  }
81
81
  }
82
82
  }
83
-
84
- const getEpoch = (expression: string): string => {
85
- if (!isNaN(parseInt(expression))) {
86
- return expression;
87
- }
88
-
89
- const date = new Date();
90
- if (expression.startsWith("now")) {
91
- expression = expression.substring(3).replace(/\s/g, "");
92
- }
93
- else {
94
- return (date.getTime()).toString();
95
- }
96
- let match = /^(?:(?:([-+])(\d*))?(\w+))?(?:\/(\w))?/g.exec(expression);
97
- while (match != null && (match[0] != null && match[0].length > 0)) {
98
- if (match[1] != null && match[3] != null) {
99
- if (!["-", "+"].includes(match[1]) || isNaN(parseInt(match[2])) || !["s", "m", "h", "d", "w", "M", "y"].includes(match[3])) {
100
- return (date.getTime()).toString();
101
- }
102
- const offset = match[1] == "-" ? -1 * parseInt(match[2]): 1* parseInt(match[2]);
103
- switch (match[3]) {
104
- case "s": {
105
- date.setSeconds(date.getSeconds() + offset);
106
- break;
107
- }
108
- case "m": {
109
- date.setMinutes(date.getMinutes() + offset);
110
- break;
111
- }
112
- case "h": {
113
- date.setHours(date.getHours() + offset);
114
- break;
115
- }
116
- case "d": {
117
- date.setDate(date.getDate() + offset);
118
- break;
119
- }
120
- case "w": {
121
- date.setDate(date.getDate() + offset * 7);
122
- break;
123
- }
124
- case "M": {
125
- date.setMonth(date.getMonth() + offset);
126
- break;
127
- }
128
- case "y": {
129
- date.setFullYear(date.getFullYear() + offset);
130
- break;
131
- }
132
- }
133
- }
134
- if (match[4] != null) {
135
- if (!["s", "m", "h", "d", "w", "M", "y"].includes(match[4])) {
136
- return (date.getTime()).toString();
137
- }
138
- switch (match[4]) {
139
- case "s": {
140
- date.setMilliseconds(0);
141
- break;
142
- }
143
- case "m": {
144
- date.setMilliseconds(0);
145
- date.setSeconds(0);
146
- break;
147
- }
148
- case "h": {
149
- date.setMilliseconds(0);
150
- date.setSeconds(0);
151
- date.setMinutes(0);
152
- break;
153
- }
154
- case "d": {
155
- date.setMilliseconds(0);
156
- date.setSeconds(0);
157
- date.setMinutes(0);
158
- date.setHours(0);
159
- break;
160
- }
161
- case "w": {
162
- date.setMilliseconds(0);
163
- date.setSeconds(0);
164
- date.setMinutes(0);
165
- date.setHours(0);
166
- date.setDate(date.getDate() - date.getDay() + (date.getDay() === 0 ? -6 : 1));
167
- break;
168
- }
169
- case "M": {
170
- date.setMilliseconds(0);
171
- date.setSeconds(0);
172
- date.setMinutes(0);
173
- date.setHours(0);
174
- date.setDate(1);
175
- break;
176
- }
177
- case "y": {
178
- date.setMilliseconds(0);
179
- date.setSeconds(0);
180
- date.setMinutes(0);
181
- date.setHours(0);
182
- date.setDate(1);
183
- date.setMonth(0);
184
- break;
185
- }
186
- }
187
- }
188
- expression = expression.substring(match[0].length);
189
- match = /(?:(?:([-+])(\d*))?(\w+))?(?:\/(\w))?/g.exec(expression);
190
- }
191
- return (date.getTime() + getOffsetDifference()).toString();
192
- }
@@ -3,7 +3,7 @@
3
3
  :description="$props.description"
4
4
  :hideHeader="$props.hideHeader"
5
5
  :required="$props.required"
6
- :editable="$props.editable"
6
+ :disabled="$props.disabled"
7
7
  :label="$props.label"
8
8
  :messages="$props.messages"
9
9
  :entityType="$props.entityType"
@@ -96,10 +96,10 @@ export default defineComponent({
96
96
  required: false,
97
97
  default: null
98
98
  },
99
- editable: {
99
+ disabled: {
100
100
  type: Boolean,
101
101
  required: false,
102
- default: true
102
+ default: false
103
103
  },
104
104
  entityType: {
105
105
  type: Number as PropType<EntityType>,
@@ -4,7 +4,7 @@
4
4
  :loading="fetchingDeviceExplorerElements"
5
5
  :singleSelect="$props.singleSelect"
6
6
  :items="deviceExplorerElements"
7
- :showSelect="$props.editable"
7
+ :showSelect="$props.selectable"
8
8
  :tableCode="$props.tableCode"
9
9
  :itemTo="$props.itemTo"
10
10
  :noSearch="$props.recursiveSearch"
@@ -52,7 +52,7 @@
52
52
  >
53
53
  <FSTagGroup
54
54
  variant="slide"
55
- :editable="false"
55
+ :disabled="true"
56
56
  :tags="item.tags"
57
57
  />
58
58
  </template>
@@ -135,6 +135,7 @@
135
135
  v-if="item.type === DeviceExplorerElementType.Group"
136
136
  :to="$props.itemTo && $props.itemTo(item)"
137
137
  :modelValue="isSelected(item.id)"
138
+ :selectable="$props.selectable"
138
139
  @update:modelValue="toggleSelect(item)"
139
140
  v-bind="item"
140
141
  />
@@ -147,6 +148,7 @@
147
148
  :deviceAlerts="item.alerts"
148
149
  :alertTo="$props.alertTo"
149
150
  :modelValue="isSelected(item.id)"
151
+ :selectable="$props.selectable"
150
152
  @update:modelValue="toggleSelect(item)"
151
153
  v-bind="item"
152
154
  />
@@ -221,7 +223,7 @@ export default defineComponent({
221
223
  required: false,
222
224
  default: null
223
225
  },
224
- editable: {
226
+ selectable: {
225
227
  type: Boolean,
226
228
  required: false,
227
229
  default: true
@@ -6,6 +6,7 @@
6
6
  :loading="fetchingFolders || fetchingDashboardOrganisations || fetchingDashboardShallows"
7
7
  :tableCode="$props.tableCode"
8
8
  :modelValue="selecteds"
9
+ :showSelect="$props.selectable"
9
10
  @update:modelValue="onSelect"
10
11
  v-bind="$attrs"
11
12
  >
@@ -69,7 +70,7 @@
69
70
  >
70
71
  <FSTagGroup
71
72
  variant="slide"
72
- :editable="false"
73
+ :showRemove="false"
73
74
  :tags="item.tags"
74
75
  />
75
76
  </template>
@@ -80,6 +81,7 @@
80
81
  v-if="item.type == FoldersListType.Folder"
81
82
  :bottomColor="item.colors"
82
83
  v-bind="item"
84
+ :selectable="$props.selectable"
83
85
  :modelValue="isSelected(item.id)"
84
86
  @update:modelValue="toggleSelect(item)"
85
87
  :to="$props.itemTo && $props.itemTo(item)"
@@ -87,6 +89,7 @@
87
89
  <FSDashboardOrganisationTileUI
88
90
  v-if="item.type == FoldersListType.Dashboard && item.dashboardType == DashboardType.Organisation"
89
91
  :bottomColor="item.colors"
92
+ :selectable="$props.selectable"
90
93
  :modelValue="isSelected(item.id)"
91
94
  @update:modelValue="toggleSelect(item)"
92
95
  :to="$props.itemTo && $props.itemTo(item)"
@@ -95,6 +98,7 @@
95
98
  <FSDashboardShallowTileUI
96
99
  v-if="item.type == FoldersListType.Dashboard && item.dashboardType == DashboardType.Shallow"
97
100
  :bottomColor="item.colors"
101
+ :selectable="$props.selectable"
98
102
  :modelValue="isSelected(item.id)"
99
103
  @update:modelValue="toggleSelect(item)"
100
104
  :to="$props.itemTo && $props.itemTo(item)"
@@ -166,6 +170,11 @@ export default defineComponent({
166
170
  tableCode: {
167
171
  type: String,
168
172
  required: true
173
+ },
174
+ selectable: {
175
+ type: Boolean,
176
+ required: false,
177
+ default: true
169
178
  }
170
179
  },
171
180
  emits: ["update", "update:modelValue", "update:type", "update:dashboard-type"],
@@ -7,6 +7,7 @@
7
7
  :loading="fetchingAlerts"
8
8
  :tableCode="$props.tableCode"
9
9
  :modelValue="$props.modelValue"
10
+ :showSelect="$props.selectable"
10
11
  @update:modelValue="$emit('update:modelValue', $event)"
11
12
  v-bind="$attrs"
12
13
  >
@@ -50,7 +51,7 @@
50
51
  >
51
52
  <FSTagGroup
52
53
  variant="slide"
53
- :editable="false"
54
+ :showRemove="false"
54
55
  :tags="item.tags"
55
56
  />
56
57
  </template>
@@ -60,7 +61,7 @@
60
61
  <FSTagGroup
61
62
  variant="slide"
62
63
  :tags="item.groupByValues.map((gbv: any) => `${gbv.label}: ${gbv.value}`)"
63
- :editable="false"
64
+ :showRemove="false"
64
65
  />
65
66
  </template>
66
67
  <template
@@ -120,7 +121,7 @@
120
121
  <FSTagGroup
121
122
  variant="slide"
122
123
  :tags="item.history.map((h: any) => AlertTools.statusLabel(h.status))"
123
- :editable="false"
124
+ :showRemove="false"
124
125
  />
125
126
  </template>
126
127
  <template
@@ -196,16 +197,19 @@
196
197
  </FSSpan>
197
198
  </template>
198
199
  <template
199
- #item.tile="{ item }"
200
+ #item.tile="{ item, toggleSelect }"
200
201
  >
201
202
  <FSAlertTileUI
202
203
  variant="standard"
203
204
  :label="item.label"
204
205
  :deviceOrganisationLabel="item.deviceOrganisationLabel"
205
206
  :icon="item.icon"
207
+ :selectable="$props.selectable"
206
208
  :triggerProcessedTimestamp="item.triggerProcessedTimestamp"
207
209
  :to="$props.itemTo && $props.itemTo(item)"
210
+ :modelValue="isSelected(item.id)"
208
211
  :color="alertColorByCriticity(item.criticity)"
212
+ @update:modelValue="toggleSelect(item)"
209
213
  />
210
214
  </template>
211
215
  </FSDataTable>
@@ -280,6 +284,11 @@ export default defineComponent({
280
284
  type: Function as PropType<(item: AlertInfos) => Partial<RouteLocation>>,
281
285
  required: false
282
286
  },
287
+ selectable: {
288
+ type: Boolean,
289
+ required: false,
290
+ default: true
291
+ }
283
292
  },
284
293
  emits: ["update:modelValue"],
285
294
  setup(props) {
@@ -295,6 +304,10 @@ export default defineComponent({
295
304
  return AlertTools.criticityColor(criticity);
296
305
  };
297
306
 
307
+ const isSelected = (id: string): boolean => {
308
+ return props.modelValue.includes(id);
309
+ };
310
+
298
311
  const alertsOrdered = computed(() => {
299
312
  const als = [...alerts.value]
300
313
  return als.sort((a: AlertInfos, b: AlertInfos) => {
@@ -331,7 +344,8 @@ export default defineComponent({
331
344
  ColorEnum,
332
345
  epochToShortTimeFormat,
333
346
  alertColorByCriticity,
334
- criticityColor
347
+ criticityColor,
348
+ isSelected
335
349
  };
336
350
  }
337
351
  });
@@ -3,6 +3,7 @@
3
3
  :items="authTokens"
4
4
  :loading="fetchingAuthTokens"
5
5
  :tableCode="$props.tableCode"
6
+ :showSelect="false"
6
7
  v-bind="$attrs"
7
8
  >
8
9
  <template
@@ -7,6 +7,8 @@
7
7
  :headersOptions="headersOptions"
8
8
  :tableCode="$props.tableCode"
9
9
  :modelValue="$props.modelValue"
10
+ :showSelect="$props.selectable"
11
+ :singleSelect="$props.singleSelect"
10
12
  @update:modelValue="$emit('update:modelValue', $event)"
11
13
  v-bind="$attrs"
12
14
  >
@@ -49,7 +51,7 @@
49
51
  >
50
52
  <FSTagGroup
51
53
  variant="slide"
52
- :editable="false"
54
+ :disabled="true"
53
55
  :tags="item.tags"
54
56
  />
55
57
  </template>
@@ -71,21 +73,23 @@
71
73
  #item.modelsLabels="{ item }"
72
74
  >
73
75
  <FSTagGroup
74
- :editable="false"
76
+ :disabled="true"
75
77
  :tags="item.modelsLabels.map((d: any) => d.label)"
76
78
  />
77
79
  </template>
78
80
  <template
79
- #item.tile="{item}"
81
+ #item.tile="{ item, toggleSelect}"
80
82
  >
81
83
  <FSChartTileUI
82
- variant="standard"
83
84
  :label="item.label"
84
85
  :category-label="item.chartCategoryLabel"
86
+ :singleSelect="$props.singleSelect"
87
+ :selectable="$props.selectable"
85
88
  :icon="item.icon"
86
89
  :imageId="item.imageId"
87
90
  :type="item.chartType"
88
- :color="ColorEnum.Light"
91
+ :modelValue="isSelected(item.id)"
92
+ @update:modelValue="toggleSelect(item)"
89
93
  :to="$props.itemTo && $props.itemTo(item)"
90
94
  />
91
95
  </template>
@@ -144,6 +148,16 @@ export default defineComponent({
144
148
  type: Array as PropType<string[]>,
145
149
  default: () => [],
146
150
  required: false
151
+ },
152
+ selectable: {
153
+ type: Boolean,
154
+ required: false,
155
+ default: true
156
+ },
157
+ singleSelect: {
158
+ type: Boolean,
159
+ required: false,
160
+ default: false
147
161
  }
148
162
  },
149
163
  emits: ["update:modelValue"],
@@ -7,6 +7,8 @@
7
7
  :headersOptions="headersOptions"
8
8
  :tableCode="$props.tableCode"
9
9
  :modelValue="$props.modelValue"
10
+ :singleSelect="$props.singleSelect"
11
+ :showSelect="$props.selectable"
10
12
  @update:modelValue="$emit('update:modelValue', $event)"
11
13
  v-bind="$attrs"
12
14
  >
@@ -49,7 +51,7 @@
49
51
  >
50
52
  <FSTagGroup
51
53
  variant="slide"
52
- :editable="false"
54
+ :disabled="true"
53
55
  :tags="item.tags"
54
56
  />
55
57
  </template>
@@ -57,24 +59,10 @@
57
59
  #item.modelsLabels="{ item }"
58
60
  >
59
61
  <FSTagGroup
60
- :editable="false"
62
+ :disabled="true"
61
63
  :tags="item.modelsLabels.map((d: any) => d.label)"
62
64
  />
63
65
  </template>
64
- <template
65
- #item.tile="{ item }"
66
- >
67
- <FSChartTileUI
68
- variant="standard"
69
- :label="item.label"
70
- :categoryLabel="item.chartCategoryLabel"
71
- :icon="item.icon"
72
- :imageId="item.imageId"
73
- :type="item.chartType"
74
- :color="ColorEnum.Light"
75
- :to="$props.itemTo && $props.itemTo(item)"
76
- />
77
- </template>
78
66
  <template
79
67
  #item.chartType="{ item }"
80
68
  >
@@ -89,6 +77,22 @@
89
77
  </FSText>
90
78
  </FSRow>
91
79
  </template>
80
+ <template
81
+ #item.tile="{ item, toggleSelect }"
82
+ >
83
+ <FSChartTileUI
84
+ :label="item.label"
85
+ :singleSelect="$props.singleSelect"
86
+ :selectable="$props.selectable"
87
+ :categoryLabel="item.chartCategoryLabel"
88
+ :icon="item.icon"
89
+ :imageId="item.imageId"
90
+ :type="item.chartType"
91
+ :modelValue="isSelected(item.id)"
92
+ @update:modelValue="toggleSelect(item)"
93
+ :to="$props.itemTo && $props.itemTo(item)"
94
+ />
95
+ </template>
92
96
  </FSDataTable>
93
97
  </template>
94
98
 
@@ -144,7 +148,17 @@ export default defineComponent({
144
148
  type: Array as PropType<string[]>,
145
149
  default: () => [],
146
150
  required: false
147
- }
151
+ },
152
+ selectable: {
153
+ type: Boolean,
154
+ required: false,
155
+ default: true
156
+ },
157
+ singleSelect: {
158
+ type: Boolean,
159
+ required: false,
160
+ default: false
161
+ },
148
162
  },
149
163
  emits: ["update:modelValue"],
150
164
  setup(props) {