@zydon/common 2.8.72 → 2.8.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { a } from './chunk-W3CK33IH.js';
1
+ import { a } from './chunk-RS64MSST.js';
2
2
  import { f } from './chunk-OF6623HG.js';
3
3
  import { a as a$1 } from './chunk-2GTD4JW2.js';
4
4
  import { forwardRef, useState, useRef, useEffect, useMemo, useCallback } from 'react';
@@ -9,4 +9,4 @@ import { jsx } from 'react/jsx-runtime';
9
9
  var C=forwardRef(({name:M,increment:e=1,updadteForMultiple:P,allowNegative:u=!1,value:m,onChange:c,minValue:r,maxValue:o,decimalScale:p,disabled:i,tabIndex:w,labelIncrementer:B,labelDecrementer:E,placeholder:O,InputProps:b,...z},L)=>{let[N,_]=useState(`incrementer-input-${Date.now()}`),I=useRef(null),s=Number(m||0),d=()=>{I.current&&(clearTimeout(I.current),I.current=null);};useEffect(()=>()=>d(),[]);let $=useMemo(()=>{let n=s-e;return typeof r=="number"&&n<r?!0:i||!u&&n<0},[i,s,e,r,u]),G=useMemo(()=>{let n=s+e;return typeof o=="number"&&n>o?!0:i},[i,s,e,o]),H=useCallback(()=>{if(d(),!u&&s-e<0)return;let n=s-e,t=r!==void 0&&n<r?r:f(n,p);c(t);},[s,e,r,p,c,u]),K=n=>r!==void 0&&n<r?r:o!==void 0&&n>o?o:f(n,p),U=useCallback(()=>{d();let n=s+e,t=K(n);c(t);},[s,e,o,r,p,c]),W=useCallback(n=>{d();let t=Number(n.target.value||0);(e!==1||P)&&(t=t+e/2,t-=t%e),!u&&t<0&&(t=0),typeof r=="number"&&t<r&&(t=r),typeof o=="number"&&t>o&&(t=o),t=f(t,p),(!t||t===m)&&(I.current=setTimeout(()=>{_(`incrementer-input-${Date.now()}`);},600)),c(t);},[m,e,r,o,p,c,P,u]);return jsx(a,{ref:L,name:M,value:m,minValue:r,maxValue:o,allowNegative:u,decimalScale:p,InputProps:{...b,startAdornment:jsx(R,{position:"start",sx:{ml:-1},children:jsx(T,{onClick:H,disabled:$,size:"small","aria-label":E||"Decrementa",sx:{p:.5},children:jsx(a$1,{icon:"MINUS_SIGN",width:14,height:14,color:"primary.main"})})}),endAdornment:jsx(R,{position:"end",sx:{mr:-1},children:jsx(T,{onClick:U,disabled:G,size:"small","aria-label":B||"Incrementa",sx:{p:.5},children:jsx(a$1,{icon:"SIMPLE_ADD",width:14,height:14,color:"primary.main"})})}),inputProps:{...b?.inputProps,style:{...b?.inputProps?.style,textAlign:"center"},sx:{mx:-2.5}}},inputProps:{tabIndex:w},onChange:W,disabled:i,placeholder:O,...z},N)});C.displayName="Incrementer";var F=C;
10
10
 
11
11
  export { F as a };
12
- //# sourceMappingURL=chunk-5LGFU5JS.js.map
12
+ //# sourceMappingURL=chunk-CPHCMXWT.js.map
@@ -0,0 +1,9 @@
1
+ import { memo, forwardRef, useState, useRef, useEffect } from 'react';
2
+ import { NumericFormat } from 'react-number-format';
3
+ import J from '@mui/material/TextField';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var s=memo(forwardRef(({decimalScale:m=0,fixedDecimalScale:c=!0,prefix:d,suffix:I,allowNegative:N,minValue:u,maxValue:n=1/0,maxLength:b,value:T,inputProps:g,InputProps:y,InputLabelProps:S,size:h,disabled:x,name:t,helperText:P,error:R,fullWidth:v,label:w,required:D,onChange:r,tabIndex:F,placeholder:L,margin:k,className:E,delay:l},V)=>{let[q,z]=useState(Date.now()),e=useRef(null),i=()=>z(Date.now()),C=(H,o)=>{if(!r)return;e.current&&clearTimeout(e.current);let p=()=>{let{floatValue:a}=H,f=a||0;if(u!==void 0&&u>f){r({target:{name:t,value:u},event:o}),i();return}if(a!==void 0&&n<f){r({target:{name:t,value:n},event:o}),i();return}r({target:{name:t,value:a},event:o});};l===0?p():e.current=setTimeout(p,l||1e3);};return useEffect(()=>()=>{e.current&&clearTimeout(e.current);},[]),jsx(NumericFormat,{getInputRef:V,value:T,prefix:d,suffix:I,decimalSeparator:",",thousandSeparator:".",decimalScale:m,fixedDecimalScale:c,autoComplete:"off",allowNegative:N,maxLength:b,onValueChange:C,customInput:J,InputProps:{...y},inputProps:{...g,name:t,tabIndex:F},disabled:x,size:h,helperText:P,error:R,fullWidth:v,label:w,required:D,placeholder:L,margin:k,className:E,InputLabelProps:S},q)}));s.displayName="NumberInput";var _=s;
7
+
8
+ export { _ as a };
9
+ //# sourceMappingURL=chunk-RS64MSST.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/NumberInput/index.tsx"],"names":["forwardRef","memo","useEffect","useRef","useState","NumericFormat","TextField","jsx","NumberInput","decimalScale","fixedDecimalScale","prefix","suffix","allowNegative","minValue","maxValue","maxLength","value","inputProps","InputProps","InputLabelProps","size","disabled","name","helperText","error","fullWidth","label","required","onChange","tabIndex","placeholder","margin","className","delay","ref","inputkey","setInputKey","delayTimer","reRenderInput","handleChange","values","event","executeChange","floatValue","comparisonValue","NumberInput_default"],"mappings":"AAAA,OAAS,cAAAA,EAAY,QAAAC,EAAM,aAAAC,EAAW,UAAAC,EAAQ,YAAAC,MAAgB,QAC9D,OAEE,iBAAAC,MAEK,sBACP,OAAOC,MAAe,0BA0Fd,cAAAC,MAAA,oBAtFR,IAAMC,EAAcP,EAClBD,EACE,CACE,CACE,aAAAS,EAAe,EACf,kBAAAC,EAAoB,GACpB,OAAAC,EACA,OAAAC,EACA,cAAAC,EACA,SAAAC,EACA,SAAAC,EAAW,IACX,UAAAC,EACA,MAAAC,EACA,WAAAC,EACA,WAAAC,EACA,gBAAAC,EACA,KAAAC,EACA,SAAAC,EACA,KAAAC,EACA,WAAAC,EACA,MAAAC,EACA,UAAAC,EACA,MAAAC,EACA,SAAAC,EACA,SAAAC,EACA,SAAAC,EACA,YAAAC,EACA,OAAAC,EACA,UAAAC,EACA,MAAAC,CACF,EACAC,IACG,CACH,GAAM,CAACC,EAAUC,CAAW,EAAIjC,EAAS,KAAK,IAAI,CAAC,EAC7CkC,EAAanC,EAA6C,IAAI,EAE9DoC,EAAgB,IAAMF,EAAY,KAAK,IAAI,CAAC,EAE5CG,EAAe,CAACC,EAA4BC,IAAsB,CACtE,GAAI,CAACb,EAAU,OAEXS,EAAW,SAAS,aAAaA,EAAW,OAAO,EAEvD,IAAMK,EAAgB,IAAM,CAC1B,GAAM,CAAE,WAAAC,CAAW,EAAIH,EACjBI,EAAkBD,GAAc,EAEtC,GAAI9B,IAAa,QAAaA,EAAW+B,EAAiB,CACxDhB,EAAS,CAAE,OAAQ,CAAE,KAAAN,EAAM,MAAOT,CAAS,EAAG,MAAA4B,CAAM,CAAC,EACrDH,EAAc,EAEd,OAGF,GAAIK,IAAe,QAAa7B,EAAW8B,EAAiB,CAC1DhB,EAAS,CAAE,OAAQ,CAAE,KAAAN,EAAM,MAAOR,CAAS,EAAG,MAAA2B,CAAM,CAAC,EACrDH,EAAc,EAEd,OAGFV,EAAS,CACP,OAAQ,CACN,KAAAN,EACA,MAAOqB,CACT,EACA,MAAAF,CACF,CAAC,CACH,EAEIR,IAAU,EACZS,EAAc,EAEdL,EAAW,QAAU,WAAWK,EAAeT,GAAS,GAAI,CAEhE,EAEA,OAAAhC,EAAU,IACD,IAAM,CACPoC,EAAW,SACb,aAAaA,EAAW,OAAO,CAEnC,EACC,CAAC,CAAC,EAGH/B,EAACF,EAAA,CAEC,YAAa8B,EACb,MAAOlB,EACP,OAAQN,EACR,OAAQC,EACR,iBAAiB,IACjB,kBAAkB,IAClB,aAAcH,EACd,kBAAmBC,EACnB,aAAa,MACb,cAAeG,EACf,UAAWG,EACX,cAAewB,EACf,YAAalC,EACb,WAAY,CACV,GAAGa,CACL,EACA,WAAY,CAAE,GAAGD,EAAY,KAAAK,EAAM,SAAAO,CAAS,EAC5C,SAAUR,EACV,KAAMD,EACN,WAAYG,EACZ,MAAOC,EACP,UAAWC,EACX,MAAOC,EACP,SAAUC,EACV,YAAaG,EACb,OAAQC,EACR,UAAWC,EACX,gBAAiBb,GA5BZgB,CA6BP,CAEJ,CACF,CACF,EAEA5B,EAAY,YAAc,cAE1B,IAAOsC,EAAQtC","sourcesContent":["import { forwardRef, memo, useEffect, useRef, useState } from 'react';\nimport {\n NumberFormatValues,\n NumericFormat,\n SourceInfo,\n} from 'react-number-format';\nimport TextField from '@mui/material/TextField';\n\nimport { NumberInputProps } from 'types/numberInputProps';\n\nconst NumberInput = memo(\n forwardRef<HTMLDivElement, NumberInputProps>(\n (\n {\n decimalScale = 0,\n fixedDecimalScale = true,\n prefix,\n suffix,\n allowNegative,\n minValue,\n maxValue = Infinity,\n maxLength,\n value,\n inputProps,\n InputProps,\n InputLabelProps,\n size,\n disabled,\n name,\n helperText,\n error,\n fullWidth,\n label,\n required,\n onChange,\n tabIndex,\n placeholder,\n margin,\n className,\n delay,\n },\n ref,\n ) => {\n const [inputkey, setInputKey] = useState(Date.now());\n const delayTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const reRenderInput = () => setInputKey(Date.now());\n\n const handleChange = (values: NumberFormatValues, event: SourceInfo) => {\n if (!onChange) return;\n\n if (delayTimer.current) clearTimeout(delayTimer.current);\n\n const executeChange = () => {\n const { floatValue } = values;\n const comparisonValue = floatValue || 0;\n\n if (minValue !== undefined && minValue > comparisonValue) {\n onChange({ target: { name, value: minValue }, event });\n reRenderInput();\n\n return;\n }\n\n if (floatValue !== undefined && maxValue < comparisonValue) {\n onChange({ target: { name, value: maxValue }, event });\n reRenderInput();\n\n return;\n }\n\n onChange({\n target: {\n name,\n value: floatValue,\n },\n event,\n });\n };\n\n if (delay === 0) {\n executeChange();\n } else {\n delayTimer.current = setTimeout(executeChange, delay || 1000);\n }\n };\n\n useEffect(() => {\n return () => {\n if (delayTimer.current) {\n clearTimeout(delayTimer.current);\n }\n };\n }, []);\n\n return (\n <NumericFormat\n key={inputkey}\n getInputRef={ref}\n value={value}\n prefix={prefix}\n suffix={suffix}\n decimalSeparator=\",\"\n thousandSeparator=\".\"\n decimalScale={decimalScale}\n fixedDecimalScale={fixedDecimalScale}\n autoComplete=\"off\"\n allowNegative={allowNegative}\n maxLength={maxLength}\n onValueChange={handleChange}\n customInput={TextField}\n InputProps={{\n ...InputProps,\n }}\n inputProps={{ ...inputProps, name, tabIndex }}\n disabled={disabled}\n size={size}\n helperText={helperText}\n error={error}\n fullWidth={fullWidth}\n label={label}\n required={required}\n placeholder={placeholder}\n margin={margin}\n className={className}\n InputLabelProps={InputLabelProps}\n />\n );\n },\n ),\n);\n\nNumberInput.displayName = 'NumberInput';\n\nexport default NumberInput;\n"]}
@@ -22,7 +22,7 @@ import { styled } from '@mui/material/styles';
22
22
  import { DataGridPremium, GridToolbarColumnsButton } from '@mui/x-data-grid-premium';
23
23
  import { jsx, jsxs } from 'react/jsx-runtime';
24
24
 
