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 } ] } });