56 lines
1.8 KiB
Dart

import 'package:manager_api_new/api.dart';
import 'package:manager_app/l10n/app_localizations.dart';
/// Mode de progression d'un parcours, présenté au client comme un choix unique.
///
/// En base, la progression reste décrite par les booléens `isLinear` et
/// `requireSuccessToAdvance` du `GuidedPath` : cet enum n'est qu'une lecture
/// combinée de ces champs, pour éviter de faire assembler au client des cases à
/// cocher dont les interactions ne sont pas devinables.
enum ProgressionMode {
free,
ordered,
stepByStep;
String label(AppLocalizations l) {
switch (this) {
case ProgressionMode.free: return l.progressionFree;
case ProgressionMode.ordered: return l.progressionOrdered;
case ProgressionMode.stepByStep: return l.progressionStepByStep;
}
}
String description(AppLocalizations l) {
switch (this) {
case ProgressionMode.free: return l.progressionFreeDesc;
case ProgressionMode.ordered: return l.progressionOrderedDesc;
case ProgressionMode.stepByStep: return l.progressionStepByStepDesc;
}
}
}
ProgressionMode progressionModeOf(GuidedPathDTO path) {
if (path.isLinear == false) return ProgressionMode.free;
if (path.requireSuccessToAdvance == true) return ProgressionMode.stepByStep;
return ProgressionMode.ordered;
}
void applyProgressionMode(GuidedPathDTO path, ProgressionMode mode) {
switch (mode) {
case ProgressionMode.free:
path.isLinear = false;
path.requireSuccessToAdvance = false;
path.hideNextStepsUntilComplete = false;
break;
case ProgressionMode.ordered:
path.isLinear = true;
path.requireSuccessToAdvance = false;
path.hideNextStepsUntilComplete = false;
break;
case ProgressionMode.stepByStep:
path.isLinear = true;
path.requireSuccessToAdvance = true;
break;
}
}