diff --git a/tauri/src/tests.rs b/tauri/src/tests.rs index 82495c4e6..720c442a7 100644 --- a/tauri/src/tests.rs +++ b/tauri/src/tests.rs @@ -531,3 +531,22 @@ fn the_parts_of_a_split_are_numbered_from_one() { assert_eq!(names, ["track (1).gpx", "track (2).gpx", "track.gpx"]); std::fs::remove_dir_all(folder).unwrap(); } + +#[test] +fn files_can_be_reordered() { + let app = App::new(); + let mut ids = vec![]; + for name in ["a", "b", "c"] { + let outcome = app.call("new_file", json!({ "name": name })); + ids.push(outcome["added"][0].as_str().unwrap().to_string()); + } + assert_eq!(app.call("file_order", json!({})), json!(ids)); + + let outcome = app.call("reorder", json!({ "fileIds": [ids[2]], "index": 0 })); + assert_eq!(outcome["changed"], true); + assert_eq!(outcome["orderChanged"], true); + assert_eq!( + app.call("file_order", json!({})), + json!([ids[2], ids[0], ids[1]]) + ); +} diff --git a/tauri/tauri.conf.json b/tauri/tauri.conf.json index 42dd411cc..d509348a1 100644 --- a/tauri/tauri.conf.json +++ b/tauri/tauri.conf.json @@ -18,7 +18,8 @@ "width": 1400, "height": 900, "minWidth": 800, - "minHeight": 600 + "minHeight": 600, + "dragDropEnabled": false } ], "security": { "csp": null } diff --git a/website/src/lib/components/collapsible-tree/CollapsibleTree.svelte b/website/src/lib/components/collapsible-tree/CollapsibleTree.svelte index ad9269fb9..6d478ec89 100644 --- a/website/src/lib/components/collapsible-tree/CollapsibleTree.svelte +++ b/website/src/lib/components/collapsible-tree/CollapsibleTree.svelte @@ -9,6 +9,7 @@ nohover = false, slotInsideTrigger = true, sticky = false, + treeState, children, }: { defaultState?: 'open' | 'closed'; @@ -21,10 +22,12 @@ * like its node. */ sticky?: boolean; + /** Which nodes are open, to keep it or to open nodes from the outside. */ + treeState?: CollapsibleTreeState; children: Snippet; } = $props(); - let open = $state(new CollapsibleTreeState(defaultState)); + let open = $state(treeState ?? new CollapsibleTreeState(defaultState)); setContext('collapsible-tree-state', open); setContext('collapsible-tree-side', side); diff --git a/website/src/lib/components/explorer/Explorer.svelte b/website/src/lib/components/explorer/Explorer.svelte index 8ba0322e9..0cf0dae67 100644 --- a/website/src/lib/components/explorer/Explorer.svelte +++ b/website/src/lib/components/explorer/Explorer.svelte @@ -1,29 +1,93 @@ -{#if folder} +{#if folder && trees}