UNPKG

primo-app

Version:

primo is an all-in-one ide, cms, component library, and static site generator

58 lines (53 loc) 1.36 kB
import { isEqual } from 'lodash' import { writable, readable, derived, get } from 'svelte/store'; import { getAllFields } from '../../utils' import { convertFieldsToData, parseHandlebars } from './helpers/components' import { createPage } from '../../const' let pageData const store = writable(createPage()) store.subscribe(s => { pageData = s // prevent overwriting unsaved content // if (isEqual(get(content), DEFAULTS.page.content)) { // content.set(pageData.content) // } // content.set(s.content) }) export default { save: (property, value) => { store.update(s => ({ ...s, [property]: value })) }, saveStyles: (styles) => { store.update(s => ({ ...s, styles })) }, hydrateWrapper: async () => { const { head, below } = pageData.wrapper const fields = getAllFields() const data = await convertFieldsToData(fields, 'all') const [ newHead, newBelow ] = await Promise.all([parseHandlebars(head.raw, data), parseHandlebars(below.raw, data)]) const newWrapper = { ...pageData.wrapper, head: { ...head, final: newHead }, below: { ...below, final: newBelow } } store.update(s => ({ ...s, wrapper: newWrapper })) }, subscribe: store.subscribe, set: store.set, update: store.update }