import 'package:manager_api_new/api.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( label: "Libre", description: "Le visiteur choisit ses étapes dans l'ordre qu'il veut.", ), ordered( label: "Dans l'ordre", description: "Le visiteur suit la séquence ; il peut revenir sur une étape déjà vue.", ), stepByStep( label: "Étape par étape", description: "Chaque étape se débloque en réussissant le défi de la précédente.", ); const ProgressionMode({required this.label, required this.description}); final String label; final String description; } 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; } }