Closes #9423 https://github.com/user-attachments/assets/0d93f170-8c4f-43ff-a0ca-3d2874d44820
132 lines
4.8 KiB
TypeScript
132 lines
4.8 KiB
TypeScript
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;
|
|
};
|