@dative-gpi/foundation-core-components 1.0.65 → 1.0.67-map-edit

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 (80) 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/helpers.ts +57 -165
  18. package/components/entities/FSBaseEntitiesList.vue +12 -2
  19. package/components/entities/FSDialogSelectEntities.vue +19 -2
  20. package/components/entities/FSEntityField.vue +75 -14
  21. package/components/entities/FSSelectEntitiesList.vue +40 -7
  22. package/components/explorers/FSBaseDevicesExplorer.vue +322 -0
  23. package/components/explorers/FSBaseFoldersExplorer.vue +126 -24
  24. package/components/lists/FSDataTable.vue +22 -16
  25. package/components/lists/alerts/FSBaseAlertsList.vue +96 -106
  26. package/components/lists/alerts/FSButtonAcknowledgeAlert.vue +4 -4
  27. package/components/lists/authTokens/FSBaseAuthTokensList.vue +6 -4
  28. package/components/lists/chartOrganisationTypes/FSBaseChartOrganisationTypesList.vue +97 -34
  29. package/components/lists/chartOrganisations/FSBaseChartOrganisationsList.vue +98 -34
  30. package/components/lists/charts/FSBaseChartsList.vue +153 -64
  31. package/components/lists/comments/FSBaseCommentsList.vue +39 -23
  32. package/components/lists/connectivityScenarios/FSBaseConnectivityScenariosList.vue +128 -0
  33. package/components/lists/dashboardOrganisationTypes/FSBaseDashboardOrganisationTypesList.vue +41 -8
  34. package/components/lists/dashboards/FSBaseDashboardsList.vue +76 -16
  35. package/components/lists/dashboards/FSSimpleDashboardsList.vue +33 -7
  36. package/components/lists/dataCategories/FSBaseDataCategoriesList.vue +8 -6
  37. package/components/lists/dataDefinitions/FSBaseDataDefinitionsList.vue +8 -5
  38. package/components/lists/deviceOrganisations/FSBaseDeviceOrganisationsList.vue +70 -44
  39. package/components/lists/folders/FSBaseFoldersList.vue +27 -15
  40. package/components/lists/groups/FSBaseGroupsList.vue +13 -9
  41. package/components/lists/locations/FSBaseLocationsList.vue +17 -13
  42. package/components/lists/models/FSBaseModelsList.vue +31 -13
  43. package/components/lists/playlists/FSSimplePlaylistsList.vue +44 -0
  44. package/components/lists/roleOrganisationTypes/FSBaseRoleOrganisationTypesList.vue +6 -5
  45. package/components/lists/roleOrganisations/FSBaseRoleOrganisationsList.vue +17 -16
  46. package/components/lists/scenarioOrganisationTypes/FSBaseScenarioOrganisationTypesList.vue +45 -8
  47. package/components/lists/scenarioOrganisations/FSBaseScenarioOrganisationsList.vue +45 -7
  48. package/components/lists/scenarios/FSBaseScenariosList.vue +121 -86
  49. package/components/lists/serviceAccountOrganisations/FSBaseServiceAccountOrganisationsList.vue +10 -7
  50. package/components/lists/serviceAccountRoleOrganisations/FSBaseServiceAccountRoleOrganisationsList.vue +128 -0
  51. package/components/lists/userOrganisations/FSBaseUserOrganisationsList.vue +10 -7
  52. package/components/lists/userOrganisations/FSChipUserOrganisationsList.vue +61 -0
  53. package/components/tiles/FSChartTile.vue +71 -0
  54. package/components/tiles/FSDashboardOrganisationTile.vue +3 -3
  55. package/components/tiles/FSDashboardOrganisationTypeTile.vue +3 -3
  56. package/components/tiles/FSDashboardShallowTile.vue +3 -3
  57. package/components/tiles/FSDeviceOrganisationTile.vue +3 -3
  58. package/components/tiles/FSFolderTile.vue +7 -5
  59. package/components/tiles/FSGroupTile.vue +3 -3
  60. package/components/tiles/FSLocationTile.vue +5 -3
  61. package/components/tiles/FSModelTile.vue +64 -0
  62. package/components/tiles/FSServiceAccountOrganisationTile.vue +3 -3
  63. package/components/tiles/FSUserOrganisationTile.vue +3 -3
  64. package/components/treeviews/FSTreeViewGroup.vue +7 -1
  65. package/package.json +9 -9
  66. package/utils/dashboards.ts +4 -4
  67. package/utils/index.ts +0 -1
  68. package/utils/roles.ts +3 -3
  69. package/utils/users.ts +3 -3
  70. package/components/selects/FSAggregationSelector.vue +0 -51
  71. package/components/selects/FSAxisTypeSelector.vue +0 -48
  72. package/components/selects/FSDisplayAsSelector.vue +0 -52
  73. package/components/selects/FSFilterTypeSelector.vue +0 -53
  74. package/components/selects/FSHeatmapRuleSelector.vue +0 -52
  75. package/components/selects/FSOperationOnSelector.vue +0 -51
  76. package/components/selects/FSPlanningTypeSelector.vue +0 -51
  77. package/components/selects/FSPlotPerSelector.vue +0 -51
  78. package/components/selects/FSSelectEntityType.vue +0 -59
  79. package/components/selects/FSSerieTypeSelector.vue +0 -51
  80. package/utils/charts.ts +0 -137
