@dative-gpi/foundation-shared-components 1.0.26 → 1.0.28-remove-deprecated2
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.
- package/components/FSBreadcrumbs.vue +1 -0
- package/components/FSButton.vue +10 -10
- package/components/FSCalendar.vue +52 -14
- package/components/FSCalendarTwin.vue +96 -40
- package/components/FSCard.vue +28 -7
- package/components/FSCardPlaceholder.vue +8 -5
- package/components/FSChip.vue +12 -2
- package/components/FSClickable.vue +20 -12
- package/components/FSClock.vue +16 -7
- package/components/FSColorIcon.vue +23 -5
- package/components/FSDialog.vue +2 -1
- package/components/FSDialogContent.vue +12 -11
- package/components/FSDialogForm.vue +22 -2
- package/components/FSDialogFormBody.vue +51 -32
- package/components/FSDialogMultiFormBody.vue +79 -56
- package/components/FSDialogRemove.vue +7 -7
- package/components/FSDialogSubmit.vue +20 -11
- package/components/FSEditImage.vue +1 -1
- package/components/FSEditImageUI.vue +20 -10
- package/components/FSFadeOut.vue +44 -18
- package/components/FSForm.vue +10 -8
- package/components/FSGrid.vue +1 -1
- package/components/FSIcon.vue +2 -1
- package/components/FSIconCard.vue +21 -4
- package/components/FSImage.vue +12 -4
- package/components/FSImageUI.vue +8 -15
- package/components/FSLink.vue +25 -9
- package/components/FSLoader.vue +28 -11
- package/components/FSOptionGroup.vue +51 -3
- package/components/FSRouterLink.vue +42 -0
- package/components/FSSlideGroup.vue +19 -5
- package/components/FSSpan.vue +9 -2
- package/components/FSSwitch.vue +57 -27
- package/components/FSTab.vue +15 -13
- package/components/FSTabs.vue +32 -7
- package/components/FSTag.vue +14 -3
- package/components/FSTagGroup.vue +1 -1
- package/components/FSText.vue +4 -2
- package/components/FSWindow.vue +128 -4
- package/components/FSWrapGroup.vue +13 -1
- package/components/agenda/FSAgenda.vue +223 -0
- package/components/agenda/FSAgendaDialogCalendar.vue +76 -0
- package/components/agenda/FSAgendaHeader.vue +215 -0
- package/components/agenda/FSAgendaHorizontalEvent.vue +174 -0
- package/components/agenda/FSAgendaHorizontalTimeLineMarker.vue +46 -0
- package/components/agenda/FSAgendaHoursCol.vue +103 -0
- package/components/agenda/FSAgendaHoursRow.vue +164 -0
- package/components/agenda/FSAgendaVerticalEvent.vue +160 -0
- package/components/agenda/FSAgendaVerticalTimeLineMarker.vue +46 -0
- package/components/agenda/FSDayAgenda.vue +199 -0
- package/components/agenda/FSMonthAgenda.vue +252 -0
- package/components/agenda/FSSelectAgendaMode.vue +54 -0
- package/components/agenda/FSWeekAgenda.vue +323 -0
- package/components/autocompletes/FSAutoCompleteAddress.vue +22 -20
- package/components/autocompletes/FSAutocompleteLanguage.vue +24 -39
- package/components/autocompletes/FSAutocompleteTimeZone.vue +26 -38
- package/components/buttons/FSButtonAdd.vue +1 -1
- package/components/buttons/FSButtonAddLabel.vue +1 -1
- package/components/buttons/FSButtonCancel.vue +1 -1
- package/components/buttons/FSButtonCancelLabel.vue +1 -1
- package/components/buttons/FSButtonCopy.vue +28 -0
- package/components/buttons/FSButtonCopyIcon.vue +28 -0
- package/components/buttons/FSButtonCopyLabel.vue +27 -0
- package/components/buttons/FSButtonCopyMini.vue +28 -0
- package/components/buttons/FSButtonDragIcon.vue +27 -0
- package/components/buttons/FSButtonDuplicate.vue +1 -1
- package/components/buttons/FSButtonDuplicateLabel.vue +1 -1
- package/components/buttons/FSButtonEdit.vue +1 -1
- package/components/buttons/FSButtonEditLabel.vue +1 -1
- package/components/buttons/FSButtonFile.vue +1 -1
- package/components/buttons/FSButtonFileLabel.vue +1 -1
- package/components/buttons/FSButtonNext.vue +1 -1
- package/components/buttons/FSButtonNextLabel.vue +1 -1
- package/components/buttons/FSButtonPrevious.vue +1 -1
- package/components/buttons/FSButtonPreviousLabel.vue +1 -1
- package/components/buttons/FSButtonRedo.vue +1 -1
- package/components/buttons/FSButtonRedoLabel.vue +1 -1
- package/components/buttons/FSButtonRemove.vue +1 -1
- package/components/buttons/FSButtonRemoveLabel.vue +1 -1
- package/components/buttons/FSButtonSave.vue +1 -1
- package/components/buttons/FSButtonSaveLabel.vue +1 -1
- package/components/buttons/FSButtonSearch.vue +1 -1
- package/components/buttons/FSButtonSearchLabel.vue +1 -1
- package/components/buttons/FSButtonUndo.vue +1 -1
- package/components/buttons/FSButtonUndoLabel.vue +1 -1
- package/components/buttons/FSButtonUpdate.vue +1 -1
- package/components/buttons/FSButtonUpdateLabel.vue +1 -1
- package/components/buttons/FSButtonValidate.vue +1 -1
- package/components/buttons/FSButtonValidateLabel.vue +1 -1
- package/components/calendar/FSSimpleCalendar.vue +145 -0
- package/components/calendar/FSSimpleCalendarHeader.vue +60 -0
- package/components/calendar/FSSimpleMonthSelector.vue +138 -0
- package/components/deviceOrganisations/FSConnectivity.vue +11 -1
- package/components/deviceOrganisations/FSConnectivityCard.vue +19 -47
- package/components/deviceOrganisations/FSStatus.vue +11 -1
- package/components/deviceOrganisations/FSStatusCard.vue +35 -61
- package/components/deviceOrganisations/FSStatusesCarousel.vue +1 -0
- package/components/deviceOrganisations/FSStatusesRow.vue +9 -3
- package/components/deviceOrganisations/FSWorstAlert.vue +30 -37
- package/components/deviceOrganisations/FSWorstAlertCard.vue +36 -85
- package/components/fields/FSAutocompleteField.vue +516 -341
- package/components/fields/FSAutocompleteTag.vue +100 -0
- package/components/fields/FSBaseField.vue +44 -27
- package/components/fields/FSColorField.vue +42 -39
- package/components/fields/FSCommentField.vue +105 -0
- package/components/fields/FSDateField.vue +2 -2
- package/components/fields/FSDateRangeField.vue +3 -2
- package/components/fields/FSDateTimeField.vue +4 -3
- package/components/fields/FSDateTimeRangeField.vue +8 -6
- package/components/fields/FSEntityFieldUI.vue +271 -0
- package/components/fields/FSGradientField.vue +27 -33
- package/components/fields/FSIconField.vue +0 -1
- package/components/fields/FSMagicConfigField.vue +34 -19
- package/components/fields/FSMagicField.vue +9 -4
- package/components/fields/FSNumberField.vue +13 -6
- package/components/fields/FSRichTextField.vue +102 -52
- package/components/fields/FSSearchField.vue +9 -115
- package/components/fields/FSSelectField.vue +489 -252
- package/components/fields/FSTagField.vue +1 -1
- package/components/fields/FSTermField.vue +33 -11
- package/components/fields/FSTextArea.vue +26 -7
- package/components/fields/FSTextField.vue +19 -10
- package/components/fields/FSTimeRangeField.vue +304 -0
- package/components/fields/FSTimeStepField.vue +3 -3
- package/components/fields/FSTranslateField.vue +4 -3
- package/components/fields/FSTranslateRichTextField.vue +15 -10
- package/components/fields/FSTranslateTextArea.vue +233 -0
- package/components/fields/FSTreeViewField.vue +3 -3
- package/components/fields/periodicField/FSPeriodicDailyField.vue +120 -0
- package/components/fields/periodicField/FSPeriodicField.vue +131 -0
- package/components/fields/periodicField/FSPeriodicMonthlyField.vue +222 -0
- package/components/fields/periodicField/FSPeriodicWeeklyField.vue +120 -0
- package/components/fields/periodicField/FSPeriodicYearlyField.vue +144 -0
- package/components/lists/FSDataTableUI.vue +148 -89
- package/components/lists/FSDraggable.vue +2 -2
- package/components/lists/FSFilterButton.vue +23 -28
- package/components/lists/FSHeaderButton.vue +4 -4
- package/components/lists/FSHiddenButton.vue +11 -15
- package/components/lists/FSLoadDataTable.vue +10 -7
- package/components/lists/FSSimpleList.vue +234 -0
- package/components/lists/FSSimpleListItem.vue +132 -0
- package/components/map/FSMap.vue +280 -399
- package/components/map/FSMapFeatureGroup.vue +51 -0
- package/components/map/FSMapLayerButton.vue +5 -5
- package/components/map/FSMapMarker.vue +120 -0
- package/components/map/FSMapMarkerClusterGroup.vue +72 -0
- package/components/map/FSMapOverlay.vue +70 -82
- package/components/map/FSMapPolygon.vue +81 -0
- package/components/map/FSMapTileLayer.vue +50 -0
- package/components/map/keys.ts +4 -0
- package/components/selects/FSSelectAutoRefresh.vue +9 -9
- package/components/selects/FSSelectDashboardVariableType.vue +5 -4
- package/components/selects/FSSelectDateSetting.vue +3 -2
- package/components/selects/FSSelectDays.vue +9 -9
- package/components/selects/FSSelectListMode.vue +51 -0
- package/components/selects/FSSelectMonths.vue +67 -0
- package/components/selects/chartSelectors/FSAggregationSelector.vue +52 -0
- package/components/selects/chartSelectors/FSAxisTypeSelector.vue +49 -0
- package/components/selects/chartSelectors/FSDisplayAsSelector.vue +53 -0
- package/components/selects/chartSelectors/FSFilterTypeSelector.vue +54 -0
- package/components/selects/chartSelectors/FSHeatmapRuleSelector.vue +54 -0
- package/components/selects/chartSelectors/FSOperationOnSelector.vue +53 -0
- package/components/selects/chartSelectors/FSPlanningTypeSelector.vue +53 -0
- package/components/selects/chartSelectors/FSPlotPerSelector.vue +52 -0
- package/components/selects/chartSelectors/FSSelectEntityType.vue +59 -0
- package/components/selects/chartSelectors/FSSerieTypeSelector.vue +53 -0
- package/components/tiles/FSAlertTileUI.vue +90 -0
- package/components/tiles/FSChartTile.vue +73 -0
- package/components/tiles/FSChartTileUI.vue +111 -0
- package/components/tiles/FSCommentTileUI.vue +174 -0
- package/components/tiles/FSDeviceOrganisationTileUI.vue +6 -0
- package/components/tiles/FSGroupTileUI.vue +2 -2
- package/components/tiles/FSLoadTile.vue +2 -0
- package/components/tiles/FSLocationTileUI.vue +192 -0
- package/components/tiles/FSModelTileUI.vue +18 -0
- package/components/tiles/FSSimpleTileUI.vue +9 -4
- package/components/tiles/FSTile.vue +93 -74
- package/components/tiles/FSUserOrganisationTileUI.vue +1 -1
- package/components/toggleSets/FSToggleSetPosition.vue +2 -2
- package/components/views/FSBaseView.vue +64 -0
- package/components/views/FSEntityView.vue +12 -140
- package/components/views/FSSimpleView.vue +29 -0
- package/components/views/desktop/FSBaseDefaultDesktopView.vue +134 -0
- package/components/views/desktop/FSBaseDesktopView.vue +53 -0
- package/components/views/desktop/FSBaseEntityDesktopView.vue +208 -0
- package/components/views/mobile/FSBaseDefaultMobileView.vue +132 -0
- package/components/views/mobile/FSBaseEntityMobileView.vue +198 -0
- package/components/views/mobile/FSBaseMobileView.vue +53 -0
- package/composables/useAddress.ts +2 -2
- package/composables/useBreakpoints.ts +39 -3
- package/composables/useColors.ts +3 -2
- package/composables/useMagicFieldProvider.ts +1 -0
- package/models/agenda.ts +9 -0
- package/models/deviceAlerts.ts +1 -1
- package/models/deviceConnectivities.ts +1 -1
- package/models/index.ts +1 -0
- package/models/magicFields.ts +1 -0
- package/models/map.ts +2 -2
- package/models/rules.ts +5 -5
- package/models/tables.ts +5 -2
- package/models/variableNode.ts +8 -5
- package/package.json +5 -5
- package/styles/components/fs_agenda.scss +36 -0
- package/styles/components/fs_agenda_event.scss +41 -0
- package/styles/components/fs_agenda_hours_col.scss +4 -0
- package/styles/components/fs_agenda_hours_row.scss +5 -0
- package/styles/components/fs_agenda_time_line_marker.scss +19 -0
- package/styles/components/fs_autocomplete_field.scss +0 -13
- package/styles/components/fs_breadcrumbs.scss +6 -12
- package/styles/components/fs_card.scss +0 -1
- package/styles/components/fs_clickable.scss +7 -14
- package/styles/components/fs_clock.scss +0 -10
- package/styles/components/fs_color_field.scss +1 -4
- package/styles/components/fs_data_table.scss +6 -9
- package/styles/components/fs_dialog.scss +7 -17
- package/styles/components/fs_edit_image.scss +8 -0
- package/styles/components/fs_fade_out.scss +11 -2
- package/styles/components/fs_filter_button.scss +1 -6
- package/styles/components/fs_gradient_field.scss +11 -11
- package/styles/components/fs_hidden_button.scss +2 -7
- package/styles/components/fs_image_card.scss +1 -1
- package/styles/components/fs_magic_config_field.scss +1 -2
- package/styles/components/fs_map.scss +36 -30
- package/styles/components/fs_meta_field.scss +3 -5
- package/styles/components/fs_option_group.scss +15 -5
- package/styles/components/fs_rich_text_field.scss +1 -9
- package/styles/components/fs_select_date_settings.scss +3 -0
- package/styles/components/fs_select_field.scss +0 -13
- package/styles/components/fs_slide_group.scss +7 -0
- package/styles/components/fs_span.scss +2 -1
- package/styles/components/fs_switch.scss +1 -0
- package/styles/components/fs_tabs.scss +10 -24
- package/styles/components/fs_tag.scss +3 -19
- package/styles/components/fs_text_area.scss +13 -17
- package/styles/components/fs_tile.scss +21 -15
- package/styles/components/fs_window.scss +7 -0
- package/styles/components/fs_wrap_group.scss +7 -0
- package/styles/components/index.scss +5 -5
- package/styles/globals/index.scss +1 -5
- package/styles/globals/overrides.scss +17 -57
- package/styles/globals/text_fonts.scss +18 -66
- package/tools/alertsTools.ts +69 -0
- package/tools/chartsTools.ts +427 -0
- package/tools/index.ts +3 -0
- package/tools/timeRangeTools.ts +125 -0
- package/utils/filter.ts +18 -0
- package/utils/index.ts +1 -0
- package/utils/leafletMarkers.ts +9 -3
- package/utils/sort.ts +2 -2
- package/utils/statuses.ts +1 -1
- package/utils/time.ts +17 -17
- package/components/autocompletes/FSAutocompleteTag.vue +0 -138
- package/components/fields/FSTimeSlotField.vue +0 -250
- package/components/map/FSMapEditPointAddressOverlay.vue +0 -164
- package/components/views/FSEntityHeader.vue +0 -350
- package/components/views/FSListHeader.vue +0 -83
- package/components/views/FSListView.vue +0 -83
- package/components/views/FSSkeletonView.vue +0 -100
- package/styles/components/fs_icon_field.scss +0 -12
- package/styles/components/fs_map_overlay.scss +0 -38
- package/styles/components/fs_tag_field.scss +0 -8
- package/styles/components/fs_time_field.scss +0 -12
- package/styles/components/fs_timeslot_field.scss +0 -12
- package/styles/globals/breakpoints.scss +0 -20
- package/styles/globals/fixes.scss +0 -5
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<FSCol
|
|
3
3
|
gap="16px"
|
|
4
|
+
style="position: relative;"
|
|
4
5
|
>
|
|
5
6
|
<FSRow
|
|
6
|
-
|
|
7
|
+
v-if="$props.showSearch || (!isExtraSmall && ($slots.prependToolbar || $slots.toolbar )) || (!$props.disableTable && !$props.disableIterator)"
|
|
8
|
+
align="bottom-left"
|
|
7
9
|
:wrap="isExtraSmall ? false : true"
|
|
8
10
|
width="fill"
|
|
9
11
|
>
|
|
@@ -15,16 +17,14 @@
|
|
|
15
17
|
v-if="$props.showSearch"
|
|
16
18
|
>
|
|
17
19
|
<FSSearchField
|
|
18
|
-
prependInnerIcon="mdi-magnify"
|
|
19
20
|
:hideHeader="true"
|
|
20
21
|
v-model="innerSearch"
|
|
21
22
|
/>
|
|
22
23
|
<FSButton
|
|
23
24
|
v-if="filterableHeaders.length > 0"
|
|
24
25
|
prependIcon="mdi-filter-variant"
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
@click="showFilters = !showFilters"
|
|
26
|
+
:variant="innerShowFilters ? 'full' : 'standard'"
|
|
27
|
+
@click="innerShowFilters = !innerShowFilters"
|
|
28
28
|
/>
|
|
29
29
|
</template>
|
|
30
30
|
<slot
|
|
@@ -34,7 +34,6 @@
|
|
|
34
34
|
<template
|
|
35
35
|
v-if="!$props.disableTable && !$props.disableIterator"
|
|
36
36
|
>
|
|
37
|
-
<v-spacer />
|
|
38
37
|
<FSRow
|
|
39
38
|
align="center-right"
|
|
40
39
|
>
|
|
@@ -42,6 +41,7 @@
|
|
|
42
41
|
:values="modeOptions"
|
|
43
42
|
:singleColor="true"
|
|
44
43
|
:required="true"
|
|
44
|
+
variant="slide"
|
|
45
45
|
v-model="innerMode"
|
|
46
46
|
/>
|
|
47
47
|
</FSRow>
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
gap="16px"
|
|
62
62
|
>
|
|
63
63
|
<FSCol
|
|
64
|
-
v-if="
|
|
64
|
+
v-if="innerShowFilters && hasVisibleFilters"
|
|
65
65
|
width="hug"
|
|
66
66
|
>
|
|
67
67
|
<FSRow
|
|
@@ -95,9 +95,9 @@
|
|
|
95
95
|
gap="8px"
|
|
96
96
|
>
|
|
97
97
|
<FSChip
|
|
98
|
-
v-if="
|
|
98
|
+
v-if="innerShowFilters && resetable"
|
|
99
99
|
variant="standard"
|
|
100
|
-
:label="$tr('
|
|
100
|
+
:label="$tr('data-table.reset-filters', 'Reset')"
|
|
101
101
|
:height="['30px', '24px']"
|
|
102
102
|
:color="ColorEnum.Error"
|
|
103
103
|
:editable="true"
|
|
@@ -149,7 +149,7 @@
|
|
|
149
149
|
<FSText
|
|
150
150
|
font="text-overline"
|
|
151
151
|
>
|
|
152
|
-
{{ $tr("ui.data
|
|
152
|
+
{{ $tr("ui.common.no-data", "No data") }}
|
|
153
153
|
</FSText>
|
|
154
154
|
</template>
|
|
155
155
|
<template
|
|
@@ -291,25 +291,29 @@
|
|
|
291
291
|
<slot
|
|
292
292
|
:name="`${header.slotName}-append`"
|
|
293
293
|
/>
|
|
294
|
-
<
|
|
295
|
-
|
|
296
|
-
:
|
|
294
|
+
<FSRow
|
|
295
|
+
align="center-right"
|
|
296
|
+
:wrap="false"
|
|
297
297
|
>
|
|
298
|
-
<
|
|
299
|
-
:
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
298
|
+
<slot
|
|
299
|
+
:name="`${header.slotName}-configuration`"
|
|
300
|
+
>
|
|
301
|
+
<FSHeaderButton
|
|
302
|
+
:first="index === 0"
|
|
303
|
+
:last="index === headersSlots.length - 1"
|
|
304
|
+
@update:hide="updateHeader(header, 'hidden', !header.hidden)"
|
|
305
|
+
@update:left="updateHeader(header, 'index', -1)"
|
|
306
|
+
@update:right="updateHeader(header, 'index', 1)"
|
|
307
|
+
/>
|
|
308
|
+
<FSButton
|
|
309
|
+
v-if="header.sortable"
|
|
310
|
+
variant="icon"
|
|
311
|
+
:color="sortColor(header, props)"
|
|
312
|
+
:icon="sortIcon(header, props)"
|
|
313
|
+
@click="toggleSort(header)"
|
|
314
|
+
/>
|
|
315
|
+
</slot>
|
|
316
|
+
</FSRow>
|
|
313
317
|
</FSRow>
|
|
314
318
|
</slot>
|
|
315
319
|
</template>
|
|
@@ -357,22 +361,23 @@
|
|
|
357
361
|
<FSText
|
|
358
362
|
font="text-button"
|
|
359
363
|
>
|
|
360
|
-
{{ $tr("
|
|
364
|
+
{{ $tr("data-table.all-selected-bold", "Warning:") }}
|
|
361
365
|
</FSText>
|
|
362
366
|
<FSText>
|
|
363
|
-
{{ $tr("
|
|
367
|
+
{{ $tr("data-table.all-selected-regular", "All elements selected") }}
|
|
364
368
|
</FSText>
|
|
365
369
|
</FSRow>
|
|
366
370
|
</template>
|
|
367
371
|
<template
|
|
368
372
|
v-else
|
|
369
373
|
>
|
|
370
|
-
<
|
|
371
|
-
|
|
372
|
-
|
|
374
|
+
<FSRow>
|
|
375
|
+
<FSText>
|
|
376
|
+
{{ $tr("data-table.some-selected", "{0} element(s) selected", $props.modelValue.length.toString()) }}
|
|
377
|
+
</FSText>
|
|
378
|
+
</FSRow>
|
|
373
379
|
</template>
|
|
374
380
|
</template>
|
|
375
|
-
<v-spacer />
|
|
376
381
|
<FSRow
|
|
377
382
|
align="center-right"
|
|
378
383
|
width="hug"
|
|
@@ -381,7 +386,7 @@
|
|
|
381
386
|
<FSText
|
|
382
387
|
font="text-overline"
|
|
383
388
|
>
|
|
384
|
-
{{ $tr("
|
|
389
|
+
{{ $tr("data-table.rows-per-page", "Rows per page") }}
|
|
385
390
|
</FSText>
|
|
386
391
|
<FSSelectField
|
|
387
392
|
class="fs-data-table-rows-per-page fs-small-input"
|
|
@@ -433,7 +438,7 @@
|
|
|
433
438
|
<FSText
|
|
434
439
|
font="text-overline"
|
|
435
440
|
>
|
|
436
|
-
{{ $tr("ui.data
|
|
441
|
+
{{ $tr("ui.common.no-data", "No data") }}
|
|
437
442
|
</FSText>
|
|
438
443
|
</template>
|
|
439
444
|
<template
|
|
@@ -447,7 +452,7 @@
|
|
|
447
452
|
v-for="(item, index) in items"
|
|
448
453
|
elementSelector=".fs-draggable-item"
|
|
449
454
|
:disabled="draggableDisabled"
|
|
450
|
-
:item="item"
|
|
455
|
+
:item="{ ...item, index }"
|
|
451
456
|
:key="index"
|
|
452
457
|
@update:dragend="(event, dragged) => onDragEnd(event, dragged, '.fs-data-iterator-container')"
|
|
453
458
|
@dragover="(event) => onDragOver(event, '.fs-draggable-item', '.fs-data-iterator-container')"
|
|
@@ -531,22 +536,23 @@
|
|
|
531
536
|
<FSText
|
|
532
537
|
font="text-button"
|
|
533
538
|
>
|
|
534
|
-
{{ $tr("
|
|
539
|
+
{{ $tr("data-table.all-selected-bold", "Warning:") }}
|
|
535
540
|
</FSText>
|
|
536
541
|
<FSText>
|
|
537
|
-
{{ $tr("
|
|
542
|
+
{{ $tr("data-table.all-selected-regular", "All elements selected") }}
|
|
538
543
|
</FSText>
|
|
539
544
|
</FSRow>
|
|
540
545
|
</template>
|
|
541
546
|
<template
|
|
542
547
|
v-else
|
|
543
548
|
>
|
|
544
|
-
<
|
|
545
|
-
|
|
546
|
-
|
|
549
|
+
<FSRow>
|
|
550
|
+
<FSText>
|
|
551
|
+
{{ $tr("data-table.some-selected", "{0} element(s) selected", $props.modelValue.length.toString()) }}
|
|
552
|
+
</FSText>
|
|
553
|
+
</FSRow>
|
|
547
554
|
</template>
|
|
548
555
|
</template>
|
|
549
|
-
<v-spacer />
|
|
550
556
|
<FSRow
|
|
551
557
|
align="center-right"
|
|
552
558
|
:wrap="false"
|
|
@@ -554,7 +560,7 @@
|
|
|
554
560
|
<FSText
|
|
555
561
|
font="text-overline"
|
|
556
562
|
>
|
|
557
|
-
{{ $tr("
|
|
563
|
+
{{ $tr("data-table.rows-per-page", "Rows per page") }}
|
|
558
564
|
</FSText>
|
|
559
565
|
<FSRow
|
|
560
566
|
width="120px"
|
|
@@ -603,7 +609,7 @@
|
|
|
603
609
|
<FSText
|
|
604
610
|
font="text-overline"
|
|
605
611
|
>
|
|
606
|
-
{{ $tr("ui.data
|
|
612
|
+
{{ $tr("ui.common.no-data", "No data") }}
|
|
607
613
|
</FSText>
|
|
608
614
|
</template>
|
|
609
615
|
<template
|
|
@@ -618,7 +624,7 @@
|
|
|
618
624
|
v-for="(item, index) in items.filter((item) => item.type === 'item')"
|
|
619
625
|
elementSelector=".fs-draggable-item"
|
|
620
626
|
:disabled="draggableDisabled"
|
|
621
|
-
:item="item"
|
|
627
|
+
:item="{ ...item, index }"
|
|
622
628
|
:key="index"
|
|
623
629
|
@update:dragend="(event, dragged) => onDragEnd(event, dragged, '.fs-data-iterator-container')"
|
|
624
630
|
@dragover="(event) => onDragOver(event, '.fs-draggable-item', '.fs-data-iterator-container')"
|
|
@@ -685,7 +691,7 @@
|
|
|
685
691
|
<div
|
|
686
692
|
class="fs-data-table-intersection"
|
|
687
693
|
:id="elementId"
|
|
688
|
-
/>
|
|
694
|
+
/>
|
|
689
695
|
</FSCol>
|
|
690
696
|
</template>
|
|
691
697
|
|
|
@@ -696,9 +702,10 @@ import { useRouter } from "vue-router";
|
|
|
696
702
|
import { ColorEnum, type FSDataTableColumn, type FSDataTableFilter, type FSDataTableOrder, type FSToggle } from "@dative-gpi/foundation-shared-components/models";
|
|
697
703
|
import { useBreakpoints, useColors, useSlots } from "@dative-gpi/foundation-shared-components/composables";
|
|
698
704
|
import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
|
|
705
|
+
import { useRouting } from "@dative-gpi/foundation-shared-services/composables";
|
|
699
706
|
import { uuidv4 } from "@dative-gpi/bones-ui/tools/uuid"
|
|
700
707
|
|
|
701
|
-
import { alphanumericSort, sizeToVar } from "../../utils";
|
|
708
|
+
import { alphanumericSort, containsSearchTerm, sizeToVar } from "../../utils";
|
|
702
709
|
|
|
703
710
|
import FSDataIteratorItem from "./FSDataIteratorItem.vue";
|
|
704
711
|
import FSSearchField from "../fields/FSSearchField.vue";
|
|
@@ -746,6 +753,11 @@ export default defineComponent({
|
|
|
746
753
|
type: Array as PropType<FSDataTableColumn[]>,
|
|
747
754
|
required: true
|
|
748
755
|
},
|
|
756
|
+
showFilters: {
|
|
757
|
+
type: Boolean,
|
|
758
|
+
required: false,
|
|
759
|
+
default: false
|
|
760
|
+
},
|
|
749
761
|
filters: {
|
|
750
762
|
type: Object as PropType<{ [key: string]: FSDataTableFilter[] }>,
|
|
751
763
|
required: false,
|
|
@@ -815,6 +827,11 @@ export default defineComponent({
|
|
|
815
827
|
required: false,
|
|
816
828
|
default: true
|
|
817
829
|
},
|
|
830
|
+
noSearch: {
|
|
831
|
+
type: Boolean,
|
|
832
|
+
required: false,
|
|
833
|
+
default: false
|
|
834
|
+
},
|
|
818
835
|
singleSelect: {
|
|
819
836
|
type: Boolean,
|
|
820
837
|
required: false,
|
|
@@ -881,8 +898,9 @@ export default defineComponent({
|
|
|
881
898
|
default: "12px"
|
|
882
899
|
},
|
|
883
900
|
},
|
|
884
|
-
emits: ["update:modelValue", "update:headers", "update:filters", "update:mode", "update:sortBy", "update:rowsPerPage", "update:page", "update:include", "update:items", "click:row"],
|
|
901
|
+
emits: ["update:modelValue", "update:headers", "update:search", "update:showFilters", "update:filters", "update:mode", "update:sortBy", "update:rowsPerPage", "update:page", "update:include", "update:items", "click:row"],
|
|
885
902
|
setup(props, { emit }) {
|
|
903
|
+
const { handleRoutingEvent } = useRouting();
|
|
886
904
|
const { isExtraSmall } = useBreakpoints();
|
|
887
905
|
const { $tr } = useTranslationsProvider();
|
|
888
906
|
const { getColors } = useColors();
|
|
@@ -895,9 +913,9 @@ export default defineComponent({
|
|
|
895
913
|
const innerSearch: Ref<string | null> = ref(null);
|
|
896
914
|
const innerRowsPerPage = ref(props.rowsPerPage);
|
|
897
915
|
const innerSortBy = ref(props.sortBy);
|
|
898
|
-
const innerMode = ref(props.mode);
|
|
916
|
+
const innerMode = ref(props.disableTable ? "iterator" : props.disableIterator ? "table" : props.mode);
|
|
899
917
|
const innerPage = ref(props.page);
|
|
900
|
-
const
|
|
918
|
+
const innerShowFilters = ref(props.showFilters);
|
|
901
919
|
const resetable = ref(false);
|
|
902
920
|
|
|
903
921
|
const intersectionObserver = ref<IntersectionObserver | null>(null);
|
|
@@ -906,19 +924,26 @@ export default defineComponent({
|
|
|
906
924
|
const elementId = `id${uuidv4()}`;
|
|
907
925
|
|
|
908
926
|
const modeOptions: FSToggle[] = [
|
|
909
|
-
{ id: "
|
|
910
|
-
{ id: "
|
|
927
|
+
{ id: "iterator", prependIcon: "mdi-view-grid-outline" },
|
|
928
|
+
{ id: "table", prependIcon: "mdi-format-list-bulleted" }
|
|
911
929
|
];
|
|
912
930
|
|
|
913
931
|
const rowsPerPageOptions: { id: number, label: string }[] = [
|
|
914
932
|
{ id: 5, label: "5" },
|
|
915
933
|
{ id: 10, label: "10" },
|
|
916
934
|
{ id: 30, label: "30" },
|
|
917
|
-
{ id: -1, label: $tr("ui.
|
|
935
|
+
{ id: -1, label: $tr("ui.common.all", "All") }
|
|
918
936
|
];
|
|
919
937
|
|
|
920
938
|
const showFiltersRow = computed((): boolean => {
|
|
921
|
-
|
|
939
|
+
switch (innerMode.value) {
|
|
940
|
+
case "iterator": {
|
|
941
|
+
return (props.showSearch && innerShowFilters.value && filterableHeaders.value.length > 0);
|
|
942
|
+
}
|
|
943
|
+
case "table": {
|
|
944
|
+
return (props.showSearch && innerShowFilters.value && filterableHeaders.value.length > 0) || hiddenHeaders.value.length > 0;
|
|
945
|
+
}
|
|
946
|
+
}
|
|
922
947
|
});
|
|
923
948
|
|
|
924
949
|
const hasVisibleFilters = computed((): boolean => {
|
|
@@ -926,7 +951,15 @@ export default defineComponent({
|
|
|
926
951
|
});
|
|
927
952
|
|
|
928
953
|
const showFiltersDivider = computed((): boolean => {
|
|
929
|
-
|
|
954
|
+
switch (innerMode.value) {
|
|
955
|
+
case "iterator": {
|
|
956
|
+
return resetable.value;
|
|
957
|
+
}
|
|
958
|
+
case "table": {
|
|
959
|
+
return resetable.value || (hiddenHeaders.value.length > 0 && hasVisibleFilters.value);
|
|
960
|
+
}
|
|
961
|
+
}
|
|
962
|
+
|
|
930
963
|
});
|
|
931
964
|
|
|
932
965
|
const hasToolbar = computed((): boolean => {
|
|
@@ -1021,21 +1054,24 @@ export default defineComponent({
|
|
|
1021
1054
|
});
|
|
1022
1055
|
|
|
1023
1056
|
const innerItems = computed((): any[] => {
|
|
1024
|
-
const activeFilters: { key: string
|
|
1025
|
-
|
|
1026
|
-
|
|
1057
|
+
const activeFilters: { [key: string]: FSDataTableFilter[] } = {};
|
|
1058
|
+
for (const property in filters.value) {
|
|
1059
|
+
activeFilters[property] = filters.value[property].filter((filter) => !filter.hidden);
|
|
1060
|
+
}
|
|
1061
|
+
|
|
1027
1062
|
if (props.items && props.items.length) {
|
|
1063
|
+
const innerSearchFormatted = innerSearch.value ? innerSearch.value.toLowerCase() : null;
|
|
1028
1064
|
return props.items.filter((item) => {
|
|
1029
1065
|
if (props.selectedOnly && !props.modelValue.includes(item[props.itemValue])) {
|
|
1030
1066
|
return false;
|
|
1031
1067
|
}
|
|
1032
|
-
|
|
1033
|
-
if (!
|
|
1068
|
+
for (const property in activeFilters) {
|
|
1069
|
+
if (!activeFilters[property].some((filter) => filter.filter && filter.filter(filter.value, item[property], item))) {
|
|
1034
1070
|
return false;
|
|
1035
1071
|
}
|
|
1036
1072
|
}
|
|
1037
|
-
if (
|
|
1038
|
-
return
|
|
1073
|
+
if (!props.noSearch && innerSearchFormatted) {
|
|
1074
|
+
return containsSearchTerm(item, innerSearchFormatted);
|
|
1039
1075
|
}
|
|
1040
1076
|
return true;
|
|
1041
1077
|
});
|
|
@@ -1084,12 +1120,7 @@ export default defineComponent({
|
|
|
1084
1120
|
clickable: true,
|
|
1085
1121
|
row: (event: PointerEvent, row: any) => {
|
|
1086
1122
|
if (props.itemTo && router) {
|
|
1087
|
-
|
|
1088
|
-
window.open(router.resolve(props.itemTo(row.item)).href, "_blank");
|
|
1089
|
-
}
|
|
1090
|
-
else {
|
|
1091
|
-
router.push(props.itemTo(row.item));
|
|
1092
|
-
}
|
|
1123
|
+
handleRoutingEvent(event, props.itemTo(row.item), true);
|
|
1093
1124
|
}
|
|
1094
1125
|
else {
|
|
1095
1126
|
emit("click:row", row.item);
|
|
@@ -1214,39 +1245,52 @@ export default defineComponent({
|
|
|
1214
1245
|
const key = header.value!;
|
|
1215
1246
|
const currentFilters = filters.value[key];
|
|
1216
1247
|
|
|
1248
|
+
const getPath = (object: any, keys: string[]) => keys.reduce((acc, key) => acc[key] ?? null, object);
|
|
1249
|
+
|
|
1217
1250
|
let value: FSDataTableFilter[] = [];
|
|
1218
1251
|
|
|
1219
1252
|
if (header.fixedFilters) {
|
|
1220
1253
|
value = header.fixedFilters.map((ff): FSDataTableFilter => ({
|
|
1221
1254
|
hidden: currentFilters?.find((cf) => cf.value == (ff.value || null))?.hidden ?? false,
|
|
1222
1255
|
text: ff.text?.toString() ?? "—",
|
|
1223
|
-
value: ff.value
|
|
1224
|
-
filter: header.methodFilter ?? ((
|
|
1225
|
-
|
|
1226
|
-
|
|
1256
|
+
value: ff.value ?? null,
|
|
1257
|
+
filter: header.methodFilter ?? ((_, property, item) => {
|
|
1258
|
+
if (header.methodFilterRaw) {
|
|
1259
|
+
return header.methodFilterRaw(ff.value, item);
|
|
1260
|
+
}
|
|
1261
|
+
const flat = property = [property].flat();
|
|
1262
|
+
return (!ff.value && flat.length == 0) || flat.some(f => f == ff.value);
|
|
1227
1263
|
})
|
|
1228
1264
|
}));
|
|
1265
|
+
filterDictionary[key] = value;
|
|
1229
1266
|
}
|
|
1230
1267
|
else {
|
|
1231
1268
|
if (props.items && props.items.length) {
|
|
1232
1269
|
const mapToInnerValue = header.innerValue ? header.innerValue : (i: any) => i;
|
|
1233
|
-
const itemValues = props.items.flatMap((item) =>
|
|
1270
|
+
const itemValues = props.items.flatMap((item) => {
|
|
1271
|
+
return Array.isArray(getPath(item, key.split("."))) && getPath(item, key.split(".")).length == 0 ? undefined : getPath(item, key.split("."))
|
|
1272
|
+
}).map(mapToInnerValue);
|
|
1234
1273
|
const distinctValues = [...new Set(itemValues)];
|
|
1235
1274
|
|
|
1236
|
-
value = distinctValues.map((dv): FSDataTableFilter =>
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1275
|
+
value = distinctValues.map((dv): FSDataTableFilter => {
|
|
1276
|
+
return {
|
|
1277
|
+
hidden: currentFilters?.find((cf) => cf.value == (dv || null))?.hidden ?? false,
|
|
1278
|
+
text: dv?.toString() ?? "—",
|
|
1279
|
+
value: dv || null,
|
|
1280
|
+
filter: header.methodFilter ?? ((_, property, item) => {
|
|
1281
|
+
if (header.methodFilterRaw) {
|
|
1282
|
+
return header.methodFilterRaw(dv, item);
|
|
1283
|
+
}
|
|
1284
|
+
const flat = [property].flat().map(mapToInnerValue);
|
|
1285
|
+
return (!dv && flat.length == 0) || flat.some(f => f == dv);
|
|
1286
|
+
})
|
|
1287
|
+
}
|
|
1288
|
+
});
|
|
1245
1289
|
}
|
|
1290
|
+
filterDictionary[key] = value.sort((v1, v2) => {
|
|
1291
|
+
return v1.text.localeCompare(v2.text, undefined, { numeric: true });
|
|
1292
|
+
});
|
|
1246
1293
|
}
|
|
1247
|
-
filterDictionary[key] = value.sort((v1, v2) => {
|
|
1248
|
-
return v1.text.localeCompare(v2.text, undefined, { numeric: true });
|
|
1249
|
-
});
|
|
1250
1294
|
}
|
|
1251
1295
|
for (const [key, filters] of Object.entries(props.filters)) {
|
|
1252
1296
|
for (const filter of filters) {
|
|
@@ -1313,6 +1357,7 @@ export default defineComponent({
|
|
|
1313
1357
|
}, { threshold: [0.9] });
|
|
1314
1358
|
}
|
|
1315
1359
|
if (document.querySelector(`#${elementId}`)) {
|
|
1360
|
+
intersectionObserver.value.unobserve(document.querySelector(`#${elementId}`)!);
|
|
1316
1361
|
intersectionObserver.value.observe(document.querySelector(`#${elementId}`)!);
|
|
1317
1362
|
}
|
|
1318
1363
|
return;
|
|
@@ -1349,10 +1394,10 @@ export default defineComponent({
|
|
|
1349
1394
|
};
|
|
1350
1395
|
|
|
1351
1396
|
const resetRowIndex = (initialIndex: number, currentIndex: number, draggedElement: HTMLElement, tbodyElement: HTMLElement) => {
|
|
1352
|
-
if (initialIndex > currentIndex) {
|
|
1397
|
+
if (initialIndex > currentIndex && tbodyElement.children[initialIndex]) {
|
|
1353
1398
|
tbodyElement.children[initialIndex].insertAdjacentElement("afterend", draggedElement);
|
|
1354
1399
|
}
|
|
1355
|
-
else {
|
|
1400
|
+
else if(tbodyElement.children[initialIndex]) {
|
|
1356
1401
|
tbodyElement.children[initialIndex].insertAdjacentElement("beforebegin", draggedElement);
|
|
1357
1402
|
}
|
|
1358
1403
|
};
|
|
@@ -1468,8 +1513,17 @@ export default defineComponent({
|
|
|
1468
1513
|
}
|
|
1469
1514
|
});
|
|
1470
1515
|
|
|
1516
|
+
watch(() => props.showFilters, () => {
|
|
1517
|
+
innerShowFilters.value = props.showFilters;
|
|
1518
|
+
});
|
|
1519
|
+
|
|
1471
1520
|
watch(innerSearch, () => {
|
|
1472
1521
|
innerPage.value = 1;
|
|
1522
|
+
emit("update:search", innerSearch.value);
|
|
1523
|
+
});
|
|
1524
|
+
|
|
1525
|
+
watch(innerShowFilters, () => {
|
|
1526
|
+
emit("update:showFilters", innerShowFilters.value);
|
|
1473
1527
|
});
|
|
1474
1528
|
|
|
1475
1529
|
watch(filters, () => {
|
|
@@ -1477,6 +1531,10 @@ export default defineComponent({
|
|
|
1477
1531
|
.some((key) => filters.value[key].some((filter) => filter.hidden));
|
|
1478
1532
|
}, { deep: true });
|
|
1479
1533
|
|
|
1534
|
+
watch(size, () => {
|
|
1535
|
+
observeIntersection();
|
|
1536
|
+
});
|
|
1537
|
+
|
|
1480
1538
|
watch(innerMode, () => {
|
|
1481
1539
|
emit("update:mode", innerMode.value);
|
|
1482
1540
|
size.value = props.sizeIterator;
|
|
@@ -1501,6 +1559,7 @@ export default defineComponent({
|
|
|
1501
1559
|
|
|
1502
1560
|
watch(() => props.items, async () => {
|
|
1503
1561
|
computeFilters();
|
|
1562
|
+
observeIntersection();
|
|
1504
1563
|
if (innerPage.value !== 1) {
|
|
1505
1564
|
const formerPage = innerPage.value;
|
|
1506
1565
|
innerPage.value = 1;
|
|
@@ -1520,7 +1579,7 @@ export default defineComponent({
|
|
|
1520
1579
|
innerPage,
|
|
1521
1580
|
hasToolbar,
|
|
1522
1581
|
pageOptions,
|
|
1523
|
-
|
|
1582
|
+
innerShowFilters,
|
|
1524
1583
|
showFiltersRow,
|
|
1525
1584
|
showFiltersDivider,
|
|
1526
1585
|
hasVisibleFilters,
|
|
@@ -74,7 +74,7 @@ export default defineComponent({
|
|
|
74
74
|
const dragged = (event.target as HTMLElement)?.closest(props.elementSelector) as HTMLElement;
|
|
75
75
|
dragged.classList.add("fs-draggable-dragging");
|
|
76
76
|
dragged.classList.add("fs-draggable-dragging-grabbegin");
|
|
77
|
-
dragged.dataset.initialIndex = props.item
|
|
77
|
+
dragged.dataset.initialIndex = props.item.index;
|
|
78
78
|
event.preventDefault();
|
|
79
79
|
}
|
|
80
80
|
}, mobileGrabThreshold);
|
|
@@ -171,7 +171,7 @@ export default defineComponent({
|
|
|
171
171
|
return;
|
|
172
172
|
}
|
|
173
173
|
const dragged = (event.target as HTMLElement)?.closest(props.elementSelector) as HTMLElement;
|
|
174
|
-
dragged.dataset.initialIndex = props.item
|
|
174
|
+
dragged.dataset.initialIndex = props.item.index;
|
|
175
175
|
event.dataTransfer?.setDragImage(dragged, 25, 25);
|
|
176
176
|
|
|
177
177
|
if (event.dataTransfer) {
|
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
#activator="{ props }"
|
|
8
8
|
>
|
|
9
9
|
<FSChip
|
|
10
|
+
prependIcon="mdi-filter-variant"
|
|
10
11
|
class="fs-filter-button"
|
|
11
12
|
variant="standard"
|
|
12
|
-
|
|
13
|
-
:height="[30, 24]"
|
|
13
|
+
:height="['30px', '24px']"
|
|
14
14
|
:color="ColorEnum.Dark"
|
|
15
15
|
:editable="true"
|
|
16
16
|
:label="label"
|
|
@@ -23,39 +23,35 @@
|
|
|
23
23
|
:border="false"
|
|
24
24
|
>
|
|
25
25
|
<FSCol
|
|
26
|
+
padding="20px"
|
|
26
27
|
gap="12px"
|
|
27
|
-
padding="16px 0 24px 16px"
|
|
28
28
|
>
|
|
29
29
|
<FSCol
|
|
30
30
|
gap="12px"
|
|
31
|
-
padding="0 16px 0 0"
|
|
32
31
|
>
|
|
33
32
|
<FSSpan
|
|
34
33
|
font="text-overline"
|
|
35
34
|
>
|
|
36
|
-
{{ $tr("ui.
|
|
35
|
+
{{ $tr("ui.common.filter", "Filter") }}
|
|
37
36
|
</FSSpan>
|
|
38
37
|
<FSChip
|
|
39
38
|
class="fs-filter-button-chip"
|
|
40
|
-
:
|
|
41
|
-
:
|
|
42
|
-
:color="$props.color"
|
|
39
|
+
:label="$tr('ui.common.all-values', 'All values')"
|
|
40
|
+
:height="['30px', '24px']"
|
|
43
41
|
:variant="getAllVariant()"
|
|
44
|
-
:
|
|
42
|
+
:color="$props.color"
|
|
43
|
+
:editable="true"
|
|
45
44
|
@click="onToggleAll"
|
|
46
45
|
/>
|
|
47
|
-
<FSDivider
|
|
48
|
-
padding="0 8px 0 0"
|
|
49
|
-
/>
|
|
46
|
+
<FSDivider />
|
|
50
47
|
<FSSearchField
|
|
48
|
+
:hideHeader="true"
|
|
51
49
|
class="fs-filter-button-search"
|
|
52
|
-
prependInnerIcon="mdi-magnify"
|
|
53
50
|
v-model="search"
|
|
54
51
|
/>
|
|
55
52
|
</FSCol>
|
|
56
53
|
<FSFadeOut
|
|
57
|
-
|
|
58
|
-
height="360px"
|
|
54
|
+
maxHeight="360px"
|
|
59
55
|
>
|
|
60
56
|
<FSCol
|
|
61
57
|
gap="6px"
|
|
@@ -63,12 +59,12 @@
|
|
|
63
59
|
<FSChip
|
|
64
60
|
v-for="(filter, index) in searchedFilters"
|
|
65
61
|
class="fs-filter-button-chip"
|
|
66
|
-
:height="[30, 24]"
|
|
67
|
-
:key="index"
|
|
68
|
-
:editable="true"
|
|
69
|
-
:label="filter.text"
|
|
70
|
-
:color="$props.color"
|
|
71
62
|
:variant="getVariant(filter)"
|
|
63
|
+
:height="['30px', '24px']"
|
|
64
|
+
:color="$props.color"
|
|
65
|
+
:label="filter.text"
|
|
66
|
+
:editable="true"
|
|
67
|
+
:key="index"
|
|
72
68
|
@click="() => onToggle(filter)"
|
|
73
69
|
>
|
|
74
70
|
<template
|
|
@@ -89,8 +85,7 @@
|
|
|
89
85
|
<script lang="ts">
|
|
90
86
|
import { computed, defineComponent, type PropType, ref } from "vue";
|
|
91
87
|
|
|
92
|
-
import type
|
|
93
|
-
import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
|
|
88
|
+
import { type ColorBase, ColorEnum, type FSDataTableColumn, type FSDataTableFilter } from "@dative-gpi/foundation-shared-components/models";
|
|
94
89
|
import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
|
|
95
90
|
|
|
96
91
|
import FSSearchField from "../fields/FSSearchField.vue";
|
|
@@ -141,10 +136,10 @@ export default defineComponent({
|
|
|
141
136
|
if (props.filters) {
|
|
142
137
|
const hidden = props.filters.filter(f => f.hidden).length;
|
|
143
138
|
if (hidden > 0) {
|
|
144
|
-
return $tr("
|
|
139
|
+
return $tr("filter-button.some-filters-visible", "{0}: {1} visible", props.header.text, (props.filters.length - hidden).toString());
|
|
145
140
|
}
|
|
146
141
|
}
|
|
147
|
-
return $tr("
|
|
142
|
+
return $tr("filter-button.all-filters-visible", "{0}: All visible", props.header.text);
|
|
148
143
|
}
|
|
149
144
|
return null;
|
|
150
145
|
});
|
|
@@ -195,15 +190,15 @@ export default defineComponent({
|
|
|
195
190
|
|
|
196
191
|
return {
|
|
197
192
|
searchedFilters,
|
|
193
|
+
singlePick,
|
|
198
194
|
ColorEnum,
|
|
199
195
|
expanded,
|
|
200
196
|
search,
|
|
201
197
|
label,
|
|
202
|
-
singlePick,
|
|
203
|
-
getVariant,
|
|
204
198
|
getAllVariant,
|
|
205
|
-
|
|
206
|
-
|
|
199
|
+
onToggleAll,
|
|
200
|
+
getVariant,
|
|
201
|
+
onToggle
|
|
207
202
|
};
|
|
208
203
|
}
|
|
209
204
|
});
|