This PR refactors the non-generic part around ObjectFilterDropdown which has been left in statu quo for months. It also removes unused components. Overall this PR is doing renaming and it re-organizes files into their relevant modules. This clarifies a lot what's at the intersection between object-filter-dropdown and views modules. This PR was originally about removing any remaining useEffect around ObjectFilterDropdown but there wasn't any. ## Details ### Removed unused files - GenericEntityFilterChip - SingleEntityObjectFilterDropdownButton (was used for the Task/Note standalone page which doesn't exist anymore) ### Re-organized non-generic components into ViewBarFilterDropdown - Use VIEW_BAR_FILTER_DROPDOWN_ID instead of OBJECT_FILTER_DROPDOWN_ID - Use FILTER_FIELD_LIST_ID for selectable list - Refactored ObjectFilterDropdownButton into a simple ViewBarFilterDropdown - Renamed MultipleFiltersDropdownContent to ViewBarFilterDropdownContent - Renamed MultipleFiltersButton to ViewBarFilterButton - Integrated MultipleFiltersDropdownButton to ViewBarFilterDropdown - Renamed AdvancedFilterButton to ViewBarDetailsAddFilterButton ### Tests Fixed storybook test for ViewBarFilterDrodpown
101 lines
3.8 KiB
TypeScript
101 lines
3.8 KiB
TypeScript
import { ReactNode } from 'react';
|
|
import { useParams } from 'react-router-dom';
|
|
|
|
import { ObjectSortDropdownButton } from '@/object-record/object-sort-dropdown/components/ObjectSortDropdownButton';
|
|
|
|
import { useIsPrefetchLoading } from '@/prefetch/hooks/useIsPrefetchLoading';
|
|
import { TopBar } from '@/ui/layout/top-bar/components/TopBar';
|
|
import { QueryParamsFiltersEffect } from '@/views/components/QueryParamsFiltersEffect';
|
|
import { ViewBarFilterEffect } from '@/views/components/ViewBarFilterEffect';
|
|
import { ViewBarPageTitle } from '@/views/components/ViewBarPageTitle';
|
|
import { ViewBarSkeletonLoader } from '@/views/components/ViewBarSkeletonLoader';
|
|
import { ViewPickerDropdown } from '@/views/view-picker/components/ViewPickerDropdown';
|
|
|
|
import { ViewsHotkeyScope } from '../types/ViewsHotkeyScope';
|
|
|
|
import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext';
|
|
import { FiltersHotkeyScope } from '@/object-record/object-filter-dropdown/types/FiltersHotkeyScope';
|
|
import { VIEW_SORT_DROPDOWN_ID } from '@/object-record/object-sort-dropdown/constants/ViewSortDropdownId';
|
|
import { ObjectSortDropdownComponentInstanceContext } from '@/object-record/object-sort-dropdown/states/context/ObjectSortDropdownComponentInstanceContext';
|
|
import { ViewBarFilterDropdown } from '@/views/components/ViewBarFilterDropdown';
|
|
import { ViewBarRecordFilterEffect } from '@/views/components/ViewBarRecordFilterEffect';
|
|
import { ViewBarRecordFilterGroupEffect } from '@/views/components/ViewBarRecordFilterGroupEffect';
|
|
import { ViewBarRecordSortEffect } from '@/views/components/ViewBarRecordSortEffect';
|
|
import { VIEW_BAR_FILTER_DROPDOWN_ID } from '@/views/constants/ViewBarFilterDropdownId';
|
|
import { UpdateViewButtonGroup } from './UpdateViewButtonGroup';
|
|
import { ViewBarDetails } from './ViewBarDetails';
|
|
|
|
export type ViewBarProps = {
|
|
viewBarId: string;
|
|
className?: string;
|
|
optionsDropdownButton: ReactNode;
|
|
};
|
|
|
|
export const ViewBar = ({
|
|
viewBarId,
|
|
className,
|
|
optionsDropdownButton,
|
|
}: ViewBarProps) => {
|
|
const { objectNamePlural } = useParams();
|
|
|
|
const filterDropdownId = 'view-filter';
|
|
|
|
const loading = useIsPrefetchLoading();
|
|
|
|
if (!objectNamePlural) {
|
|
return;
|
|
}
|
|
|
|
return (
|
|
<ObjectSortDropdownComponentInstanceContext.Provider
|
|
value={{ instanceId: VIEW_SORT_DROPDOWN_ID }}
|
|
>
|
|
<ViewBarRecordFilterGroupEffect />
|
|
<ViewBarRecordFilterEffect />
|
|
<ViewBarRecordSortEffect />
|
|
<ViewBarFilterEffect filterDropdownId={filterDropdownId} />
|
|
<QueryParamsFiltersEffect />
|
|
<ViewBarPageTitle />
|
|
<TopBar
|
|
className={className}
|
|
leftComponent={
|
|
loading ? <ViewBarSkeletonLoader /> : <ViewPickerDropdown />
|
|
}
|
|
rightComponent={
|
|
<>
|
|
<ObjectFilterDropdownComponentInstanceContext.Provider
|
|
value={{ instanceId: VIEW_BAR_FILTER_DROPDOWN_ID }}
|
|
>
|
|
<ViewBarFilterDropdown
|
|
hotkeyScope={{
|
|
scope: FiltersHotkeyScope.ObjectFilterDropdownButton,
|
|
}}
|
|
/>
|
|
</ObjectFilterDropdownComponentInstanceContext.Provider>
|
|
<ObjectSortDropdownButton
|
|
hotkeyScope={{
|
|
scope: FiltersHotkeyScope.ObjectSortDropdownButton,
|
|
}}
|
|
/>
|
|
{optionsDropdownButton}
|
|
</>
|
|
}
|
|
bottomComponent={
|
|
<ViewBarDetails
|
|
hasFilterButton
|
|
viewBarId={viewBarId}
|
|
objectNamePlural={objectNamePlural}
|
|
rightComponent={
|
|
<UpdateViewButtonGroup
|
|
hotkeyScope={{
|
|
scope: ViewsHotkeyScope.UpdateViewButtonDropdown,
|
|
}}
|
|
/>
|
|
}
|
|
/>
|
|
}
|
|
/>
|
|
</ObjectSortDropdownComponentInstanceContext.Provider>
|
|
);
|
|
};
|