Add relations to notes/tasks list view (#6971)
<img width="664" alt="Screenshot 2024-09-10 at 17 00 11" src="https://github.com/user-attachments/assets/37132805-ff67-4d28-b664-b03da680e166"> --------- Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
This commit is contained in:
@ -7,7 +7,6 @@ import { RecoilRoot, useSetRecoilState } from 'recoil';
|
||||
import { useActivityTargetObjectRecords } from '@/activities/hooks/useActivityTargetObjectRecords';
|
||||
import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
||||
import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
|
||||
import { SnackBarProviderScope } from '@/ui/feedback/snack-bar-manager/scopes/SnackBarProviderScope';
|
||||
import { JestObjectMetadataItemSetter } from '~/testing/jest/JestObjectMetadataItemSetter';
|
||||
@ -128,10 +127,8 @@ describe('useActivityTargetObjectRecords', () => {
|
||||
objectMetadataItemsState,
|
||||
);
|
||||
|
||||
const { activityTargetObjectRecords } = useActivityTargetObjectRecords(
|
||||
task,
|
||||
CoreObjectNameSingular.Task,
|
||||
);
|
||||
const { activityTargetObjectRecords } =
|
||||
useActivityTargetObjectRecords(task);
|
||||
|
||||
return {
|
||||
activityTargetObjectRecords,
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
import { useApolloClient } from '@apollo/client';
|
||||
import { useRecoilValue } from 'recoil';
|
||||
import { Nullable } from 'twenty-ui';
|
||||
|
||||
@ -7,46 +6,37 @@ import { Note } from '@/activities/types/Note';
|
||||
import { NoteTarget } from '@/activities/types/NoteTarget';
|
||||
import { Task } from '@/activities/types/Task';
|
||||
import { TaskTarget } from '@/activities/types/TaskTarget';
|
||||
import { getJoinObjectNameSingular } from '@/activities/utils/getJoinObjectNameSingular';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
||||
import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
export const useActivityTargetObjectRecords = (
|
||||
activity: Task | Note,
|
||||
objectNameSingular: CoreObjectNameSingular,
|
||||
activity?: Task | Note,
|
||||
activityTargets?: NoteTarget[] | TaskTarget[],
|
||||
) => {
|
||||
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
|
||||
|
||||
const activityTargets =
|
||||
'noteTargets' in activity && activity.noteTargets
|
||||
if (!isDefined(activity) && !isDefined(activityTargets)) {
|
||||
return { activityTargetObjectRecords: [] };
|
||||
}
|
||||
|
||||
const targets = activityTargets
|
||||
? activityTargets
|
||||
: activity && 'noteTargets' in activity && activity.noteTargets
|
||||
? activity.noteTargets
|
||||
: 'taskTargets' in activity && activity.taskTargets
|
||||
: activity && 'taskTargets' in activity && activity.taskTargets
|
||||
? activity.taskTargets
|
||||
: [];
|
||||
|
||||
const getRecordFromCache = useGetRecordFromCache({
|
||||
objectNameSingular: getJoinObjectNameSingular(objectNameSingular),
|
||||
});
|
||||
|
||||
const apolloClient = useApolloClient();
|
||||
|
||||
const activityTargetObjectRecords = activityTargets
|
||||
const activityTargetObjectRecords = targets
|
||||
.map<Nullable<ActivityTargetWithTargetRecord>>((activityTarget) => {
|
||||
const activityTargetFromCache = getRecordFromCache<
|
||||
NoteTarget | TaskTarget
|
||||
>(activityTarget.id, apolloClient.cache);
|
||||
|
||||
if (!isDefined(activityTargetFromCache)) {
|
||||
throw new Error(
|
||||
`Cannot find activity target ${activityTarget.id} in cache, this shouldn't happen.`,
|
||||
);
|
||||
if (!isDefined(activityTarget)) {
|
||||
throw new Error(`Cannot find activity target`);
|
||||
}
|
||||
|
||||
const correspondingObjectMetadataItem = objectMetadataItems.find(
|
||||
(objectMetadataItem) =>
|
||||
isDefined(activityTargetFromCache[objectMetadataItem.nameSingular]) &&
|
||||
isDefined(activityTarget[objectMetadataItem.nameSingular]) &&
|
||||
![CoreObjectNameSingular.Note, CoreObjectNameSingular.Task].includes(
|
||||
objectMetadataItem.nameSingular as CoreObjectNameSingular,
|
||||
),
|
||||
@ -57,7 +47,7 @@ export const useActivityTargetObjectRecords = (
|
||||
}
|
||||
|
||||
const targetObjectRecord =
|
||||
activityTargetFromCache[correspondingObjectMetadataItem.nameSingular];
|
||||
activityTarget[correspondingObjectMetadataItem.nameSingular];
|
||||
|
||||
if (!targetObjectRecord) {
|
||||
throw new Error(
|
||||
@ -66,7 +56,7 @@ export const useActivityTargetObjectRecords = (
|
||||
}
|
||||
|
||||
return {
|
||||
activityTarget: activityTargetFromCache ?? activityTarget,
|
||||
activityTarget,
|
||||
targetObject: targetObjectRecord ?? undefined,
|
||||
targetObjectMetadataItem: correspondingObjectMetadataItem,
|
||||
};
|
||||
|
||||
@ -35,10 +35,8 @@ export const ActivityTargetsInlineCell = ({
|
||||
readonly,
|
||||
activityObjectNameSingular,
|
||||
}: ActivityTargetsInlineCellProps) => {
|
||||
const { activityTargetObjectRecords } = useActivityTargetObjectRecords(
|
||||
activity,
|
||||
activityObjectNameSingular,
|
||||
);
|
||||
const { activityTargetObjectRecords } =
|
||||
useActivityTargetObjectRecords(activity);
|
||||
|
||||
const { closeInlineCell } = useInlineCell();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user