mirror of https://github.com/Budibase/budibase.git
nocodelowcodelow-codedockerdocker-composeinternal-projectinternal-toolinternal-toolslow-code-developmentlow-code-development-platformopensourceselfhostedweb-devweb-developmentweb-development-toolswebdevwebdevelopmentworkflow-automationautomationdeveloper-tools
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
3.0 KiB
128 lines
3.0 KiB
import { buttons } from "./buttonGenerators"
|
|
|
|
export const forms = ({ records, indexes, helpers }) => [
|
|
...records.map(root),
|
|
...buttons({ records, indexes, helpers }),
|
|
]
|
|
|
|
export const formName = record => `${record.name}/${record.name} Form`
|
|
|
|
const root = record => ({
|
|
name: formName(record),
|
|
description: `Control for creating/updating '${record.nodeKey()}' `,
|
|
inherits: "@budibase/standard-components/div",
|
|
props: {
|
|
className: "p-1",
|
|
children: [
|
|
{
|
|
component: {
|
|
_component: "@budibase/standard-components/h3",
|
|
text: `Edit ${record.name}`,
|
|
},
|
|
},
|
|
form(record),
|
|
saveCancelButtons(record),
|
|
],
|
|
},
|
|
})
|
|
|
|
const form = record => ({
|
|
component: {
|
|
_component: "@budibase/standard-components/form",
|
|
formControls: record.fields.map(f => formControl(record, f)),
|
|
},
|
|
})
|
|
|
|
const formControl = (record, field) => {
|
|
if (
|
|
field.type === "string" &&
|
|
field.typeOptions.values &&
|
|
field.typeOptions.values.length > 0
|
|
) {
|
|
return {
|
|
control: {
|
|
_component: "@budibase/standard-components/select",
|
|
options: field.typeOptions.values.map(v => ({ id: v, value: v })),
|
|
value: {
|
|
"##bbstate": `${record.name}.${field.name}`,
|
|
"##bbsource": "store",
|
|
},
|
|
className: "form-control",
|
|
},
|
|
label: field.label,
|
|
}
|
|
} else {
|
|
return {
|
|
control: {
|
|
_component: "@budibase/standard-components/input",
|
|
value: {
|
|
"##bbstate": `${record.name}.${field.name}`,
|
|
"##bbsource": "store",
|
|
},
|
|
className: "form-control",
|
|
type:
|
|
field.type === "string"
|
|
? "text"
|
|
: field.type === "datetime"
|
|
? "date"
|
|
: field.type === "number"
|
|
? "number"
|
|
: "text",
|
|
},
|
|
label: field.label,
|
|
}
|
|
}
|
|
}
|
|
|
|
const saveCancelButtons = record => ({
|
|
component: {
|
|
_component: "@budibase/standard-components/stackpanel",
|
|
direction: "horizontal",
|
|
children: [
|
|
paddedPanelForButton({
|
|
_component: "common/Primary Button",
|
|
contentText: `Save ${record.name}`,
|
|
onClick: [
|
|
{
|
|
"##eventHandlerType": "Save Record",
|
|
parameters: {
|
|
statePath: `${record.name}`,
|
|
},
|
|
},
|
|
{
|
|
"##eventHandlerType": "Set State",
|
|
parameters: {
|
|
path: `isEditing${record.name}`,
|
|
value: "",
|
|
},
|
|
},
|
|
],
|
|
}),
|
|
paddedPanelForButton({
|
|
_component: "common/Default Button",
|
|
contentText: `Cancel`,
|
|
onClick: [
|
|
{
|
|
"##eventHandlerType": "Set State",
|
|
parameters: {
|
|
path: `isEditing${record.name}`,
|
|
value: "",
|
|
},
|
|
},
|
|
],
|
|
}),
|
|
],
|
|
},
|
|
})
|
|
|
|
const paddedPanelForButton = button => ({
|
|
control: {
|
|
_component: "@budibase/standard-components/div",
|
|
className: "btn-group",
|
|
children: [
|
|
{
|
|
component: button,
|
|
},
|
|
],
|
|
},
|
|
})
|
|
|