@using Tasks.Module.Models @using Tasks.Module.Services @inject ICategoryService CategoryService @inject ITagService TagService @if (IsChild) { Adding sub-task to: @ParentTitle } @foreach (var cat in _flatCategories) { @if (cat.Depth > 0) { @for (int i = 0; i < cat.Depth; i++) {    } └ } @cat.Name } Low Medium High @foreach (var tag in _availableTags) { @tag.Name } Add @if (_selectedTagIds.Count > 0) {
@foreach (var tagId in _selectedTagIds) { var tag = _allTags.FirstOrDefault(t => t.Id == tagId); if (tag != null) { @tag.Name } }
}
Cancel Save
@code { [Parameter] public CreateTodoItemDto Task { get; set; } = new(); [Parameter] public bool IsUpdate { get; set; } [Parameter] public bool IsChild { get; set; } [Parameter] public string? ParentTitle { get; set; } [CascadingParameter] private IMudDialogInstance? MudDialog { get; set; } private List _flatCategories = new(); private List _allTags = new(); private List _availableTags = new(); private int _priority = 0; private string? _selectedTagId; private List _selectedTagIds = new(); private string? _categoryId = null; protected override async Task OnParametersSetAsync() { await LoadData(); } private async Task LoadData() { var hierarchy = await CategoryService.GetHierarchyAsync(); _flatCategories = FlattenCategories(hierarchy); _allTags = await TagService.GetAllAsync(); _availableTags = _allTags.ToList(); _priority = Task.Priority; if (!string.IsNullOrEmpty(Task.CategoryId) && _flatCategories.Any(c => c.Id == Task.CategoryId)) { _categoryId = Task.CategoryId; } else { _categoryId = null; } _selectedTagIds = Task.TagIds?.ToList() ?? new List(); _availableTags = _allTags.Where(t => !_selectedTagIds.Contains(t.Id)).ToList(); } private List FlattenCategories(List categories, int depth = 0) { var result = new List(); foreach (var cat in categories) { result.Add(new FlatCategory { Id = cat.Id, Name = cat.Name, Depth = depth }); if (cat.Children.Count > 0) { result.AddRange(FlattenCategories(cat.Children, depth + 1)); } } return result; } private void AddSelectedTag() { if (!string.IsNullOrEmpty(_selectedTagId) && !_selectedTagIds.Contains(_selectedTagId)) { _selectedTagIds.Add(_selectedTagId); _availableTags = _allTags.Where(t => !_selectedTagIds.Contains(t.Id)).ToList(); _selectedTagId = null; StateHasChanged(); } } private void RemoveTag(string tagId) { _selectedTagIds.Remove(tagId); _availableTags = _allTags.Where(t => !_selectedTagIds.Contains(t.Id)).ToList(); StateHasChanged(); } private void Submit() { Task.Priority = _priority; Task.CategoryId = _categoryId; Task.TagIds = _selectedTagIds; MudDialog?.Close(DialogResult.Ok(true)); } private void Cancel() { MudDialog?.Cancel(); } }