budibase/packages/client/src/state/eventHandlers.js

55 lines
1.6 KiB
JavaScript
Raw Normal View History

import { setState } from "./setState"
import { getState } from "./getState"
import { isArray, isUndefined } from "lodash/fp"
import { createApi } from "../api"
import { getNewChildRecordToState, getNewRecordToState } from "./coreHandlers"
export const EVENT_TYPE_MEMBER_NAME = "##eventHandlerType"
export const eventHandlers = (store, coreApi, rootPath) => {
const handler = (parameters, execute) => ({
execute,
parameters,
})
const setStateWithStore = (path, value) => setState(store, path, value)
let currentState
store.subscribe(s => {
currentState = s
})
const api = createApi({
rootPath: rootPath,
setState: setStateWithStore,
getState: (path, fallback) => getState(currentState, path, fallback),
})
const setStateHandler = ({ path, value }) => setState(store, path, value)
return {
"Set State": handler(["path", "value"], setStateHandler),
"Load Record": handler(["recordKey", "statePath"], api.loadRecord),
"List Records": handler(["indexKey", "statePath"], api.listRecords),
"Save Record": handler(["statePath"], api.saveRecord),
"Get New Child Record": handler(
["recordKey", "collectionName", "childRecordType", "statePath"],
getNewChildRecordToState(coreApi, setStateWithStore)
),
"Get New Record": handler(
["collectionKey", "childRecordType", "statePath"],
getNewRecordToState(coreApi, setStateWithStore)
),
Authenticate: handler(["username", "password"], api.authenticate),
}
}
export const isEventType = prop =>
isArray(prop) &&
prop.length > 0 &&
!isUndefined(prop[0][EVENT_TYPE_MEMBER_NAME])