User commited on
Commit
0309c19
·
1 Parent(s): 72f2be7

add: adjust UI

Browse files
TaskTrackingSystem.WebApp/Components/Pages/Home.razor CHANGED
@@ -224,7 +224,7 @@ else
224
  @foreach (var task in ChecklistTasks)
225
  {
226
  <div class="flex items-start gap-3 p-2 rounded-lg hover:bg-slate-50 transition-colors">
227
- <input type="checkbox" checked="@(task.StatusId == 3)" @onchange="() => ToggleTaskStatus(task)" class="h-4 w-4 rounded border-slate-300 text-emerald-600 accent-emerald-600 mt-0.5" />
228
  <div class="min-w-0 flex-1">
229
  <p class="text-xs font-semibold text-slate-800 truncate @(task.StatusId == 3 ? "line-through text-slate-400" : "")">@task.Title</p>
230
  <p class="text-[10px] text-slate-400">Due @task.DueDate.ToString("dd-MMM-yyyy")</p>
@@ -277,11 +277,13 @@ else
277
  private string currentUserRole = "Member";
278
  private List<DateTime> weekDates = new();
279
  private bool canCreateTask = false;
 
280
 
281
  protected override async Task OnInitializedAsync()
282
  {
283
  var authState = await AuthStateProvider.GetAuthenticationStateAsync();
284
  canCreateTask = authState.User.IsInRole("Admin") || await MenuAuthorization.HasAccessCodeAsync(authState.User, "Tasks_Create");
 
285
  await LoadDashboardData();
286
  }
287
 
@@ -376,6 +378,11 @@ else
376
 
377
  private async Task ToggleTaskStatus(TaskDto task)
378
  {
 
 
 
 
 
379
  var newStatusId = task.StatusId == 3 ? 1 : 3;
380
  var client = ApiClient.CreateClient();
381
  try
 
224
  @foreach (var task in ChecklistTasks)
225
  {
226
  <div class="flex items-start gap-3 p-2 rounded-lg hover:bg-slate-50 transition-colors">
227
+ <input type="checkbox" checked="@(task.StatusId == 3)" @onchange="() => ToggleTaskStatus(task)" disabled="@(!canUpdateTask)" class="h-4 w-4 rounded border-slate-300 text-emerald-600 accent-emerald-600 mt-0.5 disabled:opacity-50 disabled:cursor-not-allowed" />
228
  <div class="min-w-0 flex-1">
229
  <p class="text-xs font-semibold text-slate-800 truncate @(task.StatusId == 3 ? "line-through text-slate-400" : "")">@task.Title</p>
230
  <p class="text-[10px] text-slate-400">Due @task.DueDate.ToString("dd-MMM-yyyy")</p>
 
277
  private string currentUserRole = "Member";
278
  private List<DateTime> weekDates = new();
279
  private bool canCreateTask = false;
280
+ private bool canUpdateTask = false;
281
 
282
  protected override async Task OnInitializedAsync()
283
  {
284
  var authState = await AuthStateProvider.GetAuthenticationStateAsync();
285
  canCreateTask = authState.User.IsInRole("Admin") || await MenuAuthorization.HasAccessCodeAsync(authState.User, "Tasks_Create");
286
+ canUpdateTask = authState.User.IsInRole("Admin") || await MenuAuthorization.HasAccessCodeAsync(authState.User, "Tasks_Update");
287
  await LoadDashboardData();
288
  }
289
 
 
378
 
379
  private async Task ToggleTaskStatus(TaskDto task)
380
  {
381
+ if (!canUpdateTask)
382
+ {
383
+ return;
384
+ }
385
+
386
  var newStatusId = task.StatusId == 3 ? 1 : 3;
387
  var client = ApiClient.CreateClient();
388
  try
TaskTrackingSystem.WebApp/Components/Pages/KanbanBoard.razor CHANGED
@@ -72,8 +72,8 @@
72
  {
73
  @foreach (var task in tasksInColumn)
74
  {
75
- <div class="rounded-lg border border-slate-200 bg-white p-4 shadow-sm hover:shadow-md transition-shadow cursor-grab active:cursor-grabbing"
76
- draggable="true"
77
  @ondragstart="() => HandleDragStart(task)">
78
  <div class="flex items-start justify-between">
79
  <h4 class="text-sm font-semibold text-slate-900">@task.Title</h4>
@@ -173,6 +173,7 @@
173
  private bool isAdmin = false;
174
  private bool isManager = false;
175
  private bool canCreateTask = false;
 
176
  private long currentUserId = 0;
177
  private bool showTaskModal = false;
178
  private bool isSaving = false;
@@ -232,6 +233,7 @@
232
  isAdmin = user.IsInRole("Admin");
233
  isManager = user.IsInRole("Manager");
234
  canCreateTask = isAdmin || await MenuAuthorization.HasAccessCodeAsync(user, "Tasks_Create");
 
235
  await LoadTasks();
236
  }
237
 
@@ -283,6 +285,11 @@
283
 
284
  private async Task MoveTask(long taskId, long newStatusId)
285
  {
 
 
 
 
 
286
  var client = ApiClient.CreateClient();
287
  try
288
  {
 
72
  {
73
  @foreach (var task in tasksInColumn)
74
  {
75
+ <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")"
76
+ draggable="@canUpdateTask"
77
  @ondragstart="() => HandleDragStart(task)">
78
  <div class="flex items-start justify-between">
79
  <h4 class="text-sm font-semibold text-slate-900">@task.Title</h4>
 
173
  private bool isAdmin = false;
174
  private bool isManager = false;
175
  private bool canCreateTask = false;
176
+ private bool canUpdateTask = false;
177
  private long currentUserId = 0;
178
  private bool showTaskModal = false;
179
  private bool isSaving = false;
 
233
  isAdmin = user.IsInRole("Admin");
234
  isManager = user.IsInRole("Manager");
235
  canCreateTask = isAdmin || await MenuAuthorization.HasAccessCodeAsync(user, "Tasks_Create");
236
+ canUpdateTask = isAdmin || await MenuAuthorization.HasAccessCodeAsync(user, "Tasks_Update");
237
  await LoadTasks();
238
  }
239
 
 
285
 
286
  private async Task MoveTask(long taskId, long newStatusId)
287
  {
288
+ if (!canUpdateTask)
289
+ {
290
+ return;
291
+ }
292
+
293
  var client = ApiClient.CreateClient();
294
  try
295
  {
TaskTrackingSystem.WebApp/Components/Pages/OverdueTasksReport.razor CHANGED
@@ -8,6 +8,8 @@
8
  @attribute [Authorize]
9
  @inject ApiClientService ApiClient
10
  @inject IJSRuntime JS
 
 
11
 
12
  <PageTitle>Overdue &amp; Delayed Tasks Report</PageTitle>
13
 
@@ -221,9 +223,12 @@
221
  <button @onclick="() => RemindAssignee(task)" class="text-xs font-semibold text-violet-600 hover:text-violet-900 transition-colors font-sans">
222
  Remind
223
  </button>
224
- <button @onclick="() => OpenAdjustDueDateModal(task)" class="text-xs font-semibold text-slate-600 hover:text-slate-900 transition-colors font-sans">
225
- Adjust Due Date
226
- </button>
 
 
 
227
  </td>
228
  </tr>
229
  }
@@ -304,6 +309,7 @@
304
  private int criticalCount = 0;
305
  private int dueSoonCount = 0;
306
  private int avgDaysOverdue = 0;
 
307
 
308
  private IEnumerable<TaskDto> FilteredTasks
309
  {
@@ -347,6 +353,8 @@
347
 
348
  protected override async Task OnInitializedAsync()
349
  {
 
 
350
  var client = ApiClient.CreateClient();
351
  try
352
  {
@@ -453,6 +461,11 @@
453
 
454
  private async Task SaveDueDateAdjustment()
455
  {
 
 
 
 
 
456
  if (selectedTaskForAdjustment == null) return;
457
 
458
  isAdjusting = true;
 
8
  @attribute [Authorize]
9
  @inject ApiClientService ApiClient
10
  @inject IJSRuntime JS
11
+ @inject AuthenticationStateProvider AuthStateProvider
12
+ @inject MenuAuthorizationService MenuAuthorization
13
 
14
  <PageTitle>Overdue &amp; Delayed Tasks Report</PageTitle>
15
 
 
223
  <button @onclick="() => RemindAssignee(task)" class="text-xs font-semibold text-violet-600 hover:text-violet-900 transition-colors font-sans">
224
  Remind
225
  </button>
226
+ @if (canUpdateTask)
227
+ {
228
+ <button @onclick="() => OpenAdjustDueDateModal(task)" class="text-xs font-semibold text-slate-600 hover:text-slate-900 transition-colors font-sans">
229
+ Adjust Due Date
230
+ </button>
231
+ }
232
  </td>
233
  </tr>
234
  }
 
309
  private int criticalCount = 0;
310
  private int dueSoonCount = 0;
311
  private int avgDaysOverdue = 0;
312
+ private bool canUpdateTask = false;
313
 
314
  private IEnumerable<TaskDto> FilteredTasks
315
  {
 
353
 
354
  protected override async Task OnInitializedAsync()
355
  {
356
+ var authState = await AuthStateProvider.GetAuthenticationStateAsync();
357
+ canUpdateTask = authState.User.IsInRole("Admin") || await MenuAuthorization.HasAccessCodeAsync(authState.User, "Tasks_Update");
358
  var client = ApiClient.CreateClient();
359
  try
360
  {
 
461
 
462
  private async Task SaveDueDateAdjustment()
463
  {
464
+ if (!canUpdateTask)
465
+ {
466
+ return;
467
+ }
468
+
469
  if (selectedTaskForAdjustment == null) return;
470
 
471
  isAdjusting = true;
TaskTrackingSystem.WebApp/Components/Pages/Tasks.razor CHANGED
@@ -209,8 +209,8 @@
209
  {
210
  @foreach (var task in tasksInColumn)
211
  {
212
- <div class="rounded-lg border border-slate-200 bg-white p-4 shadow-sm hover:shadow-md transition-all cursor-grab active:cursor-grabbing"
213
- draggable="true"
214
  @ondragstart="() => HandleDragStart(task)">
215
  <div class="flex items-start justify-between">
216
  <h4 class="text-sm font-semibold text-slate-900">@task.Title</h4>
@@ -543,6 +543,12 @@
543
 
544
  private async Task HandleDrop(long newStatusId)
545
  {
 
 
 
 
 
 
546
  if (draggedTask != null && draggedTask.StatusId != newStatusId)
547
  {
548
  await MoveTask(draggedTask.Id, newStatusId);
@@ -552,6 +558,11 @@
552
 
553
  private async Task MoveTask(long taskId, long newStatusId)
554
  {
 
 
 
 
 
555
  var client = ApiClient.CreateClient();
556
  try
557
  {
@@ -600,6 +611,11 @@
600
 
601
  private async Task ToggleTaskStatus(TaskDto task)
602
  {
 
 
 
 
 
603
  var newStatusId = task.StatusId == 3 ? 1 : 3;
604
  var client = ApiClient.CreateClient();
605
  try
 
209
  {
210
  @foreach (var task in tasksInColumn)
211
  {
212
+ <div class="rounded-lg border border-slate-200 bg-white p-4 shadow-sm hover:shadow-md transition-all @(canUpdateTask ? "cursor-grab active:cursor-grabbing" : "cursor-default")"
213
+ draggable="@canUpdateTask"
214
  @ondragstart="() => HandleDragStart(task)">
215
  <div class="flex items-start justify-between">
216
  <h4 class="text-sm font-semibold text-slate-900">@task.Title</h4>
 
543
 
544
  private async Task HandleDrop(long newStatusId)
545
  {
546
+ if (!canUpdateTask)
547
+ {
548
+ draggedTask = null;
549
+ return;
550
+ }
551
+
552
  if (draggedTask != null && draggedTask.StatusId != newStatusId)
553
  {
554
  await MoveTask(draggedTask.Id, newStatusId);
 
558
 
559
  private async Task MoveTask(long taskId, long newStatusId)
560
  {
561
+ if (!canUpdateTask)
562
+ {
563
+ return;
564
+ }
565
+
566
  var client = ApiClient.CreateClient();
567
  try
568
  {
 
611
 
612
  private async Task ToggleTaskStatus(TaskDto task)
613
  {
614
+ if (!canUpdateTask)
615
+ {
616
+ return;
617
+ }
618
+
619
  var newStatusId = task.StatusId == 3 ? 1 : 3;
620
  var client = ApiClient.CreateClient();
621
  try