namespace practiceApplicaiton; public partial class BookingsPage : ContentPage { private Booking? _selected; public bool CanEdit => Database.IsAdmin; public BookingsPage() { InitializeComponent(); BindingContext = this; } protected override async void OnAppearing() { base.OnAppearing(); await LoadAsync(); } private async Task LoadAsync(string search = "") { try { var data = await Repository.GetBookingsAsync(search); BookingsList.ItemsSource = data; } catch (Exception ex) { await DisplayAlert("Ошибка", ex.Message, "OK"); } } private async void OnSearchChanged(object sender, TextChangedEventArgs e) => await LoadAsync(e.NewTextValue); private void OnSelectionChanged(object sender, SelectionChangedEventArgs e) { _selected = e.CurrentSelection.FirstOrDefault() as Booking; EditButton.IsEnabled = _selected != null; DeleteButton.IsEnabled = _selected != null; } private async void OnAddClicked(object sender, EventArgs e) { await Navigation.PushAsync(new BookingEditPage(null)); await LoadAsync(); } private async void OnEditClicked(object sender, EventArgs e) { if (_selected == null) return; await Navigation.PushAsync(new BookingEditPage(_selected)); await LoadAsync(); } private async void OnDeleteClicked(object sender, EventArgs e) { if (_selected == null) return; bool confirm = await DisplayAlert("Удалить", $"Удалить бронирование #{_selected.BookingId}?", "Да", "Отмена"); if (!confirm) return; try { await Repository.DeleteBookingAsync(_selected.BookingId); await LoadAsync(); } catch (Exception ex) { await DisplayAlert("Ошибка", ex.Message, "OK"); } } }