valeur par defaut sur un filtre sur un index à 3 etats

21/07/2023

coté front on a un filtre

{{ form_widget('archive', 'select', {value: req.query.archive, empty: trans('(archive)'), placeholder: trans('(archive)'), options: [
    { id: '0', name: 'Non Archivé'},
    { id: '1', name: 'Archivé'},
]}) }}

Ce qui donne 3 valeurs possible dans ce sélecteur : chaine vide, 0 et 1.

Coté controlleur

Cette version fait genre, mais quand on vide le filtre on devriat voir les archivés et les non archivés. malheureusement avec cette version on aura soit les archivés soit les non archivés.

where.push(`c.archive = ${model.escape(req.query.archive || 0)}`);

Par contre celle la marche vraiment :

req.query.archive ??= '0';
if (req.query.archive === '0') where.push('u.archive = false');
if (req.query.archive === '1') where.push('u.archive = true');

avec cette version par defaut c'est 0 (quand c'est undefined ou null).
et on peut quand même avoir 3 états : chaine vide, 0 et 1

Et en front le sélecteur est bien prérempli en fonction de l'option sélectionnée.