@teppen/react-ui 0.5.1 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";var e=require("react/jsx-runtime"),t=require("react"),n=require("./edit-icon.js"),r=require("./cancel-icon.js"),o=t.forwardRef((function(t,n){return e.jsxs("div",{className:"flex justify-between gap-1 w-full items-center",children:[e.jsx("input",{ref:n,className:"w-full py-1 px-2",type:"text",value:t.value,onChange:t.onChange,onBlur:t.onBlur,onKeyUp:function(e){e.preventDefault(),"Enter"===e.key?e.target.blur():"Escape"===e.key&&(t.reset(),t.endEditing())}}),e.jsx("button",{onMouseDown:function(e){e.preventDefault(),t.reset(),t.endEditing()},children:e.jsx(r.CancelIcon,{size:16})})]})})),c=t.forwardRef((function(n,r){var c=t.useState(n.currentRecord[n.columnKey]),i=c[0],l=c[1];return e.jsx(o,{ref:r,value:i,onChange:function(e){e.preventDefault(),l(e.target.value)},onBlur:function(e){if(e.preventDefault(),i!==n.currentRecord[n.columnKey])if(n.onCellBlur){if(!function(){var e,t,r;return(null===(e=n.constraints)||void 0===e?void 0:e.maxLength)&&i.length>n.constraints.maxLength?(alert("最大文字数(".concat(n.constraints.maxLength,")を超過しています。(現在").concat(i.length,"文字)")),!1):(null===(t=n.constraints)||void 0===t?void 0:t.minLength)&&i.length<n.constraints.minLength?(alert("最小文字数(".concat(n.constraints.minLength,")を下回っています。(現在").concat(i.length,"文字)")),!1):!((null===(r=n.constraints)||void 0===r?void 0:r.pattern)&&!new RegExp(n.constraints.pattern).test(i)&&(alert("パターンに一致しません。(パターン".concat(n.constraints.pattern,")")),1))}())return void setTimeout((function(){e.target.focus()}),100);n.onCellBlur(n.columnKey,i,n.currentRecord,n.compEditing)}else l(n.currentRecord[n.columnKey]),n.compEditing();else n.compEditing()},reset:function(){return l(n.currentRecord[n.columnKey])},endEditing:n.compEditing})})),i=t.forwardRef((function(n,r){var c=t.useState(n.currentRecord[n.columnKey].toString()),i=c[0],l=c[1];return e.jsx(o,{ref:r,value:i,onChange:function(e){e.preventDefault(),""!==e.target.value?"-"!==e.target.value&&"0-"!==e.target.value?e.target.value.match(/^-?[0-9]+\.$/)?l(e.target.value):isNaN(Number(e.target.value))||l(Number(e.target.value).toString()):l("-0"):l("0")},onBlur:function(e){if(e.preventDefault(),Number(i)!==n.currentRecord[n.columnKey])if(n.onCellBlur){if(!function(){var e,t,r=parseInt(i);return(null===(e=n.constraints)||void 0===e?void 0:e.max)&&r>n.constraints.max?(alert("最大値(".concat(n.constraints.max,")を超過しています。(入力値:").concat(r,")")),!1):!((null===(t=n.constraints)||void 0===t?void 0:t.min)&&r<n.constraints.min&&(alert("最小値(".concat(n.constraints.min,")を下回っています。(入力値:").concat(r,")")),1))}())return void setTimeout((function(){e.target.focus()}),100);n.onCellBlur(n.columnKey,Number(i),n.currentRecord,n.compEditing)}else l(n.currentRecord[n.columnKey].toString()),n.compEditing();else n.compEditing()},reset:function(){return l(n.currentRecord[n.columnKey].toString())},endEditing:n.compEditing})})),l=t.memo((function(r){var o=t.useState(!1),l=o[0],u=o[1],a=t.useRef(null),s=t.useCallback((function(){u(!1)}),[u]);return t.useEffect((function(){var e;l&&(null===(e=a.current)||void 0===e||e.focus())}),[l]),e.jsx("td",{children:e.jsxs("div",{className:"relative",children:[e.jsxs("div",{className:"flex items-center gap-3 w-fit p-2 cursor-default ".concat(l?"opacity-0":""),onClick:function(e){e.preventDefault(),e.stopPropagation()},children:[e.jsx("div",{onDoubleClick:function(e){e.preventDefault(),r.editable&&u(!0)},children:e.jsx("p",{className:"text-left",children:r.children})}),r.editable&&e.jsx("button",{className:"w-fit h-fit p-1 rounded-full text-gray-500 hover:bg-gray-200",onClick:function(e){e.preventDefault(),r.editable&&u(!0)},children:e.jsx(n.EditIcon,{size:12})})]}),l&&e.jsxs("div",{className:"absolute top-0 left-0 w-full h-full grid place-items-center z-10 pr-2",onClick:function(e){e.preventDefault(),e.stopPropagation()},children:["string"===r.type&&e.jsx(c,{ref:a,columnKey:r.columnKey,currentRecord:r.currentRecord,compEditing:s,type:"string",onCellBlur:r.onCellBlur,constraints:r.constraints}),"number"===r.type&&e.jsx(i,{ref:a,columnKey:r.columnKey,currentRecord:r.currentRecord,compEditing:s,type:"number",onCellBlur:r.onCellBlur,constraints:r.constraints})]})]})})}));exports.TableCell=l;
|
|
2
2
|
//# sourceMappingURL=cell.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cell.js","sources":["../../../../src/table/cell.tsx"],"sourcesContent":["import {\n memo,\n useEffect,\n useRef,\n useState,\n forwardRef,\n useCallback,\n} from \"react\";\nimport {\n DataObject,\n TCellEditingCondition,\n TNumberCellEditingCondition,\n TStringCellEditingCondition,\n} from \"./type\";\nimport { EditIcon } from \"./edit-icon\";\nimport { CancelIcon } from \"./cancel-icon\";\n\ntype TPropsCell = {\n currentRecord: DataObject;\n columnKey: string;\n children: string | number;\n} & TCellEditingCondition;\n\nconst CellInput = forwardRef(function CI<T extends string | number>(\n props: {\n value: T;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onBlur: (e: React.FocusEvent<HTMLInputElement>) => void;\n reset: () => void;\n endEditing: () => void;\n },\n ref: React.ForwardedRef<HTMLInputElement>\n) {\n return (\n <div className=\"flex justify-between gap-1 w-full items-center\">\n <input\n ref={ref}\n className=\"w-full py-1 px-2\"\n type=\"text\"\n value={props.value}\n onChange={props.onChange}\n onBlur={props.onBlur}\n onKeyUp={(e: React.KeyboardEvent<HTMLInputElement>) => {\n e.preventDefault();\n if (e.key === \"Enter\") {\n (e.target as HTMLInputElement).blur();\n } else if (e.key === \"Escape\") {\n props.reset();\n props.endEditing();\n }\n }}\n />\n <button\n onMouseDown={(e) => {\n e.preventDefault();\n props.reset();\n props.endEditing();\n }}\n >\n <CancelIcon size={16} />\n </button>\n </div>\n );\n});\n\nconst StringCellInput = forwardRef(function SI(\n props: {\n columnKey: string;\n currentRecord: DataObject;\n compEditing: () => void;\n } & TStringCellEditingCondition,\n ref: React.ForwardedRef<HTMLInputElement>\n) {\n const [value, setValue] = useState(\n props.currentRecord[props.columnKey] as string\n );\n\n const validate = () => {\n if (props.constraints?.maxLength) {\n if (value.length > props.constraints.maxLength) {\n alert(\"over max length\");\n return false;\n }\n }\n if (props.constraints?.minLength) {\n if (value.length < props.constraints.minLength) {\n alert(\"under min length\");\n return false;\n }\n }\n if (props.constraints?.pattern) {\n if (!new RegExp(props.constraints.pattern).test(value)) {\n alert(\"not match pattern\");\n return false;\n }\n }\n return true;\n };\n\n return (\n <CellInput\n ref={ref}\n value={value}\n onChange={(e) => {\n e.preventDefault();\n setValue(e.target.value);\n }}\n onBlur={(e) => {\n e.preventDefault();\n\n if (value === props.currentRecord[props.columnKey]) {\n props.compEditing();\n return;\n }\n\n if (props.onCellBlur) {\n if (!validate()) {\n setTimeout(() => {\n e.target.focus();\n }, 100);\n return;\n }\n\n props.onCellBlur(\n props.columnKey,\n value,\n props.currentRecord,\n props.compEditing\n );\n } else {\n setValue(props.currentRecord[props.columnKey]);\n props.compEditing();\n }\n }}\n reset={() => setValue(props.currentRecord[props.columnKey])}\n endEditing={props.compEditing}\n />\n );\n});\n\nconst NumberCellInput = forwardRef(function SI(\n props: {\n columnKey: string;\n currentRecord: DataObject;\n compEditing: () => void;\n } & TNumberCellEditingCondition,\n ref: React.ForwardedRef<HTMLInputElement>\n) {\n const [value, setValue] = useState(\n (props.currentRecord[props.columnKey] as number).toString()\n );\n\n const validate = () => {\n const v = parseInt(value);\n\n if (props.constraints?.max) {\n if (v > props.constraints.max) {\n alert(\"over max\");\n return false;\n }\n }\n\n if (props.constraints?.min) {\n if (v < props.constraints.min) {\n alert(\"under min\");\n return false;\n }\n }\n\n return true;\n };\n\n return (\n <CellInput\n ref={ref}\n value={value}\n onChange={(e) => {\n e.preventDefault();\n\n if (e.target.value === \"\") {\n setValue(\"0\");\n return;\n }\n\n if (e.target.value === \"-\") {\n setValue(\"-0\");\n return;\n }\n\n if (e.target.value.match(/^-?[0-9]+\\.$/)) {\n setValue(e.target.value);\n return;\n }\n\n if (isNaN(Number(e.target.value))) {\n return;\n }\n\n setValue(e.target.value);\n }}\n onBlur={(e) => {\n e.preventDefault();\n\n if (Number(value) === props.currentRecord[props.columnKey]) {\n props.compEditing();\n return;\n }\n\n if (props.onCellBlur) {\n if (!validate()) {\n setTimeout(() => {\n e.target.focus();\n }, 100);\n return;\n }\n\n props.onCellBlur(\n props.columnKey,\n Number(value),\n props.currentRecord,\n props.compEditing\n );\n } else {\n setValue((props.currentRecord[props.columnKey] as number).toString());\n props.compEditing();\n }\n }}\n reset={() =>\n setValue((props.currentRecord[props.columnKey] as number).toString())\n }\n endEditing={props.compEditing}\n />\n );\n});\n\nexport const TableCell = memo(function TC(props: TPropsCell) {\n const [isEditing, setIsEditing] = useState(false);\n const ref = useRef<HTMLInputElement>(null);\n\n const compEditing = useCallback(() => {\n setIsEditing(false);\n }, [setIsEditing]);\n\n useEffect(() => {\n if (isEditing) {\n ref.current?.focus();\n }\n }, [isEditing]);\n\n return (\n <td>\n <div className=\"relative\">\n <div\n className={`flex items-center gap-3 w-fit p-2 cursor-default ${\n isEditing ? \"opacity-0\" : \"\"\n }`}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <div\n onDoubleClick={(e) => {\n e.preventDefault();\n if (props.editable) {\n setIsEditing(true);\n }\n }}\n >\n <p className=\"text-left\">{props.children}</p>\n </div>\n {props.editable && (\n <button\n className=\"w-fit h-fit p-1 rounded-full text-gray-500 hover:bg-gray-200\"\n onClick={(e) => {\n e.preventDefault();\n if (props.editable) {\n setIsEditing(true);\n }\n }}\n >\n <EditIcon size={12} />\n </button>\n )}\n </div>\n {isEditing && (\n <div\n className=\"absolute top-0 left-0 w-full h-full grid place-items-center z-10 pr-2\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n {props.type === \"string\" && (\n <StringCellInput\n ref={ref}\n columnKey={props.columnKey}\n currentRecord={props.currentRecord}\n compEditing={compEditing}\n type={\"string\"}\n onCellBlur={props.onCellBlur}\n constraints={props.constraints}\n />\n )}\n {props.type === \"number\" && (\n <NumberCellInput\n ref={ref}\n columnKey={props.columnKey}\n currentRecord={props.currentRecord}\n compEditing={compEditing}\n type={\"number\"}\n onCellBlur={props.onCellBlur}\n constraints={props.constraints}\n />\n )}\n </div>\n )}\n </div>\n </td>\n );\n});\n"],"names":["CellInput","forwardRef","props","ref","_jsxs","jsxs","className","children","_jsx","type","value","onChange","onBlur","onKeyUp","e","preventDefault","key","target","blur","reset","endEditing","onMouseDown","CancelIcon","size","StringCellInput","_a","useState","currentRecord","columnKey","setValue","jsx","onCellBlur","constraints","maxLength","length","alert","_b","minLength","_c","pattern","RegExp","test","validate","setTimeout","focus","compEditing","NumberCellInput","toString","match","isNaN","Number","v","parseInt","max","min","TableCell","memo","isEditing","setIsEditing","useRef","useCallback","useEffect","current","concat","onClick","stopPropagation","onDoubleClick","editable","EditIcon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cell.js","sources":["../../../../src/table/cell.tsx"],"sourcesContent":["import {\n memo,\n useEffect,\n useRef,\n useState,\n forwardRef,\n useCallback,\n} from \"react\";\nimport {\n DataObject,\n TCellEditingCondition,\n TNumberCellEditingCondition,\n TStringCellEditingCondition,\n} from \"./type\";\nimport { EditIcon } from \"./edit-icon\";\nimport { CancelIcon } from \"./cancel-icon\";\n\ntype TPropsCell = {\n currentRecord: DataObject;\n columnKey: string;\n children: string | number;\n} & TCellEditingCondition;\n\nconst CellInput = forwardRef(function CI<T extends string | number>(\n props: {\n value: T;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onBlur: (e: React.FocusEvent<HTMLInputElement>) => void;\n reset: () => void;\n endEditing: () => void;\n },\n ref: React.ForwardedRef<HTMLInputElement>\n) {\n return (\n <div className=\"flex justify-between gap-1 w-full items-center\">\n <input\n ref={ref}\n className=\"w-full py-1 px-2\"\n type=\"text\"\n value={props.value}\n onChange={props.onChange}\n onBlur={props.onBlur}\n onKeyUp={(e: React.KeyboardEvent<HTMLInputElement>) => {\n e.preventDefault();\n if (e.key === \"Enter\") {\n (e.target as HTMLInputElement).blur();\n } else if (e.key === \"Escape\") {\n props.reset();\n props.endEditing();\n }\n }}\n />\n <button\n onMouseDown={(e) => {\n e.preventDefault();\n props.reset();\n props.endEditing();\n }}\n >\n <CancelIcon size={16} />\n </button>\n </div>\n );\n});\n\nconst StringCellInput = forwardRef(function SI(\n props: {\n columnKey: string;\n currentRecord: DataObject;\n compEditing: () => void;\n } & TStringCellEditingCondition,\n ref: React.ForwardedRef<HTMLInputElement>\n) {\n const [value, setValue] = useState(\n props.currentRecord[props.columnKey] as string\n );\n\n const validate = () => {\n if (props.constraints?.maxLength) {\n if (value.length > props.constraints.maxLength) {\n alert(\n `最大文字数(${props.constraints.maxLength})を超過しています。(現在${value.length}文字)`\n );\n return false;\n }\n }\n if (props.constraints?.minLength) {\n if (value.length < props.constraints.minLength) {\n alert(\n `最小文字数(${props.constraints.minLength})を下回っています。(現在${value.length}文字)`\n );\n return false;\n }\n }\n if (props.constraints?.pattern) {\n if (!new RegExp(props.constraints.pattern).test(value)) {\n alert(`パターンに一致しません。(パターン${props.constraints.pattern})`);\n return false;\n }\n }\n return true;\n };\n\n return (\n <CellInput\n ref={ref}\n value={value}\n onChange={(e) => {\n e.preventDefault();\n setValue(e.target.value);\n }}\n onBlur={(e) => {\n e.preventDefault();\n\n if (value === props.currentRecord[props.columnKey]) {\n props.compEditing();\n return;\n }\n\n if (props.onCellBlur) {\n if (!validate()) {\n setTimeout(() => {\n e.target.focus();\n }, 100);\n return;\n }\n\n props.onCellBlur(\n props.columnKey,\n value,\n props.currentRecord,\n props.compEditing\n );\n } else {\n setValue(props.currentRecord[props.columnKey]);\n props.compEditing();\n }\n }}\n reset={() => setValue(props.currentRecord[props.columnKey])}\n endEditing={props.compEditing}\n />\n );\n});\n\nconst NumberCellInput = forwardRef(function SI(\n props: {\n columnKey: string;\n currentRecord: DataObject;\n compEditing: () => void;\n } & TNumberCellEditingCondition,\n ref: React.ForwardedRef<HTMLInputElement>\n) {\n const [value, setValue] = useState(\n (props.currentRecord[props.columnKey] as number).toString()\n );\n\n const validate = () => {\n const v = parseInt(value);\n\n if (props.constraints?.max) {\n if (v > props.constraints.max) {\n alert(\n `最大値(${props.constraints.max})を超過しています。(入力値:${v})`\n );\n return false;\n }\n }\n\n if (props.constraints?.min) {\n if (v < props.constraints.min) {\n alert(\n `最小値(${props.constraints.min})を下回っています。(入力値:${v})`\n );\n return false;\n }\n }\n\n return true;\n };\n\n return (\n <CellInput\n ref={ref}\n value={value}\n onChange={(e) => {\n e.preventDefault();\n\n if (e.target.value === \"\") {\n setValue(\"0\");\n return;\n }\n\n if (e.target.value === \"-\" || e.target.value === \"0-\") {\n setValue(\"-0\");\n return;\n }\n\n if (e.target.value.match(/^-?[0-9]+\\.$/)) {\n setValue(e.target.value);\n return;\n }\n\n if (isNaN(Number(e.target.value))) {\n return;\n }\n\n setValue(Number(e.target.value).toString());\n }}\n onBlur={(e) => {\n e.preventDefault();\n\n if (Number(value) === props.currentRecord[props.columnKey]) {\n props.compEditing();\n return;\n }\n\n if (props.onCellBlur) {\n if (!validate()) {\n setTimeout(() => {\n e.target.focus();\n }, 100);\n return;\n }\n\n props.onCellBlur(\n props.columnKey,\n Number(value),\n props.currentRecord,\n props.compEditing\n );\n } else {\n setValue((props.currentRecord[props.columnKey] as number).toString());\n props.compEditing();\n }\n }}\n reset={() =>\n setValue((props.currentRecord[props.columnKey] as number).toString())\n }\n endEditing={props.compEditing}\n />\n );\n});\n\nexport const TableCell = memo(function TC(props: TPropsCell) {\n const [isEditing, setIsEditing] = useState(false);\n const ref = useRef<HTMLInputElement>(null);\n\n const compEditing = useCallback(() => {\n setIsEditing(false);\n }, [setIsEditing]);\n\n useEffect(() => {\n if (isEditing) {\n ref.current?.focus();\n }\n }, [isEditing]);\n\n return (\n <td>\n <div className=\"relative\">\n <div\n className={`flex items-center gap-3 w-fit p-2 cursor-default ${\n isEditing ? \"opacity-0\" : \"\"\n }`}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <div\n onDoubleClick={(e) => {\n e.preventDefault();\n if (props.editable) {\n setIsEditing(true);\n }\n }}\n >\n <p className=\"text-left\">{props.children}</p>\n </div>\n {props.editable && (\n <button\n className=\"w-fit h-fit p-1 rounded-full text-gray-500 hover:bg-gray-200\"\n onClick={(e) => {\n e.preventDefault();\n if (props.editable) {\n setIsEditing(true);\n }\n }}\n >\n <EditIcon size={12} />\n </button>\n )}\n </div>\n {isEditing && (\n <div\n className=\"absolute top-0 left-0 w-full h-full grid place-items-center z-10 pr-2\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n {props.type === \"string\" && (\n <StringCellInput\n ref={ref}\n columnKey={props.columnKey}\n currentRecord={props.currentRecord}\n compEditing={compEditing}\n type={\"string\"}\n onCellBlur={props.onCellBlur}\n constraints={props.constraints}\n />\n )}\n {props.type === \"number\" && (\n <NumberCellInput\n ref={ref}\n columnKey={props.columnKey}\n currentRecord={props.currentRecord}\n compEditing={compEditing}\n type={\"number\"}\n onCellBlur={props.onCellBlur}\n constraints={props.constraints}\n />\n )}\n </div>\n )}\n </div>\n </td>\n );\n});\n"],"names":["CellInput","forwardRef","props","ref","_jsxs","jsxs","className","children","_jsx","type","value","onChange","onBlur","onKeyUp","e","preventDefault","key","target","blur","reset","endEditing","onMouseDown","CancelIcon","size","StringCellInput","_a","useState","currentRecord","columnKey","setValue","jsx","onCellBlur","constraints","maxLength","length","alert","concat","_b","minLength","_c","pattern","RegExp","test","validate","setTimeout","focus","compEditing","NumberCellInput","toString","match","isNaN","Number","v","parseInt","max","min","TableCell","memo","isEditing","setIsEditing","useRef","useCallback","useEffect","current","onClick","stopPropagation","onDoubleClick","editable","EditIcon"],"mappings":"6HAuBMA,EAAYC,EAAAA,YAAW,SAC3BC,EAOAC,GAEA,OACEC,EAAKC,KAAA,MAAA,CAAAC,UAAU,iDAAgDC,SAAA,CAC7DC,eACEL,IAAKA,EACLG,UAAU,mBACVG,KAAK,OACLC,MAAOR,EAAMQ,MACbC,SAAUT,EAAMS,SAChBC,OAAQV,EAAMU,OACdC,QAAS,SAACC,GACRA,EAAEC,iBACY,UAAVD,EAAEE,IACHF,EAAEG,OAA4BC,OACZ,WAAVJ,EAAEE,MACXd,EAAMiB,QACNjB,EAAMkB,aAEV,IAEFZ,EAAAA,IAAA,SAAA,CACEa,YAAa,SAACP,GACZA,EAAEC,iBACFb,EAAMiB,QACNjB,EAAMkB,cACPb,SAEDC,MAACc,EAAAA,WAAW,CAAAC,KAAM,SAI1B,IAEMC,EAAkBvB,EAAAA,YAAW,SACjCC,EAKAC,GAEM,IAAAsB,EAAoBC,EAAAA,SACxBxB,EAAMyB,cAAczB,EAAM0B,YADrBlB,OAAOmB,OA8Bd,OACErB,EAAAsB,IAAC9B,EAAS,CACRG,IAAKA,EACLO,MAAOA,EACPC,SAAU,SAACG,GACTA,EAAEC,iBACFc,EAASf,EAAEG,OAAOP,MACpB,EACAE,OAAQ,SAACE,GAGP,GAFAA,EAAEC,iBAEEL,IAAUR,EAAMyB,cAAczB,EAAM0B,WAKxC,GAAI1B,EAAM6B,WAAY,CACpB,IA3CS,qBACf,OAAuB,UAAnB7B,EAAM8B,mBAAa,IAAAP,OAAA,EAAAA,EAAAQ,YACjBvB,EAAMwB,OAAShC,EAAM8B,YAAYC,WACnCE,MACE,SAAAC,OAASlC,EAAM8B,YAAYC,UAAS,iBAAAG,OAAgB1B,EAAMwB,OAAM,SAE3D,IAGY,UAAnBhC,EAAM8B,mBAAa,IAAAK,OAAA,EAAAA,EAAAC,YACjB5B,EAAMwB,OAAShC,EAAM8B,YAAYM,WACnCH,MACE,SAAAC,OAASlC,EAAM8B,YAAYM,UAAS,iBAAAF,OAAgB1B,EAAMwB,OAAM,SAE3D,MAGY,UAAnBhC,EAAM8B,mBAAa,IAAAO,OAAA,EAAAA,EAAAC,WAChB,IAAIC,OAAOvC,EAAM8B,YAAYQ,SAASE,KAAKhC,KAC9CyB,MAAM,2BAAoBjC,EAAM8B,YAAYQ,QAAU,MAC/C,GAIb,CAmBaG,GAIH,YAHAC,YAAW,WACT9B,EAAEG,OAAO4B,OACV,GAAE,KAIL3C,EAAM6B,WACJ7B,EAAM0B,UACNlB,EACAR,EAAMyB,cACNzB,EAAM4C,YAET,MACCjB,EAAS3B,EAAMyB,cAAczB,EAAM0B,YACnC1B,EAAM4C,mBApBN5C,EAAM4C,aAsBT,EACD3B,MAAO,WAAM,OAAAU,EAAS3B,EAAMyB,cAAczB,EAAM0B,WAAnC,EACbR,WAAYlB,EAAM4C,aAGxB,IAEMC,EAAkB9C,EAAAA,YAAW,SACjCC,EAKAC,GAEM,IAAAsB,EAAoBC,EAAAA,SACvBxB,EAAMyB,cAAczB,EAAM0B,WAAsBoB,YAD5CtC,EAAKe,EAAA,GAAEI,EAAQJ,EAAA,GA4BtB,OACEjB,EAAAsB,IAAC9B,EAAS,CACRG,IAAKA,EACLO,MAAOA,EACPC,SAAU,SAACG,GACTA,EAAEC,iBAEqB,KAAnBD,EAAEG,OAAOP,MAKU,MAAnBI,EAAEG,OAAOP,OAAoC,OAAnBI,EAAEG,OAAOP,MAKnCI,EAAEG,OAAOP,MAAMuC,MAAM,gBACvBpB,EAASf,EAAEG,OAAOP,OAIhBwC,MAAMC,OAAOrC,EAAEG,OAAOP,SAI1BmB,EAASsB,OAAOrC,EAAEG,OAAOP,OAAOsC,YAb9BnB,EAAS,MALTA,EAAS,IAmBb,EACAjB,OAAQ,SAACE,GAGP,GAFAA,EAAEC,iBAEEoC,OAAOzC,KAAWR,EAAMyB,cAAczB,EAAM0B,WAKhD,GAAI1B,EAAM6B,WAAY,CACpB,IA7DS,mBACTqB,EAAIC,SAAS3C,GAEnB,OAAuB,UAAnBR,EAAM8B,mBAAa,IAAAP,OAAA,EAAAA,EAAA6B,MACjBF,EAAIlD,EAAM8B,YAAYsB,KACxBnB,MACE,OAAOC,OAAAlC,EAAM8B,YAAYsB,IAAqB,mBAAAlB,OAAAgB,EAAI,OAE7C,MAIY,UAAnBlD,EAAM8B,mBAAa,IAAAK,OAAA,EAAAA,EAAAkB,MACjBH,EAAIlD,EAAM8B,YAAYuB,MACxBpB,MACE,OAAOC,OAAAlC,EAAM8B,YAAYuB,IAAqB,mBAAAnB,OAAAgB,EAAI,MAE7C,GAKb,CAuCaT,GAIH,YAHAC,YAAW,WACT9B,EAAEG,OAAO4B,OACV,GAAE,KAIL3C,EAAM6B,WACJ7B,EAAM0B,UACNuB,OAAOzC,GACPR,EAAMyB,cACNzB,EAAM4C,YAET,MACCjB,EAAU3B,EAAMyB,cAAczB,EAAM0B,WAAsBoB,YAC1D9C,EAAM4C,mBApBN5C,EAAM4C,aAsBT,EACD3B,MAAO,WACL,OAAAU,EAAU3B,EAAMyB,cAAczB,EAAM0B,WAAsBoB,WAAW,EAEvE5B,WAAYlB,EAAM4C,aAGxB,IAEaU,EAAYC,EAAIA,MAAC,SAAYvD,GAClC,IAAAuB,EAA4BC,EAAAA,UAAS,GAApCgC,EAASjC,EAAA,GAAEkC,EAAYlC,EAAA,GACxBtB,EAAMyD,SAAyB,MAE/Bd,EAAce,EAAAA,aAAY,WAC9BF,GAAa,EACf,GAAG,CAACA,IAQJ,OANAG,EAAAA,WAAU,iBACJJ,IACW,QAAbjC,EAAAtB,EAAI4D,eAAS,IAAAtC,GAAAA,EAAAoB,QAEjB,GAAG,CAACa,IAGFlD,EACEsB,IAAA,KAAA,CAAAvB,SAAAH,EAAAA,KAAA,MAAA,CAAKE,UAAU,WACbC,SAAA,CAAAH,EAAAA,KAAA,MAAA,CACEE,UAAW,oDACT8B,OAAAsB,EAAY,YAAc,IAE5BM,QAAS,SAAClD,GACRA,EAAEC,iBACFD,EAAEmD,iBACJ,EAEA1D,SAAA,CAAAC,EAAAsB,IAAA,MAAA,CACEoC,cAAe,SAACpD,GACdA,EAAEC,iBACEb,EAAMiE,UACRR,GAAa,IAEhBpD,SAEDC,EAAGsB,IAAA,IAAA,CAAAxB,UAAU,qBAAaJ,EAAMK,aAEjCL,EAAMiE,UACL3D,EAAAA,IACE,SAAA,CAAAF,UAAU,+DACV0D,QAAS,SAAClD,GACRA,EAAEC,iBACEb,EAAMiE,UACRR,GAAa,IAEhBpD,SAEDC,EAAAA,IAAC4D,EAAQA,SAAA,CAAC7C,KAAM,UAIrBmC,GACCtD,EAAAC,KAAA,MAAA,CACEC,UAAU,wEACV0D,QAAS,SAAClD,GACRA,EAAEC,iBACFD,EAAEmD,iBACH,EAAA1D,SAAA,CAEe,WAAfL,EAAMO,MACLD,EAAAsB,IAACN,EAAe,CACdrB,IAAKA,EACLyB,UAAW1B,EAAM0B,UACjBD,cAAezB,EAAMyB,cACrBmB,YAAaA,EACbrC,KAAM,SACNsB,WAAY7B,EAAM6B,WAClBC,YAAa9B,EAAM8B,cAGP,WAAf9B,EAAMO,MACLD,EAAAA,IAACuC,EAAe,CACd5C,IAAKA,EACLyB,UAAW1B,EAAM0B,UACjBD,cAAezB,EAAMyB,cACrBmB,YAAaA,EACbrC,KAAM,SACNsB,WAAY7B,EAAM6B,WAClBC,YAAa9B,EAAM8B,qBAQnC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as
|
|
1
|
+
import{jsxs as n,jsx as t}from"react/jsx-runtime";import{forwardRef as e,useState as r,memo as o,useRef as c,useCallback as i,useEffect as l}from"react";import{EditIcon as u}from"./edit-icon.js";import{CancelIcon as a}from"./cancel-icon.js";var s=e((function(e,r){return n("div",{className:"flex justify-between gap-1 w-full items-center",children:[t("input",{ref:r,className:"w-full py-1 px-2",type:"text",value:e.value,onChange:e.onChange,onBlur:e.onBlur,onKeyUp:function(n){n.preventDefault(),"Enter"===n.key?n.target.blur():"Escape"===n.key&&(e.reset(),e.endEditing())}}),t("button",{onMouseDown:function(n){n.preventDefault(),e.reset(),e.endEditing()},children:t(a,{size:16})})]})})),d=e((function(n,e){var o=r(n.currentRecord[n.columnKey]),c=o[0],i=o[1];return t(s,{ref:e,value:c,onChange:function(n){n.preventDefault(),i(n.target.value)},onBlur:function(t){if(t.preventDefault(),c!==n.currentRecord[n.columnKey])if(n.onCellBlur){if(!function(){var t,e,r;return(null===(t=n.constraints)||void 0===t?void 0:t.maxLength)&&c.length>n.constraints.maxLength?(alert("最大文字数(".concat(n.constraints.maxLength,")を超過しています。(現在").concat(c.length,"文字)")),!1):(null===(e=n.constraints)||void 0===e?void 0:e.minLength)&&c.length<n.constraints.minLength?(alert("最小文字数(".concat(n.constraints.minLength,")を下回っています。(現在").concat(c.length,"文字)")),!1):!((null===(r=n.constraints)||void 0===r?void 0:r.pattern)&&!new RegExp(n.constraints.pattern).test(c)&&(alert("パターンに一致しません。(パターン".concat(n.constraints.pattern,")")),1))}())return void setTimeout((function(){t.target.focus()}),100);n.onCellBlur(n.columnKey,c,n.currentRecord,n.compEditing)}else i(n.currentRecord[n.columnKey]),n.compEditing();else n.compEditing()},reset:function(){return i(n.currentRecord[n.columnKey])},endEditing:n.compEditing})})),f=e((function(n,e){var o=r(n.currentRecord[n.columnKey].toString()),c=o[0],i=o[1];return t(s,{ref:e,value:c,onChange:function(n){n.preventDefault(),""!==n.target.value?"-"!==n.target.value&&"0-"!==n.target.value?n.target.value.match(/^-?[0-9]+\.$/)?i(n.target.value):isNaN(Number(n.target.value))||i(Number(n.target.value).toString()):i("-0"):i("0")},onBlur:function(t){if(t.preventDefault(),Number(c)!==n.currentRecord[n.columnKey])if(n.onCellBlur){if(!function(){var t,e,r=parseInt(c);return(null===(t=n.constraints)||void 0===t?void 0:t.max)&&r>n.constraints.max?(alert("最大値(".concat(n.constraints.max,")を超過しています。(入力値:").concat(r,")")),!1):!((null===(e=n.constraints)||void 0===e?void 0:e.min)&&r<n.constraints.min&&(alert("最小値(".concat(n.constraints.min,")を下回っています。(入力値:").concat(r,")")),1))}())return void setTimeout((function(){t.target.focus()}),100);n.onCellBlur(n.columnKey,Number(c),n.currentRecord,n.compEditing)}else i(n.currentRecord[n.columnKey].toString()),n.compEditing();else n.compEditing()},reset:function(){return i(n.currentRecord[n.columnKey].toString())},endEditing:n.compEditing})})),m=o((function(e){var o=r(!1),a=o[0],s=o[1],m=c(null),g=i((function(){s(!1)}),[s]);return l((function(){var n;a&&(null===(n=m.current)||void 0===n||n.focus())}),[a]),t("td",{children:n("div",{className:"relative",children:[n("div",{className:"flex items-center gap-3 w-fit p-2 cursor-default ".concat(a?"opacity-0":""),onClick:function(n){n.preventDefault(),n.stopPropagation()},children:[t("div",{onDoubleClick:function(n){n.preventDefault(),e.editable&&s(!0)},children:t("p",{className:"text-left",children:e.children})}),e.editable&&t("button",{className:"w-fit h-fit p-1 rounded-full text-gray-500 hover:bg-gray-200",onClick:function(n){n.preventDefault(),e.editable&&s(!0)},children:t(u,{size:12})})]}),a&&n("div",{className:"absolute top-0 left-0 w-full h-full grid place-items-center z-10 pr-2",onClick:function(n){n.preventDefault(),n.stopPropagation()},children:["string"===e.type&&t(d,{ref:m,columnKey:e.columnKey,currentRecord:e.currentRecord,compEditing:g,type:"string",onCellBlur:e.onCellBlur,constraints:e.constraints}),"number"===e.type&&t(f,{ref:m,columnKey:e.columnKey,currentRecord:e.currentRecord,compEditing:g,type:"number",onCellBlur:e.onCellBlur,constraints:e.constraints})]})]})})}));export{m as TableCell};
|
|
2
2
|
//# sourceMappingURL=cell.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cell.js","sources":["../../../../src/table/cell.tsx"],"sourcesContent":["import {\n memo,\n useEffect,\n useRef,\n useState,\n forwardRef,\n useCallback,\n} from \"react\";\nimport {\n DataObject,\n TCellEditingCondition,\n TNumberCellEditingCondition,\n TStringCellEditingCondition,\n} from \"./type\";\nimport { EditIcon } from \"./edit-icon\";\nimport { CancelIcon } from \"./cancel-icon\";\n\ntype TPropsCell = {\n currentRecord: DataObject;\n columnKey: string;\n children: string | number;\n} & TCellEditingCondition;\n\nconst CellInput = forwardRef(function CI<T extends string | number>(\n props: {\n value: T;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onBlur: (e: React.FocusEvent<HTMLInputElement>) => void;\n reset: () => void;\n endEditing: () => void;\n },\n ref: React.ForwardedRef<HTMLInputElement>\n) {\n return (\n <div className=\"flex justify-between gap-1 w-full items-center\">\n <input\n ref={ref}\n className=\"w-full py-1 px-2\"\n type=\"text\"\n value={props.value}\n onChange={props.onChange}\n onBlur={props.onBlur}\n onKeyUp={(e: React.KeyboardEvent<HTMLInputElement>) => {\n e.preventDefault();\n if (e.key === \"Enter\") {\n (e.target as HTMLInputElement).blur();\n } else if (e.key === \"Escape\") {\n props.reset();\n props.endEditing();\n }\n }}\n />\n <button\n onMouseDown={(e) => {\n e.preventDefault();\n props.reset();\n props.endEditing();\n }}\n >\n <CancelIcon size={16} />\n </button>\n </div>\n );\n});\n\nconst StringCellInput = forwardRef(function SI(\n props: {\n columnKey: string;\n currentRecord: DataObject;\n compEditing: () => void;\n } & TStringCellEditingCondition,\n ref: React.ForwardedRef<HTMLInputElement>\n) {\n const [value, setValue] = useState(\n props.currentRecord[props.columnKey] as string\n );\n\n const validate = () => {\n if (props.constraints?.maxLength) {\n if (value.length > props.constraints.maxLength) {\n alert(\"over max length\");\n return false;\n }\n }\n if (props.constraints?.minLength) {\n if (value.length < props.constraints.minLength) {\n alert(\"under min length\");\n return false;\n }\n }\n if (props.constraints?.pattern) {\n if (!new RegExp(props.constraints.pattern).test(value)) {\n alert(\"not match pattern\");\n return false;\n }\n }\n return true;\n };\n\n return (\n <CellInput\n ref={ref}\n value={value}\n onChange={(e) => {\n e.preventDefault();\n setValue(e.target.value);\n }}\n onBlur={(e) => {\n e.preventDefault();\n\n if (value === props.currentRecord[props.columnKey]) {\n props.compEditing();\n return;\n }\n\n if (props.onCellBlur) {\n if (!validate()) {\n setTimeout(() => {\n e.target.focus();\n }, 100);\n return;\n }\n\n props.onCellBlur(\n props.columnKey,\n value,\n props.currentRecord,\n props.compEditing\n );\n } else {\n setValue(props.currentRecord[props.columnKey]);\n props.compEditing();\n }\n }}\n reset={() => setValue(props.currentRecord[props.columnKey])}\n endEditing={props.compEditing}\n />\n );\n});\n\nconst NumberCellInput = forwardRef(function SI(\n props: {\n columnKey: string;\n currentRecord: DataObject;\n compEditing: () => void;\n } & TNumberCellEditingCondition,\n ref: React.ForwardedRef<HTMLInputElement>\n) {\n const [value, setValue] = useState(\n (props.currentRecord[props.columnKey] as number).toString()\n );\n\n const validate = () => {\n const v = parseInt(value);\n\n if (props.constraints?.max) {\n if (v > props.constraints.max) {\n alert(\"over max\");\n return false;\n }\n }\n\n if (props.constraints?.min) {\n if (v < props.constraints.min) {\n alert(\"under min\");\n return false;\n }\n }\n\n return true;\n };\n\n return (\n <CellInput\n ref={ref}\n value={value}\n onChange={(e) => {\n e.preventDefault();\n\n if (e.target.value === \"\") {\n setValue(\"0\");\n return;\n }\n\n if (e.target.value === \"-\") {\n setValue(\"-0\");\n return;\n }\n\n if (e.target.value.match(/^-?[0-9]+\\.$/)) {\n setValue(e.target.value);\n return;\n }\n\n if (isNaN(Number(e.target.value))) {\n return;\n }\n\n setValue(e.target.value);\n }}\n onBlur={(e) => {\n e.preventDefault();\n\n if (Number(value) === props.currentRecord[props.columnKey]) {\n props.compEditing();\n return;\n }\n\n if (props.onCellBlur) {\n if (!validate()) {\n setTimeout(() => {\n e.target.focus();\n }, 100);\n return;\n }\n\n props.onCellBlur(\n props.columnKey,\n Number(value),\n props.currentRecord,\n props.compEditing\n );\n } else {\n setValue((props.currentRecord[props.columnKey] as number).toString());\n props.compEditing();\n }\n }}\n reset={() =>\n setValue((props.currentRecord[props.columnKey] as number).toString())\n }\n endEditing={props.compEditing}\n />\n );\n});\n\nexport const TableCell = memo(function TC(props: TPropsCell) {\n const [isEditing, setIsEditing] = useState(false);\n const ref = useRef<HTMLInputElement>(null);\n\n const compEditing = useCallback(() => {\n setIsEditing(false);\n }, [setIsEditing]);\n\n useEffect(() => {\n if (isEditing) {\n ref.current?.focus();\n }\n }, [isEditing]);\n\n return (\n <td>\n <div className=\"relative\">\n <div\n className={`flex items-center gap-3 w-fit p-2 cursor-default ${\n isEditing ? \"opacity-0\" : \"\"\n }`}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <div\n onDoubleClick={(e) => {\n e.preventDefault();\n if (props.editable) {\n setIsEditing(true);\n }\n }}\n >\n <p className=\"text-left\">{props.children}</p>\n </div>\n {props.editable && (\n <button\n className=\"w-fit h-fit p-1 rounded-full text-gray-500 hover:bg-gray-200\"\n onClick={(e) => {\n e.preventDefault();\n if (props.editable) {\n setIsEditing(true);\n }\n }}\n >\n <EditIcon size={12} />\n </button>\n )}\n </div>\n {isEditing && (\n <div\n className=\"absolute top-0 left-0 w-full h-full grid place-items-center z-10 pr-2\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n {props.type === \"string\" && (\n <StringCellInput\n ref={ref}\n columnKey={props.columnKey}\n currentRecord={props.currentRecord}\n compEditing={compEditing}\n type={\"string\"}\n onCellBlur={props.onCellBlur}\n constraints={props.constraints}\n />\n )}\n {props.type === \"number\" && (\n <NumberCellInput\n ref={ref}\n columnKey={props.columnKey}\n currentRecord={props.currentRecord}\n compEditing={compEditing}\n type={\"number\"}\n onCellBlur={props.onCellBlur}\n constraints={props.constraints}\n />\n )}\n </div>\n )}\n </div>\n </td>\n );\n});\n"],"names":["CellInput","forwardRef","props","ref","_jsxs","className","children","_jsx","type","value","onChange","onBlur","onKeyUp","e","preventDefault","key","target","blur","reset","endEditing","onMouseDown","CancelIcon","size","StringCellInput","_a","useState","currentRecord","columnKey","setValue","onCellBlur","constraints","maxLength","length","alert","_b","minLength","_c","pattern","RegExp","test","validate","setTimeout","focus","compEditing","NumberCellInput","toString","match","isNaN","Number","v","parseInt","max","min","TableCell","memo","isEditing","setIsEditing","useRef","useCallback","useEffect","current","concat","onClick","stopPropagation","onDoubleClick","editable","EditIcon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cell.js","sources":["../../../../src/table/cell.tsx"],"sourcesContent":["import {\n memo,\n useEffect,\n useRef,\n useState,\n forwardRef,\n useCallback,\n} from \"react\";\nimport {\n DataObject,\n TCellEditingCondition,\n TNumberCellEditingCondition,\n TStringCellEditingCondition,\n} from \"./type\";\nimport { EditIcon } from \"./edit-icon\";\nimport { CancelIcon } from \"./cancel-icon\";\n\ntype TPropsCell = {\n currentRecord: DataObject;\n columnKey: string;\n children: string | number;\n} & TCellEditingCondition;\n\nconst CellInput = forwardRef(function CI<T extends string | number>(\n props: {\n value: T;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onBlur: (e: React.FocusEvent<HTMLInputElement>) => void;\n reset: () => void;\n endEditing: () => void;\n },\n ref: React.ForwardedRef<HTMLInputElement>\n) {\n return (\n <div className=\"flex justify-between gap-1 w-full items-center\">\n <input\n ref={ref}\n className=\"w-full py-1 px-2\"\n type=\"text\"\n value={props.value}\n onChange={props.onChange}\n onBlur={props.onBlur}\n onKeyUp={(e: React.KeyboardEvent<HTMLInputElement>) => {\n e.preventDefault();\n if (e.key === \"Enter\") {\n (e.target as HTMLInputElement).blur();\n } else if (e.key === \"Escape\") {\n props.reset();\n props.endEditing();\n }\n }}\n />\n <button\n onMouseDown={(e) => {\n e.preventDefault();\n props.reset();\n props.endEditing();\n }}\n >\n <CancelIcon size={16} />\n </button>\n </div>\n );\n});\n\nconst StringCellInput = forwardRef(function SI(\n props: {\n columnKey: string;\n currentRecord: DataObject;\n compEditing: () => void;\n } & TStringCellEditingCondition,\n ref: React.ForwardedRef<HTMLInputElement>\n) {\n const [value, setValue] = useState(\n props.currentRecord[props.columnKey] as string\n );\n\n const validate = () => {\n if (props.constraints?.maxLength) {\n if (value.length > props.constraints.maxLength) {\n alert(\n `最大文字数(${props.constraints.maxLength})を超過しています。(現在${value.length}文字)`\n );\n return false;\n }\n }\n if (props.constraints?.minLength) {\n if (value.length < props.constraints.minLength) {\n alert(\n `最小文字数(${props.constraints.minLength})を下回っています。(現在${value.length}文字)`\n );\n return false;\n }\n }\n if (props.constraints?.pattern) {\n if (!new RegExp(props.constraints.pattern).test(value)) {\n alert(`パターンに一致しません。(パターン${props.constraints.pattern})`);\n return false;\n }\n }\n return true;\n };\n\n return (\n <CellInput\n ref={ref}\n value={value}\n onChange={(e) => {\n e.preventDefault();\n setValue(e.target.value);\n }}\n onBlur={(e) => {\n e.preventDefault();\n\n if (value === props.currentRecord[props.columnKey]) {\n props.compEditing();\n return;\n }\n\n if (props.onCellBlur) {\n if (!validate()) {\n setTimeout(() => {\n e.target.focus();\n }, 100);\n return;\n }\n\n props.onCellBlur(\n props.columnKey,\n value,\n props.currentRecord,\n props.compEditing\n );\n } else {\n setValue(props.currentRecord[props.columnKey]);\n props.compEditing();\n }\n }}\n reset={() => setValue(props.currentRecord[props.columnKey])}\n endEditing={props.compEditing}\n />\n );\n});\n\nconst NumberCellInput = forwardRef(function SI(\n props: {\n columnKey: string;\n currentRecord: DataObject;\n compEditing: () => void;\n } & TNumberCellEditingCondition,\n ref: React.ForwardedRef<HTMLInputElement>\n) {\n const [value, setValue] = useState(\n (props.currentRecord[props.columnKey] as number).toString()\n );\n\n const validate = () => {\n const v = parseInt(value);\n\n if (props.constraints?.max) {\n if (v > props.constraints.max) {\n alert(\n `最大値(${props.constraints.max})を超過しています。(入力値:${v})`\n );\n return false;\n }\n }\n\n if (props.constraints?.min) {\n if (v < props.constraints.min) {\n alert(\n `最小値(${props.constraints.min})を下回っています。(入力値:${v})`\n );\n return false;\n }\n }\n\n return true;\n };\n\n return (\n <CellInput\n ref={ref}\n value={value}\n onChange={(e) => {\n e.preventDefault();\n\n if (e.target.value === \"\") {\n setValue(\"0\");\n return;\n }\n\n if (e.target.value === \"-\" || e.target.value === \"0-\") {\n setValue(\"-0\");\n return;\n }\n\n if (e.target.value.match(/^-?[0-9]+\\.$/)) {\n setValue(e.target.value);\n return;\n }\n\n if (isNaN(Number(e.target.value))) {\n return;\n }\n\n setValue(Number(e.target.value).toString());\n }}\n onBlur={(e) => {\n e.preventDefault();\n\n if (Number(value) === props.currentRecord[props.columnKey]) {\n props.compEditing();\n return;\n }\n\n if (props.onCellBlur) {\n if (!validate()) {\n setTimeout(() => {\n e.target.focus();\n }, 100);\n return;\n }\n\n props.onCellBlur(\n props.columnKey,\n Number(value),\n props.currentRecord,\n props.compEditing\n );\n } else {\n setValue((props.currentRecord[props.columnKey] as number).toString());\n props.compEditing();\n }\n }}\n reset={() =>\n setValue((props.currentRecord[props.columnKey] as number).toString())\n }\n endEditing={props.compEditing}\n />\n );\n});\n\nexport const TableCell = memo(function TC(props: TPropsCell) {\n const [isEditing, setIsEditing] = useState(false);\n const ref = useRef<HTMLInputElement>(null);\n\n const compEditing = useCallback(() => {\n setIsEditing(false);\n }, [setIsEditing]);\n\n useEffect(() => {\n if (isEditing) {\n ref.current?.focus();\n }\n }, [isEditing]);\n\n return (\n <td>\n <div className=\"relative\">\n <div\n className={`flex items-center gap-3 w-fit p-2 cursor-default ${\n isEditing ? \"opacity-0\" : \"\"\n }`}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <div\n onDoubleClick={(e) => {\n e.preventDefault();\n if (props.editable) {\n setIsEditing(true);\n }\n }}\n >\n <p className=\"text-left\">{props.children}</p>\n </div>\n {props.editable && (\n <button\n className=\"w-fit h-fit p-1 rounded-full text-gray-500 hover:bg-gray-200\"\n onClick={(e) => {\n e.preventDefault();\n if (props.editable) {\n setIsEditing(true);\n }\n }}\n >\n <EditIcon size={12} />\n </button>\n )}\n </div>\n {isEditing && (\n <div\n className=\"absolute top-0 left-0 w-full h-full grid place-items-center z-10 pr-2\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n {props.type === \"string\" && (\n <StringCellInput\n ref={ref}\n columnKey={props.columnKey}\n currentRecord={props.currentRecord}\n compEditing={compEditing}\n type={\"string\"}\n onCellBlur={props.onCellBlur}\n constraints={props.constraints}\n />\n )}\n {props.type === \"number\" && (\n <NumberCellInput\n ref={ref}\n columnKey={props.columnKey}\n currentRecord={props.currentRecord}\n compEditing={compEditing}\n type={\"number\"}\n onCellBlur={props.onCellBlur}\n constraints={props.constraints}\n />\n )}\n </div>\n )}\n </div>\n </td>\n );\n});\n"],"names":["CellInput","forwardRef","props","ref","_jsxs","className","children","_jsx","type","value","onChange","onBlur","onKeyUp","e","preventDefault","key","target","blur","reset","endEditing","onMouseDown","CancelIcon","size","StringCellInput","_a","useState","currentRecord","columnKey","setValue","onCellBlur","constraints","maxLength","length","alert","concat","_b","minLength","_c","pattern","RegExp","test","validate","setTimeout","focus","compEditing","NumberCellInput","toString","match","isNaN","Number","v","parseInt","max","min","TableCell","memo","isEditing","setIsEditing","useRef","useCallback","useEffect","current","onClick","stopPropagation","onDoubleClick","editable","EditIcon"],"mappings":"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"}
|