@zydon/common 2.7.53 → 2.7.54
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/{chunk-U2MD645A.js → chunk-GPWECRTP.js} +2 -2
- package/dist/chunk-RFYCSLP5.js +11 -0
- package/dist/chunk-RFYCSLP5.js.map +1 -0
- package/dist/{chunk-6FZ26WXU.js → chunk-UNG4CL25.js} +2 -2
- package/dist/components/DragButton/index.js +1 -1
- package/dist/components/DynamicDataView/index.d.ts +3 -1
- package/dist/components/DynamicDataView/index.js +3 -3
- package/dist/components/DynamicDataView/index.js.map +1 -1
- package/dist/components/FileUpload/index.js +2 -2
- package/dist/components/PageHeader/index.js +2 -2
- package/dist/components/PageHeader/index.js.map +1 -1
- package/dist/components/form/FileUpload/index.js +2 -2
- package/dist/components/form/UploadWithCrop/index.js +2 -2
- package/dist/components/upload/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-KFHRIKEC.js +0 -11
- package/dist/chunk-KFHRIKEC.js.map +0 -1
- /package/dist/{chunk-U2MD645A.js.map → chunk-GPWECRTP.js.map} +0 -0
- /package/dist/{chunk-6FZ26WXU.js.map → chunk-UNG4CL25.js.map} +0 -0
|
@@ -2,7 +2,7 @@ import { c, g, p, n, d, e as e$1, a as a$6, b, h, i, l, m as m$1, j as j$1, k as
|
|
|
2
2
|
import { a as a$5 } from './chunk-QN4YPUG7.js';
|
|
3
3
|
import { a as a$1 } from './chunk-DTIGB5NW.js';
|
|
4
4
|
import { e } from './chunk-OF6623HG.js';
|
|
5
|
-
import { a as a$7 } from './chunk-
|
|
5
|
+
import { a as a$7 } from './chunk-RFYCSLP5.js';
|
|
6
6
|
import { x } from './chunk-33C6UWPV.js';
|
|
7
7
|
import { a as a$4 } from './chunk-6U5LS7MP.js';
|
|
8
8
|
import { a } from './chunk-GC7GAEFE.js';
|
|
@@ -39,4 +39,4 @@ O SingleImageUpload oferece crop integrado, melhor gerenciamento de upload e int
|
|
|
39
39
|
|
|
40
40
|
export { eo as a, Oo as b, wr as c, Ko as d, St as e };
|
|
41
41
|
//# sourceMappingURL=out.js.map
|
|
42
|
-
//# sourceMappingURL=chunk-
|
|
42
|
+
//# sourceMappingURL=chunk-GPWECRTP.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { a as a$1 } from './chunk-GC7GAEFE.js';
|
|
2
|
+
import c from '@mui/material/IconButton';
|
|
3
|
+
import s from '@mui/material/Stack';
|
|
4
|
+
import { styled } from '@mui/material/styles';
|
|
5
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var a=styled(c,{shouldForwardProp:t=>t!=="disableDrag"})(({theme:t})=>({position:"absolute",top:0,left:-2,zIndex:1,color:t.palette.grey[500],padding:"22px 5px",userSelect:"none",WebkitUserSelect:"none",WebkitTouchCallout:"none",cursor:"grab","&:active":{cursor:"grabbing"},"@media (pointer:coarse)":{userSelect:"none",WebkitUserSelect:"none",MozUserSelect:"none",msUserSelect:"none",WebkitTouchCallout:"none",WebkitTapHighlightColor:"transparent",touchAction:"none","&:active":{pointerEvents:"none"}}})),i=styled(s)({flexDirection:"row",alignItems:"center",justifyContent:"center",width:16,height:16,overflow:"hidden",transform:"scale(0.8)"});var u=({disableDrag:t,...l})=>t?null:jsx(a,{className:"dragIcon",disableRipple:!0,"aria-label":"Arrastar para ordenar",onTouchStart:e=>e.preventDefault(),onTouchMove:e=>e.preventDefault(),...l,children:jsxs(i,{children:[jsx(a$1,{sx:{marginLeft:0},icon:"MORE_BOLD",width:16}),jsx(a$1,{sx:{marginLeft:"-10px"},icon:"MORE_BOLD",width:16})]})}),D=u;
|
|
8
|
+
|
|
9
|
+
export { D as a };
|
|
10
|
+
//# sourceMappingURL=out.js.map
|
|
11
|
+
//# sourceMappingURL=chunk-RFYCSLP5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/DragButton/styles.ts","../src/components/DragButton/index.tsx"],"names":["IconButton","Stack","styled","DragButtonStyled","prop","theme","DragButtonInternal","jsx","jsxs","DragButton","disableDrag","props","Icon_default","DragButton_default"],"mappings":"wCAAA,OAAOA,MAAgB,2BACvB,OAAOC,MAAW,sBAClB,OAAS,UAAAC,MAAc,uBAEhB,IAAMC,EAAmBD,EAAOF,EAAY,CACjD,kBAAmBI,GAAQA,IAAS,aACtC,CAAC,EAAE,CAAC,CAAE,MAAAC,CAAM,KAAO,CACjB,SAAU,WACV,IAAK,EACL,KAAM,GACN,OAAQ,EACR,MAAOA,EAAM,QAAQ,KAAK,GAAG,EAC7B,QAAS,WACT,WAAY,OACZ,iBAAkB,OAClB,mBAAoB,OACpB,OAAQ,OACR,WAAY,CACV,OAAQ,UACV,EAEA,0BAA2B,CACzB,WAAY,OACZ,iBAAkB,OAClB,cAAe,OACf,aAAc,OACd,mBAAoB,OACpB,wBAAyB,cACzB,YAAa,OACb,WAAY,CACV,cAAe,MACjB,CACF,CACF,EAAE,EAEWC,EAAqBJ,EAAOD,CAAK,EAAE,CAC9C,cAAe,MACf,WAAY,SACZ,eAAgB,SAChB,MAAO,GACP,OAAQ,GACR,SAAU,SACV,UAAW,YACb,CAAC,ECtBK,OACE,OAAAM,EADF,QAAAC,MAAA,oBAfN,IAAMC,EAAa,CAAC,CAClB,YAAAC,EACA,GAAGC,CACL,IACMD,EAAoB,KAGtBH,EAACJ,EAAA,CACC,UAAU,WACV,cAAa,GACb,aAAW,wBACX,aAAc,GAAK,EAAE,eAAe,EACpC,YAAa,GAAK,EAAE,eAAe,EAClC,GAAGQ,EAEJ,SAAAH,EAACF,EAAA,CACC,UAAAC,EAACK,EAAA,CAAK,GAAI,CAAE,WAAY,CAAE,EAAG,KAAK,YAAY,MAAO,GAAI,EACzDL,EAACK,EAAA,CAAK,GAAI,CAAE,WAAY,OAAQ,EAAG,KAAK,YAAY,MAAO,GAAI,GACjE,EACF,EAIGC,EAAQJ","sourcesContent":["import IconButton from '@mui/material/IconButton';\nimport Stack from '@mui/material/Stack';\nimport { styled } from '@mui/material/styles';\n\nexport const DragButtonStyled = styled(IconButton, {\n shouldForwardProp: prop => prop !== 'disableDrag',\n})(({ theme }) => ({\n position: 'absolute',\n top: 0,\n left: -2,\n zIndex: 1,\n color: theme.palette.grey[500],\n padding: '22px 5px',\n userSelect: 'none',\n WebkitUserSelect: 'none',\n WebkitTouchCallout: 'none',\n cursor: 'grab',\n '&:active': {\n cursor: 'grabbing',\n },\n\n '@media (pointer:coarse)': {\n userSelect: 'none',\n WebkitUserSelect: 'none',\n MozUserSelect: 'none',\n msUserSelect: 'none',\n WebkitTouchCallout: 'none',\n WebkitTapHighlightColor: 'transparent',\n touchAction: 'none',\n '&:active': {\n pointerEvents: 'none',\n },\n },\n}));\n\nexport const DragButtonInternal = styled(Stack)({\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n width: 16,\n height: 16,\n overflow: 'hidden',\n transform: 'scale(0.8)',\n});\n","import { IconButtonProps } from '@mui/material/IconButton';\n\nimport Icon from 'components/Icon';\n\nimport { DragButtonInternal, DragButtonStyled } from './styles';\n\nconst DragButton = ({\n disableDrag,\n ...props\n}: IconButtonProps & { disableDrag?: boolean }) => {\n if (disableDrag) return null;\n\n return (\n <DragButtonStyled\n className=\"dragIcon\"\n disableRipple\n aria-label=\"Arrastar para ordenar\"\n onTouchStart={e => e.preventDefault()}\n onTouchMove={e => e.preventDefault()}\n {...props}\n >\n <DragButtonInternal>\n <Icon sx={{ marginLeft: 0 }} icon=\"MORE_BOLD\" width={16} />\n <Icon sx={{ marginLeft: '-10px' }} icon=\"MORE_BOLD\" width={16} />\n </DragButtonInternal>\n </DragButtonStyled>\n );\n};\n\nexport default DragButton;\n"]}
|
|
@@ -2,7 +2,7 @@ import { a as a$5 } from './chunk-DTIGB5NW.js';
|
|
|
2
2
|
import { a as a$6 } from './chunk-ESUU2GHD.js';
|
|
3
3
|
import { a } from './chunk-K5EVTJEW.js';
|
|
4
4
|
import { e } from './chunk-OF6623HG.js';
|
|
5
|
-
import { a as a$2 } from './chunk-
|
|
5
|
+
import { a as a$2 } from './chunk-RFYCSLP5.js';
|
|
6
6
|
import { x } from './chunk-33C6UWPV.js';
|
|
7
7
|
import { a as a$3 } from './chunk-45OMMG7D.js';
|
|
8
8
|
import { a as a$7 } from './chunk-6U5LS7MP.js';
|
|
@@ -33,4 +33,4 @@ var Xo=({helperText:e,disabled:o,isError:r})=>e?jsx($o,{error:r,sx:t=>({mx:"14px
|
|
|
33
33
|
|
|
34
34
|
export { O as a, _e as b, qe as c, Ve as d, Oo as e, To as f, oa as g, Ne as h, Ee as i, ca as j, yo as k, Uo as l, Co as m, Lo as n, X as o, Ke as p, Be as q, q as r, ct as s, Pt as t, Rt as u, Lt as v, jt as w, qt as x };
|
|
35
35
|
//# sourceMappingURL=out.js.map
|
|
36
|
-
//# sourceMappingURL=chunk-
|
|
36
|
+
//# sourceMappingURL=chunk-UNG4CL25.js.map
|
|
@@ -69,6 +69,8 @@ interface DynamicDataViewProps<T = object> {
|
|
|
69
69
|
onRowDoubleClick?: (rowId: string, row: DynamicRowData<T>) => void;
|
|
70
70
|
onSelect?: (selectedRows: DynamicRowData<T>) => void;
|
|
71
71
|
actions?: ReactNode;
|
|
72
|
+
moreActions?: ReactNode;
|
|
73
|
+
hideHeader?: boolean;
|
|
72
74
|
slots?: {
|
|
73
75
|
noRowsOverlay?: () => JSX.Element;
|
|
74
76
|
};
|
|
@@ -82,7 +84,7 @@ interface DynamicDataViewProps<T = object> {
|
|
|
82
84
|
};
|
|
83
85
|
}
|
|
84
86
|
|
|
85
|
-
declare const _default$8: <T extends object = object>({ title, metadata, data, isLoading, isFetching, page, perPage, searchValue, onSearchChange, onSearch, onPaginationChange, onAdd, onRowAction, onRowDoubleClick, actions, slots, mobileRender, containerHeight, showColumnButton, defaultVisibleFieldNames, preferredFieldOrder, columnStrategies, }: DynamicDataViewProps<T>) => react_jsx_runtime.JSX.Element;
|
|
87
|
+
declare const _default$8: <T extends object = object>({ title, metadata, data, isLoading, isFetching, page, perPage, searchValue, onSearchChange, onSearch, onPaginationChange, onAdd, onRowAction, onRowDoubleClick, actions, moreActions, hideHeader, slots, mobileRender, containerHeight, showColumnButton, defaultVisibleFieldNames, preferredFieldOrder, columnStrategies, }: DynamicDataViewProps<T>) => react_jsx_runtime.JSX.Element;
|
|
86
88
|
|
|
87
89
|
declare const _default$7: react.MemoExoticComponent<({ value, trueLabel, falseLabel, }: BooleanRendererProps) => ReactNode>;
|
|
88
90
|
|
|
@@ -23,12 +23,12 @@ import '../../chunk-GLRLKFPS.js';
|
|
|
23
23
|
import '../../chunk-CFNATBO2.js';
|
|
24
24
|
import { memo, useMemo, useCallback } from 'react';
|
|
25
25
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
26
|
-
import
|
|
26
|
+
import Ge from '@mui/material/Chip';
|
|
27
27
|
import K from '@mui/material/Stack';
|
|
28
28
|
import Q from '@mui/material/Typography';
|
|
29
29
|
|
|
30
|
-
var l={IMAGE_WIDTH:90,MIN_WIDTH:130,ID_MIN_WIDTH:200,ENTITY_MIN_WIDTH:160,HIGHLIGHT_MAX_WIDTH:80,ACTIONS_WIDTH:80,ID_FLEX:2,ENTITY_FLEX:1},h={READ_ONLY:"READ_ONLY",READ_AND_WRITE:"READ_AND_WRITE"},j=["price","base_price","minimum_value","maximum_value","minimum_installment_value"];var
|
|
30
|
+
var l={IMAGE_WIDTH:90,MIN_WIDTH:130,ID_MIN_WIDTH:200,ENTITY_MIN_WIDTH:160,HIGHLIGHT_MAX_WIDTH:80,ACTIONS_WIDTH:80,ID_FLEX:2,ENTITY_FLEX:1},h={READ_ONLY:"READ_ONLY",READ_AND_WRITE:"READ_AND_WRITE"},j=["price","base_price","minimum_value","maximum_value","minimum_installment_value"];var Ie=(e,r)=>({field:e.name,headerName:e.description,sortable:!1,width:l.IMAGE_WIDTH,resizable:!1,renderCell:t=>r(e,t.row)}),Ne=(e,r)=>({field:e.name,headerName:e.description,minWidth:l.ID_MIN_WIDTH,flex:l.ID_FLEX,renderCell:t=>r(e,t.row)}),_e=(e,r)=>({field:e.name,headerName:e.description,minWidth:l.ENTITY_MIN_WIDTH,flex:l.ENTITY_FLEX,renderCell:t=>r(e,t.row)}),Ee=(e,r)=>({field:e.name,headerName:e.description,minWidth:l.MIN_WIDTH,renderCell:t=>r(e,t.row)}),he=(e,r)=>({field:e.name,headerName:"A\xE7\xF5es",width:l.ACTIONS_WIDTH,sortable:!1,resizable:!1,disableReorder:!0,headerAlign:"center",disableColumnMenu:!0,align:"center",renderCell:t=>r(e,t.row)}),z=(e,r)=>e.name===r?.id_field_name||e.name==="name"?Ne:e.name==="ACTIONS"?he:e.type==="FILE"?Ie:e.type==="ENTITY"?_e:Ee;var q=({metadata:e,renderCell:r,columnStrategies:t})=>useMemo(()=>{if(!e?.fields)return [];let n=new Map;return e.fields.filter(o=>o.access_type===h.READ_ONLY||o.access_type===h.READ_AND_WRITE?!0:o.name==="ACTIONS"||o.name===e?.id_field_name||o.name==="NAME").forEach(o=>{if(n.has(o.name))return;let E=(t?.[o.name]??z(o,e))(o,r,e);n.set(o.name,E);}),Array.from(n.values())},[t,e,r]);var J=()=>({name:"ACTIONS",description:"",filter_field_name:null,type:"TEXT",metadata:null,access_type:"READ_ONLY",relation_field_name:null,available_filter_conditions:[]}),b=e=>e.fields.some(t=>t.name==="ACTIONS")?e:{...e,fields:[...e.fields,J()]};var Ae=({value:e,trueLabel:r="Ativo",falseLabel:t="Inativo"})=>jsx(a,{color:e?"success":"warning",children:e?r:t}),w=memo(Ae);var Se=({value:e,format:r})=>e==null?"-":d(e,r),A=memo(Se);var Pe=({value:e,format:r})=>e==null?"-":c(e,r),x=memo(Pe);var Le=({value:e,field:r})=>{if(!r.metadata||typeof e!="object"||e===null)return e?String(e):"-";let t=e[r.metadata.description_field_name];return t?jsx(Ge,{label:String(t),variant:"outlined",size:"small",sx:{width:"fit-content",color:"text.secondary",borderColor:"divider",px:1.5}}):null},F=memo(Le);var Oe=({value:e,trueIcon:r="STAR_02",falseIcon:t="STAR",color:n="primary.main",width:a=18})=>jsx(a$1,{icon:e?r:t,color:n,width:a}),Ye=memo(Oe);var Ve=({id:e,displayName:r,copyMessage:t="ID copiado!"})=>jsxs(K,{height:1,justifyContent:"center",children:[jsx(Q,{variant:"subtitle2",noWrap:!0,title:r,children:r}),jsxs(K,{direction:"row",gap:1,alignItems:"center",children:[jsxs(Q,{color:"grey.600",variant:"body2",noWrap:!0,children:["ID: ",e]}),jsx(a$2,{toCopy:e,message:t})]})]}),Ue=memo(Ve);var je=({value:e,isCurrency:r=!1})=>e==null?"-":r?jsx(Q,{variant:"body2",noWrap:!0,width:"fit-content",children:h$1(Number(e))}):jsx(Q,{variant:"body2",noWrap:!0,width:"fit-content",children:a$3(Number(e))}),M=memo(je);var Ke=e=>e.replace(/<[^>]*>/g,"").replace(/ /g," ").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").trim(),Qe=({value:e,showCopyButton:r=!1,copyMessage:t="Copiado"})=>{if(!e)return "-";let n=String(e),a=Ke(n);return r?jsxs(K,{direction:"row",gap:1,alignItems:"center",children:[jsx(Q,{variant:"body2",noWrap:!0,children:a}),jsx(a$2,{toCopy:a,message:t})]}):a},P=memo(Qe);function $e(e){return j.includes(e)}var te=e=>{let{onRowAction:r}=e,t=(n,a)=>{let o=a[n.name];if(n.name==="ACTIONS")return r?.(a.id,a);switch(n.type){case"BOOLEAN":return jsx(w,{value:o});case"DATE":return jsx(A,{value:o});case"DATETIME":return jsx(x,{value:o});case"DECIMAL":case"INTEGER":return jsx(M,{value:o,isCurrency:$e(n.name)});case"FILE":case"ENTITY":return jsx(F,{value:o,field:n});case"TEXT":default:return jsx(P,{value:o})}};return t.displayName="CellRendererComponent",t};function W(e){return e.name}var tr=({title:e,metadata:r,data:t,isLoading:n,isFetching:a,page:o,perPage:G,searchValue:E,onSearchChange:oe,onSearch:ne,onPaginationChange:ae,onAdd:ie,onRowAction:C,onRowDoubleClick:y,actions:me,moreActions:se,hideHeader:le,slots:de,mobileRender:ce,containerHeight:L=600,showColumnButton:pe=!1,defaultVisibleFieldNames:g,preferredFieldOrder:I,columnStrategies:ue})=>{let{items:fe=[],total:Re=0}=t||{},s=useMemo(()=>C?b(r):r,[r,C]),Te=useMemo(()=>te({onRowAction:C}),[C]),R=q({metadata:s,renderCell:Te,columnStrategies:ue}),T=useMemo(()=>new Map(R.map(i=>[i.field,i])),[R]),De=useMemo(()=>{if(!I||I.length===0||!s?.fields)return R;let i="ACTIONS",d=I.filter(m=>m!==i),c=new Set,N=[],H=m=>{let p=s.fields.find(ge=>ge.name===m);if(!p)return;let u=W(p),v=T.get(u);!v||c.has(u)||(N.push(v),c.add(u));};return d.forEach(m=>{H(m);}),s.fields.forEach(m=>{if(m.name===i||d.includes(m.name))return;let p=W(m),u=T.get(p);!u||c.has(p)||(N.push(u),c.add(p));}),H(i),N.length===0?R:N},[R,T,s,I]),Ce=useMemo(()=>{if(!g||g.length===0||!s?.fields)return;let i={};return s.fields.forEach(d=>{let c=W(d);T.has(c)&&(i[c]=g.includes(d.name));}),{columns:{columnVisibilityModel:i}}},[T,g,s]),ye=useCallback(i=>{if(!y)return;let d=i.id?.toString()||"";y(d,i.row);},[y]);return jsx(k,{title:e,columns:De,rows:fe,mobileRender:ce||(()=>null),rowCount:Re,loading:n,fetching:a,searchValue:E,onSearch:ne,onSearchChange:oe,paginationModel:{page:o,pageSize:G},onPaginationChange:ae,actions:me,moreActions:se,onAdd:ie,hideHeader:le,onRowDoubleClick:y?ye:void 0,disableRowSelectionOnClick:!0,slots:de,initialState:Ce,showColumnButton:pe,containerProps:{height:L,maxHeight:L}})},or=memo(tr);
|
|
31
31
|
|
|
32
|
-
export { w as BooleanRenderer,
|
|
32
|
+
export { w as BooleanRenderer, A as DateRenderer, x as DateTimeRenderer, F as EntityRenderer, Ye as IconRenderer, Ue as NameRenderer, M as NumberRenderer, P as TextRenderer, b as addActionsFieldToMetadata, J as createActionsField, or as default };
|
|
33
33
|
//# sourceMappingURL=out.js.map
|
|
34
34
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/DynamicDataView/DynamicDataView.tsx","../../../src/components/DynamicDataView/hooks/useDynamicColumns.ts","../../../src/components/DynamicDataView/constants/columnDefaults.ts","../../../src/components/DynamicDataView/utils/columnStrategies.ts","../../../src/components/DynamicDataView/utils/addActionsField.ts","../../../src/components/DynamicDataView/renderers/BooleanRenderer.tsx","../../../src/components/DynamicDataView/renderers/DateRenderer.tsx","../../../src/components/DynamicDataView/renderers/DateTimeRenderer.tsx","../../../src/components/DynamicDataView/renderers/EntityRenderer.tsx","../../../src/components/DynamicDataView/renderers/IconRenderer.tsx","../../../src/components/DynamicDataView/renderers/NameRenderer.tsx","../../../src/components/DynamicDataView/renderers/NumberRenderer.tsx","../../../src/components/DynamicDataView/renderers/TextRenderer.tsx","../../../src/components/DynamicDataView/utils/createCellRenderer.tsx"],"names":["memo","useCallback","useMemo","COLUMN_DEFAULTS","ACCESS_TYPES","CURRENCY_FIELD_NAMES","createImageColumn","field","renderCell","params","createIdColumn","createEntityColumn","createDefaultColumn","createActionsColumn","getColumnStrategy","metadata","useDynamicColumns","columnStrategies","columnsMap","column","createActionsField","addActionsFieldToMetadata","jsx","BooleanRenderer","value","trueLabel","falseLabel","Label_default","BooleanRenderer_default","DateRenderer","format","fDate","DateRenderer_default","DateTimeRenderer","fDateTime","DateTimeRenderer_default","Chip","EntityRenderer","entityValue","EntityRenderer_default","IconRenderer","trueIcon","falseIcon","color","width","Icon_default","IconRenderer_default","Stack","Typography","jsxs","NameRenderer","id","displayName","copyMessage","CopyButton_default","NameRenderer_default","NumberRenderer","isCurrency","fCurrencyBRL","fNumber","NumberRenderer_default","sanitizeHtml","text","TextRenderer","showCopyButton","stringValue","sanitizedValue","TextRenderer_default","getIsCurrency","fieldName","createCellRenderer","context","onRowAction","CellRendererComponent","row","getColumnFieldIdFromField","DynamicDataView","title","data","isLoading","isFetching","page","perPage","searchValue","onSearchChange","onSearch","onPaginationChange","onAdd","onRowDoubleClick","actions","slots","mobileRender","containerHeight","showColumnButton","defaultVisibleFieldNames","preferredFieldOrder","rows","total","effectiveMetadata","columns","columnsByFieldId","orderedColumns","actionFieldName","preferredWithoutActions","usedColumnFieldIds","ordered","pushColumnForField","fieldItem","columnFieldId","initialState","visibilityModel","handleRowDoubleClick","rowId","DataView_default","DynamicDataView_default"],"mappings":"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","sourcesContent":["import { memo, useCallback, useMemo } from 'react';\nimport { GridColumnVisibilityModel } from '@mui/x-data-grid-premium';\n\nimport { Field } from 'types/entityMetadata';\n\nimport DataView from '../DataView';\n\nimport { useDynamicColumns } from './hooks/useDynamicColumns';\nimport { addActionsFieldToMetadata } from './utils/addActionsField';\nimport { createCellRenderer } from './utils/createCellRenderer';\nimport { DynamicDataViewProps, DynamicRowData } from './props';\n\nfunction getColumnFieldIdFromField(field: Field): string {\n return field.name;\n}\n\nconst DynamicDataView = <T extends object = object>({\n title,\n metadata,\n data,\n isLoading,\n isFetching,\n page,\n perPage,\n searchValue,\n onSearchChange,\n onSearch,\n onPaginationChange,\n onAdd,\n onRowAction,\n onRowDoubleClick,\n actions,\n slots,\n mobileRender,\n containerHeight = 600,\n showColumnButton = false,\n defaultVisibleFieldNames,\n preferredFieldOrder,\n columnStrategies,\n}: DynamicDataViewProps<T>) => {\n const { items: rows = [], total = 0 } = data || {};\n\n const effectiveMetadata = useMemo(\n () => (onRowAction ? addActionsFieldToMetadata(metadata) : metadata),\n [metadata, onRowAction],\n );\n\n const renderCell = useMemo(\n () =>\n createCellRenderer<T>({\n onRowAction,\n }),\n [onRowAction],\n );\n\n const columns = useDynamicColumns<T>({\n metadata: effectiveMetadata,\n renderCell,\n columnStrategies,\n });\n\n const columnsByFieldId = useMemo(\n () => new Map(columns.map(column => [column.field, column])),\n [columns],\n );\n\n const orderedColumns = useMemo(() => {\n if (\n !preferredFieldOrder ||\n preferredFieldOrder.length === 0 ||\n !effectiveMetadata?.fields\n ) {\n return columns;\n }\n\n const actionFieldName = 'ACTIONS';\n const preferredWithoutActions = preferredFieldOrder.filter(\n fieldName => fieldName !== actionFieldName,\n );\n\n const usedColumnFieldIds = new Set<string>();\n const ordered: Array<(typeof columns)[number]> = [];\n\n const pushColumnForField = (fieldName: string) => {\n const field = effectiveMetadata.fields.find(\n fieldItem => fieldItem.name === fieldName,\n );\n\n if (!field) {\n return;\n }\n\n const columnFieldId = getColumnFieldIdFromField(field);\n const column = columnsByFieldId.get(columnFieldId);\n\n if (!column || usedColumnFieldIds.has(columnFieldId)) {\n return;\n }\n\n ordered.push(column);\n usedColumnFieldIds.add(columnFieldId);\n };\n\n preferredWithoutActions.forEach(fieldName => {\n pushColumnForField(fieldName);\n });\n\n effectiveMetadata.fields.forEach(field => {\n if (field.name === actionFieldName) {\n return;\n }\n\n if (preferredWithoutActions.includes(field.name)) {\n return;\n }\n\n const columnFieldId = getColumnFieldIdFromField(field);\n const column = columnsByFieldId.get(columnFieldId);\n\n if (!column || usedColumnFieldIds.has(columnFieldId)) {\n return;\n }\n\n ordered.push(column);\n usedColumnFieldIds.add(columnFieldId);\n });\n\n pushColumnForField(actionFieldName);\n\n if (ordered.length === 0) {\n return columns;\n }\n\n return ordered;\n }, [columns, columnsByFieldId, effectiveMetadata, preferredFieldOrder]);\n\n const initialState = useMemo(() => {\n if (\n !defaultVisibleFieldNames ||\n defaultVisibleFieldNames.length === 0 ||\n !effectiveMetadata?.fields\n ) {\n return undefined;\n }\n\n const visibilityModel: GridColumnVisibilityModel = {};\n\n effectiveMetadata.fields.forEach(field => {\n const columnFieldId = getColumnFieldIdFromField(field);\n\n if (!columnsByFieldId.has(columnFieldId)) {\n return;\n }\n\n visibilityModel[columnFieldId] = defaultVisibleFieldNames.includes(\n field.name,\n );\n });\n\n return {\n columns: {\n columnVisibilityModel: visibilityModel,\n },\n };\n }, [columnsByFieldId, defaultVisibleFieldNames, effectiveMetadata]);\n\n const handleRowDoubleClick = useCallback(\n (params: { id: string | number; row: DynamicRowData<T> }) => {\n if (!onRowDoubleClick) return;\n\n const rowId = params.id?.toString() || '';\n onRowDoubleClick(rowId, params.row);\n },\n [onRowDoubleClick],\n );\n\n return (\n <DataView\n title={title}\n columns={orderedColumns}\n rows={rows}\n mobileRender={mobileRender || (() => null)}\n rowCount={total}\n loading={isLoading}\n fetching={isFetching}\n searchValue={searchValue}\n onSearch={onSearch}\n onSearchChange={onSearchChange}\n paginationModel={{\n page,\n pageSize: perPage,\n }}\n onPaginationChange={onPaginationChange}\n actions={actions}\n onAdd={onAdd}\n onRowDoubleClick={onRowDoubleClick ? handleRowDoubleClick : undefined}\n disableRowSelectionOnClick\n slots={slots}\n initialState={initialState}\n showColumnButton={showColumnButton}\n containerProps={{\n height: containerHeight,\n maxHeight: containerHeight,\n }}\n />\n );\n};\n\nexport default memo(DynamicDataView) as typeof DynamicDataView;\nexport type {\n DynamicDataViewProps,\n DynamicRowData,\n MobileRenderFunction,\n} from './props';\n","import { useMemo } from 'react';\nimport { GridColDef } from '@mui/x-data-grid-premium';\n\nimport { Columns } from 'types/datagrid';\nimport { EntityMetadataResponse } from 'types/entityMetadata';\n\nimport { ACCESS_TYPES } from '../constants/columnDefaults';\nimport { CellRenderer } from '../types/cellRenderer';\nimport { ColumnStrategy, getColumnStrategy } from '../utils/columnStrategies';\n\ninterface UseDynamicColumnsProps<T> {\n metadata?: EntityMetadataResponse;\n renderCell: CellRenderer<T>;\n columnStrategies?: {\n [fieldName: string]: ColumnStrategy<T>;\n };\n}\n\nexport const useDynamicColumns = <T extends object>({\n metadata,\n renderCell,\n columnStrategies,\n}: UseDynamicColumnsProps<T>): Columns => {\n return useMemo(() => {\n if (!metadata?.fields) return [];\n\n const columnsMap = new Map<string, GridColDef>();\n\n const visibleFields = metadata.fields.filter(field => {\n if (\n field.access_type === ACCESS_TYPES.READ_ONLY ||\n field.access_type === ACCESS_TYPES.READ_AND_WRITE\n ) {\n return true;\n }\n\n return (\n field.name === 'ACTIONS' ||\n field.name === metadata?.id_field_name ||\n field.name === 'NAME'\n );\n });\n\n visibleFields.forEach(field => {\n if (columnsMap.has(field.name)) {\n return;\n }\n\n const strategy =\n columnStrategies?.[field.name] ?? getColumnStrategy<T>(field, metadata);\n const column = strategy(field, renderCell, metadata);\n\n columnsMap.set(field.name, column);\n });\n\n return Array.from(columnsMap.values());\n }, [columnStrategies, metadata, renderCell]);\n};\n","export const COLUMN_DEFAULTS = {\n IMAGE_WIDTH: 90,\n MIN_WIDTH: 130,\n ID_MIN_WIDTH: 200,\n ENTITY_MIN_WIDTH: 160,\n HIGHLIGHT_MAX_WIDTH: 80,\n ACTIONS_WIDTH: 80,\n ID_FLEX: 2,\n ENTITY_FLEX: 1,\n} as const;\n\nexport const ACCESS_TYPES = {\n READ_ONLY: 'READ_ONLY',\n READ_AND_WRITE: 'READ_AND_WRITE',\n} as const;\n\nexport const CURRENCY_FIELD_NAMES: readonly string[] = [\n 'price',\n 'base_price',\n 'minimum_value',\n 'maximum_value',\n 'minimum_installment_value',\n];\n","import { GridColDef, GridRenderCellParams } from '@mui/x-data-grid-premium';\n\nimport { Field } from 'types/entityMetadata';\n\nimport { COLUMN_DEFAULTS } from '../constants/columnDefaults';\nimport { CellRenderer, DynamicRowData } from '../types/cellRenderer';\n\nexport type ColumnStrategy<T = object> = (\n field: Field,\n renderCell: CellRenderer<T>,\n metadata?: { id_field_name?: string },\n) => GridColDef;\n\nconst createImageColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n sortable: false,\n width: COLUMN_DEFAULTS.IMAGE_WIDTH,\n resizable: false,\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createIdColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n minWidth: COLUMN_DEFAULTS.ID_MIN_WIDTH,\n flex: COLUMN_DEFAULTS.ID_FLEX,\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createEntityColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n minWidth: COLUMN_DEFAULTS.ENTITY_MIN_WIDTH,\n flex: COLUMN_DEFAULTS.ENTITY_FLEX,\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createDefaultColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n minWidth: COLUMN_DEFAULTS.MIN_WIDTH,\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createActionsColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: 'Ações',\n width: COLUMN_DEFAULTS.ACTIONS_WIDTH,\n sortable: false,\n resizable: false,\n disableReorder: true,\n headerAlign: 'center',\n disableColumnMenu: true,\n align: 'center',\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nexport const getColumnStrategy = <T extends object>(\n field: Field,\n metadata?: { id_field_name?: string },\n): ColumnStrategy<T> => {\n if (field.name === metadata?.id_field_name || field.name === 'name') {\n return createIdColumn;\n }\n\n if (field.name === 'ACTIONS') {\n return createActionsColumn;\n }\n\n if (field.type === 'FILE') {\n return createImageColumn;\n }\n\n if (field.type === 'ENTITY') {\n return createEntityColumn;\n }\n\n return createDefaultColumn;\n};\n","import { EntityMetadataResponse, Field } from 'types/entityMetadata';\n\nexport const createActionsField = (): Field => ({\n name: 'ACTIONS',\n description: '',\n filter_field_name: null,\n type: 'TEXT',\n metadata: null,\n access_type: 'READ_ONLY',\n relation_field_name: null,\n available_filter_conditions: [],\n});\n\nexport const addActionsFieldToMetadata = (\n metadata: EntityMetadataResponse,\n): EntityMetadataResponse => {\n const hasActionsField = metadata.fields.some(\n field => field.name === 'ACTIONS',\n );\n\n if (hasActionsField) {\n return metadata;\n }\n\n return {\n ...metadata,\n fields: [...metadata.fields, createActionsField()],\n };\n};\n","import { memo, ReactNode } from 'react';\n\nimport Label from '../../Label';\n\nimport { BooleanRendererProps } from './props';\n\nconst BooleanRenderer = ({\n value,\n trueLabel = 'Ativo',\n falseLabel = 'Inativo',\n}: BooleanRendererProps): ReactNode => {\n return (\n <Label color={value ? 'success' : 'warning'}>\n {value ? trueLabel : falseLabel}\n </Label>\n );\n};\n\nexport default memo(BooleanRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport { DatePickerFormat, fDate } from 'utils/formatTime';\n\nexport interface DateRendererProps {\n value: unknown;\n format?: string;\n}\n\nconst DateRenderer = ({ value, format }: DateRendererProps): ReactNode => {\n if (value === null || value === undefined) return '-';\n\n return fDate(value as DatePickerFormat, format);\n};\n\nexport default memo(DateRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport { DatePickerFormat, fDateTime } from 'utils/formatTime';\n\nexport interface DateTimeRendererProps {\n value: unknown;\n format?: string;\n}\n\nconst DateTimeRenderer = ({\n value,\n format,\n}: DateTimeRendererProps): ReactNode => {\n if (value === null || value === undefined) return '-';\n\n return fDateTime(value as DatePickerFormat, format);\n};\n\nexport default memo(DateTimeRenderer);\n","import { memo, ReactNode } from 'react';\nimport Chip from '@mui/material/Chip';\n\nimport { EntityRendererProps } from './props';\n\nconst EntityRenderer = ({ value, field }: EntityRendererProps): ReactNode => {\n if (!field.metadata || typeof value !== 'object' || value === null) {\n return value ? String(value) : '-';\n }\n\n const entityValue = (value as Record<string, unknown>)[\n field.metadata.description_field_name\n ];\n\n if (!entityValue) return null;\n\n return (\n <Chip\n label={String(entityValue)}\n variant=\"outlined\"\n size=\"small\"\n sx={{\n width: 'fit-content',\n color: 'text.secondary',\n borderColor: 'divider',\n px: 1.5,\n }}\n />\n );\n};\n\nexport default memo(EntityRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport Icon, { IconEnum } from '../../Icon';\n\nimport { IconRendererProps } from './props';\n\nconst IconRenderer = ({\n value,\n trueIcon = IconEnum.STAR_02,\n falseIcon = IconEnum.STAR,\n color = 'primary.main',\n width = 18,\n}: IconRendererProps): ReactNode => {\n return (\n <Icon icon={value ? trueIcon : falseIcon} color={color} width={width} />\n );\n};\n\nexport default memo(IconRenderer);\n","import { memo, ReactNode } from 'react';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport CopyButton from 'components/CopyButton';\n\nimport { NameRendererProps } from './props';\n\nconst NameRenderer = ({\n id,\n displayName,\n copyMessage = 'ID copiado!',\n}: NameRendererProps): ReactNode => {\n return (\n <Stack height={1} justifyContent=\"center\">\n <Typography variant=\"subtitle2\" noWrap title={displayName}>\n {displayName}\n </Typography>\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Typography color=\"grey.600\" variant=\"body2\" noWrap>\n ID: {id}\n </Typography>\n <CopyButton toCopy={id} message={copyMessage} />\n </Stack>\n </Stack>\n );\n};\n\nexport default memo(NameRenderer);\n","import { memo, ReactNode } from 'react';\nimport Typography from '@mui/material/Typography';\n\nimport { fCurrencyBRL, fNumber } from 'utils/formatNumber';\n\nimport { NumberRendererProps } from './props';\n\nconst NumberRenderer = ({\n value,\n isCurrency = false,\n}: NumberRendererProps): ReactNode => {\n if (value === null || value === undefined) return '-';\n\n if (isCurrency) {\n return (\n <Typography variant=\"body2\" noWrap width=\"fit-content\">\n {fCurrencyBRL(Number(value))}\n </Typography>\n );\n }\n\n return (\n <Typography variant=\"body2\" noWrap width=\"fit-content\">\n {fNumber(Number(value))}\n </Typography>\n );\n};\n\nexport default memo(NumberRenderer);\n","import { memo, ReactNode } from 'react';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport CopyButton from 'components/CopyButton';\n\nimport { TextRendererProps } from './props';\n\nconst sanitizeHtml = (text: string): string => {\n const withoutTags = text.replace(/<[^>]*>/g, '');\n return withoutTags\n .replace(/ /g, ' ')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .trim();\n};\n\nconst TextRenderer = ({\n value,\n showCopyButton = false,\n copyMessage = 'Copiado',\n}: TextRendererProps): ReactNode => {\n if (!value) return '-';\n\n const stringValue = String(value);\n const sanitizedValue = sanitizeHtml(stringValue);\n\n if (showCopyButton) {\n return (\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Typography variant=\"body2\" noWrap>\n {sanitizedValue}\n </Typography>\n <CopyButton toCopy={sanitizedValue} message={copyMessage} />\n </Stack>\n );\n }\n\n return sanitizedValue;\n};\n\nexport default memo(TextRenderer);\n","import { ReactNode } from 'react';\n\nimport { Field } from 'types/entityMetadata';\n\nimport { CURRENCY_FIELD_NAMES } from '../constants/columnDefaults';\nimport { CellRenderer, DynamicRowData } from '../props';\nimport {\n BooleanRenderer,\n DateRenderer,\n DateTimeRenderer,\n EntityRenderer,\n NumberRenderer,\n TextRenderer,\n} from '../renderers';\n\nfunction getIsCurrency(fieldName: string): boolean {\n return CURRENCY_FIELD_NAMES.includes(fieldName);\n}\n\nexport const createCellRenderer = <T extends object = object>(context: {\n onRowAction?: (rowId: string, row: DynamicRowData<T>) => ReactNode;\n}): CellRenderer<T> => {\n const { onRowAction } = context;\n\n const CellRendererComponent = (\n field: Field,\n row: DynamicRowData<T>,\n ): ReactNode => {\n const value = row[field.name];\n\n if (field.name === 'ACTIONS') {\n return onRowAction?.(row.id, row);\n }\n\n switch (field.type) {\n case 'BOOLEAN':\n return <BooleanRenderer value={value} />;\n\n case 'DATE':\n return <DateRenderer value={value} />;\n\n case 'DATETIME':\n return <DateTimeRenderer value={value} />;\n\n case 'DECIMAL':\n case 'INTEGER':\n return (\n <NumberRenderer\n value={value}\n isCurrency={getIsCurrency(field.name)}\n />\n );\n\n case 'FILE':\n case 'ENTITY':\n return <EntityRenderer value={value} field={field} />;\n case 'TEXT':\n default:\n return <TextRenderer value={value} />;\n }\n };\n\n CellRendererComponent.displayName = 'CellRendererComponent';\n return CellRendererComponent;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/DynamicDataView/DynamicDataView.tsx","../../../src/components/DynamicDataView/hooks/useDynamicColumns.ts","../../../src/components/DynamicDataView/constants/columnDefaults.ts","../../../src/components/DynamicDataView/utils/columnStrategies.ts","../../../src/components/DynamicDataView/utils/addActionsField.ts","../../../src/components/DynamicDataView/renderers/BooleanRenderer.tsx","../../../src/components/DynamicDataView/renderers/DateRenderer.tsx","../../../src/components/DynamicDataView/renderers/DateTimeRenderer.tsx","../../../src/components/DynamicDataView/renderers/EntityRenderer.tsx","../../../src/components/DynamicDataView/renderers/IconRenderer.tsx","../../../src/components/DynamicDataView/renderers/NameRenderer.tsx","../../../src/components/DynamicDataView/renderers/NumberRenderer.tsx","../../../src/components/DynamicDataView/renderers/TextRenderer.tsx","../../../src/components/DynamicDataView/utils/createCellRenderer.tsx"],"names":["memo","useCallback","useMemo","COLUMN_DEFAULTS","ACCESS_TYPES","CURRENCY_FIELD_NAMES","createImageColumn","field","renderCell","params","createIdColumn","createEntityColumn","createDefaultColumn","createActionsColumn","getColumnStrategy","metadata","useDynamicColumns","columnStrategies","columnsMap","column","createActionsField","addActionsFieldToMetadata","jsx","BooleanRenderer","value","trueLabel","falseLabel","Label_default","BooleanRenderer_default","DateRenderer","format","fDate","DateRenderer_default","DateTimeRenderer","fDateTime","DateTimeRenderer_default","Chip","EntityRenderer","entityValue","EntityRenderer_default","IconRenderer","trueIcon","falseIcon","color","width","Icon_default","IconRenderer_default","Stack","Typography","jsxs","NameRenderer","id","displayName","copyMessage","CopyButton_default","NameRenderer_default","NumberRenderer","isCurrency","fCurrencyBRL","fNumber","NumberRenderer_default","sanitizeHtml","text","TextRenderer","showCopyButton","stringValue","sanitizedValue","TextRenderer_default","getIsCurrency","fieldName","createCellRenderer","context","onRowAction","CellRendererComponent","row","getColumnFieldIdFromField","DynamicDataView","title","data","isLoading","isFetching","page","perPage","searchValue","onSearchChange","onSearch","onPaginationChange","onAdd","onRowDoubleClick","actions","moreActions","hideHeader","slots","mobileRender","containerHeight","showColumnButton","defaultVisibleFieldNames","preferredFieldOrder","rows","total","effectiveMetadata","columns","columnsByFieldId","orderedColumns","actionFieldName","preferredWithoutActions","usedColumnFieldIds","ordered","pushColumnForField","fieldItem","columnFieldId","initialState","visibilityModel","handleRowDoubleClick","rowId","DataView_default","DynamicDataView_default"],"mappings":"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","sourcesContent":["import { memo, useCallback, useMemo } from 'react';\nimport { GridColumnVisibilityModel } from '@mui/x-data-grid-premium';\n\nimport { Field } from 'types/entityMetadata';\n\nimport DataView from '../DataView';\n\nimport { useDynamicColumns } from './hooks/useDynamicColumns';\nimport { addActionsFieldToMetadata } from './utils/addActionsField';\nimport { createCellRenderer } from './utils/createCellRenderer';\nimport { DynamicDataViewProps, DynamicRowData } from './props';\n\nfunction getColumnFieldIdFromField(field: Field): string {\n return field.name;\n}\n\nconst DynamicDataView = <T extends object = object>({\n title,\n metadata,\n data,\n isLoading,\n isFetching,\n page,\n perPage,\n searchValue,\n onSearchChange,\n onSearch,\n onPaginationChange,\n onAdd,\n onRowAction,\n onRowDoubleClick,\n actions,\n moreActions,\n hideHeader,\n slots,\n mobileRender,\n containerHeight = 600,\n showColumnButton = false,\n defaultVisibleFieldNames,\n preferredFieldOrder,\n columnStrategies,\n}: DynamicDataViewProps<T>) => {\n const { items: rows = [], total = 0 } = data || {};\n\n const effectiveMetadata = useMemo(\n () => (onRowAction ? addActionsFieldToMetadata(metadata) : metadata),\n [metadata, onRowAction],\n );\n\n const renderCell = useMemo(\n () =>\n createCellRenderer<T>({\n onRowAction,\n }),\n [onRowAction],\n );\n\n const columns = useDynamicColumns<T>({\n metadata: effectiveMetadata,\n renderCell,\n columnStrategies,\n });\n\n const columnsByFieldId = useMemo(\n () => new Map(columns.map(column => [column.field, column])),\n [columns],\n );\n\n const orderedColumns = useMemo(() => {\n if (\n !preferredFieldOrder ||\n preferredFieldOrder.length === 0 ||\n !effectiveMetadata?.fields\n ) {\n return columns;\n }\n\n const actionFieldName = 'ACTIONS';\n const preferredWithoutActions = preferredFieldOrder.filter(\n fieldName => fieldName !== actionFieldName,\n );\n\n const usedColumnFieldIds = new Set<string>();\n const ordered: Array<(typeof columns)[number]> = [];\n\n const pushColumnForField = (fieldName: string) => {\n const field = effectiveMetadata.fields.find(\n fieldItem => fieldItem.name === fieldName,\n );\n\n if (!field) {\n return;\n }\n\n const columnFieldId = getColumnFieldIdFromField(field);\n const column = columnsByFieldId.get(columnFieldId);\n\n if (!column || usedColumnFieldIds.has(columnFieldId)) {\n return;\n }\n\n ordered.push(column);\n usedColumnFieldIds.add(columnFieldId);\n };\n\n preferredWithoutActions.forEach(fieldName => {\n pushColumnForField(fieldName);\n });\n\n effectiveMetadata.fields.forEach(field => {\n if (field.name === actionFieldName) {\n return;\n }\n\n if (preferredWithoutActions.includes(field.name)) {\n return;\n }\n\n const columnFieldId = getColumnFieldIdFromField(field);\n const column = columnsByFieldId.get(columnFieldId);\n\n if (!column || usedColumnFieldIds.has(columnFieldId)) {\n return;\n }\n\n ordered.push(column);\n usedColumnFieldIds.add(columnFieldId);\n });\n\n pushColumnForField(actionFieldName);\n\n if (ordered.length === 0) {\n return columns;\n }\n\n return ordered;\n }, [columns, columnsByFieldId, effectiveMetadata, preferredFieldOrder]);\n\n const initialState = useMemo(() => {\n if (\n !defaultVisibleFieldNames ||\n defaultVisibleFieldNames.length === 0 ||\n !effectiveMetadata?.fields\n ) {\n return undefined;\n }\n\n const visibilityModel: GridColumnVisibilityModel = {};\n\n effectiveMetadata.fields.forEach(field => {\n const columnFieldId = getColumnFieldIdFromField(field);\n\n if (!columnsByFieldId.has(columnFieldId)) {\n return;\n }\n\n visibilityModel[columnFieldId] = defaultVisibleFieldNames.includes(\n field.name,\n );\n });\n\n return {\n columns: {\n columnVisibilityModel: visibilityModel,\n },\n };\n }, [columnsByFieldId, defaultVisibleFieldNames, effectiveMetadata]);\n\n const handleRowDoubleClick = useCallback(\n (params: { id: string | number; row: DynamicRowData<T> }) => {\n if (!onRowDoubleClick) return;\n\n const rowId = params.id?.toString() || '';\n onRowDoubleClick(rowId, params.row);\n },\n [onRowDoubleClick],\n );\n\n return (\n <DataView\n title={title}\n columns={orderedColumns}\n rows={rows}\n mobileRender={mobileRender || (() => null)}\n rowCount={total}\n loading={isLoading}\n fetching={isFetching}\n searchValue={searchValue}\n onSearch={onSearch}\n onSearchChange={onSearchChange}\n paginationModel={{\n page,\n pageSize: perPage,\n }}\n onPaginationChange={onPaginationChange}\n actions={actions}\n moreActions={moreActions}\n onAdd={onAdd}\n hideHeader={hideHeader}\n onRowDoubleClick={onRowDoubleClick ? handleRowDoubleClick : undefined}\n disableRowSelectionOnClick\n slots={slots}\n initialState={initialState}\n showColumnButton={showColumnButton}\n containerProps={{\n height: containerHeight,\n maxHeight: containerHeight,\n }}\n />\n );\n};\n\nexport default memo(DynamicDataView) as typeof DynamicDataView;\nexport type {\n DynamicDataViewProps,\n DynamicRowData,\n MobileRenderFunction,\n} from './props';\n","import { useMemo } from 'react';\nimport { GridColDef } from '@mui/x-data-grid-premium';\n\nimport { Columns } from 'types/datagrid';\nimport { EntityMetadataResponse } from 'types/entityMetadata';\n\nimport { ACCESS_TYPES } from '../constants/columnDefaults';\nimport { CellRenderer } from '../types/cellRenderer';\nimport { ColumnStrategy, getColumnStrategy } from '../utils/columnStrategies';\n\ninterface UseDynamicColumnsProps<T> {\n metadata?: EntityMetadataResponse;\n renderCell: CellRenderer<T>;\n columnStrategies?: {\n [fieldName: string]: ColumnStrategy<T>;\n };\n}\n\nexport const useDynamicColumns = <T extends object>({\n metadata,\n renderCell,\n columnStrategies,\n}: UseDynamicColumnsProps<T>): Columns => {\n return useMemo(() => {\n if (!metadata?.fields) return [];\n\n const columnsMap = new Map<string, GridColDef>();\n\n const visibleFields = metadata.fields.filter(field => {\n if (\n field.access_type === ACCESS_TYPES.READ_ONLY ||\n field.access_type === ACCESS_TYPES.READ_AND_WRITE\n ) {\n return true;\n }\n\n return (\n field.name === 'ACTIONS' ||\n field.name === metadata?.id_field_name ||\n field.name === 'NAME'\n );\n });\n\n visibleFields.forEach(field => {\n if (columnsMap.has(field.name)) {\n return;\n }\n\n const strategy =\n columnStrategies?.[field.name] ?? getColumnStrategy<T>(field, metadata);\n const column = strategy(field, renderCell, metadata);\n\n columnsMap.set(field.name, column);\n });\n\n return Array.from(columnsMap.values());\n }, [columnStrategies, metadata, renderCell]);\n};\n","export const COLUMN_DEFAULTS = {\n IMAGE_WIDTH: 90,\n MIN_WIDTH: 130,\n ID_MIN_WIDTH: 200,\n ENTITY_MIN_WIDTH: 160,\n HIGHLIGHT_MAX_WIDTH: 80,\n ACTIONS_WIDTH: 80,\n ID_FLEX: 2,\n ENTITY_FLEX: 1,\n} as const;\n\nexport const ACCESS_TYPES = {\n READ_ONLY: 'READ_ONLY',\n READ_AND_WRITE: 'READ_AND_WRITE',\n} as const;\n\nexport const CURRENCY_FIELD_NAMES: readonly string[] = [\n 'price',\n 'base_price',\n 'minimum_value',\n 'maximum_value',\n 'minimum_installment_value',\n];\n","import { GridColDef, GridRenderCellParams } from '@mui/x-data-grid-premium';\n\nimport { Field } from 'types/entityMetadata';\n\nimport { COLUMN_DEFAULTS } from '../constants/columnDefaults';\nimport { CellRenderer, DynamicRowData } from '../types/cellRenderer';\n\nexport type ColumnStrategy<T = object> = (\n field: Field,\n renderCell: CellRenderer<T>,\n metadata?: { id_field_name?: string },\n) => GridColDef;\n\nconst createImageColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n sortable: false,\n width: COLUMN_DEFAULTS.IMAGE_WIDTH,\n resizable: false,\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createIdColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n minWidth: COLUMN_DEFAULTS.ID_MIN_WIDTH,\n flex: COLUMN_DEFAULTS.ID_FLEX,\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createEntityColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n minWidth: COLUMN_DEFAULTS.ENTITY_MIN_WIDTH,\n flex: COLUMN_DEFAULTS.ENTITY_FLEX,\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createDefaultColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n minWidth: COLUMN_DEFAULTS.MIN_WIDTH,\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createActionsColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: 'Ações',\n width: COLUMN_DEFAULTS.ACTIONS_WIDTH,\n sortable: false,\n resizable: false,\n disableReorder: true,\n headerAlign: 'center',\n disableColumnMenu: true,\n align: 'center',\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nexport const getColumnStrategy = <T extends object>(\n field: Field,\n metadata?: { id_field_name?: string },\n): ColumnStrategy<T> => {\n if (field.name === metadata?.id_field_name || field.name === 'name') {\n return createIdColumn;\n }\n\n if (field.name === 'ACTIONS') {\n return createActionsColumn;\n }\n\n if (field.type === 'FILE') {\n return createImageColumn;\n }\n\n if (field.type === 'ENTITY') {\n return createEntityColumn;\n }\n\n return createDefaultColumn;\n};\n","import { EntityMetadataResponse, Field } from 'types/entityMetadata';\n\nexport const createActionsField = (): Field => ({\n name: 'ACTIONS',\n description: '',\n filter_field_name: null,\n type: 'TEXT',\n metadata: null,\n access_type: 'READ_ONLY',\n relation_field_name: null,\n available_filter_conditions: [],\n});\n\nexport const addActionsFieldToMetadata = (\n metadata: EntityMetadataResponse,\n): EntityMetadataResponse => {\n const hasActionsField = metadata.fields.some(\n field => field.name === 'ACTIONS',\n );\n\n if (hasActionsField) {\n return metadata;\n }\n\n return {\n ...metadata,\n fields: [...metadata.fields, createActionsField()],\n };\n};\n","import { memo, ReactNode } from 'react';\n\nimport Label from '../../Label';\n\nimport { BooleanRendererProps } from './props';\n\nconst BooleanRenderer = ({\n value,\n trueLabel = 'Ativo',\n falseLabel = 'Inativo',\n}: BooleanRendererProps): ReactNode => {\n return (\n <Label color={value ? 'success' : 'warning'}>\n {value ? trueLabel : falseLabel}\n </Label>\n );\n};\n\nexport default memo(BooleanRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport { DatePickerFormat, fDate } from 'utils/formatTime';\n\nexport interface DateRendererProps {\n value: unknown;\n format?: string;\n}\n\nconst DateRenderer = ({ value, format }: DateRendererProps): ReactNode => {\n if (value === null || value === undefined) return '-';\n\n return fDate(value as DatePickerFormat, format);\n};\n\nexport default memo(DateRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport { DatePickerFormat, fDateTime } from 'utils/formatTime';\n\nexport interface DateTimeRendererProps {\n value: unknown;\n format?: string;\n}\n\nconst DateTimeRenderer = ({\n value,\n format,\n}: DateTimeRendererProps): ReactNode => {\n if (value === null || value === undefined) return '-';\n\n return fDateTime(value as DatePickerFormat, format);\n};\n\nexport default memo(DateTimeRenderer);\n","import { memo, ReactNode } from 'react';\nimport Chip from '@mui/material/Chip';\n\nimport { EntityRendererProps } from './props';\n\nconst EntityRenderer = ({ value, field }: EntityRendererProps): ReactNode => {\n if (!field.metadata || typeof value !== 'object' || value === null) {\n return value ? String(value) : '-';\n }\n\n const entityValue = (value as Record<string, unknown>)[\n field.metadata.description_field_name\n ];\n\n if (!entityValue) return null;\n\n return (\n <Chip\n label={String(entityValue)}\n variant=\"outlined\"\n size=\"small\"\n sx={{\n width: 'fit-content',\n color: 'text.secondary',\n borderColor: 'divider',\n px: 1.5,\n }}\n />\n );\n};\n\nexport default memo(EntityRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport Icon, { IconEnum } from '../../Icon';\n\nimport { IconRendererProps } from './props';\n\nconst IconRenderer = ({\n value,\n trueIcon = IconEnum.STAR_02,\n falseIcon = IconEnum.STAR,\n color = 'primary.main',\n width = 18,\n}: IconRendererProps): ReactNode => {\n return (\n <Icon icon={value ? trueIcon : falseIcon} color={color} width={width} />\n );\n};\n\nexport default memo(IconRenderer);\n","import { memo, ReactNode } from 'react';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport CopyButton from 'components/CopyButton';\n\nimport { NameRendererProps } from './props';\n\nconst NameRenderer = ({\n id,\n displayName,\n copyMessage = 'ID copiado!',\n}: NameRendererProps): ReactNode => {\n return (\n <Stack height={1} justifyContent=\"center\">\n <Typography variant=\"subtitle2\" noWrap title={displayName}>\n {displayName}\n </Typography>\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Typography color=\"grey.600\" variant=\"body2\" noWrap>\n ID: {id}\n </Typography>\n <CopyButton toCopy={id} message={copyMessage} />\n </Stack>\n </Stack>\n );\n};\n\nexport default memo(NameRenderer);\n","import { memo, ReactNode } from 'react';\nimport Typography from '@mui/material/Typography';\n\nimport { fCurrencyBRL, fNumber } from 'utils/formatNumber';\n\nimport { NumberRendererProps } from './props';\n\nconst NumberRenderer = ({\n value,\n isCurrency = false,\n}: NumberRendererProps): ReactNode => {\n if (value === null || value === undefined) return '-';\n\n if (isCurrency) {\n return (\n <Typography variant=\"body2\" noWrap width=\"fit-content\">\n {fCurrencyBRL(Number(value))}\n </Typography>\n );\n }\n\n return (\n <Typography variant=\"body2\" noWrap width=\"fit-content\">\n {fNumber(Number(value))}\n </Typography>\n );\n};\n\nexport default memo(NumberRenderer);\n","import { memo, ReactNode } from 'react';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport CopyButton from 'components/CopyButton';\n\nimport { TextRendererProps } from './props';\n\nconst sanitizeHtml = (text: string): string => {\n const withoutTags = text.replace(/<[^>]*>/g, '');\n return withoutTags\n .replace(/ /g, ' ')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .trim();\n};\n\nconst TextRenderer = ({\n value,\n showCopyButton = false,\n copyMessage = 'Copiado',\n}: TextRendererProps): ReactNode => {\n if (!value) return '-';\n\n const stringValue = String(value);\n const sanitizedValue = sanitizeHtml(stringValue);\n\n if (showCopyButton) {\n return (\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Typography variant=\"body2\" noWrap>\n {sanitizedValue}\n </Typography>\n <CopyButton toCopy={sanitizedValue} message={copyMessage} />\n </Stack>\n );\n }\n\n return sanitizedValue;\n};\n\nexport default memo(TextRenderer);\n","import { ReactNode } from 'react';\n\nimport { Field } from 'types/entityMetadata';\n\nimport { CURRENCY_FIELD_NAMES } from '../constants/columnDefaults';\nimport { CellRenderer, DynamicRowData } from '../props';\nimport {\n BooleanRenderer,\n DateRenderer,\n DateTimeRenderer,\n EntityRenderer,\n NumberRenderer,\n TextRenderer,\n} from '../renderers';\n\nfunction getIsCurrency(fieldName: string): boolean {\n return CURRENCY_FIELD_NAMES.includes(fieldName);\n}\n\nexport const createCellRenderer = <T extends object = object>(context: {\n onRowAction?: (rowId: string, row: DynamicRowData<T>) => ReactNode;\n}): CellRenderer<T> => {\n const { onRowAction } = context;\n\n const CellRendererComponent = (\n field: Field,\n row: DynamicRowData<T>,\n ): ReactNode => {\n const value = row[field.name];\n\n if (field.name === 'ACTIONS') {\n return onRowAction?.(row.id, row);\n }\n\n switch (field.type) {\n case 'BOOLEAN':\n return <BooleanRenderer value={value} />;\n\n case 'DATE':\n return <DateRenderer value={value} />;\n\n case 'DATETIME':\n return <DateTimeRenderer value={value} />;\n\n case 'DECIMAL':\n case 'INTEGER':\n return (\n <NumberRenderer\n value={value}\n isCurrency={getIsCurrency(field.name)}\n />\n );\n\n case 'FILE':\n case 'ENTITY':\n return <EntityRenderer value={value} field={field} />;\n case 'TEXT':\n default:\n return <TextRenderer value={value} />;\n }\n };\n\n CellRendererComponent.displayName = 'CellRendererComponent';\n return CellRendererComponent;\n};\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export { p as ContentType, q as FileContentType, i as FileThumbnail, a as HelperText, b as MultiFilePreview, s as MultipleFileUpload, t as MultipleImageUpload, c as SingleFilePreview, u as SingleFileUpload, v as SingleImageUpload, w as UploadAvatar, x as UploadSimpleBox, l as compressImageWithoutCrop, k as convertToWebP, n as encodeFilenameForHeader, d as fileFormat, g as fileNameByUrl, e as fileThumb, h as fileThumbnailClasses, f as fileTypeByUrl, m as getFileNameFromContentDisposition, j as isImageFile, o as useDropzoneUploader, r as useFileUploadService } from '../../chunk-
|
|
1
|
+
export { p as ContentType, q as FileContentType, i as FileThumbnail, a as HelperText, b as MultiFilePreview, s as MultipleFileUpload, t as MultipleImageUpload, c as SingleFilePreview, u as SingleFileUpload, v as SingleImageUpload, w as UploadAvatar, x as UploadSimpleBox, l as compressImageWithoutCrop, k as convertToWebP, n as encodeFilenameForHeader, d as fileFormat, g as fileNameByUrl, e as fileThumb, h as fileThumbnailClasses, f as fileTypeByUrl, m as getFileNameFromContentDisposition, j as isImageFile, o as useDropzoneUploader, r as useFileUploadService } from '../../chunk-UNG4CL25.js';
|
|
2
2
|
import '../../chunk-DTIGB5NW.js';
|
|
3
3
|
import '../../chunk-ESUU2GHD.js';
|
|
4
4
|
import '../../chunk-TBUIZEOJ.js';
|
|
5
5
|
import '../../chunk-KGLU4CR2.js';
|
|
6
6
|
import '../../chunk-K5EVTJEW.js';
|
|
7
7
|
import '../../chunk-OF6623HG.js';
|
|
8
|
-
import '../../chunk-
|
|
8
|
+
import '../../chunk-RFYCSLP5.js';
|
|
9
9
|
import '../../chunk-33C6UWPV.js';
|
|
10
10
|
import '../../chunk-45OMMG7D.js';
|
|
11
11
|
import '../../chunk-6U5LS7MP.js';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import m from '@mui/material/Link';
|
|
2
2
|
import e from '@mui/material/Stack';
|
|
3
3
|
import o from '@mui/material/Typography';
|
|
4
4
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var s=({title:n,subTitle:i,actions:p,helpLink:t})=>jsxs(e,{direction:{xs:"column",sm:"row"},alignItems:{xs:"flex-start",sm:"center"},justifyContent:"space-between",gap:2,children:[jsxs(e,{maxWidth:"md",children:[jsx(o,{variant:"h4",children:n}),jsxs(o,{variant:"body2",color:"text.secondary",children:[i," ",t&&jsx(m,{variant:"subtitle2",href:t,target:"_blank",rel:"noopener noreferrer",sx:{whiteSpace:"nowrap"},children:"Saiba mais."})]})]}),jsx(e,{className:"page-header-actions",direction:"row",gap:3,alignItems:"center",minWidth:"max-content",children:p})]}),f=s;
|
|
7
7
|
|
|
8
8
|
export { f as default };
|
|
9
9
|
//# sourceMappingURL=out.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/PageHeader/index.tsx"],"names":["Link","Stack","Typography","jsx","jsxs","PageHeader","title","subTitle","actions","helpLink","PageHeader_default"],"mappings":"AAAA,OAAOA,MAAU,qBACjB,OAAOC,MAAW,sBAClB,OAAOC,MAAgB,2BAkBf,cAAAC,EACA,QAAAC,MADA,oBAdR,IAAMC,EAAa,CAAC,CAClB,MAAAC,EACA,SAAAC,EACA,QAAAC,EACA,SAAAC,CACF,IAEIL,EAACH,EAAA,CACC,UAAW,CAAE,GAAI,SAAU,GAAI,KAAM,EACrC,WAAY,CAAE,GAAI,aAAc,GAAI,QAAS,EAC7C,eAAe,gBACf,IAAK,EAEL,UAAAG,EAACH,EAAA,
|
|
1
|
+
{"version":3,"sources":["../../../src/components/PageHeader/index.tsx"],"names":["Link","Stack","Typography","jsx","jsxs","PageHeader","title","subTitle","actions","helpLink","PageHeader_default"],"mappings":"AAAA,OAAOA,MAAU,qBACjB,OAAOC,MAAW,sBAClB,OAAOC,MAAgB,2BAkBf,cAAAC,EACA,QAAAC,MADA,oBAdR,IAAMC,EAAa,CAAC,CAClB,MAAAC,EACA,SAAAC,EACA,QAAAC,EACA,SAAAC,CACF,IAEIL,EAACH,EAAA,CACC,UAAW,CAAE,GAAI,SAAU,GAAI,KAAM,EACrC,WAAY,CAAE,GAAI,aAAc,GAAI,QAAS,EAC7C,eAAe,gBACf,IAAK,EAEL,UAAAG,EAACH,EAAA,CAAM,SAAS,KACd,UAAAE,EAACD,EAAA,CAAW,QAAQ,KAAM,SAAAI,EAAM,EAChCF,EAACF,EAAA,CAAW,QAAQ,QAAQ,MAAM,iBAC/B,UAAAK,EAAU,IACVE,GACCN,EAACH,EAAA,CACC,QAAQ,YACR,KAAMS,EACN,OAAO,SACP,IAAI,sBACJ,GAAI,CAAE,WAAY,QAAS,EAC5B,uBAED,GAEJ,GACF,EAEAN,EAACF,EAAA,CACC,UAAU,sBACV,UAAU,MACV,IAAK,EACL,WAAW,SACX,SAAS,cAER,SAAAO,EACH,GACF,EAIGE,EAAQL","sourcesContent":["import Link from '@mui/material/Link';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport { PageHeaderProps } from './props';\n\nconst PageHeader = ({\n title,\n subTitle,\n actions,\n helpLink,\n}: PageHeaderProps) => {\n return (\n <Stack\n direction={{ xs: 'column', sm: 'row' }}\n alignItems={{ xs: 'flex-start', sm: 'center' }}\n justifyContent=\"space-between\"\n gap={2}\n >\n <Stack maxWidth=\"md\">\n <Typography variant=\"h4\">{title}</Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {subTitle}{' '}\n {helpLink && (\n <Link\n variant=\"subtitle2\"\n href={helpLink}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n sx={{ whiteSpace: 'nowrap' }}\n >\n Saiba mais.\n </Link>\n )}\n </Typography>\n </Stack>\n\n <Stack\n className=\"page-header-actions\"\n direction=\"row\"\n gap={3}\n alignItems=\"center\"\n minWidth=\"max-content\"\n >\n {actions}\n </Stack>\n </Stack>\n );\n};\n\nexport default PageHeader;\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { v, s, t, u } from '../../../chunk-
|
|
1
|
+
import { v, s, t, u } from '../../../chunk-UNG4CL25.js';
|
|
2
2
|
import '../../../chunk-DTIGB5NW.js';
|
|
3
3
|
import '../../../chunk-ESUU2GHD.js';
|
|
4
4
|
import '../../../chunk-TBUIZEOJ.js';
|
|
5
5
|
import '../../../chunk-KGLU4CR2.js';
|
|
6
6
|
import '../../../chunk-K5EVTJEW.js';
|
|
7
7
|
import '../../../chunk-OF6623HG.js';
|
|
8
|
-
import '../../../chunk-
|
|
8
|
+
import '../../../chunk-RFYCSLP5.js';
|
|
9
9
|
import '../../../chunk-33C6UWPV.js';
|
|
10
10
|
import '../../../chunk-45OMMG7D.js';
|
|
11
11
|
import '../../../chunk-6U5LS7MP.js';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { e } from '../../../chunk-
|
|
1
|
+
import { e } from '../../../chunk-GPWECRTP.js';
|
|
2
2
|
import '../../../chunk-SA2BESEB.js';
|
|
3
3
|
import '../../../chunk-QN4YPUG7.js';
|
|
4
4
|
import '../../../chunk-DTIGB5NW.js';
|
|
5
5
|
import '../../../chunk-TBUIZEOJ.js';
|
|
6
6
|
import '../../../chunk-ESFOFEVL.js';
|
|
7
7
|
import '../../../chunk-OF6623HG.js';
|
|
8
|
-
import '../../../chunk-
|
|
8
|
+
import '../../../chunk-RFYCSLP5.js';
|
|
9
9
|
import '../../../chunk-33C6UWPV.js';
|
|
10
10
|
import '../../../chunk-6U5LS7MP.js';
|
|
11
11
|
import '../../../chunk-GC7GAEFE.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { a as UploadAvatar, b as UploadAvatarWithCrop } from '../../chunk-AQV2PEBQ.js';
|
|
2
|
-
export { c as DeleteButton, a as MultiFilePreview, b as SingleFilePreview, d as Upload, e as UploadWithCrop } from '../../chunk-
|
|
2
|
+
export { c as DeleteButton, a as MultiFilePreview, b as SingleFilePreview, d as Upload, e as UploadWithCrop } from '../../chunk-GPWECRTP.js';
|
|
3
3
|
import { o } from '../../chunk-SA2BESEB.js';
|
|
4
4
|
export { p as RejectionFiles } from '../../chunk-SA2BESEB.js';
|
|
5
5
|
import '../../chunk-QN4YPUG7.js';
|
|
@@ -7,7 +7,7 @@ import '../../chunk-DTIGB5NW.js';
|
|
|
7
7
|
import '../../chunk-TBUIZEOJ.js';
|
|
8
8
|
import '../../chunk-ESFOFEVL.js';
|
|
9
9
|
import '../../chunk-OF6623HG.js';
|
|
10
|
-
import '../../chunk-
|
|
10
|
+
import '../../chunk-RFYCSLP5.js';
|
|
11
11
|
import '../../chunk-33C6UWPV.js';
|
|
12
12
|
import '../../chunk-6U5LS7MP.js';
|
|
13
13
|
import '../../chunk-GC7GAEFE.js';
|
package/package.json
CHANGED
package/dist/chunk-KFHRIKEC.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { a as a$1 } from './chunk-GC7GAEFE.js';
|
|
2
|
-
import c from '@mui/material/IconButton';
|
|
3
|
-
import s from '@mui/material/Stack';
|
|
4
|
-
import { styled } from '@mui/material/styles';
|
|
5
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
|
-
|
|
7
|
-
var a=styled(c)(({theme:t})=>({position:"absolute",top:0,left:-2,zIndex:1,color:t.palette.grey[500],padding:"22px 5px",userSelect:"none",WebkitUserSelect:"none",WebkitTouchCallout:"none",cursor:"grab","&:active":{cursor:"grabbing"},"@media (pointer:coarse)":{userSelect:"none",WebkitUserSelect:"none",MozUserSelect:"none",msUserSelect:"none",WebkitTouchCallout:"none",WebkitTapHighlightColor:"transparent",touchAction:"none","&:active":{pointerEvents:"none"}}})),i=styled(s)({flexDirection:"row",alignItems:"center",justifyContent:"center",width:16,height:16,overflow:"hidden",transform:"scale(0.8)"});var u=({disableDrag:t,...l})=>t?null:jsx(a,{className:"dragIcon",disableRipple:!0,"aria-label":"Arrastar para ordenar",onTouchStart:e=>e.preventDefault(),onTouchMove:e=>e.preventDefault(),...l,children:jsxs(i,{children:[jsx(a$1,{sx:{marginLeft:0},icon:"MORE_BOLD",width:16}),jsx(a$1,{sx:{marginLeft:"-10px"},icon:"MORE_BOLD",width:16})]})}),D=u;
|
|
8
|
-
|
|
9
|
-
export { D as a };
|
|
10
|
-
//# sourceMappingURL=out.js.map
|
|
11
|
-
//# sourceMappingURL=chunk-KFHRIKEC.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/DragButton/styles.ts","../src/components/DragButton/index.tsx"],"names":["IconButton","Stack","styled","DragButtonStyled","theme","DragButtonInternal","jsx","jsxs","DragButton","disableDrag","props","Icon_default","DragButton_default"],"mappings":"wCAAA,OAAOA,MAAgB,2BACvB,OAAOC,MAAW,sBAClB,OAAS,UAAAC,MAAc,uBAEhB,IAAMC,EAAmBD,EAAOF,CAAU,EAAE,CAAC,CAAE,MAAAI,CAAM,KAAO,CACjE,SAAU,WACV,IAAK,EACL,KAAM,GACN,OAAQ,EACR,MAAOA,EAAM,QAAQ,KAAK,GAAG,EAC7B,QAAS,WACT,WAAY,OACZ,iBAAkB,OAClB,mBAAoB,OACpB,OAAQ,OACR,WAAY,CACV,OAAQ,UACV,EAEA,0BAA2B,CACzB,WAAY,OACZ,iBAAkB,OAClB,cAAe,OACf,aAAc,OACd,mBAAoB,OACpB,wBAAyB,cACzB,YAAa,OACb,WAAY,CACV,cAAe,MACjB,CACF,CACF,EAAE,EAEWC,EAAqBH,EAAOD,CAAK,EAAE,CAC9C,cAAe,MACf,WAAY,SACZ,eAAgB,SAChB,MAAO,GACP,OAAQ,GACR,SAAU,SACV,UAAW,YACb,CAAC,ECpBK,OACE,OAAAK,EADF,QAAAC,MAAA,oBAfN,IAAMC,EAAa,CAAC,CAClB,YAAAC,EACA,GAAGC,CACL,IACMD,EAAoB,KAGtBH,EAACH,EAAA,CACC,UAAU,WACV,cAAa,GACb,aAAW,wBACX,aAAc,GAAK,EAAE,eAAe,EACpC,YAAa,GAAK,EAAE,eAAe,EAClC,GAAGO,EAEJ,SAAAH,EAACF,EAAA,CACC,UAAAC,EAACK,EAAA,CAAK,GAAI,CAAE,WAAY,CAAE,EAAG,KAAK,YAAY,MAAO,GAAI,EACzDL,EAACK,EAAA,CAAK,GAAI,CAAE,WAAY,OAAQ,EAAG,KAAK,YAAY,MAAO,GAAI,GACjE,EACF,EAIGC,EAAQJ","sourcesContent":["import IconButton from '@mui/material/IconButton';\nimport Stack from '@mui/material/Stack';\nimport { styled } from '@mui/material/styles';\n\nexport const DragButtonStyled = styled(IconButton)(({ theme }) => ({\n position: 'absolute',\n top: 0,\n left: -2,\n zIndex: 1,\n color: theme.palette.grey[500],\n padding: '22px 5px',\n userSelect: 'none',\n WebkitUserSelect: 'none',\n WebkitTouchCallout: 'none',\n cursor: 'grab',\n '&:active': {\n cursor: 'grabbing',\n },\n\n '@media (pointer:coarse)': {\n userSelect: 'none',\n WebkitUserSelect: 'none',\n MozUserSelect: 'none',\n msUserSelect: 'none',\n WebkitTouchCallout: 'none',\n WebkitTapHighlightColor: 'transparent',\n touchAction: 'none',\n '&:active': {\n pointerEvents: 'none',\n },\n },\n}));\n\nexport const DragButtonInternal = styled(Stack)({\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n width: 16,\n height: 16,\n overflow: 'hidden',\n transform: 'scale(0.8)',\n});\n","import { IconButtonProps } from '@mui/material/IconButton';\n\nimport Icon from 'components/Icon';\n\nimport { DragButtonInternal, DragButtonStyled } from './styles';\n\nconst DragButton = ({\n disableDrag,\n ...props\n}: IconButtonProps & { disableDrag?: boolean }) => {\n if (disableDrag) return null;\n\n return (\n <DragButtonStyled\n className=\"dragIcon\"\n disableRipple\n aria-label=\"Arrastar para ordenar\"\n onTouchStart={e => e.preventDefault()}\n onTouchMove={e => e.preventDefault()}\n {...props}\n >\n <DragButtonInternal>\n <Icon sx={{ marginLeft: 0 }} icon=\"MORE_BOLD\" width={16} />\n <Icon sx={{ marginLeft: '-10px' }} icon=\"MORE_BOLD\" width={16} />\n </DragButtonInternal>\n </DragButtonStyled>\n );\n};\n\nexport default DragButton;\n"]}
|
|
File without changes
|
|
File without changes
|