From 60f3896b8bdc260d8250e081c4b1335ff411262d Mon Sep 17 00:00:00 2001 From: vcoppe Date: Fri, 17 May 2024 15:02:45 +0200 Subject: [PATCH] sortable file hierarchy progress --- website/src/lib/components/App.svelte | 1 - .../CollapsibleTreeNode.svelte | 1 + .../lib/components/collapsible-tree/index.ts | 2 + .../lib/components/file-list/FileList2.svelte | 8 +- .../components/file-list/FileListNode.svelte | 65 ++++++------- .../file-list/FileListNodeContent.svelte | 95 +++++++++++++++++++ ...stItem.svelte => FileListNodeStore.svelte} | 9 +- 7 files changed, 139 insertions(+), 42 deletions(-) create mode 100644 website/src/lib/components/collapsible-tree/index.ts create mode 100644 website/src/lib/components/file-list/FileListNodeContent.svelte rename website/src/lib/components/file-list/{FileListItem.svelte => FileListNodeStore.svelte} (64%) diff --git a/website/src/lib/components/App.svelte b/website/src/lib/components/App.svelte index 5d00d132..a88486a4 100644 --- a/website/src/lib/components/App.svelte +++ b/website/src/lib/components/App.svelte @@ -19,7 +19,6 @@ -
diff --git a/website/src/lib/components/collapsible-tree/CollapsibleTreeNode.svelte b/website/src/lib/components/collapsible-tree/CollapsibleTreeNode.svelte index f57d0c89..8eec85fa 100644 --- a/website/src/lib/components/collapsible-tree/CollapsibleTreeNode.svelte +++ b/website/src/lib/components/collapsible-tree/CollapsibleTreeNode.svelte @@ -28,6 +28,7 @@ class="w-full flex flex-row {side === 'right' ? 'justify-between' : 'justify-start'} py-0 px-1 h-fit {nohover ? 'hover:bg-background' : ''}" + on:click > {#if side === 'left'} {#if $open[id]} diff --git a/website/src/lib/components/collapsible-tree/index.ts b/website/src/lib/components/collapsible-tree/index.ts new file mode 100644 index 00000000..9b1298b9 --- /dev/null +++ b/website/src/lib/components/collapsible-tree/index.ts @@ -0,0 +1,2 @@ +export { default as CollapsibleTree } from './CollapsibleTree.svelte'; +export { default as CollapsibleTreeNode } from './CollapsibleTreeNode.svelte'; \ No newline at end of file diff --git a/website/src/lib/components/file-list/FileList2.svelte b/website/src/lib/components/file-list/FileList2.svelte index a60e986b..28dc70c5 100644 --- a/website/src/lib/components/file-list/FileList2.svelte +++ b/website/src/lib/components/file-list/FileList2.svelte @@ -1,14 +1,12 @@ - +
- {#each Array.from($fileObservers.values()) as file} - - {/each} +
diff --git a/website/src/lib/components/file-list/FileListNode.svelte b/website/src/lib/components/file-list/FileListNode.svelte index 047f08d1..947fdae4 100644 --- a/website/src/lib/components/file-list/FileListNode.svelte +++ b/website/src/lib/components/file-list/FileListNode.svelte @@ -1,45 +1,40 @@ -{#if node instanceof GPXFile} - - {node.metadata.name} -
- {#each node.children as child, i} - - {/each} - {#if node.wpt.length > 0} - - Waypoints -
- {#each node.wpt as wpt, i} - - {/each} -
-
+{#if node instanceof Map} + +{:else} + + + {#if node instanceof GPXFile} + {node.metadata.name} + {:else if node instanceof Track} + {node.name ?? `Track ${index + 1}`} + {:else if Array.isArray(node) && node.length > 0 && node[0] instanceof Waypoint} + Waypoints {/if} + +
+
-{:else if node instanceof Track} - - {node.name ?? `Track ${index + 1}`} -
- {#each node.children as child, i} - - {/each} -
-
-{:else if node instanceof TrackSegment} - {/if} diff --git a/website/src/lib/components/file-list/FileListNodeContent.svelte b/website/src/lib/components/file-list/FileListNodeContent.svelte new file mode 100644 index 00000000..e14ceaeb --- /dev/null +++ b/website/src/lib/components/file-list/FileListNodeContent.svelte @@ -0,0 +1,95 @@ + + +
+ {#if node instanceof Map} + {#each Array.from(node.values()) as file} +
+ handleClick(e.detail.id)} /> +
+ {/each} + {:else if node instanceof GPXFile} + {#each node.children as child, i} +
+ handleClick(e.detail.id)} + /> +
+ {/each} + {#if node.wpt.length > 0} +
+ handleClick(e.detail.id)} /> +
+ {/if} + {:else if node instanceof Track} + {#each node.children as child, i} +
+ +
+ {/each} + {:else if Array.isArray(node) && node.length > 0 && node[0] instanceof Waypoint} + {#each node as wpt, i} +
+ +
+ {/each} + {/if} +
+ + diff --git a/website/src/lib/components/file-list/FileListItem.svelte b/website/src/lib/components/file-list/FileListNodeStore.svelte similarity index 64% rename from website/src/lib/components/file-list/FileListItem.svelte rename to website/src/lib/components/file-list/FileListNodeStore.svelte index 85da4c18..9785bc83 100644 --- a/website/src/lib/components/file-list/FileListItem.svelte +++ b/website/src/lib/components/file-list/FileListNodeStore.svelte @@ -3,13 +3,20 @@ import FileListNode from '$lib/components/file-list/FileListNode.svelte'; import type { GPXFileWithStatistics } from '$lib/db'; + import { createEventDispatcher } from 'svelte'; import type { Readable } from 'svelte/store'; export let file: Readable; + + const dispatch = createEventDispatcher(); + + function forwardId() { + dispatch('click', { id: $file?.file._data.id }); + } {#if $file} - + {/if}