@cmk/fe_utils
Version:
frontend utility library
81 lines (76 loc) • 2.7 kB
text/typescript
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 ?? []),
}
}