UNPKG

nitropage

Version:

A free and open source, extensible visual page builder based on SolidStart.

54 lines (48 loc) 1.26 kB
import { NitroLayoutSlot, NitroPage } from "@prisma/client"; import { isEqual } from "es-toolkit"; import { deleteLayoutSlot } from "."; import { State } from "../../../../types"; import { logger } from "../log"; import { useDatabase } from "../prisma"; import { DEBUG_PAGE_UPDATE } from "../util"; const updateLayoutSlots = async ({ page, state, prevState, }: { page: NitroPage & { layoutSlots: NitroLayoutSlot[] }; state: State; prevState?: State; }) => { const db = useDatabase(); for (const layoutSlot of page.layoutSlots) { if (state.layoutSlots[layoutSlot.id]) { continue; } await deleteLayoutSlot(layoutSlot.id); } for (const layoutSlot of Object.values(state.layoutSlots)) { if (isEqual(layoutSlot, prevState?.layoutSlots[layoutSlot.id])) { continue; } if (DEBUG_PAGE_UPDATE) logger.info("Update layout slot", layoutSlot.id); await db.nitroLayoutSlot.upsert({ update: { title: layoutSlot.title, }, create: { id: layoutSlot.id, title: layoutSlot.title, layout: { connect: { id: page.id, }, }, }, where: { id: layoutSlot.id, }, }); } }; export default updateLayoutSlots;