diff --git a/api-services/mutations/tasks/task_mutations.ts b/api-services/mutations/tasks/task_mutations.ts index 4ec3d09c8..ca530c83c 100644 --- a/api-services/mutations/tasks/task_mutations.ts +++ b/api-services/mutations/tasks/task_mutations.ts @@ -4,21 +4,15 @@ import { AssignTaskRequest, CreateSubtaskRequest, CreateTaskRequest, - DeleteSubtaskRequest, + DeleteSubtaskRequest, DeleteTaskRequest, GetTaskRequest, GetTasksByPatientRequest, UnassignTaskRequest, UpdateSubtaskRequest, UpdateTaskRequest } from '@helpwave/proto-ts/services/tasks_svc/v1/task_svc_pb' -import type { - CreateSubTaskDTO, - SubTaskDTO, - TaskDTO -} from '../../types/tasks/task' -import { - emptyTask -} from '../../types/tasks/task' +import type { CreateSubTaskDTO, SubTaskDTO, TaskDTO } from '../../types/tasks/task' +import { emptyTask } from '../../types/tasks/task' import { QueryKeys } from '../query_keys' import { APIServices } from '../../services' import { getAuthenticatedGrpcMetadata } from '../../authentication/grpc_metadata' @@ -107,12 +101,19 @@ export const useTaskCreateMutation = (callback: (task: TaskDTO) => void = noop, return useMutation({ mutationFn: async (task: TaskDTO) => { const req = new CreateTaskRequest() - req.setName(task.name) - req.setPatientId(patientId) - req.setDescription(task.notes) - req.setPublic(task.isPublicVisible) - req.setInitialStatus(GRPCConverter.taskStatusToGrpc(task.status)) - req.setDueAt(task.dueDate ? GRPCConverter.dateToTimestamp(task.dueDate) : undefined) + .setName(task.name) + .setPatientId(patientId) + .setDescription(task.notes) + .setPublic(task.isPublicVisible) + .setInitialStatus(GRPCConverter.taskStatusToGrpc(task.status)) + .setDueAt(task.dueDate ? GRPCConverter.dateToTimestamp(task.dueDate) : undefined) + .setSubtasksList(task.subtasks.map(subtask => (new CreateTaskRequest.SubTask()) + .setName(subtask.name) + .setDone(subtask.isDone))) + + if(task.assignee) { + req.setAssignedUserId(task.assignee) + } const res = await APIServices.task.createTask(req, getAuthenticatedGrpcMetadata()) const newTask: TaskDTO = { @@ -154,25 +155,23 @@ export const useTaskUpdateMutation = (callback: () => void = noop) => { }) } -/* TODO re-allow when backen implements this export const useTaskDeleteMutation = (callback: () => void = noop) => { const queryClient = useQueryClient() return useMutation({ mutationFn: async (taskId: string) => { const req = new DeleteTaskRequest() req.setId(taskId) - await APIServices.task.(req, getAuthenticatedGrpcMetadata()) + await APIServices.task.deleteTask(req, getAuthenticatedGrpcMetadata()) callback() return req.toObject() }, onSuccess: () => { - queryClient.refetchQueries([QueryKeys.tasks]).then() - queryClient.refetchQueries([QueryKeys.rooms, roomOverviewsQueryKey]).then() + queryClient.refetchQueries([QueryKeys.tasks]).catch(console.error) + queryClient.refetchQueries([QueryKeys.rooms, roomOverviewsQueryKey]).catch(console.error) } }) } - */ // TODO: taskId: string | undefined => taskId: string -> A taskId is always required to create a SubTask export const useSubTaskAddMutation = (taskId: string | undefined, callback: (subtask: SubTaskDTO) => void = noop) => { @@ -252,9 +251,9 @@ export const useAssignTaskMutation = (callback: () => void = noop) => { const queryClient = useQueryClient() return useMutation({ mutationFn: async ({ - taskId, - userId - }: TaskAssignmentRequestProps) => { + taskId, + userId + }: TaskAssignmentRequestProps) => { const req = new AssignTaskRequest() req.setTaskId(taskId) req.setUserId(userId) @@ -277,9 +276,9 @@ export const useUnassignTaskMutation = (callback: () => void = noop) => { const queryClient = useQueryClient() return useMutation({ mutationFn: async ({ - taskId, - userId - }: TaskAssignmentRequestProps) => { + taskId, + userId + }: TaskAssignmentRequestProps) => { const req = new UnassignTaskRequest() req.setTaskId(taskId) req.setUserId(userId) diff --git a/tasks/components/modals/TaskDetailModal.tsx b/tasks/components/modals/TaskDetailModal.tsx index b60611ed4..4c91aba1d 100644 --- a/tasks/components/modals/TaskDetailModal.tsx +++ b/tasks/components/modals/TaskDetailModal.tsx @@ -27,8 +27,8 @@ import { } from '@helpwave/api-services/mutations/tasks/task_template_mutations' import { useAssignTaskMutation, - useSubTaskAddMutation, useTaskCreateMutation, + useTaskDeleteMutation, useTaskQuery, useTaskUpdateMutation, useUnassignTaskMutation @@ -119,14 +119,14 @@ function formatDateForDatetimeLocal(date: Date): string { type TaskDetailViewSidebarProps = { task: TaskDTO, - setTask: (task: TaskDTO) => void, + onChange: (task: TaskDTO) => void, isCreating: boolean, } const TaskDetailViewSidebar = ({ overwriteTranslation, task, - setTask, + onChange, isCreating }: PropsForTranslation) => { const translation = useTranslation(defaultTaskDetailViewTranslation, overwriteTranslation) @@ -140,7 +140,7 @@ const TaskDetailViewSidebar = ({ const unassignTaskToUserMutation = useUnassignTaskMutation() const updateTaskLocallyAndExternally = (task: TaskDTO) => { - setTask(task) + onChange(task) if (!isCreating) { updateTaskMutation.mutate(task) } @@ -157,7 +157,7 @@ const TaskDetailViewSidebar = ({ ...task, isPublicVisible: true } - setTask(newTask) + onChange(newTask) updateTaskLocallyAndExternally(newTask) }} headerProps={{ @@ -172,7 +172,7 @@ const TaskDetailViewSidebar = ({ organizationId={organization?.id ?? ''} value={task.assignee} onChange={(assignee) => { - setTask({ ...task, assignee }) + onChange({ ...task, assignee }) if (!isCreating) { assignTaskToUserMutation.mutate({ taskId: task.id, userId: assignee }) } @@ -180,7 +180,7 @@ const TaskDetailViewSidebar = ({ /> { - setTask({ ...task, assignee: undefined }) + onChange({ ...task, assignee: undefined }) if (!isCreating && task.assignee) { unassignTaskToUserMutation.mutate({ taskId: task.id, @@ -232,7 +232,7 @@ const TaskDetailViewSidebar = ({ if (!isCreating) { updateTaskMutation.mutate(newTask) } - setTask(newTask) + onChange(newTask) }} /> @@ -252,7 +252,7 @@ const TaskDetailViewSidebar = ({ { - setTask({ ...task, isPublicVisible: !task.isPublicVisible }) + onChange({ ...task, isPublicVisible: !task.isPublicVisible }) }} /> )} @@ -312,16 +312,9 @@ export const TaskDetailModal = ({ status: initialStatus ?? 'todo' }) - const addSubtaskMutation = useSubTaskAddMutation(taskId) - - const assignTaskToUserMutation = useAssignTaskMutation() + const deleteTaskMutation = useTaskDeleteMutation() const updateTaskMutation = useTaskUpdateMutation() - - const createTaskMutation = useTaskCreateMutation(newTask => { - newTask.subtasks.forEach(value => addSubtaskMutation.mutate({ ...value, taskId: newTask.id })) - if (newTask.assignee) { - assignTaskToUserMutation.mutate({ taskId: newTask.id, userId: newTask.assignee }) - } + const createTaskMutation = useTaskCreateMutation(() => { onClose() }, patientId) @@ -331,6 +324,8 @@ export const TaskDetailModal = ({ } }, [data, taskId]) + console.log(task) + const { data: personalTaskTemplatesData, isLoading: personalTaskTemplatesIsLoading, @@ -359,7 +354,6 @@ export const TaskDetailModal = ({ <> setIsShowingDeleteDialog(true)} > {translation.delete} @@ -396,7 +390,7 @@ export const TaskDetailModal = ({ setTask({ ...task, subtasks })}/> - + {buttons} @@ -445,8 +439,9 @@ export const TaskDetailModal = ({ descriptionText: `${translation.deleteTaskDescription}` }} onConfirm={() => { - // deleteTaskMutation.mutate(task.id) + deleteTaskMutation.mutate(task.id) setIsShowingDeleteDialog(false) + onClose() }} onCancel={() => setIsShowingDeleteDialog(false)} buttonOverwrites={[{}, {}, { color: 'negative' }]} diff --git a/tasks/pages/ward/[wardId].tsx b/tasks/pages/ward/[wardId].tsx index 1cdacf4c7..5971a7e5f 100644 --- a/tasks/pages/ward/[wardId].tsx +++ b/tasks/pages/ward/[wardId].tsx @@ -217,7 +217,7 @@ const WardOverview: NextPage = ({ overwriteTranslation }: PropsForTranslation contextState.patient && createPatientMutation.mutateAsync(contextState.patient) .then((patient) => { // TODO: is it a good idea to have this much state in one object?, also this shouldn't be called context I think