Il fallback per il supporto dell'impostazione del tema `user_in_X` fallisce quando il valore risolto è false

L’ho appena provato, ma credo di aver notato un problema durante i test:
Se un utente non appartiene a nessuno dei gruppi consentiti, il nuovo controllo per user_in_copy_button_allowed_groups non restituisce alcun risultato. Di conseguenza, viene eseguito il codice di fallback per i forum che non supportano ancora user_in_setting, ma questo fallisce:

[THEME 254 'Copy post button'] TypeError: Cannot read properties of undefined (reading 'split')

Passaggi per riprodurre il problema:

  1. Installa il componente e aggiungilo al tuo tema
  2. Limita i allowed_groups agli amministratori
  3. Impersona un utente di test non amministratore e controlla la console del browser

Credo che il problema si trovi qui:

if (Object.hasOwn(settings, "user_in_copy_button_allowed_groups")) {
    if (settings.user_in_copy_button_allowed_groups) {
      return true;
    }
  }

Questo codice restituisce un valore anticipatamente solo quando il valore è true. Quando è false, viene eseguito il codice di fallback sottostante, che si aspetta che il valore dell’impostazione esista ancora come stringa; tuttavia, nei miei test con il mio componente [1], da cui ho copiato il modello di fallback da copy-post, il valore diventa undefined una volta che il supporto per user_in_X è attivo. Immagino che la correzione consista nel restituire anche false in quel caso, in modo che il fallback venga utilizzato solo quando la chiave user_in_X non esiste affatto (core più vecchio), e non ogni volta che il valore risolto risulta essere false.

La mia ipotesi è corretta, o ci si aspetta ancora che l’impostazione fornisca i gruppi come stringa?


  1. prefilled composer link ↩︎

1 Mi Piace

Oh, grazie per aver segnalato questo problema, ho appena commesso un errore stupido nel componente del tema. Questo:

if (settings.user_in_copy_button_allowed_groups) {
  return true;
}

Dovrebbe essere:

return settings.user_in_copy_button_allowed_groups;

Il fallback dovrebbe verificarsi solo quando Object.hasOwn(settings, "user_in_copy_button_allowed_groups") è falso. Correrò a sistemare questi componenti in cui ho aggiunto questa roba…

2 Mi Piace

Ecco la correzione:

In realtà l’ho gestita correttamente nella PR per il TC di Lilly, quindi non c’è altro da fare lì:

1 Mi Piace