@@ -1,49 +1,27 @@
1
1
  <template>
2
2
  <FSSelectField
3
3
  v-if="$props.customProperty.useOnlyAllowedValues"
4
- class="fs-meta-field"
5
- :editable="$props.editable"
4
+ :disabled="$props.disabled"
5
+ :itemTitle="itemTitle"
6
6
  :label="$props.label"
7
+ :class="classes"
7
8
  :items="items"
8
9
  :modelValue="$props.modelValue"
9
10
  @update:modelValue="onUpdate"
10
11
  >
11
12
  <template
12
- #selection="{ item }"
13
+ v-if="$props.customProperty.dataType === PropertyDataType.Icon"
14
+ #item-prepend="{ item }"
13
15
  >
14
16
  <FSIcon
15
- v-if="item.raw.icon"
17
+ v-if="item.icon"
16
18
  >
17
- {{ item.raw.icon }}
18
- </FSIcon>
19
- <FSText
20
- v-else
21
- >
22
- {{ item.raw.label }}
23
- </FSText>
24
- </template>
25
- <template
26
- #selection-mobile="{ item }"
27
- >
28
- <FSIcon
29
- v-if="item.raw.icon"
30
- >
31
- {{ item.raw.icon }}
32
- </FSIcon>
33
- </template>
34
- <template
35
- #item-label="{ item, font }"
36
- >
37
- <FSIcon
38
- v-if="item.raw.icon"
39
- >
40
- {{ item.raw.icon }}
19
+ {{ item.icon }}
41
20
  </FSIcon>
42
21
  <FSSpan
43
22
  v-else
44
- :font="font"
45
23
  >
46
- {{ item.raw.label }}
24
+ {{ item.label }}
47
25
  </FSSpan>
48
26
  </template>
49
27
  </FSSelectField>
@@ -52,35 +30,35 @@
52
30
  >
53
31
  <FSNumberField
54
32
  v-if="$props.customProperty.dataType === PropertyDataType.Number"
55
- :editable="$props.editable"
33
+ :disabled="$props.disabled"
56
34
  :label="$props.label"
57
35
  :modelValue="asNumber()"
58
36
  @update:modelValue="onUpdate"
59
37
  />
60
38
  <FSSwitch
61
39
  v-else-if="$props.customProperty.dataType === PropertyDataType.Boolean"
62
- :editable="$props.editable"
40
+ :disabled="$props.disabled"
63
41
  :label="$props.label"
64
42
  :modelValue="asBoolean()"
65
43
  @update:modelValue="onUpdate"
66
44
  />
67
45
  <FSTextField
