keycloak-scim/src/components/table-toolbar/TableToolbar.tsx

82 lines
1.9 KiB
TypeScript
Raw Normal View History

import React, {
FormEvent,
Fragment,
MouseEventHandler,
ReactNode,
} from "react";
import {
Toolbar,
ToolbarContent,
ToolbarItem,
InputGroup,
TextInput,
Button,
ButtonVariant,
Divider,
} from "@patternfly/react-core";
import { SearchIcon } from "@patternfly/react-icons";
import { useTranslation } from "react-i18next";
type TableToolbarProps = {
toolbarItem?: ReactNode;
toolbarItemFooter?: ReactNode;
children: ReactNode;
searchTypeComponent?: ReactNode;
inputGroupName?: string;
inputGroupPlaceholder?: string;
inputGroupOnChange?: (
newInput: string,
event: FormEvent<HTMLInputElement>
) => void;
inputGroupOnClick?: MouseEventHandler;
};
export const TableToolbar = ({
toolbarItem,
toolbarItemFooter,
children,
searchTypeComponent,
inputGroupName,
inputGroupPlaceholder,
inputGroupOnChange,
inputGroupOnClick,
}: TableToolbarProps) => {
const { t } = useTranslation();
return (
<>
<Toolbar>
<ToolbarContent>
<Fragment>
{inputGroupName && (
<ToolbarItem>
<InputGroup>
{searchTypeComponent}
<TextInput
name={inputGroupName}
id={inputGroupName}
type="search"
aria-label={t("search")}
placeholder={inputGroupPlaceholder}
onChange={inputGroupOnChange}
/>
<Button
variant={ButtonVariant.control}
aria-label={t("search")}
onClick={inputGroupOnClick}
>
<SearchIcon />
</Button>
</InputGroup>
</ToolbarItem>
)}
</Fragment>
{toolbarItem}
</ToolbarContent>
</Toolbar>
<Divider />
{children}
<Toolbar>{toolbarItemFooter}</Toolbar>
</>
);
};