@teppen/react-ui 1.5.2 → 1.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- "use strict";var e=require("../../node_modules/tslib/tslib.es6.js"),r=require("react/jsx-runtime"),o=require("./hook.js"),i=require("./header/header.js"),t=require("./pagenation/providers.js"),s=require("./pagenation/components.js"),n=require("./filter/provider.js"),l=require("./filter/components.js");require("./sort/icon.js");var a=require("./sort/provider.js"),d=require("./sheet/providers.js"),c=require("./focus/provider.js"),x=require("./checkbox/provider.js"),u=require("./checkbox/components.js"),h=require("./libs/id-generator.js"),j=require("./edit/provider.js"),p=require("./table-property/provider.js"),m=require("./operation/components/keyboard-setting.js"),g=require("./table/components/auto-switch-edit-mode.js"),v=require("./sheet/components.js"),b=require("./paste/provider.js"),w=require("./libs/conditional-formatting.js");function y(e){var t=o.useTable(e),a=t.cols,d=t.rowMaps,c=t.pageRowIds,x=n.useFilterContext().selectedFilterKey;return r.jsxs("div",{className:"w-full",children:[r.jsx("div",{className:"flex justify-end mb-1 mr-3",children:r.jsx(l.TableFilterRemoveButton,{children:r.jsx("p",{className:"text-xs underline text-gray-500 hover:text-gray-700",children:"全てのフィルタリング条件を解除する"})})}),r.jsx("div",{id:"table-frame",className:"relative h-full max-w-full max-h-[80vh] border border-gray-200 rounded-md overflow-auto",children:r.jsxs("table",{className:"table",children:[r.jsx("thead",{children:r.jsxs("tr",{className:"sticky top-0 border-gray-200 z-20 bg-gray-200 text-gray-600 h-[32px]",children:[e.checkbox&&r.jsx("th",{children:r.jsx(u.AllCheckbox,{rows:e.rows})}),a.map((function(e,o){return r.jsx(i.TableHeaderElement,{id:h.IdGenerator.getTableColId(o),columnKey:e.key},e.key)}))]})}),r.jsxs("tbody",{children:[!!x&&r.jsx("tr",{children:r.jsx("td",{colSpan:a.length,className:"sticky top-8 left-0 bg-gray-300 w-full shadow-lg rounded-b-2xl z-20 p-0 overflow-hidden",children:r.jsx(l.TableFilterForm,{})})}),0===c.length&&r.jsx("tr",{children:r.jsx("td",{colSpan:a.length,className:"py-5",children:r.jsx("p",{className:"text-center font-bold text-lg",children:"NO DATA"})})}),c.map((function(o,i){return r.jsx(v.Row,{existCheckbox:!!e.checkbox,rowIndex:i,dataString:d[o].stringValue,cols:e.cols,onClickRow:e.onClickRow,applyRowFormatting:e.applyRowFormatting,conditionalFormattingString:w.generateFormattingString(d[o].data,a,e.conditionalFormattings),onUpdateRow:e.onUpdateRow},o)}))]})]})}),r.jsxs("div",{className:"mt-1",children:[r.jsx(s.DisplayRange,{}),r.jsx("div",{className:"mt-2",children:r.jsx(s.Pagenation,{})})]})]})}module.exports=function(o){var i,s,l;return r.jsx(n.FilterProvider,{children:r.jsx(a.SortProvider,{initialCondition:null===(i=o.initialCondition)||void 0===i?void 0:i.sort,children:r.jsx(t.PagenationProvider,{rowCount:o.rows.length,perPage:null===(l=null===(s=o.initialCondition)||void 0===s?void 0:s.pagenation)||void 0===l?void 0:l.rowCountPerPage,children:r.jsx(x.CheckboxProvider,{checkbox:o.checkbox,children:r.jsx(x.CheckboxStatusProvider,{checkboxCount:o.rows.length,children:r.jsx(d.ColumnsProvider,{cols:o.cols,children:r.jsx(c.FocusProvider,{children:r.jsx(j.EditProvider,{children:r.jsx(p.TablePropertyProvider,{children:r.jsxs(b.PasteProvider,{rows:o.rows,cols:o.cols,colValidators:{},onUpdateRowFunction:o.onUpdateRow,children:[r.jsx(g.AutoSwitchEditMode,{}),r.jsx(m.KeyboardSetting,{}),r.jsx(y,e.__assign({},o))]})})})})})})})})})})};
2
+ "use strict";var e=require("../../node_modules/tslib/tslib.es6.js"),r=require("react/jsx-runtime"),o=require("./hook.js"),i=require("./header/header.js"),t=require("./pagenation/providers.js"),s=require("./pagenation/components.js"),n=require("./filter/provider.js"),l=require("./filter/components.js");require("./sort/icon.js");var a=require("./sort/provider.js"),d=require("./sheet/providers.js"),c=require("./focus/provider.js"),x=require("./checkbox/provider.js"),u=require("./checkbox/components.js"),h=require("./libs/id-generator.js"),j=require("./edit/provider.js"),p=require("./table-property/provider.js"),m=require("./operation/components/keyboard-setting.js"),g=require("./table/components/auto-switch-edit-mode.js"),v=require("./sheet/components.js"),b=require("./paste/provider.js"),w=require("./libs/conditional-formatting.js");function y(e){var t=o.useTable(e),a=t.cols,d=t.rowMaps,c=t.pageRowIds,x=n.useFilterContext().selectedFilterKey;return r.jsxs("div",{className:"w-full",children:[r.jsx("div",{className:"flex justify-end mb-1 mr-3",children:r.jsx(l.TableFilterRemoveButton,{children:r.jsx("p",{className:"text-xs underline text-gray-500 hover:text-gray-700",children:"全てのフィルタリング条件を解除する"})})}),r.jsx("div",{id:"table-frame",className:"relative h-full max-w-full max-h-[80vh] border border-gray-200 rounded-md overflow-auto",children:r.jsxs("table",{className:"table",children:[r.jsx("thead",{children:r.jsxs("tr",{className:"sticky top-0 border-gray-200 z-20 bg-gray-200 text-gray-600 h-[32px]",children:[e.checkbox&&r.jsx("th",{children:r.jsx(u.AllCheckbox,{rows:e.rows})}),a.map((function(e,o){return r.jsx(i.TableHeaderElement,{id:h.IdGenerator.getTableColId(o),columnKey:e.key},e.key)}))]})}),r.jsxs("tbody",{children:[!!x&&r.jsx("tr",{children:r.jsx("td",{colSpan:a.length,className:"sticky top-8 left-0 bg-gray-300 w-full shadow-lg rounded-b-2xl z-20 p-0 overflow-hidden",children:r.jsx(l.TableFilterForm,{})})}),0===c.length&&r.jsx("tr",{children:r.jsx("td",{colSpan:a.length,className:"py-5",children:r.jsx("p",{className:"text-center font-bold text-lg",children:"NO DATA"})})}),c.map((function(o,i){return r.jsx(v.Row,{existCheckbox:!!e.checkbox,rowIndex:i,dataString:d[o].stringValue,cols:e.cols,onClickRow:e.onClickRow,applyRowFormatting:e.applyRowFormatting,conditionalFormattingString:w.generateFormattingString(d[o].data,a,e.conditionalFormattings),onUpdateRow:e.onUpdateRow},o)}))]})]})}),r.jsxs("div",{className:"mt-1",children:[r.jsx(s.DisplayRange,{}),r.jsx("div",{className:"mt-2",children:r.jsx(s.Pagenation,{})})]})]})}module.exports=function(o){var i,s,l;return r.jsx(n.FilterProvider,{children:r.jsx(a.SortProvider,{initialCondition:null===(i=o.initialCondition)||void 0===i?void 0:i.sort,children:r.jsx(t.PagenationProvider,{rowCount:o.rows.length,perPage:null===(l=null===(s=o.initialCondition)||void 0===s?void 0:s.pagenation)||void 0===l?void 0:l.rowCountPerPage,children:r.jsx(x.CheckboxProvider,{checkbox:o.checkbox,children:r.jsx(x.CheckboxStatusProvider,{checkboxCount:o.rows.length,children:r.jsx(d.ColumnsProvider,{cols:o.cols,errorHandler:o.errorHandler,children:r.jsx(c.FocusProvider,{children:r.jsx(j.EditProvider,{children:r.jsx(p.TablePropertyProvider,{children:r.jsxs(b.PasteProvider,{rows:o.rows,cols:o.cols,colValidators:{},onUpdateRowFunction:o.onUpdateRow,children:[r.jsx(g.AutoSwitchEditMode,{}),r.jsx(m.KeyboardSetting,{}),r.jsx(y,e.__assign({},o))]})})})})})})})})})})};
3
3
  //# sourceMappingURL=base.js.map
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- "use strict";var e=require("react/jsx-runtime"),t=require("../../hook.js"),l=require("./edit-button.js"),i=require("./string-input.js"),n=require("./number-input.js"),o=require("./select-input.js"),r=require("react"),s=require("../../libs/id-generator.js"),a=require("../provider.js"),c=require("../../sheet/providers.js"),u=r.memo((function(t){return e.jsx(e.Fragment,{children:"component"===t.type?t.component:e.jsx("div",{onDoubleClick:t.onDoubleClick,children:e.jsx("p",{className:"cell-data text-left whitespace-nowrap",children:t.component})})})})),d=r.memo((function(t){var r=a.useCellContext();return e.jsx("td",{id:t.id,onPaste:function(e){e.preventDefault(),t.isExistOnUpdateRow?t.pasteData(e.clipboardData.getData("text")):alert("ペースト機能が有効化されていません。")},className:"".concat(t.cellFormatClassName),children:e.jsxs("div",{className:"relative",onClick:t.isExistOnClickRow?void 0:function(e){e.preventDefault(),t.focusAtCell()},onDoubleClick:t.isExistOnClickRow?void 0:t.onDoubleClickCellToEdit,children:[e.jsx("div",{id:"".concat(t.id,"-display"),children:e.jsxs("div",{className:"flex items-center gap-3 w-fit p-2 cursor-default",onClick:function(e){e.preventDefault(),e.stopPropagation(),t.focusAtCell()},children:[e.jsx(u,{type:r.type,component:r.component,onDoubleClick:t.onDoubleClickCellToEdit}),t.editable&&e.jsx(l.EditButton,{})]})}),t.editable&&e.jsxs("div",{id:"".concat(t.id,"-editor"),className:"absolute top-0 left-0 w-full h-full grid place-items-center z-10 pr-2",onClick:t.preventPropagation,style:{opacity:0,pointerEvents:"none"},children:["string"===r.type&&e.jsx(i.StringCellInput,{}),"number"===r.type&&e.jsx(n.NumberCellInput,{}),"select"===r.type&&e.jsx(o.SelectCellInput,{})]})]})})}));exports.TableCell=function(l){var i,n=t.useCell(l.rowIndex,l.colIndex),o=n.focusAtCell,r=n.onDoubleClickCellToEdit,u=n.preventPropagation,p=n.pasteData,C=c.useColumnContext(l.columnKey);return e.jsx(a.CellProvider,{columnKey:l.columnKey,children:e.jsx(d,{id:s.IdGenerator.getTableCellId(l.rowIndex,l.colIndex),editable:null!==(i=C.editable)&&void 0!==i&&i,cellFormatClassName:l.cellFormatClassName,focusAtCell:o,onDoubleClickCellToEdit:r,preventPropagation:u,pasteData:p,isExistOnClickRow:l.isExistOnClickRow,isExistOnUpdateRow:!!l.onUpdateRow})})};
2
+ "use strict";var e=require("react/jsx-runtime"),t=require("../../hook.js"),l=require("./edit-button.js"),n=require("./string-input.js"),i=require("./number-input.js"),o=require("./select-input.js"),r=require("react"),s=require("../../libs/id-generator.js"),a=require("../provider.js"),c=require("../../sheet/providers.js"),u=r.memo((function(t){return e.jsx(e.Fragment,{children:"component"===t.type?t.component:e.jsx("div",{onDoubleClick:t.onDoubleClick,children:e.jsx("p",{className:"cell-data text-left whitespace-nowrap",children:t.component})})})})),d=r.memo((function(t){var s=a.useCellContext(),c=r.useRef(null);return e.jsx("td",{id:t.id,onPaste:function(e){null!==c.current&&(c.current.contains(document.activeElement)||(e.preventDefault(),t.isExistOnUpdateRow?t.pasteData(e.clipboardData.getData("text")):alert("ペースト機能が有効化されていません。")))},className:"".concat(t.cellFormatClassName),children:e.jsxs("div",{className:"relative",onClick:t.isExistOnClickRow?void 0:function(e){e.preventDefault(),t.focusAtCell()},onDoubleClick:t.isExistOnClickRow?void 0:t.onDoubleClickCellToEdit,children:[e.jsx("div",{id:"".concat(t.id,"-display"),children:e.jsxs("div",{className:"flex items-center gap-3 w-fit p-2 cursor-default",onClick:function(e){e.preventDefault(),e.stopPropagation(),t.focusAtCell()},children:[e.jsx(u,{type:s.type,component:s.component,onDoubleClick:t.onDoubleClickCellToEdit}),t.editable&&e.jsx(l.EditButton,{})]})}),t.editable&&e.jsxs("div",{id:"".concat(t.id,"-editor"),ref:c,className:"absolute top-0 left-0 w-full h-full grid place-items-center z-10 pr-2",onClick:t.preventPropagation,style:{opacity:0,pointerEvents:"none"},children:["string"===s.type&&e.jsx(n.StringCellInput,{}),"number"===s.type&&e.jsx(i.NumberCellInput,{}),"select"===s.type&&e.jsx(o.SelectCellInput,{})]})]})})}));exports.TableCell=function(l){var n,i=t.useCell(l.rowIndex,l.colIndex),o=i.focusAtCell,r=i.onDoubleClickCellToEdit,u=i.preventPropagation,p=i.pasteData,C=c.useColumnContext(l.columnKey);return e.jsx(a.CellProvider,{columnKey:l.columnKey,children:e.jsx(d,{id:s.IdGenerator.getTableCellId(l.rowIndex,l.colIndex),editable:null!==(n=C.editable)&&void 0!==n&&n,cellFormatClassName:l.cellFormatClassName,focusAtCell:o,onDoubleClickCellToEdit:r,preventPropagation:u,pasteData:p,isExistOnClickRow:l.isExistOnClickRow,isExistOnUpdateRow:!!l.onUpdateRow})})};
3
3
  //# sourceMappingURL=cell.js.map
