Skip to content

Commit 8ae00ed

Browse files
committed
fix(apps-menu): drag and drop
1 parent a367641 commit 8ae00ed

File tree

5 files changed

+41
-43
lines changed

5 files changed

+41
-43
lines changed

changelog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
- external links being opened on webview instead external browser.
2828
- apps menu widget freeze on search.
2929
- change wallpaper shortcuts not working.
30+
- apps menu drag and drop.
3031

3132
## [2.5.1]
3233

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
},
3030
"dependencies": {
3131
"@dnd-kit/abstract": "^0.3.2",
32-
"@dnd-kit/helpers": "^0.3.1",
33-
"@dnd-kit/react": "^0.3.1",
32+
"@dnd-kit/helpers": "^0.3.2",
33+
"@dnd-kit/react": "^0.3.2",
3434
"@dnd-kit/svelte": "^0.3.2",
3535
"@m31coding/fuzzy-search": "^2.0.0",
3636
"@preact/compat": "^18.3.1",

src/ui/svelte/apps-menu/components/AppItem.svelte

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import { invoke, SeelenCommand } from "@seelen-ui/lib";
44
import { FileIcon } from "libs/ui/svelte/components/Icon";
55
import { globalState } from "../state/mod.svelte";
6-
import { createDroppable, createDraggable } from "@dnd-kit/svelte";
6+
import { createSortable } from "@dnd-kit/svelte/sortable";
77
88
interface Props {
99
item: StartMenuItem;
@@ -30,22 +30,23 @@
3030
globalState.preselectedItem === itemId || (idx === 0 && !globalState.preselectedItem),
3131
);
3232
33-
const draggable = $derived(
34-
createDraggable({
35-
id: itemId,
36-
disabled: !isDraggable,
37-
type: isInsideFolder ? "grouped-app" : "app",
38-
}),
39-
);
40-
41-
const droppable = $derived(
42-
createDroppable({
43-
id: itemId,
44-
disabled: !isDraggable,
45-
accept: isInsideFolder ? "grouped-app" : ["folder", "app"],
46-
type: isInsideFolder ? "grouped-app" : "app",
47-
}),
48-
);
33+
const sortable = createSortable({
34+
get id() {
35+
return itemId;
36+
},
37+
get disabled() {
38+
return !isDraggable;
39+
},
40+
get index() {
41+
return idx;
42+
},
43+
get type() {
44+
return isInsideFolder ? "grouped-app" : "app";
45+
},
46+
get accept() {
47+
return isInsideFolder ? "grouped-app" : ["folder", "app"];
48+
},
49+
});
4950
5051
function handleClick(event: MouseEvent) {
5152
globalState.showing = false; // inmediate close
@@ -61,13 +62,13 @@
6162
</script>
6263

6364
<button
64-
{@attach draggable.attach}
65-
{@attach droppable.attach}
65+
{@attach sortable.attach}
66+
{@attach sortable.attachHandle}
6667
data-item-id={itemId}
6768
class="app"
6869
class:preselected={isPreselected && globalState.searchQuery}
69-
class:is-dragging={draggable.isDragging}
70-
class:is-dropping={draggable.isDropping}
70+
class:is-dragging={sortable.isDragging}
71+
class:is-dropping={sortable.isDropping}
7172
class:is-drop-target={isActiveDropzone}
7273
onclick={handleClick}
7374
oncontextmenu={handleContextMenu}

src/ui/svelte/apps-menu/components/FolderItem.svelte

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import { FileIcon } from "libs/ui/svelte/components/Icon";
44
import { globalState } from "../state/mod.svelte";
55
import { t } from "../i18n";
6-
import { createDraggable, createDroppable } from "@dnd-kit/svelte";
6+
import { createSortable } from "@dnd-kit/svelte/sortable";
77
import FolderModal from "./FolderModal.svelte";
88
import type { StartMenuItem } from "@seelen-ui/lib/types";
99
@@ -35,19 +35,15 @@
3535
})),
3636
);
3737
38-
const draggable = $derived(
39-
createDraggable({
40-
id: folder.itemId,
41-
type: "folder",
42-
}),
43-
);
44-
45-
const droppable = $derived(
46-
createDroppable({
47-
id: folder.itemId,
48-
type: "folder",
49-
}),
50-
);
38+
const sortable = createSortable({
39+
get id() {
40+
return folder.itemId;
41+
},
42+
get index() {
43+
return idx;
44+
},
45+
type: "folder",
46+
});
5147
5248
function openModal() {
5349
isModalOpen = true;
@@ -59,13 +55,13 @@
5955
</script>
6056

6157
<button
62-
{@attach draggable.attach}
63-
{@attach droppable.attach}
58+
{@attach sortable.attach}
59+
{@attach sortable.attachHandle}
6460
data-item-id={folder.itemId}
6561
class="folder"
6662
class:preselected={isPreselected && globalState.searchQuery}
67-
class:is-dragging={draggable.isDragging}
68-
class:is-dropping={draggable.isDropping}
63+
class:is-dragging={sortable.isDragging}
64+
class:is-dropping={sortable.isDropping}
6965
class:is-drop-target={isActiveDropzone}
7066
onclick={openModal}
7167
oncontextmenu={(event) => {

0 commit comments

Comments
 (0)