Fix post merge revamp navigation bar (#6297)

Closes #6285 

@charlesBochet Also added some more utils for our component state v2.
This commit is contained in:
Lucas Bordeau
2024-07-19 14:24:47 +02:00
committed by GitHub
parent 67e2d5c73a
commit 1b0759ef2f
31 changed files with 1197 additions and 230 deletions

View File

@ -0,0 +1,32 @@
import { useActiveFieldMetadataItems } from '@/object-metadata/hooks/useActiveFieldMetadataItems';
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { useViewOrDefaultViewFromPrefetchedViews } from '@/views/hooks/useViewOrDefaultViewFromPrefetchedViews';
import { getQueryVariablesFromView } from '@/views/utils/getQueryVariablesFromView';
export const useQueryVariablesFromActiveFieldsOfViewOrDefaultView = ({
objectMetadataItem,
viewId,
}: {
objectMetadataItem: ObjectMetadataItem;
viewId: string | null | undefined;
}) => {
const { view } = useViewOrDefaultViewFromPrefetchedViews({
objectMetadataItemId: objectMetadataItem.id,
viewId,
});
const { activeFieldMetadataItems } = useActiveFieldMetadataItems({
objectMetadataItem,
});
const { filter, orderBy } = getQueryVariablesFromView({
fieldMetadataItems: activeFieldMetadataItems,
objectMetadataItem,
view,
});
return {
filter,
orderBy,
};
};

View File

@ -0,0 +1,24 @@
import { usePrefetchedData } from '@/prefetch/hooks/usePrefetchedData';
import { PrefetchKey } from '@/prefetch/types/PrefetchKey';
import { View } from '@/views/types/View';
import { useMemo } from 'react';
export const useViewOrDefaultViewFromPrefetchedViews = ({
objectMetadataItemId,
viewId,
}: {
objectMetadataItemId: string;
viewId: string | null | undefined;
}) => {
const { records: views } = usePrefetchedData<View>(PrefetchKey.AllViews);
const view = useMemo(() => {
return views.find(
(view: View) =>
(view.key === 'INDEX' || view?.id === viewId) &&
view?.objectMetadataId === objectMetadataItemId,
);
}, [viewId, views, objectMetadataItemId]);
return { view };
};

View File

@ -0,0 +1,52 @@
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { formatFieldMetadataItemsAsFilterDefinitions } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
import { formatFieldMetadataItemsAsSortDefinitions } from '@/object-metadata/utils/formatFieldMetadataItemsAsSortDefinitions';
import { turnSortsIntoOrderBy } from '@/object-record/object-sort-dropdown/utils/turnSortsIntoOrderBy';
import { turnObjectDropdownFilterIntoQueryFilter } from '@/object-record/record-filter/utils/turnObjectDropdownFilterIntoQueryFilter';
import { View } from '@/views/types/View';
import { mapViewFiltersToFilters } from '@/views/utils/mapViewFiltersToFilters';
import { mapViewSortsToSorts } from '@/views/utils/mapViewSortsToSorts';
import { isDefined } from '~/utils/isDefined';
export const getQueryVariablesFromView = ({
view,
fieldMetadataItems,
objectMetadataItem,
}: {
view: View | null | undefined;
fieldMetadataItems: FieldMetadataItem[];
objectMetadataItem: ObjectMetadataItem;
}) => {
if (!isDefined(view)) {
return {
filter: {},
orderBy: [],
};
}
const { viewFilters, viewSorts } = view;
const filterDefinitions = formatFieldMetadataItemsAsFilterDefinitions({
fields: fieldMetadataItems,
});
const sortDefinitions = formatFieldMetadataItemsAsSortDefinitions({
fields: fieldMetadataItems,
});
const filter = turnObjectDropdownFilterIntoQueryFilter(
mapViewFiltersToFilters(viewFilters, filterDefinitions),
objectMetadataItem?.fields ?? [],
);
const orderBy = turnSortsIntoOrderBy(
objectMetadataItem,
mapViewSortsToSorts(viewSorts, sortDefinitions),
);
return {
filter,
orderBy,
};
};