Session-data na presentatie als losse .md bewaren en deck schoon houden #1235

Closed
opened 2026-08-04 20:12:27 +00:00 by brenno · 0 comments
Owner

Situatie

Tijdens het presenteren kan de spreker checklists invullen en tabelcellen
bewerken (live-edits). Die wijzigingen worden nu direct in het deck
teruggeschreven via onSlideChanged (shell_actions_present.dart), en blijven
na afloop in het deck staan.

Voor een presentatie is dat vaak niet wat je wilt: de ingevulde checklist is
sessiedata (de uitkomst van deze presentatie/sessie), geen deck-bewerking.
De spreker wil die data elders veiligstellen en het deck schoon houden.

Doel

Aan het eind van de presentatie — ná het oefenoverzicht, vóór terugkeer naar de
editor — de spreker de keuze geven:

  • Ja (downloaden + terugdraaien): per gewijzigde dia één los .md-bestand
    naar de download-map, en de wijzigingen in het deck ongedaan maken.
  • Nee (in deck behouden): de wijzigingen blijven in het deck staan
    (huidig gedrag).

De vraag verschijnt alleen als er daadwerkelijk session-data-edits zijn
geweest. Geen edits → geen vraag (voorkomen gaat vóór melden).

Belangrijk: session-data los van deck-bewerkingen

Dit is de kern van het issue. Tijdens het presenteren lopen twee soorten
wijzigingen door dezelfde onSlideChanged-callback:

  1. Session-data — checklist-statussen, tabelcellen, tabelrijen
    (presenter_table.dart, checklist-content). Dit is wat de vraag moet
    aanbieden.
  2. Deck-bewerkingen — de live-fix #914 (planLiveFix in
    presenter_content.dart) knipt een te volle dia in-place op of splitst hem,
    en roept óók onSlideChanged (in-place) / onSlideSplit (split).

De live-fix is een deck-verbetering, geen session-data, en mag nooit
worden aangeboden voor export+terugdraaien. Besloten: live-fix blijft altijd in
het deck staan. De implementatie moet dus weten wélke onSlideChanged-calls
session-data zijn en wélke deck-bewerkingen — de callback is nu niet
onderscheidbaar. Dat is het technische hart van dit issue.

Besluiten (afgetoetst)

  • Standaardkeuze: "In deck behouden" (nee). Veiligst bij wegklikken: de
    session-data blijft in het deck en is met één ongedaan terug te draaien. De
    download-optie staat ernaast.
  • Live-fix (#914): niet terugdraaien. Altijd in het deck behouden.
  • Bestandsnaam: <index> - <slugged titel>.md, bv. 03 - Scope-checklist.md.
    Vast volgorde, herkenbaar, geen naamconflicten door de index.
  • playOnly (vergrendeld deck): geen vraag — er zijn toch geen edits.
  • Per-slide export: hergebruik MarkdownService.generateSlide (bestaat al)
    per gewijzigde dia; schrijf via de bestaande download-route
    (downloadTextFile / FilePicker.saveFile). Geen nieuw formaat.

UX-richtlijnen

  • Toon de staat: noem in de vraag wélke dia's zijn gewijzigd (aantal, of de
    titels) — de spreker moet weten wat hij gaat downloaden/terugdraaien zonder
    ernaar te moeten zoeken.
  • Woorden zijn interface: vermijd "session-data", "live-edit", "callback".
    Beschrijf wat de spreker krijgt: "Tijdens het presenteren heb je checklists
    ingevuld en tabellen bijgewerkt op N dia's."
  • Toetsenbord: de keuze is volledig met toetsenbord te maken; default-focus op
    "In deck behouden".
  • 32 talen: elke nieuwe tekst is een l10n.d('…') → taalbouwer.
  • Onomkeerbaar? Nee — beide keuzes zijn met ongedaan terug te draaien (download
    bewaart de data, terugdraaien is één undo-stap). Geen zware bevestiging nodig.