25
- var K=styled(yt)({"& .MuiDialog-paper":{margin:0,borderRadius:0,maxHeight:"100vh",padding:0,height:"100vh",width:"100%",maxWidth:"100%"}}),j=styled(v)({height:"100%",minHeight:0}),X=styled(ht)(({theme:t})=>({padding:0,"& .MuiChip-label":{color:t.palette.text.secondary,fontWeight:"700"}})),Z=styled(gt)(({theme:t})=>({color:t.palette.text.secondary})),q=styled(U)({flex:1,minHeight:0,padding:0,display:"flex",alignItems:"stretch"}),J=styled(DataGridPremium)(({theme:t})=>({flex:1,height:"100%",minHeight:320,borderRadius:t.shape.borderRadius,backgroundColor:t.palette.background.paper,"& .MuiDataGrid-columnHeaders":{borderBottom:`1px solid ${t.palette.divider}`,minHeight:48,maxHeight:48},"& .MuiDataGrid-columnHeader":{borderTop:`1px solid ${t.palette.divider} !important`,borderBottom:`1px solid ${t.palette.divider} !important`,minWidth:"120px !important"},"& .MuiDataGrid-cell":{alignItems:"stretch",borderTop:`1px solid ${t.palette.divider}`,minWidth:120,width:"100%",borderLeft:`1px solid ${t.palette.divider}`,padding:0},"& .MuiDataGrid-cell:focus, & .MuiDataGrid-columnHeader:focus":{outline:"none"},"& .MuiDataGrid-withBorderColor":{borderColor:t.palette.divider},"& .MuiDataGrid-virtualScroller":{overflowX:"auto"},"& .MuiDataGrid-footerContainer":{borderTop:`1px solid ${t.palette.divider}`}})),I=styled(U)({display:"flex",alignItems:"center",width:"100%",height:"100%",padding:0,boxSizing:"border-box","& .MuiTypography-root":{width:"100%",overflow:"hidden",textOverflow:"ellipsis"}}),Q=styled(rt)(({theme:t})=>({color:t.palette.text.primary})),Y=styled(v)(({theme:t})=>({flexDirection:"row",alignItems:"center",justifyContent:"space-between",borderTop:`1px solid ${t.palette.divider}`,padding:t.spacing(2,3),gap:t.spacing(2),flexWrap:"wrap"})),tt=styled(v)(({theme:t})=>({flexDirection:"row",alignItems:"center",gap:t.spacing(.5)}));var Bt={"& .MuiOutlinedInput-root":{px:0,borderRadius:0,background:"transparent","& fieldset, &:hover fieldset, &.Mui-focused fieldset":{background:"transparent",borderRadius:0,border:"none"}},"& .MuiInputBase-input":{py:0,height:56,background:"transparent"}},Mt=t=>({disableUnderline:!0,sx:{px:0,"& input":{textAlign:t?"right":"left"}}}),Pt=(t,o)=>{if(t==null||t==="")return null;if(o.type==="entity"&&o.options){let a=o.options.find(f=>f.value?.toString()===t?.toString());if(a)return a.label}if(typeof t=="object"){if("name"in t)return String(t.name);if("label"in t)return String(t.label);if("value"in t)return String(t.value)}return typeof t=="boolean"?t?"Sim":"N\xE3o":String(t)},Et=({column:t,item:o,rowIndex:a$1,itemId:f,onFieldChange:T,isFieldDisabled:x})=>{let{setValue:g,control:S}=useFormContext(),d=t.field,e=`items.${a$1}.${String(d)}`,h=useWatch({control:S,name:e,defaultValue:o?.[d]}),l=h===void 0?o?.[d]:h,b=t.readOnly||(x?x({item:o,field:d}):!1),B=String(d)==="id";if(t.readOnly||B){let n=Pt(l,t);return jsx(I,{children:n?jsx(Q,{variant:"body2",children:n}):jsx(rt,{variant:"body2",color:"text.disabled",children:"-"})})}if(t.type==="boolean")return jsx(I,{sx:{justifyContent:"center"},children:jsx(wt,{color:"primary",checked:!!l,inputProps:{"aria-label":t.headerName},onChange:n=>{let i=n.target.checked,s=l;g(e,i,{shouldDirty:!0,shouldTouch:!0});let m=T({itemId:f,field:d,value:i,previousValue:s});m&&typeof m.catch=="function"&&m.catch(()=>{g(e,s,{shouldDirty:!0,shouldTouch:!0});});},disabled:b})});if(t.type==="entity"){let n="";if(l!=null&&l!=="")if(typeof l=="object"){let i=l;"id"in i?n=String(i.id??""):"value"in i&&(n=String(i.value??""));}else n=String(l);return jsx(I,{children:jsx(a,{fullWidth:!0,name:e,value:n,options:t.options??[],disabled:b,size:"small",placeholder:"Preencher",sx:Bt,disableClearable:!0,onSelectOption:i=>{let s=l,m=T({itemId:f,field:d,value:i,previousValue:s});m&&typeof m.catch=="function"&&m.catch(()=>{g(e,s,{shouldDirty:!0,shouldTouch:!0});});}})})}let y=t.type==="number",G=l??"";return jsx(I,{sx:{justifyContent:y?"flex-end":"flex-start"},children:jsx(It,{fullWidth:!0,size:"small",type:y?"number":"text",placeholder:"Preencher","aria-label":t.headerName,name:e,value:G,variant:"standard",InputProps:Mt(y),disabled:b,onKeyDown:n=>{(n.key===" "||n.key==="Spacebar")&&n.stopPropagation();},onChange:n=>{let i=n.target.value,s=i;y&&(s=i===""?"":Number(i)),g(e,s,{shouldDirty:!0,shouldTouch:!0}),T({itemId:f,field:d,value:s});}})})},ot=memo(Et,(t,o)=>t.itemId===o.itemId&&t.rowIndex===o.rowIndex&&t.column===o.column&&t.isFieldDisabled===o.isFieldDisabled);var O="bulk-edit-datagrid-actions",Rt=({setFilterButtonEl:t})=>{let o=useCallback(a=>{t(a);},[t]);return jsx(a$3,{container:O,children:jsx(GridToolbarColumnsButton,{ref:o,slotProps:{button:{color:"inherit",startIcon:jsx(a$2,{icon:"COLUMNS"}),children:"Colunas"}}})})},et=Rt;var it=({onClose:t,total:o,title:a})=>jsxs(v,{direction:"row",alignItems:"center",gap:3,sx:{px:3,py:0,minHeight:"var(--layout-nav-horizontal-height)"},children:[jsx(Z,{variant:"text",size:"small",startIcon:jsx(a$2,{icon:"CHEVRON_LEFT"}),onClick:t,children:"Sair"}),jsxs(v,{flex:1,direction:"row",alignItems:"center",component:"h2",m:0,gap:1,children:[jsx(rt,{component:"span",variant:"h6",children:"Editando"}),typeof o=="number"&&jsx(X,{component:"span",disabled:!0,label:o,size:"small",color:"default"}),jsx(rt,{component:"span",variant:"h6",children:a})]}),jsx(v,{direction:"row",alignItems:"center",justifyContent:"flex-end",gap:1,id:O})]});var lt=[10,25,50,100],At=t=>t.type==="number"?"right":t.type==="boolean"?"center":"left",zt=({open:t,onClose:o,title:a,header:f,items:T,columns:x,getItemId:g,isLoading:S,page:d,perPage:e,total:h,onPageChange:l,onRowsPerPageChange:b,onFieldChange:B,isFieldDisabled:y,showColumnButton:G,initialState:n})=>{let[i,s]=useState(null),m=T,W=e>0?Math.ceil(h/e):0,dt=W>0?W-1:0,C=Math.min(Math.max(d,0),dt),st=useMemo(()=>({page:C,pageSize:e}),[e,C]),pt=useMemo(()=>{let r=e?[e,...lt]:lt;return Array.from(new Set(r)).sort((M,D)=>M-D)},[e]),w=useCallback(r=>{r.pageSize!==e&&b(r.pageSize),(r.page!==d||r.pageSize!==e)&&l(r.page,r.pageSize);},[l,b,d,e]),ut=useCallback(r=>{w({page:r,pageSize:e});},[w,e]),mt=useCallback(r=>{w({page:C,pageSize:r});},[w,C]),ct=useMemo(()=>x.map(r=>{let M=At(r),D=r.type==="boolean"?100:180;return {field:String(r.field),headerName:r.headerName,flex:1,minWidth:D,disableColumnMenu:!0,headerAlign:M,align:M,renderCell:P=>{let R=P.api.getRowIndexRelativeToVisibleRows(P.id),ft=typeof R=="number"&&R>-1?R:0;return jsx(ot,{column:r,item:P.row,rowIndex:ft,itemId:g(P.row),onFieldChange:B,isFieldDisabled:y})}}}),[x,g,y,B]);return jsx(K,{open:t,onClose:o,fullWidth:!0,children:jsxs(j,{children:[f??jsx(it,{onClose:o,total:h,title:a}),S&&jsx(Vt,{sx:{height:2}}),jsx(q,{children:jsx(J,{columns:ct,rows:m,getRowId:r=>g(r),hideFooterSelectedRowCount:!0,hideFooter:!0,disableRowSelectionOnClick:!0,paginationModel:st,onPaginationModelChange:w,pageSizeOptions:pt,paginationMode:"server",rowCount:h,rowHeight:56,loading:S,slots:{loadingOverlay:a$1,...G&&{toolbar:et}},slotProps:{panel:{anchorEl:i},toolbar:{setFilterButtonEl:s}},initialState:n})}),jsxs(Y,{children:[jsxs(tt,{component:"p",children:[jsx(rt,{component:"span",variant:"body2",color:"text.disabled",children:"Total de itens:"}),jsx(rt,{component:"span",variant:"body2",children:h})]}),jsx(r,{count:h,page:C,rowsPerPage:e,onPageChange:ut,onRowsPerPageChange:mt})]})]})})},Wt=t=>{let{items:o}=t,a=useForm({defaultValues:{items:o}});return useEffect(()=>{a.reset({items:o});},[a,o]),jsx(FormProvider,{...a,children:jsx(zt,{...t})})},Ro=Wt;
25
+ var K=styled(yt)({"& .MuiDialog-paper":{margin:0,borderRadius:0,maxHeight:"100vh",padding:0,height:"100vh",width:"100%",maxWidth:"100%"}}),j=styled(v)({height:"100%",minHeight:0}),X=styled(ht)(({theme:t})=>({padding:0,"& .MuiChip-label":{color:t.palette.text.secondary,fontWeight:"700"}})),Z=styled(gt)(({theme:t})=>({color:t.palette.text.secondary})),q=styled(U)({flex:1,minHeight:0,padding:0,display:"flex",alignItems:"stretch"}),J=styled(DataGridPremium)(({theme:t})=>({flex:1,height:"100%",minHeight:320,borderRadius:t.shape.borderRadius,backgroundColor:t.palette.background.paper,"& .MuiDataGrid-columnHeaders":{borderBottom:`1px solid ${t.palette.divider}`,minHeight:48,maxHeight:48},"& .MuiDataGrid-columnHeader":{borderTop:`1px solid ${t.palette.divider} !important`,borderBottom:`1px solid ${t.palette.divider} !important`,minWidth:"120px !important"},"& .MuiDataGrid-cell":{alignItems:"stretch",borderTop:`1px solid ${t.palette.divider}`,minWidth:120,width:"100%",borderLeft:`1px solid ${t.palette.divider}`,padding:0},"& .MuiDataGrid-cell:focus, & .MuiDataGrid-columnHeader:focus":{outline:"none"},"& .MuiDataGrid-withBorderColor":{borderColor:t.palette.divider},"& .MuiDataGrid-virtualScroller":{overflowX:"auto"},"& .MuiDataGrid-footerContainer":{borderTop:`1px solid ${t.palette.divider}`}})),I=styled(U)({display:"flex",alignItems:"center",width:"100%",height:"100%",padding:0,boxSizing:"border-box","& .MuiTypography-root":{width:"100%",overflow:"hidden",textOverflow:"ellipsis"}}),Q=styled(rt)(({theme:t})=>({color:t.palette.text.primary})),Y=styled(v)(({theme:t})=>({flexDirection:"row",alignItems:"center",justifyContent:"space-between",borderTop:`1px solid ${t.palette.divider}`,padding:t.spacing(2,3),gap:t.spacing(2),flexWrap:"wrap"})),tt=styled(v)(({theme:t})=>({flexDirection:"row",alignItems:"center",gap:t.spacing(.5)}));var Bt={"& .MuiOutlinedInput-root":{px:0,borderRadius:0,background:"transparent","& fieldset, &:hover fieldset, &.Mui-focused fieldset":{background:"transparent",borderRadius:0,border:"none"}},"& .MuiInputBase-input":{py:0,height:56,background:"transparent"}},Mt=t=>({disableUnderline:!0,sx:{px:0,"& input":{textAlign:t?"right":"left"}}}),Pt=(t,o)=>{if(t==null||t==="")return null;if(o.type==="entity"&&o.options){let a=o.options.find(g=>g.value?.toString()===t?.toString());if(a)return a.label}if(typeof t=="object"){if("name"in t)return String(t.name);if("label"in t)return String(t.label);if("value"in t)return String(t.value)}return typeof t=="boolean"?t?"Sim":"N\xE3o":String(t)},Et=({column:t,item:o,rowIndex:a$1,itemId:g,onFieldChange:T,isFieldDisabled:x})=>{let{setValue:h,control:S}=useFormContext(),d=t.field,r=`items.${a$1}.${String(d)}`,y=useWatch({control:S,name:r,defaultValue:o?.[d]}),l=y===void 0?o?.[d]:y,b=t.readOnly||(x?x({item:o,field:d}):!1),B=String(d)==="id";if(t.readOnly||B){let e=Pt(l,t);return jsx(I,{children:e?jsx(Q,{variant:"body2",children:e}):jsx(rt,{variant:"body2",color:"text.disabled",children:"-"})})}if(t.type==="boolean")return jsx(I,{sx:{justifyContent:"center"},children:jsx(wt,{color:"primary",checked:!!l,inputProps:{"aria-label":t.headerName},onChange:e=>{let i=e.target.checked,s=l;h(r,i,{shouldDirty:!0,shouldTouch:!0});let p=T({itemId:g,field:d,value:i,previousValue:s});p&&typeof p.catch=="function"&&p.catch(()=>{h(r,s,{shouldDirty:!0,shouldTouch:!0});});},disabled:b})});if(t.type==="entity"){let e="";if(l!=null&&l!=="")if(typeof l=="object"){let i=l;"id"in i?e=String(i.id??""):"value"in i&&(e=String(i.value??""));}else e=String(l);return jsx(I,{children:jsx(a,{fullWidth:!0,name:r,value:e,options:t.options??[],disabled:b,size:"small",placeholder:"Preencher",sx:Bt,disableClearable:!0,onSelectOption:i=>{let s=l,p=T({itemId:g,field:d,value:i,previousValue:s});p&&typeof p.catch=="function"&&p.catch(()=>{h(r,s,{shouldDirty:!0,shouldTouch:!0});});}})})}let m=t.type==="number",G=l??"";return jsx(I,{sx:{justifyContent:m?"flex-end":"flex-start"},children:jsx(It,{fullWidth:!0,size:"small",type:m?"number":"text",placeholder:"Preencher","aria-label":t.headerName,name:r,value:G,variant:"standard",InputProps:{...Mt(m),...m&&{inputProps:{min:0}}},disabled:b,onWheel:e=>{m&&e.target.blur();},onKeyDown:e=>{(e.key===" "||e.key==="Spacebar")&&e.stopPropagation(),m&&(e.key==="-"||e.key==="e")&&e.preventDefault();},onChange:e=>{let i=e.target.value,s=i;if(m)if(i==="")s="";else {let p=Number(i);s=p<0?0:p;}h(r,s,{shouldDirty:!0,shouldTouch:!0}),T({itemId:g,field:d,value:s});}})})},ot=memo(Et,(t,o)=>t.itemId===o.itemId&&t.rowIndex===o.rowIndex&&t.column===o.column&&t.isFieldDisabled===o.isFieldDisabled);var O="bulk-edit-datagrid-actions",Rt=({setFilterButtonEl:t})=>{let o=useCallback(a=>{t(a);},[t]);return jsx(a$3,{container:O,children:jsx(GridToolbarColumnsButton,{ref:o,slotProps:{button:{color:"inherit",startIcon:jsx(a$2,{icon:"COLUMNS"}),children:"Colunas"}}})})},et=Rt;var it=({onClose:t,total:o,title:a})=>jsxs(v,{direction:"row",alignItems:"center",gap:3,sx:{px:3,py:0,minHeight:"var(--layout-nav-horizontal-height)"},children:[jsx(Z,{variant:"text",size:"small",startIcon:jsx(a$2,{icon:"CHEVRON_LEFT"}),onClick:t,children:"Sair"}),jsxs(v,{flex:1,direction:"row",alignItems:"center",component:"h2",m:0,gap:1,children:[jsx(rt,{component:"span",variant:"h6",children:"Editando"}),typeof o=="number"&&jsx(X,{component:"span",disabled:!0,label:o,size:"small",color:"default"}),jsx(rt,{component:"span",variant:"h6",children:a})]}),jsx(v,{direction:"row",alignItems:"center",justifyContent:"flex-end",gap:1,id:O})]});var lt=[10,25,50,100],At=t=>t.type==="number"?"right":t.type==="boolean"?"center":"left",zt=({open:t,onClose:o,title:a,header:g,items:T,columns:x,getItemId:h,isLoading:S,page:d,perPage:r$1,total:y,onPageChange:l,onRowsPerPageChange:b,onFieldChange:B,isFieldDisabled:m,showColumnButton:G,initialState:e})=>{let[i,s]=useState(null),p=T,W=r$1>0?Math.ceil(y/r$1):0,dt=W>0?W-1:0,C=Math.min(Math.max(d,0),dt),st=useMemo(()=>({page:C,pageSize:r$1}),[r$1,C]),pt=useMemo(()=>{let n=r$1?[r$1,...lt]:lt;return Array.from(new Set(n)).sort((M,D)=>M-D)},[r$1]),w=useCallback(n=>{n.pageSize!==r$1&&b(n.pageSize),(n.page!==d||n.pageSize!==r$1)&&l(n.page,n.pageSize);},[l,b,d,r$1]),ut=useCallback(n=>{w({page:n,pageSize:r$1});},[w,r$1]),mt=useCallback(n=>{w({page:C,pageSize:n});},[w,C]),ct=useMemo(()=>x.map(n=>{let M=At(n),D=n.type==="boolean"?100:180;return {field:String(n.field),headerName:n.headerName,flex:1,minWidth:D,disableColumnMenu:!0,headerAlign:M,align:M,renderCell:P=>{let R=P.api.getRowIndexRelativeToVisibleRows(P.id),ft=typeof R=="number"&&R>-1?R:0;return jsx(ot,{column:n,item:P.row,rowIndex:ft,itemId:h(P.row),onFieldChange:B,isFieldDisabled:m})}}}),[x,h,m,B]);return jsx(K,{open:t,onClose:o,fullWidth:!0,children:jsxs(j,{children:[g??jsx(it,{onClose:o,total:y,title:a}),S&&jsx(Vt,{sx:{height:2}}),jsx(q,{children:jsx(J,{columns:ct,rows:p,getRowId:n=>h(n),hideFooterSelectedRowCount:!0,hideFooter:!0,disableRowSelectionOnClick:!0,paginationModel:st,onPaginationModelChange:w,pageSizeOptions:pt,paginationMode:"server",rowCount:y,rowHeight:56,loading:S,slots:{loadingOverlay:a$1,...G&&{toolbar:et}},slotProps:{panel:{anchorEl:i},toolbar:{setFilterButtonEl:s}},initialState:e})}),jsxs(Y,{children:[jsxs(tt,{component:"p",children:[jsx(rt,{component:"span",variant:"body2",color:"text.disabled",children:"Total de itens:"}),jsx(rt,{component:"span",variant:"body2",children:y})]}),jsx(r,{count:y,page:C,rowsPerPage:r$1,onPageChange:ut,onRowsPerPageChange:mt})]})]})})},Wt=t=>{let{items:o}=t,a=useForm({defaultValues:{items:o}});return useEffect(()=>{a.reset({items:o});},[a,o]),jsx(FormProvider,{...a,children:jsx(zt,{...t})})},Ro=Wt;
26
26
 
