import { useSetRecoilState } from 'recoil'; import { activityTargetableEntityArrayState } from '@/activities/states/activityTargetableEntityArrayState'; import { isUpsertingActivityInDBState } from '@/activities/states/isCreatingActivityInDBState'; import { viewableRecordIdState } from '@/object-record/record-right-drawer/states/viewableRecordIdState'; import { useRightDrawer } from '@/ui/layout/right-drawer/hooks/useRightDrawer'; import { RightDrawerHotkeyScope } from '@/ui/layout/right-drawer/types/RightDrawerHotkeyScope'; import { RightDrawerPages } from '@/ui/layout/right-drawer/types/RightDrawerPages'; import { useSetHotkeyScope } from '@/ui/utilities/hotkey/hooks/useSetHotkeyScope'; import { WorkspaceMember } from '@/workspace-member/types/WorkspaceMember'; 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 { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord'; import { isNewViewableRecordLoadingState } from '@/object-record/record-right-drawer/states/isNewViewableRecordLoading'; import { viewableRecordNameSingularState } from '@/object-record/record-right-drawer/states/viewableRecordNameSingularState'; import { AppHotkeyScope } from '@/ui/utilities/hotkey/types/AppHotkeyScope'; import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; import { FeatureFlagKey } from '~/generated-metadata/graphql'; import { ActivityTargetableObject } from '../types/ActivityTargetableEntity'; export const useOpenCreateActivityDrawer = ({ activityObjectNameSingular, }: { activityObjectNameSingular: | CoreObjectNameSingular.Note | CoreObjectNameSingular.Task; }) => { const { openRightDrawer } = useRightDrawer(); const setHotkeyScope = useSetHotkeyScope(); const { createOneRecord: createOneActivity } = useCreateOneRecord< (Task | Note) & { position: 'first' | 'last' } >({ objectNameSingular: activityObjectNameSingular, }); const { createOneRecord: createOneActivityTarget } = useCreateOneRecord< TaskTarget | NoteTarget >({ objectNameSingular: activityObjectNameSingular === CoreObjectNameSingular.Task ? CoreObjectNameSingular.TaskTarget : CoreObjectNameSingular.NoteTarget, shouldMatchRootQueryFilter: true, }); const setActivityTargetableEntityArray = useSetRecoilState( activityTargetableEntityArrayState, ); const setViewableRecordId = useSetRecoilState(viewableRecordIdState); const setViewableRecordNameSingular = useSetRecoilState( viewableRecordNameSingularState, ); const setIsNewViewableRecordLoading = useSetRecoilState( isNewViewableRecordLoadingState, ); const setIsUpsertingActivityInDB = useSetRecoilState( isUpsertingActivityInDBState, ); const isCommandMenuV2Enabled = useIsFeatureEnabled( FeatureFlagKey.IsCommandMenuV2Enabled, ); const openCreateActivityDrawer = async ({ targetableObjects, customAssignee, }: { targetableObjects: ActivityTargetableObject[]; customAssignee?: WorkspaceMember; }) => { setIsNewViewableRecordLoading(true); openRightDrawer(RightDrawerPages.ViewRecord); setViewableRecordId(null); setViewableRecordNameSingular(activityObjectNameSingular); const activity = await createOneActivity({ assigneeId: customAssignee?.id, position: 'last', }); if (targetableObjects.length > 0) { const targetableObjectRelationIdName = `${targetableObjects[0].targetObjectNameSingular}Id`; await createOneActivityTarget({ taskId: activityObjectNameSingular === CoreObjectNameSingular.Task ? activity.id : undefined, noteId: activityObjectNameSingular === CoreObjectNameSingular.Note ? activity.id : undefined, [targetableObjectRelationIdName]: targetableObjects[0].id, }); setActivityTargetableEntityArray(targetableObjects); } else { await createOneActivityTarget({ taskId: activityObjectNameSingular === CoreObjectNameSingular.Task ? activity.id : undefined, noteId: activityObjectNameSingular === CoreObjectNameSingular.Note ? activity.id : undefined, }); setActivityTargetableEntityArray([]); } if (isCommandMenuV2Enabled) { setHotkeyScope(AppHotkeyScope.CommandMenuOpen, { goto: false }); } else { setHotkeyScope(RightDrawerHotkeyScope.RightDrawer, { goto: false }); } setViewableRecordId(activity.id); setIsUpsertingActivityInDB(false); setIsNewViewableRecordLoading(false); }; return openCreateActivityDrawer; };