@zydon/common 2.8.79 → 2.8.80
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-UQJKTFVZ.js +27 -0
- package/dist/chunk-UQJKTFVZ.js.map +1 -0
- package/dist/components/Analytics/OverviewAnalytics/index.js +1 -1
- package/dist/components/Analytics/PartnerAnalysis/index.d.ts +81 -2
- package/dist/components/Analytics/PartnerAnalysis/index.js +34 -16
- package/dist/components/Analytics/PartnerAnalysis/index.js.map +1 -1
- package/dist/components/DataView/index.js +1 -1
- package/dist/components/DynamicDataView/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-Z275MVEP.js +0 -27
- package/dist/chunk-Z275MVEP.js.map +0 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { a as a$9 } from './chunk-R2BCPHRH.js';
|
|
2
|
+
import { a as a$6 } from './chunk-4F2NKGF6.js';
|
|
3
|
+
import { a as a$3 } from './chunk-NMGWHSNZ.js';
|
|
4
|
+
import { a as a$7 } from './chunk-6U5LS7MP.js';
|
|
5
|
+
import { a as a$5 } from './chunk-PRWQQJDL.js';
|
|
6
|
+
import { i, r, k, n, l, a as a$2, p, j, m, b as b$1, c, d, q, h, f, e, o, g } from './chunk-XUDTPZHF.js';
|
|
7
|
+
import { a as a$8 } from './chunk-F65ZXAGV.js';
|
|
8
|
+
import { a as a$4 } from './chunk-I4PPSW36.js';
|
|
9
|
+
import { a } from './chunk-2GTD4JW2.js';
|
|
10
|
+
import { a as a$1 } from './chunk-LQRRMVFN.js';
|
|
11
|
+
import { b } from './chunk-2ZJUGM2S.js';
|
|
12
|
+
import { memo, forwardRef, useState, useRef, useEffect, useMemo, Children, isValidElement, cloneElement, useCallback, Fragment as Fragment$1 } from 'react';
|
|
13
|
+
import ot from 'react-fast-compare';
|
|
14
|
+
import et from '@mui/material/IconButton';
|
|
15
|
+
import tt from '@mui/material/LinearProgress';
|
|
16
|
+
import to from '@mui/material/Stack';
|
|
17
|
+
import ee from '@mui/material/Tooltip';
|
|
18
|
+
import Ce from '@mui/lab/LoadingButton';
|
|
19
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
20
|
+
import _o from '@mui/material/Button';
|
|
21
|
+
import Xo from '@mui/material/Typography';
|
|
22
|
+
import { GridToolbarColumnsButton } from '@mui/x-data-grid-premium';
|
|
23
|
+
|
|
24
|
+
var Fo=(o,e)=>typeof o=="function"?o(e):!!o,Ae=(o,e)=>{if(o)return o===!0?{}:typeof o=="function"?o(e):o},ke=({actions:o,context:e})=>{let[t,r]=useState(null),[a$1,i]=useState(null),l=useMemo(()=>o.filter(n=>!Fo(n.hidden,e)),[o,e]),s=useCallback(async n=>{i(n.actionId);try{await n.handler(e);}finally{i(null);}},[e]),d=useCallback(n=>{if(n.confirmation){r(n);return}s(n).catch(()=>{});},[s]),m$1=useCallback(async()=>{t&&(await s(t),r(null));},[t,s]),u=useCallback(()=>{a$1||r(null);},[a$1]),c=Ae(t?.confirmation,e);return jsxs(Fragment,{children:[jsx(m,{children:l.map(n=>{let h=!!a$1||Fo(n.disabled,e),k=a$1===n.actionId;return jsx(Ce,{size:"small",variant:"text",onClick:()=>d(n),loading:k,disabled:h,sx:{color:"text.primary"},startIcon:typeof n.icon=="string"?jsx(a,{icon:n.icon}):n.icon,children:n.label},n.actionId)})}),t&&jsx(a$5,{open:!0,onClose:u,onConfirm:()=>{m$1().catch(()=>{});},confirming:a$1===t.actionId,modalTitle:c?.title??`${t.action??"Excluir"} ${e.selectedCount} ${t.entityName??"registro"}${e.selectedCount!==1?"s":""}?`,message:c?.message??"Esta a\xE7\xE3o n\xE3o poder\xE1 ser desfeita.",cancelButtonText:c?.cancelButtonText??"Cancelar",confirmButtonText:c?.confirmButtonText??"Sim, excluir"})]})},zo=ke;var Re=({title:o,breakpoint:e,actions:t,showActions:r,showAdd:a$1,showHeaderMoreActions:i,showActionsContainer:l,onAdd:s,onOpenMoreActions:d$1})=>jsxs(b$1,{breakpoint:e,children:[jsx(Xo,{variant:"overline",color:"text.secondary",noWrap:!0,children:o}),l&&jsxs(c,{breakpoint:e,children:[r&&t,a$1&&jsxs(Fragment,{children:[r&&jsx(d,{orientation:"vertical",flexItem:!0}),jsx(_o,{startIcon:jsx(a,{icon:"SIMPLE_ADD"}),variant:"contained",onClick:s,children:"Adicionar"})]}),i&&jsxs(Fragment,{children:[(r||a$1)&&jsx(d,{orientation:"vertical",flexItem:!0}),jsx(_o,{color:"inherit",startIcon:jsx(a,{icon:"MORE_BOLD"}),size:"small",onClick:d$1,children:"Mais"})]})]})]}),$o=Re;var De=({fetching:o,loading:e,rows:t,mobileSlots:r$1,mobileSlotsProps:a,slots:i,scrollableNodeRef:l,mobileRender:s,hideFooter:d,onPaginationChange:m,rowCount:u,paginationModel:c})=>jsxs(a$6,{isFetching:o,fetching:jsx(a$7,{}),isLoading:e,loading:jsx(q,{}),isEmpty:t.length===0,empty:jsxs(to,{flex:1,direction:"column",...a,children:[r$1&&r$1,jsx(to,{flex:1,alignItems:"center",justifyContent:"center",children:i?.noRowsOverlay?jsx(i.noRowsOverlay,{}):jsx(Xo,{variant:"body2",color:"text.secondary",children:"Nenhum registro encontrado"})})]}),children:[jsxs(to,{direction:"column",flex:1,minHeight:0,...a,children:[r$1&&r$1,jsx(a$8,{fillContent:!0,ref:l,children:t.map(n=>jsx(Fragment$1,{children:s(n)},n.id))})]}),!d&&m&&jsx(h,{children:jsx(r,{count:u,page:c.page,rowsPerPage:c.pageSize,onPageChange:n=>m?.(n,c.pageSize),onRowsPerPageChange:n=>m?.(0,n)})})]}),qo=De;var z="datagrid-actions";var Ko=(o,e)=>Children.map(o,t=>{if(!isValidElement(t))return t;let r=t.props.onClick,a={};a.onClick=(...l)=>{e(),r&&r(...l);};let i=t.props;return i?.children&&(a.children=Ko(i.children,e)),cloneElement(t,a)}),ve=({children:o,onClose:e})=>o?Ko(o,e):null,ro=memo(ve);var Ve=({breakpoint:o$1,isMobile:e$1,showSearch:t,showMoreActions:r,showTopbarMoreActions:a$1,showHeaderMoreActions:i,filterButton:l,searchValue:s,onSearch:d,onSearchChange:m,moreActions:u,popover:c})=>jsxs(f,{breakpoint:o$1,children:[jsxs(to,{flex:1,direction:"row",alignItems:"center",id:z,gap:.5,children:[r&&jsxs(Fragment,{children:[a$1&&jsxs(Fragment,{children:[jsx(_o,{color:"inherit",startIcon:jsx(a,{icon:"MORE_BOLD"}),size:"small",onClick:c.onOpen,children:"Mais"}),!e$1&&jsx(e,{orientation:"vertical",flexItem:!0})]}),(a$1||i)&&jsx(o,{open:c.open,anchorEl:c.open,onClose:c.onClose,disabledArrow:!0,children:jsx(ro,{onClose:c.onClose,children:u})})]}),!e$1&&l&&jsxs(Fragment,{children:[l,a$1&&jsx(e,{orientation:"vertical",flexItem:!0})]})]}),t&&jsxs(g,{breakpoint:o$1,children:[jsx(a$9,{value:s,placeholder:"Buscar",onSearch:n=>d(n??""),onChange:n=>m?.(n.target.value),size:"small",fullWidth:!0,iconPosition:"start"}),e$1&&l&&jsx(to,{ml:1,children:l})]})]}),Jo=Ve;var Oe=({rowCount:o,page:e,rowsPerPage:t,onPaginationChange:r$1})=>jsxs(i,{children:[jsxs(to,{direction:"row",alignItems:"center",gap:.5,children:[jsx(Xo,{variant:"body2",color:"text.disabled",children:"Total de itens:"}),jsx(Xo,{variant:"body2",children:o})]}),jsx(r,{count:o,page:e,rowsPerPage:t,onPageChange:a=>r$1(a,t),onRowsPerPageChange:a=>r$1(0,a)})]}),lo=memo(Oe);var ze=forwardRef(({children:o,...e},t)=>jsx(_o,{...e,ref:t,color:"inherit",startIcon:jsx(a,{icon:"COLUMNS"}),children:o??"Colunas"}));ze.displayName="ColumnsButton";var _e=({setFilterButtonEl:o})=>{let e=useCallback(t=>{o(t);},[o]);return jsx(a$4,{container:z,children:jsx(GridToolbarColumnsButton,{ref:e,slotProps:{button:{color:"inherit",startIcon:jsx(a,{icon:"COLUMNS"}),children:"Colunas"}}})})},so=_e;var qe=({slots:o,showColumnButton:e,rowCount:t,paginationModel:r,onPaginationChange:a})=>{let i=useCallback(()=>a?jsx(lo,{rowCount:t,page:r.page,rowsPerPage:r.pageSize,onPaginationChange:a}):null,[t,r,a]);return {dataGridSlots:useMemo(()=>({...o,footer:i,...e&&!o?.toolbar&&{toolbar:so}}),[o,i,e])}},Zo=qe;var Qe=({rows:o,rowSelectionModel:e,onRowSelectionModelChange:t,getRowId:r,bulkActions:a})=>{let i=useMemo(()=>Array.isArray(e)?e:[],[e]),l=i.length,s=useMemo(()=>o.map(S=>r(S)),[o,r]),d=useMemo(()=>new Set(s),[s]),m=useMemo(()=>i.reduce((S,C)=>S+(d.has(C)?1:0),0),[i,d]),u=s.length>0&&m===s.length,c=m>0&&!u,n=useCallback(S=>{t&&t(S);},[t]),h=useCallback(()=>{n([]);},[n]),k=useMemo(()=>new Set(i),[i]),I=useMemo(()=>o.filter(S=>k.has(r(S))),[o,k,r]),_=useMemo(()=>({selectedIds:i,selectedRowsInPage:I,selectedCount:l,clearSelection:h}),[i,I,l,h]),W=!!a?.length,v=useCallback((S,C)=>{if(!t)return;if(C){let M=new Set(i),V=[...i];s.forEach(x=>{M.has(x)||V.push(x);}),n(V);return}let G=i.filter(M=>!d.has(M));n(G);},[t,i,s,d,n]);return {selectionModel:i,numSelected:l,allSelected:u,someSelected:c,hasBulkActions:W,bulkActionContext:_,clearSelection:h,handleSelectAllToggle:v}},jo=Qe;var nt=({title:o,header:e,headerProps:t,breakpoint:r="md",columns:a$4,rows:i=[],mobileSlots:l$1,mobileSlotsProps:s,mobileRender:d,rowCount:m=0,paginationModel:u={page:0,pageSize:25},onPaginationChange:c,actions:n$1,moreActions:h,onAdd:k$1,onSearch:I,searchValue:_,onSearchChange:W,slots:v,slotProps:S,loading:C,fetching:G,fetchingNextPage:M,containerProps:V={height:562,maxHeight:562},hideFooter:x,showColumnButton:mo=!1,filterButton:po,activeFilters:uo,bulkActions:fo,onRowsScrollEnd:E,scrollEndThreshold:$=200,...R})=>{let So=a$1(),T=b("down",r),[te,ne]=useState(null),go=useRef(null);useEffect(()=>{let P=go.current;if(!P||!T||!E)return;let wo=()=>{let{scrollTop:fe,scrollHeight:Se,clientHeight:ge}=P;Se-fe-ge<=$&&E();};return P.addEventListener("scroll",wo,{passive:!0}),()=>{P.removeEventListener("scroll",wo);}},[T,E,$,i.length]);let re=useMemo(()=>R.getRowId??(P=>P.id),[R.getRowId]),{numSelected:q,allSelected:ie,someSelected:ae,hasBulkActions:le,bulkActionContext:se,clearSelection:ce,handleSelectAllToggle:de}=jo({rows:i,rowSelectionModel:Array.isArray(R.rowSelectionModel)?R.rowSelectionModel:void 0,onRowSelectionModelChange:R.onRowSelectionModelChange,getRowId:re,bulkActions:fo}),{dataGridSlots:me}=Zo({slots:v,showColumnButton:mo,rowCount:m,paginationModel:u,onPaginationChange:c}),ho=!!I,Co=!!k$1,Ao=!!n$1,K=!!h,Q=T&&K,ko=!T&&K,pe=Ao||Co||Q,To=ko||ho||mo||!!po||!T,ue=le&&q>0&&jsxs(k,{children:[jsxs(to,{flexDirection:"row",alignItems:"center",gap:1,flex:1,children:[jsx(ee,{title:"Selecione todos nessa pagina",children:jsx(n,{size:"small",checked:ie,indeterminate:ae,onChange:de})}),jsxs(l,{variant:"body2",children:[q," selecionado",q>1?"s":""]}),jsx(ee,{title:"Desselecionar tudo",children:jsx(et,{size:"small",onClick:ce,"aria-label":"Desselecionar tudo",sx:{color:"primary.main"},children:jsx(a,{icon:"CLOSE_MARK_BUTTON",width:18,height:18})})})]}),jsx(zo,{actions:fo??[],context:se})]});return jsxs(a$2,{breakpoint:r,...V,flex:C?1:void 0,minHeight:C||i.length===0?562:void 0,children:[e?jsx(to,{p:3,...t,children:e}):jsxs(Fragment,{children:[jsx($o,{title:o,breakpoint:r,actions:n$1,showActions:Ao,showAdd:Co,showHeaderMoreActions:Q,showActionsContainer:pe,onAdd:k$1,onOpenMoreActions:So.onOpen}),To&&jsx(Jo,{breakpoint:r,isMobile:T,showSearch:ho,showMoreActions:K,showTopbarMoreActions:ko,showHeaderMoreActions:Q,filterButton:po,searchValue:_,onSearch:I,onSearchChange:W,moreActions:h,popover:So}),uo&&uo,!To&&jsx(p,{})]}),T?jsx(qo,{fetching:G,loading:C,rows:i,mobileSlots:l$1,mobileSlotsProps:s,slots:v,scrollableNodeRef:go,mobileRender:d,hideFooter:x,onPaginationChange:c,rowCount:m,paginationModel:u}):jsxs(j,{children:[ue,jsx(a$3,{columns:a$4,rows:i,rowCount:m,slots:me,slotProps:{panel:{anchorEl:te},toolbar:{setFilterButtonEl:ne,showQuickFilter:!0},...S},columnHeaderHeight:48,getRowHeight:()=>68,loading:C,fetching:G,hideFooter:x,paginationModel:u,onRowsScrollEnd:E,scrollEndThreshold:$,...R})]}),M&&jsx(tt,{})]})},yn=memo(nt,ot);
|
|
25
|
+
|
|
26
|
+
export { ro as a, lo as b, so as c, yn as d };
|
|
27
|
+
//# sourceMappingURL=chunk-UQJKTFVZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/DataView/index.tsx","../src/components/DataView/BulkActionsBar.tsx","../src/components/DataView/DataViewHeader.tsx","../src/components/DataView/DataViewMobileContent.tsx","../src/components/DataView/DataViewTopbar.tsx","../src/components/DataView/contants.ts","../src/components/DataView/EnhancedMoreActions.ts","../src/components/DataView/use-data-grid-slots.tsx","../src/components/DataView/DesktopFooter.tsx","../src/components/DataView/Toolbar.tsx","../src/components/DataView/use-selection-state.ts"],"names":["memo","useEffect","useMemo","useRef","useState","isEqual","IconButton","LinearProgress","Stack","Tooltip","useCallback","LoadingButton","Fragment","jsx","jsxs","resolveDynamicBoolean","value","context","resolveConfirmation","confirmation","BulkActionsBar","actions","confirmAction","setConfirmAction","runningActionId","setRunningActionId","visibleActions","action","executeAction","handleActionClick","handleConfirm","handleCloseConfirm","confirmationConfig","SelectionActions","disabled","loading","Icon_default","Confirm_default","BulkActionsBar_default","Button","Typography","DataViewHeader","title","breakpoint","showActions","showAdd","showHeaderMoreActions","showActionsContainer","onAdd","onOpenMoreActions","Header","ActionsContainer","ActionsDivider","DataViewHeader_default","DataViewMobileContent","fetching","rows","mobileSlots","mobileSlotsProps","slots","scrollableNodeRef","mobileRender","hideFooter","onPaginationChange","rowCount","paginationModel","Result_default","FixedProgressBar_default","LoadingProgress","Scrollbar_default","row","MobilePaginationContainer","Pagination_default","newPage","newRowsPerPage","DataViewMobileContent_default","DATAGRID_ACTIONS","Children","cloneElement","isValidElement","createEnhanceMoreActions","children","onClose","child","originalOnClick","enhancedProps","args","childProps","EnhancedMoreActions","EnhancedMoreActions_default","DataViewTopbar","isMobile","showSearch","showMoreActions","showTopbarMoreActions","filterButton","searchValue","onSearch","onSearchChange","moreActions","popover","Topbar","ToolbarActionsDivider","MoreActionsPopover","SearchContainer","SearchInput_default","v","e","DataViewTopbar_default","DesktopFooter","page","rowsPerPage","DesktopPaginationContainer","DesktopFooter_default","forwardRef","GridToolbarColumnsButton","ColumnsButton","props","ref","Toolbar","setFilterButtonEl","handleColumnsButtonRef","button","Portal_default","Toolbar_default","useDataGridSlots","showColumnButton","FooterComponent","use_data_grid_slots_default","useSelectionState","rowSelectionModel","onRowSelectionModelChange","getRowId","bulkActions","selectionModel","numSelected","pageRowIds","pageRowIdSet","selectedOnPageCount","count","id","allSelected","someSelected","emitRowSelectionChange","nextSelection","clearSelection","selectedIdSet","selectedRowsInPage","bulkActionContext","hasBulkActions","handleSelectAllToggle","_event","checked","selectedIds","use_selection_state_default","DataViewComponent","header","headerProps","columns","slotProps","fetchingNextPage","containerProps","activeFilters","onRowsScrollEnd","scrollEndThreshold","others","usePopover_default","useResponsive_default","filterButtonEl","node","handleScroll","scrollTop","scrollHeight","clientHeight","dataGridSlots","showTopbar","selectionOverlay","SelectionOverlay","SelectionCheckbox","SelectionCount","Container","TopbarDivider","DataGridWrapper","DataGrid_default","DataView_default"],"mappings":"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","sourcesContent":["import { memo, useEffect, useMemo, useRef, useState } from 'react';\nimport isEqual from 'react-fast-compare';\nimport IconButton from '@mui/material/IconButton';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport Stack from '@mui/material/Stack';\nimport Tooltip from '@mui/material/Tooltip';\nimport {\n GridRowId,\n GridSlotsComponentsProps,\n GridValidRowModel,\n} from '@mui/x-data-grid-premium';\n\nimport DataGrid from 'components/DataGrid';\nimport Icon from 'components/Icon';\nimport usePopover from 'hooks/usePopover';\nimport useResponsive from 'hooks/useResponsive';\n\nimport BulkActionsBar from './BulkActionsBar';\nimport DataViewHeader from './DataViewHeader';\nimport DataViewMobileContent from './DataViewMobileContent';\nimport DataViewTopbar from './DataViewTopbar';\nimport { DataViewProps } from './props';\nimport {\n ActionsContainer,\n ActionsDivider,\n Container,\n DataGridWrapper,\n Header,\n MobilePaginationContainer,\n MoreActionsPopover,\n SearchContainer,\n SelectionActions,\n SelectionCheckbox,\n SelectionCount,\n SelectionOverlay,\n ToolbarActionsDivider,\n Topbar,\n TopbarDivider,\n} from './styles';\nimport useDataGridSlots from './use-data-grid-slots';\nimport useSelectionState from './use-selection-state';\n\nconst DataViewComponent = <T extends GridValidRowModel = GridValidRowModel>({\n title,\n header,\n headerProps,\n breakpoint = 'md',\n columns,\n rows = [],\n mobileSlots,\n mobileSlotsProps,\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 fetchingNextPage,\n containerProps = { height: 562, maxHeight: 562 },\n hideFooter,\n showColumnButton = false,\n filterButton,\n activeFilters,\n bulkActions,\n onRowsScrollEnd,\n scrollEndThreshold = 200,\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 const scrollableNodeRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const node = scrollableNodeRef.current;\n if (!node || !isMobile || !onRowsScrollEnd) return;\n\n const handleScroll = () => {\n const { scrollTop, scrollHeight, clientHeight } = node;\n const distanceToBottom = scrollHeight - scrollTop - clientHeight;\n if (distanceToBottom <= scrollEndThreshold) {\n (onRowsScrollEnd as () => void)();\n }\n };\n\n node.addEventListener('scroll', handleScroll, { passive: true });\n return () => {\n node.removeEventListener('scroll', handleScroll);\n };\n }, [isMobile, onRowsScrollEnd, scrollEndThreshold, rows.length]);\n\n const getRowId = useMemo(\n () =>\n (others.getRowId ?? ((row: GridValidRowModel) => row.id)) as (\n row: GridValidRowModel,\n ) => GridRowId,\n [others.getRowId],\n );\n\n const {\n numSelected,\n allSelected,\n someSelected,\n hasBulkActions,\n bulkActionContext,\n clearSelection,\n handleSelectAllToggle,\n } = useSelectionState<T>({\n rows,\n rowSelectionModel: Array.isArray(others.rowSelectionModel)\n ? others.rowSelectionModel\n : undefined,\n onRowSelectionModelChange: others.onRowSelectionModelChange as\n | ((model: GridRowId[], details?: unknown) => void)\n | undefined,\n getRowId,\n bulkActions,\n });\n\n const { dataGridSlots } = useDataGridSlots({\n slots,\n showColumnButton,\n rowCount,\n paginationModel,\n onPaginationChange,\n });\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 selectionOverlay = hasBulkActions && numSelected > 0 && (\n <SelectionOverlay>\n <Stack flexDirection=\"row\" alignItems=\"center\" gap={1} flex={1}>\n <Tooltip title=\"Selecione todos nessa pagina\">\n <SelectionCheckbox\n size=\"small\"\n checked={allSelected}\n indeterminate={someSelected}\n onChange={handleSelectAllToggle}\n />\n </Tooltip>\n\n <SelectionCount variant=\"body2\">\n {numSelected} selecionado{numSelected > 1 ? 's' : ''}\n </SelectionCount>\n\n <Tooltip title=\"Desselecionar tudo\">\n <IconButton\n size=\"small\"\n onClick={clearSelection}\n aria-label=\"Desselecionar tudo\"\n sx={{ color: 'primary.main' }}\n >\n <Icon icon=\"CLOSE_MARK_BUTTON\" width={18} height={18} />\n </IconButton>\n </Tooltip>\n </Stack>\n\n <BulkActionsBar actions={bulkActions ?? []} context={bulkActionContext} />\n </SelectionOverlay>\n );\n\n return (\n <Container\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 <DataViewHeader\n title={title}\n breakpoint={breakpoint}\n actions={actions}\n showActions={showActions}\n showAdd={showAdd}\n showHeaderMoreActions={showHeaderMoreActions}\n showActionsContainer={showActionsContainer}\n onAdd={onAdd}\n onOpenMoreActions={popover.onOpen}\n />\n\n {showTopbar && (\n <DataViewTopbar\n breakpoint={breakpoint}\n isMobile={isMobile}\n showSearch={showSearch}\n showMoreActions={showMoreActions}\n showTopbarMoreActions={showTopbarMoreActions}\n showHeaderMoreActions={showHeaderMoreActions}\n filterButton={filterButton}\n searchValue={searchValue}\n onSearch={onSearch}\n onSearchChange={onSearchChange}\n moreActions={moreActions}\n popover={popover}\n />\n )}\n\n {activeFilters && activeFilters}\n\n {!showTopbar && <TopbarDivider />}\n </>\n )}\n\n {isMobile ? (\n <DataViewMobileContent<T>\n fetching={fetching}\n loading={loading}\n rows={rows}\n mobileSlots={mobileSlots}\n mobileSlotsProps={mobileSlotsProps}\n slots={slots}\n scrollableNodeRef={scrollableNodeRef}\n mobileRender={mobileRender}\n hideFooter={hideFooter}\n onPaginationChange={onPaginationChange}\n rowCount={rowCount}\n paginationModel={paginationModel}\n />\n ) : (\n <DataGridWrapper>\n {selectionOverlay}\n <DataGrid\n columns={columns}\n rows={rows}\n rowCount={rowCount}\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 paginationModel={paginationModel}\n onRowsScrollEnd={onRowsScrollEnd}\n scrollEndThreshold={scrollEndThreshold}\n {...others}\n />\n </DataGridWrapper>\n )}\n\n {fetchingNextPage && <LinearProgress />}\n </Container>\n );\n};\n\nexport default memo(DataViewComponent, isEqual) as typeof DataViewComponent;\nexport {\n ActionsContainer,\n ActionsDivider,\n Container,\n DataGridWrapper,\n Header,\n MobilePaginationContainer,\n MoreActionsPopover,\n SearchContainer,\n SelectionActions,\n SelectionCount,\n SelectionOverlay,\n ToolbarActionsDivider,\n Topbar,\n};\nexport type {\n BulkAction,\n BulkActionConfirmation,\n BulkActionContext,\n} from './bulkActions';\nexport { default as DesktopFooter } from './DesktopFooter';\nexport { default as EnhancedMoreActions } from './EnhancedMoreActions';\nexport { default as Toolbar } from './Toolbar';\n","import { useCallback, useMemo, useState } from 'react';\nimport LoadingButton from '@mui/lab/LoadingButton';\nimport { GridValidRowModel } from '@mui/x-data-grid-premium';\n\nimport Confirm from 'components/Confirm';\nimport Icon from 'components/Icon';\nimport { IconName } from 'types/icon';\n\nimport type {\n BulkAction,\n BulkActionConfirmation,\n BulkActionContext,\n} from './bulkActions';\nimport type { BulkActionsBarProps } from './props';\nimport { SelectionActions } from './styles';\n\nconst resolveDynamicBoolean = <T extends GridValidRowModel>(\n value: boolean | ((context: BulkActionContext<T>) => boolean) | undefined,\n context: BulkActionContext<T>,\n) => (typeof value === 'function' ? value(context) : !!value);\n\nconst resolveConfirmation = <T extends GridValidRowModel>(\n confirmation: BulkAction<T>['confirmation'],\n context: BulkActionContext<T>,\n): BulkActionConfirmation | undefined => {\n if (!confirmation) return undefined;\n if (confirmation === true) return {};\n if (typeof confirmation === 'function') return confirmation(context);\n\n return confirmation;\n};\n\nconst BulkActionsBar = <T extends GridValidRowModel>({\n actions,\n context,\n}: BulkActionsBarProps<T>) => {\n const [confirmAction, setConfirmAction] = useState<BulkAction<T> | null>(\n null,\n );\n const [runningActionId, setRunningActionId] = useState<string | null>(null);\n\n const visibleActions = useMemo(\n () =>\n actions.filter(action => !resolveDynamicBoolean(action.hidden, context)),\n [actions, context],\n );\n\n const executeAction = useCallback(\n async (action: BulkAction<T>) => {\n setRunningActionId(action.actionId);\n try {\n await action.handler(context);\n } finally {\n setRunningActionId(null);\n }\n },\n [context],\n );\n\n const handleActionClick = useCallback(\n (action: BulkAction<T>) => {\n if (action.confirmation) {\n setConfirmAction(action);\n return;\n }\n\n void executeAction(action).catch(() => undefined);\n },\n [executeAction],\n );\n\n const handleConfirm = useCallback(async () => {\n if (!confirmAction) return;\n await executeAction(confirmAction);\n setConfirmAction(null);\n }, [confirmAction, executeAction]);\n\n const handleCloseConfirm = useCallback(() => {\n if (runningActionId) return;\n setConfirmAction(null);\n }, [runningActionId]);\n\n const confirmationConfig = resolveConfirmation(\n confirmAction?.confirmation,\n context,\n );\n\n return (\n <>\n <SelectionActions>\n {visibleActions.map(action => {\n const disabled =\n !!runningActionId ||\n resolveDynamicBoolean(action.disabled, context);\n const loading = runningActionId === action.actionId;\n\n return (\n <LoadingButton\n key={action.actionId}\n size=\"small\"\n variant=\"text\"\n onClick={() => handleActionClick(action)}\n loading={loading}\n disabled={disabled}\n sx={{ color: 'text.primary' }}\n startIcon={\n typeof action.icon === 'string' ? (\n <Icon icon={action.icon as IconName} />\n ) : (\n action.icon\n )\n }\n >\n {action.label}\n </LoadingButton>\n );\n })}\n </SelectionActions>\n\n {confirmAction && (\n <Confirm\n open\n onClose={handleCloseConfirm}\n onConfirm={() => {\n void handleConfirm().catch(() => undefined);\n }}\n confirming={runningActionId === confirmAction.actionId}\n modalTitle={\n confirmationConfig?.title ??\n `${confirmAction.action ?? 'Excluir'} ${context.selectedCount} ${confirmAction.entityName ?? 'registro'}${context.selectedCount !== 1 ? 's' : ''}?`\n }\n message={\n confirmationConfig?.message ?? 'Esta ação não poderá ser desfeita.'\n }\n cancelButtonText={confirmationConfig?.cancelButtonText ?? 'Cancelar'}\n confirmButtonText={\n confirmationConfig?.confirmButtonText ?? 'Sim, excluir'\n }\n />\n )}\n </>\n );\n};\n\nexport default BulkActionsBar;\n","import Button from '@mui/material/Button';\nimport Typography from '@mui/material/Typography';\n\nimport Icon from 'components/Icon';\n\nimport { DataViewHeaderProps } from './props';\nimport { ActionsContainer, ActionsDivider, Header } from './styles';\n\nconst DataViewHeader = ({\n title,\n breakpoint,\n actions,\n showActions,\n showAdd,\n showHeaderMoreActions,\n showActionsContainer,\n onAdd,\n onOpenMoreActions,\n}: DataViewHeaderProps) => (\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 && <ActionsDivider orientation=\"vertical\" flexItem />}\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={onOpenMoreActions}\n >\n Mais\n </Button>\n </>\n )}\n </ActionsContainer>\n )}\n </Header>\n);\n\nexport default DataViewHeader;\n","import { Fragment } from 'react';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport { GridValidRowModel } from '@mui/x-data-grid-premium';\n\nimport FixedProgressBar from 'components/FixedProgressBar';\nimport Result from 'components/Result';\nimport Scrollbar from 'components/Scrollbar';\n\nimport Pagination from './Pagination';\nimport { DataViewMobileContentProps } from './props';\nimport { LoadingProgress, MobilePaginationContainer } from './styles';\n\nconst DataViewMobileContent = <T extends GridValidRowModel>({\n fetching,\n loading,\n rows,\n mobileSlots,\n mobileSlotsProps,\n slots,\n scrollableNodeRef,\n mobileRender,\n hideFooter,\n onPaginationChange,\n rowCount,\n paginationModel,\n}: DataViewMobileContentProps<T>) => (\n <Result\n isFetching={fetching}\n fetching={<FixedProgressBar />}\n isLoading={loading}\n loading={<LoadingProgress />}\n isEmpty={rows.length === 0}\n empty={\n <Stack flex={1} direction=\"column\" {...mobileSlotsProps}>\n {mobileSlots && mobileSlots}\n\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 </Stack>\n }\n >\n <Stack direction=\"column\" flex={1} minHeight={0} {...mobileSlotsProps}>\n {mobileSlots && mobileSlots}\n\n <Scrollbar fillContent ref={scrollableNodeRef}>\n {rows.map(row => (\n <Fragment key={(row as unknown as { id: string }).id}>\n {mobileRender(row)}\n </Fragment>\n ))}\n </Scrollbar>\n </Stack>\n\n {!hideFooter && onPaginationChange && (\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?.(0, newRowsPerPage)\n }\n />\n </MobilePaginationContainer>\n )}\n </Result>\n);\n\nexport default DataViewMobileContent;\n","import Button from '@mui/material/Button';\nimport Stack from '@mui/material/Stack';\n\nimport Icon from 'components/Icon';\nimport SearchInput from 'components/SearchInput';\n\nimport { DATAGRID_ACTIONS } from './contants';\nimport EnhancedMoreActions from './EnhancedMoreActions';\nimport { DataViewTopbarProps } from './props';\nimport {\n MoreActionsPopover,\n SearchContainer,\n ToolbarActionsDivider,\n Topbar,\n} from './styles';\n\nconst DataViewTopbar = ({\n breakpoint,\n isMobile,\n showSearch,\n showMoreActions,\n showTopbarMoreActions,\n showHeaderMoreActions,\n filterButton,\n searchValue,\n onSearch,\n onSearchChange,\n moreActions,\n popover,\n}: DataViewTopbarProps) => (\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 orientation=\"vertical\" flexItem />\n )}\n </>\n )}\n\n {(showTopbarMoreActions || showHeaderMoreActions) && (\n <MoreActionsPopover\n open={popover.open}\n anchorEl={popover.open}\n onClose={popover.onClose}\n disabledArrow={true}\n >\n <EnhancedMoreActions onClose={popover.onClose}>\n {moreActions}\n </EnhancedMoreActions>\n </MoreActionsPopover>\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={v => onSearch!(v ?? '')}\n onChange={e => onSearchChange?.(e.target.value)}\n size=\"small\"\n fullWidth\n iconPosition=\"start\"\n />\n {isMobile && filterButton && <Stack ml={1}>{filterButton}</Stack>}\n </SearchContainer>\n )}\n </Topbar>\n);\n\nexport default DataViewTopbar;\n","export const DATAGRID_ACTIONS = 'datagrid-actions';\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 { useCallback, useMemo } from 'react';\n\nimport DesktopFooter from './DesktopFooter';\nimport { DataGridSlotsProps } from './props';\nimport { UseDataGridSlotsProps, UseDataGridSlotsReturn } from './props';\nimport Toolbar from './Toolbar';\n\nconst useDataGridSlots = ({\n slots,\n showColumnButton,\n rowCount,\n paginationModel,\n onPaginationChange,\n}: UseDataGridSlotsProps): UseDataGridSlotsReturn => {\n const FooterComponent = useCallback(() => {\n if (onPaginationChange) {\n return (\n <DesktopFooter\n rowCount={rowCount}\n page={paginationModel.page}\n rowsPerPage={paginationModel.pageSize}\n onPaginationChange={onPaginationChange}\n />\n );\n }\n return null;\n }, [rowCount, paginationModel, onPaginationChange]);\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 { dataGridSlots };\n};\n\nexport default useDataGridSlots;\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(0, newRowsPerPage)\n }\n />\n </DesktopPaginationContainer>\n );\n};\n\nexport default memo(DesktopFooter);\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","import { ChangeEvent, useCallback, useMemo } from 'react';\nimport { GridRowId, GridValidRowModel } from '@mui/x-data-grid-premium';\n\nimport type { BulkAction, BulkActionContext } from './bulkActions';\n\ninterface UseSelectionStateProps<T extends GridValidRowModel> {\n rows: readonly T[];\n rowSelectionModel: GridRowId[] | undefined;\n onRowSelectionModelChange:\n | ((model: GridRowId[], details?: unknown) => void)\n | undefined;\n getRowId: (row: GridValidRowModel) => GridRowId;\n bulkActions: BulkAction<T>[] | undefined;\n}\n\ninterface UseSelectionStateReturn<T extends GridValidRowModel> {\n selectionModel: GridRowId[];\n numSelected: number;\n allSelected: boolean;\n someSelected: boolean;\n hasBulkActions: boolean;\n bulkActionContext: BulkActionContext<T>;\n clearSelection: () => void;\n handleSelectAllToggle: (\n event: ChangeEvent<HTMLInputElement>,\n checked: boolean,\n ) => void;\n}\n\nconst useSelectionState = <T extends GridValidRowModel>({\n rows,\n rowSelectionModel,\n onRowSelectionModelChange,\n getRowId,\n bulkActions,\n}: UseSelectionStateProps<T>): UseSelectionStateReturn<T> => {\n const selectionModel = useMemo(() => {\n if (Array.isArray(rowSelectionModel)) return rowSelectionModel;\n return [];\n }, [rowSelectionModel]);\n\n const numSelected = selectionModel.length;\n\n const pageRowIds = useMemo(\n () => rows.map(row => getRowId(row)),\n [rows, getRowId],\n );\n\n const pageRowIdSet = useMemo(() => new Set(pageRowIds), [pageRowIds]);\n\n const selectedOnPageCount = useMemo(\n () =>\n selectionModel.reduce<number>(\n (count, id) => count + (pageRowIdSet.has(id) ? 1 : 0),\n 0,\n ),\n [selectionModel, pageRowIdSet],\n );\n\n const allSelected =\n pageRowIds.length > 0 && selectedOnPageCount === pageRowIds.length;\n const someSelected = selectedOnPageCount > 0 && !allSelected;\n\n const emitRowSelectionChange = useCallback(\n (nextSelection: GridRowId[]) => {\n if (!onRowSelectionModelChange) return;\n onRowSelectionModelChange(nextSelection);\n },\n [onRowSelectionModelChange],\n );\n\n const clearSelection = useCallback(() => {\n emitRowSelectionChange([]);\n }, [emitRowSelectionChange]);\n\n const selectedIdSet = useMemo(\n () => new Set(selectionModel),\n [selectionModel],\n );\n\n const selectedRowsInPage = useMemo(\n () => rows.filter(row => selectedIdSet.has(getRowId(row))) as T[],\n [rows, selectedIdSet, getRowId],\n );\n\n const bulkActionContext: BulkActionContext<T> = useMemo(\n () => ({\n selectedIds: selectionModel,\n selectedRowsInPage: selectedRowsInPage as T[],\n selectedCount: numSelected,\n clearSelection,\n }),\n [selectionModel, selectedRowsInPage, numSelected, clearSelection],\n );\n\n const hasBulkActions = !!bulkActions?.length;\n\n const handleSelectAllToggle = useCallback(\n (_event: ChangeEvent<HTMLInputElement>, checked: boolean) => {\n if (!onRowSelectionModelChange) return;\n\n if (checked) {\n const selectedIds = new Set(selectionModel);\n const nextSelection = [...selectionModel];\n pageRowIds.forEach(id => {\n if (!selectedIds.has(id)) nextSelection.push(id);\n });\n emitRowSelectionChange(nextSelection);\n return;\n }\n\n const nextSelection = selectionModel.filter(id => !pageRowIdSet.has(id));\n emitRowSelectionChange(nextSelection);\n },\n [\n onRowSelectionModelChange,\n selectionModel,\n pageRowIds,\n pageRowIdSet,\n emitRowSelectionChange,\n ],\n );\n\n return {\n selectionModel,\n numSelected,\n allSelected,\n someSelected,\n hasBulkActions,\n bulkActionContext,\n clearSelection,\n handleSelectAllToggle,\n };\n};\n\nexport type { UseSelectionStateProps, UseSelectionStateReturn };\nexport default useSelectionState;\n"]}
|
|
@@ -7,7 +7,7 @@ import { a as a$4 } from '../../../chunk-J5B2YJSR.js';
|
|
|
7
7
|
import { a as a$3 } from '../../../chunk-CBW32OUQ.js';
|
|
8
8
|
import { d as d$2 } from '../../../chunk-N7IK5EUP.js';
|
|
9
9
|
import { h, d as d$1, c as c$2 } from '../../../chunk-OF6623HG.js';
|
|
10
|
-
import { d } from '../../../chunk-
|
|
10
|
+
import { d } from '../../../chunk-UQJKTFVZ.js';
|
|
11
11
|
import { a as a$2 } from '../../../chunk-R2BCPHRH.js';
|
|
12
12
|
import { a as a$1 } from '../../../chunk-4F2NKGF6.js';
|
|
13
13
|
import '../../../chunk-NMGWHSNZ.js';
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import * as react from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { ReactNode } from 'react';
|
|
4
|
+
import { GridColDef } from '@mui/x-data-grid-premium';
|
|
5
|
+
import { DashboardPartner, RankingItem } from '../../../types/partnerAnalysis.js';
|
|
4
6
|
import { RankingType, SellerPortfolioQueryType } from '../../../utils/partnerAnalysis.js';
|
|
5
7
|
import * as _emotion_styled from '@emotion/styled';
|
|
6
8
|
import * as _mui_system from '@mui/system';
|
|
@@ -64,6 +66,44 @@ interface SegmentChartItem {
|
|
|
64
66
|
|
|
65
67
|
declare const PartnersByProfile: ({ data, chartData, total, isEmptyData, onPieClick, onLegendClick, hiddenKeys, onToggle, }: PartnersByProfileProps) => react_jsx_runtime.JSX.Element;
|
|
66
68
|
|
|
69
|
+
interface PartnersDetailProps {
|
|
70
|
+
open: boolean;
|
|
71
|
+
onClose: VoidFunction;
|
|
72
|
+
title: string;
|
|
73
|
+
label: string;
|
|
74
|
+
columns: GridColDef[];
|
|
75
|
+
rows: DashboardPartner[];
|
|
76
|
+
totalPartners: number;
|
|
77
|
+
isLoading: boolean;
|
|
78
|
+
isFetching: boolean;
|
|
79
|
+
isFetchingNextPage?: boolean;
|
|
80
|
+
onSearch: (value: string) => void;
|
|
81
|
+
onRowsScrollEnd?: () => void;
|
|
82
|
+
sellerName?: string;
|
|
83
|
+
buildSellerLink?: (sellerId: string) => string;
|
|
84
|
+
sellerExternalId?: string;
|
|
85
|
+
mobileRender: (data: DashboardPartner) => ReactNode;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
declare const PartnersDetail: ({ open, onClose, title, label, columns, rows, totalPartners, isLoading, isFetching, isFetchingNextPage, onSearch, onRowsScrollEnd, sellerName, buildSellerLink, sellerExternalId, mobileRender, }: PartnersDetailProps) => react_jsx_runtime.JSX.Element;
|
|
89
|
+
|
|
90
|
+
interface ProfileDetailProps {
|
|
91
|
+
open: boolean;
|
|
92
|
+
onClose: VoidFunction;
|
|
93
|
+
profileName: string;
|
|
94
|
+
columns: GridColDef[];
|
|
95
|
+
rows: DashboardPartner[];
|
|
96
|
+
totalPartners: number;
|
|
97
|
+
isLoading: boolean;
|
|
98
|
+
isFetching: boolean;
|
|
99
|
+
isFetchingNextPage?: boolean;
|
|
100
|
+
onSearch: (value: string) => void;
|
|
101
|
+
onRowsScrollEnd?: () => void;
|
|
102
|
+
mobileRender: (data: DashboardPartner) => ReactNode;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
declare const ProfileDetail: ({ open, onClose, profileName, columns, rows, totalPartners, isLoading, isFetching, isFetchingNextPage, onSearch, onRowsScrollEnd, mobileRender, }: ProfileDetailProps) => react_jsx_runtime.JSX.Element;
|
|
106
|
+
|
|
67
107
|
interface RankingTypeConfig {
|
|
68
108
|
label: string;
|
|
69
109
|
color: string;
|
|
@@ -95,6 +135,45 @@ declare const ItemButton: _emotion_styled.StyledComponent<_mui_material_Button.B
|
|
|
95
135
|
ref?: ((instance: HTMLButtonElement | null) => void) | react.RefObject<HTMLButtonElement> | null | undefined;
|
|
96
136
|
}, "children" | "disabled" | "className" | "style" | "classes" | "sx" | "variant" | "color" | "tabIndex" | "action" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "size" | "href" | "fullWidth" | "disableElevation" | "disableFocusRipple" | "endIcon" | "startIcon"> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme> & ItemButtonProps, {}, {}>;
|
|
97
137
|
|
|
138
|
+
interface RankingDetailBaseProps {
|
|
139
|
+
open: boolean;
|
|
140
|
+
onClose: VoidFunction;
|
|
141
|
+
partner: RankingItem | null;
|
|
142
|
+
rankingLabel: string;
|
|
143
|
+
startDate: string;
|
|
144
|
+
endDate: string;
|
|
145
|
+
}
|
|
146
|
+
interface RankingDetailOrder {
|
|
147
|
+
id: string;
|
|
148
|
+
partner?: {
|
|
149
|
+
id: string;
|
|
150
|
+
name: string;
|
|
151
|
+
};
|
|
152
|
+
total_value: number;
|
|
153
|
+
negotiation_date?: Date | string;
|
|
154
|
+
status?: string;
|
|
155
|
+
}
|
|
156
|
+
interface RankingDetailProps {
|
|
157
|
+
open: boolean;
|
|
158
|
+
onClose: VoidFunction;
|
|
159
|
+
partnerName: string;
|
|
160
|
+
rankingLabel: string;
|
|
161
|
+
rows: RankingDetailOrder[];
|
|
162
|
+
total: number;
|
|
163
|
+
totalValue: number;
|
|
164
|
+
averageTicket: number;
|
|
165
|
+
isLoading: boolean;
|
|
166
|
+
isFetching: boolean;
|
|
167
|
+
page: number;
|
|
168
|
+
perPage: number;
|
|
169
|
+
onSearch: (value: string) => void;
|
|
170
|
+
onPaginationChange: (page: number, pageSize: number) => void;
|
|
171
|
+
buildPartnerLink?: (partnerId: string) => string;
|
|
172
|
+
mobileItemSlot?: (row: RankingDetailOrder) => ReactNode;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
declare const RankingDetail: ({ open, onClose, partnerName, rankingLabel, rows, total, totalValue, averageTicket, isLoading, isFetching, page, perPage, onSearch, onPaginationChange, buildPartnerLink, mobileItemSlot, }: RankingDetailProps) => react_jsx_runtime.JSX.Element;
|
|
176
|
+
|
|
98
177
|
interface StackedBarSeries {
|
|
99
178
|
dataKey: string;
|
|
100
179
|
name: string;
|
|
@@ -120,4 +199,4 @@ declare const SELLER_PORTFOLIO_CONFIG: Record<SellerPortfolioQueryType, SellerPo
|
|
|
120
199
|
|
|
121
200
|
declare const SellerPortfolio: ({ data, config, onBarClick, children, }: SellerPortfolioProps) => react_jsx_runtime.JSX.Element;
|
|
122
201
|
|
|
123
|
-
export { ChartItem as BreakdownChartItem, LegendItem$1 as BreakdownLegendItem, ChartDataRow, MAX_VISIBLE as PROFILE_MAX_VISIBLE, PartnerBreakdown, PartnerBreakdownProps, PartnersByProfile, PartnersByProfileProps, LegendItem as ProfileLegendItem, RANKING_CONFIG, Ranking, ItemButton as RankingItemButton, RankingProps, RankingTypeConfig, SEGMENT_COLORS, SELLER_PORTFOLIO_CONFIG, SegmentChartItem, SellerPortfolio, SellerPortfolioProps, SellerPortfolioTypeConfig };
|
|
202
|
+
export { ChartItem as BreakdownChartItem, LegendItem$1 as BreakdownLegendItem, ChartDataRow, MAX_VISIBLE as PROFILE_MAX_VISIBLE, PartnerBreakdown, PartnerBreakdownProps, PartnersByProfile, PartnersByProfileProps, PartnersDetail, PartnersDetailProps, ProfileDetail, ProfileDetailProps, LegendItem as ProfileLegendItem, RANKING_CONFIG, Ranking, RankingDetail, RankingDetailBaseProps, RankingDetailOrder, RankingDetailProps, ItemButton as RankingItemButton, RankingProps, RankingTypeConfig, SEGMENT_COLORS, SELLER_PORTFOLIO_CONFIG, SegmentChartItem, SellerPortfolio, SellerPortfolioProps, SellerPortfolioTypeConfig };
|
|
@@ -1,28 +1,46 @@
|
|
|
1
1
|
import '../../../chunk-K2PWIYEM.js';
|
|
2
|
-
import { b as b$2, a as a$
|
|
2
|
+
import { b as b$2, a as a$5 } from '../../../chunk-XL6SZZGI.js';
|
|
3
3
|
import { a, b as b$1, m, n, c } from '../../../chunk-XQZPUMVQ.js';
|
|
4
|
-
import { a as a$
|
|
5
|
-
import {
|
|
4
|
+
import { a as a$8 } from '../../../chunk-DRGARBKB.js';
|
|
5
|
+
import { a as a$4 } from '../../../chunk-J5B2YJSR.js';
|
|
6
|
+
import { a as a$3 } from '../../../chunk-CBW32OUQ.js';
|
|
7
|
+
import { d as d$2 } from '../../../chunk-N7IK5EUP.js';
|
|
8
|
+
import { h, d, a as a$6, c as c$1 } from '../../../chunk-OF6623HG.js';
|
|
9
|
+
import { d as d$1 } from '../../../chunk-UQJKTFVZ.js';
|
|
10
|
+
import { a as a$2 } from '../../../chunk-R2BCPHRH.js';
|
|
6
11
|
import { a as a$1 } from '../../../chunk-4F2NKGF6.js';
|
|
7
|
-
import
|
|
12
|
+
import '../../../chunk-NMGWHSNZ.js';
|
|
13
|
+
import '../../../chunk-6U5LS7MP.js';
|
|
14
|
+
import '../../../chunk-LZQ7OFKO.js';
|
|
15
|
+
import '../../../chunk-NIQW2J3M.js';
|
|
16
|
+
import '../../../chunk-PRWQQJDL.js';
|
|
17
|
+
import '../../../chunk-XUDTPZHF.js';
|
|
18
|
+
import '../../../chunk-UVPQR2Q2.js';
|
|
19
|
+
import '../../../chunk-RBTYTONM.js';
|
|
20
|
+
import { a as a$7 } from '../../../chunk-F65ZXAGV.js';
|
|
21
|
+
import '../../../chunk-I4PPSW36.js';
|
|
22
|
+
import '../../../chunk-CO2KQFUN.js';
|
|
8
23
|
import '../../../chunk-2GTD4JW2.js';
|
|
9
24
|
import '../../../chunk-PBLSVXV5.js';
|
|
25
|
+
import '../../../chunk-LQRRMVFN.js';
|
|
10
26
|
import { b } from '../../../chunk-2ZJUGM2S.js';
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
27
|
+
import '../../../chunk-GLRLKFPS.js';
|
|
28
|
+
import st from '@mui/material/CardContent';
|
|
29
|
+
import pt from '@mui/material/CardHeader';
|
|
30
|
+
import T from '@mui/material/Stack';
|
|
14
31
|
import { ResponsiveContainer, ComposedChart, CartesianGrid, XAxis, YAxis, Tooltip, ReferenceLine, Bar, PieChart, Pie, BarChart } from 'recharts';
|
|
15
|
-
import { styled } from '@mui/material/styles';
|
|
16
|
-
import
|
|
17
|
-
import
|
|
32
|
+
import { styled, alpha } from '@mui/material/styles';
|
|
33
|
+
import qr from '@mui/material/Divider';
|
|
34
|
+
import C from '@mui/material/Typography';
|
|
18
35
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
19
|
-
import
|
|
20
|
-
import
|
|
36
|
+
import Lr from '@mui/material/Checkbox';
|
|
37
|
+
import Ar from '@mui/material/FormControlLabel';
|
|
38
|
+
import zt from '@mui/material/Link';
|
|
21
39
|
import { memo, useState, useRef, useCallback, useMemo } from 'react';
|
|
22
|
-
import
|
|
23
|
-
import
|
|
40
|
+
import So from '@mui/material/Slider';
|
|
41
|
+
import Po from '@mui/material/Button';
|
|
24
42
|
|
|
25
|
-
var Fe=styled(N)(({theme:e})=>({position:"relative",alignSelf:"flex-start",flexShrink:0,"& .recharts-wrapper, & .recharts-wrapper *":{outline:"none !important",boxShadow:"none !important"},"& .recharts-pie-sector":{cursor:"pointer"},[e.breakpoints.down("md")]:{alignSelf:"center"}}));var De=e=>c$1(e,{maximumFractionDigits:2,...e>0&&e<100?{minimumFractionDigits:2}:{}}),bt=({active:e,payload:t,total:a})=>{if(!e||!t?.length)return null;let r=t[0];return jsxs(a$5,{minWidth:{xs:"auto",sm:200},p:1,gap:1,children:[jsx(ae,{variant:"body2",color:"text.secondary",children:r.name}),jsx(Ct,{}),jsxs(N,{children:[jsxs(N,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,children:[jsxs(N,{direction:"row",alignItems:"center",gap:1,children:[jsx(N,{width:6,height:6,borderRadius:"50%",bgcolor:r.payload.fill}),jsx(ae,{variant:"body2",noWrap:!0,children:r.name})]}),jsxs(ae,{variant:"body2",noWrap:!0,children:[De(r.payload.percentage)," (",r.value,")"]})]}),jsxs(N,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,children:[jsxs(N,{direction:"row",alignItems:"center",gap:1,children:[jsx(N,{width:6,height:6,borderRadius:"50%",bgcolor:"#919EAB"}),jsx(ae,{variant:"body2",noWrap:!0,children:"Total"})]}),jsxs(ae,{variant:"body2",noWrap:!0,children:[De(100)," (",a,")"]})]})]})]})},Me=bt;var Pt=({chartData:e,total:t,isEmptyData:a,onPieClick:r,clickable:o})=>jsx(Fe,{children:jsx(ResponsiveContainer,{width:200,height:200,children:jsxs(PieChart,{children:[jsx(Pie,{data:e,dataKey:"value",nameKey:"name",cx:"50%",cy:"50%",innerRadius:60,outerRadius:90,paddingAngle:2,strokeWidth:0,isAnimationActive:!1,onClick:r,cursor:o?"pointer":void 0}),jsx("text",{x:"50%",y:"46%",textAnchor:"middle",dominantBaseline:"middle",style:{fontSize:24,fontWeight:700},children:a$3(t)}),jsx("text",{x:"50%",y:"58%",textAnchor:"middle",dominantBaseline:"middle",style:{fontSize:12,fill:"#919EAB"},children:"clientes"}),!a&&jsx(Tooltip,{content:jsx(Me,{total:t})})]})})}),Ke=Pt;var Bt=({items:e,hiddenKeys:t,onToggle:a,onItemClick:r})=>jsx(N,{width:"100%",justifyContent:"center",children:e.map(o=>jsxs(N,{display:"grid",gridTemplateColumns:"1fr auto auto",alignItems:"center",gap:1.5,onClick:()=>r?.(o.key,o.label),sx:{...r?{cursor:"pointer"}:{}},children:[jsx(at,{label:o.label,onClick:i=>i.stopPropagation(),control:jsx(ot,{size:"small",checked:!t.has(o.key),onChange:(i,n)=>a(o.key,n),sx:{"&.Mui-checked":{color:o.color}}}),sx:{"& .MuiFormControlLabel-label":{overflow:"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis"}}}),jsx(ae,{variant:"body2",color:"text.secondary",textAlign:"right",noWrap:!0,children:c$1(o.percentage,{maximumFractionDigits:2,...o.percentage>0&&o.percentage<100?{minimumFractionDigits:2}:{}})}),jsx(ae,{variant:"subtitle2",color:"text.primary",textAlign:"right",noWrap:!0,children:d(o.count)})]},o.key))}),Oe=Bt;var _t=({title:e,chartData:t,total:a$1,isEmptyData:r,legendItems:o,hiddenKeys:i,onToggle:n,onPieClick:p,onItemClick:c})=>jsxs(a,{children:[jsx(At,{title:e}),jsx(Lt,{children:jsxs(N,{direction:{xs:"column",sm:"row"},alignItems:"center",gap:1.5,minWidth:0,children:[jsx(Ke,{chartData:t,total:a$1,isEmptyData:r,onPieClick:p,clickable:!!p}),jsx(Oe,{items:o,hiddenKeys:i,onToggle:n,onItemClick:c})]})})]}),Ft=_t;var ze=Math.PI/180,Ge=22,Dt=2,Mt=e=>{let{cx:t,cy:a,midAngle:r,outerRadius:o,percentage:i}=e;if(i<Dt)return null;let n=Number(t),p=Number(a),c=Number(o),u=Number(r);if(isNaN(n)||isNaN(p)||isNaN(c))return null;let v=Math.sin(-u*ze),P=Math.cos(-u*ze),R=n+c*P,B=p+c*v,y=n+(c+Ge*.5)*P,s=p+(c+Ge*.5)*v,l=P>=0?1:-1,d=y+l*10,h=s,b=c$1(i,{maximumFractionDigits:1,...i>0&&i<100?{minimumFractionDigits:1}:{}}),g=b.length*7+10,T=l===1?d+2:d-g-2;return jsxs("g",{children:[jsx("path",{d:`M${R},${B} L${y},${s} L${d},${h}`,stroke:"#637381",fill:"none",strokeWidth:1}),jsx("rect",{x:T,y:h-10,width:g,height:20,rx:4,fill:"#212B36"}),jsx("text",{x:T+g/2,y:h,textAnchor:"middle",dominantBaseline:"central",fontSize:11,fontWeight:600,fill:"#FFFFFF",children:b})]})},He=Mt;var Xe=styled(N)({position:"relative",alignItems:"center",justifyContent:"center","& .recharts-wrapper, & .recharts-wrapper *":{outline:"none !important",boxShadow:"none !important"},"& .recharts-wrapper":{overflow:"visible !important"},"& .recharts-wrapper svg":{overflow:"visible"},"& .recharts-pie-sector":{cursor:"pointer"}});var Ye=e=>c$1(e,{maximumFractionDigits:2,...e>0&&e<100?{minimumFractionDigits:2}:{}}),Vt=({active:e,payload:t,total:a})=>{if(!e||!t?.length)return null;let r=t[0];return jsxs(a$5,{minWidth:{xs:"auto",sm:200},p:1,gap:1,children:[jsx(ae,{variant:"body2",color:"text.secondary",children:r.name}),jsx(Ct,{}),jsxs(N,{children:[jsxs(N,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,children:[jsxs(N,{direction:"row",alignItems:"center",gap:1,children:[jsx(N,{width:6,height:6,borderRadius:"50%",bgcolor:r.payload.fill}),jsx(ae,{variant:"body2",noWrap:!0,children:r.name})]}),jsxs(ae,{variant:"body2",noWrap:!0,children:[Ye(r.payload.percentage)," (",r.value,")"]})]}),jsxs(N,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,children:[jsxs(N,{direction:"row",alignItems:"center",gap:1,children:[jsx(N,{width:6,height:6,borderRadius:"50%",bgcolor:"#919EAB"}),jsx(ae,{variant:"body2",noWrap:!0,children:"Total"})]}),jsxs(ae,{variant:"body2",noWrap:!0,children:[Ye(100)," (",a,")"]})]})]})]})},$e=Vt;var Yt=e=>jsx(He,{...e}),$t=({chartData:e,total:t,isEmptyData:a,onPieClick:r})=>jsx(Xe,{children:jsx(ResponsiveContainer,{width:280,height:280,children:jsxs(PieChart,{children:[jsx(Pie,{data:e,dataKey:"value",nameKey:"name",cx:"50%",cy:"50%",outerRadius:90,paddingAngle:1,strokeWidth:0,isAnimationActive:!1,label:a?!1:Yt,labelLine:!1,onClick:r,cursor:r?"pointer":void 0}),!a&&jsx(Tooltip,{content:jsx($e,{total:t})})]})})}),Ue=$t;var Jt=e=>c$1(e,{maximumFractionDigits:2,...e>0&&e<100?{minimumFractionDigits:2}:{}}),jt=({items:e,hiddenKeys:t,onToggle:a,onItemClick:r})=>jsx(a$4,{sx:{maxHeight:280,width:"100%",pl:.5},children:e.map(o=>jsxs(N,{display:"grid",gridTemplateColumns:"1fr auto auto",alignItems:"center",gap:1.5,onClick:()=>r?.(o.key),sx:r?{cursor:"pointer"}:void 0,children:[jsx(at,{label:o.label,onClick:i=>i.stopPropagation(),control:jsx(ot,{size:"small",checked:!t.has(o.key),onChange:(i,n)=>a(o.key,n),sx:{"&.Mui-checked":{color:o.color}}}),sx:{"& .MuiFormControlLabel-label":{overflow:"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis"}}}),jsx(ae,{variant:"body2",color:"text.secondary",textAlign:"right",noWrap:!0,children:Jt(o.percentage)}),jsx(ae,{variant:"subtitle2",color:"text.primary",textAlign:"right",noWrap:!0,children:d(o.count)})]},o.key))}),Ze=jt;var ar=({data:e,chartData:t,total:a$2,isEmptyData:r,onPieClick:o,onLegendClick:i,hiddenKeys:n,onToggle:p})=>jsxs(a,{children:[jsx(At,{title:"Clientes por segmentos"}),jsx(Lt,{children:jsx(a$1,{isEmpty:e.length===0,empty:jsx(m,{}),children:jsxs(N,{alignItems:"center",gap:2,children:[jsx(Ue,{chartData:t,total:a$2,isEmptyData:r,onPieClick:o}),jsx(Ze,{items:e,hiddenKeys:n,onToggle:p,onItemClick:i})]})})})]}),nr=ar;var ir=["#FF5630","#FFAB00","#22C55E","#C4CDD5","#8E33FF","#00B8D9","#3366FF","#FF6C40","#36B37E","#B76E00"],lr=12;var V="#212B36",sr={["SALE_TOTAL_VALUE"]:{label:"Por valor total",color:"#22C55E",dataKey:"total_sale_value",barName:"Valor total por cliente",averageName:"M\xE9dia total de valor por cliente",averageDataKey:"average_total_value",formatLabel:h,formatYAxis:d},["SALE_COUNT"]:{label:"Por pedidos",color:"#C684FF",dataKey:"total_value_by_customer",barName:"Quantidade de pedidos",averageName:"Quantidade total de pedidos",averageDataKey:"average_sale_count",formatLabel:String,formatYAxis:d,floorAverage:!0},["SALE_AVERAGE_VALUE"]:{label:"Por ticket m\xE9dio",color:"#00B8D9",dataKey:"total_sale_value",barName:"Ticket m\xE9dio por cliente",averageName:"M\xE9dia do ticket m\xE9dio",averageDataKey:"average_ticket",formatLabel:h,formatYAxis:d}};var mr=({x:e=0,y:t=0,width:a=0,height:r=0,index:o=0,activeBarIndex:i,color:n,data:p,onBarClick:c})=>i!==o?null:jsx("rect",{x:e-6,y:t,width:a+12,height:r+6,fill:n,opacity:.16,rx:6,style:{cursor:"pointer"},onClick:()=>c(p[o])}),Je=mr;var dr=({active:e,payload:t,label:a,config:r,average:o})=>!e||!t?.length?null:jsxs(a$5,{minWidth:{xs:"auto",sm:200},p:1,gap:1,children:[jsx(ae,{variant:"body2",color:"text.secondary",children:a}),jsx(Ct,{}),jsxs(N,{children:[t.map((i,n)=>jsxs(N,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,"data-testid":`tooltip-item-${n}`,children:[jsxs(N,{direction:"row",alignItems:"center",gap:1,children:[jsx(N,{width:6,height:6,borderRadius:"50%",bgcolor:i.color}),jsx(ae,{variant:"body2",noWrap:!0,children:r.barName})]}),jsx(ae,{variant:"body2",children:r.formatLabel(i.value)})]},i.dataKey)),jsxs(N,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,children:[jsxs(N,{direction:"row",alignItems:"center",gap:1,children:[jsx(N,{width:6,height:6,borderRadius:"50%",bgcolor:V}),jsx(ae,{variant:"body2",noWrap:!0,children:r.averageName})]}),jsx(ae,{variant:"body2",children:r.formatLabel(o)})]})]})]}),je=dr;var kr=48,Sr=kr/.8,xr=({data:e,config:t,visibleSeries:a,average:r,activeBarIndex:o,activeCoordX:i,shouldRotateLabels:n$1,onMouseMove:p,onMouseLeave:c$1,onBarClick:u})=>{let v=useMemo(()=>{if(!e.length)return [0,1];let l=e.map(h=>h[t.dataKey]||0);a.average&&r>0&&l.push(r);let d=Math.max(...l);return [0,d>0?d*1.15:1]},[e,t.dataKey,r,a.average]),P=useMemo(()=>{let[,l]=v,d=l/6;return [...new Set(Array.from({length:7},(h,b)=>Math.round(d*b)))]},[v]),R=useMemo(()=>n$1?!1:{position:"top",fontSize:11,fill:"#212B36",formatter:l=>t.formatLabel(Number(l))},[n$1,t]),B=useMemo(()=>jsx(je,{config:t,average:r}),[t,r]),y=useCallback(l=>n$1?jsx(n,{...l}):jsx(b$2,{x:l.x,y:l.y,payload:l.payload,slotWidth:Sr}),[n$1]),s=useCallback(l=>{l&&u(l);},[u]);return jsx(c,{children:jsx(ResponsiveContainer,{width:"100%",height:350,children:jsxs(ComposedChart,{data:e,margin:{top:20,right:10,bottom:0,left:20},barCategoryGap:"20%",onMouseMove:p,onMouseLeave:c$1,children:[jsx(CartesianGrid,{vertical:!1,strokeDasharray:"3 3",stroke:"#F4F6F8"}),jsx(XAxis,{dataKey:"partner_name",axisLine:!1,tickLine:!1,interval:0,height:n$1?70:50,tick:y}),jsx(YAxis,{axisLine:!1,tickLine:!1,tick:{fontSize:12,fill:"#637381"},tickFormatter:l=>d(l),domain:v,ticks:P}),jsx(Tooltip,{content:B}),a.average&&r>0&&jsx(ReferenceLine,{y:r,stroke:V,strokeDasharray:"8 4",strokeWidth:2,ifOverflow:"extendDomain"}),a.average&&r>0&&jsx(ReferenceLine,{y:r,stroke:"none",ifOverflow:"extendDomain",label:jsx(a$2,{activeCoordX:i,referenceCircleColor:V,activeIndex:o})}),a.bar&&jsx(Bar,{dataKey:t.dataKey,name:t.barName,fill:t.color,maxBarSize:48,isAnimationActive:!1,radius:[4,4,0,0],cursor:"pointer",onClick:s,background:jsx(Je,{activeBarIndex:o,color:t.color,data:e,onBarClick:u}),label:R})]})})})},rt=xr;var Rr=({visibleSeries:e,config:t,onToggleSerie:a})=>jsxs(N,{direction:"row",justifyContent:"center",flexWrap:"wrap",gap:1,children:[jsx(at,{control:jsx(ot,{checked:e.bar,onChange:()=>a("bar"),sx:{"&.Mui-checked":{color:t.color}}}),label:t.barName}),jsx(at,{control:jsx(ot,{checked:e.average,onChange:()=>a("average"),sx:{"&.Mui-checked":{color:V}}}),label:t.averageName})]}),nt=Rr;var st=memo(({data:e,config:t,average:a$2,onBarClick:r,children:o})=>{let i=b("down","sm"),n=b("down","lg"),[p,c]=useState({bar:!0,average:!0}),[u,v]=useState(12),[P,R]=useState(null),[B,y]=useState(null),[s,l]=useState(0),d=useRef(null),h=useCallback(m=>{d.current&&(d.current.disconnect(),d.current=null),m&&(l(m.clientWidth),d.current=new ResizeObserver(()=>l(m.clientWidth)),d.current.observe(m));},[]),b$2=useMemo(()=>[...e].sort((m,S)=>S[t.dataKey]-m[t.dataKey]),[e,t.dataKey]),g=b$2.length,T=useMemo(()=>i?10:n?25:30,[i,n]),ke=!i&&g>10,re=Math.min(g,T),oe=Math.min(i?g:u,g,T),K=useMemo(()=>b$2.slice(0,oe),[b$2,oe]),Se=useMemo(()=>s===0||K.length===0?!1:(s-60)/K.length<80,[s,K.length]),xe=useCallback(m=>{c(S=>({...S,[m]:!S[m]}));},[]),ve=useCallback(m=>{m?.activeTooltipIndex!=null&&R(Number(m.activeTooltipIndex)),m?.activeCoordinate?.x!=null&&y(m.activeCoordinate.x);},[]),Pe=useCallback(()=>{R(null),y(null);},[]),Re=useCallback(m=>{m&&r?.(m);},[r]),f=useCallback((m,S)=>{v(S);},[]);return jsxs(a,{children:[jsx(b$1,{title:"Ranking de clientes",action:o}),jsx(Lt,{children:jsx(a$1,{isEmpty:K.length===0,empty:jsx(m,{}),children:jsxs(N,{alignItems:"center",gap:1.5,children:[jsx(N,{width:"100%",ref:h,children:jsx(rt,{data:K,config:t,visibleSeries:p,average:a$2,activeBarIndex:P,activeCoordX:B,shouldRotateLabels:Se,onMouseMove:ve,onMouseLeave:Pe,onBarClick:Re})}),jsx(nt,{visibleSeries:p,config:t,onToggleSerie:xe}),ke&&jsx(Lr,{size:"small",min:10,max:re,value:oe,valueLabelDisplay:"auto",onChange:f})]})})})]})});st.displayName="Ranking";var Ar=st;var Fr=styled(Er,{shouldForwardProp:e=>e!=="active"})(({theme:e,active:t})=>({justifyContent:"flex-start",color:t?e.palette.primary.main:e.palette.text.secondary,fontWeight:t?800:400,"&:hover":{background:e.palette.action.hover}}));var Dr=({x:e=0,y:t=0,width:a=0,height:r=0,index:o=0,activeBarIndex:i,data:n,onBarClick:p})=>{if(i!==o)return null;let c=n[o];return jsx("rect",{x:e-6,y:t,width:a+12,height:r+6,fill:"#919EAB",opacity:.16,rx:6,style:{cursor:"pointer"},onClick:()=>{c&&p(String(c.seller_external_id),String(c.seller_name));}})},mt=Dr;var pt=e=>c$1(e,{maximumFractionDigits:2,...e>0&&e<100?{minimumFractionDigits:2}:{}}),Nr=({active:e,payload:t,label:a,config:r})=>{if(!e||!t?.length)return null;let o=t.filter(n=>n.value!=null&&n.value>0),i=o.reduce((n,p)=>n+p.value,0);return jsxs(a$5,{minWidth:{xs:"auto",sm:200},p:1,gap:1,children:[jsx(ae,{variant:"body2",color:"text.secondary",children:a}),jsx(Ct,{}),jsxs(N,{children:[o.map(n=>{let p=r.series.find(u=>u.dataKey===n.dataKey),c=i>0?pt(n.value/i*100):"0%";return jsxs(N,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,children:[jsxs(N,{direction:"row",alignItems:"center",gap:1,children:[jsx(N,{width:6,height:6,borderRadius:"50%",bgcolor:n.color}),jsx(ae,{variant:"body2",noWrap:!0,children:p?.name??n.dataKey})]}),jsxs(ae,{variant:"body2",noWrap:!0,children:[c," (",n.value,")"]})]},n.dataKey)}),jsxs(N,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,children:[jsxs(N,{direction:"row",alignItems:"center",gap:1,children:[jsx(N,{width:6,height:6,borderRadius:"50%",bgcolor:"#919EAB"}),jsx(ae,{variant:"body2",noWrap:!0,children:"Total"})]}),jsxs(ae,{variant:"body2",noWrap:!0,children:[pt(100)," (",i,")"]})]})]})]})},ct=Nr;var Yr=48,$r=Yr/.8,Ur=({data:e,config:t,visibleSeries:a,hiddenKeys:r,activeBarIndex:o,shouldRotateLabels:i,onMouseMove:n$1,onMouseLeave:p,onBarClick:c$1})=>{let u=useMemo(()=>{if(!e.length)return [0,1];let s=Math.max(...e.map(l=>l._visibleTotal));return [0,s>0?s*1.15:1]},[e]),v=useMemo(()=>{let[,s]=u,l=s/6;return [...new Set(Array.from({length:7},(d,h)=>Math.round(l*h)))]},[u]),P=useMemo(()=>jsx(ct,{config:t}),[t]),R=useCallback(s=>i?jsx(n,{...s}):jsx(b$2,{x:s.x,y:s.y,payload:s.payload,slotWidth:$r}),[i]),B=useCallback(s=>{if(!s)return;let l=s.payload;l&&c$1(String(l.seller_external_id),String(l.seller_name));},[c$1]),y=useCallback(s=>{let{x:l,y:d,width:h,index:b}=s,g=e[b]?._visibleTotal;return g?jsx("text",{x:l+h/2,y:d-6,textAnchor:"middle",fontSize:11,fill:"#212B36",children:g}):jsx(Fragment,{})},[e]);return jsx(c,{children:jsx(ResponsiveContainer,{width:"100%",height:350,children:jsxs(BarChart,{data:e,margin:{top:20,right:10,bottom:0,left:20},barCategoryGap:"20%",onMouseMove:n$1,onMouseLeave:p,children:[jsx(CartesianGrid,{vertical:!1,strokeDasharray:"3 3",stroke:"#F4F6F8"}),jsx(XAxis,{dataKey:"seller_name",axisLine:!1,tickLine:!1,interval:0,height:i?70:50,tick:R}),jsx(YAxis,{axisLine:!1,tickLine:!1,tick:{fontSize:12,fill:"#637381"},tickFormatter:s=>d(s),domain:u,ticks:v}),jsx(Tooltip,{content:P,cursor:!1}),t.series.map(s=>{let l=!r.has(s.dataKey),d=a[0],h=a[a.length-1],b=l&&s.dataKey===d?.dataKey,g=l&&s.dataKey===h?.dataKey;return jsx(Bar,{dataKey:l?s.dataKey:`_hidden_${s.dataKey}`,name:s.name,fill:s.color,stackId:"stack",maxBarSize:48,isAnimationActive:!1,cursor:"pointer",hide:!l,onClick:B,...b&&{background:jsx(mt,{activeBarIndex:o,data:e,onBarClick:c$1})},...g&&{radius:[4,4,0,0]},...g&&!i&&{label:{position:"top",fontSize:11,fill:"#212B36",content:y}}},s.dataKey)})]})})})},dt=Ur;var eo=({series:e,hiddenKeys:t,onToggleSerie:a})=>jsx(N,{direction:"row",justifyContent:"center",flexWrap:"wrap",gap:1,children:e.map(r=>jsx(at,{control:jsx(ot,{checked:!t.has(r.dataKey),onChange:()=>a(r.dataKey),sx:{"&.Mui-checked":{color:r.color}}}),label:r.name},r.dataKey))}),ft=eo;var ao=({data:e,config:t,onBarClick:a$2,children:r})=>{let o=b("down","sm"),i=b("down","lg"),[n,p]=useState(new Set),[c,u]=useState(12),[v,P]=useState(null),[R,B]=useState(0),y=useRef(null),s=useMemo(()=>[...e].sort((f,m)=>m._total-f._total),[e]),l=useMemo(()=>o?10:i?25:30,[i,o]),d=s.length,h=!o&&d>10,b$2=Math.min(d,l),g=Math.min(o?d:c,d,l),T=useMemo(()=>s.slice(0,g),[s,g]),ke=useMemo(()=>R===0||T.length===0?!1:(R-60)/T.length<80,[R,T.length]),re=useMemo(()=>t.series.filter(f=>!n.has(f.dataKey)),[t.series,n]),oe=useMemo(()=>T.map(f=>({...f,_visibleTotal:re.reduce((m,S)=>m+(Number(f[S.dataKey])||0),0)})),[T,re]),K=useCallback(f=>{y.current&&(y.current.disconnect(),y.current=null),f&&(B(f.clientWidth),y.current=new ResizeObserver(()=>B(f.clientWidth)),y.current.observe(f));},[]),Se=useCallback(f=>{p(m=>{let S=new Set(m);return S.has(f)?S.delete(f):S.add(f),S});},[]),xe=useCallback(f=>{f?.activeTooltipIndex!=null&&P(Number(f.activeTooltipIndex));},[]),ve=useCallback(()=>{P(null);},[]),Pe=useCallback((f,m)=>{a$2?.(f,m);},[a$2]),Re=useCallback((f,m)=>{u(m);},[]);return jsxs(a,{children:[jsx(b$1,{title:"Carteira de clientes do vendedor",action:r}),jsx(Lt,{children:jsx(a$1,{isEmpty:T.length===0,empty:jsx(m,{}),children:jsxs(N,{alignItems:"center",gap:1.5,children:[jsx(N,{width:"100%",ref:K,children:jsx(dt,{data:oe,config:t,visibleSeries:re,hiddenKeys:n,activeBarIndex:v,shouldRotateLabels:ke,onMouseMove:xe,onMouseLeave:ve,onBarClick:Pe})}),jsx(ft,{series:t.series,hiddenKeys:n,onToggleSerie:Se}),h&&jsx(Lr,{size:"small",min:10,max:b$2,value:g,valueLabelDisplay:"auto",onChange:Re})]})})})]})},no=ao;var io=[{dataKey:"ACTIVE",name:"Ativos",color:"#22C55E"},{dataKey:"AT_RISK",name:"Em risco",color:"#FFAB00"},{dataKey:"INACTIVE",name:"Inativos",color:"#FF5630"},{dataKey:"NEW_CLIENT",name:"Novos clientes",color:"#8E33FF"},{dataKey:"PROSPECT",name:"Prospects",color:"#00B8D9"},{dataKey:"LOST",name:"Perdidos",color:"#C4CDD5"}],lo=[{dataKey:"A",name:"Curva A",color:"#22C55E"},{dataKey:"B",name:"Curva B",color:"#FFAB00"},{dataKey:"C",name:"Curva C",color:"#FF5630"}],so={["CLASSIFICATION"]:{label:"Por classifica\xE7\xE3o",series:io,formatYAxis:d},["ABC_CURVE"]:{label:"Por curva ABC",series:lo,formatYAxis:d}};
|
|
43
|
+
var er=styled(T)(({theme:e})=>({position:"relative",alignSelf:"flex-start",flexShrink:0,"& .recharts-wrapper, & .recharts-wrapper *":{outline:"none !important",boxShadow:"none !important"},"& .recharts-pie-sector":{cursor:"pointer"},[e.breakpoints.down("md")]:{alignSelf:"center"}}));var rr=e=>c$1(e,{maximumFractionDigits:2,...e>0&&e<100?{minimumFractionDigits:2}:{}}),Zr=({active:e,payload:r,total:a})=>{if(!e||!r?.length)return null;let t=r[0];return jsxs(a$8,{minWidth:{xs:"auto",sm:200},p:1,gap:1,children:[jsx(C,{variant:"body2",color:"text.secondary",children:t.name}),jsx(qr,{}),jsxs(T,{children:[jsxs(T,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,children:[jsxs(T,{direction:"row",alignItems:"center",gap:1,children:[jsx(T,{width:6,height:6,borderRadius:"50%",bgcolor:t.payload.fill}),jsx(C,{variant:"body2",noWrap:!0,children:t.name})]}),jsxs(C,{variant:"body2",noWrap:!0,children:[rr(t.payload.percentage)," (",t.value,")"]})]}),jsxs(T,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,children:[jsxs(T,{direction:"row",alignItems:"center",gap:1,children:[jsx(T,{width:6,height:6,borderRadius:"50%",bgcolor:"#919EAB"}),jsx(C,{variant:"body2",noWrap:!0,children:"Total"})]}),jsxs(C,{variant:"body2",noWrap:!0,children:[rr(100)," (",a,")"]})]})]})]})},tr=Zr;var tt=({chartData:e,total:r,isEmptyData:a,onPieClick:t,clickable:o})=>jsx(er,{children:jsx(ResponsiveContainer,{width:200,height:200,children:jsxs(PieChart,{children:[jsx(Pie,{data:e,dataKey:"value",nameKey:"name",cx:"50%",cy:"50%",innerRadius:60,outerRadius:90,paddingAngle:2,strokeWidth:0,isAnimationActive:!1,onClick:t,cursor:o?"pointer":void 0}),jsx("text",{x:"50%",y:"46%",textAnchor:"middle",dominantBaseline:"middle",style:{fontSize:24,fontWeight:700},children:a$6(r)}),jsx("text",{x:"50%",y:"58%",textAnchor:"middle",dominantBaseline:"middle",style:{fontSize:12,fill:"#919EAB"},children:"clientes"}),!a&&jsx(Tooltip,{content:jsx(tr,{total:r})})]})})}),or=tt;var it=({items:e,hiddenKeys:r,onToggle:a,onItemClick:t})=>jsx(T,{width:"100%",justifyContent:"center",children:e.map(o=>jsxs(T,{display:"grid",gridTemplateColumns:"1fr auto auto",alignItems:"center",gap:1.5,onClick:()=>t?.(o.key,o.label),sx:{...t?{cursor:"pointer"}:{}},children:[jsx(Ar,{label:o.label,onClick:i=>i.stopPropagation(),control:jsx(Lr,{size:"small",checked:!r.has(o.key),onChange:(i,n)=>a(o.key,n),sx:{"&.Mui-checked":{color:o.color}}}),sx:{"& .MuiFormControlLabel-label":{overflow:"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis"}}}),jsx(C,{variant:"body2",color:"text.secondary",textAlign:"right",noWrap:!0,children:c$1(o.percentage,{maximumFractionDigits:2,...o.percentage>0&&o.percentage<100?{minimumFractionDigits:2}:{}})}),jsx(C,{variant:"subtitle2",color:"text.primary",textAlign:"right",noWrap:!0,children:d(o.count)})]},o.key))}),ir=it;var ct=({title:e,chartData:r,total:a$1,isEmptyData:t,legendItems:o,hiddenKeys:i,onToggle:n,onPieClick:c,onItemClick:m})=>jsxs(a,{children:[jsx(pt,{title:e}),jsx(st,{children:jsxs(T,{direction:{xs:"column",sm:"row"},alignItems:"center",gap:1.5,minWidth:0,children:[jsx(or,{chartData:r,total:a$1,isEmptyData:t,onPieClick:c,clickable:!!c}),jsx(ir,{items:o,hiddenKeys:i,onToggle:n,onItemClick:m})]})})]}),dt=ct;var sr=Math.PI/180,pr=22,ft=2,gt=e=>{let{cx:r,cy:a,midAngle:t,outerRadius:o,percentage:i}=e;if(i<ft)return null;let n=Number(r),c=Number(a),m=Number(o),u=Number(t);if(isNaN(n)||isNaN(c)||isNaN(m))return null;let x=Math.sin(-u*sr),S=Math.cos(-u*sr),k=n+m*S,v=c+m*x,y=n+(m+pr*.5)*S,l=c+(m+pr*.5)*x,s=S>=0?1:-1,d=y+s*10,b=l,f=c$1(i,{maximumFractionDigits:1,...i>0&&i<100?{minimumFractionDigits:1}:{}}),P=f.length*7+10,L=s===1?d+2:d-P-2;return jsxs("g",{children:[jsx("path",{d:`M${k},${v} L${y},${l} L${d},${b}`,stroke:"#637381",fill:"none",strokeWidth:1}),jsx("rect",{x:L,y:b-10,width:P,height:20,rx:4,fill:"#212B36"}),jsx("text",{x:L+P/2,y:b,textAnchor:"middle",dominantBaseline:"central",fontSize:11,fontWeight:600,fill:"#FFFFFF",children:f})]})},mr=gt;var cr=styled(T)({position:"relative",alignItems:"center",justifyContent:"center","& .recharts-wrapper, & .recharts-wrapper *":{outline:"none !important",boxShadow:"none !important"},"& .recharts-wrapper":{overflow:"visible !important"},"& .recharts-wrapper svg":{overflow:"visible"},"& .recharts-pie-sector":{cursor:"pointer"}});var dr=e=>c$1(e,{maximumFractionDigits:2,...e>0&&e<100?{minimumFractionDigits:2}:{}}),Ct=({active:e,payload:r,total:a})=>{if(!e||!r?.length)return null;let t=r[0];return jsxs(a$8,{minWidth:{xs:"auto",sm:200},p:1,gap:1,children:[jsx(C,{variant:"body2",color:"text.secondary",children:t.name}),jsx(qr,{}),jsxs(T,{children:[jsxs(T,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,children:[jsxs(T,{direction:"row",alignItems:"center",gap:1,children:[jsx(T,{width:6,height:6,borderRadius:"50%",bgcolor:t.payload.fill}),jsx(C,{variant:"body2",noWrap:!0,children:t.name})]}),jsxs(C,{variant:"body2",noWrap:!0,children:[dr(t.payload.percentage)," (",t.value,")"]})]}),jsxs(T,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,children:[jsxs(T,{direction:"row",alignItems:"center",gap:1,children:[jsx(T,{width:6,height:6,borderRadius:"50%",bgcolor:"#919EAB"}),jsx(C,{variant:"body2",noWrap:!0,children:"Total"})]}),jsxs(C,{variant:"body2",noWrap:!0,children:[dr(100)," (",a,")"]})]})]})]})},fr=Ct;var Pt=e=>jsx(mr,{...e}),Tt=({chartData:e,total:r,isEmptyData:a,onPieClick:t})=>jsx(cr,{children:jsx(ResponsiveContainer,{width:280,height:280,children:jsxs(PieChart,{children:[jsx(Pie,{data:e,dataKey:"value",nameKey:"name",cx:"50%",cy:"50%",outerRadius:90,paddingAngle:1,strokeWidth:0,isAnimationActive:!1,label:a?!1:Pt,labelLine:!1,onClick:t,cursor:t?"pointer":void 0}),!a&&jsx(Tooltip,{content:jsx(fr,{total:r})})]})})}),gr=Tt;var Bt=e=>c$1(e,{maximumFractionDigits:2,...e>0&&e<100?{minimumFractionDigits:2}:{}}),Lt=({items:e,hiddenKeys:r,onToggle:a,onItemClick:t})=>jsx(a$7,{sx:{maxHeight:280,width:"100%",pl:.5},children:e.map(o=>jsxs(T,{display:"grid",gridTemplateColumns:"1fr auto auto",alignItems:"center",gap:1.5,onClick:()=>t?.(o.key),sx:t?{cursor:"pointer"}:void 0,children:[jsx(Ar,{label:o.label,onClick:i=>i.stopPropagation(),control:jsx(Lr,{size:"small",checked:!r.has(o.key),onChange:(i,n)=>a(o.key,n),sx:{"&.Mui-checked":{color:o.color}}}),sx:{"& .MuiFormControlLabel-label":{overflow:"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis"}}}),jsx(C,{variant:"body2",color:"text.secondary",textAlign:"right",noWrap:!0,children:Bt(o.percentage)}),jsx(C,{variant:"subtitle2",color:"text.primary",textAlign:"right",noWrap:!0,children:d(o.count)})]},o.key))}),ur=Lt;var Et=({data:e,chartData:r,total:a$2,isEmptyData:t,onPieClick:o,onLegendClick:i,hiddenKeys:n,onToggle:c})=>jsxs(a,{children:[jsx(pt,{title:"Clientes por segmentos"}),jsx(st,{children:jsx(a$1,{isEmpty:e.length===0,empty:jsx(m,{}),children:jsxs(T,{alignItems:"center",gap:2,children:[jsx(gr,{chartData:r,total:a$2,isEmptyData:t,onPieClick:o}),jsx(ur,{items:e,hiddenKeys:n,onToggle:c,onItemClick:i})]})})})]}),Ft=Et;var Nt=["#FF5630","#FFAB00","#22C55E","#C4CDD5","#8E33FF","#00B8D9","#3366FF","#FF6C40","#36B37E","#B76E00"],Kt=12;var Vt=({title:e,label:r})=>jsxs(T,{width:"100%",minWidth:0,overflow:"hidden",children:[jsx(C,{variant:"subtitle1",noWrap:!0,children:e}),jsx(C,{variant:"body2",color:"text.secondary",noWrap:!0,children:r})]}),kr=Vt;var Yt=({open:e,onClose:r,title:a,label:t,columns:o,rows:i,totalPartners:n,isLoading:c,isFetching:m,isFetchingNextPage:u,onSearch:x,onRowsScrollEnd:S,sellerName:k,buildSellerLink:v,sellerExternalId:y,mobileRender:l})=>{let s=b("down","sm"),d=jsxs(T,{gap:3,children:[jsxs(T,{direction:{xs:"column",sm:"row"},justifyContent:"space-between",alignItems:{sm:"center"},gap:3,children:[jsxs(T,{direction:"row",alignItems:"center",gap:3,flexWrap:"wrap",children:[k&&y&&jsxs(Fragment,{children:[v?jsx(zt,{component:"a",href:v(y),target:"_blank",rel:"noopener noreferrer",variant:"subtitle2",sx:{textDecoration:"underline"},noWrap:!0,children:k}):jsx(C,{variant:"subtitle2",noWrap:!0,children:k}),jsx(qr,{orientation:"vertical",flexItem:!0})]}),jsxs(T,{children:[jsx(C,{variant:"body2",color:"text.secondary",children:"Total de clientes:"}),jsx(C,{variant:"subtitle2",color:"text.primary",children:n})]})]}),jsx(a$2,{size:"small",placeholder:"Buscar",onSearch:x,trigger:"change",iconPosition:"start",sx:{minWidth:200}})]}),jsx(d$1,{title:"Clientes",header:jsx(Fragment,{}),headerProps:{p:0},columns:o,rows:i,getRowId:f=>f.external_id,mobileRender:l,loading:c,fetching:m&&!u,fetchingNextPage:u,onRowsScrollEnd:S,scrollEndThreshold:600,disableRowSelectionOnClick:!0,disableColumnMenu:!0,containerProps:{height:400}})]}),b$1=jsx(kr,{title:a,label:t});return s?jsx(a$3,{open:e,onClose:r,headerTitle:b$1,headerProps:{direction:"row-reverse",sx:{"& > :last-child":{minWidth:0,overflow:"hidden"}}},children:d}):jsx(a$4,{open:e,onClose:r,maxWidth:"lg",dialogTitle:b$1,dialogTitleProps:{sx:{flex:1,overflow:"hidden"}},fullWidth:!0,children:d})},Xt=Yt;var Qt=({profileName:e})=>jsxs(T,{width:"100%",minWidth:0,overflow:"hidden",children:[jsx(C,{variant:"subtitle1",noWrap:!0,children:"Clientes por perfil"}),jsx(C,{variant:"body2",color:"text.secondary",noWrap:!0,children:e})]}),Pr=Qt;var qt=({open:e,onClose:r,profileName:a,columns:t,rows:o,totalPartners:i,isLoading:n,isFetching:c,isFetchingNextPage:m,onSearch:u,onRowsScrollEnd:x,mobileRender:S})=>{let k=b("down","sm"),v=jsxs(T,{gap:3,children:[jsxs(T,{direction:{xs:"column",sm:"row"},justifyContent:"space-between",alignItems:{sm:"center"},gap:2,children:[jsx(T,{direction:"row",alignItems:"center",gap:3,flexWrap:"wrap",children:jsxs(T,{children:[jsx(C,{variant:"body2",color:"text.secondary",children:"Total de clientes:"}),jsx(C,{variant:"subtitle2",color:"text.primary",children:i})]})}),jsx(a$2,{size:"small",placeholder:"Buscar",onSearch:u,trigger:"change",iconPosition:"start",sx:{minWidth:200}})]}),jsx(d$1,{title:"Clientes",header:jsx(Fragment,{}),headerProps:{p:0},columns:t,rows:o,getRowId:l=>l.external_id,mobileRender:S,loading:n,fetching:c&&!m,fetchingNextPage:m,onRowsScrollEnd:x,scrollEndThreshold:600,disableRowSelectionOnClick:!0,disableColumnMenu:!0,containerProps:{height:400}})]}),y=jsx(Pr,{profileName:a});return k?jsx(a$3,{open:e,onClose:r,headerTitle:y,headerProps:{direction:"row-reverse",sx:{"& > :last-child":{minWidth:0,overflow:"hidden"}}},children:v}):jsx(a$4,{open:e,onClose:r,maxWidth:"lg",dialogTitle:y,dialogTitleProps:{sx:{flex:1,overflow:"hidden"}},fullWidth:!0,children:v})},Zt=qt;var U="#212B36",jt={["SALE_TOTAL_VALUE"]:{label:"Por valor total",color:"#22C55E",dataKey:"total_sale_value",barName:"Valor total por cliente",averageName:"M\xE9dia total de valor por cliente",averageDataKey:"average_total_value",formatLabel:h,formatYAxis:d},["SALE_COUNT"]:{label:"Por pedidos",color:"#C684FF",dataKey:"total_value_by_customer",barName:"Quantidade de pedidos",averageName:"Quantidade total de pedidos",averageDataKey:"average_sale_count",formatLabel:String,formatYAxis:d,floorAverage:!0},["SALE_AVERAGE_VALUE"]:{label:"Por ticket m\xE9dio",color:"#00B8D9",dataKey:"total_sale_value",barName:"Ticket m\xE9dio por cliente",averageName:"M\xE9dia do ticket m\xE9dio",averageDataKey:"average_ticket",formatLabel:h,formatYAxis:d}};var eo=({x:e=0,y:r=0,width:a=0,height:t=0,index:o=0,activeBarIndex:i,color:n,data:c,onBarClick:m})=>i!==o?null:jsx("rect",{x:e-6,y:r,width:a+12,height:t+6,fill:n,opacity:.16,rx:6,style:{cursor:"pointer"},onClick:()=>m(c[o])}),Rr=eo;var oo=({active:e,payload:r,label:a,config:t,average:o})=>!e||!r?.length?null:jsxs(a$8,{minWidth:{xs:"auto",sm:200},p:1,gap:1,children:[jsx(C,{variant:"body2",color:"text.secondary",children:a}),jsx(qr,{}),jsxs(T,{children:[r.map((i,n)=>jsxs(T,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,"data-testid":`tooltip-item-${n}`,children:[jsxs(T,{direction:"row",alignItems:"center",gap:1,children:[jsx(T,{width:6,height:6,borderRadius:"50%",bgcolor:i.color}),jsx(C,{variant:"body2",noWrap:!0,children:t.barName})]}),jsx(C,{variant:"body2",children:t.formatLabel(i.value)})]},i.dataKey)),jsxs(T,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,children:[jsxs(T,{direction:"row",alignItems:"center",gap:1,children:[jsx(T,{width:6,height:6,borderRadius:"50%",bgcolor:U}),jsx(C,{variant:"body2",noWrap:!0,children:t.averageName})]}),jsx(C,{variant:"body2",children:t.formatLabel(o)})]})]})]}),wr=oo;var co=48,fo=co/.8,go=({data:e,config:r,visibleSeries:a,average:t,activeBarIndex:o,activeCoordX:i,shouldRotateLabels:n$1,onMouseMove:c$1,onMouseLeave:m,onBarClick:u})=>{let x=useMemo(()=>{if(!e.length)return [0,1];let s=e.map(b=>b[r.dataKey]||0);a.average&&t>0&&s.push(t);let d=Math.max(...s);return [0,d>0?d*1.15:1]},[e,r.dataKey,t,a.average]),S=useMemo(()=>{let[,s]=x,d=s/6;return [...new Set(Array.from({length:7},(b,f)=>Math.round(d*f)))]},[x]),k=useMemo(()=>n$1?!1:{position:"top",fontSize:11,fill:"#212B36",formatter:s=>r.formatLabel(Number(s))},[n$1,r]),v=useMemo(()=>jsx(wr,{config:r,average:t}),[r,t]),y=useCallback(s=>n$1?jsx(n,{...s}):jsx(b$2,{x:s.x,y:s.y,payload:s.payload,slotWidth:fo}),[n$1]),l=useCallback(s=>{s&&u(s);},[u]);return jsx(c,{children:jsx(ResponsiveContainer,{width:"100%",height:350,children:jsxs(ComposedChart,{data:e,margin:{top:20,right:10,bottom:0,left:20},barCategoryGap:"20%",onMouseMove:c$1,onMouseLeave:m,children:[jsx(CartesianGrid,{vertical:!1,strokeDasharray:"3 3",stroke:"#F4F6F8"}),jsx(XAxis,{dataKey:"partner_name",axisLine:!1,tickLine:!1,interval:0,height:n$1?70:50,tick:y}),jsx(YAxis,{axisLine:!1,tickLine:!1,tick:{fontSize:12,fill:"#637381"},tickFormatter:s=>d(s),domain:x,ticks:S}),jsx(Tooltip,{content:v}),a.average&&t>0&&jsx(ReferenceLine,{y:t,stroke:U,strokeDasharray:"8 4",strokeWidth:2,ifOverflow:"extendDomain"}),a.average&&t>0&&jsx(ReferenceLine,{y:t,stroke:"none",ifOverflow:"extendDomain",label:jsx(a$5,{activeCoordX:i,referenceCircleColor:U,activeIndex:o})}),a.bar&&jsx(Bar,{dataKey:r.dataKey,name:r.barName,fill:r.color,maxBarSize:48,isAnimationActive:!1,radius:[4,4,0,0],cursor:"pointer",onClick:l,background:jsx(Rr,{activeBarIndex:o,color:r.color,data:e,onBarClick:u}),label:k})]})})})},Br=go;var yo=({visibleSeries:e,config:r,onToggleSerie:a})=>jsxs(T,{direction:"row",justifyContent:"center",flexWrap:"wrap",gap:1,children:[jsx(Ar,{control:jsx(Lr,{checked:e.bar,onChange:()=>a("bar"),sx:{"&.Mui-checked":{color:r.color}}}),label:r.barName}),jsx(Ar,{control:jsx(Lr,{checked:e.average,onChange:()=>a("average"),sx:{"&.Mui-checked":{color:U}}}),label:r.averageName})]}),_r=yo;var Er=memo(({data:e,config:r,average:a$2,onBarClick:t,children:o})=>{let i=b("down","sm"),n=b("down","lg"),[c,m$1]=useState({bar:!0,average:!0}),[u,x]=useState(12),[S,k]=useState(null),[v,y]=useState(null),[l,s]=useState(0),d=useRef(null),b$2=useCallback(g=>{d.current&&(d.current.disconnect(),d.current=null),g&&(s(g.clientWidth),d.current=new ResizeObserver(()=>s(g.clientWidth)),d.current.observe(g));},[]),f=useMemo(()=>[...e].sort((g,D)=>D[r.dataKey]-g[r.dataKey]),[e,r.dataKey]),P=f.length,L=useMemo(()=>i?10:n?25:30,[i,n]),Ee=!i&&P>10,fe=Math.min(P,L),ge=Math.min(i?P:u,P,L),Y=useMemo(()=>f.slice(0,ge),[f,ge]),Fe=useMemo(()=>l===0||Y.length===0?!1:(l-60)/Y.length<80,[l,Y.length]),Ne=useCallback(g=>{m$1(D=>({...D,[g]:!D[g]}));},[]),Ke=useCallback(g=>{g?.activeTooltipIndex!=null&&k(Number(g.activeTooltipIndex)),g?.activeCoordinate?.x!=null&&y(g.activeCoordinate.x);},[]),Oe=useCallback(()=>{k(null),y(null);},[]),Ve=useCallback(g=>{g&&t?.(g);},[t]),h=useCallback((g,D)=>{x(D);},[]);return jsxs(a,{children:[jsx(b$1,{title:"Ranking de clientes",action:o}),jsx(st,{children:jsx(a$1,{isEmpty:Y.length===0,empty:jsx(m,{}),children:jsxs(T,{alignItems:"center",gap:1.5,children:[jsx(T,{width:"100%",ref:b$2,children:jsx(Br,{data:Y,config:r,visibleSeries:c,average:a$2,activeBarIndex:S,activeCoordX:v,shouldRotateLabels:Fe,onMouseMove:Ke,onMouseLeave:Oe,onBarClick:Ve})}),jsx(_r,{visibleSeries:c,config:r,onToggleSerie:Ne}),Ee&&jsx(So,{size:"small",min:10,max:fe,value:ge,valueLabelDisplay:"auto",onChange:h})]})})})]})});Er.displayName="Ranking";var vo=Er;var Ro=styled(Po,{shouldForwardProp:e=>e!=="active"})(({theme:e,active:r})=>({justifyContent:"flex-start",color:r?e.palette.primary.main:e.palette.text.secondary,fontWeight:r?800:400,"&:hover":{background:e.palette.action.hover}}));var wo=({rankingLabel:e,partnerName:r})=>jsxs(T,{width:"100%",minWidth:0,overflow:"hidden",children:[jsx(C,{variant:"subtitle1",noWrap:!0,children:"Detalhes do relat\xF3rio"}),jsxs(T,{direction:"row",alignItems:"center",columnGap:1.5,rowGap:0,flexWrap:"wrap",children:[jsx(C,{variant:"body2",color:"text.secondary",flexShrink:0,children:"Top clientes"}),"\u2022",jsxs(C,{variant:"body2",flexShrink:0,children:['Por "',e,'"']}),"\u2022",jsx(C,{variant:"body2",color:"text.secondary",noWrap:!0,children:r})]})]}),Nr=wo;var We=styled(qr)(()=>({height:30,alignSelf:"center",borderStyle:"dashed"})),Or=styled(T)(({theme:e})=>({position:"relative",display:"flex",flexDirection:"column",padding:e.spacing(2),gap:e.spacing(1),color:e.palette.text.primary,"& a":{textDecoration:"none"},"&+div":{borderTop:`1px dashed ${alpha(e.palette.grey[500],.2)}`}}));var _o=e=>jsx(T,{justifyContent:"center",height:1,children:jsx(C,{variant:"body2",color:"text.primary",children:e.id})}),Wo=(e,r)=>jsx(T,{justifyContent:"center",height:1,children:e?.partner?.id&&r?jsx(zt,{component:"a",href:r(e.partner.id),target:"_blank",rel:"noopener noreferrer",variant:"subtitle2",sx:{textDecoration:"underline"},noWrap:!0,children:e.partner?.name||"-"}):jsx(C,{variant:"body2",color:"text.primary",noWrap:!0,children:e.partner?.name||"-"})}),Mo=e=>jsx(T,{justifyContent:"center",height:1,children:jsx(C,{variant:"body2",color:"text.primary",children:h(e.total_value)})}),Eo=e=>jsx(T,{justifyContent:"center",height:1,children:e.negotiation_date?jsx(C,{variant:"body2",color:"text.primary",children:d$2(e.negotiation_date,"DD/MM/YYYY")}):"-"}),Fo=e=>jsx(T,{justifyContent:"center",height:1,children:e.status||"-"}),No=e=>jsx(Or,{children:jsxs(T,{gap:1,children:[jsxs(T,{children:[jsx(C,{variant:"body2",color:"text.secondary",children:"Pedido"}),jsx(C,{variant:"subtitle2",color:"text.primary",children:e.id})]}),jsxs(T,{children:[jsx(C,{variant:"body2",color:"text.secondary",children:"Cliente"}),jsx(C,{variant:"subtitle2",color:"primary.main",children:e.partner?.name||"-"})]}),jsxs(T,{direction:"row",alignItems:"center",gap:1,children:[jsxs(T,{flex:1,overflow:"hidden",children:[jsx(C,{variant:"body2",color:"text.secondary",noWrap:!0,children:"Valor do pedido"}),jsx(C,{variant:"subtitle2",color:"text.primary",noWrap:!0,children:h(e.total_value)})]}),jsx(qr,{orientation:"vertical",flexItem:!0,sx:{borderStyle:"dashed",mx:3}}),jsxs(T,{flex:1,overflow:"hidden",children:[jsx(C,{variant:"body2",color:"text.secondary",noWrap:!0,children:"Data"}),jsx(C,{variant:"subtitle2",color:"text.primary",noWrap:!0,children:e.negotiation_date?d$2(e.negotiation_date,"DD/MM/YYYY"):"-"})]})]}),jsxs(T,{gap:.5,children:[jsx(C,{variant:"body2",color:"text.secondary",children:"Status"}),jsx(C,{variant:"subtitle2",color:"text.primary",children:e.status||"-"})]})]})},e.id),Ko=({open:e,onClose:r,partnerName:a,rankingLabel:t,rows:o,total:i,totalValue:n,averageTicket:c,isLoading:m,isFetching:u,page:x,perPage:S,onSearch:k,onPaginationChange:v,buildPartnerLink:y,mobileItemSlot:l})=>{let s=b("down","sm"),d=jsxs(T,{gap:3,children:[jsxs(T,{direction:{xs:"column",sm:"row"},justifyContent:"space-between",gap:2,children:[jsxs(T,{minWidth:0,direction:"row",alignItems:"center",gap:3,flexWrap:"wrap",children:[jsx(C,{variant:"subtitle2",noWrap:!0,children:a}),jsx(We,{orientation:"vertical",flexItem:!0}),jsxs(T,{children:[jsx(C,{variant:"body2",color:"text.secondary",children:"Qtd. de pedidos"}),jsx(C,{variant:"subtitle2",color:"text.primary",children:i})]}),jsx(We,{orientation:"vertical",flexItem:!0}),jsxs(T,{children:[jsx(C,{variant:"body2",color:"text.secondary",children:"Valor em pedidos"}),jsx(C,{variant:"subtitle2",color:"text.primary",children:h(n)})]}),jsx(We,{orientation:"vertical",flexItem:!0}),jsxs(T,{children:[jsx(C,{variant:"body2",color:"text.secondary",children:"Ticket m\xE9dio"}),jsx(C,{variant:"subtitle2",color:"text.primary",children:h(c)})]})]}),jsx(a$2,{size:"small",placeholder:"Buscar",onSearch:k,trigger:"change",iconPosition:"start",sx:{minWidth:200}})]}),jsx(d$1,{title:"Pedidos",header:jsx(Fragment,{}),headerProps:{p:0},columns:[{field:"external_id",headerName:"Pedido",flex:1,renderCell:({row:f})=>_o(f)},{field:"partner_name",headerName:"Cliente",flex:1,renderCell:({row:f})=>Wo(f,y)},{field:"total_value",headerName:"Valor do pedido",flex:1,renderCell:({row:f})=>Mo(f)},{field:"created_at",headerName:"Data",flex:1,renderCell:({row:f})=>Eo(f)},{field:"last_status",headerName:"Status",flex:1,renderCell:({row:f})=>Fo(f)}],rows:o,rowCount:i,mobileRender:f=>l?l(f):No(f),loading:m,fetching:u,paginationModel:{page:x,pageSize:S},onPaginationChange:v,paginationMode:"server",disableRowSelectionOnClick:!0,disableColumnMenu:!0,containerProps:{height:400}})]}),b$1=jsx(Nr,{rankingLabel:t,partnerName:a});return s?jsx(a$3,{open:e,onClose:r,headerTitle:b$1,headerProps:{direction:"row-reverse",sx:{"& > :last-child":{minWidth:0,overflow:"hidden"}}},children:d}):jsx(a$4,{open:e,onClose:r,maxWidth:"lg",dialogTitle:b$1,dialogTitleProps:{sx:{flex:1,overflow:"hidden"}},fullWidth:!0,children:d})},Oo=Ko;var Go=({x:e=0,y:r=0,width:a=0,height:t=0,index:o=0,activeBarIndex:i,data:n,onBarClick:c})=>{if(i!==o)return null;let m=n[o];return jsx("rect",{x:e-6,y:r,width:a+12,height:t+6,fill:"#919EAB",opacity:.16,rx:6,style:{cursor:"pointer"},onClick:()=>{m&&c(String(m.seller_external_id),String(m.seller_name));}})},Vr=Go;var Gr=e=>c$1(e,{maximumFractionDigits:2,...e>0&&e<100?{minimumFractionDigits:2}:{}}),Yo=({active:e,payload:r,label:a,config:t})=>{if(!e||!r?.length)return null;let o=r.filter(n=>n.value!=null&&n.value>0),i=o.reduce((n,c)=>n+c.value,0);return jsxs(a$8,{minWidth:{xs:"auto",sm:200},p:1,gap:1,children:[jsx(C,{variant:"body2",color:"text.secondary",children:a}),jsx(qr,{}),jsxs(T,{children:[o.map(n=>{let c=t.series.find(u=>u.dataKey===n.dataKey),m=i>0?Gr(n.value/i*100):"0%";return jsxs(T,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,children:[jsxs(T,{direction:"row",alignItems:"center",gap:1,children:[jsx(T,{width:6,height:6,borderRadius:"50%",bgcolor:n.color}),jsx(C,{variant:"body2",noWrap:!0,children:c?.name??n.dataKey})]}),jsxs(C,{variant:"body2",noWrap:!0,children:[m," (",n.value,")"]})]},n.dataKey)}),jsxs(T,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,children:[jsxs(T,{direction:"row",alignItems:"center",gap:1,children:[jsx(T,{width:6,height:6,borderRadius:"50%",bgcolor:"#919EAB"}),jsx(C,{variant:"body2",noWrap:!0,children:"Total"})]}),jsxs(C,{variant:"body2",noWrap:!0,children:[Gr(100)," (",i,")"]})]})]})]})},Hr=Yo;var jo=48,ea=jo/.8,ra=({data:e,config:r,visibleSeries:a,hiddenKeys:t,activeBarIndex:o,shouldRotateLabels:i,onMouseMove:n$1,onMouseLeave:c$1,onBarClick:m})=>{let u=useMemo(()=>{if(!e.length)return [0,1];let l=Math.max(...e.map(s=>s._visibleTotal));return [0,l>0?l*1.15:1]},[e]),x=useMemo(()=>{let[,l]=u,s=l/6;return [...new Set(Array.from({length:7},(d,b)=>Math.round(s*b)))]},[u]),S=useMemo(()=>jsx(Hr,{config:r}),[r]),k=useCallback(l=>i?jsx(n,{...l}):jsx(b$2,{x:l.x,y:l.y,payload:l.payload,slotWidth:ea}),[i]),v=useCallback(l=>{if(!l)return;let s=l.payload;s&&m(String(s.seller_external_id),String(s.seller_name));},[m]),y=useCallback(l=>{let{x:s,y:d,width:b,index:f}=l,P=e[f]?._visibleTotal;return P?jsx("text",{x:s+b/2,y:d-6,textAnchor:"middle",fontSize:11,fill:"#212B36",children:P}):jsx(Fragment,{})},[e]);return jsx(c,{children:jsx(ResponsiveContainer,{width:"100%",height:350,children:jsxs(BarChart,{data:e,margin:{top:20,right:10,bottom:0,left:20},barCategoryGap:"20%",onMouseMove:n$1,onMouseLeave:c$1,children:[jsx(CartesianGrid,{vertical:!1,strokeDasharray:"3 3",stroke:"#F4F6F8"}),jsx(XAxis,{dataKey:"seller_name",axisLine:!1,tickLine:!1,interval:0,height:i?70:50,tick:k}),jsx(YAxis,{axisLine:!1,tickLine:!1,tick:{fontSize:12,fill:"#637381"},tickFormatter:l=>d(l),domain:u,ticks:x}),jsx(Tooltip,{content:S,cursor:!1}),r.series.map(l=>{let s=!t.has(l.dataKey),d=a[0],b=a[a.length-1],f=s&&l.dataKey===d?.dataKey,P=s&&l.dataKey===b?.dataKey;return jsx(Bar,{dataKey:s?l.dataKey:`_hidden_${l.dataKey}`,name:l.name,fill:l.color,stackId:"stack",maxBarSize:48,isAnimationActive:!1,cursor:"pointer",hide:!s,onClick:v,...f&&{background:jsx(Vr,{activeBarIndex:o,data:e,onBarClick:m})},...P&&{radius:[4,4,0,0]},...P&&!i&&{label:{position:"top",fontSize:11,fill:"#212B36",content:y}}},l.dataKey)})]})})})},zr=ra;var la=({series:e,hiddenKeys:r,onToggleSerie:a})=>jsx(T,{direction:"row",justifyContent:"center",flexWrap:"wrap",gap:1,children:e.map(t=>jsx(Ar,{control:jsx(Lr,{checked:!r.has(t.dataKey),onChange:()=>a(t.dataKey),sx:{"&.Mui-checked":{color:t.color}}}),label:t.name},t.dataKey))}),Yr=la;var ca=({data:e,config:r,onBarClick:a$2,children:t})=>{let o=b("down","sm"),i=b("down","lg"),[n,c]=useState(new Set),[m$1,u]=useState(12),[x,S]=useState(null),[k,v]=useState(0),y=useRef(null),l=useMemo(()=>[...e].sort((h,g)=>g._total-h._total),[e]),s=useMemo(()=>o?10:i?25:30,[i,o]),d=l.length,b$2=!o&&d>10,f=Math.min(d,s),P=Math.min(o?d:m$1,d,s),L=useMemo(()=>l.slice(0,P),[l,P]),Ee=useMemo(()=>k===0||L.length===0?!1:(k-60)/L.length<80,[k,L.length]),fe=useMemo(()=>r.series.filter(h=>!n.has(h.dataKey)),[r.series,n]),ge=useMemo(()=>L.map(h=>({...h,_visibleTotal:fe.reduce((g,D)=>g+(Number(h[D.dataKey])||0),0)})),[L,fe]),Y=useCallback(h=>{y.current&&(y.current.disconnect(),y.current=null),h&&(v(h.clientWidth),y.current=new ResizeObserver(()=>v(h.clientWidth)),y.current.observe(h));},[]),Fe=useCallback(h=>{c(g=>{let D=new Set(g);return D.has(h)?D.delete(h):D.add(h),D});},[]),Ne=useCallback(h=>{h?.activeTooltipIndex!=null&&S(Number(h.activeTooltipIndex));},[]),Ke=useCallback(()=>{S(null);},[]),Oe=useCallback((h,g)=>{a$2?.(h,g);},[a$2]),Ve=useCallback((h,g)=>{u(g);},[]);return jsxs(a,{children:[jsx(b$1,{title:"Carteira de clientes do vendedor",action:t}),jsx(st,{children:jsx(a$1,{isEmpty:L.length===0,empty:jsx(m,{}),children:jsxs(T,{alignItems:"center",gap:1.5,children:[jsx(T,{width:"100%",ref:Y,children:jsx(zr,{data:ge,config:r,visibleSeries:fe,hiddenKeys:n,activeBarIndex:x,shouldRotateLabels:Ee,onMouseMove:Ne,onMouseLeave:Ke,onBarClick:Oe})}),jsx(Yr,{series:r.series,hiddenKeys:n,onToggleSerie:Fe}),b$2&&jsx(So,{size:"small",min:10,max:f,value:P,valueLabelDisplay:"auto",onChange:Ve})]})})})]})},da=ca;var fa=[{dataKey:"ACTIVE",name:"Ativos",color:"#22C55E"},{dataKey:"AT_RISK",name:"Em risco",color:"#FFAB00"},{dataKey:"INACTIVE",name:"Inativos",color:"#FF5630"},{dataKey:"NEW_CLIENT",name:"Novos clientes",color:"#8E33FF"},{dataKey:"PROSPECT",name:"Prospects",color:"#00B8D9"},{dataKey:"LOST",name:"Perdidos",color:"#C4CDD5"}],ga=[{dataKey:"A",name:"Curva A",color:"#22C55E"},{dataKey:"B",name:"Curva B",color:"#FFAB00"},{dataKey:"C",name:"Curva C",color:"#FF5630"}],ha={["CLASSIFICATION"]:{label:"Por classifica\xE7\xE3o",series:fa,formatYAxis:d},["ABC_CURVE"]:{label:"Por curva ABC",series:ga,formatYAxis:d}};
|
|
26
44
|
|
|
27
|
-
export {
|
|
45
|
+
export { Kt as PROFILE_MAX_VISIBLE, dt as PartnerBreakdown, Ft as PartnersByProfile, Xt as PartnersDetail, Zt as ProfileDetail, jt as RANKING_CONFIG, vo as Ranking, Oo as RankingDetail, Ro as RankingItemButton, Nt as SEGMENT_COLORS, ha as SELLER_PORTFOLIO_CONFIG, da as SellerPortfolio };
|
|
28
46
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/Analytics/PartnerAnalysis/PartnerBreakdown/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnerBreakdown/Chart/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnerBreakdown/Chart/styles.ts","../../../../src/components/Analytics/PartnerAnalysis/PartnerBreakdown/Chart/Tooltip.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnerBreakdown/Legend.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/Chart/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/Chart/PieLabel.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/Chart/styles.ts","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/Chart/Tooltip.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/Legend.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/props.ts","../../../../src/components/Analytics/PartnerAnalysis/Ranking/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/Chart/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/props.ts","../../../../src/components/Analytics/PartnerAnalysis/Ranking/Chart/BarBackground.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/Chart/Tooltip.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/Legend.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/styles.ts","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/Chart/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/Chart/BarBackground.tsx","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/Chart/Tooltip.tsx","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/Legend.tsx","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/props.ts"],"names":["CardContent","CardHeader","Stack","Pie","PieChart","ResponsiveContainer","Tooltip","styled","ChartContainer","theme","Divider","Typography","jsx","jsxs","formatPercentage","value","fPercent","PieChartTooltip","active","payload","total","entry","SimpleCard_default","Tooltip_default","PieChartBreakdown","chartData","isEmptyData","onPieClick","clickable","fNumber","Chart_default","Checkbox","FormControlLabel","PieChartLegend","items","hiddenKeys","onToggle","onItemClick","item","e","_","checked","fShortenNumber","Legend_default","PartnerBreakdown","title","legendItems","ChartCard","PartnerBreakdown_default","RADIAN","LABEL_OFFSET","MIN_PERCENTAGE","PieLabel","props","cx","cy","midAngle","outerRadius","percentage","cxNum","cyNum","outerR","angle","sin","cos","x1","y1","xMid","yMid","side","xEnd","yEnd","label","badgeW","badgeX","PieLabel_default","ProfileTooltip","renderLabel","ProfileChart","ProfileLegend","Scrollbar_default","PartnersByProfile","data","onLegendClick","Result_default","EmptyState_default","PartnersByProfile_default","SEGMENT_COLORS","MAX_VISIBLE","memo","useCallback","useMemo","useRef","useState","Slider","Bar","CartesianGrid","ComposedChart","ReferenceLine","XAxis","YAxis","AVERAGE_COLOR","RANKING_CONFIG","fCurrencyBRL","BarBackground","x","y","width","height","index","activeBarIndex","color","onBarClick","BarBackground_default","RankingTooltip","config","average","BAR_SIZE","BAR_SLOT","RankingChart","visibleSeries","activeCoordX","shouldRotateLabels","onMouseMove","onMouseLeave","yDomain","values","max","yTicks","step","i","barLabel","tooltipContent","renderXAxisTick","tickProps","RotatedTick_default","WrappedTick_default","handleBarClick","ChartWrapper","v","ReferenceCircle_default","RankingLegend","onToggleSerie","Ranking","children","isMobile","useResponsive_default","isDownLg","setVisibleSeries","visibleCount","setVisibleCount","setActiveBarIndex","setActiveCoordX","containerWidth","setContainerWidth","observerRef","wrapperRefCallback","node","sortedData","a","b","totalItems","maxVisible","showSlider","sliderMax","clampedCount","displayData","handleToggleSerie","serie","prev","handleChartMouseMove","state","handleChartMouseLeave","handleSliderChange","val","ChartCardHeader","Ranking_default","MuiButton","ItemButton","prop","BarChart","formatPct","StackedTooltip","visibleEntries","sum","series","s","pct","Fragment","SellerPortfolioChart","row","visible","firstVisible","lastVisible","isFirst","isLast","SellerPortfolioLegend","SellerPortfolio","setHiddenKeys","displayDataWithTotals","dataKey","next","handleMouseMove","handleMouseLeave","sellerId","sellerName","SellerPortfolio_default","CLASSIFICATION_SERIES","ABC_CURVE_SERIES","SELLER_PORTFOLIO_CONFIG"],"mappings":"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","sourcesContent":["import CardContent from '@mui/material/CardContent';\nimport CardHeader from '@mui/material/CardHeader';\nimport Stack from '@mui/material/Stack';\nimport { ChartCard } from 'components/Analytics/ChartStyles';\n\nimport PieChartBreakdown from './Chart';\nimport PieChartLegend from './Legend';\nimport { PartnerBreakdownProps } from './props';\n\nconst PartnerBreakdown = ({\n title,\n chartData,\n total,\n isEmptyData,\n legendItems,\n hiddenKeys,\n onToggle,\n onPieClick,\n onItemClick,\n}: PartnerBreakdownProps) => (\n <ChartCard>\n <CardHeader title={title} />\n\n <CardContent>\n <Stack\n direction={{ xs: 'column', sm: 'row' }}\n alignItems=\"center\"\n gap={1.5}\n minWidth={0}\n >\n <PieChartBreakdown\n chartData={chartData}\n total={total}\n isEmptyData={isEmptyData}\n onPieClick={onPieClick}\n clickable={!!onPieClick}\n />\n\n <PieChartLegend\n items={legendItems}\n hiddenKeys={hiddenKeys}\n onToggle={onToggle}\n onItemClick={onItemClick}\n />\n </Stack>\n </CardContent>\n </ChartCard>\n);\n\nexport default PartnerBreakdown;\n","import { fNumber } from 'utils/formatNumber';\nimport { Pie, PieChart, ResponsiveContainer, Tooltip } from 'recharts';\n\nimport { ChartProps } from '../props';\n\nimport { ChartContainer } from './styles';\nimport PieChartTooltip from './Tooltip';\n\nconst PieChartBreakdown = ({\n chartData,\n total,\n isEmptyData,\n onPieClick,\n clickable,\n}: ChartProps) => (\n <ChartContainer>\n <ResponsiveContainer width={200} height={200}>\n <PieChart>\n <Pie\n data={chartData}\n dataKey=\"value\"\n nameKey=\"name\"\n cx=\"50%\"\n cy=\"50%\"\n innerRadius={60}\n outerRadius={90}\n paddingAngle={2}\n strokeWidth={0}\n isAnimationActive={false}\n onClick={onPieClick}\n cursor={clickable ? 'pointer' : undefined}\n />\n\n <text\n x=\"50%\"\n y=\"46%\"\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n style={{ fontSize: 24, fontWeight: 700 }}\n >\n {fNumber(total)}\n </text>\n\n <text\n x=\"50%\"\n y=\"58%\"\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n style={{ fontSize: 12, fill: '#919EAB' }}\n >\n clientes\n </text>\n\n {!isEmptyData && (\n <Tooltip content={<PieChartTooltip total={total} />} />\n )}\n </PieChart>\n </ResponsiveContainer>\n </ChartContainer>\n);\n\nexport default PieChartBreakdown;\n","import Stack from '@mui/material/Stack';\nimport { styled } from '@mui/material/styles';\n\nexport const ChartContainer = styled(Stack)(({ theme }) => ({\n position: 'relative',\n alignSelf: 'flex-start',\n\n flexShrink: 0,\n\n '& .recharts-wrapper, & .recharts-wrapper *': {\n outline: 'none !important',\n boxShadow: 'none !important',\n },\n\n '& .recharts-pie-sector': {\n cursor: 'pointer',\n },\n\n [theme.breakpoints.down('md')]: {\n alignSelf: 'center',\n },\n}));\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport SimpleCard from 'components/SimpleCard';\nimport { fPercent } from 'utils/formatNumber';\n\nimport { CustomTooltipProps } from '../props';\n\nconst formatPercentage = (value: number) =>\n fPercent(value, {\n maximumFractionDigits: 2,\n ...(value > 0 && value < 100 ? { minimumFractionDigits: 2 } : {}),\n });\n\nconst PieChartTooltip = ({ active, payload, total }: CustomTooltipProps) => {\n if (!active || !payload?.length) return null;\n\n const entry = payload[0];\n\n return (\n <SimpleCard minWidth={{ xs: 'auto', sm: 200 }} p={1} gap={1}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {entry.name}\n </Typography>\n\n <Divider />\n\n <Stack>\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={entry.payload.fill}\n />\n\n <Typography variant=\"body2\" noWrap>\n {entry.name}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {formatPercentage(entry.payload.percentage)} ({entry.value})\n </Typography>\n </Stack>\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack width={6} height={6} borderRadius=\"50%\" bgcolor=\"#919EAB\" />\n\n <Typography variant=\"body2\" noWrap>\n Total\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {formatPercentage(100)} ({total})\n </Typography>\n </Stack>\n </Stack>\n </SimpleCard>\n );\n};\n\nexport default PieChartTooltip;\n","import Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport { fPercent, fShortenNumber } from 'utils/formatNumber';\n\nimport { LegendProps } from './props';\n\nconst PieChartLegend = ({\n items,\n hiddenKeys,\n onToggle,\n onItemClick,\n}: LegendProps) => (\n <Stack width=\"100%\" justifyContent=\"center\">\n {items.map(item => (\n <Stack\n key={item.key}\n display=\"grid\"\n gridTemplateColumns=\"1fr auto auto\"\n alignItems=\"center\"\n gap={1.5}\n onClick={() => onItemClick?.(item.key, item.label)}\n sx={{\n ...(onItemClick ? { cursor: 'pointer' } : {}),\n }}\n >\n <FormControlLabel\n label={item.label}\n onClick={e => e.stopPropagation()}\n control={\n <Checkbox\n size=\"small\"\n checked={!hiddenKeys.has(item.key)}\n onChange={(_, checked) => onToggle(item.key, checked)}\n sx={{ '&.Mui-checked': { color: item.color } }}\n />\n }\n sx={{\n '& .MuiFormControlLabel-label': {\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n },\n }}\n />\n\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n textAlign=\"right\"\n noWrap\n >\n {fPercent(item.percentage, {\n maximumFractionDigits: 2,\n ...(item.percentage > 0 && item.percentage < 100\n ? { minimumFractionDigits: 2 }\n : {}),\n })}\n </Typography>\n\n <Typography\n variant=\"subtitle2\"\n color=\"text.primary\"\n textAlign=\"right\"\n noWrap\n >\n {fShortenNumber(item.count)}\n </Typography>\n </Stack>\n ))}\n </Stack>\n);\n\nexport default PieChartLegend;\n","import CardContent from '@mui/material/CardContent';\nimport CardHeader from '@mui/material/CardHeader';\nimport Stack from '@mui/material/Stack';\nimport { ChartCard } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\n\nimport ProfileChart from './Chart';\nimport ProfileLegend from './Legend';\nimport { PartnersByProfileProps } from './props';\n\nconst PartnersByProfile = ({\n data,\n chartData,\n total,\n isEmptyData,\n onPieClick,\n onLegendClick,\n hiddenKeys,\n onToggle,\n}: PartnersByProfileProps) => (\n <ChartCard>\n <CardHeader title=\"Clientes por segmentos\" />\n\n <CardContent>\n <Result isEmpty={data.length === 0} empty={<EmptyState />}>\n <Stack alignItems=\"center\" gap={2}>\n <ProfileChart\n chartData={chartData}\n total={total}\n isEmptyData={isEmptyData}\n onPieClick={onPieClick}\n />\n\n <ProfileLegend\n items={data}\n hiddenKeys={hiddenKeys}\n onToggle={onToggle}\n onItemClick={onLegendClick}\n />\n </Stack>\n </Result>\n </CardContent>\n </ChartCard>\n);\n\nexport default PartnersByProfile;\n","import { PieLabelRenderProps } from 'recharts';\nimport { Pie, PieChart, ResponsiveContainer, Tooltip } from 'recharts';\n\nimport PieLabel from './PieLabel';\nimport { ChartProps } from './props';\nimport { ChartContainer } from './styles';\nimport ProfileTooltip from './Tooltip';\n\nconst renderLabel = (props: PieLabelRenderProps) => <PieLabel {...props} />;\n\nconst ProfileChart = ({\n chartData,\n total,\n isEmptyData,\n onPieClick,\n}: ChartProps) => (\n <ChartContainer>\n <ResponsiveContainer width={280} height={280}>\n <PieChart>\n <Pie\n data={chartData}\n dataKey=\"value\"\n nameKey=\"name\"\n cx=\"50%\"\n cy=\"50%\"\n outerRadius={90}\n paddingAngle={1}\n strokeWidth={0}\n isAnimationActive={false}\n label={isEmptyData ? false : renderLabel}\n labelLine={false}\n onClick={onPieClick}\n cursor={onPieClick ? 'pointer' : undefined}\n />\n\n {!isEmptyData && (\n <Tooltip content={<ProfileTooltip total={total} />} />\n )}\n </PieChart>\n </ResponsiveContainer>\n </ChartContainer>\n);\n\nexport default ProfileChart;\n","import { PieLabelRenderProps } from 'recharts';\nimport { fPercent } from 'utils/formatNumber';\n\nconst RADIAN = Math.PI / 180;\nconst LABEL_OFFSET = 22;\nconst MIN_PERCENTAGE = 2;\n\nconst PieLabel = (props: PieLabelRenderProps) => {\n const { cx, cy, midAngle, outerRadius, percentage } =\n props as PieLabelRenderProps & { percentage: number };\n\n if (percentage < MIN_PERCENTAGE) return null;\n\n const cxNum = Number(cx);\n const cyNum = Number(cy);\n const outerR = Number(outerRadius);\n const angle = Number(midAngle);\n\n if (isNaN(cxNum) || isNaN(cyNum) || isNaN(outerR)) return null;\n\n const sin = Math.sin(-angle * RADIAN);\n const cos = Math.cos(-angle * RADIAN);\n\n const x1 = cxNum + outerR * cos;\n const y1 = cyNum + outerR * sin;\n\n const xMid = cxNum + (outerR + LABEL_OFFSET * 0.5) * cos;\n const yMid = cyNum + (outerR + LABEL_OFFSET * 0.5) * sin;\n\n const side = cos >= 0 ? 1 : -1;\n const xEnd = xMid + side * 10;\n const yEnd = yMid;\n\n const label = fPercent(percentage, {\n maximumFractionDigits: 1,\n ...(percentage > 0 && percentage < 100 ? { minimumFractionDigits: 1 } : {}),\n });\n\n const badgeW = label.length * 7 + 10;\n const badgeX = side === 1 ? xEnd + 2 : xEnd - badgeW - 2;\n\n return (\n <g>\n <path\n d={`M${x1},${y1} L${xMid},${yMid} L${xEnd},${yEnd}`}\n stroke=\"#637381\"\n fill=\"none\"\n strokeWidth={1}\n />\n\n <rect\n x={badgeX}\n y={yEnd - 10}\n width={badgeW}\n height={20}\n rx={4}\n fill=\"#212B36\"\n />\n\n <text\n x={badgeX + badgeW / 2}\n y={yEnd}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fontSize={11}\n fontWeight={600}\n fill=\"#FFFFFF\"\n >\n {label}\n </text>\n </g>\n );\n};\n\nexport default PieLabel;\n","import Stack from '@mui/material/Stack';\nimport { styled } from '@mui/material/styles';\n\nexport const ChartContainer = styled(Stack)({\n position: 'relative',\n alignItems: 'center',\n justifyContent: 'center',\n\n '& .recharts-wrapper, & .recharts-wrapper *': {\n outline: 'none !important',\n boxShadow: 'none !important',\n },\n\n '& .recharts-wrapper': {\n overflow: 'visible !important',\n },\n\n '& .recharts-wrapper svg': {\n overflow: 'visible',\n },\n\n '& .recharts-pie-sector': {\n cursor: 'pointer',\n },\n});\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport SimpleCard from 'components/SimpleCard';\nimport { fPercent } from 'utils/formatNumber';\n\nimport { CustomTooltipProps } from './props';\n\nconst formatPercentage = (value: number) =>\n fPercent(value, {\n maximumFractionDigits: 2,\n ...(value > 0 && value < 100 ? { minimumFractionDigits: 2 } : {}),\n });\n\nconst ProfileTooltip = ({ active, payload, total }: CustomTooltipProps) => {\n if (!active || !payload?.length) return null;\n\n const entry = payload[0];\n\n return (\n <SimpleCard minWidth={{ xs: 'auto', sm: 200 }} p={1} gap={1}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {entry.name}\n </Typography>\n\n <Divider />\n\n <Stack>\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={entry.payload.fill}\n />\n\n <Typography variant=\"body2\" noWrap>\n {entry.name}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {formatPercentage(entry.payload.percentage)} ({entry.value})\n </Typography>\n </Stack>\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack width={6} height={6} borderRadius=\"50%\" bgcolor=\"#919EAB\" />\n\n <Typography variant=\"body2\" noWrap>\n Total\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {formatPercentage(100)} ({total})\n </Typography>\n </Stack>\n </Stack>\n </SimpleCard>\n );\n};\n\nexport default ProfileTooltip;\n","import Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport Scrollbar from 'components/Scrollbar';\nimport { fPercent, fShortenNumber } from 'utils/formatNumber';\n\nimport { LegendProps } from './props';\n\nconst formatPercentage = (value: number) =>\n fPercent(value, {\n maximumFractionDigits: 2,\n ...(value > 0 && value < 100 ? { minimumFractionDigits: 2 } : {}),\n });\n\nconst ProfileLegend = ({\n items,\n hiddenKeys,\n onToggle,\n onItemClick,\n}: LegendProps) => (\n <Scrollbar sx={{ maxHeight: 280, width: '100%', pl: 0.5 }}>\n {items.map(item => (\n <Stack\n key={item.key}\n display=\"grid\"\n gridTemplateColumns=\"1fr auto auto\"\n alignItems=\"center\"\n gap={1.5}\n onClick={() => onItemClick?.(item.key)}\n sx={onItemClick ? { cursor: 'pointer' } : undefined}\n >\n <FormControlLabel\n label={item.label}\n onClick={e => e.stopPropagation()}\n control={\n <Checkbox\n size=\"small\"\n checked={!hiddenKeys.has(item.key)}\n onChange={(_, checked) => onToggle(item.key, checked)}\n sx={{ '&.Mui-checked': { color: item.color } }}\n />\n }\n sx={{\n '& .MuiFormControlLabel-label': {\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n },\n }}\n />\n\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n textAlign=\"right\"\n noWrap\n >\n {formatPercentage(item.percentage)}\n </Typography>\n\n <Typography\n variant=\"subtitle2\"\n color=\"text.primary\"\n textAlign=\"right\"\n noWrap\n >\n {fShortenNumber(item.count)}\n </Typography>\n </Stack>\n ))}\n </Scrollbar>\n);\n\nexport default ProfileLegend;\n","export const SEGMENT_COLORS = [\n '#FF5630',\n '#FFAB00',\n '#22C55E',\n '#C4CDD5',\n '#8E33FF',\n '#00B8D9',\n '#3366FF',\n '#FF6C40',\n '#36B37E',\n '#B76E00',\n];\n\nexport const MAX_VISIBLE = 12;\n\nexport interface LegendItem {\n key: string;\n label: string;\n count: number;\n percentage: number;\n color: string;\n}\n\nexport interface LegendProps {\n items: LegendItem[];\n hiddenKeys: Set<string>;\n onToggle: (key: string, checked: boolean) => void;\n onItemClick?: (key: string) => void;\n}\n\nexport interface PartnersByProfileProps {\n data: LegendItem[];\n chartData: SegmentChartItem[];\n total: number;\n isEmptyData: boolean;\n onPieClick?: (_: unknown, index: number) => void;\n onLegendClick?: (key: string) => void;\n hiddenKeys: Set<string>;\n onToggle: (key: string, checked: boolean) => void;\n}\n\nexport interface SegmentChartItem {\n name: string;\n value: number;\n percentage: number;\n fill: string;\n}\n","import { memo, useCallback, useMemo, useRef, useState } from 'react';\nimport CardContent from '@mui/material/CardContent';\nimport Slider from '@mui/material/Slider';\nimport Stack from '@mui/material/Stack';\nimport { ChartCardHeader } from 'components/Analytics/ChartStyles';\nimport { ChartCard } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\nimport useResponsive from 'hooks/useResponsive';\nimport { RankingItem } from 'types/partnerAnalysis';\nimport { MouseHandlerDataParam } from 'recharts/types/synchronisation/types';\n\nimport RankingChart from './Chart';\nimport RankingLegend from './Legend';\nimport { RankingProps, VisibleSeries } from './props';\n\nconst Ranking = memo(\n ({ data, config, average, onBarClick, children }: RankingProps & { children?: React.ReactNode }) => {\n const isMobile = useResponsive('down', 'sm');\n const isDownLg = useResponsive('down', 'lg');\n\n const [visibleSeries, setVisibleSeries] = useState<VisibleSeries>({\n bar: true,\n average: true,\n });\n const [visibleCount, setVisibleCount] = useState(12);\n const [activeBarIndex, setActiveBarIndex] = useState<number | null>(null);\n const [activeCoordX, setActiveCoordX] = useState<number | null>(null);\n const [containerWidth, setContainerWidth] = useState(0);\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const wrapperRefCallback = useCallback((node: HTMLDivElement | null) => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n if (node) {\n setContainerWidth(node.clientWidth);\n observerRef.current = new ResizeObserver(() =>\n setContainerWidth(node.clientWidth),\n );\n observerRef.current.observe(node);\n }\n }, []);\n\n const sortedData = useMemo(\n () =>\n [...data].sort(\n (a, b) => (b[config.dataKey] as number) - (a[config.dataKey] as number),\n ),\n [data, config.dataKey],\n );\n\n const totalItems = sortedData.length;\n\n const maxVisible = useMemo(() => {\n if (isMobile) return 10;\n if (isDownLg) return 25;\n return 30;\n }, [isMobile, isDownLg]);\n\n const showSlider = !isMobile && totalItems > 10;\n const sliderMax = Math.min(totalItems, maxVisible);\n\n const clampedCount = Math.min(\n isMobile ? totalItems : visibleCount,\n totalItems,\n maxVisible,\n );\n\n const displayData = useMemo(\n () => sortedData.slice(0, clampedCount),\n [sortedData, clampedCount],\n );\n\n const shouldRotateLabels = useMemo(() => {\n if (containerWidth === 0 || displayData.length === 0) return false;\n const slotPerBar = (containerWidth - 60) / displayData.length;\n return slotPerBar < 80;\n }, [containerWidth, displayData.length]);\n\n const handleToggleSerie = useCallback((serie: keyof VisibleSeries) => {\n setVisibleSeries(prev => ({ ...prev, [serie]: !prev[serie] }));\n }, []);\n\n const handleChartMouseMove = useCallback((state: MouseHandlerDataParam) => {\n if (state?.activeTooltipIndex != null) {\n setActiveBarIndex(Number(state.activeTooltipIndex));\n }\n if (state?.activeCoordinate?.x != null) {\n setActiveCoordX(state.activeCoordinate.x);\n }\n }, []);\n\n const handleChartMouseLeave = useCallback(() => {\n setActiveBarIndex(null);\n setActiveCoordX(null);\n }, []);\n\n const handleBarClick = useCallback(\n (item: RankingItem) => {\n if (!item) return;\n onBarClick?.(item);\n },\n [onBarClick],\n );\n\n const handleSliderChange = useCallback(\n (_: Event, val: number | number[]) => {\n setVisibleCount(val as number);\n },\n [],\n );\n\n return (\n <ChartCard>\n <ChartCardHeader\n title=\"Ranking de clientes\"\n action={children}\n />\n\n <CardContent>\n <Result isEmpty={displayData.length === 0} empty={<EmptyState />}>\n <Stack alignItems=\"center\" gap={1.5}>\n <Stack width=\"100%\" ref={wrapperRefCallback}>\n <RankingChart\n data={displayData}\n config={config}\n visibleSeries={visibleSeries}\n average={average}\n activeBarIndex={activeBarIndex}\n activeCoordX={activeCoordX}\n shouldRotateLabels={shouldRotateLabels}\n onMouseMove={handleChartMouseMove}\n onMouseLeave={handleChartMouseLeave}\n onBarClick={handleBarClick}\n />\n </Stack>\n\n <RankingLegend\n visibleSeries={visibleSeries}\n config={config}\n onToggleSerie={handleToggleSerie}\n />\n\n {showSlider && (\n <Slider\n size=\"small\"\n min={10}\n max={sliderMax}\n value={clampedCount}\n valueLabelDisplay=\"auto\"\n onChange={handleSliderChange}\n />\n )}\n </Stack>\n </Result>\n </CardContent>\n </ChartCard>\n );\n },\n);\n\nRanking.displayName = 'Ranking';\n\nexport default Ranking;\n","import { useCallback, useMemo } from 'react';\nimport {\n Bar,\n CartesianGrid,\n ComposedChart,\n ReferenceLine,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\nimport { BarRectangleItem } from 'recharts/types/cartesian/Bar';\n\nimport { ChartWrapper } from 'components/Analytics/ChartStyles';\nimport ReferenceCircle from 'components/Analytics/ReferenceCircle';\nimport RotatedTick from 'components/Analytics/RotatedTick';\nimport { RotatedTickProps } from 'components/Analytics/RotatedTick/props';\nimport WrappedTick from 'components/Analytics/WrappedTick';\nimport { RankingItem } from 'types/partnerAnalysis';\nimport { fShortenNumber } from 'utils/formatNumber';\n\nimport { AVERAGE_COLOR } from '../props';\n\nimport BarBackground from './BarBackground';\nimport { ChartProps } from './props';\nimport RankingTooltip from './Tooltip';\n\nconst BAR_SIZE = 48;\nconst BAR_SLOT = BAR_SIZE / 0.8;\n\nconst RankingChart = ({\n data,\n config,\n visibleSeries,\n average,\n activeBarIndex,\n activeCoordX,\n shouldRotateLabels,\n onMouseMove,\n onMouseLeave,\n onBarClick,\n}: ChartProps) => {\n const yDomain = useMemo((): [number, number] => {\n if (!data.length) return [0, 1];\n const values = data.map(item => (item[config.dataKey] as number) || 0);\n if (visibleSeries.average && average > 0) values.push(average);\n const max = Math.max(...values);\n return [0, max > 0 ? max * 1.15 : 1];\n }, [data, config.dataKey, average, visibleSeries.average]);\n\n const yTicks = useMemo(() => {\n const [, max] = yDomain;\n const step = max / 6;\n return [\n ...new Set(Array.from({ length: 7 }, (_, i) => Math.round(step * i))),\n ];\n }, [yDomain]);\n\n const barLabel = useMemo(\n () =>\n shouldRotateLabels\n ? false\n : {\n position: 'top' as const,\n fontSize: 11,\n fill: '#212B36',\n formatter: (value: unknown) => config.formatLabel(Number(value)),\n },\n [shouldRotateLabels, config],\n );\n\n const tooltipContent = useMemo(\n () => <RankingTooltip config={config} average={average} />,\n [config, average],\n );\n\n const renderXAxisTick = useCallback(\n (tickProps: Record<string, unknown>) => {\n if (shouldRotateLabels) {\n return <RotatedTick {...(tickProps as RotatedTickProps)} />;\n }\n return (\n <WrappedTick\n x={tickProps.x as number}\n y={tickProps.y as number}\n payload={tickProps.payload as { value: string }}\n slotWidth={BAR_SLOT}\n />\n );\n },\n [shouldRotateLabels],\n );\n\n const handleBarClick = useCallback(\n (entry: BarRectangleItem) => {\n if (!entry) return;\n onBarClick(entry as unknown as RankingItem);\n },\n [onBarClick],\n );\n\n return (\n <ChartWrapper>\n <ResponsiveContainer width=\"100%\" height={350}>\n <ComposedChart\n data={data}\n margin={{ top: 20, right: 10, bottom: 0, left: 20 }}\n barCategoryGap=\"20%\"\n onMouseMove={onMouseMove}\n onMouseLeave={onMouseLeave}\n >\n <CartesianGrid\n vertical={false}\n strokeDasharray=\"3 3\"\n stroke=\"#F4F6F8\"\n />\n\n <XAxis\n dataKey=\"partner_name\"\n axisLine={false}\n tickLine={false}\n interval={0}\n height={shouldRotateLabels ? 70 : 50}\n tick={renderXAxisTick}\n />\n\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: '#637381' }}\n tickFormatter={(v: number) => fShortenNumber(v)}\n domain={yDomain}\n ticks={yTicks}\n />\n\n <Tooltip content={tooltipContent} />\n\n {visibleSeries.average && average > 0 && (\n <ReferenceLine\n y={average}\n stroke={AVERAGE_COLOR}\n strokeDasharray=\"8 4\"\n strokeWidth={2}\n ifOverflow=\"extendDomain\"\n />\n )}\n\n {visibleSeries.average && average > 0 && (\n <ReferenceLine\n y={average}\n stroke=\"none\"\n ifOverflow=\"extendDomain\"\n label={\n <ReferenceCircle\n activeCoordX={activeCoordX}\n referenceCircleColor={AVERAGE_COLOR}\n activeIndex={activeBarIndex}\n />\n }\n />\n )}\n\n {visibleSeries.bar && (\n <Bar\n dataKey={config.dataKey}\n name={config.barName}\n fill={config.color}\n maxBarSize={48}\n isAnimationActive={false}\n radius={[4, 4, 0, 0]}\n cursor=\"pointer\"\n onClick={handleBarClick}\n background={\n <BarBackground\n activeBarIndex={activeBarIndex}\n color={config.color}\n data={data}\n onBarClick={onBarClick}\n />\n }\n label={barLabel}\n />\n )}\n </ComposedChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n};\n\nexport default RankingChart;\n","import { RankingItem } from 'types/partnerAnalysis';\nimport { RankingType } from 'utils/partnerAnalysis';\nimport { fCurrencyBRL, fShortenNumber } from 'utils/formatNumber';\n\nexport const AVERAGE_COLOR = '#212B36';\n\nexport interface RankingTypeConfig {\n label: string;\n color: string;\n dataKey: keyof RankingItem;\n barName: string;\n averageName: string;\n averageDataKey: string;\n formatLabel: (value: number) => string;\n formatYAxis: (value: number) => string;\n floorAverage?: boolean;\n}\n\nexport interface VisibleSeries {\n bar: boolean;\n average: boolean;\n}\n\nexport interface LegendProps {\n visibleSeries: VisibleSeries;\n config: RankingTypeConfig;\n onToggleSerie: (serie: keyof VisibleSeries) => void;\n}\n\nexport interface RankingProps {\n data: RankingItem[];\n config: RankingTypeConfig;\n average: number;\n isFetching?: boolean;\n onBarClick?: (item: RankingItem) => void;\n}\n\nexport const RANKING_CONFIG: Record<RankingType, RankingTypeConfig> = {\n [RankingType.SALE_TOTAL_VALUE]: {\n label: 'Por valor total',\n color: '#22C55E',\n dataKey: 'total_sale_value',\n barName: 'Valor total por cliente',\n averageName: 'Média total de valor por cliente',\n averageDataKey: 'average_total_value',\n formatLabel: fCurrencyBRL,\n formatYAxis: fShortenNumber,\n },\n [RankingType.SALE_COUNT]: {\n label: 'Por pedidos',\n color: '#C684FF',\n dataKey: 'total_value_by_customer',\n barName: 'Quantidade de pedidos',\n averageName: 'Quantidade total de pedidos',\n averageDataKey: 'average_sale_count',\n formatLabel: String,\n formatYAxis: fShortenNumber,\n floorAverage: true,\n },\n [RankingType.SALE_AVERAGE_VALUE]: {\n label: 'Por ticket médio',\n color: '#00B8D9',\n dataKey: 'total_sale_value',\n barName: 'Ticket médio por cliente',\n averageName: 'Média do ticket médio',\n averageDataKey: 'average_ticket',\n formatLabel: fCurrencyBRL,\n formatYAxis: fShortenNumber,\n },\n};\n","import { BarBackgroundProps } from './props';\n\nconst BarBackground = ({\n x = 0,\n y = 0,\n width = 0,\n height = 0,\n index = 0,\n activeBarIndex,\n color,\n data,\n onBarClick,\n}: BarBackgroundProps) => {\n if (activeBarIndex !== index) return null;\n\n return (\n <rect\n x={x - 6}\n y={y}\n width={width + 12}\n height={height + 6}\n fill={color}\n opacity={0.16}\n rx={6}\n style={{ cursor: 'pointer' }}\n onClick={() => onBarClick(data[index])}\n />\n );\n};\n\nexport default BarBackground;\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport SimpleCard from 'components/SimpleCard';\n\nimport { AVERAGE_COLOR } from '../props';\n\nimport { CustomTooltipProps } from './props';\n\nconst RankingTooltip = ({\n active,\n payload,\n label,\n config,\n average,\n}: CustomTooltipProps) => {\n if (!active || !payload?.length) return null;\n\n return (\n <SimpleCard minWidth={{ xs: 'auto', sm: 200 }} p={1} gap={1}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {label}\n </Typography>\n\n <Divider />\n\n <Stack>\n {payload.map((entry, index) => (\n <Stack\n key={entry.dataKey}\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n data-testid={`tooltip-item-${index}`}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={entry.color}\n />\n\n <Typography variant=\"body2\" noWrap>\n {config.barName}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\">\n {config.formatLabel(entry.value)}\n </Typography>\n </Stack>\n ))}\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={AVERAGE_COLOR}\n />\n\n <Typography variant=\"body2\" noWrap>\n {config.averageName}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\">{config.formatLabel(average)}</Typography>\n </Stack>\n </Stack>\n </SimpleCard>\n );\n};\n\nexport default RankingTooltip;\n","import Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Stack from '@mui/material/Stack';\n\nimport { AVERAGE_COLOR, LegendProps } from './props';\n\nconst RankingLegend = ({\n visibleSeries,\n config,\n onToggleSerie,\n}: LegendProps) => (\n <Stack direction=\"row\" justifyContent=\"center\" flexWrap=\"wrap\" gap={1}>\n <FormControlLabel\n control={\n <Checkbox\n checked={visibleSeries.bar}\n onChange={() => onToggleSerie('bar')}\n sx={{ '&.Mui-checked': { color: config.color } }}\n />\n }\n label={config.barName}\n />\n\n <FormControlLabel\n control={\n <Checkbox\n checked={visibleSeries.average}\n onChange={() => onToggleSerie('average')}\n sx={{ '&.Mui-checked': { color: AVERAGE_COLOR } }}\n />\n }\n label={config.averageName}\n />\n </Stack>\n);\n\nexport default RankingLegend;\n","import MuiButton from '@mui/material/Button';\nimport { styled } from '@mui/material/styles';\n\ninterface ItemButtonProps {\n active?: boolean;\n}\n\nexport const ItemButton = styled(MuiButton, {\n shouldForwardProp: prop => prop !== 'active',\n})<ItemButtonProps>(({ theme, active }) => ({\n justifyContent: 'flex-start',\n\n color: active ? theme.palette.primary.main : theme.palette.text.secondary,\n fontWeight: active ? 800 : 400,\n\n '&:hover': {\n background: theme.palette.action.hover,\n },\n}));\n","import { useCallback, useMemo, useRef, useState } from 'react';\nimport CardContent from '@mui/material/CardContent';\nimport Slider from '@mui/material/Slider';\nimport Stack from '@mui/material/Stack';\nimport { ChartCard, ChartCardHeader } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\nimport useResponsive from 'hooks/useResponsive';\nimport { MouseHandlerDataParam } from 'recharts/types/synchronisation/types';\n\nimport SellerPortfolioChart from './Chart';\nimport SellerPortfolioLegend from './Legend';\nimport { ChartDataRow, SellerPortfolioProps } from './props';\n\nconst SellerPortfolio = ({\n data,\n config,\n onBarClick,\n children,\n}: SellerPortfolioProps) => {\n const isMobile = useResponsive('down', 'sm');\n const isDownLg = useResponsive('down', 'lg');\n\n const [hiddenKeys, setHiddenKeys] = useState<Set<string>>(new Set());\n const [visibleCount, setVisibleCount] = useState(12);\n const [activeBarIndex, setActiveBarIndex] = useState<number | null>(null);\n const [containerWidth, setContainerWidth] = useState(0);\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const sortedData = useMemo(\n () => [...data].sort((a, b) => b._total - a._total),\n [data],\n );\n\n const maxVisible = useMemo(() => {\n if (isMobile) return 10;\n if (isDownLg) return 25;\n return 30;\n }, [isDownLg, isMobile]);\n\n const totalItems = sortedData.length;\n const showSlider = !isMobile && totalItems > 10;\n const sliderMax = Math.min(totalItems, maxVisible);\n\n const clampedCount = Math.min(\n isMobile ? totalItems : visibleCount,\n totalItems,\n maxVisible,\n );\n\n const displayData = useMemo(\n () => sortedData.slice(0, clampedCount),\n [sortedData, clampedCount],\n );\n\n const shouldRotateLabels = useMemo(() => {\n if (containerWidth === 0 || displayData.length === 0) return false;\n const slotPerBar = (containerWidth - 60) / displayData.length;\n return slotPerBar < 80;\n }, [containerWidth, displayData.length]);\n\n const visibleSeries = useMemo(\n () => config.series.filter(s => !hiddenKeys.has(s.dataKey)),\n [config.series, hiddenKeys],\n );\n\n const displayDataWithTotals = useMemo(\n () =>\n displayData.map(item => ({\n ...item,\n _visibleTotal: visibleSeries.reduce(\n (sum, s) => sum + (Number(item[s.dataKey]) || 0),\n 0,\n ),\n })),\n [displayData, visibleSeries],\n );\n\n const wrapperRefCallback = useCallback((node: HTMLDivElement | null) => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n if (node) {\n setContainerWidth(node.clientWidth);\n observerRef.current = new ResizeObserver(() =>\n setContainerWidth(node.clientWidth),\n );\n observerRef.current.observe(node);\n }\n }, []);\n\n const handleToggleSerie = useCallback((dataKey: string) => {\n setHiddenKeys(prev => {\n const next = new Set(prev);\n if (next.has(dataKey)) next.delete(dataKey);\n else next.add(dataKey);\n return next;\n });\n }, []);\n\n const handleMouseMove = useCallback((state: MouseHandlerDataParam) => {\n if (state?.activeTooltipIndex != null) {\n setActiveBarIndex(Number(state.activeTooltipIndex));\n }\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setActiveBarIndex(null);\n }, []);\n\n const handleBarClick = useCallback(\n (sellerId: string, sellerName: string) => {\n onBarClick?.(sellerId, sellerName);\n },\n [onBarClick],\n );\n\n const handleSliderChange = useCallback(\n (_: Event, val: number | number[]) => {\n setVisibleCount(val as number);\n },\n [],\n );\n\n return (\n <ChartCard>\n <ChartCardHeader\n title=\"Carteira de clientes do vendedor\"\n action={children}\n />\n\n <CardContent>\n <Result isEmpty={displayData.length === 0} empty={<EmptyState />}>\n <Stack alignItems=\"center\" gap={1.5}>\n <Stack width=\"100%\" ref={wrapperRefCallback}>\n <SellerPortfolioChart\n data={displayDataWithTotals}\n config={config}\n visibleSeries={visibleSeries}\n hiddenKeys={hiddenKeys}\n activeBarIndex={activeBarIndex}\n shouldRotateLabels={shouldRotateLabels}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n onBarClick={handleBarClick}\n />\n </Stack>\n\n <SellerPortfolioLegend\n series={config.series}\n hiddenKeys={hiddenKeys}\n onToggleSerie={handleToggleSerie}\n />\n\n {showSlider && (\n <Slider\n size=\"small\"\n min={10}\n max={sliderMax}\n value={clampedCount}\n valueLabelDisplay=\"auto\"\n onChange={handleSliderChange}\n />\n )}\n </Stack>\n </Result>\n </CardContent>\n </ChartCard>\n );\n};\n\nexport default SellerPortfolio;\n","import { type ReactElement, useCallback, useMemo } from 'react';\nimport {\n Bar,\n BarChart,\n CartesianGrid,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\nimport { BarRectangleItem } from 'recharts/types/cartesian/Bar';\n\nimport { ChartWrapper } from 'components/Analytics/ChartStyles';\nimport RotatedTick from 'components/Analytics/RotatedTick';\nimport { RotatedTickProps } from 'components/Analytics/RotatedTick/props';\nimport WrappedTick from 'components/Analytics/WrappedTick';\nimport { fShortenNumber } from 'utils/formatNumber';\n\nimport BarBackground from './BarBackground';\nimport { ChartProps } from './props';\nimport StackedTooltip from './Tooltip';\n\nconst BAR_SIZE = 48;\nconst BAR_SLOT = BAR_SIZE / 0.8;\n\nconst SellerPortfolioChart = ({\n data,\n config,\n visibleSeries,\n hiddenKeys,\n activeBarIndex,\n shouldRotateLabels,\n onMouseMove,\n onMouseLeave,\n onBarClick,\n}: ChartProps) => {\n const yDomain = useMemo((): [number, number] => {\n if (!data.length) return [0, 1];\n const max = Math.max(...data.map(item => item._visibleTotal));\n return [0, max > 0 ? max * 1.15 : 1];\n }, [data]);\n\n const yTicks = useMemo(() => {\n const [, max] = yDomain;\n const step = max / 6;\n return [\n ...new Set(Array.from({ length: 7 }, (_, i) => Math.round(step * i))),\n ];\n }, [yDomain]);\n\n const tooltipContent = useMemo(\n () => <StackedTooltip config={config} />,\n [config],\n );\n\n const renderXAxisTick = useCallback(\n (tickProps: Record<string, unknown>) => {\n if (shouldRotateLabels) {\n return <RotatedTick {...(tickProps as RotatedTickProps)} />;\n }\n return (\n <WrappedTick\n x={tickProps.x as number}\n y={tickProps.y as number}\n payload={tickProps.payload as { value: string }}\n slotWidth={BAR_SLOT}\n />\n );\n },\n [shouldRotateLabels],\n );\n\n const handleBarClick = useCallback(\n (entry: BarRectangleItem) => {\n if (!entry) return;\n const row = entry.payload as Record<string, unknown> | undefined;\n if (!row) return;\n onBarClick(String(row.seller_external_id), String(row.seller_name));\n },\n [onBarClick],\n );\n\n const renderLabel = useCallback(\n (props: Record<string, unknown>) => {\n const { x, y, width, index } = props as {\n x: number;\n y: number;\n width: number;\n index: number;\n };\n const total = data[index]?._visibleTotal;\n if (!total) return <></>;\n return (\n <text\n x={(x as number) + (width as number) / 2}\n y={(y as number) - 6}\n textAnchor=\"middle\"\n fontSize={11}\n fill=\"#212B36\"\n >\n {total}\n </text>\n );\n },\n [data],\n );\n\n return (\n <ChartWrapper>\n <ResponsiveContainer width=\"100%\" height={350}>\n <BarChart\n data={data}\n margin={{ top: 20, right: 10, bottom: 0, left: 20 }}\n barCategoryGap=\"20%\"\n onMouseMove={onMouseMove}\n onMouseLeave={onMouseLeave}\n >\n <CartesianGrid\n vertical={false}\n strokeDasharray=\"3 3\"\n stroke=\"#F4F6F8\"\n />\n\n <XAxis\n dataKey=\"seller_name\"\n axisLine={false}\n tickLine={false}\n interval={0}\n height={shouldRotateLabels ? 70 : 50}\n tick={renderXAxisTick}\n />\n\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: '#637381' }}\n tickFormatter={(v: number) => fShortenNumber(v)}\n domain={yDomain}\n ticks={yTicks}\n />\n\n <Tooltip content={tooltipContent} cursor={false} />\n\n {config.series.map(s => {\n const visible = !hiddenKeys.has(s.dataKey);\n const firstVisible = visibleSeries[0];\n const lastVisible = visibleSeries[visibleSeries.length - 1];\n const isFirst = visible && s.dataKey === firstVisible?.dataKey;\n const isLast = visible && s.dataKey === lastVisible?.dataKey;\n\n return (\n <Bar\n key={s.dataKey}\n dataKey={visible ? s.dataKey : `_hidden_${s.dataKey}`}\n name={s.name}\n fill={s.color}\n stackId=\"stack\"\n maxBarSize={48}\n isAnimationActive={false}\n cursor=\"pointer\"\n hide={!visible}\n onClick={handleBarClick}\n {...(isFirst && {\n background: (\n <BarBackground\n activeBarIndex={activeBarIndex}\n data={data}\n onBarClick={onBarClick}\n />\n ),\n })}\n {...(isLast && { radius: [4, 4, 0, 0] as [number, number, number, number] })}\n {...(isLast &&\n !shouldRotateLabels && {\n label: {\n position: 'top' as const,\n fontSize: 11,\n fill: '#212B36',\n content: renderLabel as unknown as ReactElement,\n },\n })}\n />\n );\n })}\n </BarChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n};\n\nexport default SellerPortfolioChart;\n","import { BarBackgroundProps } from './props';\n\nconst BarBackground = ({\n x = 0,\n y = 0,\n width = 0,\n height = 0,\n index = 0,\n activeBarIndex,\n data,\n onBarClick,\n}: BarBackgroundProps) => {\n if (activeBarIndex !== index) return null;\n\n const entry = data[index];\n\n return (\n <rect\n x={x - 6}\n y={y}\n width={width + 12}\n height={height + 6}\n fill=\"#919EAB\"\n opacity={0.16}\n rx={6}\n style={{ cursor: 'pointer' }}\n onClick={() => {\n if (!entry) return;\n onBarClick(\n String(entry.seller_external_id),\n String(entry.seller_name),\n );\n }}\n />\n );\n};\n\nexport default BarBackground;\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport SimpleCard from 'components/SimpleCard';\nimport { fPercent } from 'utils/formatNumber';\n\nimport { StackedTooltipProps, TooltipPayloadEntry } from './props';\n\nconst formatPct = (value: number) =>\n fPercent(value, {\n maximumFractionDigits: 2,\n ...(value > 0 && value < 100 ? { minimumFractionDigits: 2 } : {}),\n });\n\nconst StackedTooltip = ({\n active,\n payload,\n label,\n config,\n}: StackedTooltipProps) => {\n if (!active || !payload?.length) return null;\n\n const visibleEntries = payload.filter(\n entry => entry.value != null && entry.value > 0,\n );\n\n const total = visibleEntries.reduce(\n (sum: number, entry: TooltipPayloadEntry) => sum + entry.value,\n 0,\n );\n\n return (\n <SimpleCard minWidth={{ xs: 'auto', sm: 200 }} p={1} gap={1}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {label}\n </Typography>\n\n <Divider />\n\n <Stack>\n {visibleEntries.map((entry: TooltipPayloadEntry) => {\n const series = config.series.find(s => s.dataKey === entry.dataKey);\n const pct = total > 0 ? formatPct((entry.value / total) * 100) : '0%';\n\n return (\n <Stack\n key={entry.dataKey}\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={entry.color}\n />\n\n <Typography variant=\"body2\" noWrap>\n {series?.name ?? entry.dataKey}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {pct} ({entry.value})\n </Typography>\n </Stack>\n );\n })}\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack width={6} height={6} borderRadius=\"50%\" bgcolor=\"#919EAB\" />\n\n <Typography variant=\"body2\" noWrap>\n Total\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {formatPct(100)} ({total})\n </Typography>\n </Stack>\n </Stack>\n </SimpleCard>\n );\n};\n\nexport default StackedTooltip;\n","import Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Stack from '@mui/material/Stack';\n\nimport { LegendProps } from './props';\n\nconst SellerPortfolioLegend = ({\n series,\n hiddenKeys,\n onToggleSerie,\n}: LegendProps) => (\n <Stack direction=\"row\" justifyContent=\"center\" flexWrap=\"wrap\" gap={1}>\n {series.map(s => (\n <FormControlLabel\n key={s.dataKey}\n control={\n <Checkbox\n checked={!hiddenKeys.has(s.dataKey)}\n onChange={() => onToggleSerie(s.dataKey)}\n sx={{ '&.Mui-checked': { color: s.color } }}\n />\n }\n label={s.name}\n />\n ))}\n </Stack>\n);\n\nexport default SellerPortfolioLegend;\n","import { AbcCurve, SellerPortfolioQueryType, Status } from 'utils/partnerAnalysis';\nimport { fShortenNumber } from 'utils/formatNumber';\n\nexport interface StackedBarSeries {\n dataKey: string;\n name: string;\n color: string;\n}\n\nexport interface SellerPortfolioTypeConfig {\n label: string;\n series: StackedBarSeries[];\n formatYAxis: (value: number) => string;\n}\n\nexport interface ChartDataRow extends Record<string, string | number> {\n seller_name: string;\n seller_external_id: string;\n _total: number;\n}\n\nexport interface DisplayDataRow extends ChartDataRow {\n _visibleTotal: number;\n}\n\nexport interface SelectedSeller {\n id: string;\n name: string;\n}\n\nexport interface LegendProps {\n series: StackedBarSeries[];\n hiddenKeys: Set<string>;\n onToggleSerie: (dataKey: string) => void;\n}\n\nexport interface SellerPortfolioProps {\n data: ChartDataRow[];\n config: SellerPortfolioTypeConfig;\n onBarClick?: (sellerId: string, sellerName: string) => void;\n children?: React.ReactNode;\n}\n\nconst CLASSIFICATION_SERIES: StackedBarSeries[] = [\n { dataKey: Status.ACTIVE, name: 'Ativos', color: '#22C55E' },\n { dataKey: Status.AT_RISK, name: 'Em risco', color: '#FFAB00' },\n { dataKey: Status.INACTIVE, name: 'Inativos', color: '#FF5630' },\n { dataKey: Status.NEW_CLIENT, name: 'Novos clientes', color: '#8E33FF' },\n { dataKey: Status.PROSPECT, name: 'Prospects', color: '#00B8D9' },\n { dataKey: Status.LOST, name: 'Perdidos', color: '#C4CDD5' },\n];\n\nconst ABC_CURVE_SERIES: StackedBarSeries[] = [\n { dataKey: AbcCurve.A, name: 'Curva A', color: '#22C55E' },\n { dataKey: AbcCurve.B, name: 'Curva B', color: '#FFAB00' },\n { dataKey: AbcCurve.C, name: 'Curva C', color: '#FF5630' },\n];\n\nexport const SELLER_PORTFOLIO_CONFIG: Record<\n SellerPortfolioQueryType,\n SellerPortfolioTypeConfig\n> = {\n [SellerPortfolioQueryType.CLASSIFICATION]: {\n label: 'Por classificação',\n series: CLASSIFICATION_SERIES,\n formatYAxis: fShortenNumber,\n },\n [SellerPortfolioQueryType.ABC_CURVE]: {\n label: 'Por curva ABC',\n series: ABC_CURVE_SERIES,\n formatYAxis: fShortenNumber,\n },\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/Analytics/PartnerAnalysis/PartnerBreakdown/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnerBreakdown/Chart/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnerBreakdown/Chart/styles.ts","../../../../src/components/Analytics/PartnerAnalysis/PartnerBreakdown/Chart/Tooltip.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnerBreakdown/Legend.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/Chart/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/Chart/PieLabel.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/Chart/styles.ts","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/Chart/Tooltip.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/Legend.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersByProfile/props.ts","../../../../src/components/Analytics/PartnerAnalysis/PartnersDetail/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/PartnersDetail/Header.tsx","../../../../src/components/Analytics/PartnerAnalysis/ProfileDetail/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/ProfileDetail/Header.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/Chart/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/props.ts","../../../../src/components/Analytics/PartnerAnalysis/Ranking/Chart/BarBackground.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/Chart/Tooltip.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/Legend.tsx","../../../../src/components/Analytics/PartnerAnalysis/Ranking/styles.ts","../../../../src/components/Analytics/PartnerAnalysis/RankingDetail/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/RankingDetail/Header.tsx","../../../../src/components/Analytics/PartnerAnalysis/RankingDetail/styles.ts","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/Chart/index.tsx","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/Chart/BarBackground.tsx","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/Chart/Tooltip.tsx","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/Legend.tsx","../../../../src/components/Analytics/PartnerAnalysis/SellerPortfolio/props.ts"],"names":["CardContent","CardHeader","Stack","Pie","PieChart","ResponsiveContainer","Tooltip","styled","ChartContainer","theme","Divider","Typography","jsx","jsxs","formatPercentage","value","fPercent","PieChartTooltip","active","payload","total","entry","SimpleCard_default","Tooltip_default","PieChartBreakdown","chartData","isEmptyData","onPieClick","clickable","fNumber","Chart_default","Checkbox","FormControlLabel","PieChartLegend","items","hiddenKeys","onToggle","onItemClick","item","e","_","checked","fShortenNumber","Legend_default","PartnerBreakdown","title","legendItems","ChartCard","PartnerBreakdown_default","RADIAN","LABEL_OFFSET","MIN_PERCENTAGE","PieLabel","props","cx","cy","midAngle","outerRadius","percentage","cxNum","cyNum","outerR","angle","sin","cos","x1","y1","xMid","yMid","side","xEnd","yEnd","label","badgeW","badgeX","PieLabel_default","ProfileTooltip","renderLabel","ProfileChart","ProfileLegend","Scrollbar_default","PartnersByProfile","data","onLegendClick","Result_default","EmptyState_default","PartnersByProfile_default","SEGMENT_COLORS","MAX_VISIBLE","Link","Header","Header_default","Fragment","PartnersDetail","open","onClose","columns","rows","totalPartners","isLoading","isFetching","isFetchingNextPage","onSearch","onRowsScrollEnd","sellerName","buildSellerLink","sellerExternalId","mobileRender","isMobile","useResponsive_default","content","SearchInput_default","DataView_default","row","header","Drawer_default","Modal_default","PartnersDetail_default","profileName","ProfileDetail","ProfileDetail_default","memo","useCallback","useMemo","useRef","useState","Slider","Bar","CartesianGrid","ComposedChart","ReferenceLine","XAxis","YAxis","AVERAGE_COLOR","RANKING_CONFIG","fCurrencyBRL","BarBackground","x","y","width","height","index","activeBarIndex","color","onBarClick","BarBackground_default","RankingTooltip","config","average","BAR_SIZE","BAR_SLOT","RankingChart","visibleSeries","activeCoordX","shouldRotateLabels","onMouseMove","onMouseLeave","yDomain","values","max","yTicks","step","i","barLabel","tooltipContent","renderXAxisTick","tickProps","RotatedTick_default","WrappedTick_default","handleBarClick","ChartWrapper","v","ReferenceCircle_default","RankingLegend","onToggleSerie","Ranking","children","isDownLg","setVisibleSeries","visibleCount","setVisibleCount","setActiveBarIndex","setActiveCoordX","containerWidth","setContainerWidth","observerRef","wrapperRefCallback","node","sortedData","a","b","totalItems","maxVisible","showSlider","sliderMax","clampedCount","displayData","handleToggleSerie","serie","prev","handleChartMouseMove","state","handleChartMouseLeave","handleSliderChange","val","ChartCardHeader","Ranking_default","MuiButton","ItemButton","prop","rankingLabel","partnerName","MuiDivider","alpha","StyledDivider","MobileItemContainer","getOrderId","order","getPartnerName","buildPartnerLink","getOrderValue","getOrderDate","fDate","getOrderStatus","getDefaultMobileRender","RankingDetail","totalValue","averageTicket","page","perPage","onPaginationChange","mobileItemSlot","RankingDetail_default","BarChart","formatPct","StackedTooltip","visibleEntries","sum","series","s","pct","SellerPortfolioChart","visible","firstVisible","lastVisible","isFirst","isLast","SellerPortfolioLegend","SellerPortfolio","setHiddenKeys","displayDataWithTotals","dataKey","next","handleMouseMove","handleMouseLeave","sellerId","SellerPortfolio_default","CLASSIFICATION_SERIES","ABC_CURVE_SERIES","SELLER_PORTFOLIO_CONFIG"],"mappings":"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","sourcesContent":["import CardContent from '@mui/material/CardContent';\nimport CardHeader from '@mui/material/CardHeader';\nimport Stack from '@mui/material/Stack';\nimport { ChartCard } from 'components/Analytics/ChartStyles';\n\nimport PieChartBreakdown from './Chart';\nimport PieChartLegend from './Legend';\nimport { PartnerBreakdownProps } from './props';\n\nconst PartnerBreakdown = ({\n title,\n chartData,\n total,\n isEmptyData,\n legendItems,\n hiddenKeys,\n onToggle,\n onPieClick,\n onItemClick,\n}: PartnerBreakdownProps) => (\n <ChartCard>\n <CardHeader title={title} />\n\n <CardContent>\n <Stack\n direction={{ xs: 'column', sm: 'row' }}\n alignItems=\"center\"\n gap={1.5}\n minWidth={0}\n >\n <PieChartBreakdown\n chartData={chartData}\n total={total}\n isEmptyData={isEmptyData}\n onPieClick={onPieClick}\n clickable={!!onPieClick}\n />\n\n <PieChartLegend\n items={legendItems}\n hiddenKeys={hiddenKeys}\n onToggle={onToggle}\n onItemClick={onItemClick}\n />\n </Stack>\n </CardContent>\n </ChartCard>\n);\n\nexport default PartnerBreakdown;\n","import { fNumber } from 'utils/formatNumber';\nimport { Pie, PieChart, ResponsiveContainer, Tooltip } from 'recharts';\n\nimport { ChartProps } from '../props';\n\nimport { ChartContainer } from './styles';\nimport PieChartTooltip from './Tooltip';\n\nconst PieChartBreakdown = ({\n chartData,\n total,\n isEmptyData,\n onPieClick,\n clickable,\n}: ChartProps) => (\n <ChartContainer>\n <ResponsiveContainer width={200} height={200}>\n <PieChart>\n <Pie\n data={chartData}\n dataKey=\"value\"\n nameKey=\"name\"\n cx=\"50%\"\n cy=\"50%\"\n innerRadius={60}\n outerRadius={90}\n paddingAngle={2}\n strokeWidth={0}\n isAnimationActive={false}\n onClick={onPieClick}\n cursor={clickable ? 'pointer' : undefined}\n />\n\n <text\n x=\"50%\"\n y=\"46%\"\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n style={{ fontSize: 24, fontWeight: 700 }}\n >\n {fNumber(total)}\n </text>\n\n <text\n x=\"50%\"\n y=\"58%\"\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n style={{ fontSize: 12, fill: '#919EAB' }}\n >\n clientes\n </text>\n\n {!isEmptyData && (\n <Tooltip content={<PieChartTooltip total={total} />} />\n )}\n </PieChart>\n </ResponsiveContainer>\n </ChartContainer>\n);\n\nexport default PieChartBreakdown;\n","import Stack from '@mui/material/Stack';\nimport { styled } from '@mui/material/styles';\n\nexport const ChartContainer = styled(Stack)(({ theme }) => ({\n position: 'relative',\n alignSelf: 'flex-start',\n\n flexShrink: 0,\n\n '& .recharts-wrapper, & .recharts-wrapper *': {\n outline: 'none !important',\n boxShadow: 'none !important',\n },\n\n '& .recharts-pie-sector': {\n cursor: 'pointer',\n },\n\n [theme.breakpoints.down('md')]: {\n alignSelf: 'center',\n },\n}));\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport SimpleCard from 'components/SimpleCard';\nimport { fPercent } from 'utils/formatNumber';\n\nimport { CustomTooltipProps } from '../props';\n\nconst formatPercentage = (value: number) =>\n fPercent(value, {\n maximumFractionDigits: 2,\n ...(value > 0 && value < 100 ? { minimumFractionDigits: 2 } : {}),\n });\n\nconst PieChartTooltip = ({ active, payload, total }: CustomTooltipProps) => {\n if (!active || !payload?.length) return null;\n\n const entry = payload[0];\n\n return (\n <SimpleCard minWidth={{ xs: 'auto', sm: 200 }} p={1} gap={1}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {entry.name}\n </Typography>\n\n <Divider />\n\n <Stack>\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={entry.payload.fill}\n />\n\n <Typography variant=\"body2\" noWrap>\n {entry.name}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {formatPercentage(entry.payload.percentage)} ({entry.value})\n </Typography>\n </Stack>\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack width={6} height={6} borderRadius=\"50%\" bgcolor=\"#919EAB\" />\n\n <Typography variant=\"body2\" noWrap>\n Total\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {formatPercentage(100)} ({total})\n </Typography>\n </Stack>\n </Stack>\n </SimpleCard>\n );\n};\n\nexport default PieChartTooltip;\n","import Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport { fPercent, fShortenNumber } from 'utils/formatNumber';\n\nimport { LegendProps } from './props';\n\nconst PieChartLegend = ({\n items,\n hiddenKeys,\n onToggle,\n onItemClick,\n}: LegendProps) => (\n <Stack width=\"100%\" justifyContent=\"center\">\n {items.map(item => (\n <Stack\n key={item.key}\n display=\"grid\"\n gridTemplateColumns=\"1fr auto auto\"\n alignItems=\"center\"\n gap={1.5}\n onClick={() => onItemClick?.(item.key, item.label)}\n sx={{\n ...(onItemClick ? { cursor: 'pointer' } : {}),\n }}\n >\n <FormControlLabel\n label={item.label}\n onClick={e => e.stopPropagation()}\n control={\n <Checkbox\n size=\"small\"\n checked={!hiddenKeys.has(item.key)}\n onChange={(_, checked) => onToggle(item.key, checked)}\n sx={{ '&.Mui-checked': { color: item.color } }}\n />\n }\n sx={{\n '& .MuiFormControlLabel-label': {\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n },\n }}\n />\n\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n textAlign=\"right\"\n noWrap\n >\n {fPercent(item.percentage, {\n maximumFractionDigits: 2,\n ...(item.percentage > 0 && item.percentage < 100\n ? { minimumFractionDigits: 2 }\n : {}),\n })}\n </Typography>\n\n <Typography\n variant=\"subtitle2\"\n color=\"text.primary\"\n textAlign=\"right\"\n noWrap\n >\n {fShortenNumber(item.count)}\n </Typography>\n </Stack>\n ))}\n </Stack>\n);\n\nexport default PieChartLegend;\n","import CardContent from '@mui/material/CardContent';\nimport CardHeader from '@mui/material/CardHeader';\nimport Stack from '@mui/material/Stack';\nimport { ChartCard } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\n\nimport ProfileChart from './Chart';\nimport ProfileLegend from './Legend';\nimport { PartnersByProfileProps } from './props';\n\nconst PartnersByProfile = ({\n data,\n chartData,\n total,\n isEmptyData,\n onPieClick,\n onLegendClick,\n hiddenKeys,\n onToggle,\n}: PartnersByProfileProps) => (\n <ChartCard>\n <CardHeader title=\"Clientes por segmentos\" />\n\n <CardContent>\n <Result isEmpty={data.length === 0} empty={<EmptyState />}>\n <Stack alignItems=\"center\" gap={2}>\n <ProfileChart\n chartData={chartData}\n total={total}\n isEmptyData={isEmptyData}\n onPieClick={onPieClick}\n />\n\n <ProfileLegend\n items={data}\n hiddenKeys={hiddenKeys}\n onToggle={onToggle}\n onItemClick={onLegendClick}\n />\n </Stack>\n </Result>\n </CardContent>\n </ChartCard>\n);\n\nexport default PartnersByProfile;\n","import { PieLabelRenderProps } from 'recharts';\nimport { Pie, PieChart, ResponsiveContainer, Tooltip } from 'recharts';\n\nimport PieLabel from './PieLabel';\nimport { ChartProps } from './props';\nimport { ChartContainer } from './styles';\nimport ProfileTooltip from './Tooltip';\n\nconst renderLabel = (props: PieLabelRenderProps) => <PieLabel {...props} />;\n\nconst ProfileChart = ({\n chartData,\n total,\n isEmptyData,\n onPieClick,\n}: ChartProps) => (\n <ChartContainer>\n <ResponsiveContainer width={280} height={280}>\n <PieChart>\n <Pie\n data={chartData}\n dataKey=\"value\"\n nameKey=\"name\"\n cx=\"50%\"\n cy=\"50%\"\n outerRadius={90}\n paddingAngle={1}\n strokeWidth={0}\n isAnimationActive={false}\n label={isEmptyData ? false : renderLabel}\n labelLine={false}\n onClick={onPieClick}\n cursor={onPieClick ? 'pointer' : undefined}\n />\n\n {!isEmptyData && (\n <Tooltip content={<ProfileTooltip total={total} />} />\n )}\n </PieChart>\n </ResponsiveContainer>\n </ChartContainer>\n);\n\nexport default ProfileChart;\n","import { PieLabelRenderProps } from 'recharts';\nimport { fPercent } from 'utils/formatNumber';\n\nconst RADIAN = Math.PI / 180;\nconst LABEL_OFFSET = 22;\nconst MIN_PERCENTAGE = 2;\n\nconst PieLabel = (props: PieLabelRenderProps) => {\n const { cx, cy, midAngle, outerRadius, percentage } =\n props as PieLabelRenderProps & { percentage: number };\n\n if (percentage < MIN_PERCENTAGE) return null;\n\n const cxNum = Number(cx);\n const cyNum = Number(cy);\n const outerR = Number(outerRadius);\n const angle = Number(midAngle);\n\n if (isNaN(cxNum) || isNaN(cyNum) || isNaN(outerR)) return null;\n\n const sin = Math.sin(-angle * RADIAN);\n const cos = Math.cos(-angle * RADIAN);\n\n const x1 = cxNum + outerR * cos;\n const y1 = cyNum + outerR * sin;\n\n const xMid = cxNum + (outerR + LABEL_OFFSET * 0.5) * cos;\n const yMid = cyNum + (outerR + LABEL_OFFSET * 0.5) * sin;\n\n const side = cos >= 0 ? 1 : -1;\n const xEnd = xMid + side * 10;\n const yEnd = yMid;\n\n const label = fPercent(percentage, {\n maximumFractionDigits: 1,\n ...(percentage > 0 && percentage < 100 ? { minimumFractionDigits: 1 } : {}),\n });\n\n const badgeW = label.length * 7 + 10;\n const badgeX = side === 1 ? xEnd + 2 : xEnd - badgeW - 2;\n\n return (\n <g>\n <path\n d={`M${x1},${y1} L${xMid},${yMid} L${xEnd},${yEnd}`}\n stroke=\"#637381\"\n fill=\"none\"\n strokeWidth={1}\n />\n\n <rect\n x={badgeX}\n y={yEnd - 10}\n width={badgeW}\n height={20}\n rx={4}\n fill=\"#212B36\"\n />\n\n <text\n x={badgeX + badgeW / 2}\n y={yEnd}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fontSize={11}\n fontWeight={600}\n fill=\"#FFFFFF\"\n >\n {label}\n </text>\n </g>\n );\n};\n\nexport default PieLabel;\n","import Stack from '@mui/material/Stack';\nimport { styled } from '@mui/material/styles';\n\nexport const ChartContainer = styled(Stack)({\n position: 'relative',\n alignItems: 'center',\n justifyContent: 'center',\n\n '& .recharts-wrapper, & .recharts-wrapper *': {\n outline: 'none !important',\n boxShadow: 'none !important',\n },\n\n '& .recharts-wrapper': {\n overflow: 'visible !important',\n },\n\n '& .recharts-wrapper svg': {\n overflow: 'visible',\n },\n\n '& .recharts-pie-sector': {\n cursor: 'pointer',\n },\n});\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport SimpleCard from 'components/SimpleCard';\nimport { fPercent } from 'utils/formatNumber';\n\nimport { CustomTooltipProps } from './props';\n\nconst formatPercentage = (value: number) =>\n fPercent(value, {\n maximumFractionDigits: 2,\n ...(value > 0 && value < 100 ? { minimumFractionDigits: 2 } : {}),\n });\n\nconst ProfileTooltip = ({ active, payload, total }: CustomTooltipProps) => {\n if (!active || !payload?.length) return null;\n\n const entry = payload[0];\n\n return (\n <SimpleCard minWidth={{ xs: 'auto', sm: 200 }} p={1} gap={1}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {entry.name}\n </Typography>\n\n <Divider />\n\n <Stack>\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={entry.payload.fill}\n />\n\n <Typography variant=\"body2\" noWrap>\n {entry.name}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {formatPercentage(entry.payload.percentage)} ({entry.value})\n </Typography>\n </Stack>\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack width={6} height={6} borderRadius=\"50%\" bgcolor=\"#919EAB\" />\n\n <Typography variant=\"body2\" noWrap>\n Total\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {formatPercentage(100)} ({total})\n </Typography>\n </Stack>\n </Stack>\n </SimpleCard>\n );\n};\n\nexport default ProfileTooltip;\n","import Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport Scrollbar from 'components/Scrollbar';\nimport { fPercent, fShortenNumber } from 'utils/formatNumber';\n\nimport { LegendProps } from './props';\n\nconst formatPercentage = (value: number) =>\n fPercent(value, {\n maximumFractionDigits: 2,\n ...(value > 0 && value < 100 ? { minimumFractionDigits: 2 } : {}),\n });\n\nconst ProfileLegend = ({\n items,\n hiddenKeys,\n onToggle,\n onItemClick,\n}: LegendProps) => (\n <Scrollbar sx={{ maxHeight: 280, width: '100%', pl: 0.5 }}>\n {items.map(item => (\n <Stack\n key={item.key}\n display=\"grid\"\n gridTemplateColumns=\"1fr auto auto\"\n alignItems=\"center\"\n gap={1.5}\n onClick={() => onItemClick?.(item.key)}\n sx={onItemClick ? { cursor: 'pointer' } : undefined}\n >\n <FormControlLabel\n label={item.label}\n onClick={e => e.stopPropagation()}\n control={\n <Checkbox\n size=\"small\"\n checked={!hiddenKeys.has(item.key)}\n onChange={(_, checked) => onToggle(item.key, checked)}\n sx={{ '&.Mui-checked': { color: item.color } }}\n />\n }\n sx={{\n '& .MuiFormControlLabel-label': {\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n },\n }}\n />\n\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n textAlign=\"right\"\n noWrap\n >\n {formatPercentage(item.percentage)}\n </Typography>\n\n <Typography\n variant=\"subtitle2\"\n color=\"text.primary\"\n textAlign=\"right\"\n noWrap\n >\n {fShortenNumber(item.count)}\n </Typography>\n </Stack>\n ))}\n </Scrollbar>\n);\n\nexport default ProfileLegend;\n","export const SEGMENT_COLORS = [\n '#FF5630',\n '#FFAB00',\n '#22C55E',\n '#C4CDD5',\n '#8E33FF',\n '#00B8D9',\n '#3366FF',\n '#FF6C40',\n '#36B37E',\n '#B76E00',\n];\n\nexport const MAX_VISIBLE = 12;\n\nexport interface LegendItem {\n key: string;\n label: string;\n count: number;\n percentage: number;\n color: string;\n}\n\nexport interface LegendProps {\n items: LegendItem[];\n hiddenKeys: Set<string>;\n onToggle: (key: string, checked: boolean) => void;\n onItemClick?: (key: string) => void;\n}\n\nexport interface PartnersByProfileProps {\n data: LegendItem[];\n chartData: SegmentChartItem[];\n total: number;\n isEmptyData: boolean;\n onPieClick?: (_: unknown, index: number) => void;\n onLegendClick?: (key: string) => void;\n hiddenKeys: Set<string>;\n onToggle: (key: string, checked: boolean) => void;\n}\n\nexport interface SegmentChartItem {\n name: string;\n value: number;\n percentage: number;\n fill: string;\n}\n","import Divider from '@mui/material/Divider';\nimport Link from '@mui/material/Link';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport DataView from 'components/DataView';\nimport Drawer from 'components/Drawer';\nimport Modal from 'components/Modal';\nimport SearchInput from 'components/SearchInput';\nimport useResponsive from 'hooks/useResponsive';\nimport { DashboardPartner } from 'types/partnerAnalysis';\n\nimport Header from './Header';\nimport { PartnersDetailProps } from './props';\n\nconst PartnersDetail = ({\n open,\n onClose,\n title,\n label,\n columns,\n rows,\n totalPartners,\n isLoading,\n isFetching,\n isFetchingNextPage,\n onSearch,\n onRowsScrollEnd,\n sellerName,\n buildSellerLink,\n sellerExternalId,\n mobileRender,\n}: PartnersDetailProps) => {\n const isMobile = useResponsive('down', 'sm');\n\n const content = (\n <Stack gap={3}>\n <Stack\n direction={{ xs: 'column', sm: 'row' }}\n justifyContent=\"space-between\"\n alignItems={{ sm: 'center' }}\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={3} flexWrap=\"wrap\">\n {sellerName && sellerExternalId && (\n <>\n {buildSellerLink ? (\n <Link\n component=\"a\"\n href={buildSellerLink(sellerExternalId)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n variant=\"subtitle2\"\n sx={{ textDecoration: 'underline' }}\n noWrap\n >\n {sellerName}\n </Link>\n ) : (\n <Typography variant=\"subtitle2\" noWrap>\n {sellerName}\n </Typography>\n )}\n\n <Divider orientation=\"vertical\" flexItem />\n </>\n )}\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Total de clientes:\n </Typography>\n\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {totalPartners}\n </Typography>\n </Stack>\n </Stack>\n\n <SearchInput\n size=\"small\"\n placeholder=\"Buscar\"\n onSearch={onSearch}\n trigger=\"change\"\n iconPosition=\"start\"\n sx={{ minWidth: 200 }}\n />\n </Stack>\n\n <DataView\n title=\"Clientes\"\n header={<></>}\n headerProps={{ p: 0 }}\n columns={columns}\n rows={rows}\n getRowId={(row: DashboardPartner) => row.external_id}\n mobileRender={mobileRender}\n loading={isLoading}\n fetching={isFetching && !isFetchingNextPage}\n fetchingNextPage={isFetchingNextPage}\n onRowsScrollEnd={onRowsScrollEnd}\n scrollEndThreshold={600}\n disableRowSelectionOnClick\n disableColumnMenu\n containerProps={{ height: 400 }}\n />\n </Stack>\n );\n\n const header = <Header title={title} label={label} />;\n\n if (isMobile) {\n return (\n <Drawer\n open={open}\n onClose={onClose}\n headerTitle={header}\n headerProps={{\n direction: 'row-reverse',\n sx: { '& > :last-child': { minWidth: 0, overflow: 'hidden' } },\n }}\n >\n {content}\n </Drawer>\n );\n }\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n maxWidth=\"lg\"\n dialogTitle={header}\n dialogTitleProps={{ sx: { flex: 1, overflow: 'hidden' } }}\n fullWidth\n >\n {content}\n </Modal>\n );\n};\n\nexport default PartnersDetail;\n","import Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport { PartnersDetailHeaderProps } from './props';\n\nconst Header = ({ title, label }: PartnersDetailHeaderProps) => (\n <Stack width=\"100%\" minWidth={0} overflow=\"hidden\">\n <Typography variant=\"subtitle1\" noWrap>\n {title}\n </Typography>\n\n <Typography variant=\"body2\" color=\"text.secondary\" noWrap>\n {label}\n </Typography>\n </Stack>\n);\n\nexport default Header;\n","import Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport DataView from 'components/DataView';\nimport Drawer from 'components/Drawer';\nimport Modal from 'components/Modal';\nimport SearchInput from 'components/SearchInput';\nimport useResponsive from 'hooks/useResponsive';\nimport { DashboardPartner } from 'types/partnerAnalysis';\n\nimport Header from './Header';\nimport { ProfileDetailProps } from './props';\n\nconst ProfileDetail = ({\n open,\n onClose,\n profileName,\n columns,\n rows,\n totalPartners,\n isLoading,\n isFetching,\n isFetchingNextPage,\n onSearch,\n onRowsScrollEnd,\n mobileRender,\n}: ProfileDetailProps) => {\n const isMobile = useResponsive('down', 'sm');\n\n const content = (\n <Stack gap={3}>\n <Stack\n direction={{ xs: 'column', sm: 'row' }}\n justifyContent=\"space-between\"\n alignItems={{ sm: 'center' }}\n gap={2}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={3} flexWrap=\"wrap\">\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Total de clientes:\n </Typography>\n\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {totalPartners}\n </Typography>\n </Stack>\n </Stack>\n\n <SearchInput\n size=\"small\"\n placeholder=\"Buscar\"\n onSearch={onSearch}\n trigger=\"change\"\n iconPosition=\"start\"\n sx={{ minWidth: 200 }}\n />\n </Stack>\n\n <DataView\n title=\"Clientes\"\n header={<></>}\n headerProps={{ p: 0 }}\n columns={columns}\n rows={rows}\n getRowId={(row: DashboardPartner) => row.external_id}\n mobileRender={mobileRender}\n loading={isLoading}\n fetching={isFetching && !isFetchingNextPage}\n fetchingNextPage={isFetchingNextPage}\n onRowsScrollEnd={onRowsScrollEnd}\n scrollEndThreshold={600}\n disableRowSelectionOnClick\n disableColumnMenu\n containerProps={{ height: 400 }}\n />\n </Stack>\n );\n\n const header = <Header profileName={profileName} />;\n\n if (isMobile) {\n return (\n <Drawer\n open={open}\n onClose={onClose}\n headerTitle={header}\n headerProps={{\n direction: 'row-reverse',\n sx: { '& > :last-child': { minWidth: 0, overflow: 'hidden' } },\n }}\n >\n {content}\n </Drawer>\n );\n }\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n maxWidth=\"lg\"\n dialogTitle={header}\n dialogTitleProps={{ sx: { flex: 1, overflow: 'hidden' } }}\n fullWidth\n >\n {content}\n </Modal>\n );\n};\n\nexport default ProfileDetail;\n","import Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport { ProfileDetailHeaderProps } from './props';\n\nconst Header = ({ profileName }: ProfileDetailHeaderProps) => (\n <Stack width=\"100%\" minWidth={0} overflow=\"hidden\">\n <Typography variant=\"subtitle1\" noWrap>\n Clientes por perfil\n </Typography>\n\n <Typography variant=\"body2\" color=\"text.secondary\" noWrap>\n {profileName}\n </Typography>\n </Stack>\n);\n\nexport default Header;\n","import { memo, useCallback, useMemo, useRef, useState } from 'react';\nimport CardContent from '@mui/material/CardContent';\nimport Slider from '@mui/material/Slider';\nimport Stack from '@mui/material/Stack';\nimport { ChartCardHeader } from 'components/Analytics/ChartStyles';\nimport { ChartCard } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\nimport useResponsive from 'hooks/useResponsive';\nimport { RankingItem } from 'types/partnerAnalysis';\nimport { MouseHandlerDataParam } from 'recharts/types/synchronisation/types';\n\nimport RankingChart from './Chart';\nimport RankingLegend from './Legend';\nimport { RankingProps, VisibleSeries } from './props';\n\nconst Ranking = memo(\n ({ data, config, average, onBarClick, children }: RankingProps & { children?: React.ReactNode }) => {\n const isMobile = useResponsive('down', 'sm');\n const isDownLg = useResponsive('down', 'lg');\n\n const [visibleSeries, setVisibleSeries] = useState<VisibleSeries>({\n bar: true,\n average: true,\n });\n const [visibleCount, setVisibleCount] = useState(12);\n const [activeBarIndex, setActiveBarIndex] = useState<number | null>(null);\n const [activeCoordX, setActiveCoordX] = useState<number | null>(null);\n const [containerWidth, setContainerWidth] = useState(0);\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const wrapperRefCallback = useCallback((node: HTMLDivElement | null) => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n if (node) {\n setContainerWidth(node.clientWidth);\n observerRef.current = new ResizeObserver(() =>\n setContainerWidth(node.clientWidth),\n );\n observerRef.current.observe(node);\n }\n }, []);\n\n const sortedData = useMemo(\n () =>\n [...data].sort(\n (a, b) => (b[config.dataKey] as number) - (a[config.dataKey] as number),\n ),\n [data, config.dataKey],\n );\n\n const totalItems = sortedData.length;\n\n const maxVisible = useMemo(() => {\n if (isMobile) return 10;\n if (isDownLg) return 25;\n return 30;\n }, [isMobile, isDownLg]);\n\n const showSlider = !isMobile && totalItems > 10;\n const sliderMax = Math.min(totalItems, maxVisible);\n\n const clampedCount = Math.min(\n isMobile ? totalItems : visibleCount,\n totalItems,\n maxVisible,\n );\n\n const displayData = useMemo(\n () => sortedData.slice(0, clampedCount),\n [sortedData, clampedCount],\n );\n\n const shouldRotateLabels = useMemo(() => {\n if (containerWidth === 0 || displayData.length === 0) return false;\n const slotPerBar = (containerWidth - 60) / displayData.length;\n return slotPerBar < 80;\n }, [containerWidth, displayData.length]);\n\n const handleToggleSerie = useCallback((serie: keyof VisibleSeries) => {\n setVisibleSeries(prev => ({ ...prev, [serie]: !prev[serie] }));\n }, []);\n\n const handleChartMouseMove = useCallback((state: MouseHandlerDataParam) => {\n if (state?.activeTooltipIndex != null) {\n setActiveBarIndex(Number(state.activeTooltipIndex));\n }\n if (state?.activeCoordinate?.x != null) {\n setActiveCoordX(state.activeCoordinate.x);\n }\n }, []);\n\n const handleChartMouseLeave = useCallback(() => {\n setActiveBarIndex(null);\n setActiveCoordX(null);\n }, []);\n\n const handleBarClick = useCallback(\n (item: RankingItem) => {\n if (!item) return;\n onBarClick?.(item);\n },\n [onBarClick],\n );\n\n const handleSliderChange = useCallback(\n (_: Event, val: number | number[]) => {\n setVisibleCount(val as number);\n },\n [],\n );\n\n return (\n <ChartCard>\n <ChartCardHeader\n title=\"Ranking de clientes\"\n action={children}\n />\n\n <CardContent>\n <Result isEmpty={displayData.length === 0} empty={<EmptyState />}>\n <Stack alignItems=\"center\" gap={1.5}>\n <Stack width=\"100%\" ref={wrapperRefCallback}>\n <RankingChart\n data={displayData}\n config={config}\n visibleSeries={visibleSeries}\n average={average}\n activeBarIndex={activeBarIndex}\n activeCoordX={activeCoordX}\n shouldRotateLabels={shouldRotateLabels}\n onMouseMove={handleChartMouseMove}\n onMouseLeave={handleChartMouseLeave}\n onBarClick={handleBarClick}\n />\n </Stack>\n\n <RankingLegend\n visibleSeries={visibleSeries}\n config={config}\n onToggleSerie={handleToggleSerie}\n />\n\n {showSlider && (\n <Slider\n size=\"small\"\n min={10}\n max={sliderMax}\n value={clampedCount}\n valueLabelDisplay=\"auto\"\n onChange={handleSliderChange}\n />\n )}\n </Stack>\n </Result>\n </CardContent>\n </ChartCard>\n );\n },\n);\n\nRanking.displayName = 'Ranking';\n\nexport default Ranking;\n","import { useCallback, useMemo } from 'react';\nimport {\n Bar,\n CartesianGrid,\n ComposedChart,\n ReferenceLine,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\nimport { BarRectangleItem } from 'recharts/types/cartesian/Bar';\n\nimport { ChartWrapper } from 'components/Analytics/ChartStyles';\nimport ReferenceCircle from 'components/Analytics/ReferenceCircle';\nimport RotatedTick from 'components/Analytics/RotatedTick';\nimport { RotatedTickProps } from 'components/Analytics/RotatedTick/props';\nimport WrappedTick from 'components/Analytics/WrappedTick';\nimport { RankingItem } from 'types/partnerAnalysis';\nimport { fShortenNumber } from 'utils/formatNumber';\n\nimport { AVERAGE_COLOR } from '../props';\n\nimport BarBackground from './BarBackground';\nimport { ChartProps } from './props';\nimport RankingTooltip from './Tooltip';\n\nconst BAR_SIZE = 48;\nconst BAR_SLOT = BAR_SIZE / 0.8;\n\nconst RankingChart = ({\n data,\n config,\n visibleSeries,\n average,\n activeBarIndex,\n activeCoordX,\n shouldRotateLabels,\n onMouseMove,\n onMouseLeave,\n onBarClick,\n}: ChartProps) => {\n const yDomain = useMemo((): [number, number] => {\n if (!data.length) return [0, 1];\n const values = data.map(item => (item[config.dataKey] as number) || 0);\n if (visibleSeries.average && average > 0) values.push(average);\n const max = Math.max(...values);\n return [0, max > 0 ? max * 1.15 : 1];\n }, [data, config.dataKey, average, visibleSeries.average]);\n\n const yTicks = useMemo(() => {\n const [, max] = yDomain;\n const step = max / 6;\n return [\n ...new Set(Array.from({ length: 7 }, (_, i) => Math.round(step * i))),\n ];\n }, [yDomain]);\n\n const barLabel = useMemo(\n () =>\n shouldRotateLabels\n ? false\n : {\n position: 'top' as const,\n fontSize: 11,\n fill: '#212B36',\n formatter: (value: unknown) => config.formatLabel(Number(value)),\n },\n [shouldRotateLabels, config],\n );\n\n const tooltipContent = useMemo(\n () => <RankingTooltip config={config} average={average} />,\n [config, average],\n );\n\n const renderXAxisTick = useCallback(\n (tickProps: Record<string, unknown>) => {\n if (shouldRotateLabels) {\n return <RotatedTick {...(tickProps as RotatedTickProps)} />;\n }\n return (\n <WrappedTick\n x={tickProps.x as number}\n y={tickProps.y as number}\n payload={tickProps.payload as { value: string }}\n slotWidth={BAR_SLOT}\n />\n );\n },\n [shouldRotateLabels],\n );\n\n const handleBarClick = useCallback(\n (entry: BarRectangleItem) => {\n if (!entry) return;\n onBarClick(entry as unknown as RankingItem);\n },\n [onBarClick],\n );\n\n return (\n <ChartWrapper>\n <ResponsiveContainer width=\"100%\" height={350}>\n <ComposedChart\n data={data}\n margin={{ top: 20, right: 10, bottom: 0, left: 20 }}\n barCategoryGap=\"20%\"\n onMouseMove={onMouseMove}\n onMouseLeave={onMouseLeave}\n >\n <CartesianGrid\n vertical={false}\n strokeDasharray=\"3 3\"\n stroke=\"#F4F6F8\"\n />\n\n <XAxis\n dataKey=\"partner_name\"\n axisLine={false}\n tickLine={false}\n interval={0}\n height={shouldRotateLabels ? 70 : 50}\n tick={renderXAxisTick}\n />\n\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: '#637381' }}\n tickFormatter={(v: number) => fShortenNumber(v)}\n domain={yDomain}\n ticks={yTicks}\n />\n\n <Tooltip content={tooltipContent} />\n\n {visibleSeries.average && average > 0 && (\n <ReferenceLine\n y={average}\n stroke={AVERAGE_COLOR}\n strokeDasharray=\"8 4\"\n strokeWidth={2}\n ifOverflow=\"extendDomain\"\n />\n )}\n\n {visibleSeries.average && average > 0 && (\n <ReferenceLine\n y={average}\n stroke=\"none\"\n ifOverflow=\"extendDomain\"\n label={\n <ReferenceCircle\n activeCoordX={activeCoordX}\n referenceCircleColor={AVERAGE_COLOR}\n activeIndex={activeBarIndex}\n />\n }\n />\n )}\n\n {visibleSeries.bar && (\n <Bar\n dataKey={config.dataKey}\n name={config.barName}\n fill={config.color}\n maxBarSize={48}\n isAnimationActive={false}\n radius={[4, 4, 0, 0]}\n cursor=\"pointer\"\n onClick={handleBarClick}\n background={\n <BarBackground\n activeBarIndex={activeBarIndex}\n color={config.color}\n data={data}\n onBarClick={onBarClick}\n />\n }\n label={barLabel}\n />\n )}\n </ComposedChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n};\n\nexport default RankingChart;\n","import { RankingItem } from 'types/partnerAnalysis';\nimport { RankingType } from 'utils/partnerAnalysis';\nimport { fCurrencyBRL, fShortenNumber } from 'utils/formatNumber';\n\nexport const AVERAGE_COLOR = '#212B36';\n\nexport interface RankingTypeConfig {\n label: string;\n color: string;\n dataKey: keyof RankingItem;\n barName: string;\n averageName: string;\n averageDataKey: string;\n formatLabel: (value: number) => string;\n formatYAxis: (value: number) => string;\n floorAverage?: boolean;\n}\n\nexport interface VisibleSeries {\n bar: boolean;\n average: boolean;\n}\n\nexport interface LegendProps {\n visibleSeries: VisibleSeries;\n config: RankingTypeConfig;\n onToggleSerie: (serie: keyof VisibleSeries) => void;\n}\n\nexport interface RankingProps {\n data: RankingItem[];\n config: RankingTypeConfig;\n average: number;\n isFetching?: boolean;\n onBarClick?: (item: RankingItem) => void;\n}\n\nexport const RANKING_CONFIG: Record<RankingType, RankingTypeConfig> = {\n [RankingType.SALE_TOTAL_VALUE]: {\n label: 'Por valor total',\n color: '#22C55E',\n dataKey: 'total_sale_value',\n barName: 'Valor total por cliente',\n averageName: 'Média total de valor por cliente',\n averageDataKey: 'average_total_value',\n formatLabel: fCurrencyBRL,\n formatYAxis: fShortenNumber,\n },\n [RankingType.SALE_COUNT]: {\n label: 'Por pedidos',\n color: '#C684FF',\n dataKey: 'total_value_by_customer',\n barName: 'Quantidade de pedidos',\n averageName: 'Quantidade total de pedidos',\n averageDataKey: 'average_sale_count',\n formatLabel: String,\n formatYAxis: fShortenNumber,\n floorAverage: true,\n },\n [RankingType.SALE_AVERAGE_VALUE]: {\n label: 'Por ticket médio',\n color: '#00B8D9',\n dataKey: 'total_sale_value',\n barName: 'Ticket médio por cliente',\n averageName: 'Média do ticket médio',\n averageDataKey: 'average_ticket',\n formatLabel: fCurrencyBRL,\n formatYAxis: fShortenNumber,\n },\n};\n","import { BarBackgroundProps } from './props';\n\nconst BarBackground = ({\n x = 0,\n y = 0,\n width = 0,\n height = 0,\n index = 0,\n activeBarIndex,\n color,\n data,\n onBarClick,\n}: BarBackgroundProps) => {\n if (activeBarIndex !== index) return null;\n\n return (\n <rect\n x={x - 6}\n y={y}\n width={width + 12}\n height={height + 6}\n fill={color}\n opacity={0.16}\n rx={6}\n style={{ cursor: 'pointer' }}\n onClick={() => onBarClick(data[index])}\n />\n );\n};\n\nexport default BarBackground;\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport SimpleCard from 'components/SimpleCard';\n\nimport { AVERAGE_COLOR } from '../props';\n\nimport { CustomTooltipProps } from './props';\n\nconst RankingTooltip = ({\n active,\n payload,\n label,\n config,\n average,\n}: CustomTooltipProps) => {\n if (!active || !payload?.length) return null;\n\n return (\n <SimpleCard minWidth={{ xs: 'auto', sm: 200 }} p={1} gap={1}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {label}\n </Typography>\n\n <Divider />\n\n <Stack>\n {payload.map((entry, index) => (\n <Stack\n key={entry.dataKey}\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n data-testid={`tooltip-item-${index}`}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={entry.color}\n />\n\n <Typography variant=\"body2\" noWrap>\n {config.barName}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\">\n {config.formatLabel(entry.value)}\n </Typography>\n </Stack>\n ))}\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={AVERAGE_COLOR}\n />\n\n <Typography variant=\"body2\" noWrap>\n {config.averageName}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\">{config.formatLabel(average)}</Typography>\n </Stack>\n </Stack>\n </SimpleCard>\n );\n};\n\nexport default RankingTooltip;\n","import Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Stack from '@mui/material/Stack';\n\nimport { AVERAGE_COLOR, LegendProps } from './props';\n\nconst RankingLegend = ({\n visibleSeries,\n config,\n onToggleSerie,\n}: LegendProps) => (\n <Stack direction=\"row\" justifyContent=\"center\" flexWrap=\"wrap\" gap={1}>\n <FormControlLabel\n control={\n <Checkbox\n checked={visibleSeries.bar}\n onChange={() => onToggleSerie('bar')}\n sx={{ '&.Mui-checked': { color: config.color } }}\n />\n }\n label={config.barName}\n />\n\n <FormControlLabel\n control={\n <Checkbox\n checked={visibleSeries.average}\n onChange={() => onToggleSerie('average')}\n sx={{ '&.Mui-checked': { color: AVERAGE_COLOR } }}\n />\n }\n label={config.averageName}\n />\n </Stack>\n);\n\nexport default RankingLegend;\n","import MuiButton from '@mui/material/Button';\nimport { styled } from '@mui/material/styles';\n\ninterface ItemButtonProps {\n active?: boolean;\n}\n\nexport const ItemButton = styled(MuiButton, {\n shouldForwardProp: prop => prop !== 'active',\n})<ItemButtonProps>(({ theme, active }) => ({\n justifyContent: 'flex-start',\n\n color: active ? theme.palette.primary.main : theme.palette.text.secondary,\n fontWeight: active ? 800 : 400,\n\n '&:hover': {\n background: theme.palette.action.hover,\n },\n}));\n","import Divider from '@mui/material/Divider';\nimport Link from '@mui/material/Link';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport { GridRenderCellParams } from '@mui/x-data-grid-premium';\n\nimport DataView from 'components/DataView';\nimport Drawer from 'components/Drawer';\nimport Modal from 'components/Modal';\nimport SearchInput from 'components/SearchInput';\nimport useResponsive from 'hooks/useResponsive';\nimport { fCurrencyBRL } from 'utils/formatNumber';\nimport { fDate } from 'utils/formatTime';\n\nimport Header from './Header';\nimport { RankingDetailOrder, RankingDetailProps } from './props';\nimport { MobileItemContainer, StyledDivider } from './styles';\n\nconst getOrderId = (order: RankingDetailOrder) => (\n <Stack justifyContent=\"center\" height={1}>\n <Typography variant=\"body2\" color=\"text.primary\">\n {order.id}\n </Typography>\n </Stack>\n);\n\nconst getPartnerName = (\n order: RankingDetailOrder,\n buildPartnerLink?: (partnerId: string) => string,\n) => (\n <Stack justifyContent=\"center\" height={1}>\n {order?.partner?.id && buildPartnerLink ? (\n <Link\n component=\"a\"\n href={buildPartnerLink(order.partner.id)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n variant=\"subtitle2\"\n sx={{ textDecoration: 'underline' }}\n noWrap\n >\n {order.partner?.name || '-'}\n </Link>\n ) : (\n <Typography variant=\"body2\" color=\"text.primary\" noWrap>\n {order.partner?.name || '-'}\n </Typography>\n )}\n </Stack>\n);\n\nconst getOrderValue = (order: RankingDetailOrder) => (\n <Stack justifyContent=\"center\" height={1}>\n <Typography variant=\"body2\" color=\"text.primary\">\n {fCurrencyBRL(order.total_value)}\n </Typography>\n </Stack>\n);\n\nconst getOrderDate = (order: RankingDetailOrder) => (\n <Stack justifyContent=\"center\" height={1}>\n {order.negotiation_date ? (\n <Typography variant=\"body2\" color=\"text.primary\">\n {fDate(order.negotiation_date, 'DD/MM/YYYY')}\n </Typography>\n ) : (\n '-'\n )}\n </Stack>\n);\n\nconst getOrderStatus = (order: RankingDetailOrder) => (\n <Stack justifyContent=\"center\" height={1}>\n {order.status || '-'}\n </Stack>\n);\n\nconst getDefaultMobileRender = (order: RankingDetailOrder) => (\n <MobileItemContainer key={order.id}>\n <Stack gap={1}>\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Pedido\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {order.id}\n </Typography>\n </Stack>\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Cliente\n </Typography>\n <Typography variant=\"subtitle2\" color=\"primary.main\">\n {order.partner?.name || '-'}\n </Typography>\n </Stack>\n\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack flex={1} overflow=\"hidden\">\n <Typography variant=\"body2\" color=\"text.secondary\" noWrap>\n Valor do pedido\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\" noWrap>\n {fCurrencyBRL(order.total_value)}\n </Typography>\n </Stack>\n\n <Divider\n orientation=\"vertical\"\n flexItem\n sx={{ borderStyle: 'dashed', mx: 3 }}\n />\n\n <Stack flex={1} overflow=\"hidden\">\n <Typography variant=\"body2\" color=\"text.secondary\" noWrap>\n Data\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\" noWrap>\n {order.negotiation_date\n ? fDate(order.negotiation_date, 'DD/MM/YYYY')\n : '-'}\n </Typography>\n </Stack>\n </Stack>\n\n <Stack gap={0.5}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Status\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {order.status || '-'}\n </Typography>\n </Stack>\n </Stack>\n </MobileItemContainer>\n);\n\nconst RankingDetail = ({\n open,\n onClose,\n partnerName,\n rankingLabel,\n rows,\n total,\n totalValue,\n averageTicket,\n isLoading,\n isFetching,\n page,\n perPage,\n onSearch,\n onPaginationChange,\n buildPartnerLink,\n mobileItemSlot,\n}: RankingDetailProps) => {\n const isMobile = useResponsive('down', 'sm');\n\n const content = (\n <Stack gap={3}>\n <Stack\n direction={{ xs: 'column', sm: 'row' }}\n justifyContent=\"space-between\"\n gap={2}\n >\n <Stack\n minWidth={0}\n direction=\"row\"\n alignItems=\"center\"\n gap={3}\n flexWrap=\"wrap\"\n >\n <Typography variant=\"subtitle2\" noWrap>\n {partnerName}\n </Typography>\n\n <StyledDivider orientation=\"vertical\" flexItem />\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Qtd. de pedidos\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {total}\n </Typography>\n </Stack>\n\n <StyledDivider orientation=\"vertical\" flexItem />\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Valor em pedidos\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {fCurrencyBRL(totalValue)}\n </Typography>\n </Stack>\n\n <StyledDivider orientation=\"vertical\" flexItem />\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Ticket médio\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {fCurrencyBRL(averageTicket)}\n </Typography>\n </Stack>\n </Stack>\n\n <SearchInput\n size=\"small\"\n placeholder=\"Buscar\"\n onSearch={onSearch}\n trigger=\"change\"\n iconPosition=\"start\"\n sx={{ minWidth: 200 }}\n />\n </Stack>\n\n <DataView\n title=\"Pedidos\"\n header={<></>}\n headerProps={{ p: 0 }}\n columns={[\n {\n field: 'external_id',\n headerName: 'Pedido',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) => getOrderId(row),\n },\n {\n field: 'partner_name',\n headerName: 'Cliente',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) =>\n getPartnerName(row, buildPartnerLink),\n },\n {\n field: 'total_value',\n headerName: 'Valor do pedido',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) => getOrderValue(row),\n },\n {\n field: 'created_at',\n headerName: 'Data',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) => getOrderDate(row),\n },\n {\n field: 'last_status',\n headerName: 'Status',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) => getOrderStatus(row),\n },\n ]}\n rows={rows}\n rowCount={total}\n mobileRender={(data: RankingDetailOrder) =>\n mobileItemSlot ? mobileItemSlot(data) : getDefaultMobileRender(data)\n }\n loading={isLoading}\n fetching={isFetching}\n paginationModel={{ page, pageSize: perPage }}\n onPaginationChange={onPaginationChange}\n paginationMode=\"server\"\n disableRowSelectionOnClick\n disableColumnMenu\n containerProps={{ height: 400 }}\n />\n </Stack>\n );\n\n const header = (\n <Header rankingLabel={rankingLabel} partnerName={partnerName} />\n );\n\n if (isMobile) {\n return (\n <Drawer\n open={open}\n onClose={onClose}\n headerTitle={header}\n headerProps={{\n direction: 'row-reverse',\n sx: { '& > :last-child': { minWidth: 0, overflow: 'hidden' } },\n }}\n >\n {content}\n </Drawer>\n );\n }\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n maxWidth=\"lg\"\n dialogTitle={header}\n dialogTitleProps={{ sx: { flex: 1, overflow: 'hidden' } }}\n fullWidth\n >\n {content}\n </Modal>\n );\n};\n\nexport default RankingDetail;\n","import Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport { RankingDetailHeaderProps } from './props';\n\nconst Header = ({ rankingLabel, partnerName }: RankingDetailHeaderProps) => (\n <Stack width=\"100%\" minWidth={0} overflow=\"hidden\">\n <Typography variant=\"subtitle1\" noWrap>\n Detalhes do relatório\n </Typography>\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n columnGap={1.5}\n rowGap={0}\n flexWrap=\"wrap\"\n >\n <Typography variant=\"body2\" color=\"text.secondary\" flexShrink={0}>\n Top clientes\n </Typography>\n •\n <Typography variant=\"body2\" flexShrink={0}>\n Por "{rankingLabel}"\n </Typography>\n •\n <Typography variant=\"body2\" color=\"text.secondary\" noWrap>\n {partnerName}\n </Typography>\n </Stack>\n </Stack>\n);\n\nexport default Header;\n","import MuiDivider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport { alpha, styled } from '@mui/material/styles';\n\nexport const StyledDivider = styled(MuiDivider)(() => ({\n height: 30,\n alignSelf: 'center',\n borderStyle: 'dashed',\n}));\n\nexport const MobileItemContainer = styled(Stack)(({ theme }) => ({\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n padding: theme.spacing(2),\n gap: theme.spacing(1),\n color: theme.palette.text.primary,\n\n '& a': {\n textDecoration: 'none',\n },\n\n '&+div': {\n borderTop: `1px dashed ${alpha(theme.palette.grey[500], 0.2)}`,\n },\n}));\n","import { useCallback, useMemo, useRef, useState } from 'react';\nimport CardContent from '@mui/material/CardContent';\nimport Slider from '@mui/material/Slider';\nimport Stack from '@mui/material/Stack';\nimport { ChartCard, ChartCardHeader } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\nimport useResponsive from 'hooks/useResponsive';\nimport { MouseHandlerDataParam } from 'recharts/types/synchronisation/types';\n\nimport SellerPortfolioChart from './Chart';\nimport SellerPortfolioLegend from './Legend';\nimport { ChartDataRow, SellerPortfolioProps } from './props';\n\nconst SellerPortfolio = ({\n data,\n config,\n onBarClick,\n children,\n}: SellerPortfolioProps) => {\n const isMobile = useResponsive('down', 'sm');\n const isDownLg = useResponsive('down', 'lg');\n\n const [hiddenKeys, setHiddenKeys] = useState<Set<string>>(new Set());\n const [visibleCount, setVisibleCount] = useState(12);\n const [activeBarIndex, setActiveBarIndex] = useState<number | null>(null);\n const [containerWidth, setContainerWidth] = useState(0);\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const sortedData = useMemo(\n () => [...data].sort((a, b) => b._total - a._total),\n [data],\n );\n\n const maxVisible = useMemo(() => {\n if (isMobile) return 10;\n if (isDownLg) return 25;\n return 30;\n }, [isDownLg, isMobile]);\n\n const totalItems = sortedData.length;\n const showSlider = !isMobile && totalItems > 10;\n const sliderMax = Math.min(totalItems, maxVisible);\n\n const clampedCount = Math.min(\n isMobile ? totalItems : visibleCount,\n totalItems,\n maxVisible,\n );\n\n const displayData = useMemo(\n () => sortedData.slice(0, clampedCount),\n [sortedData, clampedCount],\n );\n\n const shouldRotateLabels = useMemo(() => {\n if (containerWidth === 0 || displayData.length === 0) return false;\n const slotPerBar = (containerWidth - 60) / displayData.length;\n return slotPerBar < 80;\n }, [containerWidth, displayData.length]);\n\n const visibleSeries = useMemo(\n () => config.series.filter(s => !hiddenKeys.has(s.dataKey)),\n [config.series, hiddenKeys],\n );\n\n const displayDataWithTotals = useMemo(\n () =>\n displayData.map(item => ({\n ...item,\n _visibleTotal: visibleSeries.reduce(\n (sum, s) => sum + (Number(item[s.dataKey]) || 0),\n 0,\n ),\n })),\n [displayData, visibleSeries],\n );\n\n const wrapperRefCallback = useCallback((node: HTMLDivElement | null) => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n if (node) {\n setContainerWidth(node.clientWidth);\n observerRef.current = new ResizeObserver(() =>\n setContainerWidth(node.clientWidth),\n );\n observerRef.current.observe(node);\n }\n }, []);\n\n const handleToggleSerie = useCallback((dataKey: string) => {\n setHiddenKeys(prev => {\n const next = new Set(prev);\n if (next.has(dataKey)) next.delete(dataKey);\n else next.add(dataKey);\n return next;\n });\n }, []);\n\n const handleMouseMove = useCallback((state: MouseHandlerDataParam) => {\n if (state?.activeTooltipIndex != null) {\n setActiveBarIndex(Number(state.activeTooltipIndex));\n }\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n setActiveBarIndex(null);\n }, []);\n\n const handleBarClick = useCallback(\n (sellerId: string, sellerName: string) => {\n onBarClick?.(sellerId, sellerName);\n },\n [onBarClick],\n );\n\n const handleSliderChange = useCallback(\n (_: Event, val: number | number[]) => {\n setVisibleCount(val as number);\n },\n [],\n );\n\n return (\n <ChartCard>\n <ChartCardHeader\n title=\"Carteira de clientes do vendedor\"\n action={children}\n />\n\n <CardContent>\n <Result isEmpty={displayData.length === 0} empty={<EmptyState />}>\n <Stack alignItems=\"center\" gap={1.5}>\n <Stack width=\"100%\" ref={wrapperRefCallback}>\n <SellerPortfolioChart\n data={displayDataWithTotals}\n config={config}\n visibleSeries={visibleSeries}\n hiddenKeys={hiddenKeys}\n activeBarIndex={activeBarIndex}\n shouldRotateLabels={shouldRotateLabels}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n onBarClick={handleBarClick}\n />\n </Stack>\n\n <SellerPortfolioLegend\n series={config.series}\n hiddenKeys={hiddenKeys}\n onToggleSerie={handleToggleSerie}\n />\n\n {showSlider && (\n <Slider\n size=\"small\"\n min={10}\n max={sliderMax}\n value={clampedCount}\n valueLabelDisplay=\"auto\"\n onChange={handleSliderChange}\n />\n )}\n </Stack>\n </Result>\n </CardContent>\n </ChartCard>\n );\n};\n\nexport default SellerPortfolio;\n","import { type ReactElement, useCallback, useMemo } from 'react';\nimport {\n Bar,\n BarChart,\n CartesianGrid,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\nimport { BarRectangleItem } from 'recharts/types/cartesian/Bar';\n\nimport { ChartWrapper } from 'components/Analytics/ChartStyles';\nimport RotatedTick from 'components/Analytics/RotatedTick';\nimport { RotatedTickProps } from 'components/Analytics/RotatedTick/props';\nimport WrappedTick from 'components/Analytics/WrappedTick';\nimport { fShortenNumber } from 'utils/formatNumber';\n\nimport BarBackground from './BarBackground';\nimport { ChartProps } from './props';\nimport StackedTooltip from './Tooltip';\n\nconst BAR_SIZE = 48;\nconst BAR_SLOT = BAR_SIZE / 0.8;\n\nconst SellerPortfolioChart = ({\n data,\n config,\n visibleSeries,\n hiddenKeys,\n activeBarIndex,\n shouldRotateLabels,\n onMouseMove,\n onMouseLeave,\n onBarClick,\n}: ChartProps) => {\n const yDomain = useMemo((): [number, number] => {\n if (!data.length) return [0, 1];\n const max = Math.max(...data.map(item => item._visibleTotal));\n return [0, max > 0 ? max * 1.15 : 1];\n }, [data]);\n\n const yTicks = useMemo(() => {\n const [, max] = yDomain;\n const step = max / 6;\n return [\n ...new Set(Array.from({ length: 7 }, (_, i) => Math.round(step * i))),\n ];\n }, [yDomain]);\n\n const tooltipContent = useMemo(\n () => <StackedTooltip config={config} />,\n [config],\n );\n\n const renderXAxisTick = useCallback(\n (tickProps: Record<string, unknown>) => {\n if (shouldRotateLabels) {\n return <RotatedTick {...(tickProps as RotatedTickProps)} />;\n }\n return (\n <WrappedTick\n x={tickProps.x as number}\n y={tickProps.y as number}\n payload={tickProps.payload as { value: string }}\n slotWidth={BAR_SLOT}\n />\n );\n },\n [shouldRotateLabels],\n );\n\n const handleBarClick = useCallback(\n (entry: BarRectangleItem) => {\n if (!entry) return;\n const row = entry.payload as Record<string, unknown> | undefined;\n if (!row) return;\n onBarClick(String(row.seller_external_id), String(row.seller_name));\n },\n [onBarClick],\n );\n\n const renderLabel = useCallback(\n (props: Record<string, unknown>) => {\n const { x, y, width, index } = props as {\n x: number;\n y: number;\n width: number;\n index: number;\n };\n const total = data[index]?._visibleTotal;\n if (!total) return <></>;\n return (\n <text\n x={(x as number) + (width as number) / 2}\n y={(y as number) - 6}\n textAnchor=\"middle\"\n fontSize={11}\n fill=\"#212B36\"\n >\n {total}\n </text>\n );\n },\n [data],\n );\n\n return (\n <ChartWrapper>\n <ResponsiveContainer width=\"100%\" height={350}>\n <BarChart\n data={data}\n margin={{ top: 20, right: 10, bottom: 0, left: 20 }}\n barCategoryGap=\"20%\"\n onMouseMove={onMouseMove}\n onMouseLeave={onMouseLeave}\n >\n <CartesianGrid\n vertical={false}\n strokeDasharray=\"3 3\"\n stroke=\"#F4F6F8\"\n />\n\n <XAxis\n dataKey=\"seller_name\"\n axisLine={false}\n tickLine={false}\n interval={0}\n height={shouldRotateLabels ? 70 : 50}\n tick={renderXAxisTick}\n />\n\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: '#637381' }}\n tickFormatter={(v: number) => fShortenNumber(v)}\n domain={yDomain}\n ticks={yTicks}\n />\n\n <Tooltip content={tooltipContent} cursor={false} />\n\n {config.series.map(s => {\n const visible = !hiddenKeys.has(s.dataKey);\n const firstVisible = visibleSeries[0];\n const lastVisible = visibleSeries[visibleSeries.length - 1];\n const isFirst = visible && s.dataKey === firstVisible?.dataKey;\n const isLast = visible && s.dataKey === lastVisible?.dataKey;\n\n return (\n <Bar\n key={s.dataKey}\n dataKey={visible ? s.dataKey : `_hidden_${s.dataKey}`}\n name={s.name}\n fill={s.color}\n stackId=\"stack\"\n maxBarSize={48}\n isAnimationActive={false}\n cursor=\"pointer\"\n hide={!visible}\n onClick={handleBarClick}\n {...(isFirst && {\n background: (\n <BarBackground\n activeBarIndex={activeBarIndex}\n data={data}\n onBarClick={onBarClick}\n />\n ),\n })}\n {...(isLast && { radius: [4, 4, 0, 0] as [number, number, number, number] })}\n {...(isLast &&\n !shouldRotateLabels && {\n label: {\n position: 'top' as const,\n fontSize: 11,\n fill: '#212B36',\n content: renderLabel as unknown as ReactElement,\n },\n })}\n />\n );\n })}\n </BarChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n};\n\nexport default SellerPortfolioChart;\n","import { BarBackgroundProps } from './props';\n\nconst BarBackground = ({\n x = 0,\n y = 0,\n width = 0,\n height = 0,\n index = 0,\n activeBarIndex,\n data,\n onBarClick,\n}: BarBackgroundProps) => {\n if (activeBarIndex !== index) return null;\n\n const entry = data[index];\n\n return (\n <rect\n x={x - 6}\n y={y}\n width={width + 12}\n height={height + 6}\n fill=\"#919EAB\"\n opacity={0.16}\n rx={6}\n style={{ cursor: 'pointer' }}\n onClick={() => {\n if (!entry) return;\n onBarClick(\n String(entry.seller_external_id),\n String(entry.seller_name),\n );\n }}\n />\n );\n};\n\nexport default BarBackground;\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport SimpleCard from 'components/SimpleCard';\nimport { fPercent } from 'utils/formatNumber';\n\nimport { StackedTooltipProps, TooltipPayloadEntry } from './props';\n\nconst formatPct = (value: number) =>\n fPercent(value, {\n maximumFractionDigits: 2,\n ...(value > 0 && value < 100 ? { minimumFractionDigits: 2 } : {}),\n });\n\nconst StackedTooltip = ({\n active,\n payload,\n label,\n config,\n}: StackedTooltipProps) => {\n if (!active || !payload?.length) return null;\n\n const visibleEntries = payload.filter(\n entry => entry.value != null && entry.value > 0,\n );\n\n const total = visibleEntries.reduce(\n (sum: number, entry: TooltipPayloadEntry) => sum + entry.value,\n 0,\n );\n\n return (\n <SimpleCard minWidth={{ xs: 'auto', sm: 200 }} p={1} gap={1}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {label}\n </Typography>\n\n <Divider />\n\n <Stack>\n {visibleEntries.map((entry: TooltipPayloadEntry) => {\n const series = config.series.find(s => s.dataKey === entry.dataKey);\n const pct = total > 0 ? formatPct((entry.value / total) * 100) : '0%';\n\n return (\n <Stack\n key={entry.dataKey}\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={entry.color}\n />\n\n <Typography variant=\"body2\" noWrap>\n {series?.name ?? entry.dataKey}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {pct} ({entry.value})\n </Typography>\n </Stack>\n );\n })}\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack width={6} height={6} borderRadius=\"50%\" bgcolor=\"#919EAB\" />\n\n <Typography variant=\"body2\" noWrap>\n Total\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" noWrap>\n {formatPct(100)} ({total})\n </Typography>\n </Stack>\n </Stack>\n </SimpleCard>\n );\n};\n\nexport default StackedTooltip;\n","import Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Stack from '@mui/material/Stack';\n\nimport { LegendProps } from './props';\n\nconst SellerPortfolioLegend = ({\n series,\n hiddenKeys,\n onToggleSerie,\n}: LegendProps) => (\n <Stack direction=\"row\" justifyContent=\"center\" flexWrap=\"wrap\" gap={1}>\n {series.map(s => (\n <FormControlLabel\n key={s.dataKey}\n control={\n <Checkbox\n checked={!hiddenKeys.has(s.dataKey)}\n onChange={() => onToggleSerie(s.dataKey)}\n sx={{ '&.Mui-checked': { color: s.color } }}\n />\n }\n label={s.name}\n />\n ))}\n </Stack>\n);\n\nexport default SellerPortfolioLegend;\n","import { AbcCurve, SellerPortfolioQueryType, Status } from 'utils/partnerAnalysis';\nimport { fShortenNumber } from 'utils/formatNumber';\n\nexport interface StackedBarSeries {\n dataKey: string;\n name: string;\n color: string;\n}\n\nexport interface SellerPortfolioTypeConfig {\n label: string;\n series: StackedBarSeries[];\n formatYAxis: (value: number) => string;\n}\n\nexport interface ChartDataRow extends Record<string, string | number> {\n seller_name: string;\n seller_external_id: string;\n _total: number;\n}\n\nexport interface DisplayDataRow extends ChartDataRow {\n _visibleTotal: number;\n}\n\nexport interface SelectedSeller {\n id: string;\n name: string;\n}\n\nexport interface LegendProps {\n series: StackedBarSeries[];\n hiddenKeys: Set<string>;\n onToggleSerie: (dataKey: string) => void;\n}\n\nexport interface SellerPortfolioProps {\n data: ChartDataRow[];\n config: SellerPortfolioTypeConfig;\n onBarClick?: (sellerId: string, sellerName: string) => void;\n children?: React.ReactNode;\n}\n\nconst CLASSIFICATION_SERIES: StackedBarSeries[] = [\n { dataKey: Status.ACTIVE, name: 'Ativos', color: '#22C55E' },\n { dataKey: Status.AT_RISK, name: 'Em risco', color: '#FFAB00' },\n { dataKey: Status.INACTIVE, name: 'Inativos', color: '#FF5630' },\n { dataKey: Status.NEW_CLIENT, name: 'Novos clientes', color: '#8E33FF' },\n { dataKey: Status.PROSPECT, name: 'Prospects', color: '#00B8D9' },\n { dataKey: Status.LOST, name: 'Perdidos', color: '#C4CDD5' },\n];\n\nconst ABC_CURVE_SERIES: StackedBarSeries[] = [\n { dataKey: AbcCurve.A, name: 'Curva A', color: '#22C55E' },\n { dataKey: AbcCurve.B, name: 'Curva B', color: '#FFAB00' },\n { dataKey: AbcCurve.C, name: 'Curva C', color: '#FF5630' },\n];\n\nexport const SELLER_PORTFOLIO_CONFIG: Record<\n SellerPortfolioQueryType,\n SellerPortfolioTypeConfig\n> = {\n [SellerPortfolioQueryType.CLASSIFICATION]: {\n label: 'Por classificação',\n series: CLASSIFICATION_SERIES,\n formatYAxis: fShortenNumber,\n },\n [SellerPortfolioQueryType.ABC_CURVE]: {\n label: 'Por curva ABC',\n series: ABC_CURVE_SERIES,\n formatYAxis: fShortenNumber,\n },\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { b as DesktopFooter, a as EnhancedMoreActions, c as Toolbar, d as default } from '../../chunk-
|
|
1
|
+
export { b as DesktopFooter, a as EnhancedMoreActions, c as Toolbar, d as default } from '../../chunk-UQJKTFVZ.js';
|
|
2
2
|
import '../../chunk-R2BCPHRH.js';
|
|
3
3
|
import '../../chunk-4F2NKGF6.js';
|
|
4
4
|
import '../../chunk-NMGWHSNZ.js';
|
|
@@ -3,7 +3,7 @@ export { a as FilterOperator, b as SortType } from '../../chunk-M62EJMQ6.js';
|
|
|
3
3
|
import { a as a$3 } from '../../chunk-WLRSUL67.js';
|
|
4
4
|
import { d, c } from '../../chunk-N7IK5EUP.js';
|
|
5
5
|
import { h, a as a$5 } from '../../chunk-OF6623HG.js';
|
|
6
|
-
import { d as d$1 } from '../../chunk-
|
|
6
|
+
import { d as d$1 } from '../../chunk-UQJKTFVZ.js';
|
|
7
7
|
import '../../chunk-R2BCPHRH.js';
|
|
8
8
|
import '../../chunk-4F2NKGF6.js';
|
|
9
9
|
import '../../chunk-NMGWHSNZ.js';
|
package/package.json
CHANGED
package/dist/chunk-Z275MVEP.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { a as a$9 } from './chunk-R2BCPHRH.js';
|
|
2
|
-
import { a as a$6 } from './chunk-4F2NKGF6.js';
|
|
3
|
-
import { a as a$3 } from './chunk-NMGWHSNZ.js';
|
|
4
|
-
import { a as a$7 } from './chunk-6U5LS7MP.js';
|
|
5
|
-
import { a as a$5 } from './chunk-PRWQQJDL.js';
|
|
6
|
-
import { i, r, k, n, l, a as a$2, p, j, m, b as b$1, c, d, q, h, f, e, o, g } from './chunk-XUDTPZHF.js';
|
|
7
|
-
import { a as a$8 } from './chunk-F65ZXAGV.js';
|
|
8
|
-
import { a as a$4 } from './chunk-I4PPSW36.js';
|
|
9
|
-
import { a } from './chunk-2GTD4JW2.js';
|
|
10
|
-
import { a as a$1 } from './chunk-LQRRMVFN.js';
|
|
11
|
-
import { b } from './chunk-2ZJUGM2S.js';
|
|
12
|
-
import { memo, forwardRef, useState, useRef, useEffect, useMemo, Children, isValidElement, cloneElement, useCallback, Fragment as Fragment$1 } from 'react';
|
|
13
|
-
import ot from 'react-fast-compare';
|
|
14
|
-
import et from '@mui/material/IconButton';
|
|
15
|
-
import tt from '@mui/material/LinearProgress';
|
|
16
|
-
import to from '@mui/material/Stack';
|
|
17
|
-
import ee from '@mui/material/Tooltip';
|
|
18
|
-
import Ce from '@mui/lab/LoadingButton';
|
|
19
|
-
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
20
|
-
import _o from '@mui/material/Button';
|
|
21
|
-
import Xo from '@mui/material/Typography';
|
|
22
|
-
import { GridToolbarColumnsButton } from '@mui/x-data-grid-premium';
|
|
23
|
-
|
|
24
|
-
var Fo=(o,e)=>typeof o=="function"?o(e):!!o,Ae=(o,e)=>{if(o)return o===!0?{}:typeof o=="function"?o(e):o},ke=({actions:o,context:e})=>{let[t,r]=useState(null),[a$1,i]=useState(null),l=useMemo(()=>o.filter(n=>!Fo(n.hidden,e)),[o,e]),s=useCallback(async n=>{i(n.actionId);try{await n.handler(e);}finally{i(null);}},[e]),d=useCallback(n=>{if(n.confirmation){r(n);return}s(n).catch(()=>{});},[s]),m$1=useCallback(async()=>{t&&(await s(t),r(null));},[t,s]),f=useCallback(()=>{a$1||r(null);},[a$1]),c=Ae(t?.confirmation,e);return jsxs(Fragment,{children:[jsx(m,{children:l.map(n=>{let h=!!a$1||Fo(n.disabled,e),k=a$1===n.actionId;return jsx(Ce,{size:"small",variant:"text",onClick:()=>d(n),loading:k,disabled:h,sx:{color:"text.primary"},startIcon:typeof n.icon=="string"?jsx(a,{icon:n.icon}):n.icon,children:n.label},n.actionId)})}),t&&jsx(a$5,{open:!0,onClose:f,onConfirm:()=>{m$1().catch(()=>{});},confirming:a$1===t.actionId,modalTitle:c?.title??`${t.action??"Excluir"} ${e.selectedCount} ${t.entityName??"registro"}${e.selectedCount!==1?"s":""}?`,message:c?.message??"Esta a\xE7\xE3o n\xE3o poder\xE1 ser desfeita.",cancelButtonText:c?.cancelButtonText??"Cancelar",confirmButtonText:c?.confirmButtonText??"Sim, excluir"})]})},zo=ke;var Re=({title:o,breakpoint:e,actions:t,showActions:r,showAdd:a$1,showHeaderMoreActions:i,showActionsContainer:l,onAdd:s,onOpenMoreActions:d$1})=>jsxs(b$1,{breakpoint:e,children:[jsx(Xo,{variant:"overline",color:"text.secondary",noWrap:!0,children:o}),l&&jsxs(c,{breakpoint:e,children:[r&&t,a$1&&jsxs(Fragment,{children:[r&&jsx(d,{orientation:"vertical",flexItem:!0}),jsx(_o,{startIcon:jsx(a,{icon:"SIMPLE_ADD"}),variant:"contained",onClick:s,children:"Adicionar"})]}),i&&jsxs(Fragment,{children:[(r||a$1)&&jsx(d,{orientation:"vertical",flexItem:!0}),jsx(_o,{color:"inherit",startIcon:jsx(a,{icon:"MORE_BOLD"}),size:"small",onClick:d$1,children:"Mais"})]})]})]}),$o=Re;var De=({fetching:o,loading:e,rows:t,mobileSlots:r$1,mobileSlotsProps:a,slots:i,scrollableNodeRef:l,mobileRender:s,hideFooter:d,onPaginationChange:m,rowCount:f,paginationModel:c})=>jsxs(a$6,{isFetching:o,fetching:jsx(a$7,{}),isLoading:e,loading:jsx(q,{}),isEmpty:t.length===0,empty:jsxs(to,{flex:1,direction:"column",...a,children:[r$1&&r$1,jsx(to,{flex:1,alignItems:"center",justifyContent:"center",children:i?.noRowsOverlay?jsx(i.noRowsOverlay,{}):jsx(Xo,{variant:"body2",color:"text.secondary",children:"Nenhum registro encontrado"})})]}),children:[jsxs(to,{direction:"column",flex:1,minHeight:0,...a,children:[r$1&&r$1,jsx(a$8,{fillContent:!0,ref:l,children:t.map(n=>jsx(Fragment$1,{children:s(n)},n.id))})]}),!d&&m&&jsx(h,{children:jsx(r,{count:f,page:c.page,rowsPerPage:c.pageSize,onPageChange:n=>m?.(n,c.pageSize),onRowsPerPageChange:n=>m?.(0,n)})})]}),qo=De;var z="datagrid-actions";var Ko=(o,e)=>Children.map(o,t=>{if(!isValidElement(t))return t;let r=t.props.onClick,a={};a.onClick=(...l)=>{e(),r&&r(...l);};let i=t.props;return i?.children&&(a.children=Ko(i.children,e)),cloneElement(t,a)}),ve=({children:o,onClose:e})=>o?Ko(o,e):null,ro=memo(ve);var Ve=({breakpoint:o$1,isMobile:e$1,showSearch:t,showMoreActions:r,showTopbarMoreActions:a$1,showHeaderMoreActions:i,filterButton:l,searchValue:s,onSearch:d,onSearchChange:m,moreActions:f$1,popover:c})=>jsxs(f,{breakpoint:o$1,children:[jsxs(to,{flex:1,direction:"row",alignItems:"center",id:z,gap:.5,children:[r&&jsxs(Fragment,{children:[a$1&&jsxs(Fragment,{children:[jsx(_o,{color:"inherit",startIcon:jsx(a,{icon:"MORE_BOLD"}),size:"small",onClick:c.onOpen,children:"Mais"}),!e$1&&jsx(e,{orientation:"vertical",flexItem:!0})]}),(a$1||i)&&jsx(o,{open:c.open,anchorEl:c.open,onClose:c.onClose,disabledArrow:!0,children:jsx(ro,{onClose:c.onClose,children:f$1})})]}),!e$1&&l&&jsxs(Fragment,{children:[l,a$1&&jsx(e,{orientation:"vertical",flexItem:!0})]})]}),t&&jsxs(g,{breakpoint:o$1,children:[jsx(a$9,{value:s,placeholder:"Buscar",onSearch:n=>d(n??""),onChange:n=>m?.(n.target.value),size:"small",fullWidth:!0,iconPosition:"start"}),e$1&&l&&jsx(to,{ml:1,children:l})]})]}),Jo=Ve;var Oe=({rowCount:o,page:e,rowsPerPage:t,onPaginationChange:r$1})=>jsxs(i,{children:[jsxs(to,{direction:"row",alignItems:"center",gap:.5,children:[jsx(Xo,{variant:"body2",color:"text.disabled",children:"Total de itens:"}),jsx(Xo,{variant:"body2",children:o})]}),jsx(r,{count:o,page:e,rowsPerPage:t,onPageChange:a=>r$1(a,t),onRowsPerPageChange:a=>r$1(0,a)})]}),lo=memo(Oe);var ze=forwardRef(({children:o,...e},t)=>jsx(_o,{...e,ref:t,color:"inherit",startIcon:jsx(a,{icon:"COLUMNS"}),children:o??"Colunas"}));ze.displayName="ColumnsButton";var _e=({setFilterButtonEl:o})=>{let e=useCallback(t=>{o(t);},[o]);return jsx(a$4,{container:z,children:jsx(GridToolbarColumnsButton,{ref:e,slotProps:{button:{color:"inherit",startIcon:jsx(a,{icon:"COLUMNS"}),children:"Colunas"}}})})},so=_e;var qe=({slots:o,showColumnButton:e,rowCount:t,paginationModel:r,onPaginationChange:a})=>{let i=useCallback(()=>a?jsx(lo,{rowCount:t,page:r.page,rowsPerPage:r.pageSize,onPaginationChange:a}):null,[t,r,a]);return {dataGridSlots:useMemo(()=>({...o,footer:i,...e&&!o?.toolbar&&{toolbar:so}}),[o,i,e])}},Zo=qe;var Qe=({rows:o,rowSelectionModel:e,onRowSelectionModelChange:t,getRowId:r,bulkActions:a})=>{let i=useMemo(()=>Array.isArray(e)?e:[],[e]),l=i.length,s=useMemo(()=>o.map(S=>r(S)),[o,r]),d=useMemo(()=>new Set(s),[s]),m=useMemo(()=>i.reduce((S,C)=>S+(d.has(C)?1:0),0),[i,d]),f=s.length>0&&m===s.length,c=m>0&&!f,n=useCallback(S=>{t&&t(S);},[t]),h=useCallback(()=>{n([]);},[n]),k=useMemo(()=>new Set(i),[i]),I=useMemo(()=>o.filter(S=>k.has(r(S))),[o,k,r]),_=useMemo(()=>({selectedIds:i,selectedRowsInPage:I,selectedCount:l,clearSelection:h}),[i,I,l,h]),W=!!a?.length,v=useCallback((S,C)=>{if(!t)return;if(C){let M=new Set(i),V=[...i];s.forEach(x=>{M.has(x)||V.push(x);}),n(V);return}let G=i.filter(M=>!d.has(M));n(G);},[t,i,s,d,n]);return {selectionModel:i,numSelected:l,allSelected:f,someSelected:c,hasBulkActions:W,bulkActionContext:_,clearSelection:h,handleSelectAllToggle:v}},jo=Qe;var nt=({title:o,header:e,headerProps:t,breakpoint:r="md",columns:a$4,rows:i=[],mobileSlots:l$1,mobileSlotsProps:s,mobileRender:d,rowCount:m=0,paginationModel:f={page:0,pageSize:25},onPaginationChange:c,actions:n$1,moreActions:h,onAdd:k$1,onSearch:I,searchValue:_,onSearchChange:W,slots:v,slotProps:S,loading:C,fetching:G,fetchingNextPage:M,containerProps:V={height:562,maxHeight:562},hideFooter:x,showColumnButton:mo=!1,filterButton:po,activeFilters:uo,bulkActions:fo,onRowsScrollEnd:E,scrollEndThreshold:$=200,...R})=>{let So=a$1(),T=b("down",r),[te,ne]=useState(null),go=useRef(null);useEffect(()=>{let P=go.current;if(!P||!T||!E)return;let wo=()=>{let{scrollTop:fe,scrollHeight:Se,clientHeight:ge}=P;Se-fe-ge<=$&&E();};return P.addEventListener("scroll",wo,{passive:!0}),()=>{P.removeEventListener("scroll",wo);}},[T,E,$,i.length]);let re=useMemo(()=>R.getRowId??(P=>P.id),[R.getRowId]),{numSelected:q,allSelected:ie,someSelected:ae,hasBulkActions:le,bulkActionContext:se,clearSelection:ce,handleSelectAllToggle:de}=jo({rows:i,rowSelectionModel:Array.isArray(R.rowSelectionModel)?R.rowSelectionModel:void 0,onRowSelectionModelChange:R.onRowSelectionModelChange,getRowId:re,bulkActions:fo}),{dataGridSlots:me}=Zo({slots:v,showColumnButton:mo,rowCount:m,paginationModel:f,onPaginationChange:c}),ho=!!I,Co=!!k$1,Ao=!!n$1,K=!!h,Q=T&&K,ko=!T&&K,pe=Ao||Co||Q,To=ko||ho||mo||!!po||!T,ue=le&&q>0&&jsxs(k,{children:[jsxs(to,{flexDirection:"row",alignItems:"center",gap:1,flex:1,children:[jsx(ee,{title:"Selecione todos nessa pagina",children:jsx(n,{size:"small",checked:ie,indeterminate:ae,onChange:de})}),jsxs(l,{variant:"body2",children:[q," selecionado",q>1?"s":""]}),jsx(ee,{title:"Desselecionar tudo",children:jsx(et,{size:"small",onClick:ce,"aria-label":"Desselecionar tudo",sx:{color:"primary.main"},children:jsx(a,{icon:"CLOSE_MARK_BUTTON",width:18,height:18})})})]}),jsx(zo,{actions:fo??[],context:se})]});return jsxs(a$2,{breakpoint:r,...V,flex:C?1:void 0,minHeight:C||i.length===0?562:void 0,children:[e?jsx(to,{p:3,...t,children:e}):jsxs(Fragment,{children:[jsx($o,{title:o,breakpoint:r,actions:n$1,showActions:Ao,showAdd:Co,showHeaderMoreActions:Q,showActionsContainer:pe,onAdd:k$1,onOpenMoreActions:So.onOpen}),To&&jsx(Jo,{breakpoint:r,isMobile:T,showSearch:ho,showMoreActions:K,showTopbarMoreActions:ko,showHeaderMoreActions:Q,filterButton:po,searchValue:_,onSearch:I,onSearchChange:W,moreActions:h,popover:So}),uo&&uo,!To&&jsx(p,{})]}),T?jsx(qo,{fetching:G,loading:C,rows:i,mobileSlots:l$1,mobileSlotsProps:s,slots:v,scrollableNodeRef:go,mobileRender:d,hideFooter:x,onPaginationChange:c,rowCount:m,paginationModel:f}):jsxs(j,{children:[ue,jsx(a$3,{columns:a$4,rows:i,slots:me,slotProps:{panel:{anchorEl:te},toolbar:{setFilterButtonEl:ne,showQuickFilter:!0},...S},columnHeaderHeight:48,getRowHeight:()=>68,loading:C,fetching:G,hideFooter:x,onRowsScrollEnd:E,scrollEndThreshold:$,...R})]}),M&&jsx(tt,{})]})},yn=memo(nt,ot);
|
|
25
|
-
|
|
26
|
-
export { ro as a, lo as b, so as c, yn as d };
|
|
27
|
-
//# sourceMappingURL=chunk-Z275MVEP.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/DataView/index.tsx","../src/components/DataView/BulkActionsBar.tsx","../src/components/DataView/DataViewHeader.tsx","../src/components/DataView/DataViewMobileContent.tsx","../src/components/DataView/DataViewTopbar.tsx","../src/components/DataView/contants.ts","../src/components/DataView/EnhancedMoreActions.ts","../src/components/DataView/use-data-grid-slots.tsx","../src/components/DataView/DesktopFooter.tsx","../src/components/DataView/Toolbar.tsx","../src/components/DataView/use-selection-state.ts"],"names":["memo","useEffect","useMemo","useRef","useState","isEqual","IconButton","LinearProgress","Stack","Tooltip","useCallback","LoadingButton","Fragment","jsx","jsxs","resolveDynamicBoolean","value","context","resolveConfirmation","confirmation","BulkActionsBar","actions","confirmAction","setConfirmAction","runningActionId","setRunningActionId","visibleActions","action","executeAction","handleActionClick","handleConfirm","handleCloseConfirm","confirmationConfig","SelectionActions","disabled","loading","Icon_default","Confirm_default","BulkActionsBar_default","Button","Typography","DataViewHeader","title","breakpoint","showActions","showAdd","showHeaderMoreActions","showActionsContainer","onAdd","onOpenMoreActions","Header","ActionsContainer","ActionsDivider","DataViewHeader_default","DataViewMobileContent","fetching","rows","mobileSlots","mobileSlotsProps","slots","scrollableNodeRef","mobileRender","hideFooter","onPaginationChange","rowCount","paginationModel","Result_default","FixedProgressBar_default","LoadingProgress","Scrollbar_default","row","MobilePaginationContainer","Pagination_default","newPage","newRowsPerPage","DataViewMobileContent_default","DATAGRID_ACTIONS","Children","cloneElement","isValidElement","createEnhanceMoreActions","children","onClose","child","originalOnClick","enhancedProps","args","childProps","EnhancedMoreActions","EnhancedMoreActions_default","DataViewTopbar","isMobile","showSearch","showMoreActions","showTopbarMoreActions","filterButton","searchValue","onSearch","onSearchChange","moreActions","popover","Topbar","ToolbarActionsDivider","MoreActionsPopover","SearchContainer","SearchInput_default","v","e","DataViewTopbar_default","DesktopFooter","page","rowsPerPage","DesktopPaginationContainer","DesktopFooter_default","forwardRef","GridToolbarColumnsButton","ColumnsButton","props","ref","Toolbar","setFilterButtonEl","handleColumnsButtonRef","button","Portal_default","Toolbar_default","useDataGridSlots","showColumnButton","FooterComponent","use_data_grid_slots_default","useSelectionState","rowSelectionModel","onRowSelectionModelChange","getRowId","bulkActions","selectionModel","numSelected","pageRowIds","pageRowIdSet","selectedOnPageCount","count","id","allSelected","someSelected","emitRowSelectionChange","nextSelection","clearSelection","selectedIdSet","selectedRowsInPage","bulkActionContext","hasBulkActions","handleSelectAllToggle","_event","checked","selectedIds","use_selection_state_default","DataViewComponent","header","headerProps","columns","slotProps","fetchingNextPage","containerProps","activeFilters","onRowsScrollEnd","scrollEndThreshold","others","usePopover_default","useResponsive_default","filterButtonEl","node","handleScroll","scrollTop","scrollHeight","clientHeight","dataGridSlots","showTopbar","selectionOverlay","SelectionOverlay","SelectionCheckbox","SelectionCount","Container","TopbarDivider","DataGridWrapper","DataGrid_default","DataView_default"],"mappings":"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","sourcesContent":["import { memo, useEffect, useMemo, useRef, useState } from 'react';\nimport isEqual from 'react-fast-compare';\nimport IconButton from '@mui/material/IconButton';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport Stack from '@mui/material/Stack';\nimport Tooltip from '@mui/material/Tooltip';\nimport {\n GridRowId,\n GridSlotsComponentsProps,\n GridValidRowModel,\n} from '@mui/x-data-grid-premium';\n\nimport DataGrid from 'components/DataGrid';\nimport Icon from 'components/Icon';\nimport usePopover from 'hooks/usePopover';\nimport useResponsive from 'hooks/useResponsive';\n\nimport BulkActionsBar from './BulkActionsBar';\nimport DataViewHeader from './DataViewHeader';\nimport DataViewMobileContent from './DataViewMobileContent';\nimport DataViewTopbar from './DataViewTopbar';\nimport { DataViewProps } from './props';\nimport {\n ActionsContainer,\n ActionsDivider,\n Container,\n DataGridWrapper,\n Header,\n MobilePaginationContainer,\n MoreActionsPopover,\n SearchContainer,\n SelectionActions,\n SelectionCheckbox,\n SelectionCount,\n SelectionOverlay,\n ToolbarActionsDivider,\n Topbar,\n TopbarDivider,\n} from './styles';\nimport useDataGridSlots from './use-data-grid-slots';\nimport useSelectionState from './use-selection-state';\n\nconst DataViewComponent = <T extends GridValidRowModel = GridValidRowModel>({\n title,\n header,\n headerProps,\n breakpoint = 'md',\n columns,\n rows = [],\n mobileSlots,\n mobileSlotsProps,\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 fetchingNextPage,\n containerProps = { height: 562, maxHeight: 562 },\n hideFooter,\n showColumnButton = false,\n filterButton,\n activeFilters,\n bulkActions,\n onRowsScrollEnd,\n scrollEndThreshold = 200,\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 const scrollableNodeRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const node = scrollableNodeRef.current;\n if (!node || !isMobile || !onRowsScrollEnd) return;\n\n const handleScroll = () => {\n const { scrollTop, scrollHeight, clientHeight } = node;\n const distanceToBottom = scrollHeight - scrollTop - clientHeight;\n if (distanceToBottom <= scrollEndThreshold) {\n (onRowsScrollEnd as () => void)();\n }\n };\n\n node.addEventListener('scroll', handleScroll, { passive: true });\n return () => {\n node.removeEventListener('scroll', handleScroll);\n };\n }, [isMobile, onRowsScrollEnd, scrollEndThreshold, rows.length]);\n\n const getRowId = useMemo(\n () =>\n (others.getRowId ?? ((row: GridValidRowModel) => row.id)) as (\n row: GridValidRowModel,\n ) => GridRowId,\n [others.getRowId],\n );\n\n const {\n numSelected,\n allSelected,\n someSelected,\n hasBulkActions,\n bulkActionContext,\n clearSelection,\n handleSelectAllToggle,\n } = useSelectionState<T>({\n rows,\n rowSelectionModel: Array.isArray(others.rowSelectionModel)\n ? others.rowSelectionModel\n : undefined,\n onRowSelectionModelChange: others.onRowSelectionModelChange as\n | ((model: GridRowId[], details?: unknown) => void)\n | undefined,\n getRowId,\n bulkActions,\n });\n\n const { dataGridSlots } = useDataGridSlots({\n slots,\n showColumnButton,\n rowCount,\n paginationModel,\n onPaginationChange,\n });\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 selectionOverlay = hasBulkActions && numSelected > 0 && (\n <SelectionOverlay>\n <Stack flexDirection=\"row\" alignItems=\"center\" gap={1} flex={1}>\n <Tooltip title=\"Selecione todos nessa pagina\">\n <SelectionCheckbox\n size=\"small\"\n checked={allSelected}\n indeterminate={someSelected}\n onChange={handleSelectAllToggle}\n />\n </Tooltip>\n\n <SelectionCount variant=\"body2\">\n {numSelected} selecionado{numSelected > 1 ? 's' : ''}\n </SelectionCount>\n\n <Tooltip title=\"Desselecionar tudo\">\n <IconButton\n size=\"small\"\n onClick={clearSelection}\n aria-label=\"Desselecionar tudo\"\n sx={{ color: 'primary.main' }}\n >\n <Icon icon=\"CLOSE_MARK_BUTTON\" width={18} height={18} />\n </IconButton>\n </Tooltip>\n </Stack>\n\n <BulkActionsBar actions={bulkActions ?? []} context={bulkActionContext} />\n </SelectionOverlay>\n );\n\n return (\n <Container\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 <DataViewHeader\n title={title}\n breakpoint={breakpoint}\n actions={actions}\n showActions={showActions}\n showAdd={showAdd}\n showHeaderMoreActions={showHeaderMoreActions}\n showActionsContainer={showActionsContainer}\n onAdd={onAdd}\n onOpenMoreActions={popover.onOpen}\n />\n\n {showTopbar && (\n <DataViewTopbar\n breakpoint={breakpoint}\n isMobile={isMobile}\n showSearch={showSearch}\n showMoreActions={showMoreActions}\n showTopbarMoreActions={showTopbarMoreActions}\n showHeaderMoreActions={showHeaderMoreActions}\n filterButton={filterButton}\n searchValue={searchValue}\n onSearch={onSearch}\n onSearchChange={onSearchChange}\n moreActions={moreActions}\n popover={popover}\n />\n )}\n\n {activeFilters && activeFilters}\n\n {!showTopbar && <TopbarDivider />}\n </>\n )}\n\n {isMobile ? (\n <DataViewMobileContent<T>\n fetching={fetching}\n loading={loading}\n rows={rows}\n mobileSlots={mobileSlots}\n mobileSlotsProps={mobileSlotsProps}\n slots={slots}\n scrollableNodeRef={scrollableNodeRef}\n mobileRender={mobileRender}\n hideFooter={hideFooter}\n onPaginationChange={onPaginationChange}\n rowCount={rowCount}\n paginationModel={paginationModel}\n />\n ) : (\n <DataGridWrapper>\n {selectionOverlay}\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 onRowsScrollEnd={onRowsScrollEnd}\n scrollEndThreshold={scrollEndThreshold}\n {...others}\n />\n </DataGridWrapper>\n )}\n\n {fetchingNextPage && <LinearProgress />}\n </Container>\n );\n};\n\nexport default memo(DataViewComponent, isEqual) as typeof DataViewComponent;\nexport {\n ActionsContainer,\n ActionsDivider,\n Container,\n DataGridWrapper,\n Header,\n MobilePaginationContainer,\n MoreActionsPopover,\n SearchContainer,\n SelectionActions,\n SelectionCount,\n SelectionOverlay,\n ToolbarActionsDivider,\n Topbar,\n};\nexport type {\n BulkAction,\n BulkActionConfirmation,\n BulkActionContext,\n} from './bulkActions';\nexport { default as DesktopFooter } from './DesktopFooter';\nexport { default as EnhancedMoreActions } from './EnhancedMoreActions';\nexport { default as Toolbar } from './Toolbar';\n","import { useCallback, useMemo, useState } from 'react';\nimport LoadingButton from '@mui/lab/LoadingButton';\nimport { GridValidRowModel } from '@mui/x-data-grid-premium';\n\nimport Confirm from 'components/Confirm';\nimport Icon from 'components/Icon';\nimport { IconName } from 'types/icon';\n\nimport type {\n BulkAction,\n BulkActionConfirmation,\n BulkActionContext,\n} from './bulkActions';\nimport type { BulkActionsBarProps } from './props';\nimport { SelectionActions } from './styles';\n\nconst resolveDynamicBoolean = <T extends GridValidRowModel>(\n value: boolean | ((context: BulkActionContext<T>) => boolean) | undefined,\n context: BulkActionContext<T>,\n) => (typeof value === 'function' ? value(context) : !!value);\n\nconst resolveConfirmation = <T extends GridValidRowModel>(\n confirmation: BulkAction<T>['confirmation'],\n context: BulkActionContext<T>,\n): BulkActionConfirmation | undefined => {\n if (!confirmation) return undefined;\n if (confirmation === true) return {};\n if (typeof confirmation === 'function') return confirmation(context);\n\n return confirmation;\n};\n\nconst BulkActionsBar = <T extends GridValidRowModel>({\n actions,\n context,\n}: BulkActionsBarProps<T>) => {\n const [confirmAction, setConfirmAction] = useState<BulkAction<T> | null>(\n null,\n );\n const [runningActionId, setRunningActionId] = useState<string | null>(null);\n\n const visibleActions = useMemo(\n () =>\n actions.filter(action => !resolveDynamicBoolean(action.hidden, context)),\n [actions, context],\n );\n\n const executeAction = useCallback(\n async (action: BulkAction<T>) => {\n setRunningActionId(action.actionId);\n try {\n await action.handler(context);\n } finally {\n setRunningActionId(null);\n }\n },\n [context],\n );\n\n const handleActionClick = useCallback(\n (action: BulkAction<T>) => {\n if (action.confirmation) {\n setConfirmAction(action);\n return;\n }\n\n void executeAction(action).catch(() => undefined);\n },\n [executeAction],\n );\n\n const handleConfirm = useCallback(async () => {\n if (!confirmAction) return;\n await executeAction(confirmAction);\n setConfirmAction(null);\n }, [confirmAction, executeAction]);\n\n const handleCloseConfirm = useCallback(() => {\n if (runningActionId) return;\n setConfirmAction(null);\n }, [runningActionId]);\n\n const confirmationConfig = resolveConfirmation(\n confirmAction?.confirmation,\n context,\n );\n\n return (\n <>\n <SelectionActions>\n {visibleActions.map(action => {\n const disabled =\n !!runningActionId ||\n resolveDynamicBoolean(action.disabled, context);\n const loading = runningActionId === action.actionId;\n\n return (\n <LoadingButton\n key={action.actionId}\n size=\"small\"\n variant=\"text\"\n onClick={() => handleActionClick(action)}\n loading={loading}\n disabled={disabled}\n sx={{ color: 'text.primary' }}\n startIcon={\n typeof action.icon === 'string' ? (\n <Icon icon={action.icon as IconName} />\n ) : (\n action.icon\n )\n }\n >\n {action.label}\n </LoadingButton>\n );\n })}\n </SelectionActions>\n\n {confirmAction && (\n <Confirm\n open\n onClose={handleCloseConfirm}\n onConfirm={() => {\n void handleConfirm().catch(() => undefined);\n }}\n confirming={runningActionId === confirmAction.actionId}\n modalTitle={\n confirmationConfig?.title ??\n `${confirmAction.action ?? 'Excluir'} ${context.selectedCount} ${confirmAction.entityName ?? 'registro'}${context.selectedCount !== 1 ? 's' : ''}?`\n }\n message={\n confirmationConfig?.message ?? 'Esta ação não poderá ser desfeita.'\n }\n cancelButtonText={confirmationConfig?.cancelButtonText ?? 'Cancelar'}\n confirmButtonText={\n confirmationConfig?.confirmButtonText ?? 'Sim, excluir'\n }\n />\n )}\n </>\n );\n};\n\nexport default BulkActionsBar;\n","import Button from '@mui/material/Button';\nimport Typography from '@mui/material/Typography';\n\nimport Icon from 'components/Icon';\n\nimport { DataViewHeaderProps } from './props';\nimport { ActionsContainer, ActionsDivider, Header } from './styles';\n\nconst DataViewHeader = ({\n title,\n breakpoint,\n actions,\n showActions,\n showAdd,\n showHeaderMoreActions,\n showActionsContainer,\n onAdd,\n onOpenMoreActions,\n}: DataViewHeaderProps) => (\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 && <ActionsDivider orientation=\"vertical\" flexItem />}\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={onOpenMoreActions}\n >\n Mais\n </Button>\n </>\n )}\n </ActionsContainer>\n )}\n </Header>\n);\n\nexport default DataViewHeader;\n","import { Fragment } from 'react';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport { GridValidRowModel } from '@mui/x-data-grid-premium';\n\nimport FixedProgressBar from 'components/FixedProgressBar';\nimport Result from 'components/Result';\nimport Scrollbar from 'components/Scrollbar';\n\nimport Pagination from './Pagination';\nimport { DataViewMobileContentProps } from './props';\nimport { LoadingProgress, MobilePaginationContainer } from './styles';\n\nconst DataViewMobileContent = <T extends GridValidRowModel>({\n fetching,\n loading,\n rows,\n mobileSlots,\n mobileSlotsProps,\n slots,\n scrollableNodeRef,\n mobileRender,\n hideFooter,\n onPaginationChange,\n rowCount,\n paginationModel,\n}: DataViewMobileContentProps<T>) => (\n <Result\n isFetching={fetching}\n fetching={<FixedProgressBar />}\n isLoading={loading}\n loading={<LoadingProgress />}\n isEmpty={rows.length === 0}\n empty={\n <Stack flex={1} direction=\"column\" {...mobileSlotsProps}>\n {mobileSlots && mobileSlots}\n\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 </Stack>\n }\n >\n <Stack direction=\"column\" flex={1} minHeight={0} {...mobileSlotsProps}>\n {mobileSlots && mobileSlots}\n\n <Scrollbar fillContent ref={scrollableNodeRef}>\n {rows.map(row => (\n <Fragment key={(row as unknown as { id: string }).id}>\n {mobileRender(row)}\n </Fragment>\n ))}\n </Scrollbar>\n </Stack>\n\n {!hideFooter && onPaginationChange && (\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?.(0, newRowsPerPage)\n }\n />\n </MobilePaginationContainer>\n )}\n </Result>\n);\n\nexport default DataViewMobileContent;\n","import Button from '@mui/material/Button';\nimport Stack from '@mui/material/Stack';\n\nimport Icon from 'components/Icon';\nimport SearchInput from 'components/SearchInput';\n\nimport { DATAGRID_ACTIONS } from './contants';\nimport EnhancedMoreActions from './EnhancedMoreActions';\nimport { DataViewTopbarProps } from './props';\nimport {\n MoreActionsPopover,\n SearchContainer,\n ToolbarActionsDivider,\n Topbar,\n} from './styles';\n\nconst DataViewTopbar = ({\n breakpoint,\n isMobile,\n showSearch,\n showMoreActions,\n showTopbarMoreActions,\n showHeaderMoreActions,\n filterButton,\n searchValue,\n onSearch,\n onSearchChange,\n moreActions,\n popover,\n}: DataViewTopbarProps) => (\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 orientation=\"vertical\" flexItem />\n )}\n </>\n )}\n\n {(showTopbarMoreActions || showHeaderMoreActions) && (\n <MoreActionsPopover\n open={popover.open}\n anchorEl={popover.open}\n onClose={popover.onClose}\n disabledArrow={true}\n >\n <EnhancedMoreActions onClose={popover.onClose}>\n {moreActions}\n </EnhancedMoreActions>\n </MoreActionsPopover>\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={v => onSearch!(v ?? '')}\n onChange={e => onSearchChange?.(e.target.value)}\n size=\"small\"\n fullWidth\n iconPosition=\"start\"\n />\n {isMobile && filterButton && <Stack ml={1}>{filterButton}</Stack>}\n </SearchContainer>\n )}\n </Topbar>\n);\n\nexport default DataViewTopbar;\n","export const DATAGRID_ACTIONS = 'datagrid-actions';\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 { useCallback, useMemo } from 'react';\n\nimport DesktopFooter from './DesktopFooter';\nimport { DataGridSlotsProps } from './props';\nimport { UseDataGridSlotsProps, UseDataGridSlotsReturn } from './props';\nimport Toolbar from './Toolbar';\n\nconst useDataGridSlots = ({\n slots,\n showColumnButton,\n rowCount,\n paginationModel,\n onPaginationChange,\n}: UseDataGridSlotsProps): UseDataGridSlotsReturn => {\n const FooterComponent = useCallback(() => {\n if (onPaginationChange) {\n return (\n <DesktopFooter\n rowCount={rowCount}\n page={paginationModel.page}\n rowsPerPage={paginationModel.pageSize}\n onPaginationChange={onPaginationChange}\n />\n );\n }\n return null;\n }, [rowCount, paginationModel, onPaginationChange]);\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 { dataGridSlots };\n};\n\nexport default useDataGridSlots;\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(0, newRowsPerPage)\n }\n />\n </DesktopPaginationContainer>\n );\n};\n\nexport default memo(DesktopFooter);\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","import { ChangeEvent, useCallback, useMemo } from 'react';\nimport { GridRowId, GridValidRowModel } from '@mui/x-data-grid-premium';\n\nimport type { BulkAction, BulkActionContext } from './bulkActions';\n\ninterface UseSelectionStateProps<T extends GridValidRowModel> {\n rows: readonly T[];\n rowSelectionModel: GridRowId[] | undefined;\n onRowSelectionModelChange:\n | ((model: GridRowId[], details?: unknown) => void)\n | undefined;\n getRowId: (row: GridValidRowModel) => GridRowId;\n bulkActions: BulkAction<T>[] | undefined;\n}\n\ninterface UseSelectionStateReturn<T extends GridValidRowModel> {\n selectionModel: GridRowId[];\n numSelected: number;\n allSelected: boolean;\n someSelected: boolean;\n hasBulkActions: boolean;\n bulkActionContext: BulkActionContext<T>;\n clearSelection: () => void;\n handleSelectAllToggle: (\n event: ChangeEvent<HTMLInputElement>,\n checked: boolean,\n ) => void;\n}\n\nconst useSelectionState = <T extends GridValidRowModel>({\n rows,\n rowSelectionModel,\n onRowSelectionModelChange,\n getRowId,\n bulkActions,\n}: UseSelectionStateProps<T>): UseSelectionStateReturn<T> => {\n const selectionModel = useMemo(() => {\n if (Array.isArray(rowSelectionModel)) return rowSelectionModel;\n return [];\n }, [rowSelectionModel]);\n\n const numSelected = selectionModel.length;\n\n const pageRowIds = useMemo(\n () => rows.map(row => getRowId(row)),\n [rows, getRowId],\n );\n\n const pageRowIdSet = useMemo(() => new Set(pageRowIds), [pageRowIds]);\n\n const selectedOnPageCount = useMemo(\n () =>\n selectionModel.reduce<number>(\n (count, id) => count + (pageRowIdSet.has(id) ? 1 : 0),\n 0,\n ),\n [selectionModel, pageRowIdSet],\n );\n\n const allSelected =\n pageRowIds.length > 0 && selectedOnPageCount === pageRowIds.length;\n const someSelected = selectedOnPageCount > 0 && !allSelected;\n\n const emitRowSelectionChange = useCallback(\n (nextSelection: GridRowId[]) => {\n if (!onRowSelectionModelChange) return;\n onRowSelectionModelChange(nextSelection);\n },\n [onRowSelectionModelChange],\n );\n\n const clearSelection = useCallback(() => {\n emitRowSelectionChange([]);\n }, [emitRowSelectionChange]);\n\n const selectedIdSet = useMemo(\n () => new Set(selectionModel),\n [selectionModel],\n );\n\n const selectedRowsInPage = useMemo(\n () => rows.filter(row => selectedIdSet.has(getRowId(row))) as T[],\n [rows, selectedIdSet, getRowId],\n );\n\n const bulkActionContext: BulkActionContext<T> = useMemo(\n () => ({\n selectedIds: selectionModel,\n selectedRowsInPage: selectedRowsInPage as T[],\n selectedCount: numSelected,\n clearSelection,\n }),\n [selectionModel, selectedRowsInPage, numSelected, clearSelection],\n );\n\n const hasBulkActions = !!bulkActions?.length;\n\n const handleSelectAllToggle = useCallback(\n (_event: ChangeEvent<HTMLInputElement>, checked: boolean) => {\n if (!onRowSelectionModelChange) return;\n\n if (checked) {\n const selectedIds = new Set(selectionModel);\n const nextSelection = [...selectionModel];\n pageRowIds.forEach(id => {\n if (!selectedIds.has(id)) nextSelection.push(id);\n });\n emitRowSelectionChange(nextSelection);\n return;\n }\n\n const nextSelection = selectionModel.filter(id => !pageRowIdSet.has(id));\n emitRowSelectionChange(nextSelection);\n },\n [\n onRowSelectionModelChange,\n selectionModel,\n pageRowIds,\n pageRowIdSet,\n emitRowSelectionChange,\n ],\n );\n\n return {\n selectionModel,\n numSelected,\n allSelected,\n someSelected,\n hasBulkActions,\n bulkActionContext,\n clearSelection,\n handleSelectAllToggle,\n };\n};\n\nexport type { UseSelectionStateProps, UseSelectionStateReturn };\nexport default useSelectionState;\n"]}
|