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; } }