@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.
- package/assets/images/map/snow.png +0 -0
- package/components/FSAccordionPanel.vue +40 -21
- package/components/FSBreadcrumbs.vue +21 -12
- package/components/FSButton.vue +16 -16
- package/components/FSCalendar.vue +50 -12
- package/components/FSCalendarTwin.vue +95 -43
- package/components/FSCard.vue +61 -9
- package/components/FSCardPlaceholder.vue +8 -5
- package/components/FSCheckbox.vue +5 -4
- package/components/FSChip.vue +73 -45
- package/components/FSChipGroup.vue +69 -0
- package/components/FSClickable.vue +11 -9
- package/components/FSClock.vue +30 -12
- package/components/FSCol.vue +11 -5
- 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 +50 -31
- package/components/FSDialogMenu.vue +17 -8
- package/components/FSDialogMultiFormBody.vue +79 -56
- package/components/FSDialogRemove.vue +7 -8
- package/components/FSDialogSubmit.vue +20 -11
- package/components/FSEditImage.vue +1 -1
- package/components/FSEditImageUI.vue +20 -10
- package/components/FSFadeOut.vue +53 -21
- package/components/FSForm.vue +10 -8
- package/components/FSGrid.vue +1 -1
- package/components/FSIcon.vue +4 -3
- package/components/FSIconCard.vue +68 -12
- package/components/FSImage.vue +9 -2
- package/components/FSImageUI.vue +8 -15
- package/components/FSInformationsMenu.vue +142 -0
- package/components/FSInstantPicker.vue +269 -0
- package/components/FSLink.vue +25 -9
- package/components/FSLoader.vue +28 -10
- package/components/FSMenu.vue +47 -0
- package/components/FSOptionGroup.vue +57 -9
- package/components/FSOptionItem.vue +4 -4
- package/components/FSPagination.vue +1 -1
- package/components/FSPlayButtons.vue +72 -0
- package/components/FSProgressBar.vue +94 -0
- package/components/FSRadio.vue +5 -4
- package/components/FSRadioGroup.vue +3 -3
- package/components/FSRouterLink.vue +42 -0
- package/components/FSSlideGroup.vue +19 -5
- package/components/FSSlider.vue +6 -5
- package/components/FSSpan.vue +12 -7
- package/components/FSSwitch.vue +47 -21
- package/components/FSTab.vue +15 -13
- package/components/FSTabs.vue +32 -7
- package/components/FSTag.vue +16 -5
- package/components/FSTagGroup.vue +4 -4
- package/components/FSText.vue +11 -7
- package/components/FSToggleSet.vue +7 -7
- package/components/FSWindow.vue +122 -5
- package/components/FSWrapGroup.vue +13 -1
- package/components/agenda/FSAgenda.vue +50 -37
- package/components/agenda/FSAgendaDialogCalendar.vue +2 -2
- package/components/agenda/FSAgendaHeader.vue +35 -10
- package/components/agenda/FSAgendaHorizontalEvent.vue +18 -6
- package/components/agenda/FSAgendaHoursRow.vue +48 -8
- package/components/agenda/FSAgendaVerticalEvent.vue +1 -1
- package/components/agenda/FSDayAgenda.vue +1 -2
- package/components/agenda/FSMonthAgenda.vue +3 -9
- package/components/agenda/FSSelectAgendaMode.vue +2 -2
- package/components/agenda/FSWeekAgenda.vue +7 -13
- package/components/autocompletes/FSAutoCompleteAddress.vue +25 -20
- package/components/autocompletes/FSAutocompleteLanguage.vue +7 -1
- package/components/autocompletes/FSAutocompleteTimeZone.vue +7 -1
- 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/FSButtonCheckbox.vue +4 -4
- package/components/buttons/FSButtonCopy.vue +1 -1
- package/components/buttons/FSButtonCopyLabel.vue +1 -1
- 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 +16 -4
- package/components/deviceOrganisations/FSConnectivityCard.vue +17 -45
- package/components/deviceOrganisations/FSStatus.vue +16 -4
- package/components/deviceOrganisations/FSStatusCard.vue +33 -59
- package/components/deviceOrganisations/FSStatusRichCard.vue +171 -0
- package/components/deviceOrganisations/FSStatusesCarousel.vue +1 -0
- package/components/deviceOrganisations/FSStatusesRow.vue +8 -2
- package/components/deviceOrganisations/FSWorstAlert.vue +37 -42
- package/components/deviceOrganisations/FSWorstAlertCard.vue +35 -84
- package/components/fields/FSAutocompleteField.vue +85 -82
- package/components/fields/FSAutocompleteTag.vue +1 -1
- package/components/fields/FSBaseField.vue +54 -30
- package/components/fields/FSClosableSearchField.vue +83 -0
- package/components/fields/FSColorField.vue +48 -44
- package/components/fields/FSCommentField.vue +28 -16
- package/components/fields/FSDateField.vue +13 -10
- package/components/fields/FSDateRangeField.vue +6 -5
- package/components/fields/FSDateTimeField.vue +14 -11
- package/components/fields/FSDateTimeRangeDialog.vue +160 -0
- package/components/fields/FSDateTimeRangeField.vue +23 -115
- package/components/fields/FSEntityFieldUI.vue +36 -19
- package/components/fields/FSGradientField.vue +5 -5
- package/components/fields/FSIconField.vue +16 -9
- package/components/fields/FSMagicConfigField.vue +15 -7
- package/components/fields/FSMagicField.vue +7 -2
- package/components/fields/FSNumberField.vue +9 -4
- package/components/fields/FSPasswordField.vue +7 -7
- package/components/fields/FSRichTextField.vue +78 -58
- package/components/fields/FSSearchField.vue +9 -115
- package/components/fields/FSSelectField.vue +69 -71
- package/components/fields/FSTagField.vue +10 -10
- package/components/fields/FSTermField.vue +72 -47
- package/components/fields/FSTextArea.vue +17 -11
- package/components/fields/FSTextField.vue +15 -10
- package/components/fields/FSTimeField.vue +14 -10
- package/components/fields/FSTimeRangeField.vue +310 -0
- package/components/fields/FSTimeStepField.vue +5 -5
- package/components/fields/FSTranslateField.vue +10 -10
- package/components/fields/FSTranslateRichTextField.vue +41 -20
- package/components/fields/FSTranslateTextArea.vue +10 -10
- package/components/fields/FSTreeViewField.vue +15 -13
- package/components/fields/periodicField/FSPeriodicDailyField.vue +7 -7
- package/components/fields/periodicField/FSPeriodicField.vue +15 -15
- package/components/fields/periodicField/FSPeriodicMonthlyField.vue +16 -16
- package/components/fields/periodicField/FSPeriodicWeeklyField.vue +28 -18
- package/components/fields/periodicField/FSPeriodicYearlyField.vue +12 -12
- package/components/lists/FSDataIteratorItem.vue +23 -67
- package/components/lists/FSDataTableUI.vue +220 -137
- package/components/lists/FSDraggable.vue +2 -2
- package/components/lists/FSFilterButton.vue +14 -16
- package/components/lists/FSHeaderButton.vue +11 -9
- package/components/lists/FSHiddenButton.vue +9 -9
- package/components/lists/FSLoadDataTable.vue +10 -7
- package/components/lists/FSSimpleList.vue +96 -102
- package/components/lists/FSSimpleListItem.vue +131 -0
- package/components/map/FSMap.vue +146 -158
- package/components/map/FSMapFeatureGroup.vue +7 -1
- package/components/map/FSMapLayerButton.vue +4 -3
- package/components/map/FSMapMarker.vue +70 -48
- package/components/map/FSMapMarkerClusterGroup.vue +32 -7
- package/components/map/FSMapOverlay.vue +44 -24
- package/components/map/FSMapPolygon.vue +16 -4
- package/components/map/FSMapTileLayer.vue +26 -9
- package/components/map/layers.ts +0 -0
- package/components/selects/FSSelectAutoRefresh.vue +8 -8
- package/components/selects/FSSelectDashboardVariableType.vue +4 -3
- package/components/selects/FSSelectDateSetting.vue +2 -2
- package/components/selects/FSSelectDays.vue +8 -8
- package/components/selects/FSSelectListMode.vue +2 -2
- package/components/selects/FSSelectMapLayer.vue +68 -0
- package/components/selects/FSSelectMonths.vue +13 -13
- 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/FSChartTileUI.vue +61 -52
- package/components/tiles/FSCommentTileUI.vue +38 -13
- package/components/tiles/FSDashboardOrganisationTypeTileUI.vue +14 -2
- package/components/tiles/FSDashboardShallowTileUI.vue +14 -2
- package/components/tiles/FSDeviceOrganisationTileUI.vue +6 -6
- package/components/tiles/FSGroupTileUI.vue +58 -110
- package/components/tiles/FSGroupingTileUI.vue +115 -0
- package/components/tiles/FSLoadTile.vue +16 -10
- package/components/tiles/FSLocationTileUI.vue +63 -55
- package/components/tiles/FSModelTileUI.vue +5 -46
- package/components/tiles/FSServiceAccountOrganisationTileUI.vue +0 -6
- package/components/tiles/FSSimpleTileUI.vue +34 -29
- package/components/tiles/FSTile.vue +46 -39
- package/components/tiles/FSUserOrganisationTileUI.vue +1 -7
- package/components/toggleSets/FSToggleSetPosition.vue +1 -1
- 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 +135 -0
- package/components/views/desktop/FSBaseDesktopView.vue +53 -0
- package/components/views/desktop/FSBaseEntityDesktopView.vue +211 -0
- package/components/views/mobile/FSBaseDefaultMobileView.vue +133 -0
- package/components/views/mobile/FSBaseEntityMobileView.vue +206 -0
- package/components/views/mobile/FSBaseMobileView.vue +53 -0
- package/composables/index.ts +1 -0
- package/composables/useAddress.ts +40 -8
- package/composables/useBreakpoints.ts +40 -4
- package/composables/useColors.ts +16 -7
- package/composables/useMagicFieldProvider.ts +1 -0
- package/composables/useMapLayers.ts +62 -0
- package/composables/useSlots.ts +2 -1
- package/models/colors.ts +2 -1
- package/models/deviceAlerts.ts +1 -0
- package/models/magicFields.ts +1 -0
- package/models/map.ts +12 -10
- package/models/rules.ts +6 -3
- package/models/tables.ts +5 -2
- package/models/variableNode.ts +8 -5
- package/package.json +5 -5
- package/styles/components/fs_agenda.scss +4 -0
- package/styles/components/fs_agenda_event.scss +1 -1
- package/styles/components/fs_agenda_hours_row.scss +0 -8
- package/styles/components/fs_autocomplete_field.scss +0 -13
- package/styles/components/fs_breadcrumbs.scss +18 -36
- package/styles/components/fs_button.scss +7 -5
- package/styles/components/fs_calendar.scss +1 -0
- package/styles/components/fs_card.scss +9 -0
- package/styles/components/fs_chip.scss +13 -7
- package/styles/components/fs_clickable.scss +16 -23
- package/styles/components/fs_clock.scss +0 -10
- package/styles/components/fs_col.scss +1 -1
- package/styles/components/fs_color_field.scss +1 -4
- package/styles/components/fs_data_table.scss +6 -9
- package/styles/components/fs_dialog.scss +4 -10
- package/styles/components/fs_dialog_menu.scss +4 -2
- package/styles/components/fs_draggable.scss +0 -5
- package/styles/components/fs_edit_image.scss +8 -0
- package/styles/components/fs_fade_out.scss +10 -2
- package/styles/components/fs_filter_button.scss +1 -6
- package/styles/components/fs_hidden_button.scss +2 -7
- package/styles/components/fs_image_card.scss +6 -4
- package/styles/components/fs_magic_config_field.scss +1 -2
- package/styles/components/fs_map.scss +57 -17
- package/styles/components/fs_meta_field.scss +3 -5
- package/styles/components/fs_option_group.scss +15 -5
- package/styles/components/fs_password_field.scss +4 -2
- package/styles/components/fs_progress_bar.scss +14 -0
- package/styles/components/fs_radio.scss +0 -11
- package/styles/components/fs_rich_text_field.scss +1 -10
- package/styles/components/fs_select_field.scss +4 -13
- package/styles/components/fs_slide_group.scss +7 -0
- package/styles/components/fs_span.scss +13 -5
- package/styles/components/fs_status_rich_card.scss +6 -0
- package/styles/components/fs_switch.scss +1 -0
- package/styles/components/fs_tabs.scss +19 -33
- package/styles/components/fs_tag.scss +8 -22
- package/styles/components/fs_text_area.scss +2 -21
- package/styles/components/fs_tile.scss +0 -19
- package/styles/components/fs_window.scss +3 -1
- package/styles/components/fs_wrap_group.scss +7 -0
- package/styles/components/index.scss +2 -6
- package/styles/globals/index.scss +1 -5
- package/styles/globals/overrides.scss +28 -61
- package/styles/globals/scrollbars.scss +8 -0
- package/styles/globals/text_fonts.scss +18 -66
- package/styles/globals/touchscreen.scss +2 -2
- package/tools/alertsTools.ts +87 -12
- package/tools/chartsTools.ts +143 -16
- package/tools/index.ts +3 -1
- package/tools/reportsTools.ts +38 -0
- package/tools/timeRangeTools.ts +125 -0
- package/utils/badge.ts +9 -5
- package/utils/filter.ts +7 -4
- package/utils/index.ts +1 -0
- package/utils/leafletMarkers.ts +4 -4
- package/utils/operations.ts +108 -0
- package/utils/sort.ts +2 -2
- package/utils/time.ts +16 -16
- package/components/fields/FSTimeSlotField.vue +0 -250
- 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_data_iterator_item.scss +0 -33
- package/styles/components/fs_icon_field.scss +0 -12
- package/styles/components/fs_search_field.scss +0 -3
- 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,66 +1,85 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<FSCol
|
|
3
3
|
gap="16px"
|
|
4
|
+
style="position: relative;"
|
|
4
5
|
>
|
|
5
6
|
<FSRow
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
v-if="$props.showSearch || (!isMobileSized && ($slots['prepend-toolbar'] || $slots['toolbar'] || $slots['append-toolbar'])) || (!$props.disableTable && !$props.disableIterator)"
|
|
8
|
+
align="top-left"
|
|
9
|
+
:wrap="isMobileSized ? false : true"
|
|
8
10
|
width="fill"
|
|
9
11
|
>
|
|
10
12
|
<slot
|
|
11
|
-
v-if="!
|
|
13
|
+
v-if="!isMobileSized"
|
|
12
14
|
name="prepend-toolbar"
|
|
13
15
|
/>
|
|
14
|
-
<
|
|
15
|
-
|
|
16
|
+
<FSRow
|
|
17
|
+
align="top-left"
|
|
16
18
|
>
|
|
17
|
-
<
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
<FSRow
|
|
20
|
+
v-if="$props.showSearch || filterableHeaders.length > 0 || $slots['append-toolbar']"
|
|
21
|
+
align="bottom-left"
|
|
22
|
+
>
|
|
23
|
+
<FSSearchField
|
|
24
|
+
:hideHeader="true"
|
|
25
|
+
v-model="innerSearch"
|
|
26
|
+
/>
|
|
27
|
+
<FSButton
|
|
28
|
+
v-if="filterableHeaders.length > 0"
|
|
29
|
+
prependIcon="mdi-filter-variant"
|
|
30
|
+
:variant="innerShowFilters ? 'full' : 'standard'"
|
|
31
|
+
@click="innerShowFilters = !innerShowFilters"
|
|
32
|
+
/>
|
|
33
|
+
<slot
|
|
34
|
+
v-if="!isMobileSized"
|
|
35
|
+
name="toolbar"
|
|
36
|
+
/>
|
|
37
|
+
</FSRow>
|
|
38
|
+
<slot
|
|
39
|
+
v-if="!isMobileSized"
|
|
40
|
+
name="append-toolbar"
|
|
27
41
|
/>
|
|
28
|
-
</
|
|
29
|
-
<slot
|
|
30
|
-
v-if="!isExtraSmall"
|
|
31
|
-
name="toolbar"
|
|
32
|
-
/>
|
|
42
|
+
</FSRow>
|
|
33
43
|
<template
|
|
34
|
-
v-if="!$props.disableTable && !$props.disableIterator"
|
|
44
|
+
v-if="(!$props.disableTable && !$props.disableIterator)"
|
|
35
45
|
>
|
|
36
|
-
<v-spacer />
|
|
37
46
|
<FSRow
|
|
38
|
-
align="
|
|
47
|
+
align="top-right"
|
|
48
|
+
width="hug"
|
|
49
|
+
:wrap="false"
|
|
39
50
|
>
|
|
40
51
|
<FSOptionGroup
|
|
52
|
+
v-if="!$props.disableTable && !$props.disableIterator"
|
|
41
53
|
:values="modeOptions"
|
|
42
54
|
:singleColor="true"
|
|
43
55
|
:required="true"
|
|
56
|
+
variant="slide"
|
|
44
57
|
v-model="innerMode"
|
|
45
58
|
/>
|
|
46
59
|
</FSRow>
|
|
47
60
|
</template>
|
|
48
61
|
</FSRow>
|
|
49
62
|
<FSRow
|
|
50
|
-
v-if="
|
|
63
|
+
v-if="isMobileSized && ($slots['prepend-toolbar'] || $slots['toolbar'] || $slots['append-toolbar'])"
|
|
51
64
|
>
|
|
52
|
-
<
|
|
65
|
+
<FSSlideGroup>
|
|
66
|
+
<slot
|
|
67
|
+
name="prepend-toolbar"
|
|
68
|
+
/>
|
|
53
69
|
<slot
|
|
54
70
|
name="toolbar"
|
|
55
71
|
/>
|
|
56
|
-
|
|
72
|
+
<slot
|
|
73
|
+
name="append-toolbar"
|
|
74
|
+
/>
|
|
75
|
+
</FSSlideGroup>
|
|
57
76
|
</FSRow>
|
|
58
77
|
<FSRow
|
|
59
78
|
v-if="showFiltersRow"
|
|
60
79
|
gap="16px"
|
|
61
80
|
>
|
|
62
81
|
<FSCol
|
|
63
|
-
v-if="
|
|
82
|
+
v-if="innerShowFilters && hasVisibleFilters"
|
|
64
83
|
width="hug"
|
|
65
84
|
>
|
|
66
85
|
<FSRow
|
|
@@ -94,12 +113,12 @@
|
|
|
94
113
|
gap="8px"
|
|
95
114
|
>
|
|
96
115
|
<FSChip
|
|
97
|
-
v-if="
|
|
116
|
+
v-if="innerShowFilters && resetable"
|
|
98
117
|
variant="standard"
|
|
99
|
-
:label="$tr('
|
|
118
|
+
:label="$tr('data-table.reset-filters', 'Reset')"
|
|
100
119
|
:height="['30px', '24px']"
|
|
101
120
|
:color="ColorEnum.Error"
|
|
102
|
-
:
|
|
121
|
+
:clickable="true"
|
|
103
122
|
@click="resetFilter"
|
|
104
123
|
/>
|
|
105
124
|
<FSHiddenButton
|
|
@@ -122,7 +141,7 @@
|
|
|
122
141
|
:headers="extraHeaders.concat(innerHeaders)"
|
|
123
142
|
:sortBy="innerSortBy ? [innerSortBy] : []"
|
|
124
143
|
:itemsPerPage="innerRowsPerPage"
|
|
125
|
-
:
|
|
144
|
+
:selectable="$props.selectable"
|
|
126
145
|
:hover="!$props.sortDraggable"
|
|
127
146
|
:itemValue="$props.itemValue"
|
|
128
147
|
:loading="$props.loading"
|
|
@@ -148,7 +167,7 @@
|
|
|
148
167
|
<FSText
|
|
149
168
|
font="text-overline"
|
|
150
169
|
>
|
|
151
|
-
{{ $tr("ui.data
|
|
170
|
+
{{ $tr("ui.common.no-data", "No data") }}
|
|
152
171
|
</FSText>
|
|
153
172
|
</template>
|
|
154
173
|
<template
|
|
@@ -245,7 +264,7 @@
|
|
|
245
264
|
width="hug"
|
|
246
265
|
>
|
|
247
266
|
<FSCheckbox
|
|
248
|
-
v-if="$props.
|
|
267
|
+
v-if="$props.selectable"
|
|
249
268
|
:modelValue="props.item.items.every((item) => $props.modelValue.includes(item.key))"
|
|
250
269
|
:indeterminate="$props.modelValue.some((id) => props.item.items.some((item) => item.key === id)) && !props.item.items.every((item) => $props.modelValue.includes(item.key))"
|
|
251
270
|
@update:modelValue="toggleSelectGroup(props.item)"
|
|
@@ -290,25 +309,29 @@
|
|
|
290
309
|
<slot
|
|
291
310
|
:name="`${header.slotName}-append`"
|
|
292
311
|
/>
|
|
293
|
-
<
|
|
294
|
-
|
|
295
|
-
:
|
|
312
|
+
<FSRow
|
|
313
|
+
align="center-right"
|
|
314
|
+
:wrap="false"
|
|
296
315
|
>
|
|
297
|
-
<
|
|
298
|
-
:
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
316
|
+
<slot
|
|
317
|
+
:name="`${header.slotName}-configuration`"
|
|
318
|
+
>
|
|
319
|
+
<FSHeaderButton
|
|
320
|
+
:first="index === 0"
|
|
321
|
+
:last="index === headersSlots.length - 1"
|
|
322
|
+
@update:hide="updateHeader(header, 'hidden', !header.hidden)"
|
|
323
|
+
@update:left="updateHeader(header, 'index', -1)"
|
|
324
|
+
@update:right="updateHeader(header, 'index', 1)"
|
|
325
|
+
/>
|
|
326
|
+
<FSButton
|
|
327
|
+
v-if="header.sortable"
|
|
328
|
+
variant="icon"
|
|
329
|
+
:color="sortColor(header, props)"
|
|
330
|
+
:icon="sortIcon(header, props)"
|
|
331
|
+
@click="toggleSort(header)"
|
|
332
|
+
/>
|
|
333
|
+
</slot>
|
|
334
|
+
</FSRow>
|
|
312
335
|
</FSRow>
|
|
313
336
|
</slot>
|
|
314
337
|
</template>
|
|
@@ -356,22 +379,23 @@
|
|
|
356
379
|
<FSText
|
|
357
380
|
font="text-button"
|
|
358
381
|
>
|
|
359
|
-
{{ $tr("
|
|
382
|
+
{{ $tr("data-table.all-selected-bold", "Warning:") }}
|
|
360
383
|
</FSText>
|
|
361
384
|
<FSText>
|
|
362
|
-
{{ $tr("
|
|
385
|
+
{{ $tr("data-table.all-selected-regular", "All elements selected") }}
|
|
363
386
|
</FSText>
|
|
364
387
|
</FSRow>
|
|
365
388
|
</template>
|
|
366
389
|
<template
|
|
367
390
|
v-else
|
|
368
391
|
>
|
|
369
|
-
<
|
|
370
|
-
|
|
371
|
-
|
|
392
|
+
<FSRow>
|
|
393
|
+
<FSText>
|
|
394
|
+
{{ $tr("data-table.some-selected", "{0} element(s) selected", $props.modelValue.length.toString()) }}
|
|
395
|
+
</FSText>
|
|
396
|
+
</FSRow>
|
|
372
397
|
</template>
|
|
373
398
|
</template>
|
|
374
|
-
<v-spacer />
|
|
375
399
|
<FSRow
|
|
376
400
|
align="center-right"
|
|
377
401
|
width="hug"
|
|
@@ -380,7 +404,7 @@
|
|
|
380
404
|
<FSText
|
|
381
405
|
font="text-overline"
|
|
382
406
|
>
|
|
383
|
-
{{ $tr("
|
|
407
|
+
{{ $tr("data-table.rows-per-page", "Rows per page") }}
|
|
384
408
|
</FSText>
|
|
385
409
|
<FSSelectField
|
|
386
410
|
class="fs-data-table-rows-per-page fs-small-input"
|
|
@@ -432,7 +456,7 @@
|
|
|
432
456
|
<FSText
|
|
433
457
|
font="text-overline"
|
|
434
458
|
>
|
|
435
|
-
{{ $tr("ui.data
|
|
459
|
+
{{ $tr("ui.common.no-data", "No data") }}
|
|
436
460
|
</FSText>
|
|
437
461
|
</template>
|
|
438
462
|
<template
|
|
@@ -446,7 +470,7 @@
|
|
|
446
470
|
v-for="(item, index) in items"
|
|
447
471
|
elementSelector=".fs-draggable-item"
|
|
448
472
|
:disabled="draggableDisabled"
|
|
449
|
-
:item="item"
|
|
473
|
+
:item="{ ...item, index }"
|
|
450
474
|
:key="index"
|
|
451
475
|
@update:dragend="(event, dragged) => onDragEnd(event, dragged, '.fs-data-iterator-container')"
|
|
452
476
|
@dragover="(event) => onDragOver(event, '.fs-draggable-item', '.fs-data-iterator-container')"
|
|
@@ -460,18 +484,20 @@
|
|
|
460
484
|
>
|
|
461
485
|
<FSDataIteratorItem
|
|
462
486
|
v-if="item.type === 'item'"
|
|
463
|
-
:
|
|
487
|
+
:leftColor="$props.rowColor ? $props.rowColor(item.raw) : null"
|
|
464
488
|
:headers="innerHeaders.filter(h => !$props.sneakyHeaders.includes(h.value))"
|
|
465
|
-
:
|
|
466
|
-
:
|
|
467
|
-
:
|
|
468
|
-
:
|
|
489
|
+
:selectable="$props.selectable"
|
|
490
|
+
:singleSelect="$props.singleSelect"
|
|
491
|
+
:to="$props.itemTo"
|
|
492
|
+
:bottomColor="$props.color"
|
|
469
493
|
:item="item.raw"
|
|
470
494
|
:key="index"
|
|
471
|
-
:modelValue="$props.modelValue
|
|
472
|
-
@update:modelValue="toggleSelect"
|
|
473
|
-
|
|
474
|
-
|
|
495
|
+
:modelValue="$props.modelValue?.includes(item.raw[$props.itemValue])"
|
|
496
|
+
@update:modelValue="toggleSelect(item.raw)"
|
|
497
|
+
v-bind="onClickLibrary.clickable ? {
|
|
498
|
+
onClick: (event) => onClickLibrary.mobile(event, item),
|
|
499
|
+
onAuxclick: (event) => onClickLibrary.mobile(event, item)
|
|
500
|
+
} : {}"
|
|
475
501
|
>
|
|
476
502
|
<template
|
|
477
503
|
#item.top="props"
|
|
@@ -530,22 +556,23 @@
|
|
|
530
556
|
<FSText
|
|
531
557
|
font="text-button"
|
|
532
558
|
>
|
|
533
|
-
{{ $tr("
|
|
559
|
+
{{ $tr("data-table.all-selected-bold", "Warning:") }}
|
|
534
560
|
</FSText>
|
|
535
561
|
<FSText>
|
|
536
|
-
{{ $tr("
|
|
562
|
+
{{ $tr("data-table.all-selected-regular", "All elements selected") }}
|
|
537
563
|
</FSText>
|
|
538
564
|
</FSRow>
|
|
539
565
|
</template>
|
|
540
566
|
<template
|
|
541
567
|
v-else
|
|
542
568
|
>
|
|
543
|
-
<
|
|
544
|
-
|
|
545
|
-
|
|
569
|
+
<FSRow>
|
|
570
|
+
<FSText>
|
|
571
|
+
{{ $tr("data-table.some-selected", "{0} element(s) selected", $props.modelValue.length.toString()) }}
|
|
572
|
+
</FSText>
|
|
573
|
+
</FSRow>
|
|
546
574
|
</template>
|
|
547
575
|
</template>
|
|
548
|
-
<v-spacer />
|
|
549
576
|
<FSRow
|
|
550
577
|
align="center-right"
|
|
551
578
|
:wrap="false"
|
|
@@ -553,7 +580,7 @@
|
|
|
553
580
|
<FSText
|
|
554
581
|
font="text-overline"
|
|
555
582
|
>
|
|
556
|
-
{{ $tr("
|
|
583
|
+
{{ $tr("data-table.rows-per-page", "Rows per page") }}
|
|
557
584
|
</FSText>
|
|
558
585
|
<FSRow
|
|
559
586
|
width="120px"
|
|
@@ -602,7 +629,7 @@
|
|
|
602
629
|
<FSText
|
|
603
630
|
font="text-overline"
|
|
604
631
|
>
|
|
605
|
-
{{ $tr("ui.data
|
|
632
|
+
{{ $tr("ui.common.no-data", "No data") }}
|
|
606
633
|
</FSText>
|
|
607
634
|
</template>
|
|
608
635
|
<template
|
|
@@ -617,7 +644,7 @@
|
|
|
617
644
|
v-for="(item, index) in items.filter((item) => item.type === 'item')"
|
|
618
645
|
elementSelector=".fs-draggable-item"
|
|
619
646
|
:disabled="draggableDisabled"
|
|
620
|
-
:item="item"
|
|
647
|
+
:item="{ ...item, index }"
|
|
621
648
|
:key="index"
|
|
622
649
|
@update:dragend="(event, dragged) => onDragEnd(event, dragged, '.fs-data-iterator-container')"
|
|
623
650
|
@dragover="(event) => onDragOver(event, '.fs-draggable-item', '.fs-data-iterator-container')"
|
|
@@ -630,18 +657,20 @@
|
|
|
630
657
|
v-bind="{ index, item: item.raw, toggleSelect }"
|
|
631
658
|
>
|
|
632
659
|
<FSDataIteratorItem
|
|
633
|
-
:
|
|
660
|
+
:leftColor="$props.rowColor ? $props.rowColor(item.raw) : null"
|
|
634
661
|
:headers="innerHeaders.filter(h => !$props.sneakyHeaders.includes(h.value))"
|
|
635
|
-
:
|
|
636
|
-
:
|
|
637
|
-
:
|
|
638
|
-
:
|
|
662
|
+
:selectable="$props.selectable"
|
|
663
|
+
:singleSelect="$props.singleSelect"
|
|
664
|
+
:to="$props.itemTo"
|
|
665
|
+
:bottomColor="$props.color"
|
|
639
666
|
:item="item.raw"
|
|
640
667
|
:key="index"
|
|
641
|
-
:modelValue="$props.modelValue
|
|
642
|
-
@update:modelValue="toggleSelect"
|
|
643
|
-
|
|
644
|
-
|
|
668
|
+
:modelValue="$props.modelValue?.includes(item.raw[$props.itemValue])"
|
|
669
|
+
@update:modelValue="toggleSelect(item.raw)"
|
|
670
|
+
v-bind="onClickLibrary.clickable ? {
|
|
671
|
+
onClick: (event) => onClickLibrary.mobile(event, item),
|
|
672
|
+
onAuxclick: (event) => onClickLibrary.mobile(event, item)
|
|
673
|
+
} : {}"
|
|
645
674
|
>
|
|
646
675
|
<template
|
|
647
676
|
#item.top="props"
|
|
@@ -684,7 +713,7 @@
|
|
|
684
713
|
<div
|
|
685
714
|
class="fs-data-table-intersection"
|
|
686
715
|
:id="elementId"
|
|
687
|
-
/>
|
|
716
|
+
/>
|
|
688
717
|
</FSCol>
|
|
689
718
|
</template>
|
|
690
719
|
|
|
@@ -695,6 +724,7 @@ import { useRouter } from "vue-router";
|
|
|
695
724
|
import { ColorEnum, type FSDataTableColumn, type FSDataTableFilter, type FSDataTableOrder, type FSToggle } from "@dative-gpi/foundation-shared-components/models";
|
|
696
725
|
import { useBreakpoints, useColors, useSlots } from "@dative-gpi/foundation-shared-components/composables";
|
|
697
726
|
import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
|
|
727
|
+
import { useRouting } from "@dative-gpi/foundation-shared-services/composables";
|
|
698
728
|
import { uuidv4 } from "@dative-gpi/bones-ui/tools/uuid"
|
|
699
729
|
|
|
700
730
|
import { alphanumericSort, containsSearchTerm, sizeToVar } from "../../utils";
|
|
@@ -745,6 +775,11 @@ export default defineComponent({
|
|
|
745
775
|
type: Array as PropType<FSDataTableColumn[]>,
|
|
746
776
|
required: true
|
|
747
777
|
},
|
|
778
|
+
showFilters: {
|
|
779
|
+
type: Boolean,
|
|
780
|
+
required: false,
|
|
781
|
+
default: false
|
|
782
|
+
},
|
|
748
783
|
filters: {
|
|
749
784
|
type: Object as PropType<{ [key: string]: FSDataTableFilter[] }>,
|
|
750
785
|
required: false,
|
|
@@ -804,7 +839,7 @@ export default defineComponent({
|
|
|
804
839
|
required: false,
|
|
805
840
|
default: ColorEnum.Primary
|
|
806
841
|
},
|
|
807
|
-
|
|
842
|
+
selectable: {
|
|
808
843
|
type: Boolean,
|
|
809
844
|
required: false,
|
|
810
845
|
default: true
|
|
@@ -814,6 +849,11 @@ export default defineComponent({
|
|
|
814
849
|
required: false,
|
|
815
850
|
default: true
|
|
816
851
|
},
|
|
852
|
+
noSearch: {
|
|
853
|
+
type: Boolean,
|
|
854
|
+
required: false,
|
|
855
|
+
default: false
|
|
856
|
+
},
|
|
817
857
|
singleSelect: {
|
|
818
858
|
type: Boolean,
|
|
819
859
|
required: false,
|
|
@@ -832,7 +872,7 @@ export default defineComponent({
|
|
|
832
872
|
mode: {
|
|
833
873
|
type: String as PropType<"table" | "iterator">,
|
|
834
874
|
required: false,
|
|
835
|
-
default: "
|
|
875
|
+
default: "table"
|
|
836
876
|
},
|
|
837
877
|
disableTable: {
|
|
838
878
|
type: Boolean,
|
|
@@ -880,9 +920,10 @@ export default defineComponent({
|
|
|
880
920
|
default: "12px"
|
|
881
921
|
},
|
|
882
922
|
},
|
|
883
|
-
emits: ["update:modelValue", "update:headers", "update:filters", "update:mode", "update:sortBy", "update:rowsPerPage", "update:page", "update:include", "update:items", "click:row"],
|
|
923
|
+
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"],
|
|
884
924
|
setup(props, { emit }) {
|
|
885
|
-
const { isExtraSmall } = useBreakpoints();
|
|
925
|
+
const { isExtraSmall, isMobileSized } = useBreakpoints();
|
|
926
|
+
const { handleRoutingEvent } = useRouting();
|
|
886
927
|
const { $tr } = useTranslationsProvider();
|
|
887
928
|
const { getColors } = useColors();
|
|
888
929
|
const router = useRouter();
|
|
@@ -894,9 +935,9 @@ export default defineComponent({
|
|
|
894
935
|
const innerSearch: Ref<string | null> = ref(null);
|
|
895
936
|
const innerRowsPerPage = ref(props.rowsPerPage);
|
|
896
937
|
const innerSortBy = ref(props.sortBy);
|
|
897
|
-
const innerMode = ref(props.mode);
|
|
938
|
+
const innerMode = ref(props.disableTable ? "iterator" : props.disableIterator ? "table" : props.mode);
|
|
898
939
|
const innerPage = ref(props.page);
|
|
899
|
-
const
|
|
940
|
+
const innerShowFilters = ref(props.showFilters);
|
|
900
941
|
const resetable = ref(false);
|
|
901
942
|
|
|
902
943
|
const intersectionObserver = ref<IntersectionObserver | null>(null);
|
|
@@ -913,11 +954,18 @@ export default defineComponent({
|
|
|
913
954
|
{ id: 5, label: "5" },
|
|
914
955
|
{ id: 10, label: "10" },
|
|
915
956
|
{ id: 30, label: "30" },
|
|
916
|
-
{ id: -1, label: $tr("ui.
|
|
957
|
+
{ id: -1, label: $tr("ui.common.all", "All") }
|
|
917
958
|
];
|
|
918
959
|
|
|
919
960
|
const showFiltersRow = computed((): boolean => {
|
|
920
|
-
|
|
961
|
+
switch (innerMode.value) {
|
|
962
|
+
case "iterator": {
|
|
963
|
+
return (props.showSearch && innerShowFilters.value && filterableHeaders.value.length > 0);
|
|
964
|
+
}
|
|
965
|
+
case "table": {
|
|
966
|
+
return (props.showSearch && innerShowFilters.value && filterableHeaders.value.length > 0) || hiddenHeaders.value.length > 0;
|
|
967
|
+
}
|
|
968
|
+
}
|
|
921
969
|
});
|
|
922
970
|
|
|
923
971
|
const hasVisibleFilters = computed((): boolean => {
|
|
@@ -925,11 +973,15 @@ export default defineComponent({
|
|
|
925
973
|
});
|
|
926
974
|
|
|
927
975
|
const showFiltersDivider = computed((): boolean => {
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
976
|
+
switch (innerMode.value) {
|
|
977
|
+
case "iterator": {
|
|
978
|
+
return resetable.value;
|
|
979
|
+
}
|
|
980
|
+
case "table": {
|
|
981
|
+
return resetable.value || (hiddenHeaders.value.length > 0 && hasVisibleFilters.value);
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
|
|
933
985
|
});
|
|
934
986
|
|
|
935
987
|
const innerSlots = computed((): { [label: string]: Slot<any> } => {
|
|
@@ -989,7 +1041,7 @@ export default defineComponent({
|
|
|
989
1041
|
width: "0%"
|
|
990
1042
|
});
|
|
991
1043
|
}
|
|
992
|
-
if (props.
|
|
1044
|
+
if (props.selectable) {
|
|
993
1045
|
extra.push({
|
|
994
1046
|
key: "data-table-select",
|
|
995
1047
|
width: "0%"
|
|
@@ -1020,20 +1072,27 @@ export default defineComponent({
|
|
|
1020
1072
|
});
|
|
1021
1073
|
|
|
1022
1074
|
const innerItems = computed((): any[] => {
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1075
|
+
// Select only the filters where a value is hidden, for others, accept all values
|
|
1076
|
+
const activeFilters: { [key: string]: FSDataTableFilter[] } = Object.keys(filters.value).reduce((acc, key) => {
|
|
1077
|
+
if (filters.value[key].some((filter) => filter.hidden)) {
|
|
1078
|
+
acc[key] = filters.value[key].filter((filter) => !filter.hidden);
|
|
1079
|
+
}
|
|
1080
|
+
return acc;
|
|
1081
|
+
}, {} as { [key: string]: FSDataTableFilter[] });
|
|
1082
|
+
|
|
1026
1083
|
if (props.items && props.items.length) {
|
|
1027
1084
|
const innerSearchFormatted = innerSearch.value ? innerSearch.value.toLowerCase() : null;
|
|
1028
1085
|
return props.items.filter((item) => {
|
|
1029
1086
|
if (props.selectedOnly && !props.modelValue.includes(item[props.itemValue])) {
|
|
1030
1087
|
return false;
|
|
1031
1088
|
}
|
|
1032
|
-
|
|
1033
|
-
|
|
1089
|
+
for (const property in activeFilters) {
|
|
1090
|
+
if (!activeFilters[property].some((filter) => filter.filter && filter.filter(filter.value, item[property], item))) {
|
|
1091
|
+
return false;
|
|
1092
|
+
}
|
|
1034
1093
|
}
|
|
1035
|
-
if (
|
|
1036
|
-
return
|
|
1094
|
+
if (!props.noSearch && innerSearchFormatted) {
|
|
1095
|
+
return containsSearchTerm(item, innerSearchFormatted);
|
|
1037
1096
|
}
|
|
1038
1097
|
return true;
|
|
1039
1098
|
});
|
|
@@ -1077,17 +1136,13 @@ export default defineComponent({
|
|
|
1077
1136
|
});
|
|
1078
1137
|
|
|
1079
1138
|
const onClickLibrary = computed((): { [key: string]: Function | boolean } => {
|
|
1139
|
+
console.log(props["onClick:row"]);
|
|
1080
1140
|
if (props["onClick:row"] || props.itemTo) {
|
|
1081
1141
|
return {
|
|
1082
1142
|
clickable: true,
|
|
1083
1143
|
row: (event: PointerEvent, row: any) => {
|
|
1084
1144
|
if (props.itemTo && router) {
|
|
1085
|
-
|
|
1086
|
-
window.open(router.resolve(props.itemTo(row.item)).href, "_blank");
|
|
1087
|
-
}
|
|
1088
|
-
else {
|
|
1089
|
-
router.push(props.itemTo(row.item));
|
|
1090
|
-
}
|
|
1145
|
+
handleRoutingEvent(event, props.itemTo(row.item), true);
|
|
1091
1146
|
}
|
|
1092
1147
|
else {
|
|
1093
1148
|
emit("click:row", row.item);
|
|
@@ -1212,39 +1267,52 @@ export default defineComponent({
|
|
|
1212
1267
|
const key = header.value!;
|
|
1213
1268
|
const currentFilters = filters.value[key];
|
|
1214
1269
|
|
|
1270
|
+
const getPath = (object: any, keys: string[]) => keys.reduce((acc, key) => acc[key] ?? null, object);
|
|
1271
|
+
|
|
1215
1272
|
let value: FSDataTableFilter[] = [];
|
|
1216
1273
|
|
|
1217
1274
|
if (header.fixedFilters) {
|
|
1218
1275
|
value = header.fixedFilters.map((ff): FSDataTableFilter => ({
|
|
1219
1276
|
hidden: currentFilters?.find((cf) => cf.value == (ff.value || null))?.hidden ?? false,
|
|
1220
1277
|
text: ff.text?.toString() ?? "—",
|
|
1221
|
-
value: ff.value
|
|
1222
|
-
filter: header.methodFilter ?? ((
|
|
1223
|
-
|
|
1224
|
-
|
|
1278
|
+
value: ff.value ?? null,
|
|
1279
|
+
filter: header.methodFilter ?? ((_, property, item) => {
|
|
1280
|
+
if (header.methodFilterRaw) {
|
|
1281
|
+
return header.methodFilterRaw(ff.value, item);
|
|
1282
|
+
}
|
|
1283
|
+
const flat = property = [property].flat();
|
|
1284
|
+
return (!ff.value && flat.length == 0) || flat.some(f => f == ff.value);
|
|
1225
1285
|
})
|
|
1226
1286
|
}));
|
|
1287
|
+
filterDictionary[key] = value;
|
|
1227
1288
|
}
|
|
1228
1289
|
else {
|
|
1229
1290
|
if (props.items && props.items.length) {
|
|
1230
1291
|
const mapToInnerValue = header.innerValue ? header.innerValue : (i: any) => i;
|
|
1231
|
-
const itemValues = props.items.flatMap((item) =>
|
|
1292
|
+
const itemValues = props.items.flatMap((item) => {
|
|
1293
|
+
return Array.isArray(getPath(item, key.split("."))) && getPath(item, key.split(".")).length == 0 ? undefined : getPath(item, key.split("."))
|
|
1294
|
+
}).map(mapToInnerValue);
|
|
1232
1295
|
const distinctValues = [...new Set(itemValues)];
|
|
1233
1296
|
|
|
1234
|
-
value = distinctValues.map((dv): FSDataTableFilter =>
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1297
|
+
value = distinctValues.map((dv): FSDataTableFilter => {
|
|
1298
|
+
return {
|
|
1299
|
+
hidden: currentFilters?.find((cf) => cf.value == (dv || null))?.hidden ?? false,
|
|
1300
|
+
text: dv?.toString() ?? "—",
|
|
1301
|
+
value: dv || null,
|
|
1302
|
+
filter: header.methodFilter ?? ((_, property, item) => {
|
|
1303
|
+
if (header.methodFilterRaw) {
|
|
1304
|
+
return header.methodFilterRaw(dv, item);
|
|
1305
|
+
}
|
|
1306
|
+
const flat = [property].flat().map(mapToInnerValue);
|
|
1307
|
+
return (!dv && flat.length == 0) || flat.some(f => f == dv);
|
|
1308
|
+
})
|
|
1309
|
+
}
|
|
1310
|
+
});
|
|
1243
1311
|
}
|
|
1312
|
+
filterDictionary[key] = value.sort((v1, v2) => {
|
|
1313
|
+
return v1.text.localeCompare(v2.text, undefined, { numeric: true });
|
|
1314
|
+
});
|
|
1244
1315
|
}
|
|
1245
|
-
filterDictionary[key] = value.sort((v1, v2) => {
|
|
1246
|
-
return v1.text.localeCompare(v2.text, undefined, { numeric: true });
|
|
1247
|
-
});
|
|
1248
1316
|
}
|
|
1249
1317
|
for (const [key, filters] of Object.entries(props.filters)) {
|
|
1250
1318
|
for (const filter of filters) {
|
|
@@ -1311,6 +1379,7 @@ export default defineComponent({
|
|
|
1311
1379
|
}, { threshold: [0.9] });
|
|
1312
1380
|
}
|
|
1313
1381
|
if (document.querySelector(`#${elementId}`)) {
|
|
1382
|
+
intersectionObserver.value.unobserve(document.querySelector(`#${elementId}`)!);
|
|
1314
1383
|
intersectionObserver.value.observe(document.querySelector(`#${elementId}`)!);
|
|
1315
1384
|
}
|
|
1316
1385
|
return;
|
|
@@ -1347,10 +1416,10 @@ export default defineComponent({
|
|
|
1347
1416
|
};
|
|
1348
1417
|
|
|
1349
1418
|
const resetRowIndex = (initialIndex: number, currentIndex: number, draggedElement: HTMLElement, tbodyElement: HTMLElement) => {
|
|
1350
|
-
if (initialIndex > currentIndex) {
|
|
1419
|
+
if (initialIndex > currentIndex && tbodyElement.children[initialIndex]) {
|
|
1351
1420
|
tbodyElement.children[initialIndex].insertAdjacentElement("afterend", draggedElement);
|
|
1352
1421
|
}
|
|
1353
|
-
else {
|
|
1422
|
+
else if(tbodyElement.children[initialIndex]) {
|
|
1354
1423
|
tbodyElement.children[initialIndex].insertAdjacentElement("beforebegin", draggedElement);
|
|
1355
1424
|
}
|
|
1356
1425
|
};
|
|
@@ -1466,8 +1535,17 @@ export default defineComponent({
|
|
|
1466
1535
|
}
|
|
1467
1536
|
});
|
|
1468
1537
|
|
|
1538
|
+
watch(() => props.showFilters, () => {
|
|
1539
|
+
innerShowFilters.value = props.showFilters;
|
|
1540
|
+
});
|
|
1541
|
+
|
|
1469
1542
|
watch(innerSearch, () => {
|
|
1470
1543
|
innerPage.value = 1;
|
|
1544
|
+
emit("update:search", innerSearch.value);
|
|
1545
|
+
});
|
|
1546
|
+
|
|
1547
|
+
watch(innerShowFilters, () => {
|
|
1548
|
+
emit("update:showFilters", innerShowFilters.value);
|
|
1471
1549
|
});
|
|
1472
1550
|
|
|
1473
1551
|
watch(filters, () => {
|
|
@@ -1475,6 +1553,10 @@ export default defineComponent({
|
|
|
1475
1553
|
.some((key) => filters.value[key].some((filter) => filter.hidden));
|
|
1476
1554
|
}, { deep: true });
|
|
1477
1555
|
|
|
1556
|
+
watch(size, () => {
|
|
1557
|
+
observeIntersection();
|
|
1558
|
+
});
|
|
1559
|
+
|
|
1478
1560
|
watch(innerMode, () => {
|
|
1479
1561
|
emit("update:mode", innerMode.value);
|
|
1480
1562
|
size.value = props.sizeIterator;
|
|
@@ -1499,13 +1581,14 @@ export default defineComponent({
|
|
|
1499
1581
|
|
|
1500
1582
|
watch(() => props.items, async () => {
|
|
1501
1583
|
computeFilters();
|
|
1584
|
+
observeIntersection();
|
|
1502
1585
|
if (innerPage.value !== 1) {
|
|
1503
1586
|
const formerPage = innerPage.value;
|
|
1504
1587
|
innerPage.value = 1;
|
|
1505
1588
|
await nextTick();
|
|
1506
1589
|
innerPage.value = formerPage;
|
|
1507
1590
|
}
|
|
1508
|
-
});
|
|
1591
|
+
}, { deep: true });
|
|
1509
1592
|
|
|
1510
1593
|
return {
|
|
1511
1594
|
ColorEnum,
|
|
@@ -1516,9 +1599,8 @@ export default defineComponent({
|
|
|
1516
1599
|
innerMode,
|
|
1517
1600
|
modeOptions,
|
|
1518
1601
|
innerPage,
|
|
1519
|
-
hasToolbar,
|
|
1520
1602
|
pageOptions,
|
|
1521
|
-
|
|
1603
|
+
innerShowFilters,
|
|
1522
1604
|
showFiltersRow,
|
|
1523
1605
|
showFiltersDivider,
|
|
1524
1606
|
hasVisibleFilters,
|
|
@@ -1535,6 +1617,7 @@ export default defineComponent({
|
|
|
1535
1617
|
classes,
|
|
1536
1618
|
style,
|
|
1537
1619
|
size,
|
|
1620
|
+
isMobileSized,
|
|
1538
1621
|
isExtraSmall,
|
|
1539
1622
|
draggableDisabled,
|
|
1540
1623
|
elementId,
|