@@ -1,2 +1,2 @@
1
- "use strict";exports.generateValidateFunction=function(t){if("string"===t.type)return a=t.constraints,function(t){return(null==a?void 0:a.maxLength)&&t.length>a.maxLength?(alert("最大文字数(".concat(a.maxLength,")を超過しています。(現在").concat(t.length,"文字)")),!1):(null==a?void 0:a.minLength)&&t.length<a.minLength?(alert("最小文字数(".concat(a.minLength,")を下回っています。(現在").concat(t.length,"文字)")),!1):!((null==a?void 0:a.pattern)&&!new RegExp(a.pattern).test(t)&&(alert("パターンに一致しません。(パターン".concat(a.pattern,")")),1))};if("number"===t.type)return function(t){return function(n){if("string"==typeof n){if(!/^-?[0-9]+(\.[0-9]+)?$/.test(n))return alert("数値ではない値が入力されています。"),!1;n=Number(n)}return"number"==typeof(null==t?void 0:t.max)&&n>t.max?(alert("最大値(".concat(t.max,")を超過しています。(入力値:").concat(n,")")),!1):!("number"==typeof(null==t?void 0:t.min)&&n<t.min&&(alert("最小値(".concat(t.min,")を下回っています。(入力値:").concat(n,")")),1))}}(t.constraints);if("select"===t.type)return n=t.options,e=t.allowEmpty,r=new Set(n.map((function(t){return t.label}))),function(t){return!(!e||""!==t)||!!r.has(t)||(alert("選択肢に含まれていない値です。(選択肢:".concat(t,")")),!1)};throw new Error("Invalid type");var n,e,r,a};
1
+ "use strict";function n(n){var e="入力値が不正のため、エラーを確認し修正してください。\n\n";e+="[対象の列名]: ".concat(n[0].label,"\n"),e+="[入力値]  : ".concat(n[0].value,"\n\n"),e+="[エラー内容]:",e+=n.reduce((function(n,e){switch(e.type){case"STRING_IS_TOO_LONG":return n+"\n・文字数が最大の長さ".concat(e.maxLength,"文字を超えています。(現在").concat(e.currentLength,"文字)");case"STRING_IS_TOO_SHORT":return n+"\n・文字数が最小の長さ".concat(e.minLength,"文字に満たないです。(現在").concat(e.currentLength,"文字)");case"STRING_PATTERN_NOT_MATCH":return n+"\n・パターンに一致しません。(パターン".concat(e.pattern,")");case"NUMBER_IS_TOO_LARGE":return n+"\n・最大値".concat(e.max,"を超えています。(入力値").concat(e.value,")");case"NUMBER_IS_TOO_SMALL":return n+"\n・最小値".concat(e.min,"を下回っています。(入力値").concat(e.value,")");case"NOT_NUMBER":return n+"\n・数値ではない値が入力されています。";case"NOT_IN_OPTIONS":return n+"\n・選択肢に含まれていない値です。"}}),""),alert(e)}exports.generateValidateFunction=function(e,t){if("string"===e.type)return function(e,t,r,a){return function(e){var u=[];return(null==r?void 0:r.maxLength)&&e.length>r.maxLength&&u.push({type:"STRING_IS_TOO_LONG",label:t,maxLength:r.maxLength,currentLength:e.length,value:e}),(null==r?void 0:r.minLength)&&e.length<r.minLength&&u.push({type:"STRING_IS_TOO_SHORT",label:t,minLength:r.minLength,currentLength:e.length,value:e}),(null==r?void 0:r.pattern)&&(new RegExp(r.pattern).test(e)||u.push({type:"STRING_PATTERN_NOT_MATCH",label:t,pattern:r.pattern,value:e})),!(u.length>0&&(a?a(u):n(u),1))}}(e.key,e.label,e.constraints,t);if("number"===e.type)return function(e,t,r,a){return function(e){var u=[];return"string"!=typeof e||/^-?[0-9]+(\.[0-9]+)?$/.test(e)?(e=Number(e),"number"==typeof(null==r?void 0:r.max)&&e>r.max&&u.push({type:"NUMBER_IS_TOO_LARGE",label:t,max:r.max,value:e}),"number"==typeof(null==r?void 0:r.min)&&e<r.min&&u.push({type:"NUMBER_IS_TOO_SMALL",label:t,min:r.min,value:e}),!(u.length>0&&(a?a(u):n(u),1))):(u.push({type:"NOT_NUMBER",label:t,value:e}),a?a(u):n(u),!1)}}(e.key,e.label,e.constraints,t);if("select"===e.type)return function(e,t,r,a,u){var l=new Set(r.map((function(n){return n.label})));return function(e){if(a&&""===e)return!0;var r=[];return l.has(e)||r.push({type:"NOT_IN_OPTIONS",label:t,value:e,options:Array.from(l)}),!(r.length>0&&(u?u(r):n(r),1))}}(e.key,e.label,e.options,e.allowEmpty,t);throw new Error("Invalid type")};
2
2
  //# sourceMappingURL=generate-validate-function.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate-validate-function.js","sources":["../../../../../src/table/libs/generate-validate-function.ts"],"sourcesContent":["export type TStringValidateOption = {\n maxLength?: number;\n minLength?: number;\n pattern?: string;\n};\n\nexport type TNumberValidateOption = {\n max?: number;\n min?: number;\n};\n\ntype TPropsGenerateValidateFunction =\n | {\n type: \"string\";\n constraints?: TStringValidateOption;\n }\n | {\n type: \"number\";\n constraints?: TNumberValidateOption;\n }\n | {\n type: \"select\";\n options: { value: string; label: string }[];\n allowEmpty?: boolean;\n };\n\ntype TStringValidateFunction = (value: string) => boolean;\n\nfunction generateStringValidateFunction(\n constraints?: TStringValidateOption\n): TStringValidateFunction {\n return (value: string) => {\n if (constraints?.maxLength) {\n if (value.length > constraints.maxLength) {\n alert(\n `最大文字数(${constraints.maxLength})を超過しています。(現在${value.length}文字)`\n );\n return false;\n }\n }\n if (constraints?.minLength) {\n if (value.length < constraints.minLength) {\n alert(\n `最小文字数(${constraints.minLength})を下回っています。(現在${value.length}文字)`\n );\n return false;\n }\n }\n if (constraints?.pattern) {\n if (!new RegExp(constraints.pattern).test(value)) {\n alert(`パターンに一致しません。(パターン${constraints.pattern})`);\n return false;\n }\n }\n return true;\n };\n}\n\ntype TNumberValidateFunction = (value: number) => boolean;\n\nfunction generateNumberValidateFunction(\n constraints?: TNumberValidateOption\n): TNumberValidateFunction {\n return (value: number | string) => {\n if (typeof value === \"string\") {\n // 小数も含めて数値に変換可能な値かを検査\n if (!/^-?[0-9]+(\\.[0-9]+)?$/.test(value)) {\n alert(\"数値ではない値が入力されています。\");\n return false;\n }\n value = Number(value);\n }\n\n if (typeof constraints?.max === \"number\") {\n if (value > constraints.max) {\n alert(`最大値(${constraints.max})を超過しています。(入力値:${value})`);\n return false;\n }\n }\n\n if (typeof constraints?.min === \"number\") {\n if (value < constraints.min) {\n alert(`最小値(${constraints.min})を下回っています。(入力値:${value})`);\n return false;\n }\n }\n\n return true;\n };\n}\n\ntype TSelectValidateFunction = (label: string) => boolean;\n\nfunction generatSelectValidateFunction(\n options: { value: string; label: string }[],\n allowEmpty?: boolean\n): TSelectValidateFunction {\n const labelSets = new Set(options.map((option) => option.label));\n return (label: string) => {\n if (allowEmpty && label === \"\") {\n return true;\n }\n\n if (!labelSets.has(label)) {\n alert(`選択肢に含まれていない値です。(選択肢:${label})`);\n return false;\n }\n\n return true;\n };\n}\n\nexport function generateValidateFunction(\n props: TPropsGenerateValidateFunction\n) {\n if (props.type === \"string\") {\n return generateStringValidateFunction(props.constraints);\n } else if (props.type === \"number\") {\n return generateNumberValidateFunction(props.constraints);\n } else if (props.type === \"select\") {\n return generatSelectValidateFunction(props.options, props.allowEmpty);\n } else {\n throw new Error(\"Invalid type\");\n }\n}\n"],"names":["props","type","constraints","value","maxLength","length","alert","concat","minLength","pattern","RegExp","test","Number","max","min","generateNumberValidateFunction","options","allowEmpty","labelSets","Set","map","option","label","has","Error"],"mappings":"8CAgHM,SACJA,GAEA,GAAmB,WAAfA,EAAMC,KACR,OAvFFC,EAuFwCF,EAAME,YArFvC,SAACC,GACN,OAAID,aAAW,EAAXA,EAAaE,YACXD,EAAME,OAASH,EAAYE,WAC7BE,MACE,SAASC,OAAAL,EAAYE,UAAyB,iBAAAG,OAAAJ,EAAME,OAAW,SAE1D,IAGPH,aAAW,EAAXA,EAAaM,YACXL,EAAME,OAASH,EAAYM,WAC7BF,MACE,SAASC,OAAAL,EAAYM,UAAyB,iBAAAD,OAAAJ,EAAME,OAAW,SAE1D,MAGPH,aAAW,EAAXA,EAAaO,WACV,IAAIC,OAAOR,EAAYO,SAASE,KAAKR,KACxCG,MAAM,oBAAoBC,OAAAL,EAAYO,QAAO,MACtC,GAIb,EA8DO,GAAmB,WAAfT,EAAMC,KACf,OA1DJ,SACEC,GAEA,OAAO,SAACC,GACN,GAAqB,iBAAVA,EAAoB,CAE7B,IAAK,wBAAwBQ,KAAKR,GAEhC,OADAG,MAAM,sBACC,EAETH,EAAQS,OAAOT,EAChB,CAED,MAAgC,iBAArBD,aAAW,EAAXA,EAAaW,MAClBV,EAAQD,EAAYW,KACtBP,MAAM,cAAOJ,EAAYW,IAAqB,mBAAAN,OAAAJ,EAAQ,OAC/C,KAIqB,iBAArBD,aAAW,EAAXA,EAAaY,MAClBX,EAAQD,EAAYY,MACtBR,MAAM,cAAOJ,EAAYY,IAAqB,mBAAAP,OAAAJ,EAAQ,MAC/C,GAKb,CACF,CA6BWY,CAA+Bf,EAAME,aACvC,GAAmB,WAAfF,EAAMC,KACf,OA1BFe,EA0BuChB,EAAMgB,QAzB7CC,EAyBsDjB,EAAMiB,WAvBtDC,EAAY,IAAIC,IAAIH,EAAQI,KAAI,SAACC,GAAW,OAAAA,EAAOC,UAClD,SAACA,GACN,SAAIL,GAAwB,KAAVK,MAIbJ,EAAUK,IAAID,KACjBhB,MAAM,uBAAAC,OAAuBe,EAAK,OAC3B,EAIX,EAaE,MAAM,IAAIE,MAAM,gBA7BpB,IACER,EACAC,EAEMC,EApENhB,CA+FF"}
