export default function SettingBar()

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;
}