27
27
  export { Ro as default };
28
28
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/BulkEditModal/index.tsx","../../../src/components/BulkEditModal/BulkEditGridCell.tsx","../../../src/components/BulkEditModal/styles.ts","../../../src/components/BulkEditModal/Header.tsx","../../../src/components/BulkEditModal/Toolbar.tsx"],"names":["useCallback","useEffect","useMemo","useState","FormProvider","useForm","LinearProgress","Typography","memo","useFormContext","useWatch","Switch","TextField","Box","Button","Chip","Dialog","Stack","styled","DataGridPremium","BulkEditDialog","BulkEditContainer","StyledChip","theme","StyledBackButton","GridWrapper","StyledDataGrid","CellContent","ReadOnlyText","Footer","FooterTotal","jsx","AUTOCOMPLETE_SX","getInputProps","isNumber","formatDisplayValue","value","column","option","opt","BulkEditGridCellComponent","item","rowIndex","itemId","onFieldChange","isFieldDisabled","setValue","control","fieldName","fieldPath","watchedValue","cellValue","isDisabled","isIdField","displayValue","event","previousValue","result","entityValue","recordValue","Autocomplete_default","newValue","inputValue","rawValue","BulkEditGridCell","prev","next","GridToolbarColumnsButton","BULK_EDIT_DATAGRID_ACTIONS","BulkEditToolbar","setFilterButtonEl","handleColumnsButtonRef","button","Portal_default","Icon_default","Toolbar_default","jsxs","Header","onClose","total","title","DEFAULT_PAGE_SIZE_OPTIONS","resolveAlignment","BulkEditModalInner","open","header","items","columns","getItemId","isLoading","page","perPage","onPageChange","onRowsPerPageChange","showColumnButton","initialState","filterButtonEl","rows","totalPages","maxPage","safePage","paginationModel","pageSizeOptions","options","a","b","handlePaginationModelChange","model","handleFooterPageChange","newPage","handleFooterRowsPerPageChange","newRowsPerPage","dataGridColumns","align","baseWidth","params","visibleIndex","row","LoadingOverlay_default","Pagination_default","BulkEditModal","props","formMethods","BulkEditModal_default"],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport Typography from '@mui/material/Typography';\nimport type {\n GridSlots,\n GridSlotsComponentsProps,\n} from '@mui/x-data-grid-premium';\nimport {\n GridAlignment,\n GridColDef,\n GridPaginationModel,\n GridValidRowModel,\n} from '@mui/x-data-grid-premium';\n\nimport LoadingOverlay from 'components/DataGrid/LoadingOverlay';\nimport Pagination from 'components/DataView/Pagination';\n\nimport { BulkEditGridCell } from './BulkEditGridCell';\nimport { Header } from './Header';\nimport { type BulkEditModalInnerProps, type BulkEditModalProps } from './props';\nimport {\n BulkEditContainer,\n BulkEditDialog,\n Footer,\n FooterTotal,\n GridWrapper,\n StyledDataGrid,\n} from './styles';\nimport BulkEditToolbar from './Toolbar';\n\nconst DEFAULT_PAGE_SIZE_OPTIONS = [10, 25, 50, 100];\n\nconst resolveAlignment = <TItem extends Record<string, unknown>>(\n column: BulkEditModalInnerProps<TItem>['columns'][number],\n): GridAlignment => {\n if (column.type === 'number') return 'right';\n if (column.type === 'boolean') return 'center';\n return 'left';\n};\n\nconst BulkEditModalInner = <TItem extends Record<string, unknown>>({\n open,\n onClose,\n title,\n header,\n items,\n columns,\n getItemId,\n isLoading,\n page,\n perPage,\n total,\n onPageChange,\n onRowsPerPageChange,\n onFieldChange,\n isFieldDisabled,\n showColumnButton,\n initialState,\n}: BulkEditModalInnerProps<TItem>) => {\n const [filterButtonEl, setFilterButtonEl] =\n useState<HTMLButtonElement | null>(null);\n const rows = items;\n\n const totalPages = perPage > 0 ? Math.ceil(total / perPage) : 0;\n const maxPage = totalPages > 0 ? totalPages - 1 : 0;\n const safePage = Math.min(Math.max(page, 0), maxPage);\n\n const paginationModel = useMemo(\n () => ({\n page: safePage,\n pageSize: perPage,\n }),\n [perPage, safePage],\n );\n\n const pageSizeOptions = useMemo(() => {\n const options = perPage\n ? [perPage, ...DEFAULT_PAGE_SIZE_OPTIONS]\n : DEFAULT_PAGE_SIZE_OPTIONS;\n return Array.from(new Set(options)).sort((a, b) => a - b);\n }, [perPage]);\n\n const handlePaginationModelChange = useCallback(\n (model: GridPaginationModel) => {\n if (model.pageSize !== perPage) {\n onRowsPerPageChange(model.pageSize);\n }\n\n if (model.page !== page || model.pageSize !== perPage) {\n onPageChange(model.page, model.pageSize);\n }\n },\n [onPageChange, onRowsPerPageChange, page, perPage],\n );\n\n const handleFooterPageChange = useCallback(\n (newPage: number) => {\n handlePaginationModelChange({ page: newPage, pageSize: perPage });\n },\n [handlePaginationModelChange, perPage],\n );\n\n const handleFooterRowsPerPageChange = useCallback(\n (newRowsPerPage: number) => {\n handlePaginationModelChange({ page: safePage, pageSize: newRowsPerPage });\n },\n [handlePaginationModelChange, safePage],\n );\n\n const dataGridColumns = useMemo<GridColDef<GridValidRowModel>[]>(\n () =>\n columns.map(column => {\n const align = resolveAlignment(column);\n const baseWidth = column.type === 'boolean' ? 100 : 180;\n\n return {\n field: String(column.field),\n headerName: column.headerName,\n flex: 1,\n minWidth: baseWidth,\n disableColumnMenu: true,\n headerAlign: align,\n align,\n renderCell: params => {\n const visibleIndex = params.api.getRowIndexRelativeToVisibleRows(\n params.id,\n );\n const rowIndex =\n typeof visibleIndex === 'number' && visibleIndex > -1\n ? visibleIndex\n : 0;\n\n return (\n <BulkEditGridCell\n column={column}\n item={params.row as TItem}\n rowIndex={rowIndex}\n itemId={getItemId(params.row as TItem)}\n onFieldChange={onFieldChange}\n isFieldDisabled={isFieldDisabled}\n />\n );\n },\n };\n }),\n [columns, getItemId, isFieldDisabled, onFieldChange],\n );\n\n return (\n <BulkEditDialog open={open} onClose={onClose} fullWidth>\n <BulkEditContainer>\n {header ?? <Header onClose={onClose} total={total} title={title} />}\n {isLoading && <LinearProgress sx={{ height: 2 }} />}\n\n <GridWrapper>\n <StyledDataGrid\n columns={dataGridColumns}\n rows={rows as unknown as GridValidRowModel[]}\n getRowId={row => getItemId(row as TItem)}\n hideFooterSelectedRowCount\n hideFooter\n disableRowSelectionOnClick\n paginationModel={paginationModel}\n onPaginationModelChange={handlePaginationModelChange}\n pageSizeOptions={pageSizeOptions}\n paginationMode=\"server\"\n rowCount={total}\n rowHeight={56}\n loading={isLoading}\n slots={{\n loadingOverlay: LoadingOverlay,\n ...(showColumnButton && {\n toolbar: BulkEditToolbar as unknown as GridSlots['toolbar'],\n }),\n }}\n slotProps={{\n panel: { anchorEl: filterButtonEl },\n toolbar: {\n setFilterButtonEl,\n } as unknown as GridSlotsComponentsProps['toolbar'],\n }}\n initialState={initialState}\n />\n </GridWrapper>\n <Footer>\n <FooterTotal component=\"p\">\n <Typography component=\"span\" variant=\"body2\" color=\"text.disabled\">\n Total de itens:\n </Typography>\n <Typography component=\"span\" variant=\"body2\">\n {total}\n </Typography>\n </FooterTotal>\n <Pagination\n count={total}\n page={safePage}\n rowsPerPage={perPage}\n onPageChange={handleFooterPageChange}\n onRowsPerPageChange={handleFooterRowsPerPageChange}\n />\n </Footer>\n </BulkEditContainer>\n </BulkEditDialog>\n );\n};\n\nconst BulkEditModal = <TItem extends Record<string, unknown>>(\n props: BulkEditModalProps<TItem>,\n) => {\n const { items } = props;\n const formMethods = useForm<{ items: TItem[] }>({\n defaultValues: { items },\n });\n\n // O desempenho é melhor que values: { items } no useForm\n useEffect(() => {\n formMethods.reset({ items });\n }, [formMethods, items]);\n\n return (\n <FormProvider {...formMethods}>\n <BulkEditModalInner<TItem> {...props} />\n </FormProvider>\n );\n};\n\nexport * from './props';\n\nexport default BulkEditModal;\n","import { memo } from 'react';\nimport { useFormContext, useWatch } from 'react-hook-form';\nimport Switch from '@mui/material/Switch';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\n\nimport Autocomplete from 'components/form/Autocomplete';\n\nimport {\n BulkEditGridCellProps,\n BulkEditModalColumn,\n BulkEditModalFieldChangeParams,\n} from './props';\nimport { CellContent, ReadOnlyText } from './styles';\n\nconst AUTOCOMPLETE_SX = {\n '& .MuiOutlinedInput-root': {\n px: 0,\n borderRadius: 0,\n background: 'transparent',\n '& fieldset, &:hover fieldset, &.Mui-focused fieldset': {\n background: 'transparent',\n borderRadius: 0,\n border: 'none',\n },\n },\n '& .MuiInputBase-input': {\n py: 0,\n height: 56,\n background: 'transparent',\n },\n} as const;\n\nconst getInputProps = (isNumber: boolean) => {\n return {\n disableUnderline: true,\n sx: {\n px: 0,\n '& input': {\n textAlign: isNumber ? 'right' : 'left',\n },\n },\n };\n};\n\nconst formatDisplayValue = <TItem extends Record<string, unknown>>(\n value: unknown,\n column: BulkEditModalColumn<TItem>,\n) => {\n if (value === null || value === undefined || value === '') {\n return null;\n }\n\n if (column.type === 'entity' && column.options) {\n const option = column.options.find(\n opt => opt.value?.toString() === value?.toString(),\n );\n if (option) {\n return option.label;\n }\n }\n\n if (typeof value === 'object') {\n if ('name' in (value as Record<string, unknown>)) {\n return String((value as { name: unknown }).name);\n }\n if ('label' in (value as Record<string, unknown>)) {\n return String((value as { label: unknown }).label);\n }\n if ('value' in (value as Record<string, unknown>)) {\n return String((value as { value: unknown }).value);\n }\n }\n\n if (typeof value === 'boolean') {\n return value ? 'Sim' : 'Não';\n }\n\n return String(value);\n};\n\nconst BulkEditGridCellComponent = <TItem extends Record<string, unknown>>({\n column,\n item,\n rowIndex,\n itemId,\n onFieldChange,\n isFieldDisabled,\n}: BulkEditGridCellProps<TItem>) => {\n const { setValue, control } = useFormContext();\n const fieldName = column.field;\n const fieldPath = `items.${rowIndex}.${String(fieldName)}`;\n const watchedValue = useWatch({\n control,\n name: fieldPath,\n defaultValue: item?.[fieldName],\n });\n const cellValue =\n watchedValue === undefined ? item?.[fieldName] : watchedValue;\n const isDisabled =\n column.readOnly ||\n (isFieldDisabled ? isFieldDisabled({ item, field: fieldName }) : false);\n const isIdField = String(fieldName) === 'id';\n\n if (column.readOnly || isIdField) {\n const displayValue = formatDisplayValue(cellValue, column);\n\n return (\n <CellContent>\n {displayValue ? (\n <ReadOnlyText variant=\"body2\">{displayValue}</ReadOnlyText>\n ) : (\n <Typography variant=\"body2\" color=\"text.disabled\">\n -\n </Typography>\n )}\n </CellContent>\n );\n }\n\n if (column.type === 'boolean') {\n return (\n <CellContent sx={{ justifyContent: 'center' }}>\n <Switch\n color=\"primary\"\n checked={Boolean(cellValue)}\n inputProps={{ 'aria-label': column.headerName }}\n onChange={event => {\n const value = event.target.checked;\n const previousValue = cellValue;\n\n setValue(fieldPath, value as TItem[keyof TItem], {\n shouldDirty: true,\n shouldTouch: true,\n });\n\n const result = onFieldChange({\n itemId,\n field: fieldName,\n value,\n previousValue,\n } as BulkEditModalFieldChangeParams<TItem>);\n\n if (\n result &&\n typeof (result as Promise<unknown>).catch === 'function'\n ) {\n (result as Promise<unknown>).catch(() => {\n setValue(fieldPath, previousValue as TItem[keyof TItem], {\n shouldDirty: true,\n shouldTouch: true,\n });\n });\n }\n }}\n disabled={isDisabled}\n />\n </CellContent>\n );\n }\n\n if (column.type === 'entity') {\n let entityValue = '';\n\n if (cellValue !== null && cellValue !== undefined && cellValue !== '') {\n if (typeof cellValue === 'object') {\n const recordValue = cellValue as Record<string, unknown>;\n\n if ('id' in recordValue) {\n entityValue = String(recordValue.id ?? '');\n } else if ('value' in recordValue) {\n entityValue = String(recordValue.value ?? '');\n }\n } else {\n entityValue = String(cellValue);\n }\n }\n\n return (\n <CellContent>\n <Autocomplete\n fullWidth\n name={fieldPath}\n value={entityValue}\n options={column.options ?? []}\n disabled={isDisabled}\n size=\"small\"\n placeholder=\"Preencher\"\n sx={AUTOCOMPLETE_SX}\n disableClearable\n onSelectOption={(newValue: unknown) => {\n const previousValue = cellValue;\n\n const result = onFieldChange({\n itemId,\n field: fieldName,\n value: newValue,\n previousValue,\n } as BulkEditModalFieldChangeParams<TItem>);\n\n if (\n result &&\n typeof (result as Promise<unknown>).catch === 'function'\n ) {\n (result as Promise<unknown>).catch(() => {\n setValue(fieldPath, previousValue as TItem[keyof TItem], {\n shouldDirty: true,\n shouldTouch: true,\n });\n });\n }\n }}\n />\n </CellContent>\n );\n }\n\n const isNumber = column.type === 'number';\n const inputValue = cellValue ?? '';\n\n return (\n <CellContent sx={{ justifyContent: isNumber ? 'flex-end' : 'flex-start' }}>\n <TextField\n fullWidth\n size=\"small\"\n type={isNumber ? 'number' : 'text'}\n placeholder=\"Preencher\"\n aria-label={column.headerName}\n name={fieldPath}\n value={inputValue as string | number}\n variant=\"standard\"\n InputProps={getInputProps(isNumber)}\n disabled={isDisabled}\n onKeyDown={event => {\n if (event.key === ' ' || event.key === 'Spacebar') {\n event.stopPropagation();\n }\n }}\n onChange={event => {\n const rawValue = event.target.value;\n let value: string | number = rawValue;\n if (isNumber) {\n value = rawValue === '' ? '' : Number(rawValue);\n }\n setValue(fieldPath, value as TItem[keyof TItem], {\n shouldDirty: true,\n shouldTouch: true,\n });\n\n onFieldChange({\n itemId,\n field: fieldName,\n value,\n } as BulkEditModalFieldChangeParams<TItem>);\n }}\n />\n </CellContent>\n );\n};\n\nexport const BulkEditGridCell = memo(\n BulkEditGridCellComponent,\n (prev, next) =>\n prev.itemId === next.itemId &&\n prev.rowIndex === next.rowIndex &&\n prev.column === next.column &&\n prev.isFieldDisabled === next.isFieldDisabled,\n) as typeof BulkEditGridCellComponent;\n","import Box from '@mui/material/Box';\nimport Button, { ButtonProps } from '@mui/material/Button';\nimport Chip, { ChipProps } from '@mui/material/Chip';\nimport Dialog from '@mui/material/Dialog';\nimport Stack, { StackProps } from '@mui/material/Stack';\nimport { styled } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\nimport { DataGridPremium } from '@mui/x-data-grid-premium';\n\nexport const BulkEditDialog = styled(Dialog)({\n '& .MuiDialog-paper': {\n margin: 0,\n borderRadius: 0,\n maxHeight: '100vh',\n padding: 0,\n height: '100vh',\n width: '100%',\n maxWidth: '100%',\n },\n});\n\nexport const BulkEditContainer = styled(Stack)({\n height: '100%',\n minHeight: 0,\n});\n\nexport const StyledChip = styled(Chip)<ChipProps>(({ theme }) => ({\n padding: 0,\n '& .MuiChip-label': {\n color: theme.palette.text.secondary,\n fontWeight: '700',\n },\n}));\n\nexport const StyledBackButton = styled(Button)<ButtonProps>(({ theme }) => ({\n color: theme.palette.text.secondary,\n}));\n\nexport const GridWrapper = styled(Box)({\n flex: 1,\n minHeight: 0,\n padding: 0,\n display: 'flex',\n alignItems: 'stretch',\n});\n\nexport const StyledDataGrid = styled(DataGridPremium)(({ theme }) => ({\n flex: 1,\n height: '100%',\n minHeight: 320,\n borderRadius: theme.shape.borderRadius,\n backgroundColor: theme.palette.background.paper,\n '& .MuiDataGrid-columnHeaders': {\n borderBottom: `1px solid ${theme.palette.divider}`,\n minHeight: 48,\n maxHeight: 48,\n },\n '& .MuiDataGrid-columnHeader': {\n borderTop: `1px solid ${theme.palette.divider} !important`,\n borderBottom: `1px solid ${theme.palette.divider} !important`,\n minWidth: '120px !important',\n },\n '& .MuiDataGrid-cell': {\n alignItems: 'stretch',\n borderTop: `1px solid ${theme.palette.divider}`,\n minWidth: 120,\n width: '100%',\n borderLeft: `1px solid ${theme.palette.divider}`,\n padding: 0,\n },\n '& .MuiDataGrid-cell:focus, & .MuiDataGrid-columnHeader:focus': {\n outline: 'none',\n },\n '& .MuiDataGrid-withBorderColor': {\n borderColor: theme.palette.divider,\n },\n '& .MuiDataGrid-virtualScroller': {\n overflowX: 'auto',\n },\n '& .MuiDataGrid-footerContainer': {\n borderTop: `1px solid ${theme.palette.divider}`,\n },\n}));\n\nexport const CellContent = styled(Box)({\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n height: '100%',\n padding: 0,\n boxSizing: 'border-box',\n\n '& .MuiTypography-root': {\n width: '100%',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n});\n\nexport const ReadOnlyText = styled(Typography)(({ theme }) => ({\n color: theme.palette.text.primary,\n}));\n\nexport const Footer = styled(Stack)(({ theme }) => ({\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n borderTop: `1px solid ${theme.palette.divider}`,\n padding: theme.spacing(2, 3),\n gap: theme.spacing(2),\n flexWrap: 'wrap',\n}));\n\nexport const FooterTotal = styled(Stack)<StackProps>(({ theme }) => ({\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n}));\n","import Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport Icon from 'components/Icon';\n\nimport { HeaderProps } from './props';\nimport { StyledBackButton, StyledChip } from './styles';\nimport { BULK_EDIT_DATAGRID_ACTIONS } from './Toolbar';\n\nexport const Header = ({ onClose, total, title }: HeaderProps) => {\n const showTotal = typeof total === 'number';\n\n return (\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n gap={3}\n sx={{ px: 3, py: 0, minHeight: 'var(--layout-nav-horizontal-height)' }}\n >\n <StyledBackButton\n variant=\"text\"\n size=\"small\"\n startIcon={<Icon icon=\"CHEVRON_LEFT\" />}\n onClick={onClose}\n >\n Sair\n </StyledBackButton>\n\n <Stack\n flex={1}\n direction=\"row\"\n alignItems=\"center\"\n component=\"h2\"\n m={0}\n gap={1}\n >\n <Typography component=\"span\" variant=\"h6\">\n Editando\n </Typography>\n {showTotal && (\n <StyledChip\n component=\"span\"\n disabled\n label={total}\n size=\"small\"\n color=\"default\"\n />\n )}\n <Typography component=\"span\" variant=\"h6\">\n {title}\n </Typography>\n </Stack>\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"flex-end\"\n gap={1}\n id={BULK_EDIT_DATAGRID_ACTIONS}\n />\n </Stack>\n );\n};\n","import { useCallback } from 'react';\nimport { GridToolbarColumnsButton } from '@mui/x-data-grid-premium';\n\nimport Icon from 'components/Icon';\nimport Portal from 'components/Portal';\n\nimport { BulkEditToolbarProps } from './props';\n\nexport const BULK_EDIT_DATAGRID_ACTIONS = 'bulk-edit-datagrid-actions';\n\nconst BulkEditToolbar = ({ setFilterButtonEl }: BulkEditToolbarProps) => {\n const handleColumnsButtonRef = useCallback(\n (button: HTMLButtonElement | null) => {\n setFilterButtonEl(button);\n },\n [setFilterButtonEl],\n );\n\n return (\n <Portal container={BULK_EDIT_DATAGRID_ACTIONS}>\n <GridToolbarColumnsButton\n ref={handleColumnsButtonRef}\n slotProps={{\n button: {\n color: 'inherit',\n startIcon: <Icon icon=\"COLUMNS\" />,\n children: 'Colunas',\n },\n }}\n />\n </Portal>\n );\n};\n\nexport default BulkEditToolbar;\n"]}
1
+ {"version":3,"sources":["../../../src/components/BulkEditModal/index.tsx","../../../src/components/BulkEditModal/BulkEditGridCell.tsx","../../../src/components/BulkEditModal/styles.ts","../../../src/components/BulkEditModal/Header.tsx","../../../src/components/BulkEditModal/Toolbar.tsx"],"names":["useCallback","useEffect","useMemo","useState","FormProvider","useForm","LinearProgress","Typography","memo","useFormContext","useWatch","Switch","TextField","Box","Button","Chip","Dialog","Stack","styled","DataGridPremium","BulkEditDialog","BulkEditContainer","StyledChip","theme","StyledBackButton","GridWrapper","StyledDataGrid","CellContent","ReadOnlyText","Footer","FooterTotal","jsx","AUTOCOMPLETE_SX","getInputProps","isNumber","formatDisplayValue","value","column","option","opt","BulkEditGridCellComponent","item","rowIndex","itemId","onFieldChange","isFieldDisabled","setValue","control","fieldName","fieldPath","watchedValue","cellValue","isDisabled","isIdField","displayValue","event","previousValue","result","entityValue","recordValue","Autocomplete_default","newValue","inputValue","rawValue","num","BulkEditGridCell","prev","next","GridToolbarColumnsButton","BULK_EDIT_DATAGRID_ACTIONS","BulkEditToolbar","setFilterButtonEl","handleColumnsButtonRef","button","Portal_default","Icon_default","Toolbar_default","jsxs","Header","onClose","total","title","DEFAULT_PAGE_SIZE_OPTIONS","resolveAlignment","BulkEditModalInner","open","header","items","columns","getItemId","isLoading","page","perPage","onPageChange","onRowsPerPageChange","showColumnButton","initialState","filterButtonEl","rows","totalPages","maxPage","safePage","paginationModel","pageSizeOptions","options","a","b","handlePaginationModelChange","model","handleFooterPageChange","newPage","handleFooterRowsPerPageChange","newRowsPerPage","dataGridColumns","align","baseWidth","params","visibleIndex","row","LoadingOverlay_default","Pagination_default","BulkEditModal","props","formMethods","BulkEditModal_default"],"mappings":"4VAAA,OAAS,eAAAA,EAAa,aAAAC,GAAW,WAAAC,EAAS,YAAAC,OAAgB,QAC1D,OAAS,gBAAAC,GAAc,WAAAC,OAAe,kBACtC,OAAOC,OAAoB,+BAC3B,OAAOC,OAAgB,2BCHvB,OAAS,QAAAC,OAAY,QACrB,OAAS,kBAAAC,GAAgB,YAAAC,OAAgB,kBACzC,OAAOC,OAAY,uBACnB,OAAOC,OAAe,0BACtB,OAAOL,OAAgB,2BCJvB,OAAOM,MAAS,oBAChB,OAAOC,OAA6B,uBACpC,OAAOC,OAAyB,qBAChC,OAAOC,OAAY,uBACnB,OAAOC,MAA2B,sBAClC,OAAS,UAAAC,MAAc,uBACvB,OAAOX,OAAgB,2BACvB,OAAS,mBAAAY,OAAuB,2BAEzB,IAAMC,EAAiBF,EAAOF,EAAM,EAAE,CAC3C,qBAAsB,CACpB,OAAQ,EACR,aAAc,EACd,UAAW,QACX,QAAS,EACT,OAAQ,QACR,MAAO,OACP,SAAU,MACZ,CACF,CAAC,EAEYK,EAAoBH,EAAOD,CAAK,EAAE,CAC7C,OAAQ,OACR,UAAW,CACb,CAAC,EAEYK,EAAaJ,EAAOH,EAAI,EAAa,CAAC,CAAE,MAAAQ,CAAM,KAAO,CAChE,QAAS,EACT,mBAAoB,CAClB,MAAOA,EAAM,QAAQ,KAAK,UAC1B,WAAY,KACd,CACF,EAAE,EAEWC,EAAmBN,EAAOJ,EAAM,EAAe,CAAC,CAAE,MAAAS,CAAM,KAAO,CAC1E,MAAOA,EAAM,QAAQ,KAAK,SAC5B,EAAE,EAEWE,EAAcP,EAAOL,CAAG,EAAE,CACrC,KAAM,EACN,UAAW,EACX,QAAS,EACT,QAAS,OACT,WAAY,SACd,CAAC,EAEYa,EAAiBR,EAAOC,EAAe,EAAE,CAAC,CAAE,MAAAI,CAAM,KAAO,CACpE,KAAM,EACN,OAAQ,OACR,UAAW,IACX,aAAcA,EAAM,MAAM,aAC1B,gBAAiBA,EAAM,QAAQ,WAAW,MAC1C,+BAAgC,CAC9B,aAAc,aAAaA,EAAM,QAAQ,UACzC,UAAW,GACX,UAAW,EACb,EACA,8BAA+B,CAC7B,UAAW,aAAaA,EAAM,QAAQ,qBACtC,aAAc,aAAaA,EAAM,QAAQ,qBACzC,SAAU,kBACZ,EACA,sBAAuB,CACrB,WAAY,UACZ,UAAW,aAAaA,EAAM,QAAQ,UACtC,SAAU,IACV,MAAO,OACP,WAAY,aAAaA,EAAM,QAAQ,UACvC,QAAS,CACX,EACA,+DAAgE,CAC9D,QAAS,MACX,EACA,iCAAkC,CAChC,YAAaA,EAAM,QAAQ,OAC7B,EACA,iCAAkC,CAChC,UAAW,MACb,EACA,iCAAkC,CAChC,UAAW,aAAaA,EAAM,QAAQ,SACxC,CACF,EAAE,EAEWI,EAAcT,EAAOL,CAAG,EAAE,CACrC,QAAS,OACT,WAAY,SACZ,MAAO,OACP,OAAQ,OACR,QAAS,EACT,UAAW,aAEX,wBAAyB,CACvB,MAAO,OACP,SAAU,SACV,aAAc,UAChB,CACF,CAAC,EAEYe,EAAeV,EAAOX,EAAU,EAAE,CAAC,CAAE,MAAAgB,CAAM,KAAO,CAC7D,MAAOA,EAAM,QAAQ,KAAK,OAC5B,EAAE,EAEWM,EAASX,EAAOD,CAAK,EAAE,CAAC,CAAE,MAAAM,CAAM,KAAO,CAClD,cAAe,MACf,WAAY,SACZ,eAAgB,gBAChB,UAAW,aAAaA,EAAM,QAAQ,UACtC,QAASA,EAAM,QAAQ,EAAG,CAAC,EAC3B,IAAKA,EAAM,QAAQ,CAAC,EACpB,SAAU,MACZ,EAAE,EAEWO,GAAcZ,EAAOD,CAAK,EAAc,CAAC,CAAE,MAAAM,CAAM,KAAO,CACnE,cAAe,MACf,WAAY,SACZ,IAAKA,EAAM,QAAQ,EAAG,CACxB,EAAE,EDPQ,cAAAQ,MAAA,oBA/FV,IAAMC,GAAkB,CACtB,2BAA4B,CAC1B,GAAI,EACJ,aAAc,EACd,WAAY,cACZ,uDAAwD,CACtD,WAAY,cACZ,aAAc,EACd,OAAQ,MACV,CACF,EACA,wBAAyB,CACvB,GAAI,EACJ,OAAQ,GACR,WAAY,aACd,CACF,EAEMC,GAAiBC,IACd,CACL,iBAAkB,GAClB,GAAI,CACF,GAAI,EACJ,UAAW,CACT,UAAWA,EAAW,QAAU,MAClC,CACF,CACF,GAGIC,GAAqB,CACzBC,EACAC,IACG,CACH,GAAID,GAAU,MAA+BA,IAAU,GACrD,OAAO,KAGT,GAAIC,EAAO,OAAS,UAAYA,EAAO,QAAS,CAC9C,IAAMC,EAASD,EAAO,QAAQ,KAC5BE,GAAOA,EAAI,OAAO,SAAS,IAAMH,GAAO,SAAS,CACnD,EACA,GAAIE,EACF,OAAOA,EAAO,MAIlB,GAAI,OAAOF,GAAU,SAAU,CAC7B,GAAI,SAAWA,EACb,OAAO,OAAQA,EAA4B,IAAI,EAEjD,GAAI,UAAYA,EACd,OAAO,OAAQA,EAA6B,KAAK,EAEnD,GAAI,UAAYA,EACd,OAAO,OAAQA,EAA6B,KAAK,EAIrD,OAAI,OAAOA,GAAU,UACZA,EAAQ,MAAQ,SAGlB,OAAOA,CAAK,CACrB,EAEMI,GAA4B,CAAwC,CACxE,OAAAH,EACA,KAAAI,EACA,SAAAC,EACA,OAAAC,EACA,cAAAC,EACA,gBAAAC,CACF,IAAoC,CAClC,GAAM,CAAE,SAAAC,EAAU,QAAAC,CAAQ,EAAItC,GAAe,EACvCuC,EAAYX,EAAO,MACnBY,EAAY,SAASP,KAAY,OAAOM,CAAS,IACjDE,EAAexC,GAAS,CAC5B,QAAAqC,EACA,KAAME,EACN,aAAcR,IAAOO,CAAS,CAChC,CAAC,EACKG,EACJD,IAAiB,OAAYT,IAAOO,CAAS,EAAIE,EAC7CE,EACJf,EAAO,WACNQ,EAAkBA,EAAgB,CAAE,KAAAJ,EAAM,MAAOO,CAAU,CAAC,EAAI,IAC7DK,EAAY,OAAOL,CAAS,IAAM,KAExC,GAAIX,EAAO,UAAYgB,EAAW,CAChC,IAAMC,EAAenB,GAAmBgB,EAAWd,CAAM,EAEzD,OACEN,EAACJ,EAAA,CACE,SAAA2B,EACCvB,EAACH,EAAA,CAAa,QAAQ,QAAS,SAAA0B,EAAa,EAE5CvB,EAACxB,GAAA,CAAW,QAAQ,QAAQ,MAAM,gBAAgB,aAElD,EAEJ,EAIJ,GAAI8B,EAAO,OAAS,UAClB,OACEN,EAACJ,EAAA,CAAY,GAAI,CAAE,eAAgB,QAAS,EAC1C,SAAAI,EAACpB,GAAA,CACC,MAAM,UACN,QAAS,EAAQwC,EACjB,WAAY,CAAE,aAAcd,EAAO,UAAW,EAC9C,SAAUkB,GAAS,CACjB,IAAMnB,EAAQmB,EAAM,OAAO,QACrBC,EAAgBL,EAEtBL,EAASG,EAAWb,EAA6B,CAC/C,YAAa,GACb,YAAa,EACf,CAAC,EAED,IAAMqB,EAASb,EAAc,CAC3B,OAAAD,EACA,MAAOK,EACP,MAAAZ,EACA,cAAAoB,CACF,CAA0C,EAGxCC,GACA,OAAQA,EAA4B,OAAU,YAE7CA,EAA4B,MAAM,IAAM,CACvCX,EAASG,EAAWO,EAAqC,CACvD,YAAa,GACb,YAAa,EACf,CAAC,CACH,CAAC,CAEL,EACA,SAAUJ,EACZ,EACF,EAIJ,GAAIf,EAAO,OAAS,SAAU,CAC5B,IAAIqB,EAAc,GAElB,GAAIP,GAAc,MAAmCA,IAAc,GACjE,GAAI,OAAOA,GAAc,SAAU,CACjC,IAAMQ,EAAcR,EAEhB,OAAQQ,EACVD,EAAc,OAAOC,EAAY,IAAM,EAAE,EAChC,UAAWA,IACpBD,EAAc,OAAOC,EAAY,OAAS,EAAE,QAG9CD,EAAc,OAAOP,CAAS,EAIlC,OACEpB,EAACJ,EAAA,CACC,SAAAI,EAAC6B,EAAA,CACC,UAAS,GACT,KAAMX,EACN,MAAOS,EACP,QAASrB,EAAO,SAAW,CAAC,EAC5B,SAAUe,EACV,KAAK,QACL,YAAY,YACZ,GAAIpB,GACJ,iBAAgB,GAChB,eAAiB6B,GAAsB,CACrC,IAAML,EAAgBL,EAEhBM,EAASb,EAAc,CAC3B,OAAAD,EACA,MAAOK,EACP,MAAOa,EACP,cAAAL,CACF,CAA0C,EAGxCC,GACA,OAAQA,EAA4B,OAAU,YAE7CA,EAA4B,MAAM,IAAM,CACvCX,EAASG,EAAWO,EAAqC,CACvD,YAAa,GACb,YAAa,EACf,CAAC,CACH,CAAC,CAEL,EACF,EACF,EAIJ,IAAMtB,EAAWG,EAAO,OAAS,SAC3ByB,EAAaX,GAAa,GAEhC,OACEpB,EAACJ,EAAA,CAAY,GAAI,CAAE,eAAgBO,EAAW,WAAa,YAAa,EACtE,SAAAH,EAACnB,GAAA,CACC,UAAS,GACT,KAAK,QACL,KAAMsB,EAAW,SAAW,OAC5B,YAAY,YACZ,aAAYG,EAAO,WACnB,KAAMY,EACN,MAAOa,EACP,QAAQ,WACR,WAAY,CACV,GAAG7B,GAAcC,CAAQ,EACzB,GAAIA,GAAY,CAAE,WAAY,CAAE,IAAK,CAAE,CAAE,CAC3C,EACA,SAAUkB,EACV,QAASG,GAAS,CACZrB,GACDqB,EAAM,OAA4B,KAAK,CAE5C,EACA,UAAWA,GAAS,EACdA,EAAM,MAAQ,KAAOA,EAAM,MAAQ,aACrCA,EAAM,gBAAgB,EAEpBrB,IAAaqB,EAAM,MAAQ,KAAOA,EAAM,MAAQ,MAClDA,EAAM,eAAe,CAEzB,EACA,SAAUA,GAAS,CACjB,IAAMQ,EAAWR,EAAM,OAAO,MAC1BnB,EAAyB2B,EAC7B,GAAI7B,EACF,GAAI6B,IAAa,GACf3B,EAAQ,OACH,CACL,IAAM4B,EAAM,OAAOD,CAAQ,EAC3B3B,EAAQ4B,EAAM,EAAI,EAAIA,EAG1BlB,EAASG,EAAWb,EAA6B,CAC/C,YAAa,GACb,YAAa,EACf,CAAC,EAEDQ,EAAc,CACZ,OAAAD,EACA,MAAOK,EACP,MAAAZ,CACF,CAA0C,CAC5C,EACF,EACF,CAEJ,EAEa6B,GAAmBzD,GAC9BgC,GACA,CAAC0B,EAAMC,IACLD,EAAK,SAAWC,EAAK,QACrBD,EAAK,WAAaC,EAAK,UACvBD,EAAK,SAAWC,EAAK,QACrBD,EAAK,kBAAoBC,EAAK,eAClC,EE3RA,OAAOlD,MAAW,sBAClB,OAAOV,OAAgB,2BCDvB,OAAS,eAAAP,OAAmB,QAC5B,OAAS,4BAAAoE,OAAgC,2BAwBlB,cAAArC,MAAA,oBAjBhB,IAAMsC,EAA6B,6BAEpCC,GAAkB,CAAC,CAAE,kBAAAC,CAAkB,IAA4B,CACvE,IAAMC,EAAyBxE,GAC5ByE,GAAqC,CACpCF,EAAkBE,CAAM,CAC1B,EACA,CAACF,CAAiB,CACpB,EAEA,OACExC,EAAC2C,EAAA,CAAO,UAAWL,EACjB,SAAAtC,EAACqC,GAAA,CACC,IAAKI,EACL,UAAW,CACT,OAAQ,CACN,MAAO,UACP,UAAWzC,EAAC4C,EAAA,CAAK,KAAK,UAAU,EAChC,SAAU,SACZ,CACF,EACF,EACF,CAEJ,EAEOC,GAAQN,GDZI,cAAAvC,EAMb,QAAA8C,OANa,oBAbZ,IAAMC,GAAS,CAAC,CAAE,QAAAC,EAAS,MAAAC,EAAO,MAAAC,CAAM,IAI3CJ,GAAC5D,EAAA,CACC,UAAU,MACV,WAAW,SACX,IAAK,EACL,GAAI,CAAE,GAAI,EAAG,GAAI,EAAG,UAAW,qCAAsC,EAErE,UAAAc,EAACP,EAAA,CACC,QAAQ,OACR,KAAK,QACL,UAAWO,EAAC4C,EAAA,CAAK,KAAK,eAAe,EACrC,QAASI,EACV,gBAED,EAEAF,GAAC5D,EAAA,CACC,KAAM,EACN,UAAU,MACV,WAAW,SACX,UAAU,KACV,EAAG,EACH,IAAK,EAEL,UAAAc,EAACxB,GAAA,CAAW,UAAU,OAAO,QAAQ,KAAK,oBAE1C,EA5BY,OAAOyE,GAAU,UA8B3BjD,EAACT,EAAA,CACC,UAAU,OACV,SAAQ,GACR,MAAO0D,EACP,KAAK,QACL,MAAM,UACR,EAEFjD,EAACxB,GAAA,CAAW,UAAU,OAAO,QAAQ,KAClC,SAAA0E,EACH,GACF,EACAlD,EAACd,EAAA,CACC,UAAU,MACV,WAAW,SACX,eAAe,WACf,IAAK,EACL,GAAIoD,EACN,GACF,EH2EU,cAAAtC,EAoDJ,QAAA8C,MApDI,oBAvGd,IAAMK,GAA4B,CAAC,GAAI,GAAI,GAAI,GAAG,EAE5CC,GACJ9C,GAEIA,EAAO,OAAS,SAAiB,QACjCA,EAAO,OAAS,UAAkB,SAC/B,OAGH+C,GAAqB,CAAwC,CACjE,KAAAC,EACA,QAAAN,EACA,MAAAE,EACA,OAAAK,EACA,MAAAC,EACA,QAAAC,EACA,UAAAC,EACA,UAAAC,EACA,KAAAC,EACA,QAAAC,EACA,MAAAZ,EACA,aAAAa,EACA,oBAAAC,EACA,cAAAlD,EACA,gBAAAC,EACA,iBAAAkD,EACA,aAAAC,CACF,IAAsC,CACpC,GAAM,CAACC,EAAgB1B,CAAiB,EACtCpE,GAAmC,IAAI,EACnC+F,EAAOX,EAEPY,EAAaP,EAAU,EAAI,KAAK,KAAKZ,EAAQY,CAAO,EAAI,EACxDQ,GAAUD,EAAa,EAAIA,EAAa,EAAI,EAC5CE,EAAW,KAAK,IAAI,KAAK,IAAIV,EAAM,CAAC,EAAGS,EAAO,EAE9CE,GAAkBpG,EACtB,KAAO,CACL,KAAMmG,EACN,SAAUT,CACZ,GACA,CAACA,EAASS,CAAQ,CACpB,EAEME,GAAkBrG,EAAQ,IAAM,CACpC,IAAMsG,EAAUZ,EACZ,CAACA,EAAS,GAAGV,EAAyB,EACtCA,GACJ,OAAO,MAAM,KAAK,IAAI,IAAIsB,CAAO,CAAC,EAAE,KAAK,CAACC,EAAGC,IAAMD,EAAIC,CAAC,CAC1D,EAAG,CAACd,CAAO,CAAC,EAENe,EAA8B3G,EACjC4G,GAA+B,CAC1BA,EAAM,WAAahB,GACrBE,EAAoBc,EAAM,QAAQ,GAGhCA,EAAM,OAASjB,GAAQiB,EAAM,WAAahB,IAC5CC,EAAae,EAAM,KAAMA,EAAM,QAAQ,CAE3C,EACA,CAACf,EAAcC,EAAqBH,EAAMC,CAAO,CACnD,EAEMiB,GAAyB7G,EAC5B8G,GAAoB,CACnBH,EAA4B,CAAE,KAAMG,EAAS,SAAUlB,CAAQ,CAAC,CAClE,EACA,CAACe,EAA6Bf,CAAO,CACvC,EAEMmB,GAAgC/G,EACnCgH,GAA2B,CAC1BL,EAA4B,CAAE,KAAMN,EAAU,SAAUW,CAAe,CAAC,CAC1E,EACA,CAACL,EAA6BN,CAAQ,CACxC,EAEMY,GAAkB/G,EACtB,IACEsF,EAAQ,IAAInD,GAAU,CACpB,IAAM6E,EAAQ/B,GAAiB9C,CAAM,EAC/B8E,EAAY9E,EAAO,OAAS,UAAY,IAAM,IAEpD,MAAO,CACL,MAAO,OAAOA,EAAO,KAAK,EAC1B,WAAYA,EAAO,WACnB,KAAM,EACN,SAAU8E,EACV,kBAAmB,GACnB,YAAaD,EACb,MAAAA,EACA,WAAYE,GAAU,CACpB,IAAMC,EAAeD,EAAO,IAAI,iCAC9BA,EAAO,EACT,EACM1E,GACJ,OAAO2E,GAAiB,UAAYA,EAAe,GAC/CA,EACA,EAEN,OACEtF,EAACkC,GAAA,CACC,OAAQ5B,EACR,KAAM+E,EAAO,IACb,SAAU1E,GACV,OAAQ+C,EAAU2B,EAAO,GAAY,EACrC,cAAexE,EACf,gBAAiBC,EACnB,CAEJ,CACF,CACF,CAAC,EACH,CAAC2C,EAASC,EAAW5C,EAAiBD,CAAa,CACrD,EAEA,OACEb,EAACX,EAAA,CAAe,KAAMiE,EAAM,QAASN,EAAS,UAAS,GACrD,SAAAF,EAACxD,EAAA,CACE,UAAAiE,GAAUvD,EAAC+C,GAAA,CAAO,QAASC,EAAS,MAAOC,EAAO,MAAOC,EAAO,EAChES,GAAa3D,EAACzB,GAAA,CAAe,GAAI,CAAE,OAAQ,CAAE,EAAG,EAEjDyB,EAACN,EAAA,CACC,SAAAM,EAACL,EAAA,CACC,QAASuF,GACT,KAAMf,EACN,SAAUoB,GAAO7B,EAAU6B,CAAY,EACvC,2BAA0B,GAC1B,WAAU,GACV,2BAA0B,GAC1B,gBAAiBhB,GACjB,wBAAyBK,EACzB,gBAAiBJ,GACjB,eAAe,SACf,SAAUvB,EACV,UAAW,GACX,QAASU,EACT,MAAO,CACL,eAAgB6B,EAChB,GAAIxB,GAAoB,CACtB,QAASnB,EACX,CACF,EACA,UAAW,CACT,MAAO,CAAE,SAAUqB,CAAe,EAClC,QAAS,CACP,kBAAA1B,CACF,CACF,EACA,aAAcyB,EAChB,EACF,EACAnB,EAAChD,EAAA,CACC,UAAAgD,EAAC/C,GAAA,CAAY,UAAU,IACrB,UAAAC,EAACxB,GAAA,CAAW,UAAU,OAAO,QAAQ,QAAQ,MAAM,gBAAgB,2BAEnE,EACAwB,EAACxB,GAAA,CAAW,UAAU,OAAO,QAAQ,QAClC,SAAAyE,EACH,GACF,EACAjD,EAACyF,EAAA,CACC,MAAOxC,EACP,KAAMqB,EACN,YAAaT,EACb,aAAciB,GACd,oBAAqBE,GACvB,GACF,GACF,EACF,CAEJ,EAEMU,GACJC,GACG,CACH,GAAM,CAAE,MAAAnC,CAAM,EAAImC,EACZC,EAActH,GAA4B,CAC9C,cAAe,CAAE,MAAAkF,CAAM,CACzB,CAAC,EAGD,OAAAtF,GAAU,IAAM,CACd0H,EAAY,MAAM,CAAE,MAAApC,CAAM,CAAC,CAC7B,EAAG,CAACoC,EAAapC,CAAK,CAAC,EAGrBxD,EAAC3B,GAAA,CAAc,GAAGuH,EAChB,SAAA5F,EAACqD,GAAA,CAA2B,GAAGsC,EAAO,EACxC,CAEJ,EAIOE,GAAQH","sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport Typography from '@mui/material/Typography';\nimport type {\n GridSlots,\n GridSlotsComponentsProps,\n} from '@mui/x-data-grid-premium';\nimport {\n GridAlignment,\n GridColDef,\n GridPaginationModel,\n GridValidRowModel,\n} from '@mui/x-data-grid-premium';\n\nimport LoadingOverlay from 'components/DataGrid/LoadingOverlay';\nimport Pagination from 'components/DataView/Pagination';\n\nimport { BulkEditGridCell } from './BulkEditGridCell';\nimport { Header } from './Header';\nimport { type BulkEditModalInnerProps, type BulkEditModalProps } from './props';\nimport {\n BulkEditContainer,\n BulkEditDialog,\n Footer,\n FooterTotal,\n GridWrapper,\n StyledDataGrid,\n} from './styles';\nimport BulkEditToolbar from './Toolbar';\n\nconst DEFAULT_PAGE_SIZE_OPTIONS = [10, 25, 50, 100];\n\nconst resolveAlignment = <TItem extends Record<string, unknown>>(\n column: BulkEditModalInnerProps<TItem>['columns'][number],\n): GridAlignment => {\n if (column.type === 'number') return 'right';\n if (column.type === 'boolean') return 'center';\n return 'left';\n};\n\nconst BulkEditModalInner = <TItem extends Record<string, unknown>>({\n open,\n onClose,\n title,\n header,\n items,\n columns,\n getItemId,\n isLoading,\n page,\n perPage,\n total,\n onPageChange,\n onRowsPerPageChange,\n onFieldChange,\n isFieldDisabled,\n showColumnButton,\n initialState,\n}: BulkEditModalInnerProps<TItem>) => {\n const [filterButtonEl, setFilterButtonEl] =\n useState<HTMLButtonElement | null>(null);\n const rows = items;\n\n const totalPages = perPage > 0 ? Math.ceil(total / perPage) : 0;\n const maxPage = totalPages > 0 ? totalPages - 1 : 0;\n const safePage = Math.min(Math.max(page, 0), maxPage);\n\n const paginationModel = useMemo(\n () => ({\n page: safePage,\n pageSize: perPage,\n }),\n [perPage, safePage],\n );\n\n const pageSizeOptions = useMemo(() => {\n const options = perPage\n ? [perPage, ...DEFAULT_PAGE_SIZE_OPTIONS]\n : DEFAULT_PAGE_SIZE_OPTIONS;\n return Array.from(new Set(options)).sort((a, b) => a - b);\n }, [perPage]);\n\n const handlePaginationModelChange = useCallback(\n (model: GridPaginationModel) => {\n if (model.pageSize !== perPage) {\n onRowsPerPageChange(model.pageSize);\n }\n\n if (model.page !== page || model.pageSize !== perPage) {\n onPageChange(model.page, model.pageSize);\n }\n },\n [onPageChange, onRowsPerPageChange, page, perPage],\n );\n\n const handleFooterPageChange = useCallback(\n (newPage: number) => {\n handlePaginationModelChange({ page: newPage, pageSize: perPage });\n },\n [handlePaginationModelChange, perPage],\n );\n\n const handleFooterRowsPerPageChange = useCallback(\n (newRowsPerPage: number) => {\n handlePaginationModelChange({ page: safePage, pageSize: newRowsPerPage });\n },\n [handlePaginationModelChange, safePage],\n );\n\n const dataGridColumns = useMemo<GridColDef<GridValidRowModel>[]>(\n () =>\n columns.map(column => {\n const align = resolveAlignment(column);\n const baseWidth = column.type === 'boolean' ? 100 : 180;\n\n return {\n field: String(column.field),\n headerName: column.headerName,\n flex: 1,\n minWidth: baseWidth,\n disableColumnMenu: true,\n headerAlign: align,\n align,\n renderCell: params => {\n const visibleIndex = params.api.getRowIndexRelativeToVisibleRows(\n params.id,\n );\n const rowIndex =\n typeof visibleIndex === 'number' && visibleIndex > -1\n ? visibleIndex\n : 0;\n\n return (\n <BulkEditGridCell\n column={column}\n item={params.row as TItem}\n rowIndex={rowIndex}\n itemId={getItemId(params.row as TItem)}\n onFieldChange={onFieldChange}\n isFieldDisabled={isFieldDisabled}\n />\n );\n },\n };\n }),\n [columns, getItemId, isFieldDisabled, onFieldChange],\n );\n\n return (\n <BulkEditDialog open={open} onClose={onClose} fullWidth>\n <BulkEditContainer>\n {header ?? <Header onClose={onClose} total={total} title={title} />}\n {isLoading && <LinearProgress sx={{ height: 2 }} />}\n\n <GridWrapper>\n <StyledDataGrid\n columns={dataGridColumns}\n rows={rows as unknown as GridValidRowModel[]}\n getRowId={row => getItemId(row as TItem)}\n hideFooterSelectedRowCount\n hideFooter\n disableRowSelectionOnClick\n paginationModel={paginationModel}\n onPaginationModelChange={handlePaginationModelChange}\n pageSizeOptions={pageSizeOptions}\n paginationMode=\"server\"\n rowCount={total}\n rowHeight={56}\n loading={isLoading}\n slots={{\n loadingOverlay: LoadingOverlay,\n ...(showColumnButton && {\n toolbar: BulkEditToolbar as unknown as GridSlots['toolbar'],\n }),\n }}\n slotProps={{\n panel: { anchorEl: filterButtonEl },\n toolbar: {\n setFilterButtonEl,\n } as unknown as GridSlotsComponentsProps['toolbar'],\n }}\n initialState={initialState}\n />\n </GridWrapper>\n <Footer>\n <FooterTotal component=\"p\">\n <Typography component=\"span\" variant=\"body2\" color=\"text.disabled\">\n Total de itens:\n </Typography>\n <Typography component=\"span\" variant=\"body2\">\n {total}\n </Typography>\n </FooterTotal>\n <Pagination\n count={total}\n page={safePage}\n rowsPerPage={perPage}\n onPageChange={handleFooterPageChange}\n onRowsPerPageChange={handleFooterRowsPerPageChange}\n />\n </Footer>\n </BulkEditContainer>\n </BulkEditDialog>\n );\n};\n\nconst BulkEditModal = <TItem extends Record<string, unknown>>(\n props: BulkEditModalProps<TItem>,\n) => {\n const { items } = props;\n const formMethods = useForm<{ items: TItem[] }>({\n defaultValues: { items },\n });\n\n // O desempenho é melhor que values: { items } no useForm\n useEffect(() => {\n formMethods.reset({ items });\n }, [formMethods, items]);\n\n return (\n <FormProvider {...formMethods}>\n <BulkEditModalInner<TItem> {...props} />\n </FormProvider>\n );\n};\n\nexport * from './props';\n\nexport default BulkEditModal;\n","import { memo } from 'react';\nimport { useFormContext, useWatch } from 'react-hook-form';\nimport Switch from '@mui/material/Switch';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\n\nimport Autocomplete from 'components/form/Autocomplete';\n\nimport {\n BulkEditGridCellProps,\n BulkEditModalColumn,\n BulkEditModalFieldChangeParams,\n} from './props';\nimport { CellContent, ReadOnlyText } from './styles';\n\nconst AUTOCOMPLETE_SX = {\n '& .MuiOutlinedInput-root': {\n px: 0,\n borderRadius: 0,\n background: 'transparent',\n '& fieldset, &:hover fieldset, &.Mui-focused fieldset': {\n background: 'transparent',\n borderRadius: 0,\n border: 'none',\n },\n },\n '& .MuiInputBase-input': {\n py: 0,\n height: 56,\n background: 'transparent',\n },\n} as const;\n\nconst getInputProps = (isNumber: boolean) => {\n return {\n disableUnderline: true,\n sx: {\n px: 0,\n '& input': {\n textAlign: isNumber ? 'right' : 'left',\n },\n },\n };\n};\n\nconst formatDisplayValue = <TItem extends Record<string, unknown>>(\n value: unknown,\n column: BulkEditModalColumn<TItem>,\n) => {\n if (value === null || value === undefined || value === '') {\n return null;\n }\n\n if (column.type === 'entity' && column.options) {\n const option = column.options.find(\n opt => opt.value?.toString() === value?.toString(),\n );\n if (option) {\n return option.label;\n }\n }\n\n if (typeof value === 'object') {\n if ('name' in (value as Record<string, unknown>)) {\n return String((value as { name: unknown }).name);\n }\n if ('label' in (value as Record<string, unknown>)) {\n return String((value as { label: unknown }).label);\n }\n if ('value' in (value as Record<string, unknown>)) {\n return String((value as { value: unknown }).value);\n }\n }\n\n if (typeof value === 'boolean') {\n return value ? 'Sim' : 'Não';\n }\n\n return String(value);\n};\n\nconst BulkEditGridCellComponent = <TItem extends Record<string, unknown>>({\n column,\n item,\n rowIndex,\n itemId,\n onFieldChange,\n isFieldDisabled,\n}: BulkEditGridCellProps<TItem>) => {\n const { setValue, control } = useFormContext();\n const fieldName = column.field;\n const fieldPath = `items.${rowIndex}.${String(fieldName)}`;\n const watchedValue = useWatch({\n control,\n name: fieldPath,\n defaultValue: item?.[fieldName],\n });\n const cellValue =\n watchedValue === undefined ? item?.[fieldName] : watchedValue;\n const isDisabled =\n column.readOnly ||\n (isFieldDisabled ? isFieldDisabled({ item, field: fieldName }) : false);\n const isIdField = String(fieldName) === 'id';\n\n if (column.readOnly || isIdField) {\n const displayValue = formatDisplayValue(cellValue, column);\n\n return (\n <CellContent>\n {displayValue ? (\n <ReadOnlyText variant=\"body2\">{displayValue}</ReadOnlyText>\n ) : (\n <Typography variant=\"body2\" color=\"text.disabled\">\n -\n </Typography>\n )}\n </CellContent>\n );\n }\n\n if (column.type === 'boolean') {\n return (\n <CellContent sx={{ justifyContent: 'center' }}>\n <Switch\n color=\"primary\"\n checked={Boolean(cellValue)}\n inputProps={{ 'aria-label': column.headerName }}\n onChange={event => {\n const value = event.target.checked;\n const previousValue = cellValue;\n\n setValue(fieldPath, value as TItem[keyof TItem], {\n shouldDirty: true,\n shouldTouch: true,\n });\n\n const result = onFieldChange({\n itemId,\n field: fieldName,\n value,\n previousValue,\n } as BulkEditModalFieldChangeParams<TItem>);\n\n if (\n result &&\n typeof (result as Promise<unknown>).catch === 'function'\n ) {\n (result as Promise<unknown>).catch(() => {\n setValue(fieldPath, previousValue as TItem[keyof TItem], {\n shouldDirty: true,\n shouldTouch: true,\n });\n });\n }\n }}\n disabled={isDisabled}\n />\n </CellContent>\n );\n }\n\n if (column.type === 'entity') {\n let entityValue = '';\n\n if (cellValue !== null && cellValue !== undefined && cellValue !== '') {\n if (typeof cellValue === 'object') {\n const recordValue = cellValue as Record<string, unknown>;\n\n if ('id' in recordValue) {\n entityValue = String(recordValue.id ?? '');\n } else if ('value' in recordValue) {\n entityValue = String(recordValue.value ?? '');\n }\n } else {\n entityValue = String(cellValue);\n }\n }\n\n return (\n <CellContent>\n <Autocomplete\n fullWidth\n name={fieldPath}\n value={entityValue}\n options={column.options ?? []}\n disabled={isDisabled}\n size=\"small\"\n placeholder=\"Preencher\"\n sx={AUTOCOMPLETE_SX}\n disableClearable\n onSelectOption={(newValue: unknown) => {\n const previousValue = cellValue;\n\n const result = onFieldChange({\n itemId,\n field: fieldName,\n value: newValue,\n previousValue,\n } as BulkEditModalFieldChangeParams<TItem>);\n\n if (\n result &&\n typeof (result as Promise<unknown>).catch === 'function'\n ) {\n (result as Promise<unknown>).catch(() => {\n setValue(fieldPath, previousValue as TItem[keyof TItem], {\n shouldDirty: true,\n shouldTouch: true,\n });\n });\n }\n }}\n />\n </CellContent>\n );\n }\n\n const isNumber = column.type === 'number';\n const inputValue = cellValue ?? '';\n\n return (\n <CellContent sx={{ justifyContent: isNumber ? 'flex-end' : 'flex-start' }}>\n <TextField\n fullWidth\n size=\"small\"\n type={isNumber ? 'number' : 'text'}\n placeholder=\"Preencher\"\n aria-label={column.headerName}\n name={fieldPath}\n value={inputValue as string | number}\n variant=\"standard\"\n InputProps={{\n ...getInputProps(isNumber),\n ...(isNumber && { inputProps: { min: 0 } }),\n }}\n disabled={isDisabled}\n onWheel={event => {\n if (isNumber) {\n (event.target as HTMLInputElement).blur();\n }\n }}\n onKeyDown={event => {\n if (event.key === ' ' || event.key === 'Spacebar') {\n event.stopPropagation();\n }\n if (isNumber && (event.key === '-' || event.key === 'e')) {\n event.preventDefault();\n }\n }}\n onChange={event => {\n const rawValue = event.target.value;\n let value: string | number = rawValue;\n if (isNumber) {\n if (rawValue === '') {\n value = '';\n } else {\n const num = Number(rawValue);\n value = num < 0 ? 0 : num;\n }\n }\n setValue(fieldPath, value as TItem[keyof TItem], {\n shouldDirty: true,\n shouldTouch: true,\n });\n\n onFieldChange({\n itemId,\n field: fieldName,\n value,\n } as BulkEditModalFieldChangeParams<TItem>);\n }}\n />\n </CellContent>\n );\n};\n\nexport const BulkEditGridCell = memo(\n BulkEditGridCellComponent,\n (prev, next) =>\n prev.itemId === next.itemId &&\n prev.rowIndex === next.rowIndex &&\n prev.column === next.column &&\n prev.isFieldDisabled === next.isFieldDisabled,\n) as typeof BulkEditGridCellComponent;\n","import Box from '@mui/material/Box';\nimport Button, { ButtonProps } from '@mui/material/Button';\nimport Chip, { ChipProps } from '@mui/material/Chip';\nimport Dialog from '@mui/material/Dialog';\nimport Stack, { StackProps } from '@mui/material/Stack';\nimport { styled } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\nimport { DataGridPremium } from '@mui/x-data-grid-premium';\n\nexport const BulkEditDialog = styled(Dialog)({\n '& .MuiDialog-paper': {\n margin: 0,\n borderRadius: 0,\n maxHeight: '100vh',\n padding: 0,\n height: '100vh',\n width: '100%',\n maxWidth: '100%',\n },\n});\n\nexport const BulkEditContainer = styled(Stack)({\n height: '100%',\n minHeight: 0,\n});\n\nexport const StyledChip = styled(Chip)<ChipProps>(({ theme }) => ({\n padding: 0,\n '& .MuiChip-label': {\n color: theme.palette.text.secondary,\n fontWeight: '700',\n },\n}));\n\nexport const StyledBackButton = styled(Button)<ButtonProps>(({ theme }) => ({\n color: theme.palette.text.secondary,\n}));\n\nexport const GridWrapper = styled(Box)({\n flex: 1,\n minHeight: 0,\n padding: 0,\n display: 'flex',\n alignItems: 'stretch',\n});\n\nexport const StyledDataGrid = styled(DataGridPremium)(({ theme }) => ({\n flex: 1,\n height: '100%',\n minHeight: 320,\n borderRadius: theme.shape.borderRadius,\n backgroundColor: theme.palette.background.paper,\n '& .MuiDataGrid-columnHeaders': {\n borderBottom: `1px solid ${theme.palette.divider}`,\n minHeight: 48,\n maxHeight: 48,\n },\n '& .MuiDataGrid-columnHeader': {\n borderTop: `1px solid ${theme.palette.divider} !important`,\n borderBottom: `1px solid ${theme.palette.divider} !important`,\n minWidth: '120px !important',\n },\n '& .MuiDataGrid-cell': {\n alignItems: 'stretch',\n borderTop: `1px solid ${theme.palette.divider}`,\n minWidth: 120,\n width: '100%',\n borderLeft: `1px solid ${theme.palette.divider}`,\n padding: 0,\n },\n '& .MuiDataGrid-cell:focus, & .MuiDataGrid-columnHeader:focus': {\n outline: 'none',\n },\n '& .MuiDataGrid-withBorderColor': {\n borderColor: theme.palette.divider,\n },\n '& .MuiDataGrid-virtualScroller': {\n overflowX: 'auto',\n },\n '& .MuiDataGrid-footerContainer': {\n borderTop: `1px solid ${theme.palette.divider}`,\n },\n}));\n\nexport const CellContent = styled(Box)({\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n height: '100%',\n padding: 0,\n boxSizing: 'border-box',\n\n '& .MuiTypography-root': {\n width: '100%',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n});\n\nexport const ReadOnlyText = styled(Typography)(({ theme }) => ({\n color: theme.palette.text.primary,\n}));\n\nexport const Footer = styled(Stack)(({ theme }) => ({\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n borderTop: `1px solid ${theme.palette.divider}`,\n padding: theme.spacing(2, 3),\n gap: theme.spacing(2),\n flexWrap: 'wrap',\n}));\n\nexport const FooterTotal = styled(Stack)<StackProps>(({ theme }) => ({\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n}));\n","import Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport Icon from 'components/Icon';\n\nimport { HeaderProps } from './props';\nimport { StyledBackButton, StyledChip } from './styles';\nimport { BULK_EDIT_DATAGRID_ACTIONS } from './Toolbar';\n\nexport const Header = ({ onClose, total, title }: HeaderProps) => {\n const showTotal = typeof total === 'number';\n\n return (\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n gap={3}\n sx={{ px: 3, py: 0, minHeight: 'var(--layout-nav-horizontal-height)' }}\n >\n <StyledBackButton\n variant=\"text\"\n size=\"small\"\n startIcon={<Icon icon=\"CHEVRON_LEFT\" />}\n onClick={onClose}\n >\n Sair\n </StyledBackButton>\n\n <Stack\n flex={1}\n direction=\"row\"\n alignItems=\"center\"\n component=\"h2\"\n m={0}\n gap={1}\n >\n <Typography component=\"span\" variant=\"h6\">\n Editando\n </Typography>\n {showTotal && (\n <StyledChip\n component=\"span\"\n disabled\n label={total}\n size=\"small\"\n color=\"default\"\n />\n )}\n <Typography component=\"span\" variant=\"h6\">\n {title}\n </Typography>\n </Stack>\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"flex-end\"\n gap={1}\n id={BULK_EDIT_DATAGRID_ACTIONS}\n />\n </Stack>\n );\n};\n","import { useCallback } from 'react';\nimport { GridToolbarColumnsButton } from '@mui/x-data-grid-premium';\n\nimport Icon from 'components/Icon';\nimport Portal from 'components/Portal';\n\nimport { BulkEditToolbarProps } from './props';\n\nexport const BULK_EDIT_DATAGRID_ACTIONS = 'bulk-edit-datagrid-actions';\n\nconst BulkEditToolbar = ({ setFilterButtonEl }: BulkEditToolbarProps) => {\n const handleColumnsButtonRef = useCallback(\n (button: HTMLButtonElement | null) => {\n setFilterButtonEl(button);\n },\n [setFilterButtonEl],\n );\n\n return (\n <Portal container={BULK_EDIT_DATAGRID_ACTIONS}>\n <GridToolbarColumnsButton\n ref={handleColumnsButtonRef}\n slotProps={{\n button: {\n color: 'inherit',\n startIcon: <Icon icon=\"COLUMNS\" />,\n children: 'Colunas',\n },\n }}\n />\n </Portal>\n );\n};\n\nexport default BulkEditToolbar;\n"]}
@@ -1,5 +1,5 @@
1
- export { a as default } from '../../chunk-5LGFU5JS.js';
2
- import '../../chunk-W3CK33IH.js';
1
+ export { a as default } from '../../chunk-CPHCMXWT.js';
2
+ import '../../chunk-RS64MSST.js';
3
3
  import '../../chunk-OF6623HG.js';
