wip page drag
This commit is contained in:
parent
e7d52b8294
commit
be9c54ecc7
|
|
@ -1,6 +1,7 @@
|
||||||
import {
|
import {
|
||||||
Tree as DNDTree,
|
Tree as DNDTree,
|
||||||
DndProvider,
|
DndProvider,
|
||||||
|
NodeModel,
|
||||||
TreeMethods,
|
TreeMethods,
|
||||||
getBackendOptions,
|
getBackendOptions,
|
||||||
} from "@minoru/react-dnd-treeview";
|
} from "@minoru/react-dnd-treeview";
|
||||||
|
|
@ -68,7 +69,14 @@ export const EdPopPage = () => {
|
||||||
pagePicker.ref = ref;
|
pagePicker.ref = ref;
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
className={cx("absolute inset-[5%] bg-white flex")}
|
className={cx(
|
||||||
|
"absolute inset-[5%] bg-white flex",
|
||||||
|
css`
|
||||||
|
.dropping {
|
||||||
|
background: #efefff;
|
||||||
|
}
|
||||||
|
`
|
||||||
|
)}
|
||||||
>
|
>
|
||||||
<div className="relative flex flex-1 items-stretch text-[14px] overflow-auto">
|
<div className="relative flex flex-1 items-stretch text-[14px] overflow-auto">
|
||||||
{pagePicker.status === "loading" && (
|
{pagePicker.status === "loading" && (
|
||||||
|
|
@ -92,10 +100,49 @@ export const EdPopPage = () => {
|
||||||
}}
|
}}
|
||||||
tree={pagePicker.tree}
|
tree={pagePicker.tree}
|
||||||
rootId={"page-root"}
|
rootId={"page-root"}
|
||||||
onDrop={() => {}}
|
onDrop={async (newTree: NodeModel<PageItem>[], opt) => {
|
||||||
|
pagePicker.tree = newTree;
|
||||||
|
p.render();
|
||||||
|
|
||||||
|
if (!opt.dragSource?.droppable) {
|
||||||
|
await db.page.update({
|
||||||
|
where: {
|
||||||
|
id: opt.dragSourceId as string,
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
id_folder: (opt.dropTargetId === "root" ||
|
||||||
|
!opt.dropTargetId
|
||||||
|
? null
|
||||||
|
: opt.dropTargetId) as string,
|
||||||
|
},
|
||||||
|
select: { id: true },
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
await db.page_folder.update({
|
||||||
|
where: {
|
||||||
|
id: opt.dragSourceId as string,
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
parent_id: (opt.dropTargetId === "ROOT" ||
|
||||||
|
!opt.dropTargetId
|
||||||
|
? null
|
||||||
|
: opt.dropTargetId) as string,
|
||||||
|
},
|
||||||
|
select: {
|
||||||
|
id: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
reloadPagePicker(p);
|
||||||
|
}}
|
||||||
dragPreviewRender={() => <></>}
|
dragPreviewRender={() => <></>}
|
||||||
canDrag={() => true}
|
canDrag={() => true}
|
||||||
classes={{ root: "flex-1" }}
|
canDrop={(tree, opt) => {
|
||||||
|
if (opt.dropTarget?.data?.type === "page") return false;
|
||||||
|
if (opt.dropTargetId === "page-root") return false;
|
||||||
|
return true;
|
||||||
|
}}
|
||||||
|
classes={{ root: "flex-1", dropTarget: "dropping" }}
|
||||||
render={edPageTreeRender}
|
render={edPageTreeRender}
|
||||||
/>
|
/>
|
||||||
</DndProvider>
|
</DndProvider>
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ export const reloadPagePicker = async (p: PG) => {
|
||||||
id: "root",
|
id: "root",
|
||||||
parent: "page-root",
|
parent: "page-root",
|
||||||
text: "pages",
|
text: "pages",
|
||||||
|
droppable: true,
|
||||||
data: { id: "root", name: "pages", type: "folder" },
|
data: { id: "root", name: "pages", type: "folder" },
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -45,6 +46,7 @@ export const reloadPagePicker = async (p: PG) => {
|
||||||
id: page.id,
|
id: page.id,
|
||||||
parent: page.id_folder || "root",
|
parent: page.id_folder || "root",
|
||||||
text: page.name,
|
text: page.name,
|
||||||
|
droppable: false,
|
||||||
data: {
|
data: {
|
||||||
id: page.id,
|
id: page.id,
|
||||||
name: page.name,
|
name: page.name,
|
||||||
|
|
|
||||||
|
|
@ -205,13 +205,13 @@ export const edPageTreeRender: NodeRender<PageItem> = (
|
||||||
};
|
};
|
||||||
|
|
||||||
const Name: FC<{ name: string }> = ({ name }) => {
|
const Name: FC<{ name: string }> = ({ name }) => {
|
||||||
if (name.startsWith("layout::")) {
|
if (name.startsWith("layout:")) {
|
||||||
return (
|
return (
|
||||||
<div className="flex items-center">
|
<div className="flex items-center">
|
||||||
<div className="border border-green-600 text-green-600 mr-1 font-mono text-[8px] px-1 bg-white ">
|
<div className="border border-green-600 text-green-600 mr-1 font-mono text-[8px] px-1 bg-white ">
|
||||||
LAYOUT
|
LAYOUT
|
||||||
</div>
|
</div>
|
||||||
<div>{name.substring("layout::".length)}</div>
|
<div>{name.substring("layout:".length)}</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue