@lax-wp/design-system 0.14.2 → 0.14.3
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/components/data-display/infinite-table/body/cell/InlineEditField.cjs.js +1 -1
- package/dist/components/data-display/infinite-table/body/cell/InlineEditField.cjs.js.map +1 -1
- package/dist/components/data-display/infinite-table/body/cell/InlineEditField.es.js +0 -1
- package/dist/components/data-display/infinite-table/body/cell/InlineEditField.es.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),re=require("../../validateCell.cjs.js"),H=require("../../../../../constants/table.cjs.js"),ae=require("../../../../forms/date-time-field/DateTimeField.cjs.js"),ne=require("../../../../forms/select-field/SelectField.cjs.js"),oe=require("../../../../forms/toggle/Toggle.cjs.js"),ue=require("@mui/icons-material"),le=require("../../../../../_virtual/index.cjs.js"),d=require("react"),ie=require("../../context.cjs.js"),se=require("./InlineCurrencyField.cjs.js"),ce=require("./MasterDataInlineField.cjs.js"),de=require("../../../../icon/icons.generated.cjs.js"),x=new Map;let w=null,p=null;const F=t=>({target:{value:t}}),me=({cell:t,id:l,inlineEditing:v,cellRef:X,handleCellValueChange:y,registerValidation:I})=>{const{openMasterDataModal:J,selectedMasterData:k,clearSelectedMasterData:Y,getCurrencyForCell:N,getPendingEdit:M,addPendingEdit:f,onFieldOperationFlow:R,fieldOperationLoading:U}=d.useContext(ie.TableContext),Q=U===`${l}-${t?.column?.id}`,E=!!U,b=d.useCallback((a,u)=>{R&&R({value:a,fieldId:t?.column?.id,rowId:String(l),rowData:t?.row?.original,columnKey:t?.column?.key||"",flowName:t?.column?.live_field_source,isLiveField:t?.column?.is_live_field,meta:u})},[t?.column?.id,t?.column?.is_live_field,t?.column?.key,t?.column?.live_field_source,t?.row?.original,l,R]),V=()=>{const a=t?.row?.original?.__rawData,u=t?.column?.Header,r=t?.column?.key,e=u?a?.[u]?.currency_code:void 0,n=r?a?.[r]?.currency_code:void 0;return e&&e!==""?e:n&&n!==""?n:t?.column?.currencyCode||"USD"},o=t.column.key||"",_=`${l}-${o}`,W=N?.(_),z=M?.(String(l),o),[c,h]=d.useState({value:z?.value!==void 0?z.value:t.value||"",currencyCode:z?.meta?.currency_code||W||V()}),[K,D]=d.useState(null),Z=(()=>{if(v!==o)return null;const a=typeof c.value=="number"?String(c.value):c.value,u=re.validateCellValue(a,t?.column);return u.isValid?null:u.error||null})(),ee=M?.(String(l),o)?.validationError,L=K||Z||ee||null,B=d.useRef(null);d.useEffect(()=>{if(v===o&&B.current!==o){const u=N?.(`${l}-${o}`),r=M?.(String(l),o),e=r?.value!==void 0?r.value:t.value||"",n=r?.meta?.currency_code||u||V();h({value:e,currencyCode:n})}v!==o&&B.current===o&&D(null),B.current=v},[v,o,N,M,l,t.value]),d.useEffect(()=>{k&&v===o&&t?.column?.masterDataColumnName&&t?.column?.masterDataName&&(f&&f(String(l),o,{value:k.value,meta:{reference:k.reference},originalValue:t.value}),y(F(k.value)),b(k.value,{reference:k.reference}),Y?.())},[k,v,o,t?.column?.masterDataColumnName,t?.column?.masterDataName,f,l,t.value,y,b,Y]);const g=a=>t?.column?.is_required&&(a==null||a===""||typeof a=="string"&&a.trim()==="")?(D("Field required"),!1):(D(null),!0),A=a=>g(a)?a&&a.trim()!==""&&!H.REGEX.url.test(a)?(D("Invalid URL format"),!1):(D(null),!0):!1,O=a=>g(a)?a&&a.trim()!==""&&!H.REGEX.email.test(a)?(D("Email is not valid"),!1):(D(null),!0):!1,m=d.useRef(c);d.useEffect(()=>{m.current=c},[c]);const j=d.useRef(null),i=`${l}-${o}`;d.useLayoutEffect(()=>{const a=j.current;if(!a)return;const u=x.get(i);if(u){a.focus();try{a.setSelectionRange(u.start,u.end)}catch{}}else w!==i&&a.focus()},[i]);const S=d.useRef();d.useEffect(()=>()=>{S.current&&clearTimeout(S.current)},[]);const P=d.useCallback(a=>{y(F(a)),f&&f(String(l),o,{value:a,originalValue:t.value})},[y,f,l,o,t.value]),T=d.useCallback(a=>{S.current&&clearTimeout(S.current),S.current=setTimeout(()=>{P(a)},300)},[P]),q=d.useCallback(()=>{S.current&&(clearTimeout(S.current),S.current=void 0,P(String(m.current.value??"")))},[P]),$=d.useCallback(()=>{const a=t?.column?.type?.toLowerCase(),u=m.current.value;switch(a){case"url":A(String(u??""));break;case"e-mail":O(String(u??""));break;default:g(u);break}},[t?.column?.type]),G=d.useCallback(()=>{const a=t?.column?.type?.toLowerCase(),u=m.current.value,r=m.current.currencyCode;let e=!0;switch(a){case"url":e=A(String(u??""));break;case"e-mail":e=O(String(u??""));break;default:e=g(u);break}if(!e)return{isValid:!1};let n=null;return a==="currency"&&(n={currency_code:N?.(_)||r}),{isValid:!0,value:typeof u=="number"?String(u):u,meta:n}},[t?.column?.type,_,N]);d.useEffect(()=>{I&&v===o&&I(G)},[I,G,v,o]);const te=()=>{if(t?.column?.is_master_data&&t?.column?.masterDataName&&(t?.column?.masterDataColumnName||t?.column?.masterDataFormula)){const r=M?.(String(l),o),e=k?.value??r?.value??t.value;return s.jsx("div",{onMouseDown:n=>n.stopPropagation(),className:"z-[120] h-full w-full",children:s.jsx(ce.MasterDataInlineField,{id:`master-data-cell-${l}-${t.column.id}`,value:e,onChange:(n,C)=>{y(F(n)),f&&f(String(l),o,{value:n,meta:{reference:C||null},originalValue:t.value}),b(n,{reference:C||void 0}),g(n??"")},placeholder:t.column?.Header,masterDataName:t.column.masterDataName,masterDataColumnName:t.column.masterDataColumnName,masterDataFormula:t.column.masterDataFormula,masterDataFilters:t.column.masterDataFilters,onOpenMasterDataModal:J,reference:r?.meta?.reference})})}const a=t?.column?.type?.toLowerCase(),u=o?t?.row?.original?.__cellMetadata?.[o]:void 0;switch(a){case"choice":{const r=u?.choices??t?.column?.choices;return s.jsx("div",{onMouseDown:e=>e.stopPropagation(),children:s.jsx(ne.SelectField,{id:`select-cell-${l}-${t.column.id}`,value:c.value||null,selectOptions:r?.map(e=>({label:e,value:e}))||[],onChange:e=>{const n=e?Array.isArray(e)?e[0]?.value?.toString()||"":e?.value?.toString()||"":"";h(C=>({...C,value:n})),y(F(n)),f&&f(String(l),o,{value:n,originalValue:t.value}),b(n),g(n)},allowClear:!0,inputStyles:{height:"var(--row-height)",border:"none",boxShadow:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)"},className:"z-[120]"})})}case"datetime":case"date":return s.jsx("div",{onMouseDown:r=>{r.stopPropagation(),r.target.tagName!=="INPUT"&&r.preventDefault()},children:s.jsx(ae.DateTimeField,{id:`date-cell-${l}-${t.column.id}`,value:c.value||void 0,handleOnChange:r=>{const e=r||"";h(n=>({...n,value:e})),y(F(e)),f&&f(String(l),o,{value:e,originalValue:t.value}),b(e),g(e)},showTime:a==="datetime",dateFormat:a==="date"?"MM/DD/YYYY":void 0,className:"z-[120] w-full"})});case"currency":{const r=V();return s.jsx("div",{onMouseDown:e=>e.stopPropagation(),className:"z-[120] h-full w-full",children:s.jsx(se.InlineCurrencyField,{id:_,value:String(c.value??""),onChange:(e,n)=>{h(C=>({value:e,currencyCode:n||C.currencyCode})),y(F(e)),f&&f(String(l),o,{value:e,meta:{currency_code:n},originalValue:t.value,originalMeta:{currency_code:r}}),g(e),b(e,{currency_code:n})},currencyCode:c.currencyCode,inputStyle:{height:"var(--row-height)",border:"none",boxShadow:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)"},autoFocus:!0,disabled:E})})}case"percentage":return s.jsxs("label",{className:"relative block h-full",onMouseDown:r=>r.stopPropagation(),children:[s.jsx("input",{ref:j,type:"number",defaultValue:String(c.value??""),onChange:r=>{try{x.set(i,{start:r.target.selectionStart??0,end:r.target.selectionEnd??0})}catch{}const e=r.target.value;h(n=>({...n,value:e})),m.current={...m.current,value:e},p=i,g(e),T(e)},onBlur:()=>{w=i,x.delete(i),q(),$(),p===i&&(p=null,b(m.current.value)),requestAnimationFrame(()=>{w=null})},onKeyDown:r=>{r.stopPropagation()},className:"border border-gray-300 h-full text-gray-900 dark:bg-black-800 dark:text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 dark:focus:ring-white dark:focus:border-white block w-full px-2.5 py-1.5 font-inter font-medium disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400",id:`percentage-cell-${l}-${t.column.id}`,style:{height:"var(--row-height)",border:"none",boxShadow:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)"},autoComplete:"off",disabled:E}),s.jsx("span",{className:"absolute inset-y-0 right-3 flex items-center pointer-events-none h-full dark:text-black-100",children:"%"})]});case"boolean":{const r=c.value===!0||c.value==="true"||c.value==="Yes"||c.value==="True"||c.value===1;return s.jsx("div",{onMouseDown:e=>e.stopPropagation(),className:"h-full w-full flex items-center px-2.5 bg-white dark:bg-black-800 rounded border-2 focus:outline-primary-600 border border-primary-600 dark:border-black-700 z-[120]",children:s.jsx(oe.Toggle,{id:`toggle-cell-${l}-${t.column.id}`,isChecked:r,onChange:e=>{h(n=>({...n,value:e})),y(F(e)),f&&f(String(l),o,{value:e,originalValue:t.value}),b(e)},hideStatus:!1,labelDirection:"right",stopClickPropagation:!0,statusText:r?"Yes":"No"})})}case"url":return s.jsx("input",{ref:j,type:"url",defaultValue:String(c.value??""),onChange:r=>{x.set(i,{start:r.target.selectionStart??0,end:r.target.selectionEnd??0});const e=r.target.value;h(n=>({...n,value:e})),m.current={...m.current,value:e},p=i,K?A(e):g(e),T(e)},onBlur:()=>{w=i,x.delete(i),q(),$(),p===i&&(p=null,b(m.current.value)),requestAnimationFrame(()=>{w=null})},onKeyDown:r=>{r.stopPropagation()},onMouseDown:r=>r.stopPropagation(),className:"text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800",style:{height:"var(--row-height)"},disabled:E});case"e-mail":return s.jsx("input",{ref:j,type:"email",defaultValue:String(c.value??""),onChange:r=>{try{x.set(i,{start:r.target.selectionStart??0,end:r.target.selectionEnd??0})}catch{}const e=r.target.value;h(n=>({...n,value:e})),m.current={...m.current,value:e},p=i,K?O(e):g(e),T(e)},onBlur:()=>{w=i,x.delete(i),q(),$(),p===i&&(p=null,b(m.current.value)),requestAnimationFrame(()=>{w=null})},onKeyDown:r=>{r.stopPropagation()},onMouseDown:r=>r.stopPropagation(),className:"text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800",style:{height:"var(--row-height)"},disabled:E});default:return s.jsx("input",{ref:j,type:"text",defaultValue:String(c.value??""),onChange:r=>{x.set(i,{start:r.target.selectionStart??0,end:r.target.selectionEnd??0});const e=r.target.value;h(n=>({...n,value:e})),m.current={...m.current,value:e},p=i,g(e),T(e)},onBlur:()=>{w=i,x.delete(i),q(),$(),p===i&&(p=null,b(m.current.value)),requestAnimationFrame(()=>{w=null})},onKeyDown:r=>{r.stopPropagation()},onMouseDown:r=>r.stopPropagation(),className:"text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800",style:{height:"var(--row-height)"},disabled:E})}};return s.jsxs("div",{ref:X,className:"relative h-full w-full overflow-visible",children:[s.jsx("div",{className:le("border p-0.5 rounded-lg h-full",L?"border-error-600":"border-neutral-200 dark:border-black-700",E&&"pointer-events-none opacity-70"),children:te()}),!!t?.column?.is_live_field&&s.jsx("div",{className:"absolute -top-1.5 -right-1.5 bg-white dark:bg-black-800 rounded-full w-5 h-5 flex items-center justify-center border border-primary-300 dark:border-primary-600 shadow-sm z-[125]",children:Q?s.jsx(de.LoadingSpinnerIcon,{className:"text-primary-600 dark:text-white",size:8}):s.jsx(ue.BoltOutlined,{sx:{fontSize:12,color:"var(--color-primary-600)"}})}),L&&s.jsx("div",{className:"absolute top-full left-0 mt-1 text-error-600 text-xs font-medium z-[130] bg-white dark:bg-black-800 px-2 py-1 rounded shadow-lg w-full",children:L})]})};exports.InlineEditField=me;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),re=require("../../validateCell.cjs.js"),H=require("../../../../../constants/table.cjs.js"),ae=require("../../../../forms/date-time-field/DateTimeField.cjs.js"),ne=require("../../../../forms/select-field/SelectField.cjs.js"),oe=require("../../../../forms/toggle/Toggle.cjs.js"),ue=require("@mui/icons-material"),le=require("../../../../../_virtual/index.cjs.js"),d=require("react"),ie=require("../../context.cjs.js"),se=require("./InlineCurrencyField.cjs.js"),ce=require("./MasterDataInlineField.cjs.js"),de=require("../../../../icon/icons.generated.cjs.js"),h=new Map;let w=null,p=null;const F=t=>({target:{value:t}}),me=({cell:t,id:l,inlineEditing:v,cellRef:X,handleCellValueChange:y,registerValidation:I})=>{const{openMasterDataModal:J,selectedMasterData:k,clearSelectedMasterData:Y,getCurrencyForCell:N,getPendingEdit:M,addPendingEdit:f,onFieldOperationFlow:R,fieldOperationLoading:U}=d.useContext(ie.TableContext),Q=U===`${l}-${t?.column?.id}`,E=!!U,b=d.useCallback((a,u)=>{R&&R({value:a,fieldId:t?.column?.id,rowId:String(l),rowData:t?.row?.original,columnKey:t?.column?.key||"",flowName:t?.column?.live_field_source,isLiveField:t?.column?.is_live_field,meta:u})},[t?.column?.id,t?.column?.is_live_field,t?.column?.key,t?.column?.live_field_source,t?.row?.original,l,R]),V=()=>{const a=t?.row?.original?.__rawData,u=t?.column?.Header,r=t?.column?.key,e=u?a?.[u]?.currency_code:void 0,n=r?a?.[r]?.currency_code:void 0;return e&&e!==""?e:n&&n!==""?n:t?.column?.currencyCode||"USD"},o=t.column.key||"",_=`${l}-${o}`,W=N?.(_),z=M?.(String(l),o),[c,x]=d.useState({value:z?.value!==void 0?z.value:t.value||"",currencyCode:z?.meta?.currency_code||W||V()}),[K,D]=d.useState(null),Z=(()=>{if(v!==o)return null;const a=typeof c.value=="number"?String(c.value):c.value,u=re.validateCellValue(a,t?.column);return u.isValid?null:u.error||null})(),ee=M?.(String(l),o)?.validationError,L=K||Z||ee||null,B=d.useRef(null);d.useEffect(()=>{if(v===o&&B.current!==o){const u=N?.(`${l}-${o}`),r=M?.(String(l),o),e=r?.value!==void 0?r.value:t.value||"",n=r?.meta?.currency_code||u||V();x({value:e,currencyCode:n})}v!==o&&B.current===o&&D(null),B.current=v},[v,o,N,M,l,t.value]),d.useEffect(()=>{k&&v===o&&t?.column?.masterDataColumnName&&t?.column?.masterDataName&&(f&&f(String(l),o,{value:k.value,meta:{reference:k.reference},originalValue:t.value}),y(F(k.value)),b(k.value,{reference:k.reference}),Y?.())},[k,v,o,t?.column?.masterDataColumnName,t?.column?.masterDataName,f,l,t.value,y,b,Y]);const g=a=>t?.column?.is_required&&(a==null||a===""||typeof a=="string"&&a.trim()==="")?(D("Field required"),!1):(D(null),!0),A=a=>g(a)?a&&a.trim()!==""&&!H.REGEX.url.test(a)?(D("Invalid URL format"),!1):(D(null),!0):!1,O=a=>g(a)?a&&a.trim()!==""&&!H.REGEX.email.test(a)?(D("Email is not valid"),!1):(D(null),!0):!1,m=d.useRef(c);d.useEffect(()=>{m.current=c},[c]);const j=d.useRef(null),i=`${l}-${o}`;d.useLayoutEffect(()=>{const a=j.current;if(!a)return;const u=h.get(i);if(u){a.focus();try{a.setSelectionRange(u.start,u.end)}catch{}}else w!==i&&a.focus()},[i]);const S=d.useRef();d.useEffect(()=>()=>{S.current&&clearTimeout(S.current)},[]);const P=d.useCallback(a=>{y(F(a)),f&&f(String(l),o,{value:a,originalValue:t.value})},[y,f,l,o,t.value]),T=d.useCallback(a=>{S.current&&clearTimeout(S.current),S.current=setTimeout(()=>{P(a)},300)},[P]),q=d.useCallback(()=>{S.current&&(clearTimeout(S.current),S.current=void 0,P(String(m.current.value??"")))},[P]),$=d.useCallback(()=>{const a=t?.column?.type?.toLowerCase(),u=m.current.value;switch(a){case"url":A(String(u??""));break;case"e-mail":O(String(u??""));break;default:g(u);break}},[t?.column?.type]),G=d.useCallback(()=>{const a=t?.column?.type?.toLowerCase(),u=m.current.value,r=m.current.currencyCode;let e=!0;switch(a){case"url":e=A(String(u??""));break;case"e-mail":e=O(String(u??""));break;default:e=g(u);break}if(!e)return{isValid:!1};let n=null;return a==="currency"&&(n={currency_code:N?.(_)||r}),{isValid:!0,value:typeof u=="number"?String(u):u,meta:n}},[t?.column?.type,_,N]);d.useEffect(()=>{I&&v===o&&I(G)},[I,G,v,o]);const te=()=>{if(t?.column?.is_master_data&&t?.column?.masterDataName&&(t?.column?.masterDataColumnName||t?.column?.masterDataFormula)){const r=M?.(String(l),o),e=k?.value??r?.value??t.value;return s.jsx("div",{onMouseDown:n=>n.stopPropagation(),className:"z-[120] h-full w-full",children:s.jsx(ce.MasterDataInlineField,{id:`master-data-cell-${l}-${t.column.id}`,value:e,onChange:(n,C)=>{y(F(n)),f&&f(String(l),o,{value:n,meta:{reference:C||null},originalValue:t.value}),b(n,{reference:C||void 0}),g(n??"")},placeholder:t.column?.Header,masterDataName:t.column.masterDataName,masterDataColumnName:t.column.masterDataColumnName,masterDataFormula:t.column.masterDataFormula,masterDataFilters:t.column.masterDataFilters,onOpenMasterDataModal:J,reference:r?.meta?.reference})})}const a=t?.column?.type?.toLowerCase(),u=o?t?.row?.original?.__cellMetadata?.[o]:void 0;switch(a){case"choice":{const r=u?.choices??t?.column?.choices;return s.jsx("div",{onMouseDown:e=>e.stopPropagation(),children:s.jsx(ne.SelectField,{id:`select-cell-${l}-${t.column.id}`,value:c.value||null,selectOptions:r?.map(e=>({label:e,value:e}))||[],onChange:e=>{const n=e?Array.isArray(e)?e[0]?.value?.toString()||"":e?.value?.toString()||"":"";x(C=>({...C,value:n})),y(F(n)),f&&f(String(l),o,{value:n,originalValue:t.value}),b(n),g(n)},allowClear:!0,inputStyles:{height:"var(--row-height)",border:"none",boxShadow:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)"},className:"z-[120]"})})}case"datetime":case"date":return s.jsx("div",{onMouseDown:r=>{r.stopPropagation(),r.target.tagName!=="INPUT"&&r.preventDefault()},children:s.jsx(ae.DateTimeField,{id:`date-cell-${l}-${t.column.id}`,value:c.value||void 0,handleOnChange:r=>{const e=r||"";x(n=>({...n,value:e})),y(F(e)),f&&f(String(l),o,{value:e,originalValue:t.value}),b(e),g(e)},showTime:a==="datetime",dateFormat:a==="date"?"MM/DD/YYYY":void 0,className:"z-[120] w-full"})});case"currency":{const r=V();return s.jsx("div",{onMouseDown:e=>e.stopPropagation(),className:"z-[120] h-full w-full",children:s.jsx(se.InlineCurrencyField,{id:_,value:String(c.value??""),onChange:(e,n)=>{x(C=>({value:e,currencyCode:n||C.currencyCode})),y(F(e)),f&&f(String(l),o,{value:e,meta:{currency_code:n},originalValue:t.value,originalMeta:{currency_code:r}}),g(e),b(e,{currency_code:n})},currencyCode:c.currencyCode,inputStyle:{border:"none",boxShadow:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)"},autoFocus:!0,disabled:E})})}case"percentage":return s.jsxs("label",{className:"relative block h-full",onMouseDown:r=>r.stopPropagation(),children:[s.jsx("input",{ref:j,type:"number",defaultValue:String(c.value??""),onChange:r=>{try{h.set(i,{start:r.target.selectionStart??0,end:r.target.selectionEnd??0})}catch{}const e=r.target.value;x(n=>({...n,value:e})),m.current={...m.current,value:e},p=i,g(e),T(e)},onBlur:()=>{w=i,h.delete(i),q(),$(),p===i&&(p=null,b(m.current.value)),requestAnimationFrame(()=>{w=null})},onKeyDown:r=>{r.stopPropagation()},className:"border border-gray-300 h-full text-gray-900 dark:bg-black-800 dark:text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 dark:focus:ring-white dark:focus:border-white block w-full px-2.5 py-1.5 font-inter font-medium disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400",id:`percentage-cell-${l}-${t.column.id}`,style:{height:"var(--row-height)",border:"none",boxShadow:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)"},autoComplete:"off",disabled:E}),s.jsx("span",{className:"absolute inset-y-0 right-3 flex items-center pointer-events-none h-full dark:text-black-100",children:"%"})]});case"boolean":{const r=c.value===!0||c.value==="true"||c.value==="Yes"||c.value==="True"||c.value===1;return s.jsx("div",{onMouseDown:e=>e.stopPropagation(),className:"h-full w-full flex items-center px-2.5 bg-white dark:bg-black-800 rounded border-2 focus:outline-primary-600 border border-primary-600 dark:border-black-700 z-[120]",children:s.jsx(oe.Toggle,{id:`toggle-cell-${l}-${t.column.id}`,isChecked:r,onChange:e=>{x(n=>({...n,value:e})),y(F(e)),f&&f(String(l),o,{value:e,originalValue:t.value}),b(e)},hideStatus:!1,labelDirection:"right",stopClickPropagation:!0,statusText:r?"Yes":"No"})})}case"url":return s.jsx("input",{ref:j,type:"url",defaultValue:String(c.value??""),onChange:r=>{h.set(i,{start:r.target.selectionStart??0,end:r.target.selectionEnd??0});const e=r.target.value;x(n=>({...n,value:e})),m.current={...m.current,value:e},p=i,K?A(e):g(e),T(e)},onBlur:()=>{w=i,h.delete(i),q(),$(),p===i&&(p=null,b(m.current.value)),requestAnimationFrame(()=>{w=null})},onKeyDown:r=>{r.stopPropagation()},onMouseDown:r=>r.stopPropagation(),className:"text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800",style:{height:"var(--row-height)"},disabled:E});case"e-mail":return s.jsx("input",{ref:j,type:"email",defaultValue:String(c.value??""),onChange:r=>{try{h.set(i,{start:r.target.selectionStart??0,end:r.target.selectionEnd??0})}catch{}const e=r.target.value;x(n=>({...n,value:e})),m.current={...m.current,value:e},p=i,K?O(e):g(e),T(e)},onBlur:()=>{w=i,h.delete(i),q(),$(),p===i&&(p=null,b(m.current.value)),requestAnimationFrame(()=>{w=null})},onKeyDown:r=>{r.stopPropagation()},onMouseDown:r=>r.stopPropagation(),className:"text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800",style:{height:"var(--row-height)"},disabled:E});default:return s.jsx("input",{ref:j,type:"text",defaultValue:String(c.value??""),onChange:r=>{h.set(i,{start:r.target.selectionStart??0,end:r.target.selectionEnd??0});const e=r.target.value;x(n=>({...n,value:e})),m.current={...m.current,value:e},p=i,g(e),T(e)},onBlur:()=>{w=i,h.delete(i),q(),$(),p===i&&(p=null,b(m.current.value)),requestAnimationFrame(()=>{w=null})},onKeyDown:r=>{r.stopPropagation()},onMouseDown:r=>r.stopPropagation(),className:"text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800",style:{height:"var(--row-height)"},disabled:E})}};return s.jsxs("div",{ref:X,className:"relative h-full w-full overflow-visible",children:[s.jsx("div",{className:le("border p-0.5 rounded-lg h-full",L?"border-error-600":"border-neutral-200 dark:border-black-700",E&&"pointer-events-none opacity-70"),children:te()}),!!t?.column?.is_live_field&&s.jsx("div",{className:"absolute -top-1.5 -right-1.5 bg-white dark:bg-black-800 rounded-full w-5 h-5 flex items-center justify-center border border-primary-300 dark:border-primary-600 shadow-sm z-[125]",children:Q?s.jsx(de.LoadingSpinnerIcon,{className:"text-primary-600 dark:text-white",size:8}):s.jsx(ue.BoltOutlined,{sx:{fontSize:12,color:"var(--color-primary-600)"}})}),L&&s.jsx("div",{className:"absolute top-full left-0 mt-1 text-error-600 text-xs font-medium z-[130] bg-white dark:bg-black-800 px-2 py-1 rounded shadow-lg w-full",children:L})]})};exports.InlineEditField=me;
|
|
2
2
|
//# sourceMappingURL=InlineEditField.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InlineEditField.cjs.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/InlineEditField.tsx"],"sourcesContent":["import type { ICell, ValidateAndSaveResult } from '../../types';\nimport { validateCellValue } from '../../validateCell';\nimport { REGEX } from '../../../../../constants/table';\nimport { DateTimeField } from '../../../../forms/date-time-field/DateTimeField';\nimport { SelectField } from '../../../../forms/select-field/SelectField';\nimport { Toggle } from '../../../../forms/toggle/Toggle';\nimport { BoltOutlined } from '@mui/icons-material';\nimport cn from 'classnames';\nimport React, { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nimport { TableContext } from '../../context';\nimport { InlineCurrencyField } from './InlineCurrencyField';\nimport { MasterDataInlineField } from './MasterDataInlineField';\nimport { LoadingSpinnerIcon } from '../../../../icon';\n\ntype InlineEditFieldProps = {\n cell: ICell;\n id: string | number;\n inlineEditing: string | null;\n cellRef: React.RefObject<HTMLDivElement>;\n handleCellValueChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n handleUpdateCellData: (\n directValue?: string | boolean | null,\n meta?: { currency_code?: string | null; reference?: unknown | null; [key: string]: unknown | null } | null,\n ) => void;\n registerValidation?: (validateFn: () => ValidateAndSaveResult) => void;\n};\n\ntype TSelectedOption = { label: string; value: string };\ntype TSelectedOptions = TSelectedOption | TSelectedOption[] | null;\n\nconst _cursorPositionCache = new Map<string, { start: number; end: number }>();\nlet _blurringCellKey: string | null = null;\nlet _pendingFieldOpCellKey: string | null = null;\n\nconst createSyntheticChangeEvent = (value: string | number | boolean | null): React.ChangeEvent<HTMLInputElement> => {\n return {\n target: { value } as HTMLInputElement,\n } as React.ChangeEvent<HTMLInputElement>;\n};\n\nexport const InlineEditField: React.FC<InlineEditFieldProps> = ({ cell, id, inlineEditing, cellRef, handleCellValueChange, registerValidation }) => {\n const {\n openMasterDataModal,\n selectedMasterData,\n clearSelectedMasterData,\n getCurrencyForCell,\n getPendingEdit,\n addPendingEdit,\n onFieldOperationFlow,\n fieldOperationLoading,\n } = useContext(TableContext);\n\n const isFieldOperationLoading = fieldOperationLoading === `${id}-${cell?.column?.id}`;\n const isAnyFieldOperationLoading = Boolean(fieldOperationLoading);\n\n const callLiveFieldOperation = useCallback(\n (value: unknown, meta?: { reference?: unknown; currency_code?: string }) => {\n if (!onFieldOperationFlow) return;\n\n onFieldOperationFlow({\n value,\n fieldId: cell?.column?.id as string,\n rowId: String(id),\n rowData: cell?.row?.original as Record<string, unknown>,\n columnKey: (cell?.column?.key as string) || '',\n flowName: cell?.column?.live_field_source as string | undefined,\n isLiveField: cell?.column?.is_live_field as boolean | undefined,\n meta,\n });\n },\n [\n cell?.column?.id,\n cell?.column?.is_live_field,\n cell?.column?.key,\n cell?.column?.live_field_source,\n cell?.row?.original,\n id,\n onFieldOperationFlow,\n ],\n );\n\n const getCurrencyFromCell = () => {\n const rawData = cell?.row?.original?.__rawData as Record<string, Record<string, unknown>> | undefined;\n const headerKey = cell?.column?.Header as string | undefined;\n const columnKey = cell?.column?.key as string | undefined;\n\n const dataFromHeader = headerKey ? rawData?.[headerKey]?.currency_code : undefined;\n const dataFromKey = columnKey ? rawData?.[columnKey]?.currency_code : undefined;\n\n if (dataFromHeader && dataFromHeader !== '') {\n return dataFromHeader as string;\n }\n if (dataFromKey && dataFromKey !== '') {\n return dataFromKey as string;\n }\n\n return (cell?.column?.currencyCode as string) || 'USD';\n };\n\n const columnKey = (cell.column.key as string) || '';\n const currencyCellId = `${id}-${columnKey}`;\n const contextCurrency = getCurrencyForCell?.(currencyCellId);\n const initialPendingEdit = getPendingEdit?.(String(id), columnKey);\n\n const [fieldState, setFieldState] = useState<{ value: string | number | boolean | null; currencyCode: string }>({\n value: initialPendingEdit?.value !== undefined ? (initialPendingEdit.value as string | number | boolean | null) : ((cell.value as string | number | boolean | null) || ''),\n currencyCode: (initialPendingEdit?.meta?.currency_code as string) || contextCurrency || getCurrencyFromCell(),\n });\n const [validationError, setValidationError] = useState<string | null>(null);\n\n const computedValidationError = (() => {\n if (inlineEditing !== columnKey) return null;\n const valueToValidate = typeof fieldState.value === 'number' ? String(fieldState.value) : fieldState.value;\n const result = validateCellValue(valueToValidate, cell?.column as { type?: string; is_required?: boolean });\n return result.isValid ? null : result.error || null;\n })();\n\n const pendingError = getPendingEdit?.(String(id), columnKey)?.validationError;\n const displayValidationError = validationError || computedValidationError || pendingError || null;\n\n const previousInlineEditingRef = useRef<string | null>(null);\n\n useEffect(() => {\n const isEnteringEditMode = inlineEditing === columnKey && previousInlineEditingRef.current !== columnKey;\n\n if (isEnteringEditMode) {\n const currencyFromContext = getCurrencyForCell?.(`${id}-${columnKey}`);\n const pendingEdit = getPendingEdit?.(String(id), columnKey);\n const initialValue = pendingEdit?.value !== undefined ? pendingEdit.value : ((cell.value as string | boolean | null) || '');\n const initialCurrency = (pendingEdit?.meta?.currency_code as string) || currencyFromContext || getCurrencyFromCell();\n\n setFieldState({\n value: initialValue as string | number | boolean | null,\n currencyCode: initialCurrency,\n });\n }\n\n if (inlineEditing !== columnKey && previousInlineEditingRef.current === columnKey) {\n setValidationError(null);\n }\n\n previousInlineEditingRef.current = inlineEditing;\n }, [inlineEditing, columnKey, getCurrencyForCell, getPendingEdit, id, cell.value]);\n\n useEffect(() => {\n if (selectedMasterData && inlineEditing === columnKey && cell?.column?.masterDataColumnName && cell?.column?.masterDataName) {\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: selectedMasterData.value as string | boolean | null,\n meta: { reference: selectedMasterData.reference },\n originalValue: cell.value,\n });\n }\n handleCellValueChange(createSyntheticChangeEvent(selectedMasterData.value as string | number | boolean | null));\n callLiveFieldOperation(selectedMasterData.value, { reference: selectedMasterData.reference });\n clearSelectedMasterData?.();\n }\n }, [\n selectedMasterData,\n inlineEditing,\n columnKey,\n cell?.column?.masterDataColumnName,\n cell?.column?.masterDataName,\n addPendingEdit,\n id,\n cell.value,\n handleCellValueChange,\n callLiveFieldOperation,\n clearSelectedMasterData,\n ]);\n\n const validateRequiredField = (value: string | number | boolean | null): boolean => {\n if (cell?.column?.is_required) {\n const isEmpty = value === null || value === undefined || value === '' || (typeof value === 'string' && value.trim() === '');\n if (isEmpty) {\n setValidationError('Field required');\n return false;\n }\n }\n setValidationError(null);\n return true;\n };\n\n const validateUrlField = (value: string): boolean => {\n if (!validateRequiredField(value)) {\n return false;\n }\n if (value && value.trim() !== '' && !REGEX.url.test(value)) {\n setValidationError('Invalid URL format');\n return false;\n }\n setValidationError(null);\n return true;\n };\n\n const validateEmailField = (value: string): boolean => {\n if (!validateRequiredField(value)) {\n return false;\n }\n if (value && value.trim() !== '' && !REGEX.email.test(value)) {\n setValidationError('Email is not valid');\n return false;\n }\n setValidationError(null);\n return true;\n };\n\n const fieldStateRef = useRef(fieldState);\n useEffect(() => {\n fieldStateRef.current = fieldState;\n }, [fieldState]);\n\n const textInputRef = useRef<HTMLInputElement>(null);\n const cellEditKey = `${id}-${columnKey}`;\n\n useLayoutEffect(() => {\n const el = textInputRef.current;\n if (!el) return;\n const cached = _cursorPositionCache.get(cellEditKey);\n if (cached) {\n el.focus();\n try {\n el.setSelectionRange(cached.start, cached.end);\n } catch {\n // email/number inputs may not support setSelectionRange\n }\n } else if (_blurringCellKey !== cellEditKey) {\n el.focus();\n }\n }, [cellEditKey]);\n\n const debouncedSyncTimerRef = useRef<ReturnType<typeof setTimeout>>();\n\n useEffect(() => {\n return () => {\n if (debouncedSyncTimerRef.current) clearTimeout(debouncedSyncTimerRef.current);\n };\n }, []);\n\n const syncToParent = useCallback(\n (value: string) => {\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value,\n originalValue: cell.value,\n });\n }\n },\n [handleCellValueChange, addPendingEdit, id, columnKey, cell.value],\n );\n\n const debouncedSyncToParent = useCallback(\n (value: string) => {\n if (debouncedSyncTimerRef.current) clearTimeout(debouncedSyncTimerRef.current);\n debouncedSyncTimerRef.current = setTimeout(() => {\n syncToParent(value);\n }, 300);\n },\n [syncToParent],\n );\n\n const flushSyncToParent = useCallback(() => {\n if (debouncedSyncTimerRef.current) {\n clearTimeout(debouncedSyncTimerRef.current);\n debouncedSyncTimerRef.current = undefined;\n syncToParent(String(fieldStateRef.current.value ?? ''));\n }\n }, [syncToParent]);\n\n const handleBlurValidation = useCallback(() => {\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const currentValue = fieldStateRef.current.value;\n\n switch (columnType) {\n case 'url':\n validateUrlField(String(currentValue ?? ''));\n break;\n case 'e-mail':\n validateEmailField(String(currentValue ?? ''));\n break;\n default:\n validateRequiredField(currentValue);\n break;\n }\n }, [cell?.column?.type]);\n\n const validateAndGetValue = useCallback((): ValidateAndSaveResult => {\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const currentValue = fieldStateRef.current.value;\n const currentCurrency = fieldStateRef.current.currencyCode;\n\n let isValid = true;\n\n switch (columnType) {\n case 'url':\n isValid = validateUrlField(String(currentValue ?? ''));\n break;\n case 'e-mail':\n isValid = validateEmailField(String(currentValue ?? ''));\n break;\n default:\n isValid = validateRequiredField(currentValue);\n break;\n }\n\n if (!isValid) {\n return { isValid: false };\n }\n\n let meta: ValidateAndSaveResult['meta'] = null;\n if (columnType === 'currency') {\n const latestCurrency = getCurrencyForCell?.(currencyCellId) || currentCurrency;\n meta = { currency_code: latestCurrency };\n }\n\n return {\n isValid: true,\n value: (typeof currentValue === 'number' ? String(currentValue) : currentValue) as string | boolean | null,\n meta,\n };\n }, [cell?.column?.type, currencyCellId, getCurrencyForCell]);\n\n useEffect(() => {\n if (registerValidation && inlineEditing === columnKey) {\n registerValidation(validateAndGetValue);\n }\n }, [registerValidation, validateAndGetValue, inlineEditing, columnKey]);\n\n const renderFieldByType = () => {\n if (cell?.column?.is_master_data && cell?.column?.masterDataName && (cell?.column?.masterDataColumnName || cell?.column?.masterDataFormula)) {\n const currentPendingEdit = getPendingEdit?.(String(id), columnKey);\n const masterDataValue = selectedMasterData?.value ?? currentPendingEdit?.value ?? cell.value;\n\n return (\n <div onMouseDown={(e) => e.stopPropagation()} className='z-[120] h-full w-full'>\n <MasterDataInlineField\n id={`master-data-cell-${id}-${cell.column.id}`}\n value={masterDataValue as string | number | null}\n onChange={(value, reference) => {\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: value as string | boolean | null,\n meta: { reference: reference || null },\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(value, { reference: reference || undefined });\n validateRequiredField((value as string | boolean | null) ?? '');\n }}\n placeholder={cell.column?.Header as string | undefined}\n masterDataName={cell.column.masterDataName as string}\n masterDataColumnName={cell.column.masterDataColumnName as string}\n masterDataFormula={cell.column.masterDataFormula as string | undefined}\n masterDataFilters={cell.column.masterDataFilters as Record<string, unknown> | undefined}\n onOpenMasterDataModal={openMasterDataModal as never}\n reference={currentPendingEdit?.meta?.reference as Record<string, unknown> | undefined}\n />\n </div>\n );\n }\n\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const rowCellMeta = columnKey\n ? (cell?.row?.original?.__cellMetadata as Record<string, { choices?: string[] }> | undefined)?.[columnKey]\n : undefined;\n\n switch (columnType) {\n case 'choice': {\n const choices = rowCellMeta?.choices ?? (cell?.column?.choices as string[] | undefined);\n return (\n <div onMouseDown={(e) => e.stopPropagation()}>\n <SelectField\n id={`select-cell-${id}-${cell.column.id}`}\n value={fieldState.value || null}\n selectOptions={\n choices?.map((choice: string) => ({\n label: choice,\n value: choice,\n })) || []\n }\n onChange={(selectedOptions: TSelectedOptions) => {\n const value = selectedOptions\n ? Array.isArray(selectedOptions)\n ? selectedOptions[0]?.value?.toString() || ''\n : selectedOptions?.value?.toString() || ''\n : '';\n setFieldState((prev) => ({ ...prev, value }));\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(value);\n validateRequiredField(value);\n }}\n allowClear={true}\n inputStyles={{\n height: 'var(--row-height)',\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n className='z-[120]'\n />\n </div>\n );\n }\n\n case 'datetime':\n case 'date':\n return (\n <div\n onMouseDown={(e) => {\n e.stopPropagation();\n if ((e.target as HTMLElement).tagName !== 'INPUT') {\n e.preventDefault();\n }\n }}\n >\n <DateTimeField\n id={`date-cell-${id}-${cell.column.id}`}\n value={(fieldState.value as string | undefined) || undefined}\n handleOnChange={(value) => {\n const newValue = value || '';\n setFieldState((prev) => ({ ...prev, value: newValue }));\n handleCellValueChange(createSyntheticChangeEvent(newValue));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: newValue,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(newValue);\n validateRequiredField(newValue);\n }}\n showTime={columnType === 'datetime'}\n dateFormat={columnType === 'date' ? 'MM/DD/YYYY' : undefined}\n className='z-[120] w-full'\n />\n </div>\n );\n\n case 'currency': {\n const originalCurrencyCode = getCurrencyFromCell();\n return (\n <div onMouseDown={(e) => e.stopPropagation()} className='z-[120] h-full w-full'>\n <InlineCurrencyField\n id={currencyCellId}\n value={String(fieldState.value ?? '')}\n onChange={(numericValue, currency_code) => {\n setFieldState((prev) => ({\n value: numericValue,\n currencyCode: currency_code || prev.currencyCode,\n }));\n handleCellValueChange(createSyntheticChangeEvent(numericValue));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: numericValue,\n meta: { currency_code },\n originalValue: cell.value,\n originalMeta: { currency_code: originalCurrencyCode },\n });\n }\n validateRequiredField(numericValue);\n callLiveFieldOperation(numericValue, { currency_code });\n }}\n currencyCode={fieldState.currencyCode}\n inputStyle={{\n height: 'var(--row-height)',\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n autoFocus\n disabled={isAnyFieldOperationLoading}\n />\n </div>\n );\n }\n\n case 'percentage':\n return (\n <label className='relative block h-full' onMouseDown={(e) => e.stopPropagation()}>\n <input\n ref={textInputRef}\n type='number'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n try {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n } catch {\n // number inputs may not support selection\n }\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n validateRequiredField(value);\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n className='border border-gray-300 h-full text-gray-900 dark:bg-black-800 dark:text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 dark:focus:ring-white dark:focus:border-white block w-full px-2.5 py-1.5 font-inter font-medium disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400'\n id={`percentage-cell-${id}-${cell.column.id}`}\n style={{\n height: 'var(--row-height)',\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n autoComplete='off'\n disabled={isAnyFieldOperationLoading}\n />\n <span className='absolute inset-y-0 right-3 flex items-center pointer-events-none h-full dark:text-black-100'>%</span>\n </label>\n );\n\n case 'boolean': {\n const currentBoolValue =\n fieldState.value === true ||\n fieldState.value === 'true' ||\n fieldState.value === 'Yes' ||\n fieldState.value === 'True' ||\n fieldState.value === 1;\n\n return (\n <div\n onMouseDown={(e) => e.stopPropagation()}\n className='h-full w-full flex items-center px-2.5 bg-white dark:bg-black-800 rounded border-2 focus:outline-primary-600 border border-primary-600 dark:border-black-700 z-[120]'\n >\n <Toggle\n id={`toggle-cell-${id}-${cell.column.id}`}\n isChecked={currentBoolValue}\n onChange={(checked) => {\n setFieldState((prev) => ({ ...prev, value: checked }));\n handleCellValueChange(createSyntheticChangeEvent(checked));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: checked,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(checked);\n }}\n hideStatus={false}\n labelDirection='right'\n stopClickPropagation={true}\n statusText={currentBoolValue ? 'Yes' : 'No'}\n />\n </div>\n );\n }\n\n case 'url':\n return (\n <input\n ref={textInputRef}\n type='url'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n if (validationError) {\n validateUrlField(value);\n } else {\n validateRequiredField(value);\n }\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n\n case 'e-mail':\n return (\n <input\n ref={textInputRef}\n type='email'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n try {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n } catch {\n // email inputs may not support selection\n }\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n if (validationError) {\n validateEmailField(value);\n } else {\n validateRequiredField(value);\n }\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n\n default:\n return (\n <input\n ref={textInputRef}\n type='text'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n validateRequiredField(value);\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n }\n };\n\n return (\n <div ref={cellRef} className='relative h-full w-full overflow-visible'>\n <div\n className={cn(\n 'border p-0.5 rounded-lg h-full',\n displayValidationError ? 'border-error-600' : 'border-neutral-200 dark:border-black-700',\n isAnyFieldOperationLoading && 'pointer-events-none opacity-70',\n )}\n >\n {renderFieldByType()}\n </div>\n {Boolean(cell?.column?.is_live_field) && (\n <div className='absolute -top-1.5 -right-1.5 bg-white dark:bg-black-800 rounded-full w-5 h-5 flex items-center justify-center border border-primary-300 dark:border-primary-600 shadow-sm z-[125]'>\n {isFieldOperationLoading ? (\n <LoadingSpinnerIcon className='text-primary-600 dark:text-white' size={8} />\n ) : (\n <BoltOutlined\n sx={{\n fontSize: 12,\n color: 'var(--color-primary-600)',\n }}\n />\n )}\n </div>\n )}\n {displayValidationError && (\n <div className='absolute top-full left-0 mt-1 text-error-600 text-xs font-medium z-[130] bg-white dark:bg-black-800 px-2 py-1 rounded shadow-lg w-full'>\n {displayValidationError}\n </div>\n )}\n </div>\n );\n};\n"],"names":["_cursorPositionCache","_blurringCellKey","_pendingFieldOpCellKey","createSyntheticChangeEvent","value","InlineEditField","cell","id","inlineEditing","cellRef","handleCellValueChange","registerValidation","openMasterDataModal","selectedMasterData","clearSelectedMasterData","getCurrencyForCell","getPendingEdit","addPendingEdit","onFieldOperationFlow","fieldOperationLoading","useContext","TableContext","isFieldOperationLoading","isAnyFieldOperationLoading","callLiveFieldOperation","useCallback","meta","getCurrencyFromCell","rawData","headerKey","columnKey","dataFromHeader","dataFromKey","currencyCellId","contextCurrency","initialPendingEdit","fieldState","setFieldState","useState","validationError","setValidationError","computedValidationError","valueToValidate","result","validateCellValue","pendingError","displayValidationError","previousInlineEditingRef","useRef","useEffect","currencyFromContext","pendingEdit","initialValue","initialCurrency","validateRequiredField","validateUrlField","REGEX","validateEmailField","fieldStateRef","textInputRef","cellEditKey","useLayoutEffect","el","cached","debouncedSyncTimerRef","syncToParent","debouncedSyncToParent","flushSyncToParent","handleBlurValidation","columnType","currentValue","validateAndGetValue","currentCurrency","isValid","renderFieldByType","currentPendingEdit","masterDataValue","jsx","e","MasterDataInlineField","reference","rowCellMeta","choices","SelectField","choice","selectedOptions","prev","DateTimeField","newValue","originalCurrencyCode","InlineCurrencyField","numericValue","currency_code","jsxs","currentBoolValue","Toggle","checked","cn","LoadingSpinnerIcon","BoltOutlined"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InlineEditField.cjs.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/InlineEditField.tsx"],"sourcesContent":["import type { ICell, ValidateAndSaveResult } from '../../types';\nimport { validateCellValue } from '../../validateCell';\nimport { REGEX } from '../../../../../constants/table';\nimport { DateTimeField } from '../../../../forms/date-time-field/DateTimeField';\nimport { SelectField } from '../../../../forms/select-field/SelectField';\nimport { Toggle } from '../../../../forms/toggle/Toggle';\nimport { BoltOutlined } from '@mui/icons-material';\nimport cn from 'classnames';\nimport React, { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nimport { TableContext } from '../../context';\nimport { InlineCurrencyField } from './InlineCurrencyField';\nimport { MasterDataInlineField } from './MasterDataInlineField';\nimport { LoadingSpinnerIcon } from '../../../../icon';\n\ntype InlineEditFieldProps = {\n cell: ICell;\n id: string | number;\n inlineEditing: string | null;\n cellRef: React.RefObject<HTMLDivElement>;\n handleCellValueChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n handleUpdateCellData: (\n directValue?: string | boolean | null,\n meta?: { currency_code?: string | null; reference?: unknown | null; [key: string]: unknown | null } | null,\n ) => void;\n registerValidation?: (validateFn: () => ValidateAndSaveResult) => void;\n};\n\ntype TSelectedOption = { label: string; value: string };\ntype TSelectedOptions = TSelectedOption | TSelectedOption[] | null;\n\nconst _cursorPositionCache = new Map<string, { start: number; end: number }>();\nlet _blurringCellKey: string | null = null;\nlet _pendingFieldOpCellKey: string | null = null;\n\nconst createSyntheticChangeEvent = (value: string | number | boolean | null): React.ChangeEvent<HTMLInputElement> => {\n return {\n target: { value } as HTMLInputElement,\n } as React.ChangeEvent<HTMLInputElement>;\n};\n\nexport const InlineEditField: React.FC<InlineEditFieldProps> = ({ cell, id, inlineEditing, cellRef, handleCellValueChange, registerValidation }) => {\n const {\n openMasterDataModal,\n selectedMasterData,\n clearSelectedMasterData,\n getCurrencyForCell,\n getPendingEdit,\n addPendingEdit,\n onFieldOperationFlow,\n fieldOperationLoading,\n } = useContext(TableContext);\n\n const isFieldOperationLoading = fieldOperationLoading === `${id}-${cell?.column?.id}`;\n const isAnyFieldOperationLoading = Boolean(fieldOperationLoading);\n\n const callLiveFieldOperation = useCallback(\n (value: unknown, meta?: { reference?: unknown; currency_code?: string }) => {\n if (!onFieldOperationFlow) return;\n\n onFieldOperationFlow({\n value,\n fieldId: cell?.column?.id as string,\n rowId: String(id),\n rowData: cell?.row?.original as Record<string, unknown>,\n columnKey: (cell?.column?.key as string) || '',\n flowName: cell?.column?.live_field_source as string | undefined,\n isLiveField: cell?.column?.is_live_field as boolean | undefined,\n meta,\n });\n },\n [\n cell?.column?.id,\n cell?.column?.is_live_field,\n cell?.column?.key,\n cell?.column?.live_field_source,\n cell?.row?.original,\n id,\n onFieldOperationFlow,\n ],\n );\n\n const getCurrencyFromCell = () => {\n const rawData = cell?.row?.original?.__rawData as Record<string, Record<string, unknown>> | undefined;\n const headerKey = cell?.column?.Header as string | undefined;\n const columnKey = cell?.column?.key as string | undefined;\n\n const dataFromHeader = headerKey ? rawData?.[headerKey]?.currency_code : undefined;\n const dataFromKey = columnKey ? rawData?.[columnKey]?.currency_code : undefined;\n\n if (dataFromHeader && dataFromHeader !== '') {\n return dataFromHeader as string;\n }\n if (dataFromKey && dataFromKey !== '') {\n return dataFromKey as string;\n }\n\n return (cell?.column?.currencyCode as string) || 'USD';\n };\n\n const columnKey = (cell.column.key as string) || '';\n const currencyCellId = `${id}-${columnKey}`;\n const contextCurrency = getCurrencyForCell?.(currencyCellId);\n const initialPendingEdit = getPendingEdit?.(String(id), columnKey);\n\n const [fieldState, setFieldState] = useState<{ value: string | number | boolean | null; currencyCode: string }>({\n value: initialPendingEdit?.value !== undefined ? (initialPendingEdit.value as string | number | boolean | null) : ((cell.value as string | number | boolean | null) || ''),\n currencyCode: (initialPendingEdit?.meta?.currency_code as string) || contextCurrency || getCurrencyFromCell(),\n });\n const [validationError, setValidationError] = useState<string | null>(null);\n\n const computedValidationError = (() => {\n if (inlineEditing !== columnKey) return null;\n const valueToValidate = typeof fieldState.value === 'number' ? String(fieldState.value) : fieldState.value;\n const result = validateCellValue(valueToValidate, cell?.column as { type?: string; is_required?: boolean });\n return result.isValid ? null : result.error || null;\n })();\n\n const pendingError = getPendingEdit?.(String(id), columnKey)?.validationError;\n const displayValidationError = validationError || computedValidationError || pendingError || null;\n\n const previousInlineEditingRef = useRef<string | null>(null);\n\n useEffect(() => {\n const isEnteringEditMode = inlineEditing === columnKey && previousInlineEditingRef.current !== columnKey;\n\n if (isEnteringEditMode) {\n const currencyFromContext = getCurrencyForCell?.(`${id}-${columnKey}`);\n const pendingEdit = getPendingEdit?.(String(id), columnKey);\n const initialValue = pendingEdit?.value !== undefined ? pendingEdit.value : ((cell.value as string | boolean | null) || '');\n const initialCurrency = (pendingEdit?.meta?.currency_code as string) || currencyFromContext || getCurrencyFromCell();\n\n setFieldState({\n value: initialValue as string | number | boolean | null,\n currencyCode: initialCurrency,\n });\n }\n\n if (inlineEditing !== columnKey && previousInlineEditingRef.current === columnKey) {\n setValidationError(null);\n }\n\n previousInlineEditingRef.current = inlineEditing;\n }, [inlineEditing, columnKey, getCurrencyForCell, getPendingEdit, id, cell.value]);\n\n useEffect(() => {\n if (selectedMasterData && inlineEditing === columnKey && cell?.column?.masterDataColumnName && cell?.column?.masterDataName) {\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: selectedMasterData.value as string | boolean | null,\n meta: { reference: selectedMasterData.reference },\n originalValue: cell.value,\n });\n }\n handleCellValueChange(createSyntheticChangeEvent(selectedMasterData.value as string | number | boolean | null));\n callLiveFieldOperation(selectedMasterData.value, { reference: selectedMasterData.reference });\n clearSelectedMasterData?.();\n }\n }, [\n selectedMasterData,\n inlineEditing,\n columnKey,\n cell?.column?.masterDataColumnName,\n cell?.column?.masterDataName,\n addPendingEdit,\n id,\n cell.value,\n handleCellValueChange,\n callLiveFieldOperation,\n clearSelectedMasterData,\n ]);\n\n const validateRequiredField = (value: string | number | boolean | null): boolean => {\n if (cell?.column?.is_required) {\n const isEmpty = value === null || value === undefined || value === '' || (typeof value === 'string' && value.trim() === '');\n if (isEmpty) {\n setValidationError('Field required');\n return false;\n }\n }\n setValidationError(null);\n return true;\n };\n\n const validateUrlField = (value: string): boolean => {\n if (!validateRequiredField(value)) {\n return false;\n }\n if (value && value.trim() !== '' && !REGEX.url.test(value)) {\n setValidationError('Invalid URL format');\n return false;\n }\n setValidationError(null);\n return true;\n };\n\n const validateEmailField = (value: string): boolean => {\n if (!validateRequiredField(value)) {\n return false;\n }\n if (value && value.trim() !== '' && !REGEX.email.test(value)) {\n setValidationError('Email is not valid');\n return false;\n }\n setValidationError(null);\n return true;\n };\n\n const fieldStateRef = useRef(fieldState);\n useEffect(() => {\n fieldStateRef.current = fieldState;\n }, [fieldState]);\n\n const textInputRef = useRef<HTMLInputElement>(null);\n const cellEditKey = `${id}-${columnKey}`;\n\n useLayoutEffect(() => {\n const el = textInputRef.current;\n if (!el) return;\n const cached = _cursorPositionCache.get(cellEditKey);\n if (cached) {\n el.focus();\n try {\n el.setSelectionRange(cached.start, cached.end);\n } catch {\n // email/number inputs may not support setSelectionRange\n }\n } else if (_blurringCellKey !== cellEditKey) {\n el.focus();\n }\n }, [cellEditKey]);\n\n const debouncedSyncTimerRef = useRef<ReturnType<typeof setTimeout>>();\n\n useEffect(() => {\n return () => {\n if (debouncedSyncTimerRef.current) clearTimeout(debouncedSyncTimerRef.current);\n };\n }, []);\n\n const syncToParent = useCallback(\n (value: string) => {\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value,\n originalValue: cell.value,\n });\n }\n },\n [handleCellValueChange, addPendingEdit, id, columnKey, cell.value],\n );\n\n const debouncedSyncToParent = useCallback(\n (value: string) => {\n if (debouncedSyncTimerRef.current) clearTimeout(debouncedSyncTimerRef.current);\n debouncedSyncTimerRef.current = setTimeout(() => {\n syncToParent(value);\n }, 300);\n },\n [syncToParent],\n );\n\n const flushSyncToParent = useCallback(() => {\n if (debouncedSyncTimerRef.current) {\n clearTimeout(debouncedSyncTimerRef.current);\n debouncedSyncTimerRef.current = undefined;\n syncToParent(String(fieldStateRef.current.value ?? ''));\n }\n }, [syncToParent]);\n\n const handleBlurValidation = useCallback(() => {\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const currentValue = fieldStateRef.current.value;\n\n switch (columnType) {\n case 'url':\n validateUrlField(String(currentValue ?? ''));\n break;\n case 'e-mail':\n validateEmailField(String(currentValue ?? ''));\n break;\n default:\n validateRequiredField(currentValue);\n break;\n }\n }, [cell?.column?.type]);\n\n const validateAndGetValue = useCallback((): ValidateAndSaveResult => {\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const currentValue = fieldStateRef.current.value;\n const currentCurrency = fieldStateRef.current.currencyCode;\n\n let isValid = true;\n\n switch (columnType) {\n case 'url':\n isValid = validateUrlField(String(currentValue ?? ''));\n break;\n case 'e-mail':\n isValid = validateEmailField(String(currentValue ?? ''));\n break;\n default:\n isValid = validateRequiredField(currentValue);\n break;\n }\n\n if (!isValid) {\n return { isValid: false };\n }\n\n let meta: ValidateAndSaveResult['meta'] = null;\n if (columnType === 'currency') {\n const latestCurrency = getCurrencyForCell?.(currencyCellId) || currentCurrency;\n meta = { currency_code: latestCurrency };\n }\n\n return {\n isValid: true,\n value: (typeof currentValue === 'number' ? String(currentValue) : currentValue) as string | boolean | null,\n meta,\n };\n }, [cell?.column?.type, currencyCellId, getCurrencyForCell]);\n\n useEffect(() => {\n if (registerValidation && inlineEditing === columnKey) {\n registerValidation(validateAndGetValue);\n }\n }, [registerValidation, validateAndGetValue, inlineEditing, columnKey]);\n\n const renderFieldByType = () => {\n if (cell?.column?.is_master_data && cell?.column?.masterDataName && (cell?.column?.masterDataColumnName || cell?.column?.masterDataFormula)) {\n const currentPendingEdit = getPendingEdit?.(String(id), columnKey);\n const masterDataValue = selectedMasterData?.value ?? currentPendingEdit?.value ?? cell.value;\n\n return (\n <div onMouseDown={(e) => e.stopPropagation()} className='z-[120] h-full w-full'>\n <MasterDataInlineField\n id={`master-data-cell-${id}-${cell.column.id}`}\n value={masterDataValue as string | number | null}\n onChange={(value, reference) => {\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: value as string | boolean | null,\n meta: { reference: reference || null },\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(value, { reference: reference || undefined });\n validateRequiredField((value as string | boolean | null) ?? '');\n }}\n placeholder={cell.column?.Header as string | undefined}\n masterDataName={cell.column.masterDataName as string}\n masterDataColumnName={cell.column.masterDataColumnName as string}\n masterDataFormula={cell.column.masterDataFormula as string | undefined}\n masterDataFilters={cell.column.masterDataFilters as Record<string, unknown> | undefined}\n onOpenMasterDataModal={openMasterDataModal as never}\n reference={currentPendingEdit?.meta?.reference as Record<string, unknown> | undefined}\n />\n </div>\n );\n }\n\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const rowCellMeta = columnKey\n ? (cell?.row?.original?.__cellMetadata as Record<string, { choices?: string[] }> | undefined)?.[columnKey]\n : undefined;\n\n switch (columnType) {\n case 'choice': {\n const choices = rowCellMeta?.choices ?? (cell?.column?.choices as string[] | undefined);\n return (\n <div onMouseDown={(e) => e.stopPropagation()}>\n <SelectField\n id={`select-cell-${id}-${cell.column.id}`}\n value={fieldState.value || null}\n selectOptions={\n choices?.map((choice: string) => ({\n label: choice,\n value: choice,\n })) || []\n }\n onChange={(selectedOptions: TSelectedOptions) => {\n const value = selectedOptions\n ? Array.isArray(selectedOptions)\n ? selectedOptions[0]?.value?.toString() || ''\n : selectedOptions?.value?.toString() || ''\n : '';\n setFieldState((prev) => ({ ...prev, value }));\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(value);\n validateRequiredField(value);\n }}\n allowClear={true}\n inputStyles={{\n height: 'var(--row-height)',\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n className='z-[120]'\n />\n </div>\n );\n }\n\n case 'datetime':\n case 'date':\n return (\n <div\n onMouseDown={(e) => {\n e.stopPropagation();\n if ((e.target as HTMLElement).tagName !== 'INPUT') {\n e.preventDefault();\n }\n }}\n >\n <DateTimeField\n id={`date-cell-${id}-${cell.column.id}`}\n value={(fieldState.value as string | undefined) || undefined}\n handleOnChange={(value) => {\n const newValue = value || '';\n setFieldState((prev) => ({ ...prev, value: newValue }));\n handleCellValueChange(createSyntheticChangeEvent(newValue));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: newValue,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(newValue);\n validateRequiredField(newValue);\n }}\n showTime={columnType === 'datetime'}\n dateFormat={columnType === 'date' ? 'MM/DD/YYYY' : undefined}\n className='z-[120] w-full'\n />\n </div>\n );\n\n case 'currency': {\n const originalCurrencyCode = getCurrencyFromCell();\n return (\n <div onMouseDown={(e) => e.stopPropagation()} className='z-[120] h-full w-full'>\n <InlineCurrencyField\n id={currencyCellId}\n value={String(fieldState.value ?? '')}\n onChange={(numericValue, currency_code) => {\n setFieldState((prev) => ({\n value: numericValue,\n currencyCode: currency_code || prev.currencyCode,\n }));\n handleCellValueChange(createSyntheticChangeEvent(numericValue));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: numericValue,\n meta: { currency_code },\n originalValue: cell.value,\n originalMeta: { currency_code: originalCurrencyCode },\n });\n }\n validateRequiredField(numericValue);\n callLiveFieldOperation(numericValue, { currency_code });\n }}\n currencyCode={fieldState.currencyCode}\n inputStyle={{\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n autoFocus\n disabled={isAnyFieldOperationLoading}\n />\n </div>\n );\n }\n\n case 'percentage':\n return (\n <label className='relative block h-full' onMouseDown={(e) => e.stopPropagation()}>\n <input\n ref={textInputRef}\n type='number'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n try {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n } catch {\n // number inputs may not support selection\n }\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n validateRequiredField(value);\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n className='border border-gray-300 h-full text-gray-900 dark:bg-black-800 dark:text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 dark:focus:ring-white dark:focus:border-white block w-full px-2.5 py-1.5 font-inter font-medium disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400'\n id={`percentage-cell-${id}-${cell.column.id}`}\n style={{\n height: 'var(--row-height)',\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n autoComplete='off'\n disabled={isAnyFieldOperationLoading}\n />\n <span className='absolute inset-y-0 right-3 flex items-center pointer-events-none h-full dark:text-black-100'>%</span>\n </label>\n );\n\n case 'boolean': {\n const currentBoolValue =\n fieldState.value === true ||\n fieldState.value === 'true' ||\n fieldState.value === 'Yes' ||\n fieldState.value === 'True' ||\n fieldState.value === 1;\n\n return (\n <div\n onMouseDown={(e) => e.stopPropagation()}\n className='h-full w-full flex items-center px-2.5 bg-white dark:bg-black-800 rounded border-2 focus:outline-primary-600 border border-primary-600 dark:border-black-700 z-[120]'\n >\n <Toggle\n id={`toggle-cell-${id}-${cell.column.id}`}\n isChecked={currentBoolValue}\n onChange={(checked) => {\n setFieldState((prev) => ({ ...prev, value: checked }));\n handleCellValueChange(createSyntheticChangeEvent(checked));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: checked,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(checked);\n }}\n hideStatus={false}\n labelDirection='right'\n stopClickPropagation={true}\n statusText={currentBoolValue ? 'Yes' : 'No'}\n />\n </div>\n );\n }\n\n case 'url':\n return (\n <input\n ref={textInputRef}\n type='url'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n if (validationError) {\n validateUrlField(value);\n } else {\n validateRequiredField(value);\n }\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n\n case 'e-mail':\n return (\n <input\n ref={textInputRef}\n type='email'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n try {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n } catch {\n // email inputs may not support selection\n }\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n if (validationError) {\n validateEmailField(value);\n } else {\n validateRequiredField(value);\n }\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n\n default:\n return (\n <input\n ref={textInputRef}\n type='text'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n validateRequiredField(value);\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n }\n };\n\n return (\n <div ref={cellRef} className='relative h-full w-full overflow-visible'>\n <div\n className={cn(\n 'border p-0.5 rounded-lg h-full',\n displayValidationError ? 'border-error-600' : 'border-neutral-200 dark:border-black-700',\n isAnyFieldOperationLoading && 'pointer-events-none opacity-70',\n )}\n >\n {renderFieldByType()}\n </div>\n {Boolean(cell?.column?.is_live_field) && (\n <div className='absolute -top-1.5 -right-1.5 bg-white dark:bg-black-800 rounded-full w-5 h-5 flex items-center justify-center border border-primary-300 dark:border-primary-600 shadow-sm z-[125]'>\n {isFieldOperationLoading ? (\n <LoadingSpinnerIcon className='text-primary-600 dark:text-white' size={8} />\n ) : (\n <BoltOutlined\n sx={{\n fontSize: 12,\n color: 'var(--color-primary-600)',\n }}\n />\n )}\n </div>\n )}\n {displayValidationError && (\n <div className='absolute top-full left-0 mt-1 text-error-600 text-xs font-medium z-[130] bg-white dark:bg-black-800 px-2 py-1 rounded shadow-lg w-full'>\n {displayValidationError}\n </div>\n )}\n </div>\n );\n};\n"],"names":["_cursorPositionCache","_blurringCellKey","_pendingFieldOpCellKey","createSyntheticChangeEvent","value","InlineEditField","cell","id","inlineEditing","cellRef","handleCellValueChange","registerValidation","openMasterDataModal","selectedMasterData","clearSelectedMasterData","getCurrencyForCell","getPendingEdit","addPendingEdit","onFieldOperationFlow","fieldOperationLoading","useContext","TableContext","isFieldOperationLoading","isAnyFieldOperationLoading","callLiveFieldOperation","useCallback","meta","getCurrencyFromCell","rawData","headerKey","columnKey","dataFromHeader","dataFromKey","currencyCellId","contextCurrency","initialPendingEdit","fieldState","setFieldState","useState","validationError","setValidationError","computedValidationError","valueToValidate","result","validateCellValue","pendingError","displayValidationError","previousInlineEditingRef","useRef","useEffect","currencyFromContext","pendingEdit","initialValue","initialCurrency","validateRequiredField","validateUrlField","REGEX","validateEmailField","fieldStateRef","textInputRef","cellEditKey","useLayoutEffect","el","cached","debouncedSyncTimerRef","syncToParent","debouncedSyncToParent","flushSyncToParent","handleBlurValidation","columnType","currentValue","validateAndGetValue","currentCurrency","isValid","renderFieldByType","currentPendingEdit","masterDataValue","jsx","e","MasterDataInlineField","reference","rowCellMeta","choices","SelectField","choice","selectedOptions","prev","DateTimeField","newValue","originalCurrencyCode","InlineCurrencyField","numericValue","currency_code","jsxs","currentBoolValue","Toggle","checked","cn","LoadingSpinnerIcon","BoltOutlined"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InlineEditField.es.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/InlineEditField.tsx"],"sourcesContent":["import type { ICell, ValidateAndSaveResult } from '../../types';\nimport { validateCellValue } from '../../validateCell';\nimport { REGEX } from '../../../../../constants/table';\nimport { DateTimeField } from '../../../../forms/date-time-field/DateTimeField';\nimport { SelectField } from '../../../../forms/select-field/SelectField';\nimport { Toggle } from '../../../../forms/toggle/Toggle';\nimport { BoltOutlined } from '@mui/icons-material';\nimport cn from 'classnames';\nimport React, { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nimport { TableContext } from '../../context';\nimport { InlineCurrencyField } from './InlineCurrencyField';\nimport { MasterDataInlineField } from './MasterDataInlineField';\nimport { LoadingSpinnerIcon } from '../../../../icon';\n\ntype InlineEditFieldProps = {\n cell: ICell;\n id: string | number;\n inlineEditing: string | null;\n cellRef: React.RefObject<HTMLDivElement>;\n handleCellValueChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n handleUpdateCellData: (\n directValue?: string | boolean | null,\n meta?: { currency_code?: string | null; reference?: unknown | null; [key: string]: unknown | null } | null,\n ) => void;\n registerValidation?: (validateFn: () => ValidateAndSaveResult) => void;\n};\n\ntype TSelectedOption = { label: string; value: string };\ntype TSelectedOptions = TSelectedOption | TSelectedOption[] | null;\n\nconst _cursorPositionCache = new Map<string, { start: number; end: number }>();\nlet _blurringCellKey: string | null = null;\nlet _pendingFieldOpCellKey: string | null = null;\n\nconst createSyntheticChangeEvent = (value: string | number | boolean | null): React.ChangeEvent<HTMLInputElement> => {\n return {\n target: { value } as HTMLInputElement,\n } as React.ChangeEvent<HTMLInputElement>;\n};\n\nexport const InlineEditField: React.FC<InlineEditFieldProps> = ({ cell, id, inlineEditing, cellRef, handleCellValueChange, registerValidation }) => {\n const {\n openMasterDataModal,\n selectedMasterData,\n clearSelectedMasterData,\n getCurrencyForCell,\n getPendingEdit,\n addPendingEdit,\n onFieldOperationFlow,\n fieldOperationLoading,\n } = useContext(TableContext);\n\n const isFieldOperationLoading = fieldOperationLoading === `${id}-${cell?.column?.id}`;\n const isAnyFieldOperationLoading = Boolean(fieldOperationLoading);\n\n const callLiveFieldOperation = useCallback(\n (value: unknown, meta?: { reference?: unknown; currency_code?: string }) => {\n if (!onFieldOperationFlow) return;\n\n onFieldOperationFlow({\n value,\n fieldId: cell?.column?.id as string,\n rowId: String(id),\n rowData: cell?.row?.original as Record<string, unknown>,\n columnKey: (cell?.column?.key as string) || '',\n flowName: cell?.column?.live_field_source as string | undefined,\n isLiveField: cell?.column?.is_live_field as boolean | undefined,\n meta,\n });\n },\n [\n cell?.column?.id,\n cell?.column?.is_live_field,\n cell?.column?.key,\n cell?.column?.live_field_source,\n cell?.row?.original,\n id,\n onFieldOperationFlow,\n ],\n );\n\n const getCurrencyFromCell = () => {\n const rawData = cell?.row?.original?.__rawData as Record<string, Record<string, unknown>> | undefined;\n const headerKey = cell?.column?.Header as string | undefined;\n const columnKey = cell?.column?.key as string | undefined;\n\n const dataFromHeader = headerKey ? rawData?.[headerKey]?.currency_code : undefined;\n const dataFromKey = columnKey ? rawData?.[columnKey]?.currency_code : undefined;\n\n if (dataFromHeader && dataFromHeader !== '') {\n return dataFromHeader as string;\n }\n if (dataFromKey && dataFromKey !== '') {\n return dataFromKey as string;\n }\n\n return (cell?.column?.currencyCode as string) || 'USD';\n };\n\n const columnKey = (cell.column.key as string) || '';\n const currencyCellId = `${id}-${columnKey}`;\n const contextCurrency = getCurrencyForCell?.(currencyCellId);\n const initialPendingEdit = getPendingEdit?.(String(id), columnKey);\n\n const [fieldState, setFieldState] = useState<{ value: string | number | boolean | null; currencyCode: string }>({\n value: initialPendingEdit?.value !== undefined ? (initialPendingEdit.value as string | number | boolean | null) : ((cell.value as string | number | boolean | null) || ''),\n currencyCode: (initialPendingEdit?.meta?.currency_code as string) || contextCurrency || getCurrencyFromCell(),\n });\n const [validationError, setValidationError] = useState<string | null>(null);\n\n const computedValidationError = (() => {\n if (inlineEditing !== columnKey) return null;\n const valueToValidate = typeof fieldState.value === 'number' ? String(fieldState.value) : fieldState.value;\n const result = validateCellValue(valueToValidate, cell?.column as { type?: string; is_required?: boolean });\n return result.isValid ? null : result.error || null;\n })();\n\n const pendingError = getPendingEdit?.(String(id), columnKey)?.validationError;\n const displayValidationError = validationError || computedValidationError || pendingError || null;\n\n const previousInlineEditingRef = useRef<string | null>(null);\n\n useEffect(() => {\n const isEnteringEditMode = inlineEditing === columnKey && previousInlineEditingRef.current !== columnKey;\n\n if (isEnteringEditMode) {\n const currencyFromContext = getCurrencyForCell?.(`${id}-${columnKey}`);\n const pendingEdit = getPendingEdit?.(String(id), columnKey);\n const initialValue = pendingEdit?.value !== undefined ? pendingEdit.value : ((cell.value as string | boolean | null) || '');\n const initialCurrency = (pendingEdit?.meta?.currency_code as string) || currencyFromContext || getCurrencyFromCell();\n\n setFieldState({\n value: initialValue as string | number | boolean | null,\n currencyCode: initialCurrency,\n });\n }\n\n if (inlineEditing !== columnKey && previousInlineEditingRef.current === columnKey) {\n setValidationError(null);\n }\n\n previousInlineEditingRef.current = inlineEditing;\n }, [inlineEditing, columnKey, getCurrencyForCell, getPendingEdit, id, cell.value]);\n\n useEffect(() => {\n if (selectedMasterData && inlineEditing === columnKey && cell?.column?.masterDataColumnName && cell?.column?.masterDataName) {\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: selectedMasterData.value as string | boolean | null,\n meta: { reference: selectedMasterData.reference },\n originalValue: cell.value,\n });\n }\n handleCellValueChange(createSyntheticChangeEvent(selectedMasterData.value as string | number | boolean | null));\n callLiveFieldOperation(selectedMasterData.value, { reference: selectedMasterData.reference });\n clearSelectedMasterData?.();\n }\n }, [\n selectedMasterData,\n inlineEditing,\n columnKey,\n cell?.column?.masterDataColumnName,\n cell?.column?.masterDataName,\n addPendingEdit,\n id,\n cell.value,\n handleCellValueChange,\n callLiveFieldOperation,\n clearSelectedMasterData,\n ]);\n\n const validateRequiredField = (value: string | number | boolean | null): boolean => {\n if (cell?.column?.is_required) {\n const isEmpty = value === null || value === undefined || value === '' || (typeof value === 'string' && value.trim() === '');\n if (isEmpty) {\n setValidationError('Field required');\n return false;\n }\n }\n setValidationError(null);\n return true;\n };\n\n const validateUrlField = (value: string): boolean => {\n if (!validateRequiredField(value)) {\n return false;\n }\n if (value && value.trim() !== '' && !REGEX.url.test(value)) {\n setValidationError('Invalid URL format');\n return false;\n }\n setValidationError(null);\n return true;\n };\n\n const validateEmailField = (value: string): boolean => {\n if (!validateRequiredField(value)) {\n return false;\n }\n if (value && value.trim() !== '' && !REGEX.email.test(value)) {\n setValidationError('Email is not valid');\n return false;\n }\n setValidationError(null);\n return true;\n };\n\n const fieldStateRef = useRef(fieldState);\n useEffect(() => {\n fieldStateRef.current = fieldState;\n }, [fieldState]);\n\n const textInputRef = useRef<HTMLInputElement>(null);\n const cellEditKey = `${id}-${columnKey}`;\n\n useLayoutEffect(() => {\n const el = textInputRef.current;\n if (!el) return;\n const cached = _cursorPositionCache.get(cellEditKey);\n if (cached) {\n el.focus();\n try {\n el.setSelectionRange(cached.start, cached.end);\n } catch {\n // email/number inputs may not support setSelectionRange\n }\n } else if (_blurringCellKey !== cellEditKey) {\n el.focus();\n }\n }, [cellEditKey]);\n\n const debouncedSyncTimerRef = useRef<ReturnType<typeof setTimeout>>();\n\n useEffect(() => {\n return () => {\n if (debouncedSyncTimerRef.current) clearTimeout(debouncedSyncTimerRef.current);\n };\n }, []);\n\n const syncToParent = useCallback(\n (value: string) => {\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value,\n originalValue: cell.value,\n });\n }\n },\n [handleCellValueChange, addPendingEdit, id, columnKey, cell.value],\n );\n\n const debouncedSyncToParent = useCallback(\n (value: string) => {\n if (debouncedSyncTimerRef.current) clearTimeout(debouncedSyncTimerRef.current);\n debouncedSyncTimerRef.current = setTimeout(() => {\n syncToParent(value);\n }, 300);\n },\n [syncToParent],\n );\n\n const flushSyncToParent = useCallback(() => {\n if (debouncedSyncTimerRef.current) {\n clearTimeout(debouncedSyncTimerRef.current);\n debouncedSyncTimerRef.current = undefined;\n syncToParent(String(fieldStateRef.current.value ?? ''));\n }\n }, [syncToParent]);\n\n const handleBlurValidation = useCallback(() => {\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const currentValue = fieldStateRef.current.value;\n\n switch (columnType) {\n case 'url':\n validateUrlField(String(currentValue ?? ''));\n break;\n case 'e-mail':\n validateEmailField(String(currentValue ?? ''));\n break;\n default:\n validateRequiredField(currentValue);\n break;\n }\n }, [cell?.column?.type]);\n\n const validateAndGetValue = useCallback((): ValidateAndSaveResult => {\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const currentValue = fieldStateRef.current.value;\n const currentCurrency = fieldStateRef.current.currencyCode;\n\n let isValid = true;\n\n switch (columnType) {\n case 'url':\n isValid = validateUrlField(String(currentValue ?? ''));\n break;\n case 'e-mail':\n isValid = validateEmailField(String(currentValue ?? ''));\n break;\n default:\n isValid = validateRequiredField(currentValue);\n break;\n }\n\n if (!isValid) {\n return { isValid: false };\n }\n\n let meta: ValidateAndSaveResult['meta'] = null;\n if (columnType === 'currency') {\n const latestCurrency = getCurrencyForCell?.(currencyCellId) || currentCurrency;\n meta = { currency_code: latestCurrency };\n }\n\n return {\n isValid: true,\n value: (typeof currentValue === 'number' ? String(currentValue) : currentValue) as string | boolean | null,\n meta,\n };\n }, [cell?.column?.type, currencyCellId, getCurrencyForCell]);\n\n useEffect(() => {\n if (registerValidation && inlineEditing === columnKey) {\n registerValidation(validateAndGetValue);\n }\n }, [registerValidation, validateAndGetValue, inlineEditing, columnKey]);\n\n const renderFieldByType = () => {\n if (cell?.column?.is_master_data && cell?.column?.masterDataName && (cell?.column?.masterDataColumnName || cell?.column?.masterDataFormula)) {\n const currentPendingEdit = getPendingEdit?.(String(id), columnKey);\n const masterDataValue = selectedMasterData?.value ?? currentPendingEdit?.value ?? cell.value;\n\n return (\n <div onMouseDown={(e) => e.stopPropagation()} className='z-[120] h-full w-full'>\n <MasterDataInlineField\n id={`master-data-cell-${id}-${cell.column.id}`}\n value={masterDataValue as string | number | null}\n onChange={(value, reference) => {\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: value as string | boolean | null,\n meta: { reference: reference || null },\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(value, { reference: reference || undefined });\n validateRequiredField((value as string | boolean | null) ?? '');\n }}\n placeholder={cell.column?.Header as string | undefined}\n masterDataName={cell.column.masterDataName as string}\n masterDataColumnName={cell.column.masterDataColumnName as string}\n masterDataFormula={cell.column.masterDataFormula as string | undefined}\n masterDataFilters={cell.column.masterDataFilters as Record<string, unknown> | undefined}\n onOpenMasterDataModal={openMasterDataModal as never}\n reference={currentPendingEdit?.meta?.reference as Record<string, unknown> | undefined}\n />\n </div>\n );\n }\n\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const rowCellMeta = columnKey\n ? (cell?.row?.original?.__cellMetadata as Record<string, { choices?: string[] }> | undefined)?.[columnKey]\n : undefined;\n\n switch (columnType) {\n case 'choice': {\n const choices = rowCellMeta?.choices ?? (cell?.column?.choices as string[] | undefined);\n return (\n <div onMouseDown={(e) => e.stopPropagation()}>\n <SelectField\n id={`select-cell-${id}-${cell.column.id}`}\n value={fieldState.value || null}\n selectOptions={\n choices?.map((choice: string) => ({\n label: choice,\n value: choice,\n })) || []\n }\n onChange={(selectedOptions: TSelectedOptions) => {\n const value = selectedOptions\n ? Array.isArray(selectedOptions)\n ? selectedOptions[0]?.value?.toString() || ''\n : selectedOptions?.value?.toString() || ''\n : '';\n setFieldState((prev) => ({ ...prev, value }));\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(value);\n validateRequiredField(value);\n }}\n allowClear={true}\n inputStyles={{\n height: 'var(--row-height)',\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n className='z-[120]'\n />\n </div>\n );\n }\n\n case 'datetime':\n case 'date':\n return (\n <div\n onMouseDown={(e) => {\n e.stopPropagation();\n if ((e.target as HTMLElement).tagName !== 'INPUT') {\n e.preventDefault();\n }\n }}\n >\n <DateTimeField\n id={`date-cell-${id}-${cell.column.id}`}\n value={(fieldState.value as string | undefined) || undefined}\n handleOnChange={(value) => {\n const newValue = value || '';\n setFieldState((prev) => ({ ...prev, value: newValue }));\n handleCellValueChange(createSyntheticChangeEvent(newValue));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: newValue,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(newValue);\n validateRequiredField(newValue);\n }}\n showTime={columnType === 'datetime'}\n dateFormat={columnType === 'date' ? 'MM/DD/YYYY' : undefined}\n className='z-[120] w-full'\n />\n </div>\n );\n\n case 'currency': {\n const originalCurrencyCode = getCurrencyFromCell();\n return (\n <div onMouseDown={(e) => e.stopPropagation()} className='z-[120] h-full w-full'>\n <InlineCurrencyField\n id={currencyCellId}\n value={String(fieldState.value ?? '')}\n onChange={(numericValue, currency_code) => {\n setFieldState((prev) => ({\n value: numericValue,\n currencyCode: currency_code || prev.currencyCode,\n }));\n handleCellValueChange(createSyntheticChangeEvent(numericValue));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: numericValue,\n meta: { currency_code },\n originalValue: cell.value,\n originalMeta: { currency_code: originalCurrencyCode },\n });\n }\n validateRequiredField(numericValue);\n callLiveFieldOperation(numericValue, { currency_code });\n }}\n currencyCode={fieldState.currencyCode}\n inputStyle={{\n height: 'var(--row-height)',\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n autoFocus\n disabled={isAnyFieldOperationLoading}\n />\n </div>\n );\n }\n\n case 'percentage':\n return (\n <label className='relative block h-full' onMouseDown={(e) => e.stopPropagation()}>\n <input\n ref={textInputRef}\n type='number'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n try {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n } catch {\n // number inputs may not support selection\n }\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n validateRequiredField(value);\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n className='border border-gray-300 h-full text-gray-900 dark:bg-black-800 dark:text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 dark:focus:ring-white dark:focus:border-white block w-full px-2.5 py-1.5 font-inter font-medium disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400'\n id={`percentage-cell-${id}-${cell.column.id}`}\n style={{\n height: 'var(--row-height)',\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n autoComplete='off'\n disabled={isAnyFieldOperationLoading}\n />\n <span className='absolute inset-y-0 right-3 flex items-center pointer-events-none h-full dark:text-black-100'>%</span>\n </label>\n );\n\n case 'boolean': {\n const currentBoolValue =\n fieldState.value === true ||\n fieldState.value === 'true' ||\n fieldState.value === 'Yes' ||\n fieldState.value === 'True' ||\n fieldState.value === 1;\n\n return (\n <div\n onMouseDown={(e) => e.stopPropagation()}\n className='h-full w-full flex items-center px-2.5 bg-white dark:bg-black-800 rounded border-2 focus:outline-primary-600 border border-primary-600 dark:border-black-700 z-[120]'\n >\n <Toggle\n id={`toggle-cell-${id}-${cell.column.id}`}\n isChecked={currentBoolValue}\n onChange={(checked) => {\n setFieldState((prev) => ({ ...prev, value: checked }));\n handleCellValueChange(createSyntheticChangeEvent(checked));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: checked,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(checked);\n }}\n hideStatus={false}\n labelDirection='right'\n stopClickPropagation={true}\n statusText={currentBoolValue ? 'Yes' : 'No'}\n />\n </div>\n );\n }\n\n case 'url':\n return (\n <input\n ref={textInputRef}\n type='url'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n if (validationError) {\n validateUrlField(value);\n } else {\n validateRequiredField(value);\n }\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n\n case 'e-mail':\n return (\n <input\n ref={textInputRef}\n type='email'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n try {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n } catch {\n // email inputs may not support selection\n }\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n if (validationError) {\n validateEmailField(value);\n } else {\n validateRequiredField(value);\n }\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n\n default:\n return (\n <input\n ref={textInputRef}\n type='text'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n validateRequiredField(value);\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n }\n };\n\n return (\n <div ref={cellRef} className='relative h-full w-full overflow-visible'>\n <div\n className={cn(\n 'border p-0.5 rounded-lg h-full',\n displayValidationError ? 'border-error-600' : 'border-neutral-200 dark:border-black-700',\n isAnyFieldOperationLoading && 'pointer-events-none opacity-70',\n )}\n >\n {renderFieldByType()}\n </div>\n {Boolean(cell?.column?.is_live_field) && (\n <div className='absolute -top-1.5 -right-1.5 bg-white dark:bg-black-800 rounded-full w-5 h-5 flex items-center justify-center border border-primary-300 dark:border-primary-600 shadow-sm z-[125]'>\n {isFieldOperationLoading ? (\n <LoadingSpinnerIcon className='text-primary-600 dark:text-white' size={8} />\n ) : (\n <BoltOutlined\n sx={{\n fontSize: 12,\n color: 'var(--color-primary-600)',\n }}\n />\n )}\n </div>\n )}\n {displayValidationError && (\n <div className='absolute top-full left-0 mt-1 text-error-600 text-xs font-medium z-[130] bg-white dark:bg-black-800 px-2 py-1 rounded shadow-lg w-full'>\n {displayValidationError}\n </div>\n )}\n </div>\n );\n};\n"],"names":["_cursorPositionCache","_blurringCellKey","_pendingFieldOpCellKey","createSyntheticChangeEvent","value","InlineEditField","cell","id","inlineEditing","cellRef","handleCellValueChange","registerValidation","openMasterDataModal","selectedMasterData","clearSelectedMasterData","getCurrencyForCell","getPendingEdit","addPendingEdit","onFieldOperationFlow","fieldOperationLoading","useContext","TableContext","isFieldOperationLoading","isAnyFieldOperationLoading","callLiveFieldOperation","useCallback","meta","getCurrencyFromCell","rawData","headerKey","columnKey","dataFromHeader","dataFromKey","currencyCellId","contextCurrency","initialPendingEdit","fieldState","setFieldState","useState","validationError","setValidationError","computedValidationError","valueToValidate","result","validateCellValue","pendingError","displayValidationError","previousInlineEditingRef","useRef","useEffect","currencyFromContext","pendingEdit","initialValue","initialCurrency","validateRequiredField","validateUrlField","REGEX","validateEmailField","fieldStateRef","textInputRef","cellEditKey","useLayoutEffect","el","cached","debouncedSyncTimerRef","syncToParent","debouncedSyncToParent","flushSyncToParent","handleBlurValidation","columnType","currentValue","validateAndGetValue","currentCurrency","isValid","renderFieldByType","currentPendingEdit","masterDataValue","jsx","e","MasterDataInlineField","reference","rowCellMeta","choices","SelectField","choice","selectedOptions","prev","DateTimeField","newValue","originalCurrencyCode","InlineCurrencyField","numericValue","currency_code","jsxs","currentBoolValue","Toggle","checked","cn","LoadingSpinnerIcon","BoltOutlined"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InlineEditField.es.js","sources":["../../../../../../src/components/data-display/infinite-table/body/cell/InlineEditField.tsx"],"sourcesContent":["import type { ICell, ValidateAndSaveResult } from '../../types';\nimport { validateCellValue } from '../../validateCell';\nimport { REGEX } from '../../../../../constants/table';\nimport { DateTimeField } from '../../../../forms/date-time-field/DateTimeField';\nimport { SelectField } from '../../../../forms/select-field/SelectField';\nimport { Toggle } from '../../../../forms/toggle/Toggle';\nimport { BoltOutlined } from '@mui/icons-material';\nimport cn from 'classnames';\nimport React, { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nimport { TableContext } from '../../context';\nimport { InlineCurrencyField } from './InlineCurrencyField';\nimport { MasterDataInlineField } from './MasterDataInlineField';\nimport { LoadingSpinnerIcon } from '../../../../icon';\n\ntype InlineEditFieldProps = {\n cell: ICell;\n id: string | number;\n inlineEditing: string | null;\n cellRef: React.RefObject<HTMLDivElement>;\n handleCellValueChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n handleUpdateCellData: (\n directValue?: string | boolean | null,\n meta?: { currency_code?: string | null; reference?: unknown | null; [key: string]: unknown | null } | null,\n ) => void;\n registerValidation?: (validateFn: () => ValidateAndSaveResult) => void;\n};\n\ntype TSelectedOption = { label: string; value: string };\ntype TSelectedOptions = TSelectedOption | TSelectedOption[] | null;\n\nconst _cursorPositionCache = new Map<string, { start: number; end: number }>();\nlet _blurringCellKey: string | null = null;\nlet _pendingFieldOpCellKey: string | null = null;\n\nconst createSyntheticChangeEvent = (value: string | number | boolean | null): React.ChangeEvent<HTMLInputElement> => {\n return {\n target: { value } as HTMLInputElement,\n } as React.ChangeEvent<HTMLInputElement>;\n};\n\nexport const InlineEditField: React.FC<InlineEditFieldProps> = ({ cell, id, inlineEditing, cellRef, handleCellValueChange, registerValidation }) => {\n const {\n openMasterDataModal,\n selectedMasterData,\n clearSelectedMasterData,\n getCurrencyForCell,\n getPendingEdit,\n addPendingEdit,\n onFieldOperationFlow,\n fieldOperationLoading,\n } = useContext(TableContext);\n\n const isFieldOperationLoading = fieldOperationLoading === `${id}-${cell?.column?.id}`;\n const isAnyFieldOperationLoading = Boolean(fieldOperationLoading);\n\n const callLiveFieldOperation = useCallback(\n (value: unknown, meta?: { reference?: unknown; currency_code?: string }) => {\n if (!onFieldOperationFlow) return;\n\n onFieldOperationFlow({\n value,\n fieldId: cell?.column?.id as string,\n rowId: String(id),\n rowData: cell?.row?.original as Record<string, unknown>,\n columnKey: (cell?.column?.key as string) || '',\n flowName: cell?.column?.live_field_source as string | undefined,\n isLiveField: cell?.column?.is_live_field as boolean | undefined,\n meta,\n });\n },\n [\n cell?.column?.id,\n cell?.column?.is_live_field,\n cell?.column?.key,\n cell?.column?.live_field_source,\n cell?.row?.original,\n id,\n onFieldOperationFlow,\n ],\n );\n\n const getCurrencyFromCell = () => {\n const rawData = cell?.row?.original?.__rawData as Record<string, Record<string, unknown>> | undefined;\n const headerKey = cell?.column?.Header as string | undefined;\n const columnKey = cell?.column?.key as string | undefined;\n\n const dataFromHeader = headerKey ? rawData?.[headerKey]?.currency_code : undefined;\n const dataFromKey = columnKey ? rawData?.[columnKey]?.currency_code : undefined;\n\n if (dataFromHeader && dataFromHeader !== '') {\n return dataFromHeader as string;\n }\n if (dataFromKey && dataFromKey !== '') {\n return dataFromKey as string;\n }\n\n return (cell?.column?.currencyCode as string) || 'USD';\n };\n\n const columnKey = (cell.column.key as string) || '';\n const currencyCellId = `${id}-${columnKey}`;\n const contextCurrency = getCurrencyForCell?.(currencyCellId);\n const initialPendingEdit = getPendingEdit?.(String(id), columnKey);\n\n const [fieldState, setFieldState] = useState<{ value: string | number | boolean | null; currencyCode: string }>({\n value: initialPendingEdit?.value !== undefined ? (initialPendingEdit.value as string | number | boolean | null) : ((cell.value as string | number | boolean | null) || ''),\n currencyCode: (initialPendingEdit?.meta?.currency_code as string) || contextCurrency || getCurrencyFromCell(),\n });\n const [validationError, setValidationError] = useState<string | null>(null);\n\n const computedValidationError = (() => {\n if (inlineEditing !== columnKey) return null;\n const valueToValidate = typeof fieldState.value === 'number' ? String(fieldState.value) : fieldState.value;\n const result = validateCellValue(valueToValidate, cell?.column as { type?: string; is_required?: boolean });\n return result.isValid ? null : result.error || null;\n })();\n\n const pendingError = getPendingEdit?.(String(id), columnKey)?.validationError;\n const displayValidationError = validationError || computedValidationError || pendingError || null;\n\n const previousInlineEditingRef = useRef<string | null>(null);\n\n useEffect(() => {\n const isEnteringEditMode = inlineEditing === columnKey && previousInlineEditingRef.current !== columnKey;\n\n if (isEnteringEditMode) {\n const currencyFromContext = getCurrencyForCell?.(`${id}-${columnKey}`);\n const pendingEdit = getPendingEdit?.(String(id), columnKey);\n const initialValue = pendingEdit?.value !== undefined ? pendingEdit.value : ((cell.value as string | boolean | null) || '');\n const initialCurrency = (pendingEdit?.meta?.currency_code as string) || currencyFromContext || getCurrencyFromCell();\n\n setFieldState({\n value: initialValue as string | number | boolean | null,\n currencyCode: initialCurrency,\n });\n }\n\n if (inlineEditing !== columnKey && previousInlineEditingRef.current === columnKey) {\n setValidationError(null);\n }\n\n previousInlineEditingRef.current = inlineEditing;\n }, [inlineEditing, columnKey, getCurrencyForCell, getPendingEdit, id, cell.value]);\n\n useEffect(() => {\n if (selectedMasterData && inlineEditing === columnKey && cell?.column?.masterDataColumnName && cell?.column?.masterDataName) {\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: selectedMasterData.value as string | boolean | null,\n meta: { reference: selectedMasterData.reference },\n originalValue: cell.value,\n });\n }\n handleCellValueChange(createSyntheticChangeEvent(selectedMasterData.value as string | number | boolean | null));\n callLiveFieldOperation(selectedMasterData.value, { reference: selectedMasterData.reference });\n clearSelectedMasterData?.();\n }\n }, [\n selectedMasterData,\n inlineEditing,\n columnKey,\n cell?.column?.masterDataColumnName,\n cell?.column?.masterDataName,\n addPendingEdit,\n id,\n cell.value,\n handleCellValueChange,\n callLiveFieldOperation,\n clearSelectedMasterData,\n ]);\n\n const validateRequiredField = (value: string | number | boolean | null): boolean => {\n if (cell?.column?.is_required) {\n const isEmpty = value === null || value === undefined || value === '' || (typeof value === 'string' && value.trim() === '');\n if (isEmpty) {\n setValidationError('Field required');\n return false;\n }\n }\n setValidationError(null);\n return true;\n };\n\n const validateUrlField = (value: string): boolean => {\n if (!validateRequiredField(value)) {\n return false;\n }\n if (value && value.trim() !== '' && !REGEX.url.test(value)) {\n setValidationError('Invalid URL format');\n return false;\n }\n setValidationError(null);\n return true;\n };\n\n const validateEmailField = (value: string): boolean => {\n if (!validateRequiredField(value)) {\n return false;\n }\n if (value && value.trim() !== '' && !REGEX.email.test(value)) {\n setValidationError('Email is not valid');\n return false;\n }\n setValidationError(null);\n return true;\n };\n\n const fieldStateRef = useRef(fieldState);\n useEffect(() => {\n fieldStateRef.current = fieldState;\n }, [fieldState]);\n\n const textInputRef = useRef<HTMLInputElement>(null);\n const cellEditKey = `${id}-${columnKey}`;\n\n useLayoutEffect(() => {\n const el = textInputRef.current;\n if (!el) return;\n const cached = _cursorPositionCache.get(cellEditKey);\n if (cached) {\n el.focus();\n try {\n el.setSelectionRange(cached.start, cached.end);\n } catch {\n // email/number inputs may not support setSelectionRange\n }\n } else if (_blurringCellKey !== cellEditKey) {\n el.focus();\n }\n }, [cellEditKey]);\n\n const debouncedSyncTimerRef = useRef<ReturnType<typeof setTimeout>>();\n\n useEffect(() => {\n return () => {\n if (debouncedSyncTimerRef.current) clearTimeout(debouncedSyncTimerRef.current);\n };\n }, []);\n\n const syncToParent = useCallback(\n (value: string) => {\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value,\n originalValue: cell.value,\n });\n }\n },\n [handleCellValueChange, addPendingEdit, id, columnKey, cell.value],\n );\n\n const debouncedSyncToParent = useCallback(\n (value: string) => {\n if (debouncedSyncTimerRef.current) clearTimeout(debouncedSyncTimerRef.current);\n debouncedSyncTimerRef.current = setTimeout(() => {\n syncToParent(value);\n }, 300);\n },\n [syncToParent],\n );\n\n const flushSyncToParent = useCallback(() => {\n if (debouncedSyncTimerRef.current) {\n clearTimeout(debouncedSyncTimerRef.current);\n debouncedSyncTimerRef.current = undefined;\n syncToParent(String(fieldStateRef.current.value ?? ''));\n }\n }, [syncToParent]);\n\n const handleBlurValidation = useCallback(() => {\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const currentValue = fieldStateRef.current.value;\n\n switch (columnType) {\n case 'url':\n validateUrlField(String(currentValue ?? ''));\n break;\n case 'e-mail':\n validateEmailField(String(currentValue ?? ''));\n break;\n default:\n validateRequiredField(currentValue);\n break;\n }\n }, [cell?.column?.type]);\n\n const validateAndGetValue = useCallback((): ValidateAndSaveResult => {\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const currentValue = fieldStateRef.current.value;\n const currentCurrency = fieldStateRef.current.currencyCode;\n\n let isValid = true;\n\n switch (columnType) {\n case 'url':\n isValid = validateUrlField(String(currentValue ?? ''));\n break;\n case 'e-mail':\n isValid = validateEmailField(String(currentValue ?? ''));\n break;\n default:\n isValid = validateRequiredField(currentValue);\n break;\n }\n\n if (!isValid) {\n return { isValid: false };\n }\n\n let meta: ValidateAndSaveResult['meta'] = null;\n if (columnType === 'currency') {\n const latestCurrency = getCurrencyForCell?.(currencyCellId) || currentCurrency;\n meta = { currency_code: latestCurrency };\n }\n\n return {\n isValid: true,\n value: (typeof currentValue === 'number' ? String(currentValue) : currentValue) as string | boolean | null,\n meta,\n };\n }, [cell?.column?.type, currencyCellId, getCurrencyForCell]);\n\n useEffect(() => {\n if (registerValidation && inlineEditing === columnKey) {\n registerValidation(validateAndGetValue);\n }\n }, [registerValidation, validateAndGetValue, inlineEditing, columnKey]);\n\n const renderFieldByType = () => {\n if (cell?.column?.is_master_data && cell?.column?.masterDataName && (cell?.column?.masterDataColumnName || cell?.column?.masterDataFormula)) {\n const currentPendingEdit = getPendingEdit?.(String(id), columnKey);\n const masterDataValue = selectedMasterData?.value ?? currentPendingEdit?.value ?? cell.value;\n\n return (\n <div onMouseDown={(e) => e.stopPropagation()} className='z-[120] h-full w-full'>\n <MasterDataInlineField\n id={`master-data-cell-${id}-${cell.column.id}`}\n value={masterDataValue as string | number | null}\n onChange={(value, reference) => {\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: value as string | boolean | null,\n meta: { reference: reference || null },\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(value, { reference: reference || undefined });\n validateRequiredField((value as string | boolean | null) ?? '');\n }}\n placeholder={cell.column?.Header as string | undefined}\n masterDataName={cell.column.masterDataName as string}\n masterDataColumnName={cell.column.masterDataColumnName as string}\n masterDataFormula={cell.column.masterDataFormula as string | undefined}\n masterDataFilters={cell.column.masterDataFilters as Record<string, unknown> | undefined}\n onOpenMasterDataModal={openMasterDataModal as never}\n reference={currentPendingEdit?.meta?.reference as Record<string, unknown> | undefined}\n />\n </div>\n );\n }\n\n const columnType = (cell?.column?.type as string | undefined)?.toLowerCase();\n const rowCellMeta = columnKey\n ? (cell?.row?.original?.__cellMetadata as Record<string, { choices?: string[] }> | undefined)?.[columnKey]\n : undefined;\n\n switch (columnType) {\n case 'choice': {\n const choices = rowCellMeta?.choices ?? (cell?.column?.choices as string[] | undefined);\n return (\n <div onMouseDown={(e) => e.stopPropagation()}>\n <SelectField\n id={`select-cell-${id}-${cell.column.id}`}\n value={fieldState.value || null}\n selectOptions={\n choices?.map((choice: string) => ({\n label: choice,\n value: choice,\n })) || []\n }\n onChange={(selectedOptions: TSelectedOptions) => {\n const value = selectedOptions\n ? Array.isArray(selectedOptions)\n ? selectedOptions[0]?.value?.toString() || ''\n : selectedOptions?.value?.toString() || ''\n : '';\n setFieldState((prev) => ({ ...prev, value }));\n handleCellValueChange(createSyntheticChangeEvent(value));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(value);\n validateRequiredField(value);\n }}\n allowClear={true}\n inputStyles={{\n height: 'var(--row-height)',\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n className='z-[120]'\n />\n </div>\n );\n }\n\n case 'datetime':\n case 'date':\n return (\n <div\n onMouseDown={(e) => {\n e.stopPropagation();\n if ((e.target as HTMLElement).tagName !== 'INPUT') {\n e.preventDefault();\n }\n }}\n >\n <DateTimeField\n id={`date-cell-${id}-${cell.column.id}`}\n value={(fieldState.value as string | undefined) || undefined}\n handleOnChange={(value) => {\n const newValue = value || '';\n setFieldState((prev) => ({ ...prev, value: newValue }));\n handleCellValueChange(createSyntheticChangeEvent(newValue));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: newValue,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(newValue);\n validateRequiredField(newValue);\n }}\n showTime={columnType === 'datetime'}\n dateFormat={columnType === 'date' ? 'MM/DD/YYYY' : undefined}\n className='z-[120] w-full'\n />\n </div>\n );\n\n case 'currency': {\n const originalCurrencyCode = getCurrencyFromCell();\n return (\n <div onMouseDown={(e) => e.stopPropagation()} className='z-[120] h-full w-full'>\n <InlineCurrencyField\n id={currencyCellId}\n value={String(fieldState.value ?? '')}\n onChange={(numericValue, currency_code) => {\n setFieldState((prev) => ({\n value: numericValue,\n currencyCode: currency_code || prev.currencyCode,\n }));\n handleCellValueChange(createSyntheticChangeEvent(numericValue));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: numericValue,\n meta: { currency_code },\n originalValue: cell.value,\n originalMeta: { currency_code: originalCurrencyCode },\n });\n }\n validateRequiredField(numericValue);\n callLiveFieldOperation(numericValue, { currency_code });\n }}\n currencyCode={fieldState.currencyCode}\n inputStyle={{\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n autoFocus\n disabled={isAnyFieldOperationLoading}\n />\n </div>\n );\n }\n\n case 'percentage':\n return (\n <label className='relative block h-full' onMouseDown={(e) => e.stopPropagation()}>\n <input\n ref={textInputRef}\n type='number'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n try {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n } catch {\n // number inputs may not support selection\n }\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n validateRequiredField(value);\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n className='border border-gray-300 h-full text-gray-900 dark:bg-black-800 dark:text-white text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 dark:focus:ring-white dark:focus:border-white block w-full px-2.5 py-1.5 font-inter font-medium disabled:bg-neutral-50 dark:disabled:!bg-black-800 dark:disabled:placeholder:!text-black-400'\n id={`percentage-cell-${id}-${cell.column.id}`}\n style={{\n height: 'var(--row-height)',\n border: 'none',\n boxShadow: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n }}\n autoComplete='off'\n disabled={isAnyFieldOperationLoading}\n />\n <span className='absolute inset-y-0 right-3 flex items-center pointer-events-none h-full dark:text-black-100'>%</span>\n </label>\n );\n\n case 'boolean': {\n const currentBoolValue =\n fieldState.value === true ||\n fieldState.value === 'true' ||\n fieldState.value === 'Yes' ||\n fieldState.value === 'True' ||\n fieldState.value === 1;\n\n return (\n <div\n onMouseDown={(e) => e.stopPropagation()}\n className='h-full w-full flex items-center px-2.5 bg-white dark:bg-black-800 rounded border-2 focus:outline-primary-600 border border-primary-600 dark:border-black-700 z-[120]'\n >\n <Toggle\n id={`toggle-cell-${id}-${cell.column.id}`}\n isChecked={currentBoolValue}\n onChange={(checked) => {\n setFieldState((prev) => ({ ...prev, value: checked }));\n handleCellValueChange(createSyntheticChangeEvent(checked));\n if (addPendingEdit) {\n addPendingEdit(String(id), columnKey, {\n value: checked,\n originalValue: cell.value,\n });\n }\n callLiveFieldOperation(checked);\n }}\n hideStatus={false}\n labelDirection='right'\n stopClickPropagation={true}\n statusText={currentBoolValue ? 'Yes' : 'No'}\n />\n </div>\n );\n }\n\n case 'url':\n return (\n <input\n ref={textInputRef}\n type='url'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n if (validationError) {\n validateUrlField(value);\n } else {\n validateRequiredField(value);\n }\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n\n case 'e-mail':\n return (\n <input\n ref={textInputRef}\n type='email'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n try {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n } catch {\n // email inputs may not support selection\n }\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n if (validationError) {\n validateEmailField(value);\n } else {\n validateRequiredField(value);\n }\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n\n default:\n return (\n <input\n ref={textInputRef}\n type='text'\n defaultValue={String(fieldState.value ?? '')}\n onChange={(e) => {\n _cursorPositionCache.set(cellEditKey, { start: e.target.selectionStart ?? 0, end: e.target.selectionEnd ?? 0 });\n const value = e.target.value;\n setFieldState((prev) => ({ ...prev, value }));\n fieldStateRef.current = { ...fieldStateRef.current, value };\n _pendingFieldOpCellKey = cellEditKey;\n validateRequiredField(value);\n debouncedSyncToParent(value);\n }}\n onBlur={() => {\n _blurringCellKey = cellEditKey;\n _cursorPositionCache.delete(cellEditKey);\n flushSyncToParent();\n handleBlurValidation();\n if (_pendingFieldOpCellKey === cellEditKey) {\n _pendingFieldOpCellKey = null;\n callLiveFieldOperation(fieldStateRef.current.value);\n }\n requestAnimationFrame(() => {\n _blurringCellKey = null;\n });\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n }}\n onMouseDown={(e) => e.stopPropagation()}\n className='text-neutral-900 dark:text-white dark:bg-black-800 text-base font-medium h-full font-inter overflow-hidden whitespace-nowrap text-ellipsis px-2.5 py-1 w-full border rounded focus:outline-primary-600 dark:focus:outline-white z-[120] shadow-xl disabled:bg-neutral-50 dark:disabled:!bg-black-800'\n style={{\n height: 'var(--row-height)',\n }}\n disabled={isAnyFieldOperationLoading}\n />\n );\n }\n };\n\n return (\n <div ref={cellRef} className='relative h-full w-full overflow-visible'>\n <div\n className={cn(\n 'border p-0.5 rounded-lg h-full',\n displayValidationError ? 'border-error-600' : 'border-neutral-200 dark:border-black-700',\n isAnyFieldOperationLoading && 'pointer-events-none opacity-70',\n )}\n >\n {renderFieldByType()}\n </div>\n {Boolean(cell?.column?.is_live_field) && (\n <div className='absolute -top-1.5 -right-1.5 bg-white dark:bg-black-800 rounded-full w-5 h-5 flex items-center justify-center border border-primary-300 dark:border-primary-600 shadow-sm z-[125]'>\n {isFieldOperationLoading ? (\n <LoadingSpinnerIcon className='text-primary-600 dark:text-white' size={8} />\n ) : (\n <BoltOutlined\n sx={{\n fontSize: 12,\n color: 'var(--color-primary-600)',\n }}\n />\n )}\n </div>\n )}\n {displayValidationError && (\n <div className='absolute top-full left-0 mt-1 text-error-600 text-xs font-medium z-[130] bg-white dark:bg-black-800 px-2 py-1 rounded shadow-lg w-full'>\n {displayValidationError}\n </div>\n )}\n </div>\n );\n};\n"],"names":["_cursorPositionCache","_blurringCellKey","_pendingFieldOpCellKey","createSyntheticChangeEvent","value","InlineEditField","cell","id","inlineEditing","cellRef","handleCellValueChange","registerValidation","openMasterDataModal","selectedMasterData","clearSelectedMasterData","getCurrencyForCell","getPendingEdit","addPendingEdit","onFieldOperationFlow","fieldOperationLoading","useContext","TableContext","isFieldOperationLoading","isAnyFieldOperationLoading","callLiveFieldOperation","useCallback","meta","getCurrencyFromCell","rawData","headerKey","columnKey","dataFromHeader","dataFromKey","currencyCellId","contextCurrency","initialPendingEdit","fieldState","setFieldState","useState","validationError","setValidationError","computedValidationError","valueToValidate","result","validateCellValue","pendingError","displayValidationError","previousInlineEditingRef","useRef","useEffect","currencyFromContext","pendingEdit","initialValue","initialCurrency","validateRequiredField","validateUrlField","REGEX","validateEmailField","fieldStateRef","textInputRef","cellEditKey","useLayoutEffect","el","cached","debouncedSyncTimerRef","syncToParent","debouncedSyncToParent","flushSyncToParent","handleBlurValidation","columnType","currentValue","validateAndGetValue","currentCurrency","isValid","renderFieldByType","currentPendingEdit","masterDataValue","jsx","e","MasterDataInlineField","reference","rowCellMeta","choices","SelectField","choice","selectedOptions","prev","DateTimeField","newValue","originalCurrencyCode","InlineCurrencyField","numericValue","currency_code","jsxs","currentBoolValue","Toggle","checked","cn","LoadingSpinnerIcon","BoltOutlined"],"mappings":"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"}
|