diff --git a/frontend/src/components/dashboard/KpiCard.jsx b/frontend/src/components/dashboard/KpiCard.jsx index 85c74c9..b1d02b3 100644 --- a/frontend/src/components/dashboard/KpiCard.jsx +++ b/frontend/src/components/dashboard/KpiCard.jsx @@ -1,4 +1,11 @@ -import { BadgeDelta, Card, Flex, Metric, ProgressBar, Text } from "@tremor/react"; +import { + BadgeDelta, + Card, + Flex, + Metric, + ProgressBar, + Text, +} from "@tremor/react"; import { useEffect, useState } from "react"; import { axiosInstance } from "src/api/AxiosConfig"; @@ -46,10 +53,16 @@ export function KpiCard() {
{kpiCardData.completedThisWeek}
- {kpiCardData.percentage.toFixed(0)}% + + {isNaN(kpiCardData.percentage) || !isFinite(kpiCardData.percentage) + ? "0%" + : `${kpiCardData.percentage.toFixed(0)}%`} + - vs. {kpiCardData.completedLastWeek} (last week) + + vs. {kpiCardData.completedLastWeek} (last week) + diff --git a/frontend/src/components/dashboard/ProgressCircle.jsx b/frontend/src/components/dashboard/ProgressCircle.jsx index 4a290d9..aa3a0a3 100644 --- a/frontend/src/components/dashboard/ProgressCircle.jsx +++ b/frontend/src/components/dashboard/ProgressCircle.jsx @@ -33,9 +33,18 @@ export function ProgressCircleChart() { return ( - + - {progressData.toFixed(0)} % + {isNaN(progressData) || !isFinite(progressData) + ? "0%" + : `${progressData.toFixed(0)}%`} diff --git a/frontend/src/components/dashboard/dashboard.jsx b/frontend/src/components/dashboard/dashboard.jsx index 1901ebb..005f98a 100644 --- a/frontend/src/components/dashboard/dashboard.jsx +++ b/frontend/src/components/dashboard/dashboard.jsx @@ -154,7 +154,9 @@ export function Dashboard() { color="rose" > - {progressData.toFixed(0)} % + {isNaN(progressData) || !isFinite(progressData) + ? "0%" + : `${progressData.toFixed(0)}%`}

diff --git a/frontend/src/components/kanbanBoard/kanbanBoard.jsx b/frontend/src/components/kanbanBoard/kanbanBoard.jsx index 2bda08b..2635cff 100644 --- a/frontend/src/components/kanbanBoard/kanbanBoard.jsx +++ b/frontend/src/components/kanbanBoard/kanbanBoard.jsx @@ -1,6 +1,12 @@ import { useMemo, useState, useEffect } from "react"; import { ColumnContainerCard } from "./columnContainerWrapper"; -import { DndContext, DragOverlay, PointerSensor, useSensor, useSensors } from "@dnd-kit/core"; +import { + DndContext, + DragOverlay, + PointerSensor, + useSensor, + useSensors, +} from "@dnd-kit/core"; import { SortableContext, arrayMove } from "@dnd-kit/sortable"; import { createPortal } from "react-dom"; import { TaskCard } from "./taskCard"; @@ -26,7 +32,9 @@ export function KanbanBoard() { // ---------------- Task Handlers ---------------- const handleTaskUpdate = (tasks, updatedTask) => { - const updatedTasks = tasks.map((task) => (task.id === updatedTask.id ? updatedTask : task)); + const updatedTasks = tasks.map((task) => + task.id === updatedTask.id ? updatedTask : task + ); setTasks(updatedTasks); }; @@ -168,8 +176,14 @@ export function KanbanBoard() { justify-center overflow-x-auto overflow-y-hidden - "> - + " + > +
{!isLoading ? ( @@ -181,7 +195,9 @@ export function KanbanBoard() { createTask={createTask} deleteTask={deleteTask} updateTask={updateTask} - tasks={(tasks || []).filter((task) => task.columnId === col.id)} + tasks={(tasks || []).filter( + (task) => task.columnId === col.id + )} /> ))}{" "} @@ -194,7 +210,11 @@ export function KanbanBoard() { {createPortal( {/* Render the active task as a draggable overlay */} - + , document.body )} @@ -302,7 +322,11 @@ export function KanbanBoard() { const isOverAColumn = over.data.current?.type === "Column"; // Move the Task to a different column and update columnId - if (isActiveATask && isOverAColumn && tasks.some((task) => task.columnId !== overId)) { + if ( + isActiveATask && + isOverAColumn && + tasks.some((task) => task.columnId !== overId) + ) { setTasks((tasks) => { const activeIndex = tasks.findIndex((t) => t.id === activeId); axiosInstance diff --git a/frontend/src/components/kanbanBoard/taskCard.jsx b/frontend/src/components/kanbanBoard/taskCard.jsx index 1a151c8..e631a26 100644 --- a/frontend/src/components/kanbanBoard/taskCard.jsx +++ b/frontend/src/components/kanbanBoard/taskCard.jsx @@ -1,4 +1,5 @@ import { useState } from "react"; +import { useEffect } from "react"; import { BsFillTrashFill } from "react-icons/bs"; import { useSortable } from "@dnd-kit/sortable"; import { CSS } from "@dnd-kit/utilities"; @@ -6,6 +7,9 @@ import { TaskDetailModal } from "./taskDetailModal"; export function TaskCard({ task, deleteTask, updateTask }) { const [mouseIsOver, setMouseIsOver] = useState(false); + // console.log(task.challenge); + // console.log(task.importance); + // console.log(task.difficulty); const { setNodeRef, attributes, listeners, transform, transition, isDragging } = useSortable({ id: task.id, @@ -14,12 +18,13 @@ export function TaskCard({ task, deleteTask, updateTask }) { task, }, }); - const style = { transition, transform: CSS.Transform.toString(transform), }; + + { /* If card is dragged */ } @@ -60,7 +65,7 @@ export function TaskCard({ task, deleteTask, updateTask }) { setMouseIsOver(false); }}>

document.getElementById(`task_detail_modal_${task.id}`).showModal()}> {task.content}

@@ -77,4 +82,4 @@ export function TaskCard({ task, deleteTask, updateTask }) {
); -} +} \ No newline at end of file diff --git a/frontend/src/components/kanbanBoard/taskDetailModal.jsx b/frontend/src/components/kanbanBoard/taskDetailModal.jsx index e151d8f..d349c3d 100644 --- a/frontend/src/components/kanbanBoard/taskDetailModal.jsx +++ b/frontend/src/components/kanbanBoard/taskDetailModal.jsx @@ -7,6 +7,9 @@ export function TaskDetailModal({ title, description, tags, difficulty, challeng const [isChallengeChecked, setChallengeChecked] = useState(challenge); const [isImportantChecked, setImportantChecked] = useState(importance); const [currentDifficulty, setCurrentDifficulty] = useState(difficulty); + // console.log(currentDifficulty); + // console.log(isChallengeChecked); + // console.log(isImportantChecked); const handleChallengeChange = () => { setChallengeChecked(!isChallengeChecked);