@lobb-js/studio 0.39.0 → 0.40.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/dataTable/filter.svelte +485 -311
- package/dist/components/dataTable/filter.svelte.d.ts +2 -1
- package/dist/components/dataTable/filterButton.svelte +26 -8
- package/package.json +1 -1
- package/src/lib/components/dataTable/filter.svelte +485 -311
- package/src/lib/components/dataTable/filterButton.svelte +26 -8
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
interface Props {
|
|
2
2
|
filter: Record<string, any>;
|
|
3
3
|
collectionName: string;
|
|
4
|
+
isEmpty?: boolean;
|
|
4
5
|
}
|
|
5
|
-
declare const Filter: import("svelte").Component<Props, {}, "filter">;
|
|
6
|
+
declare const Filter: import("svelte").Component<Props, {}, "filter" | "isEmpty">;
|
|
6
7
|
type Filter = ReturnType<typeof Filter>;
|
|
7
8
|
export default Filter;
|
|
@@ -16,13 +16,25 @@
|
|
|
16
16
|
collectionName,
|
|
17
17
|
}: Props = $props();
|
|
18
18
|
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
|
|
19
|
+
// Tracks whether the filter has any rules applied. Filter pushes
|
|
20
|
+
// this back up so we can shrink the popover when empty — the
|
|
21
|
+
// loaded width feels hollow against the empty-state icon.
|
|
22
|
+
let filterIsEmpty = $state(true);
|
|
23
|
+
|
|
24
|
+
// Count rules across the whole filter tree. A single field with two
|
|
25
|
+
// operators ({age: {$gte, $lte}}) is two rules. Nested $and / $or
|
|
26
|
+
// arrays (groups) recurse into their children so a group with three
|
|
27
|
+
// rules contributes three, not one.
|
|
28
|
+
function countRules(f: any): number {
|
|
29
|
+
if (f == null || typeof f !== "object") return 0;
|
|
23
30
|
let n = 0;
|
|
24
|
-
for (const [key, value] of Object.entries(f
|
|
25
|
-
if (key
|
|
31
|
+
for (const [key, value] of Object.entries(f)) {
|
|
32
|
+
if (key === "$and" || key === "$or") {
|
|
33
|
+
if (Array.isArray(value)) {
|
|
34
|
+
for (const child of value) n += countRules(child);
|
|
35
|
+
}
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
26
38
|
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
27
39
|
n += Object.keys(value).length;
|
|
28
40
|
} else {
|
|
@@ -51,7 +63,13 @@
|
|
|
51
63
|
{/if}
|
|
52
64
|
{/if}
|
|
53
65
|
</Popover.Trigger>
|
|
54
|
-
<Popover.Content
|
|
55
|
-
|
|
66
|
+
<Popover.Content
|
|
67
|
+
class="
|
|
68
|
+
w-screen p-0
|
|
69
|
+
transition-[max-width] duration-150
|
|
70
|
+
{filterIsEmpty ? 'max-w-xs' : 'max-w-[36rem]'}
|
|
71
|
+
"
|
|
72
|
+
>
|
|
73
|
+
<Filter bind:filter {collectionName} bind:isEmpty={filterIsEmpty} />
|
|
56
74
|
</Popover.Content>
|
|
57
75
|
</Popover.Root>
|