Add goal tree toolbox module
All checks were successful
Deploy Sokko G / deploy (push) Successful in 15s
All checks were successful
Deploy Sokko G / deploy (push) Successful in 15s
This commit is contained in:
parent
e4cbe3e087
commit
59fdcb0927
63 changed files with 4062 additions and 252 deletions
|
|
@ -11,7 +11,7 @@ Checklist à suivre lors de l'ajout ou de la modification d'un outil, d'une page
|
|||
- Mettre à jour la normalisation et le stockage compact dans `website/src/features/toolboxes/storage/modules/<outil>.js`, puis vérifier l'export public dans `website/src/features/toolboxes/storage/toolboxStorage.js`.
|
||||
- Mettre à jour `docs/STORAGE_SCHEMA.md`.
|
||||
- Vérifier l'import et l'export si l'outil stocke des données.
|
||||
- Si l'outil a un contenu représentable en texte, ajouter ou vérifier l'import/export texte round-trip dans le panneau d'ajout.
|
||||
- Si l'outil a un contenu représentable en texte, ajouter ou vérifier l'import/export texte round-trip depuis le toggle import/export du header.
|
||||
- Si l'outil porte un état de progression, vérifier que l'import texte repart de l'état initial attendu.
|
||||
- Vérifier l'affichage dans la page toolbox complète.
|
||||
- Vérifier l'affichage dans le panneau latéral.
|
||||
|
|
|
|||
|
|
@ -244,6 +244,115 @@ Type : `equipmentPlanner`
|
|||
}
|
||||
```
|
||||
|
||||
## Outil Arbre D'objectifs
|
||||
|
||||
Type : `goalTree`
|
||||
|
||||
```json
|
||||
{
|
||||
"lastResetAt": 1786226400000,
|
||||
"orientation": "horizontal",
|
||||
"nodes": [
|
||||
{
|
||||
"id": "goal1",
|
||||
"parentId": "",
|
||||
"title": "Breuvage de rage",
|
||||
"kind": "step",
|
||||
"icon": "cube",
|
||||
"color": "gold",
|
||||
"qtyTarget": 10,
|
||||
"qtyCurrent": 0,
|
||||
"formula": "",
|
||||
"progressMode": "auto",
|
||||
"resetType": "none",
|
||||
"resetTime": "00:00",
|
||||
"weeklyResetDay": 1,
|
||||
"checkedAt": 0,
|
||||
"collapsed": false
|
||||
},
|
||||
{
|
||||
"id": "goal2",
|
||||
"parentId": "goal1",
|
||||
"parentIds": ["goal1"],
|
||||
"title": "Élixir de destruction",
|
||||
"kind": "step",
|
||||
"icon": "flask",
|
||||
"color": "cyan",
|
||||
"qtyTarget": 1,
|
||||
"qtyCurrent": 0,
|
||||
"formula": "base * 3",
|
||||
"resetType": "weekly",
|
||||
"resetTime": "05:00",
|
||||
"weeklyResetDay": 1,
|
||||
"checkedAt": 0,
|
||||
"collapsed": false
|
||||
},
|
||||
{
|
||||
"id": "goal3",
|
||||
"parentId": "goal1",
|
||||
"title": "Liste de farm",
|
||||
"kind": "checklist",
|
||||
"items": [
|
||||
{
|
||||
"id": "item1",
|
||||
"label": "Élément",
|
||||
"formula": "1",
|
||||
"qtyTarget": 1,
|
||||
"qtyCurrent": 1
|
||||
},
|
||||
{
|
||||
"id": "item2",
|
||||
"label": "Faire cela",
|
||||
"formula": "base",
|
||||
"qtyTarget": 5,
|
||||
"qtyCurrent": 2
|
||||
}
|
||||
],
|
||||
"resetType": "none",
|
||||
"resetTime": "00:00",
|
||||
"weeklyResetDay": 1,
|
||||
"checkedAt": 0,
|
||||
"collapsed": false
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Stockage compact :
|
||||
|
||||
- `lastResetAt` est omis si vide.
|
||||
- `orientation` est omis si la valeur vaut `horizontal`.
|
||||
- `orientation` vaut `horizontal` ou `vertical`.
|
||||
- `parentId` est omis pour les racines.
|
||||
- `parentId` reste le parent principal de placement dans le schéma.
|
||||
- `parentIds` contient les parents/prérequis pris en compte pour les liaisons de convergence ; il est omis si aucun prérequis supplémentaire n'existe.
|
||||
- les calculs `base`, le placement, la suppression de branche et l'agrégation de progression restent basés sur `parentId`.
|
||||
- un objectif peut donc être placé sous un parent principal tout en ayant d'autres prérequis, afin de représenter une convergence de branches.
|
||||
- `kind` est omis si la valeur vaut `step`.
|
||||
- `kind` vaut `step`, `text` ou `checklist`.
|
||||
- `icon` est omis si la valeur vaut `cube`.
|
||||
- `icon` vaut `cube`, `fire`, `flask`, `grass`, `leaf`, `meat`, `powder`, `tear` ou `ball`.
|
||||
- `color` est omis si la valeur vaut `gold`.
|
||||
- `color` vaut `gold`, `cyan`, `violet`, `pink`, `green`, `gray`, `red`, `orange`, `yellow`, `blue` ou `indigo`.
|
||||
- `qtyTarget` est omis si la valeur vaut `1`.
|
||||
- `qtyCurrent` est omis si la valeur vaut `0`.
|
||||
- `formula` est omis si vide.
|
||||
- `progressMode` est utilisé uniquement par les objectifs `step`; il vaut `auto` ou `manual`.
|
||||
- `progressMode` est omis tant qu'aucun choix explicite n'a été fait; par défaut, une étape avec enfants calcule sa progression automatiquement, sauf si tous ses enfants directs ont une cible de `1`, auquel cas elle se comporte en mise à jour manuelle.
|
||||
- en `auto`, une étape avec enfants calcule sa progression depuis ses enfants; en `manual`, elle utilise sa propre `qtyCurrent`.
|
||||
- `items` est omis si vide ou si `kind` vaut `step`.
|
||||
- `items[].label` contient la ligne affichee dans un noeud `text` ou `checklist`; il peut etre vide pendant l'edition.
|
||||
- `items[].formula` est utilise uniquement par `checklist` pour calculer le total de la ligne ; la variable `base` reference la cible calculee du parent direct.
|
||||
- `items[].qtyTarget` est utilise uniquement par `checklist` et omis si la valeur vaut `1`.
|
||||
- `items[].qtyCurrent` est utilise uniquement par `checklist` et omis si la valeur vaut `0`.
|
||||
- `resetType` est omis si la valeur vaut `none`.
|
||||
- `resetType` vaut `none`, `daily` ou `weekly`.
|
||||
- `resetTime` est omis si la valeur vaut `00:00`.
|
||||
- `weeklyResetDay` est omis si la valeur vaut `1`.
|
||||
- `checkedAt` est omis si vide.
|
||||
- `collapsed` est omis si `false`.
|
||||
- Les parents invalides ou cycliques sont ramenés à la racine pendant la normalisation.
|
||||
|
||||
Stockage compact :
|
||||
|
||||
- les types sans équipement sont ignorés ;
|
||||
|
|
@ -757,7 +866,7 @@ Exemple :
|
|||
|
||||
## Import / Export texte des outils
|
||||
|
||||
Les outils compatibles proposent aussi un échange par copier-coller depuis leur panneau d'ajout. Ce format est un format UI distinct du stockage IndexedDB et de l'export JSON global.
|
||||
Les outils compatibles proposent aussi un échange par copier-coller depuis le toggle import/export de leur header. Ce format est un format UI distinct du stockage IndexedDB et de l'export JSON global.
|
||||
|
||||
Règles communes :
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue