Skip to content

Commit

Permalink
feat: reenable duedate field
Browse files Browse the repository at this point in the history
  • Loading branch information
DasProffi committed Aug 6, 2023
1 parent 85102b2 commit 159bbbf
Show file tree
Hide file tree
Showing 5 changed files with 143 additions and 40 deletions.
7 changes: 7 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

67 changes: 50 additions & 17 deletions tasks/components/layout/TaskDetailView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,25 @@ import { TaskTemplateListColumn } from '../TaskTemplateListColumn'
import { Input } from '@helpwave/common/components/user_input/Input'
import type { Languages } from '@helpwave/common/hooks/useLanguage'
import type { TaskTemplateDTO } from '../../mutations/task_template_mutations'
import {
usePersonalTaskTemplateQuery,
useWardTaskTemplateQuery
} from '../../mutations/task_template_mutations'
import { usePersonalTaskTemplateQuery, useWardTaskTemplateQuery } from '../../mutations/task_template_mutations'
import { useAuth } from '../../hooks/useAuth'
import { useRouter } from 'next/router'
import type { TaskDTO } from '../../mutations/task_mutations'
import {
emptyTask,
useSubTaskAddMutation,
useTaskCreateMutation, useTaskDeleteMutation,
useTaskCreateMutation,
useTaskDeleteMutation,
useTaskQuery,
useTaskToDoneMutation,
useTaskToInProgressMutation,
useTaskToToDoMutation,
useTaskUpdateMutation
} from '../../mutations/task_mutations'
import { useEffect, useState } from 'react'
import { LoadingAnimation } from '@helpwave/common/components/LoadingAnimation'
import { GetPatientDetailsResponse } from '@helpwave/proto-ts/proto/services/task_svc/v1/patient_svc_pb'
import TaskStatus = GetPatientDetailsResponse.TaskStatus

