feat: mapping OTT par buckets drag-and-drop + sections imbriquées à l'import #187

Merged
nicolas merged 1 commit from testing into main 2026-05-25 12:43:35 +02:00
Owner

AdminStyles.jsx:

  • Nouveau composant OttStyleBuckets — palette de styles à gauche, buckets par type de section à droite
  • Drag-and-drop HTML5 natif : les styles ODT se glissent dans la zone "headings" ou "content" de chaque type
  • Zone headings : ordre = profondeur de nesting (L1, L2…), flèches ↑↓ pour réordonner, × pour retirer
  • Zone content : style ODT + label éditable inline, × pour retirer
  • Le bucket n'apparaît que si des section_type_defs existent ET qu'un fichier OTT est chargé
  • saveTypeDefs enregistre le tableau complet (heading_styles + content_styles) via PUT /admin/styles/:id/section-type-defs

odtToTiptap.js:

  • Étape 3 : construction de headingLookup (styleId → { typeIdx, depth }) et contentLookup depuis les typeDefs
  • Étape 4 : stack de profondeur (depthStack) pour nesting correct des sections lors de l'import
  • Chaque section retournée contient depth et parent_idx (index dans le tableau plat)
  • Fallback legacy : ott_mapping avec rôles section_heading_* toujours supporté

templates.js:

  • Import ODT : UUIDs pré-alloués pour toutes les sections avant insertion
  • parent_idx résolu en parentId réel, positionMap par parent pour position correcte
  • Les sections imbriquées sont insérées dans l'ordre topologique (parent avant enfant)
AdminStyles.jsx: - Nouveau composant OttStyleBuckets — palette de styles à gauche, buckets par type de section à droite - Drag-and-drop HTML5 natif : les styles ODT se glissent dans la zone "headings" ou "content" de chaque type - Zone headings : ordre = profondeur de nesting (L1, L2…), flèches ↑↓ pour réordonner, × pour retirer - Zone content : style ODT + label éditable inline, × pour retirer - Le bucket n'apparaît que si des section_type_defs existent ET qu'un fichier OTT est chargé - saveTypeDefs enregistre le tableau complet (heading_styles + content_styles) via PUT /admin/styles/:id/section-type-defs odtToTiptap.js: - Étape 3 : construction de headingLookup (styleId → { typeIdx, depth }) et contentLookup depuis les typeDefs - Étape 4 : stack de profondeur (depthStack) pour nesting correct des sections lors de l'import - Chaque section retournée contient depth et parent_idx (index dans le tableau plat) - Fallback legacy : ott_mapping avec rôles section_heading_* toujours supporté templates.js: - Import ODT : UUIDs pré-alloués pour toutes les sections avant insertion - parent_idx résolu en parentId réel, positionMap par parent pour position correcte - Les sections imbriquées sont insérées dans l'ordre topologique (parent avant enfant)
AdminStyles.jsx:
- Nouveau composant OttStyleBuckets — palette de styles à gauche, buckets par type de section à droite
- Drag-and-drop HTML5 natif : les styles ODT se glissent dans la zone "headings" ou "content" de chaque type
- Zone headings : ordre = profondeur de nesting (L1, L2…), flèches ↑↓ pour réordonner, × pour retirer
- Zone content : style ODT + label éditable inline, × pour retirer
- Le bucket n'apparaît que si des section_type_defs existent ET qu'un fichier OTT est chargé
- saveTypeDefs enregistre le tableau complet (heading_styles + content_styles) via PUT /admin/styles/:id/section-type-defs

odtToTiptap.js:
- Étape 3 : construction de headingLookup (styleId → { typeIdx, depth }) et contentLookup depuis les typeDefs
- Étape 4 : stack de profondeur (depthStack) pour nesting correct des sections lors de l'import
- Chaque section retournée contient depth et parent_idx (index dans le tableau plat)
- Fallback legacy : ott_mapping avec rôles section_heading_* toujours supporté

templates.js:
- Import ODT : UUIDs pré-alloués pour toutes les sections avant insertion
- parent_idx résolu en parentId réel, positionMap par parent pour position correcte
- Les sections imbriquées sont insérées dans l'ordre topologique (parent avant enfant)
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
code/docfoundry_ynh!187
No description provided.