@teppen/react-ui 1.5.3 → 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.
- package/dist/cjs/src/table/base.js +1 -1
- package/dist/cjs/src/table/libs/generate-validate-function.js +1 -1
- package/dist/cjs/src/table/libs/generate-validate-function.js.map +1 -1
- package/dist/cjs/src/table/paste/hooks.js +1 -1
- package/dist/cjs/src/table/paste/hooks.js.map +1 -1
- package/dist/cjs/src/table/sheet/providers.js +1 -1
- package/dist/esm/src/table/base.js +1 -1
- package/dist/esm/src/table/libs/generate-validate-function.js +1 -1
- package/dist/esm/src/table/libs/generate-validate-function.js.map +1 -1
- package/dist/esm/src/table/paste/hooks.js +1 -1
- package/dist/esm/src/table/paste/hooks.js.map +1 -1
- package/dist/esm/src/table/sheet/providers.js +1 -1
- package/dist/index.d.ts +27 -0
- package/package.json +1 -1
|
@@ -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,2 +1,2 @@
|
|
|
1
|
-
"use strict";exports.generateValidateFunction=function(t){if("string"===
|
|
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
|
|
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
|
|
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
|
|
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"),
|
|
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
|
|
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,2 +1,2 @@
|
|
|
1
|
-
function
|
|
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":"AAmEA,SAASA,EAAoBC,GAC3B,IAAIC,EAAU,iCACdA,GAAW,mBAAYD,EAAO,GAAGE,MAAK,MACtCD,GAAW,mBAAYD,EAAO,GAAGG,MAAK,QACtCF,GAAW,WAEXA,GAAWD,EAAOI,QAAO,SAACC,EAAKC,GAC7B,OAAQA,EAAMC,MACZ,IAAK,qBACH,OACEF,EACA,eAAeG,OAAAF,EAAMG,UAAS,iBAAAD,OAAgBF,EAAMI,cAAkB,OAE1E,IAAK,sBACH,OACEL,EACA,eAAeG,OAAAF,EAAMK,UAAS,iBAAAH,OAAgBF,EAAMI,cAAkB,OAE1E,IAAK,2BACH,OAAOL,EAAM,uBAAAG,OAAuBF,EAAMM,aAC5C,IAAK,sBACH,OACEP,EAAM,SAAAG,OAASF,EAAMO,IAAG,gBAAAL,OAAeF,EAAMH,MAAK,KAEtD,IAAK,sBACH,OACEE,EAAM,SAAAG,OAASF,EAAMQ,IAAG,iBAAAN,OAAgBF,EAAMH,MAAK,KAEvD,IAAK,aACH,OAAOE,EAAM,uBACf,IAAK,iBACH,OAAOA,EAAM,qBAElB,GAAE,IAEHU,MAAMd,EACR,CAoKgB,SAAAe,EACdC,EACAC,GAEA,GAAmB,WAAfD,EAAMV,KACR,OAvKJ,SACEY,EACAjB,EACAkB,EACAF,GAEA,OAAO,SAACf,GACN,IAAMH,EAA6B,GAqCnC,OAnCIoB,aAAW,EAAXA,EAAaX,YACXN,EAAMkB,OAASD,EAAYX,WAC7BT,EAAOsB,KAAK,CACVf,KAAM,qBACNL,MAAKA,EACLO,UAAWW,EAAYX,UACvBC,cAAeP,EAAMkB,OACrBlB,MAAKA,KAKPiB,aAAW,EAAXA,EAAaT,YACXR,EAAMkB,OAASD,EAAYT,WAC7BX,EAAOsB,KAAK,CACVf,KAAM,sBACNL,MAAKA,EACLS,UAAWS,EAAYT,UACvBD,cAAeP,EAAMkB,OACrBlB,MAAKA,KAKPiB,aAAW,EAAXA,EAAaR,WACV,IAAIW,OAAOH,EAAYR,SAASY,KAAKrB,IACxCH,EAAOsB,KAAK,CACVf,KAAM,2BACNL,MAAKA,EACLU,QAASQ,EAAYR,QACrBT,MAAKA,OAKPH,EAAOqB,OAAS,IACdH,EACFA,EAAalB,GAEbD,EAAoBC,GAEf,GAIX,CACF,CAgHWyB,CACLR,EAAME,IACNF,EAAMf,MACNe,EAAMG,YACNF,GAEG,GAAmB,WAAfD,EAAMV,KACf,OAnHJ,SACEY,EACAjB,EACAkB,EACAF,GAEA,OAAO,SAACf,GACN,IAAMH,EAA6B,GAEnC,MAAqB,iBAAVG,GAEJ,wBAAwBqB,KAAKrB,IAgBpCA,EAAQuB,OAAOvB,GAEiB,iBAArBiB,aAAW,EAAXA,EAAaP,MAClBV,EAAQiB,EAAYP,KACtBb,EAAOsB,KAAK,CACVf,KAAM,sBACNL,MAAKA,EACLW,IAAKO,EAAYP,IACjBV,MAAKA,IAKqB,iBAArBiB,aAAW,EAAXA,EAAaN,MAClBX,EAAQiB,EAAYN,KACtBd,EAAOsB,KAAK,CACVf,KAAM,sBACNL,MAAKA,EACLY,IAAKM,EAAYN,IACjBX,MAAKA,MAKPH,EAAOqB,OAAS,IACdH,EACFA,EAAalB,GAEbD,EAAoBC,GAEf,MA7CLA,EAAOsB,KAAK,CACVf,KAAM,aACNL,MAAKA,EACLC,MAAKA,IAGHe,EACFA,EAAalB,GAEbD,EAAoBC,IAEf,EAsCb,CACF,CAqDW2B,CACLV,EAAME,IACNF,EAAMf,MACNe,EAAMG,YACNF,GAEG,GAAmB,WAAfD,EAAMV,KACf,OAxDJ,SACEY,EACAS,EACAC,EACAC,EACAZ,GAEA,IAAMa,EAAY,IAAIC,IAAIH,EAAQI,KAAI,SAACC,GAAW,OAAAA,EAAOhC,UACzD,OAAO,SAACA,GACN,GAAI4B,GAAwB,KAAV5B,EAChB,OAAO,EAGT,IAAMF,EAA6B,GAWnC,OATK+B,EAAUI,IAAIjC,IACjBF,EAAOsB,KAAK,CACVf,KAAM,iBACNL,MAAO0B,EACPzB,MAAOD,EACP2B,QAASO,MAAMC,KAAKN,OAIpB/B,EAAOqB,OAAS,IACdH,EACFA,EAAalB,GAEbD,EAAoBC,GAEf,GAIX,CACF,CAqBWsC,CACLrB,EAAME,IACNF,EAAMf,MACNe,EAAMY,QACNZ,EAAMa,WACNZ,GAGF,MAAM,IAAIqB,MAAM,eAEpB"}
|
|
@@ -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
|
|
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
|
|
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
|
|
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;
|