mirror of
https://github.com/lingble/twenty.git
synced 2025-10-29 11:52:28 +00:00
closes - #5755 --------- Co-authored-by: martmull <martmull@hotmail.fr> Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com> Co-authored-by: Charles Bochet <charles@twenty.com>
63 lines
2.4 KiB
TypeScript
63 lines
2.4 KiB
TypeScript
import { sortFavorites } from '@/favorites/utils/sortFavorites';
|
|
import { useGetObjectRecordIdentifierByNameSingular } from '@/object-metadata/hooks/useGetObjectRecordIdentifierByNameSingular';
|
|
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
|
|
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
|
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
|
import { usePrefetchedData } from '@/prefetch/hooks/usePrefetchedData';
|
|
import { PrefetchKey } from '@/prefetch/types/PrefetchKey';
|
|
import { View } from '@/views/types/View';
|
|
import { useMemo } from 'react';
|
|
import { useRecoilValue } from 'recoil';
|
|
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
|
import { usePrefetchedFavoritesData } from './usePrefetchedFavoritesData';
|
|
import { usePrefetchedFavoritesFoldersData } from './usePrefetchedFavoritesFoldersData';
|
|
|
|
export const useFavoritesByFolder = () => {
|
|
const { favorites } = usePrefetchedFavoritesData();
|
|
const { favoriteFolders } = usePrefetchedFavoritesFoldersData();
|
|
const { records: views } = usePrefetchedData<View>(PrefetchKey.AllViews);
|
|
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
|
|
const getObjectRecordIdentifierByNameSingular =
|
|
useGetObjectRecordIdentifierByNameSingular();
|
|
|
|
const { objectMetadataItem: favoriteObjectMetadataItem } =
|
|
useObjectMetadataItem({
|
|
objectNameSingular: CoreObjectNameSingular.Favorite,
|
|
});
|
|
|
|
const favoriteRelationFields = useMemo(
|
|
() =>
|
|
favoriteObjectMetadataItem.fields.filter(
|
|
(fieldMetadataItem) =>
|
|
fieldMetadataItem.type === FieldMetadataType.Relation &&
|
|
fieldMetadataItem.name !== 'workspaceMember' &&
|
|
fieldMetadataItem.name !== 'favoriteFolder',
|
|
),
|
|
[favoriteObjectMetadataItem.fields],
|
|
);
|
|
|
|
const favoritesByFolder = useMemo(() => {
|
|
return favoriteFolders.map((folder) => ({
|
|
folderId: folder.id,
|
|
folderName: folder.name,
|
|
favorites: sortFavorites(
|
|
favorites.filter((favorite) => favorite.favoriteFolderId === folder.id),
|
|
favoriteRelationFields,
|
|
getObjectRecordIdentifierByNameSingular,
|
|
true,
|
|
views,
|
|
objectMetadataItems,
|
|
),
|
|
}));
|
|
}, [
|
|
favoriteFolders,
|
|
favorites,
|
|
favoriteRelationFields,
|
|
getObjectRecordIdentifierByNameSingular,
|
|
views,
|
|
objectMetadataItems,
|
|
]);
|
|
|
|
return favoritesByFolder;
|
|
};
|