This repository was archived by the owner on Jul 18, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 149
Expand file tree
/
Copy pathBoardOptionsProvider.svelte
More file actions
92 lines (80 loc) · 2.69 KB
/
Copy pathBoardOptionsProvider.svelte
File metadata and controls
92 lines (80 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<script lang="ts">
import {
ViewContent,
ViewHeader,
ViewLayout,
ViewToolbar,
} from "src/ui/components/Layout";
import type { BoardConfig } from "./types";
import BoardOptions from "./BoardOptions.svelte";
import type { DataField, DataFrame } from "src/lib/dataframe/dataframe";
import { BoardSettingsModal } from "./settings/settingsModal";
import { app } from "src/lib/stores/obsidian";
import { Select } from "obsidian-svelte";
import { searchText, searchField } from "src/settings/settings";
export let config: BoardConfig;
export let onConfigChange: (cfg: BoardConfig) => void;
export let frame: DataFrame;
$: ({ fields } = frame);
$: columnWidth = config?.columnWidth ?? 270;
function handleIncludedFieldsChange(fields: string[]) {
onConfigChange({ ...config, includeFields: fields });
}
function handleStatusFieldChange(field: DataField | undefined) {
const { groupByField, ...rest } = config;
delete rest.columns;
onConfigChange(field ? { ...rest, groupByField: field.name } : { ...rest });
}
function handleCheckFieldChange(field: DataField | undefined) {
const { checkField, ...rest } = config;
onConfigChange(field ? { ...rest, checkField: field.name } : { ...rest });
}
</script>
<!--
@component
BoardOptionsProvider abstracts away the scaffolding around the view, such as
the toolbar and options.
-->
<ViewLayout>
<ViewHeader>
<ViewToolbar variant="secondary">
<svelte:fragment slot="left">
<input type="text" bind:value={$searchText} placeholder="Search"/>
<Select
options={fields.map((field) => ({
label: field.name,
value: field.name,
}))}
value={$searchField}
on:change={({ detail : value }) => {
$searchField = value;
}}
/>
</svelte:fragment>
<BoardOptions
slot="right"
{fields}
statusField={config.groupByField}
checkField={config.checkField}
onStatusFieldChange={handleStatusFieldChange}
onCheckFieldChange={handleCheckFieldChange}
includedFields={config.includeFields ?? []}
onIncludedFieldsChange={handleIncludedFieldsChange}
onSettings={() => {
new BoardSettingsModal($app, config, fields, (value) => {
onConfigChange(value);
}).open();
}}
/>
</ViewToolbar>
</ViewHeader>
<ViewContent>
<slot
{columnWidth}
checkField={config.checkField ?? ""}
customHeader={config.headerField}
groupByField={fields.find((field) => config.groupByField === field.name)}
includeFields={config.includeFields ?? []}
/>
</ViewContent>
</ViewLayout>