Skip to content

Commit dec5565

Browse files
committed
feat: add ability to add custom metadata
1 parent 765ea3f commit dec5565

File tree

11 files changed

+264
-226
lines changed

11 files changed

+264
-226
lines changed

packages/svelte-file-tree-styled/src/lib/components/StyledTree.svelte

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@
9696
}
9797
9898
for (const child of item.node.children) {
99-
if (child.name === name) {
99+
if (child.data.name === name) {
100100
onAlreadyExistsError?.({ name });
101101
return false;
102102
}
@@ -107,14 +107,14 @@
107107
case "file": {
108108
node = new FileNode({
109109
id: crypto.randomUUID(),
110-
name,
110+
data: { name },
111111
});
112112
break;
113113
}
114114
case "folder": {
115115
node = new FolderNode({
116116
id: crypto.randomUUID(),
117-
name,
117+
data: { name },
118118
children: [],
119119
});
120120
break;

packages/svelte-file-tree-styled/src/lib/components/StyledTreeItem.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@
8585
{#if editing}
8686
<TreeItemInput class="border bg-white focus:outline-none" />
8787
{:else}
88-
<span class="select-none">{item.node.name}</span>
88+
<span class="select-none">{item.node.data.name}</span>
8989
{/if}
9090
</TreeItem>
9191
</TreeContextMenu>

packages/svelte-file-tree/src/lib/components/Tree/Tree.svelte

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
<script lang="ts">
1+
<script lang="ts" generics="TData extends FileTreeNodeData">
2+
import type { FileTreeNodeData } from "$lib/tree.svelte.js";
23
import { SvelteSet } from "svelte/reactivity";
34
import TreeItemProvider from "./TreeItemProvider.svelte";
45
import { createTreeState } from "./state.svelte.js";
@@ -21,7 +22,7 @@
2122
ref = $bindable(null),
2223
generateCopyId = () => crypto.randomUUID(),
2324
onRenameItem = ({ target, name }) => {
24-
target.name = name;
25+
target.data.name = name;
2526
return true;
2627
},
2728
onMoveItems = ({ updates }) => {
@@ -44,7 +45,7 @@
4445
onAlreadyExistsError,
4546
onCircularReferenceError,
4647
...rest
47-
}: TreeProps = $props();
48+
}: TreeProps<TData> = $props();
4849
4950
const treeState = createTreeState({
5051
tree: () => tree,

packages/svelte-file-tree/src/lib/components/Tree/TreeItemProvider.svelte

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
<script lang="ts" module>
2+
import type { FileTreeNodeData } from "$lib/tree.svelte.js";
23
import { DEV } from "esm-env";
34
import { getContext, hasContext, setContext, type Snippet } from "svelte";
45
import type { TreeState } from "./state.svelte.js";
56
import type { TreeItemState } from "./types.js";
67
78
const CONTEXT_KEY = Symbol("TreeItemProvider");
89
9-
export type TreeItemProviderContext = {
10-
treeState: TreeState;
11-
item: () => TreeItemState;
10+
export type TreeItemProviderContext<TData extends FileTreeNodeData = FileTreeNodeData> = {
11+
treeState: TreeState<TData>;
12+
item: () => TreeItemState<TData>;
1213
};
1314
1415
export function getTreeItemProviderContext(): TreeItemProviderContext {
@@ -18,27 +19,24 @@
1819
1920
return getContext(CONTEXT_KEY);
2021
}
21-
22-
function setTreeItemProviderContext(context: TreeItemProviderContext): void {
23-
setContext(CONTEXT_KEY, context);
24-
}
2522
</script>
2623

27-
<script lang="ts">
24+
<script lang="ts" generics="TData extends FileTreeNodeData">
2825
const {
2926
treeState,
3027
item,
3128
children,
3229
}: {
33-
treeState: TreeState;
34-
item: TreeItemState;
30+
treeState: TreeState<TData>;
31+
item: TreeItemState<TData>;
3532
children: Snippet;
3633
} = $props();
3734
38-
setTreeItemProviderContext({
35+
const context: TreeItemProviderContext<TData> = {
3936
treeState,
4037
item: () => item,
41-
});
38+
};
39+
setContext(CONTEXT_KEY, context);
4240
4341
$effect(() => {
4442
return () => {

0 commit comments

Comments
 (0)