@page "/tasks/taskssheet/{tasksSheetId}" @using Tasks.Module.Models @using Tasks.Module.Services @inject IFolderService FolderService @inject ITodoService TodoService @inject IDialogService Dialog
@* Header *@
Back to Tasks

@_tasksSheetName

Manage tasks in this sheet

@* Quick Add Input *@
Add Add Task
@* Tasks List *@ @if (_loading) {
} else if (!_tasksSheetFound) {

Tasks sheet not found

Go to Tasks
} else {
@foreach (var task in _tasks) { }
}
@code { [Parameter] public string tasksSheetId { get; set; } = string.Empty; private string _tasksSheetName = string.Empty; private bool _loading = true; private bool _tasksSheetFound = false; private CreateTodoItemDto editTask = new(); private string currentTaskId = string.Empty; private string quickAddTitle = string.Empty; private HashSet collapsedTasks = new(); private List _tasks = new(); private string _lastTasksSheetId = string.Empty; protected override async Task OnInitializedAsync() { await LoadTasksSheet(); } protected override async Task OnParametersSetAsync() { if (tasksSheetId != _lastTasksSheetId) { _lastTasksSheetId = tasksSheetId; collapsedTasks.Clear(); await LoadTasksSheet(); } } private async Task LoadTasksSheet() { _loading = true; try { var tasksSheet = await FolderService.GetTasksSheetByIdAsync(tasksSheetId); if (tasksSheet != null) { _tasksSheetName = tasksSheet.Title; _tasks = tasksSheet.Tasks; _tasksSheetFound = true; } else { _tasksSheetFound = false; } } finally { _loading = false; } } private async Task HandleQuickAdd(KeyboardEventArgs e) { if (e.Key == "Enter" && !string.IsNullOrWhiteSpace(quickAddTitle)) { await QuickAddTask(); } } private async Task QuickAddTask() { if (string.IsNullOrWhiteSpace(quickAddTitle)) return; var newTask = new CreateTodoItemDto { Title = quickAddTitle.Trim(), Priority = 0, ParentId = null }; await FolderService.AddTaskToTasksSheetAsync(tasksSheetId, newTask); quickAddTitle = string.Empty; await LoadTasksSheet(); } private void ToggleCollapse(string taskId) { if (collapsedTasks.Contains(taskId)) collapsedTasks.Remove(taskId); else collapsedTasks.Add(taskId); } private async Task ToggleTask(string id) { await FolderService.ToggleTaskInTasksSheetAsync(id); await LoadTasksSheet(); } private async Task DeleteTask(string id) { await FolderService.DeleteTaskInTasksSheetAsync(id); await LoadTasksSheet(); } private async Task OpenCreateDialog() { editTask = new CreateTodoItemDto(); var parameters = new DialogParameters { { x => x.Task, editTask }, { x => x.IsUpdate, false } }; var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true }; var dialog = await Dialog.ShowAsync("Create Task", parameters, options); var result = await dialog.Result; if (result is { Canceled: false }) { await FolderService.AddTaskToTasksSheetAsync(tasksSheetId, editTask); await LoadTasksSheet(); } } private async Task OpenAddChildDialog(TodoItemDto parentTask) { editTask = new CreateTodoItemDto { ParentId = parentTask.Id }; var parameters = new DialogParameters { { x => x.Task, editTask }, { x => x.IsUpdate, false }, { x => x.IsChild, true }, { x => x.ParentTitle, parentTask.Title } }; var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true }; var dialog = await Dialog.ShowAsync("Add Sub-task", parameters, options); var result = await dialog.Result; if (result is { Canceled: false }) { await LoadTasksSheet(); } } private async Task OpenUpdateDialog(TodoItemDto task) { currentTaskId = task.Id; editTask = new CreateTodoItemDto { Title = task.Title, Description = task.Description, Priority = task.Priority, DueDate = task.DueDate, ParentId = task.ParentId, CategoryId = task.CategoryId, TagIds = task.TagIds.ToList(), FileId = task.FileId }; var parameters = new DialogParameters { { x => x.Task, editTask }, { x => x.IsUpdate, true } }; var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true }; var dialog = await Dialog.ShowAsync("Update Task", parameters, options); var result = await dialog.Result; if (result is { Canceled: false }) { await TodoService.UpdateTodoAsync(new UpdateTodoItemDto { Id = currentTaskId, Title = editTask.Title, Description = editTask.Description, Priority = editTask.Priority, DueDate = editTask.DueDate, IsCompleted = task.IsCompleted, ParentId = editTask.ParentId, CategoryId = editTask.CategoryId, TagIds = editTask.TagIds, FileId = editTask.FileId }); await LoadTasksSheet(); } } }