nitropage
Version:
A free and open source, extensible visual page builder based on SolidStart.
54 lines (48 loc) • 1.26 kB
text/typescript
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;