Feat/record optimistic effect (#3076)

* WIP

* WIP

* POC working on hard coded completedAt field

* Finished isRecordMatchingFilter, mock of pg_graphql filtering mechanism

* Fixed and cleaned

* Unregister unused optimistic effects

* Fix lint

* Fixes from review

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
Lucas Bordeau
2023-12-20 20:31:48 +01:00
committed by GitHub
parent a5f28b4395
commit 687c9131f4
37 changed files with 2309 additions and 233 deletions

View File

@ -9,7 +9,6 @@ import { Favorite } from '@/favorites/types/Favorite';
import { mapFavorites } from '@/favorites/utils/mapFavorites';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { useObjectNameSingularFromPlural } from '@/object-metadata/hooks/useObjectNameSingularFromPlural';
import { getRecordOptimisticEffectDefinition } from '@/object-record/graphql/optimistic-effect-definition/getRecordOptimisticEffectDefinition';
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
import { PaginatedRecordTypeResults } from '@/object-record/types/PaginatedRecordTypeResults';
import { isDeeplyEqual } from '~/utils/isDeeplyEqual';
@ -29,15 +28,13 @@ export const useFavorites = ({
updateOneRecordMutation: updateOneFavoriteMutation,
createOneRecordMutation: createOneFavoriteMutation,
deleteOneRecordMutation: deleteOneFavoriteMutation,
objectMetadataItem: favoriteObjectMetadataItem,
} = useObjectMetadataItem({
objectNameSingular: 'favorite',
});
const { registerOptimisticEffect, triggerOptimisticEffects } =
useOptimisticEffect({
objectNameSingular: 'favorite',
});
const { triggerOptimisticEffects } = useOptimisticEffect({
objectNameSingular: 'favorite',
});
const { performOptimisticEvict } = useOptimisticEvict();
const { objectNameSingular } = useObjectNameSingularFromPlural({
@ -65,19 +62,8 @@ export const useFavorites = ({
if (!isDeeplyEqual(favorites, queriedFavorites)) {
set(favoritesState, queriedFavorites);
}
if (!favoriteObjectMetadataItem) {
return;
}
registerOptimisticEffect({
variables: { filter: {}, orderBy: {} },
definition: getRecordOptimisticEffectDefinition({
objectMetadataItem: favoriteObjectMetadataItem,
}),
});
},
[favoriteObjectMetadataItem, registerOptimisticEffect],
[],
),
});
@ -102,7 +88,10 @@ export const useFavorites = ({
},
});
triggerOptimisticEffects(`FavoriteEdge`, result.data[`createFavorite`]);
triggerOptimisticEffects({
typename: `FavoriteEdge`,
createdRecords: [result.data[`createFavorite`]],
});
const createdFavorite = result?.data?.createFavorite;