@likable-hair/svelte 4.2.5 → 4.3.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/components/composed/buttons/ActivableButton.svelte +25 -7
- package/dist/components/composed/common/HeadersDrawer.svelte +66 -28
- package/dist/components/composed/common/HeadersDrawer.svelte.d.ts +22 -12
- package/dist/components/composed/common/MenuOrDrawer.svelte +40 -12
- package/dist/components/composed/common/MenuOrDrawerOptions.svelte +51 -27
- package/dist/components/composed/common/MenuOrDrawerOptions.svelte.d.ts +15 -10
- package/dist/components/composed/common/QuickActions.svelte +59 -23
- package/dist/components/composed/common/ToolTip.svelte +51 -32
- package/dist/components/composed/dashboard/DashboardShaper.svelte +280 -147
- package/dist/components/composed/dashboard/DashboardShaper.svelte.d.ts +54 -45
- package/dist/components/composed/forms/AsyncAutocomplete.svelte +81 -30
- package/dist/components/composed/forms/AsyncAutocomplete.svelte.d.ts +12 -5
- package/dist/components/composed/forms/AvatarDropdown.svelte +146 -70
- package/dist/components/composed/forms/AvatarDropdown.svelte.d.ts +27 -22
- package/dist/components/composed/forms/ConfirmOrCancelButtons.svelte +65 -19
- package/dist/components/composed/forms/CountriesAutocomplete.svelte +33 -4
- package/dist/components/composed/forms/DatePickerTextField.svelte +266 -161
- package/dist/components/composed/forms/Dropdown.svelte +88 -21
- package/dist/components/composed/forms/Dropdown.svelte.d.ts +18 -13
- package/dist/components/composed/forms/IconsDropdown.svelte +85 -40
- package/dist/components/composed/forms/IconsDropdown.svelte.d.ts +15 -8
- package/dist/components/composed/forms/LabelAndSelect.svelte +46 -5
- package/dist/components/composed/forms/LabelAndTextField.svelte +56 -3
- package/dist/components/composed/forms/PeriodPicker.svelte +38 -18
- package/dist/components/composed/forms/PeriodPicker.svelte.d.ts +32 -7
- package/dist/components/composed/forms/PeriodSelector.svelte +427 -312
- package/dist/components/composed/forms/PeriodSelector.svelte.d.ts +20 -13
- package/dist/components/composed/forms/ToggleList.svelte +71 -37
- package/dist/components/composed/forms/ToggleList.svelte.d.ts +14 -7
- package/dist/components/composed/forms/YearPickerTextField.svelte +154 -82
- package/dist/components/composed/list/DynamicTable.svelte +1372 -809
- package/dist/components/composed/list/DynamicTable.svelte.d.ts +85 -70
- package/dist/components/composed/list/EnhancedPaginatedTable.svelte +75 -32
- package/dist/components/composed/list/EnhancedPaginatedTable.svelte.d.ts +16 -6
- package/dist/components/composed/list/PaginatedTable.svelte +324 -116
- package/dist/components/composed/list/PaginatedTable.svelte.d.ts +26 -22
- package/dist/components/composed/progress/HorizontalStackedProgress.svelte +67 -29
- package/dist/components/composed/search/DynamicFilters.svelte +126 -91
- package/dist/components/composed/search/FilterEditor.svelte +169 -109
- package/dist/components/composed/search/Filters.svelte +385 -275
- package/dist/components/composed/search/GlobalSearchTextField.svelte +102 -42
- package/dist/components/composed/search/GlobalSearchTextField.svelte.d.ts +23 -20
- package/dist/components/composed/search/MobileFilterEditor.svelte +174 -120
- package/dist/components/composed/search/QuickFilters.svelte +124 -75
- package/dist/components/composed/search/SearchBar.svelte +42 -3
- package/dist/components/composed/search/SearchResults.svelte +48 -5
- package/dist/components/composed/search/SearchResults.svelte.d.ts +17 -17
- package/dist/components/layouts/CollapsibleSideBarLayout.svelte +100 -24
- package/dist/components/layouts/StableDividedSideBarLayout.svelte +74 -24
- package/dist/components/layouts/UnstableDividedSideBarLayout.svelte +140 -57
- package/dist/components/simple/buttons/Button.svelte +86 -36
- package/dist/components/simple/buttons/LinkButton.svelte +81 -25
- package/dist/components/simple/charts/BarChart.svelte +137 -105
- package/dist/components/simple/charts/LineChart.svelte +124 -92
- package/dist/components/simple/charts/PieChart.svelte +51 -23
- package/dist/components/simple/common/CollapsibleDivider.svelte +58 -26
- package/dist/components/simple/common/Divider.svelte +2 -1
- package/dist/components/simple/common/InfiniteScroll.svelte +60 -34
- package/dist/components/simple/common/MediaQuery.svelte +28 -3
- package/dist/components/simple/common/Menu.svelte +516 -371
- package/dist/components/simple/common/NoData.svelte +18 -4
- package/dist/components/simple/common/VerticalDraggableList.svelte +52 -26
- package/dist/components/simple/common/VerticalDraggableList.svelte.d.ts +20 -9
- package/dist/components/simple/dashboards/DashboardGridShaper.svelte +28 -22
- package/dist/components/simple/dates/Calendar.svelte +142 -72
- package/dist/components/simple/dates/DatePicker.svelte +138 -71
- package/dist/components/simple/dates/MonthSelector.svelte +49 -13
- package/dist/components/simple/dates/YearSelector.svelte +73 -30
- package/dist/components/simple/dialogs/Dialog.svelte +109 -59
- package/dist/components/simple/forms/Autocomplete.svelte +341 -164
- package/dist/components/simple/forms/Autocomplete.svelte.d.ts +27 -20
- package/dist/components/simple/forms/Checkbox.svelte +57 -29
- package/dist/components/simple/forms/FileInput.svelte +103 -58
- package/dist/components/simple/forms/FileInputList.svelte +115 -51
- package/dist/components/simple/forms/RadioButton.svelte +36 -3
- package/dist/components/simple/forms/Select.svelte +30 -3
- package/dist/components/simple/forms/SimpleTextField.svelte +94 -4
- package/dist/components/simple/forms/Switch.svelte +33 -11
- package/dist/components/simple/forms/Textarea.svelte +22 -5
- package/dist/components/simple/forms/VerticalSwitch.svelte +19 -2
- package/dist/components/simple/forms/VerticalTextSwitch.svelte +35 -3
- package/dist/components/simple/lists/BoxList.svelte +42 -11
- package/dist/components/simple/lists/ColorInvertedSelector.svelte +83 -25
- package/dist/components/simple/lists/HierarchyMenu.svelte +55 -20
- package/dist/components/simple/lists/Paginator.svelte +53 -34
- package/dist/components/simple/lists/SelectableMenuList.svelte +52 -16
- package/dist/components/simple/lists/SelectableVerticalList.svelte +169 -85
- package/dist/components/simple/lists/SelectableVerticalList.svelte.d.ts +21 -14
- package/dist/components/simple/lists/SidebarMenuList.svelte +127 -79
- package/dist/components/simple/lists/SimpleTable.svelte +442 -245
- package/dist/components/simple/lists/SimpleTable.svelte.d.ts +31 -22
- package/dist/components/simple/loaders/CircularLoader.css +1 -1
- package/dist/components/simple/loaders/CircularLoader.svelte +11 -3
- package/dist/components/simple/loaders/Skeleton.svelte +3 -2
- package/dist/components/simple/media/Avatar.svelte +35 -15
- package/dist/components/simple/media/DescriptiveAvatar.svelte +30 -4
- package/dist/components/simple/media/FlagIcon.svelte +13 -3
- package/dist/components/simple/media/Icon.svelte +21 -6
- package/dist/components/simple/navigation/Breadcrumb.svelte +41 -9
- package/dist/components/simple/navigation/Chip.svelte +65 -29
- package/dist/components/simple/navigation/Drawer.svelte +132 -71
- package/dist/components/simple/navigation/HeaderMenu.svelte +69 -25
- package/dist/components/simple/navigation/Navigator.svelte +45 -11
- package/dist/components/simple/navigation/TabSwitcher.svelte +60 -19
- package/dist/components/simple/notifiers/AlertBanner.svelte +59 -11
- package/dist/components/simple/progress/ProgressBar.svelte +26 -10
- package/dist/components/simple/timeline/SimpleTimeLine.svelte +52 -5
- package/dist/components/simple/timeline/SimpleTimeLine.svelte.d.ts +16 -9
- package/dist/components/simple/typography/Code.svelte +41 -12
- package/dist/stores/layouts/unstableSidebarOpened.d.ts +1 -1
- package/dist/stores/layouts/unstableSidebarOpened.js +1 -1
- package/dist/stores/theme.js +2 -2
- package/dist/utils/filters/builder.d.ts +2 -2
- package/dist/utils/filters/builder.js +7 -7
- package/dist/utils/filters/modifiers/where.d.ts +1 -1
- package/dist/utils/teleporter.js +4 -4
- package/package.json +39 -33
|
@@ -1,156 +1,364 @@
|
|
|
1
|
-
<script lang="ts" generics="Item extends {[key: string]: any}, Data">
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
1
|
+
<script lang="ts" generics="Item extends {[key: string]: any}, Data">
|
|
2
|
+
import SimpleTable, {
|
|
3
|
+
type Header,
|
|
4
|
+
} from "../../simple/lists/SimpleTable.svelte";
|
|
5
|
+
import Paginator from "../../simple/lists/Paginator.svelte";
|
|
6
|
+
import Dropdown from "../forms/Dropdown.svelte";
|
|
7
|
+
import { type ComponentProps, type Snippet } from "svelte";
|
|
8
|
+
import Filters from "../search/Filters.svelte";
|
|
9
|
+
import SearchBar from "../search/SearchBar.svelte";
|
|
10
|
+
import type Builder from "../../../utils/filters/builder";
|
|
11
|
+
import Converter from "../../../utils/filters/filters";
|
|
12
|
+
import MediaQuery from "../../simple/common/MediaQuery.svelte";
|
|
13
|
+
import QuickFilters from "../search/QuickFilters.svelte";
|
|
14
|
+
import Checkbox from "../../simple/forms/Checkbox.svelte";
|
|
15
|
+
import { QuickActions } from "../../..";
|
|
16
|
+
import type { Action } from "../common/QuickActions.svelte";
|
|
17
|
+
|
|
18
|
+
interface Props extends Omit<ComponentProps<typeof SimpleTable<Item, Data>>, "class"> {
|
|
19
|
+
page?: NonNullable<ComponentProps<typeof Paginator>["page"]>;
|
|
20
|
+
maxPage?: ComponentProps<typeof Paginator>["maxPage"];
|
|
21
|
+
rowsPerPageOptions?: ComponentProps<typeof Dropdown>["items"];
|
|
22
|
+
hideRowsPerPage?: boolean;
|
|
23
|
+
totalElements?: number;
|
|
24
|
+
rowsPerPage?: number;
|
|
25
|
+
filters?: ComponentProps<typeof Filters>["filters"];
|
|
26
|
+
searchBarColumns?: string[];
|
|
27
|
+
searchBarVisible?: boolean;
|
|
28
|
+
searchBarPlaceholder?: string;
|
|
29
|
+
quickFiltersVisible?: boolean;
|
|
30
|
+
quickFilters?: ComponentProps<typeof QuickFilters>["filters"];
|
|
31
|
+
editFilterMode?: "one-edit" | "multi-edit";
|
|
32
|
+
showActiveFilters?: boolean;
|
|
33
|
+
dateLocale?: 'it' | 'en'
|
|
34
|
+
multiEditTabs?: ComponentProps<typeof Filters>['multiEditTabs']
|
|
35
|
+
searchTimeoutDelay?: number
|
|
36
|
+
showSelection?: boolean
|
|
37
|
+
selectionMode?: 'single' | 'multiple'
|
|
38
|
+
hideSelectAll?: boolean
|
|
39
|
+
selectedAll?: boolean
|
|
40
|
+
selectedItems?: ComponentProps<typeof SimpleTable<Item, Data>>['items']
|
|
41
|
+
uniqueKey?: keyof ComponentProps<typeof SimpleTable<Item, Data>>['items'][number]
|
|
42
|
+
hideActions?: boolean
|
|
43
|
+
actionsForSelectedItems?: Action[];
|
|
44
|
+
filterLabels?: Pick<ComponentProps<typeof Filters>,
|
|
45
|
+
'addFilterLabel' |
|
|
46
|
+
'applyFilterLabel' |
|
|
47
|
+
'filterTitleLabel' |
|
|
48
|
+
'cancelFilterLabel' |
|
|
49
|
+
'labelsMapper' |
|
|
50
|
+
'trueString' |
|
|
51
|
+
'falseString' |
|
|
52
|
+
'betweenSeparator'
|
|
53
|
+
>
|
|
54
|
+
class?: {
|
|
55
|
+
simpleTable?: ComponentProps<typeof SimpleTable<Item, Data>>["class"];
|
|
56
|
+
};
|
|
57
|
+
onpaginationChange?: (event: {
|
|
58
|
+
detail: {
|
|
59
|
+
rowsPerPage: number;
|
|
60
|
+
page: number;
|
|
61
|
+
builder: Builder;
|
|
62
|
+
};
|
|
63
|
+
}) => void;
|
|
64
|
+
onfiltersChange?: (event: {
|
|
65
|
+
detail: {
|
|
66
|
+
builder: Builder;
|
|
67
|
+
};
|
|
68
|
+
}) => void;
|
|
69
|
+
onremoveFilter?: ComponentProps<typeof Filters>["onremoveFilter"];
|
|
70
|
+
onremoveAllFilters?: ComponentProps<typeof Filters>["onremoveAllFilters"];
|
|
71
|
+
filterAppendSnippet?: ComponentProps<typeof Filters>["appendSnippet"];
|
|
72
|
+
customFilterChipSnippet?: ComponentProps<
|
|
73
|
+
typeof Filters
|
|
74
|
+
>["customChipSnippet"];
|
|
75
|
+
customFilterSnippet?: ComponentProps<typeof Filters>["customSnippet"];
|
|
76
|
+
searchBarSnippet?: Snippet<
|
|
77
|
+
[
|
|
78
|
+
{
|
|
79
|
+
handleSearchChange: typeof handleSearchChange;
|
|
80
|
+
},
|
|
81
|
+
]
|
|
82
|
+
>;
|
|
83
|
+
footerSnippet?: Snippet<
|
|
84
|
+
[
|
|
85
|
+
{
|
|
86
|
+
hideRowsPerPage: typeof hideRowsPerPage;
|
|
87
|
+
rowsPerPageOptions: typeof rowsPerPageOptions;
|
|
88
|
+
rowsPerPageSelection: typeof rowsPerPageSelection;
|
|
89
|
+
totalElements: typeof totalElements;
|
|
90
|
+
page: typeof page;
|
|
91
|
+
maxPage: typeof maxPage;
|
|
92
|
+
rowsPerPage: typeof rowsPerPage;
|
|
93
|
+
handlePaginationChange: typeof handlePaginationChange;
|
|
94
|
+
},
|
|
95
|
+
]
|
|
96
|
+
>;
|
|
97
|
+
rangeDescriptorSnippet?: Snippet<
|
|
98
|
+
[
|
|
99
|
+
{
|
|
100
|
+
totalElements: typeof totalElements;
|
|
101
|
+
page: typeof page;
|
|
102
|
+
maxPage: typeof maxPage;
|
|
103
|
+
rowsPerPage: typeof rowsPerPage;
|
|
104
|
+
},
|
|
105
|
+
]
|
|
106
|
+
>;
|
|
107
|
+
totalsSnippet?: Snippet<[]>
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
let {
|
|
111
|
+
headers = [],
|
|
112
|
+
items = [],
|
|
113
|
+
sortedBy = $bindable(undefined),
|
|
114
|
+
sortDirection = $bindable("asc"),
|
|
115
|
+
page = $bindable(1),
|
|
116
|
+
maxPage = undefined,
|
|
117
|
+
rowsPerPageOptions = [
|
|
118
|
+
{ label: "20", value: 20 },
|
|
119
|
+
{ label: "50", value: 50 },
|
|
120
|
+
{ label: "100", value: 100 },
|
|
121
|
+
],
|
|
122
|
+
hideRowsPerPage = false,
|
|
123
|
+
totalElements = undefined,
|
|
124
|
+
rowsPerPage = $bindable(20),
|
|
125
|
+
filters = $bindable(),
|
|
126
|
+
quickFilters = $bindable(),
|
|
127
|
+
searchBarColumns = undefined,
|
|
128
|
+
searchBarVisible = true,
|
|
129
|
+
quickFiltersVisible = false,
|
|
130
|
+
lang = "en",
|
|
131
|
+
dateLocale,
|
|
132
|
+
multiEditTabs,
|
|
133
|
+
searchBarPlaceholder = lang == 'en' ? "Type to search..." : "Scrivi per cercare...",
|
|
134
|
+
editFilterMode = "one-edit",
|
|
135
|
+
showActiveFilters = true,
|
|
136
|
+
resizableColumns = false,
|
|
137
|
+
resizedColumnSizeWithPadding = $bindable({}),
|
|
138
|
+
pointerOnRowHover = undefined,
|
|
139
|
+
doubleClickActive = false,
|
|
140
|
+
doubleClickDelay = 250,
|
|
141
|
+
searchTimeoutDelay = 300,
|
|
142
|
+
hideSelectAll,
|
|
143
|
+
showSelection,
|
|
144
|
+
selectedItems = $bindable([]),
|
|
145
|
+
selectionMode = 'multiple',
|
|
146
|
+
selectedAll = $bindable(),
|
|
147
|
+
uniqueKey = 'id',
|
|
148
|
+
hideActions,
|
|
149
|
+
actionsForSelectedItems = [],
|
|
150
|
+
filterLabels,
|
|
151
|
+
calculateRowStyles = undefined,
|
|
152
|
+
calculateRowClasses = undefined,
|
|
153
|
+
class: clazz = {},
|
|
154
|
+
onfiltersChange,
|
|
155
|
+
onpaginationChange,
|
|
156
|
+
onremoveFilter,
|
|
157
|
+
onremoveAllFilters,
|
|
158
|
+
customFilterChipSnippet,
|
|
159
|
+
customFilterSnippet,
|
|
160
|
+
filterAppendSnippet,
|
|
161
|
+
onrowClick,
|
|
162
|
+
onrowDoubleClick,
|
|
163
|
+
appendSnippet,
|
|
164
|
+
customSnippet,
|
|
165
|
+
headerLabelSnippet,
|
|
166
|
+
headerSnippet,
|
|
167
|
+
onsort,
|
|
168
|
+
footerSnippet,
|
|
169
|
+
rangeDescriptorSnippet,
|
|
170
|
+
searchBarSnippet,
|
|
171
|
+
noDataSnippet,
|
|
172
|
+
totalsSnippet,
|
|
173
|
+
oncolumnResize,
|
|
174
|
+
prependSnippet: prependSnippetInternal,
|
|
175
|
+
...rest
|
|
176
|
+
}: Props = $props();
|
|
177
|
+
|
|
178
|
+
let searchBarInput: HTMLElement | undefined = $state(),
|
|
179
|
+
searchText: string | undefined = $state(),
|
|
180
|
+
sortModify: Header<Data>["sortModify"],
|
|
181
|
+
searchTimeout: NodeJS.Timeout,
|
|
182
|
+
selectedIndexes: number[] = []
|
|
183
|
+
|
|
184
|
+
let rowsPerPageSelection: ComponentProps<typeof Dropdown>["values"] = $state(
|
|
185
|
+
[],
|
|
186
|
+
);
|
|
187
|
+
|
|
188
|
+
$effect(() => {
|
|
20
189
|
rowsPerPageSelection = [
|
|
21
|
-
|
|
190
|
+
{ label: rowsPerPage.toString(), value: rowsPerPage },
|
|
22
191
|
];
|
|
23
|
-
});
|
|
24
|
-
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
$effect(() => {
|
|
25
195
|
if (totalElements !== undefined)
|
|
26
|
-
|
|
27
|
-
});
|
|
28
|
-
|
|
196
|
+
maxPage = Math.max(Math.ceil(totalElements / rowsPerPage), 1);
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
function handleRowsPerPageChange(
|
|
200
|
+
event: Parameters<
|
|
201
|
+
NonNullable<ComponentProps<typeof Dropdown>["onchange"]>
|
|
202
|
+
>[0],
|
|
203
|
+
) {
|
|
29
204
|
rowsPerPage = Number(event.detail.selection?.[0].value);
|
|
30
205
|
handlePaginationChange();
|
|
31
|
-
}
|
|
32
|
-
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
function handlePaginationChange() {
|
|
33
209
|
let builder = buildFilters();
|
|
210
|
+
|
|
34
211
|
if (onpaginationChange) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
212
|
+
onpaginationChange({
|
|
213
|
+
detail: {
|
|
214
|
+
rowsPerPage,
|
|
215
|
+
page,
|
|
216
|
+
builder,
|
|
217
|
+
},
|
|
218
|
+
});
|
|
42
219
|
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
function handleSearchChange(searchText: string | undefined) {
|
|
223
|
+
clearTimeout(searchTimeout)
|
|
224
|
+
|
|
46
225
|
searchTimeout = setTimeout(() => {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
226
|
+
let builder = buildFilters({ searchText })
|
|
227
|
+
|
|
228
|
+
onfiltersChange?.({
|
|
229
|
+
detail: { builder },
|
|
230
|
+
});
|
|
51
231
|
}, searchTimeoutDelay);
|
|
52
|
-
}
|
|
53
|
-
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
function handleFiltersChange() {
|
|
54
235
|
let builder = buildFilters({ searchText });
|
|
236
|
+
|
|
55
237
|
onfiltersChange?.({
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
238
|
+
detail: {
|
|
239
|
+
builder,
|
|
240
|
+
},
|
|
59
241
|
});
|
|
60
|
-
}
|
|
61
|
-
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
function handleRemoveFilter(
|
|
245
|
+
event: Parameters<
|
|
246
|
+
NonNullable<ComponentProps<typeof Filters>["onremoveFilter"]>
|
|
247
|
+
>[0],
|
|
248
|
+
) {
|
|
62
249
|
handleFiltersChange();
|
|
250
|
+
|
|
63
251
|
if (onremoveFilter) {
|
|
64
|
-
|
|
252
|
+
onremoveFilter(event);
|
|
65
253
|
}
|
|
66
|
-
}
|
|
67
|
-
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
function handleRemoveAllFilters() {
|
|
68
257
|
handleFiltersChange();
|
|
258
|
+
|
|
69
259
|
if (onremoveAllFilters) {
|
|
70
|
-
|
|
260
|
+
onremoveAllFilters();
|
|
71
261
|
}
|
|
72
|
-
}
|
|
73
|
-
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
function handleOnSort(
|
|
265
|
+
event: Parameters<
|
|
266
|
+
NonNullable<ComponentProps<typeof SimpleTable<Item, Data>>["onsort"]>
|
|
267
|
+
>[0],
|
|
268
|
+
) {
|
|
74
269
|
sortModify = event.detail.sortModify;
|
|
75
270
|
handleFiltersChange();
|
|
271
|
+
|
|
76
272
|
if (onsort) {
|
|
77
|
-
|
|
273
|
+
onsort(event);
|
|
78
274
|
}
|
|
79
|
-
}
|
|
80
|
-
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
function buildFilters(params?: { searchText?: string | undefined }) {
|
|
81
278
|
let converter = new Converter();
|
|
82
|
-
let builder;
|
|
279
|
+
let builder: Builder;
|
|
280
|
+
|
|
83
281
|
builder = converter.createBuilder({
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
282
|
+
filters: [
|
|
283
|
+
...(filters || []),
|
|
284
|
+
...(quickFilters || [])
|
|
285
|
+
],
|
|
88
286
|
});
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
287
|
+
|
|
288
|
+
if (
|
|
289
|
+
!!params?.searchText &&
|
|
290
|
+
!!searchBarColumns &&
|
|
291
|
+
searchBarColumns.length > 0
|
|
292
|
+
) {
|
|
293
|
+
builder.where((b) => {
|
|
294
|
+
b.where(searchBarColumns![0], "ilike", "%" + params?.searchText + "%");
|
|
295
|
+
for (let i = 1; i < searchBarColumns!.length; i += 1) {
|
|
296
|
+
b.orWhere(
|
|
297
|
+
searchBarColumns![i],
|
|
298
|
+
"ilike",
|
|
299
|
+
"%" + params?.searchText + "%",
|
|
300
|
+
);
|
|
301
|
+
}
|
|
302
|
+
});
|
|
98
303
|
}
|
|
304
|
+
|
|
99
305
|
if (!!sortedBy) {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
306
|
+
if (sortModify) {
|
|
307
|
+
builder = sortModify({
|
|
308
|
+
builder,
|
|
309
|
+
sortDirection: sortDirection || "asc",
|
|
310
|
+
});
|
|
311
|
+
} else {
|
|
312
|
+
builder.orderBy(sortedBy, sortDirection || "asc");
|
|
313
|
+
}
|
|
109
314
|
}
|
|
110
|
-
|
|
111
|
-
|
|
315
|
+
|
|
316
|
+
selectedItems = []
|
|
317
|
+
selectedIndexes = []
|
|
318
|
+
|
|
112
319
|
return builder;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
function handleSelectAll() {
|
|
323
|
+
selectedAll = !selectedAll
|
|
324
|
+
selectedItems = []
|
|
325
|
+
selectedIndexes = []
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
function handleSelect(item: Item, shiftKeyPressed: boolean) {
|
|
120
329
|
let index = selectedItems.findIndex((i) => i[uniqueKey] == item[uniqueKey]);
|
|
121
330
|
// if item is not in the selectedItems array, add it
|
|
122
331
|
if (index == -1) {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
}
|
|
136
|
-
for (let i = lastSelectedIndex + 1; i <= selectedIndex; i++) {
|
|
137
|
-
if (!selectedItems.find((selectedItem) => selectedItem[uniqueKey] == items[i][uniqueKey])) {
|
|
138
|
-
selectedItems = [...selectedItems, items[i]];
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
332
|
+
if (selectionMode == "single") {
|
|
333
|
+
selectedItems = [item];
|
|
334
|
+
selectedIndexes = [items.findIndex(r => r[uniqueKey] == item[uniqueKey])]
|
|
335
|
+
} else if (selectionMode == "multiple") {
|
|
336
|
+
if(shiftKeyPressed && selectedIndexes.length > 0) {
|
|
337
|
+
let lastSelectedIndex = selectedIndexes[selectedIndexes.length - 1],
|
|
338
|
+
selectedIndex = items.findIndex(r => r[uniqueKey] == item[uniqueKey])
|
|
339
|
+
if(selectedIndex != -1) {
|
|
340
|
+
if(selectedIndex < lastSelectedIndex) {
|
|
341
|
+
let x = lastSelectedIndex
|
|
342
|
+
lastSelectedIndex = selectedIndex - 1
|
|
343
|
+
selectedIndex = x
|
|
142
344
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
345
|
+
for (let i = lastSelectedIndex + 1; i <= selectedIndex; i++) {
|
|
346
|
+
if(!selectedItems.find((selectedItem) => selectedItem[uniqueKey] == items[i][uniqueKey])) {
|
|
347
|
+
selectedItems = [...selectedItems, items[i]]
|
|
348
|
+
}
|
|
146
349
|
}
|
|
350
|
+
}
|
|
147
351
|
}
|
|
352
|
+
else {
|
|
353
|
+
selectedItems = [...selectedItems, item];
|
|
354
|
+
selectedIndexes.push(items.findIndex(r => r[uniqueKey] == item[uniqueKey]))
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
} else {
|
|
358
|
+
selectedItems = selectedItems.filter((i) => i[uniqueKey] != item[uniqueKey]);
|
|
359
|
+
selectedIndexes = selectedIndexes.filter(r => r != items.findIndex(r => r[uniqueKey] == item[uniqueKey]))
|
|
148
360
|
}
|
|
149
|
-
|
|
150
|
-
selectedItems = selectedItems.filter((i) => i[uniqueKey] != item[uniqueKey]);
|
|
151
|
-
selectedIndexes = selectedIndexes.filter(r => r != items.findIndex(r => r[uniqueKey] == item[uniqueKey]));
|
|
152
|
-
}
|
|
153
|
-
}
|
|
361
|
+
}
|
|
154
362
|
</script>
|
|
155
363
|
|
|
156
364
|
<div class="paginated-table">
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Header } from "../../simple/lists/SimpleTable.svelte";
|
|
1
|
+
import SimpleTable, { type Header } from "../../simple/lists/SimpleTable.svelte";
|
|
2
2
|
import Paginator from "../../simple/lists/Paginator.svelte";
|
|
3
3
|
import Dropdown from "../forms/Dropdown.svelte";
|
|
4
4
|
import { type ComponentProps, type Snippet } from "svelte";
|
|
@@ -6,10 +6,10 @@ import Filters from "../search/Filters.svelte";
|
|
|
6
6
|
import type Builder from "../../../utils/filters/builder";
|
|
7
7
|
import QuickFilters from "../search/QuickFilters.svelte";
|
|
8
8
|
import type { Action } from "../common/QuickActions.svelte";
|
|
9
|
-
declare
|
|
9
|
+
declare function $$render<Item extends {
|
|
10
10
|
[key: string]: any;
|
|
11
|
-
}, Data> {
|
|
12
|
-
props
|
|
11
|
+
}, Data>(): {
|
|
12
|
+
props: Omit<{
|
|
13
13
|
headers: Header<Data>[];
|
|
14
14
|
items: Item[];
|
|
15
15
|
sortedBy?: string;
|
|
@@ -100,31 +100,26 @@ declare class __sveltets_Render<Item extends {
|
|
|
100
100
|
selectionMode?: "single" | "multiple";
|
|
101
101
|
hideSelectAll?: boolean;
|
|
102
102
|
selectedAll?: boolean;
|
|
103
|
-
selectedItems?: Item[]
|
|
104
|
-
uniqueKey?: keyof Item
|
|
103
|
+
selectedItems?: ComponentProps<typeof SimpleTable<Item, Data>>["items"];
|
|
104
|
+
uniqueKey?: keyof ComponentProps<typeof SimpleTable<Item, Data>>["items"][number];
|
|
105
105
|
hideActions?: boolean;
|
|
106
106
|
actionsForSelectedItems?: Action[];
|
|
107
107
|
filterLabels?: Pick<ComponentProps<typeof Filters>, "addFilterLabel" | "applyFilterLabel" | "filterTitleLabel" | "cancelFilterLabel" | "labelsMapper" | "trueString" | "falseString" | "betweenSeparator">;
|
|
108
108
|
class?: {
|
|
109
|
-
simpleTable?:
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
row?: string;
|
|
113
|
-
cell?: string;
|
|
114
|
-
} | undefined;
|
|
115
|
-
} | undefined;
|
|
116
|
-
onpaginationChange?: ((event: {
|
|
109
|
+
simpleTable?: ComponentProps<typeof SimpleTable<Item, Data>>["class"];
|
|
110
|
+
};
|
|
111
|
+
onpaginationChange?: (event: {
|
|
117
112
|
detail: {
|
|
118
113
|
rowsPerPage: number;
|
|
119
114
|
page: number;
|
|
120
115
|
builder: Builder;
|
|
121
116
|
};
|
|
122
|
-
}) => void
|
|
123
|
-
onfiltersChange?: (
|
|
117
|
+
}) => void;
|
|
118
|
+
onfiltersChange?: (event: {
|
|
124
119
|
detail: {
|
|
125
120
|
builder: Builder;
|
|
126
121
|
};
|
|
127
|
-
}) => void
|
|
122
|
+
}) => void;
|
|
128
123
|
onremoveFilter?: ComponentProps<typeof Filters>["onremoveFilter"];
|
|
129
124
|
onremoveAllFilters?: ComponentProps<typeof Filters>["onremoveAllFilters"];
|
|
130
125
|
filterAppendSnippet?: ComponentProps<typeof Filters>["appendSnippet"];
|
|
@@ -132,7 +127,7 @@ declare class __sveltets_Render<Item extends {
|
|
|
132
127
|
customFilterSnippet?: ComponentProps<typeof Filters>["customSnippet"];
|
|
133
128
|
searchBarSnippet?: Snippet<[{
|
|
134
129
|
handleSearchChange: (searchText: string | undefined) => void;
|
|
135
|
-
}]
|
|
130
|
+
}]>;
|
|
136
131
|
footerSnippet?: Snippet<[{
|
|
137
132
|
hideRowsPerPage: boolean;
|
|
138
133
|
rowsPerPageOptions: import("../forms/AsyncAutocomplete.svelte").Item<unknown>[];
|
|
@@ -142,17 +137,26 @@ declare class __sveltets_Render<Item extends {
|
|
|
142
137
|
maxPage: number | undefined;
|
|
143
138
|
rowsPerPage: number;
|
|
144
139
|
handlePaginationChange: () => void;
|
|
145
|
-
}]
|
|
140
|
+
}]>;
|
|
146
141
|
rangeDescriptorSnippet?: Snippet<[{
|
|
147
142
|
totalElements: number | undefined;
|
|
148
143
|
page: number;
|
|
149
144
|
maxPage: number | undefined;
|
|
150
145
|
rowsPerPage: number;
|
|
151
|
-
}]
|
|
146
|
+
}]>;
|
|
152
147
|
totalsSnippet?: Snippet<[]>;
|
|
153
148
|
};
|
|
154
|
-
|
|
155
|
-
|
|
149
|
+
exports: {};
|
|
150
|
+
bindings: "page" | "sortedBy" | "sortDirection" | "resizedColumnSizeWithPadding" | "filters" | "selectedItems" | "rowsPerPage" | "quickFilters" | "selectedAll";
|
|
151
|
+
slots: {};
|
|
152
|
+
events: {};
|
|
153
|
+
};
|
|
154
|
+
declare class __sveltets_Render<Item extends {
|
|
155
|
+
[key: string]: any;
|
|
156
|
+
}, Data> {
|
|
157
|
+
props(): ReturnType<typeof $$render<Item, Data>>['props'];
|
|
158
|
+
events(): ReturnType<typeof $$render<Item, Data>>['events'];
|
|
159
|
+
slots(): ReturnType<typeof $$render<Item, Data>>['slots'];
|
|
156
160
|
bindings(): "page" | "sortedBy" | "sortDirection" | "resizedColumnSizeWithPadding" | "filters" | "selectedItems" | "rowsPerPage" | "quickFilters" | "selectedAll";
|
|
157
161
|
exports(): {};
|
|
158
162
|
}
|