Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NEO-2435: Global Custom Filter improvements #560

Merged
merged 14 commits into from
Oct 10, 2024
44 changes: 39 additions & 5 deletions src/components/Table/Table.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ const logger = log.getLogger("TableStories");
logger.disableAll();

import "./TableStories_shim.css";
import type { SortType } from "./types";
import type { ColumnFilter, SortType } from "./types";

export default {
title: "Components/Table",
Expand Down Expand Up @@ -863,22 +863,56 @@ export const CustomBasicTableFilterDrawer = () => {
const closeFilterDrawer = () => {
setOpenColumnsFilterDrawer(false);
};

const [filtersToApply, setFiltersToApply] = useState<ColumnFilter[]>([]);
enrique-prado marked this conversation as resolved.
Show resolved Hide resolved

const [nameFilter, setNameFilter] = useState<string | null>(null);
const [otherFilter, setOtherFilter] = useState<string | null>(null);

const handleApply = () => {
const filters: ColumnFilter[] = [
{
id: "name",
value: nameFilter || null,
},
{
id: "other",
value: otherFilter || null,
},
];
setFiltersToApply(filters);
closeFilterDrawer();
};
enrique-prado marked this conversation as resolved.
Show resolved Hide resolved

return (
<>
<Table
columns={FilledFields.columns}
handleShowColumnsFilter={handleShowColumnsFilter}
allowToggleColumnVisibility
data={[...FilledFields.data]}
data={FilledFields.data}
allFilters={filtersToApply}
/>

<TableFilterDrawer
title="Custom Table Filter Drawer"
open={openColumnsFilterDrawer}
handleCancel={closeFilterDrawer}
handleApply={handleApply}
>
<p>Custom content goes here</p>
<br />
<p> 'Cancel' and 'Apply' buttons are built-in</p>
<TextInput
clearable
label="Name"
type="text"
onChange={(e) => setNameFilter(e.currentTarget.value)}
/>

enrique-prado marked this conversation as resolved.
Show resolved Hide resolved
<TextInput
clearable
label="Other"
type="text"
onChange={(e) => setOtherFilter(e.currentTarget.value)}
/>
enrique-prado marked this conversation as resolved.
Show resolved Hide resolved
</TableFilterDrawer>
</>
);
Expand Down
14 changes: 13 additions & 1 deletion src/components/Table/Table.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ export const Table = <T extends Record<string, any>>({
handleShowColumnsFilter,
handleRowToggled,
handlePageChange = () => null,
allFilters = [],
readonly = false,
rowHeight = "large",
selectableRows = "none",
Expand Down Expand Up @@ -196,14 +197,25 @@ export const Table = <T extends Record<string, any>>({
const {
rows,
getTableProps,
state: { pageIndex, pageSize },
state: { pageIndex, pageSize, filters },
gotoPage,
setPageSize,
prepareRow,
pageCount,
toggleAllRowsSelected,
setAllFilters,
} = instance;

// biome-ignore lint/correctness/useExhaustiveDependencies: setAllFilters and filters don't need to be checked for perf reasons.
useEffect(() => {
logger.info(allFilters, filters);

if (allFilters.length > 0) {
// @ts-expect-error
setAllFilters(allFilters);
}
}, [allFilters]);
enrique-prado marked this conversation as resolved.
Show resolved Hide resolved

const handleSearchWrapper = useMemo(() => {
if (handleSearch) {
return (searchString: string, pageSize: number) => {
Expand Down
4 changes: 4 additions & 0 deletions src/components/Table/types/TableTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,9 @@ export interface IFilterContext<T extends AnyRecord = AnyRecord> {
export type RowHeight = "compact" | "medium" | "large";
export type SortType = "asc" | "desc" | "unsorted";

// biome-ignore lint/suspicious/noExplicitAny: value should be any
export type ColumnFilter = { id: string | null; value: any };

export type TableProps<T extends AnyRecord> = {
caption?: string;
id?: string;
Expand All @@ -87,6 +90,7 @@ export type TableProps<T extends AnyRecord> = {
pushPaginationDown?: boolean;
draggableRows?: boolean;
handlePageChange?: (pageIndex: number, pageSize: number) => void;
allFilters?: ColumnFilter[];
itemsPerPageOptions?: number[];
initialStatePageIndex?: number;
initialStatePageSize?: number;
Expand Down
Loading