4
4
  import '../../chunk-2GTD4JW2.js';
5
5
  import '../../chunk-PBLSVXV5.js';
@@ -1,2 +1,2 @@
1
- export { a as default } from '../../chunk-W3CK33IH.js';
1
+ export { a as default } from '../../chunk-RS64MSST.js';
2
2
  //# sourceMappingURL=index.js.map
@@ -1,5 +1,5 @@
1
- import { a } from '../../../chunk-5LGFU5JS.js';
2
- import '../../../chunk-W3CK33IH.js';
1
+ import { a } from '../../../chunk-CPHCMXWT.js';
2
+ import '../../../chunk-RS64MSST.js';
3
3
  import '../../../chunk-OF6623HG.js';
4
4
  import '../../../chunk-2GTD4JW2.js';
5
5
  import '../../../chunk-PBLSVXV5.js';
@@ -1,4 +1,4 @@
1
- import { a } from '../../../chunk-W3CK33IH.js';
1
+ import { a } from '../../../chunk-RS64MSST.js';
2
2
  import { useFormContext, Controller } from 'react-hook-form';
3
3
  import { jsx } from 'react/jsx-runtime';
4
4
 
@@ -1,4 +1,4 @@
1
- var r=(e="",n)=>{let t="",s=0;return [...n].forEach(a=>{t+=a==="#"?e[s++]||"_":a;}),t},l=e=>r((e||"").replace(/\D/g,""),"###.###.###-##"),c=e=>r((e||"").replace(/\D/g,""),"##.###.###/####-##"),o=e=>r((e||"").replace(/\D/g,""),"#####-###"),u=e=>{let t=(e||"").replace(/\D/g,""),s=t.length===11?"(##) #####-####":"(##) ####-####";return r(t,s)},p=e=>{let t=(e||""||"").replace(/\D/g,"");return t.length===11?l(t):t.length===14?c(t):null};
1
+ var n=(e="",r)=>{let t="",s=0;return [...r].forEach(a=>{t+=a==="#"?e[s++]||"_":a;}),t},o=e=>n((e||"").replace(/\D/g,""),"###.###.###-##"),c=e=>n((e||"").replace(/\D/g,""),"##.###.###/####-##"),l=e=>n((e||"").replace(/\D/g,""),"#####-###"),u=e=>{let t=(e||"").replace(/\D/g,"");return n(t,{10:"(##) ####-####",11:"(##) #####-####",12:"+## (##) ####-####",13:"+## (##) #####-####",14:"+### (##) #####-####"}[t.length]??t)},p=e=>{let t=(e||""||"").replace(/\D/g,"");return t.length===11?o(t):t.length===14?c(t):null};
2
2
 
