@likable-hair/svelte 3.1.4 → 3.1.6
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/components/composed/forms/DatePickerTextField.svelte +8 -3
- package/dist/components/composed/forms/DatePickerTextField.svelte.d.ts +8 -0
- package/dist/components/composed/forms/Dropdown.svelte +10 -9
- package/dist/components/composed/forms/Dropdown.svelte.d.ts +1 -0
- package/dist/components/composed/forms/ToggleList.svelte +90 -0
- package/dist/components/composed/forms/ToggleList.svelte.d.ts +25 -0
- package/dist/components/composed/list/PaginatedTable.svelte +26 -18
- package/dist/components/composed/list/PaginatedTable.svelte.d.ts +8 -11
- package/dist/components/composed/search/FilterEditor.svelte +67 -54
- package/dist/components/composed/search/FilterEditor.svelte.d.ts +7 -4
- package/dist/components/composed/search/Filters.svelte +573 -194
- package/dist/components/composed/search/Filters.svelte.d.ts +14 -7
- package/dist/components/composed/search/MobileFilterEditor.svelte +27 -43
- package/dist/components/composed/search/MobileFilterEditor.svelte.d.ts +5 -3
- package/dist/components/layouts/CollapsibleSideBarLayout.svelte +1 -1
- package/dist/components/simple/charts/GanymedePieChart.svelte +42 -0
- package/dist/components/simple/charts/GanymedePieChart.svelte.d.ts +33 -0
- package/dist/components/simple/forms/Autocomplete.svelte +1 -1
- package/dist/components/simple/lists/Paginator.css +13 -0
- package/dist/components/simple/lists/Paginator.svelte +151 -0
- package/dist/components/{composed/list → simple/lists}/Paginator.svelte.d.ts +2 -2
- package/dist/components/simple/lists/SidebarMenuList.svelte +1 -1
- package/dist/components/simple/navigation/Chip.css +4 -1
- package/dist/components/simple/navigation/Chip.svelte +25 -0
- package/dist/components/simple/navigation/Drawer.svelte +20 -8
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/stores/theme.d.ts +9 -30
- package/dist/stores/theme.js +123 -30
- package/dist/utils/filters/builder.d.ts +5 -0
- package/dist/utils/filters/builder.js +28 -0
- package/dist/utils/filters/filters.d.ts +48 -5
- package/dist/utils/filters/filters.js +27 -8
- package/dist/utils/filters/modifiers/where.d.ts +10 -2
- package/dist/utils/filters/validator.js +3 -3
- package/package.json +2 -2
- package/dist/components/composed/list/Paginator.css +0 -4
- package/dist/components/composed/list/Paginator.svelte +0 -146
|
@@ -65,6 +65,10 @@ onMount(() => {
|
|
|
65
65
|
mask.value = DateTime.fromJSDate(selectedDate).toFormat(pattern);
|
|
66
66
|
}
|
|
67
67
|
});
|
|
68
|
+
$:
|
|
69
|
+
if (!selectedDate) {
|
|
70
|
+
mask.value = "";
|
|
71
|
+
}
|
|
68
72
|
function handleInputChange(event) {
|
|
69
73
|
setTimeout(() => {
|
|
70
74
|
const typedValue = mask.value;
|
|
@@ -126,8 +130,9 @@ $:
|
|
|
126
130
|
<div
|
|
127
131
|
bind:this={activator}
|
|
128
132
|
class="date-picker-activator {clazz.activator || ''}"
|
|
133
|
+
style:width="var(--simple-textfield-width)"
|
|
129
134
|
>
|
|
130
|
-
<slot
|
|
135
|
+
<slot
|
|
131
136
|
name="activator"
|
|
132
137
|
{mask}
|
|
133
138
|
{handleTextFieldFocus}
|
|
@@ -158,11 +163,11 @@ $:
|
|
|
158
163
|
</slot>
|
|
159
164
|
</svelte:fragment>
|
|
160
165
|
<svelte:fragment slot="prepend" let:prependIcon let:iconSize>
|
|
161
|
-
<slot name="
|
|
166
|
+
<slot name="prepend" {prependIcon} {iconSize}>
|
|
162
167
|
</slot>
|
|
163
168
|
</svelte:fragment>
|
|
164
169
|
<svelte:fragment slot="append" let:appendIcon let:iconSize>
|
|
165
|
-
<slot name="append
|
|
170
|
+
<slot name="append" {appendIcon} {iconSize}>
|
|
166
171
|
</slot>
|
|
167
172
|
</svelte:fragment>
|
|
168
173
|
</SimpleTextField>
|
|
@@ -46,6 +46,14 @@ declare const __propDef: {
|
|
|
46
46
|
iconSize: string;
|
|
47
47
|
};
|
|
48
48
|
'append-inner': {
|
|
49
|
+
appendInnerIcon: string | undefined;
|
|
50
|
+
iconSize: string;
|
|
51
|
+
};
|
|
52
|
+
prepend: {
|
|
53
|
+
prependIcon: string | undefined;
|
|
54
|
+
iconSize: string;
|
|
55
|
+
};
|
|
56
|
+
append: {
|
|
49
57
|
appendIcon: string | undefined;
|
|
50
58
|
iconSize: string;
|
|
51
59
|
};
|
|
@@ -6,7 +6,7 @@ import Button from "../../simple/buttons/Button.svelte";
|
|
|
6
6
|
import Icon from "../../simple/media/Icon.svelte";
|
|
7
7
|
import { createEventDispatcher } from "svelte";
|
|
8
8
|
let dispatch = createEventDispatcher();
|
|
9
|
-
export let items = [], values = [], multiple = false, lang = "en", searchText = void 0, maxVisibleChips = void 0, placeholder = lang == "en" ? "Select" : "Seleziona", clearable = true, mandatory = true, icon = void 0, menuOpened = false, openingId = void 0, width = void 0;
|
|
9
|
+
export let items = [], values = [], multiple = false, lang = "en", searchText = void 0, maxVisibleChips = void 0, placeholder = lang == "en" ? "Select" : "Seleziona", clearable = true, mandatory = true, icon = void 0, menuOpened = false, openingId = void 0, width = void 0, mobileDrawer = false;
|
|
10
10
|
$:
|
|
11
11
|
generatedLabel = values.length == 1 ? values[0].label : `${values.length} Selezionati`;
|
|
12
12
|
function handleCloseClick(event) {
|
|
@@ -34,6 +34,7 @@ function handleCloseClick(event) {
|
|
|
34
34
|
bind:menuOpened
|
|
35
35
|
bind:openingId
|
|
36
36
|
bind:width
|
|
37
|
+
{mobileDrawer}
|
|
37
38
|
>
|
|
38
39
|
<svelte:fragment slot="selection-container" let:openMenu let:handleKeyDown>
|
|
39
40
|
<Button
|
|
@@ -51,14 +52,14 @@ function handleCloseClick(event) {
|
|
|
51
52
|
}
|
|
52
53
|
}}
|
|
53
54
|
>
|
|
54
|
-
<slot
|
|
55
|
-
name="label"
|
|
56
|
-
{values}
|
|
57
|
-
{items}
|
|
58
|
-
{searchText}
|
|
59
|
-
{generatedLabel}
|
|
60
|
-
{placeholder}
|
|
61
|
-
{clearable}
|
|
55
|
+
<slot
|
|
56
|
+
name="label"
|
|
57
|
+
{values}
|
|
58
|
+
{items}
|
|
59
|
+
{searchText}
|
|
60
|
+
{generatedLabel}
|
|
61
|
+
{placeholder}
|
|
62
|
+
{clearable}
|
|
62
63
|
{handleCloseClick}
|
|
63
64
|
>
|
|
64
65
|
<div class="label">
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
<script context="module"></script>
|
|
2
|
+
|
|
3
|
+
<script>import "../../../css/main.css";
|
|
4
|
+
export let values = [], items, multiple = true, disabled = false;
|
|
5
|
+
let dispatch = createEventDispatcher();
|
|
6
|
+
function select(item) {
|
|
7
|
+
const alreadyPresent = values.findIndex((i) => i.value === item.value) != -1;
|
|
8
|
+
if (!alreadyPresent) {
|
|
9
|
+
if (multiple)
|
|
10
|
+
values = [...values, item];
|
|
11
|
+
else
|
|
12
|
+
values = [item];
|
|
13
|
+
dispatch("change", {
|
|
14
|
+
unselect: void 0,
|
|
15
|
+
select: item,
|
|
16
|
+
selection: values
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function unselect(item) {
|
|
21
|
+
values = values.filter((i) => i.value != item.value);
|
|
22
|
+
dispatch("change", {
|
|
23
|
+
unselect: item,
|
|
24
|
+
select: void 0,
|
|
25
|
+
selection: values
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function toggle(item) {
|
|
29
|
+
const alreadyPresent = values.findIndex((i) => i.value === item.value) != -1;
|
|
30
|
+
if (alreadyPresent)
|
|
31
|
+
unselect(item);
|
|
32
|
+
else
|
|
33
|
+
select(item);
|
|
34
|
+
}
|
|
35
|
+
import Chip from "../../simple/navigation/Chip.svelte";
|
|
36
|
+
import { createEventDispatcher } from "svelte";
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<svelte:window />
|
|
40
|
+
|
|
41
|
+
<div
|
|
42
|
+
class="toggle-container"
|
|
43
|
+
class:disabled
|
|
44
|
+
>
|
|
45
|
+
<div
|
|
46
|
+
class="selection-container"
|
|
47
|
+
>
|
|
48
|
+
{#each (items || []) as item}
|
|
49
|
+
<div class="chip">
|
|
50
|
+
<Chip
|
|
51
|
+
outlined={values.findIndex(i => i.value === item.value) === -1}
|
|
52
|
+
on:click={() => toggle(item)}
|
|
53
|
+
buttonTabIndex={0}
|
|
54
|
+
truncateText
|
|
55
|
+
--button-focus-color="red"
|
|
56
|
+
>
|
|
57
|
+
{item.label}
|
|
58
|
+
</Chip>
|
|
59
|
+
</div>
|
|
60
|
+
{/each}
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
<style>
|
|
66
|
+
.selection-container {
|
|
67
|
+
display: flex;
|
|
68
|
+
flex-wrap: wrap;
|
|
69
|
+
align-items: center;
|
|
70
|
+
gap: 5px;
|
|
71
|
+
transition: all .1s;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.toggle-container {
|
|
75
|
+
opacity: 100%;
|
|
76
|
+
width: var(--toggle-list-width, auto);
|
|
77
|
+
max-width: var(--toggle-list-max-width, auto);
|
|
78
|
+
height: var(--toggle-list-heigth, auto);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.toggle-container.disabled {
|
|
82
|
+
opacity: 50%;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.chip {
|
|
86
|
+
--chip-default-outlined-color: var(--toggle-list-unselected-color, var(--chip-default-background-color));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
</style>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
export type Item = {
|
|
3
|
+
value: string | number;
|
|
4
|
+
label?: string | number;
|
|
5
|
+
data?: any;
|
|
6
|
+
};
|
|
7
|
+
import '../../../css/main.css';
|
|
8
|
+
declare const __propDef: {
|
|
9
|
+
props: {
|
|
10
|
+
values?: Item[] | undefined;
|
|
11
|
+
items: Item[];
|
|
12
|
+
multiple?: boolean | undefined;
|
|
13
|
+
disabled?: boolean | undefined;
|
|
14
|
+
};
|
|
15
|
+
events: {
|
|
16
|
+
[evt: string]: CustomEvent<any>;
|
|
17
|
+
};
|
|
18
|
+
slots: {};
|
|
19
|
+
};
|
|
20
|
+
export type ToggleListProps = typeof __propDef.props;
|
|
21
|
+
export type ToggleListEvents = typeof __propDef.events;
|
|
22
|
+
export type ToggleListSlots = typeof __propDef.slots;
|
|
23
|
+
export default class ToggleList extends SvelteComponent<ToggleListProps, ToggleListEvents, ToggleListSlots> {
|
|
24
|
+
}
|
|
25
|
+
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script context="module">import SimpleTable from "../../simple/lists/SimpleTable.svelte";
|
|
2
2
|
import Icon from "../../simple/media/Icon.svelte";
|
|
3
|
-
import Paginator from "
|
|
3
|
+
import Paginator from "../../simple/lists/Paginator.svelte";
|
|
4
4
|
import Dropdown from "../forms/Dropdown.svelte";
|
|
5
5
|
import { createEventDispatcher } from "svelte";
|
|
6
6
|
</script>
|
|
@@ -14,7 +14,7 @@ export let headers = [], items = [], sortedBy = void 0, sortDirection = void 0,
|
|
|
14
14
|
{ label: "20", value: 20 },
|
|
15
15
|
{ label: "50", value: 50 },
|
|
16
16
|
{ label: "100", value: 100 }
|
|
17
|
-
], hideRowsPerPage = false, totalElements = void 0, rowsPerPage = 20, filters = [], searchBarColumns = void 0, searchBarVisible = true, searchBarPlaceholder = "Type something to search...",
|
|
17
|
+
], hideRowsPerPage = false, totalElements = void 0, rowsPerPage = 20, filters = [], searchBarColumns = void 0, searchBarVisible = true, searchBarPlaceholder = "Type something to search...", lang = "en", editFilterMode = "one-edit";
|
|
18
18
|
let searchBarInput, searchText = void 0;
|
|
19
19
|
let dispatch = createEventDispatcher();
|
|
20
20
|
let rowsPerPageSelection = [];
|
|
@@ -39,14 +39,13 @@ function handleSearchChange(searchText2) {
|
|
|
39
39
|
let converter = new Converter();
|
|
40
40
|
let builder;
|
|
41
41
|
builder = converter.createBuilder({
|
|
42
|
-
filters: filters || []
|
|
43
|
-
customFiltersValues
|
|
42
|
+
filters: filters || []
|
|
44
43
|
});
|
|
45
44
|
if (!!searchText2 && !!searchBarColumns && searchBarColumns.length > 0) {
|
|
46
45
|
builder.where((b) => {
|
|
47
|
-
b.where(searchBarColumns[0], "
|
|
46
|
+
b.where(searchBarColumns[0], "ilike", "%" + searchText2 + "%");
|
|
48
47
|
for (let i = 1; i < searchBarColumns.length; i += 1) {
|
|
49
|
-
b.orWhere(searchBarColumns[i], "
|
|
48
|
+
b.orWhere(searchBarColumns[i], "ilike", "%" + searchText2 + "%");
|
|
50
49
|
}
|
|
51
50
|
});
|
|
52
51
|
}
|
|
@@ -64,12 +63,14 @@ function handleFiltersChange() {
|
|
|
64
63
|
<div class="paginated-table">
|
|
65
64
|
{#if searchBarVisible}
|
|
66
65
|
<slot name="search-bar" {handleSearchChange}>
|
|
67
|
-
<
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
66
|
+
<div class="search-bar-container">
|
|
67
|
+
<SearchBar
|
|
68
|
+
placeholder={searchBarPlaceholder}
|
|
69
|
+
bind:input={searchBarInput}
|
|
70
|
+
bind:value={searchText}
|
|
71
|
+
>
|
|
72
|
+
</SearchBar>
|
|
73
|
+
</div>
|
|
73
74
|
</slot>
|
|
74
75
|
{/if}
|
|
75
76
|
<div class="filter-container">
|
|
@@ -79,16 +80,16 @@ function handleFiltersChange() {
|
|
|
79
80
|
on:removeFilter={handleFiltersChange}
|
|
80
81
|
--filters-default-wrapper-width="100%"
|
|
81
82
|
{lang}
|
|
82
|
-
{
|
|
83
|
+
{editFilterMode}
|
|
83
84
|
>
|
|
84
85
|
<svelte:fragment slot="append">
|
|
85
86
|
<slot name="filter-append"></slot>
|
|
86
87
|
</svelte:fragment>
|
|
87
|
-
<svelte:fragment slot="custom" let:filter>
|
|
88
|
-
<slot name="custom-filter" {filter}></slot>
|
|
88
|
+
<svelte:fragment slot="custom-chip" let:filter>
|
|
89
|
+
<slot name="custom-filter-chip" {filter}></slot>
|
|
89
90
|
</svelte:fragment>
|
|
90
|
-
<svelte:fragment slot="custom
|
|
91
|
-
<slot name="custom-filter
|
|
91
|
+
<svelte:fragment slot="custom" let:filter let:updateFunction let:mAndDown>
|
|
92
|
+
<slot name="custom-filter" {filter} {updateFunction} {mAndDown}></slot>
|
|
92
93
|
</svelte:fragment>
|
|
93
94
|
</Filters>
|
|
94
95
|
</div>
|
|
@@ -210,7 +211,7 @@ function handleFiltersChange() {
|
|
|
210
211
|
}
|
|
211
212
|
|
|
212
213
|
.filter-container {
|
|
213
|
-
margin-top: 10px;
|
|
214
|
+
margin-top: var(--paginated-table-filter-container-margin-top, 10px);
|
|
214
215
|
display: flex;
|
|
215
216
|
align-items: center;
|
|
216
217
|
flex-direction: row;
|
|
@@ -218,6 +219,13 @@ function handleFiltersChange() {
|
|
|
218
219
|
width: 100%;
|
|
219
220
|
}
|
|
220
221
|
|
|
222
|
+
.search-bar-container {
|
|
223
|
+
padding: var(
|
|
224
|
+
--paginated-table-search-bar-container-padding,
|
|
225
|
+
var(--paginated-table-search-bar-container-default-padding, 0)
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
|
|
221
229
|
@media only screen and (max-width: 768px) {
|
|
222
230
|
.per-page-dropdown {
|
|
223
231
|
display: none;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SvelteComponent } from "svelte";
|
|
2
2
|
import SimpleTable from "../../simple/lists/SimpleTable.svelte";
|
|
3
|
-
import Paginator from "
|
|
3
|
+
import Paginator from "../../simple/lists/Paginator.svelte";
|
|
4
4
|
import Dropdown from "../forms/Dropdown.svelte";
|
|
5
5
|
import { type ComponentProps } from "svelte";
|
|
6
6
|
type ArrayElement<ArrayType extends readonly unknown[]> = ArrayType extends readonly (infer ElementType)[] ? ElementType : never;
|
|
@@ -25,13 +25,8 @@ declare const __propDef: {
|
|
|
25
25
|
searchBarColumns?: string[] | undefined;
|
|
26
26
|
searchBarVisible?: boolean | undefined;
|
|
27
27
|
searchBarPlaceholder?: string | undefined;
|
|
28
|
-
customFiltersValid?: {
|
|
29
|
-
[filterName: string]: boolean;
|
|
30
|
-
} | undefined;
|
|
31
|
-
customFiltersValues?: {
|
|
32
|
-
[filterName: string]: any;
|
|
33
|
-
} | undefined;
|
|
34
28
|
lang?: "it" | "en" | undefined;
|
|
29
|
+
editFilterMode?: "one-edit" | "multi-edit" | undefined;
|
|
35
30
|
};
|
|
36
31
|
events: {
|
|
37
32
|
sort: CustomEvent<{
|
|
@@ -51,11 +46,13 @@ declare const __propDef: {
|
|
|
51
46
|
handleSearchChange: (searchText: string | undefined) => void;
|
|
52
47
|
};
|
|
53
48
|
'filter-append': {};
|
|
54
|
-
'custom-filter': {
|
|
55
|
-
filter: import("../../../utils/filters/filters").Filter
|
|
49
|
+
'custom-filter-chip': {
|
|
50
|
+
filter: import("../../../utils/filters/filters").Filter;
|
|
56
51
|
};
|
|
57
|
-
'custom-filter
|
|
58
|
-
filter: import("../../../utils/filters/filters").Filter
|
|
52
|
+
'custom-filter': {
|
|
53
|
+
filter: import("../../../utils/filters/filters").Filter;
|
|
54
|
+
updateFunction: (filterName: string, newValue: any, newValid: boolean) => void;
|
|
55
|
+
mAndDown: boolean;
|
|
59
56
|
};
|
|
60
57
|
header: {
|
|
61
58
|
head: import("../../simple/lists/SimpleTable.svelte").Header;
|
|
@@ -2,13 +2,12 @@
|
|
|
2
2
|
import { GenericModes, SelectModes, StringModes } from "../../../utils/filters/filters";
|
|
3
3
|
import SimpleTextField from "../../simple/forms/SimpleTextField.svelte";
|
|
4
4
|
import DatePickerTextField from "../forms/DatePickerTextField.svelte";
|
|
5
|
-
import Button from "../../simple/buttons/Button.svelte";
|
|
6
|
-
import { createEventDispatcher } from "svelte";
|
|
7
5
|
import Validator from "../../../utils/filters/validator";
|
|
8
6
|
import Autocomplete from "../../simple/forms/Autocomplete.svelte";
|
|
9
7
|
import Checkbox from "../../simple/forms/Checkbox.svelte";
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
import Icon from "../../simple/media/Icon.svelte";
|
|
9
|
+
import ToggleList from "../forms/ToggleList.svelte";
|
|
10
|
+
export let filter = void 0, lang = "en", betweenFromLabel = lang == "en" ? "From" : "Da", betweenToLabel = lang == "en" ? "To" : "A", labelsMapper, forceApplyValid = false, editFilterMode = "one-edit", tmpFilter = void 0, mobile = false;
|
|
12
11
|
let advancedModeOptions, advancedModeSelectedOptions;
|
|
13
12
|
function initTmpFilter() {
|
|
14
13
|
tmpFilter = filter === void 0 ? void 0 : { ...filter };
|
|
@@ -30,17 +29,6 @@ $:
|
|
|
30
29
|
initTmpFilter();
|
|
31
30
|
closeDropDown();
|
|
32
31
|
}
|
|
33
|
-
let dispatch = createEventDispatcher();
|
|
34
|
-
function handleCancelFilterClick(e) {
|
|
35
|
-
dispatch("cancel");
|
|
36
|
-
}
|
|
37
|
-
function handleApplyFilterClick() {
|
|
38
|
-
if (!!filter && !!tmpFilter) {
|
|
39
|
-
filter = { ...tmpFilter };
|
|
40
|
-
filter.active = true;
|
|
41
|
-
dispatch("apply");
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
32
|
$:
|
|
45
33
|
if (!!tmpFilter) {
|
|
46
34
|
let modes;
|
|
@@ -90,35 +78,42 @@ $:
|
|
|
90
78
|
tmpFilter.value = false;
|
|
91
79
|
}
|
|
92
80
|
}
|
|
81
|
+
$:
|
|
82
|
+
if (!!tmpFilter && tmpFilter.type == "select") {
|
|
83
|
+
if (tmpFilter.values === void 0) {
|
|
84
|
+
tmpFilter.values = [];
|
|
85
|
+
}
|
|
86
|
+
}
|
|
93
87
|
</script>
|
|
94
88
|
|
|
95
89
|
|
|
96
90
|
{#if !!filter && !!tmpFilter}
|
|
97
|
-
<div class="filter-editor">
|
|
91
|
+
<div class="filter-editor" style:margin={editFilterMode === 'one-edit' ? '5%' : '0'}>
|
|
98
92
|
{#if filter.advanced}
|
|
99
93
|
<div class="advanced-mode">
|
|
100
94
|
<div class="label">
|
|
101
95
|
{filter.label[0].toUpperCase() + filter.label.slice(1)}
|
|
102
96
|
</div>
|
|
103
|
-
<div class="advaced-mode-selector" on:click|stopPropagation on:keypress>
|
|
97
|
+
<div class="advaced-mode-selector" on:click|stopPropagation on:keypress role="presentation" tabindex="-1">
|
|
104
98
|
<Dropdown
|
|
105
99
|
items={advancedModeOptions}
|
|
106
100
|
bind:values={advancedModeSelectedOptions}
|
|
107
101
|
on:change={handleAdvancedModeSelection}
|
|
108
102
|
bind:menuOpened={dropdownOpened}
|
|
109
103
|
openingId="advanced-filter"
|
|
104
|
+
mobileDrawer={mobile}
|
|
110
105
|
></Dropdown>
|
|
111
106
|
</div>
|
|
112
107
|
</div>
|
|
113
108
|
{/if}
|
|
114
109
|
|
|
115
|
-
<div class="fields" style:width="100%" on:click|stopPropagation on:keypress>
|
|
110
|
+
<div class="fields" style:width="100%" on:click|stopPropagation on:keypress role="presentation" tabindex="-1">
|
|
116
111
|
{#if !tmpFilter.advanced || (!!advancedModeSelectedOptions && advancedModeSelectedOptions.length > 0)}
|
|
117
112
|
{#if tmpFilter.type === "string" }
|
|
118
113
|
<SimpleTextField
|
|
119
114
|
bind:value={tmpFilter.value}
|
|
120
115
|
type="text"
|
|
121
|
-
placeholder={tmpFilter?.label}
|
|
116
|
+
placeholder={editFilterMode == 'one-edit' ? tmpFilter?.label : undefined}
|
|
122
117
|
--simple-textfield-width="100%"
|
|
123
118
|
></SimpleTextField>
|
|
124
119
|
{:else if tmpFilter.type === "date" && tmpFilter.mode !== 'between'}
|
|
@@ -129,18 +124,30 @@ $:
|
|
|
129
124
|
bind:menuOpened={calendarOpened}
|
|
130
125
|
on:day-click={() => {calendarOpened = false}}
|
|
131
126
|
--simple-textfield-width="100%"
|
|
132
|
-
|
|
127
|
+
>
|
|
128
|
+
<svelte:fragment slot="append-inner">
|
|
129
|
+
<Icon
|
|
130
|
+
name="mdi-close-circle"
|
|
131
|
+
click
|
|
132
|
+
on:click={() => {
|
|
133
|
+
if(!!tmpFilter && tmpFilter.type === 'date' && tmpFilter.mode !== 'between') {
|
|
134
|
+
tmpFilter.value = undefined
|
|
135
|
+
}
|
|
136
|
+
}}
|
|
137
|
+
></Icon>
|
|
138
|
+
</svelte:fragment>
|
|
139
|
+
</DatePickerTextField>
|
|
133
140
|
</div>
|
|
134
141
|
{:else if tmpFilter.type === "number" && tmpFilter.mode !== 'between'}
|
|
135
142
|
<div>
|
|
136
143
|
<SimpleTextField
|
|
137
144
|
bind:value={tmpFilter.value}
|
|
138
145
|
type="number"
|
|
139
|
-
placeholder={tmpFilter?.label}
|
|
146
|
+
placeholder={editFilterMode == 'one-edit' ? tmpFilter?.label : undefined}
|
|
140
147
|
--simple-textfield-width="100%"
|
|
141
148
|
></SimpleTextField>
|
|
142
149
|
</div>
|
|
143
|
-
{:else if tmpFilter.type === "select"}
|
|
150
|
+
{:else if tmpFilter.type === "select" && (tmpFilter.view === undefined || tmpFilter.view === 'autocomplete')}
|
|
144
151
|
<div
|
|
145
152
|
style:width="100%"
|
|
146
153
|
>
|
|
@@ -151,8 +158,19 @@ $:
|
|
|
151
158
|
maxVisibleChips={2}
|
|
152
159
|
--simple-textfield-width="0px"
|
|
153
160
|
--simple-text-field-margin-left="0px"
|
|
161
|
+
mobileDrawer={mobile}
|
|
154
162
|
></Autocomplete>
|
|
155
163
|
</div>
|
|
164
|
+
{:else if tmpFilter.type === "select" && (tmpFilter.view === 'toggle')}
|
|
165
|
+
<div
|
|
166
|
+
style:width="100%"
|
|
167
|
+
>
|
|
168
|
+
<ToggleList
|
|
169
|
+
bind:values={tmpFilter.values}
|
|
170
|
+
items={tmpFilter.items}
|
|
171
|
+
multiple
|
|
172
|
+
></ToggleList>
|
|
173
|
+
</div>
|
|
156
174
|
{:else if tmpFilter.type === "date" && tmpFilter.mode === 'between'}
|
|
157
175
|
<div>
|
|
158
176
|
<DatePickerTextField
|
|
@@ -162,7 +180,19 @@ $:
|
|
|
162
180
|
bind:menuOpened={calendarOpened}
|
|
163
181
|
on:day-click={() => {calendarOpened = false}}
|
|
164
182
|
--simple-textfield-width="100%"
|
|
165
|
-
|
|
183
|
+
>
|
|
184
|
+
<svelte:fragment slot="append-inner">
|
|
185
|
+
<Icon
|
|
186
|
+
name="mdi-close-circle"
|
|
187
|
+
click
|
|
188
|
+
on:click={() => {
|
|
189
|
+
if(!!tmpFilter && tmpFilter.type === 'date' && tmpFilter.mode === 'between') {
|
|
190
|
+
tmpFilter.from = undefined
|
|
191
|
+
}
|
|
192
|
+
}}
|
|
193
|
+
></Icon>
|
|
194
|
+
</svelte:fragment>
|
|
195
|
+
</DatePickerTextField>
|
|
166
196
|
</div>
|
|
167
197
|
<div>
|
|
168
198
|
<DatePickerTextField
|
|
@@ -172,7 +202,19 @@ $:
|
|
|
172
202
|
bind:menuOpened={calendarOpened2}
|
|
173
203
|
on:day-click={() => {calendarOpened2 = false}}
|
|
174
204
|
--simple-textfield-width="100%"
|
|
175
|
-
|
|
205
|
+
>
|
|
206
|
+
<svelte:fragment slot="append-inner">
|
|
207
|
+
<Icon
|
|
208
|
+
name="mdi-close-circle"
|
|
209
|
+
click
|
|
210
|
+
on:click={() => {
|
|
211
|
+
if(!!tmpFilter && tmpFilter.type === 'date' && tmpFilter.mode === 'between') {
|
|
212
|
+
tmpFilter.to = undefined
|
|
213
|
+
}
|
|
214
|
+
}}
|
|
215
|
+
></Icon>
|
|
216
|
+
</svelte:fragment>
|
|
217
|
+
</DatePickerTextField>
|
|
176
218
|
</div>
|
|
177
219
|
{:else if tmpFilter.type === "number" && tmpFilter.mode === 'between'}
|
|
178
220
|
<div>
|
|
@@ -205,27 +247,7 @@ $:
|
|
|
205
247
|
{/if}
|
|
206
248
|
{/if}
|
|
207
249
|
</div>
|
|
208
|
-
|
|
209
|
-
<div class="sub-filter-button">
|
|
210
|
-
<Button
|
|
211
|
-
--button-background-color="transparent"
|
|
212
|
-
--button-hover-background-color="rgb(var(--global-color-primary-500))"
|
|
213
|
-
--button-hover-box-shadow="0 0 0.5rem rgba(0, 0, 0, 0.3)"
|
|
214
|
-
--button-box-shadow="none"
|
|
215
|
-
on:click={handleCancelFilterClick}
|
|
216
|
-
>
|
|
217
|
-
{cancelFilterLabel}
|
|
218
|
-
</Button>
|
|
219
|
-
|
|
220
|
-
<Button
|
|
221
|
-
--button-min-width="100px"
|
|
222
|
-
on:click={handleApplyFilterClick}
|
|
223
|
-
disabled={applyFilterDisabled}
|
|
224
|
-
>
|
|
225
|
-
{applyFilterLabel}
|
|
226
|
-
|
|
227
|
-
</Button>
|
|
228
|
-
</div>
|
|
250
|
+
<slot name="filter-actions" {applyFilterDisabled} filter={tmpFilter}></slot>
|
|
229
251
|
</div>
|
|
230
252
|
{/if}
|
|
231
253
|
|
|
@@ -235,15 +257,6 @@ $:
|
|
|
235
257
|
flex-direction: column;
|
|
236
258
|
align-items: left;
|
|
237
259
|
gap:10px;
|
|
238
|
-
margin: 5%;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
.sub-filter-button {
|
|
242
|
-
display: flex;
|
|
243
|
-
column-gap: 10px;
|
|
244
|
-
flex-direction: row;
|
|
245
|
-
align-items: start;
|
|
246
|
-
margin-top: 10px;
|
|
247
260
|
}
|
|
248
261
|
|
|
249
262
|
.advanced-mode {
|
|
@@ -5,18 +5,17 @@ declare const __propDef: {
|
|
|
5
5
|
props: {
|
|
6
6
|
filter?: Filter | undefined;
|
|
7
7
|
lang?: "it" | "en" | undefined;
|
|
8
|
-
cancelFilterLabel?: string | undefined;
|
|
9
|
-
applyFilterLabel?: string | undefined;
|
|
10
8
|
betweenFromLabel?: string | undefined;
|
|
11
9
|
betweenToLabel?: string | undefined;
|
|
12
10
|
labelsMapper: LabelMapper;
|
|
13
11
|
forceApplyValid?: boolean | undefined;
|
|
12
|
+
editFilterMode?: "one-edit" | "multi-edit" | undefined;
|
|
13
|
+
tmpFilter?: Filter | undefined;
|
|
14
|
+
mobile?: boolean | undefined;
|
|
14
15
|
};
|
|
15
16
|
events: {
|
|
16
17
|
click: MouseEvent;
|
|
17
18
|
keypress: KeyboardEvent;
|
|
18
|
-
apply: CustomEvent<undefined>;
|
|
19
|
-
cancel: CustomEvent<undefined>;
|
|
20
19
|
} & {
|
|
21
20
|
[evt: string]: CustomEvent<any>;
|
|
22
21
|
};
|
|
@@ -24,6 +23,10 @@ declare const __propDef: {
|
|
|
24
23
|
custom: {
|
|
25
24
|
filter: Filter | undefined;
|
|
26
25
|
};
|
|
26
|
+
'filter-actions': {
|
|
27
|
+
applyFilterDisabled: boolean;
|
|
28
|
+
filter: Filter | undefined;
|
|
29
|
+
};
|
|
27
30
|
};
|
|
28
31
|
};
|
|
29
32
|
export type FilterEditorProps = typeof __propDef.props;
|