From 3478436227d423baff33469b50052cd91ce3015c Mon Sep 17 00:00:00 2001 From: Achintha Isuru Date: Sat, 14 Mar 2026 01:23:27 -0400 Subject: [PATCH] refactor(clock_in): reorganize geofence and clock-in BLoC structure - Deleted old geofence_event.dart and geofence_state.dart files. - Created new geofence_event.dart and geofence_state.dart files under a dedicated geofence directory. - Moved clock_in_bloc.dart, clock_in_event.dart, and clock_in_state.dart to a new clock_in directory for better organization. - Updated import paths throughout the codebase to reflect the new structure. - Implemented new ClockInBloc and GeofenceBloc classes to handle clock-in and geofence functionalities respectively. - Enhanced event and state management for clock-in operations, including handling location verification and geofence checks. --- .../bloc/{ => clock_in}/clock_in_bloc.dart | 12 ++++++------ .../bloc/{ => clock_in}/clock_in_event.dart | 0 .../bloc/{ => clock_in}/clock_in_state.dart | 0 .../bloc/{ => geofence}/geofence_bloc.dart | 6 +++--- .../bloc/{ => geofence}/geofence_event.dart | 2 +- .../bloc/{ => geofence}/geofence_state.dart | 0 .../lib/src/presentation/pages/clock_in_page.dart | 6 +++--- .../src/presentation/widgets/check_in_mode_tab.dart | 4 ++-- .../widgets/clock_in_action_section.dart | 12 ++++++------ .../lib/src/presentation/widgets/clock_in_body.dart | 10 +++++----- .../geofence_override_modal.dart | 4 ++-- .../geofence_status_banner.dart | 4 ++-- .../permission_denied_banner.dart | 6 +++--- .../geofence_status_banner/timeout_banner.dart | 4 ++-- .../clock_in/lib/src/staff_clock_in_module.dart | 4 ++-- 15 files changed, 37 insertions(+), 37 deletions(-) rename apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/{ => clock_in}/clock_in_bloc.dart (94%) rename apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/{ => clock_in}/clock_in_event.dart (100%) rename apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/{ => clock_in}/clock_in_state.dart (100%) rename apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/{ => geofence}/geofence_bloc.dart (97%) rename apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/{ => geofence}/geofence_event.dart (98%) rename apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/{ => geofence}/geofence_state.dart (100%) diff --git a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/clock_in_bloc.dart b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/clock_in/clock_in_bloc.dart similarity index 94% rename from apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/clock_in_bloc.dart rename to apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/clock_in/clock_in_bloc.dart index c30703f5..f3bf5a7f 100644 --- a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/clock_in_bloc.dart +++ b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/clock_in/clock_in_bloc.dart @@ -2,12 +2,12 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:krow_core/core.dart'; import 'package:krow_domain/krow_domain.dart'; -import '../../domain/arguments/clock_in_arguments.dart'; -import '../../domain/arguments/clock_out_arguments.dart'; -import '../../domain/usecases/clock_in_usecase.dart'; -import '../../domain/usecases/clock_out_usecase.dart'; -import '../../domain/usecases/get_attendance_status_usecase.dart'; -import '../../domain/usecases/get_todays_shift_usecase.dart'; +import '../../../domain/arguments/clock_in_arguments.dart'; +import '../../../domain/arguments/clock_out_arguments.dart'; +import '../../../domain/usecases/clock_in_usecase.dart'; +import '../../../domain/usecases/clock_out_usecase.dart'; +import '../../../domain/usecases/get_attendance_status_usecase.dart'; +import '../../../domain/usecases/get_todays_shift_usecase.dart'; import 'clock_in_event.dart'; import 'clock_in_state.dart'; diff --git a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/clock_in_event.dart b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/clock_in/clock_in_event.dart similarity index 100% rename from apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/clock_in_event.dart rename to apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/clock_in/clock_in_event.dart diff --git a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/clock_in_state.dart b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/clock_in/clock_in_state.dart similarity index 100% rename from apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/clock_in_state.dart rename to apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/clock_in/clock_in_state.dart diff --git a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/geofence_bloc.dart b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/geofence/geofence_bloc.dart similarity index 97% rename from apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/geofence_bloc.dart rename to apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/geofence/geofence_bloc.dart index afb48987..1472d3a2 100644 --- a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/geofence_bloc.dart +++ b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/geofence/geofence_bloc.dart @@ -4,9 +4,9 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:krow_core/core.dart'; import 'package:krow_domain/krow_domain.dart'; -import '../../data/services/background_geofence_service.dart'; -import '../../domain/models/geofence_result.dart'; -import '../../domain/services/geofence_service_interface.dart'; +import '../../../data/services/background_geofence_service.dart'; +import '../../../domain/models/geofence_result.dart'; +import '../../../domain/services/geofence_service_interface.dart'; import 'geofence_event.dart'; import 'geofence_state.dart'; diff --git a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/geofence_event.dart b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/geofence/geofence_event.dart similarity index 98% rename from apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/geofence_event.dart rename to apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/geofence/geofence_event.dart index 65454979..1b1c219b 100644 --- a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/geofence_event.dart +++ b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/geofence/geofence_event.dart @@ -1,6 +1,6 @@ import 'package:equatable/equatable.dart'; -import '../../domain/models/geofence_result.dart'; +import '../../../domain/models/geofence_result.dart'; /// Base event for the [GeofenceBloc]. abstract class GeofenceEvent extends Equatable { diff --git a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/geofence_state.dart b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/geofence/geofence_state.dart similarity index 100% rename from apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/geofence_state.dart rename to apps/mobile/packages/features/staff/clock_in/lib/src/presentation/bloc/geofence/geofence_state.dart diff --git a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/pages/clock_in_page.dart b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/pages/clock_in_page.dart index f3b36fe2..7b07af80 100644 --- a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/pages/clock_in_page.dart +++ b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/pages/clock_in_page.dart @@ -4,9 +4,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_modular/flutter_modular.dart'; -import '../bloc/clock_in_bloc.dart'; -import '../bloc/clock_in_state.dart'; -import '../bloc/geofence_bloc.dart'; +import '../bloc/clock_in/clock_in_bloc.dart'; +import '../bloc/clock_in/clock_in_state.dart'; +import '../bloc/geofence/geofence_bloc.dart'; import '../widgets/clock_in_body.dart'; import '../widgets/clock_in_page_skeleton/clock_in_page_skeleton.dart'; diff --git a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/check_in_mode_tab.dart b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/check_in_mode_tab.dart index 44f237d4..5eedf057 100644 --- a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/check_in_mode_tab.dart +++ b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/check_in_mode_tab.dart @@ -2,8 +2,8 @@ import 'package:design_system/design_system.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import '../bloc/clock_in_bloc.dart'; -import '../bloc/clock_in_event.dart'; +import '../bloc/clock_in/clock_in_bloc.dart'; +import '../bloc/clock_in/clock_in_event.dart'; /// A single selectable tab within a check-in mode toggle strip. /// diff --git a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/clock_in_action_section.dart b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/clock_in_action_section.dart index c23ae13c..54173ba9 100644 --- a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/clock_in_action_section.dart +++ b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/clock_in_action_section.dart @@ -6,12 +6,12 @@ import 'package:flutter_modular/flutter_modular.dart'; import 'package:krow_core/core.dart'; import 'package:krow_domain/krow_domain.dart'; -import '../bloc/clock_in_bloc.dart'; -import '../bloc/clock_in_event.dart'; -import '../bloc/clock_in_state.dart'; -import '../bloc/geofence_bloc.dart'; -import '../bloc/geofence_event.dart'; -import '../bloc/geofence_state.dart'; +import '../bloc/clock_in/clock_in_bloc.dart'; +import '../bloc/clock_in/clock_in_event.dart'; +import '../bloc/clock_in/clock_in_state.dart'; +import '../bloc/geofence/geofence_bloc.dart'; +import '../bloc/geofence/geofence_event.dart'; +import '../bloc/geofence/geofence_state.dart'; import 'clock_in_helpers.dart'; import 'early_check_in_banner.dart'; import 'geofence_status_banner/geofence_status_banner.dart'; diff --git a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/clock_in_body.dart b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/clock_in_body.dart index 54611a96..8b0032f4 100644 --- a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/clock_in_body.dart +++ b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/clock_in_body.dart @@ -5,11 +5,11 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:intl/intl.dart'; import 'package:krow_domain/krow_domain.dart'; -import '../bloc/clock_in_bloc.dart'; -import '../bloc/clock_in_event.dart'; -import '../bloc/clock_in_state.dart'; -import '../bloc/geofence_bloc.dart'; -import '../bloc/geofence_event.dart'; +import '../bloc/clock_in/clock_in_bloc.dart'; +import '../bloc/clock_in/clock_in_event.dart'; +import '../bloc/clock_in/clock_in_state.dart'; +import '../bloc/geofence/geofence_bloc.dart'; +import '../bloc/geofence/geofence_event.dart'; import 'checked_in_banner.dart'; import 'clock_in_action_section.dart'; import 'date_selector.dart'; diff --git a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/geofence_status_banner/geofence_override_modal.dart b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/geofence_status_banner/geofence_override_modal.dart index ea7a2d1c..56072000 100644 --- a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/geofence_status_banner/geofence_override_modal.dart +++ b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/geofence_status_banner/geofence_override_modal.dart @@ -5,8 +5,8 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_modular/flutter_modular.dart'; import 'package:krow_core/core.dart'; -import '../../bloc/geofence_bloc.dart'; -import '../../bloc/geofence_event.dart'; +import '../../bloc/geofence/geofence_bloc.dart'; +import '../../bloc/geofence/geofence_event.dart'; /// Modal bottom sheet that collects a justification note before allowing /// a geofence-overridden clock-in. diff --git a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/geofence_status_banner/geofence_status_banner.dart b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/geofence_status_banner/geofence_status_banner.dart index 3d7ec47a..115bb840 100644 --- a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/geofence_status_banner/geofence_status_banner.dart +++ b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/geofence_status_banner/geofence_status_banner.dart @@ -2,8 +2,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:krow_domain/krow_domain.dart'; -import '../../bloc/geofence_bloc.dart'; -import '../../bloc/geofence_state.dart'; +import '../../bloc/geofence/geofence_bloc.dart'; +import '../../bloc/geofence/geofence_state.dart'; import 'permission_denied_banner.dart'; import 'permission_denied_forever_banner.dart'; import 'service_disabled_banner.dart'; diff --git a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/geofence_status_banner/permission_denied_banner.dart b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/geofence_status_banner/permission_denied_banner.dart index 87333c44..898031f7 100644 --- a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/geofence_status_banner/permission_denied_banner.dart +++ b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/geofence_status_banner/permission_denied_banner.dart @@ -3,9 +3,9 @@ import 'package:design_system/design_system.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import '../../bloc/geofence_bloc.dart'; -import '../../bloc/geofence_event.dart'; -import '../../bloc/geofence_state.dart'; +import '../../bloc/geofence/geofence_bloc.dart'; +import '../../bloc/geofence/geofence_event.dart'; +import '../../bloc/geofence/geofence_state.dart'; import 'banner_action_button.dart'; import 'banner_actions_row.dart'; import 'geofence_override_modal.dart'; diff --git a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/geofence_status_banner/timeout_banner.dart b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/geofence_status_banner/timeout_banner.dart index 0977f8fb..7f7edaab 100644 --- a/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/geofence_status_banner/timeout_banner.dart +++ b/apps/mobile/packages/features/staff/clock_in/lib/src/presentation/widgets/geofence_status_banner/timeout_banner.dart @@ -3,8 +3,8 @@ import 'package:design_system/design_system.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import '../../bloc/geofence_bloc.dart'; -import '../../bloc/geofence_event.dart'; +import '../../bloc/geofence/geofence_bloc.dart'; +import '../../bloc/geofence/geofence_event.dart'; import 'banner_action_button.dart'; import 'banner_actions_row.dart'; import 'geofence_override_modal.dart'; diff --git a/apps/mobile/packages/features/staff/clock_in/lib/src/staff_clock_in_module.dart b/apps/mobile/packages/features/staff/clock_in/lib/src/staff_clock_in_module.dart index be26fb37..d509a2b7 100644 --- a/apps/mobile/packages/features/staff/clock_in/lib/src/staff_clock_in_module.dart +++ b/apps/mobile/packages/features/staff/clock_in/lib/src/staff_clock_in_module.dart @@ -11,8 +11,8 @@ import 'domain/usecases/clock_in_usecase.dart'; import 'domain/usecases/clock_out_usecase.dart'; import 'domain/usecases/get_attendance_status_usecase.dart'; import 'domain/usecases/get_todays_shift_usecase.dart'; -import 'presentation/bloc/clock_in_bloc.dart'; -import 'presentation/bloc/geofence_bloc.dart'; +import 'presentation/bloc/clock_in/clock_in_bloc.dart'; +import 'presentation/bloc/geofence/geofence_bloc.dart'; import 'presentation/pages/clock_in_page.dart'; /// Module for the staff clock-in feature.