diff --git a/frontend/src/component/project/Project/ExperimentalProjectFeatures/ExperimentalProjectTable/ExperimentalProjectTable.tsx b/frontend/src/component/project/Project/ExperimentalProjectFeatures/ExperimentalProjectTable/ExperimentalProjectTable.tsx
index 96b56f01ed..0e6a5f3d7d 100644
--- a/frontend/src/component/project/Project/ExperimentalProjectFeatures/ExperimentalProjectTable/ExperimentalProjectTable.tsx
+++ b/frontend/src/component/project/Project/ExperimentalProjectFeatures/ExperimentalProjectTable/ExperimentalProjectTable.tsx
@@ -127,6 +127,11 @@ export const ExperimentalProjectFeatureToggles = ({
stateConfig,
);
+ const filterState = {
+ tag: tableState.tag,
+ createdAt: tableState.createdAt,
+ };
+
const { features, total, refetch, loading, initialLoad } = useFeatureSearch(
mapValues(
{
@@ -429,7 +434,7 @@ export const ExperimentalProjectFeatureToggles = ({
>
({
- display: 'flex',
- padding: theme.spacing(2, 3),
- gap: theme.spacing(1),
- flexWrap: 'wrap',
-}));
-
-type FeatureTogglesListFilters = {
- tag?: FilterItemParams | null | undefined;
- createdAt?: FilterItemParams | null | undefined;
-};
-
-interface IFeatureToggleFiltersProps {
- state: FeatureTogglesListFilters;
- onChange: (value: FeatureTogglesListFilters) => void;
+interface IProjectOverviewFilters {
+ state: FilterItemParamHolder;
+ onChange: (value: FilterItemParamHolder) => void;
}
-export interface IFilterItem {
- label: string;
- options: {
- label: string;
- value: string;
- }[];
- filterKey: keyof FeatureTogglesListFilters;
- singularOperators: [string, ...string[]];
- pluralOperators: [string, ...string[]];
-}
-
-export const ProjectOverviewFilters: VFC = ({
+export const ProjectOverviewFilters: VFC = ({
state,
onChange,
}) => {
const { tags } = useAllTags();
-
const [availableFilters, setAvailableFilters] = useState([]);
- const [unselectedFilters, setUnselectedFilters] = useState([]);
- const [selectedFilters, setSelectedFilters] = useState([]);
-
- const deselectFilter = (label: string) => {
- const newSelectedFilters = selectedFilters.filter((f) => f !== label);
- const newUnselectedFilters = [...unselectedFilters, label].sort();
-
- setSelectedFilters(newSelectedFilters);
- setUnselectedFilters(newUnselectedFilters);
- };
-
- const mergeArraysKeepingOrder = (
- firstArray: string[],
- secondArray: string[],
- ): string[] => {
- const elementsSet = new Set(firstArray);
-
- secondArray.forEach((element) => {
- if (!elementsSet.has(element)) {
- firstArray.push(element);
- }
- });
-
- return firstArray;
- };
useEffect(() => {
const tagsOptions = (tags || []).map((tag) => ({
@@ -89,95 +37,22 @@ export const ProjectOverviewFilters: VFC = ({
'EXCLUDE_ALL',
],
},
+ {
+ label: 'Created date',
+ options: [],
+ filterKey: 'createdAt',
+ dateOperators: ['IS_ON_OR_AFTER', 'IS_BEFORE'],
+ },
];
setAvailableFilters(availableFilters);
}, [JSON.stringify(tags)]);
- useEffect(() => {
- const fieldsMapping = [
- {
- stateField: 'tag',
- label: 'Tags',
- },
- {
- stateField: 'createdAt',
- label: 'Created date',
- },
- ];
-
- const newSelectedFilters = fieldsMapping
- .filter((field) =>
- Boolean(
- state[field.stateField as keyof FeatureTogglesListFilters],
- ),
- )
- .map((field) => field.label);
- const newUnselectedFilters = fieldsMapping
- .filter(
- (field) =>
- !state[field.stateField as keyof FeatureTogglesListFilters],
- )
- .map((field) => field.label)
- .sort();
-
- setSelectedFilters(
- mergeArraysKeepingOrder(selectedFilters, newSelectedFilters),
- );
- setUnselectedFilters(newUnselectedFilters);
- }, [JSON.stringify(state)]);
-
- const hasAvailableFilters = unselectedFilters.length > 0;
return (
-
- {selectedFilters.map((selectedFilter) => {
- if (selectedFilter === 'Created date') {
- return (
- onChange({ createdAt: value })}
- operators={['IS_ON_OR_AFTER', 'IS_BEFORE']}
- onChipClose={() => deselectFilter('Created date')}
- />
- );
- }
-
- const filter = availableFilters.find(
- (filter) => filter.label === selectedFilter,
- );
-
- if (!filter) {
- return null;
- }
-
- return (
-
- onChange({ [filter.filterKey]: value })
- }
- singularOperators={filter.singularOperators}
- pluralOperators={filter.pluralOperators}
- onChipClose={() => deselectFilter(filter.label)}
- />
- );
- })}
-
-
- }
- />
-
+
);
};