@zydon/common 2.8.24 → 2.8.25

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.
@@ -0,0 +1,26 @@
1
+ import { a as a$4 } from './chunk-MC44LVZD.js';
2
+ import { a as a$5 } from './chunk-IJZCVZ32.js';
3
+ import { a as a$8 } from './chunk-IDFJFFIV.js';
4
+ import { a as a$6 } from './chunk-6U5LS7MP.js';
5
+ import { i, j, a as a$2, b as b$1, c, d, f, e, g, h } from './chunk-2W54CJ6E.js';
6
+ import { a as a$9 } from './chunk-I4PPSW36.js';
7
+ import { a as a$3 } from './chunk-CO2KQFUN.js';
8
+ import { a } from './chunk-ET6H3IRG.js';
9
+ import { a as a$7 } from './chunk-F65ZXAGV.js';
10
+ import { a as a$1 } from './chunk-LQRRMVFN.js';
11
+ import { b } from './chunk-RPO7AI5K.js';
12
+ import { memo, forwardRef, useState, useCallback, useMemo, Children, isValidElement, cloneElement } from 'react';
13
+ import Fo from 'react-fast-compare';
14
+ import G from '@mui/material/Button';
15
+ import _o from '@mui/material/CircularProgress';
16
+ import Wo from '@mui/material/Divider';
17
+ import D from '@mui/material/Stack';
18
+ import io from '@mui/material/Typography';
19
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
20
+ import { GridToolbarColumnsButton } from '@mui/x-data-grid-premium';
21
+
22
+ var w="datagrid-actions";var Ao=({rowCount:r,page:t,rowsPerPage:e,onPaginationChange:a})=>jsxs(i,{children:[jsxs(D,{direction:"row",alignItems:"center",gap:.5,children:[jsx(io,{variant:"body2",color:"text.disabled",children:"Total de itens:"}),jsx(io,{variant:"body2",children:r})]}),jsx(j,{count:r,page:t,rowsPerPage:e,onPageChange:i=>a(i,e),onRowsPerPageChange:i=>a(t,i)})]}),lo=memo(Ao);var po=(r,t)=>Children.map(r,e=>{if(!isValidElement(e))return e;let a=e.props.onClick,i={};i.onClick=(...T)=>{t(),a&&a(...T);};let s=e.props;return s?.children&&(i.children=po(s.children,t)),cloneElement(e,i)}),Mo=({children:r,onClose:t})=>r?po(r,t):null,co=memo(Mo);var Oo=forwardRef(({children:r,...t},e)=>jsx(G,{...t,ref:e,color:"inherit",startIcon:jsx(a,{icon:"COLUMNS"}),children:r??"Colunas"}));Oo.displayName="ColumnsButton";var No=({setFilterButtonEl:r})=>{let t=useCallback(e=>{r(e);},[r]);return jsx(a$9,{container:w,children:jsx(GridToolbarColumnsButton,{ref:t,slotProps:{button:{color:"inherit",startIcon:jsx(a,{icon:"COLUMNS"}),children:"Colunas"}}})})},mo=No;var Uo=({title:r,header:t,headerProps:e$1,breakpoint:a$9="md",columns:i,rows:s=[],mobileRender:T,rowCount:A=0,paginationModel:l={page:0,pageSize:25},onPaginationChange:u,actions:B,moreActions:O,onAdd:N,onSearch:H,searchValue:uo,onSearchChange:ho,slots:h$1,slotProps:go,loading:g$1,fetching:L,containerProps:Co={height:562,maxHeight:562},hideFooter:V,showColumnButton:y=!1,filterButton:C,activeFilters:z,...Po})=>{let d$1=a$1(),p=b("down",a$9),[ko,So]=useState(null),F=!!H,R=!!N,k=!!B,v=!!O,I=p&&v,S=!p&&v,bo=k||R||I,_=S||F||y||!!C||!p,W=useCallback(()=>u?jsx(lo,{rowCount:A,page:l.page,rowsPerPage:l.pageSize,onPaginationChange:u}):null,[A,l,u]),wo=useMemo(()=>({...h$1,footer:W,...y&&!h$1?.toolbar&&{toolbar:mo}}),[h$1,W,y]);return jsxs(a$2,{breakpoint:a$9,...Co,flex:g$1?1:void 0,minHeight:g$1||s.length===0?562:void 0,children:[t?jsx(D,{p:3,...e$1,children:t}):jsxs(Fragment,{children:[jsxs(b$1,{breakpoint:a$9,children:[jsx(io,{variant:"overline",color:"text.secondary",noWrap:!0,children:r}),bo&&jsxs(c,{breakpoint:a$9,children:[k&&B,R&&jsxs(Fragment,{children:[k&&jsx(d,{orientation:"vertical",flexItem:!0}),jsx(G,{startIcon:jsx(a,{icon:"SIMPLE_ADD"}),variant:"contained",onClick:N,children:"Adicionar"})]}),I&&jsxs(Fragment,{children:[(k||R)&&jsx(d,{orientation:"vertical",flexItem:!0}),jsx(G,{color:"inherit",startIcon:jsx(a,{icon:"MORE_BOLD"}),size:"small",onClick:d$1.onOpen,children:"Mais"})]})]})]}),_&&jsxs(f,{breakpoint:a$9,children:[jsxs(D,{flex:1,direction:"row",alignItems:"center",id:w,gap:.5,children:[v&&jsxs(Fragment,{children:[S&&jsxs(Fragment,{children:[jsx(G,{color:"inherit",startIcon:jsx(a,{icon:"MORE_BOLD"}),size:"small",onClick:d$1.onOpen,children:"Mais"}),!p&&jsx(e,{orientation:"vertical",flexItem:!0})]}),(S||I)&&jsx(a$3,{open:d$1.open,anchorEl:d$1.open,onClose:d$1.onClose,sx:{minWidth:160},disabledArrow:!0,children:jsx(co,{onClose:d$1.onClose,children:O})})]}),!p&&C&&jsxs(Fragment,{children:[C,S&&jsx(e,{orientation:"vertical",flexItem:!0})]})]}),F&&jsxs(g,{breakpoint:a$9,children:[jsx(a$4,{value:uo,placeholder:"Buscar",onSearch:H,onChange:c=>ho?.(c.target.value),size:"small",fullWidth:!0,iconPosition:"start"}),p&&C&&jsx(D,{ml:1,children:C})]})]}),z&&z,!_&&jsx(Wo,{sx:{mt:2}})]}),p?jsxs(a$5,{isFetching:L,fetching:jsx(a$6,{}),isLoading:g$1,loading:jsx(_o,{sx:{m:"160px auto"}}),isEmpty:s.length===0,empty:jsx(D,{flex:1,alignItems:"center",justifyContent:"center",children:h$1?.noRowsOverlay?jsx(h$1.noRowsOverlay,{}):jsx(io,{variant:"body2",color:"text.secondary",children:"Nenhum registro encontrado"})}),children:[jsx(a$7,{fillContent:!0,children:s.map(c=>T(c))}),!V&&jsx(h,{children:jsx(j,{count:A,page:l.page,rowsPerPage:l.pageSize,onPageChange:c=>u?.(c,l.pageSize),onRowsPerPageChange:c=>u?.(l.page,c)})})]}):jsx(a$8,{columns:i,rows:s,slots:wo,slotProps:{panel:{anchorEl:ko},toolbar:{setFilterButtonEl:So,showQuickFilter:!0},...go},columnHeaderHeight:48,getRowHeight:()=>68,loading:g$1,fetching:L,hideFooter:V,...Po})]},g$1?"loading":"data")},Br=memo(Uo,Fo);
23
+
24
+ export { lo as a, co as b, mo as c, Br as d };
25
+ //# sourceMappingURL=out.js.map
26
+ //# sourceMappingURL=chunk-TDWOIWUU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/DataView/index.tsx","../src/components/DataView/contants.ts","../src/components/DataView/DesktopFooter.tsx","../src/components/DataView/EnhancedMoreActions.tsx","../src/components/DataView/Toolbar.tsx"],"names":["memo","useCallback","useMemo","useState","isEqual","Button","CircularProgress","Divider","Stack","Typography","DATAGRID_ACTIONS","jsx","jsxs","DesktopFooter","rowCount","page","rowsPerPage","onPaginationChange","DesktopPaginationContainer","Pagination_default","newPage","newRowsPerPage","DesktopFooter_default","Children","cloneElement","isValidElement","createEnhanceMoreActions","children","onClose","child","originalOnClick","enhancedProps","args","childProps","EnhancedMoreActions","EnhancedMoreActions_default","forwardRef","GridToolbarColumnsButton","ColumnsButton","props","ref","Icon_default","Toolbar","setFilterButtonEl","handleColumnsButtonRef","button","Portal_default","Toolbar_default","Fragment","DataViewComponent","title","header","headerProps","breakpoint","columns","rows","mobileRender","paginationModel","actions","moreActions","onAdd","onSearch","searchValue","onSearchChange","slots","slotProps","loading","fetching","containerProps","hideFooter","showColumnButton","filterButton","activeFilters","others","popover","usePopover_default","isMobile","useResponsive_default","filterButtonEl","showSearch","showAdd","showActions","showMoreActions","showHeaderMoreActions","showTopbarMoreActions","showActionsContainer","showTopbar","FooterComponent","dataGridSlots","Container","Header","ActionsContainer","ActionsDivider","Topbar","ToolbarActionsDivider","MenuPopover_default","SearchContainer","SearchInput_default","e","Result_default","FixedProgressBar_default","Scrollbar_default","row","MobilePaginationContainer","DataGrid_default","DataView_default"],"mappings":"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","sourcesContent":["import { memo, useCallback, useMemo, useState } from 'react';\nimport isEqual from 'react-fast-compare';\nimport Button from '@mui/material/Button';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport {\n GridSlotsComponentsProps,\n GridValidRowModel,\n} from '@mui/x-data-grid-premium';\n\nimport DataGrid from 'components/DataGrid';\nimport FixedProgressBar from 'components/FixedProgressBar';\nimport Icon from 'components/Icon';\nimport MenuPopover from 'components/MenuPopover';\nimport Result from 'components/Result';\nimport Scrollbar from 'components/Scrollbar';\nimport SearchInput from 'components/SearchInput';\nimport usePopover from 'hooks/usePopover';\nimport useResponsive from 'hooks/useResponsive';\n\nimport { DATAGRID_ACTIONS } from './contants';\nimport DesktopFooter from './DesktopFooter';\nimport EnhancedMoreActions from './EnhancedMoreActions';\nimport Pagination from './Pagination';\nimport { DataGridSlotsProps, DataViewProps } from './props';\nimport {\n ActionsContainer,\n ActionsDivider,\n Container,\n Header,\n MobilePaginationContainer,\n SearchContainer,\n ToolbarActionsDivider,\n Topbar,\n} from './styles';\nimport Toolbar from './Toolbar';\n\nconst DataViewComponent = <T extends GridValidRowModel = GridValidRowModel>({\n title,\n header,\n headerProps,\n breakpoint = 'md',\n columns,\n rows = [],\n mobileRender,\n rowCount = 0,\n paginationModel = { page: 0, pageSize: 25 },\n onPaginationChange,\n actions,\n moreActions,\n onAdd,\n onSearch,\n searchValue,\n onSearchChange,\n slots,\n slotProps,\n loading,\n fetching,\n containerProps = { height: 562, maxHeight: 562 },\n hideFooter,\n showColumnButton = false,\n filterButton,\n activeFilters,\n ...others\n}: DataViewProps<T>) => {\n const popover = usePopover();\n const isMobile = useResponsive('down', breakpoint);\n const [filterButtonEl, setFilterButtonEl] =\n useState<HTMLButtonElement | null>(null);\n\n const showSearch = !!onSearch;\n const showAdd = !!onAdd;\n const showActions = !!actions;\n const showMoreActions = !!moreActions;\n const showHeaderMoreActions = isMobile && showMoreActions;\n const showTopbarMoreActions = !isMobile && showMoreActions;\n const showActionsContainer = showActions || showAdd || showHeaderMoreActions;\n const showTopbar =\n showTopbarMoreActions ||\n showSearch ||\n showColumnButton ||\n !!filterButton ||\n !isMobile;\n\n const FooterComponent = useCallback(\n () =>\n onPaginationChange ? (\n <DesktopFooter\n rowCount={rowCount}\n page={paginationModel.page}\n rowsPerPage={paginationModel.pageSize}\n onPaginationChange={onPaginationChange}\n />\n ) : null,\n [rowCount, paginationModel, onPaginationChange],\n );\n\n const dataGridSlots: DataGridSlotsProps = useMemo(\n () => ({\n ...slots,\n footer: FooterComponent as unknown as DataGridSlotsProps['footer'],\n ...(showColumnButton &&\n !slots?.toolbar && {\n toolbar: Toolbar as unknown as DataGridSlotsProps['toolbar'],\n }),\n }),\n [slots, FooterComponent, showColumnButton],\n );\n\n return (\n <Container\n key={loading ? 'loading' : 'data'}\n breakpoint={breakpoint}\n {...containerProps}\n flex={loading ? 1 : undefined}\n minHeight={loading || rows.length === 0 ? 562 : undefined}\n >\n {header ? (\n <Stack p={3} {...headerProps}>\n {header}\n </Stack>\n ) : (\n <>\n <Header breakpoint={breakpoint}>\n <Typography variant=\"overline\" color=\"text.secondary\" noWrap>\n {title}\n </Typography>\n\n {showActionsContainer && (\n <ActionsContainer breakpoint={breakpoint}>\n {showActions && actions}\n\n {showAdd && (\n <>\n {showActions && (\n <ActionsDivider orientation=\"vertical\" flexItem />\n )}\n\n <Button\n startIcon={<Icon icon=\"SIMPLE_ADD\" />}\n variant=\"contained\"\n onClick={onAdd}\n >\n Adicionar\n </Button>\n </>\n )}\n\n {showHeaderMoreActions && (\n <>\n {(showActions || showAdd) && (\n <ActionsDivider orientation=\"vertical\" flexItem />\n )}\n\n <Button\n color=\"inherit\"\n startIcon={<Icon icon=\"MORE_BOLD\" />}\n size=\"small\"\n onClick={popover.onOpen}\n >\n Mais\n </Button>\n </>\n )}\n </ActionsContainer>\n )}\n </Header>\n\n {showTopbar && (\n <Topbar breakpoint={breakpoint}>\n <Stack\n flex={1}\n direction=\"row\"\n alignItems=\"center\"\n id={DATAGRID_ACTIONS}\n gap={0.5}\n >\n {showMoreActions && (\n <>\n {showTopbarMoreActions && (\n <>\n <Button\n color=\"inherit\"\n startIcon={<Icon icon=\"MORE_BOLD\" />}\n size=\"small\"\n onClick={popover.onOpen}\n >\n Mais\n </Button>\n\n {!isMobile && (\n <ToolbarActionsDivider\n orientation=\"vertical\"\n flexItem\n />\n )}\n </>\n )}\n\n {(showTopbarMoreActions || showHeaderMoreActions) && (\n <MenuPopover\n open={popover.open}\n anchorEl={popover.open}\n onClose={popover.onClose}\n sx={{\n minWidth: 160,\n }}\n disabledArrow={true}\n >\n <EnhancedMoreActions onClose={popover.onClose}>\n {moreActions}\n </EnhancedMoreActions>\n </MenuPopover>\n )}\n </>\n )}\n\n {!isMobile && filterButton && (\n <>\n {filterButton}\n\n {showTopbarMoreActions && (\n <ToolbarActionsDivider orientation=\"vertical\" flexItem />\n )}\n </>\n )}\n </Stack>\n\n {showSearch && (\n <SearchContainer breakpoint={breakpoint}>\n <SearchInput\n value={searchValue}\n placeholder=\"Buscar\"\n onSearch={onSearch}\n onChange={e => onSearchChange?.(e.target.value)}\n size=\"small\"\n fullWidth\n iconPosition=\"start\"\n />\n {isMobile && filterButton && (\n <Stack ml={1}>{filterButton}</Stack>\n )}\n </SearchContainer>\n )}\n </Topbar>\n )}\n\n {activeFilters && activeFilters}\n\n {!showTopbar && <Divider sx={{ mt: 2 }} />}\n </>\n )}\n\n {isMobile ? (\n <Result\n isFetching={fetching}\n fetching={<FixedProgressBar />}\n isLoading={loading}\n loading={<CircularProgress sx={{ m: '160px auto' }} />}\n isEmpty={rows.length === 0}\n empty={\n <Stack flex={1} alignItems=\"center\" justifyContent=\"center\">\n {slots?.noRowsOverlay ? (\n <slots.noRowsOverlay />\n ) : (\n <Typography variant=\"body2\" color=\"text.secondary\">\n Nenhum registro encontrado\n </Typography>\n )}\n </Stack>\n }\n >\n <Scrollbar fillContent>\n {rows.map(row => mobileRender(row))}\n </Scrollbar>\n\n {!hideFooter && (\n <MobilePaginationContainer>\n <Pagination\n count={rowCount}\n page={paginationModel.page}\n rowsPerPage={paginationModel.pageSize}\n onPageChange={newPage =>\n onPaginationChange?.(newPage, paginationModel.pageSize)\n }\n onRowsPerPageChange={newRowsPerPage =>\n onPaginationChange?.(paginationModel.page, newRowsPerPage)\n }\n />\n </MobilePaginationContainer>\n )}\n </Result>\n ) : (\n <DataGrid\n columns={columns}\n rows={rows}\n slots={dataGridSlots}\n slotProps={{\n panel: { anchorEl: filterButtonEl },\n toolbar: {\n setFilterButtonEl,\n showQuickFilter: true,\n } as unknown as GridSlotsComponentsProps['toolbar'],\n ...slotProps,\n }}\n columnHeaderHeight={48}\n getRowHeight={() => 68}\n loading={loading}\n fetching={fetching}\n hideFooter={hideFooter}\n {...others}\n />\n )}\n </Container>\n );\n};\n\nexport default memo(DataViewComponent, isEqual) as typeof DataViewComponent;\nexport {\n ActionsContainer,\n ActionsDivider,\n Container,\n DesktopFooter,\n EnhancedMoreActions,\n Header,\n MobilePaginationContainer,\n SearchContainer,\n Toolbar,\n ToolbarActionsDivider,\n Topbar,\n};\n","export const DATAGRID_ACTIONS = 'datagrid-actions';\n","import { memo } from 'react';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport Pagination from './Pagination';\nimport { DesktopFooterProps } from './props';\nimport { DesktopPaginationContainer } from './styles';\n\nconst DesktopFooter = ({\n rowCount,\n page,\n rowsPerPage,\n onPaginationChange,\n}: DesktopFooterProps) => {\n return (\n <DesktopPaginationContainer>\n <Stack direction=\"row\" alignItems=\"center\" gap={0.5}>\n <Typography variant=\"body2\" color=\"text.disabled\">\n Total de itens:\n </Typography>\n <Typography variant=\"body2\">{rowCount}</Typography>\n </Stack>\n\n <Pagination\n count={rowCount}\n page={page}\n rowsPerPage={rowsPerPage}\n onPageChange={newPage => onPaginationChange(newPage, rowsPerPage)}\n onRowsPerPageChange={newRowsPerPage =>\n onPaginationChange(page, newRowsPerPage)\n }\n />\n </DesktopPaginationContainer>\n );\n};\n\nexport default memo(DesktopFooter);\n","import {\n Children,\n cloneElement,\n isValidElement,\n memo,\n ReactElement,\n ReactNode,\n} from 'react';\n\nimport { EnhancedMoreActionsProps } from './props';\n\nconst createEnhanceMoreActions = (\n children: ReactNode,\n onClose: () => void,\n): ReactNode => {\n return Children.map(children, child => {\n if (!isValidElement(child)) {\n return child;\n }\n\n const originalOnClick = (\n child.props as { onClick?: (...args: unknown[]) => void }\n ).onClick;\n\n const enhancedProps: {\n onClick?: (...args: unknown[]) => void;\n children?: ReactNode;\n } = {};\n\n enhancedProps.onClick = (...args: unknown[]) => {\n onClose();\n if (originalOnClick) {\n originalOnClick(...args);\n }\n };\n\n const childProps = child.props as { children?: ReactNode };\n if (childProps?.children) {\n enhancedProps.children = createEnhanceMoreActions(\n childProps.children,\n onClose,\n );\n }\n\n return cloneElement(child as ReactElement, enhancedProps);\n });\n};\n\nconst EnhancedMoreActions = ({\n children,\n onClose,\n}: EnhancedMoreActionsProps) => {\n if (!children) return null;\n return createEnhanceMoreActions(children, onClose);\n};\n\nexport default memo(EnhancedMoreActions);\n","import { forwardRef, useCallback } from 'react';\nimport Button, { ButtonProps } from '@mui/material/Button';\nimport { GridToolbarColumnsButton } from '@mui/x-data-grid-premium';\n\nimport Icon from 'components/Icon';\nimport Portal from 'components/Portal';\n\nimport { DATAGRID_ACTIONS } from './contants';\nimport { ToolbarProps } from './props';\n\nconst ColumnsButton = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ children, ...props }, ref) => (\n <Button\n {...props}\n ref={ref}\n color=\"inherit\"\n startIcon={<Icon icon=\"COLUMNS\" />}\n >\n {children ?? 'Colunas'}\n </Button>\n ),\n);\n\nColumnsButton.displayName = 'ColumnsButton';\n\nconst Toolbar = ({ setFilterButtonEl }: ToolbarProps) => {\n const handleColumnsButtonRef = useCallback(\n (button: HTMLButtonElement | null) => {\n setFilterButtonEl(button);\n },\n [setFilterButtonEl],\n );\n\n return (\n <Portal container={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 Toolbar;\n"]}
@@ -16,9 +16,10 @@ import { P as PanelProps } from '../../props-a62a2c29.js';
16
16
  interface DataViewProps<T = unknown> extends DataGridProps {
17
17
  containerProps?: StackProps;
18
18
  title: string;
19
- headerContent?: ReactNode;
19
+ header?: ReactNode;
20
+ headerProps?: StackProps;
20
21
  breakpoint?: Breakpoint | number;
21
- onPaginationChange: (page: number, rowsPerPage: number) => void;
22
+ onPaginationChange?: (page: number, rowsPerPage: number) => void;
22
23
  mobileRender: (row: T) => ReactNode;
23
24
  actions?: ReactNode;
24
25
  moreActions?: ReactNode;
@@ -27,7 +28,6 @@ interface DataViewProps<T = unknown> extends DataGridProps {
27
28
  searchValue?: string;
28
29
  onSearchChange?: (value: string) => void;
29
30
  hideFooter?: boolean;
30
- hideHeader?: boolean;
31
31
  showColumnButton?: boolean;
32
32
  filterButton?: ReactNode;
33
33
  activeFilters?: ReactNode;
@@ -80,6 +80,6 @@ declare const MobilePaginationContainer: _emotion_styled.StyledComponent<_mui_ma
80
80
 
81
81
  declare const Toolbar: ({ setFilterButtonEl }: ToolbarProps) => react_jsx_runtime.JSX.Element;
82
82
 
83
- declare const _default: <T extends GridValidRowModel = GridValidRowModel>({ title, headerContent, breakpoint, columns, rows, mobileRender, rowCount, paginationModel, onPaginationChange, actions, moreActions, onAdd, onSearch, searchValue, onSearchChange, slots, slotProps, loading, fetching, containerProps, hideFooter, hideHeader, showColumnButton, filterButton, activeFilters, ...others }: DataViewProps<T>) => react_jsx_runtime.JSX.Element;
83
+ declare const _default: <T extends GridValidRowModel = GridValidRowModel>({ title, header, headerProps, breakpoint, columns, rows, mobileRender, rowCount, paginationModel, onPaginationChange, actions, moreActions, onAdd, onSearch, searchValue, onSearchChange, slots, slotProps, loading, fetching, containerProps, hideFooter, showColumnButton, filterButton, activeFilters, ...others }: DataViewProps<T>) => react_jsx_runtime.JSX.Element;
84
84
 
85
85
  export { ActionsContainer, ActionsDivider, Container, _default$2 as DesktopFooter, _default$1 as EnhancedMoreActions, Header, MobilePaginationContainer, SearchContainer, Toolbar, ToolbarActionsDivider, Topbar, _default as default };
@@ -1,4 +1,4 @@
1
- export { a as DesktopFooter, b as EnhancedMoreActions, c as Toolbar, d as default } from '../../chunk-B55753MU.js';
1
+ export { a as DesktopFooter, b as EnhancedMoreActions, c as Toolbar, d as default } from '../../chunk-TDWOIWUU.js';
2
2
  import '../../chunk-MC44LVZD.js';
3
3
  import '../../chunk-IJZCVZ32.js';
4
4
  import '../../chunk-IDFJFFIV.js';
@@ -101,7 +101,7 @@ interface DynamicDataViewProps<T = object> {
101
101
  storageKey: string;
102
102
  }
103
103
 
104
- declare const _default$9: <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, showFilterButton, filter, onFilterChange, sort, onSortChange, defaultVisibleFieldNames, preferredFieldOrder, columnStrategies, onColumnVisibilityModelChange, storageKey, }: DynamicDataViewProps<T>) => react_jsx_runtime.JSX.Element;
104
+ declare const _default$9: <T extends object = object>({ title, metadata, data, isLoading, isFetching, page, perPage, searchValue, onSearchChange, onSearch, onPaginationChange, onAdd, onRowAction, onRowDoubleClick, actions, moreActions, slots, mobileRender, containerHeight, showColumnButton, showFilterButton, filter, onFilterChange, sort, onSortChange, defaultVisibleFieldNames, preferredFieldOrder, columnStrategies, onColumnVisibilityModelChange, storageKey, }: DynamicDataViewProps<T>) => react_jsx_runtime.JSX.Element;
105
105
 
