diff --git a/frontend/src/components/HomeComponents/Tasks/TaskDialog.tsx b/frontend/src/components/HomeComponents/Tasks/TaskDialog.tsx index 522e1f49..103d59ee 100644 --- a/frontend/src/components/HomeComponents/Tasks/TaskDialog.tsx +++ b/frontend/src/components/HomeComponents/Tasks/TaskDialog.tsx @@ -232,7 +232,7 @@ export const TaskDialog = ({ > {task.id} -
+
{task.priority === 'H' && (
)} @@ -242,7 +242,10 @@ export const TaskDialog = ({ {task.priority != 'H' && task.priority != 'M' && (
)} - + {task.description} {task.project != '' && ( @@ -252,7 +255,7 @@ export const TaskDialog = ({ )}
-
+
Description: - + {editState.isEditing ? ( - <> -
- { - if (e.key === 'Enter') { - e.preventDefault(); - saveAndExit(() => { - onSaveDescription( - task, - editState.editedDescription - ); - }); - } - }} - ref={(element) => - (inputRefs.current.description = element) - } - id={`description-${task.id}`} - name={`description-${task.id}`} - type="text" - value={editState.editedDescription} - onChange={(e) => - onUpdateState({ - editedDescription: e.target.value, - }) - } - className="flex-grow mr-2" - /> - - -
- + }); + } + }} + ref={(element) => + (inputRefs.current.description = element) + } + id={`description-${task.id}`} + name={`description-${task.id}`} + type="text" + value={editState.editedDescription} + onChange={(e) => + onUpdateState({ editedDescription: e.target.value }) + } + className="w-full" + /> ) : ( - <> - {task.description} + + {task.description} + + )} +
+ + {editState.isEditing ? ( +
- + +
+ ) : ( + )}
@@ -414,41 +418,49 @@ export const TaskDialog = ({ className={`${focusedField === 'due' ? 'dark:bg-muted/50 bg-black/15' : ''}`} > Due: - + {editState.isEditingDueDate ? ( -
- (inputRefs.current.due = element)} - date={ - editState.editedDueDate && - editState.editedDueDate !== '' - ? (() => { - try { - const dateStr = - editState.editedDueDate.includes('T') - ? editState.editedDueDate - : editState.editedDueDate + 'T00:00:00'; - const parsed = new Date(dateStr); - return isNaN(parsed.getTime()) - ? undefined - : parsed; - } catch { - return undefined; - } - })() - : undefined - } - onDateTimeChange={(date, hasTime) => - onUpdateState({ - editedDueDate: date - ? hasTime - ? date.toISOString() - : format(date, 'yyyy-MM-dd') - : '', - }) - } - placeholder="Select due date and time" - /> + (inputRefs.current.due = element)} + date={ + editState.editedDueDate && + editState.editedDueDate !== '' + ? (() => { + try { + const dateStr = + editState.editedDueDate.includes('T') + ? editState.editedDueDate + : editState.editedDueDate + 'T00:00:00'; + const parsed = new Date(dateStr); + return isNaN(parsed.getTime()) + ? undefined + : parsed; + } catch { + return undefined; + } + })() + : undefined + } + onDateTimeChange={(date, hasTime) => + onUpdateState({ + editedDueDate: date + ? hasTime + ? date.toISOString() + : format(date, 'yyyy-MM-dd') + : '', + }) + } + placeholder="Select due date and time" + /> + ) : ( + + {formattedDate(task.due)} + + )} + + + {editState.isEditingDueDate ? ( +
) : ( - <> - {formattedDate(task.due)} - - + )}
@@ -501,46 +508,51 @@ export const TaskDialog = ({ className={`${focusedField === 'start' ? 'dark:bg-muted/50 bg-black/15' : ''}`} > Start: - + {editState.isEditingStartDate ? ( -
- - (inputRefs.current.start = element) - } - date={ - editState.editedStartDate && - editState.editedStartDate !== '' - ? (() => { - try { - // Handle YYYY-MM-DD format - const dateStr = - editState.editedStartDate.includes('T') - ? editState.editedStartDate - : editState.editedStartDate + - 'T00:00:00'; - const parsed = new Date(dateStr); - return isNaN(parsed.getTime()) - ? undefined - : parsed; - } catch { - return undefined; - } - })() - : undefined - } - onDateTimeChange={(date, hasTime) => - onUpdateState({ - editedStartDate: date - ? hasTime - ? date.toISOString() - : format(date, 'yyyy-MM-dd') - : '', - }) - } - placeholder="Select start date and time" - /> - + + (inputRefs.current.start = element) + } + date={ + editState.editedStartDate && + editState.editedStartDate !== '' + ? (() => { + try { + const dateStr = + editState.editedStartDate.includes('T') + ? editState.editedStartDate + : editState.editedStartDate + 'T00:00:00'; + const parsed = new Date(dateStr); + return isNaN(parsed.getTime()) + ? undefined + : parsed; + } catch { + return undefined; + } + })() + : undefined + } + onDateTimeChange={(date, hasTime) => + onUpdateState({ + editedStartDate: date + ? hasTime + ? date.toISOString() + : format(date, 'yyyy-MM-dd') + : '', + }) + } + placeholder="Select start date and time" + /> + ) : ( + + {formattedDate(task.start)} + + )} + + + {editState.isEditingStartDate ? ( +
-
) : ( - <> - {formattedDate(task.start)} - - + )}
@@ -594,41 +602,49 @@ export const TaskDialog = ({ className={`${focusedField === 'end' ? 'dark:bg-muted/50 bg-black/15' : ''}`} > End: - + {editState.isEditingEndDate ? ( -
- (inputRefs.current.end = element)} - date={ - editState.editedEndDate && - editState.editedEndDate !== '' - ? (() => { - try { - const dateStr = - editState.editedEndDate.includes('T') - ? editState.editedEndDate - : editState.editedEndDate + 'T00:00:00'; - const parsed = new Date(dateStr); - return isNaN(parsed.getTime()) - ? undefined - : parsed; - } catch { - return undefined; - } - })() - : undefined - } - onDateTimeChange={(date, hasTime) => - onUpdateState({ - editedEndDate: date - ? hasTime - ? date.toISOString() - : format(date, 'yyyy-MM-dd') - : '', - }) - } - placeholder="Select end date and time" - /> + (inputRefs.current.end = element)} + date={ + editState.editedEndDate && + editState.editedEndDate !== '' + ? (() => { + try { + const dateStr = + editState.editedEndDate.includes('T') + ? editState.editedEndDate + : editState.editedEndDate + 'T00:00:00'; + const parsed = new Date(dateStr); + return isNaN(parsed.getTime()) + ? undefined + : parsed; + } catch { + return undefined; + } + })() + : undefined + } + onDateTimeChange={(date, hasTime) => + onUpdateState({ + editedEndDate: date + ? hasTime + ? date.toISOString() + : format(date, 'yyyy-MM-dd') + : '', + }) + } + placeholder="Select end date and time" + /> + ) : ( + + {formattedDate(task.end)} + + )} + + + {editState.isEditingEndDate ? ( +
) : ( -
- {formattedDate(task.end)} - -
+ )}
@@ -681,43 +692,49 @@ export const TaskDialog = ({ className={`${focusedField === 'wait' ? 'dark:bg-muted/50 bg-black/15' : ''}`} > Wait: - + {editState.isEditingWaitDate ? ( -
- (inputRefs.current.wait = element)} - date={ - editState.editedWaitDate && - editState.editedWaitDate !== '' - ? (() => { - try { - const dateStr = - editState.editedWaitDate.includes('T') - ? editState.editedWaitDate - : editState.editedWaitDate + - 'T00:00:00'; - const parsed = new Date(dateStr); - return isNaN(parsed.getTime()) - ? undefined - : parsed; - } catch { - return undefined; - } - })() - : undefined - } - onDateTimeChange={(date, hasTime) => - onUpdateState({ - editedWaitDate: date - ? hasTime - ? date.toISOString() - : format(date, 'yyyy-MM-dd') - : '', - }) - } - placeholder="Select wait date and time" - /> - + (inputRefs.current.wait = element)} + date={ + editState.editedWaitDate && + editState.editedWaitDate !== '' + ? (() => { + try { + const dateStr = + editState.editedWaitDate.includes('T') + ? editState.editedWaitDate + : editState.editedWaitDate + 'T00:00:00'; + const parsed = new Date(dateStr); + return isNaN(parsed.getTime()) + ? undefined + : parsed; + } catch { + return undefined; + } + })() + : undefined + } + onDateTimeChange={(date, hasTime) => + onUpdateState({ + editedWaitDate: date + ? hasTime + ? date.toISOString() + : format(date, 'yyyy-MM-dd') + : '', + }) + } + placeholder="Select wait date and time" + /> + ) : ( + + {formattedDate(task.wait)} + + )} + + + {editState.isEditingWaitDate ? ( +
-
) : ( - <> - {formattedDate(task.wait)} - - + )}
@@ -771,7 +784,7 @@ export const TaskDialog = ({ className={`${focusedField === 'depends' ? 'dark:bg-muted/50 bg-black/15' : ''}`} > Depends: - + {!editState.isEditingDepends ? (
{(task.depends || []).map((depUuid) => { @@ -800,30 +813,6 @@ export const TaskDialog = ({ ); })} -
) : (
@@ -865,9 +854,7 @@ export const TaskDialog = ({ variant="outline" size="sm" onClick={() => - onUpdateState({ - dependsDropdownOpen: true, - }) + onUpdateState({ dependsDropdownOpen: true }) } className="w-full justify-start" > @@ -911,15 +898,15 @@ export const TaskDialog = ({
{ + onClick={() => onUpdateState({ editedDepends: [ ...editState.editedDepends, t.uuid, ], dependsSearchTerm: '', - }); - }} + }) + } onKeyDown={(e) => { if (e.key === 'Enter') { e.preventDefault(); @@ -954,64 +941,106 @@ export const TaskDialog = ({
)}
- -
)}
+ + {!editState.isEditingDepends ? ( + + ) : ( +
+ + +
+ )} +
Priority: - + {editState.isEditingPriority ? ( -
- + + ) : ( + + {task.priority + ? task.priority === 'H' + ? 'High (H)' + : task.priority === 'M' + ? 'Medium (M)' + : task.priority === 'L' + ? 'Low (L)' + : task.priority + : 'None'} + + )} + + + {editState.isEditingPriority ? ( +
) : ( -
- - {task.priority - ? task.priority === 'H' - ? 'High (H)' - : task.priority === 'M' - ? 'Medium (M)' - : task.priority === 'L' - ? 'Low (L)' - : task.priority - : 'None'} - - -
+ )}
@@ -1074,7 +1090,7 @@ export const TaskDialog = ({ className={`${focusedField === 'project' ? 'dark:bg-muted/50 bg-black/15' : ''}`} > Project: - + {editState.isEditingProject ? ( <>
@@ -1183,37 +1199,46 @@ export const TaskDialog = ({
) : ( - <> - {task.project} - - + + {task.project} + + )} +
+ + {!editState.isEditingProject && ( + )} Status: - {task.status} + + + {task.status} + + + Tags: - + {editState.isEditingTags ? ( No Tags )} -
)}
+ + {!editState.isEditingTags && ( + + )} +
Entry: - + {editState.isEditingEntryDate ? ( -
- (inputRefs.current.entry = element)} - date={ - editState.editedEntryDate && - editState.editedEntryDate !== '' - ? (() => { - try { - // Handle YYYY-MM-DD format - const dateStr = - editState.editedEntryDate.includes('T') - ? editState.editedEntryDate - : editState.editedEntryDate + - 'T00:00:00'; - const parsed = new Date(dateStr); - return isNaN(parsed.getTime()) - ? undefined - : parsed; - } catch { - return undefined; - } - })() - : undefined - } - onDateTimeChange={(date, hasTime) => - onUpdateState({ - editedEntryDate: date - ? hasTime - ? date.toISOString() - : format(date, 'yyyy-MM-dd') - : '', - }) - } - placeholder="Select entry date and time" - /> - + (inputRefs.current.entry = element)} + date={ + editState.editedEntryDate && + editState.editedEntryDate !== '' + ? (() => { + try { + // Handle YYYY-MM-DD format + const dateStr = + editState.editedEntryDate.includes('T') + ? editState.editedEntryDate + : editState.editedEntryDate + 'T00:00:00'; + const parsed = new Date(dateStr); + return isNaN(parsed.getTime()) + ? undefined + : parsed; + } catch { + return undefined; + } + })() + : undefined + } + onDateTimeChange={(date, hasTime) => + onUpdateState({ + editedEntryDate: date + ? hasTime + ? date.toISOString() + : format(date, 'yyyy-MM-dd') + : '', + }) + } + placeholder="Select entry date and time" + /> + ) : ( + + {formattedDate(task.entry)} + + )} + + + {editState.isEditingEntryDate ? ( +
-
) : ( - <> - {formattedDate(task.entry)} - - + )}
@@ -1366,53 +1397,61 @@ export const TaskDialog = ({ className={`${focusedField === 'recur' ? 'dark:bg-muted/50 bg-black/15' : ''}`} > Recur: - + {editState.isEditingRecur ? ( -
- + onUpdateState({ editedRecur: value }) + } + > + + + + + {!editState.originalRecur && ( - Yearly + None - - + )} + + Daily + + + Weekly + + + Monthly + + + Yearly + + + + ) : ( + + {task.recur || 'None'} + + )} + + + {editState.isEditingRecur ? ( +
) : ( -
- {task.recur || 'None'} - -
+ )}
RType: - - {task.rtype || 'None'} + + + {task.rtype || 'None'} + {!task.rtype && ( (Auto-set by recur) )} + Urgency: - {task.urgency} + + {task.urgency} + + UUID: - - {task.uuid} + + + {task.uuid} + + + handleCopy('Task UUID')} > - @@ -1494,7 +1540,7 @@ export const TaskDialog = ({ className={`${focusedField === 'annotations' ? 'dark:bg-muted/50 bg-black/15' : ''}`} > Annotations: - + {editState.isEditingAnnotations ? (
@@ -1530,37 +1576,6 @@ export const TaskDialog = ({ } }} /> - -
{editState.editedAnnotations != null && @@ -1608,24 +1623,62 @@ export const TaskDialog = ({ ) : ( No Annotations )} +
+ )} + + + {editState.isEditingAnnotations ? ( +
+
+ ) : ( + )}