UNPKG

@grandlinex/react-components

Version:
136 lines (135 loc) 6.15 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const react_1 = __importStar(require("react")); const FormRender_1 = require("./FormRender"); const util_1 = require("../../util"); const LPulse_1 = __importDefault(require("../loading/LPulse")); const Button_1 = require("../button/Button"); const Grid_1 = require("../Grid/Grid"); const lib_1 = require("../lib"); const FormValidation_1 = require("./FormValidation"); function Form({ title, options, onChange, onSubmit, buttonText, buttonNode, buttonCenter, loading, loadingNode, loadingMessage, defaultState, defaultError, className, compact, }) { const ui = (0, util_1.useUIContext)(); const [form, setForm] = (0, react_1.useState)(defaultState || (0, FormRender_1.def)(options)); const [spinning, setSpinning] = (0, react_1.useState)(undefined); const [error, setError] = (0, react_1.useState)(undefined); const validate = (set) => { const err = (0, FormValidation_1.requiredFieldValidation)(options, form, ui.translation); if (set && err) { setError(err); } return err; }; const updateForm = (key, value) => { const out = { ...form, }; out[key] = value; setForm(out); if (onChange) { onChange({ form: out, setError, update: setForm, validateRequired: validate, changed: { key, value }, clear: () => { setForm((0, FormRender_1.def)(options)); setError(undefined); }, }); } }; const fError = defaultError || error; const submitForm = () => { if (onSubmit) { if (loading) { setSpinning(true); } setError(undefined); const pre = {}; const fKey = Object.keys(form); const inpList = (0, FormRender_1.getFormInputs)(options); for (const key of fKey) { const opt = inpList?.find((el) => el.key === key)?.beforeSubmit; if (opt) { pre[key] = opt(form[key]); } else { pre[key] = form[key]; } } onSubmit({ form: pre, setError, changed: null, update: setForm, validateRequired: validate, clear: () => { setForm((0, FormRender_1.def)(options)); setError(undefined); }, }).then(() => { if (loading) { setSpinning(false); } }); } }; return (react_1.default.createElement(Grid_1.Grid, { className: (0, lib_1.classN)(['glx-form', [!!compact, 'glx-form--compact']], className) }, title, spinning ? loadingNode || react_1.default.createElement(LPulse_1.default, null) : options.map((el) => { const elx = el.filter((e) => (e?.showOn ? e.showOn(form) : true)); if (elx.length === 0) { return null; } return (react_1.default.createElement(FormRender_1.FormRow, { key: el.reduce((a, b) => { if (!b) { return `${a}_empty`; } if (Array.isArray(b)) { return `${a}_${b.map((dx) => dx.key).join('_')}`; } return `${a}_${b.key}`; }, ''), option: elx, form: form, updateForm: updateForm, submitForm: submitForm, error: fError })); }), spinning && loadingMessage ? (react_1.default.createElement("div", { className: "glx-py-12" }, loadingMessage)) : null, react_1.default.createElement("div", { className: (0, util_1.cnx)('glx-form--row', 'glx-flex-row', 'glx-flex-wrap', 'glx-flex-g-8', [!!buttonCenter, 'glx-flex-center']) }, fError?.global && fError.global.length > 0 ? fError.global?.map((er) => { return (react_1.default.createElement("div", { key: (0, util_1.uuid)(), className: "glx-form--error" }, ' ', react_1.default.createElement("div", null, er), ' ')); }) : null), onSubmit && !spinning ? (react_1.default.createElement("div", { className: (0, util_1.cnx)('glx-form--button-row', 'glx-flex-row', 'glx-flex-g-4', 'glx-pr-8', [!!buttonCenter, 'glx-flex-center', 'glx-flex-end']) }, buttonNode ? (buttonNode(submitForm)) : (react_1.default.createElement(Button_1.Button, { cancel: true, disabled: spinning || false, onClick: submitForm }, buttonText || ui.translation.get('glx.form.required.submit'))))) : null)); } exports.default = Form;