106
106
  interface DateRendererProps {
107
107
  value: unknown;
@@ -3,7 +3,7 @@ export { a as FilterOperator, b as SortType } from '../../chunk-VL4W63YA.js';
3
3
  import { a as a$1 } from '../../chunk-LG2B5RFV.js';
4
4
  import { d, c } from '../../chunk-N7IK5EUP.js';
5
5
  import { h, a as a$3 } from '../../chunk-OF6623HG.js';
6
- import { d as d$1 } from '../../chunk-B55753MU.js';
6
+ import { d as d$1 } from '../../chunk-TDWOIWUU.js';
7
7
  import '../../chunk-MC44LVZD.js';
8
8
  import '../../chunk-IJZCVZ32.js';
9
9
  import { a as a$2 } from '../../chunk-SY2RHBDJ.js';
@@ -31,7 +31,7 @@ import '../../chunk-POTVACYB.js';
31
31
  import '../../chunk-ET3WPQIO.js';
32
32
  import '../../chunk-CFNATBO2.js';
33
33
  import { memo, useMemo, useCallback, useState, useEffect, useRef } from 'react';
34
- import Oo from 'react-fast-compare';
34
+ import Po from 'react-fast-compare';
35
35
  import Xe from '@mui/material/Badge';
36
36
  import he from '@mui/material/Button';
37
37
  import Qe from '@mui/material/IconButton';
@@ -41,19 +41,19 @@ import dt from '@mui/material/Divider';
41
41
  import Se from '@mui/material/Typography';
42
42
  import fe from '@mui/material/FormControl';
43
43
  import Ce from '@mui/material/InputLabel';
44
- import $ from '@mui/material/MenuItem';
44
+ import K from '@mui/material/MenuItem';
45
45
  import ge from '@mui/material/Select';
46
- import jo from '@mui/material/TextField';
47
- import X from '@mui/material/Box';
46
+ import Qo from '@mui/material/TextField';
47
+ import Q from '@mui/material/Box';
48
48
  import { styled } from '@mui/material/styles';
49
- import br from '@mui/material/Dialog';
50
- import hr from '@mui/material/DialogActions';
51
- import Fr from '@mui/material/DialogContent';
52
- import Ir from '@mui/material/DialogTitle';
53
- import zr from '@mui/material/Chip';
49
+ import Sr from '@mui/material/Dialog';
50
+ import br from '@mui/material/DialogActions';
51
+ import hr from '@mui/material/DialogContent';
52
+ import Fr from '@mui/material/DialogTitle';
53
+ import Hr from '@mui/material/Chip';
54
54
 
55
- var Wo=({showFilterButton:e$1,isMobile:t,hasActiveFilters:o,activeFiltersCount:i,sort:n,onFilterClick:r,onSortClick:l})=>e$1?t?jsxs(Nt,{direction:"row",spacing:.5,children:[jsx(Xe,{badgeContent:i,color:"primary",invisible:i===0,sx:{"& .MuiBadge-badge":{transform:"scale(0.9) translate(10px, 9px)",opacity:i===0?0:1}},children:jsx(Qe,{color:o?"primary":"default",onClick:r,size:"small","aria-label":"Filtrar",sx:{overflow:"visible"},children:jsx(a,{icon:"FILTER_VERTICAL"})})}),jsx(e,{sx:{height:16},orientation:"vertical",flexItem:!0}),jsx(Qe,{color:n?"primary":"default",onClick:l,size:"small","aria-label":"Ordenar",children:jsx(a,{icon:n?.sortType==="DESC"?"SORTING_DESC":"SORTING_ASC"})})]}):jsx(Xe,{badgeContent:i,color:"primary",invisible:i===0,sx:{"& .MuiBadge-badge":i?{transform:"scale(0.9) translate(-3px, 7px)",position:"relative",opacity:1,transition:"none"}:{transition:"none",opacity:0}},children:jsx(he,{variant:"text",color:o?"primary":"inherit",startIcon:jsx(a,{icon:"FILTER_VERTICAL"}),onClick:r,size:"small",children:"Filtrar"})}):null,je=memo(Wo,Oo);var Je=e=>e.filter(t=>t.available_filter_conditions&&t.available_filter_conditions.length>0&&t.name!=="ACTIONS");var Ze=e=>{let{type:t,available_filter_conditions:o}=e;return o.length===0?"EQUALS":t==="TEXT"&&o.includes("LIKE")?"LIKE":o[0]},Y=e=>e.value.length>0||e.conditional==="IS_NULL"||e.conditional==="IS_NOT_NULL",et=e=>{if(e.length===0)return;let t=e.filter(Y);if(t.length!==0)return {operator:"AND",groups:[{operator:t[0]?.operator||"AND",conditionals:t.map(o=>({fieldName:o.fieldName,conditional:o.conditional,value:o.value}))}]}};var tt={["EQUALS"]:"Igual a",["NOT_EQUALS"]:"Diferente de",["LIKE"]:"Cont\xE9m",["NOT_LIKE"]:"N\xE3o cont\xE9m",["GREATER_THAN"]:"Maior que",["LESS_THAN"]:"Menor que",["GREATER_THAN_OR_EQUAL"]:"Maior ou igual a",["LESS_THAN_OR_EQUAL"]:"Menor ou igual a",["IN"]:"Em",["NOT_IN"]:"N\xE3o em",["IS_NULL"]:"\xC9 nulo",["IS_NOT_NULL"]:"N\xE3o \xE9 nulo"};var Yo=({value:e,onChange:t,totalConditions:o,isFirst:i})=>o===1?null:i?jsx(Nt,{sx:{width:55,flexShrink:0}}):jsxs(ge,{value:e,onChange:n=>t(n.target.value),size:"small",sx:{width:55,flexShrink:0},children:[jsx($,{value:"AND",children:"e"}),jsx($,{value:"OR",children:"ou"})]}),rt=memo(Yo,Oo);var O={whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},Jo=({condition:e,fields:t,onChange:o,onRemove:i,totalConditions:n,isFirst:r})=>{let l=useMemo(()=>t.find(a=>(a.filter_field_name??a.name)===e.fieldName),[t,e.fieldName]),m=useMemo(()=>l?.available_filter_conditions||[],[l]),s=useMemo(()=>!e.fieldName||e.conditional==="IS_NULL"||e.conditional==="IS_NOT_NULL",[e.fieldName,e.conditional]),d=useCallback(a=>{let u=t.find(E=>(E.filter_field_name??E.name)===a);if(!u)return;let L=u.available_filter_conditions[0]||"EQUALS";o({...e,fieldName:a,conditional:L,value:[]});},[t,e,o]),f=useCallback(a=>{o({...e,conditional:a});},[e,o]),p=useCallback(a=>{o({...e,value:a?[a]:[]});},[e,o]),c=useCallback(a=>{o({...e,operator:a});},[e,o]);return jsxs(Nt,{direction:"row",spacing:1,alignItems:"center",children:[jsx(Qe,{onClick:i,size:"small","aria-label":"Remover filtro",sx:{flexShrink:0},children:jsx(a,{icon:"CLOSE_MARK_BUTTON",width:18})}),jsx(rt,{value:e.operator,onChange:c,totalConditions:n,isFirst:r}),jsxs(fe,{size:"small",sx:{minWidth:150,flex:1},children:[jsx(Ce,{id:`field-label-${e.id}`,children:"Coluna"}),jsx(ge,{labelId:`field-label-${e.id}`,label:"Coluna",value:e.fieldName,onChange:a=>d(a.target.value),size:"small",sx:{"& .MuiSelect-select":O},children:t.map(a=>jsx($,{value:a.filter_field_name??a.name,sx:O,title:a.description||a.name,children:a.description||a.name},a.name))})]}),jsxs(fe,{size:"small",sx:{minWidth:90},disabled:!e.fieldName,children:[jsx(Ce,{id:`condition-label-${e.id}`,children:"Condi\xE7\xE3o"}),jsx(ge,{labelId:`condition-label-${e.id}`,label:"Condi\xE7\xE3o",value:e.conditional,onChange:a=>f(a.target.value),size:"small",sx:{"& .MuiSelect-select":O},children:m.map(a=>jsx($,{value:a,sx:O,children:tt[a]||a},a))})]}),l?.type==="BOOLEAN"?jsxs(fe,{size:"small",sx:{flex:1,minWidth:120},disabled:s,children:[jsx(Ce,{id:`value-label-${e.id}`,children:"Valor"}),jsxs(ge,{labelId:`value-label-${e.id}`,label:"Valor",value:e.value[0]||"",onChange:a=>p(a.target.value),size:"small",sx:{"& .MuiSelect-select":O},children:[jsx($,{value:"true",children:"Verdadeiro"}),jsx($,{value:"false",children:"Falso"})]})]}):jsx(jo,{label:"Filtro",value:e.value[0]||"",onChange:a=>p(a.target.value),size:"small",disabled:s,InputLabelProps:{shrink:!0},sx:{flex:1,minWidth:120}})]})},it=memo(Jo,Oo);var or=({filterableFields:e,conditions:t,onUpdateCondition:o,onRemoveCondition:i})=>{let n=useCallback(s=>{o(s.id,s);},[o]),r=useCallback(s=>()=>{i(s);},[i]),l=useMemo(()=>t.map(s=>s.fieldName).filter(s=>!!s),[t]),m=useCallback(s=>e.filter(d=>!l.includes(d.name)||d.name===s),[e,l]);return e.length===0?jsx(Se,{variant:"body2",color:"text.secondary",textAlign:"center",children:"Nenhum filtro dispon\xEDvel"}):t.length===0?jsxs(Se,{variant:"body2",color:"text.secondary",textAlign:"center",children:["Clique em"," ",jsx(Se,{component:"strong",variant:"body2",fontWeight:600,color:"text.primary",children:'"+"'})," ","para adicionar um filtro"]}):jsx(Fragment,{children:t.map((s,d)=>jsx(it,{condition:s,fields:m(s.fieldName),onChange:n,onRemove:r(s.id),showOperator:d>0,totalConditions:t.length,isFirst:d===0},s.id))})},nt=memo(or,Oo);var at=styled(X)({display:"flex",flexDirection:"column",height:"100%"}),lt=styled(X)(({theme:e})=>({display:"flex",alignItems:"center",justifyContent:"space-between",padding:e.spacing(2,3)})),st=styled(X)(({theme:e})=>({flex:1,overflowY:"auto",padding:e.spacing(3),display:"flex",flexDirection:"column",gap:e.spacing(2)})),mt=styled(X)(({theme:e})=>({display:"flex",alignItems:"center",justifyContent:"space-between",padding:e.spacing(2)}));var dr=({onClose:e,fields:t,conditions:o,onAddCondition:i,onUpdateCondition:n,onRemoveCondition:r,onApply:l,onClear:m,onCancel:s})=>{let d=Je(t),f=o.length>0,p=useCallback(()=>{l(),e();},[l,e]),c=useCallback(()=>{m(),e();},[m,e]),a$1=useCallback(()=>{s();},[s]);return jsxs(at,{children:[jsxs(lt,{children:[jsx(Se,{variant:"overline",fontWeight:600,color:"text.secondary",children:"Defina as condi\xE7\xF5es para filtrar"}),jsx(Qe,{onClick:i,size:"small","aria-label":"Adicionar filtro",title:"Adicionar filtro",disabled:o.length>=d.length,children:jsx(a,{icon:"SIMPLE_ADD"})})]}),jsx(dt,{}),jsx(st,{children:jsx(nt,{filterableFields:d,conditions:o,onUpdateCondition:n,onRemoveCondition:r})}),jsx(dt,{}),jsxs(mt,{children:[jsx(he,{variant:"text",color:"inherit",onClick:c,children:"Limpar"}),jsxs(Nt,{direction:"row",spacing:1,children:[jsx(he,{variant:"outlined",color:"inherit",onClick:a$1,startIcon:jsx(a,{icon:"CANCEL_CIRCLE"}),children:"Cancelar"}),jsx(he,{variant:"contained",onClick:p,disabled:!f,startIcon:jsx(a,{icon:"SIMPLE_CHECK"}),children:"Aplicar"})]})]})]})},pt=memo(dr,Oo);var ur=e=>jsx(a$1,{open:e.open,onClose:e.onClose,anchorEl:e.anchorEl,isMobile:e.isMobileProp,popoverProps:{slotProps:{paper:{sx:{width:520,maxWidth:"calc(100vw - 24px)",maxHeight:600,mt:1}}}},drawerProps:{anchor:"right",PaperProps:{sx:{width:"100%",maxWidth:"100%",height:"100%",maxHeight:"100%",borderRadius:0}}},children:jsx(pt,{...e})}),ut=memo(ur,Oo);var gr=({showFilterButton:e,isOpen:t,filterAnchorEl:o,fields:i,conditions:n,isMobile:r,onClose:l,onAddCondition:m,onUpdateCondition:s,onRemoveCondition:d,onApply:f,onClear:p,onCancel:c})=>e?jsx(ut,{open:t||!!o,anchorEl:o,onClose:l,fields:i,conditions:n,onAddCondition:m,onUpdateCondition:s,onRemoveCondition:d,onApply:f,onClear:p,onCancel:c,isMobileProp:r}):null,ft=memo(gr,Oo);var Ct=styled(br)(()=>({"& .MuiDialog-paper":{width:"100%"}})),gt=styled(Ir)(({theme:e})=>({borderBottom:"1px solid",borderColor:e.palette.divider,padding:e.spacing(1.5,2)})),yt=styled(Fr)(({theme:e})=>({padding:e.spacing(2)})),St=styled(hr)(({theme:e})=>({borderTop:"1px solid",borderColor:e.palette.divider,padding:e.spacing(1.5,2)})),bt=styled(he)(({theme:e})=>({minWidth:24,[e.breakpoints.down(330)]:{padding:e.spacing(1)}})),Fe=styled(Se)(({theme:e})=>({fontWeight:"600",margin:e.spacing(0,1),[e.breakpoints.down(330)]:{fontSize:0,margin:0}}));var _t=({open:e,onClose:t,fields:o,sort:i,onSortChange:n})=>{let[r,l]=useState(i?.fieldName||""),[m,s]=useState(i?.sortType||"ASC"),d=useMemo(()=>o.filter(u=>u.name!=="ACTIONS"&&u.access_type!=="WRITE_ONLY"),[o]),f=useMemo(()=>o.find(u=>(u.filter_field_name??u.name)===r),[o,r]),p=f?.type==="DECIMAL"||f?.type==="INTEGER";useEffect(()=>{e&&(l(i?.fieldName||""),s(i?.sortType||"ASC"));},[e,i]);let c=useCallback(()=>{n&&n(r?{fieldName:r,sortType:m}:void 0),t();},[n,r,m,t]),a$1=useCallback(()=>{n&&(l(""),s("ASC"),n(void 0),t());},[n,t]);return jsxs(Ct,{open:e,onClose:t,maxWidth:"xs",fullWidth:!0,children:[jsx(gt,{children:jsx(Se,{variant:"overline",color:"text.secondary",children:"Ordenar por"})}),jsx(yt,{children:jsxs(Nt,{spacing:2,pt:2,children:[jsxs(fe,{fullWidth:!0,size:"small",children:[jsx(Ce,{id:"sort-field-label",children:"Campo"}),jsxs(ge,{labelId:"sort-field-label",value:r,label:"Campo",onChange:u=>l(u.target.value),children:[jsx($,{value:"",children:jsx("em",{children:"Nenhum"})}),d.map(u=>jsx($,{value:u.filter_field_name??u.name,children:u.description||u.name},u.name))]})]}),jsxs(fe,{fullWidth:!0,size:"small",disabled:!r,children:[jsx(Ce,{id:"sort-direction-label",children:"Dire\xE7\xE3o"}),jsxs(ge,{labelId:"sort-direction-label",value:m,label:"Dire\xE7\xE3o",onChange:u=>s(u.target.value),children:[jsxs($,{value:"ASC",children:["Crescente ",p?"(1-9)":"(A-Z)"]}),jsxs($,{value:"DESC",children:["Decrescente ",p?"(9-1)":"(Z-A)"]})]})]})]})}),jsxs(St,{children:[jsx(Nt,{flex:1,width:"100%",direction:"row",children:jsx(he,{color:"inherit",onClick:a$1,children:"Limpar"})}),jsxs(he,{onClick:t,variant:"outlined",color:"inherit",sx:{minWidth:24},children:[jsx(a,{icon:"CANCEL_CIRCLE"}),jsx(Fe,{children:"Cancelar"})]}),jsxs(bt,{onClick:c,variant:"contained",children:[jsx(a,{icon:"SIMPLE_CHECK"}),jsx(Fe,{children:"Aplicar"})]})]})]})};_t.displayName="SortModal";var At=memo(_t);var Et=({columns:e,fields:t,preferredFieldOrder:o})=>{let i=useMemo(()=>new Map(e.map(l=>[l.field,l])),[e]),n=useMemo(()=>new Map(t?.map(l=>[l.name,l])||[]),[t]);return {orderedColumns:useMemo(()=>{if(!o||o.length===0||!t)return e;let l="ACTIONS",m=o.filter(p=>p!==l),s=new Set,d=[],f=p=>{let c=n.get(p);if(!c)return;let a=i.get(c.name);!a||s.has(c.name)||(d.push(a),s.add(c.name));};return m.forEach(p=>{f(p);}),t.forEach(p=>{if(p.name===l||m.includes(p.name))return;let c=i.get(p.name);!c||s.has(p.name)||(d.push(c),s.add(p.name));}),f(l),d.length===0?e:d},[e,i,n,o,t]),columnsByFieldId:i,fieldsByName:n}};function Ar(e){return e.name}var vt=({fields:e,columnsByFieldId:t,defaultVisibleFieldNames:o,columnVisibilityStorageKey:i,onColumnVisibilityModelChange:n})=>{let r=!!i,[l,m]=a$4(i||"__dynamic-data-view:columns__",void 0,{initializeWithValue:r}),s=useMemo(()=>{if(!e)return;let f={};if(e.forEach(p=>{let c=Ar(p);if(!t.has(c))return;let a;if(r&&l){let u=l[c];typeof u=="boolean"&&(a=u);}a===void 0&&o&&o.length>0&&(a=o.includes(p.name)),typeof a=="boolean"&&(f[c]=a);}),Object.keys(f).length!==0)return {columns:{columnVisibilityModel:f}}},[t,o,e,r,l]),d=useCallback(f=>{r&&m(f),n&&n(f);},[r,n,m]);return {initialState:s,handleColumnVisibilityModelChange:d}};var N={IMAGE_WIDTH:90,MIN_WIDTH:130,ENTITY_MIN_WIDTH:100,ENTITY_FLEX:.5,ID_MIN_WIDTH:200,ID_FLEX:1,ACTIONS_WIDTH:80},Te={READ_ONLY:"READ_ONLY",READ_AND_WRITE:"READ_AND_WRITE"},Mt=["price","base_price","minimum_value","maximum_value","minimum_installment_value"];var Er=(e,t)=>({field:e.name,headerName:e.description,sortable:!1,width:N.IMAGE_WIDTH,resizable:!1,headerAlign:"center",align:"center",renderCell:o=>t(e,o.row)}),vr=(e,t)=>({field:e.name,headerName:e.description,minWidth:N.ID_MIN_WIDTH,flex:N.ID_FLEX,renderCell:o=>t(e,o.row)}),Mr=(e,t)=>({field:e.name,headerName:e.description,minWidth:N.ENTITY_MIN_WIDTH,flex:N.ENTITY_FLEX,renderCell:o=>t(e,o.row)}),wr=(e,t)=>({field:e.name,headerName:e.description,minWidth:N.MIN_WIDTH,renderCell:o=>t(e,o.row)}),Lr=(e,t)=>({field:e.name,headerName:"A\xE7\xF5es",width:N.ACTIONS_WIDTH,sortable:!1,resizable:!1,disableReorder:!0,headerAlign:"center",disableColumnMenu:!0,align:"center",renderCell:o=>t(e,o.row)}),wt=(e,t)=>e.name===t?.id_field_name||e.name==="name"?vr:e.name==="ACTIONS"?Lr:e.type==="FILE"?Er:e.type==="ENTITY"?Mr:wr;var Lt=({metadata:e,renderCell:t,columnStrategies:o})=>useMemo(()=>{if(!e?.fields)return [];let i=new Map;return e.fields.filter(r=>r.access_type===Te.READ_ONLY||r.access_type===Te.READ_AND_WRITE?!0:r.name==="ACTIONS"||r.name===e?.id_field_name||r.name==="NAME").forEach(r=>{if(i.has(r.name))return;let m=(o?.[r.name]??wt(r,e))(r,t,e);i.set(r.name,m);}),Array.from(i.values())},[o,e,t]);var Pt=e=>e?.groups?.[0]?.conditionals?e.groups[0].conditionals.map(t=>({id:a$5(),operator:e.groups[0].operator,fieldName:t.fieldName,conditional:t.conditional,value:t.value})):[],Ot=({fields:e,initialFilter:t})=>{let[o,i]=useState(!1),[n,r]=useState(()=>Pt(t)),[l,m]=useState(t),[s,d]=useState(()=>Pt(t)),f=useRef([]),p=useCallback(()=>{f.current=n.map(C=>({...C})),d(n.map(C=>({...C}))),i(!0);},[n]),c=()=>i(!1),a=useCallback(()=>{let C=e.filter(R=>R.available_filter_conditions?.length>0);if(C.length===0)return;let y=s.map(R=>R.fieldName),I=C.filter(R=>!y.includes(R.filter_field_name??R.name));if(I.length===0)return;let _=s.length>0?s[0].operator:"AND",b=I[0],A={id:a$5(),operator:_,fieldName:b.filter_field_name??b.name,conditional:Ze(b),value:[]};d(R=>[...R,A]);},[e,s]),u=useCallback((C,y)=>{d(I=>{let _=I.find(b=>b.id===C);if(!_)return I;if(y.operator&&y.operator!==_.operator){let b=y.operator;return I.map(A=>A.id===C?{...A,...y}:{...A,operator:b})}return I.map(b=>b.id===C?{...b,...y}:b)});},[]),L=useCallback(C=>{d(y=>y.filter(I=>I.id!==C));},[]),E=()=>{d([]),r([]),m(void 0);},re=()=>{let C=et(s);return r(s.map(y=>({...y}))),m(C),i(!1),C},ie=()=>{d(f.current.map(C=>({...C}))),i(!1);},B=n.some(Y),ne=n.filter(Y).length;return {conditions:s,filter:l,isOpen:o,hasActiveFilters:B,activeFiltersCount:ne,openDrawer:p,closeDrawer:c,addCondition:a,updateCondition:u,removeCondition:L,clearAllFilters:E,applyFilters:re,cancelChanges:ie}};var Wt=e=>{try{let t=localStorage.getItem(e);return t?JSON.parse(t):void 0}catch{return}},Gt=(e,t)=>{try{t===void 0?localStorage.removeItem(e):localStorage.setItem(e,JSON.stringify(t));}catch{}},Ut=(e,t,o)=>{let i=`${e}:filter`,[n,r]=useState(()=>Wt(i)||t);return useEffect(()=>{t!==void 0&&r(t);},[t]),{filter:n,setFilter:m=>{r(m),Gt(i,m),o?.(m);}}},Vt=(e,t,o)=>{let i=`${e}:sort`,[n,r]=useState(()=>Wt(i)||t);return useEffect(()=>{t!==void 0&&r(t);},[t]),{sort:n,setSort:m=>{r(m),Gt(i,m),o?.(m);}}};var Ht=({sort:e,onSortChange:t})=>{let o=useMemo(()=>e?[{field:e.fieldName,sort:e.sortType.toLowerCase()}]:[],[e]),i=useCallback(n=>{if(!t)return;let r=n[0];if(!r||!r.sort){t(void 0);return}let l={fieldName:r.field,sortType:r.sort.toUpperCase()};t(l);},[t]);return {sortModel:o,handleSortModelChange:i}};var zt=()=>({name:"ACTIONS",description:"",filter_field_name:null,type:"TEXT",metadata:null,access_type:"READ_ONLY",relation_field_name:null,available_filter_conditions:[]}),Re=e=>e.fields.some(o=>o.name==="ACTIONS")?e:{...e,fields:[...e.fields,zt()]};var Gr=({value:e,format:t})=>e==null?"-":d(e,t),De=memo(Gr);var Vr=({value:e,format:t})=>e==null?"-":c(e,t),xe=memo(Vr);var Yr=({value:e,field:t})=>{if(!t.metadata||typeof e!="object"||e===null)return e?String(e):"-";let o=e[t.metadata.description_field_name];return o?jsx(zr,{label:String(o),variant:"outlined",size:"small",sx:{width:"fit-content",color:"text.secondary",borderColor:"divider",borderRadius:3}}):null},Ne=memo(Yr);var Kr=({value:e,trueIcon:t="STAR_02",falseIcon:o="STAR",color:i="primary.main",width:n=18})=>jsx(a,{icon:e?t:o,color:i,width:n}),Xr=memo(Kr);var qt=styled("span")(({theme:e,isActive:t})=>({display:"inline-flex",alignItems:"center",justifyContent:"center",padding:e.spacing(.2,1),borderRadius:e.shape.borderRadius,fontSize:"0.75rem",fontWeight:600,width:"fit-content",height:"auto",lineHeight:"1.25rem",whiteSpace:"nowrap",margin:"auto",backgroundColor:t?e.palette.success.lighter||"#00A76F29":e.palette.warning.lighter||"#FF563029",color:t?e.palette.success.darker||"#007867":e.palette.warning.darker||"#B71D18"})),$t=styled(X,{shouldForwardProp:e=>!["size","noImage","clickable"].includes(e)})(({theme:e,size:t,noImage:o,clickable:i})=>({width:t,height:t,minWidth:t,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",overflow:"hidden",cursor:i?"pointer":"default",transition:"opacity 0.2s ease-in-out",color:e.palette.text.disabled,...o&&{border:`1px dashed ${e.palette.divider}`,backgroundColor:e.palette.grey[100]},...i&&{"&:hover":{opacity:.8}},"& img":{width:"100%",height:"100%",objectFit:"cover",borderRadius:"50%"},[e.breakpoints.down("sm")]:{justifyContent:"flex-start",alignItems:"flex-start"}}));var Zr=({imageResourceId:e,getImageUrl:t,size:o=48,alt:i="Imagem",onClick:n,sx:r})=>{let l=!!e,m=l&&t?t(e):void 0;return jsx($t,{size:o,noImage:!l,clickable:!!n,onClick:n,sx:r,children:m?jsx("img",{src:m,alt:i}):jsx(a,{icon:"SEARCH_IMAGE",width:Math.round(o/2),color:"text.disabled"})})},ei=memo(Zr);var oi=({id:e,displayName:t,copyMessage:o="ID copiado!"})=>jsxs(Nt,{height:1,justifyContent:"center",children:[jsx(Se,{variant:"subtitle2",noWrap:!0,title:t,children:t}),jsxs(Nt,{direction:"row",gap:1,alignItems:"center",children:[jsxs(Se,{color:"grey.600",variant:"body2",noWrap:!0,children:["ID: ",e]}),jsx(a$2,{toCopy:e,message:o})]})]}),ri=memo(oi);var li=({value:e,isCurrency:t=!1})=>e==null?"-":jsx(Nt,{direction:"row",alignItems:"center",height:"100%",children:jsx(Se,{variant:"body2",noWrap:!0,width:"fit-content",children:t?h(Number(e)):a$3(Number(e))})}),Ee=memo(li);var mi=({active:e,activeLabel:t="Ativo",inactiveLabel:o="Inativo"})=>jsx(qt,{isActive:e,children:e?t:o}),ve=memo(mi);var fi=e=>e.replace(/<[^>]*>/g,"").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'").trim(),Ci=({value:e,showCopyButton:t=!1,copyMessage:o="Copiado",copyLabel:i,mask:n})=>{if(!e)return "-";let r=String(e),l=n?n(r):fi(r);return t?jsxs(Nt,{direction:"row",gap:1,alignItems:"center",children:[jsx(Se,{variant:"body2",noWrap:!0,children:l}),jsx(a$2,{toCopy:r,message:o,label:i})]}):l},Me=memo(Ci);function yi(e){return Mt.includes(e)}var Zt=e=>{let{onRowAction:t}=e,o=(i,n)=>{let r=n[i.name];if(i.name==="ACTIONS")return t?.(n.id,n);switch(i.type){case"BOOLEAN":return jsx(ve,{active:!!r,activeLabel:"Ativo",inactiveLabel:"Inativo"});case"DATE":return jsx(De,{value:r});case"DATETIME":return jsx(xe,{value:r});case"DECIMAL":case"INTEGER":return jsx(Ee,{value:r,isCurrency:yi(i.name)});case"FILE":case"ENTITY":return jsx(Ne,{value:r,field:i});case"TEXT":default:return jsx(Me,{value:r})}};return o.displayName="CellRendererComponent",o};var hi=({title:e,metadata:t,data:o,isLoading:i,isFetching:n,page:r,perPage:l,searchValue:m,onSearchChange:s,onSearch:d,onPaginationChange:f,onAdd:p,onRowAction:c,onRowDoubleClick:a,actions:u,moreActions:L,hideHeader:E,slots:re,mobileRender:ie,containerHeight:B=600,showColumnButton:ne=!1,showFilterButton:C=!1,filter:y,onFilterChange:I,sort:_,onSortChange:b$1,defaultVisibleFieldNames:A,preferredFieldOrder:R,columnStrategies:ro,onColumnVisibilityModelChange:io,storageKey:ae})=>{let{items:W=[],total:no=0}=o||{},G=useMemo(()=>{if(t)return t;if(W.length>0){let x=W[0],H=Object.keys(x).map(We=>({name:We,type:"TEXT",description:We,filter_field_name:null,metadata:null,access_type:"READ_ONLY",relation_field_name:null,available_filter_conditions:[]}));return {name:"loading",description:"Loading...",id_field_name:"id",description_field_name:H[0]?.name||"id",access_type:"READ_ONLY",fields:H}}},[t,W]),P=useMemo(()=>G&&c?Re(G):G,[G,c]),le=useMemo(()=>P?.fields||[],[P]),ao=useMemo(()=>Zt({onRowAction:c}),[c]),lo=Lt({metadata:P,renderCell:ao,columnStrategies:ro}),{orderedColumns:so,columnsByFieldId:mo}=Et({columns:lo,fields:P?.fields,preferredFieldOrder:R}),{initialState:po,handleColumnVisibilityModelChange:co}=vt({fields:P?.fields,columnsByFieldId:mo,defaultVisibleFieldNames:A,columnVisibilityStorageKey:`${ae}:columns`,onColumnVisibilityModelChange:io}),uo=useCallback(x=>{if(!a)return;let H=x.id?.toString()||"";a(H,x.row);},[a]),U=b("down","md"),[fo,se]=useState(null),{filter:Co,setFilter:V}=Ut(ae,y,I),{sort:go,setSort:we}=Vt(ae,_,b$1),yo=y??Co,me=_??go,{sortModel:So,handleSortModelChange:bo}=Ht({sort:me,onSortChange:we}),{conditions:ho,isOpen:Fo,openDrawer:de,closeDrawer:Le,addCondition:Io,updateCondition:To,removeCondition:Ro,clearAllFilters:Pe,applyFilters:Oe,cancelChanges:ke,hasActiveFilters:Do,activeFiltersCount:xo}=Ot({fields:le,initialFilter:yo}),No=useCallback(()=>{let x=Oe();V(x);},[Oe,V]),_o=useCallback(()=>{Pe(),V(void 0);},[Pe,V]),Ao=useCallback(x=>{U?de():(de(),se(x.currentTarget));},[U,de]),Eo=useCallback(()=>{ke(),se(null);},[ke]),[vo,Be]=useState(!1),Mo=useCallback(()=>{se(null),Le();},[Le]);return jsxs(Fragment,{children:[jsx(d$1,{title:e,columns:so,rows:W,mobileRender:ie,rowCount:no,loading:i||!t,fetching:n,searchValue:m,onSearch:d,onSearchChange:s,paginationModel:{page:r,pageSize:l},onPaginationChange:f,actions:u,moreActions:L,onAdd:p,hideHeader:E,onRowDoubleClick:a?uo:void 0,disableRowSelectionOnClick:!0,slots:re,initialState:po,showColumnButton:ne,containerProps:{height:B,maxHeight:B},onColumnVisibilityModelChange:co,filterButton:jsx(je,{showFilterButton:C,isMobile:U,hasActiveFilters:Do,activeFiltersCount:xo,sort:me,onFilterClick:Ao,onSortClick:()=>Be(!0)}),sortingMode:"server",sortModel:So,onSortModelChange:bo,disableColumnFilter:!0}),t&&jsxs(Fragment,{children:[jsx(ft,{showFilterButton:C,isOpen:Fo,filterAnchorEl:fo,fields:le,conditions:ho,isMobile:U,onClose:Mo,onAddCondition:Io,onUpdateCondition:To,onRemoveCondition:Ro,onApply:No,onClear:_o,onCancel:Eo}),jsx(At,{open:vo,onClose:()=>Be(!1),fields:le,sort:me,onSortChange:we})]})]})},Fi=memo(hi,Oo);var Ii=({metadata:e,columnVisibilityModel:t,defaultVisibleFields:o})=>{if(!e?.fields)return;let n=e.fields.map(r=>r.name).filter(r=>r==="ACTIONS"?!1:t?t[r]!==!1:o?.includes(r)??!0);return o?n.sort((r,l)=>{let m=o.indexOf(r),s=o.indexOf(l);return m-s||0}):n};
55
+ var Bo=({showFilterButton:e$1,isMobile:t,hasActiveFilters:o,activeFiltersCount:i,sort:n,onFilterClick:r,onSortClick:l})=>e$1?t?jsxs(Nt,{direction:"row",spacing:.5,children:[jsx(Xe,{badgeContent:i,color:"primary",invisible:i===0,sx:{"& .MuiBadge-badge":{transform:"scale(0.9) translate(10px, 9px)",opacity:i===0?0:1}},children:jsx(Qe,{color:o?"primary":"default",onClick:r,size:"small","aria-label":"Filtrar",sx:{overflow:"visible"},children:jsx(a,{icon:"FILTER_VERTICAL"})})}),jsx(e,{sx:{height:16},orientation:"vertical",flexItem:!0}),jsx(Qe,{color:n?"primary":"default",onClick:l,size:"small","aria-label":"Ordenar",children:jsx(a,{icon:n?.sortType==="DESC"?"SORTING_DESC":"SORTING_ASC"})})]}):jsx(Xe,{badgeContent:i,color:"primary",invisible:i===0,sx:{"& .MuiBadge-badge":i?{transform:"scale(0.9) translate(-3px, 7px)",position:"relative",opacity:1,transition:"none"}:{transition:"none",opacity:0}},children:jsx(he,{variant:"text",color:o?"primary":"inherit",startIcon:jsx(a,{icon:"FILTER_VERTICAL"}),onClick:r,size:"small",children:"Filtrar"})}):null,je=memo(Bo,Po);var Je=e=>e.filter(t=>t.available_filter_conditions&&t.available_filter_conditions.length>0&&t.name!=="ACTIONS");var Ze=e=>{let{type:t,available_filter_conditions:o}=e;return o.length===0?"EQUALS":t==="TEXT"&&o.includes("LIKE")?"LIKE":o[0]},q=e=>e.value.length>0||e.conditional==="IS_NULL"||e.conditional==="IS_NOT_NULL",et=e=>{if(e.length===0)return;let t=e.filter(q);if(t.length!==0)return {operator:"AND",groups:[{operator:t[0]?.operator||"AND",conditionals:t.map(o=>({fieldName:o.fieldName,conditional:o.conditional,value:o.value}))}]}};var tt={["EQUALS"]:"Igual a",["NOT_EQUALS"]:"Diferente de",["LIKE"]:"Cont\xE9m",["NOT_LIKE"]:"N\xE3o cont\xE9m",["GREATER_THAN"]:"Maior que",["LESS_THAN"]:"Menor que",["GREATER_THAN_OR_EQUAL"]:"Maior ou igual a",["LESS_THAN_OR_EQUAL"]:"Menor ou igual a",["IN"]:"Em",["NOT_IN"]:"N\xE3o em",["IS_NULL"]:"\xC9 nulo",["IS_NOT_NULL"]:"N\xE3o \xE9 nulo"};var zo=({value:e,onChange:t,totalConditions:o,isFirst:i})=>o===1?null:i?jsx(Nt,{sx:{width:55,flexShrink:0}}):jsxs(ge,{value:e,onChange:n=>t(n.target.value),size:"small",sx:{width:55,flexShrink:0},children:[jsx(K,{value:"AND",children:"e"}),jsx(K,{value:"OR",children:"ou"})]}),rt=memo(zo,Po);var O={whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},jo=({condition:e,fields:t,onChange:o,onRemove:i,totalConditions:n,isFirst:r})=>{let l=useMemo(()=>t.find(a=>(a.filter_field_name??a.name)===e.fieldName),[t,e.fieldName]),m=useMemo(()=>l?.available_filter_conditions||[],[l]),s=useMemo(()=>!e.fieldName||e.conditional==="IS_NULL"||e.conditional==="IS_NOT_NULL",[e.fieldName,e.conditional]),d=useCallback(a=>{let u=t.find(A=>(A.filter_field_name??A.name)===a);if(!u)return;let L=u.available_filter_conditions[0]||"EQUALS";o({...e,fieldName:a,conditional:L,value:[]});},[t,e,o]),f=useCallback(a=>{o({...e,conditional:a});},[e,o]),p=useCallback(a=>{o({...e,value:a?[a]:[]});},[e,o]),c=useCallback(a=>{o({...e,operator:a});},[e,o]);return jsxs(Nt,{direction:"row",spacing:1,alignItems:"center",children:[jsx(Qe,{onClick:i,size:"small","aria-label":"Remover filtro",sx:{flexShrink:0},children:jsx(a,{icon:"CLOSE_MARK_BUTTON",width:18})}),jsx(rt,{value:e.operator,onChange:c,totalConditions:n,isFirst:r}),jsxs(fe,{size:"small",sx:{minWidth:150,flex:1},children:[jsx(Ce,{id:`field-label-${e.id}`,children:"Coluna"}),jsx(ge,{labelId:`field-label-${e.id}`,label:"Coluna",value:e.fieldName,onChange:a=>d(a.target.value),size:"small",sx:{"& .MuiSelect-select":O},children:t.map(a=>jsx(K,{value:a.filter_field_name??a.name,sx:O,title:a.description||a.name,children:a.description||a.name},a.name))})]}),jsxs(fe,{size:"small",sx:{minWidth:90},disabled:!e.fieldName,children:[jsx(Ce,{id:`condition-label-${e.id}`,children:"Condi\xE7\xE3o"}),jsx(ge,{labelId:`condition-label-${e.id}`,label:"Condi\xE7\xE3o",value:e.conditional,onChange:a=>f(a.target.value),size:"small",sx:{"& .MuiSelect-select":O},children:m.map(a=>jsx(K,{value:a,sx:O,children:tt[a]||a},a))})]}),l?.type==="BOOLEAN"?jsxs(fe,{size:"small",sx:{flex:1,minWidth:120},disabled:s,children:[jsx(Ce,{id:`value-label-${e.id}`,children:"Valor"}),jsxs(ge,{labelId:`value-label-${e.id}`,label:"Valor",value:e.value[0]||"",onChange:a=>p(a.target.value),size:"small",sx:{"& .MuiSelect-select":O},children:[jsx(K,{value:"true",children:"Verdadeiro"}),jsx(K,{value:"false",children:"Falso"})]})]}):jsx(Qo,{label:"Filtro",value:e.value[0]||"",onChange:a=>p(a.target.value),size:"small",disabled:s,InputLabelProps:{shrink:!0},sx:{flex:1,minWidth:120}})]})},it=memo(jo,Po);var tr=({filterableFields:e,conditions:t,onUpdateCondition:o,onRemoveCondition:i})=>{let n=useCallback(s=>{o(s.id,s);},[o]),r=useCallback(s=>()=>{i(s);},[i]),l=useMemo(()=>t.map(s=>s.fieldName).filter(s=>!!s),[t]),m=useCallback(s=>e.filter(d=>!l.includes(d.name)||d.name===s),[e,l]);return e.length===0?jsx(Se,{variant:"body2",color:"text.secondary",textAlign:"center",children:"Nenhum filtro dispon\xEDvel"}):t.length===0?jsxs(Se,{variant:"body2",color:"text.secondary",textAlign:"center",children:["Clique em"," ",jsx(Se,{component:"strong",variant:"body2",fontWeight:600,color:"text.primary",children:'"+"'})," ","para adicionar um filtro"]}):jsx(Fragment,{children:t.map((s,d)=>jsx(it,{condition:s,fields:m(s.fieldName),onChange:n,onRemove:r(s.id),showOperator:d>0,totalConditions:t.length,isFirst:d===0},s.id))})},nt=memo(tr,Po);var at=styled(Q)({display:"flex",flexDirection:"column",height:"100%"}),lt=styled(Q)(({theme:e})=>({display:"flex",alignItems:"center",justifyContent:"space-between",padding:e.spacing(2,3)})),st=styled(Q)(({theme:e})=>({flex:1,overflowY:"auto",padding:e.spacing(3),display:"flex",flexDirection:"column",gap:e.spacing(2)})),mt=styled(Q)(({theme:e})=>({display:"flex",alignItems:"center",justifyContent:"space-between",padding:e.spacing(2)}));var mr=({onClose:e,fields:t,conditions:o,onAddCondition:i,onUpdateCondition:n,onRemoveCondition:r,onApply:l,onClear:m,onCancel:s})=>{let d=Je(t),f=o.length>0,p=useCallback(()=>{l(),e();},[l,e]),c=useCallback(()=>{m(),e();},[m,e]),a$1=useCallback(()=>{s();},[s]);return jsxs(at,{children:[jsxs(lt,{children:[jsx(Se,{variant:"overline",fontWeight:600,color:"text.secondary",children:"Defina as condi\xE7\xF5es para filtrar"}),jsx(Qe,{onClick:i,size:"small","aria-label":"Adicionar filtro",title:"Adicionar filtro",disabled:o.length>=d.length,children:jsx(a,{icon:"SIMPLE_ADD"})})]}),jsx(dt,{}),jsx(st,{children:jsx(nt,{filterableFields:d,conditions:o,onUpdateCondition:n,onRemoveCondition:r})}),jsx(dt,{}),jsxs(mt,{children:[jsx(he,{variant:"text",color:"inherit",onClick:c,children:"Limpar"}),jsxs(Nt,{direction:"row",spacing:1,children:[jsx(he,{variant:"outlined",color:"inherit",onClick:a$1,startIcon:jsx(a,{icon:"CANCEL_CIRCLE"}),children:"Cancelar"}),jsx(he,{variant:"contained",onClick:p,disabled:!f,startIcon:jsx(a,{icon:"SIMPLE_CHECK"}),children:"Aplicar"})]})]})]})},pt=memo(mr,Po);var cr=e=>jsx(a$1,{open:e.open,onClose:e.onClose,anchorEl:e.anchorEl,isMobile:e.isMobileProp,popoverProps:{slotProps:{paper:{sx:{width:520,maxWidth:"calc(100vw - 24px)",maxHeight:600,mt:1}}}},drawerProps:{anchor:"right",PaperProps:{sx:{width:"100%",maxWidth:"100%",height:"100%",maxHeight:"100%",borderRadius:0}}},children:jsx(pt,{...e})}),ut=memo(cr,Po);var Cr=({showFilterButton:e,isOpen:t,filterAnchorEl:o,fields:i,conditions:n,isMobile:r,onClose:l,onAddCondition:m,onUpdateCondition:s,onRemoveCondition:d,onApply:f,onClear:p,onCancel:c})=>e?jsx(ut,{open:t||!!o,anchorEl:o,onClose:l,fields:i,conditions:n,onAddCondition:m,onUpdateCondition:s,onRemoveCondition:d,onApply:f,onClear:p,onCancel:c,isMobileProp:r}):null,ft=memo(Cr,Po);var Ct=styled(Sr)(()=>({"& .MuiDialog-paper":{width:"100%"}})),gt=styled(Fr)(({theme:e})=>({borderBottom:"1px solid",borderColor:e.palette.divider,padding:e.spacing(1.5,2)})),yt=styled(hr)(({theme:e})=>({padding:e.spacing(2)})),St=styled(br)(({theme:e})=>({borderTop:"1px solid",borderColor:e.palette.divider,padding:e.spacing(1.5,2)})),bt=styled(he)(({theme:e})=>({minWidth:24,[e.breakpoints.down(330)]:{padding:e.spacing(1)}})),Fe=styled(Se)(({theme:e})=>({fontWeight:"600",margin:e.spacing(0,1),[e.breakpoints.down(330)]:{fontSize:0,margin:0}}));var _t=({open:e,onClose:t,fields:o,sort:i,onSortChange:n})=>{let[r,l]=useState(i?.fieldName||""),[m,s]=useState(i?.sortType||"ASC"),d=useMemo(()=>o.filter(u=>u.name!=="ACTIONS"&&u.access_type!=="WRITE_ONLY"),[o]),f=useMemo(()=>o.find(u=>(u.filter_field_name??u.name)===r),[o,r]),p=f?.type==="DECIMAL"||f?.type==="INTEGER";useEffect(()=>{e&&(l(i?.fieldName||""),s(i?.sortType||"ASC"));},[e,i]);let c=useCallback(()=>{n&&n(r?{fieldName:r,sortType:m}:void 0),t();},[n,r,m,t]),a$1=useCallback(()=>{n&&(l(""),s("ASC"),n(void 0),t());},[n,t]);return jsxs(Ct,{open:e,onClose:t,maxWidth:"xs",fullWidth:!0,children:[jsx(gt,{children:jsx(Se,{variant:"overline",color:"text.secondary",children:"Ordenar por"})}),jsx(yt,{children:jsxs(Nt,{spacing:2,pt:2,children:[jsxs(fe,{fullWidth:!0,size:"small",children:[jsx(Ce,{id:"sort-field-label",children:"Campo"}),jsxs(ge,{labelId:"sort-field-label",value:r,label:"Campo",onChange:u=>l(u.target.value),children:[jsx(K,{value:"",children:jsx("em",{children:"Nenhum"})}),d.map(u=>jsx(K,{value:u.filter_field_name??u.name,children:u.description||u.name},u.name))]})]}),jsxs(fe,{fullWidth:!0,size:"small",disabled:!r,children:[jsx(Ce,{id:"sort-direction-label",children:"Dire\xE7\xE3o"}),jsxs(ge,{labelId:"sort-direction-label",value:m,label:"Dire\xE7\xE3o",onChange:u=>s(u.target.value),children:[jsxs(K,{value:"ASC",children:["Crescente ",p?"(1-9)":"(A-Z)"]}),jsxs(K,{value:"DESC",children:["Decrescente ",p?"(9-1)":"(Z-A)"]})]})]})]})}),jsxs(St,{children:[jsx(Nt,{flex:1,width:"100%",direction:"row",children:jsx(he,{color:"inherit",onClick:a$1,children:"Limpar"})}),jsxs(he,{onClick:t,variant:"outlined",color:"inherit",sx:{minWidth:24},children:[jsx(a,{icon:"CANCEL_CIRCLE"}),jsx(Fe,{children:"Cancelar"})]}),jsxs(bt,{onClick:c,variant:"contained",children:[jsx(a,{icon:"SIMPLE_CHECK"}),jsx(Fe,{children:"Aplicar"})]})]})]})};_t.displayName="SortModal";var At=memo(_t);var Et=({columns:e,fields:t,preferredFieldOrder:o})=>{let i=useMemo(()=>new Map(e.map(l=>[l.field,l])),[e]),n=useMemo(()=>new Map(t?.map(l=>[l.name,l])||[]),[t]);return {orderedColumns:useMemo(()=>{if(!o||o.length===0||!t)return e;let l="ACTIONS",m=o.filter(p=>p!==l),s=new Set,d=[],f=p=>{let c=n.get(p);if(!c)return;let a=i.get(c.name);!a||s.has(c.name)||(d.push(a),s.add(c.name));};return m.forEach(p=>{f(p);}),t.forEach(p=>{if(p.name===l||m.includes(p.name))return;let c=i.get(p.name);!c||s.has(p.name)||(d.push(c),s.add(p.name));}),f(l),d.length===0?e:d},[e,i,n,o,t]),columnsByFieldId:i,fieldsByName:n}};function _r(e){return e.name}var vt=({fields:e,columnsByFieldId:t,defaultVisibleFieldNames:o,columnVisibilityStorageKey:i,onColumnVisibilityModelChange:n})=>{let r=!!i,[l,m]=a$4(i||"__dynamic-data-view:columns__",void 0,{initializeWithValue:r}),s=useMemo(()=>{if(!e)return;let f={};if(e.forEach(p=>{let c=_r(p);if(!t.has(c))return;let a;if(r&&l){let u=l[c];typeof u=="boolean"&&(a=u);}a===void 0&&o&&o.length>0&&(a=o.includes(p.name)),typeof a=="boolean"&&(f[c]=a);}),Object.keys(f).length!==0)return {columns:{columnVisibilityModel:f}}},[t,o,e,r,l]),d=useCallback(f=>{r&&m(f),n&&n(f);},[r,n,m]);return {initialState:s,handleColumnVisibilityModelChange:d}};var N={IMAGE_WIDTH:90,MIN_WIDTH:130,ENTITY_MIN_WIDTH:100,ENTITY_FLEX:.5,ID_MIN_WIDTH:200,ID_FLEX:1,ACTIONS_WIDTH:80},Te={READ_ONLY:"READ_ONLY",READ_AND_WRITE:"READ_AND_WRITE"},Mt=["price","base_price","minimum_value","maximum_value","minimum_installment_value"];var Ar=(e,t)=>({field:e.name,headerName:e.description,sortable:!1,width:N.IMAGE_WIDTH,resizable:!1,headerAlign:"center",align:"center",renderCell:o=>t(e,o.row)}),Er=(e,t)=>({field:e.name,headerName:e.description,minWidth:N.ID_MIN_WIDTH,flex:N.ID_FLEX,renderCell:o=>t(e,o.row)}),vr=(e,t)=>({field:e.name,headerName:e.description,minWidth:N.ENTITY_MIN_WIDTH,flex:N.ENTITY_FLEX,renderCell:o=>t(e,o.row)}),Mr=(e,t)=>({field:e.name,headerName:e.description,minWidth:N.MIN_WIDTH,renderCell:o=>t(e,o.row)}),wr=(e,t)=>({field:e.name,headerName:"A\xE7\xF5es",width:N.ACTIONS_WIDTH,sortable:!1,resizable:!1,disableReorder:!0,headerAlign:"center",disableColumnMenu:!0,align:"center",renderCell:o=>t(e,o.row)}),wt=(e,t)=>e.name===t?.id_field_name||e.name==="name"?Er:e.name==="ACTIONS"?wr:e.type==="FILE"?Ar:e.type==="ENTITY"?vr:Mr;var Lt=({metadata:e,renderCell:t,columnStrategies:o})=>useMemo(()=>{if(!e?.fields)return [];let i=new Map;return e.fields.filter(r=>r.access_type===Te.READ_ONLY||r.access_type===Te.READ_AND_WRITE?!0:r.name==="ACTIONS"||r.name===e?.id_field_name||r.name==="NAME").forEach(r=>{if(i.has(r.name))return;let m=(o?.[r.name]??wt(r,e))(r,t,e);i.set(r.name,m);}),Array.from(i.values())},[o,e,t]);var Pt=e=>e?.groups?.[0]?.conditionals?e.groups[0].conditionals.map(t=>({id:a$5(),operator:e.groups[0].operator,fieldName:t.fieldName,conditional:t.conditional,value:t.value})):[],Ot=({fields:e,initialFilter:t})=>{let[o,i]=useState(!1),[n,r]=useState(()=>Pt(t)),[l,m]=useState(t),[s,d]=useState(()=>Pt(t)),f=useRef([]),p=useCallback(()=>{f.current=n.map(C=>({...C})),d(n.map(C=>({...C}))),i(!0);},[n]),c=()=>i(!1),a=useCallback(()=>{let C=e.filter(R=>R.available_filter_conditions?.length>0);if(C.length===0)return;let S=s.map(R=>R.fieldName),F=C.filter(R=>!S.includes(R.filter_field_name??R.name));if(F.length===0)return;let E=s.length>0?s[0].operator:"AND",b=F[0],_={id:a$5(),operator:E,fieldName:b.filter_field_name??b.name,conditional:Ze(b),value:[]};d(R=>[...R,_]);},[e,s]),u=useCallback((C,S)=>{d(F=>{let E=F.find(b=>b.id===C);if(!E)return F;if(S.operator&&S.operator!==E.operator){let b=S.operator;return F.map(_=>_.id===C?{..._,...S}:{..._,operator:b})}return F.map(b=>b.id===C?{...b,...S}:b)});},[]),L=useCallback(C=>{d(S=>S.filter(F=>F.id!==C));},[]),A=()=>{d([]),r([]),m(void 0);},ie=()=>{let C=et(s);return r(s.map(S=>({...S}))),m(C),i(!1),C},B=()=>{d(f.current.map(C=>({...C}))),i(!1);},ne=n.some(q),W=n.filter(q).length;return {conditions:s,filter:l,isOpen:o,hasActiveFilters:ne,activeFiltersCount:W,openDrawer:p,closeDrawer:c,addCondition:a,updateCondition:u,removeCondition:L,clearAllFilters:A,applyFilters:ie,cancelChanges:B}};var Wt=e=>{try{let t=localStorage.getItem(e);return t?JSON.parse(t):void 0}catch{return}},Gt=(e,t)=>{try{t===void 0?localStorage.removeItem(e):localStorage.setItem(e,JSON.stringify(t));}catch{}},Ut=(e,t,o)=>{let i=`${e}:filter`,[n,r]=useState(()=>Wt(i)||t);return useEffect(()=>{t!==void 0&&r(t);},[t]),{filter:n,setFilter:m=>{r(m),Gt(i,m),o?.(m);}}},Vt=(e,t,o)=>{let i=`${e}:sort`,[n,r]=useState(()=>Wt(i)||t);return useEffect(()=>{t!==void 0&&r(t);},[t]),{sort:n,setSort:m=>{r(m),Gt(i,m),o?.(m);}}};var Ht=({sort:e,onSortChange:t})=>{let o=useMemo(()=>e?[{field:e.fieldName,sort:e.sortType.toLowerCase()}]:[],[e]),i=useCallback(n=>{if(!t)return;let r=n[0];if(!r||!r.sort){t(void 0);return}let l={fieldName:r.field,sortType:r.sort.toUpperCase()};t(l);},[t]);return {sortModel:o,handleSortModelChange:i}};var zt=()=>({name:"ACTIONS",description:"",filter_field_name:null,type:"TEXT",metadata:null,access_type:"READ_ONLY",relation_field_name:null,available_filter_conditions:[]}),Re=e=>e.fields.some(o=>o.name==="ACTIONS")?e:{...e,fields:[...e.fields,zt()]};var Wr=({value:e,format:t})=>e==null?"-":d(e,t),De=memo(Wr);var Ur=({value:e,format:t})=>e==null?"-":c(e,t),xe=memo(Ur);var zr=({value:e,field:t})=>{if(!t.metadata||typeof e!="object"||e===null)return e?String(e):"-";let o=e[t.metadata.description_field_name];return o?jsx(Hr,{label:String(o),variant:"outlined",size:"small",sx:{width:"fit-content",color:"text.secondary",borderColor:"divider",borderRadius:3}}):null},Ne=memo(zr);var $r=({value:e,trueIcon:t="STAR_02",falseIcon:o="STAR",color:i="primary.main",width:n=18})=>jsx(a,{icon:e?t:o,color:i,width:n}),Kr=memo($r);var qt=styled("span")(({theme:e,isActive:t})=>({display:"inline-flex",alignItems:"center",justifyContent:"center",padding:e.spacing(.2,1),borderRadius:e.shape.borderRadius,fontSize:"0.75rem",fontWeight:600,width:"fit-content",height:"auto",lineHeight:"1.25rem",whiteSpace:"nowrap",margin:"auto",backgroundColor:t?e.palette.success.lighter||"#00A76F29":e.palette.warning.lighter||"#FF563029",color:t?e.palette.success.darker||"#007867":e.palette.warning.darker||"#B71D18"})),$t=styled(Q,{shouldForwardProp:e=>!["size","noImage","clickable"].includes(e)})(({theme:e,size:t,noImage:o,clickable:i})=>({width:t,height:t,minWidth:t,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",overflow:"hidden",cursor:i?"pointer":"default",transition:"opacity 0.2s ease-in-out",color:e.palette.text.disabled,...o&&{border:`1px dashed ${e.palette.divider}`,backgroundColor:e.palette.grey[100]},...i&&{"&:hover":{opacity:.8}},"& img":{width:"100%",height:"100%",objectFit:"cover",borderRadius:"50%"},[e.breakpoints.down("sm")]:{justifyContent:"flex-start",alignItems:"flex-start"}}));var Jr=({imageResourceId:e,getImageUrl:t,size:o=48,alt:i="Imagem",onClick:n,sx:r})=>{let l=!!e,m=l&&t?t(e):void 0;return jsx($t,{size:o,noImage:!l,clickable:!!n,onClick:n,sx:r,children:m?jsx("img",{src:m,alt:i}):jsx(a,{icon:"SEARCH_IMAGE",width:Math.round(o/2),color:"text.disabled"})})},Zr=memo(Jr);var ti=({id:e,displayName:t,copyMessage:o="ID copiado!"})=>jsxs(Nt,{height:1,justifyContent:"center",children:[jsx(Se,{variant:"subtitle2",noWrap:!0,title:t,children:t}),jsxs(Nt,{direction:"row",gap:1,alignItems:"center",children:[jsxs(Se,{color:"grey.600",variant:"body2",noWrap:!0,children:["ID: ",e]}),jsx(a$2,{toCopy:e,message:o})]})]}),oi=memo(ti);var ai=({value:e,isCurrency:t=!1})=>e==null?"-":jsx(Nt,{direction:"row",alignItems:"center",height:"100%",children:jsx(Se,{variant:"body2",noWrap:!0,width:"fit-content",children:t?h(Number(e)):a$3(Number(e))})}),Ee=memo(ai);var si=({active:e,activeLabel:t="Ativo",inactiveLabel:o="Inativo"})=>jsx(qt,{isActive:e,children:e?t:o}),ve=memo(si);var ui=e=>e.replace(/<[^>]*>/g,"").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'").trim(),fi=({value:e,showCopyButton:t=!1,copyMessage:o="Copiado",copyLabel:i,mask:n})=>{if(!e)return "-";let r=String(e),l=n?n(r):ui(r);return t?jsxs(Nt,{direction:"row",gap:1,alignItems:"center",children:[jsx(Se,{variant:"body2",noWrap:!0,children:l}),jsx(a$2,{toCopy:r,message:o,label:i})]}):l},Me=memo(fi);function gi(e){return Mt.includes(e)}var Zt=e=>{let{onRowAction:t}=e,o=(i,n)=>{let r=n[i.name];if(i.name==="ACTIONS")return t?.(n.id,n);switch(i.type){case"BOOLEAN":return jsx(ve,{active:!!r,activeLabel:"Ativo",inactiveLabel:"Inativo"});case"DATE":return jsx(De,{value:r});case"DATETIME":return jsx(xe,{value:r});case"DECIMAL":case"INTEGER":return jsx(Ee,{value:r,isCurrency:gi(i.name)});case"FILE":case"ENTITY":return jsx(Ne,{value:r,field:i});case"TEXT":default:return jsx(Me,{value:r})}};return o.displayName="CellRendererComponent",o};var bi=({title:e,metadata:t,data:o,isLoading:i,isFetching:n,page:r,perPage:l,searchValue:m,onSearchChange:s,onSearch:d,onPaginationChange:f,onAdd:p,onRowAction:c,onRowDoubleClick:a,actions:u,moreActions:L,slots:A,mobileRender:ie,containerHeight:B=600,showColumnButton:ne=!1,showFilterButton:W=!1,filter:C,onFilterChange:S,sort:F,onSortChange:E,defaultVisibleFieldNames:b$1,preferredFieldOrder:_,columnStrategies:R,onColumnVisibilityModelChange:ro,storageKey:ae})=>{let{items:G=[],total:io=0}=o||{},U=useMemo(()=>{if(t)return t;if(G.length>0){let x=G[0],z=Object.keys(x).map(We=>({name:We,type:"TEXT",description:We,filter_field_name:null,metadata:null,access_type:"READ_ONLY",relation_field_name:null,available_filter_conditions:[]}));return {name:"loading",description:"Loading...",id_field_name:"id",description_field_name:z[0]?.name||"id",access_type:"READ_ONLY",fields:z}}},[t,G]),P=useMemo(()=>U&&c?Re(U):U,[U,c]),le=useMemo(()=>P?.fields||[],[P]),no=useMemo(()=>Zt({onRowAction:c}),[c]),ao=Lt({metadata:P,renderCell:no,columnStrategies:R}),{orderedColumns:lo,columnsByFieldId:so}=Et({columns:ao,fields:P?.fields,preferredFieldOrder:_}),{initialState:mo,handleColumnVisibilityModelChange:po}=vt({fields:P?.fields,columnsByFieldId:so,defaultVisibleFieldNames:b$1,columnVisibilityStorageKey:`${ae}:columns`,onColumnVisibilityModelChange:ro}),co=useCallback(x=>{if(!a)return;let z=x.id?.toString()||"";a(z,x.row);},[a]),V=b("down","md"),[uo,se]=useState(null),{filter:fo,setFilter:H}=Ut(ae,C,S),{sort:Co,setSort:we}=Vt(ae,F,E),go=C??fo,me=F??Co,{sortModel:yo,handleSortModelChange:So}=Ht({sort:me,onSortChange:we}),{conditions:bo,isOpen:ho,openDrawer:de,closeDrawer:Le,addCondition:Fo,updateCondition:Io,removeCondition:To,clearAllFilters:Pe,applyFilters:Oe,cancelChanges:ke,hasActiveFilters:Ro,activeFiltersCount:Do}=Ot({fields:le,initialFilter:go}),xo=useCallback(()=>{let x=Oe();H(x);},[Oe,H]),No=useCallback(()=>{Pe(),H(void 0);},[Pe,H]),_o=useCallback(x=>{V?de():(de(),se(x.currentTarget));},[V,de]),Ao=useCallback(()=>{ke(),se(null);},[ke]),[Eo,Be]=useState(!1),vo=useCallback(()=>{se(null),Le();},[Le]);return jsxs(Fragment,{children:[jsx(d$1,{title:e,columns:lo,rows:G,mobileRender:ie,rowCount:io,loading:i||!t,fetching:n,searchValue:m,onSearch:d,onSearchChange:s,paginationModel:{page:r,pageSize:l},onPaginationChange:f,actions:u,moreActions:L,onAdd:p,onRowDoubleClick:a?co:void 0,disableRowSelectionOnClick:!0,slots:A,initialState:mo,showColumnButton:ne,containerProps:{height:B,maxHeight:B},onColumnVisibilityModelChange:po,filterButton:jsx(je,{showFilterButton:W,isMobile:V,hasActiveFilters:Ro,activeFiltersCount:Do,sort:me,onFilterClick:_o,onSortClick:()=>Be(!0)}),sortingMode:"server",sortModel:yo,onSortModelChange:So,disableColumnFilter:!0}),t&&jsxs(Fragment,{children:[jsx(ft,{showFilterButton:W,isOpen:ho,filterAnchorEl:uo,fields:le,conditions:bo,isMobile:V,onClose:vo,onAddCondition:Fo,onUpdateCondition:Io,onRemoveCondition:To,onApply:xo,onClear:No,onCancel:Ao}),jsx(At,{open:Eo,onClose:()=>Be(!1),fields:le,sort:me,onSortChange:we})]})]})},hi=memo(bi,Po);var Fi=({metadata:e,columnVisibilityModel:t,defaultVisibleFields:o})=>{if(!e?.fields)return;let n=e.fields.map(r=>r.name).filter(r=>r==="ACTIONS"?!1:t?t[r]!==!1:o?.includes(r)??!0);return o?n.sort((r,l)=>{let m=o.indexOf(r),s=o.indexOf(l);return m-s||0}):n};
56
56
 
57
- export { De as DateRenderer, xe as DateTimeRenderer, Ne as EntityRenderer, Xr as IconRenderer, ei as ImageRenderer, ri as NameRenderer, Ee as NumberRenderer, ve as StatusRenderer, Me as TextRenderer, Re as addActionsFieldToMetadata, Ii as buildVisibleFields, zt as createActionsField, Fi as default };
57
+ export { De as DateRenderer, xe as DateTimeRenderer, Ne as EntityRenderer, Kr as IconRenderer, Zr as ImageRenderer, oi as NameRenderer, Ee as NumberRenderer, ve as StatusRenderer, Me as TextRenderer, Re as addActionsFieldToMetadata, Fi as buildVisibleFields, zt as createActionsField, hi as default };
58
58
  //# sourceMappingURL=out.js.map
59
59
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/DynamicDataView/DynamicDataView.tsx","../../../src/components/DynamicDataView/components/FilterButton.tsx","../../../src/components/DynamicDataView/components/FiltersSection.tsx","../../../src/components/DynamicDataView/components/filters/FiltersContainer.tsx","../../../src/components/DynamicDataView/components/filters/FiltersContent.tsx","../../../src/components/DynamicDataView/utils/filter.ts","../../../src/components/DynamicDataView/components/filters/FiltersList.tsx","../../../src/components/DynamicDataView/components/filters/FilterRow.tsx","../../../src/components/DynamicDataView/constants/filter.ts","../../../src/components/DynamicDataView/components/filters/OperatorSelect.tsx","../../../src/components/DynamicDataView/components/filters/styles.ts","../../../src/components/DynamicDataView/components/SortModal/index.tsx","../../../src/components/DynamicDataView/components/SortModal/style.ts","../../../src/components/DynamicDataView/hooks/useColumnOrdering.ts","../../../src/components/DynamicDataView/hooks/useColumnVisibility.ts","../../../src/components/DynamicDataView/hooks/useDynamicColumns.ts","../../../src/components/DynamicDataView/constants/columnDefaults.ts","../../../src/components/DynamicDataView/utils/columnStrategies.ts","../../../src/components/DynamicDataView/hooks/useFilters.ts","../../../src/components/DynamicDataView/hooks/useFilterSortStorage.ts","../../../src/components/DynamicDataView/hooks/useSorting.ts","../../../src/components/DynamicDataView/utils/addActionsField.ts","../../../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/ImageRenderer.tsx","../../../src/components/DynamicDataView/renderers/style.ts","../../../src/components/DynamicDataView/renderers/NameRenderer.tsx","../../../src/components/DynamicDataView/renderers/NumberRenderer.tsx","../../../src/components/DynamicDataView/renderers/StatusRenderer.tsx","../../../src/components/DynamicDataView/renderers/TextRenderer.tsx","../../../src/components/DynamicDataView/utils/createCellRenderer.tsx","../../../src/components/DynamicDataView/utils/fields.ts"],"names":["memo","useCallback","useMemo","useState","isEqual","Badge","Button","IconButton","Stack","jsx","jsxs","FilterButton","showFilterButton","isMobile","hasActiveFilters","activeFiltersCount","sort","onFilterClick","onSortClick","Icon_default","ToolbarActionsDivider","FilterButton_default","Divider","Typography","getFilterableFields","fields","field","getDefaultCondition","type","available_filter_conditions","isValidCondition","condition","buildFilterFromConditions","conditions","validConditions","c","FormControl","InputLabel","MenuItem","Select","TextField","CONDITION_LABELS","OperatorSelect","value","onChange","totalConditions","isFirst","e","OperatorSelect_default","ellipsisStyle","FilterRow","onRemove","selectedField","f","availableConditions","isValueDisabled","handleFieldChange","fieldName","newField","defaultCondition","handleConditionChange","conditional","handleValueChange","handleOperatorChange","operator","cond","FilterRow_default","Fragment","FiltersList","filterableFields","onUpdateCondition","onRemoveCondition","handleUpdateCondition","updated","handleRemoveCondition","id","usedFieldNames","name","getAvailableFields","currentFieldName","index","FiltersList_default","Box","styled","Container","Header","theme","Content","Footer","FiltersContent","onClose","onAddCondition","onApply","onClear","onCancel","hasConditions","handleApply","handleClear","handleCancel","FiltersContent_default","FiltersContainer","props","ResponsivePopover_default","FiltersContainer_default","FiltersSection","isOpen","filterAnchorEl","FiltersSection_default","useEffect","Dialog","DialogActions","DialogContent","DialogTitle","StyledDialog","StyledDialogTitle","StyledDialogContent","StyledDialogActions","ApplyButton","LabelButton","SortModal","open","onSortChange","setSelectedField","selectedDirection","setSelectedDirection","sortableFields","selectedFieldObj","isNumberField","SortModal_default","useColumnOrdering","columns","preferredFieldOrder","columnsByFieldId","column","fieldsByName","actionFieldName","preferredWithoutActions","usedColumnFieldIds","ordered","pushColumnForField","getColumnFieldIdFromField","useColumnVisibility","defaultVisibleFieldNames","columnVisibilityStorageKey","onColumnVisibilityModelChange","hasStorageKey","storedVisibilityModel","setStoredVisibilityModel","useLocalStorage_default","initialState","visibilityModel","columnFieldId","visible","stored","handleColumnVisibilityModelChange","model","COLUMN_DEFAULTS","ACCESS_TYPES","CURRENCY_FIELD_NAMES","createImageColumn","renderCell","params","createIdColumn","createEntityColumn","createDefaultColumn","createActionsColumn","getColumnStrategy","metadata","useDynamicColumns","columnStrategies","columnsMap","useRef","parseInitialConditions","initialFilter","uuidv4","useFilters","setIsOpen","appliedConditions","setAppliedConditions","appliedFilter","setAppliedFilter","setConditions","snapshotRef","openDrawer","closeDrawer","addCondition","availableFields","currentOperator","firstField","newCondition","prev","updateCondition","changes","targetCondition","newOperator","removeCondition","clearAllFilters","applyFilters","filter","cancelChanges","getStoredValue","key","item","setStoredValue","useFilterStorage","storageKey","externalFilter","onFilterChange","filterKey","internalFilter","setInternalFilter","newFilter","useSortStorage","externalSort","sortKey","internalSort","setInternalSort","newSort","useSorting","sortModel","handleSortModelChange","firstItem","createActionsField","addActionsFieldToMetadata","DateRenderer","format","fDate","DateRenderer_default","DateTimeRenderer","fDateTime","DateTimeRenderer_default","Chip","EntityRenderer","entityValue","EntityRenderer_default","IconRenderer","trueIcon","falseIcon","color","width","IconRenderer_default","StatusLabel","isActive","ImageContainer","prop","size","noImage","clickable","ImageRenderer","imageResourceId","getImageUrl","alt","onClick","sx","hasImage","imageUrl","ImageRenderer_default","NameRenderer","displayName","copyMessage","CopyButton_default","NameRenderer_default","NumberRenderer","isCurrency","fCurrencyBRL","fNumber","NumberRenderer_default","StatusRenderer","active","activeLabel","inactiveLabel","StatusRenderer_default","sanitizeHtml","text","TextRenderer","showCopyButton","copyLabel","mask","stringValue","formattedValue","TextRenderer_default","getIsCurrency","createCellRenderer","context","onRowAction","CellRendererComponent","row","DynamicDataView","title","data","isLoading","isFetching","page","perPage","searchValue","onSearchChange","onSearch","onPaginationChange","onAdd","onRowDoubleClick","actions","moreActions","hideHeader","slots","mobileRender","containerHeight","showColumnButton","rows","total","preloadedMetadata","firstRow","effectiveMetadata","effectiveMetadataFields","orderedColumns","handleRowDoubleClick","rowId","useResponsive_default","setFilterAnchorEl","storedFilter","setStoredFilter","storedSort","setStoredSort","effectiveFilter","effectiveSort","handleApplyFilters","handleClearFilters","handleFilterButtonClick","event","handleCancelFilters","isSortModalOpen","setIsSortModalOpen","handleFiltersClose","DataView_default","DynamicDataView_default","buildVisibleFields","columnVisibilityModel","defaultVisibleFields","a","b","indexA","indexB"],"mappings":"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","sourcesContent":["import { memo, useCallback, useMemo, useState } from 'react';\nimport isEqual from 'react-fast-compare';\nimport { AccessType, DataType } from 'model/entity-metadata';\n\nimport useResponsive from 'hooks/useResponsive';\n\nimport DataView from '../DataView';\n\nimport FilterButton from './components/FilterButton';\nimport FiltersSection from './components/FiltersSection';\nimport SortModal from './components/SortModal';\nimport { useColumnOrdering } from './hooks/useColumnOrdering';\nimport { useColumnVisibility } from './hooks/useColumnVisibility';\nimport { useDynamicColumns } from './hooks/useDynamicColumns';\nimport { useFilters } from './hooks/useFilters';\nimport { useFilterStorage, useSortStorage } from './hooks/useFilterSortStorage';\nimport { useSorting } from './hooks/useSorting';\nimport { addActionsFieldToMetadata } from './utils/addActionsField';\nimport { createCellRenderer } from './utils/createCellRenderer';\nimport { DynamicDataViewProps, DynamicRowData } from './props';\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 showFilterButton = false,\n filter,\n onFilterChange,\n sort,\n onSortChange,\n defaultVisibleFieldNames,\n preferredFieldOrder,\n columnStrategies,\n onColumnVisibilityModelChange,\n storageKey,\n}: DynamicDataViewProps<T>) => {\n const { items: rows = [], total = 0 } = data || {};\n\n // Criar metadata temporário baseado em data quando metadata não disponível\n const preloadedMetadata = useMemo(() => {\n if (metadata) return metadata;\n\n // Se não tem metadata mas tem dados, criar metadata baseado nas keys do primeiro item\n if (rows.length > 0) {\n const firstRow = rows[0];\n const fields = Object.keys(firstRow).map(key => ({\n name: key,\n type: DataType.TEXT,\n description: key,\n filter_field_name: null,\n metadata: null,\n access_type: AccessType.READ_ONLY,\n relation_field_name: null,\n available_filter_conditions: [],\n }));\n\n return {\n name: 'loading',\n description: 'Loading...',\n id_field_name: 'id',\n description_field_name: fields[0]?.name || 'id',\n access_type: AccessType.READ_ONLY,\n fields,\n };\n }\n\n return undefined;\n }, [metadata, rows]);\n\n const effectiveMetadata = useMemo(\n () =>\n preloadedMetadata && onRowAction\n ? addActionsFieldToMetadata(preloadedMetadata)\n : preloadedMetadata,\n [preloadedMetadata, onRowAction],\n );\n\n const effectiveMetadataFields = useMemo(\n () => effectiveMetadata?.fields || [],\n [effectiveMetadata],\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 { orderedColumns, columnsByFieldId } = useColumnOrdering({\n columns,\n fields: effectiveMetadata?.fields,\n preferredFieldOrder,\n });\n\n const { initialState, handleColumnVisibilityModelChange } =\n useColumnVisibility({\n fields: effectiveMetadata?.fields,\n columnsByFieldId,\n defaultVisibleFieldNames,\n columnVisibilityStorageKey: `${storageKey}:columns`,\n onColumnVisibilityModelChange,\n });\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 const isMobile = useResponsive('down', 'md');\n const [filterAnchorEl, setFilterAnchorEl] = useState<HTMLElement | null>(\n null,\n );\n\n const { filter: storedFilter, setFilter: setStoredFilter } = useFilterStorage(\n storageKey,\n filter,\n onFilterChange,\n );\n\n const { sort: storedSort, setSort: setStoredSort } = useSortStorage(\n storageKey,\n sort,\n onSortChange,\n );\n\n const effectiveFilter = filter ?? storedFilter;\n const effectiveSort = sort ?? storedSort;\n\n const { sortModel, handleSortModelChange } = useSorting({\n sort: effectiveSort,\n onSortChange: setStoredSort,\n });\n\n const {\n conditions,\n isOpen,\n openDrawer,\n closeDrawer,\n addCondition,\n updateCondition,\n removeCondition,\n clearAllFilters,\n applyFilters,\n cancelChanges,\n hasActiveFilters,\n activeFiltersCount,\n } = useFilters({\n fields: effectiveMetadataFields,\n initialFilter: effectiveFilter,\n });\n\n const handleApplyFilters = useCallback(() => {\n const newFilter = applyFilters();\n setStoredFilter(newFilter);\n }, [applyFilters, setStoredFilter]);\n\n const handleClearFilters = useCallback(() => {\n clearAllFilters();\n setStoredFilter(undefined);\n }, [clearAllFilters, setStoredFilter]);\n\n const handleFilterButtonClick = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n if (isMobile) {\n openDrawer();\n } else {\n openDrawer();\n setFilterAnchorEl(event.currentTarget);\n }\n },\n [isMobile, openDrawer],\n );\n\n const handleCancelFilters = useCallback(() => {\n cancelChanges();\n setFilterAnchorEl(null);\n }, [cancelChanges]);\n\n const [isSortModalOpen, setIsSortModalOpen] = useState(false);\n\n const handleFiltersClose = useCallback(() => {\n setFilterAnchorEl(null);\n closeDrawer();\n }, [closeDrawer]);\n\n return (\n <>\n <DataView<T>\n title={title}\n columns={orderedColumns}\n rows={rows}\n mobileRender={mobileRender}\n rowCount={total}\n loading={isLoading || !metadata}\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 onColumnVisibilityModelChange={handleColumnVisibilityModelChange}\n filterButton={\n <FilterButton\n showFilterButton={showFilterButton}\n isMobile={isMobile}\n hasActiveFilters={hasActiveFilters}\n activeFiltersCount={activeFiltersCount}\n sort={effectiveSort}\n onFilterClick={handleFilterButtonClick}\n onSortClick={() => setIsSortModalOpen(true)}\n />\n }\n sortingMode=\"server\"\n sortModel={sortModel}\n onSortModelChange={handleSortModelChange}\n disableColumnFilter\n />\n {metadata && (\n <>\n <FiltersSection\n showFilterButton={showFilterButton}\n isOpen={isOpen}\n filterAnchorEl={filterAnchorEl}\n fields={effectiveMetadataFields}\n conditions={conditions}\n isMobile={isMobile}\n onClose={handleFiltersClose}\n onAddCondition={addCondition}\n onUpdateCondition={updateCondition}\n onRemoveCondition={removeCondition}\n onApply={handleApplyFilters}\n onClear={handleClearFilters}\n onCancel={handleCancelFilters}\n />\n\n <SortModal\n open={isSortModalOpen}\n onClose={() => setIsSortModalOpen(false)}\n fields={effectiveMetadataFields}\n sort={effectiveSort}\n onSortChange={setStoredSort}\n />\n </>\n )}\n </>\n );\n};\n\nexport default memo(DynamicDataView, isEqual) as typeof DynamicDataView;\nexport type { DynamicDataViewProps, DynamicRowData } from './props';\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport Badge from '@mui/material/Badge';\nimport Button from '@mui/material/Button';\nimport IconButton from '@mui/material/IconButton';\nimport Stack from '@mui/material/Stack';\n\nimport { ToolbarActionsDivider } from 'components/DataView';\nimport Icon from 'components/Icon';\n\nimport { FilterButtonProps } from '../props';\n\nconst FilterButton = ({\n showFilterButton,\n isMobile,\n hasActiveFilters,\n activeFiltersCount,\n sort,\n onFilterClick,\n onSortClick,\n}: FilterButtonProps) => {\n if (!showFilterButton) return null;\n\n if (isMobile) {\n return (\n <Stack direction=\"row\" spacing={0.5}>\n <Badge\n badgeContent={activeFiltersCount}\n color=\"primary\"\n invisible={activeFiltersCount === 0}\n sx={{\n '& .MuiBadge-badge': {\n transform: 'scale(0.9) translate(10px, 9px)',\n opacity: activeFiltersCount === 0 ? 0 : 1,\n },\n }}\n >\n <IconButton\n color={hasActiveFilters ? 'primary' : 'default'}\n onClick={onFilterClick}\n size=\"small\"\n aria-label=\"Filtrar\"\n sx={{ overflow: 'visible' }}\n >\n <Icon icon=\"FILTER_VERTICAL\" />\n </IconButton>\n </Badge>\n\n <ToolbarActionsDivider\n sx={{ height: 16 }}\n orientation=\"vertical\"\n flexItem\n />\n\n <IconButton\n color={sort ? 'primary' : 'default'}\n onClick={onSortClick}\n size=\"small\"\n aria-label=\"Ordenar\"\n >\n <Icon\n icon={sort?.sortType === 'DESC' ? 'SORTING_DESC' : 'SORTING_ASC'}\n />\n </IconButton>\n </Stack>\n );\n }\n\n return (\n <Badge\n badgeContent={activeFiltersCount}\n color=\"primary\"\n invisible={activeFiltersCount === 0}\n sx={{\n '& .MuiBadge-badge': activeFiltersCount\n ? {\n transform: 'scale(0.9) translate(-3px, 7px)',\n position: 'relative',\n opacity: 1,\n transition: 'none',\n }\n : {\n transition: 'none',\n opacity: 0,\n },\n }}\n >\n <Button\n variant=\"text\"\n color={hasActiveFilters ? 'primary' : 'inherit'}\n startIcon={<Icon icon=\"FILTER_VERTICAL\" />}\n onClick={onFilterClick}\n size=\"small\"\n >\n Filtrar\n </Button>\n </Badge>\n );\n};\n\nexport default memo(FilterButton, isEqual);\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\n\nimport { FiltersSectionProps } from '../props';\n\nimport FiltersContainer from './filters/FiltersContainer';\n\nconst FiltersSection = ({\n showFilterButton,\n isOpen,\n filterAnchorEl,\n fields,\n conditions,\n isMobile,\n onClose,\n onAddCondition,\n onUpdateCondition,\n onRemoveCondition,\n onApply,\n onClear,\n onCancel,\n}: FiltersSectionProps) => {\n if (!showFilterButton) return null;\n\n return (\n <FiltersContainer\n open={isOpen || Boolean(filterAnchorEl)}\n anchorEl={filterAnchorEl}\n onClose={onClose}\n fields={fields}\n conditions={conditions}\n onAddCondition={onAddCondition}\n onUpdateCondition={onUpdateCondition}\n onRemoveCondition={onRemoveCondition}\n onApply={onApply}\n onClear={onClear}\n onCancel={onCancel}\n isMobileProp={isMobile}\n />\n );\n};\n\nexport default memo(FiltersSection, isEqual);\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\n\nimport ResponsivePopover from 'components/ResponsivePopover';\n\nimport FiltersContent from './FiltersContent';\nimport type { FiltersContainerProps } from './props';\n\nconst FiltersContainer = (props: FiltersContainerProps) => {\n return (\n <ResponsivePopover\n open={props.open}\n onClose={props.onClose}\n anchorEl={props.anchorEl}\n isMobile={props.isMobileProp}\n popoverProps={{\n slotProps: {\n paper: {\n sx: {\n width: 520,\n maxWidth: 'calc(100vw - 24px)',\n maxHeight: 600,\n mt: 1,\n },\n },\n },\n }}\n drawerProps={{\n anchor: 'right',\n PaperProps: {\n sx: {\n width: '100%',\n maxWidth: '100%',\n height: '100%',\n maxHeight: '100%',\n borderRadius: 0,\n },\n },\n }}\n >\n <FiltersContent {...props} />\n </ResponsivePopover>\n );\n};\n\nexport default memo(FiltersContainer, isEqual);\n","import { memo, useCallback } from 'react';\nimport isEqual from 'react-fast-compare';\nimport Button from '@mui/material/Button';\nimport Divider from '@mui/material/Divider';\nimport IconButton from '@mui/material/IconButton';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport Icon from 'components/Icon';\n\nimport { getFilterableFields } from '../../utils/filter';\n\nimport FiltersList from './FiltersList';\nimport type { FiltersPopoverProps } from './props';\nimport { Container, Content, Footer, Header } from './styles';\n\nconst FiltersContent = ({\n onClose,\n fields,\n conditions,\n onAddCondition,\n onUpdateCondition,\n onRemoveCondition,\n onApply,\n onClear,\n onCancel,\n}: FiltersPopoverProps) => {\n const filterableFields = getFilterableFields(fields);\n const hasConditions = conditions.length > 0;\n\n const handleApply = useCallback(() => {\n onApply();\n onClose();\n }, [onApply, onClose]);\n\n const handleClear = useCallback(() => {\n onClear();\n onClose();\n }, [onClear, onClose]);\n\n const handleCancel = useCallback(() => {\n onCancel();\n }, [onCancel]);\n\n return (\n <Container>\n <Header>\n <Typography variant=\"overline\" fontWeight={600} color=\"text.secondary\">\n Defina as condições para filtrar\n </Typography>\n\n <IconButton\n onClick={onAddCondition}\n size=\"small\"\n aria-label=\"Adicionar filtro\"\n title=\"Adicionar filtro\"\n disabled={conditions.length >= filterableFields.length}\n >\n <Icon icon=\"SIMPLE_ADD\" />\n </IconButton>\n </Header>\n\n <Divider />\n\n <Content>\n <FiltersList\n filterableFields={filterableFields}\n conditions={conditions}\n onUpdateCondition={onUpdateCondition}\n onRemoveCondition={onRemoveCondition}\n />\n </Content>\n\n <Divider />\n\n <Footer>\n <Button variant=\"text\" color=\"inherit\" onClick={handleClear}>\n Limpar\n </Button>\n\n <Stack direction=\"row\" spacing={1}>\n <Button\n variant=\"outlined\"\n color=\"inherit\"\n onClick={handleCancel}\n startIcon={<Icon icon=\"CANCEL_CIRCLE\" />}\n >\n Cancelar\n </Button>\n <Button\n variant=\"contained\"\n onClick={handleApply}\n disabled={!hasConditions}\n startIcon={<Icon icon=\"SIMPLE_CHECK\" />}\n >\n Aplicar\n </Button>\n </Stack>\n </Footer>\n </Container>\n );\n};\n\nexport default memo(FiltersContent, isEqual);\n","import { Condition, DataType, Field } from 'model/entity-metadata';\nimport {\n Filter,\n FilterCondition,\n FilterOperator,\n FilterState,\n} from 'model/filter';\n\n/**\n * Campos filtráveis (campos com condições disponíveis)\n */\nexport const getFilterableFields = (fields: Field[]): Field[] => {\n return fields.filter(\n field =>\n field.available_filter_conditions &&\n field.available_filter_conditions.length > 0 &&\n field.name !== 'ACTIONS',\n );\n};\n\n/**\n * Converte FilterState para formato de API\n */\nexport const buildFilterFromState = (\n state: FilterState,\n): Filter | undefined => {\n const entries = Object.entries(state).filter(\n ([, value]) => value.value.length > 0,\n );\n if (entries.length === 0) return undefined;\n return {\n operator: FilterOperator.AND,\n groups: [\n {\n operator: FilterOperator.AND,\n conditionals: entries.map(([, filterValue]) => ({\n fieldName: filterValue.fieldName,\n conditional: filterValue.conditional,\n value: filterValue.value,\n })),\n },\n ],\n };\n};\n\n/**\n * Retorna o conditional padrão para um tipo de campo\n */\nexport const getDefaultCondition = (field: Field): Condition => {\n const { type, available_filter_conditions } = field;\n if (available_filter_conditions.length === 0) return Condition.EQUALS;\n if (\n type === DataType.TEXT &&\n available_filter_conditions.includes(Condition.LIKE)\n ) {\n return Condition.LIKE;\n }\n return available_filter_conditions[0];\n};\n\n/**\n * Verifica se uma condição é válida (tem valor ou não requer valor)\n */\nexport const isValidCondition = (condition: FilterCondition): boolean => {\n return (\n condition.value.length > 0 ||\n condition.conditional === Condition.IS_NULL ||\n condition.conditional === Condition.IS_NOT_NULL\n );\n};\n\n/**\n * Converte array de FilterCondition para Filter API\n */\nexport const buildFilterFromConditions = (\n conditions: FilterCondition[],\n): Filter | undefined => {\n if (conditions.length === 0) return undefined;\n\n const validConditions = conditions.filter(isValidCondition);\n if (validConditions.length === 0) return undefined;\n\n return {\n operator: FilterOperator.AND,\n groups: [\n {\n operator: validConditions[0]?.operator || FilterOperator.AND,\n conditionals: validConditions.map(c => ({\n fieldName: c.fieldName,\n conditional: c.conditional,\n value: c.value,\n })),\n },\n ],\n };\n};\n","import { memo, useCallback, useMemo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport Typography from '@mui/material/Typography';\nimport type { FilterCondition } from 'model/filter';\n\nimport FilterRow from './FilterRow';\nimport type { FiltersListProps } from './props';\n\nconst FiltersList = ({\n filterableFields,\n conditions,\n onUpdateCondition,\n onRemoveCondition,\n}: FiltersListProps) => {\n const handleUpdateCondition = useCallback(\n (updated: FilterCondition) => {\n onUpdateCondition(updated.id, updated);\n },\n [onUpdateCondition],\n );\n\n const handleRemoveCondition = useCallback(\n (id: string) => () => {\n onRemoveCondition(id);\n },\n [onRemoveCondition],\n );\n\n const usedFieldNames = useMemo(\n () =>\n conditions.map(c => c.fieldName).filter((name): name is string => !!name),\n [conditions],\n );\n\n const getAvailableFields = useCallback(\n (currentFieldName: string | undefined) =>\n filterableFields.filter(\n field =>\n !usedFieldNames.includes(field.name) ||\n field.name === currentFieldName,\n ),\n [filterableFields, usedFieldNames],\n );\n\n if (filterableFields.length === 0) {\n return (\n <Typography variant=\"body2\" color=\"text.secondary\" textAlign=\"center\">\n Nenhum filtro disponível\n </Typography>\n );\n }\n\n if (conditions.length === 0) {\n return (\n <Typography variant=\"body2\" color=\"text.secondary\" textAlign=\"center\">\n Clique em{' '}\n <Typography\n component=\"strong\"\n variant=\"body2\"\n fontWeight={600}\n color=\"text.primary\"\n >\n &quot;+&quot;\n </Typography>{' '}\n para adicionar um filtro\n </Typography>\n );\n }\n\n return (\n <>\n {conditions.map((condition, index) => (\n <FilterRow\n key={condition.id}\n condition={condition}\n fields={getAvailableFields(condition.fieldName)}\n onChange={handleUpdateCondition}\n onRemove={handleRemoveCondition(condition.id)}\n showOperator={index > 0}\n totalConditions={conditions.length}\n isFirst={index === 0}\n />\n ))}\n </>\n );\n};\n\nexport default memo(FiltersList, isEqual);\n","import { memo, useCallback, useMemo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport FormControl from '@mui/material/FormControl';\nimport IconButton from '@mui/material/IconButton';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport Stack from '@mui/material/Stack';\nimport TextField from '@mui/material/TextField';\nimport { Condition } from 'model/entity-metadata';\n\nimport Icon from 'components/Icon';\n\nimport { CONDITION_LABELS } from '../../constants/filter';\n\nimport OperatorSelect from './OperatorSelect';\nimport type { FilterRowProps } from './props';\n\nconst ellipsisStyle = {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n} as const;\n\nconst FilterRow = ({\n condition,\n fields,\n onChange,\n onRemove,\n totalConditions,\n isFirst,\n}: FilterRowProps) => {\n const selectedField = useMemo(\n () =>\n fields.find(f => (f.filter_field_name ?? f.name) === condition.fieldName),\n [fields, condition.fieldName],\n );\n\n const availableConditions = useMemo(\n () => selectedField?.available_filter_conditions || [],\n [selectedField],\n );\n\n const isValueDisabled = useMemo(\n () =>\n !condition.fieldName ||\n condition.conditional === 'IS_NULL' ||\n condition.conditional === 'IS_NOT_NULL',\n [condition.fieldName, condition.conditional],\n );\n\n const handleFieldChange = useCallback(\n (fieldName: string) => {\n const newField = fields.find(\n f => (f.filter_field_name ?? f.name) === fieldName,\n );\n if (!newField) return;\n\n const defaultCondition =\n newField.available_filter_conditions[0] || 'EQUALS';\n\n onChange({\n ...condition,\n fieldName,\n conditional: defaultCondition,\n value: [],\n });\n },\n [fields, condition, onChange],\n );\n\n const handleConditionChange = useCallback(\n (conditional: Condition) => {\n onChange({\n ...condition,\n conditional,\n });\n },\n [condition, onChange],\n );\n\n const handleValueChange = useCallback(\n (value: string) => {\n onChange({\n ...condition,\n value: value ? [value] : [],\n });\n },\n [condition, onChange],\n );\n\n const handleOperatorChange = useCallback(\n (operator: 'AND' | 'OR') => {\n onChange({\n ...condition,\n operator,\n });\n },\n [condition, onChange],\n );\n\n return (\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n <IconButton\n onClick={onRemove}\n size=\"small\"\n aria-label=\"Remover filtro\"\n sx={{ flexShrink: 0 }}\n >\n <Icon icon=\"CLOSE_MARK_BUTTON\" width={18} />\n </IconButton>\n\n <OperatorSelect\n value={condition.operator}\n onChange={handleOperatorChange}\n totalConditions={totalConditions}\n isFirst={isFirst}\n />\n\n <FormControl size=\"small\" sx={{ minWidth: 150, flex: 1 }}>\n <InputLabel id={`field-label-${condition.id}`}>Coluna</InputLabel>\n <Select\n labelId={`field-label-${condition.id}`}\n label=\"Coluna\"\n value={condition.fieldName}\n onChange={e => handleFieldChange(e.target.value)}\n size=\"small\"\n sx={{\n '& .MuiSelect-select': ellipsisStyle,\n }}\n >\n {fields.map(field => (\n <MenuItem\n key={field.name}\n value={field.filter_field_name ?? field.name}\n sx={ellipsisStyle}\n title={field.description || field.name}\n >\n {field.description || field.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n\n <FormControl\n size=\"small\"\n sx={{ minWidth: 90 }}\n disabled={!condition.fieldName}\n >\n <InputLabel id={`condition-label-${condition.id}`}>Condição</InputLabel>\n <Select\n labelId={`condition-label-${condition.id}`}\n label=\"Condição\"\n value={condition.conditional}\n onChange={e => handleConditionChange(e.target.value as Condition)}\n size=\"small\"\n sx={{\n '& .MuiSelect-select': ellipsisStyle,\n }}\n >\n {availableConditions.map(cond => (\n <MenuItem key={cond} value={cond} sx={ellipsisStyle}>\n {CONDITION_LABELS[cond as Condition] || cond}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n\n {selectedField?.type === 'BOOLEAN' ? (\n <FormControl\n size=\"small\"\n sx={{ flex: 1, minWidth: 120 }}\n disabled={isValueDisabled}\n >\n <InputLabel id={`value-label-${condition.id}`}>Valor</InputLabel>\n <Select\n labelId={`value-label-${condition.id}`}\n label=\"Valor\"\n value={condition.value[0] || ''}\n onChange={e => handleValueChange(e.target.value)}\n size=\"small\"\n sx={{\n '& .MuiSelect-select': ellipsisStyle,\n }}\n >\n <MenuItem value=\"true\">Verdadeiro</MenuItem>\n <MenuItem value=\"false\">Falso</MenuItem>\n </Select>\n </FormControl>\n ) : (\n <TextField\n label=\"Filtro\"\n value={condition.value[0] || ''}\n onChange={e => handleValueChange(e.target.value)}\n size=\"small\"\n disabled={isValueDisabled}\n InputLabelProps={{ shrink: true }}\n sx={{ flex: 1, minWidth: 120 }}\n />\n )}\n </Stack>\n );\n};\n\nexport default memo(FilterRow, isEqual);\n","import { Condition } from 'model/entity-metadata';\n\nexport const CONDITION_LABELS: Record<Condition, string> = {\n [Condition.EQUALS]: 'Igual a',\n [Condition.NOT_EQUALS]: 'Diferente de',\n [Condition.LIKE]: 'Contém',\n [Condition.NOT_LIKE]: 'Não contém',\n [Condition.GREATER_THAN]: 'Maior que',\n [Condition.LESS_THAN]: 'Menor que',\n [Condition.GREATER_THAN_OR_EQUAL]: 'Maior ou igual a',\n [Condition.LESS_THAN_OR_EQUAL]: 'Menor ou igual a',\n [Condition.IN]: 'Em',\n [Condition.NOT_IN]: 'Não em',\n [Condition.IS_NULL]: 'É nulo',\n [Condition.IS_NOT_NULL]: 'Não é nulo',\n};\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport Stack from '@mui/material/Stack';\n\nimport type { OperatorSelectProps } from './props';\n\nconst OperatorSelect = ({\n value,\n onChange,\n totalConditions,\n isFirst,\n}: OperatorSelectProps) => {\n if (totalConditions === 1) {\n return null;\n }\n\n if (isFirst) {\n return <Stack sx={{ width: 55, flexShrink: 0 }} />;\n }\n\n return (\n <Select\n value={value}\n onChange={e => onChange(e.target.value as 'AND' | 'OR')}\n size=\"small\"\n sx={{ width: 55, flexShrink: 0 }}\n >\n <MenuItem value=\"AND\">e</MenuItem>\n <MenuItem value=\"OR\">ou</MenuItem>\n </Select>\n );\n};\n\nexport default memo(OperatorSelect, isEqual);\n","import Box from '@mui/material/Box';\nimport { styled } from '@mui/material/styles';\n\n// Estilos baseados no Drawer/Popover para garantir consistência\nexport const Container = styled(Box)({\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n // No popover, a altura será controlada pelo max-height do container\n});\n\nexport const Header = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: theme.spacing(2, 3),\n}));\n\nexport const Content = styled(Box)(({ theme }) => ({\n flex: 1,\n overflowY: 'auto',\n padding: theme.spacing(3),\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(2),\n}));\n\nexport const Footer = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: theme.spacing(2),\n}));\n","import { memo, useCallback, useEffect, useMemo, useState } from 'react';\nimport Button from '@mui/material/Button';\nimport FormControl from '@mui/material/FormControl';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport { SortType } from 'model/filter';\n\nimport Icon from 'components/Icon';\n\nimport { SortModalProps } from './props';\nimport {\n ApplyButton,\n LabelButton,\n StyledDialog,\n StyledDialogActions,\n StyledDialogContent,\n StyledDialogTitle,\n} from './style';\n\nconst SortModal = ({\n open,\n onClose,\n fields,\n sort,\n onSortChange,\n}: SortModalProps) => {\n const [selectedField, setSelectedField] = useState<string>(\n sort?.fieldName || '',\n );\n const [selectedDirection, setSelectedDirection] = useState<SortType>(\n sort?.sortType || SortType.ASC,\n );\n\n const sortableFields = useMemo(\n () =>\n fields.filter(\n field => field.name !== 'ACTIONS' && field.access_type !== 'WRITE_ONLY',\n ),\n [fields],\n );\n\n const selectedFieldObj = useMemo(\n () =>\n fields.find(\n field => (field.filter_field_name ?? field.name) === selectedField,\n ),\n [fields, selectedField],\n );\n\n const isNumberField =\n selectedFieldObj?.type === 'DECIMAL' ||\n selectedFieldObj?.type === 'INTEGER';\n\n useEffect(() => {\n if (open) {\n setSelectedField(sort?.fieldName || '');\n setSelectedDirection(sort?.sortType || SortType.ASC);\n }\n }, [open, sort]);\n\n const handleApply = useCallback(() => {\n if (onSortChange) {\n if (!selectedField) {\n onSortChange(undefined);\n } else {\n onSortChange({\n fieldName: selectedField,\n sortType: selectedDirection,\n });\n }\n }\n onClose();\n }, [onSortChange, selectedField, selectedDirection, onClose]);\n\n const handleClear = useCallback(() => {\n if (!onSortChange) return;\n\n setSelectedField('');\n setSelectedDirection(SortType.ASC);\n\n onSortChange(undefined);\n onClose();\n }, [onSortChange, onClose]);\n\n return (\n <StyledDialog open={open} onClose={onClose} maxWidth=\"xs\" fullWidth>\n <StyledDialogTitle>\n <Typography variant=\"overline\" color=\"text.secondary\">\n Ordenar por\n </Typography>\n </StyledDialogTitle>\n <StyledDialogContent>\n <Stack spacing={2} pt={2}>\n <FormControl fullWidth size=\"small\">\n <InputLabel id=\"sort-field-label\">Campo</InputLabel>\n <Select\n labelId=\"sort-field-label\"\n value={selectedField}\n label=\"Campo\"\n onChange={e => setSelectedField(e.target.value)}\n >\n <MenuItem value=\"\">\n <em>Nenhum</em>\n </MenuItem>\n {sortableFields.map(field => (\n <MenuItem\n key={field.name}\n value={field.filter_field_name ?? field.name}\n >\n {field.description || field.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl fullWidth size=\"small\" disabled={!selectedField}>\n <InputLabel id=\"sort-direction-label\">Direção</InputLabel>\n <Select\n labelId=\"sort-direction-label\"\n value={selectedDirection}\n label=\"Direção\"\n onChange={e => setSelectedDirection(e.target.value as SortType)}\n >\n <MenuItem value={SortType.ASC}>\n Crescente {isNumberField ? '(1-9)' : '(A-Z)'}\n </MenuItem>\n <MenuItem value={SortType.DESC}>\n Decrescente {isNumberField ? '(9-1)' : '(Z-A)'}\n </MenuItem>\n </Select>\n </FormControl>\n </Stack>\n </StyledDialogContent>\n <StyledDialogActions>\n <Stack flex={1} width=\"100%\" direction=\"row\">\n <Button color=\"inherit\" onClick={handleClear}>\n Limpar\n </Button>\n </Stack>\n <Button\n onClick={onClose}\n variant=\"outlined\"\n color=\"inherit\"\n sx={{ minWidth: 24 }}\n >\n <Icon icon=\"CANCEL_CIRCLE\" />\n <LabelButton>Cancelar</LabelButton>\n </Button>\n <ApplyButton onClick={handleApply} variant=\"contained\">\n <Icon icon=\"SIMPLE_CHECK\" />\n <LabelButton>Aplicar</LabelButton>\n </ApplyButton>\n </StyledDialogActions>\n </StyledDialog>\n );\n};\n\nSortModal.displayName = 'SortModal';\n\nexport default memo(SortModal);\n","import Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { styled } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\n\nexport const StyledDialog = styled(Dialog)(() => ({\n '& .MuiDialog-paper': { width: '100%' },\n}));\n\nexport const StyledDialogTitle = styled(DialogTitle)(({ theme }) => ({\n borderBottom: '1px solid',\n borderColor: theme.palette.divider,\n padding: theme.spacing(1.5, 2),\n}));\n\nexport const StyledDialogContent = styled(DialogContent)(({ theme }) => ({\n padding: theme.spacing(2),\n}));\n\nexport const StyledDialogActions = styled(DialogActions)(({ theme }) => ({\n borderTop: '1px solid',\n borderColor: theme.palette.divider,\n padding: theme.spacing(1.5, 2),\n}));\n\nexport const ApplyButton = styled(Button)(({ theme }) => ({\n minWidth: 24,\n [theme.breakpoints.down(330)]: {\n padding: theme.spacing(1),\n },\n}));\n\nexport const LabelButton = styled(Typography)(({ theme }) => ({\n fontWeight: '600',\n margin: theme.spacing(0, 1),\n [theme.breakpoints.down(330)]: {\n fontSize: 0,\n margin: 0,\n },\n}));\n","import { useMemo } from 'react';\nimport type { GridColDef } from '@mui/x-data-grid-premium';\n\nimport { UseColumnOrderingParams } from '../props';\n\nexport const useColumnOrdering = ({\n columns,\n fields,\n preferredFieldOrder,\n}: UseColumnOrderingParams) => {\n const columnsByFieldId = useMemo(\n () => new Map(columns.map(column => [column.field, column])),\n [columns],\n );\n\n const fieldsByName = useMemo(\n () => new Map(fields?.map(f => [f.name, f]) || []),\n [fields],\n );\n\n const orderedColumns = useMemo(() => {\n if (!preferredFieldOrder || preferredFieldOrder.length === 0 || !fields) {\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: GridColDef[] = [];\n\n const pushColumnForField = (fieldName: string) => {\n const field = fieldsByName.get(fieldName);\n if (!field) return;\n\n const column = columnsByFieldId.get(field.name);\n\n if (!column || usedColumnFieldIds.has(field.name)) return;\n\n ordered.push(column);\n usedColumnFieldIds.add(field.name);\n };\n\n preferredWithoutActions.forEach(fieldName => {\n pushColumnForField(fieldName);\n });\n\n fields.forEach(field => {\n if (field.name === actionFieldName) return;\n if (preferredWithoutActions.includes(field.name)) return;\n\n const column = columnsByFieldId.get(field.name);\n\n if (!column || usedColumnFieldIds.has(field.name)) return;\n\n ordered.push(column);\n usedColumnFieldIds.add(field.name);\n });\n\n pushColumnForField(actionFieldName);\n\n return ordered.length === 0 ? columns : ordered;\n }, [columns, columnsByFieldId, fieldsByName, preferredFieldOrder, fields]);\n\n return { orderedColumns, columnsByFieldId, fieldsByName };\n};\n","import { useCallback, useMemo } from 'react';\nimport type { GridColumnVisibilityModel } from '@mui/x-data-grid-premium';\nimport { Field } from 'model/entity-metadata';\n\nimport useLocalStorage from 'hooks/useLocalStorage';\n\nimport { UseColumnVisibilityParams } from '../props';\n\nfunction getColumnFieldIdFromField(field: Field): string {\n return field.name;\n}\n\nexport const useColumnVisibility = ({\n fields,\n columnsByFieldId,\n defaultVisibleFieldNames,\n columnVisibilityStorageKey,\n onColumnVisibilityModelChange,\n}: UseColumnVisibilityParams) => {\n const hasStorageKey = Boolean(columnVisibilityStorageKey);\n\n const [storedVisibilityModel, setStoredVisibilityModel] = useLocalStorage<\n GridColumnVisibilityModel | undefined\n >(columnVisibilityStorageKey || '__dynamic-data-view:columns__', undefined, {\n initializeWithValue: hasStorageKey,\n });\n\n const initialState = useMemo(() => {\n if (!fields) return undefined;\n\n const visibilityModel: GridColumnVisibilityModel = {};\n\n fields.forEach(field => {\n const columnFieldId = getColumnFieldIdFromField(field);\n if (!columnsByFieldId.has(columnFieldId)) return;\n\n let visible: boolean | undefined;\n\n if (hasStorageKey && storedVisibilityModel) {\n const stored = storedVisibilityModel[columnFieldId];\n if (typeof stored === 'boolean') {\n visible = stored;\n }\n }\n\n if (\n visible === undefined &&\n defaultVisibleFieldNames &&\n defaultVisibleFieldNames.length > 0\n ) {\n visible = defaultVisibleFieldNames.includes(field.name);\n }\n\n if (typeof visible === 'boolean') {\n visibilityModel[columnFieldId] = visible;\n }\n });\n\n if (Object.keys(visibilityModel).length === 0) return undefined;\n\n return {\n columns: {\n columnVisibilityModel: visibilityModel,\n },\n };\n }, [\n columnsByFieldId,\n defaultVisibleFieldNames,\n fields,\n hasStorageKey,\n storedVisibilityModel,\n ]);\n\n const handleColumnVisibilityModelChange = useCallback(\n (model: GridColumnVisibilityModel) => {\n if (hasStorageKey) {\n setStoredVisibilityModel(model);\n }\n\n if (onColumnVisibilityModelChange) {\n onColumnVisibilityModelChange(model);\n }\n },\n [hasStorageKey, onColumnVisibilityModelChange, setStoredVisibilityModel],\n );\n\n return {\n initialState,\n handleColumnVisibilityModelChange,\n };\n};\n","import { useMemo } from 'react';\nimport { GridColDef } from '@mui/x-data-grid-premium';\n\nimport { Columns } from 'types/datagrid';\n\nimport { ACCESS_TYPES } from '../constants/columnDefaults';\nimport { UseDynamicColumnsProps } from '../props';\nimport { getColumnStrategy } from '../utils/columnStrategies';\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 ENTITY_MIN_WIDTH: 100,\n ENTITY_FLEX: 0.5,\n ID_MIN_WIDTH: 200,\n ID_FLEX: 1,\n ACTIONS_WIDTH: 80,\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';\nimport { Field } from 'model/entity-metadata';\n\nimport { COLUMN_DEFAULTS } from '../constants/columnDefaults';\nimport { CellRenderer, ColumnStrategy, DynamicRowData } from '../props';\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 headerAlign: 'center',\n align: 'center',\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 { useCallback, useRef, useState } from 'react';\nimport type { Filter, FilterCondition } from 'model/filter';\n\nimport uuidv4 from 'utils/uuidv4';\n\nimport { UseFiltersProps, UseFiltersReturn } from '../props';\nimport {\n buildFilterFromConditions,\n getDefaultCondition,\n isValidCondition,\n} from '../utils/filter';\n\n// Converte filtro inicial em condições\nconst parseInitialConditions = (initialFilter?: Filter): FilterCondition[] => {\n if (!initialFilter?.groups?.[0]?.conditionals) return [];\n return initialFilter.groups[0].conditionals.map(cond => ({\n id: uuidv4(),\n operator: initialFilter.groups[0].operator,\n fieldName: cond.fieldName,\n conditional: cond.conditional,\n value: cond.value,\n }));\n};\n\n/**\n * Hook para gerenciar estado de filtros do DynamicDataView com condições dinâmicas\n *\n * - conditions: estado de edição (o que o usuário vê no popover)\n * - appliedConditions: estado aplicado (o que está efetivamente filtrando)\n * - hasActiveFilters/activeFiltersCount: calculados com base em appliedConditions\n */\nexport const useFilters = ({\n fields,\n initialFilter,\n}: UseFiltersProps): UseFiltersReturn => {\n const [isOpen, setIsOpen] = useState(false);\n\n // Estado aplicado (efetivamente filtrando)\n const [appliedConditions, setAppliedConditions] = useState<FilterCondition[]>(\n () => parseInitialConditions(initialFilter),\n );\n const [appliedFilter, setAppliedFilter] = useState<Filter | undefined>(\n initialFilter,\n );\n\n // Estado de edição (o que o usuário vê/edita no popover)\n const [conditions, setConditions] = useState<FilterCondition[]>(() =>\n parseInitialConditions(initialFilter),\n );\n\n // Referência para snapshot antes de abrir o popover\n const snapshotRef = useRef<FilterCondition[]>([]);\n\n const openDrawer = useCallback(() => {\n // Salva snapshot das condições atuais (aplicadas) ao abrir\n snapshotRef.current = appliedConditions.map(c => ({ ...c }));\n // Sincroniza edição com aplicado ao abrir\n setConditions(appliedConditions.map(c => ({ ...c })));\n setIsOpen(true);\n }, [appliedConditions]);\n\n const closeDrawer = () => setIsOpen(false);\n\n const addCondition = useCallback(() => {\n const filterableFields = fields.filter(\n f => f.available_filter_conditions?.length > 0,\n );\n if (filterableFields.length === 0) return;\n\n const usedFieldNames = conditions.map(c => c.fieldName);\n const availableFields = filterableFields.filter(\n f => !usedFieldNames.includes(f.filter_field_name ?? f.name),\n );\n if (availableFields.length === 0) return;\n\n const currentOperator =\n conditions.length > 0 ? conditions[0].operator : 'AND';\n const firstField = availableFields[0];\n const newCondition: FilterCondition = {\n id: uuidv4(),\n operator: currentOperator,\n fieldName: firstField.filter_field_name ?? firstField.name,\n conditional: getDefaultCondition(firstField),\n value: [],\n };\n\n setConditions(prev => [...prev, newCondition]);\n }, [fields, conditions]);\n\n const updateCondition = useCallback(\n (id: string, changes: Partial<FilterCondition>) => {\n setConditions(prev => {\n const targetCondition = prev.find(c => c.id === id);\n if (!targetCondition) return prev;\n\n if (changes.operator && changes.operator !== targetCondition.operator) {\n const newOperator = changes.operator;\n return prev.map(c => {\n if (c.id === id) {\n return { ...c, ...changes };\n }\n return { ...c, operator: newOperator };\n });\n }\n\n return prev.map(c => (c.id === id ? { ...c, ...changes } : c));\n });\n },\n [],\n );\n\n const removeCondition = useCallback((id: string) => {\n setConditions(prev => prev.filter(c => c.id !== id));\n }, []);\n\n const clearAllFilters = () => {\n setConditions([]);\n setAppliedConditions([]);\n setAppliedFilter(undefined);\n };\n\n const applyFilters = () => {\n const filter = buildFilterFromConditions(conditions);\n setAppliedConditions(conditions.map(c => ({ ...c })));\n setAppliedFilter(filter);\n setIsOpen(false);\n return filter;\n };\n\n const cancelChanges = () => {\n // Reverte para o snapshot salvo ao abrir\n setConditions(snapshotRef.current.map(c => ({ ...c })));\n setIsOpen(false);\n };\n\n // Calculado com base nos filtros APLICADOS (não em edição)\n const hasActiveFilters = appliedConditions.some(isValidCondition);\n const activeFiltersCount = appliedConditions.filter(isValidCondition).length;\n\n return {\n conditions,\n filter: appliedFilter,\n isOpen,\n hasActiveFilters,\n activeFiltersCount,\n openDrawer,\n closeDrawer,\n addCondition,\n updateCondition,\n removeCondition,\n clearAllFilters,\n applyFilters,\n cancelChanges,\n };\n};\n\nexport default useFilters;\n","import { useEffect, useState } from 'react';\nimport { Filter, Sort } from 'model/filter';\n\nconst getStoredValue = <T>(key: string): T | undefined => {\n try {\n const item = localStorage.getItem(key);\n return item ? JSON.parse(item) : undefined;\n } catch {\n return undefined;\n }\n};\n\nconst setStoredValue = <T>(key: string, value: T | undefined): void => {\n try {\n if (value === undefined) {\n localStorage.removeItem(key);\n } else {\n localStorage.setItem(key, JSON.stringify(value));\n }\n } catch {\n // Silently ignore localStorage errors\n }\n};\n\nexport const useFilterStorage = (\n storageKey: string,\n externalFilter?: Filter,\n onFilterChange?: (filter: Filter | undefined) => void,\n) => {\n const filterKey = `${storageKey}:filter`;\n\n const [internalFilter, setInternalFilter] = useState<Filter | undefined>(\n () => {\n return getStoredValue<Filter>(filterKey) || externalFilter;\n },\n );\n\n // Sync with external filter\n useEffect(() => {\n if (externalFilter !== undefined) {\n setInternalFilter(externalFilter);\n }\n }, [externalFilter]);\n\n const handleFilterChange = (newFilter: Filter | undefined) => {\n setInternalFilter(newFilter);\n setStoredValue(filterKey, newFilter);\n onFilterChange?.(newFilter);\n };\n\n return {\n filter: internalFilter,\n setFilter: handleFilterChange,\n };\n};\n\nexport const useSortStorage = (\n storageKey: string,\n externalSort?: Sort,\n onSortChange?: (sort: Sort | undefined) => void,\n) => {\n const sortKey = `${storageKey}:sort`;\n\n const [internalSort, setInternalSort] = useState<Sort | undefined>(() => {\n return getStoredValue<Sort>(sortKey) || externalSort;\n });\n\n // Sync with external sort\n useEffect(() => {\n if (externalSort !== undefined) {\n setInternalSort(externalSort);\n }\n }, [externalSort]);\n\n const handleSortChange = (newSort: Sort | undefined) => {\n setInternalSort(newSort);\n setStoredValue(sortKey, newSort);\n onSortChange?.(newSort);\n };\n\n return {\n sort: internalSort,\n setSort: handleSortChange,\n };\n};\n","import { useCallback, useMemo } from 'react';\nimport type { GridSortModel } from '@mui/x-data-grid-premium';\nimport { Sort, SortType } from 'model/filter';\n\nimport { UseSortingParams } from '../props';\n\nexport const useSorting = ({ sort, onSortChange }: UseSortingParams) => {\n const sortModel: GridSortModel = useMemo(() => {\n if (!sort) return [];\n return [\n {\n field: sort.fieldName,\n sort: sort.sortType.toLowerCase() as 'asc' | 'desc',\n },\n ];\n }, [sort]);\n\n const handleSortModelChange = useCallback(\n (model: GridSortModel) => {\n if (!onSortChange) return;\n\n const firstItem = model[0];\n if (!firstItem || !firstItem.sort) {\n onSortChange(undefined);\n return;\n }\n\n const newSort: Sort = {\n fieldName: firstItem.field,\n sortType: firstItem.sort.toUpperCase() as SortType,\n };\n onSortChange(newSort);\n },\n [onSortChange],\n );\n\n return {\n sortModel,\n handleSortModelChange,\n };\n};\n","import {\n AccessType,\n DataType,\n EntityMetadataResponse,\n Field,\n} from 'model/entity-metadata';\n\nexport const createActionsField = (): Field => ({\n name: 'ACTIONS',\n description: '',\n filter_field_name: null,\n type: DataType.TEXT,\n metadata: null,\n access_type: AccessType.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 { 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 borderRadius: 3,\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';\n\nimport Icon from 'components/Icon';\n\nimport { ImageRendererProps } from './props';\nimport { ImageContainer } from './style';\n\nconst ImageRenderer = ({\n imageResourceId,\n getImageUrl,\n size = 48,\n alt = 'Imagem',\n onClick,\n sx,\n}: ImageRendererProps): ReactNode => {\n const hasImage = !!imageResourceId;\n const imageUrl =\n hasImage && getImageUrl ? getImageUrl(imageResourceId) : undefined;\n const clickable = !!onClick;\n\n return (\n <ImageContainer\n size={size}\n noImage={!hasImage}\n clickable={clickable}\n onClick={onClick}\n sx={sx}\n >\n {imageUrl ? (\n <img src={imageUrl} alt={alt} />\n ) : (\n <Icon\n icon=\"SEARCH_IMAGE\"\n width={Math.round(size / 2)}\n color=\"text.disabled\"\n />\n )}\n </ImageContainer>\n );\n};\n\nexport default memo(ImageRenderer);\n","import Box from '@mui/material/Box';\nimport { styled } from '@mui/material/styles';\n\n// StatusRenderer styles\nexport interface StatusLabelProps {\n isActive: boolean;\n}\n\nexport const StatusLabel = styled('span')<StatusLabelProps>(\n ({ theme, isActive }) => ({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: theme.spacing(0.2, 1),\n borderRadius: theme.shape.borderRadius,\n fontSize: '0.75rem',\n fontWeight: 600,\n width: 'fit-content',\n height: 'auto',\n lineHeight: '1.25rem',\n whiteSpace: 'nowrap',\n margin: 'auto',\n backgroundColor: isActive\n ? theme.palette.success.lighter || '#00A76F29'\n : theme.palette.warning.lighter || '#FF563029',\n color: isActive\n ? theme.palette.success.darker || '#007867'\n : theme.palette.warning.darker || '#B71D18',\n }),\n);\n\n// ImageRenderer styles\nexport interface ImageContainerProps {\n size: number;\n noImage: boolean;\n clickable: boolean;\n}\n\nexport const ImageContainer = styled(Box, {\n shouldForwardProp: prop =>\n !['size', 'noImage', 'clickable'].includes(prop as string),\n})<ImageContainerProps>(({ theme, size, noImage, clickable }) => ({\n width: size,\n height: size,\n minWidth: size,\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n cursor: clickable ? 'pointer' : 'default',\n transition: 'opacity 0.2s ease-in-out',\n color: theme.palette.text.disabled,\n ...(noImage && {\n border: `1px dashed ${theme.palette.divider}`,\n backgroundColor: theme.palette.grey[100],\n }),\n ...(clickable && {\n '&:hover': {\n opacity: 0.8,\n },\n }),\n '& img': {\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n borderRadius: '50%',\n },\n [theme.breakpoints.down('sm')]: {\n justifyContent: 'flex-start',\n alignItems: 'flex-start',\n },\n}));\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 Stack from '@mui/material/Stack';\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 return (\n <Stack direction=\"row\" alignItems=\"center\" height=\"100%\">\n <Typography variant=\"body2\" noWrap width=\"fit-content\">\n {isCurrency ? fCurrencyBRL(Number(value)) : fNumber(Number(value))}\n </Typography>\n </Stack>\n );\n};\n\nexport default memo(NumberRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport { StatusRendererProps } from './props';\nimport { StatusLabel } from './style';\n\nconst StatusRenderer = ({\n active,\n activeLabel = 'Ativo',\n inactiveLabel = 'Inativo',\n}: StatusRendererProps): ReactNode => {\n return (\n <StatusLabel isActive={active}>\n {active ? activeLabel : inactiveLabel}\n </StatusLabel>\n );\n};\n\nexport default memo(StatusRenderer);\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(/&nbsp;/g, ' ')\n .replace(/&amp;/g, '&')\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&quot;/g, '\"')\n .replace(/&#39;/g, \"'\")\n .trim();\n};\n\nconst TextRenderer = ({\n value,\n showCopyButton = false,\n copyMessage = 'Copiado',\n copyLabel,\n mask,\n}: TextRendererProps): ReactNode => {\n if (!value) return '-';\n\n const stringValue = String(value);\n const formattedValue = mask ? mask(stringValue) : sanitizeHtml(stringValue);\n\n if (showCopyButton) {\n return (\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Typography variant=\"body2\" noWrap>\n {formattedValue}\n </Typography>\n <CopyButton\n toCopy={stringValue}\n message={copyMessage}\n label={copyLabel}\n />\n </Stack>\n );\n }\n\n return formattedValue;\n};\n\nexport default memo(TextRenderer);\n","import { ReactNode } from 'react';\nimport { Field } from 'model/entity-metadata';\n\nimport { CURRENCY_FIELD_NAMES } from '../constants/columnDefaults';\nimport { CellRenderer, DynamicRowData } from '../props';\nimport {\n DateRenderer,\n DateTimeRenderer,\n EntityRenderer,\n NumberRenderer,\n StatusRenderer,\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 (\n <StatusRenderer\n active={Boolean(value)}\n activeLabel=\"Ativo\"\n inactiveLabel=\"Inativo\"\n />\n );\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","import { GridColumnVisibilityModel } from '@mui/x-data-grid-premium';\nimport { EntityMetadataResponse } from 'model/entity-metadata';\n\ninterface BuildVisibleFieldsParams {\n metadata?: EntityMetadataResponse;\n columnVisibilityModel?: GridColumnVisibilityModel;\n defaultVisibleFields?: string[];\n}\n\nexport const buildVisibleFields = ({\n metadata,\n columnVisibilityModel,\n defaultVisibleFields,\n}: BuildVisibleFieldsParams): string[] | undefined => {\n if (!metadata?.fields) return undefined;\n\n const allFields = metadata.fields.map(f => f.name);\n\n const visible = allFields.filter(fieldName => {\n if (fieldName === 'ACTIONS') return false;\n\n if (columnVisibilityModel) {\n return columnVisibilityModel[fieldName] !== false;\n }\n\n return defaultVisibleFields?.includes(fieldName) ?? true;\n });\n\n if (!defaultVisibleFields) return visible;\n\n return visible.sort((a, b) => {\n const indexA = defaultVisibleFields.indexOf(a);\n const indexB = defaultVisibleFields.indexOf(b);\n\n return indexA - indexB || 0;\n });\n};\n"]}
1
+ {"version":3,"sources":["../../../src/components/DynamicDataView/DynamicDataView.tsx","../../../src/components/DynamicDataView/components/FilterButton.tsx","../../../src/components/DynamicDataView/components/FiltersSection.tsx","../../../src/components/DynamicDataView/components/filters/FiltersContainer.tsx","../../../src/components/DynamicDataView/components/filters/FiltersContent.tsx","../../../src/components/DynamicDataView/utils/filter.ts","../../../src/components/DynamicDataView/components/filters/FiltersList.tsx","../../../src/components/DynamicDataView/components/filters/FilterRow.tsx","../../../src/components/DynamicDataView/constants/filter.ts","../../../src/components/DynamicDataView/components/filters/OperatorSelect.tsx","../../../src/components/DynamicDataView/components/filters/styles.ts","../../../src/components/DynamicDataView/components/SortModal/index.tsx","../../../src/components/DynamicDataView/components/SortModal/style.ts","../../../src/components/DynamicDataView/hooks/useColumnOrdering.ts","../../../src/components/DynamicDataView/hooks/useColumnVisibility.ts","../../../src/components/DynamicDataView/hooks/useDynamicColumns.ts","../../../src/components/DynamicDataView/constants/columnDefaults.ts","../../../src/components/DynamicDataView/utils/columnStrategies.ts","../../../src/components/DynamicDataView/hooks/useFilters.ts","../../../src/components/DynamicDataView/hooks/useFilterSortStorage.ts","../../../src/components/DynamicDataView/hooks/useSorting.ts","../../../src/components/DynamicDataView/utils/addActionsField.ts","../../../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/ImageRenderer.tsx","../../../src/components/DynamicDataView/renderers/style.ts","../../../src/components/DynamicDataView/renderers/NameRenderer.tsx","../../../src/components/DynamicDataView/renderers/NumberRenderer.tsx","../../../src/components/DynamicDataView/renderers/StatusRenderer.tsx","../../../src/components/DynamicDataView/renderers/TextRenderer.tsx","../../../src/components/DynamicDataView/utils/createCellRenderer.tsx","../../../src/components/DynamicDataView/utils/fields.ts"],"names":["memo","useCallback","useMemo","useState","isEqual","Badge","Button","IconButton","Stack","jsx","jsxs","FilterButton","showFilterButton","isMobile","hasActiveFilters","activeFiltersCount","sort","onFilterClick","onSortClick","Icon_default","ToolbarActionsDivider","FilterButton_default","Divider","Typography","getFilterableFields","fields","field","getDefaultCondition","type","available_filter_conditions","isValidCondition","condition","buildFilterFromConditions","conditions","validConditions","c","FormControl","InputLabel","MenuItem","Select","TextField","CONDITION_LABELS","OperatorSelect","value","onChange","totalConditions","isFirst","e","OperatorSelect_default","ellipsisStyle","FilterRow","onRemove","selectedField","f","availableConditions","isValueDisabled","handleFieldChange","fieldName","newField","defaultCondition","handleConditionChange","conditional","handleValueChange","handleOperatorChange","operator","cond","FilterRow_default","Fragment","FiltersList","filterableFields","onUpdateCondition","onRemoveCondition","handleUpdateCondition","updated","handleRemoveCondition","id","usedFieldNames","name","getAvailableFields","currentFieldName","index","FiltersList_default","Box","styled","Container","Header","theme","Content","Footer","FiltersContent","onClose","onAddCondition","onApply","onClear","onCancel","hasConditions","handleApply","handleClear","handleCancel","FiltersContent_default","FiltersContainer","props","ResponsivePopover_default","FiltersContainer_default","FiltersSection","isOpen","filterAnchorEl","FiltersSection_default","useEffect","Dialog","DialogActions","DialogContent","DialogTitle","StyledDialog","StyledDialogTitle","StyledDialogContent","StyledDialogActions","ApplyButton","LabelButton","SortModal","open","onSortChange","setSelectedField","selectedDirection","setSelectedDirection","sortableFields","selectedFieldObj","isNumberField","SortModal_default","useColumnOrdering","columns","preferredFieldOrder","columnsByFieldId","column","fieldsByName","actionFieldName","preferredWithoutActions","usedColumnFieldIds","ordered","pushColumnForField","getColumnFieldIdFromField","useColumnVisibility","defaultVisibleFieldNames","columnVisibilityStorageKey","onColumnVisibilityModelChange","hasStorageKey","storedVisibilityModel","setStoredVisibilityModel","useLocalStorage_default","initialState","visibilityModel","columnFieldId","visible","stored","handleColumnVisibilityModelChange","model","COLUMN_DEFAULTS","ACCESS_TYPES","CURRENCY_FIELD_NAMES","createImageColumn","renderCell","params","createIdColumn","createEntityColumn","createDefaultColumn","createActionsColumn","getColumnStrategy","metadata","useDynamicColumns","columnStrategies","columnsMap","useRef","parseInitialConditions","initialFilter","uuidv4","useFilters","setIsOpen","appliedConditions","setAppliedConditions","appliedFilter","setAppliedFilter","setConditions","snapshotRef","openDrawer","closeDrawer","addCondition","availableFields","currentOperator","firstField","newCondition","prev","updateCondition","changes","targetCondition","newOperator","removeCondition","clearAllFilters","applyFilters","filter","cancelChanges","getStoredValue","key","item","setStoredValue","useFilterStorage","storageKey","externalFilter","onFilterChange","filterKey","internalFilter","setInternalFilter","newFilter","useSortStorage","externalSort","sortKey","internalSort","setInternalSort","newSort","useSorting","sortModel","handleSortModelChange","firstItem","createActionsField","addActionsFieldToMetadata","DateRenderer","format","fDate","DateRenderer_default","DateTimeRenderer","fDateTime","DateTimeRenderer_default","Chip","EntityRenderer","entityValue","EntityRenderer_default","IconRenderer","trueIcon","falseIcon","color","width","IconRenderer_default","StatusLabel","isActive","ImageContainer","prop","size","noImage","clickable","ImageRenderer","imageResourceId","getImageUrl","alt","onClick","sx","hasImage","imageUrl","ImageRenderer_default","NameRenderer","displayName","copyMessage","CopyButton_default","NameRenderer_default","NumberRenderer","isCurrency","fCurrencyBRL","fNumber","NumberRenderer_default","StatusRenderer","active","activeLabel","inactiveLabel","StatusRenderer_default","sanitizeHtml","text","TextRenderer","showCopyButton","copyLabel","mask","stringValue","formattedValue","TextRenderer_default","getIsCurrency","createCellRenderer","context","onRowAction","CellRendererComponent","row","DynamicDataView","title","data","isLoading","isFetching","page","perPage","searchValue","onSearchChange","onSearch","onPaginationChange","onAdd","onRowDoubleClick","actions","moreActions","slots","mobileRender","containerHeight","showColumnButton","rows","total","preloadedMetadata","firstRow","effectiveMetadata","effectiveMetadataFields","orderedColumns","handleRowDoubleClick","rowId","useResponsive_default","setFilterAnchorEl","storedFilter","setStoredFilter","storedSort","setStoredSort","effectiveFilter","effectiveSort","handleApplyFilters","handleClearFilters","handleFilterButtonClick","event","handleCancelFilters","isSortModalOpen","setIsSortModalOpen","handleFiltersClose","DataView_default","DynamicDataView_default","buildVisibleFields","columnVisibilityModel","defaultVisibleFields","a","b","indexA","indexB"],"mappings":"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","sourcesContent":["import { memo, useCallback, useMemo, useState } from 'react';\nimport isEqual from 'react-fast-compare';\nimport { AccessType, DataType } from 'model/entity-metadata';\n\nimport useResponsive from 'hooks/useResponsive';\n\nimport DataView from '../DataView';\n\nimport FilterButton from './components/FilterButton';\nimport FiltersSection from './components/FiltersSection';\nimport SortModal from './components/SortModal';\nimport { useColumnOrdering } from './hooks/useColumnOrdering';\nimport { useColumnVisibility } from './hooks/useColumnVisibility';\nimport { useDynamicColumns } from './hooks/useDynamicColumns';\nimport { useFilters } from './hooks/useFilters';\nimport { useFilterStorage, useSortStorage } from './hooks/useFilterSortStorage';\nimport { useSorting } from './hooks/useSorting';\nimport { addActionsFieldToMetadata } from './utils/addActionsField';\nimport { createCellRenderer } from './utils/createCellRenderer';\nimport { DynamicDataViewProps, DynamicRowData } from './props';\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 slots,\n mobileRender,\n containerHeight = 600,\n showColumnButton = false,\n showFilterButton = false,\n filter,\n onFilterChange,\n sort,\n onSortChange,\n defaultVisibleFieldNames,\n preferredFieldOrder,\n columnStrategies,\n onColumnVisibilityModelChange,\n storageKey,\n}: DynamicDataViewProps<T>) => {\n const { items: rows = [], total = 0 } = data || {};\n\n // Criar metadata temporário baseado em data quando metadata não disponível\n const preloadedMetadata = useMemo(() => {\n if (metadata) return metadata;\n\n // Se não tem metadata mas tem dados, criar metadata baseado nas keys do primeiro item\n if (rows.length > 0) {\n const firstRow = rows[0];\n const fields = Object.keys(firstRow).map(key => ({\n name: key,\n type: DataType.TEXT,\n description: key,\n filter_field_name: null,\n metadata: null,\n access_type: AccessType.READ_ONLY,\n relation_field_name: null,\n available_filter_conditions: [],\n }));\n\n return {\n name: 'loading',\n description: 'Loading...',\n id_field_name: 'id',\n description_field_name: fields[0]?.name || 'id',\n access_type: AccessType.READ_ONLY,\n fields,\n };\n }\n\n return undefined;\n }, [metadata, rows]);\n\n const effectiveMetadata = useMemo(\n () =>\n preloadedMetadata && onRowAction\n ? addActionsFieldToMetadata(preloadedMetadata)\n : preloadedMetadata,\n [preloadedMetadata, onRowAction],\n );\n\n const effectiveMetadataFields = useMemo(\n () => effectiveMetadata?.fields || [],\n [effectiveMetadata],\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 { orderedColumns, columnsByFieldId } = useColumnOrdering({\n columns,\n fields: effectiveMetadata?.fields,\n preferredFieldOrder,\n });\n\n const { initialState, handleColumnVisibilityModelChange } =\n useColumnVisibility({\n fields: effectiveMetadata?.fields,\n columnsByFieldId,\n defaultVisibleFieldNames,\n columnVisibilityStorageKey: `${storageKey}:columns`,\n onColumnVisibilityModelChange,\n });\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 const isMobile = useResponsive('down', 'md');\n const [filterAnchorEl, setFilterAnchorEl] = useState<HTMLElement | null>(\n null,\n );\n\n const { filter: storedFilter, setFilter: setStoredFilter } = useFilterStorage(\n storageKey,\n filter,\n onFilterChange,\n );\n\n const { sort: storedSort, setSort: setStoredSort } = useSortStorage(\n storageKey,\n sort,\n onSortChange,\n );\n\n const effectiveFilter = filter ?? storedFilter;\n const effectiveSort = sort ?? storedSort;\n\n const { sortModel, handleSortModelChange } = useSorting({\n sort: effectiveSort,\n onSortChange: setStoredSort,\n });\n\n const {\n conditions,\n isOpen,\n openDrawer,\n closeDrawer,\n addCondition,\n updateCondition,\n removeCondition,\n clearAllFilters,\n applyFilters,\n cancelChanges,\n hasActiveFilters,\n activeFiltersCount,\n } = useFilters({\n fields: effectiveMetadataFields,\n initialFilter: effectiveFilter,\n });\n\n const handleApplyFilters = useCallback(() => {\n const newFilter = applyFilters();\n setStoredFilter(newFilter);\n }, [applyFilters, setStoredFilter]);\n\n const handleClearFilters = useCallback(() => {\n clearAllFilters();\n setStoredFilter(undefined);\n }, [clearAllFilters, setStoredFilter]);\n\n const handleFilterButtonClick = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n if (isMobile) {\n openDrawer();\n } else {\n openDrawer();\n setFilterAnchorEl(event.currentTarget);\n }\n },\n [isMobile, openDrawer],\n );\n\n const handleCancelFilters = useCallback(() => {\n cancelChanges();\n setFilterAnchorEl(null);\n }, [cancelChanges]);\n\n const [isSortModalOpen, setIsSortModalOpen] = useState(false);\n\n const handleFiltersClose = useCallback(() => {\n setFilterAnchorEl(null);\n closeDrawer();\n }, [closeDrawer]);\n\n return (\n <>\n <DataView<T>\n title={title}\n columns={orderedColumns}\n rows={rows}\n mobileRender={mobileRender}\n rowCount={total}\n loading={isLoading || !metadata}\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 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 onColumnVisibilityModelChange={handleColumnVisibilityModelChange}\n filterButton={\n <FilterButton\n showFilterButton={showFilterButton}\n isMobile={isMobile}\n hasActiveFilters={hasActiveFilters}\n activeFiltersCount={activeFiltersCount}\n sort={effectiveSort}\n onFilterClick={handleFilterButtonClick}\n onSortClick={() => setIsSortModalOpen(true)}\n />\n }\n sortingMode=\"server\"\n sortModel={sortModel}\n onSortModelChange={handleSortModelChange}\n disableColumnFilter\n />\n {metadata && (\n <>\n <FiltersSection\n showFilterButton={showFilterButton}\n isOpen={isOpen}\n filterAnchorEl={filterAnchorEl}\n fields={effectiveMetadataFields}\n conditions={conditions}\n isMobile={isMobile}\n onClose={handleFiltersClose}\n onAddCondition={addCondition}\n onUpdateCondition={updateCondition}\n onRemoveCondition={removeCondition}\n onApply={handleApplyFilters}\n onClear={handleClearFilters}\n onCancel={handleCancelFilters}\n />\n\n <SortModal\n open={isSortModalOpen}\n onClose={() => setIsSortModalOpen(false)}\n fields={effectiveMetadataFields}\n sort={effectiveSort}\n onSortChange={setStoredSort}\n />\n </>\n )}\n </>\n );\n};\n\nexport default memo(DynamicDataView, isEqual) as typeof DynamicDataView;\nexport type { DynamicDataViewProps, DynamicRowData } from './props';\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport Badge from '@mui/material/Badge';\nimport Button from '@mui/material/Button';\nimport IconButton from '@mui/material/IconButton';\nimport Stack from '@mui/material/Stack';\n\nimport { ToolbarActionsDivider } from 'components/DataView';\nimport Icon from 'components/Icon';\n\nimport { FilterButtonProps } from '../props';\n\nconst FilterButton = ({\n showFilterButton,\n isMobile,\n hasActiveFilters,\n activeFiltersCount,\n sort,\n onFilterClick,\n onSortClick,\n}: FilterButtonProps) => {\n if (!showFilterButton) return null;\n\n if (isMobile) {\n return (\n <Stack direction=\"row\" spacing={0.5}>\n <Badge\n badgeContent={activeFiltersCount}\n color=\"primary\"\n invisible={activeFiltersCount === 0}\n sx={{\n '& .MuiBadge-badge': {\n transform: 'scale(0.9) translate(10px, 9px)',\n opacity: activeFiltersCount === 0 ? 0 : 1,\n },\n }}\n >\n <IconButton\n color={hasActiveFilters ? 'primary' : 'default'}\n onClick={onFilterClick}\n size=\"small\"\n aria-label=\"Filtrar\"\n sx={{ overflow: 'visible' }}\n >\n <Icon icon=\"FILTER_VERTICAL\" />\n </IconButton>\n </Badge>\n\n <ToolbarActionsDivider\n sx={{ height: 16 }}\n orientation=\"vertical\"\n flexItem\n />\n\n <IconButton\n color={sort ? 'primary' : 'default'}\n onClick={onSortClick}\n size=\"small\"\n aria-label=\"Ordenar\"\n >\n <Icon\n icon={sort?.sortType === 'DESC' ? 'SORTING_DESC' : 'SORTING_ASC'}\n />\n </IconButton>\n </Stack>\n );\n }\n\n return (\n <Badge\n badgeContent={activeFiltersCount}\n color=\"primary\"\n invisible={activeFiltersCount === 0}\n sx={{\n '& .MuiBadge-badge': activeFiltersCount\n ? {\n transform: 'scale(0.9) translate(-3px, 7px)',\n position: 'relative',\n opacity: 1,\n transition: 'none',\n }\n : {\n transition: 'none',\n opacity: 0,\n },\n }}\n >\n <Button\n variant=\"text\"\n color={hasActiveFilters ? 'primary' : 'inherit'}\n startIcon={<Icon icon=\"FILTER_VERTICAL\" />}\n onClick={onFilterClick}\n size=\"small\"\n >\n Filtrar\n </Button>\n </Badge>\n );\n};\n\nexport default memo(FilterButton, isEqual);\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\n\nimport { FiltersSectionProps } from '../props';\n\nimport FiltersContainer from './filters/FiltersContainer';\n\nconst FiltersSection = ({\n showFilterButton,\n isOpen,\n filterAnchorEl,\n fields,\n conditions,\n isMobile,\n onClose,\n onAddCondition,\n onUpdateCondition,\n onRemoveCondition,\n onApply,\n onClear,\n onCancel,\n}: FiltersSectionProps) => {\n if (!showFilterButton) return null;\n\n return (\n <FiltersContainer\n open={isOpen || Boolean(filterAnchorEl)}\n anchorEl={filterAnchorEl}\n onClose={onClose}\n fields={fields}\n conditions={conditions}\n onAddCondition={onAddCondition}\n onUpdateCondition={onUpdateCondition}\n onRemoveCondition={onRemoveCondition}\n onApply={onApply}\n onClear={onClear}\n onCancel={onCancel}\n isMobileProp={isMobile}\n />\n );\n};\n\nexport default memo(FiltersSection, isEqual);\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\n\nimport ResponsivePopover from 'components/ResponsivePopover';\n\nimport FiltersContent from './FiltersContent';\nimport type { FiltersContainerProps } from './props';\n\nconst FiltersContainer = (props: FiltersContainerProps) => {\n return (\n <ResponsivePopover\n open={props.open}\n onClose={props.onClose}\n anchorEl={props.anchorEl}\n isMobile={props.isMobileProp}\n popoverProps={{\n slotProps: {\n paper: {\n sx: {\n width: 520,\n maxWidth: 'calc(100vw - 24px)',\n maxHeight: 600,\n mt: 1,\n },\n },\n },\n }}\n drawerProps={{\n anchor: 'right',\n PaperProps: {\n sx: {\n width: '100%',\n maxWidth: '100%',\n height: '100%',\n maxHeight: '100%',\n borderRadius: 0,\n },\n },\n }}\n >\n <FiltersContent {...props} />\n </ResponsivePopover>\n );\n};\n\nexport default memo(FiltersContainer, isEqual);\n","import { memo, useCallback } from 'react';\nimport isEqual from 'react-fast-compare';\nimport Button from '@mui/material/Button';\nimport Divider from '@mui/material/Divider';\nimport IconButton from '@mui/material/IconButton';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport Icon from 'components/Icon';\n\nimport { getFilterableFields } from '../../utils/filter';\n\nimport FiltersList from './FiltersList';\nimport type { FiltersPopoverProps } from './props';\nimport { Container, Content, Footer, Header } from './styles';\n\nconst FiltersContent = ({\n onClose,\n fields,\n conditions,\n onAddCondition,\n onUpdateCondition,\n onRemoveCondition,\n onApply,\n onClear,\n onCancel,\n}: FiltersPopoverProps) => {\n const filterableFields = getFilterableFields(fields);\n const hasConditions = conditions.length > 0;\n\n const handleApply = useCallback(() => {\n onApply();\n onClose();\n }, [onApply, onClose]);\n\n const handleClear = useCallback(() => {\n onClear();\n onClose();\n }, [onClear, onClose]);\n\n const handleCancel = useCallback(() => {\n onCancel();\n }, [onCancel]);\n\n return (\n <Container>\n <Header>\n <Typography variant=\"overline\" fontWeight={600} color=\"text.secondary\">\n Defina as condições para filtrar\n </Typography>\n\n <IconButton\n onClick={onAddCondition}\n size=\"small\"\n aria-label=\"Adicionar filtro\"\n title=\"Adicionar filtro\"\n disabled={conditions.length >= filterableFields.length}\n >\n <Icon icon=\"SIMPLE_ADD\" />\n </IconButton>\n </Header>\n\n <Divider />\n\n <Content>\n <FiltersList\n filterableFields={filterableFields}\n conditions={conditions}\n onUpdateCondition={onUpdateCondition}\n onRemoveCondition={onRemoveCondition}\n />\n </Content>\n\n <Divider />\n\n <Footer>\n <Button variant=\"text\" color=\"inherit\" onClick={handleClear}>\n Limpar\n </Button>\n\n <Stack direction=\"row\" spacing={1}>\n <Button\n variant=\"outlined\"\n color=\"inherit\"\n onClick={handleCancel}\n startIcon={<Icon icon=\"CANCEL_CIRCLE\" />}\n >\n Cancelar\n </Button>\n <Button\n variant=\"contained\"\n onClick={handleApply}\n disabled={!hasConditions}\n startIcon={<Icon icon=\"SIMPLE_CHECK\" />}\n >\n Aplicar\n </Button>\n </Stack>\n </Footer>\n </Container>\n );\n};\n\nexport default memo(FiltersContent, isEqual);\n","import { Condition, DataType, Field } from 'model/entity-metadata';\nimport {\n Filter,\n FilterCondition,\n FilterOperator,\n FilterState,\n} from 'model/filter';\n\n/**\n * Campos filtráveis (campos com condições disponíveis)\n */\nexport const getFilterableFields = (fields: Field[]): Field[] => {\n return fields.filter(\n field =>\n field.available_filter_conditions &&\n field.available_filter_conditions.length > 0 &&\n field.name !== 'ACTIONS',\n );\n};\n\n/**\n * Converte FilterState para formato de API\n */\nexport const buildFilterFromState = (\n state: FilterState,\n): Filter | undefined => {\n const entries = Object.entries(state).filter(\n ([, value]) => value.value.length > 0,\n );\n if (entries.length === 0) return undefined;\n return {\n operator: FilterOperator.AND,\n groups: [\n {\n operator: FilterOperator.AND,\n conditionals: entries.map(([, filterValue]) => ({\n fieldName: filterValue.fieldName,\n conditional: filterValue.conditional,\n value: filterValue.value,\n })),\n },\n ],\n };\n};\n\n/**\n * Retorna o conditional padrão para um tipo de campo\n */\nexport const getDefaultCondition = (field: Field): Condition => {\n const { type, available_filter_conditions } = field;\n if (available_filter_conditions.length === 0) return Condition.EQUALS;\n if (\n type === DataType.TEXT &&\n available_filter_conditions.includes(Condition.LIKE)\n ) {\n return Condition.LIKE;\n }\n return available_filter_conditions[0];\n};\n\n/**\n * Verifica se uma condição é válida (tem valor ou não requer valor)\n */\nexport const isValidCondition = (condition: FilterCondition): boolean => {\n return (\n condition.value.length > 0 ||\n condition.conditional === Condition.IS_NULL ||\n condition.conditional === Condition.IS_NOT_NULL\n );\n};\n\n/**\n * Converte array de FilterCondition para Filter API\n */\nexport const buildFilterFromConditions = (\n conditions: FilterCondition[],\n): Filter | undefined => {\n if (conditions.length === 0) return undefined;\n\n const validConditions = conditions.filter(isValidCondition);\n if (validConditions.length === 0) return undefined;\n\n return {\n operator: FilterOperator.AND,\n groups: [\n {\n operator: validConditions[0]?.operator || FilterOperator.AND,\n conditionals: validConditions.map(c => ({\n fieldName: c.fieldName,\n conditional: c.conditional,\n value: c.value,\n })),\n },\n ],\n };\n};\n","import { memo, useCallback, useMemo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport Typography from '@mui/material/Typography';\nimport type { FilterCondition } from 'model/filter';\n\nimport FilterRow from './FilterRow';\nimport type { FiltersListProps } from './props';\n\nconst FiltersList = ({\n filterableFields,\n conditions,\n onUpdateCondition,\n onRemoveCondition,\n}: FiltersListProps) => {\n const handleUpdateCondition = useCallback(\n (updated: FilterCondition) => {\n onUpdateCondition(updated.id, updated);\n },\n [onUpdateCondition],\n );\n\n const handleRemoveCondition = useCallback(\n (id: string) => () => {\n onRemoveCondition(id);\n },\n [onRemoveCondition],\n );\n\n const usedFieldNames = useMemo(\n () =>\n conditions.map(c => c.fieldName).filter((name): name is string => !!name),\n [conditions],\n );\n\n const getAvailableFields = useCallback(\n (currentFieldName: string | undefined) =>\n filterableFields.filter(\n field =>\n !usedFieldNames.includes(field.name) ||\n field.name === currentFieldName,\n ),\n [filterableFields, usedFieldNames],\n );\n\n if (filterableFields.length === 0) {\n return (\n <Typography variant=\"body2\" color=\"text.secondary\" textAlign=\"center\">\n Nenhum filtro disponível\n </Typography>\n );\n }\n\n if (conditions.length === 0) {\n return (\n <Typography variant=\"body2\" color=\"text.secondary\" textAlign=\"center\">\n Clique em{' '}\n <Typography\n component=\"strong\"\n variant=\"body2\"\n fontWeight={600}\n color=\"text.primary\"\n >\n &quot;+&quot;\n </Typography>{' '}\n para adicionar um filtro\n </Typography>\n );\n }\n\n return (\n <>\n {conditions.map((condition, index) => (\n <FilterRow\n key={condition.id}\n condition={condition}\n fields={getAvailableFields(condition.fieldName)}\n onChange={handleUpdateCondition}\n onRemove={handleRemoveCondition(condition.id)}\n showOperator={index > 0}\n totalConditions={conditions.length}\n isFirst={index === 0}\n />\n ))}\n </>\n );\n};\n\nexport default memo(FiltersList, isEqual);\n","import { memo, useCallback, useMemo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport FormControl from '@mui/material/FormControl';\nimport IconButton from '@mui/material/IconButton';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport Stack from '@mui/material/Stack';\nimport TextField from '@mui/material/TextField';\nimport { Condition } from 'model/entity-metadata';\n\nimport Icon from 'components/Icon';\n\nimport { CONDITION_LABELS } from '../../constants/filter';\n\nimport OperatorSelect from './OperatorSelect';\nimport type { FilterRowProps } from './props';\n\nconst ellipsisStyle = {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n} as const;\n\nconst FilterRow = ({\n condition,\n fields,\n onChange,\n onRemove,\n totalConditions,\n isFirst,\n}: FilterRowProps) => {\n const selectedField = useMemo(\n () =>\n fields.find(f => (f.filter_field_name ?? f.name) === condition.fieldName),\n [fields, condition.fieldName],\n );\n\n const availableConditions = useMemo(\n () => selectedField?.available_filter_conditions || [],\n [selectedField],\n );\n\n const isValueDisabled = useMemo(\n () =>\n !condition.fieldName ||\n condition.conditional === 'IS_NULL' ||\n condition.conditional === 'IS_NOT_NULL',\n [condition.fieldName, condition.conditional],\n );\n\n const handleFieldChange = useCallback(\n (fieldName: string) => {\n const newField = fields.find(\n f => (f.filter_field_name ?? f.name) === fieldName,\n );\n if (!newField) return;\n\n const defaultCondition =\n newField.available_filter_conditions[0] || 'EQUALS';\n\n onChange({\n ...condition,\n fieldName,\n conditional: defaultCondition,\n value: [],\n });\n },\n [fields, condition, onChange],\n );\n\n const handleConditionChange = useCallback(\n (conditional: Condition) => {\n onChange({\n ...condition,\n conditional,\n });\n },\n [condition, onChange],\n );\n\n const handleValueChange = useCallback(\n (value: string) => {\n onChange({\n ...condition,\n value: value ? [value] : [],\n });\n },\n [condition, onChange],\n );\n\n const handleOperatorChange = useCallback(\n (operator: 'AND' | 'OR') => {\n onChange({\n ...condition,\n operator,\n });\n },\n [condition, onChange],\n );\n\n return (\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n <IconButton\n onClick={onRemove}\n size=\"small\"\n aria-label=\"Remover filtro\"\n sx={{ flexShrink: 0 }}\n >\n <Icon icon=\"CLOSE_MARK_BUTTON\" width={18} />\n </IconButton>\n\n <OperatorSelect\n value={condition.operator}\n onChange={handleOperatorChange}\n totalConditions={totalConditions}\n isFirst={isFirst}\n />\n\n <FormControl size=\"small\" sx={{ minWidth: 150, flex: 1 }}>\n <InputLabel id={`field-label-${condition.id}`}>Coluna</InputLabel>\n <Select\n labelId={`field-label-${condition.id}`}\n label=\"Coluna\"\n value={condition.fieldName}\n onChange={e => handleFieldChange(e.target.value)}\n size=\"small\"\n sx={{\n '& .MuiSelect-select': ellipsisStyle,\n }}\n >\n {fields.map(field => (\n <MenuItem\n key={field.name}\n value={field.filter_field_name ?? field.name}\n sx={ellipsisStyle}\n title={field.description || field.name}\n >\n {field.description || field.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n\n <FormControl\n size=\"small\"\n sx={{ minWidth: 90 }}\n disabled={!condition.fieldName}\n >\n <InputLabel id={`condition-label-${condition.id}`}>Condição</InputLabel>\n <Select\n labelId={`condition-label-${condition.id}`}\n label=\"Condição\"\n value={condition.conditional}\n onChange={e => handleConditionChange(e.target.value as Condition)}\n size=\"small\"\n sx={{\n '& .MuiSelect-select': ellipsisStyle,\n }}\n >\n {availableConditions.map(cond => (\n <MenuItem key={cond} value={cond} sx={ellipsisStyle}>\n {CONDITION_LABELS[cond as Condition] || cond}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n\n {selectedField?.type === 'BOOLEAN' ? (\n <FormControl\n size=\"small\"\n sx={{ flex: 1, minWidth: 120 }}\n disabled={isValueDisabled}\n >\n <InputLabel id={`value-label-${condition.id}`}>Valor</InputLabel>\n <Select\n labelId={`value-label-${condition.id}`}\n label=\"Valor\"\n value={condition.value[0] || ''}\n onChange={e => handleValueChange(e.target.value)}\n size=\"small\"\n sx={{\n '& .MuiSelect-select': ellipsisStyle,\n }}\n >\n <MenuItem value=\"true\">Verdadeiro</MenuItem>\n <MenuItem value=\"false\">Falso</MenuItem>\n </Select>\n </FormControl>\n ) : (\n <TextField\n label=\"Filtro\"\n value={condition.value[0] || ''}\n onChange={e => handleValueChange(e.target.value)}\n size=\"small\"\n disabled={isValueDisabled}\n InputLabelProps={{ shrink: true }}\n sx={{ flex: 1, minWidth: 120 }}\n />\n )}\n </Stack>\n );\n};\n\nexport default memo(FilterRow, isEqual);\n","import { Condition } from 'model/entity-metadata';\n\nexport const CONDITION_LABELS: Record<Condition, string> = {\n [Condition.EQUALS]: 'Igual a',\n [Condition.NOT_EQUALS]: 'Diferente de',\n [Condition.LIKE]: 'Contém',\n [Condition.NOT_LIKE]: 'Não contém',\n [Condition.GREATER_THAN]: 'Maior que',\n [Condition.LESS_THAN]: 'Menor que',\n [Condition.GREATER_THAN_OR_EQUAL]: 'Maior ou igual a',\n [Condition.LESS_THAN_OR_EQUAL]: 'Menor ou igual a',\n [Condition.IN]: 'Em',\n [Condition.NOT_IN]: 'Não em',\n [Condition.IS_NULL]: 'É nulo',\n [Condition.IS_NOT_NULL]: 'Não é nulo',\n};\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport Stack from '@mui/material/Stack';\n\nimport type { OperatorSelectProps } from './props';\n\nconst OperatorSelect = ({\n value,\n onChange,\n totalConditions,\n isFirst,\n}: OperatorSelectProps) => {\n if (totalConditions === 1) {\n return null;\n }\n\n if (isFirst) {\n return <Stack sx={{ width: 55, flexShrink: 0 }} />;\n }\n\n return (\n <Select\n value={value}\n onChange={e => onChange(e.target.value as 'AND' | 'OR')}\n size=\"small\"\n sx={{ width: 55, flexShrink: 0 }}\n >\n <MenuItem value=\"AND\">e</MenuItem>\n <MenuItem value=\"OR\">ou</MenuItem>\n </Select>\n );\n};\n\nexport default memo(OperatorSelect, isEqual);\n","import Box from '@mui/material/Box';\nimport { styled } from '@mui/material/styles';\n\n// Estilos baseados no Drawer/Popover para garantir consistência\nexport const Container = styled(Box)({\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n // No popover, a altura será controlada pelo max-height do container\n});\n\nexport const Header = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: theme.spacing(2, 3),\n}));\n\nexport const Content = styled(Box)(({ theme }) => ({\n flex: 1,\n overflowY: 'auto',\n padding: theme.spacing(3),\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(2),\n}));\n\nexport const Footer = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: theme.spacing(2),\n}));\n","import { memo, useCallback, useEffect, useMemo, useState } from 'react';\nimport Button from '@mui/material/Button';\nimport FormControl from '@mui/material/FormControl';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport { SortType } from 'model/filter';\n\nimport Icon from 'components/Icon';\n\nimport { SortModalProps } from './props';\nimport {\n ApplyButton,\n LabelButton,\n StyledDialog,\n StyledDialogActions,\n StyledDialogContent,\n StyledDialogTitle,\n} from './style';\n\nconst SortModal = ({\n open,\n onClose,\n fields,\n sort,\n onSortChange,\n}: SortModalProps) => {\n const [selectedField, setSelectedField] = useState<string>(\n sort?.fieldName || '',\n );\n const [selectedDirection, setSelectedDirection] = useState<SortType>(\n sort?.sortType || SortType.ASC,\n );\n\n const sortableFields = useMemo(\n () =>\n fields.filter(\n field => field.name !== 'ACTIONS' && field.access_type !== 'WRITE_ONLY',\n ),\n [fields],\n );\n\n const selectedFieldObj = useMemo(\n () =>\n fields.find(\n field => (field.filter_field_name ?? field.name) === selectedField,\n ),\n [fields, selectedField],\n );\n\n const isNumberField =\n selectedFieldObj?.type === 'DECIMAL' ||\n selectedFieldObj?.type === 'INTEGER';\n\n useEffect(() => {\n if (open) {\n setSelectedField(sort?.fieldName || '');\n setSelectedDirection(sort?.sortType || SortType.ASC);\n }\n }, [open, sort]);\n\n const handleApply = useCallback(() => {\n if (onSortChange) {\n if (!selectedField) {\n onSortChange(undefined);\n } else {\n onSortChange({\n fieldName: selectedField,\n sortType: selectedDirection,\n });\n }\n }\n onClose();\n }, [onSortChange, selectedField, selectedDirection, onClose]);\n\n const handleClear = useCallback(() => {\n if (!onSortChange) return;\n\n setSelectedField('');\n setSelectedDirection(SortType.ASC);\n\n onSortChange(undefined);\n onClose();\n }, [onSortChange, onClose]);\n\n return (\n <StyledDialog open={open} onClose={onClose} maxWidth=\"xs\" fullWidth>\n <StyledDialogTitle>\n <Typography variant=\"overline\" color=\"text.secondary\">\n Ordenar por\n </Typography>\n </StyledDialogTitle>\n <StyledDialogContent>\n <Stack spacing={2} pt={2}>\n <FormControl fullWidth size=\"small\">\n <InputLabel id=\"sort-field-label\">Campo</InputLabel>\n <Select\n labelId=\"sort-field-label\"\n value={selectedField}\n label=\"Campo\"\n onChange={e => setSelectedField(e.target.value)}\n >\n <MenuItem value=\"\">\n <em>Nenhum</em>\n </MenuItem>\n {sortableFields.map(field => (\n <MenuItem\n key={field.name}\n value={field.filter_field_name ?? field.name}\n >\n {field.description || field.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl fullWidth size=\"small\" disabled={!selectedField}>\n <InputLabel id=\"sort-direction-label\">Direção</InputLabel>\n <Select\n labelId=\"sort-direction-label\"\n value={selectedDirection}\n label=\"Direção\"\n onChange={e => setSelectedDirection(e.target.value as SortType)}\n >\n <MenuItem value={SortType.ASC}>\n Crescente {isNumberField ? '(1-9)' : '(A-Z)'}\n </MenuItem>\n <MenuItem value={SortType.DESC}>\n Decrescente {isNumberField ? '(9-1)' : '(Z-A)'}\n </MenuItem>\n </Select>\n </FormControl>\n </Stack>\n </StyledDialogContent>\n <StyledDialogActions>\n <Stack flex={1} width=\"100%\" direction=\"row\">\n <Button color=\"inherit\" onClick={handleClear}>\n Limpar\n </Button>\n </Stack>\n <Button\n onClick={onClose}\n variant=\"outlined\"\n color=\"inherit\"\n sx={{ minWidth: 24 }}\n >\n <Icon icon=\"CANCEL_CIRCLE\" />\n <LabelButton>Cancelar</LabelButton>\n </Button>\n <ApplyButton onClick={handleApply} variant=\"contained\">\n <Icon icon=\"SIMPLE_CHECK\" />\n <LabelButton>Aplicar</LabelButton>\n </ApplyButton>\n </StyledDialogActions>\n </StyledDialog>\n );\n};\n\nSortModal.displayName = 'SortModal';\n\nexport default memo(SortModal);\n","import Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { styled } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\n\nexport const StyledDialog = styled(Dialog)(() => ({\n '& .MuiDialog-paper': { width: '100%' },\n}));\n\nexport const StyledDialogTitle = styled(DialogTitle)(({ theme }) => ({\n borderBottom: '1px solid',\n borderColor: theme.palette.divider,\n padding: theme.spacing(1.5, 2),\n}));\n\nexport const StyledDialogContent = styled(DialogContent)(({ theme }) => ({\n padding: theme.spacing(2),\n}));\n\nexport const StyledDialogActions = styled(DialogActions)(({ theme }) => ({\n borderTop: '1px solid',\n borderColor: theme.palette.divider,\n padding: theme.spacing(1.5, 2),\n}));\n\nexport const ApplyButton = styled(Button)(({ theme }) => ({\n minWidth: 24,\n [theme.breakpoints.down(330)]: {\n padding: theme.spacing(1),\n },\n}));\n\nexport const LabelButton = styled(Typography)(({ theme }) => ({\n fontWeight: '600',\n margin: theme.spacing(0, 1),\n [theme.breakpoints.down(330)]: {\n fontSize: 0,\n margin: 0,\n },\n}));\n","import { useMemo } from 'react';\nimport type { GridColDef } from '@mui/x-data-grid-premium';\n\nimport { UseColumnOrderingParams } from '../props';\n\nexport const useColumnOrdering = ({\n columns,\n fields,\n preferredFieldOrder,\n}: UseColumnOrderingParams) => {\n const columnsByFieldId = useMemo(\n () => new Map(columns.map(column => [column.field, column])),\n [columns],\n );\n\n const fieldsByName = useMemo(\n () => new Map(fields?.map(f => [f.name, f]) || []),\n [fields],\n );\n\n const orderedColumns = useMemo(() => {\n if (!preferredFieldOrder || preferredFieldOrder.length === 0 || !fields) {\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: GridColDef[] = [];\n\n const pushColumnForField = (fieldName: string) => {\n const field = fieldsByName.get(fieldName);\n if (!field) return;\n\n const column = columnsByFieldId.get(field.name);\n\n if (!column || usedColumnFieldIds.has(field.name)) return;\n\n ordered.push(column);\n usedColumnFieldIds.add(field.name);\n };\n\n preferredWithoutActions.forEach(fieldName => {\n pushColumnForField(fieldName);\n });\n\n fields.forEach(field => {\n if (field.name === actionFieldName) return;\n if (preferredWithoutActions.includes(field.name)) return;\n\n const column = columnsByFieldId.get(field.name);\n\n if (!column || usedColumnFieldIds.has(field.name)) return;\n\n ordered.push(column);\n usedColumnFieldIds.add(field.name);\n });\n\n pushColumnForField(actionFieldName);\n\n return ordered.length === 0 ? columns : ordered;\n }, [columns, columnsByFieldId, fieldsByName, preferredFieldOrder, fields]);\n\n return { orderedColumns, columnsByFieldId, fieldsByName };\n};\n","import { useCallback, useMemo } from 'react';\nimport type { GridColumnVisibilityModel } from '@mui/x-data-grid-premium';\nimport { Field } from 'model/entity-metadata';\n\nimport useLocalStorage from 'hooks/useLocalStorage';\n\nimport { UseColumnVisibilityParams } from '../props';\n\nfunction getColumnFieldIdFromField(field: Field): string {\n return field.name;\n}\n\nexport const useColumnVisibility = ({\n fields,\n columnsByFieldId,\n defaultVisibleFieldNames,\n columnVisibilityStorageKey,\n onColumnVisibilityModelChange,\n}: UseColumnVisibilityParams) => {\n const hasStorageKey = Boolean(columnVisibilityStorageKey);\n\n const [storedVisibilityModel, setStoredVisibilityModel] = useLocalStorage<\n GridColumnVisibilityModel | undefined\n >(columnVisibilityStorageKey || '__dynamic-data-view:columns__', undefined, {\n initializeWithValue: hasStorageKey,\n });\n\n const initialState = useMemo(() => {\n if (!fields) return undefined;\n\n const visibilityModel: GridColumnVisibilityModel = {};\n\n fields.forEach(field => {\n const columnFieldId = getColumnFieldIdFromField(field);\n if (!columnsByFieldId.has(columnFieldId)) return;\n\n let visible: boolean | undefined;\n\n if (hasStorageKey && storedVisibilityModel) {\n const stored = storedVisibilityModel[columnFieldId];\n if (typeof stored === 'boolean') {\n visible = stored;\n }\n }\n\n if (\n visible === undefined &&\n defaultVisibleFieldNames &&\n defaultVisibleFieldNames.length > 0\n ) {\n visible = defaultVisibleFieldNames.includes(field.name);\n }\n\n if (typeof visible === 'boolean') {\n visibilityModel[columnFieldId] = visible;\n }\n });\n\n if (Object.keys(visibilityModel).length === 0) return undefined;\n\n return {\n columns: {\n columnVisibilityModel: visibilityModel,\n },\n };\n }, [\n columnsByFieldId,\n defaultVisibleFieldNames,\n fields,\n hasStorageKey,\n storedVisibilityModel,\n ]);\n\n const handleColumnVisibilityModelChange = useCallback(\n (model: GridColumnVisibilityModel) => {\n if (hasStorageKey) {\n setStoredVisibilityModel(model);\n }\n\n if (onColumnVisibilityModelChange) {\n onColumnVisibilityModelChange(model);\n }\n },\n [hasStorageKey, onColumnVisibilityModelChange, setStoredVisibilityModel],\n );\n\n return {\n initialState,\n handleColumnVisibilityModelChange,\n };\n};\n","import { useMemo } from 'react';\nimport { GridColDef } from '@mui/x-data-grid-premium';\n\nimport { Columns } from 'types/datagrid';\n\nimport { ACCESS_TYPES } from '../constants/columnDefaults';\nimport { UseDynamicColumnsProps } from '../props';\nimport { getColumnStrategy } from '../utils/columnStrategies';\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 ENTITY_MIN_WIDTH: 100,\n ENTITY_FLEX: 0.5,\n ID_MIN_WIDTH: 200,\n ID_FLEX: 1,\n ACTIONS_WIDTH: 80,\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';\nimport { Field } from 'model/entity-metadata';\n\nimport { COLUMN_DEFAULTS } from '../constants/columnDefaults';\nimport { CellRenderer, ColumnStrategy, DynamicRowData } from '../props';\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 headerAlign: 'center',\n align: 'center',\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 { useCallback, useRef, useState } from 'react';\nimport type { Filter, FilterCondition } from 'model/filter';\n\nimport uuidv4 from 'utils/uuidv4';\n\nimport { UseFiltersProps, UseFiltersReturn } from '../props';\nimport {\n buildFilterFromConditions,\n getDefaultCondition,\n isValidCondition,\n} from '../utils/filter';\n\n// Converte filtro inicial em condições\nconst parseInitialConditions = (initialFilter?: Filter): FilterCondition[] => {\n if (!initialFilter?.groups?.[0]?.conditionals) return [];\n return initialFilter.groups[0].conditionals.map(cond => ({\n id: uuidv4(),\n operator: initialFilter.groups[0].operator,\n fieldName: cond.fieldName,\n conditional: cond.conditional,\n value: cond.value,\n }));\n};\n\n/**\n * Hook para gerenciar estado de filtros do DynamicDataView com condições dinâmicas\n *\n * - conditions: estado de edição (o que o usuário vê no popover)\n * - appliedConditions: estado aplicado (o que está efetivamente filtrando)\n * - hasActiveFilters/activeFiltersCount: calculados com base em appliedConditions\n */\nexport const useFilters = ({\n fields,\n initialFilter,\n}: UseFiltersProps): UseFiltersReturn => {\n const [isOpen, setIsOpen] = useState(false);\n\n // Estado aplicado (efetivamente filtrando)\n const [appliedConditions, setAppliedConditions] = useState<FilterCondition[]>(\n () => parseInitialConditions(initialFilter),\n );\n const [appliedFilter, setAppliedFilter] = useState<Filter | undefined>(\n initialFilter,\n );\n\n // Estado de edição (o que o usuário vê/edita no popover)\n const [conditions, setConditions] = useState<FilterCondition[]>(() =>\n parseInitialConditions(initialFilter),\n );\n\n // Referência para snapshot antes de abrir o popover\n const snapshotRef = useRef<FilterCondition[]>([]);\n\n const openDrawer = useCallback(() => {\n // Salva snapshot das condições atuais (aplicadas) ao abrir\n snapshotRef.current = appliedConditions.map(c => ({ ...c }));\n // Sincroniza edição com aplicado ao abrir\n setConditions(appliedConditions.map(c => ({ ...c })));\n setIsOpen(true);\n }, [appliedConditions]);\n\n const closeDrawer = () => setIsOpen(false);\n\n const addCondition = useCallback(() => {\n const filterableFields = fields.filter(\n f => f.available_filter_conditions?.length > 0,\n );\n if (filterableFields.length === 0) return;\n\n const usedFieldNames = conditions.map(c => c.fieldName);\n const availableFields = filterableFields.filter(\n f => !usedFieldNames.includes(f.filter_field_name ?? f.name),\n );\n if (availableFields.length === 0) return;\n\n const currentOperator =\n conditions.length > 0 ? conditions[0].operator : 'AND';\n const firstField = availableFields[0];\n const newCondition: FilterCondition = {\n id: uuidv4(),\n operator: currentOperator,\n fieldName: firstField.filter_field_name ?? firstField.name,\n conditional: getDefaultCondition(firstField),\n value: [],\n };\n\n setConditions(prev => [...prev, newCondition]);\n }, [fields, conditions]);\n\n const updateCondition = useCallback(\n (id: string, changes: Partial<FilterCondition>) => {\n setConditions(prev => {\n const targetCondition = prev.find(c => c.id === id);\n if (!targetCondition) return prev;\n\n if (changes.operator && changes.operator !== targetCondition.operator) {\n const newOperator = changes.operator;\n return prev.map(c => {\n if (c.id === id) {\n return { ...c, ...changes };\n }\n return { ...c, operator: newOperator };\n });\n }\n\n return prev.map(c => (c.id === id ? { ...c, ...changes } : c));\n });\n },\n [],\n );\n\n const removeCondition = useCallback((id: string) => {\n setConditions(prev => prev.filter(c => c.id !== id));\n }, []);\n\n const clearAllFilters = () => {\n setConditions([]);\n setAppliedConditions([]);\n setAppliedFilter(undefined);\n };\n\n const applyFilters = () => {\n const filter = buildFilterFromConditions(conditions);\n setAppliedConditions(conditions.map(c => ({ ...c })));\n setAppliedFilter(filter);\n setIsOpen(false);\n return filter;\n };\n\n const cancelChanges = () => {\n // Reverte para o snapshot salvo ao abrir\n setConditions(snapshotRef.current.map(c => ({ ...c })));\n setIsOpen(false);\n };\n\n // Calculado com base nos filtros APLICADOS (não em edição)\n const hasActiveFilters = appliedConditions.some(isValidCondition);\n const activeFiltersCount = appliedConditions.filter(isValidCondition).length;\n\n return {\n conditions,\n filter: appliedFilter,\n isOpen,\n hasActiveFilters,\n activeFiltersCount,\n openDrawer,\n closeDrawer,\n addCondition,\n updateCondition,\n removeCondition,\n clearAllFilters,\n applyFilters,\n cancelChanges,\n };\n};\n\nexport default useFilters;\n","import { useEffect, useState } from 'react';\nimport { Filter, Sort } from 'model/filter';\n\nconst getStoredValue = <T>(key: string): T | undefined => {\n try {\n const item = localStorage.getItem(key);\n return item ? JSON.parse(item) : undefined;\n } catch {\n return undefined;\n }\n};\n\nconst setStoredValue = <T>(key: string, value: T | undefined): void => {\n try {\n if (value === undefined) {\n localStorage.removeItem(key);\n } else {\n localStorage.setItem(key, JSON.stringify(value));\n }\n } catch {\n // Silently ignore localStorage errors\n }\n};\n\nexport const useFilterStorage = (\n storageKey: string,\n externalFilter?: Filter,\n onFilterChange?: (filter: Filter | undefined) => void,\n) => {\n const filterKey = `${storageKey}:filter`;\n\n const [internalFilter, setInternalFilter] = useState<Filter | undefined>(\n () => {\n return getStoredValue<Filter>(filterKey) || externalFilter;\n },\n );\n\n // Sync with external filter\n useEffect(() => {\n if (externalFilter !== undefined) {\n setInternalFilter(externalFilter);\n }\n }, [externalFilter]);\n\n const handleFilterChange = (newFilter: Filter | undefined) => {\n setInternalFilter(newFilter);\n setStoredValue(filterKey, newFilter);\n onFilterChange?.(newFilter);\n };\n\n return {\n filter: internalFilter,\n setFilter: handleFilterChange,\n };\n};\n\nexport const useSortStorage = (\n storageKey: string,\n externalSort?: Sort,\n onSortChange?: (sort: Sort | undefined) => void,\n) => {\n const sortKey = `${storageKey}:sort`;\n\n const [internalSort, setInternalSort] = useState<Sort | undefined>(() => {\n return getStoredValue<Sort>(sortKey) || externalSort;\n });\n\n // Sync with external sort\n useEffect(() => {\n if (externalSort !== undefined) {\n setInternalSort(externalSort);\n }\n }, [externalSort]);\n\n const handleSortChange = (newSort: Sort | undefined) => {\n setInternalSort(newSort);\n setStoredValue(sortKey, newSort);\n onSortChange?.(newSort);\n };\n\n return {\n sort: internalSort,\n setSort: handleSortChange,\n };\n};\n","import { useCallback, useMemo } from 'react';\nimport type { GridSortModel } from '@mui/x-data-grid-premium';\nimport { Sort, SortType } from 'model/filter';\n\nimport { UseSortingParams } from '../props';\n\nexport const useSorting = ({ sort, onSortChange }: UseSortingParams) => {\n const sortModel: GridSortModel = useMemo(() => {\n if (!sort) return [];\n return [\n {\n field: sort.fieldName,\n sort: sort.sortType.toLowerCase() as 'asc' | 'desc',\n },\n ];\n }, [sort]);\n\n const handleSortModelChange = useCallback(\n (model: GridSortModel) => {\n if (!onSortChange) return;\n\n const firstItem = model[0];\n if (!firstItem || !firstItem.sort) {\n onSortChange(undefined);\n return;\n }\n\n const newSort: Sort = {\n fieldName: firstItem.field,\n sortType: firstItem.sort.toUpperCase() as SortType,\n };\n onSortChange(newSort);\n },\n [onSortChange],\n );\n\n return {\n sortModel,\n handleSortModelChange,\n };\n};\n","import {\n AccessType,\n DataType,\n EntityMetadataResponse,\n Field,\n} from 'model/entity-metadata';\n\nexport const createActionsField = (): Field => ({\n name: 'ACTIONS',\n description: '',\n filter_field_name: null,\n type: DataType.TEXT,\n metadata: null,\n access_type: AccessType.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 { 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 borderRadius: 3,\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';\n\nimport Icon from 'components/Icon';\n\nimport { ImageRendererProps } from './props';\nimport { ImageContainer } from './style';\n\nconst ImageRenderer = ({\n imageResourceId,\n getImageUrl,\n size = 48,\n alt = 'Imagem',\n onClick,\n sx,\n}: ImageRendererProps): ReactNode => {\n const hasImage = !!imageResourceId;\n const imageUrl =\n hasImage && getImageUrl ? getImageUrl(imageResourceId) : undefined;\n const clickable = !!onClick;\n\n return (\n <ImageContainer\n size={size}\n noImage={!hasImage}\n clickable={clickable}\n onClick={onClick}\n sx={sx}\n >\n {imageUrl ? (\n <img src={imageUrl} alt={alt} />\n ) : (\n <Icon\n icon=\"SEARCH_IMAGE\"\n width={Math.round(size / 2)}\n color=\"text.disabled\"\n />\n )}\n </ImageContainer>\n );\n};\n\nexport default memo(ImageRenderer);\n","import Box from '@mui/material/Box';\nimport { styled } from '@mui/material/styles';\n\n// StatusRenderer styles\nexport interface StatusLabelProps {\n isActive: boolean;\n}\n\nexport const StatusLabel = styled('span')<StatusLabelProps>(\n ({ theme, isActive }) => ({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: theme.spacing(0.2, 1),\n borderRadius: theme.shape.borderRadius,\n fontSize: '0.75rem',\n fontWeight: 600,\n width: 'fit-content',\n height: 'auto',\n lineHeight: '1.25rem',\n whiteSpace: 'nowrap',\n margin: 'auto',\n backgroundColor: isActive\n ? theme.palette.success.lighter || '#00A76F29'\n : theme.palette.warning.lighter || '#FF563029',\n color: isActive\n ? theme.palette.success.darker || '#007867'\n : theme.palette.warning.darker || '#B71D18',\n }),\n);\n\n// ImageRenderer styles\nexport interface ImageContainerProps {\n size: number;\n noImage: boolean;\n clickable: boolean;\n}\n\nexport const ImageContainer = styled(Box, {\n shouldForwardProp: prop =>\n !['size', 'noImage', 'clickable'].includes(prop as string),\n})<ImageContainerProps>(({ theme, size, noImage, clickable }) => ({\n width: size,\n height: size,\n minWidth: size,\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n cursor: clickable ? 'pointer' : 'default',\n transition: 'opacity 0.2s ease-in-out',\n color: theme.palette.text.disabled,\n ...(noImage && {\n border: `1px dashed ${theme.palette.divider}`,\n backgroundColor: theme.palette.grey[100],\n }),\n ...(clickable && {\n '&:hover': {\n opacity: 0.8,\n },\n }),\n '& img': {\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n borderRadius: '50%',\n },\n [theme.breakpoints.down('sm')]: {\n justifyContent: 'flex-start',\n alignItems: 'flex-start',\n },\n}));\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 Stack from '@mui/material/Stack';\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 return (\n <Stack direction=\"row\" alignItems=\"center\" height=\"100%\">\n <Typography variant=\"body2\" noWrap width=\"fit-content\">\n {isCurrency ? fCurrencyBRL(Number(value)) : fNumber(Number(value))}\n </Typography>\n </Stack>\n );\n};\n\nexport default memo(NumberRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport { StatusRendererProps } from './props';\nimport { StatusLabel } from './style';\n\nconst StatusRenderer = ({\n active,\n activeLabel = 'Ativo',\n inactiveLabel = 'Inativo',\n}: StatusRendererProps): ReactNode => {\n return (\n <StatusLabel isActive={active}>\n {active ? activeLabel : inactiveLabel}\n </StatusLabel>\n );\n};\n\nexport default memo(StatusRenderer);\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(/&nbsp;/g, ' ')\n .replace(/&amp;/g, '&')\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&quot;/g, '\"')\n .replace(/&#39;/g, \"'\")\n .trim();\n};\n\nconst TextRenderer = ({\n value,\n showCopyButton = false,\n copyMessage = 'Copiado',\n copyLabel,\n mask,\n}: TextRendererProps): ReactNode => {\n if (!value) return '-';\n\n const stringValue = String(value);\n const formattedValue = mask ? mask(stringValue) : sanitizeHtml(stringValue);\n\n if (showCopyButton) {\n return (\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Typography variant=\"body2\" noWrap>\n {formattedValue}\n </Typography>\n <CopyButton\n toCopy={stringValue}\n message={copyMessage}\n label={copyLabel}\n />\n </Stack>\n );\n }\n\n return formattedValue;\n};\n\nexport default memo(TextRenderer);\n","import { ReactNode } from 'react';\nimport { Field } from 'model/entity-metadata';\n\nimport { CURRENCY_FIELD_NAMES } from '../constants/columnDefaults';\nimport { CellRenderer, DynamicRowData } from '../props';\nimport {\n DateRenderer,\n DateTimeRenderer,\n EntityRenderer,\n NumberRenderer,\n StatusRenderer,\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 (\n <StatusRenderer\n active={Boolean(value)}\n activeLabel=\"Ativo\"\n inactiveLabel=\"Inativo\"\n />\n );\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","import { GridColumnVisibilityModel } from '@mui/x-data-grid-premium';\nimport { EntityMetadataResponse } from 'model/entity-metadata';\n\ninterface BuildVisibleFieldsParams {\n metadata?: EntityMetadataResponse;\n columnVisibilityModel?: GridColumnVisibilityModel;\n defaultVisibleFields?: string[];\n}\n\nexport const buildVisibleFields = ({\n metadata,\n columnVisibilityModel,\n defaultVisibleFields,\n}: BuildVisibleFieldsParams): string[] | undefined => {\n if (!metadata?.fields) return undefined;\n\n const allFields = metadata.fields.map(f => f.name);\n\n const visible = allFields.filter(fieldName => {\n if (fieldName === 'ACTIONS') return false;\n\n if (columnVisibilityModel) {\n return columnVisibilityModel[fieldName] !== false;\n }\n\n return defaultVisibleFields?.includes(fieldName) ?? true;\n });\n\n if (!defaultVisibleFields) return visible;\n\n return visible.sort((a, b) => {\n const indexA = defaultVisibleFields.indexOf(a);\n const indexB = defaultVisibleFields.indexOf(b);\n\n return indexA - indexB || 0;\n });\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zydon/common",
3
- "version": "2.8.24",
3
+ "version": "2.8.25",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "module": "./dist/index.js",
@@ -1,26 +0,0 @@
1
- import { a as a$4 } from './chunk-MC44LVZD.js';
2
- import { a as a$5 } from './chunk-IJZCVZ32.js';
3
- import { a as a$8 } from './chunk-IDFJFFIV.js';
4
- import { a as a$6 } from './chunk-6U5LS7MP.js';
5
- import { i, j, a as a$2, b as b$1, c, d, f, e, g, h } from './chunk-2W54CJ6E.js';
6
- import { a as a$9 } from './chunk-I4PPSW36.js';
7
- import { a as a$3 } from './chunk-CO2KQFUN.js';
8
- import { a } from './chunk-ET6H3IRG.js';
9
- import { a as a$7 } from './chunk-F65ZXAGV.js';
10
- import { a as a$1 } from './chunk-LQRRMVFN.js';
11
- import { b } from './chunk-RPO7AI5K.js';
12
- import { memo, forwardRef, useState, useCallback, useMemo, Children, isValidElement, cloneElement } from 'react';
13
- import Fo from 'react-fast-compare';
14
- import E from '@mui/material/Button';
15
- import _o from '@mui/material/CircularProgress';
16
- import Wo from '@mui/material/Divider';
17
- import x from '@mui/material/Stack';
18
- import io from '@mui/material/Typography';
19
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
20
- import { GridToolbarColumnsButton } from '@mui/x-data-grid-premium';
21
-
22
- var D="datagrid-actions";var Ao=({rowCount:t,page:e,rowsPerPage:r,onPaginationChange:i$1})=>jsxs(i,{children:[jsxs(x,{direction:"row",alignItems:"center",gap:.5,children:[jsx(io,{variant:"body2",color:"text.disabled",children:"Total de itens:"}),jsx(io,{variant:"body2",children:t})]}),jsx(j,{count:t,page:e,rowsPerPage:r,onPageChange:a=>i$1(a,r),onRowsPerPageChange:a=>i$1(e,a)})]}),lo=memo(Ao);var po=(t,e)=>Children.map(t,r=>{if(!isValidElement(r))return r;let i=r.props.onClick,a={};a.onClick=(...f)=>{e(),i&&i(...f);};let C=r.props;return C?.children&&(a.children=po(C.children,e)),cloneElement(r,a)}),Mo=({children:t,onClose:e})=>t?po(t,e):null,co=memo(Mo);var Oo=forwardRef(({children:t,...e},r)=>jsx(E,{...e,ref:r,color:"inherit",startIcon:jsx(a,{icon:"COLUMNS"}),children:t??"Colunas"}));Oo.displayName="ColumnsButton";var No=({setFilterButtonEl:t})=>{let e=useCallback(r=>{t(r);},[t]);return jsx(a$9,{container:D,children:jsx(GridToolbarColumnsButton,{ref:e,slotProps:{button:{color:"inherit",startIcon:jsx(a,{icon:"COLUMNS"}),children:"Colunas"}}})})},mo=No;var Uo=({title:t,headerContent:e$1,breakpoint:r="md",columns:i,rows:a$9=[],mobileRender:C,rowCount:f$1=0,paginationModel:s={page:0,pageSize:25},onPaginationChange:k,actions:G,moreActions:B,onAdd:O,onSearch:N,searchValue:uo,onSearchChange:ho,slots:u,slotProps:go,loading:h$1,fetching:H,containerProps:Po={height:562,maxHeight:562},hideFooter:L,hideHeader:V=!1,showColumnButton:T=!1,filterButton:g$1,activeFilters:z,...Co})=>{let m=a$1(),l=b("down",r),[ko,So]=useState(null),F=!!N,A=!!O,S=!!G,y=!!B,R=l&&y,b$2=!l&&y,bo=S||A||R,_=b$2||F||T||!!g$1||!l,W=useCallback(()=>jsx(lo,{rowCount:f$1,page:s.page,rowsPerPage:s.pageSize,onPaginationChange:k}),[f$1,s,k]),wo=useMemo(()=>({...u,footer:W,...T&&!u?.toolbar&&{toolbar:mo}}),[u,W,T]);return jsxs(a$2,{breakpoint:r,...Po,flex:h$1?1:void 0,minHeight:!h$1&&a$9.length===0?562:void 0,children:[!V&&jsxs(Fragment,{children:[jsxs(b$1,{breakpoint:r,children:[jsx(io,{variant:"overline",color:"text.secondary",noWrap:!0,children:t}),bo&&jsxs(c,{breakpoint:r,children:[S&&G,A&&jsxs(Fragment,{children:[S&&jsx(d,{orientation:"vertical",flexItem:!0}),jsx(E,{startIcon:jsx(a,{icon:"SIMPLE_ADD"}),variant:"contained",onClick:O,children:"Adicionar"})]}),R&&jsxs(Fragment,{children:[(S||A)&&jsx(d,{orientation:"vertical",flexItem:!0}),jsx(E,{color:"inherit",startIcon:jsx(a,{icon:"MORE_BOLD"}),size:"small",onClick:m.onOpen,children:"Mais"})]})]})]}),_&&jsxs(f,{breakpoint:r,children:[jsxs(x,{flex:1,direction:"row",alignItems:"center",id:D,gap:.5,children:[y&&jsxs(Fragment,{children:[b$2&&jsxs(Fragment,{children:[jsx(E,{color:"inherit",startIcon:jsx(a,{icon:"MORE_BOLD"}),size:"small",onClick:m.onOpen,children:"Mais"}),!l&&jsx(e,{orientation:"vertical",flexItem:!0})]}),(b$2||R)&&jsx(a$3,{open:m.open,anchorEl:m.open,onClose:m.onClose,sx:{minWidth:160},disabledArrow:!0,children:jsx(co,{onClose:m.onClose,children:B})})]}),!l&&g$1&&jsxs(Fragment,{children:[g$1,b$2&&jsx(e,{orientation:"vertical",flexItem:!0})]})]}),F&&jsxs(g,{breakpoint:r,children:[jsx(a$4,{value:uo,placeholder:"Buscar",onSearch:N,onChange:p=>ho?.(p.target.value),size:"small",fullWidth:!0,iconPosition:"start"}),l&&g$1&&jsx(x,{ml:1,children:g$1})]})]}),z&&z]}),!_&&!V&&jsx(Wo,{sx:{mt:2}}),e$1&&e$1,l?jsxs(a$5,{isFetching:H,fetching:jsx(a$6,{}),isLoading:h$1,loading:jsx(_o,{sx:{m:"160px auto"}}),isEmpty:a$9.length===0,empty:jsx(x,{flex:1,alignItems:"center",justifyContent:"center",children:u?.noRowsOverlay?jsx(u.noRowsOverlay,{}):jsx(io,{variant:"body2",color:"text.secondary",children:"Nenhum registro encontrado"})}),children:[jsx(a$7,{fillContent:!0,children:a$9.map(p=>C(p))}),!L&&jsx(h,{children:jsx(j,{count:f$1,page:s.page,rowsPerPage:s.pageSize,onPageChange:p=>k(p,s.pageSize),onRowsPerPageChange:p=>k(s.page,p)})})]}):jsx(a$8,{columns:i,rows:a$9,slots:wo,slotProps:{panel:{anchorEl:ko},toolbar:{setFilterButtonEl:So,showQuickFilter:!0},...go},columnHeaderHeight:48,getRowHeight:()=>68,loading:h$1,fetching:H,hideFooter:L,...Co})]},h$1?"loading":"data")},Br=memo(Uo,Fo);
23
-
24
- export { lo as a, co as b, mo as c, Br as d };
25
- //# sourceMappingURL=out.js.map
26
- //# sourceMappingURL=chunk-B55753MU.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/DataView/index.tsx","../src/components/DataView/contants.ts","../src/components/DataView/DesktopFooter.tsx","../src/components/DataView/EnhancedMoreActions.tsx","../src/components/DataView/Toolbar.tsx"],"names":["memo","useCallback","useMemo","useState","isEqual","Button","CircularProgress","Divider","Stack","Typography","DATAGRID_ACTIONS","jsx","jsxs","DesktopFooter","rowCount","page","rowsPerPage","onPaginationChange","DesktopPaginationContainer","Pagination_default","newPage","newRowsPerPage","DesktopFooter_default","Children","cloneElement","isValidElement","createEnhanceMoreActions","children","onClose","child","originalOnClick","enhancedProps","args","childProps","EnhancedMoreActions","EnhancedMoreActions_default","forwardRef","GridToolbarColumnsButton","ColumnsButton","props","ref","Icon_default","Toolbar","setFilterButtonEl","handleColumnsButtonRef","button","Portal_default","Toolbar_default","Fragment","DataViewComponent","title","headerContent","breakpoint","columns","rows","mobileRender","paginationModel","actions","moreActions","onAdd","onSearch","searchValue","onSearchChange","slots","slotProps","loading","fetching","containerProps","hideFooter","hideHeader","showColumnButton","filterButton","activeFilters","others","popover","usePopover_default","isMobile","useResponsive_default","filterButtonEl","showSearch","showAdd","showActions","showMoreActions","showHeaderMoreActions","showTopbarMoreActions","showActionsContainer","showTopbar","FooterComponent","dataGridSlots","Container","Header","ActionsContainer","ActionsDivider","Topbar","ToolbarActionsDivider","MenuPopover_default","SearchContainer","SearchInput_default","e","Result_default","FixedProgressBar_default","Scrollbar_default","row","MobilePaginationContainer","DataGrid_default","DataView_default"],"mappings":"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","sourcesContent":["import { memo, useCallback, useMemo, useState } from 'react';\nimport isEqual from 'react-fast-compare';\nimport Button from '@mui/material/Button';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport {\n GridSlotsComponentsProps,\n GridValidRowModel,\n} from '@mui/x-data-grid-premium';\n\nimport DataGrid from 'components/DataGrid';\nimport FixedProgressBar from 'components/FixedProgressBar';\nimport Icon from 'components/Icon';\nimport MenuPopover from 'components/MenuPopover';\nimport Result from 'components/Result';\nimport Scrollbar from 'components/Scrollbar';\nimport SearchInput from 'components/SearchInput';\nimport usePopover from 'hooks/usePopover';\nimport useResponsive from 'hooks/useResponsive';\n\nimport { DATAGRID_ACTIONS } from './contants';\nimport DesktopFooter from './DesktopFooter';\nimport EnhancedMoreActions from './EnhancedMoreActions';\nimport Pagination from './Pagination';\nimport { DataGridSlotsProps, DataViewProps } from './props';\nimport {\n ActionsContainer,\n ActionsDivider,\n Container,\n Header,\n MobilePaginationContainer,\n SearchContainer,\n ToolbarActionsDivider,\n Topbar,\n} from './styles';\nimport Toolbar from './Toolbar';\n\nconst DataViewComponent = <T extends GridValidRowModel = GridValidRowModel>({\n title,\n headerContent,\n breakpoint = 'md',\n columns,\n rows = [],\n mobileRender,\n rowCount = 0,\n paginationModel = { page: 0, pageSize: 25 },\n onPaginationChange,\n actions,\n moreActions,\n onAdd,\n onSearch,\n searchValue,\n onSearchChange,\n slots,\n slotProps,\n loading,\n fetching,\n containerProps = { height: 562, maxHeight: 562 },\n hideFooter,\n hideHeader = false,\n showColumnButton = false,\n filterButton,\n activeFilters,\n ...others\n}: DataViewProps<T>) => {\n const popover = usePopover();\n const isMobile = useResponsive('down', breakpoint);\n const [filterButtonEl, setFilterButtonEl] =\n useState<HTMLButtonElement | null>(null);\n\n const showSearch = !!onSearch;\n const showAdd = !!onAdd;\n const showActions = !!actions;\n const showMoreActions = !!moreActions;\n const showHeaderMoreActions = isMobile && showMoreActions;\n const showTopbarMoreActions = !isMobile && showMoreActions;\n const showActionsContainer = showActions || showAdd || showHeaderMoreActions;\n const showTopbar =\n showTopbarMoreActions ||\n showSearch ||\n showColumnButton ||\n !!filterButton ||\n !isMobile;\n\n const FooterComponent = useCallback(\n () => (\n <DesktopFooter\n rowCount={rowCount}\n page={paginationModel.page}\n rowsPerPage={paginationModel.pageSize}\n onPaginationChange={onPaginationChange}\n />\n ),\n [rowCount, paginationModel, onPaginationChange],\n );\n\n const dataGridSlots: DataGridSlotsProps = useMemo(\n () => ({\n ...slots,\n footer: FooterComponent as unknown as DataGridSlotsProps['footer'],\n ...(showColumnButton &&\n !slots?.toolbar && {\n toolbar: Toolbar as unknown as DataGridSlotsProps['toolbar'],\n }),\n }),\n [slots, FooterComponent, showColumnButton],\n );\n\n return (\n <Container\n key={loading ? 'loading' : 'data'}\n breakpoint={breakpoint}\n {...containerProps}\n flex={loading ? 1 : undefined}\n minHeight={!loading && rows.length === 0 ? 562 : undefined}\n >\n {!hideHeader && (\n <>\n <Header breakpoint={breakpoint}>\n <Typography variant=\"overline\" color=\"text.secondary\" noWrap>\n {title}\n </Typography>\n\n {showActionsContainer && (\n <ActionsContainer breakpoint={breakpoint}>\n {showActions && actions}\n\n {showAdd && (\n <>\n {showActions && (\n <ActionsDivider orientation=\"vertical\" flexItem />\n )}\n\n <Button\n startIcon={<Icon icon=\"SIMPLE_ADD\" />}\n variant=\"contained\"\n onClick={onAdd}\n >\n Adicionar\n </Button>\n </>\n )}\n\n {showHeaderMoreActions && (\n <>\n {(showActions || showAdd) && (\n <ActionsDivider orientation=\"vertical\" flexItem />\n )}\n\n <Button\n color=\"inherit\"\n startIcon={<Icon icon=\"MORE_BOLD\" />}\n size=\"small\"\n onClick={popover.onOpen}\n >\n Mais\n </Button>\n </>\n )}\n </ActionsContainer>\n )}\n </Header>\n\n {showTopbar && (\n <Topbar breakpoint={breakpoint}>\n <Stack\n flex={1}\n direction=\"row\"\n alignItems=\"center\"\n id={DATAGRID_ACTIONS}\n gap={0.5}\n >\n {showMoreActions && (\n <>\n {showTopbarMoreActions && (\n <>\n <Button\n color=\"inherit\"\n startIcon={<Icon icon=\"MORE_BOLD\" />}\n size=\"small\"\n onClick={popover.onOpen}\n >\n Mais\n </Button>\n\n {!isMobile && (\n <ToolbarActionsDivider\n orientation=\"vertical\"\n flexItem\n />\n )}\n </>\n )}\n\n {(showTopbarMoreActions || showHeaderMoreActions) && (\n <MenuPopover\n open={popover.open}\n anchorEl={popover.open}\n onClose={popover.onClose}\n sx={{\n minWidth: 160,\n }}\n disabledArrow={true}\n >\n <EnhancedMoreActions onClose={popover.onClose}>\n {moreActions}\n </EnhancedMoreActions>\n </MenuPopover>\n )}\n </>\n )}\n\n {!isMobile && filterButton && (\n <>\n {filterButton}\n\n {showTopbarMoreActions && (\n <ToolbarActionsDivider orientation=\"vertical\" flexItem />\n )}\n </>\n )}\n </Stack>\n\n {showSearch && (\n <SearchContainer breakpoint={breakpoint}>\n <SearchInput\n value={searchValue}\n placeholder=\"Buscar\"\n onSearch={onSearch}\n onChange={e => onSearchChange?.(e.target.value)}\n size=\"small\"\n fullWidth\n iconPosition=\"start\"\n />\n {isMobile && filterButton && (\n <Stack ml={1}>{filterButton}</Stack>\n )}\n </SearchContainer>\n )}\n </Topbar>\n )}\n\n {activeFilters && activeFilters}\n </>\n )}\n\n {!showTopbar && !hideHeader && <Divider sx={{ mt: 2 }} />}\n\n {headerContent && headerContent}\n\n {isMobile ? (\n <Result\n isFetching={fetching}\n fetching={<FixedProgressBar />}\n isLoading={loading}\n loading={<CircularProgress sx={{ m: '160px auto' }} />}\n isEmpty={rows.length === 0}\n empty={\n <Stack flex={1} alignItems=\"center\" justifyContent=\"center\">\n {slots?.noRowsOverlay ? (\n <slots.noRowsOverlay />\n ) : (\n <Typography variant=\"body2\" color=\"text.secondary\">\n Nenhum registro encontrado\n </Typography>\n )}\n </Stack>\n }\n >\n <Scrollbar fillContent>\n {rows.map(row => mobileRender(row))}\n </Scrollbar>\n\n {!hideFooter && (\n <MobilePaginationContainer>\n <Pagination\n count={rowCount}\n page={paginationModel.page}\n rowsPerPage={paginationModel.pageSize}\n onPageChange={newPage =>\n onPaginationChange(newPage, paginationModel.pageSize)\n }\n onRowsPerPageChange={newRowsPerPage =>\n onPaginationChange(paginationModel.page, newRowsPerPage)\n }\n />\n </MobilePaginationContainer>\n )}\n </Result>\n ) : (\n <DataGrid\n columns={columns}\n rows={rows}\n slots={dataGridSlots}\n slotProps={{\n panel: { anchorEl: filterButtonEl },\n toolbar: {\n setFilterButtonEl,\n showQuickFilter: true,\n } as unknown as GridSlotsComponentsProps['toolbar'],\n ...slotProps,\n }}\n columnHeaderHeight={48}\n getRowHeight={() => 68}\n loading={loading}\n fetching={fetching}\n hideFooter={hideFooter}\n {...others}\n />\n )}\n </Container>\n );\n};\n\nexport default memo(DataViewComponent, isEqual) as typeof DataViewComponent;\nexport {\n ActionsContainer,\n ActionsDivider,\n Container,\n DesktopFooter,\n EnhancedMoreActions,\n Header,\n MobilePaginationContainer,\n SearchContainer,\n Toolbar,\n ToolbarActionsDivider,\n Topbar,\n};\n","export const DATAGRID_ACTIONS = 'datagrid-actions';\n","import { memo } from 'react';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport Pagination from './Pagination';\nimport { DesktopFooterProps } from './props';\nimport { DesktopPaginationContainer } from './styles';\n\nconst DesktopFooter = ({\n rowCount,\n page,\n rowsPerPage,\n onPaginationChange,\n}: DesktopFooterProps) => {\n return (\n <DesktopPaginationContainer>\n <Stack direction=\"row\" alignItems=\"center\" gap={0.5}>\n <Typography variant=\"body2\" color=\"text.disabled\">\n Total de itens:\n </Typography>\n <Typography variant=\"body2\">{rowCount}</Typography>\n </Stack>\n\n <Pagination\n count={rowCount}\n page={page}\n rowsPerPage={rowsPerPage}\n onPageChange={newPage => onPaginationChange(newPage, rowsPerPage)}\n onRowsPerPageChange={newRowsPerPage =>\n onPaginationChange(page, newRowsPerPage)\n }\n />\n </DesktopPaginationContainer>\n );\n};\n\nexport default memo(DesktopFooter);\n","import {\n Children,\n cloneElement,\n isValidElement,\n memo,\n ReactElement,\n ReactNode,\n} from 'react';\n\nimport { EnhancedMoreActionsProps } from './props';\n\nconst createEnhanceMoreActions = (\n children: ReactNode,\n onClose: () => void,\n): ReactNode => {\n return Children.map(children, child => {\n if (!isValidElement(child)) {\n return child;\n }\n\n const originalOnClick = (\n child.props as { onClick?: (...args: unknown[]) => void }\n ).onClick;\n\n const enhancedProps: {\n onClick?: (...args: unknown[]) => void;\n children?: ReactNode;\n } = {};\n\n enhancedProps.onClick = (...args: unknown[]) => {\n onClose();\n if (originalOnClick) {\n originalOnClick(...args);\n }\n };\n\n const childProps = child.props as { children?: ReactNode };\n if (childProps?.children) {\n enhancedProps.children = createEnhanceMoreActions(\n childProps.children,\n onClose,\n );\n }\n\n return cloneElement(child as ReactElement, enhancedProps);\n });\n};\n\nconst EnhancedMoreActions = ({\n children,\n onClose,\n}: EnhancedMoreActionsProps) => {\n if (!children) return null;\n return createEnhanceMoreActions(children, onClose);\n};\n\nexport default memo(EnhancedMoreActions);\n","import { forwardRef, useCallback } from 'react';\nimport Button, { ButtonProps } from '@mui/material/Button';\nimport { GridToolbarColumnsButton } from '@mui/x-data-grid-premium';\n\nimport Icon from 'components/Icon';\nimport Portal from 'components/Portal';\n\nimport { DATAGRID_ACTIONS } from './contants';\nimport { ToolbarProps } from './props';\n\nconst ColumnsButton = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ children, ...props }, ref) => (\n <Button\n {...props}\n ref={ref}\n color=\"inherit\"\n startIcon={<Icon icon=\"COLUMNS\" />}\n >\n {children ?? 'Colunas'}\n </Button>\n ),\n);\n\nColumnsButton.displayName = 'ColumnsButton';\n\nconst Toolbar = ({ setFilterButtonEl }: ToolbarProps) => {\n const handleColumnsButtonRef = useCallback(\n (button: HTMLButtonElement | null) => {\n setFilterButtonEl(button);\n },\n [setFilterButtonEl],\n );\n\n return (\n <Portal container={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 Toolbar;\n"]}