From 42c410d9824d68228129af5ecbcc4282de8b18c7 Mon Sep 17 00:00:00 2001 From: Rafeek-Khoudare Date: Mon, 7 Jul 2025 17:07:38 +0300 Subject: [PATCH] use TimeOfDay instead of String --- .../data/dummy_bookable_spaces_service.dart | 15 +++++----- .../data/dummy_non_nookable_spaces.dart | 13 +++++---- .../domain/models/bookable_space_config.dart | 28 +++++++++++-------- .../send_bookable_spaces_to_api_params.dart | 9 ++++-- .../non_bookaable_spaces_bloc.dart | 10 ++++++- 5 files changed, 47 insertions(+), 28 deletions(-) diff --git a/lib/pages/access_management/manage_bookable_spaces/data/dummy_bookable_spaces_service.dart b/lib/pages/access_management/manage_bookable_spaces/data/dummy_bookable_spaces_service.dart index c3687119..a4255e2f 100644 --- a/lib/pages/access_management/manage_bookable_spaces/data/dummy_bookable_spaces_service.dart +++ b/lib/pages/access_management/manage_bookable_spaces/data/dummy_bookable_spaces_service.dart @@ -1,5 +1,6 @@ -import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart'; +import 'package:flutter/material.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_config.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/bookable_spaces_params.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/service/bookable_spaces_service.dart'; import 'package:syncrow_web/pages/space_management_v2/main_module/shared/models/paginated_data_model.dart'; @@ -16,8 +17,8 @@ class DummyBookableSpacesService implements BookableSpacesService { configUuid: 'uuid', bookableDays: ['wed', 'saturday'], availability: true, - bookingEndTime: '08:00 PM', - bookingStartTime: '5:00 PM', + bookingEndTime: const TimeOfDay(hour: 13, minute: 20), + bookingStartTime: const TimeOfDay(hour: 13, minute: 20), cost: 6, ), spaceUuid: 'uuiiddd', @@ -29,8 +30,8 @@ class DummyBookableSpacesService implements BookableSpacesService { configUuid: 'uuid', bookableDays: ['wed', 'thur'], availability: true, - bookingEndTime: '08:00 PM', - bookingStartTime: '5:00 PM', + bookingEndTime: const TimeOfDay(hour: 13, minute: 20), + bookingStartTime: const TimeOfDay(hour: 13, minute: 20), cost: 6, ), spaceUuid: 'uuiiddd', @@ -42,8 +43,8 @@ class DummyBookableSpacesService implements BookableSpacesService { configUuid: 'uuid', bookableDays: ['wed', 'fri', 'tues'], availability: true, - bookingEndTime: '08:00 PM', - bookingStartTime: '5:00 PM', + bookingEndTime: const TimeOfDay(hour: 13, minute: 20), + bookingStartTime: const TimeOfDay(hour: 13, minute: 20), cost: 6, ), spaceUuid: 'uuiiddd', diff --git a/lib/pages/access_management/manage_bookable_spaces/data/dummy_non_nookable_spaces.dart b/lib/pages/access_management/manage_bookable_spaces/data/dummy_non_nookable_spaces.dart index 6f59e368..675fcf4c 100644 --- a/lib/pages/access_management/manage_bookable_spaces/data/dummy_non_nookable_spaces.dart +++ b/lib/pages/access_management/manage_bookable_spaces/data/dummy_non_nookable_spaces.dart @@ -1,3 +1,4 @@ +import 'package:flutter/material.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_config.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/non_bookable_spaces_params.dart'; @@ -17,8 +18,8 @@ class DummyNonNookableSpaces implements NonBookableSpacesService { configUuid: 'uuid', bookableDays: ['wed', 'saturday'], availability: true, - bookingEndTime: '08:00 PM', - bookingStartTime: '5:00 PM', + bookingEndTime: const TimeOfDay(hour: 13, minute: 20), + bookingStartTime: const TimeOfDay(hour: 6, minute: 20), cost: 6, ), spaceUuid: 'uuiiddd', @@ -30,8 +31,8 @@ class DummyNonNookableSpaces implements NonBookableSpacesService { configUuid: 'uuid', bookableDays: ['wed', 'saturday', 'thuresday'], availability: true, - bookingEndTime: '08:00 PM', - bookingStartTime: '5:00 PM', + bookingEndTime: const TimeOfDay(hour: 13, minute: 20), + bookingStartTime: const TimeOfDay(hour: 5, minute: 20), cost: 5, ), spaceUuid: 'uuiiddd', @@ -50,8 +51,8 @@ class DummyNonNookableSpaces implements NonBookableSpacesService { 'thuresday' ], availability: true, - bookingEndTime: '08:00 PM', - bookingStartTime: '5:00 PM', + bookingEndTime: const TimeOfDay(hour: 13, minute: 20), + bookingStartTime: const TimeOfDay(hour: 15, minute: 20), cost: 2, ), spaceUuid: 'uuiiddd', diff --git a/lib/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_config.dart b/lib/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_config.dart index 68e7bfd8..958822bd 100644 --- a/lib/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_config.dart +++ b/lib/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_config.dart @@ -1,8 +1,10 @@ +import 'package:flutter/material.dart'; + class BookableSpaceConfig { String configUuid; List bookableDays; - String bookingStartTime; - String bookingEndTime; + TimeOfDay bookingStartTime; + TimeOfDay bookingEndTime; int cost; bool availability; BookableSpaceConfig({ @@ -17,8 +19,8 @@ class BookableSpaceConfig { configUuid: '', bookableDays: [], availability: false, - bookingEndTime: '', - bookingStartTime: '', + bookingEndTime: TimeOfDay.now(), + bookingStartTime: TimeOfDay.now(), cost: -1, ); factory BookableSpaceConfig.fromJson(Map json) => @@ -26,14 +28,18 @@ class BookableSpaceConfig { configUuid: json['uuid'] as String, bookableDays: json['daysAvailable'] as List, availability: (json['active'] as bool?) ?? false, - bookingEndTime: json['startTime'] as String, - bookingStartTime: json['endTime'] as String, + bookingEndTime: parseTimeOfDay(json['startTime'] as String), + bookingStartTime: parseTimeOfDay(json['endTime'] as String), cost: json['points'] as int, ); + + static TimeOfDay parseTimeOfDay(String timeString) { + final parts = timeString.split(':'); + final hour = int.parse(parts[0]); + final minute = int.parse(parts[1]); + return TimeOfDay(hour: hour, minute: minute); + } + bool get isValid => - configUuid.isNotEmpty && - bookableDays.isNotEmpty && - bookingStartTime.isNotEmpty && - bookingEndTime.isNotEmpty && - cost > 0; + configUuid.isNotEmpty && bookableDays.isNotEmpty && cost > 0; } diff --git a/lib/pages/access_management/manage_bookable_spaces/domain/service/send_bookable_spaces_to_api_params.dart b/lib/pages/access_management/manage_bookable_spaces/domain/service/send_bookable_spaces_to_api_params.dart index caa489c0..73e590eb 100644 --- a/lib/pages/access_management/manage_bookable_spaces/domain/service/send_bookable_spaces_to_api_params.dart +++ b/lib/pages/access_management/manage_bookable_spaces/domain/service/send_bookable_spaces_to_api_params.dart @@ -1,4 +1,5 @@ import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart'; +import 'package:syncrow_web/utils/string_utils.dart'; class SendBookableSpacesToApiParams { List spaceUuids; @@ -14,7 +15,7 @@ class SendBookableSpacesToApiParams { required this.points, }); - static SendBookableSpacesToApiParams fromBookableSpacesModel( + static SendBookableSpacesToApiParams fromBookableSpacesModel( List bookableSpaces) { return SendBookableSpacesToApiParams( spaceUuids: bookableSpaces.map((space) => space.spaceUuid).toList(), @@ -22,8 +23,10 @@ class SendBookableSpacesToApiParams { .expand((space) => space.spaceConfig.bookableDays) .toSet() .toList(), - startTime: bookableSpaces.first.spaceConfig.bookingStartTime, - endTime: bookableSpaces.first.spaceConfig.bookingEndTime, + startTime: formatTimeOfDayTo24HourString( + bookableSpaces.first.spaceConfig.bookingStartTime), + endTime: formatTimeOfDayTo24HourString( + bookableSpaces.first.spaceConfig.bookingEndTime), points: bookableSpaces.first.spaceConfig.cost, ); } diff --git a/lib/pages/access_management/manage_bookable_spaces/presentation/blocs/non_bookable_spaces_bloc/non_bookaable_spaces_bloc.dart b/lib/pages/access_management/manage_bookable_spaces/presentation/blocs/non_bookable_spaces_bloc/non_bookaable_spaces_bloc.dart index 24ac31d7..8c33e54d 100644 --- a/lib/pages/access_management/manage_bookable_spaces/presentation/blocs/non_bookable_spaces_bloc/non_bookaable_spaces_bloc.dart +++ b/lib/pages/access_management/manage_bookable_spaces/presentation/blocs/non_bookable_spaces_bloc/non_bookaable_spaces_bloc.dart @@ -1,5 +1,6 @@ import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; +import 'package:flutter/material.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/non_bookable_spaces_params.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/service/non_bookable_spaces_service.dart'; @@ -20,6 +21,12 @@ class NonBookableSpacesBloc on(_onRemoveFromBookableSpaceEvent); on(_onSendBookableSpacesToApi); } + + TimeOfDay get endTime => + selectedBookableSpaces.first.spaceConfig.bookingEndTime; + + TimeOfDay get startTime => + selectedBookableSpaces.first.spaceConfig.bookingStartTime; Future _onLoadUnBookableSpacesEvent(LoadUnBookableSpacesEvent event, Emitter emit) async { emit(NonBookableSpacesLoading()); @@ -80,7 +87,8 @@ class NonBookableSpacesBloc try { await nonBookableSpacesService.sendBookableSpacesToApi( SendBookableSpacesToApiParams.fromBookableSpacesModel( - selectedBookableSpaces), + selectedBookableSpaces, + ), ); } catch (e) { emit(