type TaskDetailViewTranslation = {
close: string,
Expand Down Expand Up @@ -119,6 +122,9 @@ export const TaskDetailView = ({

const updateTaskMutation = useTaskUpdateMutation()
const deleteTaskMutation = useTaskDeleteMutation(onClose)
const toToDoMutation = useTaskToToDoMutation()
const toInProgressMutation = useTaskToInProgressMutation()
const toDoneMutation = useTaskToDoneMutation()

useEffect(() => {
if (data) {
Expand Down Expand Up @@ -149,6 +155,7 @@ export const TaskDetailView = ({
return <LoadingAnimation />
}

console.log(data, data?.dueDate)
return (
<div className={tw('relative flex flex-row h-[628px]')}>
{isCreating && (
Expand Down Expand Up @@ -214,8 +221,8 @@ export const TaskDetailView = ({
}}/>
</div>
<div className={tw('flex flex-col justify-between min-w-[250px]')}>
<div className={tw('flex flex-col gap-y-4 hidden')}>
<div>
<div className={tw('flex flex-col gap-y-4')}>
<div className={tw('hidden')} /* TODO enable later */ >
<label><Span type="labelMedium">{translation.assignee}</Span></label>
<Select
value={task.assignee}
Expand All @@ -232,20 +239,46 @@ export const TaskDetailView = ({
</div>
<div>
<label><Span type="labelMedium">{translation.dueDate}</Span></label>
<Input
value={formatDate(task.dueDate)}
type="datetime-local"
onChange={value => {
const dueDate = new Date(value)
setTask({ ...task, dueDate })
}}
/>
<div className={tw('flex flex-row items-center gap-x-2')}>
<Input
value={task.dueDate ? formatDate(task.dueDate) : ''}
type="datetime-local"
onChange={value => {
const dueDate = new Date(value)
setTask({ ...task, dueDate })
// Maybe add some auto save here after a validation
}}
/>
<Button
onClick={() => setTask({ ...task, dueDate: undefined })}
variant="textButton"
color="negative"
disabled={!task.dueDate}
>
<X size={24}/>
</Button>
</div>
</div>
<div>
<label><Span type="labelMedium">{translation.status}</Span></label>
<TaskStatusSelect value={task.status} onChange={status => setTask({ ...task, status })}/>
<TaskStatusSelect value={task.status} onChange={status => {
switch (status) {
case TaskStatus.TASK_STATUS_TODO:
toToDoMutation.mutate(task.id)
break
case TaskStatus.TASK_STATUS_IN_PROGRESS:
toInProgressMutation.mutate(task.id)
break
case TaskStatus.TASK_STATUS_DONE:
toDoneMutation.mutate(task.id)
break
default:
break
}
setTask({ ...task, status })
}}/>
</div>
<div>
<div className={tw('hidden')} /* TODO enable later */>
<label><Span type="labelMedium">{translation.visibility}</Span></label>
<Select
value={task.isPublicVisible}
Expand Down
77 changes: 54 additions & 23 deletions tasks/mutations/task_mutations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import type { GetTasksByPatientSortedByStatusResponse } from '@helpwave/proto-ts
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
import { noop } from '@helpwave/common/components/user_input/Input'
import { roomOverviewsQueryKey, roomsQueryKey } from './room_mutations'
import { dateToTimestampOptional, timestampToDateOptional } from '../utils/timeConversion'

export type SubTaskDTO = {
id: string,
Expand All @@ -38,7 +39,7 @@ export type TaskDTO = {
notes: string,
status: TaskStatus,
subtasks: SubTaskDTO[],
dueDate: Date,
dueDate?: Date,
creationDate?: Date,
isPublicVisible: boolean
}
Expand Down Expand Up @@ -99,7 +100,7 @@ export const useTaskQuery = (taskID: string | undefined) => {
notes: res.getDescription(),
isPublicVisible: res.getPublic(),
assignee: res.getAssignedUserId(),
dueDate: new Date(), // TODO replace later
dueDate: timestampToDateOptional(res.getDueAt()),
subtasks: res.getSubtasksList().map(subtask => ({
id: subtask.getId(),
name: subtask.getName(),
Expand Down Expand Up @@ -128,7 +129,6 @@ export const useTasksByPatientQuery = (patientID: string | undefined) => {
const res = await taskService.getTasksByPatient(req, getAuthenticatedGrpcMetadata())

if (!res.getTasksList()) {
// TODO some check whether request was successful
console.error('TasksByPatient query failed')
}

Expand All @@ -139,7 +139,7 @@ export const useTasksByPatientQuery = (patientID: string | undefined) => {
notes: task.getDescription(),
isPublicVisible: task.getPublic(),
assignee: task.getAssignedUserId(),
dueDate: new Date(), // TODO replace later
dueDate: timestampToDateOptional(task.getDueAt()),
subtasks: task.getSubtasksList().map(subtask => ({
id: subtask.getId(),
name: subtask.getName(),
Expand Down Expand Up @@ -168,7 +168,6 @@ export const useTasksByPatientSortedByStatusQuery = (patientID: string | undefin
const res = await taskService.getTasksByPatientSortedByStatus(req, getAuthenticatedGrpcMetadata())

if (!res.toObject()) {
// TODO some check whether request was successful
console.error('TasksByPatientSortedByStatus query failed')
}

Expand All @@ -179,7 +178,7 @@ export const useTasksByPatientSortedByStatusQuery = (patientID: string | undefin
notes: task.getDescription(),
isPublicVisible: task.getPublic(),
assignee: task.getAssignedUserId(),
dueDate: new Date(), // TODO replace later
dueDate: timestampToDateOptional(task.getDueAt()),
subtasks: task.getSubtasksList().map(subtask => ({
id: subtask.getId(),
name: subtask.getName(),
Expand Down Expand Up @@ -211,11 +210,13 @@ export const useTaskCreateMutation = (callback: (task: TaskDTO) => void = noop,
const res = await taskService.createTask(req, getAuthenticatedGrpcMetadata())
const newTask = { ...task, id: res.getId() }

queryClient.refetchQueries([tasksQueryKey]).then()
queryClient.refetchQueries([roomsQueryKey, roomOverviewsQueryKey]).then()
callback(newTask)
return newTask
},
onSuccess: () => {
queryClient.refetchQueries([tasksQueryKey]).then()
queryClient.refetchQueries([roomsQueryKey, roomOverviewsQueryKey]).then()
}
})
}

Expand All @@ -228,6 +229,8 @@ export const useTaskUpdateMutation = (callback: () => void = noop) => {
updateTask.setId(task.id)
updateTask.setDescription(task.notes)
updateTask.setName(task.name)
updateTask.setDueAt(dateToTimestampOptional(task.dueDate))
updateTask.setPublic(task.isPublicVisible)

const getTask = new GetTaskRequest()
const removeSubtask = new RemoveSubTaskRequest()
Expand Down Expand Up @@ -280,11 +283,13 @@ export const useTaskUpdateMutation = (callback: () => void = noop) => {

await taskService.updateTask(updateTask, getAuthenticatedGrpcMetadata())

queryClient.refetchQueries([tasksQueryKey]).then()
queryClient.refetchQueries([roomsQueryKey, roomOverviewsQueryKey]).then()
callback()
return updateTask.toObject()
},
onSuccess: () => {
queryClient.refetchQueries([tasksQueryKey]).then()
queryClient.refetchQueries([roomsQueryKey, roomOverviewsQueryKey]).then()
}
})
}

Expand All @@ -296,11 +301,13 @@ export const useTaskDeleteMutation = (callback: () => void = noop) => {
req.setId(taskID)
await taskService.deleteTask(req, getAuthenticatedGrpcMetadata())

queryClient.refetchQueries([tasksQueryKey, sortedTasksByPatientQueryKey]).then()
queryClient.refetchQueries([roomsQueryKey, roomOverviewsQueryKey]).then()
callback()
return req.toObject()
},
onSuccess: () => {
queryClient.refetchQueries([tasksQueryKey, sortedTasksByPatientQueryKey]).then()
queryClient.refetchQueries([roomsQueryKey, roomOverviewsQueryKey]).then()
}
})
}

Expand All @@ -311,11 +318,14 @@ export const useTaskToToDoMutation = (callback: () => void = noop) => {
const req = new TaskToToDoRequest()
req.setId(taskID)
await taskService.taskToToDo(req, getAuthenticatedGrpcMetadata())
queryClient.refetchQueries([tasksQueryKey]).then()
queryClient.refetchQueries([roomsQueryKey, roomOverviewsQueryKey]).then()

callback()
return req.toObject()
},
onSuccess: () => {
queryClient.refetchQueries([tasksQueryKey]).then()
queryClient.refetchQueries([roomsQueryKey, roomOverviewsQueryKey]).then()
}
})
}

Expand All @@ -326,11 +336,14 @@ export const useTaskToInProgressMutation = (callback: () => void = noop) => {
const req = new TaskToInProgressRequest()
req.setId(taskID)
await taskService.taskToInProgress(req, getAuthenticatedGrpcMetadata())
queryClient.refetchQueries([tasksQueryKey]).then()
queryClient.refetchQueries([roomsQueryKey, roomOverviewsQueryKey]).then()

callback()
return req.toObject()
},
onSuccess: () => {
queryClient.refetchQueries([tasksQueryKey]).then()
queryClient.refetchQueries([roomsQueryKey, roomOverviewsQueryKey]).then()
}
})
}

Expand All @@ -341,11 +354,14 @@ export const useTaskToDoneMutation = (callback: () => void = noop) => {
const req = new TaskToDoneRequest()
req.setId(taskID)
await taskService.taskToDone(req, getAuthenticatedGrpcMetadata())
queryClient.refetchQueries([tasksQueryKey]).then()
queryClient.refetchQueries([roomsQueryKey, roomOverviewsQueryKey]).then()

callback()
return req.toObject()
},
onSuccess: () => {
queryClient.refetchQueries([tasksQueryKey]).then()
queryClient.refetchQueries([roomsQueryKey, roomOverviewsQueryKey]).then()
}
})
}

Expand All @@ -369,10 +385,13 @@ export const useSubTaskAddMutation = (callback: (subtask: SubTaskDTO) => void =
name: subtask.name,
isDone: subtask.isDone,
}
queryClient.refetchQueries([tasksQueryKey]).then()

callback(newSubtask)
return req.toObject()
},
onSuccess: () => {
queryClient.refetchQueries([tasksQueryKey]).then()
}
})
}

Expand All @@ -385,10 +404,13 @@ export const useSubTaskUpdateMutation = (callback: (subtask: SubTaskDTO) => void
req.setName(subtask.name)
await taskService.updateSubTask(req, getAuthenticatedGrpcMetadata())
const newSubtask: SubTaskDTO = { ...subtask }
queryClient.refetchQueries([tasksQueryKey]).then()

callback(newSubtask)
return req.toObject()
},
onSuccess: () => {
queryClient.refetchQueries([tasksQueryKey]).then()
}
})
}

Expand All @@ -399,10 +421,13 @@ export const useSubTaskDeleteMutation = (callback: () => void = noop) => {
const req = new RemoveSubTaskRequest()
req.setId(subtaskID)
await taskService.removeSubTask(req, getAuthenticatedGrpcMetadata())
queryClient.refetchQueries([tasksQueryKey]).then()

callback()
return req.toObject()
},
onSuccess: () => {
queryClient.refetchQueries([tasksQueryKey]).then()
}
})
}

