@leaflink/stash 48.16.1 → 48.17.0
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/dist/Accordion.js +1 -1
- package/dist/Accordion.js.map +1 -1
- package/dist/Accordion.vue.d.ts +8 -9
- package/dist/ActionsDropdown.js.map +1 -1
- package/dist/ActionsDropdown.vue.d.ts +7 -8
- package/dist/AddressSelect.js +42 -38
- package/dist/AddressSelect.js.map +1 -1
- package/dist/AddressSelect.vue.d.ts +10 -11
- package/dist/Alert.js.map +1 -1
- package/dist/Alert.vue.d.ts +6 -7
- package/dist/AppNavigationItem.js +2 -2
- package/dist/AppNavigationItem.js.map +1 -1
- package/dist/AppNavigationItem.vue.d.ts +7 -8
- package/dist/AppSidebar.js +42 -42
- package/dist/AppSidebar.js.map +1 -1
- package/dist/AppSidebar.vue.d.ts +8 -9
- package/dist/AppTopbar.js +16 -16
- package/dist/AppTopbar.js.map +1 -1
- package/dist/AppTopbar.vue.d.ts +8 -9
- package/dist/Avatar.js.map +1 -1
- package/dist/Avatar.vue.d.ts +7 -8
- package/dist/Backdrop.vue.d.ts +3 -5
- package/dist/Badge.js +1 -1
- package/dist/Badge.js.map +1 -1
- package/dist/Badge.vue.d.ts +7 -8
- package/dist/Box.vue.d.ts +6 -7
- package/dist/Box.vue_vue_type_script_setup_true_lang-69e5176b.js.map +1 -1
- package/dist/Button.js.map +1 -1
- package/dist/Button.vue.d.ts +7 -8
- package/dist/ButtonGroup.js +29 -29
- package/dist/ButtonGroup.js.map +1 -1
- package/dist/ButtonGroup.vue.d.ts +8 -9
- package/dist/Card.js.map +1 -1
- package/dist/Card.vue.d.ts +6 -7
- package/dist/CardContent.vue.d.ts +3 -5
- package/dist/CardFooter.vue.d.ts +3 -5
- package/dist/CardHeader.js.map +1 -1
- package/dist/CardHeader.vue.d.ts +3 -4
- package/dist/CardMedia.js +6 -6
- package/dist/CardMedia.js.map +1 -1
- package/dist/CardMedia.vue.d.ts +3 -4
- package/dist/Carousel.js +249 -249
- package/dist/Carousel.js.map +1 -1
- package/dist/Carousel.vue.d.ts +9 -9
- package/dist/Checkbox.js +27 -27
- package/dist/Checkbox.js.map +1 -1
- package/dist/Checkbox.vue.d.ts +11 -12
- package/dist/ChevronToggle.js +1 -1
- package/dist/ChevronToggle.vue.d.ts +8 -9
- package/dist/{ChevronToggle.vue_vue_type_script_setup_true_lang-1591294c.js → ChevronToggle.vue_vue_type_script_setup_true_lang-fcdf0c19.js} +11 -11
- package/dist/{ChevronToggle.vue_vue_type_script_setup_true_lang-1591294c.js.map → ChevronToggle.vue_vue_type_script_setup_true_lang-fcdf0c19.js.map} +1 -1
- package/dist/Chip.js +30 -30
- package/dist/Chip.js.map +1 -1
- package/dist/Chip.vue.d.ts +9 -10
- package/dist/ConfirmationCodeInput.js +128 -105
- package/dist/ConfirmationCodeInput.js.map +1 -1
- package/dist/ConfirmationCodeInput.vue.d.ts +36 -11
- package/dist/ContextSwitcher.js +18 -18
- package/dist/ContextSwitcher.js.map +1 -1
- package/dist/ContextSwitcher.vue.d.ts +9 -10
- package/dist/Copy.js.map +1 -1
- package/dist/Copy.vue.d.ts +6 -7
- package/dist/CurrencyInput.js +93 -93
- package/dist/CurrencyInput.js.map +1 -1
- package/dist/CurrencyInput.vue.d.ts +10 -11
- package/dist/CustomRender.vue.d.ts +3 -15
- package/dist/DataView.js +97 -97
- package/dist/DataView.js.map +1 -1
- package/dist/DataView.vue.d.ts +9 -10
- package/dist/DataViewFilters.js +153 -150
- package/dist/DataViewFilters.js.map +1 -1
- package/dist/DataViewFilters.vue.d.ts +9 -10
- package/dist/DataViewSortButton.js.map +1 -1
- package/dist/DataViewSortButton.vue.d.ts +6 -7
- package/dist/DataViewToolbar.js +27 -27
- package/dist/DataViewToolbar.js.map +1 -1
- package/dist/DataViewToolbar.vue.d.ts +8 -9
- package/dist/DatePicker.js +738 -738
- package/dist/DatePicker.js.map +1 -1
- package/dist/DatePicker.vue.d.ts +11 -12
- package/dist/DescriptionList.js.map +1 -1
- package/dist/DescriptionList.vue.d.ts +6 -7
- package/dist/DescriptionListDetail.vue.d.ts +3 -5
- package/dist/DescriptionListGroup.vue.d.ts +3 -5
- package/dist/DescriptionListTerm.vue.d.ts +3 -5
- package/dist/Dialog.js +44 -44
- package/dist/Dialog.js.map +1 -1
- package/dist/Dialog.vue.d.ts +10 -11
- package/dist/Divider.vue.d.ts +3 -5
- package/dist/Dropdown.js +38 -38
- package/dist/Dropdown.js.map +1 -1
- package/dist/Dropdown.vue.d.ts +9 -10
- package/dist/EmptyState.js +20 -20
- package/dist/EmptyState.js.map +1 -1
- package/dist/EmptyState.vue.d.ts +6 -7
- package/dist/Expand.js +1 -1
- package/dist/Expand.vue.d.ts +8 -9
- package/dist/{Expand.vue_vue_type_script_setup_true_lang-1751f4a6.js → Expand.vue_vue_type_script_setup_true_lang-0f236267.js} +19 -19
- package/dist/Expand.vue_vue_type_script_setup_true_lang-0f236267.js.map +1 -0
- package/dist/Field.vue.d.ts +6 -7
- package/dist/Field.vue_vue_type_script_setup_true_lang-e1e4ff03.js.map +1 -1
- package/dist/FileUpload.js +65 -65
- package/dist/FileUpload.js.map +1 -1
- package/dist/FileUpload.vue.d.ts +10 -11
- package/dist/FilterChip.js +27 -27
- package/dist/FilterChip.js.map +1 -1
- package/dist/FilterChip.vue.d.ts +8 -9
- package/dist/FilterDrawerItem.js +26 -26
- package/dist/FilterDrawerItem.js.map +1 -1
- package/dist/FilterDrawerItem.vue.d.ts +5 -6
- package/dist/FilterDropdown.js +49 -49
- package/dist/FilterDropdown.js.map +1 -1
- package/dist/FilterDropdown.vue.d.ts +8 -9
- package/dist/FilterSelect.js +23 -23
- package/dist/FilterSelect.js.map +1 -1
- package/dist/FilterSelect.vue.d.ts +8 -9
- package/dist/Filters.js +112 -104
- package/dist/Filters.js.map +1 -1
- package/dist/Filters.vue.d.ts +2204 -65
- package/dist/HttpError.js +42 -42
- package/dist/HttpError.js.map +1 -1
- package/dist/HttpError.vue.d.ts +6 -7
- package/dist/Icon.js.map +1 -1
- package/dist/Icon.vue.d.ts +7 -8
- package/dist/IconLabel.js.map +1 -1
- package/dist/IconLabel.vue.d.ts +8 -9
- package/dist/Illustration.vue.d.ts +6 -7
- package/dist/Illustration.vue_vue_type_script_setup_true_lang-e26c3841.js.map +1 -1
- package/dist/Image.js +47 -47
- package/dist/Image.js.map +1 -1
- package/dist/Image.vue.d.ts +6 -7
- package/dist/InlineEdit.js +34 -34
- package/dist/InlineEdit.js.map +1 -1
- package/dist/InlineEdit.vue.d.ts +9 -10
- package/dist/Input.js +35 -35
- package/dist/Input.js.map +1 -1
- package/dist/Input.vue.d.ts +13 -14
- package/dist/InputOptions.js +33 -33
- package/dist/InputOptions.js.map +1 -1
- package/dist/InputOptions.vue.d.ts +8 -9
- package/dist/IntegrationIcon.js.map +1 -1
- package/dist/IntegrationIcon.vue.d.ts +7 -8
- package/dist/Label.vue.d.ts +6 -7
- package/dist/Label.vue_vue_type_script_setup_true_lang-4b02087f.js.map +1 -1
- package/dist/LicenseChip.js.map +1 -1
- package/dist/LicenseChip.vue.d.ts +6 -7
- package/dist/ListItem.vue.d.ts +225 -95
- package/dist/ListItemCell.vue.d.ts +4 -16
- package/dist/ListView.js +1 -1
- package/dist/ListView.vue.d.ts +5072 -470
- package/dist/Loading.js +16 -16
- package/dist/Loading.js.map +1 -1
- package/dist/Loading.vue.d.ts +3 -5
- package/dist/Logo.js +1 -1
- package/dist/Logo.vue.d.ts +9 -10
- package/dist/Logo.vue_vue_type_script_setup_true_lang-2a2597cb.js +196 -0
- package/dist/Logo.vue_vue_type_script_setup_true_lang-2a2597cb.js.map +1 -0
- package/dist/Menu.vue.d.ts +3 -5
- package/dist/MenuItem.vue.d.ts +3 -5
- package/dist/Metric.js.map +1 -1
- package/dist/Metric.vue.d.ts +6 -7
- package/dist/Modal.js +29 -29
- package/dist/Modal.js.map +1 -1
- package/dist/Modal.vue.d.ts +8 -9
- package/dist/Modals.js +8 -7
- package/dist/Modals.js.map +1 -1
- package/dist/Modals.vue.d.ts +3 -5
- package/dist/Module.js.map +1 -1
- package/dist/Module.vue.d.ts +7 -8
- package/dist/ModuleContent.vue.d.ts +3 -5
- package/dist/ModuleFooter.vue.d.ts +3 -5
- package/dist/ModuleHeader.js.map +1 -1
- package/dist/ModuleHeader.vue.d.ts +6 -7
- package/dist/ObfuscateText.js +1 -1
- package/dist/ObfuscateText.js.map +1 -1
- package/dist/ObfuscateText.vue.d.ts +6 -7
- package/dist/PageContent.vue.d.ts +3 -5
- package/dist/PageHeader.js.map +1 -1
- package/dist/PageHeader.vue.d.ts +6 -7
- package/dist/PageNavigation.js +30 -27
- package/dist/PageNavigation.js.map +1 -1
- package/dist/PageNavigation.vue.d.ts +8 -9
- package/dist/Paginate.js +32 -32
- package/dist/Paginate.js.map +1 -1
- package/dist/Paginate.vue.d.ts +8 -9
- package/dist/PlaidLink.js +29 -29
- package/dist/PlaidLink.js.map +1 -1
- package/dist/PlaidLink.vue.d.ts +11 -12
- package/dist/QuickAction.js.map +1 -1
- package/dist/QuickAction.vue.d.ts +4 -5
- package/dist/Radio.vue.d.ts +20 -1
- package/dist/RadioGroup.js +123 -123
- package/dist/RadioGroup.js.map +1 -1
- package/dist/RadioGroup.vue.d.ts +10 -11
- package/dist/RadioNew.js +102 -102
- package/dist/RadioNew.js.map +1 -1
- package/dist/RadioNew.vue.d.ts +10 -11
- package/dist/RangeInput.vue.d.ts +3 -5
- package/dist/SearchBar.js +36 -36
- package/dist/SearchBar.js.map +1 -1
- package/dist/SearchBar.vue.d.ts +9 -10
- package/dist/Select.js +792 -774
- package/dist/Select.js.map +1 -1
- package/dist/Select.vue.d.ts +14 -15
- package/dist/SelectStatus.js +27 -27
- package/dist/SelectStatus.js.map +1 -1
- package/dist/SelectStatus.vue.d.ts +12 -13
- package/dist/Skeleton.js.map +1 -1
- package/dist/Skeleton.vue.d.ts +7 -8
- package/dist/Step.js.map +1 -1
- package/dist/Step.vue.d.ts +7 -8
- package/dist/Stepper.js +19 -19
- package/dist/Stepper.js.map +1 -1
- package/dist/Stepper.vue.d.ts +9 -10
- package/dist/Switch.js +25 -25
- package/dist/Switch.js.map +1 -1
- package/dist/Switch.vue.d.ts +11 -12
- package/dist/Tab.js +2 -2
- package/dist/Tab.vue.d.ts +3 -4
- package/dist/{Tab.vue_vue_type_script_setup_true_lang-69d1b046.js → Tab.vue_vue_type_script_setup_true_lang-9aa53203.js} +5 -3
- package/dist/Tab.vue_vue_type_script_setup_true_lang-9aa53203.js.map +1 -0
- package/dist/Table.js +3 -3
- package/dist/Table.js.map +1 -1
- package/dist/{Table.keys-cf93df19.js → Table.keys-83e4f09b.js} +11 -11
- package/dist/{Table.keys-cf93df19.js.map → Table.keys-83e4f09b.js.map} +1 -1
- package/dist/Table.vue.d.ts +6 -7
- package/dist/TableCell.js +1 -1
- package/dist/TableCell.js.map +1 -1
- package/dist/TableCell.vue.d.ts +6 -7
- package/dist/TableHeaderCell.js +12 -12
- package/dist/TableHeaderCell.js.map +1 -1
- package/dist/TableHeaderCell.vue.d.ts +6 -7
- package/dist/TableHeaderRow.js +21 -21
- package/dist/TableHeaderRow.js.map +1 -1
- package/dist/TableHeaderRow.vue.d.ts +8 -9
- package/dist/TableRow.js +42 -42
- package/dist/TableRow.js.map +1 -1
- package/dist/TableRow.vue.d.ts +8 -9
- package/dist/Tabs.js +2 -2
- package/dist/Tabs.vue.d.ts +8 -9
- package/dist/{Tabs.vue_used_vue_type_style_index_0_lang.module-2a131332.js → Tabs.vue_used_vue_type_style_index_0_lang.module-3aa36673.js} +37 -37
- package/dist/Tabs.vue_used_vue_type_style_index_0_lang.module-3aa36673.js.map +1 -0
- package/dist/TextEditor.js +565 -565
- package/dist/TextEditor.js.map +1 -1
- package/dist/TextEditor.vue.d.ts +12 -13
- package/dist/Textarea.js +28 -28
- package/dist/Textarea.js.map +1 -1
- package/dist/Textarea.vue.d.ts +10 -11
- package/dist/Timeline.js.map +1 -1
- package/dist/Timeline.vue.d.ts +6 -7
- package/dist/TimelineItem.js +21 -21
- package/dist/TimelineItem.js.map +1 -1
- package/dist/TimelineItem.vue.d.ts +13 -6
- package/dist/Toast.js +134 -134
- package/dist/Toast.js.map +1 -1
- package/dist/Toast.vue.d.ts +6 -7
- package/dist/Toasts.vue.d.ts +3 -5
- package/dist/components.css +1 -1
- package/dist/index.js.map +1 -1
- package/dist/tailwind-base.js.map +1 -1
- package/dist/usePlaidLink.d.ts +1 -6
- package/dist/useScriptTag.d.ts +3 -8
- package/dist/useStepper.d.ts +7 -2
- package/package.json +1 -1
- package/tailwind-base.ts +13 -6
- package/dist/Expand.vue_vue_type_script_setup_true_lang-1751f4a6.js.map +0 -1
- package/dist/Logo.vue_vue_type_script_setup_true_lang-d7da48a0.js +0 -196
- package/dist/Logo.vue_vue_type_script_setup_true_lang-d7da48a0.js.map +0 -1
- package/dist/Tab.vue_vue_type_script_setup_true_lang-69d1b046.js.map +0 -1
- package/dist/Tabs.vue_used_vue_type_style_index_0_lang.module-2a131332.js.map +0 -1
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { AllowedComponentProps } from 'vue';
|
|
2
|
-
import { ComponentCustomProps } from 'vue';
|
|
3
1
|
import { ComponentOptionsMixin } from 'vue';
|
|
2
|
+
import { ComponentProvideOptions } from 'vue';
|
|
4
3
|
import { DefineComponent } from 'vue';
|
|
5
4
|
import { ExtractPropTypes } from 'vue';
|
|
6
5
|
import { PropType } from 'vue';
|
|
7
|
-
import {
|
|
6
|
+
import { PublicProps } from 'vue';
|
|
8
7
|
|
|
9
8
|
declare type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
|
|
10
9
|
|
|
@@ -27,17 +26,17 @@ declare type __VLS_WithDefaults<P, D> = {
|
|
|
27
26
|
}> : P[K];
|
|
28
27
|
};
|
|
29
28
|
|
|
30
|
-
declare const _default: DefineComponent<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<FilterSelectProps>, {
|
|
29
|
+
declare const _default: DefineComponent<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<FilterSelectProps>, {
|
|
31
30
|
canSelectAll: boolean;
|
|
32
|
-
}
|
|
31
|
+
}>>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
|
|
33
32
|
"update:modelValue": (value: FilterSelectModelValue) => void;
|
|
34
|
-
}, string,
|
|
33
|
+
}, string, PublicProps, Readonly<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<FilterSelectProps>, {
|
|
35
34
|
canSelectAll: boolean;
|
|
36
|
-
}>>> & {
|
|
35
|
+
}>>> & Readonly<{
|
|
37
36
|
"onUpdate:modelValue"?: ((value: FilterSelectModelValue) => any) | undefined;
|
|
38
|
-
}
|
|
37
|
+
}>, {
|
|
39
38
|
canSelectAll: boolean;
|
|
40
|
-
}, {}>;
|
|
39
|
+
}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
|
|
41
40
|
export default _default;
|
|
42
41
|
|
|
43
42
|
export declare type FilterSelectModelValue = Array<FilterSelectOption['value']>;
|
package/dist/Filters.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import { toRefs as
|
|
4
|
-
import
|
|
5
|
-
import { LLLV_CHANGE_TRIGGERS as
|
|
6
|
-
import { t as
|
|
7
|
-
import { persistentStorage as
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import { _ as
|
|
1
|
+
import N from "lodash-es/cloneDeep";
|
|
2
|
+
import H from "lodash-es/merge";
|
|
3
|
+
import { toRefs as G, ref as E, nextTick as W, resolveComponent as V, openBlock as u, createElementBlock as _, Fragment as P, renderList as z, normalizeClass as S, createBlock as f, mergeProps as b, resolveDynamicComponent as k, createSlots as Y, withCtx as y, createElementVNode as v, createCommentVNode as L, createVNode as O, createTextVNode as U, toDisplayString as D } from "vue";
|
|
4
|
+
import q from "./useValidation.js";
|
|
5
|
+
import { LLLV_CHANGE_TRIGGERS as R } from "./constants.js";
|
|
6
|
+
import { t as A } from "./locale.js";
|
|
7
|
+
import { persistentStorage as M } from "./storage.js";
|
|
8
|
+
import J from "./Button.js";
|
|
9
|
+
import K from "./Checkbox.js";
|
|
10
|
+
import Q from "./DatePicker.js";
|
|
11
|
+
import X from "./Input.js";
|
|
12
|
+
import Z from "./InputOptions.js";
|
|
13
|
+
import I from "./Radio.js";
|
|
14
|
+
import $ from "./Select.js";
|
|
15
|
+
import { _ as ee } from "./_plugin-vue_export-helper-dad06003.js";
|
|
16
16
|
import "lodash-es/debounce";
|
|
17
17
|
import "lodash-es/get";
|
|
18
18
|
import "./isDefined-2ce6cde4.js";
|
|
@@ -48,18 +48,18 @@ import "./clickoutside.js";
|
|
|
48
48
|
import "./MenusPlugin-9288029a.js";
|
|
49
49
|
import "./Chip.js";
|
|
50
50
|
import "./utils/colorScheme.js";
|
|
51
|
-
const
|
|
51
|
+
const te = {
|
|
52
52
|
"filter-button-group": "_filter-button-group_1o1yr_2"
|
|
53
|
-
},
|
|
53
|
+
}, le = {
|
|
54
54
|
name: "ll-filters",
|
|
55
55
|
components: {
|
|
56
|
-
"ll-button":
|
|
57
|
-
"ll-checkbox":
|
|
58
|
-
"ll-input":
|
|
59
|
-
"ll-input-options":
|
|
60
|
-
"ll-radio":
|
|
61
|
-
"ll-select":
|
|
62
|
-
DatePicker:
|
|
56
|
+
"ll-button": J,
|
|
57
|
+
"ll-checkbox": K,
|
|
58
|
+
"ll-input": X,
|
|
59
|
+
"ll-input-options": Z,
|
|
60
|
+
"ll-radio": I,
|
|
61
|
+
"ll-select": $,
|
|
62
|
+
DatePicker: Q
|
|
63
63
|
},
|
|
64
64
|
props: {
|
|
65
65
|
/**
|
|
@@ -94,24 +94,24 @@ const ie = {
|
|
|
94
94
|
},
|
|
95
95
|
emits: ["change", "submit", "reset"],
|
|
96
96
|
setup(l) {
|
|
97
|
-
const { validationSchema:
|
|
98
|
-
function
|
|
97
|
+
const { validationSchema: s } = G(l), o = s.value(), i = E({}), t = E();
|
|
98
|
+
function r() {
|
|
99
99
|
if ((o == null ? void 0 : o.toString()) !== "[object Object]")
|
|
100
100
|
return;
|
|
101
|
-
i.value = Object.keys(o).reduce((
|
|
102
|
-
const p = Object.entries(o).reduce((
|
|
103
|
-
t.value =
|
|
101
|
+
i.value = Object.keys(o).reduce((d, m) => (d[m] = void 0, d), {});
|
|
102
|
+
const p = Object.entries(o).reduce((d, [m, h]) => (d[m] = h.map((c) => c(i)), d), {});
|
|
103
|
+
t.value = q({ rules: p, values: i }), t.value.validate();
|
|
104
104
|
}
|
|
105
105
|
return {
|
|
106
106
|
validation: t,
|
|
107
107
|
validationValues: i,
|
|
108
|
-
initValidation:
|
|
108
|
+
initValidation: r
|
|
109
109
|
};
|
|
110
110
|
},
|
|
111
111
|
data() {
|
|
112
112
|
return {
|
|
113
|
-
applyText:
|
|
114
|
-
clearText:
|
|
113
|
+
applyText: A("ll.apply"),
|
|
114
|
+
clearText: A("ll.clear"),
|
|
115
115
|
filters: {},
|
|
116
116
|
filterValues: {},
|
|
117
117
|
forceRenderCount: 0
|
|
@@ -125,33 +125,33 @@ const ie = {
|
|
|
125
125
|
* @returns {IFilter}
|
|
126
126
|
*/
|
|
127
127
|
handler: function(l) {
|
|
128
|
-
const
|
|
128
|
+
const s = Object.keys(l).reduce((o, i) => {
|
|
129
129
|
const t = this.schema[i];
|
|
130
130
|
if (!t || !t.fieldToFilter)
|
|
131
131
|
return o;
|
|
132
|
-
const
|
|
133
|
-
if (
|
|
132
|
+
const r = l[i];
|
|
133
|
+
if (r === "" || r == null)
|
|
134
134
|
return o;
|
|
135
|
-
const p = t.attributes.trackBy || "id",
|
|
135
|
+
const p = t.attributes.trackBy || "id", d = typeof r == "object", m = typeof t.type == "object", h = m && t.attributes.multiple || !m && t.type.includes("ll-select") && (t.attributes.multiple || !t.attributes.single), c = h ? (
|
|
136
136
|
// local storage might have item stored as an object from the old Select
|
|
137
|
-
(Array.isArray(
|
|
138
|
-
) :
|
|
139
|
-
return e && (
|
|
137
|
+
(Array.isArray(r) ? r : [r]).map((a) => a[p])
|
|
138
|
+
) : d ? [r[p]] : [r], e = t.groupedWith;
|
|
139
|
+
return e && (c[0] = {
|
|
140
140
|
index: e,
|
|
141
141
|
value: l[e]
|
|
142
|
-
},
|
|
142
|
+
}, c.push({
|
|
143
143
|
index: Number(i),
|
|
144
144
|
value: l[i]
|
|
145
|
-
})),
|
|
145
|
+
})), c.length && (o[t.fieldToFilter] = {
|
|
146
146
|
// don't add to `filters` if no filterBy
|
|
147
|
-
filterBy:
|
|
147
|
+
filterBy: c,
|
|
148
148
|
filterType: t.type,
|
|
149
149
|
// Informs the applied filter count
|
|
150
150
|
isMultiple: h,
|
|
151
151
|
..."fn" in t && { customFilter: t.fn }
|
|
152
152
|
}), o;
|
|
153
153
|
}, {});
|
|
154
|
-
this.filters =
|
|
154
|
+
this.filters = s, this.$emit("change", s);
|
|
155
155
|
},
|
|
156
156
|
deep: !0,
|
|
157
157
|
immediate: !0
|
|
@@ -161,7 +161,7 @@ const ie = {
|
|
|
161
161
|
}
|
|
162
162
|
},
|
|
163
163
|
async created() {
|
|
164
|
-
this.initFilterValues(), await
|
|
164
|
+
this.initFilterValues(), await W(), this.initValidation(), this.applyFilters({ trigger: R.LOAD });
|
|
165
165
|
},
|
|
166
166
|
methods: {
|
|
167
167
|
initFilterValues() {
|
|
@@ -178,7 +178,7 @@ const ie = {
|
|
|
178
178
|
* @param {object} [options] - optional parameters
|
|
179
179
|
* @param {string} [options.trigger] - the action that triggered this function call
|
|
180
180
|
*/
|
|
181
|
-
async applyFilters({ trigger: l =
|
|
181
|
+
async applyFilters({ trigger: l = R.APPLY } = {}) {
|
|
182
182
|
this.validation && (await this.validation.validate(), this.validation.hasErrors) || (this.disablePersistency || this.persistFilterValues(this.filterValues), this.$emit("submit", { trigger: l }));
|
|
183
183
|
},
|
|
184
184
|
resetFilters() {
|
|
@@ -190,20 +190,20 @@ const ie = {
|
|
|
190
190
|
* Returns pre-defined filter values to become the default values
|
|
191
191
|
*/
|
|
192
192
|
getDefaultFilterValues() {
|
|
193
|
-
return this.schema.reduce((l,
|
|
193
|
+
return this.schema.reduce((l, s, o) => (s.type === "ll-checkbox" ? l[o] = s.attributes.checked || !1 : Object.prototype.hasOwnProperty.call(s.attributes, "modelValue") && (l[o] = s.attributes.modelValue), l), {});
|
|
194
194
|
},
|
|
195
195
|
/**
|
|
196
196
|
* Intended for external use, when filter values need to be set for the user
|
|
197
197
|
*/
|
|
198
198
|
setFilterValues(l) {
|
|
199
|
-
this.filterValues =
|
|
199
|
+
this.filterValues = H({}, this.filterValues, l), this.forceRenderCount++;
|
|
200
200
|
},
|
|
201
201
|
updateValidationValues() {
|
|
202
202
|
const l = Object.keys(this.validationSchema());
|
|
203
|
-
this.schema.forEach((
|
|
204
|
-
const i =
|
|
203
|
+
this.schema.forEach((s, o) => {
|
|
204
|
+
const i = s.fieldToFilter;
|
|
205
205
|
if (l.includes(i)) {
|
|
206
|
-
const
|
|
206
|
+
const r = this.filters[i], p = r ? r.isMultiple ? r.filterBy : r.filterBy[0] : this.filterValues[o];
|
|
207
207
|
this.validationValues[i] = p;
|
|
208
208
|
}
|
|
209
209
|
});
|
|
@@ -211,139 +211,147 @@ const ie = {
|
|
|
211
211
|
/**
|
|
212
212
|
* Change handler for filter fields
|
|
213
213
|
*/
|
|
214
|
-
onChange(l,
|
|
214
|
+
onChange(l, s, o) {
|
|
215
215
|
var i;
|
|
216
|
-
(i = l.on) != null && i.change && l.on.change(
|
|
216
|
+
(i = l.on) != null && i.change && l.on.change(s, o);
|
|
217
217
|
},
|
|
218
218
|
/**
|
|
219
219
|
* Select input event handler for filter fields
|
|
220
220
|
*/
|
|
221
|
-
onSelectInput(l,
|
|
222
|
-
l === void 0 ? delete this.filterValues[o] : this.filterValues[o] = l, this.onChange(
|
|
221
|
+
onSelectInput(l, s, o) {
|
|
222
|
+
l === void 0 ? delete this.filterValues[o] : this.filterValues[o] = l, this.onChange(s, this.filterValues, o);
|
|
223
223
|
},
|
|
224
224
|
/**
|
|
225
225
|
* Get filter values from local storage.
|
|
226
226
|
* @returns {any}
|
|
227
227
|
*/
|
|
228
228
|
getPersistentFilterValues() {
|
|
229
|
-
return
|
|
229
|
+
return M.get("filter-values");
|
|
230
230
|
},
|
|
231
231
|
/**
|
|
232
232
|
* Clone new filterValues to remove reactivity, and save them to localStorage.
|
|
233
233
|
* @param {object} newValues - the filterValues to be persisted in localStorage
|
|
234
234
|
*/
|
|
235
235
|
persistFilterValues(l) {
|
|
236
|
-
|
|
236
|
+
M.set("filter-values", N(l));
|
|
237
237
|
}
|
|
238
238
|
}
|
|
239
|
-
},
|
|
240
|
-
function
|
|
241
|
-
var
|
|
242
|
-
const p =
|
|
243
|
-
return
|
|
244
|
-
(
|
|
245
|
-
var
|
|
246
|
-
return
|
|
247
|
-
e.hidden ?
|
|
239
|
+
}, ie = { class: "tw-ll-grid tw-grid-cols-4 md:tw-grid-cols-12" }, oe = ["data-test"], re = ["innerHTML"], se = ["innerHTML"];
|
|
240
|
+
function ae(l, s, o, i, t, r) {
|
|
241
|
+
var c;
|
|
242
|
+
const p = V("ll-select"), d = V("ll-checkbox"), m = V("ll-radio"), h = V("ll-button");
|
|
243
|
+
return u(), _("div", ie, [
|
|
244
|
+
(u(!0), _(P, null, z(o.schema, (e, a) => {
|
|
245
|
+
var g, F, T, C, w, x, B, j;
|
|
246
|
+
return u(), _(P, null, [
|
|
247
|
+
e.hidden ? L("", !0) : (u(), _("div", {
|
|
248
248
|
key: `${a} ${t.forceRenderCount}`,
|
|
249
249
|
class: S(["field-wrapper tw-col-span-4 md:tw-col-span-3", { "max-md:tw-hidden": !e.type, "tw-flex tw-items-end": e.type === "ll-checkbox" }]),
|
|
250
250
|
"data-test": `filter|${e.fieldToFilter}`
|
|
251
251
|
}, [
|
|
252
|
-
e.type === "ll-select" ? (
|
|
253
|
-
|
|
252
|
+
e.type === "ll-select" ? (u(), f(p, b({
|
|
253
|
+
key: 0,
|
|
254
|
+
ref_for: !0
|
|
255
|
+
}, e.attributes, {
|
|
256
|
+
error: ((g = i.validation) == null ? void 0 : g.fields[e.fieldToFilter]) && ((F = i.validation) == null ? void 0 : F.getError(e.fieldToFilter)),
|
|
254
257
|
label: e.label,
|
|
255
258
|
"model-value": t.filterValues[a],
|
|
256
|
-
"onUpdate:modelValue": (n) =>
|
|
257
|
-
}), null, 16, ["error", "label", "model-value", "onUpdate:modelValue"])) : e.type === "ll-checkbox" ? (
|
|
259
|
+
"onUpdate:modelValue": (n) => r.onSelectInput(n, e, a)
|
|
260
|
+
}), null, 16, ["error", "label", "model-value", "onUpdate:modelValue"])) : e.type === "ll-checkbox" ? (u(), f(d, b({
|
|
258
261
|
key: 1,
|
|
259
262
|
checked: t.filterValues[a],
|
|
260
|
-
"onUpdate:checked": (n) => t.filterValues[a] = n
|
|
263
|
+
"onUpdate:checked": (n) => t.filterValues[a] = n,
|
|
264
|
+
ref_for: !0
|
|
261
265
|
}, e.attributes, {
|
|
262
266
|
"error-text": ((T = i.validation) == null ? void 0 : T.fields[e.fieldToFilter]) && ((C = i.validation) == null ? void 0 : C.getError(e.fieldToFilter)),
|
|
263
267
|
label: e.label,
|
|
264
|
-
"onUpdate:checked": (n) =>
|
|
265
|
-
}), null, 16, ["checked", "onUpdate:checked", "error-text", "label"])) : e.type === "ll-radio" ? (
|
|
268
|
+
"onUpdate:checked": (n) => r.onChange(e, t.filterValues, a)
|
|
269
|
+
}), null, 16, ["checked", "onUpdate:checked", "error-text", "label"])) : e.type === "ll-radio" ? (u(), f(m, b({
|
|
266
270
|
key: 2,
|
|
267
271
|
checked: t.filterValues[a],
|
|
268
|
-
"onUpdate:checked": (n) => t.filterValues[a] = n
|
|
272
|
+
"onUpdate:checked": (n) => t.filterValues[a] = n,
|
|
273
|
+
ref_for: !0
|
|
269
274
|
}, e.attributes, {
|
|
270
275
|
"error-text": ((w = i.validation) == null ? void 0 : w.fields[e.fieldToFilter]) && ((x = i.validation) == null ? void 0 : x.getError(e.fieldToFilter)),
|
|
271
276
|
label: e.label,
|
|
272
|
-
"onUpdate:checked": (n) =>
|
|
273
|
-
}), null, 16, ["checked", "onUpdate:checked", "error-text", "label"])) : e.type ? (
|
|
277
|
+
"onUpdate:checked": (n) => r.onChange(e, t.filterValues, a)
|
|
278
|
+
}), null, 16, ["checked", "onUpdate:checked", "error-text", "label"])) : e.type ? (u(), f(k(e.type), b({
|
|
279
|
+
key: 3,
|
|
280
|
+
ref_for: !0
|
|
281
|
+
}, e.attributes, {
|
|
274
282
|
modelValue: t.filterValues[a],
|
|
275
|
-
"onUpdate:modelValue": [(n) => t.filterValues[a] = n, (n) =>
|
|
276
|
-
"error-text": ((
|
|
283
|
+
"onUpdate:modelValue": [(n) => t.filterValues[a] = n, (n) => r.onChange(e, t.filterValues, a)],
|
|
284
|
+
"error-text": ((B = i.validation) == null ? void 0 : B.fields[e.fieldToFilter]) && ((j = i.validation) == null ? void 0 : j.getError(e.fieldToFilter)),
|
|
277
285
|
label: e.label
|
|
278
|
-
}),
|
|
286
|
+
}), Y({ _: 2 }, [
|
|
279
287
|
e.slots && e.slots.selected ? {
|
|
280
288
|
name: "selected",
|
|
281
|
-
fn:
|
|
282
|
-
(
|
|
289
|
+
fn: y(({ option: n }) => [
|
|
290
|
+
(u(), f(k(e.slots.selected), b({ ref_for: !0 }, n.props), null, 16))
|
|
283
291
|
]),
|
|
284
292
|
key: "0"
|
|
285
293
|
} : void 0,
|
|
286
294
|
e.slots && e.slots.option ? {
|
|
287
295
|
name: "option",
|
|
288
|
-
fn:
|
|
289
|
-
(
|
|
296
|
+
fn: y(({ option: n }) => [
|
|
297
|
+
(u(), f(k(e.slots.option), b({ ref_for: !0 }, n.props), null, 16))
|
|
290
298
|
]),
|
|
291
299
|
key: "1"
|
|
292
300
|
} : void 0,
|
|
293
301
|
e.slots && e.slots.prepend ? {
|
|
294
302
|
name: "prepend",
|
|
295
|
-
fn:
|
|
296
|
-
|
|
303
|
+
fn: y(() => [
|
|
304
|
+
v("span", {
|
|
297
305
|
innerHTML: e.slots.prepend
|
|
298
|
-
}, null, 8,
|
|
306
|
+
}, null, 8, re)
|
|
299
307
|
]),
|
|
300
308
|
key: "2"
|
|
301
309
|
} : void 0,
|
|
302
310
|
e.slots && e.slots.append ? {
|
|
303
311
|
name: "append",
|
|
304
|
-
fn:
|
|
305
|
-
|
|
312
|
+
fn: y(() => [
|
|
313
|
+
v("span", {
|
|
306
314
|
innerHTML: e.slots.append
|
|
307
|
-
}, null, 8,
|
|
315
|
+
}, null, 8, se)
|
|
308
316
|
]),
|
|
309
317
|
key: "3"
|
|
310
318
|
} : void 0
|
|
311
|
-
]), 1040, ["modelValue", "onUpdate:modelValue", "error-text", "label"])) :
|
|
312
|
-
], 10,
|
|
319
|
+
]), 1040, ["modelValue", "onUpdate:modelValue", "error-text", "label"])) : L("", !0)
|
|
320
|
+
], 10, oe))
|
|
313
321
|
], 64);
|
|
314
322
|
}), 256)),
|
|
315
|
-
|
|
323
|
+
v("div", {
|
|
316
324
|
class: S(["button-grid tw-col-span-4 tw-flex tw-items-end tw-justify-end md:tw-col-span-12", l.$style["filter-button-group"]])
|
|
317
325
|
}, [
|
|
318
|
-
|
|
326
|
+
O(h, {
|
|
319
327
|
secondary: "",
|
|
320
328
|
"data-test": "button|reset-filters",
|
|
321
329
|
disabled: o.disableClear,
|
|
322
|
-
onClick:
|
|
330
|
+
onClick: r.resetFilters
|
|
323
331
|
}, {
|
|
324
|
-
default:
|
|
325
|
-
D(
|
|
332
|
+
default: y(() => [
|
|
333
|
+
U(D(t.clearText), 1)
|
|
326
334
|
]),
|
|
327
335
|
_: 1
|
|
328
336
|
}, 8, ["disabled", "onClick"]),
|
|
329
|
-
|
|
337
|
+
O(h, {
|
|
330
338
|
primary: "",
|
|
331
339
|
"data-test": "button|apply-filters",
|
|
332
|
-
disabled: o.disableApply || ((
|
|
333
|
-
onClick:
|
|
340
|
+
disabled: o.disableApply || ((c = i.validation) == null ? void 0 : c.hasErrors),
|
|
341
|
+
onClick: r.applyFilters
|
|
334
342
|
}, {
|
|
335
|
-
default:
|
|
336
|
-
D(
|
|
343
|
+
default: y(() => [
|
|
344
|
+
U(D(t.applyText), 1)
|
|
337
345
|
]),
|
|
338
346
|
_: 1
|
|
339
347
|
}, 8, ["disabled", "onClick"])
|
|
340
348
|
], 2)
|
|
341
349
|
]);
|
|
342
350
|
}
|
|
343
|
-
const
|
|
344
|
-
$style:
|
|
345
|
-
},
|
|
351
|
+
const ne = {
|
|
352
|
+
$style: te
|
|
353
|
+
}, rt = /* @__PURE__ */ ee(le, [["render", ae], ["__cssModules", ne]]);
|
|
346
354
|
export {
|
|
347
|
-
|
|
355
|
+
rt as default
|
|
348
356
|
};
|
|
349
357
|
//# sourceMappingURL=Filters.js.map
|
package/dist/Filters.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Filters.js","sources":["../src/components/Filters/Filters.vue"],"sourcesContent":["<script>\n import cloneDeep from 'lodash-es/cloneDeep';\n import merge from 'lodash-es/merge';\n import { nextTick, ref, toRefs } from 'vue';\n\n import useValidation from '../../composables/useValidation/useValidation';\n import { LLLV_CHANGE_TRIGGERS } from '../../constants';\n import { t } from '../../locale';\n import { persistentStorage } from '../../storage';\n import Button from '../Button/Button.vue';\n import Checkbox from '../Checkbox/Checkbox.vue';\n import DatePicker from '../DatePicker/DatePicker.vue';\n import Input from '../Input/Input.vue';\n import InputOptions from '../InputOptions/InputOptions.vue';\n import Radio from '../Radio/Radio.vue';\n import Select from '../Select/Select.vue';\n\n export default {\n name: 'll-filters',\n\n components: {\n 'll-button': Button,\n 'll-checkbox': Checkbox,\n 'll-input': Input,\n 'll-input-options': InputOptions,\n 'll-radio': Radio,\n 'll-select': Select,\n DatePicker,\n },\n\n props: {\n /**\n * Whether to disable the Apply button\n */\n disableApply: Boolean,\n /**\n * Whether to disable the Clear button\n */\n disableClear: Boolean,\n /**\n * Whether to disable the sticky filters\n * If disabled, a default pre-selected value(s) can be added to\n * the filter component's attributes\n */\n disablePersistency: Boolean,\n /**\n * Filters schema\n */\n schema: {\n type: Array,\n default: () => [],\n },\n /**\n * Validation schema function that returns an object\n */\n validationSchema: {\n type: Function,\n default: () => () => undefined,\n },\n },\n\n emits: ['change', 'submit', 'reset'],\n\n setup(props) {\n const { validationSchema: getValidationSchema } = toRefs(props);\n const validationSchema = getValidationSchema.value();\n const validationValues = ref({});\n\n // Without ref, `this.validation` will always evaluate to its initial value of `undefined` due to lack of reactivity.\n const validation = ref();\n\n function initValidation() {\n if (validationSchema?.toString() !== '[object Object]') {\n return;\n }\n\n validationValues.value = Object.keys(validationSchema).reduce((values, fieldName) => {\n values[fieldName] = undefined;\n\n return values;\n }, {});\n\n const validationRules = Object.entries(validationSchema).reduce((rules, [fieldName, fieldRules]) => {\n rules[fieldName] = fieldRules.map((fieldRule) => {\n return fieldRule(validationValues);\n });\n\n return rules;\n }, {});\n\n validation.value = useValidation({ rules: validationRules, values: validationValues });\n validation.value.validate();\n }\n\n return {\n validation,\n validationValues,\n initValidation,\n };\n },\n\n data() {\n return {\n applyText: t('ll.apply'),\n clearText: t('ll.clear'),\n filters: {},\n filterValues: {},\n forceRenderCount: 0,\n };\n },\n\n watch: {\n filterValues: {\n /**\n * Maps filters to a partcular object structure:\n * @param {IFilterSchemaItem} newFilterValues all selected filters\n * @returns {IFilter}\n */\n handler: function (newFilterValues) {\n const filters = Object.keys(newFilterValues).reduce((acc, i) => {\n const schema = this.schema[i];\n\n if (!schema || !schema.fieldToFilter) {\n return acc;\n }\n\n const item = newFilterValues[i];\n\n // Ignore empty string or undefined/null filter values\n if (item === '' || item == null) {\n return acc;\n }\n\n const trackBy = schema.attributes.trackBy || 'id';\n const isObject = typeof item === 'object';\n const isCustomFilterComponent = typeof schema.type === 'object';\n // TODO: remove handling of schema.attributes.multiple when we remove the vue-multiselect version of Select\n const isMultiple =\n (isCustomFilterComponent && schema.attributes.multiple) ||\n (!isCustomFilterComponent &&\n schema.type.includes('ll-select') &&\n (schema.attributes.multiple || !schema.attributes.single));\n const filterBy = isMultiple\n ? // local storage might have item stored as an object from the old Select\n (Array.isArray(item) ? item : [item]).map((v) => v[trackBy])\n : isObject\n ? [item[trackBy]]\n : [item];\n\n const groupedWith = schema.groupedWith;\n\n if (groupedWith) {\n filterBy[0] = {\n index: groupedWith,\n value: newFilterValues[groupedWith],\n };\n filterBy.push({\n index: Number(i),\n value: newFilterValues[i],\n });\n }\n\n filterBy.length &&\n (acc[schema.fieldToFilter] = {\n // don't add to `filters` if no filterBy\n filterBy,\n filterType: schema.type, // Informs the applied filter count\n isMultiple,\n ...('fn' in schema && { customFilter: schema.fn }),\n });\n\n return acc;\n }, {});\n\n this.filters = filters;\n this.$emit('change', filters);\n },\n\n deep: true,\n immediate: true,\n },\n\n filters() {\n if (this.validation) {\n this.updateValidationValues();\n }\n },\n },\n\n async created() {\n // initFilterValues updates the filterValues so using await nextTick() forces the code\n // after it to wait until nextTick is done, at which point the filterValues will\n // be done initializing. Otherwise, applyFilters sometimes applies the wrong\n // filters because filterValues is not done updating.\n this.initFilterValues();\n await nextTick();\n this.initValidation();\n this.applyFilters({ trigger: LLLV_CHANGE_TRIGGERS.LOAD });\n },\n\n methods: {\n initFilterValues() {\n if (this.disablePersistency) {\n this.filterValues = this.getDefaultFilterValues();\n\n return;\n }\n\n this.filterValues = this.getPersistentFilterValues() || this.getDefaultFilterValues();\n },\n\n /**\n * Apply the selected filters and save them to localStorage.\n * ListView calls this method using a ref to Filters.\n * The trigger option is used in ListView.\n * @param {object} [options] - optional parameters\n * @param {string} [options.trigger] - the action that triggered this function call\n */\n async applyFilters({ trigger = LLLV_CHANGE_TRIGGERS.APPLY } = {}) {\n if (this.validation) {\n await this.validation.validate();\n\n if (this.validation.hasErrors) {\n return;\n }\n }\n\n if (!this.disablePersistency) {\n this.persistFilterValues(this.filterValues);\n }\n\n this.$emit('submit', { trigger });\n },\n\n resetFilters() {\n this.filterValues = this.getDefaultFilterValues();\n\n this.forceRenderCount++;\n\n if (!this.disablePersistency) {\n this.persistFilterValues(this.filterValues);\n }\n\n // Emit after filters are updated\n this.$nextTick(() => {\n this.$emit('reset');\n });\n },\n\n /**\n * Returns pre-defined filter values to become the default values\n */\n getDefaultFilterValues() {\n return this.schema.reduce((acc, item, filterIndex) => {\n if (item.type === 'll-checkbox') {\n acc[filterIndex] = item.attributes.checked || false;\n } else if (Object.prototype.hasOwnProperty.call(item.attributes, 'modelValue')) {\n acc[filterIndex] = item.attributes.modelValue;\n }\n\n return acc;\n }, {});\n },\n\n /**\n * Intended for external use, when filter values need to be set for the user\n */\n setFilterValues(newValues) {\n this.filterValues = merge({}, this.filterValues, newValues);\n this.forceRenderCount++;\n },\n\n updateValidationValues() {\n const validatable = Object.keys(this.validationSchema());\n\n this.schema.forEach((fieldSchema, filterIndex) => {\n const fieldToFilter = fieldSchema.fieldToFilter;\n const validate = validatable.includes(fieldToFilter);\n\n if (validate) {\n const filter = this.filters[fieldToFilter];\n\n /**\n * Get all validatable fields.\n * Use parsed value of filters that are set,\n * otherwise fall back to `filterValue` value if not set.\n */\n const filterValue = filter\n ? filter.isMultiple\n ? filter.filterBy\n : filter.filterBy[0]\n : this.filterValues[filterIndex];\n\n this.validationValues[fieldToFilter] = filterValue;\n }\n });\n },\n\n /**\n * Change handler for filter fields\n */\n onChange(filter, filterValues, filterIndex) {\n if (filter.on?.change) {\n // Maps to `on.change` handlers in the filter schema.\n filter.on.change(filterValues, filterIndex);\n }\n },\n\n /**\n * Select input event handler for filter fields\n */\n onSelectInput(newValue, filter, filterIndex) {\n if (newValue === undefined) {\n delete this.filterValues[filterIndex]; // prevent undefined filterValues which cause an empty result list\n } else {\n this.filterValues[filterIndex] = newValue;\n }\n\n this.onChange(filter, this.filterValues, filterIndex);\n },\n\n /**\n * Get filter values from local storage.\n * @returns {any}\n */\n getPersistentFilterValues() {\n return persistentStorage.get('filter-values');\n },\n\n /**\n * Clone new filterValues to remove reactivity, and save them to localStorage.\n * @param {object} newValues - the filterValues to be persisted in localStorage\n */\n persistFilterValues(newValues) {\n persistentStorage.set('filter-values', cloneDeep(newValues));\n },\n },\n };\n</script>\n\n<template>\n <div class=\"tw-ll-grid tw-grid-cols-4 md:tw-grid-cols-12\">\n <template v-for=\"(filter, filterIndex) in schema\">\n <div\n v-if=\"!filter.hidden\"\n :key=\"`${filterIndex} ${forceRenderCount}`\"\n class=\"field-wrapper tw-col-span-4 md:tw-col-span-3\"\n :class=\"{ 'max-md:tw-hidden': !filter.type, 'tw-flex tw-items-end': filter.type === 'll-checkbox' }\"\n :data-test=\"`filter|${filter.fieldToFilter}`\"\n >\n <!-- Filter component -->\n <ll-select\n v-if=\"filter.type === 'll-select'\"\n v-bind=\"filter.attributes\"\n :error=\"validation?.fields[filter.fieldToFilter] && validation?.getError(filter.fieldToFilter)\"\n :label=\"filter.label\"\n :model-value=\"filterValues[filterIndex]\"\n @update:model-value=\"(newValue) => onSelectInput(newValue, filter, filterIndex)\"\n />\n <ll-checkbox\n v-else-if=\"filter.type === 'll-checkbox'\"\n v-model:checked=\"filterValues[filterIndex]\"\n v-bind=\"filter.attributes\"\n :error-text=\"validation?.fields[filter.fieldToFilter] && validation?.getError(filter.fieldToFilter)\"\n :label=\"filter.label\"\n @update:checked=\"onChange(filter, filterValues, filterIndex)\"\n />\n <ll-radio\n v-else-if=\"filter.type === 'll-radio'\"\n v-model:checked=\"filterValues[filterIndex]\"\n v-bind=\"filter.attributes\"\n :error-text=\"validation?.fields[filter.fieldToFilter] && validation?.getError(filter.fieldToFilter)\"\n :label=\"filter.label\"\n @update:checked=\"onChange(filter, filterValues, filterIndex)\"\n />\n <component\n v-bind=\"filter.attributes\"\n :is=\"filter.type\"\n v-else-if=\"filter.type\"\n v-model=\"filterValues[filterIndex]\"\n :error-text=\"validation?.fields[filter.fieldToFilter] && validation?.getError(filter.fieldToFilter)\"\n :label=\"filter.label\"\n @update:model-value=\"onChange(filter, filterValues, filterIndex)\"\n >\n <template v-if=\"filter.slots && filter.slots.selected\" #selected=\"{ option }\">\n <component :is=\"filter.slots.selected\" v-bind=\"option.props\" />\n </template>\n <template v-if=\"filter.slots && filter.slots.option\" #option=\"{ option }\">\n <component :is=\"filter.slots.option\" v-bind=\"option.props\" />\n </template>\n <template v-if=\"filter.slots && filter.slots.prepend\" #prepend>\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span v-html=\"filter.slots.prepend\"></span>\n </template>\n <template v-if=\"filter.slots && filter.slots.append\" #append>\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span v-html=\"filter.slots.append\"></span>\n </template>\n </component>\n </div>\n </template>\n <div\n class=\"button-grid tw-col-span-4 tw-flex tw-items-end tw-justify-end md:tw-col-span-12\"\n :class=\"$style['filter-button-group']\"\n >\n <ll-button secondary data-test=\"button|reset-filters\" :disabled=\"disableClear\" @click=\"resetFilters\">\n {{ clearText }}\n </ll-button>\n <ll-button\n primary\n data-test=\"button|apply-filters\"\n :disabled=\"disableApply || validation?.hasErrors\"\n @click=\"applyFilters\"\n >\n {{ applyText }}\n </ll-button>\n </div>\n </div>\n</template>\n\n<style module>\n .filter-button-group {\n @media screen('max-md') {\n display: flex;\n flex-direction: column-reverse;\n }\n\n button {\n @media screen('max-md') {\n width: 100% !important;\n }\n\n &:nth-child(2) {\n @media screen('max-md') {\n margin-bottom: theme('spacing.3');\n }\n }\n }\n }\n</style>\n"],"names":["_sfc_main","Button","Checkbox","Input","InputOptions","Radio","Select","DatePicker","props","getValidationSchema","toRefs","validationSchema","validationValues","ref","validation","initValidation","values","fieldName","validationRules","rules","fieldRules","fieldRule","useValidation","t","newFilterValues","filters","acc","schema","item","trackBy","isObject","isCustomFilterComponent","isMultiple","filterBy","v","groupedWith","nextTick","LLLV_CHANGE_TRIGGERS","trigger","filterIndex","newValues","merge","validatable","fieldSchema","fieldToFilter","filter","filterValue","filterValues","_a","newValue","persistentStorage","cloneDeep","_hoisted_1","_openBlock","_createElementBlock","_Fragment","_renderList","$props","$data","_normalizeClass","_createBlock","_component_ll_select","_mergeProps","$setup","_b","$options","_component_ll_checkbox","$event","_c","_d","_component_ll_radio","_e","_f","_resolveDynamicComponent","_g","_h","_withCtx","option","_normalizeProps","_guardReactiveProps","_createElementVNode","_ctx","_createVNode","_component_ll_button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Filters.js","sources":["../src/components/Filters/Filters.vue"],"sourcesContent":["<script>\n import cloneDeep from 'lodash-es/cloneDeep';\n import merge from 'lodash-es/merge';\n import { nextTick, ref, toRefs } from 'vue';\n\n import useValidation from '../../composables/useValidation/useValidation';\n import { LLLV_CHANGE_TRIGGERS } from '../../constants';\n import { t } from '../../locale';\n import { persistentStorage } from '../../storage';\n import Button from '../Button/Button.vue';\n import Checkbox from '../Checkbox/Checkbox.vue';\n import DatePicker from '../DatePicker/DatePicker.vue';\n import Input from '../Input/Input.vue';\n import InputOptions from '../InputOptions/InputOptions.vue';\n import Radio from '../Radio/Radio.vue';\n import Select from '../Select/Select.vue';\n\n export default {\n name: 'll-filters',\n\n components: {\n 'll-button': Button,\n 'll-checkbox': Checkbox,\n 'll-input': Input,\n 'll-input-options': InputOptions,\n 'll-radio': Radio,\n 'll-select': Select,\n DatePicker,\n },\n\n props: {\n /**\n * Whether to disable the Apply button\n */\n disableApply: Boolean,\n /**\n * Whether to disable the Clear button\n */\n disableClear: Boolean,\n /**\n * Whether to disable the sticky filters\n * If disabled, a default pre-selected value(s) can be added to\n * the filter component's attributes\n */\n disablePersistency: Boolean,\n /**\n * Filters schema\n */\n schema: {\n type: Array,\n default: () => [],\n },\n /**\n * Validation schema function that returns an object\n */\n validationSchema: {\n type: Function,\n default: () => () => undefined,\n },\n },\n\n emits: ['change', 'submit', 'reset'],\n\n setup(props) {\n const { validationSchema: getValidationSchema } = toRefs(props);\n const validationSchema = getValidationSchema.value();\n const validationValues = ref({});\n\n // Without ref, `this.validation` will always evaluate to its initial value of `undefined` due to lack of reactivity.\n const validation = ref();\n\n function initValidation() {\n if (validationSchema?.toString() !== '[object Object]') {\n return;\n }\n\n validationValues.value = Object.keys(validationSchema).reduce((values, fieldName) => {\n values[fieldName] = undefined;\n\n return values;\n }, {});\n\n const validationRules = Object.entries(validationSchema).reduce((rules, [fieldName, fieldRules]) => {\n rules[fieldName] = fieldRules.map((fieldRule) => {\n return fieldRule(validationValues);\n });\n\n return rules;\n }, {});\n\n validation.value = useValidation({ rules: validationRules, values: validationValues });\n validation.value.validate();\n }\n\n return {\n validation,\n validationValues,\n initValidation,\n };\n },\n\n data() {\n return {\n applyText: t('ll.apply'),\n clearText: t('ll.clear'),\n filters: {},\n filterValues: {},\n forceRenderCount: 0,\n };\n },\n\n watch: {\n filterValues: {\n /**\n * Maps filters to a partcular object structure:\n * @param {IFilterSchemaItem} newFilterValues all selected filters\n * @returns {IFilter}\n */\n handler: function (newFilterValues) {\n const filters = Object.keys(newFilterValues).reduce((acc, i) => {\n const schema = this.schema[i];\n\n if (!schema || !schema.fieldToFilter) {\n return acc;\n }\n\n const item = newFilterValues[i];\n\n // Ignore empty string or undefined/null filter values\n if (item === '' || item == null) {\n return acc;\n }\n\n const trackBy = schema.attributes.trackBy || 'id';\n const isObject = typeof item === 'object';\n const isCustomFilterComponent = typeof schema.type === 'object';\n // TODO: remove handling of schema.attributes.multiple when we remove the vue-multiselect version of Select\n const isMultiple =\n (isCustomFilterComponent && schema.attributes.multiple) ||\n (!isCustomFilterComponent &&\n schema.type.includes('ll-select') &&\n (schema.attributes.multiple || !schema.attributes.single));\n const filterBy = isMultiple\n ? // local storage might have item stored as an object from the old Select\n (Array.isArray(item) ? item : [item]).map((v) => v[trackBy])\n : isObject\n ? [item[trackBy]]\n : [item];\n\n const groupedWith = schema.groupedWith;\n\n if (groupedWith) {\n filterBy[0] = {\n index: groupedWith,\n value: newFilterValues[groupedWith],\n };\n filterBy.push({\n index: Number(i),\n value: newFilterValues[i],\n });\n }\n\n filterBy.length &&\n (acc[schema.fieldToFilter] = {\n // don't add to `filters` if no filterBy\n filterBy,\n filterType: schema.type, // Informs the applied filter count\n isMultiple,\n ...('fn' in schema && { customFilter: schema.fn }),\n });\n\n return acc;\n }, {});\n\n this.filters = filters;\n this.$emit('change', filters);\n },\n\n deep: true,\n immediate: true,\n },\n\n filters() {\n if (this.validation) {\n this.updateValidationValues();\n }\n },\n },\n\n async created() {\n // initFilterValues updates the filterValues so using await nextTick() forces the code\n // after it to wait until nextTick is done, at which point the filterValues will\n // be done initializing. Otherwise, applyFilters sometimes applies the wrong\n // filters because filterValues is not done updating.\n this.initFilterValues();\n await nextTick();\n this.initValidation();\n this.applyFilters({ trigger: LLLV_CHANGE_TRIGGERS.LOAD });\n },\n\n methods: {\n initFilterValues() {\n if (this.disablePersistency) {\n this.filterValues = this.getDefaultFilterValues();\n\n return;\n }\n\n this.filterValues = this.getPersistentFilterValues() || this.getDefaultFilterValues();\n },\n\n /**\n * Apply the selected filters and save them to localStorage.\n * ListView calls this method using a ref to Filters.\n * The trigger option is used in ListView.\n * @param {object} [options] - optional parameters\n * @param {string} [options.trigger] - the action that triggered this function call\n */\n async applyFilters({ trigger = LLLV_CHANGE_TRIGGERS.APPLY } = {}) {\n if (this.validation) {\n await this.validation.validate();\n\n if (this.validation.hasErrors) {\n return;\n }\n }\n\n if (!this.disablePersistency) {\n this.persistFilterValues(this.filterValues);\n }\n\n this.$emit('submit', { trigger });\n },\n\n resetFilters() {\n this.filterValues = this.getDefaultFilterValues();\n\n this.forceRenderCount++;\n\n if (!this.disablePersistency) {\n this.persistFilterValues(this.filterValues);\n }\n\n // Emit after filters are updated\n this.$nextTick(() => {\n this.$emit('reset');\n });\n },\n\n /**\n * Returns pre-defined filter values to become the default values\n */\n getDefaultFilterValues() {\n return this.schema.reduce((acc, item, filterIndex) => {\n if (item.type === 'll-checkbox') {\n acc[filterIndex] = item.attributes.checked || false;\n } else if (Object.prototype.hasOwnProperty.call(item.attributes, 'modelValue')) {\n acc[filterIndex] = item.attributes.modelValue;\n }\n\n return acc;\n }, {});\n },\n\n /**\n * Intended for external use, when filter values need to be set for the user\n */\n setFilterValues(newValues) {\n this.filterValues = merge({}, this.filterValues, newValues);\n this.forceRenderCount++;\n },\n\n updateValidationValues() {\n const validatable = Object.keys(this.validationSchema());\n\n this.schema.forEach((fieldSchema, filterIndex) => {\n const fieldToFilter = fieldSchema.fieldToFilter;\n const validate = validatable.includes(fieldToFilter);\n\n if (validate) {\n const filter = this.filters[fieldToFilter];\n\n /**\n * Get all validatable fields.\n * Use parsed value of filters that are set,\n * otherwise fall back to `filterValue` value if not set.\n */\n const filterValue = filter\n ? filter.isMultiple\n ? filter.filterBy\n : filter.filterBy[0]\n : this.filterValues[filterIndex];\n\n this.validationValues[fieldToFilter] = filterValue;\n }\n });\n },\n\n /**\n * Change handler for filter fields\n */\n onChange(filter, filterValues, filterIndex) {\n if (filter.on?.change) {\n // Maps to `on.change` handlers in the filter schema.\n filter.on.change(filterValues, filterIndex);\n }\n },\n\n /**\n * Select input event handler for filter fields\n */\n onSelectInput(newValue, filter, filterIndex) {\n if (newValue === undefined) {\n delete this.filterValues[filterIndex]; // prevent undefined filterValues which cause an empty result list\n } else {\n this.filterValues[filterIndex] = newValue;\n }\n\n this.onChange(filter, this.filterValues, filterIndex);\n },\n\n /**\n * Get filter values from local storage.\n * @returns {any}\n */\n getPersistentFilterValues() {\n return persistentStorage.get('filter-values');\n },\n\n /**\n * Clone new filterValues to remove reactivity, and save them to localStorage.\n * @param {object} newValues - the filterValues to be persisted in localStorage\n */\n persistFilterValues(newValues) {\n persistentStorage.set('filter-values', cloneDeep(newValues));\n },\n },\n };\n</script>\n\n<template>\n <div class=\"tw-ll-grid tw-grid-cols-4 md:tw-grid-cols-12\">\n <template v-for=\"(filter, filterIndex) in schema\">\n <div\n v-if=\"!filter.hidden\"\n :key=\"`${filterIndex} ${forceRenderCount}`\"\n class=\"field-wrapper tw-col-span-4 md:tw-col-span-3\"\n :class=\"{ 'max-md:tw-hidden': !filter.type, 'tw-flex tw-items-end': filter.type === 'll-checkbox' }\"\n :data-test=\"`filter|${filter.fieldToFilter}`\"\n >\n <!-- Filter component -->\n <ll-select\n v-if=\"filter.type === 'll-select'\"\n v-bind=\"filter.attributes\"\n :error=\"validation?.fields[filter.fieldToFilter] && validation?.getError(filter.fieldToFilter)\"\n :label=\"filter.label\"\n :model-value=\"filterValues[filterIndex]\"\n @update:model-value=\"(newValue) => onSelectInput(newValue, filter, filterIndex)\"\n />\n <ll-checkbox\n v-else-if=\"filter.type === 'll-checkbox'\"\n v-model:checked=\"filterValues[filterIndex]\"\n v-bind=\"filter.attributes\"\n :error-text=\"validation?.fields[filter.fieldToFilter] && validation?.getError(filter.fieldToFilter)\"\n :label=\"filter.label\"\n @update:checked=\"onChange(filter, filterValues, filterIndex)\"\n />\n <ll-radio\n v-else-if=\"filter.type === 'll-radio'\"\n v-model:checked=\"filterValues[filterIndex]\"\n v-bind=\"filter.attributes\"\n :error-text=\"validation?.fields[filter.fieldToFilter] && validation?.getError(filter.fieldToFilter)\"\n :label=\"filter.label\"\n @update:checked=\"onChange(filter, filterValues, filterIndex)\"\n />\n <component\n v-bind=\"filter.attributes\"\n :is=\"filter.type\"\n v-else-if=\"filter.type\"\n v-model=\"filterValues[filterIndex]\"\n :error-text=\"validation?.fields[filter.fieldToFilter] && validation?.getError(filter.fieldToFilter)\"\n :label=\"filter.label\"\n @update:model-value=\"onChange(filter, filterValues, filterIndex)\"\n >\n <template v-if=\"filter.slots && filter.slots.selected\" #selected=\"{ option }\">\n <component :is=\"filter.slots.selected\" v-bind=\"option.props\" />\n </template>\n <template v-if=\"filter.slots && filter.slots.option\" #option=\"{ option }\">\n <component :is=\"filter.slots.option\" v-bind=\"option.props\" />\n </template>\n <template v-if=\"filter.slots && filter.slots.prepend\" #prepend>\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span v-html=\"filter.slots.prepend\"></span>\n </template>\n <template v-if=\"filter.slots && filter.slots.append\" #append>\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span v-html=\"filter.slots.append\"></span>\n </template>\n </component>\n </div>\n </template>\n <div\n class=\"button-grid tw-col-span-4 tw-flex tw-items-end tw-justify-end md:tw-col-span-12\"\n :class=\"$style['filter-button-group']\"\n >\n <ll-button secondary data-test=\"button|reset-filters\" :disabled=\"disableClear\" @click=\"resetFilters\">\n {{ clearText }}\n </ll-button>\n <ll-button\n primary\n data-test=\"button|apply-filters\"\n :disabled=\"disableApply || validation?.hasErrors\"\n @click=\"applyFilters\"\n >\n {{ applyText }}\n </ll-button>\n </div>\n </div>\n</template>\n\n<style module>\n .filter-button-group {\n @media screen('max-md') {\n display: flex;\n flex-direction: column-reverse;\n }\n\n button {\n @media screen('max-md') {\n width: 100% !important;\n }\n\n &:nth-child(2) {\n @media screen('max-md') {\n margin-bottom: theme('spacing.3');\n }\n }\n }\n }\n</style>\n"],"names":["_sfc_main","Button","Checkbox","Input","InputOptions","Radio","Select","DatePicker","props","getValidationSchema","toRefs","validationSchema","validationValues","ref","validation","initValidation","values","fieldName","validationRules","rules","fieldRules","fieldRule","useValidation","t","newFilterValues","filters","acc","schema","item","trackBy","isObject","isCustomFilterComponent","isMultiple","filterBy","v","groupedWith","nextTick","LLLV_CHANGE_TRIGGERS","trigger","filterIndex","newValues","merge","validatable","fieldSchema","fieldToFilter","filter","filterValue","filterValues","_a","newValue","persistentStorage","cloneDeep","_hoisted_1","_openBlock","_createElementBlock","_Fragment","_renderList","$props","$data","_normalizeClass","_createBlock","_component_ll_select","_mergeProps","$setup","_b","$options","_component_ll_checkbox","$event","_c","_d","_component_ll_radio","_e","_f","_resolveDynamicComponent","_g","_h","_withCtx","option","_createElementVNode","_ctx","_createVNode","_component_ll_button"],"mappings":"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"}
|