UNPKG

@cmk/fe_utils

Version:
81 lines (76 loc) 2.7 kB
import { EditorSetting, EditorStateType, Image } from '../../types' import { EditorStateDbDataType } from './editorDbStateType' import { serializeAttributes } from './serialize/serializeAttributes' import { serializeProperties } from './serialize/serializeProperties' import { serializeElements } from './serialize/serializeElements' import { serializeImages } from './serialize/serializeImages' import { serializeProject } from './serialize/serializeProject' import { serializeExternalApis } from './serialize/serializeExternalApis' import { serializeFonts } from './serialize/serializeFonts' import { serializeEditorSetting } from './serialize/serializeEditorSettings' export const serializeEditorState = ( payload: EditorStateType, editorSettings?: EditorSetting[] ): Omit<EditorStateDbDataType, 'data_changes'> | null => { const projectIn = payload?.project ?? {} const project_id = projectIn.project_id if (!project_id) { alert('project_id is missing') console.warn( 'project_id is missing:', projectIn, `(projectIn)`, payload, `(payload)` ) return null } const uiIn = payload.ui //as Omit<EditorStateType['ui'], 'detailsMenu'> const project = serializeProject(projectIn, uiIn, payload.defaultTheme) const elements = serializeElements( payload.elements, payload.alternativeViewports, project_id ) const properties = serializeProperties( payload.properties, payload.elements, payload.elementTemplates ) const attributes = serializeAttributes(payload?.attributes) // seperate handling! -> must be multipart form data!!!! const { images /*imageFiles*/ } = serializeImages( payload.assets.images, project_id ) const themes: EditorStateDbDataType['themes'] = payload.themes const { bodyParams, params, headers, endpoints, externalApis } = serializeExternalApis(payload.externalApis, project_id) return { project, elements, viewport_references: payload.viewport_references, attributes, cssSelectors: [], images: images as Image[], // imageFiles, themes, externalApis, endpoints, headers, params, bodyParams, actions: payload.actions?.sort((a, b) => (a.action_id > b.action_id ? 1 : -1)) ?? [], properties, templates: payload.elementTemplates, composite_component_props: payload.composite_component_props, action_params: payload.action_params, transformers: payload.transformers, components: payload.components, theme_typographys: payload.theme_typographys, fonts: serializeFonts(payload.fonts, project_id), editor_settings: serializeEditorSetting(editorSettings ?? []), } }