feat: Display staff profile completion status on the home screen.

This commit is contained in:
Achintha Isuru
2026-02-22 10:40:43 -05:00
parent b593647800
commit 2d1e6a6acc
2 changed files with 48 additions and 14 deletions

View File

@@ -2,6 +2,7 @@ import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
import 'package:krow_core/core.dart'; import 'package:krow_core/core.dart';
import 'package:krow_domain/krow_domain.dart'; import 'package:krow_domain/krow_domain.dart';
import 'package:krow_data_connect/krow_data_connect.dart';
import 'package:staff_home/src/domain/usecases/get_home_shifts.dart'; import 'package:staff_home/src/domain/usecases/get_home_shifts.dart';
import 'package:staff_home/src/domain/repositories/home_repository.dart'; import 'package:staff_home/src/domain/repositories/home_repository.dart';
@@ -13,10 +14,19 @@ class HomeCubit extends Cubit<HomeState> with BlocErrorHandler<HomeState> {
final GetHomeShifts _getHomeShifts; final GetHomeShifts _getHomeShifts;
final HomeRepository _repository; final HomeRepository _repository;
HomeCubit(HomeRepository repository) /// Use case that checks whether the staff member's personal info is complete.
: _getHomeShifts = GetHomeShifts(repository), ///
_repository = repository, /// Used to determine whether profile-gated features (such as shift browsing)
super(const HomeState.initial()); /// should be enabled on the home screen.
final GetPersonalInfoCompletionUseCase _getPersonalInfoCompletion;
HomeCubit({
required HomeRepository repository,
required GetPersonalInfoCompletionUseCase getPersonalInfoCompletion,
}) : _getHomeShifts = GetHomeShifts(repository),
_repository = repository,
_getPersonalInfoCompletion = getPersonalInfoCompletion,
super(const HomeState.initial());
Future<void> loadShifts() async { Future<void> loadShifts() async {
if (isClosed) return; if (isClosed) return;
@@ -24,24 +34,30 @@ class HomeCubit extends Cubit<HomeState> with BlocErrorHandler<HomeState> {
await handleError( await handleError(
emit: emit, emit: emit,
action: () async { action: () async {
final result = await _getHomeShifts.call(); // Fetch shifts, name, and profile completion status concurrently
final shiftsAndProfile = await Future.wait([
_getHomeShifts.call(),
_getPersonalInfoCompletion.call(),
]);
final homeResult = shiftsAndProfile[0] as HomeShifts;
final isProfileComplete = shiftsAndProfile[1] as bool;
final name = await _repository.getStaffName(); final name = await _repository.getStaffName();
if (isClosed) return; if (isClosed) return;
emit( emit(
state.copyWith( state.copyWith(
status: HomeStatus.loaded, status: HomeStatus.loaded,
todayShifts: result.today, todayShifts: homeResult.today,
tomorrowShifts: result.tomorrow, tomorrowShifts: homeResult.tomorrow,
recommendedShifts: result.recommended, recommendedShifts: homeResult.recommended,
staffName: name, staffName: name,
// Mock profile status for now, ideally fetched from a user repository isProfileComplete: isProfileComplete,
isProfileComplete: false,
), ),
); );
}, },
onError: (String errorKey) { onError: (String errorKey) {
if (isClosed) if (isClosed) return state;
return state; // Avoid state emission if closed, though emit handles it gracefully usually
return state.copyWith(status: HomeStatus.error, errorMessage: errorKey); return state.copyWith(status: HomeStatus.error, errorMessage: errorKey);
}, },
); );

View File

@@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_modular/flutter_modular.dart'; import 'package:flutter_modular/flutter_modular.dart';
import 'package:krow_core/core.dart'; import 'package:krow_core/core.dart';
import 'package:krow_data_connect/krow_data_connect.dart';
import 'package:staff_home/src/data/repositories/home_repository_impl.dart'; import 'package:staff_home/src/data/repositories/home_repository_impl.dart';
import 'package:staff_home/src/domain/repositories/home_repository.dart'; import 'package:staff_home/src/domain/repositories/home_repository.dart';
import 'package:staff_home/src/presentation/blocs/home_cubit.dart'; import 'package:staff_home/src/presentation/blocs/home_cubit.dart';
@@ -14,11 +15,28 @@ import 'package:staff_home/src/presentation/pages/worker_home_page.dart';
class StaffHomeModule extends Module { class StaffHomeModule extends Module {
@override @override
void binds(Injector i) { void binds(Injector i) {
// Repository // Repository - provides home data (shifts, staff name)
i.addLazySingleton<HomeRepository>(() => HomeRepositoryImpl()); i.addLazySingleton<HomeRepository>(() => HomeRepositoryImpl());
// StaffConnectorRepository for profile completion queries
i.addLazySingleton<StaffConnectorRepository>(
() => StaffConnectorRepositoryImpl(),
);
// Use case for checking personal info profile completion
i.addLazySingleton<GetPersonalInfoCompletionUseCase>(
() => GetPersonalInfoCompletionUseCase(
repository: i.get<StaffConnectorRepository>(),
),
);
// Presentation layer - Cubit // Presentation layer - Cubit
i.addSingleton(HomeCubit.new); i.addSingleton(
() => HomeCubit(
repository: i.get<HomeRepository>(),
getPersonalInfoCompletion: i.get<GetPersonalInfoCompletionUseCase>(),
),
);
} }
@override @override