3
- export { r as applyMask, o as cepMask, c as cnpjMask, l as cpfMask, p as cpfMaskOrCnpjMask, u as phoneMask };
3
+ export { n as applyMask, l as cepMask, c as cnpjMask, o as cpfMask, p as cpfMaskOrCnpjMask, u as phoneMask };
4
4
  //# sourceMappingURL=mask.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/mask.ts"],"names":["applyMask","value","mask","formattedString","j","char","cpfMask","v","cnpjMask","cepMask","phoneMask","numericValue","cpfMaskOrCnpjMask","onlyNumbers"],"mappings":"AAAO,IAAMA,EAAY,CAACC,EAAQ,GAAIC,IAAiB,CACrD,IAAIC,EAAkB,GAClBC,EAAI,EAGR,OAAC,GAAGF,CAAI,EAAE,QAAQG,GAAQ,CAExBF,GAAmBE,IAAS,IAAMJ,EAAMG,GAAG,GAAK,IAAMC,CACxD,CAAC,EAEMF,CACT,EAEaG,EAAWC,GAEfP,GADOO,GAAK,IACI,QAAQ,MAAO,EAAE,EAAG,gBAAgB,EAGhDC,EAAYD,GAEhBP,GADOO,GAAK,IACI,QAAQ,MAAO,EAAE,EAAG,oBAAoB,EAGpDE,EAAWF,GAEfP,GADOO,GAAK,IACI,QAAQ,MAAO,EAAE,EAAG,WAAW,EAG3CG,EAAaH,GAAc,CAEtC,IAAMI,GADQJ,GAAK,IACQ,QAAQ,MAAO,EAAE,EACtCL,EACJS,EAAa,SAAW,GAAK,kBAAoB,iBAEnD,OAAOX,EAAUW,EAAcT,CAAI,CACrC,EAEaU,EAAqBL,GAAc,CAE9C,IAAMM,GADQN,GAAK,IACW,IAAI,QAAQ,MAAO,EAAE,EAEnD,OAAIM,EAAY,SAAW,GAAWP,EAAQO,CAAW,EAErDA,EAAY,SAAW,GAAWL,EAASK,CAAW,EAEnD,IACT","sourcesContent":["export const applyMask = (value = '', mask: string) => {\n let formattedString = '';\n let j = 0;\n\n // Iterate through each character in the mask\n [...mask].forEach(char => {\n // If the character is '#', insert the next character from the input string, or '_' if the input string is shorter\n formattedString += char === '#' ? value[j++] || '_' : char;\n });\n\n return formattedString;\n};\n\nexport const cpfMask = (v: string) => {\n const value = v || '';\n return applyMask(value.replace(/\\D/g, ''), '###.###.###-##');\n};\n\nexport const cnpjMask = (v: string) => {\n const value = v || '';\n return applyMask(value.replace(/\\D/g, ''), '##.###.###/####-##');\n};\n\nexport const cepMask = (v: string) => {\n const value = v || '';\n return applyMask(value.replace(/\\D/g, ''), '#####-###');\n};\n\nexport const phoneMask = (v: string) => {\n const value = v || '';\n const numericValue = value.replace(/\\D/g, '');\n const mask =\n numericValue.length === 11 ? '(##) #####-####' : '(##) ####-####';\n\n return applyMask(numericValue, mask);\n};\n\nexport const cpfMaskOrCnpjMask = (v: string) => {\n const value = v || '';\n const onlyNumbers = (value || '').replace(/\\D/g, '');\n\n if (onlyNumbers.length === 11) return cpfMask(onlyNumbers);\n\n if (onlyNumbers.length === 14) return cnpjMask(onlyNumbers);\n\n return null;\n};\n"]}
