UNPKG

nitropage

Version:

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

61 lines (55 loc) 1.54 kB
import { NitroPage } from "@prisma/client"; import { blueprintDefaults, setBlueprintDefaults } from "../../settings"; import { BlueprintDefaults, State } from "../../../../../types"; import { DEBUG_PAGE_UPDATE } from "../../util"; import { logger } from "../../log"; import { mergeElementData } from "./elementData"; import { uniq } from "es-toolkit"; const mergeBlueprintDefaults = ( target: BlueprintDefaults = {}, next: BlueprintDefaults, prev: BlueprintDefaults = {}, ) => { let dirty = false; const result: BlueprintDefaults = {}; const ids = uniq([...Object.keys(next), ...Object.keys(prev)]); for (const id of ids) { const [data, dataIsDirty] = mergeElementData( target[id], next[id], prev[id], `blueprint defaults ${id}`, ); if (dataIsDirty) dirty = true; result[id] = data; } return [result, dirty] as const; }; const updateBlueprintDefaults = async ({ page, state, prevState, }: { page: NitroPage; state: State; prevState?: State; }) => { const dbBlueprintDefaults = ( await blueprintDefaults({ projectId: page.projectId, }) ).value; const [nextDefaults, defaultsDirty] = mergeBlueprintDefaults( dbBlueprintDefaults, state.blueprintDefaults.project, prevState?.blueprintDefaults.project, ); if (!defaultsDirty) { return; } if (DEBUG_PAGE_UPDATE) logger.info("Update blueprint defaults"); await setBlueprintDefaults(nextDefaults, { projectId: page.projectId, }); }; export default updateBlueprintDefaults;