1
0
Fork 0
mirror of synced 2024-09-15 00:38:01 +12:00
budibase/packages/builder/src/builderStore/storeUtils.js

99 lines
2.7 KiB
JavaScript
Raw Normal View History

import {
makePropsSafe,
getBuiltin,
} from "components/userInterface/pagesParsing/createProps"
import api from "./api"
import { generate_screen_css } from "./generate_css"
2020-08-13 03:28:19 +12:00
import { uuid } from "./uuid"
2020-08-13 22:50:12 +12:00
import getNewComponentName from "./getNewComponentName"
export const selectComponent = (state, component) => {
const componentDef = component._component.startsWith("##")
? component
: state.components[component._component]
state.currentComponentInfo = makePropsSafe(componentDef, component)
state.currentView = "component"
return state
}
export const getParent = (rootProps, child) => {
let parent
walkProps(rootProps, (p, breakWalk) => {
if (
p._children &&
(p._children.includes(child) || p._children.some(c => c._id === child))
) {
parent = p
breakWalk()
}
})
return parent
}
export const saveCurrentPreviewItem = s =>
s.currentFrontEndType === "page"
? savePage(s)
: saveScreenApi(s.currentPreviewItem, s)
export const savePage = async s => {
const pageName = s.currentPageName || "main"
const page = s.pages[pageName]
await api.post(`/_builder/api/${s.appId}/pages/${s.currentPageName}`, {
page: { componentLibraries: s.pages.componentLibraries, ...page },
uiFunctions: s.currentPageFunctions,
screens: page._screens,
})
}
export const saveScreenApi = (screen, s) => {
api
.post(`/_builder/api/${s.appId}/pages/${s.currentPageName}/screen`, screen)
.then(() => savePage(s))
}
export const renameCurrentScreen = (newname, state) => {
const oldname = state.currentPreviewItem.props._instanceName
state.currentPreviewItem.props._instanceName = newname
api.patch(
`/_builder/api/${state.appId}/pages/${state.currentPageName}/screen`,
{
oldname,
newname,
}
)
return state
}
export const walkProps = (props, action, cancelToken = null) => {
cancelToken = cancelToken || { cancelled: false }
action(props, () => {
cancelToken.cancelled = true
})
if (props._children) {
for (let child of props._children) {
if (cancelToken.cancelled) return
walkProps(child, action, cancelToken)
}
}
2020-06-01 23:15:44 +12:00
}
export const regenerateCssForScreen = screen => {
screen._css = generate_screen_css([screen.props])
}
2020-06-02 22:16:30 +12:00
export const regenerateCssForCurrentScreen = state => {
regenerateCssForScreen(state.currentPreviewItem)
return state
}
2020-08-13 03:28:19 +12:00
2020-10-09 23:58:46 +13:00
export const generateNewIdsForComponent = (c, state, changeName = true) =>
2020-08-13 03:28:19 +12:00
walkProps(c, p => {
p._id = uuid()
2020-10-09 23:58:46 +13:00
if (changeName) p._instanceName = getNewComponentName(p._component, state)
2020-08-13 03:28:19 +12:00
})
export const getComponentDefinition = (state, name) =>
name.startsWith("##") ? getBuiltin(name) : state.components[name]