@teppen/react-ui 1.8.7 → 1.8.9
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/search-bar/condition-search-bar/condition-list.js +1 -1
- package/dist/cjs/src/search-bar/condition-search-bar/input-form.js +1 -1
- package/dist/cjs/src/select-box/options-window/component.js +1 -1
- package/dist/cjs/src/select-box/options-window/component.js.map +1 -1
- package/dist/cjs/src/share/search-operator/constant.js +1 -1
- package/dist/cjs/src/share/search-operator/constant.js.map +1 -1
- package/dist/cjs/src/table/cell/hooks.js +1 -1
- package/dist/cjs/src/table/cell/hooks.js.map +1 -1
- package/dist/cjs/src/table/cell/ui/cell.js +1 -1
- package/dist/cjs/src/table/copy/hooks.js +1 -1
- package/dist/cjs/src/table/copy/hooks.js.map +1 -1
- package/dist/cjs/src/table/edit/ui/base-input.js +1 -1
- package/dist/cjs/src/table/filter-v2/hook.js +1 -1
- package/dist/cjs/src/table/filter-v2/hook.js.map +1 -1
- package/dist/cjs/src/table/header/columns-width/provider.js +1 -1
- package/dist/cjs/src/table/header/columns-width/reducer.js +1 -1
- package/dist/cjs/src/table/header/columns-width/reducer.js.map +1 -1
- package/dist/cjs/src/table/header/header-v2.js +1 -1
- package/dist/cjs/src/table/header/header-v2.js.map +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/table/hook.js.map +1 -1
- package/dist/esm/src/search-bar/condition-search-bar/condition-list.js +1 -1
- package/dist/esm/src/search-bar/condition-search-bar/input-form.js +1 -1
- package/dist/esm/src/select-box/options-window/component.js +1 -1
- package/dist/esm/src/select-box/options-window/component.js.map +1 -1
- package/dist/esm/src/share/search-operator/constant.js +1 -1
- package/dist/esm/src/share/search-operator/constant.js.map +1 -1
- package/dist/esm/src/table/cell/hooks.js +1 -1
- package/dist/esm/src/table/cell/hooks.js.map +1 -1
- package/dist/esm/src/table/cell/ui/cell.js +1 -1
- package/dist/esm/src/table/copy/hooks.js +1 -1
- package/dist/esm/src/table/copy/hooks.js.map +1 -1
- package/dist/esm/src/table/edit/ui/base-input.js +1 -1
- package/dist/esm/src/table/filter-v2/hook.js +1 -1
- package/dist/esm/src/table/filter-v2/hook.js.map +1 -1
- package/dist/esm/src/table/header/columns-width/provider.js +1 -1
- package/dist/esm/src/table/header/columns-width/reducer.js +1 -1
- package/dist/esm/src/table/header/columns-width/reducer.js.map +1 -1
- package/dist/esm/src/table/header/header-v2.js +1 -1
- package/dist/esm/src/table/header/header-v2.js.map +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/table/hook.js.map +1 -1
- package/dist/index.d.ts +22 -5
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header-v2.js","sources":["../../../../../src/table/header/header-v2.tsx"],"sourcesContent":["import { memo, useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { DataObject, DataRecord, TTableColumn } from \"../table/type\";\nimport { useColumnsWidthState } from \"./columns-width\";\nimport { useResizeColWidthHook, useScrollXRef } from \"./header-v2-hook\";\nimport { AllCheckbox } from \"../checkbox/components\";\nimport { ConditionSearchBar } from \"../../search-bar\";\nimport { useTableIdGenerator } from \"../id\";\nimport { useFilter } from \"../filter-v2\";\nimport { TConditionChangeAction } from \"../../search-bar/condition-search-bar/condition-input-management/type\";\n\ninterface IPropsTableHeader<T extends DataRecord> {\n cols: TTableColumn<T>[];\n checkbox?: boolean;\n rows: DataObject<T>[];\n maxWidth?: string;\n generateSortButton?: (columnKey: string) => React.ReactNode;\n}\n\nexport function TableHeader<T extends DataRecord>(props: IPropsTableHeader<T>) {\n const idGenerator = useTableIdGenerator();\n const { getColumnWidth } = useColumnsWidthState();\n const { conditions, addFilter, removeFilter } = useFilter();\n const ref = useScrollXRef();\n\n useEffect(() => {\n if (ref.current) {\n const element = ref.current;\n\n const scrollX = (e: WheelEvent) => {\n if (e.deltaY === 0) return;\n\n e.preventDefault();\n element.scrollLeft += e.deltaY;\n };\n\n element.addEventListener(\"wheel\", scrollX);\n\n return () => {\n element.removeEventListener(\"wheel\", scrollX);\n };\n }\n }, [ref]);\n\n const onChangeCondition = useCallback((action: TConditionChangeAction) => {\n switch (action.type) {\n case \"add\":\n addFilter(action.payload.condition);\n break;\n case \"remove\":\n removeFilter(action.payload.index);\n break;\n }\n }, []);\n\n const targets = useMemo(() => {\n return props.cols\n .filter(\n (col)
|
|
1
|
+
{"version":3,"file":"header-v2.js","sources":["../../../../../src/table/header/header-v2.tsx"],"sourcesContent":["import { memo, useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { DataObject, DataRecord, TTableColumn } from \"../table/type\";\nimport { useColumnsWidthState } from \"./columns-width\";\nimport { useResizeColWidthHook, useScrollXRef } from \"./header-v2-hook\";\nimport { AllCheckbox } from \"../checkbox/components\";\nimport { ConditionSearchBar } from \"../../search-bar\";\nimport { useTableIdGenerator } from \"../id\";\nimport { useFilter } from \"../filter-v2\";\nimport { TConditionChangeAction } from \"../../search-bar/condition-search-bar/condition-input-management/type\";\n\ninterface IPropsTableHeader<T extends DataRecord> {\n cols: TTableColumn<T>[];\n checkbox?: boolean;\n rows: DataObject<T>[];\n maxWidth?: string;\n generateSortButton?: (columnKey: string) => React.ReactNode;\n}\n\nexport function TableHeader<T extends DataRecord>(props: IPropsTableHeader<T>) {\n const idGenerator = useTableIdGenerator();\n const { getColumnWidth } = useColumnsWidthState();\n const { conditions, addFilter, removeFilter } = useFilter();\n const ref = useScrollXRef();\n\n useEffect(() => {\n if (ref.current) {\n const element = ref.current;\n\n const scrollX = (e: WheelEvent) => {\n if (e.deltaY === 0) return;\n\n e.preventDefault();\n element.scrollLeft += e.deltaY;\n };\n\n element.addEventListener(\"wheel\", scrollX);\n\n return () => {\n element.removeEventListener(\"wheel\", scrollX);\n };\n }\n }, [ref]);\n\n const onChangeCondition = useCallback((action: TConditionChangeAction) => {\n switch (action.type) {\n case \"add\":\n addFilter(action.payload.condition);\n break;\n case \"remove\":\n removeFilter(action.payload.index);\n break;\n }\n }, []);\n\n const targets = useMemo(() => {\n return props.cols\n .filter(\n (col) =>\n !!col.label &&\n (col.type === \"datetime\" ||\n col.type === \"date\" ||\n col.editable ||\n (!col.editable && !col.render))\n )\n .map((col) => {\n switch (col.type) {\n case \"string\":\n return {\n key: col.key.toString(),\n label: col.label as string,\n type: col.type,\n };\n case \"number\":\n return {\n key: col.key.toString(),\n label: col.label as string,\n type: col.type,\n };\n case \"select\":\n return {\n key: col.key.toString(),\n label: col.label as string,\n type: col.type,\n options: col.options,\n };\n case \"date\":\n return {\n key: col.key.toString(),\n label: col.label as string,\n type: col.type,\n };\n case \"datetime\":\n return {\n key: col.key.toString(),\n label: col.label as string,\n type: col.type,\n };\n }\n });\n }, [props.cols]);\n\n return (\n <div\n className=\"border-gray-200 bg-gray-200 text-gray-600 rounded-t-md\"\n style={{ maxWidth: props.maxWidth }}\n >\n <div className=\"py-2 px-2\">\n <ConditionSearchBar\n id={idGenerator.getTableHeaderId()}\n targets={targets}\n conditions={conditions}\n onChangeCondition={onChangeCondition}\n size=\"small\"\n />\n </div>\n\n <style>{`\n .teppen-no-scrollbar {\n -ms-overflow-style: none;\n scrollbar-width: none;\n }\n .teppen-no-scrollbar::-webkit-scrollbar {\n display: none;\n }\n `}</style>\n <div\n ref={ref}\n className=\"relative max-w-full overflow-x-auto teppen-no-scrollbar\"\n >\n <div className=\"flex h-[32px]\">\n {props.checkbox && (\n <div className=\"w-8 h-full\">\n <AllCheckbox rows={props.rows} />\n </div>\n )}\n {props.cols.map((col) => {\n return (\n <HeaderElement\n key={col.key.toString()}\n keyName={col.key.toString()}\n label={col.label}\n colWidth={getColumnWidth(col.key as string)}\n disableSort={\n col.disableSort ||\n (col.type !== \"datetime\" &&\n col.type !== \"date\" &&\n !col.editable &&\n !!col.render)\n }\n generateSortButton={props.generateSortButton}\n />\n );\n })}\n </div>\n </div>\n </div>\n );\n}\n\ninterface IPropsHeaderElement {\n keyName: string;\n label?: string;\n colWidth: number;\n disableSort?: boolean;\n generateSortButton?: (columnKey: string) => React.ReactNode;\n}\n\nconst HeaderElement = memo(function HE(props: IPropsHeaderElement) {\n const ref = useRef<HTMLDivElement>(null);\n const { onMouseDownResizeWidth } = useResizeColWidthHook(props.keyName);\n\n const maxWidthLabel = ref.current\n ? props.colWidth - ref.current.clientWidth\n : props.colWidth;\n\n return (\n <div\n className=\"relative\"\n style={{\n width: props.colWidth,\n maxWidth: props.colWidth,\n minWidth: props.colWidth,\n }}\n >\n <div\n className={`flex justify-between items-center bg-gray-200 text-gray-600 h-[32px]`}\n >\n <div className=\"px-2\" style={{ maxWidth: maxWidthLabel }}>\n {props.label && (\n <p\n className={`text-left font-bold text-nowrap overflow-hidden text-ellipsis`}\n >\n {props.label}\n </p>\n )}\n </div>\n\n <div ref={ref} className=\"flex items-center w-fit shrink-0 gap-1 px-1\">\n {!props.disableSort &&\n props.generateSortButton &&\n props.generateSortButton(props.keyName)}\n </div>\n </div>\n <div\n className=\"absolute top-0 right-0 grid place-items-end py-1 w-[4px] h-full cursor-col-resize\"\n onMouseDown={onMouseDownResizeWidth}\n >\n <div className={`w-[1px] h-full bg-white`} />\n </div>\n </div>\n );\n});\n"],"names":["TableHeader","props","idGenerator","useTableIdGenerator","getColumnWidth","useColumnsWidthState","_a","useFilter","conditions","addFilter","removeFilter","ref","useScrollXRef","useEffect","current","element_1","scrollX_1","e","deltaY","preventDefault","scrollLeft","addEventListener","removeEventListener","onChangeCondition","useCallback","action","type","payload","condition","index","targets","useMemo","cols","filter","col","label","editable","render","map","key","toString","options","_jsxs","className","style","maxWidth","children","_jsx","ConditionSearchBar","id","getTableHeaderId","size","checkbox","AllCheckbox","rows","HeaderElement","keyName","colWidth","disableSort","generateSortButton","memo","useRef","onMouseDownResizeWidth","useResizeColWidthHook","maxWidthLabel","clientWidth","width","minWidth","onMouseDown"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function
|
|
1
|
+
function e(e){var n="入力値が不正のため、エラーを確認し修正してください。\n\n";n+="[対象の列名]: ".concat(e[0].label,"\n"),n+="[入力値] : ".concat(e[0].value,"\n\n"),n+="[エラー内容]:",n+=e.reduce((function(e,n){switch(n.type){case"STRING_IS_TOO_LONG":return e+"\n・文字数が最大の長さ".concat(n.maxLength,"文字を超えています。(現在").concat(n.currentLength,"文字)");case"STRING_IS_TOO_SHORT":return e+"\n・文字数が最小の長さ".concat(n.minLength,"文字に満たないです。(現在").concat(n.currentLength,"文字)");case"STRING_PATTERN_NOT_MATCH":return e+"\n・パターンに一致しません。(パターン".concat(n.pattern,")");case"NUMBER_IS_TOO_LARGE":return e+"\n・最大値".concat(n.max,"を超えています。(入力値").concat(n.value,")");case"NUMBER_IS_TOO_SMALL":return e+"\n・最小値".concat(n.min,"を下回っています。(入力値").concat(n.value,")");case"NOT_NUMBER":return e+"\n・数値ではない値が入力されています。";case"NOT_IN_OPTIONS":return e+"\n・選択肢に含まれていない値です。";case"NOT_DATE":return e+"\n・日付の形式ではありません。";case"NOT_DATETIME":return e+"\n・日時の形式ではありません。"}}),""),alert(n)}function n(n,t){if("string"===n.type)return function(n,t,r,a){return function(n){var u=[];return(null==r?void 0:r.maxLength)&&n.length>r.maxLength&&u.push({type:"STRING_IS_TOO_LONG",label:t,maxLength:r.maxLength,currentLength:n.length,value:n}),(null==r?void 0:r.minLength)&&n.length<r.minLength&&u.push({type:"STRING_IS_TOO_SHORT",label:t,minLength:r.minLength,currentLength:n.length,value:n}),(null==r?void 0:r.pattern)&&(new RegExp(r.pattern).test(n)||u.push({type:"STRING_PATTERN_NOT_MATCH",label:t,pattern:r.pattern,value:n})),!(u.length>0&&(a?a(u):e(u),1))}}(n.key,n.label,n.constraints,t);if("number"===n.type)return function(n,t,r,a){return function(n){var u=[];return"string"!=typeof n||/^-?[0-9]+(\.[0-9]+)?$/.test(n)?(n=Number(n),"number"==typeof(null==r?void 0:r.max)&&n>r.max&&u.push({type:"NUMBER_IS_TOO_LARGE",label:t,max:r.max,value:n}),"number"==typeof(null==r?void 0:r.min)&&n<r.min&&u.push({type:"NUMBER_IS_TOO_SMALL",label:t,min:r.min,value:n}),!(u.length>0&&(a?a(u):e(u),1))):(u.push({type:"NOT_NUMBER",label:t,value:n}),a?a(u):e(u),!1)}}(n.key,n.label,n.constraints,t);if("select"===n.type)return function(n,t,r,a,u){var l=new Set(r.map((function(e){return e.label})));return function(n){if(a&&""===n)return!0;var r=[];return l.has(n)||r.push({type:"NOT_IN_OPTIONS",label:t,value:n,options:Array.from(l)}),!(r.length>0&&(u?u(r):e(r),1))}}(n.key,n.label,n.options,n.allowEmpty,t);if("date"===n.type)return function(n,t,r){return function(n){var a=[];return isNaN(new Date(n).getTime())&&a.push({type:"NOT_DATE",label:t,value:n}),!(a.length>0&&(r?r(a):e(a),1))}}(n.key,n.label,t);if("datetime"===n.type)return function(n,t,r){return function(n){var a=[];return isNaN(new Date(n).getTime())&&a.push({type:"NOT_DATETIME",label:t,value:n}),!(a.length>0&&(r?r(a):e(a),1))}}(n.key,n.label,t);throw new Error("Invalid type")}export{n 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 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
|
+
{"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 type: \"date\";\n }\n | {\n type: \"datetime\";\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 type: \"NOT_DATE\";\n }\n | {\n type: \"NOT_DATETIME\";\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 case \"NOT_DATE\":\n return acc + `\\n・日付の形式ではありません。`;\n case \"NOT_DATETIME\":\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\ntype TDateValidateFunction = (label: string) => boolean;\n\nfunction generatDateValidateFunction(\n key: string,\n columnLabel: string,\n errorHandler?: (errors: TErrorValidation[]) => void\n): TDateValidateFunction {\n return (value: string) => {\n const errors: TErrorValidation[] = [];\n\n if (isNaN(new Date(value).getTime())) {\n errors.push({\n type: \"NOT_DATE\",\n label: columnLabel,\n value,\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 TDatetimeValidateFunction = (label: string) => boolean;\n\nfunction generatDatetimeValidateFunction(\n key: string,\n columnLabel: string,\n errorHandler?: (errors: TErrorValidation[]) => void\n): TDatetimeValidateFunction {\n return (value: string) => {\n const errors: TErrorValidation[] = [];\n\n if (isNaN(new Date(value).getTime())) {\n errors.push({\n type: \"NOT_DATETIME\",\n label: columnLabel,\n value,\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 if (props.type === \"date\") {\n return generatDateValidateFunction(props.key, props.label, errorHandler);\n } else if (props.type === \"datetime\") {\n return generatDatetimeValidateFunction(\n props.key,\n props.label,\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","isNaN","Date","getTime","generatDateValidateFunction","generatDatetimeValidateFunction","Error"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.js","sources":["../../../../../src/table/table/hook.ts"],"sourcesContent":["import { useEffect, useMemo } from \"react\";\nimport { DataObject, DataRecord, TPropsTable } from \"./type\";\nimport { usePageContext } from \"../pagenation/providers\";\nimport { useCheckboxStatusContext } from \"../checkbox/provider\";\nimport { useSortActionContext, useSortTimingContext } from \"../sort/provider\";\nimport { useTablePropertyActionContext } from \"../table-property/provider\";\nimport { usePasteActionContext } from \"../paste/provider\";\nimport { useCopyActionContext } from \"../copy/provider\";\nimport { useFilterFunctions } from \"../filter-v2/context\";\n\nexport function useTable<T extends DataRecord>(props: TPropsTable<T>) {\n const { filter } = useFilterFunctions();\n const { sort, updatedData } = useSortActionContext();\n const sortTiming = useSortTimingContext();\n const { setRowCount, pageFilter } = usePageContext();\n const { dispatchCheckboxStatus } = useCheckboxStatusContext();\n const { setRows: setRowsForPaste } = usePasteActionContext();\n const { setRows: setRowsForCopy } = useCopyActionContext();\n const { setMaxDisplayColCount, setMaxDisplayRowCount } =\n useTablePropertyActionContext();\n\n const filteredRows = useMemo(\n () => filter(props.rows),\n [filter, sortTiming, props.rows.length]\n );\n\n useEffect(() => {\n setRowCount(filteredRows.length);\n }, [filteredRows.length]);\n\n const checkBoxes = useMemo(() => {\n if (!props.checkbox) {\n return [];\n }\n\n return props.rows.filter((row) => props.checkbox?.checked(row));\n }, [props.checkbox, props.rows]);\n\n useEffect(() => {\n dispatchCheckboxStatus({\n type: \"SET\",\n payload: { checkedRecords: checkBoxes },\n });\n }, [checkBoxes]);\n\n const sortedRows = useMemo(\n () => sort(filteredRows),\n [filteredRows, sortTiming]\n );\n\n useEffect(() => {\n updatedData();\n }, [props.rows]);\n\n const pageRows = useMemo(\n () => pageFilter(sortedRows),\n [pageFilter, sortedRows]\n );\n\n const pageRowIds = useMemo(() => pageRows.map((row) => row.id), [pageRows]);\n const pageRowIdSets = useMemo(() => new Set(pageRowIds), [pageRowIds]);\n\n const rowMaps = useMemo(\n () =>\n props.rows\n .filter((row) => pageRowIdSets.has(row.id))\n .reduce((acc, row) => {\n const rowSortedByKey = Object.keys(row)\n .sort()\n .reduce((acc, key) => {\n acc[key] = row[key];\n return acc;\n }, {} as { [key: string]: string | number });\n\n acc[row.id] = {\n data: rowSortedByKey,\n stringValue: JSON.stringify(rowSortedByKey),\n };\n return acc;\n }, {} as { [id: string | number]: { data: DataObject<any>; stringValue: string } }),\n [props.rows, pageRowIdSets]\n );\n\n useEffect(() => {\n setMaxDisplayColCount(props.cols.length);\n }, [props.cols.length]);\n\n useEffect(() => {\n setMaxDisplayRowCount(pageRowIds.length);\n }, [pageRowIds.length]);\n\n useEffect(() => {\n const rows = pageRowIds.map((id) => rowMaps[id].data);\n setRowsForCopy(rows);\n setRowsForPaste(rows);\n }, [rowMaps]);\n\n return {\n cols: props.cols,\n rowMaps,\n pageRowIds,\n };\n}\n"],"names":["useTable","props","filter","useFilterFunctions","_a","useSortActionContext","sort","updatedData","sortTiming","useSortTimingContext","_b","usePageContext","setRowCount","pageFilter","dispatchCheckboxStatus","useCheckboxStatusContext","setRowsForPaste","usePasteActionContext","setRowsForCopy","useCopyActionContext","_c","useTablePropertyActionContext","setMaxDisplayColCount","setMaxDisplayRowCount","filteredRows","useMemo","rows","length","useEffect","checkBoxes","checkbox","row","checked","type","payload","checkedRecords","sortedRows","pageRows","pageRowIds","map","id","pageRowIdSets","Set","rowMaps","has","reduce","acc","rowSortedByKey","Object","keys","key","data","stringValue","JSON","stringify","cols"],"mappings":"sgBAUM,SAAUA,EAA+BC,GACrC,IAAAC,EAAWC,WACbC,EAAwBC,IAAtBC,EAAIF,EAAAE,KAAEC,EAAWH,EAAAG,YACnBC,EAAaC,IACbC,EAA8BC,IAA5BC,EAAWF,EAAAE,YAAEC,EAAUH,EAAAG,WACvBC,EAA2BC,2BAClBC,EAAoBC,YACpBC,EAAmBC,YAC9BC,EACJC,IADMC,EAAqBF,EAAAE,sBAAEC,EAAqBH,EAAAG,sBAG9CC,EAAeC,GACnB,WAAM,OAAAvB,EAAOD,EAAMyB,KAAK,GACxB,CAACxB,EAAQM,EAAYP,EAAMyB,KAAKC,SAGlCC,GAAU,WACRhB,EAAYY,EAAaG,OAC3B,GAAG,CAACH,EAAaG,SAEjB,IAAME,EAAaJ,GAAQ,WACzB,OAAKxB,EAAM6B,SAIJ7B,EAAMyB,KAAKxB,QAAO,SAAC6B,GAAG,IAAA3B,EAAK,eAAAA,EAAAH,EAAM6B,+BAAUE,QAAQD,EAAI,IAHrD,EAIV,GAAE,CAAC9B,EAAM6B,SAAU7B,EAAMyB,OAE1BE,GAAU,WACRd,EAAuB,CACrBmB,KAAM,MACNC,QAAS,CAAEC,eAAgBN,IAE/B,GAAG,CAACA,IAEJ,IAAMO,EAAaX,GACjB,WAAM,OAAAnB,EAAKkB,KACX,CAACA,EAAchB,IAGjBoB,GAAU,WACRrB,GACF,GAAG,CAACN,EAAMyB,OAEV,IAAMW,EAAWZ,GACf,WAAM,OAAAZ,EAAWuB,KACjB,CAACvB,EAAYuB,IAGTE,EAAab,GAAQ,WAAM,OAAAY,EAASE,KAAI,SAACR,GAAQ,OAAAA,EAAIS,EAAE,GAAC,GAAE,CAACH,IAC3DI,EAAgBhB,GAAQ,WAAM,OAAA,IAAIiB,IAAIJ,EAAW,GAAE,CAACA,IAEpDK,EAAUlB,GACd,WACE,OAAAxB,EAAMyB,KACHxB,QAAO,SAAC6B,GAAQ,OAAAU,EAAcG,IAAIb,EAAIS,OACtCK,QAAO,SAACC,EAAKf,GACZ,IAAMgB,EAAiBC,OAAOC,KAAKlB,GAChCzB,OACAuC,QAAO,SAACC,EAAKI,GAEZ,OADAJ,EAAII,GAAOnB,EAAImB,GACRJ,CACR,GAAE,
|
|
1
|
+
{"version":3,"file":"hook.js","sources":["../../../../../src/table/table/hook.ts"],"sourcesContent":["import { useEffect, useMemo } from \"react\";\nimport { DataObject, DataRecord, TPropsTable } from \"./type\";\nimport { usePageContext } from \"../pagenation/providers\";\nimport { useCheckboxStatusContext } from \"../checkbox/provider\";\nimport { useSortActionContext, useSortTimingContext } from \"../sort/provider\";\nimport { useTablePropertyActionContext } from \"../table-property/provider\";\nimport { usePasteActionContext } from \"../paste/provider\";\nimport { useCopyActionContext } from \"../copy/provider\";\nimport { useFilterFunctions } from \"../filter-v2/context\";\n\nexport function useTable<T extends DataRecord>(props: TPropsTable<T>) {\n const { filter } = useFilterFunctions();\n const { sort, updatedData } = useSortActionContext();\n const sortTiming = useSortTimingContext();\n const { setRowCount, pageFilter } = usePageContext();\n const { dispatchCheckboxStatus } = useCheckboxStatusContext();\n const { setRows: setRowsForPaste } = usePasteActionContext();\n const { setRows: setRowsForCopy } = useCopyActionContext();\n const { setMaxDisplayColCount, setMaxDisplayRowCount } =\n useTablePropertyActionContext();\n\n const filteredRows = useMemo(\n () => filter(props.rows),\n [filter, sortTiming, props.rows.length]\n );\n\n useEffect(() => {\n setRowCount(filteredRows.length);\n }, [filteredRows.length]);\n\n const checkBoxes = useMemo(() => {\n if (!props.checkbox) {\n return [];\n }\n\n return props.rows.filter((row) => props.checkbox?.checked(row));\n }, [props.checkbox, props.rows]);\n\n useEffect(() => {\n dispatchCheckboxStatus({\n type: \"SET\",\n payload: { checkedRecords: checkBoxes },\n });\n }, [checkBoxes]);\n\n const sortedRows = useMemo(\n () => sort(filteredRows),\n [filteredRows, sortTiming]\n );\n\n useEffect(() => {\n updatedData();\n }, [props.rows]);\n\n const pageRows = useMemo(\n () => pageFilter(sortedRows),\n [pageFilter, sortedRows]\n );\n\n const pageRowIds = useMemo(() => pageRows.map((row) => row.id), [pageRows]);\n const pageRowIdSets = useMemo(() => new Set(pageRowIds), [pageRowIds]);\n\n const rowMaps = useMemo(\n () =>\n props.rows\n .filter((row) => pageRowIdSets.has(row.id))\n .reduce((acc, row) => {\n const rowSortedByKey = Object.keys(row)\n .sort()\n .reduce((acc, key) => {\n acc[key] = row[key];\n return acc;\n }, {} as { [key: string]: string | number | Date });\n\n acc[row.id] = {\n data: rowSortedByKey,\n stringValue: JSON.stringify(rowSortedByKey),\n };\n return acc;\n }, {} as { [id: string | number]: { data: DataObject<any>; stringValue: string } }),\n [props.rows, pageRowIdSets]\n );\n\n useEffect(() => {\n setMaxDisplayColCount(props.cols.length);\n }, [props.cols.length]);\n\n useEffect(() => {\n setMaxDisplayRowCount(pageRowIds.length);\n }, [pageRowIds.length]);\n\n useEffect(() => {\n const rows = pageRowIds.map((id) => rowMaps[id].data);\n setRowsForCopy(rows);\n setRowsForPaste(rows);\n }, [rowMaps]);\n\n return {\n cols: props.cols,\n rowMaps,\n pageRowIds,\n };\n}\n"],"names":["useTable","props","filter","useFilterFunctions","_a","useSortActionContext","sort","updatedData","sortTiming","useSortTimingContext","_b","usePageContext","setRowCount","pageFilter","dispatchCheckboxStatus","useCheckboxStatusContext","setRowsForPaste","usePasteActionContext","setRowsForCopy","useCopyActionContext","_c","useTablePropertyActionContext","setMaxDisplayColCount","setMaxDisplayRowCount","filteredRows","useMemo","rows","length","useEffect","checkBoxes","checkbox","row","checked","type","payload","checkedRecords","sortedRows","pageRows","pageRowIds","map","id","pageRowIdSets","Set","rowMaps","has","reduce","acc","rowSortedByKey","Object","keys","key","data","stringValue","JSON","stringify","cols"],"mappings":"sgBAUM,SAAUA,EAA+BC,GACrC,IAAAC,EAAWC,WACbC,EAAwBC,IAAtBC,EAAIF,EAAAE,KAAEC,EAAWH,EAAAG,YACnBC,EAAaC,IACbC,EAA8BC,IAA5BC,EAAWF,EAAAE,YAAEC,EAAUH,EAAAG,WACvBC,EAA2BC,2BAClBC,EAAoBC,YACpBC,EAAmBC,YAC9BC,EACJC,IADMC,EAAqBF,EAAAE,sBAAEC,EAAqBH,EAAAG,sBAG9CC,EAAeC,GACnB,WAAM,OAAAvB,EAAOD,EAAMyB,KAAK,GACxB,CAACxB,EAAQM,EAAYP,EAAMyB,KAAKC,SAGlCC,GAAU,WACRhB,EAAYY,EAAaG,OAC3B,GAAG,CAACH,EAAaG,SAEjB,IAAME,EAAaJ,GAAQ,WACzB,OAAKxB,EAAM6B,SAIJ7B,EAAMyB,KAAKxB,QAAO,SAAC6B,GAAG,IAAA3B,EAAK,eAAAA,EAAAH,EAAM6B,+BAAUE,QAAQD,EAAI,IAHrD,EAIV,GAAE,CAAC9B,EAAM6B,SAAU7B,EAAMyB,OAE1BE,GAAU,WACRd,EAAuB,CACrBmB,KAAM,MACNC,QAAS,CAAEC,eAAgBN,IAE/B,GAAG,CAACA,IAEJ,IAAMO,EAAaX,GACjB,WAAM,OAAAnB,EAAKkB,KACX,CAACA,EAAchB,IAGjBoB,GAAU,WACRrB,GACF,GAAG,CAACN,EAAMyB,OAEV,IAAMW,EAAWZ,GACf,WAAM,OAAAZ,EAAWuB,KACjB,CAACvB,EAAYuB,IAGTE,EAAab,GAAQ,WAAM,OAAAY,EAASE,KAAI,SAACR,GAAQ,OAAAA,EAAIS,EAAE,GAAC,GAAE,CAACH,IAC3DI,EAAgBhB,GAAQ,WAAM,OAAA,IAAIiB,IAAIJ,EAAW,GAAE,CAACA,IAEpDK,EAAUlB,GACd,WACE,OAAAxB,EAAMyB,KACHxB,QAAO,SAAC6B,GAAQ,OAAAU,EAAcG,IAAIb,EAAIS,OACtCK,QAAO,SAACC,EAAKf,GACZ,IAAMgB,EAAiBC,OAAOC,KAAKlB,GAChCzB,OACAuC,QAAO,SAACC,EAAKI,GAEZ,OADAJ,EAAII,GAAOnB,EAAImB,GACRJ,CACR,GAAE,CAA+C,GAMpD,OAJAA,EAAIf,EAAIS,IAAM,CACZW,KAAMJ,EACNK,YAAaC,KAAKC,UAAUP,IAEvBD,CACR,GAAE,CAA+E,EAAC,GACvF,CAAC7C,EAAMyB,KAAMe,IAiBf,OAdAb,GAAU,WACRN,EAAsBrB,EAAMsD,KAAK5B,OAClC,GAAE,CAAC1B,EAAMsD,KAAK5B,SAEfC,GAAU,WACRL,EAAsBe,EAAWX,OACnC,GAAG,CAACW,EAAWX,SAEfC,GAAU,WACR,IAAMF,EAAOY,EAAWC,KAAI,SAACC,GAAO,OAAAG,EAAQH,GAAIW,IAAI,IACpDjC,EAAeQ,GACfV,EAAgBU,EAClB,GAAG,CAACiB,IAEG,CACLY,KAAMtD,EAAMsD,KACZZ,QAAOA,EACPL,WAAUA,EAEd"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import React$1 from 'react';
|
|
2
3
|
|
|
3
4
|
interface Options {
|
|
4
5
|
/**
|
|
@@ -59,9 +60,13 @@ type TErrorValidation = {
|
|
|
59
60
|
} | {
|
|
60
61
|
type: "NOT_IN_OPTIONS";
|
|
61
62
|
options: string[];
|
|
63
|
+
} | {
|
|
64
|
+
type: "NOT_DATE";
|
|
65
|
+
} | {
|
|
66
|
+
type: "NOT_DATETIME";
|
|
62
67
|
});
|
|
63
68
|
|
|
64
|
-
type DataRecord = Record<string, string | number>;
|
|
69
|
+
type DataRecord = Record<string, string | number | Date>;
|
|
65
70
|
type DataObject<T extends DataRecord> = T & {
|
|
66
71
|
id: number | string;
|
|
67
72
|
};
|
|
@@ -69,7 +74,7 @@ type TStringCellEditingCondition<T extends DataRecord> = ({
|
|
|
69
74
|
type: "string";
|
|
70
75
|
} & ({
|
|
71
76
|
editable?: false;
|
|
72
|
-
render?: (value: string, row: DataObject<T>) => React.ReactNode;
|
|
77
|
+
render?: (value: string, row: DataObject<T>) => React$1.ReactNode;
|
|
73
78
|
} | {
|
|
74
79
|
editable: true;
|
|
75
80
|
onCellBlur: (key: keyof T, value: string, current: DataObject<T>, completeEditing: () => void) => void;
|
|
@@ -79,7 +84,7 @@ type TNumberCellEditingCondition<T extends DataRecord> = ({
|
|
|
79
84
|
type: "number";
|
|
80
85
|
} & ({
|
|
81
86
|
editable?: false;
|
|
82
|
-
render?: (value: number, row: DataObject<T>) => React.ReactNode;
|
|
87
|
+
render?: (value: number, row: DataObject<T>) => React$1.ReactNode;
|
|
83
88
|
} | {
|
|
84
89
|
editable: true;
|
|
85
90
|
onCellBlur: (key: keyof T, value: number, current: DataObject<T>, completeEditing: () => void) => void;
|
|
@@ -90,13 +95,25 @@ type TSelectCellEditingCondition<T extends DataRecord> = ({
|
|
|
90
95
|
options: Options[];
|
|
91
96
|
} & ({
|
|
92
97
|
editable?: false;
|
|
93
|
-
render?: (value: string, row: DataObject<T>) => React.ReactNode;
|
|
98
|
+
render?: (value: string, row: DataObject<T>) => React$1.ReactNode;
|
|
94
99
|
} | {
|
|
95
100
|
editable: true;
|
|
96
101
|
allowEmpty?: boolean;
|
|
97
102
|
onCellBlur: (key: keyof T, value: string, current: DataObject<T>, completeEditing: () => void) => void;
|
|
98
103
|
}));
|
|
99
|
-
type
|
|
104
|
+
type TDateCellEditingCondition<T extends DataRecord> = ({
|
|
105
|
+
type: "date";
|
|
106
|
+
render: (value: Date) => string | React$1.ReactNode;
|
|
107
|
+
} & {
|
|
108
|
+
editable?: false;
|
|
109
|
+
});
|
|
110
|
+
type TDatetimeCellEditingCondition<T extends DataRecord> = ({
|
|
111
|
+
type: "datetime";
|
|
112
|
+
render: (value: Date) => string | React$1.ReactNode;
|
|
113
|
+
} & {
|
|
114
|
+
editable?: false;
|
|
115
|
+
});
|
|
116
|
+
type TCellEditingCondition<T extends DataRecord> = TStringCellEditingCondition<T> | TNumberCellEditingCondition<T> | TSelectCellEditingCondition<T> | TDateCellEditingCondition<T> | TDatetimeCellEditingCondition<T>;
|
|
100
117
|
type TColumnProperty<T extends DataRecord> = {
|
|
101
118
|
key: keyof T;
|
|
102
119
|
label?: string;
|