@dative-gpi/foundation-shared-components 1.0.56 → 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 (297) hide show
  1. package/assets/images/map/snow.png +0 -0
  2. package/components/FSAccordionPanel.vue +40 -21
  3. package/components/FSBreadcrumbs.vue +21 -12
  4. package/components/FSButton.vue +16 -16
  5. package/components/FSCalendar.vue +50 -12
  6. package/components/FSCalendarTwin.vue +95 -43
  7. package/components/FSCard.vue +61 -9
  8. package/components/FSCardPlaceholder.vue +8 -5
  9. package/components/FSCheckbox.vue +5 -4
  10. package/components/FSChip.vue +73 -45
  11. package/components/FSChipGroup.vue +69 -0
  12. package/components/FSClickable.vue +11 -9
  13. package/components/FSClock.vue +30 -12
  14. package/components/FSCol.vue +11 -5
  15. package/components/FSColorIcon.vue +23 -5
  16. package/components/FSDialog.vue +2 -1
  17. package/components/FSDialogContent.vue +12 -11
  18. package/components/FSDialogForm.vue +22 -2
  19. package/components/FSDialogFormBody.vue +50 -31
  20. package/components/FSDialogMenu.vue +17 -8
  21. package/components/FSDialogMultiFormBody.vue +79 -56
  22. package/components/FSDialogRemove.vue +7 -8
  23. package/components/FSDialogSubmit.vue +20 -11
  24. package/components/FSEditImage.vue +1 -1
  25. package/components/FSEditImageUI.vue +20 -10
  26. package/components/FSFadeOut.vue +53 -21
  27. package/components/FSForm.vue +10 -8
  28. package/components/FSGrid.vue +1 -1
  29. package/components/FSIcon.vue +4 -3
  30. package/components/FSIconCard.vue +68 -12
  31. package/components/FSImage.vue +9 -2
  32. package/components/FSImageUI.vue +8 -15
  33. package/components/FSInformationsMenu.vue +142 -0
  34. package/components/FSInstantPicker.vue +269 -0
  35. package/components/FSLink.vue +25 -9
  36. package/components/FSLoader.vue +28 -10
  37. package/components/FSMenu.vue +47 -0
  38. package/components/FSOptionGroup.vue +57 -9
  39. package/components/FSOptionItem.vue +4 -4
  40. package/components/FSPagination.vue +1 -1
  41. package/components/FSPlayButtons.vue +72 -0
  42. package/components/FSProgressBar.vue +94 -0
  43. package/components/FSRadio.vue +5 -4
  44. package/components/FSRadioGroup.vue +3 -3
  45. package/components/FSRouterLink.vue +42 -0
  46. package/components/FSSlideGroup.vue +19 -5
  47. package/components/FSSlider.vue +6 -5
  48. package/components/FSSpan.vue +12 -7
  49. package/components/FSSwitch.vue +47 -21
  50. package/components/FSTab.vue +15 -13
  51. package/components/FSTabs.vue +32 -7
  52. package/components/FSTag.vue +16 -5
  53. package/components/FSTagGroup.vue +4 -4
  54. package/components/FSText.vue +11 -7
  55. package/components/FSToggleSet.vue +7 -7
  56. package/components/FSWindow.vue +122 -5
  57. package/components/FSWrapGroup.vue +13 -1
  58. package/components/agenda/FSAgenda.vue +50 -37
  59. package/components/agenda/FSAgendaDialogCalendar.vue +2 -2
  60. package/components/agenda/FSAgendaHeader.vue +35 -10
  61. package/components/agenda/FSAgendaHorizontalEvent.vue +18 -6
  62. package/components/agenda/FSAgendaHoursRow.vue +48 -8
  63. package/components/agenda/FSAgendaVerticalEvent.vue +1 -1
  64. package/components/agenda/FSDayAgenda.vue +1 -2
  65. package/components/agenda/FSMonthAgenda.vue +3 -9
  66. package/components/agenda/FSSelectAgendaMode.vue +2 -2
  67. package/components/agenda/FSWeekAgenda.vue +7 -13
  68. package/components/autocompletes/FSAutoCompleteAddress.vue +25 -20
  69. package/components/autocompletes/FSAutocompleteLanguage.vue +7 -1
  70. package/components/autocompletes/FSAutocompleteTimeZone.vue +7 -1
  71. package/components/buttons/FSButtonAdd.vue +1 -1
  72. package/components/buttons/FSButtonAddLabel.vue +1 -1
  73. package/components/buttons/FSButtonCancel.vue +1 -1
  74. package/components/buttons/FSButtonCancelLabel.vue +1 -1
  75. package/components/buttons/FSButtonCheckbox.vue +4 -4
  76. package/components/buttons/FSButtonCopy.vue +1 -1
  77. package/components/buttons/FSButtonCopyLabel.vue +1 -1
  78. package/components/buttons/FSButtonDuplicate.vue +1 -1
  79. package/components/buttons/FSButtonDuplicateLabel.vue +1 -1
  80. package/components/buttons/FSButtonEdit.vue +1 -1
  81. package/components/buttons/FSButtonEditLabel.vue +1 -1
  82. package/components/buttons/FSButtonFile.vue +1 -1
  83. package/components/buttons/FSButtonFileLabel.vue +1 -1
  84. package/components/buttons/FSButtonNext.vue +1 -1
  85. package/components/buttons/FSButtonNextLabel.vue +1 -1
  86. package/components/buttons/FSButtonPrevious.vue +1 -1
  87. package/components/buttons/FSButtonPreviousLabel.vue +1 -1
  88. package/components/buttons/FSButtonRedo.vue +1 -1
  89. package/components/buttons/FSButtonRedoLabel.vue +1 -1
  90. package/components/buttons/FSButtonRemove.vue +1 -1
  91. package/components/buttons/FSButtonRemoveLabel.vue +1 -1
  92. package/components/buttons/FSButtonSave.vue +1 -1
  93. package/components/buttons/FSButtonSaveLabel.vue +1 -1
  94. package/components/buttons/FSButtonSearch.vue +1 -1
  95. package/components/buttons/FSButtonSearchLabel.vue +1 -1
  96. package/components/buttons/FSButtonUndo.vue +1 -1
  97. package/components/buttons/FSButtonUndoLabel.vue +1 -1
  98. package/components/buttons/FSButtonUpdate.vue +1 -1
  99. package/components/buttons/FSButtonUpdateLabel.vue +1 -1
  100. package/components/buttons/FSButtonValidate.vue +1 -1
  101. package/components/buttons/FSButtonValidateLabel.vue +1 -1
  102. package/components/calendar/FSSimpleCalendar.vue +145 -0
  103. package/components/calendar/FSSimpleCalendarHeader.vue +60 -0
  104. package/components/calendar/FSSimpleMonthSelector.vue +138 -0
  105. package/components/deviceOrganisations/FSConnectivity.vue +16 -4
  106. package/components/deviceOrganisations/FSConnectivityCard.vue +17 -45
  107. package/components/deviceOrganisations/FSStatus.vue +16 -4
  108. package/components/deviceOrganisations/FSStatusCard.vue +33 -59
  109. package/components/deviceOrganisations/FSStatusRichCard.vue +171 -0
  110. package/components/deviceOrganisations/FSStatusesCarousel.vue +1 -0
  111. package/components/deviceOrganisations/FSStatusesRow.vue +8 -2
  112. package/components/deviceOrganisations/FSWorstAlert.vue +37 -42
  113. package/components/deviceOrganisations/FSWorstAlertCard.vue +35 -84
  114. package/components/fields/FSAutocompleteField.vue +85 -82
  115. package/components/fields/FSAutocompleteTag.vue +1 -1
  116. package/components/fields/FSBaseField.vue +54 -30
  117. package/components/fields/FSClosableSearchField.vue +83 -0
  118. package/components/fields/FSColorField.vue +48 -44
  119. package/components/fields/FSCommentField.vue +28 -16
  120. package/components/fields/FSDateField.vue +13 -10
  121. package/components/fields/FSDateRangeField.vue +6 -5
  122. package/components/fields/FSDateTimeField.vue +14 -11
  123. package/components/fields/FSDateTimeRangeDialog.vue +160 -0
  124. package/components/fields/FSDateTimeRangeField.vue +23 -115
  125. package/components/fields/FSEntityFieldUI.vue +36 -19
  126. package/components/fields/FSGradientField.vue +5 -5
  127. package/components/fields/FSIconField.vue +16 -9
  128. package/components/fields/FSMagicConfigField.vue +15 -7
  129. package/components/fields/FSMagicField.vue +7 -2
  130. package/components/fields/FSNumberField.vue +9 -4
  131. package/components/fields/FSPasswordField.vue +7 -7
  132. package/components/fields/FSRichTextField.vue +78 -58
  133. package/components/fields/FSSearchField.vue +9 -115
  134. package/components/fields/FSSelectField.vue +69 -71
  135. package/components/fields/FSTagField.vue +10 -10
  136. package/components/fields/FSTermField.vue +72 -47
  137. package/components/fields/FSTextArea.vue +17 -11
  138. package/components/fields/FSTextField.vue +15 -10
  139. package/components/fields/FSTimeField.vue +14 -10
  140. package/components/fields/FSTimeRangeField.vue +310 -0
  141. package/components/fields/FSTimeStepField.vue +5 -5
  142. package/components/fields/FSTranslateField.vue +10 -10
  143. package/components/fields/FSTranslateRichTextField.vue +41 -20
  144. package/components/fields/FSTranslateTextArea.vue +10 -10
  145. package/components/fields/FSTreeViewField.vue +15 -13
  146. package/components/fields/periodicField/FSPeriodicDailyField.vue +7 -7
  147. package/components/fields/periodicField/FSPeriodicField.vue +15 -15
  148. package/components/fields/periodicField/FSPeriodicMonthlyField.vue +16 -16
  149. package/components/fields/periodicField/FSPeriodicWeeklyField.vue +28 -18
  150. package/components/fields/periodicField/FSPeriodicYearlyField.vue +12 -12
  151. package/components/lists/FSDataIteratorItem.vue +23 -67
  152. package/components/lists/FSDataTableUI.vue +220 -137
  153. package/components/lists/FSDraggable.vue +2 -2
  154. package/components/lists/FSFilterButton.vue +14 -16
  155. package/components/lists/FSHeaderButton.vue +11 -9
  156. package/components/lists/FSHiddenButton.vue +9 -9
  157. package/components/lists/FSLoadDataTable.vue +10 -7
  158. package/components/lists/FSSimpleList.vue +96 -102
  159. package/components/lists/FSSimpleListItem.vue +131 -0
  160. package/components/map/FSMap.vue +146 -158
  161. package/components/map/FSMapFeatureGroup.vue +7 -1
  162. package/components/map/FSMapLayerButton.vue +4 -3
  163. package/components/map/FSMapMarker.vue +70 -48
  164. package/components/map/FSMapMarkerClusterGroup.vue +32 -7
  165. package/components/map/FSMapOverlay.vue +44 -24
  166. package/components/map/FSMapPolygon.vue +16 -4
  167. package/components/map/FSMapTileLayer.vue +26 -9
  168. package/components/map/layers.ts +0 -0
  169. package/components/selects/FSSelectAutoRefresh.vue +8 -8
  170. package/components/selects/FSSelectDashboardVariableType.vue +4 -3
  171. package/components/selects/FSSelectDateSetting.vue +2 -2
  172. package/components/selects/FSSelectDays.vue +8 -8
  173. package/components/selects/FSSelectListMode.vue +2 -2
  174. package/components/selects/FSSelectMapLayer.vue +68 -0
  175. package/components/selects/FSSelectMonths.vue +13 -13
  176. package/components/selects/chartSelectors/FSAggregationSelector.vue +52 -0
  177. package/components/selects/chartSelectors/FSAxisTypeSelector.vue +49 -0
  178. package/components/selects/chartSelectors/FSDisplayAsSelector.vue +53 -0
  179. package/components/selects/chartSelectors/FSFilterTypeSelector.vue +54 -0
  180. package/components/selects/chartSelectors/FSHeatmapRuleSelector.vue +54 -0
  181. package/components/selects/chartSelectors/FSOperationOnSelector.vue +53 -0
  182. package/components/selects/chartSelectors/FSPlanningTypeSelector.vue +53 -0
  183. package/components/selects/chartSelectors/FSPlotPerSelector.vue +52 -0
  184. package/components/selects/chartSelectors/FSSelectEntityType.vue +59 -0
  185. package/components/selects/chartSelectors/FSSerieTypeSelector.vue +53 -0
  186. package/components/tiles/FSAlertTileUI.vue +90 -0
  187. package/components/tiles/FSChartTileUI.vue +61 -52
  188. package/components/tiles/FSCommentTileUI.vue +38 -13
  189. package/components/tiles/FSDashboardOrganisationTypeTileUI.vue +14 -2
  190. package/components/tiles/FSDashboardShallowTileUI.vue +14 -2
  191. package/components/tiles/FSDeviceOrganisationTileUI.vue +6 -6
  192. package/components/tiles/FSGroupTileUI.vue +58 -110
  193. package/components/tiles/FSGroupingTileUI.vue +115 -0
  194. package/components/tiles/FSLoadTile.vue +16 -10
  195. package/components/tiles/FSLocationTileUI.vue +63 -55
  196. package/components/tiles/FSModelTileUI.vue +5 -46
  197. package/components/tiles/FSServiceAccountOrganisationTileUI.vue +0 -6
  198. package/components/tiles/FSSimpleTileUI.vue +34 -29
  199. package/components/tiles/FSTile.vue +46 -39
  200. package/components/tiles/FSUserOrganisationTileUI.vue +1 -7
  201. package/components/toggleSets/FSToggleSetPosition.vue +1 -1
  202. package/components/views/FSBaseView.vue +64 -0
  203. package/components/views/FSEntityView.vue +12 -140
  204. package/components/views/FSSimpleView.vue +29 -0
  205. package/components/views/desktop/FSBaseDefaultDesktopView.vue +135 -0
  206. package/components/views/desktop/FSBaseDesktopView.vue +53 -0
  207. package/components/views/desktop/FSBaseEntityDesktopView.vue +211 -0
  208. package/components/views/mobile/FSBaseDefaultMobileView.vue +133 -0
  209. package/components/views/mobile/FSBaseEntityMobileView.vue +206 -0
  210. package/components/views/mobile/FSBaseMobileView.vue +53 -0
  211. package/composables/index.ts +1 -0
  212. package/composables/useAddress.ts +40 -8
  213. package/composables/useBreakpoints.ts +40 -4
  214. package/composables/useColors.ts +16 -7
  215. package/composables/useMagicFieldProvider.ts +1 -0
  216. package/composables/useMapLayers.ts +62 -0
  217. package/composables/useSlots.ts +2 -1
  218. package/models/colors.ts +2 -1
  219. package/models/deviceAlerts.ts +1 -0
  220. package/models/magicFields.ts +1 -0
  221. package/models/map.ts +12 -10
  222. package/models/rules.ts +6 -3
  223. package/models/tables.ts +5 -2
  224. package/models/variableNode.ts +8 -5
  225. package/package.json +5 -5
  226. package/styles/components/fs_agenda.scss +4 -0
  227. package/styles/components/fs_agenda_event.scss +1 -1
  228. package/styles/components/fs_agenda_hours_row.scss +0 -8
  229. package/styles/components/fs_autocomplete_field.scss +0 -13
  230. package/styles/components/fs_breadcrumbs.scss +18 -36
  231. package/styles/components/fs_button.scss +7 -5
  232. package/styles/components/fs_calendar.scss +1 -0
  233. package/styles/components/fs_card.scss +9 -0
  234. package/styles/components/fs_chip.scss +13 -7
  235. package/styles/components/fs_clickable.scss +16 -23
  236. package/styles/components/fs_clock.scss +0 -10
  237. package/styles/components/fs_col.scss +1 -1
  238. package/styles/components/fs_color_field.scss +1 -4
  239. package/styles/components/fs_data_table.scss +6 -9
  240. package/styles/components/fs_dialog.scss +4 -10
  241. package/styles/components/fs_dialog_menu.scss +4 -2
  242. package/styles/components/fs_draggable.scss +0 -5
  243. package/styles/components/fs_edit_image.scss +8 -0
  244. package/styles/components/fs_fade_out.scss +10 -2
  245. package/styles/components/fs_filter_button.scss +1 -6
  246. package/styles/components/fs_hidden_button.scss +2 -7
  247. package/styles/components/fs_image_card.scss +6 -4
  248. package/styles/components/fs_magic_config_field.scss +1 -2
  249. package/styles/components/fs_map.scss +57 -17
  250. package/styles/components/fs_meta_field.scss +3 -5
  251. package/styles/components/fs_option_group.scss +15 -5
  252. package/styles/components/fs_password_field.scss +4 -2
  253. package/styles/components/fs_progress_bar.scss +14 -0
  254. package/styles/components/fs_radio.scss +0 -11
  255. package/styles/components/fs_rich_text_field.scss +1 -10
  256. package/styles/components/fs_select_field.scss +4 -13
  257. package/styles/components/fs_slide_group.scss +7 -0
  258. package/styles/components/fs_span.scss +13 -5
  259. package/styles/components/fs_status_rich_card.scss +6 -0
  260. package/styles/components/fs_switch.scss +1 -0
  261. package/styles/components/fs_tabs.scss +19 -33
  262. package/styles/components/fs_tag.scss +8 -22
  263. package/styles/components/fs_text_area.scss +2 -21
  264. package/styles/components/fs_tile.scss +0 -19
  265. package/styles/components/fs_window.scss +3 -1
  266. package/styles/components/fs_wrap_group.scss +7 -0
  267. package/styles/components/index.scss +2 -6
  268. package/styles/globals/index.scss +1 -5
  269. package/styles/globals/overrides.scss +28 -61
  270. package/styles/globals/scrollbars.scss +8 -0
  271. package/styles/globals/text_fonts.scss +18 -66
  272. package/styles/globals/touchscreen.scss +2 -2
  273. package/tools/alertsTools.ts +87 -12
  274. package/tools/chartsTools.ts +143 -16
  275. package/tools/index.ts +3 -1
  276. package/tools/reportsTools.ts +38 -0
  277. package/tools/timeRangeTools.ts +125 -0
  278. package/utils/badge.ts +9 -5
  279. package/utils/filter.ts +7 -4
  280. package/utils/index.ts +1 -0
  281. package/utils/leafletMarkers.ts +4 -4
  282. package/utils/operations.ts +108 -0
  283. package/utils/sort.ts +2 -2
  284. package/utils/time.ts +16 -16
  285. package/components/fields/FSTimeSlotField.vue +0 -250
  286. package/components/views/FSEntityHeader.vue +0 -350
  287. package/components/views/FSListHeader.vue +0 -83
  288. package/components/views/FSListView.vue +0 -83
  289. package/components/views/FSSkeletonView.vue +0 -100
  290. package/styles/components/fs_data_iterator_item.scss +0 -33
  291. package/styles/components/fs_icon_field.scss +0 -12
  292. package/styles/components/fs_search_field.scss +0 -3
  293. package/styles/components/fs_tag_field.scss +0 -8
  294. package/styles/components/fs_time_field.scss +0 -12
  295. package/styles/components/fs_timeslot_field.scss +0 -12
  296. package/styles/globals/breakpoints.scss +0 -20
  297. package/styles/globals/fixes.scss +0 -5
