Skip to content

Peut pas utiliser un lien <a routerLink> filtré vers le listing courant #250

@PowerKiKi

Description

@PowerKiKi

En faite je rouvre le ticket plutôt qu'en créer un autre car ça reste très lié.

Il nous reste une zone morte : On n'initialise natural-search que lors qu'on initialise son composant parent. Du coup, on ne peut pas utiliser un lien <a routerLink> filtré vers le listing courant car il est ignoré à la fois par la barre de recherche et par les résultats. On n'a aucune implémentation pour réagir à un changement d'url en regard de la recherche (hors cas spécifique de l'historique).

Paradoxalement, on peut linker vers un autre listing filtré, puisque le filtre est pris à l'initialisation de l'autre composant.

Disposer d'un lien standard (html) avec un filtre vers le composant courant est en faite assez compliqué. Il faut déléguer le pouvoir à l'url.

L'implémentation actuelle implique qu'on appelle search (update url + query) lors d'un changement manuel de la recherche.

           <natural-search
                    [selections]="selections"
                    (selectionChange)="persistAndSearch($event)"
                />

Ce qu'il nous faudrait c'est plutôt de mettre à jour l'url, et ensuite d'écouter les changements sur l'url :

           <natural-search
                    [selections]="selections"
                    (selectionChange)="persistOnly($event)"
                />

persist() update le local storage et l'url.

        this.router.events(...) .subscribe(() => {
                const selections = fromUrl(this.persistenceService.getFromUrl('ns', this.route));
                this.naturalSearchSelections = selections;
                this.translateSearchAndRefreshList(this.naturalSearchSelections, true);
            });

J'ai implémenté un prototype approximatif et ca marche plutôt bien pour résoudre le cas spécifique. Mais il y a d'autres cas que j'anticipe qui ne vont pas fonctionner :

  • Partir et revenir sur un listing filtré n'est pas initialisé depuis le local storage (il faut approfondir le sujet)
  • Les composants qui n'ont pas de persistance ne peuvent pas marcher, puisqu'il n'y a pas d'url pour eux. Notamment tous ceux qui sont wrappés dans d'autres composants ou dont la persistance est désactivée.

Donc cette approche alternative ne se suffit pas à elle même, et les deux approches (actuelle + nouvelle) ne peuvent pas vivre ensemble, sinon il y a double recherche (double query vers le serveur).

Je vais continuer à creuser la question en off, mais si t'as un avis je t'écoute volontiers.

Originally posted by @sambaptista in #195

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions