Spaces:
Running
Running
User commited on
Commit ·
045d38f
1
Parent(s): 58aaf9d
fix: kanbanboard and dashboard ui
Browse files
TaskTrackingSystem.WebApp/Components/App.razor
CHANGED
|
@@ -128,6 +128,42 @@
|
|
| 128 |
800: semanticGreenText,
|
| 129 |
900: semanticGreenText
|
| 130 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 131 |
blue: {
|
| 132 |
50: semanticNeutralBg,
|
| 133 |
100: semanticNeutralBg,
|
|
@@ -442,18 +478,6 @@
|
|
| 442 |
initFlatpickr();
|
| 443 |
}
|
| 444 |
}
|
| 445 |
-
window.taskKanban = {
|
| 446 |
-
draggedTaskId: null,
|
| 447 |
-
setDraggedTask(taskId) {
|
| 448 |
-
this.draggedTaskId = taskId?.toString() ?? null;
|
| 449 |
-
},
|
| 450 |
-
getDraggedTask() {
|
| 451 |
-
return this.draggedTaskId;
|
| 452 |
-
},
|
| 453 |
-
clearDraggedTask() {
|
| 454 |
-
this.draggedTaskId = null;
|
| 455 |
-
}
|
| 456 |
-
};
|
| 457 |
const themePreferenceStorageKey = 'tts-theme';
|
| 458 |
const normalizeThemePreference = theme =>
|
| 459 |
theme === 'dark' || theme === 'light' ? theme : 'light';
|
|
|
|
| 128 |
800: semanticGreenText,
|
| 129 |
900: semanticGreenText
|
| 130 |
},
|
| 131 |
+
teal: {
|
| 132 |
+
50: "#F0FDFA",
|
| 133 |
+
100: "#CCFBF1",
|
| 134 |
+
200: "#99F6E4",
|
| 135 |
+
300: "#5EEAD4",
|
| 136 |
+
400: "#2DD4BF",
|
| 137 |
+
500: "#14B8A6",
|
| 138 |
+
600: "#0D9488",
|
| 139 |
+
700: "#0F766E",
|
| 140 |
+
800: "#115E59",
|
| 141 |
+
900: "#134E4A"
|
| 142 |
+
},
|
| 143 |
+
cyan: {
|
| 144 |
+
50: "#ECFEFF",
|
| 145 |
+
100: "#CFFAFE",
|
| 146 |
+
200: "#A5F3FC",
|
| 147 |
+
300: "#67E8F9",
|
| 148 |
+
400: "#22D3EE",
|
| 149 |
+
500: "#06B6D4",
|
| 150 |
+
600: "#0891B2",
|
| 151 |
+
700: "#0E7490",
|
| 152 |
+
800: "#155E75",
|
| 153 |
+
900: "#164E63"
|
| 154 |
+
},
|
| 155 |
+
sky: {
|
| 156 |
+
50: "#F0F9FF",
|
| 157 |
+
100: "#E0F2FE",
|
| 158 |
+
200: "#BAE6FD",
|
| 159 |
+
300: "#7DD3FC",
|
| 160 |
+
400: "#38BDF8",
|
| 161 |
+
500: "#0EA5E9",
|
| 162 |
+
600: "#0284C7",
|
| 163 |
+
700: "#0369A1",
|
| 164 |
+
800: "#075985",
|
| 165 |
+
900: "#0C4A6E"
|
| 166 |
+
},
|
| 167 |
blue: {
|
| 168 |
50: semanticNeutralBg,
|
| 169 |
100: semanticNeutralBg,
|
|
|
|
| 478 |
initFlatpickr();
|
| 479 |
}
|
| 480 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 481 |
const themePreferenceStorageKey = 'tts-theme';
|
| 482 |
const normalizeThemePreference = theme =>
|
| 483 |
theme === 'dark' || theme === 'light' ? theme : 'light';
|
TaskTrackingSystem.WebApp/Components/Pages/KanbanBoard.razor
CHANGED
|
@@ -77,7 +77,7 @@
|
|
| 77 |
@foreach (var column in columns)
|
| 78 |
{
|
| 79 |
var tasksInColumn = VisibleTasks.Where(t => t.StatusId == column.StatusId).ToList();
|
| 80 |
-
<div class="flex flex-col rounded-xl border border-slate-200 bg-slate-50/50 overflow-hidden min-h-[400px]">
|
| 81 |
<!-- Column Header -->
|
| 82 |
<div class="flex items-center justify-between px-4 py-3 bg-white border-b border-slate-100">
|
| 83 |
<div class="flex items-center space-x-2">
|
|
@@ -98,7 +98,7 @@
|
|
| 98 |
{
|
| 99 |
@foreach (var task in tasksInColumn)
|
| 100 |
{
|
| 101 |
-
<div class="rounded-lg border border-slate-200 bg-white p-4 shadow-sm hover:shadow-md transition-shadow @(canUpdateTask ? "cursor-grab active:cursor-grabbing" : "cursor-default")"
|
| 102 |
data-task-id="@task.Id"
|
| 103 |
draggable="@canUpdateTask"
|
| 104 |
@ondragstart="() => HandleDragStart(task)"
|
|
@@ -268,15 +268,16 @@
|
|
| 268 |
? tasks.Where(t => t.ProjectId == selectedProjectId)
|
| 269 |
: tasks;
|
| 270 |
|
| 271 |
-
private
|
| 272 |
{
|
| 273 |
if (!canUpdateTask)
|
| 274 |
{
|
| 275 |
-
return;
|
| 276 |
}
|
| 277 |
|
| 278 |
draggedTask = task;
|
| 279 |
-
|
|
|
|
| 280 |
}
|
| 281 |
|
| 282 |
private void HandleDragOver()
|
|
@@ -300,14 +301,6 @@
|
|
| 300 |
private async Task HandleDrop(AppTaskStatus newStatusId)
|
| 301 |
{
|
| 302 |
var taskToMove = draggedTask;
|
| 303 |
-
if (taskToMove == null)
|
| 304 |
-
{
|
| 305 |
-
var draggedTaskId = await JS.InvokeAsync<string?>("taskKanban.getDraggedTask");
|
| 306 |
-
if (long.TryParse(draggedTaskId, out var id))
|
| 307 |
-
{
|
| 308 |
-
taskToMove = tasks.FirstOrDefault(t => t.Id == id);
|
| 309 |
-
}
|
| 310 |
-
}
|
| 311 |
|
| 312 |
if (taskToMove != null && taskToMove.StatusId != newStatusId)
|
| 313 |
{
|
|
@@ -316,14 +309,13 @@
|
|
| 316 |
|
| 317 |
draggedTask = null;
|
| 318 |
dropTargetStatus = null;
|
| 319 |
-
await JS.InvokeVoidAsync("taskKanban.clearDraggedTask");
|
| 320 |
}
|
| 321 |
|
| 322 |
-
private
|
| 323 |
{
|
| 324 |
draggedTask = null;
|
| 325 |
dropTargetStatus = null;
|
| 326 |
-
|
| 327 |
}
|
| 328 |
|
| 329 |
protected override async Task OnInitializedAsync()
|
|
|
|
| 77 |
@foreach (var column in columns)
|
| 78 |
{
|
| 79 |
var tasksInColumn = VisibleTasks.Where(t => t.StatusId == column.StatusId).ToList();
|
| 80 |
+
<div @key="column.StatusId" class="flex flex-col rounded-xl border border-slate-200 bg-slate-50/50 overflow-hidden min-h-[400px]">
|
| 81 |
<!-- Column Header -->
|
| 82 |
<div class="flex items-center justify-between px-4 py-3 bg-white border-b border-slate-100">
|
| 83 |
<div class="flex items-center space-x-2">
|
|
|
|
| 98 |
{
|
| 99 |
@foreach (var task in tasksInColumn)
|
| 100 |
{
|
| 101 |
+
<div @key="task.Id" class="rounded-lg border border-slate-200 bg-white p-4 shadow-sm hover:shadow-md transition-shadow @(canUpdateTask ? "cursor-grab active:cursor-grabbing" : "cursor-default")"
|
| 102 |
data-task-id="@task.Id"
|
| 103 |
draggable="@canUpdateTask"
|
| 104 |
@ondragstart="() => HandleDragStart(task)"
|
|
|
|
| 268 |
? tasks.Where(t => t.ProjectId == selectedProjectId)
|
| 269 |
: tasks;
|
| 270 |
|
| 271 |
+
private Task HandleDragStart(TaskDto task)
|
| 272 |
{
|
| 273 |
if (!canUpdateTask)
|
| 274 |
{
|
| 275 |
+
return Task.CompletedTask;
|
| 276 |
}
|
| 277 |
|
| 278 |
draggedTask = task;
|
| 279 |
+
dropTargetStatus = null;
|
| 280 |
+
return Task.CompletedTask;
|
| 281 |
}
|
| 282 |
|
| 283 |
private void HandleDragOver()
|
|
|
|
| 301 |
private async Task HandleDrop(AppTaskStatus newStatusId)
|
| 302 |
{
|
| 303 |
var taskToMove = draggedTask;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 304 |
|
| 305 |
if (taskToMove != null && taskToMove.StatusId != newStatusId)
|
| 306 |
{
|
|
|
|
| 309 |
|
| 310 |
draggedTask = null;
|
| 311 |
dropTargetStatus = null;
|
|
|
|
| 312 |
}
|
| 313 |
|
| 314 |
+
private Task HandleDragEnd()
|
| 315 |
{
|
| 316 |
draggedTask = null;
|
| 317 |
dropTargetStatus = null;
|
| 318 |
+
return Task.CompletedTask;
|
| 319 |
}
|
| 320 |
|
| 321 |
protected override async Task OnInitializedAsync()
|