5.8 KiB
Search v1
1. Doel
Search voegt nu waarde toe omdat de app inmiddels bruikbaar is als dual-pane file manager, maar nog volledig afhankelijk is van handmatige navigatie. Bij grotere directory trees kost dat te veel stappen.
Search moet passen binnen de bestaande dual-pane workflow:
- zoeken gebeurt vanuit het actieve paneel
- resultaten helpen navigatie versnellen
- de browse-workspace blijft het primaire werkvlak
- search is ondersteunend, geen nieuw hoofdscherm
2. Scope
Search v1 ondersteunt:
- zoeken op bestandsnaam
- zoeken op mapnaam
- case-insensitive substring matching
Search v1 ondersteunt niet:
- full-text content search
- indexer of achtergrondindexering
- regex
- geavanceerde querytaal
- saved searches
- fuzzy ranking
Aanbevolen zoekmodel voor v1:
- eenvoudige naamzoeking met substring match
- optioneel later uit te breiden naar glob of prefix filters, maar niet in deze slice
3. Zoekbereik
Mogelijke richtingen:
- zoeken vanaf
current path - zoeken vanaf de root van het actieve paneel
Aanbeveling voor v1:
- standaard zoeken vanaf
current pathvan het actieve paneel
Reden:
- laag regressierisico
- voorspelbaar voor de gebruiker
- technisch goedkoper
- minder kans op trage scans van volledige opslagvolumes
- sluit goed aan op de huidige paneel-context
Gedrag:
activePanebepaalt de zoekcontext- de query zoekt recursief onder
currentPathvan dat paneel - resultaten horen dus altijd bij de context van het actieve paneel op het moment van starten
Later uitbreidbaar:
- een simpele scope-toggle
Current folder treeversusCurrent root
4. UI-richting
Aanbevolen v1-richting:
- aparte compacte search-modal
- geen verstoring van de dual-pane layout
Startmechanisme:
- alleen keyboard shortcut
- geen zichtbare knop in topbar
- geen zichtbare knop in functiebalk
Aanbevolen shortcut voor v1:
- Mac:
Cmd+Shift+F - Windows/Linux:
Ctrl+Shift+F
Reden:
- sluit goed aan op bestaande zoekverwachtingen
- vermijdt extra visuele drukte in de UI
- vermijdt conflict met bestaande F1-F8 functiebalklogica
Modal-inhoud:
- titel
Search - actieve paneelcontext tonen
- zoekveld
- korte contextregel:
Searching under: <current path> - resultatenlijst onder het invoerveld
Gedrag bij resultaatklik:
- klik op resultaat opent de parentlocatie in het actieve paneel
- en selecteert het gevonden item
Voor directories:
- resultaatklik navigeert naar die directory in het actieve paneel
Voor files:
- resultaatklik navigeert naar de parent directory in het actieve paneel
- en selecteert de file
Dit sluit aan op de bestaande browse- en selectieflow zonder extra viewer/open-semantiek.
5. Resultaatsemantiek
Minimale velden per resultaat:
namepathtype(fileofdirectory)parent_pathrootof equivalent contextveld
Weergave in v1:
- primaire regel: naam
- secundaire regel: parent path of volledig path
- compacte type-indicatie (
file/dir)
Aanbevolen presentatie:
- naam prominent
- parent path als muted secundaire regel
- type als kleine badge of label
6. Backend-impact
Aanbevolen endpoint:
GET /api/search?path=...&query=...
Waarom een nieuw endpoint nodig is:
- browse-endpoint is contractueel directory listing
- search vereist recursieve traversal en resultaatlimieten
- aparte fout- en limietsemantiek is logisch
Securitymodel:
pathmoet via bestaandepath_guard- zoekroot moet binnen whitelist vallen
- traversal en invalid root alias blijven via bestaande validatie lopen
- geen vrije scan buiten geconfigureerde roots
Implementatierichting:
- backend scant recursief vanaf gevalideerde startdirectory
- vergelijkt naam case-insensitive met query
- retourneert gemaximeerde lijst van matches
7. Performance en risico
Grootste risico:
- diepe directory trees op grote volumes
Aanbevolen v1-beheersing:
- result limit, bijvoorbeeld
100 - optionele harde scan limit op aantal bezochte entries
- geen parallelle scanner
- geen indexer
Aanbevolen gedrag bij limiet:
- response bevat
truncated: true/false - als limiet bereikt is, toon alleen eerste resultaten
Timeouts:
- geen aparte timeoutsemantiek nodig in eerste slice als result-limiet en current-path scope klein blijven
8. Regressierisico
Belangrijkste risico’s:
- browse-flow mag niet veranderen
- selectieflow mag niet onverwacht resetten buiten het actieve paneel
- keyboardflow mag niet botsen met bestaande shortcuts
- modal focus moet bestaande paneelnavigatie blokkeren zolang search open is
Beperkende keuzes die risico laag houden:
- aparte modal
- zoeken alleen op naam
- starten vanuit actief paneel
- resultaten openen in bestaand paneelgedrag
9. Teststrategie
Backend golden tests:
- lege resultaatlijst
- simpele file match
- simpele directory match
- search onder current path
- traversal geblokkeerd
- path not found
- invalid root alias
- result limit / truncated gedrag
UI smoke/regressietests:
- search-modal container aanwezig
- zoekveld aanwezig
- resultaatlijst container aanwezig
- keyboard wiring voor
Cmd/Ctrl+Shift+F
Handmatige validatie:
- zoeken vanuit links paneel raakt alleen linkse context
- zoeken vanuit rechts paneel raakt alleen rechtse context
- resultaatklik navigeert correct
- resultaatklik op directory opent directory
- resultaatklik op file opent parent + selecteert file
Escapesluit modal
10. Aanbeveling
Aanbevolen v1-richting met laag regressierisico:
- nieuw backend-endpoint
GET /api/search - recursieve naamzoeking
- scope =
currentPathvan actief paneel - case-insensitive substring match
- harde result limit, bijvoorbeeld
100 - aparte compacte search-modal
- resultaatklik hergebruikt bestaande paneelnavigatie en selectie
Niet aanbevelen voor v1:
- root-brede zoeking als default
- content search
- indexer
- regex
- aparte zoekpagina
Dit levert een bruikbare eerste search op zonder de huidige dual-pane file manager semantiek te verstoren.