@@ -0,0 +1,160 @@
1
+ <template>
2
+ <FSDialogSubmit
3
+ :title="$props.label"
4
+ :submitButtonColor="$props.color"
5
+ :modelValue="$props.dialog"
6
+ :disabled="!valid"
7
+ @update:modelValue="$emit('cancel')"
8
+ @click:submitButton="onSubmit"
9
+ >
10
+ <template
11
+ #body
12
+ >
13
+ <FSCol>
14
+ <FSCalendarTwin
15
+ :color="$props.color"
16
+ v-model="innerDateRange"
17
+ />
18
+ <FSRow>
19
+ <FSCol>
20
+ <FSClock
21
+ :color="$props.color"
22
+ :date="innerDateLeft"
23
+ v-model="innerTimeLeft"
24
+ />
25
+ </FSCol>
26
+ <FSCol>
27
+ <FSClock
28
+ :color="$props.color"
29
+ :date="innerDateRight"
30
+ v-model="innerTimeRight"
31
+ />
32
+ </FSCol>
33
+ </FSRow>
34
+ </FSCol>
35
+ </template>
36
+ </FSDialogSubmit>
37
+ </template>
38
+
39
+ <script lang="ts">
40
+ import { computed, defineComponent, type PropType, ref, watch } from "vue";
41
+
42
+ import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
43
+ import { useAppTimeZone } from "@dative-gpi/foundation-shared-services/composables";
44
+
45
+ import FSDialogSubmit from "../FSDialogSubmit.vue";
46
+ import FSCalendarTwin from "../FSCalendarTwin.vue";
47
+ import FSClock from "../FSClock.vue";
48
+ import FSCol from "../FSCol.vue";
49
+ import FSRow from "../FSRow.vue";
50
+
51
+ export default defineComponent({
52
+ name: "FSDateTimeRangeDialog",
53
+ components: {
54
+ FSDialogSubmit,
55
+ FSCalendarTwin,
56
+ FSClock,
57
+ FSCol,
58
+ FSRow
59
+ },
60
+ props: {
61
+ label: {
62
+ type: String as PropType<string | null>,
63
+ required: false,
64
+ default: null
65
+ },
66
+ modelValue: {
67
+ type: Array as PropType<number[] | null>,
68
+ required: false,
69
+ default: () => null
70
+ },
71
+ color: {
72
+ type: String as PropType<ColorBase>,
73
+ required: false,
74
+ default: ColorEnum.Primary
75
+ },
76
+ dialog: {
77
+ type: Boolean,
78
+ required: false,
79
+ default: false
80
+ }
81
+ },
82
+ emits: ["update:modelValue", "cancel"],
83
+ setup(props, { emit }) {
84
+ const { getUserOffset } = useAppTimeZone();
85
+
86
+ const innerDateRange = ref<number[] | null>(null);
87
+ const innerTimeRight = ref(0);
88
+ const innerTimeLeft = ref(0);
89
+
90
+ const innerDateLeft = computed((): number | null => {
91
+ if (innerDateRange.value && Array.isArray(innerDateRange.value) && innerDateRange.value.length) {
92
+ return innerDateRange.value[0];
93
+ }
94
+ return null;
95
+ });
96
+
97
+ const innerDateRight= computed((): number | null => {
98
+ if (innerDateRange.value && Array.isArray(innerDateRange.value) && innerDateRange.value.length > 1) {
99
+ return innerDateRange.value[1];
100
+ }
101
+ return null;
102
+ });
103
+
104
+ const valid = computed((): boolean => {
105
+ return !!innerDateRange.value && Array.isArray(innerDateRange.value) && innerDateRange.value.length > 1 &&
106
+ innerDateRange.value[0] + innerTimeLeft.value < innerDateRange.value[1] + innerTimeRight.value;
107
+ });
108
+
109
+ const reset = (): void => {
110
+ if (props.modelValue && Array.isArray(props.modelValue)) {
111
+ // FSClock just gives two numbers without consideration for the time zone
112
+ // We must adjust the time to the user's time zone
113
+ switch (props.modelValue.length) {
114
+ case 0: {
115
+ break;
116
+ }
117
+ case 1: {
118
+ innerTimeLeft.value = Math.floor((props.modelValue[0] + getUserOffset(props.modelValue[0])) % (24 * 60 * 60 * 1000));
119
+ innerDateRange.value = [props.modelValue[0] - innerTimeLeft.value];
120
+ break;
121
+ }
122
+ default: {
123
+ innerTimeLeft.value = Math.floor((props.modelValue[0] + getUserOffset(props.modelValue[0])) % (24 * 60 * 60 * 1000));
124
+ innerTimeRight.value = Math.floor((props.modelValue[1] + getUserOffset(props.modelValue[1])) % (24 * 60 * 60 * 1000));
125
+ innerDateRange.value = [props.modelValue[0] - innerTimeLeft.value, props.modelValue[1] - innerTimeRight.value];
126
+ break;
127
+ }
128
+ }
129
+ }
130
+ else {
131
+ innerDateRange.value = null;
132
+ innerTimeLeft.value = 0;
133
+ innerTimeRight.value = 0;
134
+ }
135
+ };
136
+
137
+ watch(() => props.modelValue, () => {
138
+ reset();
139
+ }, { immediate: true });
140
+
141
+ const onSubmit = (): void => {
142
+ if (valid.value) {
143
+ emit("update:modelValue", [innerDateRange.value![0] + innerTimeLeft.value, innerDateRange.value![1] + innerTimeRight.value]);
144
+ return;
145
+ }
146
+ };
147
+
148
+ return {
149
+ valid,
150
+ innerDateLeft,
151
+ innerTimeLeft,
152
+ innerDateRight,
153
+ innerTimeRight,
154
+ innerDateRange,
155
+ ColorEnum,
156
+ onSubmit
157
+ };
158
+ }
159
+ });
160
+ </script>
@@ -6,7 +6,7 @@
6
6
  :color="$props.color"
