UNPKG

nitropage

Version:

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

104 lines (92 loc) 2.34 kB
import { State } from "#../types"; import { NitroPage } from "@prisma/client"; import { difference, isEqual, omit } from "es-toolkit"; import { logger } from "../../log"; import { colors, rteTextColors, setColors, setRteTextColors, } from "../../settings"; import { DEBUG_PAGE_UPDATE } from "../../util"; export const updateColors = async ({ page, state, prevState, }: { page: NitroPage; state: State; prevState?: State; }) => { if (isEqual(state.colors, prevState?.colors)) { return; } if (DEBUG_PAGE_UPDATE) logger.info("Update color presets"); let nextColors = ( await colors({ projectId: page.projectId, }) ).value ?? {}; for (const id of Object.keys(state.colors)) { const color = state.colors[id]; const prevColor = prevState?.colors[id]; if (!nextColors[id]) { nextColors[id] = color; continue; } if (!isEqual(color.light, prevColor?.light)) { nextColors[id].light = color.light; } if (!isEqual(color.dark, prevColor?.dark)) { nextColors[id].dark = color.dark; } } const deletedColors = difference( Object.keys(prevState?.colors ?? {}), Object.keys(state.colors), ); nextColors = omit(nextColors, deletedColors); await setColors(nextColors, { projectId: page.projectId, }); }; export const updateRteColors = async ({ page, state, prevState, }: { page: NitroPage; state: State; prevState?: State; }) => { if (isEqual(state.richtext.textColors, prevState?.richtext.textColors)) { return; } if (DEBUG_PAGE_UPDATE) logger.info("Update richtext colors"); let nextColors = ( await rteTextColors({ projectId: page.projectId, }) ).value ?? {}; for (const id of Object.keys(state.richtext.textColors)) { const color = state.richtext.textColors[id]; const prevColor = prevState?.richtext.textColors[id]; if (isEqual(color, prevColor)) { continue; } nextColors[id] = color; } const deletedColors = difference( Object.keys(prevState?.richtext.textColors ?? {}), Object.keys(state.richtext.textColors), ); nextColors = omit(nextColors, deletedColors); await setRteTextColors( Object.keys(nextColors).length ? nextColors : undefined, { projectId: page.projectId, }, ); };