Expand All @@ -413,10 +438,13 @@ export const useSubTaskToToDoMutation = (callback: () => void = noop) => {
const req = new SubTaskToToDoRequest()
req.setId(subtaskID)
await taskService.subTaskToToDo(req, getAuthenticatedGrpcMetadata())
queryClient.refetchQueries([tasksQueryKey]).then()

callback()
return req.toObject()
},
onSuccess: () => {
queryClient.refetchQueries([tasksQueryKey]).then()
}
})
}

Expand All @@ -427,9 +455,12 @@ export const useSubTaskToDoneMutation = (callback: () => void = noop) => {
const req = new SubTaskToDoneRequest()
req.setId(subtaskID)
await taskService.subTaskToDone(req, getAuthenticatedGrpcMetadata())
queryClient.refetchQueries([tasksQueryKey]).then()

callback()
return req.toObject()
},
onSuccess: () => {
queryClient.refetchQueries([tasksQueryKey]).then()
}
})
}
1 change: 1 addition & 0 deletions tasks/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"@twind/preset-tailwind": "1.1.4",
"@twind/preset-tailwind-forms": "1.1.2",
"@twind/preset-typography": "1.0.7",
"@types/google-protobuf": "^3.15.6",
"cookies-next": "2.1.2",
"google-protobuf": "3.21.2",
"grpc-web": "1.4.2",
Expand Down
Loading

0 comments on commit 159bbbf

Please sign in to comment.