1
+ {"version":3,"sources":["../../src/utils/mask.ts"],"names":["applyMask","value","mask","formattedString","j","char","cpfMask","v","cnpjMask","cepMask","phoneMask","digits","cpfMaskOrCnpjMask","onlyNumbers"],"mappings":"AAAO,IAAMA,EAAY,CAACC,EAAQ,GAAIC,IAAiB,CACrD,IAAIC,EAAkB,GAClBC,EAAI,EAGR,OAAC,GAAGF,CAAI,EAAE,QAAQG,GAAQ,CAExBF,GAAmBE,IAAS,IAAMJ,EAAMG,GAAG,GAAK,IAAMC,CACxD,CAAC,EAEMF,CACT,EAEaG,EAAWC,GAEfP,GADOO,GAAK,IACI,QAAQ,MAAO,EAAE,EAAG,gBAAgB,EAGhDC,EAAYD,GAEhBP,GADOO,GAAK,IACI,QAAQ,MAAO,EAAE,EAAG,oBAAoB,EAGpDE,EAAWF,GAEfP,GADOO,GAAK,IACI,QAAQ,MAAO,EAAE,EAAG,WAAW,EAG3CG,EAAaH,GAAc,CAEtC,IAAMI,GADQJ,GAAK,IACE,QAAQ,MAAO,EAAE,EAUtC,OAAOP,EAAUW,EARqB,CACpC,GAAI,iBACJ,GAAI,kBACJ,GAAI,qBACJ,GAAI,sBACJ,GAAI,sBACN,EAE+BA,EAAO,MAAM,GAAKA,CAAM,CACzD,EAEaC,EAAqBL,GAAc,CAE9C,IAAMM,GADQN,GAAK,IACW,IAAI,QAAQ,MAAO,EAAE,EAEnD,OAAIM,EAAY,SAAW,GAAWP,EAAQO,CAAW,EAErDA,EAAY,SAAW,GAAWL,EAASK,CAAW,EAEnD,IACT","sourcesContent":["export const applyMask = (value = '', mask: string) => {\n let formattedString = '';\n let j = 0;\n\n // Iterate through each character in the mask\n [...mask].forEach(char => {\n // If the character is '#', insert the next character from the input string, or '_' if the input string is shorter\n formattedString += char === '#' ? value[j++] || '_' : char;\n });\n\n return formattedString;\n};\n\nexport const cpfMask = (v: string) => {\n const value = v || '';\n return applyMask(value.replace(/\\D/g, ''), '###.###.###-##');\n};\n\nexport const cnpjMask = (v: string) => {\n const value = v || '';\n return applyMask(value.replace(/\\D/g, ''), '##.###.###/####-##');\n};\n\nexport const cepMask = (v: string) => {\n const value = v || '';\n return applyMask(value.replace(/\\D/g, ''), '#####-###');\n};\n\nexport const phoneMask = (v: string) => {\n const value = v || '';\n const digits = value.replace(/\\D/g, '');\n\n const masks: Record<number, string> = {\n 10: '(##) ####-####',\n 11: '(##) #####-####',\n 12: '+## (##) ####-####',\n 13: '+## (##) #####-####',\n 14: '+### (##) #####-####',\n };\n\n return applyMask(digits, masks[digits.length] ?? digits);\n};\n\nexport const cpfMaskOrCnpjMask = (v: string) => {\n const value = v || '';\n const onlyNumbers = (value || '').replace(/\\D/g, '');\n\n if (onlyNumbers.length === 11) return cpfMask(onlyNumbers);\n\n if (onlyNumbers.length === 14) return cnpjMask(onlyNumbers);\n\n return null;\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zydon/common",
3
- "version": "2.8.72",
3
+ "version": "2.8.74",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "module": "./dist/index.js",
@@ -1,9 +0,0 @@
1
- import { memo, forwardRef, useState, useRef, useEffect } from 'react';
2
- import { NumericFormat } from 'react-number-format';
3
- import G from '@mui/material/TextField';
4
- import { jsx } from 'react/jsx-runtime';
5
-
6
- var m=memo(forwardRef(({decimalScale:s=0,fixedDecimalScale:c=!0,prefix:d,suffix:I,allowNegative:N,minValue:u,maxValue:n=1/0,maxLength:T,value:b,inputProps:g,InputProps:y,size:S,disabled:h,name:t,helperText:x,error:R,fullWidth:v,label:w,required:D,onChange:r,tabIndex:F,placeholder:P,margin:k,className:E,delay:l},L)=>{let[V,q]=useState(Date.now()),e=useRef(null),i=()=>q(Date.now()),z=(C,o)=>{if(!r)return;e.current&&clearTimeout(e.current);let f=()=>{let{floatValue:a}=C,p=a||0;if(u!==void 0&&u>p){r({target:{name:t,value:u},event:o}),i();return}if(a!==void 0&&n<p){r({target:{name:t,value:n},event:o}),i();return}r({target:{name:t,value:a},event:o});};l===0?f():e.current=setTimeout(f,l||1e3);};return useEffect(()=>()=>{e.current&&clearTimeout(e.current);},[]),jsx(NumericFormat,{getInputRef:L,value:b,prefix:d,suffix:I,decimalSeparator:",",thousandSeparator:".",decimalScale:s,fixedDecimalScale:c,autoComplete:"off",allowNegative:N,maxLength:T,onValueChange:z,customInput:G,InputProps:{...y},inputProps:{...g,name:t,tabIndex:F},disabled:h,size:S,helperText:x,error:R,fullWidth:v,label:w,required:D,placeholder:P,margin:k,className:E},V)}));m.displayName="NumberInput";var Z=m;
7
-
8
- export { Z as a };
9
- //# sourceMappingURL=chunk-W3CK33IH.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/NumberInput/index.tsx"],"names":["forwardRef","memo","useEffect","useRef","useState","NumericFormat","TextField","jsx","NumberInput","decimalScale","fixedDecimalScale","prefix","suffix","allowNegative","minValue","maxValue","maxLength","value","inputProps","InputProps","size","disabled","name","helperText","error","fullWidth","label","required","onChange","tabIndex","placeholder","margin","className","delay","ref","inputkey","setInputKey","delayTimer","reRenderInput","handleChange","values","event","executeChange","floatValue","comparisonValue","NumberInput_default"],"mappings":"AAAA,OAAS,cAAAA,EAAY,QAAAC,EAAM,aAAAC,EAAW,UAAAC,EAAQ,YAAAC,MAAgB,QAC9D,OAEE,iBAAAC,MAEK,sBACP,OAAOC,MAAe,0BAyFd,cAAAC,MAAA,oBArFR,IAAMC,EAAcP,EAClBD,EACE,CACE,CACE,aAAAS,EAAe,EACf,kBAAAC,EAAoB,GACpB,OAAAC,EACA,OAAAC,EACA,cAAAC,EACA,SAAAC,EACA,SAAAC,EAAW,IACX,UAAAC,EACA,MAAAC,EACA,WAAAC,EACA,WAAAC,EACA,KAAAC,EACA,SAAAC,EACA,KAAAC,EACA,WAAAC,EACA,MAAAC,EACA,UAAAC,EACA,MAAAC,EACA,SAAAC,EACA,SAAAC,EACA,SAAAC,EACA,YAAAC,EACA,OAAAC,EACA,UAAAC,EACA,MAAAC,CACF,EACAC,IACG,CACH,GAAM,CAACC,EAAUC,CAAW,EAAIhC,EAAS,KAAK,IAAI,CAAC,EAC7CiC,EAAalC,EAA6C,IAAI,EAE9DmC,EAAgB,IAAMF,EAAY,KAAK,IAAI,CAAC,EAE5CG,EAAe,CAACC,EAA4BC,IAAsB,CACtE,GAAI,CAACb,EAAU,OAEXS,EAAW,SAAS,aAAaA,EAAW,OAAO,EAEvD,IAAMK,EAAgB,IAAM,CAC1B,GAAM,CAAE,WAAAC,CAAW,EAAIH,EACjBI,EAAkBD,GAAc,EAEtC,GAAI7B,IAAa,QAAaA,EAAW8B,EAAiB,CACxDhB,EAAS,CAAE,OAAQ,CAAE,KAAAN,EAAM,MAAOR,CAAS,EAAG,MAAA2B,CAAM,CAAC,EACrDH,EAAc,EAEd,OAGF,GAAIK,IAAe,QAAa5B,EAAW6B,EAAiB,CAC1DhB,EAAS,CAAE,OAAQ,CAAE,KAAAN,EAAM,MAAOP,CAAS,EAAG,MAAA0B,CAAM,CAAC,EACrDH,EAAc,EAEd,OAGFV,EAAS,CACP,OAAQ,CACN,KAAAN,EACA,MAAOqB,CACT,EACA,MAAAF,CACF,CAAC,CACH,EAEIR,IAAU,EACZS,EAAc,EAEdL,EAAW,QAAU,WAAWK,EAAeT,GAAS,GAAI,CAEhE,EAEA,OAAA/B,EAAU,IACD,IAAM,CACPmC,EAAW,SACb,aAAaA,EAAW,OAAO,CAEnC,EACC,CAAC,CAAC,EAGH9B,EAACF,EAAA,CAEC,YAAa6B,EACb,MAAOjB,EACP,OAAQN,EACR,OAAQC,EACR,iBAAiB,IACjB,kBAAkB,IAClB,aAAcH,EACd,kBAAmBC,EACnB,aAAa,MACb,cAAeG,EACf,UAAWG,EACX,cAAeuB,EACf,YAAajC,EACb,WAAY,CACV,GAAGa,CACL,EACA,WAAY,CAAE,GAAGD,EAAY,KAAAI,EAAM,SAAAO,CAAS,EAC5C,SAAUR,EACV,KAAMD,EACN,WAAYG,EACZ,MAAOC,EACP,UAAWC,EACX,MAAOC,EACP,SAAUC,EACV,YAAaG,EACb,OAAQC,EACR,UAAWC,GA3BNG,CA4BP,CAEJ,CACF,CACF,EAEA3B,EAAY,YAAc,cAE1B,IAAOqC,EAAQrC","sourcesContent":["import { forwardRef, memo, useEffect, useRef, useState } from 'react';\nimport {\n NumberFormatValues,\n NumericFormat,\n SourceInfo,\n} from 'react-number-format';\nimport TextField from '@mui/material/TextField';\n\nimport { NumberInputProps } from 'types/numberInputProps';\n\nconst NumberInput = memo(\n forwardRef<HTMLDivElement, NumberInputProps>(\n (\n {\n decimalScale = 0,\n fixedDecimalScale = true,\n prefix,\n suffix,\n allowNegative,\n minValue,\n maxValue = Infinity,\n maxLength,\n value,\n inputProps,\n InputProps,\n size,\n disabled,\n name,\n helperText,\n error,\n fullWidth,\n label,\n required,\n onChange,\n tabIndex,\n placeholder,\n margin,\n className,\n delay,\n },\n ref,\n ) => {\n const [inputkey, setInputKey] = useState(Date.now());\n const delayTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const reRenderInput = () => setInputKey(Date.now());\n\n const handleChange = (values: NumberFormatValues, event: SourceInfo) => {\n if (!onChange) return;\n\n if (delayTimer.current) clearTimeout(delayTimer.current);\n\n const executeChange = () => {\n const { floatValue } = values;\n const comparisonValue = floatValue || 0;\n\n if (minValue !== undefined && minValue > comparisonValue) {\n onChange({ target: { name, value: minValue }, event });\n reRenderInput();\n\n return;\n }\n\n if (floatValue !== undefined && maxValue < comparisonValue) {\n onChange({ target: { name, value: maxValue }, event });\n reRenderInput();\n\n return;\n }\n\n onChange({\n target: {\n name,\n value: floatValue,\n },\n event,\n });\n };\n\n if (delay === 0) {\n executeChange();\n } else {\n delayTimer.current = setTimeout(executeChange, delay || 1000);\n }\n };\n\n useEffect(() => {\n return () => {\n if (delayTimer.current) {\n clearTimeout(delayTimer.current);\n }\n };\n }, []);\n\n return (\n <NumericFormat\n key={inputkey}\n getInputRef={ref}\n value={value}\n prefix={prefix}\n suffix={suffix}\n decimalSeparator=\",\"\n thousandSeparator=\".\"\n decimalScale={decimalScale}\n fixedDecimalScale={fixedDecimalScale}\n autoComplete=\"off\"\n allowNegative={allowNegative}\n maxLength={maxLength}\n onValueChange={handleChange}\n customInput={TextField}\n InputProps={{\n ...InputProps,\n }}\n inputProps={{ ...inputProps, name, tabIndex }}\n disabled={disabled}\n size={size}\n helperText={helperText}\n error={error}\n fullWidth={fullWidth}\n label={label}\n required={required}\n placeholder={placeholder}\n margin={margin}\n className={className}\n />\n );\n },\n ),\n);\n\nNumberInput.displayName = 'NumberInput';\n\nexport default NumberInput;\n"]}