Technische aanzet

  • Introduceer een onderscheid op de callback: bv. een LiveEditKind op
    onSlideChanged, of een aparte onSessionEdit-callback voor
    checklist/tabel-edits. planLiveFix blijft de bestaande onSlideChanged
    gebruiken (deck-bewerking).
  • presentDeck houdt per gewijzigde bron-dia de oorspronkelijke versie bij
    (vóór de session-data-edit), zodat "ja" kan terugdraaien zonder de live-fix
    te raken.
  • Bij "ja": voor elke gewijzigde dia generateSlide → download, daarna de dia
    in het deck terugzetten op de oorspronkelijke versie (één undo-stap,
    ge coalesceerd als nu).
  • Bij "nee": huidig gedrag (niets extra's).

Niet in dit issue

  • Bulk-export van het hele deck (bestaat al: downloadDeckAsFile).
  • Export naar andere formaten dan Markdown.
  • Een aparte dialoog tijdens het presenteren; de vraag komt pas bij afloop.
## Situatie Tijdens het presenteren kan de spreker checklists invullen en tabelcellen bewerken (live-edits). Die wijzigingen worden nu direct in het deck teruggeschreven via `onSlideChanged` (`shell_actions_present.dart`), en blijven na afloop in het deck staan. Voor een presentatie is dat vaak niet wat je wilt: de ingevulde checklist is **sessiedata** (de uitkomst van deze presentatie/sessie), geen deck-bewerking. De spreker wil die data elders veiligstellen en het deck schoon houden. ## Doel Aan het eind van de presentatie — ná het oefenoverzicht, vóór terugkeer naar de editor — de spreker de keuze geven: - **Ja (downloaden + terugdraaien):** per gewijzigde dia één los `.md`-bestand naar de download-map, en de wijzigingen in het deck ongedaan maken. - **Nee (in deck behouden):** de wijzigingen blijven in het deck staan (huidig gedrag). De vraag verschijnt **alleen** als er daadwerkelijk session-data-edits zijn geweest. Geen edits → geen vraag (voorkomen gaat vóór melden). ## Belangrijk: session-data los van deck-bewerkingen Dit is de kern van het issue. Tijdens het presenteren lopen twee soorten wijzigingen door **dezelfde** `onSlideChanged`-callback: 1. **Session-data** — checklist-statussen, tabelcellen, tabelrijen (`presenter_table.dart`, checklist-content). Dit is wat de vraag moet aanbieden. 2. **Deck-bewerkingen** — de live-fix #914 (`planLiveFix` in `presenter_content.dart`) knipt een te volle dia in-place op of splitst hem, en roept óók `onSlideChanged` (in-place) / `onSlideSplit` (split). De live-fix is een **deck-verbetering**, geen session-data, en mag **nooit** worden aangeboden voor export+terugdraaien. Besloten: live-fix blijft altijd in het deck staan. De implementatie moet dus weten wélke `onSlideChanged`-calls session-data zijn en wélke deck-bewerkingen — de callback is nu niet onderscheidbaar. Dat is het technische hart van dit issue. ## Besluiten (afgetoetst) - **Standaardkeuze:** "In deck behouden" (nee). Veiligst bij wegklikken: de session-data blijft in het deck en is met één ongedaan terug te draaien. De download-optie staat ernaast. - **Live-fix (#914):** niet terugdraaien. Altijd in het deck behouden. - **Bestandsnaam:** `<index> - <slugged titel>.md`, bv. `03 - Scope-checklist.md`. Vast volgorde, herkenbaar, geen naamconflicten door de index. - **`playOnly` (vergrendeld deck):** geen vraag — er zijn toch geen edits. - **Per-slide export:** hergebruik `MarkdownService.generateSlide` (bestaat al) per gewijzigde dia; schrijf via de bestaande download-route (`downloadTextFile` / `FilePicker.saveFile`). Geen nieuw formaat. ## UX-richtlijnen - Toon de staat: noem in de vraag wélke dia's zijn gewijzigd (aantal, of de titels) — de spreker moet weten wat hij gaat downloaden/terugdraaien zonder ernaar te moeten zoeken. - Woorden zijn interface: vermijd "session-data", "live-edit", "callback". Beschrijf wat de spreker krijgt: "Tijdens het presenteren heb je checklists ingevuld en tabellen bijgewerkt op N dia's." - Toetsenbord: de keuze is volledig met toetsenbord te maken; default-focus op "In deck behouden". - 32 talen: elke nieuwe tekst is een `l10n.d('…')` → taalbouwer. - Onomkeerbaar? Nee — beide keuzes zijn met ongedaan terug te draaien (download bewaart de data, terugdraaien is één undo-stap). Geen zware bevestiging nodig. ## Technische aanzet - Introduceer een onderscheid op de callback: bv. een `LiveEditKind` op `onSlideChanged`, of een aparte `onSessionEdit`-callback voor checklist/tabel-edits. `planLiveFix` blijft de bestaande `onSlideChanged` gebruiken (deck-bewerking). - `presentDeck` houdt per gewijzigde bron-dia de **oorspronkelijke** versie bij (vóór de session-data-edit), zodat "ja" kan terugdraaien zonder de live-fix te raken. - Bij "ja": voor elke gewijzigde dia `generateSlide` → download, daarna de dia in het deck terugzetten op de oorspronkelijke versie (één undo-stap, ge coalesceerd als nu). - Bij "nee": huidig gedrag (niets extra's). ## Niet in dit issue - Bulk-export van het hele deck (bestaat al: `downloadDeckAsFile`). - Export naar andere formaten dan Markdown. - Een aparte dialoog tijdens het presenteren; de vraag komt pas bij afloop.
Sign in to join this conversation.
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
LibreKAT/Ocideck#1235
No description provided.