feat: Renamen functionaliteit aangepast

This commit is contained in:
kodi
2026-03-12 09:38:14 +01:00
parent 8f4263c222
commit 2e897504a8
7 changed files with 324 additions and 10 deletions
+164
View File
@@ -0,0 +1,164 @@
# UI_F2_RENAME_V1
## 1. Doel
`Rename` moet een expliciete eigen UI-flow krijgen via `F2`, los van de bestaande `F6` move-flow.
Waarom:
- `Rename` is conceptueel een andere actie dan `Move`
- een eigen `F2`-flow sluit beter aan op klassieke file-manager bediening
- het maakt de UI voorspelbaarder: `F2` = naam wijzigen, `F6` = verplaatsen
- het vereenvoudigt later de verdere scheiding tussen rename en move in de UI, zonder backendwijziging
Bestaande context:
- rename-functionaliteit bestaat backendmatig al via het bestaande rename-endpoint
- move-functionaliteit bestaat backendmatig al via het bestaande move-endpoint
- `F6`/move-flow bestaat al in de UI
- in deze stap moet dus niets nieuws in backend of API worden ontworpen; alleen een nette eigen rename-flow in de frontend
## 2. Scope
In scope voor v1:
- exact 1 file geselecteerd
- exact 1 directory geselecteerd
- `F2` keyboard shortcut
- `Rename`-knop in de functiebalk
- compacte rename-popup
Out of scope:
- batch rename
- rename van meerdere selectie-items
- herontwerp van `F6`
- backendwijzigingen
- nieuwe dependencies
## 3. Gewenst gedrag
`F2` en de bestaande `Rename`-knop moeten exact dezelfde UI-flow gebruiken.
Voorstel:
- `F2` keyboard shortcut activeert de rename-flow
- `Rename`-knop in functiebalk activeert exact dezelfde flow
- beide openen een compacte rename-popup
Popup-eigenschappen:
- titel: `Rename`
- toont context van het geselecteerde item
- invoerveld bevat alleen de huidige naam
- dus niet het volledige pad
- focus direct in het invoerveld
- tekst vooraf geselecteerd zodat overschrijven snel kan
- `Enter` bevestigt
- `Escape` annuleert
- `X` rechtsboven sluit de popup
Belangrijk semantisch verschil met `F6`:
- `F2 Rename` werkt op naamniveau binnen dezelfde parent
- de popup toont en bewerkt alleen de naam
- geen destination pad, geen implicit move-semantiek
## 4. Validatie
Frontendvalidatie in v1 moet klein blijven en vooral duidelijke UX geven. De backend blijft de bron van waarheid.
Frontend moet minimaal blokkeren of afvangen:
- lege naam
- ongewijzigde naam
- namen met `/`
- namen die triviaal ongeldig zijn zoals `.` of `..`
Aanpak:
- lichte pre-validatie in de popup voor snelle feedback
- daarna altijd het bestaande rename-endpoint gebruiken
- backend-validatie blijft leidend voor definitieve afhandeling
Geen nieuwe rename-semantiek ontwerpen:
- geen padbewerkingen in de popup
- geen move-achtige fallback
- geen root- of parent-wijziging
## 5. Files en directories
Exact 1 file:
- rename toegestaan
- popup opent met huidige bestandsnaam
- bevestigen gebruikt bestaande backend-rename
Exact 1 directory:
- rename toegestaan
- popup opent met huidige mapnaam
- bevestigen gebruikt bestaande backend-rename
Meerdere geselecteerde items:
- in v1 niet ondersteunen
- `F2` en `Rename` doen functioneel niets destructiefs
- aanbevolen UX: knop disabled bij `selectedItems.length !== 1`
- voor keyboardshortcut: geen actie als rename in de huidige context disabled zou zijn
Dit sluit aan op de bestaande regel dat keyboardshortcuts dezelfde enabled/disabled toestand moeten respecteren als de functiebalkknoppen.
## 6. Relatie met bestaande flows
Herbruik:
- bestaande backend rename-functionaliteit hergebruiken
- bestaande move-functionaliteit ongemoeid laten
- bestaande selectie- en active-pane-logica hergebruiken
Regels:
- `F2` en `Rename`-knop delen exact dezelfde frontendflow
- `F6` blijft ongewijzigd in deze stap
- bestaande `F6` rename/move-popup wordt niet herontworpen in deze stap
- geen dubbele implementatie van backendlogica; alleen een aparte UI-laag voor rename
Pragmatische richting:
- introduceer een aparte compacte rename-popup
- submit roept hetzelfde backend-endpoint aan als de huidige renameknop al gebruikt
- succesvolle rename refresht alleen het actieve paneel, zoals nu al logisch is voor rename
## 7. Regressierisico
Belangrijkste risico's:
- selectieflow: `F2` mag niet reageren bij ongeldige selectie
- popup-focus: paneelkeyboard mag niet doorwerken terwijl de rename-popup open is
- interactie met `F6`: geen verwarring of gedeelde state tussen rename-popup en bestaande rename/move-popup
- onbedoeld herbouwen van bestaande rename/move-logica in plaats van hergebruik
Mitigatie:
- `F2` dezelfde disabled-context laten volgen als de `Rename`-knop
- aparte popup-state voor rename, niet hergebruik van de complexere `F6` destination-popup
- bestaande backend-rename endpoint direct blijven gebruiken
- geen aanpassing aan `F6` in deze stap
## 8. Teststrategie
UI smoke/regressietests:
- functiebalk bevat `Rename` met `F2`-hint
- rename-popupcontainer aanwezig in HTML
- rename-popup bevat invoerveld en sluitknop
- `F2` wiring aanwezig in frontendcode
- bestaande `F6` wiring blijft aanwezig
Handmatige validatie:
- exact 1 file geselecteerd -> `F2` opent rename-popup met alleen naam
- exact 1 directory geselecteerd -> `F2` opent rename-popup met alleen naam
- `Enter` bevestigt
- `Escape` sluit
- `X` sluit
- meerdere selectie -> `F2` doet niets / rename blijft disabled
- succesvolle rename refresht actief paneel
- `F6` move-flow blijft ongewijzigd werken
## 9. Aanbeveling
Aanbevolen v1-richting met laag regressierisico:
- voeg een aparte compacte rename-popup toe voor `F2` en de `Rename`-knop
- werk alleen met de naam van exact 1 geselecteerd item
- gebruik het bestaande backend rename-endpoint zonder nieuwe semantiek
- laat `F2` en de `Rename`-knop exact dezelfde flow delen
- laat `F6` volledig ongemoeid in deze stap
Waarom dit de veiligste richting is:
- duidelijke scheiding tussen rename en move in de UI
- minimaal risico op regressie in bestaande move-flow
- geen backendwerk nodig
- sluit goed aan op klassieke file-manager verwachtingen