6.6 KiB
UI_F6_PURE_MOVE_V1
1. Doel
F6 moet in de UI een expliciete pure Move-actie worden.
Waarom:
F2heeft nu een eigen rename-flow- daarmee is de oorspronkelijke gecombineerde
Rename/Move-semantiek in de UI niet meer nodig - een pure
Move-flow maakt de functietoetsen voorspelbaarder:F2 = RenameF6 = Move
- dit sluit beter aan op klassieke file-manager verwachtingen en vermindert cognitieve ruis in de popup-flow
Belangrijk bestaande context:
- move-functionaliteit bestaat backendmatig al
- move-functionaliteit bestaat UI-matig al
- file move, directory move binnen huidige scope en batch move binnen huidige scope werken al
- deze stap gaat dus niet over nieuwe move-capaciteit, maar over het vereenvoudigen van de UI-flow rond de bestaande move-actie
2. Scope
De pure Move-flow in v1 moet de bestaande move-scope UI-matig netjes afdekken voor zover die al ondersteund wordt.
In scope:
- exact 1 file
- exact 1 directory
- meerdere files
- meerdere directories
- gemengde selectie van files + directories
Voorwaarde:
- alleen binnen de bestaande huidige move-scope
- alles wat backendmatig al geblokkeerd is, blijft geblokkeerd
- de UI mag dat duidelijker presenteren, maar mag de scope niet verbreden
Niet in scope:
- nieuwe backend move-capaciteit
- nieuwe tasksemantiek
- nieuwe batch-semantieken buiten de bestaande backend
- rename binnen
F6
3. Gewenst gedrag
F6 en de Move-knop moeten exact dezelfde frontendflow gebruiken.
Kernregel:
F6keyboard shortcut = pure move-flowMove-knop in functiebalk = exact dezelfde pure move-flow- beide gebruiken dezelfde centrale frontendhandler
Popupregel:
- de bestaande move-popup wordt een pure move-popup
- geen rename-invoerveld in deze flow
- geen naamwijzigingssemantiek in deze flow
- de popup richt zich alleen op doelpad of doelmap voor verplaatsen
Interactie:
EnterbevestigtEscapeannuleertXsluit popup
Gedragslijn per context:
- exact 1 item: popup toont expliciete move-context voor dat item
- meerdere items: popup toont batch move-context
- popuptekst en labels moeten spreken in termen van
Move, nietRename/Move
4. Relatie met bestaande move-scope
Wat al bestaat en alleen hergebruikt moet worden:
- single file move
- single directory move binnen de huidige scope
- batch move binnen de huidige scope
- task-based move
- bestaande validaties en blokkades
Dat betekent:
- de pure
Move-popup hoeft geen nieuwe backendbeslissingen te nemen - de frontend mag alleen een duidelijkere presentatie en dispatchlaag geven
- validatiefouten zoals cross-root blokkades, subtree-blokkades, mixed-root blokkades en bestaande destination-conflicten blijven door de bestaande backend en bestaande UI-validatie worden afgevangen
Pragmatische consequentie:
- de move-popup moet vooral destination-gericht zijn
- submit moet direct de bestaande move-logica aanroepen
- geen impliciete keuze meer tussen rename en move in deze flow
5. Relatie met F2 Rename
Na invoering van pure F6 Move geldt:
F2blijft exclusief voor renameRename-knop blijft exclusief voor renameF6wordt exclusief voor moveMove-knop wordt exclusief voor move
Belangrijk ontwerpprincipe:
- geen gedeelde rename/move-popup meer
F2enF6krijgen elk een eigen, semantisch heldere popupflow- dit maakt toekomstige onderhoud en UX-consistentie eenvoudiger
6. UI-semantiek
Welke contextinformatie is nuttig
Voor een pure move-popup is nuttig:
- broninformatie: welk item of hoeveel items geselecteerd zijn
- destination-informatie: waarheen wordt verplaatst
- bij batch move: doelmap in plaats van volledig doelpad per item
Default destination
Aanbevolen defaultvoorstel:
- gebruik het current path van het inactieve paneel als destination-basis
Voor exact 1 item:
- toon een destination pad of destination map duidelijk, afhankelijk van de bestaande implementatierichting
- aanbevolen: toon volledig destination path, vooraf ingevuld op basis van het inactieve paneel + itemnaam
- dit houdt aan bij de bestaande move-aanroepsemantiek voor single-item move
Voor batch move:
- toon aantal geselecteerde items
- toon doelmap = current path van het inactieve paneel
- geen rename-achtige tekst of naamveld per item
Foutmeldingen en blokkades
Compact tonen in de popup of bestaande errorzone:
- destination exists
- mixed roots not allowed
- destination inside source not allowed
- cross-root directory move not supported
- andere bestaande backendfouten
Belangrijk:
- foutmeldingen moeten move-gericht geformuleerd zijn
- geen verwijzing naar rename of gecombineerde semantiek
7. Regressierisico
Belangrijkste risico's:
- per ongeluk opnieuw bouwen van bestaande move-functionaliteit in plaats van die te hergebruiken
- verwarring tussen oude gecombineerde popup en nieuwe pure move-popup
- inconsistente keyboard- en knopwiring tussen
F6enMove - onbedoelde impact op de al werkende
F2 Rename-flow
Mitigatie:
F6enMoveéén centrale pure move-handler laten delen- bestaande backend move-calls intact laten
F2volledig gescheiden houden- popup-tekst en labels expliciet move-only maken
- geen backendwijzigingen in deze stap
8. Teststrategie
UI smoke/regressietests:
- functiebalk bevat
MovemetF6 F6wiring blijft aanwezigMove-knop gebruikt dezelfde handler alsF6- move-popupcontainer aanwezig en move-only geëtiketteerd
- rename-popup blijft apart aanwezig voor
F2
Handmatige validatie:
- exact 1 file ->
F6opent pure move-popup - exact 1 directory ->
F6opent pure move-popup binnen huidige scope - meerdere files -> batch move-popup blijft logisch werken
- meerdere directories -> batch move-popup blijft logisch werken binnen huidige scope
- gemengde selectie -> bestaande batch move-scope en blokkades blijven correct
F2 Renameblijft volledig los en ongewijzigd
Bestaande regressies die bewaakt moeten blijven:
- single file move same-root
- single file move cross-root
- single directory move binnen huidige scope
- batch move file-only
- batch move met directories binnen huidige scope
- blokkades voor mixed roots, subtree en symlink source
9. Aanbeveling
Aanbevolen v1-richting met laag regressierisico:
- maak
F6enMoveUI-semantisch puur move-only - verwijder rename-semantiek uit de
F6-popupflow - behoud en hergebruik alle bestaande move-logica, validaties en backendcalls
- houd
F2 Renamevolledig apart
Waarom dit de veiligste richting is:
- maximale herbruik van bestaande backend en UI-logica
- minimale semantische overlap tussen
RenameenMove - duidelijkere functietoetsbetekenis
- laag regressierisico omdat de verandering vooral UI-opschoning is, geen capability-uitbreiding