68
46
  v-else-if="$props.customProperty.dataType === PropertyDataType.String"
69
- :editable="$props.editable"
47
+ :disabled="$props.disabled"
70
48
  :label="$props.label"
71
49
  :modelValue="$props.modelValue"
72
50
  @update:modelValue="onUpdate"
73
51
  />
74
52
  <FSDateTimeField
75
53
  v-else-if="$props.customProperty.dataType === PropertyDataType.DateTime"
76
- :editable="$props.editable"
54
+ :disabled="$props.disabled"
77
55
  :label="$props.label"
78
56
  :modelValue="asNumber()"
79
57
  @update:modelValue="onUpdate"
80
58
  />
81
59
  <FSIconField
82
60
  v-else-if="$props.customProperty.dataType === PropertyDataType.Icon"
83
- :editable="$props.editable"
61
+ :disabled="$props.disabled"
84
62
  :label="$props.label"
85
63
  :modelValue="modelValue"
86
64
  @update:modelValue="onUpdate"
@@ -103,7 +81,6 @@ import FSIconField from "@dative-gpi/foundation-shared-components/components/fie
103
81
  import FSSwitch from "@dative-gpi/foundation-shared-components/components/FSSwitch.vue";
104
82
  import FSIcon from "@dative-gpi/foundation-shared-components/components/FSIcon.vue";
105
83
  import FSSpan from "@dative-gpi/foundation-shared-components/components/FSSpan.vue";
106
- import FSText from "@dative-gpi/foundation-shared-components/components/FSText.vue";
107
84
 
