- Moved CONTEXT_MENU_INDEX.md and CONTEXT_MENU_VERIFICATION.md into docs/ directory for better organization - Consolidated all context menu documentation files in one location for easier maintenance - Documentation remains complete with 1000+ lines covering implementation, integration, and verification The change improves documentation structure by moving context menu related files into a dedicated docs folder, making it easier for developers to find an
159 lines
4.4 KiB
Markdown
159 lines
4.4 KiB
Markdown
# 🔧 Fix: URL Deep-Linking Priority Logic
|
|
|
|
## 🐛 Problème Identifié
|
|
|
|
L'URL `http://localhost:3000/?note=HOME.md&quick=Tâches` ne fonctionnait pas correctement car il y avait un **conflit entre les paramètres multiples**. Les effets appliquaient tous les filtres simultanément au lieu de respecter une priorité.
|
|
|
|
### Cause Racine
|
|
- `UrlStateService.parseUrlParams()` parsait tous les paramètres sans logique de priorité
|
|
- Pour `?note=HOME.md&quick=Tâches`, les effets appliquaient à la fois la note ET le filtre quick link
|
|
- Cela causait un comportement imprévisible et des conflits
|
|
|
|
## ✅ Solution Appliquée
|
|
|
|
### Implémentation de la Logique de Priorité
|
|
|
|
Dans `UrlStateService.parseUrlParams()`:
|
|
|
|
```typescript
|
|
private parseUrlParams(params: any): UrlState {
|
|
// Priorité: note > tag > folder > quick
|
|
// Si note est présent, ignorer les autres filtres
|
|
if (params['note']) {
|
|
return {
|
|
note: decodeURIComponent(params['note']),
|
|
tag: undefined,
|
|
folder: undefined,
|
|
quick: undefined,
|
|
search: params['search'] ? decodeURIComponent(params['search']) : undefined
|
|
};
|
|
}
|
|
|
|
// Si tag est présent, ignorer folder et quick
|
|
if (params['tag']) {
|
|
return {
|
|
note: undefined,
|
|
tag: decodeURIComponent(params['tag']),
|
|
folder: undefined,
|
|
quick: undefined,
|
|
search: params['search'] ? decodeURIComponent(params['search']) : undefined
|
|
};
|
|
}
|
|
|
|
// Si folder est présent, ignorer quick
|
|
if (params['folder']) {
|
|
return {
|
|
note: undefined,
|
|
tag: undefined,
|
|
folder: decodeURIComponent(params['folder']),
|
|
quick: undefined,
|
|
search: params['search'] ? decodeURIComponent(params['search']) : undefined
|
|
};
|
|
}
|
|
|
|
// Sinon, quick peut être présent
|
|
return {
|
|
note: undefined,
|
|
tag: undefined,
|
|
folder: undefined,
|
|
quick: params['quick'] ? decodeURIComponent(params['quick']) : undefined,
|
|
search: params['search'] ? decodeURIComponent(params['search']) : undefined
|
|
};
|
|
}
|
|
```
|
|
|
|
### Priorité Implémentée
|
|
1. **note** (priorité maximale) - ouvre directement la note, ignore tous les autres filtres
|
|
2. **tag** - applique le filtre tag, ignore folder et quick
|
|
3. **folder** - applique le filtre dossier, ignore quick
|
|
4. **quick** - applique le filtre quick link (seulement si aucun des autres n'est présent)
|
|
5. **search** - s'applique toujours en complément
|
|
|
|
## 📊 Résultat
|
|
|
|
### Avant la Correction
|
|
- `?note=HOME.md&quick=Tâches` → conflit entre note et quick link
|
|
- Comportement imprévisible, note peut ne pas s'ouvrir correctement
|
|
|
|
### Après la Correction
|
|
- `?note=HOME.md&quick=Tâches` → **ouvre seulement la note HOME.md**
|
|
- Le paramètre `quick=Tâches` est ignoré (priorité respectée)
|
|
- Comportement prévisible et cohérent
|
|
|
|
## 🧪 Tests de Validation
|
|
|
|
### URLs à Tester
|
|
|
|
#### Test 1: Note seule
|
|
```
|
|
URL: ?note=HOME.md
|
|
Attendu: Note HOME.md s'ouvre
|
|
```
|
|
|
|
#### Test 2: Note + Quick (conflit résolu)
|
|
```
|
|
URL: ?note=HOME.md&quick=Tâches
|
|
Attendu: Note HOME.md s'ouvre, quick ignoré ✅
|
|
```
|
|
|
|
#### Test 3: Tag seul
|
|
```
|
|
URL: ?tag=home
|
|
Attendu: Filtre tag appliqué
|
|
```
|
|
|
|
#### Test 4: Tag + Folder (conflit résolu)
|
|
```
|
|
URL: ?tag=home&folder=Allo-3
|
|
Attendu: Filtre tag appliqué, folder ignoré ✅
|
|
```
|
|
|
|
#### Test 5: Folder seul
|
|
```
|
|
URL: ?folder=Allo-3
|
|
Attendu: Filtre folder appliqué
|
|
```
|
|
|
|
#### Test 6: Folder + Quick (conflit résolu)
|
|
```
|
|
URL: ?folder=Allo-3&quick=Favoris
|
|
Attendu: Filtre folder appliqué, quick ignoré ✅
|
|
```
|
|
|
|
#### Test 7: Quick seul
|
|
```
|
|
URL: ?quick=Tâches
|
|
Attendu: Filtre quick appliqué
|
|
```
|
|
|
|
#### Test 8: Combinaisons avec Search
|
|
```
|
|
URL: ?note=HOME.md&search=test
|
|
Attendu: Note HOME.md s'ouvre + recherche "test" appliquée ✅
|
|
```
|
|
|
|
## 🔧 Fichiers Modifiés
|
|
|
|
- ✅ `src/app/services/url-state.service.ts` - Ajout logique de priorité dans `parseUrlParams()`
|
|
|
|
## 📝 Notes Techniques
|
|
|
|
### Pourquoi cette approche?
|
|
- **Simple**: Pas besoin de modifier les effects existants
|
|
- **Robuste**: Logique centralisée dans le parsing
|
|
- **Prévisible**: Priorité claire et documentée
|
|
- **Compatible**: Fonctionne avec tous les effects existants
|
|
|
|
### Impact
|
|
- Aucun breaking change
|
|
- Amélioration de la cohérence des URLs
|
|
- Résolution des conflits entre paramètres multiples
|
|
- Meilleure expérience utilisateur pour le deep-linking
|
|
|
|
## 🎯 Status
|
|
|
|
**Status**: ✅ **FIXÉ ET COMPILÉ**
|
|
**Impact**: Amélioration de la logique de priorité pour les URLs
|
|
**Test requis**: Validation des combinaisons de paramètres
|
|
**Compatibilité**: 100% backward compatible
|