@likable-hair/svelte 3.0.20 → 3.0.21
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/common/MenuOrDrawer.svelte +3 -2
- package/dist/components/composed/common/MenuOrDrawer.svelte.d.ts +2 -1
- package/dist/components/composed/common/MenuOrDrawerOptions.svelte +2 -2
- package/dist/components/composed/common/MenuOrDrawerOptions.svelte.d.ts +1 -1
- package/dist/components/composed/forms/Dropdown.svelte +6 -4
- package/dist/components/composed/forms/Dropdown.svelte.d.ts +3 -0
- package/dist/components/composed/list/PaginatedTable.svelte +62 -10
- package/dist/components/composed/list/PaginatedTable.svelte.d.ts +3 -0
- package/dist/components/composed/search/FilterEditor.svelte +260 -0
- package/dist/components/composed/search/FilterEditor.svelte.d.ts +29 -0
- package/dist/components/composed/search/Filters.svelte +445 -42
- package/dist/components/composed/search/Filters.svelte.d.ts +24 -4
- package/dist/components/composed/search/MobileFilterEditor.svelte +342 -0
- package/dist/components/composed/search/MobileFilterEditor.svelte.d.ts +34 -0
- package/dist/components/composed/search/SearchBar.svelte +12 -11
- package/dist/components/composed/search/SearchBar.svelte.d.ts +1 -0
- package/dist/components/simple/buttons/Button.svelte +4 -0
- package/dist/components/simple/common/Menu.svelte +29 -10
- package/dist/components/simple/common/Menu.svelte.d.ts +2 -0
- package/dist/components/simple/dates/DatePickerTextField.svelte +91 -61
- package/dist/components/simple/dates/DatePickerTextField.svelte.d.ts +2 -0
- package/dist/components/simple/dialogs/Dialog.svelte.d.ts +1 -1
- package/dist/components/simple/forms/Autocomplete.css +1 -0
- package/dist/components/simple/forms/Autocomplete.svelte +96 -46
- package/dist/components/simple/forms/Autocomplete.svelte.d.ts +3 -0
- package/dist/components/simple/lists/SelectableVerticalList.svelte +52 -9
- package/dist/components/simple/lists/SelectableVerticalList.svelte.d.ts +9 -0
- package/dist/components/simple/lists/SimpleTable.svelte.d.ts +2 -2
- package/dist/components/simple/lists/columnTypes.d.ts +1 -1
- package/dist/components/simple/media/DescriptiveAvatar.svelte.d.ts +1 -1
- package/dist/components/simple/navigation/Chip.css +2 -1
- package/dist/components/simple/navigation/Chip.svelte +16 -5
- package/dist/components/simple/navigation/Chip.svelte.d.ts +1 -0
- package/dist/components/simple/navigation/Drawer.svelte +10 -0
- package/dist/components/simple/navigation/Drawer.svelte.d.ts +1 -0
- package/dist/utils/filters/builder.d.ts +1 -1
- package/dist/utils/filters/builder.js +1 -1
- package/dist/utils/filters/filters.d.ts +67 -4
- package/dist/utils/filters/filters.js +73 -0
- package/dist/utils/filters/modifiers/where.d.ts +1 -1
- package/dist/utils/filters/validator.d.ts +4 -0
- package/dist/utils/filters/validator.js +30 -0
- package/package.json +2 -1
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
<script>import "../../../css/main.css";
|
|
2
2
|
import "./Drawer.css";
|
|
3
3
|
import Navigator from "./Navigator.svelte";
|
|
4
|
+
import { createEventDispatcher } from "svelte";
|
|
4
5
|
export let open = false, position = "left", overlay = true, items = [];
|
|
6
|
+
const dispatch = createEventDispatcher();
|
|
5
7
|
function handleClickOverlay() {
|
|
6
8
|
open = false;
|
|
9
|
+
overlay = false;
|
|
10
|
+
dispatch("close");
|
|
7
11
|
}
|
|
12
|
+
$:
|
|
13
|
+
if (open) {
|
|
14
|
+
overlay = true;
|
|
15
|
+
}
|
|
8
16
|
</script>
|
|
9
17
|
|
|
10
18
|
<div
|
|
@@ -75,6 +83,8 @@ function handleClickOverlay() {
|
|
|
75
83
|
);
|
|
76
84
|
color: var(--drawer-color, var(--drawer-default-color));
|
|
77
85
|
overflow: var(--drawer-overflow, var(--drawer-default-overflow));
|
|
86
|
+
border-radius: var(--drawer-border-radius);
|
|
87
|
+
margin: var(--drawer-margin);
|
|
78
88
|
}
|
|
79
89
|
|
|
80
90
|
.overlay {
|
|
@@ -10,7 +10,7 @@ export default class Builder {
|
|
|
10
10
|
where(callback: (builder: Builder) => void): Builder;
|
|
11
11
|
where(key: Record<string, string | number | Date>): Builder;
|
|
12
12
|
where(key: string, value: string | number | Date): Builder;
|
|
13
|
-
where(key: string, operator: string, value: string | number | Date): Builder;
|
|
13
|
+
where(key: string, operator: string, value: string | number | Date | boolean): Builder;
|
|
14
14
|
whereNot(callback: (builder: Builder) => void): Builder;
|
|
15
15
|
whereNot(key: Record<string, string | number | Date>): Builder;
|
|
16
16
|
whereNot(key: string, value: string | number | Date): Builder;
|
|
@@ -7,7 +7,7 @@ export default class Builder {
|
|
|
7
7
|
return this.applyWhereClause('and', first, second, third);
|
|
8
8
|
}
|
|
9
9
|
whereNot(first, second, third) {
|
|
10
|
-
return this.applyWhereClause('
|
|
10
|
+
return this.applyWhereClause('andNot', first, second, third);
|
|
11
11
|
}
|
|
12
12
|
orWhere(first, second, third) {
|
|
13
13
|
return this.applyWhereClause('or', first, second, third);
|
|
@@ -1,26 +1,89 @@
|
|
|
1
1
|
import Builder from "./builder";
|
|
2
|
+
export declare const StringModes: readonly ["equal", "like", "ilike"];
|
|
3
|
+
export type StringMode = typeof StringModes[number];
|
|
4
|
+
export declare const GenericModes: readonly ["equal", "greater", "lower", "between"];
|
|
5
|
+
export type DateMode = typeof GenericModes[number];
|
|
6
|
+
export type NumberMode = typeof GenericModes[number];
|
|
7
|
+
export declare const SelectModes: readonly ["equal", "different"];
|
|
8
|
+
export type SelectMode = typeof SelectModes[number];
|
|
2
9
|
type MultiStringFilter = {
|
|
3
10
|
type: 'multiString';
|
|
4
11
|
columns: string[];
|
|
5
12
|
operator?: 'or' | 'and';
|
|
13
|
+
value?: string;
|
|
14
|
+
};
|
|
15
|
+
type ChoiceFilter = {
|
|
16
|
+
type: 'choice';
|
|
17
|
+
column: string;
|
|
18
|
+
value?: string;
|
|
19
|
+
operator?: 'or' | 'and';
|
|
20
|
+
options: any[];
|
|
6
21
|
};
|
|
7
22
|
type StringFilter = {
|
|
8
23
|
type: 'string';
|
|
9
24
|
column: string;
|
|
10
|
-
value
|
|
11
|
-
mode?:
|
|
25
|
+
value?: string;
|
|
26
|
+
mode?: StringMode;
|
|
27
|
+
};
|
|
28
|
+
type DateFilter = {
|
|
29
|
+
type: 'date';
|
|
30
|
+
column: string;
|
|
31
|
+
} & ({
|
|
32
|
+
mode: 'between';
|
|
33
|
+
from?: Date;
|
|
34
|
+
to?: Date;
|
|
35
|
+
} | {
|
|
36
|
+
mode: 'equal' | 'greater' | 'lower';
|
|
37
|
+
value?: Date;
|
|
38
|
+
});
|
|
39
|
+
type NumberFilter = {
|
|
40
|
+
type: 'number';
|
|
41
|
+
column: string;
|
|
42
|
+
} & ({
|
|
43
|
+
mode: 'between';
|
|
44
|
+
from?: number;
|
|
45
|
+
to?: number;
|
|
46
|
+
} | {
|
|
47
|
+
mode: 'equal' | 'greater' | 'lower';
|
|
48
|
+
value?: number;
|
|
49
|
+
});
|
|
50
|
+
type SelectFilter = {
|
|
51
|
+
type: 'select';
|
|
52
|
+
column: string;
|
|
53
|
+
mode: SelectMode;
|
|
54
|
+
items: {
|
|
55
|
+
value: string | number;
|
|
56
|
+
label: string;
|
|
57
|
+
}[];
|
|
58
|
+
values?: {
|
|
59
|
+
value: string | number;
|
|
60
|
+
label?: string | number;
|
|
61
|
+
}[];
|
|
62
|
+
};
|
|
63
|
+
type BoolFilter = {
|
|
64
|
+
type: 'bool';
|
|
65
|
+
column: string;
|
|
66
|
+
mode: 'equal';
|
|
67
|
+
value?: boolean;
|
|
68
|
+
advanced?: false;
|
|
69
|
+
desctiprion: string;
|
|
12
70
|
};
|
|
13
71
|
export type Filter = {
|
|
14
72
|
name: string;
|
|
15
|
-
active
|
|
73
|
+
active?: boolean;
|
|
16
74
|
hidden?: boolean;
|
|
17
75
|
label: string;
|
|
18
|
-
|
|
76
|
+
advanced?: boolean;
|
|
77
|
+
} & (StringFilter | MultiStringFilter | ChoiceFilter | DateFilter | NumberFilter | SelectFilter | BoolFilter);
|
|
19
78
|
export default class Converter {
|
|
20
79
|
constructor();
|
|
21
80
|
createBuilder(params: {
|
|
22
81
|
filters: Filter[];
|
|
23
82
|
}): Builder;
|
|
24
83
|
private applyStringFilter;
|
|
84
|
+
private applyDateFilter;
|
|
85
|
+
private applyNumberFilter;
|
|
86
|
+
private applySelectFilter;
|
|
87
|
+
private applyBooleanFilter;
|
|
25
88
|
}
|
|
26
89
|
export {};
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import Builder from "./builder";
|
|
2
|
+
export const StringModes = ['equal', 'like', 'ilike'];
|
|
3
|
+
export const GenericModes = ['equal', 'greater', 'lower', 'between'];
|
|
4
|
+
export const SelectModes = ['equal', 'different'];
|
|
2
5
|
export default class Converter {
|
|
3
6
|
constructor() {
|
|
4
7
|
}
|
|
@@ -9,6 +12,18 @@ export default class Converter {
|
|
|
9
12
|
if (filter.type == 'string') {
|
|
10
13
|
this.applyStringFilter({ builder, filter });
|
|
11
14
|
}
|
|
15
|
+
else if (filter.type == 'date') {
|
|
16
|
+
this.applyDateFilter({ builder, filter });
|
|
17
|
+
}
|
|
18
|
+
else if (filter.type == 'number') {
|
|
19
|
+
this.applyNumberFilter({ builder, filter });
|
|
20
|
+
}
|
|
21
|
+
else if (filter.type == 'select') {
|
|
22
|
+
this.applySelectFilter({ builder, filter });
|
|
23
|
+
}
|
|
24
|
+
else if (filter.type == 'bool') {
|
|
25
|
+
this.applyBooleanFilter({ builder, filter });
|
|
26
|
+
}
|
|
12
27
|
}
|
|
13
28
|
return builder;
|
|
14
29
|
}
|
|
@@ -26,4 +41,62 @@ export default class Converter {
|
|
|
26
41
|
}
|
|
27
42
|
return params.builder;
|
|
28
43
|
}
|
|
44
|
+
applyDateFilter(params) {
|
|
45
|
+
if (params.filter.mode == 'equal' && !!params.filter.value) {
|
|
46
|
+
params.builder.where(params.filter.column, '=', params.filter.value);
|
|
47
|
+
}
|
|
48
|
+
else if (params.filter.mode == 'greater' && !!params.filter.value) {
|
|
49
|
+
params.builder.where(params.filter.column, '>', params.filter.value);
|
|
50
|
+
}
|
|
51
|
+
else if (params.filter.mode == 'lower' && !!params.filter.value) {
|
|
52
|
+
params.builder.where(params.filter.column, '<', params.filter.value);
|
|
53
|
+
}
|
|
54
|
+
else if (params.filter.mode == 'between' && !!params.filter.from && !!params.filter.to) {
|
|
55
|
+
params.builder.where(params.filter.column, '>', params.filter.from);
|
|
56
|
+
params.builder.where(params.filter.column, '<', params.filter.to);
|
|
57
|
+
}
|
|
58
|
+
return params.builder;
|
|
59
|
+
}
|
|
60
|
+
applyNumberFilter(params) {
|
|
61
|
+
if (params.filter.mode == 'equal' && !!params.filter.value) {
|
|
62
|
+
params.builder.where(params.filter.column, '=', params.filter.value);
|
|
63
|
+
}
|
|
64
|
+
else if (params.filter.mode == 'greater' && !!params.filter.value) {
|
|
65
|
+
params.builder.where(params.filter.column, '>', params.filter.value);
|
|
66
|
+
}
|
|
67
|
+
else if (params.filter.mode == 'lower' && !!params.filter.value) {
|
|
68
|
+
params.builder.where(params.filter.column, '<', params.filter.value);
|
|
69
|
+
}
|
|
70
|
+
else if (params.filter.mode == 'between' && !!params.filter.from && !!params.filter.to) {
|
|
71
|
+
params.builder.where(params.filter.column, '>', params.filter.from);
|
|
72
|
+
params.builder.where(params.filter.column, '<', params.filter.to);
|
|
73
|
+
}
|
|
74
|
+
return params.builder;
|
|
75
|
+
}
|
|
76
|
+
applySelectFilter(params) {
|
|
77
|
+
if (!!params.filter.values && params.filter.values.length > 0) {
|
|
78
|
+
if (params.filter.mode == 'equal') {
|
|
79
|
+
params.builder.where(b => {
|
|
80
|
+
b.where(params.filter.column, '=', params.filter.values[0].value);
|
|
81
|
+
for (let i = 1; i < params.filter.values.length; i += 1) {
|
|
82
|
+
b.orWhere(params.filter.column, '=', params.filter.values[i].value);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
params.builder.where(b => {
|
|
88
|
+
for (let i = 0; i < params.filter.values.length; i += 1) {
|
|
89
|
+
b.whereNot(params.filter.column, '=', params.filter.values[i].value);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return params.builder;
|
|
95
|
+
}
|
|
96
|
+
applyBooleanFilter(params) {
|
|
97
|
+
if (params.filter.value !== undefined) {
|
|
98
|
+
params.builder.where(params.filter.column, '=', params.filter.value);
|
|
99
|
+
}
|
|
100
|
+
return params.builder;
|
|
101
|
+
}
|
|
29
102
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export default class Validator {
|
|
2
|
+
static isValid(filter) {
|
|
3
|
+
if (!filter)
|
|
4
|
+
return false;
|
|
5
|
+
else if (filter.type == 'string')
|
|
6
|
+
return !!filter.value;
|
|
7
|
+
else if (filter.type == 'date') {
|
|
8
|
+
if (filter.mode == 'between')
|
|
9
|
+
return !!filter.from && !!filter.to;
|
|
10
|
+
else
|
|
11
|
+
return !!filter.value;
|
|
12
|
+
}
|
|
13
|
+
else if (filter.type == 'multiString')
|
|
14
|
+
return !!filter.value;
|
|
15
|
+
else if (filter.type == 'number') {
|
|
16
|
+
if (filter.mode == 'between')
|
|
17
|
+
return filter.from != undefined && filter.to != undefined;
|
|
18
|
+
else
|
|
19
|
+
return filter.value != undefined;
|
|
20
|
+
}
|
|
21
|
+
else if (filter.type == 'select') {
|
|
22
|
+
return filter.values != undefined && filter.values.length > 0;
|
|
23
|
+
}
|
|
24
|
+
else if (filter.type == 'bool') {
|
|
25
|
+
return filter.value !== undefined;
|
|
26
|
+
}
|
|
27
|
+
else
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@likable-hair/svelte",
|
|
3
3
|
"description": "A Svelte component for likablehair",
|
|
4
|
-
"version": "3.0.
|
|
4
|
+
"version": "3.0.21",
|
|
5
5
|
"scripts": {
|
|
6
|
+
"host": "vite --host",
|
|
6
7
|
"dev": "vite dev",
|
|
7
8
|
"build": "vite build && npm run package",
|
|
8
9
|
"preview": "vite preview",
|