Files
flux/lib/core/blocs/session/session_state.dart

75 lines
2.0 KiB
Dart

part of 'session_cubit.dart';
/// Definisce lo stato macroscopico della sessione
enum SessionStatus {
initial,
unauthenticated,
onboardingRequired,
authenticated,
}
/// Definisce lo step esatto dell'onboarding (Paranoia Mode)
enum OnboardingStep {
none, // Non serve onboarding
company, // Step 1: Manca l'azienda
store, // Step 2: Manca il negozio
staff, // Step 3: Manca il profilo staff ("Paziente Zero")
completed, // Flusso terminato con successo
}
class SessionState extends Equatable {
final SessionStatus status;
final User? user; // Utente di Supabase Auth
final CompanyModel? company;
final StoreModel? currentStore;
final StaffMemberModel? currentStaff;
final OnboardingStep onboardingStep;
final bool isMobileDevice;
const SessionState({
this.status = SessionStatus.initial,
this.user,
this.company,
this.currentStore,
this.currentStaff,
this.onboardingStep = OnboardingStep.none,
this.isMobileDevice = false,
});
/// Metodo per creare una copia dello stato modificando solo i campi necessari
SessionState copyWith({
SessionStatus? status,
User? user,
CompanyModel? company,
StoreModel? currentStore,
StaffMemberModel? currentStaff,
OnboardingStep? onboardingStep,
bool? isMobileDevice,
}) {
return SessionState(
status: status ?? this.status,
user: user ?? this.user,
company: company ?? this.company,
currentStore: currentStore ?? this.currentStore,
currentStaff: currentStaff ?? this.currentStaff,
onboardingStep: onboardingStep ?? this.onboardingStep,
isMobileDevice: isMobileDevice ?? this.isMobileDevice,
);
}
@override
List<Object?> get props => [
status,
user,
company,
currentStore,
currentStaff,
onboardingStep,
isMobileDevice,
];
// Helper rapidi per la UI
bool get isAuthenticated => status == SessionStatus.authenticated;
bool get needsOnboarding => status == SessionStatus.onboardingRequired;
}