forked from eatvio/eatvio_app
- show diet duration hint and plan duration in suggestion flow - disable diet CTA on duration mismatch with grey visual state - keep progress plank visible for personal_diet_setted - center step labels under their circles
115 lines
4.0 KiB
Dart
115 lines
4.0 KiB
Dart
import 'package:eatvio_app/features/consultations/models/consultation_progress.dart';
|
|
import 'package:eatvio_app/features/plans/enums/chosen_plan_state_enum.dart';
|
|
|
|
ConsultationProgress mapConsultationProgress({
|
|
required ChosenPlanStateEnum state,
|
|
required bool hasPersonalDiet,
|
|
}) {
|
|
return ConsultationProgress(
|
|
completedSteps: _completedSteps(state),
|
|
showProgressPlank: _showProgressPlank(state),
|
|
dietStatus: _dietStatus(state, hasPersonalDiet),
|
|
phase: _phase(state),
|
|
);
|
|
}
|
|
|
|
Set<ConsultationStep> _completedSteps(ChosenPlanStateEnum state) {
|
|
switch (state) {
|
|
case ChosenPlanStateEnum.stateInited:
|
|
case ChosenPlanStateEnum.stateConfirmedByConsultant:
|
|
case ChosenPlanStateEnum.stateInCoordination:
|
|
case ChosenPlanStateEnum.stateCanceledByTheInitiator:
|
|
return const {};
|
|
case ChosenPlanStateEnum.stateStartDateHasBeenSet:
|
|
case ChosenPlanStateEnum.statePendingPayment:
|
|
case ChosenPlanStateEnum.statePaymentFailed:
|
|
return const {ConsultationStep.startDate};
|
|
case ChosenPlanStateEnum.statePaid:
|
|
case ChosenPlanStateEnum.personalDietSet:
|
|
return const {ConsultationStep.startDate, ConsultationStep.paid};
|
|
case ChosenPlanStateEnum.stateStarted:
|
|
case ChosenPlanStateEnum.stateInProgress:
|
|
case ChosenPlanStateEnum.stateLastDayStarted:
|
|
case ChosenPlanStateEnum.stateLastDayFinished:
|
|
case ChosenPlanStateEnum.stateComplained:
|
|
return const {
|
|
ConsultationStep.startDate,
|
|
ConsultationStep.paid,
|
|
ConsultationStep.inProgress,
|
|
};
|
|
case ChosenPlanStateEnum.stateDone:
|
|
case ChosenPlanStateEnum.stateChargeWasCollected:
|
|
return const {
|
|
ConsultationStep.startDate,
|
|
ConsultationStep.paid,
|
|
ConsultationStep.inProgress,
|
|
ConsultationStep.finished,
|
|
};
|
|
}
|
|
}
|
|
|
|
bool _showProgressPlank(ChosenPlanStateEnum state) {
|
|
switch (state) {
|
|
case ChosenPlanStateEnum.stateInited:
|
|
case ChosenPlanStateEnum.stateConfirmedByConsultant:
|
|
case ChosenPlanStateEnum.stateChargeWasCollected:
|
|
case ChosenPlanStateEnum.stateCanceledByTheInitiator:
|
|
case ChosenPlanStateEnum.statePaymentFailed:
|
|
return false;
|
|
case ChosenPlanStateEnum.stateInCoordination:
|
|
case ChosenPlanStateEnum.stateStartDateHasBeenSet:
|
|
case ChosenPlanStateEnum.statePendingPayment:
|
|
case ChosenPlanStateEnum.statePaid:
|
|
case ChosenPlanStateEnum.personalDietSet:
|
|
case ChosenPlanStateEnum.stateStarted:
|
|
case ChosenPlanStateEnum.stateInProgress:
|
|
case ChosenPlanStateEnum.stateLastDayStarted:
|
|
case ChosenPlanStateEnum.stateLastDayFinished:
|
|
case ChosenPlanStateEnum.stateComplained:
|
|
case ChosenPlanStateEnum.stateDone:
|
|
return true;
|
|
}
|
|
}
|
|
|
|
PersonalDietStatus _dietStatus(
|
|
ChosenPlanStateEnum state,
|
|
bool hasPersonalDiet,
|
|
) {
|
|
if (!hasPersonalDiet) {
|
|
return PersonalDietStatus.notRequired;
|
|
}
|
|
|
|
switch (state) {
|
|
case ChosenPlanStateEnum.personalDietSet:
|
|
case ChosenPlanStateEnum.stateStarted:
|
|
case ChosenPlanStateEnum.stateInProgress:
|
|
case ChosenPlanStateEnum.stateLastDayStarted:
|
|
case ChosenPlanStateEnum.stateLastDayFinished:
|
|
case ChosenPlanStateEnum.stateComplained:
|
|
case ChosenPlanStateEnum.stateDone:
|
|
case ChosenPlanStateEnum.stateChargeWasCollected:
|
|
return PersonalDietStatus.proposed;
|
|
case ChosenPlanStateEnum.stateInited:
|
|
case ChosenPlanStateEnum.stateInCoordination:
|
|
case ChosenPlanStateEnum.stateConfirmedByConsultant:
|
|
case ChosenPlanStateEnum.stateStartDateHasBeenSet:
|
|
case ChosenPlanStateEnum.statePendingPayment:
|
|
case ChosenPlanStateEnum.statePaid:
|
|
return PersonalDietStatus.notProposed;
|
|
case ChosenPlanStateEnum.stateCanceledByTheInitiator:
|
|
case ChosenPlanStateEnum.statePaymentFailed:
|
|
return PersonalDietStatus.notRequired;
|
|
}
|
|
}
|
|
|
|
ConsultationPhase _phase(ChosenPlanStateEnum state) {
|
|
switch (state) {
|
|
case ChosenPlanStateEnum.stateCanceledByTheInitiator:
|
|
return ConsultationPhase.canceled;
|
|
case ChosenPlanStateEnum.statePaymentFailed:
|
|
return ConsultationPhase.paymentFailed;
|
|
default:
|
|
return ConsultationPhase.active;
|
|
}
|
|
}
|