Refactor/finish activities optimistic (#4106)
* Finished optimistic effects * Fixed tests * Added unit test on useActivityConnectionUtils to prepare for refactor * Fixed console.log
This commit is contained in:
+81
@@ -0,0 +1,81 @@
|
||||
import { isNonEmptyArray } from '@sniptt/guards';
|
||||
|
||||
import { ActivityTarget } from '@/activities/types/ActivityTarget';
|
||||
import { ActivityTargetableObject } from '@/activities/types/ActivityTargetableEntity';
|
||||
import { getActivityTargetsFilter } from '@/activities/utils/getActivityTargetsFilter';
|
||||
import { useObjectMetadataItemOnly } from '@/object-metadata/hooks/useObjectMetadataItemOnly';
|
||||
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
||||
import { useReadFindManyRecordsQueryInCache } from '@/object-record/cache/hooks/useReadFindManyRecordsQueryInCache';
|
||||
import { useUpsertFindManyRecordsQueryInCache } from '@/object-record/cache/hooks/useUpsertFindManyRecordsQueryInCache';
|
||||
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
|
||||
|
||||
// TODO: create a generic hook from this
|
||||
export const useInjectIntoActivityTargetsQueries = () => {
|
||||
const { objectMetadataItem: objectMetadataItemActivityTarget } =
|
||||
useObjectMetadataItemOnly({
|
||||
objectNameSingular: CoreObjectNameSingular.ActivityTarget,
|
||||
});
|
||||
|
||||
const {
|
||||
readFindManyRecordsQueryInCache: readFindManyActivityTargetsQueryInCache,
|
||||
} = useReadFindManyRecordsQueryInCache({
|
||||
objectMetadataItem: objectMetadataItemActivityTarget,
|
||||
});
|
||||
|
||||
const {
|
||||
upsertFindManyRecordsQueryInCache:
|
||||
overwriteFindManyActivityTargetsQueryInCache,
|
||||
} = useUpsertFindManyRecordsQueryInCache({
|
||||
objectMetadataItem: objectMetadataItemActivityTarget,
|
||||
});
|
||||
|
||||
const injectActivityTargetsQueries = ({
|
||||
activityTargetsToInject,
|
||||
targetableObjects,
|
||||
}: {
|
||||
activityTargetsToInject: ActivityTarget[];
|
||||
targetableObjects: ActivityTargetableObject[];
|
||||
}) => {
|
||||
const hasActivityTargets = isNonEmptyArray(targetableObjects);
|
||||
|
||||
if (!hasActivityTargets) {
|
||||
return;
|
||||
}
|
||||
|
||||
const findManyActivitiyTargetsQueryFilter = getActivityTargetsFilter({
|
||||
targetableObjects,
|
||||
});
|
||||
|
||||
const findManyActivitiyTargetsQueryVariables = {
|
||||
filter: findManyActivitiyTargetsQueryFilter,
|
||||
};
|
||||
|
||||
const existingActivityTargetsWithMaybeDuplicates =
|
||||
readFindManyActivityTargetsQueryInCache({
|
||||
queryVariables: findManyActivitiyTargetsQueryVariables,
|
||||
});
|
||||
|
||||
const existingActivityTargetsWithoutDuplicates: ObjectRecord[] =
|
||||
existingActivityTargetsWithMaybeDuplicates.filter(
|
||||
(existingActivityTarget) =>
|
||||
!activityTargetsToInject.some(
|
||||
(activityTargetToInject) =>
|
||||
activityTargetToInject.id === existingActivityTarget.id,
|
||||
),
|
||||
);
|
||||
|
||||
const newActivityTargets = [
|
||||
...existingActivityTargetsWithoutDuplicates,
|
||||
...activityTargetsToInject,
|
||||
];
|
||||
|
||||
overwriteFindManyActivityTargetsQueryInCache({
|
||||
objectRecordsToOverwrite: newActivityTargets,
|
||||
queryVariables: findManyActivitiyTargetsQueryVariables,
|
||||
});
|
||||
};
|
||||
|
||||
return {
|
||||
injectActivityTargetsQueries,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user