Skip to content

fix: fix subtasks not being added when creating a task #1268

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 25 additions & 26 deletions api-services/mutations/tasks/task_mutations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down Expand Up @@ -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 = {
Expand Down Expand Up @@ -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) => {
Expand Down Expand Up @@ -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)
Expand All @@ -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)
Expand Down
37 changes: 16 additions & 21 deletions tasks/components/modals/TaskDetailModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ import {
} from '@helpwave/api-services/mutations/tasks/task_template_mutations'
import {
useAssignTaskMutation,
useSubTaskAddMutation,
useTaskCreateMutation,
useTaskDeleteMutation,
useTaskQuery,
useTaskUpdateMutation,
useUnassignTaskMutation
Expand Down Expand Up @@ -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<TaskDetailViewTranslation, TaskDetailViewSidebarProps>) => {
const translation = useTranslation(defaultTaskDetailViewTranslation, overwriteTranslation)
Expand All @@ -140,7 +140,7 @@ const TaskDetailViewSidebar = ({
const unassignTaskToUserMutation = useUnassignTaskMutation()

const updateTaskLocallyAndExternally = (task: TaskDTO) => {
setTask(task)
onChange(task)
if (!isCreating) {
updateTaskMutation.mutate(task)
}
Expand All @@ -157,7 +157,7 @@ const TaskDetailViewSidebar = ({
...task,
isPublicVisible: true
}
setTask(newTask)
onChange(newTask)
updateTaskLocallyAndExternally(newTask)
}}
headerProps={{
Expand All @@ -172,15 +172,15 @@ 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 })
}
}}
/>
<TextButton
onClick={() => {
setTask({ ...task, assignee: undefined })
onChange({ ...task, assignee: undefined })
if (!isCreating && task.assignee) {
unassignTaskToUserMutation.mutate({
taskId: task.id,
Expand Down Expand Up @@ -232,7 +232,7 @@ const TaskDetailViewSidebar = ({
if (!isCreating) {
updateTaskMutation.mutate(newTask)
}
setTask(newTask)
onChange(newTask)
}}
/>
</div>
Expand All @@ -252,7 +252,7 @@ const TaskDetailViewSidebar = ({
<TaskVisibilitySelect
value={task.isPublicVisible}
onChange={() => {
setTask({ ...task, isPublicVisible: !task.isPublicVisible })
onChange({ ...task, isPublicVisible: !task.isPublicVisible })
}}
/>
)}
Expand Down Expand Up @@ -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)

Expand All @@ -331,6 +324,8 @@ export const TaskDetailModal = ({
}
}, [data, taskId])

console.log(task)

const {
data: personalTaskTemplatesData,
isLoading: personalTaskTemplatesIsLoading,
Expand Down Expand Up @@ -359,7 +354,6 @@ export const TaskDetailModal = ({
<>
<SolidButton
color="negative"
disabled={true} // TODO reenable when backend allows it
onClick={() => setIsShowingDeleteDialog(true)}
>
{translation.delete}
Expand Down Expand Up @@ -396,7 +390,7 @@ export const TaskDetailModal = ({
</div>
<SubtaskView subtasks={task.subtasks} taskId={taskId} onChange={(subtasks) => setTask({ ...task, subtasks })}/>
</div>
<TaskDetailViewSidebar task={task} setTask={setTask} isCreating={isCreating}/>
<TaskDetailViewSidebar task={task} onChange={setTask} isCreating={isCreating}/>
</div>
{buttons}
</div>
Expand Down Expand Up @@ -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' }]}
Expand Down
2 changes: 1 addition & 1 deletion tasks/pages/ward/[wardId].tsx
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ const WardOverview: NextPage = ({ overwriteTranslation }: PropsForTranslation<Wa

const createPatientMutation = usePatientCreateMutation()

// TOOD: can we somehow assert that the patient is not undefined here?
// TODO: can we somehow assert that the patient is not undefined here?
const createPatient = () => 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
Expand Down
Loading