using System.Collections.ObjectModel; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using FieldLogger.Models; using FieldLogger.Services.Data; namespace FieldLogger.ViewModels; [QueryProperty(nameof(JobId), "jobId")] public sealed partial class JobDetailViewModel : ObservableObject { private readonly AppDatabase _database; [ObservableProperty] private int _jobId; [ObservableProperty] private string _jobName = ""; [ObservableProperty] private int _pointCount; public ObservableCollection Points { get; } = new(); public JobDetailViewModel(AppDatabase database) { _database = database; } public async Task RefreshAsync() { var job = await _database.GetJobAsync(JobId); if (job is null) return; JobName = job.Name; var points = await _database.GetPointsAsync(JobId); PointCount = points.Count; Points.Clear(); foreach (var p in points) Points.Add(p); } [RelayCommand] private Task ViewMapAsync() => Shell.Current.GoToAsync($"//map?jobId={JobId}"); [RelayCommand] private async Task DeletePointAsync(LoggedPoint point) { var confirmed = await Shell.Current.DisplayAlert("Delete Point", $"Delete point #{point.Id} logged {point.TimestampUtc.ToLocalTime():g}?", "Delete", "Cancel"); if (!confirmed) return; await _database.DeletePointAsync(point.Id); Points.Remove(point); PointCount = Points.Count; } }