1
0
Fork 0
mirror of synced 2024-09-13 07:53:31 +12:00
budibase/packages/builder/src/components/common/core.js

133 lines
3.9 KiB
JavaScript
Raw Normal View History

2019-10-07 18:03:41 +13:00
import {
hierarchy as hierarchyFunctions,
common,
getTemplateApi,
getAuthApi,
} from "../../../../core/src"
import { _getNew } from "../../../../core/src/recordApi/getNew"
2020-02-26 04:21:23 +13:00
import { find, filter, keyBy, flatten, map } from "lodash/fp"
import { generateSchema } from "../../../../core/src/indexing/indexSchemaCreator"
import { generate } from "shortid"
2019-10-07 18:03:41 +13:00
export { canDeleteIndex } from "../../../../core/src/templateApi/canDeleteIndex"
2020-04-14 21:25:37 +12:00
export { canDeleteModel } from "../../../../core/src/templateApi/canDeleteModel"
export { userWithFullAccess } from "../../../../core/src/index"
export { joinKey } from "../../../../core/src/common"
export { getExactNodeForKey } from "../../../../core/src/templateApi/hierarchy"
export const pipe = common.$
2019-07-13 21:35:57 +12:00
export const events = common.eventsList
2019-07-13 21:35:57 +12:00
export const getNode = (hierarchy, nodeId) =>
pipe(hierarchy, [
hierarchyFunctions.getFlattenedHierarchy,
find(n => n.nodeId === nodeId || n.nodeKey() === nodeId),
])
2019-07-13 21:35:57 +12:00
export const constructHierarchy = node => {
if (!node) return node
return templateApi(node).constructHierarchy(node)
2019-07-13 21:35:57 +12:00
}
export const createNewHierarchy = () => {
return templateApi().getNewRootLevel()
2019-07-13 21:35:57 +12:00
}
export const templateApi = hierarchy => getTemplateApi({ hierarchy })
export const authApi = (hierarchy, actions) =>
getAuthApi({
hierarchy,
actions: keyBy("name")(actions),
publish: () => { },
})
2019-07-13 21:35:57 +12:00
export const allTypes = templateApi({}).allTypes
2019-07-13 21:35:57 +12:00
export const validate = {
all: templateApi({}).validateAll,
node: templateApi({}).validateNode,
field: templateApi({}).validateField,
}
2019-07-13 21:35:57 +12:00
export const getPotentialReverseReferenceIndexes = (hierarchy, refIndex) => {
const res = pipe(hierarchy, [
hierarchyFunctions.getFlattenedHierarchy,
filter(
n =>
hierarchyFunctions.isAncestor(refIndex)(n) ||
hierarchyFunctions.isAncestor(refIndex)(n.parent())
),
map(n => n.indexes),
flatten,
filter(hierarchyFunctions.isReferenceIndex),
])
return res
2019-07-13 21:35:57 +12:00
}
2020-04-14 22:07:21 +12:00
export const getPotentialReferenceIndexes = (hierarchy, model) =>
pipe(hierarchy, [
hierarchyFunctions.getFlattenedHierarchy,
filter(hierarchyFunctions.isAncestorIndex),
filter(
i =>
2020-04-14 22:07:21 +12:00
hierarchyFunctions.isAncestor(model)(i.parent()) ||
i.parent().nodeId === model.parent().nodeId ||
hierarchyFunctions.isRoot(i.parent())
),
])
export const isIndex = hierarchyFunctions.isIndex
2020-04-14 22:03:22 +12:00
export const isModel = hierarchyFunctions.isModel
export const nodeNameFromNodeKey = hierarchyFunctions.nodeNameFromNodeKey
export const getDefaultTypeOptions = type =>
!type ? {} : allTypes[type].getDefaultOptions()
export const getNewAction = () => templateApi({}).createAction()
export const getNewTrigger = () => templateApi({}).createTrigger()
export const validateActions = actions =>
templateApi({}).validateActions(actions)
export const validateTriggers = (triggers, actions) =>
templateApi({}).validateTriggers(triggers, actions)
export const generateFullPermissions = (hierarchy, actions) =>
authApi(hierarchy, actions).generateFullPermissions()
export const getNewAccessLevel = () => authApi().getNewAccessLevel()
export const validateAccessLevels = (hierarchy, actions, accessLevels) =>
authApi(hierarchy, actions).validateAccessLevels(accessLevels)
export const getIndexNodes = hierarchy =>
pipe(hierarchy, [
hierarchyFunctions.getFlattenedHierarchy,
filter(hierarchyFunctions.isIndex),
])
export const getRecordNodes = hierarchy =>
pipe(hierarchy, [
hierarchyFunctions.getFlattenedHierarchy,
2020-04-14 22:03:22 +12:00
filter(hierarchyFunctions.isModel),
])
export const getIndexSchema = hierarchy => index =>
generateSchema(hierarchy, index)
export const getNewRecord = _getNew
export const getNewInstance = (appId, name) => {
const id = `2-${generate()}`
return {
key: `/applications/${appId}/instances/${id}`,
active: true,
version: { key: "" },
isNew: true,
type: "instance",
2020-03-24 03:15:09 +13:00
datastoreconfig: "",
id,
name,
}
}