UNPKG

@carrot-farm/mongsil-ui

Version:
146 lines (145 loc) 5.59 kB
"use strict"; 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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (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 __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); var React = __importStar(require("react")); var react_1 = require("react"); var formContext_1 = require("../../contexts/formContext"); /** ===== component ===== */ function FormProvider(_a) { var children = _a.children; var _b = (0, react_1.useState)(function () { return ({}); }), values = _b[0], setValues = _b[1]; var _c = (0, react_1.useState)(function () { return ({}); }), errors = _c[0], setErrors = _c[1]; var _d = (0, react_1.useState)(function () { return (__assign({}, schemeState)); }), scheme = _d[0], setScheme = _d[1]; /** 단일 값을 변경 */ var handleSetValue = (0, react_1.useCallback)(function (name, value) { if (name === undefined) { return; } setValues(function (v) { var _a; return (__assign(__assign({}, v), (_a = {}, _a[name] = value, _a))); }); }, []); /** 여러 값을 변경 */ var handleSetValues = (0, react_1.useCallback)(function (_values) { setValues(function (v) { return (__assign(__assign({}, v), _values)); }); }, []); /** 모델을 추가 하거나 수정 */ var handleModel = (0, react_1.useCallback)(function (model) { if (model.id && typeof model.id !== 'string') { throw new Error('invalid type model.id: '); } setScheme(function (a) { var _a; // # 이미 존재할 경우 모델 업데이트 if (a.idMap[model.id] !== undefined) { var newModel = a.model.map(function (m) { return m.id === model.id ? model : m; }); return __assign(__assign({}, a), { model: newModel }); } // # 없을 경우 추가 else { var newModel = __spreadArray(__spreadArray([], a.model, true), [__assign({}, model)], false); var index = newModel.length - 1; var newIdMap = __assign(__assign({}, a.idMap), (_a = {}, _a[model.id] = index, _a)); var newNameMap = __assign({}, a.nameMap); if (model.name !== undefined) { newNameMap[model.name] = index; } return { model: newModel, idMap: newIdMap, nameMap: newNameMap, }; } }); }, []); /** 에러 정보 수정 */ var setError = (0, react_1.useCallback)(function (id, message) { setErrors(function (_errors) { var _a; return __assign(__assign({}, _errors), (_a = {}, _a[id] = message, _a)); }); }, [setErrors]); /** 에러 필드 추가 */ var addError = (0, react_1.useCallback)(function (id) { setErrors(function (a) { var _a; if (id && typeof id === 'string' && a[id] !== undefined) { return a; } return __assign(__assign({}, a), (_a = {}, _a[id] = null, _a)); }); }, [setErrors]); /** form context 정의 */ var formContextValue = (0, react_1.useMemo)(function () { return ({ values: values, errors: errors, scheme: scheme, direction: 'y', setValue: handleSetValue, setValues: handleSetValues, setModel: handleModel, addError: addError, setError: setError, setErrors: setErrors, }); }, [ values, errors, scheme, handleSetValue, handleSetValues, handleModel, setError, addError, setErrors, ]); // console.log('> ', errors); return (React.createElement(formContext_1.FormContext.Provider, { value: formContextValue }, children)); } /** scheme 초기 값 */ var schemeState = { idMap: {}, nameMap: {}, model: [], }; exports.default = React.memo(FormProvider);