diff --git a/packages/project/src/db/build.ts b/packages/project/src/db/build.ts index 57b251ea10..64b9c56dff 100644 --- a/packages/project/src/db/build.ts +++ b/packages/project/src/db/build.ts @@ -136,11 +136,18 @@ export const editPage = async ( }; export const deletePage = async (buildId: Build["id"], pageId: Page["id"]) => { - // @todo: delete tree etc. return updatePages(buildId, async (currentPages) => { if (pageId === currentPages.homePage.id) { throw new Error("Cannot delete home page"); } + + const page = pagesUtils.findById(currentPages, pageId); + if (page === undefined) { + throw new Error(`Page with id "${pageId}" not found`); + } + + await db.tree.deleteById(page.treeId); + return { homePage: currentPages.homePage, pages: currentPages.pages.filter((page) => page.id !== pageId), diff --git a/packages/project/src/db/props.ts b/packages/project/src/db/props.ts index d276b30511..2e6180eb92 100644 --- a/packages/project/src/db/props.ts +++ b/packages/project/src/db/props.ts @@ -21,6 +21,10 @@ export const loadByTreeId = async (treeId: Tree["id"]) => { }); }; +export const deleteByTreeId = async (treeId: Tree["id"]) => { + await prisma.instanceProps.deleteMany({ where: { treeId } }); +}; + export const clone = async ({ previousTreeId, nextTreeId, diff --git a/packages/project/src/db/tree.ts b/packages/project/src/db/tree.ts index 8e4c1f5545..88e571446e 100644 --- a/packages/project/src/db/tree.ts +++ b/packages/project/src/db/tree.ts @@ -3,6 +3,7 @@ import { applyPatches, type Patch } from "immer"; import { prisma } from "@webstudio-is/prisma-client"; import { Tree as DbTree } from "@prisma/client"; import { utils } from "../index"; +import { props } from "."; export const createRootInstance = (breakpoints: Array) => { // Take the smallest breakpoint as default @@ -22,6 +23,11 @@ export const create = async (root: Instance): Promise => { }); }; +export const deleteById = async (treeId: string): Promise => { + await props.deleteByTreeId(treeId); + await prisma.tree.delete({ where: { id: treeId } }); +}; + export const loadById = async (treeId: string): Promise => { const tree = await prisma.tree.findUnique({ where: { id: treeId }, @@ -42,6 +48,7 @@ export const clone = async (treeId: string) => { if (tree === null) { throw new Error(`Tree ${treeId} not found`); } + // @todo: clone props? return await create(tree.root); };