1
+ {"version":3,"file":"generate-validate-function.js","sources":["../../../../../src/table/libs/generate-validate-function.ts"],"sourcesContent":["export type TStringValidateOption = {\n maxLength?: number;\n minLength?: number;\n pattern?: string;\n};\n\nexport type TNumberValidateOption = {\n max?: number;\n min?: number;\n};\n\ntype TPropsGenerateValidateFunction = {\n key: string;\n label: string;\n} & (\n | {\n type: \"string\";\n constraints?: TStringValidateOption;\n }\n | {\n type: \"number\";\n constraints?: TNumberValidateOption;\n }\n | {\n type: \"select\";\n options: { value: string; label: string }[];\n allowEmpty?: boolean;\n }\n);\n\ntype TStringValidateFunction = (value: string) => boolean;\n\nexport type TErrorValidation = {\n label: string;\n value: string | number;\n} & (\n | {\n type: \"STRING_IS_TOO_LONG\";\n maxLength: number;\n currentLength: number;\n }\n | {\n type: \"STRING_IS_TOO_SHORT\";\n minLength: number;\n currentLength: number;\n }\n | {\n type: \"STRING_PATTERN_NOT_MATCH\";\n pattern: string;\n }\n | {\n type: \"NUMBER_IS_TOO_LARGE\";\n max: number;\n }\n | {\n type: \"NUMBER_IS_TOO_SMALL\";\n min: number;\n }\n | {\n type: \"NOT_NUMBER\";\n }\n | {\n type: \"NOT_IN_OPTIONS\";\n options: string[];\n }\n);\n\nfunction defaultErrorHandler(errors: TErrorValidation[]) {\n let message = `入力値が不正のため、エラーを確認し修正してください。\\n\\n`;\n message += `[対象の列名]: ${errors[0].label}\\n`;\n message += `[入力値]  : ${errors[0].value}\\n\\n`;\n message += `[エラー内容]:`;\n\n message += errors.reduce((acc, error) => {\n switch (error.type) {\n case \"STRING_IS_TOO_LONG\":\n return (\n acc +\n `\\n・文字数が最大の長さ${error.maxLength}文字を超えています。(現在${error.currentLength}文字)`\n );\n case \"STRING_IS_TOO_SHORT\":\n return (\n acc +\n `\\n・文字数が最小の長さ${error.minLength}文字に満たないです。(現在${error.currentLength}文字)`\n );\n case \"STRING_PATTERN_NOT_MATCH\":\n return acc + `\\n・パターンに一致しません。(パターン${error.pattern})`;\n case \"NUMBER_IS_TOO_LARGE\":\n return (\n acc + `\\n・最大値${error.max}を超えています。(入力値${error.value})`\n );\n case \"NUMBER_IS_TOO_SMALL\":\n return (\n acc + `\\n・最小値${error.min}を下回っています。(入力値${error.value})`\n );\n case \"NOT_NUMBER\":\n return acc + `\\n・数値ではない値が入力されています。`;\n case \"NOT_IN_OPTIONS\":\n return acc + `\\n・選択肢に含まれていない値です。`;\n }\n }, \"\");\n\n alert(message);\n}\n\nfunction generateStringValidateFunction(\n key: string,\n label: string,\n constraints?: TStringValidateOption,\n errorHandler?: (errors: TErrorValidation[]) => void\n): TStringValidateFunction {\n return (value: string) => {\n const errors: TErrorValidation[] = [];\n\n if (constraints?.maxLength) {\n if (value.length > constraints.maxLength) {\n errors.push({\n type: \"STRING_IS_TOO_LONG\",\n label,\n maxLength: constraints.maxLength,\n currentLength: value.length,\n value,\n });\n }\n }\n\n if (constraints?.minLength) {\n if (value.length < constraints.minLength) {\n errors.push({\n type: \"STRING_IS_TOO_SHORT\",\n label,\n minLength: constraints.minLength,\n currentLength: value.length,\n value,\n });\n }\n }\n\n if (constraints?.pattern) {\n if (!new RegExp(constraints.pattern).test(value)) {\n errors.push({\n type: \"STRING_PATTERN_NOT_MATCH\",\n label,\n pattern: constraints.pattern,\n value,\n });\n }\n }\n\n if (errors.length > 0) {\n if (errorHandler) {\n errorHandler(errors);\n } else {\n defaultErrorHandler(errors);\n }\n return false;\n }\n\n return true;\n };\n}\n\ntype TNumberValidateFunction = (value: number) => boolean;\n\nfunction generateNumberValidateFunction(\n key: string,\n label: string,\n constraints?: TNumberValidateOption,\n errorHandler?: (errors: TErrorValidation[]) => void\n): TNumberValidateFunction {\n return (value: number | string) => {\n const errors: TErrorValidation[] = [];\n\n if (typeof value === \"string\") {\n // 小数も含めて数値に変換可能な値かを検査\n if (!/^-?[0-9]+(\\.[0-9]+)?$/.test(value)) {\n errors.push({\n type: \"NOT_NUMBER\",\n label,\n value,\n });\n\n if (errorHandler) {\n errorHandler(errors);\n } else {\n defaultErrorHandler(errors);\n }\n return false;\n }\n }\n\n value = Number(value);\n\n if (typeof constraints?.max === \"number\") {\n if (value > constraints.max) {\n errors.push({\n type: \"NUMBER_IS_TOO_LARGE\",\n label,\n max: constraints.max,\n value,\n });\n }\n }\n\n if (typeof constraints?.min === \"number\") {\n if (value < constraints.min) {\n errors.push({\n type: \"NUMBER_IS_TOO_SMALL\",\n label,\n min: constraints.min,\n value,\n });\n }\n }\n\n if (errors.length > 0) {\n if (errorHandler) {\n errorHandler(errors);\n } else {\n defaultErrorHandler(errors);\n }\n return false;\n }\n\n return true;\n };\n}\n\ntype TSelectValidateFunction = (label: string) => boolean;\n\nfunction generatSelectValidateFunction(\n key: string,\n columnLabel: string,\n options: { value: string; label: string }[],\n allowEmpty?: boolean,\n errorHandler?: (errors: TErrorValidation[]) => void\n): TSelectValidateFunction {\n const labelSets = new Set(options.map((option) => option.label));\n return (label: string) => {\n if (allowEmpty && label === \"\") {\n return true;\n }\n\n const errors: TErrorValidation[] = [];\n\n if (!labelSets.has(label)) {\n errors.push({\n type: \"NOT_IN_OPTIONS\",\n label: columnLabel,\n value: label,\n options: Array.from(labelSets),\n });\n }\n\n if (errors.length > 0) {\n if (errorHandler) {\n errorHandler(errors);\n } else {\n defaultErrorHandler(errors);\n }\n return false;\n }\n\n return true;\n };\n}\n\nexport function generateValidateFunction(\n props: TPropsGenerateValidateFunction,\n errorHandler?: (errors: TErrorValidation[]) => void\n) {\n if (props.type === \"string\") {\n return generateStringValidateFunction(\n props.key,\n props.label,\n props.constraints,\n errorHandler\n );\n } else if (props.type === \"number\") {\n return generateNumberValidateFunction(\n props.key,\n props.label,\n props.constraints,\n errorHandler\n );\n } else if (props.type === \"select\") {\n return generatSelectValidateFunction(\n props.key,\n props.label,\n props.options,\n props.allowEmpty,\n errorHandler\n );\n } else {\n throw new Error(\"Invalid type\");\n }\n}\n"],"names":["defaultErrorHandler","errors","message","label","value","reduce","acc","error","type","concat","maxLength","currentLength","minLength","pattern","max","min","alert","props","errorHandler","key","constraints","length","push","RegExp","test","generateStringValidateFunction","Number","generateNumberValidateFunction","columnLabel","options","allowEmpty","labelSets","Set","map","option","has","Array","from","generatSelectValidateFunction","Error"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("../../../node_modules/tslib/tslib.es6.js"),a=require("react"),t=require("../sheet/providers.js"),n=function(a,t){var n,o;switch(t.type){case"setRows":return e.__assign(e.__assign({},a),{rows:t.payload.rows});case"setCols":return e.__assign(e.__assign({},a),{cols:t.payload.cols});case"setColValidators":return e.__assign(e.__assign({},a),{colValidators:t.payload.colValidators});case"setOnUpdateRowFunction":return e.__assign(e.__assign({},a),{onUpdateRowFunction:t.payload.onUpdateRowFunction});case"onPaste":var s=t.payload,r=s.rowIndex,l=s.colIndex,u=s.pasteData,i=a.rows,c=a.cols,d=a.colValidators;if(!a.onUpdateRowFunction)return a;var p={arguments:[],timing:a.updateParameters.timing+1},f=u.length,g=Math.max.apply(Math,u.map((function(e){return e.length})));if(0===f||0===g)return a;if(u.length+r>i.length)return alert("貼り付け先の行数が足りません。"),a;for(var _=0;_<g;_++){if(!(m=c[l+_]).editable)return alert("編集できない列にデータを貼り付けることはできません。\n\n編集不可列: ".concat(null!==(n=m.label)&&void 0!==n?n:m.key)),a}if(g+l>c.length)return alert("貼り付け先の列数が足りません。"),a;for(_=0;_<f;_++)for(var w=u[_],y=0;y<w.length;y++){var m,R=w[y];if(!(0,d[(m=c[l+y]).key])(R))return alert("[".concat(null!==(o=m.label)&&void 0!==o?o:m.key,"]列に次の不正なデータが含まれています。\n").concat(R)),a}return u.forEach((function(a,t){var n=e.__assign({},i[r+t]),o=!1;a.forEach((function(e,a){var t=c[l+a],s="number"===t.type?Number(e):"select"===t.type?""===e?"":t.options.find((function(a){return a.label===e})).value:e;n[t.key]!==s&&(o=!0,n[t.key]=s)})),o&&p.arguments.push({newRow:n,oldRow:i[r+t]})})),p.arguments.length>0?e.__assign(e.__assign({},a),{updateParameters:p}):a}};exports.usePasteReducer=function(o){var s=a.useReducer(n,e.__assign(e.__assign({},o),{updateParameters:{arguments:[],timing:0}})),r=s[0],l=s[1],u=t.useColumnValidatesContext(),i=a.useCallback((function(e){l({type:"setRows",payload:{rows:e}})}),[]),c=a.useCallback((function(e){l({type:"setCols",payload:{cols:e}})}),[]),d=a.useCallback((function(e){l({type:"setColValidators",payload:{colValidators:e}})}),[]);a.useEffect((function(){d(u)}),[u]);var p=a.useCallback((function(e){l({type:"setOnUpdateRowFunction",payload:{onUpdateRowFunction:e}})}),[]),f=a.useCallback((function(e,a,t){l({type:"onPaste",payload:{rowIndex:e,colIndex:a,pasteData:t}})}),[]);return a.useEffect((function(){r.updateParameters.arguments.length>0&&r.updateParameters.arguments.forEach((function(e){var a,t=e.newRow,n=e.oldRow;null===(a=r.onUpdateRowFunction)||void 0===a||a.call(r,t,n)}))}),[r.updateParameters.timing,r.onUpdateRowFunction]),{setRows:i,setCols:c,setColValidators:d,setOnUpdateRowFunction:p,onPaste:f}};
1
+ "use strict";var e=require("../../../node_modules/tslib/tslib.es6.js"),a=require("react"),t=require("../sheet/providers.js"),n=function(a,t){var n;switch(t.type){case"setRows":return e.__assign(e.__assign({},a),{rows:t.payload.rows});case"setCols":return e.__assign(e.__assign({},a),{cols:t.payload.cols});case"setColValidators":return e.__assign(e.__assign({},a),{colValidators:t.payload.colValidators});case"setOnUpdateRowFunction":return e.__assign(e.__assign({},a),{onUpdateRowFunction:t.payload.onUpdateRowFunction});case"onPaste":var s=t.payload,o=s.rowIndex,r=s.colIndex,l=s.pasteData,u=a.rows,i=a.cols,c=a.colValidators;if(!a.onUpdateRowFunction)return a;var d={arguments:[],timing:a.updateParameters.timing+1},p=l.length,f=Math.max.apply(Math,l.map((function(e){return e.length})));if(0===p||0===f)return a;if(l.length+o>u.length)return alert("貼り付け先の行数が足りません。"),a;for(var g=0;g<f;g++){if(!(y=i[r+g]).editable)return alert("編集できない列にデータを貼り付けることはできません。\n\n編集不可列: ".concat(null!==(n=y.label)&&void 0!==n?n:y.key)),a}if(f+r>i.length)return alert("貼り付け先の列数が足りません。"),a;for(g=0;g<p;g++)for(var _=l[g],w=0;w<_.length;w++){var y,m=_[w];if(!(0,c[(y=i[r+w]).key])(m))return a}return l.forEach((function(a,t){var n=e.__assign({},u[o+t]),s=!1;a.forEach((function(e,a){var t=i[r+a],o="number"===t.type?Number(e):"select"===t.type?""===e?"":t.options.find((function(a){return a.label===e})).value:e;n[t.key]!==o&&(s=!0,n[t.key]=o)})),s&&d.arguments.push({newRow:n,oldRow:u[o+t]})})),d.arguments.length>0?e.__assign(e.__assign({},a),{updateParameters:d}):a}};exports.usePasteReducer=function(s){var o=a.useReducer(n,e.__assign(e.__assign({},s),{updateParameters:{arguments:[],timing:0}})),r=o[0],l=o[1],u=t.useColumnValidatesContext(),i=a.useCallback((function(e){l({type:"setRows",payload:{rows:e}})}),[]),c=a.useCallback((function(e){l({type:"setCols",payload:{cols:e}})}),[]),d=a.useCallback((function(e){l({type:"setColValidators",payload:{colValidators:e}})}),[]);a.useEffect((function(){d(u)}),[u]);var p=a.useCallback((function(e){l({type:"setOnUpdateRowFunction",payload:{onUpdateRowFunction:e}})}),[]),f=a.useCallback((function(e,a,t){l({type:"onPaste",payload:{rowIndex:e,colIndex:a,pasteData:t}})}),[]);return a.useEffect((function(){r.updateParameters.arguments.length>0&&r.updateParameters.arguments.forEach((function(e){var a,t=e.newRow,n=e.oldRow;null===(a=r.onUpdateRowFunction)||void 0===a||a.call(r,t,n)}))}),[r.updateParameters.timing,r.onUpdateRowFunction]),{setRows:i,setCols:c,setColValidators:d,setOnUpdateRowFunction:p,onPaste:f}};
2
2
  //# sourceMappingURL=hooks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sources":["../../../../../src/table/paste/hooks.ts"],"sourcesContent":["import { useCallback, useEffect, useReducer } from \"react\";\nimport { TPasteReducer, TPasteReducerReturn } from \"./types\";\nimport { useColumnValidatesContext } from \"../sheet/providers\";\n\nconst reducer: TPasteReducer = (state, action) => {\n switch (action.type) {\n case \"setRows\":\n return { ...state, rows: action.payload.rows };\n case \"setCols\":\n return { ...state, cols: action.payload.cols };\n case \"setColValidators\":\n return { ...state, colValidators: action.payload.colValidators };\n case \"setOnUpdateRowFunction\":\n return {\n ...state,\n onUpdateRowFunction: action.payload.onUpdateRowFunction,\n };\n case \"onPaste\":\n const { rowIndex, colIndex, pasteData } = action.payload;\n const { rows, cols, colValidators, onUpdateRowFunction } = state;\n\n if (!onUpdateRowFunction) {\n return state;\n }\n\n const updateParameters = {\n arguments: [] as { newRow: any; oldRow: any }[],\n timing: state.updateParameters.timing + 1,\n };\n\n const rowLength = pasteData.length;\n const colLength = Math.max(...pasteData.map((row) => row.length));\n\n if (rowLength === 0 || colLength === 0) return state;\n\n if (pasteData.length + rowIndex > rows.length) {\n alert(\"貼り付け先の行数が足りません。\");\n return state;\n }\n\n for (let i = 0; i < colLength; i++) {\n const col = cols[colIndex + i];\n\n if (!col.editable) {\n alert(\n `編集できない列にデータを貼り付けることはできません。\\n\\n編集不可列: ${\n col.label ?? (col.key as string)\n }`\n );\n return state;\n }\n }\n\n if (colLength + colIndex > cols.length) {\n alert(\"貼り付け先の列数が足りません。\");\n return state;\n }\n\n for (let i = 0; i < rowLength; i++) {\n const pasteRow = pasteData[i];\n\n for (let j = 0; j < pasteRow.length; j++) {\n const pasteValue = pasteRow[j];\n const col = cols[colIndex + j];\n const validate = colValidators[col.key as string];\n\n if (!validate(pasteValue)) {\n alert(\n `[${\n col.label ?? (col.key as string)\n }]列に次の不正なデータが含まれています。\\n${pasteValue}`\n );\n return state;\n }\n }\n }\n\n pasteData.forEach((pasteRow, i) => {\n const row = { ...rows[rowIndex + i] };\n let checkUpdatedRow = false;\n\n pasteRow.forEach((pasteValue, j) => {\n const col = cols[colIndex + j];\n const value =\n col.type === \"number\"\n ? Number(pasteValue)\n : col.type === \"select\"\n ? pasteValue === \"\"\n ? \"\"\n : col.options.find((option) => option.label === pasteValue)!\n .value\n : pasteValue;\n if (row[col.key] !== value) {\n checkUpdatedRow = true;\n row[col.key] = value;\n }\n });\n\n if (checkUpdatedRow) {\n updateParameters.arguments.push({\n newRow: row,\n oldRow: rows[rowIndex + i],\n });\n }\n });\n\n if (updateParameters.arguments.length > 0) {\n return { ...state, updateParameters };\n } else {\n return state;\n }\n }\n};\n\nexport function usePasteReducer(initial: {\n rows: any[];\n cols: any[];\n colValidators: { [key: string]: (value: any) => boolean };\n onUpdateRowFunction?: (newRow: any, oldRow: any) => void;\n}): TPasteReducerReturn {\n const [state, dispatch] = useReducer(reducer, {\n ...initial,\n updateParameters: { arguments: [], timing: 0 },\n });\n const validators = useColumnValidatesContext();\n\n const setRows = useCallback((rows: any[]) => {\n dispatch({ type: \"setRows\", payload: { rows } });\n }, []);\n\n const setCols = useCallback((cols: any[]) => {\n dispatch({ type: \"setCols\", payload: { cols } });\n }, []);\n\n const setColValidators = useCallback(\n (colValidators: { [key: string]: (value: any) => boolean }) => {\n dispatch({ type: \"setColValidators\", payload: { colValidators } });\n },\n []\n );\n\n useEffect(() => {\n setColValidators(validators);\n }, [validators]);\n\n const setOnUpdateRowFunction = useCallback(\n (onUpdateRowFunction?: (newRow: any, oldRow: any) => void) => {\n dispatch({\n type: \"setOnUpdateRowFunction\",\n payload: { onUpdateRowFunction },\n });\n },\n []\n );\n\n const onPaste = useCallback(\n (rowIndex: number, colIndex: number, pasteData: string[][]) => {\n dispatch({ type: \"onPaste\", payload: { rowIndex, colIndex, pasteData } });\n },\n []\n );\n\n useEffect(() => {\n if (state.updateParameters.arguments.length > 0) {\n state.updateParameters.arguments.forEach(({ newRow, oldRow }) => {\n state.onUpdateRowFunction?.(newRow, oldRow);\n });\n }\n }, [state.updateParameters.timing, state.onUpdateRowFunction]);\n\n return {\n setRows,\n setCols,\n setColValidators,\n setOnUpdateRowFunction,\n onPaste,\n };\n}\n"],"names":["reducer","state","action","type","__assign","rows","payload","cols","colValidators","onUpdateRowFunction","_c","rowIndex_1","rowIndex","colIndex_1","colIndex","pasteData","rows_1","cols_1","updateParameters_1","arguments","timing","updateParameters","rowLength","length","colLength","Math","max","apply","map","row","alert","i","col","editable","concat","_a","label","key","pasteRow","j","pasteValue","validate","_b","forEach","checkUpdatedRow","value","Number","options","find","option","push","newRow","oldRow","initial","useReducer","dispatch","validators","useColumnValidatesContext","setRows","useCallback","setCols","setColValidators","useEffect","setOnUpdateRowFunction","onPaste","call"],"mappings":"6HAIMA,EAAyB,SAACC,EAAOC,WACrC,OAAQA,EAAOC,MACb,IAAK,UACH,OAAYC,WAAAA,EAAAA,SAAA,CAAA,EAAAH,IAAOI,KAAMH,EAAOI,QAAQD,OAC1C,IAAK,UACH,OAAYD,WAAAA,EAAAA,SAAA,CAAA,EAAAH,IAAOM,KAAML,EAAOI,QAAQC,OAC1C,IAAK,mBACH,OAAYH,WAAAA,EAAAA,SAAA,CAAA,EAAAH,IAAOO,cAAeN,EAAOI,QAAQE,gBACnD,IAAK,yBACH,OACKJ,WAAAA,EAAAA,SAAA,CAAA,EAAAH,IACHQ,oBAAqBP,EAAOI,QAAQG,sBAExC,IAAK,UACG,IAAAC,EAAoCR,EAAOI,QAAzCK,EAAQD,EAAAE,SAAEC,EAAQH,EAAAI,SAAEC,cACpBC,EAAmDf,OAA7CgB,EAA6ChB,EAAKM,KAA5CC,EAAuCP,EAA1BO,cAEjC,IAF2DP,sBAGzD,OAAOA,EAGT,IAAMiB,EAAmB,CACvBC,UAAW,GACXC,OAAQnB,EAAMoB,iBAAiBD,OAAS,GAGpCE,EAAYP,EAAUQ,OACtBC,EAAYC,KAAKC,IAALC,MAAAF,KAAYV,EAAUa,KAAI,SAACC,GAAQ,OAAAA,EAAIN,MAAJ,KAErD,GAAkB,IAAdD,GAAiC,IAAdE,EAAiB,OAAOvB,EAE/C,GAAIc,EAAUQ,OAASZ,EAAWK,EAAKO,OAErC,OADAO,MAAM,mBACC7B,EAGT,IAAK,IAAI8B,EAAI,EAAGA,EAAIP,EAAWO,IAAK,CAGlC,KAFMC,EAAMf,EAAKJ,EAAWkB,IAEnBE,SAMP,OALAH,MACE,wCAAAI,OACgB,QAAdC,EAAAH,EAAII,aAAU,IAAAD,EAAAA,EAAAH,EAAIK,MAGfpC,CAEV,CAED,GAAIuB,EAAYX,EAAWI,EAAKM,OAE9B,OADAO,MAAM,mBACC7B,EAGT,IAAS8B,EAAI,EAAGA,EAAIT,EAAWS,IAG7B,IAFA,IAAMO,EAAWvB,EAAUgB,GAElBQ,EAAI,EAAGA,EAAID,EAASf,OAAQgB,IAAK,CACxC,IACMP,EADAQ,EAAaF,EAASC,GAI5B,KAAKE,EAFYjC,GADXwB,EAAMf,EAAKJ,EAAW0B,IACOF,MAErBG,GAMZ,OALAV,MACE,IAAAI,OACW,QAATQ,EAAAV,EAAII,aAAK,IAAAM,EAAAA,EAAKV,EAAIK,IAAc,0BAAAH,OACTM,IAEpBvC,CAEV,CAgCH,OA7BAc,EAAU4B,SAAQ,SAACL,EAAUP,GAC3B,IAAMF,gBAAWb,EAAKL,EAAWoB,IAC7Ba,GAAkB,EAEtBN,EAASK,SAAQ,SAACH,EAAYD,GAC5B,IAAMP,EAAMf,EAAKJ,EAAW0B,GACtBM,EACS,WAAbb,EAAI7B,KACA2C,OAAON,GACM,WAAbR,EAAI7B,KACW,KAAfqC,EACE,GACAR,EAAIe,QAAQC,MAAK,SAACC,GAAW,OAAAA,EAAOb,QAAUI,KAC3CK,MACLL,EACFX,EAAIG,EAAIK,OAASQ,IACnBD,GAAkB,EAClBf,EAAIG,EAAIK,KAAOQ,EAEnB,IAEID,GACF1B,EAAiBC,UAAU+B,KAAK,CAC9BC,OAAQtB,EACRuB,OAAQpC,EAAKL,EAAWoB,IAG9B,IAEIb,EAAiBC,UAAUI,OAAS,EACtCnB,EAAAA,SAAAA,EAAAA,SAAA,GAAYH,GAAK,CAAEoB,iBAAgBH,IAE5BjB,EAGf,0BAEM,SAA0BoD,GAMxB,IAAAlB,EAAoBmB,EAAAA,WAAWtD,EAAOI,WAAAA,EAAAA,SAAA,CAAA,EACvCiD,GACH,CAAAhC,iBAAkB,CAAEF,UAAW,GAAIC,OAAQ,MAFtCnB,EAAKkC,EAAA,GAAEoB,EAAQpB,EAAA,GAIhBqB,EAAaC,EAAAA,4BAEbC,EAAUC,eAAY,SAACtD,GAC3BkD,EAAS,CAAEpD,KAAM,UAAWG,QAAS,CAAED,KAAIA,IAC5C,GAAE,IAEGuD,EAAUD,eAAY,SAACpD,GAC3BgD,EAAS,CAAEpD,KAAM,UAAWG,QAAS,CAAEC,KAAIA,IAC5C,GAAE,IAEGsD,EAAmBF,eACvB,SAACnD,GACC+C,EAAS,CAAEpD,KAAM,mBAAoBG,QAAS,CAAEE,cAAaA,IAC9D,GACD,IAGFsD,EAAAA,WAAU,WACRD,EAAiBL,EACnB,GAAG,CAACA,IAEJ,IAAMO,EAAyBJ,eAC7B,SAAClD,GACC8C,EAAS,CACPpD,KAAM,yBACNG,QAAS,CAAEG,oBAAmBA,IAEjC,GACD,IAGIuD,EAAUL,EAAWA,aACzB,SAAC/C,EAAkBE,EAAkBC,GACnCwC,EAAS,CAAEpD,KAAM,UAAWG,QAAS,CAAEM,WAAUE,WAAUC,cAC5D,GACD,IAWF,OARA+C,EAAAA,WAAU,WACJ7D,EAAMoB,iBAAiBF,UAAUI,OAAS,GAC5CtB,EAAMoB,iBAAiBF,UAAUwB,SAAQ,SAACR,SAAEgB,EAAMhB,EAAAgB,OAAEC,EAAMjB,EAAAiB,OAC/B,QAAzBV,EAAAzC,EAAMQ,2BAAmB,IAAAiC,GAAAA,EAAAuB,KAAAhE,EAAGkD,EAAQC,EACtC,GAEJ,GAAG,CAACnD,EAAMoB,iBAAiBD,OAAQnB,EAAMQ,sBAElC,CACLiD,QAAOA,EACPE,QAAOA,EACPC,iBAAgBA,EAChBE,uBAAsBA,EACtBC,QAAOA,EAEX"}
1
+ {"version":3,"file":"hooks.js","sources":["../../../../../src/table/paste/hooks.ts"],"sourcesContent":["import { useCallback, useEffect, useReducer } from \"react\";\nimport { TPasteReducer, TPasteReducerReturn } from \"./types\";\nimport { useColumnValidatesContext } from \"../sheet/providers\";\n\nconst reducer: TPasteReducer = (state, action) => {\n switch (action.type) {\n case \"setRows\":\n return { ...state, rows: action.payload.rows };\n case \"setCols\":\n return { ...state, cols: action.payload.cols };\n case \"setColValidators\":\n return { ...state, colValidators: action.payload.colValidators };\n case \"setOnUpdateRowFunction\":\n return {\n ...state,\n onUpdateRowFunction: action.payload.onUpdateRowFunction,\n };\n case \"onPaste\":\n const { rowIndex, colIndex, pasteData } = action.payload;\n const { rows, cols, colValidators, onUpdateRowFunction } = state;\n\n if (!onUpdateRowFunction) {\n return state;\n }\n\n const updateParameters = {\n arguments: [] as { newRow: any; oldRow: any }[],\n timing: state.updateParameters.timing + 1,\n };\n\n const rowLength = pasteData.length;\n const colLength = Math.max(...pasteData.map((row) => row.length));\n\n if (rowLength === 0 || colLength === 0) return state;\n\n if (pasteData.length + rowIndex > rows.length) {\n alert(\"貼り付け先の行数が足りません。\");\n return state;\n }\n\n for (let i = 0; i < colLength; i++) {\n const col = cols[colIndex + i];\n\n if (!col.editable) {\n alert(\n `編集できない列にデータを貼り付けることはできません。\\n\\n編集不可列: ${\n col.label ?? (col.key as string)\n }`\n );\n return state;\n }\n }\n\n if (colLength + colIndex > cols.length) {\n alert(\"貼り付け先の列数が足りません。\");\n return state;\n }\n\n for (let i = 0; i < rowLength; i++) {\n const pasteRow = pasteData[i];\n\n for (let j = 0; j < pasteRow.length; j++) {\n const pasteValue = pasteRow[j];\n const col = cols[colIndex + j];\n const validate = colValidators[col.key as string];\n\n if (!validate(pasteValue)) {\n return state;\n }\n }\n }\n\n pasteData.forEach((pasteRow, i) => {\n const row = { ...rows[rowIndex + i] };\n let checkUpdatedRow = false;\n\n pasteRow.forEach((pasteValue, j) => {\n const col = cols[colIndex + j];\n const value =\n col.type === \"number\"\n ? Number(pasteValue)\n : col.type === \"select\"\n ? pasteValue === \"\"\n ? \"\"\n : col.options.find((option) => option.label === pasteValue)!\n .value\n : pasteValue;\n if (row[col.key] !== value) {\n checkUpdatedRow = true;\n row[col.key] = value;\n }\n });\n\n if (checkUpdatedRow) {\n updateParameters.arguments.push({\n newRow: row,\n oldRow: rows[rowIndex + i],\n });\n }\n });\n\n if (updateParameters.arguments.length > 0) {\n return { ...state, updateParameters };\n } else {\n return state;\n }\n }\n};\n\nexport function usePasteReducer(initial: {\n rows: any[];\n cols: any[];\n colValidators: { [key: string]: (value: any) => boolean };\n onUpdateRowFunction?: (newRow: any, oldRow: any) => void;\n}): TPasteReducerReturn {\n const [state, dispatch] = useReducer(reducer, {\n ...initial,\n updateParameters: { arguments: [], timing: 0 },\n });\n const validators = useColumnValidatesContext();\n\n const setRows = useCallback((rows: any[]) => {\n dispatch({ type: \"setRows\", payload: { rows } });\n }, []);\n\n const setCols = useCallback((cols: any[]) => {\n dispatch({ type: \"setCols\", payload: { cols } });\n }, []);\n\n const setColValidators = useCallback(\n (colValidators: { [key: string]: (value: any) => boolean }) => {\n dispatch({ type: \"setColValidators\", payload: { colValidators } });\n },\n []\n );\n\n useEffect(() => {\n setColValidators(validators);\n }, [validators]);\n\n const setOnUpdateRowFunction = useCallback(\n (onUpdateRowFunction?: (newRow: any, oldRow: any) => void) => {\n dispatch({\n type: \"setOnUpdateRowFunction\",\n payload: { onUpdateRowFunction },\n });\n },\n []\n );\n\n const onPaste = useCallback(\n (rowIndex: number, colIndex: number, pasteData: string[][]) => {\n dispatch({ type: \"onPaste\", payload: { rowIndex, colIndex, pasteData } });\n },\n []\n );\n\n useEffect(() => {\n if (state.updateParameters.arguments.length > 0) {\n state.updateParameters.arguments.forEach(({ newRow, oldRow }) => {\n state.onUpdateRowFunction?.(newRow, oldRow);\n });\n }\n }, [state.updateParameters.timing, state.onUpdateRowFunction]);\n\n return {\n setRows,\n setCols,\n setColValidators,\n setOnUpdateRowFunction,\n onPaste,\n };\n}\n"],"names":["reducer","state","action","type","__assign","rows","payload","cols","colValidators","onUpdateRowFunction","_b","rowIndex_1","rowIndex","colIndex_1","colIndex","pasteData","rows_1","cols_1","updateParameters_1","arguments","timing","updateParameters","rowLength","length","colLength","Math","max","apply","map","row","alert","i","col","editable","concat","_a","label","key","pasteRow","j","pasteValue","validate","forEach","checkUpdatedRow","value","Number","options","find","option","push","newRow","oldRow","initial","useReducer","dispatch","validators","useColumnValidatesContext","setRows","useCallback","setCols","setColValidators","useEffect","setOnUpdateRowFunction","onPaste","call"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- "use strict";var e=require("react/jsx-runtime"),t=require("react"),n=require("../libs/generate-validate-function.js"),r=t.createContext({id:""});var o=t.createContext({cols:[],colMaps:{},validates:{}});exports.ColumnsProvider=function(r){var u=r.children,s=r.cols,i=t.useMemo((function(){return s.reduce((function(e,t){return e[t.key]=t,e}),{})}),[s]),c=t.useMemo((function(){return s.reduce((function(e,t){return e[t.key]=n.generateValidateFunction(t),e}),{})}),[s]),a=t.useMemo((function(){return{cols:s,colMaps:i,validates:c}}),[s]);return e.jsx(o.Provider,{value:a,children:u})},exports.RowProvider=function(t){var n=t.children,o=t.row;return e.jsx(r.Provider,{value:o,children:n})},exports.useColumnContext=function(e){return t.useContext(o).colMaps[e]},exports.useColumnValidateContext=function(e){return t.useContext(o).validates[e]},exports.useColumnValidatesContext=function(){return t.useContext(o).validates},exports.useColumnsContext=function(){return t.useContext(o).cols},exports.useRowContext=function(){return t.useContext(r)};
2
+ "use strict";var e=require("react/jsx-runtime"),t=require("react"),r=require("../libs/generate-validate-function.js"),n=t.createContext({id:""});var o=t.createContext({cols:[],colMaps:{},validates:{}});exports.ColumnsProvider=function(n){var u=n.children,s=n.cols,i=n.errorHandler,a=t.useMemo((function(){return s.reduce((function(e,t){return e[t.key]=t,e}),{})}),[s]),c=t.useMemo((function(){return s.reduce((function(e,t){return e[t.key]=r.generateValidateFunction(t,i),e}),{})}),[s]),l=t.useMemo((function(){return{cols:s,colMaps:a,validates:c}}),[s]);return e.jsx(o.Provider,{value:l,children:u})},exports.RowProvider=function(t){var r=t.children,o=t.row;return e.jsx(n.Provider,{value:o,children:r})},exports.useColumnContext=function(e){return t.useContext(o).colMaps[e]},exports.useColumnValidateContext=function(e){return t.useContext(o).validates[e]},exports.useColumnValidatesContext=function(){return t.useContext(o).validates},exports.useColumnsContext=function(){return t.useContext(o).cols},exports.useRowContext=function(){return t.useContext(n)};
3
3
  //# sourceMappingURL=providers.js.map
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import{__assign as o}from"../../node_modules/tslib/tslib.es6.js";import{jsx as r,jsxs as e}from"react/jsx-runtime";import{useTable as t}from"./hook.js";import{TableHeaderElement as i}from"./header/header.js";import{PagenationProvider as n}from"./pagenation/providers.js";import{DisplayRange as l,Pagenation as d}from"./pagenation/components.js";import{FilterProvider as s,useFilterContext as a}from"./filter/provider.js";import{TableFilterRemoveButton as c,TableFilterForm as m}from"./filter/components.js";import"./sort/icon.js";import{SortProvider as p}from"./sort/provider.js";import{ColumnsProvider as h}from"./sheet/providers.js";import{FocusProvider as f}from"./focus/provider.js";import{CheckboxProvider as g,CheckboxStatusProvider as u}from"./checkbox/provider.js";import{AllCheckbox as b}from"./checkbox/components.js";import{IdGenerator as v}from"./libs/id-generator.js";import{EditProvider as w}from"./edit/provider.js";import{TablePropertyProvider as x}from"./table-property/provider.js";import{KeyboardSetting as j}from"./operation/components/keyboard-setting.js";import{AutoSwitchEditMode as y}from"./table/components/auto-switch-edit-mode.js";import{Row as k}from"./sheet/components.js";import{PasteProvider as N}from"./paste/provider.js";import{generateFormattingString as C}from"./libs/conditional-formatting.js";function R(t){var i,l,d;return r(s,{children:r(p,{initialCondition:null===(i=t.initialCondition)||void 0===i?void 0:i.sort,children:r(n,{rowCount:t.rows.length,perPage:null===(d=null===(l=t.initialCondition)||void 0===l?void 0:l.pagenation)||void 0===d?void 0:d.rowCountPerPage,children:r(g,{checkbox:t.checkbox,children:r(u,{checkboxCount:t.rows.length,children:r(h,{cols:t.cols,children:r(f,{children:r(w,{children:r(x,{children:e(N,{rows:t.rows,cols:t.cols,colValidators:{},onUpdateRowFunction:t.onUpdateRow,children:[r(y,{}),r(j,{}),r(F,o({},t))]})})})})})})})})})})}function F(o){var n=t(o),s=n.cols,p=n.rowMaps,h=n.pageRowIds,f=a().selectedFilterKey;return e("div",{className:"w-full",children:[r("div",{className:"flex justify-end mb-1 mr-3",children:r(c,{children:r("p",{className:"text-xs underline text-gray-500 hover:text-gray-700",children:"全てのフィルタリング条件を解除する"})})}),r("div",{id:"table-frame",className:"relative h-full max-w-full max-h-[80vh] border border-gray-200 rounded-md overflow-auto",children:e("table",{className:"table",children:[r("thead",{children:e("tr",{className:"sticky top-0 border-gray-200 z-20 bg-gray-200 text-gray-600 h-[32px]",children:[o.checkbox&&r("th",{children:r(b,{rows:o.rows})}),s.map((function(o,e){return r(i,{id:v.getTableColId(e),columnKey:o.key},o.key)}))]})}),e("tbody",{children:[!!f&&r("tr",{children:r("td",{colSpan:s.length,className:"sticky top-8 left-0 bg-gray-300 w-full shadow-lg rounded-b-2xl z-20 p-0 overflow-hidden",children:r(m,{})})}),0===h.length&&r("tr",{children:r("td",{colSpan:s.length,className:"py-5",children:r("p",{className:"text-center font-bold text-lg",children:"NO DATA"})})}),h.map((function(e,t){return r(k,{existCheckbox:!!o.checkbox,rowIndex:t,dataString:p[e].stringValue,cols:o.cols,onClickRow:o.onClickRow,applyRowFormatting:o.applyRowFormatting,conditionalFormattingString:C(p[e].data,s,o.conditionalFormattings),onUpdateRow:o.onUpdateRow},e)}))]})]})}),e("div",{className:"mt-1",children:[r(l,{}),r("div",{className:"mt-2",children:r(d,{})})]})]})}export{R as default};
2
+ import{__assign as o}from"../../node_modules/tslib/tslib.es6.js";import{jsx as r,jsxs as e}from"react/jsx-runtime";import{useTable as t}from"./hook.js";import{TableHeaderElement as i}from"./header/header.js";import{PagenationProvider as n}from"./pagenation/providers.js";import{DisplayRange as l,Pagenation as d}from"./pagenation/components.js";import{FilterProvider as a,useFilterContext as s}from"./filter/provider.js";import{TableFilterRemoveButton as c,TableFilterForm as m}from"./filter/components.js";import"./sort/icon.js";import{SortProvider as p}from"./sort/provider.js";import{ColumnsProvider as h}from"./sheet/providers.js";import{FocusProvider as f}from"./focus/provider.js";import{CheckboxProvider as g,CheckboxStatusProvider as u}from"./checkbox/provider.js";import{AllCheckbox as b}from"./checkbox/components.js";import{IdGenerator as v}from"./libs/id-generator.js";import{EditProvider as w}from"./edit/provider.js";import{TablePropertyProvider as x}from"./table-property/provider.js";import{KeyboardSetting as j}from"./operation/components/keyboard-setting.js";import{AutoSwitchEditMode as y}from"./table/components/auto-switch-edit-mode.js";import{Row as k}from"./sheet/components.js";import{PasteProvider as N}from"./paste/provider.js";import{generateFormattingString as C}from"./libs/conditional-formatting.js";function R(t){var i,l,d;return r(a,{children:r(p,{initialCondition:null===(i=t.initialCondition)||void 0===i?void 0:i.sort,children:r(n,{rowCount:t.rows.length,perPage:null===(d=null===(l=t.initialCondition)||void 0===l?void 0:l.pagenation)||void 0===d?void 0:d.rowCountPerPage,children:r(g,{checkbox:t.checkbox,children:r(u,{checkboxCount:t.rows.length,children:r(h,{cols:t.cols,errorHandler:t.errorHandler,children:r(f,{children:r(w,{children:r(x,{children:e(N,{rows:t.rows,cols:t.cols,colValidators:{},onUpdateRowFunction:t.onUpdateRow,children:[r(y,{}),r(j,{}),r(F,o({},t))]})})})})})})})})})})}function F(o){var n=t(o),a=n.cols,p=n.rowMaps,h=n.pageRowIds,f=s().selectedFilterKey;return e("div",{className:"w-full",children:[r("div",{className:"flex justify-end mb-1 mr-3",children:r(c,{children:r("p",{className:"text-xs underline text-gray-500 hover:text-gray-700",children:"全てのフィルタリング条件を解除する"})})}),r("div",{id:"table-frame",className:"relative h-full max-w-full max-h-[80vh] border border-gray-200 rounded-md overflow-auto",children:e("table",{className:"table",children:[r("thead",{children:e("tr",{className:"sticky top-0 border-gray-200 z-20 bg-gray-200 text-gray-600 h-[32px]",children:[o.checkbox&&r("th",{children:r(b,{rows:o.rows})}),a.map((function(o,e){return r(i,{id:v.getTableColId(e),columnKey:o.key},o.key)}))]})}),e("tbody",{children:[!!f&&r("tr",{children:r("td",{colSpan:a.length,className:"sticky top-8 left-0 bg-gray-300 w-full shadow-lg rounded-b-2xl z-20 p-0 overflow-hidden",children:r(m,{})})}),0===h.length&&r("tr",{children:r("td",{colSpan:a.length,className:"py-5",children:r("p",{className:"text-center font-bold text-lg",children:"NO DATA"})})}),h.map((function(e,t){return r(k,{existCheckbox:!!o.checkbox,rowIndex:t,dataString:p[e].stringValue,cols:o.cols,onClickRow:o.onClickRow,applyRowFormatting:o.applyRowFormatting,conditionalFormattingString:C(p[e].data,a,o.conditionalFormattings),onUpdateRow:o.onUpdateRow},e)}))]})]})}),e("div",{className:"mt-1",children:[r(l,{}),r("div",{className:"mt-2",children:r(d,{})})]})]})}export{R as default};
3
3
  //# sourceMappingURL=base.js.map
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import{jsx as e,Fragment as t,jsxs as o}from"react/jsx-runtime";import{useCell as i}from"../../hook.js";import{EditButton as l}from"./edit-button.js";import{StringCellInput as n}from"./string-input.js";import{NumberCellInput as r}from"./number-input.js";import{SelectCellInput as a}from"./select-input.js";import{memo as c}from"react";import{IdGenerator as s}from"../../libs/id-generator.js";import{useCellContext as p,CellProvider as d}from"../provider.js";import{useColumnContext as m}from"../../sheet/providers.js";var u=c((function(o){return e(t,{children:"component"===o.type?o.component:e("div",{onDoubleClick:o.onDoubleClick,children:e("p",{className:"cell-data text-left whitespace-nowrap",children:o.component})})})})),f=c((function(t){var i=p();return e("td",{id:t.id,onPaste:function(e){e.preventDefault(),t.isExistOnUpdateRow?t.pasteData(e.clipboardData.getData("text")):alert("ペースト機能が有効化されていません。")},className:"".concat(t.cellFormatClassName),children:o("div",{className:"relative",onClick:t.isExistOnClickRow?void 0:function(e){e.preventDefault(),t.focusAtCell()},onDoubleClick:t.isExistOnClickRow?void 0:t.onDoubleClickCellToEdit,children:[e("div",{id:"".concat(t.id,"-display"),children:o("div",{className:"flex items-center gap-3 w-fit p-2 cursor-default",onClick:function(e){e.preventDefault(),e.stopPropagation(),t.focusAtCell()},children:[e(u,{type:i.type,component:i.component,onDoubleClick:t.onDoubleClickCellToEdit}),t.editable&&e(l,{})]})}),t.editable&&o("div",{id:"".concat(t.id,"-editor"),className:"absolute top-0 left-0 w-full h-full grid place-items-center z-10 pr-2",onClick:t.preventPropagation,style:{opacity:0,pointerEvents:"none"},children:["string"===i.type&&e(n,{}),"number"===i.type&&e(r,{}),"select"===i.type&&e(a,{})]})]})})}));function C(t){var o,l=i(t.rowIndex,t.colIndex),n=l.focusAtCell,r=l.onDoubleClickCellToEdit,a=l.preventPropagation,c=l.pasteData,p=m(t.columnKey);return e(d,{columnKey:t.columnKey,children:e(f,{id:s.getTableCellId(t.rowIndex,t.colIndex),editable:null!==(o=p.editable)&&void 0!==o&&o,cellFormatClassName:t.cellFormatClassName,focusAtCell:n,onDoubleClickCellToEdit:r,preventPropagation:a,pasteData:c,isExistOnClickRow:t.isExistOnClickRow,isExistOnUpdateRow:!!t.onUpdateRow})})}export{C as TableCell};
2
+ import{jsx as e,Fragment as t,jsxs as o}from"react/jsx-runtime";import{useCell as l}from"../../hook.js";import{EditButton as i}from"./edit-button.js";import{StringCellInput as n}from"./string-input.js";import{NumberCellInput as r}from"./number-input.js";import{SelectCellInput as a}from"./select-input.js";import{memo as c,useRef as s}from"react";import{IdGenerator as p}from"../../libs/id-generator.js";import{useCellContext as d,CellProvider as m}from"../provider.js";import{useColumnContext as u}from"../../sheet/providers.js";var f=c((function(o){return e(t,{children:"component"===o.type?o.component:e("div",{onDoubleClick:o.onDoubleClick,children:e("p",{className:"cell-data text-left whitespace-nowrap",children:o.component})})})})),C=c((function(t){var l=d(),c=s(null);return e("td",{id:t.id,onPaste:function(e){null!==c.current&&(c.current.contains(document.activeElement)||(e.preventDefault(),t.isExistOnUpdateRow?t.pasteData(e.clipboardData.getData("text")):alert("ペースト機能が有効化されていません。")))},className:"".concat(t.cellFormatClassName),children:o("div",{className:"relative",onClick:t.isExistOnClickRow?void 0:function(e){e.preventDefault(),t.focusAtCell()},onDoubleClick:t.isExistOnClickRow?void 0:t.onDoubleClickCellToEdit,children:[e("div",{id:"".concat(t.id,"-display"),children:o("div",{className:"flex items-center gap-3 w-fit p-2 cursor-default",onClick:function(e){e.preventDefault(),e.stopPropagation(),t.focusAtCell()},children:[e(f,{type:l.type,component:l.component,onDoubleClick:t.onDoubleClickCellToEdit}),t.editable&&e(i,{})]})}),t.editable&&o("div",{id:"".concat(t.id,"-editor"),ref:c,className:"absolute top-0 left-0 w-full h-full grid place-items-center z-10 pr-2",onClick:t.preventPropagation,style:{opacity:0,pointerEvents:"none"},children:["string"===l.type&&e(n,{}),"number"===l.type&&e(r,{}),"select"===l.type&&e(a,{})]})]})})}));function v(t){var o,i=l(t.rowIndex,t.colIndex),n=i.focusAtCell,r=i.onDoubleClickCellToEdit,a=i.preventPropagation,c=i.pasteData,s=u(t.columnKey);return e(m,{columnKey:t.columnKey,children:e(C,{id:p.getTableCellId(t.rowIndex,t.colIndex),editable:null!==(o=s.editable)&&void 0!==o&&o,cellFormatClassName:t.cellFormatClassName,focusAtCell:n,onDoubleClickCellToEdit:r,preventPropagation:a,pasteData:c,isExistOnClickRow:t.isExistOnClickRow,isExistOnUpdateRow:!!t.onUpdateRow})})}export{v as TableCell};
3
3
  //# sourceMappingURL=cell.js.map
@@ -1,2 +1,2 @@
1
- function t(t){if("string"===t.type)return a=t.constraints,function(t){return(null==a?void 0:a.maxLength)&&t.length>a.maxLength?(alert("最大文字数(".concat(a.maxLength,")を超過しています。(現在").concat(t.length,"文字)")),!1):(null==a?void 0:a.minLength)&&t.length<a.minLength?(alert("最小文字数(".concat(a.minLength,")を下回っています。(現在").concat(t.length,"文字)")),!1):!((null==a?void 0:a.pattern)&&!new RegExp(a.pattern).test(t)&&(alert("パターンに一致しません。(パターン".concat(a.pattern,")")),1))};if("number"===t.type)return function(t){return function(n){if("string"==typeof n){if(!/^-?[0-9]+(\.[0-9]+)?$/.test(n))return alert("数値ではない値が入力されています。"),!1;n=Number(n)}return"number"==typeof(null==t?void 0:t.max)&&n>t.max?(alert("最大値(".concat(t.max,")を超過しています。(入力値:").concat(n,")")),!1):!("number"==typeof(null==t?void 0:t.min)&&n<t.min&&(alert("最小値(".concat(t.min,")を下回っています。(入力値:").concat(n,")")),1))}}(t.constraints);if("select"===t.type)return n=t.options,e=t.allowEmpty,r=new Set(n.map((function(t){return t.label}))),function(t){return!(!e||""!==t)||!!r.has(t)||(alert("選択肢に含まれていない値です。(選択肢:".concat(t,")")),!1)};throw new Error("Invalid type");var n,e,r,a}export{t as generateValidateFunction};
1
+ function n(n){var e="入力値が不正のため、エラーを確認し修正してください。\n\n";e+="[対象の列名]: ".concat(n[0].label,"\n"),e+="[入力値]  : ".concat(n[0].value,"\n\n"),e+="[エラー内容]:",e+=n.reduce((function(n,e){switch(e.type){case"STRING_IS_TOO_LONG":return n+"\n・文字数が最大の長さ".concat(e.maxLength,"文字を超えています。(現在").concat(e.currentLength,"文字)");case"STRING_IS_TOO_SHORT":return n+"\n・文字数が最小の長さ".concat(e.minLength,"文字に満たないです。(現在").concat(e.currentLength,"文字)");case"STRING_PATTERN_NOT_MATCH":return n+"\n・パターンに一致しません。(パターン".concat(e.pattern,")");case"NUMBER_IS_TOO_LARGE":return n+"\n・最大値".concat(e.max,"を超えています。(入力値").concat(e.value,")");case"NUMBER_IS_TOO_SMALL":return n+"\n・最小値".concat(e.min,"を下回っています。(入力値").concat(e.value,")");case"NOT_NUMBER":return n+"\n・数値ではない値が入力されています。";case"NOT_IN_OPTIONS":return n+"\n・選択肢に含まれていない値です。"}}),""),alert(e)}function e(e,t){if("string"===e.type)return function(e,t,r,a){return function(e){var u=[];return(null==r?void 0:r.maxLength)&&e.length>r.maxLength&&u.push({type:"STRING_IS_TOO_LONG",label:t,maxLength:r.maxLength,currentLength:e.length,value:e}),(null==r?void 0:r.minLength)&&e.length<r.minLength&&u.push({type:"STRING_IS_TOO_SHORT",label:t,minLength:r.minLength,currentLength:e.length,value:e}),(null==r?void 0:r.pattern)&&(new RegExp(r.pattern).test(e)||u.push({type:"STRING_PATTERN_NOT_MATCH",label:t,pattern:r.pattern,value:e})),!(u.length>0&&(a?a(u):n(u),1))}}(e.key,e.label,e.constraints,t);if("number"===e.type)return function(e,t,r,a){return function(e){var u=[];return"string"!=typeof e||/^-?[0-9]+(\.[0-9]+)?$/.test(e)?(e=Number(e),"number"==typeof(null==r?void 0:r.max)&&e>r.max&&u.push({type:"NUMBER_IS_TOO_LARGE",label:t,max:r.max,value:e}),"number"==typeof(null==r?void 0:r.min)&&e<r.min&&u.push({type:"NUMBER_IS_TOO_SMALL",label:t,min:r.min,value:e}),!(u.length>0&&(a?a(u):n(u),1))):(u.push({type:"NOT_NUMBER",label:t,value:e}),a?a(u):n(u),!1)}}(e.key,e.label,e.constraints,t);if("select"===e.type)return function(e,t,r,a,u){var l=new Set(r.map((function(n){return n.label})));return function(e){if(a&&""===e)return!0;var r=[];return l.has(e)||r.push({type:"NOT_IN_OPTIONS",label:t,value:e,options:Array.from(l)}),!(r.length>0&&(u?u(r):n(r),1))}}(e.key,e.label,e.options,e.allowEmpty,t);throw new Error("Invalid type")}export{e as generateValidateFunction};
2
2
  //# sourceMappingURL=generate-validate-function.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate-validate-function.js","sources":["../../../../../src/table/libs/generate-validate-function.ts"],"sourcesContent":["export type TStringValidateOption = {\n maxLength?: number;\n minLength?: number;\n pattern?: string;\n};\n\nexport type TNumberValidateOption = {\n max?: number;\n min?: number;\n};\n\ntype TPropsGenerateValidateFunction =\n | {\n type: \"string\";\n constraints?: TStringValidateOption;\n }\n | {\n type: \"number\";\n constraints?: TNumberValidateOption;\n }\n | {\n type: \"select\";\n options: { value: string; label: string }[];\n allowEmpty?: boolean;\n };\n\ntype TStringValidateFunction = (value: string) => boolean;\n\nfunction generateStringValidateFunction(\n constraints?: TStringValidateOption\n): TStringValidateFunction {\n return (value: string) => {\n if (constraints?.maxLength) {\n if (value.length > constraints.maxLength) {\n alert(\n `最大文字数(${constraints.maxLength})を超過しています。(現在${value.length}文字)`\n );\n return false;\n }\n }\n if (constraints?.minLength) {\n if (value.length < constraints.minLength) {\n alert(\n `最小文字数(${constraints.minLength})を下回っています。(現在${value.length}文字)`\n );\n return false;\n }\n }\n if (constraints?.pattern) {\n if (!new RegExp(constraints.pattern).test(value)) {\n alert(`パターンに一致しません。(パターン${constraints.pattern})`);\n return false;\n }\n }\n return true;\n };\n}\n\ntype TNumberValidateFunction = (value: number) => boolean;\n\nfunction generateNumberValidateFunction(\n constraints?: TNumberValidateOption\n): TNumberValidateFunction {\n return (value: number | string) => {\n if (typeof value === \"string\") {\n // 小数も含めて数値に変換可能な値かを検査\n if (!/^-?[0-9]+(\\.[0-9]+)?$/.test(value)) {\n alert(\"数値ではない値が入力されています。\");\n return false;\n }\n value = Number(value);\n }\n\n if (typeof constraints?.max === \"number\") {\n if (value > constraints.max) {\n alert(`最大値(${constraints.max})を超過しています。(入力値:${value})`);\n return false;\n }\n }\n\n if (typeof constraints?.min === \"number\") {\n if (value < constraints.min) {\n alert(`最小値(${constraints.min})を下回っています。(入力値:${value})`);\n return false;\n }\n }\n\n return true;\n };\n}\n\ntype TSelectValidateFunction = (label: string) => boolean;\n\nfunction generatSelectValidateFunction(\n options: { value: string; label: string }[],\n allowEmpty?: boolean\n): TSelectValidateFunction {\n const labelSets = new Set(options.map((option) => option.label));\n return (label: string) => {\n if (allowEmpty && label === \"\") {\n return true;\n }\n\n if (!labelSets.has(label)) {\n alert(`選択肢に含まれていない値です。(選択肢:${label})`);\n return false;\n }\n\n return true;\n };\n}\n\nexport function generateValidateFunction(\n props: TPropsGenerateValidateFunction\n) {\n if (props.type === \"string\") {\n return generateStringValidateFunction(props.constraints);\n } else if (props.type === \"number\") {\n return generateNumberValidateFunction(props.constraints);\n } else if (props.type === \"select\") {\n return generatSelectValidateFunction(props.options, props.allowEmpty);\n } else {\n throw new Error(\"Invalid type\");\n }\n}\n"],"names":["generateValidateFunction","props","type","constraints","value","maxLength","length","alert","concat","minLength","pattern","RegExp","test","Number","max","min","generateNumberValidateFunction","options","allowEmpty","labelSets","Set","map","option","label","has","Error"],"mappings":"AAgHM,SAAUA,EACdC,GAEA,GAAmB,WAAfA,EAAMC,KACR,OAvFFC,EAuFwCF,EAAME,YArFvC,SAACC,GACN,OAAID,aAAW,EAAXA,EAAaE,YACXD,EAAME,OAASH,EAAYE,WAC7BE,MACE,SAASC,OAAAL,EAAYE,UAAyB,iBAAAG,OAAAJ,EAAME,OAAW,SAE1D,IAGPH,aAAW,EAAXA,EAAaM,YACXL,EAAME,OAASH,EAAYM,WAC7BF,MACE,SAASC,OAAAL,EAAYM,UAAyB,iBAAAD,OAAAJ,EAAME,OAAW,SAE1D,MAGPH,aAAW,EAAXA,EAAaO,WACV,IAAIC,OAAOR,EAAYO,SAASE,KAAKR,KACxCG,MAAM,oBAAoBC,OAAAL,EAAYO,QAAO,MACtC,GAIb,EA8DO,GAAmB,WAAfT,EAAMC,KACf,OA1DJ,SACEC,GAEA,OAAO,SAACC,GACN,GAAqB,iBAAVA,EAAoB,CAE7B,IAAK,wBAAwBQ,KAAKR,GAEhC,OADAG,MAAM,sBACC,EAETH,EAAQS,OAAOT,EAChB,CAED,MAAgC,iBAArBD,aAAW,EAAXA,EAAaW,MAClBV,EAAQD,EAAYW,KACtBP,MAAM,cAAOJ,EAAYW,IAAqB,mBAAAN,OAAAJ,EAAQ,OAC/C,KAIqB,iBAArBD,aAAW,EAAXA,EAAaY,MAClBX,EAAQD,EAAYY,MACtBR,MAAM,cAAOJ,EAAYY,IAAqB,mBAAAP,OAAAJ,EAAQ,MAC/C,GAKb,CACF,CA6BWY,CAA+Bf,EAAME,aACvC,GAAmB,WAAfF,EAAMC,KACf,OA1BFe,EA0BuChB,EAAMgB,QAzB7CC,EAyBsDjB,EAAMiB,WAvBtDC,EAAY,IAAIC,IAAIH,EAAQI,KAAI,SAACC,GAAW,OAAAA,EAAOC,UAClD,SAACA,GACN,SAAIL,GAAwB,KAAVK,MAIbJ,EAAUK,IAAID,KACjBhB,MAAM,uBAAAC,OAAuBe,EAAK,OAC3B,EAIX,EAaE,MAAM,IAAIE,MAAM,gBA7BpB,IACER,EACAC,EAEMC,EApENhB,CA+FF"}
1
+ {"version":3,"file":"generate-validate-function.js","sources":["../../../../../src/table/libs/generate-validate-function.ts"],"sourcesContent":["export type TStringValidateOption = {\n maxLength?: number;\n minLength?: number;\n pattern?: string;\n};\n\nexport type TNumberValidateOption = {\n max?: number;\n min?: number;\n};\n\ntype TPropsGenerateValidateFunction = {\n key: string;\n label: string;\n} & (\n | {\n type: \"string\";\n constraints?: TStringValidateOption;\n }\n | {\n type: \"number\";\n constraints?: TNumberValidateOption;\n }\n | {\n type: \"select\";\n options: { value: string; label: string }[];\n allowEmpty?: boolean;\n }\n);\n\ntype TStringValidateFunction = (value: string) => boolean;\n\nexport type TErrorValidation = {\n label: string;\n value: string | number;\n} & (\n | {\n type: \"STRING_IS_TOO_LONG\";\n maxLength: number;\n currentLength: number;\n }\n | {\n type: \"STRING_IS_TOO_SHORT\";\n minLength: number;\n currentLength: number;\n }\n | {\n type: \"STRING_PATTERN_NOT_MATCH\";\n pattern: string;\n }\n | {\n type: \"NUMBER_IS_TOO_LARGE\";\n max: number;\n }\n | {\n type: \"NUMBER_IS_TOO_SMALL\";\n min: number;\n }\n | {\n type: \"NOT_NUMBER\";\n }\n | {\n type: \"NOT_IN_OPTIONS\";\n options: string[];\n }\n);\n\nfunction defaultErrorHandler(errors: TErrorValidation[]) {\n let message = `入力値が不正のため、エラーを確認し修正してください。\\n\\n`;\n message += `[対象の列名]: ${errors[0].label}\\n`;\n message += `[入力値]  : ${errors[0].value}\\n\\n`;\n message += `[エラー内容]:`;\n\n message += errors.reduce((acc, error) => {\n switch (error.type) {\n case \"STRING_IS_TOO_LONG\":\n return (\n acc +\n `\\n・文字数が最大の長さ${error.maxLength}文字を超えています。(現在${error.currentLength}文字)`\n );\n case \"STRING_IS_TOO_SHORT\":\n return (\n acc +\n `\\n・文字数が最小の長さ${error.minLength}文字に満たないです。(現在${error.currentLength}文字)`\n );\n case \"STRING_PATTERN_NOT_MATCH\":\n return acc + `\\n・パターンに一致しません。(パターン${error.pattern})`;\n case \"NUMBER_IS_TOO_LARGE\":\n return (\n acc + `\\n・最大値${error.max}を超えています。(入力値${error.value})`\n );\n case \"NUMBER_IS_TOO_SMALL\":\n return (\n acc + `\\n・最小値${error.min}を下回っています。(入力値${error.value})`\n );\n case \"NOT_NUMBER\":\n return acc + `\\n・数値ではない値が入力されています。`;\n case \"NOT_IN_OPTIONS\":\n return acc + `\\n・選択肢に含まれていない値です。`;\n }\n }, \"\");\n\n alert(message);\n}\n\nfunction generateStringValidateFunction(\n key: string,\n label: string,\n constraints?: TStringValidateOption,\n errorHandler?: (errors: TErrorValidation[]) => void\n): TStringValidateFunction {\n return (value: string) => {\n const errors: TErrorValidation[] = [];\n\n if (constraints?.maxLength) {\n if (value.length > constraints.maxLength) {\n errors.push({\n type: \"STRING_IS_TOO_LONG\",\n label,\n maxLength: constraints.maxLength,\n currentLength: value.length,\n value,\n });\n }\n }\n\n if (constraints?.minLength) {\n if (value.length < constraints.minLength) {\n errors.push({\n type: \"STRING_IS_TOO_SHORT\",\n label,\n minLength: constraints.minLength,\n currentLength: value.length,\n value,\n });\n }\n }\n\n if (constraints?.pattern) {\n if (!new RegExp(constraints.pattern).test(value)) {\n errors.push({\n type: \"STRING_PATTERN_NOT_MATCH\",\n label,\n pattern: constraints.pattern,\n value,\n });\n }\n }\n\n if (errors.length > 0) {\n if (errorHandler) {\n errorHandler(errors);\n } else {\n defaultErrorHandler(errors);\n }\n return false;\n }\n\n return true;\n };\n}\n\ntype TNumberValidateFunction = (value: number) => boolean;\n\nfunction generateNumberValidateFunction(\n key: string,\n label: string,\n constraints?: TNumberValidateOption,\n errorHandler?: (errors: TErrorValidation[]) => void\n): TNumberValidateFunction {\n return (value: number | string) => {\n const errors: TErrorValidation[] = [];\n\n if (typeof value === \"string\") {\n // 小数も含めて数値に変換可能な値かを検査\n if (!/^-?[0-9]+(\\.[0-9]+)?$/.test(value)) {\n errors.push({\n type: \"NOT_NUMBER\",\n label,\n value,\n });\n\n if (errorHandler) {\n errorHandler(errors);\n } else {\n defaultErrorHandler(errors);\n }\n return false;\n }\n }\n\n value = Number(value);\n\n if (typeof constraints?.max === \"number\") {\n if (value > constraints.max) {\n errors.push({\n type: \"NUMBER_IS_TOO_LARGE\",\n label,\n max: constraints.max,\n value,\n });\n }\n }\n\n if (typeof constraints?.min === \"number\") {\n if (value < constraints.min) {\n errors.push({\n type: \"NUMBER_IS_TOO_SMALL\",\n label,\n min: constraints.min,\n value,\n });\n }\n }\n\n if (errors.length > 0) {\n if (errorHandler) {\n errorHandler(errors);\n } else {\n defaultErrorHandler(errors);\n }\n return false;\n }\n\n return true;\n };\n}\n\ntype TSelectValidateFunction = (label: string) => boolean;\n\nfunction generatSelectValidateFunction(\n key: string,\n columnLabel: string,\n options: { value: string; label: string }[],\n allowEmpty?: boolean,\n errorHandler?: (errors: TErrorValidation[]) => void\n): TSelectValidateFunction {\n const labelSets = new Set(options.map((option) => option.label));\n return (label: string) => {\n if (allowEmpty && label === \"\") {\n return true;\n }\n\n const errors: TErrorValidation[] = [];\n\n if (!labelSets.has(label)) {\n errors.push({\n type: \"NOT_IN_OPTIONS\",\n label: columnLabel,\n value: label,\n options: Array.from(labelSets),\n });\n }\n\n if (errors.length > 0) {\n if (errorHandler) {\n errorHandler(errors);\n } else {\n defaultErrorHandler(errors);\n }\n return false;\n }\n\n return true;\n };\n}\n\nexport function generateValidateFunction(\n props: TPropsGenerateValidateFunction,\n errorHandler?: (errors: TErrorValidation[]) => void\n) {\n if (props.type === \"string\") {\n return generateStringValidateFunction(\n props.key,\n props.label,\n props.constraints,\n errorHandler\n );\n } else if (props.type === \"number\") {\n return generateNumberValidateFunction(\n props.key,\n props.label,\n props.constraints,\n errorHandler\n );\n } else if (props.type === \"select\") {\n return generatSelectValidateFunction(\n props.key,\n props.label,\n props.options,\n props.allowEmpty,\n errorHandler\n );\n } else {\n throw new Error(\"Invalid type\");\n }\n}\n"],"names":["defaultErrorHandler","errors","message","label","value","reduce","acc","error","type","concat","maxLength","currentLength","minLength","pattern","max","min","alert","generateValidateFunction","props","errorHandler","key","constraints","length","push","RegExp","test","generateStringValidateFunction","Number","generateNumberValidateFunction","columnLabel","options","allowEmpty","labelSets","Set","map","option","has","Array","from","generatSelectValidateFunction","Error"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{__assign as t}from"../../../node_modules/tslib/tslib.es6.js";import{useReducer as e,useCallback as a,useEffect as o}from"react";import{useColumnValidatesContext as n}from"../sheet/providers.js";var r=function(e,a){var o,n;switch(a.type){case"setRows":return t(t({},e),{rows:a.payload.rows});case"setCols":return t(t({},e),{cols:a.payload.cols});case"setColValidators":return t(t({},e),{colValidators:a.payload.colValidators});case"setOnUpdateRowFunction":return t(t({},e),{onUpdateRowFunction:a.payload.onUpdateRowFunction});case"onPaste":var r=a.payload,l=r.rowIndex,s=r.colIndex,i=r.pasteData,u=e.rows,c=e.cols,d=e.colValidators;if(!e.onUpdateRowFunction)return e;var p={arguments:[],timing:e.updateParameters.timing+1},f=i.length,m=Math.max.apply(Math,i.map((function(t){return t.length})));if(0===f||0===m)return e;if(i.length+l>u.length)return alert("貼り付け先の行数が足りません。"),e;for(var w=0;w<m;w++){if(!(v=c[s+w]).editable)return alert("編集できない列にデータを貼り付けることはできません。\n\n編集不可列: ".concat(null!==(o=v.label)&&void 0!==o?o:v.key)),e}if(m+s>c.length)return alert("貼り付け先の列数が足りません。"),e;for(w=0;w<f;w++)for(var y=i[w],g=0;g<y.length;g++){var v,h=y[g];if(!(0,d[(v=c[s+g]).key])(h))return alert("[".concat(null!==(n=v.label)&&void 0!==n?n:v.key,"]列に次の不正なデータが含まれています。\n").concat(h)),e}return i.forEach((function(e,a){var o=t({},u[l+a]),n=!1;e.forEach((function(t,e){var a=c[s+e],r="number"===a.type?Number(t):"select"===a.type?""===t?"":a.options.find((function(e){return e.label===t})).value:t;o[a.key]!==r&&(n=!0,o[a.key]=r)})),n&&p.arguments.push({newRow:o,oldRow:u[l+a]})})),p.arguments.length>0?t(t({},e),{updateParameters:p}):e}};function l(l){var s=e(r,t(t({},l),{updateParameters:{arguments:[],timing:0}})),i=s[0],u=s[1],c=n(),d=a((function(t){u({type:"setRows",payload:{rows:t}})}),[]),p=a((function(t){u({type:"setCols",payload:{cols:t}})}),[]),f=a((function(t){u({type:"setColValidators",payload:{colValidators:t}})}),[]);o((function(){f(c)}),[c]);var m=a((function(t){u({type:"setOnUpdateRowFunction",payload:{onUpdateRowFunction:t}})}),[]),w=a((function(t,e,a){u({type:"onPaste",payload:{rowIndex:t,colIndex:e,pasteData:a}})}),[]);return o((function(){i.updateParameters.arguments.length>0&&i.updateParameters.arguments.forEach((function(t){var e,a=t.newRow,o=t.oldRow;null===(e=i.onUpdateRowFunction)||void 0===e||e.call(i,a,o)}))}),[i.updateParameters.timing,i.onUpdateRowFunction]),{setRows:d,setCols:p,setColValidators:f,setOnUpdateRowFunction:m,onPaste:w}}export{l as usePasteReducer};
1
+ import{__assign as t}from"../../../node_modules/tslib/tslib.es6.js";import{useReducer as e,useCallback as a,useEffect as o}from"react";import{useColumnValidatesContext as n}from"../sheet/providers.js";var r=function(e,a){var o;switch(a.type){case"setRows":return t(t({},e),{rows:a.payload.rows});case"setCols":return t(t({},e),{cols:a.payload.cols});case"setColValidators":return t(t({},e),{colValidators:a.payload.colValidators});case"setOnUpdateRowFunction":return t(t({},e),{onUpdateRowFunction:a.payload.onUpdateRowFunction});case"onPaste":var n=a.payload,r=n.rowIndex,s=n.colIndex,l=n.pasteData,i=e.rows,u=e.cols,c=e.colValidators;if(!e.onUpdateRowFunction)return e;var d={arguments:[],timing:e.updateParameters.timing+1},p=l.length,f=Math.max.apply(Math,l.map((function(t){return t.length})));if(0===p||0===f)return e;if(l.length+r>i.length)return alert("貼り付け先の行数が足りません。"),e;for(var m=0;m<f;m++){if(!(g=u[s+m]).editable)return alert("編集できない列にデータを貼り付けることはできません。\n\n編集不可列: ".concat(null!==(o=g.label)&&void 0!==o?o:g.key)),e}if(f+s>u.length)return alert("貼り付け先の列数が足りません。"),e;for(m=0;m<p;m++)for(var w=l[m],y=0;y<w.length;y++){var g,h=w[y];if(!(0,c[(g=u[s+y]).key])(h))return e}return l.forEach((function(e,a){var o=t({},i[r+a]),n=!1;e.forEach((function(t,e){var a=u[s+e],r="number"===a.type?Number(t):"select"===a.type?""===t?"":a.options.find((function(e){return e.label===t})).value:t;o[a.key]!==r&&(n=!0,o[a.key]=r)})),n&&d.arguments.push({newRow:o,oldRow:i[r+a]})})),d.arguments.length>0?t(t({},e),{updateParameters:d}):e}};function s(s){var l=e(r,t(t({},s),{updateParameters:{arguments:[],timing:0}})),i=l[0],u=l[1],c=n(),d=a((function(t){u({type:"setRows",payload:{rows:t}})}),[]),p=a((function(t){u({type:"setCols",payload:{cols:t}})}),[]),f=a((function(t){u({type:"setColValidators",payload:{colValidators:t}})}),[]);o((function(){f(c)}),[c]);var m=a((function(t){u({type:"setOnUpdateRowFunction",payload:{onUpdateRowFunction:t}})}),[]),w=a((function(t,e,a){u({type:"onPaste",payload:{rowIndex:t,colIndex:e,pasteData:a}})}),[]);return o((function(){i.updateParameters.arguments.length>0&&i.updateParameters.arguments.forEach((function(t){var e,a=t.newRow,o=t.oldRow;null===(e=i.onUpdateRowFunction)||void 0===e||e.call(i,a,o)}))}),[i.updateParameters.timing,i.onUpdateRowFunction]),{setRows:d,setCols:p,setColValidators:f,setOnUpdateRowFunction:m,onPaste:w}}export{s as usePasteReducer};
2
2
  //# sourceMappingURL=hooks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sources":["../../../../../src/table/paste/hooks.ts"],"sourcesContent":["import { useCallback, useEffect, useReducer } from \"react\";\nimport { TPasteReducer, TPasteReducerReturn } from \"./types\";\nimport { useColumnValidatesContext } from \"../sheet/providers\";\n\nconst reducer: TPasteReducer = (state, action) => {\n switch (action.type) {\n case \"setRows\":\n return { ...state, rows: action.payload.rows };\n case \"setCols\":\n return { ...state, cols: action.payload.cols };\n case \"setColValidators\":\n return { ...state, colValidators: action.payload.colValidators };\n case \"setOnUpdateRowFunction\":\n return {\n ...state,\n onUpdateRowFunction: action.payload.onUpdateRowFunction,\n };\n case \"onPaste\":\n const { rowIndex, colIndex, pasteData } = action.payload;\n const { rows, cols, colValidators, onUpdateRowFunction } = state;\n\n if (!onUpdateRowFunction) {\n return state;\n }\n\n const updateParameters = {\n arguments: [] as { newRow: any; oldRow: any }[],\n timing: state.updateParameters.timing + 1,\n };\n\n const rowLength = pasteData.length;\n const colLength = Math.max(...pasteData.map((row) => row.length));\n\n if (rowLength === 0 || colLength === 0) return state;\n\n if (pasteData.length + rowIndex > rows.length) {\n alert(\"貼り付け先の行数が足りません。\");\n return state;\n }\n\n for (let i = 0; i < colLength; i++) {\n const col = cols[colIndex + i];\n\n if (!col.editable) {\n alert(\n `編集できない列にデータを貼り付けることはできません。\\n\\n編集不可列: ${\n col.label ?? (col.key as string)\n }`\n );\n return state;\n }\n }\n\n if (colLength + colIndex > cols.length) {\n alert(\"貼り付け先の列数が足りません。\");\n return state;\n }\n\n for (let i = 0; i < rowLength; i++) {\n const pasteRow = pasteData[i];\n\n for (let j = 0; j < pasteRow.length; j++) {\n const pasteValue = pasteRow[j];\n const col = cols[colIndex + j];\n const validate = colValidators[col.key as string];\n\n if (!validate(pasteValue)) {\n alert(\n `[${\n col.label ?? (col.key as string)\n }]列に次の不正なデータが含まれています。\\n${pasteValue}`\n );\n return state;\n }\n }\n }\n\n pasteData.forEach((pasteRow, i) => {\n const row = { ...rows[rowIndex + i] };\n let checkUpdatedRow = false;\n\n pasteRow.forEach((pasteValue, j) => {\n const col = cols[colIndex + j];\n const value =\n col.type === \"number\"\n ? Number(pasteValue)\n : col.type === \"select\"\n ? pasteValue === \"\"\n ? \"\"\n : col.options.find((option) => option.label === pasteValue)!\n .value\n : pasteValue;\n if (row[col.key] !== value) {\n checkUpdatedRow = true;\n row[col.key] = value;\n }\n });\n\n if (checkUpdatedRow) {\n updateParameters.arguments.push({\n newRow: row,\n oldRow: rows[rowIndex + i],\n });\n }\n });\n\n if (updateParameters.arguments.length > 0) {\n return { ...state, updateParameters };\n } else {\n return state;\n }\n }\n};\n\nexport function usePasteReducer(initial: {\n rows: any[];\n cols: any[];\n colValidators: { [key: string]: (value: any) => boolean };\n onUpdateRowFunction?: (newRow: any, oldRow: any) => void;\n}): TPasteReducerReturn {\n const [state, dispatch] = useReducer(reducer, {\n ...initial,\n updateParameters: { arguments: [], timing: 0 },\n });\n const validators = useColumnValidatesContext();\n\n const setRows = useCallback((rows: any[]) => {\n dispatch({ type: \"setRows\", payload: { rows } });\n }, []);\n\n const setCols = useCallback((cols: any[]) => {\n dispatch({ type: \"setCols\", payload: { cols } });\n }, []);\n\n const setColValidators = useCallback(\n (colValidators: { [key: string]: (value: any) => boolean }) => {\n dispatch({ type: \"setColValidators\", payload: { colValidators } });\n },\n []\n );\n\n useEffect(() => {\n setColValidators(validators);\n }, [validators]);\n\n const setOnUpdateRowFunction = useCallback(\n (onUpdateRowFunction?: (newRow: any, oldRow: any) => void) => {\n dispatch({\n type: \"setOnUpdateRowFunction\",\n payload: { onUpdateRowFunction },\n });\n },\n []\n );\n\n const onPaste = useCallback(\n (rowIndex: number, colIndex: number, pasteData: string[][]) => {\n dispatch({ type: \"onPaste\", payload: { rowIndex, colIndex, pasteData } });\n },\n []\n );\n\n useEffect(() => {\n if (state.updateParameters.arguments.length > 0) {\n state.updateParameters.arguments.forEach(({ newRow, oldRow }) => {\n state.onUpdateRowFunction?.(newRow, oldRow);\n });\n }\n }, [state.updateParameters.timing, state.onUpdateRowFunction]);\n\n return {\n setRows,\n setCols,\n setColValidators,\n setOnUpdateRowFunction,\n onPaste,\n };\n}\n"],"names":["reducer","state","action","type","__assign","rows","payload","cols","colValidators","onUpdateRowFunction","_c","rowIndex_1","rowIndex","colIndex_1","colIndex","pasteData","rows_1","cols_1","updateParameters_1","arguments","timing","updateParameters","rowLength","length","colLength","Math","max","apply","map","row","alert","i","col","editable","concat","_a","label","key","pasteRow","j","pasteValue","validate","_b","forEach","checkUpdatedRow","value","Number","options","find","option","push","newRow","oldRow","usePasteReducer","initial","useReducer","dispatch","validators","useColumnValidatesContext","setRows","useCallback","setCols","setColValidators","useEffect","setOnUpdateRowFunction","onPaste","call"],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sources":["../../../../../src/table/paste/hooks.ts"],"sourcesContent":["import { useCallback, useEffect, useReducer } from \"react\";\nimport { TPasteReducer, TPasteReducerReturn } from \"./types\";\nimport { useColumnValidatesContext } from \"../sheet/providers\";\n\nconst reducer: TPasteReducer = (state, action) => {\n switch (action.type) {\n case \"setRows\":\n return { ...state, rows: action.payload.rows };\n case \"setCols\":\n return { ...state, cols: action.payload.cols };\n case \"setColValidators\":\n return { ...state, colValidators: action.payload.colValidators };\n case \"setOnUpdateRowFunction\":\n return {\n ...state,\n onUpdateRowFunction: action.payload.onUpdateRowFunction,\n };\n case \"onPaste\":\n const { rowIndex, colIndex, pasteData } = action.payload;\n const { rows, cols, colValidators, onUpdateRowFunction } = state;\n\n if (!onUpdateRowFunction) {\n return state;\n }\n\n const updateParameters = {\n arguments: [] as { newRow: any; oldRow: any }[],\n timing: state.updateParameters.timing + 1,\n };\n\n const rowLength = pasteData.length;\n const colLength = Math.max(...pasteData.map((row) => row.length));\n\n if (rowLength === 0 || colLength === 0) return state;\n\n if (pasteData.length + rowIndex > rows.length) {\n alert(\"貼り付け先の行数が足りません。\");\n return state;\n }\n\n for (let i = 0; i < colLength; i++) {\n const col = cols[colIndex + i];\n\n if (!col.editable) {\n alert(\n `編集できない列にデータを貼り付けることはできません。\\n\\n編集不可列: ${\n col.label ?? (col.key as string)\n }`\n );\n return state;\n }\n }\n\n if (colLength + colIndex > cols.length) {\n alert(\"貼り付け先の列数が足りません。\");\n return state;\n }\n\n for (let i = 0; i < rowLength; i++) {\n const pasteRow = pasteData[i];\n\n for (let j = 0; j < pasteRow.length; j++) {\n const pasteValue = pasteRow[j];\n const col = cols[colIndex + j];\n const validate = colValidators[col.key as string];\n\n if (!validate(pasteValue)) {\n return state;\n }\n }\n }\n\n pasteData.forEach((pasteRow, i) => {\n const row = { ...rows[rowIndex + i] };\n let checkUpdatedRow = false;\n\n pasteRow.forEach((pasteValue, j) => {\n const col = cols[colIndex + j];\n const value =\n col.type === \"number\"\n ? Number(pasteValue)\n : col.type === \"select\"\n ? pasteValue === \"\"\n ? \"\"\n : col.options.find((option) => option.label === pasteValue)!\n .value\n : pasteValue;\n if (row[col.key] !== value) {\n checkUpdatedRow = true;\n row[col.key] = value;\n }\n });\n\n if (checkUpdatedRow) {\n updateParameters.arguments.push({\n newRow: row,\n oldRow: rows[rowIndex + i],\n });\n }\n });\n\n if (updateParameters.arguments.length > 0) {\n return { ...state, updateParameters };\n } else {\n return state;\n }\n }\n};\n\nexport function usePasteReducer(initial: {\n rows: any[];\n cols: any[];\n colValidators: { [key: string]: (value: any) => boolean };\n onUpdateRowFunction?: (newRow: any, oldRow: any) => void;\n}): TPasteReducerReturn {\n const [state, dispatch] = useReducer(reducer, {\n ...initial,\n updateParameters: { arguments: [], timing: 0 },\n });\n const validators = useColumnValidatesContext();\n\n const setRows = useCallback((rows: any[]) => {\n dispatch({ type: \"setRows\", payload: { rows } });\n }, []);\n\n const setCols = useCallback((cols: any[]) => {\n dispatch({ type: \"setCols\", payload: { cols } });\n }, []);\n\n const setColValidators = useCallback(\n (colValidators: { [key: string]: (value: any) => boolean }) => {\n dispatch({ type: \"setColValidators\", payload: { colValidators } });\n },\n []\n );\n\n useEffect(() => {\n setColValidators(validators);\n }, [validators]);\n\n const setOnUpdateRowFunction = useCallback(\n (onUpdateRowFunction?: (newRow: any, oldRow: any) => void) => {\n dispatch({\n type: \"setOnUpdateRowFunction\",\n payload: { onUpdateRowFunction },\n });\n },\n []\n );\n\n const onPaste = useCallback(\n (rowIndex: number, colIndex: number, pasteData: string[][]) => {\n dispatch({ type: \"onPaste\", payload: { rowIndex, colIndex, pasteData } });\n },\n []\n );\n\n useEffect(() => {\n if (state.updateParameters.arguments.length > 0) {\n state.updateParameters.arguments.forEach(({ newRow, oldRow }) => {\n state.onUpdateRowFunction?.(newRow, oldRow);\n });\n }\n }, [state.updateParameters.timing, state.onUpdateRowFunction]);\n\n return {\n setRows,\n setCols,\n setColValidators,\n setOnUpdateRowFunction,\n onPaste,\n };\n}\n"],"names":["reducer","state","action","type","__assign","rows","payload","cols","colValidators","onUpdateRowFunction","_b","rowIndex_1","rowIndex","colIndex_1","colIndex","pasteData","rows_1","cols_1","updateParameters_1","arguments","timing","updateParameters","rowLength","length","colLength","Math","max","apply","map","row","alert","i","col","editable","concat","_a","label","key","pasteRow","j","pasteValue","validate","forEach","checkUpdatedRow","value","Number","options","find","option","push","newRow","oldRow","usePasteReducer","initial","useReducer","dispatch","validators","useColumnValidatesContext","setRows","useCallback","setCols","setColValidators","useEffect","setOnUpdateRowFunction","onPaste","call"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- import{jsx as r}from"react/jsx-runtime";import{createContext as n,useContext as e,useMemo as t}from"react";import{generateValidateFunction as i}from"../libs/generate-validate-function.js";var o=n({id:""});function u(n){var e=n.children,t=n.row;return r(o.Provider,{value:t,children:e})}function c(){return e(o)}var a=n({cols:[],colMaps:{},validates:{}});function l(n){var e=n.children,o=n.cols,u=t((function(){return o.reduce((function(r,n){return r[n.key]=n,r}),{})}),[o]),c=t((function(){return o.reduce((function(r,n){return r[n.key]=i(n),r}),{})}),[o]),l=t((function(){return{cols:o,colMaps:u,validates:c}}),[o]);return r(a.Provider,{value:l,children:e})}function f(r){return e(a).colMaps[r]}function d(){return e(a).cols}function s(r){return e(a).validates[r]}function v(){return e(a).validates}export{l as ColumnsProvider,u as RowProvider,f as useColumnContext,s as useColumnValidateContext,v as useColumnValidatesContext,d as useColumnsContext,c as useRowContext};
2
+ import{jsx as r}from"react/jsx-runtime";import{createContext as n,useContext as e,useMemo as t}from"react";import{generateValidateFunction as o}from"../libs/generate-validate-function.js";var i=n({id:""});function u(n){var e=n.children,t=n.row;return r(i.Provider,{value:t,children:e})}function c(){return e(i)}var a=n({cols:[],colMaps:{},validates:{}});function l(n){var e=n.children,i=n.cols,u=n.errorHandler,c=t((function(){return i.reduce((function(r,n){return r[n.key]=n,r}),{})}),[i]),l=t((function(){return i.reduce((function(r,n){return r[n.key]=o(n,u),r}),{})}),[i]),f=t((function(){return{cols:i,colMaps:c,validates:l}}),[i]);return r(a.Provider,{value:f,children:e})}function f(r){return e(a).colMaps[r]}function d(){return e(a).cols}function s(r){return e(a).validates[r]}function v(){return e(a).validates}export{l as ColumnsProvider,u as RowProvider,f as useColumnContext,s as useColumnValidateContext,v as useColumnValidatesContext,d as useColumnsContext,c as useRowContext};
3
3
  //# sourceMappingURL=providers.js.map
package/dist/index.d.ts CHANGED
@@ -9,6 +9,32 @@ type TNumberValidateOption = {
9
9
  max?: number;
10
10
  min?: number;
11
11
  };
12
+ type TErrorValidation = {
13
+ label: string;
14
+ value: string | number;
15
+ } & ({
16
+ type: "STRING_IS_TOO_LONG";
17
+ maxLength: number;
18
+ currentLength: number;
19
+ } | {
20
+ type: "STRING_IS_TOO_SHORT";
21
+ minLength: number;
22
+ currentLength: number;
23
+ } | {
24
+ type: "STRING_PATTERN_NOT_MATCH";
25
+ pattern: string;
26
+ } | {
27
+ type: "NUMBER_IS_TOO_LARGE";
28
+ max: number;
29
+ } | {
30
+ type: "NUMBER_IS_TOO_SMALL";
31
+ min: number;
32
+ } | {
33
+ type: "NOT_NUMBER";
34
+ } | {
35
+ type: "NOT_IN_OPTIONS";
36
+ options: string[];
37
+ });
12
38
 
13
39
  type DataRecord = Record<string, string | number>;
14
40
  type DataObject<T extends DataRecord> = T & {
@@ -86,6 +112,7 @@ type TPropsTable<T extends DataRecord> = {
86
112
  };
87
113
  applyRowFormatting?: (row: DataObject<T>) => TailwindCssStyle;
88
114
  conditionalFormattings?: TConditionalFormatting<T>[];
115
+ errorHandler?: (errors: TErrorValidation[]) => void;
89
116
  } & TCheckboxProperty<T>;
90
117
 
91
118
  declare function Table<T extends DataRecord>(props: TPropsTable<T>): react_jsx_runtime.JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teppen/react-ui",
3
- "version": "1.5.2",
3
+ "version": "1.5.4",
4
4
  "description": "React UI Component",
5
5
  "main": "dist/cjs/src/index.js",
6
6
  "module": "dist/esm/src/index.js",