Skip to content

Commit 47a16bd

Browse files
authored
feat: add datetime picker for due field in TaskDialog (#350)
1 parent c55e519 commit 47a16bd

File tree

3 files changed

+17
-15
lines changed

3 files changed

+17
-15
lines changed

backend/controllers/edit_task.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,12 @@ func EditTaskHandler(w http.ResponseWriter, r *http.Request) {
7373
return
7474
}
7575

76+
due, err = utils.ConvertISOToTaskwarriorFormat(due)
77+
if err != nil {
78+
http.Error(w, fmt.Sprintf("Invalid due date format: %v", err), http.StatusBadRequest)
79+
return
80+
}
81+
7682
logStore := models.GetLogStore()
7783
job := Job{
7884
Name: "Edit Task",

frontend/src/components/HomeComponents/Tasks/TaskDialog.tsx

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -266,19 +266,17 @@ export const TaskDialog = ({
266266
<TableCell>
267267
{editState.isEditingDueDate ? (
268268
<div className="flex items-center gap-2">
269-
<DatePicker
269+
<DateTimePicker
270270
date={
271271
editState.editedDueDate &&
272272
editState.editedDueDate !== ''
273273
? (() => {
274274
try {
275275
const dateStr =
276276
editState.editedDueDate.includes('T')
277-
? editState.editedDueDate.split('T')[0]
278-
: editState.editedDueDate;
279-
const parsed = new Date(
280-
dateStr + 'T00:00:00'
281-
);
277+
? editState.editedDueDate
278+
: editState.editedDueDate + 'T00:00:00';
279+
const parsed = new Date(dateStr);
282280
return isNaN(parsed.getTime())
283281
? undefined
284282
: parsed;
@@ -288,14 +286,16 @@ export const TaskDialog = ({
288286
})()
289287
: undefined
290288
}
291-
onDateChange={(date) =>
289+
onDateTimeChange={(date, hasTime) =>
292290
onUpdateState({
293291
editedDueDate: date
294-
? format(date, 'yyyy-MM-dd')
292+
? hasTime
293+
? date.toISOString()
294+
: format(date, 'yyyy-MM-dd')
295295
: '',
296296
})
297297
}
298-
placeholder="Select due date"
298+
placeholder="Select due date and time"
299299
/>
300300
<Button
301301
variant="ghost"
@@ -332,11 +332,7 @@ export const TaskDialog = ({
332332
onClick={() => {
333333
onUpdateState({
334334
isEditingDueDate: true,
335-
editedDueDate: task.due
336-
? task.due.includes('T')
337-
? task.due.split('T')[0]
338-
: task.due
339-
: '',
335+
editedDueDate: task.due || '',
340336
});
341337
}}
342338
>

frontend/src/components/HomeComponents/Tasks/__tests__/Tasks.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1104,7 +1104,7 @@ describe('Tasks Component', () => {
11041104
test.each([
11051105
['Wait', 'Wait:', 'Pick a date'],
11061106
['End', 'End:', 'Select end date'],
1107-
['Due', 'Due:', 'Select due date'],
1107+
['Due', 'Due:', 'Select due date and time'],
11081108
['Start', 'Start:', 'Select start date and time'],
11091109
['Entry', 'Entry:', 'Pick a date'],
11101110
])('shows red when task %s date is edited', async (_, label, placeholder) => {

0 commit comments

Comments
 (0)