UNPKG

@react-formless/core

Version:
182 lines 14.1 kB
"use strict"; var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) { if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } return cooked; }; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; var __spreadArrays = (this && this.__spreadArrays) || function () { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.styledInputsRenderMap = exports.Row = exports.plainHtmlElementRenderMap = exports.plainHtmlRenderMap = exports.ListInput = exports.CollectionInput = exports.StyledTextArea = void 0; var React = require("react"); var utils_1 = require("@react-formless/utils"); var styled_components_1 = require("styled-components"); var __1 = require(".."); var Render = function (p) { return (p.condition ? p.value() : null); }; var StyledTitle = styled_components_1.default.h3(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n color: #666;\n padding: 0;\n margin: 6px 0;\n"], ["\n color: #666;\n padding: 0;\n margin: 6px 0;\n"]))); var Title = function (p) { return (React.createElement(Render, { condition: !utils_1.isEmpty(p.text), value: function () { return React.createElement(StyledTitle, null, p.text); } })); }; var StyledLabel = styled_components_1.default.label(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n font-size: 0.8rem;\n color: #666;\n"], ["\n font-size: 0.8rem;\n color: #666;\n"]))); var Label = function (p) { return (React.createElement(Render, { condition: !utils_1.isEmpty(p.text), // eslint-disable-next-line jsx-a11y/label-has-for value: function () { return React.createElement(StyledLabel, { htmlFor: p.htmlFor }, p.text); } })); }; var StyledError = styled_components_1.default.div(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n color: #f88;\n"], ["\n color: #f88;\n"]))); var Error = function (_a) { var validationResult = _a.validationResult, visited = _a.visited; return (React.createElement(StyledError, null, validationResult && visited && validationResult.type === "Err" ? validationResult.value : "")); }; var sharedStyle = styled_components_1.css(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n width: 100%;\n color: rgba(0, 0, 0, 0.87);\n overflow-wrap: break-word;\n outline: none;\n display: flex;\n line-height: 34px;\n font-size: 16px;\n border: 1px solid rgb(223, 225, 229);\n padding: 0px 6px;\n margin: 0px 0px 4px;\n box-sizing: border-box;\n &::placeholder {\n color: #ccc;\n }\n"], ["\n width: 100%;\n color: rgba(0, 0, 0, 0.87);\n overflow-wrap: break-word;\n outline: none;\n display: flex;\n line-height: 34px;\n font-size: 16px;\n border: 1px solid rgb(223, 225, 229);\n padding: 0px 6px;\n margin: 0px 0px 4px;\n box-sizing: border-box;\n &::placeholder {\n color: #ccc;\n }\n"]))); var StyledInput = styled_components_1.default.input(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), sharedStyle); var Input = function (p) { var r = __1.getElementsRenderMap(p.renderOptions); var inputProps = __1.getInputProps(p); var type = p.schema.type === "number" ? "number" : p.schema.type === "password" ? "password" : "text"; return (React.createElement(React.Fragment, null, React.createElement(r.Title, { text: p.schema.sectionTitle }), React.createElement(r.Label, { text: p.schema.name, htmlFor: inputProps.id }), React.createElement(StyledInput, __assign({}, inputProps, { type: type })), React.createElement(r.Error, __assign({}, p.state)))); }; exports.StyledTextArea = styled_components_1.default.textarea(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), sharedStyle); var TextAreaInput = function (p) { var r = __1.getElementsRenderMap(p.renderOptions); return (React.createElement(React.Fragment, null, React.createElement(r.Title, { text: p.schema.sectionTitle }), React.createElement(r.Label, { text: p.schema.name }), React.createElement(exports.StyledTextArea, __assign({}, __1.getInputProps(p))), React.createElement(r.Error, __assign({}, p.state)))); }; var RadioInput = function (p) { var r = __1.getElementsRenderMap(p.renderOptions); var _a = __1.getInputProps(p), onChange = _a.onChange, inputProps = __rest(_a, ["onChange"]); var handleClick = function (value) { return function () { return (onChange ? onChange({ target: { value: value } }) : null); }; }; return (React.createElement(React.Fragment, null, React.createElement(r.Title, { text: p.schema.sectionTitle }), React.createElement(r.Label, { text: p.schema.name }), p.schema.values.map(function (_a) { var name = _a[0], value = _a[1]; return (React.createElement("div", { key: value, onClick: handleClick(value) }, React.createElement("input", __assign({}, inputProps, { type: "radio", checked: "" + p.state.value === "" + value, onChange: handleClick(value) })), React.createElement("span", null, name))); }))); }; var SelectInput = function (p) { var r = __1.getElementsRenderMap(p.renderOptions); return (React.createElement(React.Fragment, null, React.createElement(r.Title, { text: p.schema.sectionTitle }), React.createElement(r.Label, { text: p.schema.name }), React.createElement("select", __assign({ name: p.schema.name }, __1.getInputProps(p)), p.schema.values.map(function (_a) { var name = _a[0], value = _a[1]; return (React.createElement("option", { value: value, key: value }, name)); })))); }; var MultiselectInput = function (p) { var r = __1.getElementsRenderMap(p.renderOptions); var _a = __1.getExtInputProps(p), onChange = _a.onChange, value = _a.value; var handleCheck = function (nv) { return function (e) { var _a, _b; return onChange(e.target.checked ? ((_a = p.state.value) === null || _a === void 0 ? void 0 : _a.concat(nv)) || [nv] : ((_b = p.state.value) === null || _b === void 0 ? void 0 : _b.filter(function (v) { return v !== nv; })) || []); }; }; return (React.createElement(React.Fragment, null, React.createElement(r.Title, { text: p.schema.sectionTitle }), React.createElement(r.Label, { text: p.schema.name }), p.schema.values.map(function (v) { return (React.createElement("label", { key: v[0] }, React.createElement("input", { type: "checkbox", value: v[1], checked: (value === null || value === void 0 ? void 0 : value.includes(v[1])) || false, onChange: handleCheck(v[1]) }), " ", v[0])); }))); }; exports.CollectionInput = function (p) { var r = __1.getElementsRenderMap(p.renderOptions); var mutate = p.schema.mutate; var onAddClick = function () { return p.setDelta(__spreadArrays(p.state, [ __1.toFormState(p.schema.fields, mutate ? (utils_1.isFunction(mutate.createValue) ? mutate.createValue() : mutate.createValue) : null) ])); }; var onRemoveClick = function (i) { return function () { return p.setDelta(p.state.filter(function (_, i2) { return i2 !== i; })); }; }; var getLabel = function () { return mutate ? (p.state.length ? mutate.addNextLabel : mutate.addFirstLabel || mutate.addNextLabel) : ""; }; if (!p.state.length) return (React.createElement(React.Fragment, null, React.createElement(r.Title, { text: p.schema.sectionTitle }), React.createElement(r.Label, { text: p.schema.name }), mutate && React.createElement(r.Button, { onClick: onAddClick }, getLabel()))); return (React.createElement(React.Fragment, null, React.createElement(r.Title, { text: p.schema.sectionTitle }), React.createElement(r.Label, { text: p.schema.name }), React.createElement(r.ItemChildrenWrapper, null, p.state.map(function (state, index) { return (React.createElement(React.Fragment, { key: index }, React.createElement(__1.FormView, __assign({ schema: p.schema.fields, state: state, setState: function (d) { return p.setDelta(utils_1.replace(p.state, index, d)); } }, p.renderOptions)), mutate && p.state.length > 0 ? (React.createElement(r.Button, { onClick: onRemoveClick(index) }, mutate.removeLabel || "Remove")) : null)); }), mutate && React.createElement(r.Button, { onClick: onAddClick }, getLabel())))); }; exports.ListInput = function (p) { var mutate = p.schema.mutate; var r = __1.getElementsRenderMap(p.renderOptions); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion var onAdd = function () { return p.setDelta(__spreadArrays(p.state, [__1.toInputState(p.schema.field, mutate.createValue)])); }; var onRemove = function (i2) { return function () { return p.setDelta(p.state.filter(function (_, i) { return i2 !== i; })); }; }; return (React.createElement(React.Fragment, null, React.createElement(r.Title, { text: p.schema.sectionTitle }), React.createElement(r.ItemChildrenWrapper, null, p.state.map(function (s, index) { return (React.createElement(React.Fragment, { key: p.schema.type + "-" + index }, React.createElement(__1.FormItemView, { schema: p.schema.field, state: s, setDelta: function (value) { return p.setDelta(utils_1.replace(p.state, index, value)); }, renderOptions: p.renderOptions }), mutate && p.state.length > 0 ? (React.createElement(r.Button, { onClick: onRemove(index) }, mutate.removeLabel || "Remove")) : null)); })), mutate && React.createElement(r.Button, { onClick: onAdd }, mutate.addNextLabel))); }; exports.plainHtmlRenderMap = { text: Input, password: Input, number: Input, customBox: Input, email: Input, textarea: TextAreaInput, hidden: function () { return null; }, radio: RadioInput, select: SelectInput, customOption: SelectInput, multiselect: MultiselectInput, collection: exports.CollectionInput, list: exports.ListInput }; var Button = styled_components_1.default.button(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n background-image: -webkit-linear-gradient(top, rgb(245, 245, 245), rgb(241, 241, 241));\n background-color: rgb(242, 242, 242);\n border: 1px solid rgb(242, 242, 242);\n border-radius: 4px;\n color: rgb(95, 99, 104);\n font-size: 14px;\n margin: 4px;\n padding: 0px 14px;\n line-height: 27px;\n height: 36px;\n text-align: center;\n cursor: pointer;\n user-select: none;\n outline: none;\n box-sizing: border-box;\n min-width: 90px;\n"], ["\n background-image: -webkit-linear-gradient(top, rgb(245, 245, 245), rgb(241, 241, 241));\n background-color: rgb(242, 242, 242);\n border: 1px solid rgb(242, 242, 242);\n border-radius: 4px;\n color: rgb(95, 99, 104);\n font-size: 14px;\n margin: 4px;\n padding: 0px 14px;\n line-height: 27px;\n height: 36px;\n text-align: center;\n cursor: pointer;\n user-select: none;\n outline: none;\n box-sizing: border-box;\n min-width: 90px;\n"]))); var ItemWrapper = styled_components_1.default.div(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n margin: 2px;\n"], ["\n margin: 2px;\n"]))); exports.plainHtmlElementRenderMap = { ItemWrapper: ItemWrapper, Button: Button, ItemChildrenWrapper: function (p) { return React.createElement("div", __assign({}, p)); }, DefaultFormItem: function () { return React.createElement("h1", null, "Not supported"); }, Title: Title, Label: Label, Error: Error }; exports.Row = styled_components_1.default.div(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n display: flex;\n box-sizing: border-box;\n\n flex-direction: row;\n & > div {\n flex: 1;\n & > input {\n width: calc(100% - 12px);\n }\n }\n & > div:last-child > input {\n width: 100%;\n }\n"], ["\n display: flex;\n box-sizing: border-box;\n\n flex-direction: row;\n & > div {\n flex: 1;\n & > input {\n width: calc(100% - 12px);\n }\n }\n & > div:last-child > input {\n width: 100%;\n }\n"]))); exports.styledInputsRenderMap = { Title: function (p) { return React.createElement(StyledTitle, null, p.value); }, Row: function (p) { return React.createElement(exports.Row, null, p.value); }, Custom: function () { return React.createElement("pre", null, "Implement me"); } }; var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9; //# sourceMappingURL=PlainHtmlRenderMap.js.map