From 05af323aa5d2ee832bc7b273c5f72132ae966d82 Mon Sep 17 00:00:00 2001 From: Freek van de Ven Date: Fri, 26 Jul 2024 10:44:54 +0200 Subject: [PATCH] fix: add validation error handling for week template saving --- .../screens/template_week_modification.dart | 34 ++++++++++++++----- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/packages/flutter_availability/lib/src/ui/screens/template_week_modification.dart b/packages/flutter_availability/lib/src/ui/screens/template_week_modification.dart index feaf817..e54d562 100644 --- a/packages/flutter_availability/lib/src/ui/screens/template_week_modification.dart +++ b/packages/flutter_availability/lib/src/ui/screens/template_week_modification.dart @@ -1,4 +1,5 @@ import "package:flutter/material.dart"; +import "package:flutter_availability/src/service/errors.dart"; import "package:flutter_availability/src/ui/view_models/template_daydata_view_model.dart"; import "package:flutter_availability/src/ui/view_models/week_template_view_models.dart"; import "package:flutter_availability/src/ui/widgets/color_selection.dart"; @@ -99,17 +100,32 @@ class _WeekTemplateModificationScreenState } Future onSavePressed() async { - if (!_viewModel.isValid) { - // TODO(freek): show error message - return; - } var template = _viewModel.toTemplate(); - if (widget.template == null) { - await service.createTemplate(template); - } else { - await service.updateTemplate(template); + AvailabilityError? error; + try { + if (widget.template == null) { + await service.createTemplate(template); + } else { + await service.updateTemplate(template); + } + widget.onExit(); + } on BreakEndBeforeStartException { + error = AvailabilityError.breakEndBeforeStart; + } on BreakSubmittedDurationTooLongException { + error = AvailabilityError.breakSubmittedDurationTooLong; + } on TemplateEndBeforeStartException { + error = AvailabilityError.endBeforeStart; + } on TemplateBreakBeforeStartException { + error = AvailabilityError.templateBreakBeforeStart; + } on TemplateBreakAfterEndException { + error = AvailabilityError.templateBreakAfterEnd; + } + if (error != null && context.mounted) { + await options.errorDisplayBuilder( + context, + error, + ); } - widget.onExit(); } useEffect(() {