@lobb-js/studio 0.37.1 → 0.39.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/actions.d.ts +1 -0
- package/dist/components/dataTable/dataTable.svelte +3 -0
- package/dist/components/dataTable/dataTable.svelte.d.ts +1 -0
- package/dist/components/dataTable/fieldPicker.svelte +61 -0
- package/dist/components/dataTable/fieldPicker.svelte.d.ts +9 -0
- package/dist/components/dataTable/filter.svelte +469 -238
- package/dist/components/dataTable/filter.svelte.d.ts +1 -4
- package/dist/components/dataTable/filterButton.svelte +24 -6
- package/dist/components/dataTable/header.svelte +9 -31
- package/dist/components/dataTable/header.svelte.d.ts +1 -0
- package/dist/components/dataTable/sort.svelte +169 -104
- package/dist/components/dataTable/sortButton.svelte +33 -7
- package/dist/components/dataTable/table.svelte +2 -1
- package/dist/components/dataTable/table.svelte.d.ts +1 -0
- package/dist/components/dataTablePopup/dataTablePopup.svelte +7 -0
- package/dist/components/dataTablePopup/dataTablePopup.svelte.d.ts +1 -0
- package/dist/components/importButton.svelte +154 -31
- package/package.json +4 -3
- package/src/lib/actions.ts +1 -0
- package/src/lib/components/dataTable/dataTable.svelte +3 -0
- package/src/lib/components/dataTable/fieldPicker.svelte +61 -0
- package/src/lib/components/dataTable/filter.svelte +469 -238
- package/src/lib/components/dataTable/filterButton.svelte +24 -6
- package/src/lib/components/dataTable/header.svelte +9 -31
- package/src/lib/components/dataTable/sort.svelte +169 -104
- package/src/lib/components/dataTable/sortButton.svelte +33 -7
- package/src/lib/components/dataTable/table.svelte +2 -1
- package/src/lib/components/dataTablePopup/dataTablePopup.svelte +7 -0
- package/src/lib/components/importButton.svelte +154 -31
package/dist/actions.d.ts
CHANGED
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
showImport?: boolean;
|
|
45
45
|
showDelete?: boolean;
|
|
46
46
|
showEdit?: boolean;
|
|
47
|
+
showFilter?: boolean;
|
|
47
48
|
onDataLoad?: (total: number) => void;
|
|
48
49
|
tableProps?: Partial<TableProps>;
|
|
49
50
|
tabs?: CollectionTab[];
|
|
@@ -63,6 +64,7 @@
|
|
|
63
64
|
showImport = true,
|
|
64
65
|
showDelete = false,
|
|
65
66
|
showEdit = true,
|
|
67
|
+
showFilter = true,
|
|
66
68
|
onDataLoad,
|
|
67
69
|
tableProps,
|
|
68
70
|
tabs,
|
|
@@ -299,6 +301,7 @@
|
|
|
299
301
|
{collectionName}
|
|
300
302
|
bind:selectedRecords
|
|
301
303
|
{showImport}
|
|
304
|
+
{showFilter}
|
|
302
305
|
{loading}
|
|
303
306
|
{parentContext}
|
|
304
307
|
onLink={isRecordingMode ? handleLink : undefined}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
// Typeahead field picker. Renders inside a parent-owned <Popover.Content>
|
|
3
|
+
// so the parent controls open/close. Used by SortButton's fast-path
|
|
4
|
+
// picker and by Sort's "add a rule" popover.
|
|
5
|
+
import { getStudioContext } from "../../context";
|
|
6
|
+
import { getFieldIcon } from "./utils";
|
|
7
|
+
|
|
8
|
+
interface Props {
|
|
9
|
+
collectionName: string;
|
|
10
|
+
excludeFields?: string[];
|
|
11
|
+
placeholder?: string;
|
|
12
|
+
onPick: (fieldName: string) => void;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
let {
|
|
16
|
+
collectionName,
|
|
17
|
+
excludeFields = [],
|
|
18
|
+
placeholder = "Pick a field…",
|
|
19
|
+
onPick,
|
|
20
|
+
}: Props = $props();
|
|
21
|
+
|
|
22
|
+
const { ctx } = getStudioContext();
|
|
23
|
+
|
|
24
|
+
let search = $state("");
|
|
25
|
+
|
|
26
|
+
const allFields = $derived(
|
|
27
|
+
Object.keys(ctx.meta.collections[collectionName].fields).filter(
|
|
28
|
+
(f) => !excludeFields.includes(f),
|
|
29
|
+
),
|
|
30
|
+
);
|
|
31
|
+
const filteredFields = $derived(
|
|
32
|
+
search
|
|
33
|
+
? allFields.filter((f) =>
|
|
34
|
+
f.toLowerCase().includes(search.toLowerCase()),
|
|
35
|
+
)
|
|
36
|
+
: allFields,
|
|
37
|
+
);
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<input
|
|
41
|
+
{placeholder}
|
|
42
|
+
bind:value={search}
|
|
43
|
+
class="w-full rounded-md border bg-muted px-2 py-1 text-xs focus:outline-none focus:ring-1 focus:ring-ring"
|
|
44
|
+
/>
|
|
45
|
+
<div class="mt-2 max-h-60 overflow-auto">
|
|
46
|
+
{#each filteredFields as fieldName}
|
|
47
|
+
{@const FieldIcon = getFieldIcon(ctx, fieldName, collectionName)}
|
|
48
|
+
<button
|
|
49
|
+
type="button"
|
|
50
|
+
onclick={() => onPick(fieldName)}
|
|
51
|
+
class="flex w-full items-center gap-2 rounded-md p-2 text-left text-xs text-muted-foreground hover:bg-muted hover:text-foreground"
|
|
52
|
+
>
|
|
53
|
+
<FieldIcon size="14" />
|
|
54
|
+
<span>{fieldName}</span>
|
|
55
|
+
</button>
|
|
56
|
+
{:else}
|
|
57
|
+
<div class="p-2 text-center text-xs text-muted-foreground">
|
|
58
|
+
No matching fields
|
|
59
|
+
</div>
|
|
60
|
+
{/each}
|
|
61
|
+
</div>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
collectionName: string;
|
|
3
|
+
excludeFields?: string[];
|
|
4
|
+
placeholder?: string;
|
|
5
|
+
onPick: (fieldName: string) => void;
|
|
6
|
+
}
|
|
7
|
+
declare const FieldPicker: import("svelte").Component<Props, {}, "">;
|
|
8
|
+
type FieldPicker = ReturnType<typeof FieldPicker>;
|
|
9
|
+
export default FieldPicker;
|