in src/components/Table/components/SettingsBar/index.tsx [51:167]
export default function SettingBar({
pageIndex,
pageSize,
pageSizes,
pageLength,
loading,
rowCount,
totalCount,
disablePagination,
disableSettings,
disableGroupBy = false,
gotoPage,
previousPage,
nextPage,
setPageSize,
styles,
columnsGroupingComponent,
columnsSelectorComponent,
canPreviousPage = false,
canNextPage = false,
}: SettingsBarProps) {
const [settingsAnchor, setSettingsAnchor] = React.useState<HTMLButtonElement | null>(null);
const handleSettingsClick = (event: React.MouseEvent<any, MouseEvent>) => {
setSettingsAnchor(event.currentTarget);
};
const handleSettingsClose = () => {
setSettingsAnchor(null);
};
const settingsOpen = Boolean(settingsAnchor);
const settingsId = settingsOpen ? 'settings-popover' : undefined;
const settingsPopoverProps = {
pageSize,
pageSizes,
settingsId,
loading,
settingsOpen,
disableGroupBy,
gotoPage,
settingsAnchor,
handleSettingsClose,
setPageSize,
styles,
columnsGroupingComponent,
columnsSelectorComponent,
};
if (!(disablePagination && disableSettings)) {
return (
<div>
{!disablePagination && (
<>
<IconButton
size="small"
aria-label="first page"
disabled={pageIndex === 0 || loading}
data-testid="first-page"
onClick={() => gotoPage?.(0)}
>
<FirstPage />
</IconButton>
<IconButton
size="small"
aria-label="previous page"
disabled={!canPreviousPage || loading}
data-testid="previous-page"
onClick={previousPage}
>
<NavigateBefore />
</IconButton>
<span>{`${pageIndex * pageSize + 1}-${
pageIndex * pageSize + pageLength
} of ${totalCount}`}</span>
<IconButton
aria-label="next page"
size="small"
disabled={!canNextPage || loading}
data-testid="next-page"
onClick={nextPage}
>
<NavigateNext />
</IconButton>
<IconButton
aria-label="last page"
size="small"
data-testid="last-page"
disabled={pageIndex! * pageSize + pageLength >= rowCount || loading}
onClick={() => gotoPage?.(Math.ceil(rowCount / pageSize) - 1)}
>
<LastPage />
</IconButton>
</>
)}
{!disableSettings && (
<>
<IconButton
size="small"
aria-label="settings"
className={styles.leftSpace}
aria-describedby={settingsId}
disabled={loading}
data-testid="settings"
onClick={handleSettingsClick}
>
<SettingsOutlined fontSize="small" />
</IconButton>
<SettingsPopover {...settingsPopoverProps} />
</>
)}
</div>
);
}
return null;
}