108
85
  export default defineComponent({
109
86
  name: "FSMetaField",
@@ -114,8 +91,7 @@ export default defineComponent({
114
91
  FSIconField,
115
92
  FSSwitch,
116
93
  FSIcon,
117
- FSSpan,
118
- FSText
94
+ FSSpan
119
95
  },
120
96
  props: {
121
97
  label: {
@@ -132,10 +108,10 @@ export default defineComponent({
132
108
  required: false,
133
109
  default: null
134
110
  },
135
- editable: {
111
+ disabled: {
136
112
  type: Boolean,
137
113
  required: false,
138
- default: true
114
+ default: false
139
115
  }
140
116
  },
141
117
  emits: ["update:modelValue"],
@@ -180,6 +156,23 @@ export default defineComponent({
180
156
  });
181
157
  });
182
158
 
159
+ const itemTitle = computed((): string => {
160
+ switch (props.customProperty.dataType) {
161
+ case PropertyDataType.Icon: return "";
162
+ default : return "label";
163
+ };
164
+ });
165
+
166
+ const classes = computed((): string[] => {
167
+ const classNames = ["fs-meta-field"];
168
+ switch(props.customProperty.dataType) {
169
+ case PropertyDataType.Icon:
170
+ classNames.push("fs-meta-icon-field");
171
+ break;
172
+ }
173
+ return classNames;
174
+ });
175
+
183
176
  const asNumber = (): number | null => {
184
177
  if (!props.modelValue) {
185
178
  return null;
@@ -216,6 +209,8 @@ export default defineComponent({
216
209
 
217
210
  return {
218
211
  PropertyDataType,
212
+ itemTitle,
213
+ classes,
219
214
  items,
220
215
  asBoolean,
221
216
  asNumber,
@@ -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,12 +1,12 @@
1
1
  <template>
2
2
  <FSButton
3
3
  prependIcon="mdi-history"
4
- :label="$tr('entity.custom-property.history', 'History')"
4
+ :label="$tr('ui.common.history', 'History')"
5
5
  @click="dialog = !dialog"
6
6
  />
7
7
  <FSDialog
8
8
  width="500px"
9
- :label="$tr('entity.custom-property.history', 'History')"
9
+ :label="$tr('ui.common.history', 'History')"
10
10
  v-model="dialog"
11
11
  >
12
12
  <template
@@ -1,192 +1,84 @@
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
- import { type CustomPropertyInfos, } from "../../../foundation-core-domain/models";
4
+ import { type CustomPropertyInfos } from "@dative-gpi/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
- if (property.colorful) {
10
- for (const color of [...property.colorMap].sort((a, b) => b.priority - a.priority)) {
11
- let filterValues = [...color.filterValues];
12
- if ([PropertyDataType.DateTime].includes(property.dataType)) {
13
- filterValues = filterValues.map(fv => getEpoch(fv));
14
- }
15
- switch (color.filterType) {
16
- case FilterType.None: return color.color;
17
- case FilterType.Equal: {
18
- if (filterValues.includes(value)) {
19
- return color.color;
20
- }
21
- break;
22
- }
23
- case FilterType.More: {
24
- if (!isNaN(parseFloat(value))) {
25
- if (filterValues.some(fv => !isNaN(parseFloat(fv)) && parseFloat(fv) < parseFloat(value))) {
26
- return color.color;
27
- }
28
- }
29
- break;
30
- }
31
- case FilterType.Less: {
32
- if (!isNaN(parseFloat(value))) {
33
- if (filterValues.some(fv => !isNaN(parseFloat(fv)) && parseFloat(fv) > parseFloat(value))) {
34
- return color.color;
35
- }
36
- }
37
- break;
38
- }
39
- case FilterType.MoreOrEqual: {
40
- if (!isNaN(parseFloat(value))) {
41
- if (filterValues.some(fv => !isNaN(parseFloat(fv)) && parseFloat(fv) <= parseFloat(value))) {
42
- return color.color;
43
- }
44
- }
45
- break;
46
- }
47
- case FilterType.LessOrEqual: {
48
- if (!isNaN(parseFloat(value))) {
49
- if (filterValues.some(fv => !isNaN(parseFloat(fv)) && parseFloat(fv) >= parseFloat(value))) {
50
- return color.color;
51
- }
52
- }
53
- break;
9
+ if (!property.colorful) {
10
+ return undefined;
11
+ }
12
+
13
+ for (const color of [...property.colorMap].sort((a, b) => b.priority - a.priority)) {
14
+ let filterValues = [...color.filterValues];
15
+ if ([PropertyDataType.DateTime].includes(property.dataType)) {
16
+ filterValues = filterValues.map(fv => convertExpressionToEpoch(fv).toString());
17
+ }
18
+ switch (color.filterType) {
19
+ case FilterType.None: return color.color;
20
+ case FilterType.Equal: {
21
+ if (filterValues.includes(value)) {
22
+ return color.color;
54
23
  }
55
- case FilterType.Different: {
56
- if (!filterValues.includes(value)) {
24
+ break;
25
+ }
26
+ case FilterType.More: {
27
+ if (!isNaN(parseFloat(value))) {
28
+ if (filterValues.some(fv => !isNaN(parseFloat(fv)) && parseFloat(fv) < parseFloat(value))) {
57
29
  return color.color;
58
30
  }
59
- break;
60
31
  }
61
- case FilterType.Contains: {
62
- if (filterValues.some(fv => value.includes(fv))) {
32
+ break;
33
+ }
34
+ case FilterType.Less: {
35
+ if (!isNaN(parseFloat(value))) {
36
+ if (filterValues.some(fv => !isNaN(parseFloat(fv)) && parseFloat(fv) > parseFloat(value))) {
63
37
  return color.color;
64
38
  }
65
- break;
66
39
  }
67
- case FilterType.StartsWith: {
68
- if (filterValues.some(fv => value.startsWith(fv))) {
40
+ break;
41
+ }
42
+ case FilterType.MoreOrEqual: {
43
+ if (!isNaN(parseFloat(value))) {
44
+ if (filterValues.some(fv => !isNaN(parseFloat(fv)) && parseFloat(fv) <= parseFloat(value))) {
69
45
  return color.color;
70
46
  }
71
- break;
72
47
  }
73
- case FilterType.EndsWith: {
74
- if (filterValues.some(fv => value.endsWith(fv))) {
48
+ break;
49
+ }
50
+ case FilterType.LessOrEqual: {
51
+ if (!isNaN(parseFloat(value))) {
52
+ if (filterValues.some(fv => !isNaN(parseFloat(fv)) && parseFloat(fv) >= parseFloat(value))) {
75
53
  return color.color;
76
54
  }
77
- break;
78
55
  }
56
+ break;
79
57
  }
80
- }
81
- }
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;
58
+ case FilterType.Different: {
59
+ if (!filterValues.includes(value)) {
60
+ return color.color;
127
61
  }
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();
62
+ break;
137
63
  }
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;
64
+ case FilterType.Contains: {
65
+ if (filterValues.some(fv => value.includes(fv))) {
66
+ return color.color;
153
67
  }
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;
68
+ break;
69
+ }
70
+ case FilterType.StartsWith: {
71
+ if (filterValues.some(fv => value.startsWith(fv))) {
72
+ return color.color;
176
73
  }
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;
74
+ break;
75
+ }
76
+ case FilterType.EndsWith: {
77
+ if (filterValues.some(fv => value.endsWith(fv))) {
78
+ return color.color;
185
79
  }
80
+ break;
186
81
  }
187
82
  }
188
- expression = expression.substring(match[0].length);
189
- match = /(?:(?:([-+])(\d*))?(\w+))?(?:\/(\w))?/g.exec(expression);
190
83
  }
191
- return (date.getTime() + getOffsetDifference()).toString();
192
- }
84
+ }
@@ -2,7 +2,17 @@
2
2
  <component
3
3
  :is="component"
4
4
  v-bind="$attrs"
5
- />
5
+ >
6
+ <template
7
+ v-for="(_, name) in $slots"
8
+ v-slot:[name]="slotData"
9
+ >
10
+ <slot
11
+ :name="name"
12
+ v-bind="slotData"
13
+ />
14
+ </template>
15
+ </component>
6
16
  </template>
7
17
 
8
18
  <script lang="ts">
@@ -43,7 +53,7 @@ export default defineComponent({
43
53
  });
44
54
 
45
55
  return {
46
- component,
56
+ component
47
57
  }
48
58
  }
49
59
  });
@@ -10,11 +10,22 @@
10
10
  #body
11
11
  >
12
12
  <FSSelectEntitiesList
13
+ :singleSelect="$props.singleSelect"
13
14
  :entityType="$props.entityType"
14
15
  :modelValue="actualSelecteds"
15
16
  :filters="$props.filters"
16
17
  @update:modelValue="actualSelecteds = $event"
17
- />
18
+ >
19
+ <template
20
+ v-for="(_, name) in $slots"
21
+ v-slot:[name]="slotData"
22
+ >
23
+ <slot
24
+ :name="name"
25
+ v-bind="slotData"
26
+ />
27
+ </template>
28
+ </FSSelectEntitiesList>
18
29
  </template>
19
30
  </FSDialogSubmit>
20
31
  </template>
@@ -33,7 +44,7 @@ export default defineComponent({
33
44
  FSSelectEntitiesList,
34
45
  FSDialogSubmit,
35
46
  },
36
- emits: ["update:modelValue", "update:selecteds"],
47
+ emits: ["update", "update:modelValue", "update:selecteds"],
37
48
  props: {
38
49
  entityType: {
39
50
  type: Number as PropType<EntityType>,
@@ -44,6 +55,11 @@ export default defineComponent({
44
55
  required: false,
45
56
  default: () => []
46
57
  },
58
+ singleSelect: {
59
+ type: Boolean,
60
+ required: false,
61
+ default: false
62
+ },
47
63
  filters: {
48
64
  type: Object,
49
65
  required: false,
@@ -61,6 +77,7 @@ export default defineComponent({
61
77
  const onSubmit = () => {
62
78
  emit("update:selecteds", actualSelecteds.value);
63
79
  emit("update:modelValue", false);
80
+ emit("update", { selecteds: actualSelecteds.value, modelValue: false });
64
81
  }
65
82
 
66
83
  watch(() => props.selecteds, (value) => {