UNPKG

nitropage

Version:

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

82 lines (72 loc) 2.03 kB
import { State } from "#../types"; import { omitEqualProperties } from "../../../../utils/object/omit"; import { logger } from "../../log"; import { useDatabase } from "../../prisma"; import { DEBUG_PAGE_UPDATE } from "../../util"; import { mergeElementData, omitDisabledElementData } from "./elementData"; const updatePresets = async ({ projectId, prevPresets, presets, }: { projectId: string; prevPresets?: State["presets"]; presets: State["presets"]; }) => { const deletedIds: string[] = []; const db = useDatabase(); for (const preset of Object.values(presets)) { preset.data = omitDisabledElementData(preset.data); if (preset.new) { await db.nitroPreset.create({ select: { id: true }, data: { id: preset.id, name: preset.name, data: JSON.stringify(preset.data), blueprint: preset.blueprint, project: { connect: { id: projectId, }, }, }, }); } else { const dbPreset = await db.nitroPreset.findUnique({ select: { id: true, data: true }, where: { id: preset.id }, }); if (!dbPreset) { deletedIds.push(preset.id); continue; } const prevPreset = prevPresets?.[preset.id]; const nextData = omitEqualProperties(preset, prevPreset, ["name"]); const [presetData, dataIsDirty] = mergeElementData( JSON.parse(dbPreset.data), preset.data, prevPreset?.data, "preset", ); if (!Object.keys(nextData).length && !dataIsDirty) continue; if (DEBUG_PAGE_UPDATE) logger.info("Update preset", preset.id); await db.nitroPreset.update({ select: { id: true, }, where: { id: preset.id, }, data: { ...nextData, data: dataIsDirty ? JSON.stringify(presetData) : undefined, }, }); } } return { deletedIds, }; }; export default updatePresets;