7
7
  :hideHeader="$props.hideHeader"
8
8
  :required="$props.required"
9
- :editable="$props.editable"
9
+ :disabled="$props.disabled"
10
10
  :readonly="true"
11
11
  :rules="$props.rules"
12
12
  :messages="messages"
@@ -15,6 +15,7 @@
15
15
  :modelValue="toShortTimeFormat"
16
16
  @click="onClick"
17
17
  @update:modelValue="onClear"
18
+ v-bind="$attrs"
18
19
  >
19
20
  <template
20
21
  #prepend-inner
@@ -25,7 +26,7 @@
25
26
  <FSButton
26
27
  variant="icon"
27
28
  icon="mdi-calendar"
28
- :editable="$props.editable"
29
+ :disabled="$props.disabled"
29
30
  :color="ColorEnum.Dark"
30
31
  />
31
32
  </slot>
@@ -40,66 +41,34 @@
40
41
  />
41
42
  </template>
42
43
  </FSTextField>
43
- <FSDialogSubmit
44
+ <FSDateTimeRangeDialog
44
45
  :title="$props.label"
45
46
  :submitButtonColor="$props.color"
46
- @click:submitButton="onSubmit"
47
- v-model="dialog"
48
- >
49
- <template
50
- #body
51
- >
52
- <FSCol>
53
- <FSCalendarTwin
54
- :color="$props.color"
55
- v-model="innerDateRange"
56
- />
57
- <FSRow>
58
- <FSCol>
59
- <FSClock
60
- :color="$props.color"
61
- :date="innerDateLeft"
62
- v-model="innerTimeLeft"
63
- />
64
- </FSCol>
65
- <FSCol>
66
- <FSClock
67
- :color="$props.color"
68
- :date="innerDateRight"
69
- v-model="innerTimeRight"
70
- />
71
- </FSCol>
72
- </FSRow>
73
- </FSCol>
74
- </template>
75
- </FSDialogSubmit>
47
+ :dialog="dialog"
48
+ :modelValue="$props.modelValue"
49
+ :color="$props.color"
50
+ @cancel="dialog = false"
51
+ @update:modelValue="onSubmit($event)"
52
+ />
76
53
  </template>
