@@ -123,7 +165,7 @@ const TodoItem: React.FC = ({
- {todo.status === 'In Progress' && !isEditingTime && !isEditingText && (
+ {todo.status === 'In Progress' && !isEditingTime && !isEditingText && !isEditingDueDate && (
<>
{!todo.isTracking ? (
- {todo.status === 'Done' && !isEditingText && !isEditingTime && (
+ {todo.status === 'Done' && !isEditingText && !isEditingTime && !isEditingDueDate && (
);
diff --git a/src/app/components/TodoItem/style.css b/src/app/components/TodoItem/style.css
index fbe62d1..24d8a2a 100644
--- a/src/app/components/TodoItem/style.css
+++ b/src/app/components/TodoItem/style.css
@@ -192,4 +192,90 @@
.completed .todo-text {
text-decoration: line-through;
opacity: 0.7;
+}
+
+.todo-due-date {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ margin-top: 4px;
+}
+
+.due-date {
+ font-size: 0.9rem;
+ color: var(--text-color);
+ padding: 2px 6px;
+ border-radius: 4px;
+ background-color: var(--card-background);
+ border: 1px solid var(--border-color);
+}
+
+.due-date.editable {
+ cursor: pointer;
+}
+
+.due-date.editable:hover {
+ background-color: var(--primary-color);
+ color: var(--secondary-color);
+}
+
+.due-date.overdue {
+ background-color: #ff4444;
+ color: white;
+ border-color: #ff4444;
+}
+
+.add-due-date-btn {
+ font-size: 0.8rem;
+ padding: 2px 6px;
+ border: 1px dashed var(--border-color);
+ background-color: transparent;
+ color: var(--text-color);
+ border-radius: 4px;
+ cursor: pointer;
+ transition: all 0.2s;
+}
+
+.add-due-date-btn:hover {
+ background-color: var(--primary-color);
+ color: var(--secondary-color);
+ border-style: solid;
+}
+
+.due-date-edit {
+ display: flex;
+ align-items: center;
+ gap: 4px;
+}
+
+.due-date-input {
+ padding: 2px 4px;
+ border: none;
+ border-bottom: 1px solid var(--primary-color);
+ background-color: transparent;
+ color: var(--text-color);
+}
+
+.due-date-save-btn,
+.due-date-cancel-btn {
+ width: 20px;
+ height: 20px;
+ border-radius: 50%;
+ border: 1px solid var(--border-color);
+ background-color: var(--card-background);
+ cursor: pointer;
+ font-size: 0.7rem;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.due-date-save-btn:hover {
+ background-color: var(--primary-color);
+ color: var(--secondary-color);
+}
+
+.due-date-cancel-btn:hover {
+ background-color: var(--primary-color);
+ color: var(--secondary-color);
}
\ No newline at end of file
diff --git a/src/app/components/TodoList/component.tsx b/src/app/components/TodoList/component.tsx
index 7514e00..304b91d 100644
--- a/src/app/components/TodoList/component.tsx
+++ b/src/app/components/TodoList/component.tsx
@@ -13,7 +13,8 @@ const TodoList: React.FC = () => {
startTimeTracking,
pauseTimeTracking,
updateTodoTime,
- updateTodoText
+ updateTodoText,
+ updateTodoDueDate
} = useTodoContext();
const activeTodos = todos.filter(todo => todo.status !== 'Done');
@@ -38,6 +39,7 @@ const TodoList: React.FC = () => {
onPauseTracking={pauseTimeTracking}
onUpdateTime={updateTodoTime}
onUpdateText={updateTodoText}
+ onUpdateDueDate={updateTodoDueDate}
/>
))}
@@ -61,6 +63,7 @@ const TodoList: React.FC = () => {
onPauseTracking={pauseTimeTracking}
onUpdateTime={updateTodoTime}
onUpdateText={updateTodoText}
+ onUpdateDueDate={updateTodoDueDate}
/>
))}
diff --git a/src/app/context/TodoContext.tsx b/src/app/context/TodoContext.tsx
index 69a2f8c..2ec378d 100644
--- a/src/app/context/TodoContext.tsx
+++ b/src/app/context/TodoContext.tsx
@@ -130,7 +130,7 @@ export const TodoProvider: React.FC