From 8c9afb91d3d4bbb97880df1abd74579e667e5482 Mon Sep 17 00:00:00 2001 From: Dominik Henneke Date: Thu, 8 Oct 2020 16:49:27 +0200 Subject: [PATCH] fix: make catalog filter work again --- packages/core/src/components/Table/Table.tsx | 27 +++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/packages/core/src/components/Table/Table.tsx b/packages/core/src/components/Table/Table.tsx index a92ce7f15e..5d0b7d8344 100644 --- a/packages/core/src/components/Table/Table.tsx +++ b/packages/core/src/components/Table/Table.tsx @@ -44,7 +44,7 @@ import MTable, { MTableToolbar, Options, } from 'material-table'; -import React, { forwardRef, useState } from 'react'; +import React, { forwardRef, useCallback, useEffect, useState } from 'react'; import { Filters, SelectedFilters } from './Filters'; const tableIcons = { @@ -206,6 +206,7 @@ export function Table({ const [filtersOpen, toggleFilters] = useState(false); const [selectedFiltersLength, setSelectedFiltersLength] = useState(0); const [tableData, setTableData] = useState(data as any[]); + const [selectedFilters, setSelectedFilters] = useState(); const MTColumns = convertColumns(columns, theme); @@ -215,13 +216,21 @@ export function Table({ }, }; - const getFieldByTitle = (titleValue: string | keyof T) => - columns.find(el => el.title === titleValue)?.field; + const getFieldByTitle = useCallback( + (titleValue: string | keyof T) => + columns.find(el => el.title === titleValue)?.field, + [columns], + ); + + useEffect(() => { + if (!selectedFilters) { + setTableData(data as any[]); + return; + } - const onChangeFilters = (selectedFilters: SelectedFilters) => { const selectedFiltersArray = Object.values(selectedFilters); if (selectedFiltersArray.flat().length) { - const newData = (props.data as any[]).filter( + const newData = (data as any[]).filter( el => !!Object.entries(selectedFilters) .filter(([, value]) => !!value.length) @@ -234,10 +243,10 @@ export function Table({ ); setTableData(newData); } else { - setTableData(props.data as any[]); + setTableData(data as any[]); } setSelectedFiltersLength(selectedFiltersArray.flat().length); - }; + }, [data, selectedFilters, getFieldByTitle]); const constructFilters = (filterConfig: TableFilter[], dataValue: any[]) => { const extractColumnData = (column: string | keyof T) => @@ -269,8 +278,8 @@ export function Table({
{filtersOpen && filters?.length && ( )}