77
54
 
78
55
  <script lang="ts">
79
- import { computed, defineComponent, type PropType, ref, watch } from "vue";
56
+ import { computed, defineComponent, type PropType, ref } from "vue";
80
57
 
81
58
  import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
82
- import { useAppTimeZone, useDateFormat } from "@dative-gpi/foundation-shared-services/composables";
59
+ import { useDateFormat } from "@dative-gpi/foundation-shared-services/composables";
83
60
  import { useRules } from "@dative-gpi/foundation-shared-components/composables";
84
61
 
85
- import FSDialogSubmit from "../FSDialogSubmit.vue";
86
- import FSCalendarTwin from "../FSCalendarTwin.vue";
62
+ import FSDateTimeRangeDialog from "./FSDateTimeRangeDialog.vue";
87
63
  import FSTextField from "./FSTextField.vue";
88
64
  import FSButton from "../FSButton.vue";
89
- import FSClock from "../FSClock.vue";
90
- import FSCol from "../FSCol.vue";
91
- import FSRow from "../FSRow.vue";
92
65
 
93
66
  export default defineComponent({
94
67
  name: "FSDateTimeRangeField",
95
68
  components: {
96
- FSDialogSubmit,
97
- FSCalendarTwin,
69
+ FSDateTimeRangeDialog,
98
70
  FSTextField,
99
- FSButton,
100
- FSClock,
101
- FSCol,
102
- FSRow
71
+ FSButton
103
72
  },
104
73
  props: {
105
74
  label: {
@@ -137,24 +106,19 @@ export default defineComponent({
137
106
  required: false,
138
107
  default: () => []
139
108
  },
140
- editable: {
109
+ disabled: {
141
110
  type: Boolean,
142
111
  required: false,
143
- default: true
112
+ default: false
144
113
  }
145
114
  },
146
115
  emits: ["update:modelValue"],
147
116
  setup(props, { emit }) {
148
- const { getUserOffset } = useAppTimeZone();
149
117
  const { epochToShortTimeFormat } = useDateFormat();
150
118
  const { validateOn, getMessages } = useRules();
151
119
 
152
120
  const dialog = ref(false);
153
121
 
154
- const innerDateRange = ref<number[] | null>(null);
155
- const innerTimeRight = ref(0);
156
- const innerTimeLeft = ref(0);
157
-
158
122
  const toShortTimeFormat = computed((): string => {
159
123
  if (!props.modelValue || !Array.isArray(props.modelValue) || !props.modelValue.length) {
160
124
  return "";
@@ -162,88 +126,32 @@ export default defineComponent({
162
126
  return props.modelValue.map((epoch) => epochToShortTimeFormat(epoch)).join(" - ");
163
127
  });
164
128
 
165
- const innerDateLeft = computed((): number | null => {
166
- if (innerDateRange.value && Array.isArray(innerDateRange.value) && innerDateRange.value.length) {
167
- return innerDateRange.value[0];
168
- }
169
- return null;
170
- });
171
-
172
- const innerDateRight= computed((): number | null => {
173
- if (innerDateRange.value && Array.isArray(innerDateRange.value) && innerDateRange.value.length > 1) {
174
- return innerDateRange.value[1];
175
- }
176
- return null;
177
- });
178
-
179
129
  const messages = computed((): string[] => getMessages(props.modelValue, props.rules, true));
180
130
 
181
131
  const onClick = (): void => {
182
- if (props.editable) {
132
+ if (!props.disabled) {
183
133
  dialog.value = true;
184
134
  }
185
135
  };
186
136
 
187
- const onClear = (): void => {
188
- emit("update:modelValue", null);
189
- innerTimeLeft.value = 0;
190
- innerTimeRight.value = 0;
191
- innerDateRange.value = null;
192
- };
193
-
194
- const onSubmit = (): void => {
195
- if (innerDateRange.value && Array.isArray(innerDateRange.value) && innerDateRange.value.length > 1) {
196
- emit("update:modelValue", [innerDateRange.value[0] + innerTimeLeft.value, innerDateRange.value[1] + innerTimeRight.value]);
197
- }
137
+ const onSubmit = (value: number[]): void => {
138
+ emit("update:modelValue", value);
198
139
  dialog.value = false;
199
140
  };
200
141
 
201
- const reset = (): void => {
202
- if (props.modelValue && Array.isArray(props.modelValue)) {
203
- // FSClock just gives two numbers without consideration for the time zone
204
- // We must adjust the time to the user's time zone
205
- switch (props.modelValue.length) {
206
- case 0: {
207
- break;
208
- }
209
- case 1: {
210
- innerTimeLeft.value = Math.floor((props.modelValue[0] + getUserOffset()) % (24 * 60 * 60 * 1000));
211
- innerDateRange.value = [props.modelValue[0] - innerTimeLeft.value];
212
- break;
213
- }
214
- default: {
215
- innerTimeLeft.value = Math.floor((props.modelValue[0] + getUserOffset()) % (24 * 60 * 60 * 1000));
216
- innerTimeRight.value = Math.floor((props.modelValue[1] + getUserOffset()) % (24 * 60 * 60 * 1000));
217
- innerDateRange.value = [props.modelValue[0] - innerTimeLeft.value, props.modelValue[1] - innerTimeRight.value];
218
- break;
219
- }
220
- }
221
- }
222
- else {
223
- innerDateRange.value = null;
224
- innerTimeLeft.value = 0;
225
- innerTimeRight.value = 0;
226
- }
142
+ const onClear = (): void => {
143
+ emit("update:modelValue", null);
227
144
  };
228
145
 
229
- watch(() => props.modelValue, () => {
230
- reset();
231
- }, { immediate: true });
232
-
233
146
  return {
234
147
  toShortTimeFormat,
235
- innerDateLeft,
236
- innerTimeLeft,
237
- innerDateRight,
238
- innerTimeRight,
239
- innerDateRange,
240
148
  validateOn,
241
149
  ColorEnum,
242
150
  messages,
243
151
  dialog,
244
152
  onSubmit,
245
153
  onClear,
246
- onClick
154
+ onClick,
247
155
  };
248
156
  }
249
157
  });
@@ -3,27 +3,31 @@
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="messages"
9
9
  >
10
10
  <FSCol
11
11
  gap="12px"
12
12
  >
13
- <FSRow>
13
+ <FSRow
14
+ :wrap="false"
15
+ >
14
16
  <FSSelectField
17
+ :disabled="$props.disabled"
18
+ :items="actualEntityTypes"
15
19
  :hideHeader="true"
20
+ :clearable="false"
16
21
  :modelValue="$props.entityType"
17
22
  @update:modelValue="$emit('update:entityType', $event)"
18
- :items="actualEntityTypes"
19
- :clearable="false"
20
23
  />
21
24
  <template
22
25
  v-if="itemsCount > 0"
23
26
  >
24
27
  <FSButton
25
- :label="$tr('ui.entity-field.edit', 'Edit')"
26
28
  icon="mdi-pencil"
29
+ :label="$tr('ui.common.edit', 'Edit')"
30
+ :disabled="$props.disabled"
27
31
  @click="$emit('click:select')"
28
32
  />
29
33
  </template>
@@ -31,13 +35,16 @@
31
35
  v-else
32
36
  >
33
37
  <FSButton
34
- :label="$tr('ui.entity-field.select', 'Select')"
35
38
  icon="mdi-plus-circle-multiple-outline"
39
+ :label="$tr('ui.common.select', 'Select')"
40
+ :disabled="$props.disabled"
36
41
  @click="$emit('click:select')"
37
42
  />
38
43
  </template>
39
44
  </FSRow>
40
- <FSRow>
45
+ <FSRow
46
+ v-if="$props.showCount"
47
+ >
41
48
  <template
42
49
  v-if="itemsCount > 0"
43
50
  >
@@ -56,7 +63,7 @@
56
63
  <FSSpan
57
64
  font="text-overline"
58
65
  >
59
- {{ $tr('ui.entity-field.selected', '{0} selected(s)', itemsCount) }}
66
+ {{ $tr('entity-field.selected', '{0} selected(s)', itemsCount) }}
60
67
  </FSSpan>
61
68
  </FSRow>
62
69
  </FSColor>
@@ -80,7 +87,7 @@
80
87
  <FSSpan
81
88
  font="text-overline"
82
89
  >
83
- {{ $tr('ui.entity-field.no-entity-selected', 'No entity selected') }}
90
+ {{ $tr('entity-field.no-entity-selected', 'No entity selected') }}
84
91
  </FSSpan>
85
92
  </FSRow>
86
93
  </FSColor>
@@ -89,7 +96,7 @@
89
96
 
90
97
  <FSFadeOut
91
98
  v-if="$props.showEntities && itemsCount > 0"
92
- maxHeight="220px"
99
+ :maxHeight="$props.listMaxHeight"
93
100
  width="100%"
94
101
  >
95
102
  <slot
@@ -163,10 +170,10 @@ export default defineComponent({
163
170
  required: false,
164
171
  default: null
165
172
  },
166
- editable: {
173
+ disabled: {
167
174
  type: Boolean,
168
175
  required: false,
169
- default: true
176
+ default: false
170
177
  },
171
178
  entityType: {
172
179
  type: Number as PropType<EntityType>,
@@ -181,6 +188,16 @@ export default defineComponent({
181
188
  type: Boolean,
182
189
  required: false,
183
190
  default: true
191
+ },
192
+ showCount: {
193
+ type: Boolean,
194
+ required: false,
195
+ default: true
196
+ },
197
+ listMaxHeight: {
198
+ type: String as PropType<string | null>,
199
+ required: false,
200
+ default: "220px"
184
201
  }
185
202
  },
186
203
  emits: ["update:entityType", "click:select"],
@@ -191,31 +208,31 @@ export default defineComponent({
191
208
  const items = [
192
209
  {
193
210
  id: EntityType.Model,
194
- label: $tr("ui.entity-type.models", "Models")
211
+ label: $tr("ui.common.models", "Model(s)")
195
212
  },
196
213
  {
197
214
  id: EntityType.Group,
198
- label: $tr("ui.entity-type.groups", "Groups")
215
+ label: $tr("ui.common.groups", "Groups")
199
216
  },
200
217
  {
201
218
  id: EntityType.Location,
202
- label: $tr("ui.entity-type.locations", "Locations")
219
+ label: $tr("ui.common.locations", "Locations")
203
220
  },
204
221
  {
205
222
  id: EntityType.Device,
206
- label: $tr("ui.entity-type.devices", "Devices")
223
+ label: $tr("ui.common.devices", "Devices")
207
224
  },
208
225
  {
209
226
  id: EntityType.User,
210
- label: $tr("ui.entity-type.users", "Users")
227
+ label: $tr("ui.common.users", "Users")
211
228
  },
212
229
  {
213
230
  id: EntityType.Dashboard,
214
- label: $tr("ui.entity-type.dashboards", "Dashboards")
231
+ label: $tr("ui.common.dashboards", "Dashboards")
215
232
  },
216
233
  {
217
234
  id: EntityType.Folder,
218
- label: $tr("ui.entity-type.folders", "Folders")
235
+ label: $tr("ui.common.folders", "Folders")
219
236
  }
220
237
  ];
221
238
 
@@ -6,7 +6,7 @@
6
6
  :label="$props.label"
7
7
  :description="$props.description"
8
8
  :required="$props.required"
9
- :editable="$props.editable"
9
+ :disabled="$props.disabled"
10
10
  v-bind="$attrs"
11
11
  >
12
12
  <FSRow>
@@ -15,14 +15,14 @@
15
15
  :allowOpacity="$props.allowOpacity"
16
16
  :modelValue="$props.modelValue[colorIndex - 1]"
17
17
  :required="$props.required"
18
- :editable="$props.editable"
18
+ :disabled="$props.disabled"
19
19
  :key="colorIndex"
20
20
  @update:modelValue="$emit('update:modelValue', $props.modelValue.map((color, i) => colorIndex === i + 1 ? $event : color))"
21
21
  />
22
22
  </FSRow>
23
23
  <FSSelectField
24
24
  class="fs-gradient-field-select"
25
- :editable="$props.editable"
25
+ :disabled="$props.disabled"
26
26
  :clearable="false"
27
27
  :items="items"
28
28
  modelValue="custom"
@@ -92,10 +92,10 @@ export default defineComponent({
92
92
  required: false,
93
93
  default: false
94
94
  },
95
- editable: {
95
+ disabled: {
96
96
  type: Boolean,
97
97
  required: false,
98
- default: true
98
+ default: false
99
99
  },
100
100
  allowOpacity: {
101
101
  type: Boolean,
@@ -1,15 +1,18 @@
1
1
  <template>
2
- <FSCol>
2
+ <FSCol
3
+ :maxWidth="$props.maxWidth"
4
+ >
3
5
  <FSTextField
4
6
  :label="$props.label"
5
7
  :description="$props.description"
6
8
  :hideHeader="$props.hideHeader"
7
9
  :required="$props.required"
8
- :editable="$props.editable"
10
+ :disabled="$props.disabled"
9
11
  :rules="$props.rules"
10
12
  :messages="messages"
11
13
  :validateOn="validateOn"
12
14
  :validationValue="$props.modelValue"
15
+ :maxWidth="null"
13
16
  v-model="innerValue"
14
17
  v-bind="$attrs"
15
18
  >
@@ -28,14 +31,13 @@
28
31
  </template>
29
32
  </FSTextField>
30
33
  <FSToggleSet
31
- class="fs-icon-field-set"
32
34
  ref="toggleSetRef"
33
35
  variant="slide"
34
36
  :buttonColor="$props.buttonColor"
35
37
  :activeColor="$props.activeColor"
36
38
  :modelValue="$props.modelValue"
37
39
  :required="$props.required"
38
- :editable="$props.editable"
40
+ :disabled="$props.disabled"
39
41
  :values="icons"
40
42
  @update:modelValue="$emit('update:modelValue', $event)"
41
43
  />
@@ -43,7 +45,7 @@
43
45
  </template>
44
46
 
45
47
  <script lang="ts">
46
- import type { PropType} from "vue";
48
+ import type { PropType, StyleValue } from "vue";
47
49
  import { computed, defineComponent, ref, watch } from "vue";
48
50
 
49
51
  import { Icons, sortByLevenshteinDistance } from "@dative-gpi/foundation-shared-components/utils";
@@ -120,11 +122,16 @@ export default defineComponent({
120
122
  required: false,
121
123
  default: () => []
122
124
  },
123
- editable: {
125
+ disabled: {
124
126
  type: Boolean,
125
127
  required: false,
126
- default: true
127
- }
128
+ default: false
129
+ },
130
+ maxWidth: {
131
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
132
+ required: false,
133
+ default: "600px"
134
+ },
128
135
  },
129
136
  emits: ["update:modelValue"],
130
137
  setup(props) {
@@ -139,7 +146,7 @@ export default defineComponent({
139
146
  const innerValue = ref<string | null>(null);
140
147
 
141
148
  const style = computed((): StyleValue => {
142
- if (!props.editable) {
149
+ if (props.disabled) {
143
150
  return {
144
151
  "--fs-icon-field-color": lights.dark
145
152
  };