URL generica alla pagina di fatturazione utente in Javascript non funzionante

Quindi so già che /my/billing/subscriptions è un modo per collegare l’utente corrente al suo profilo utente, in particolare alla sezione fatturazione fornita da Discourse Subscriptions. Tuttavia, questo non sembra funzionare nel mio codice qui sotto, con l’espressione all’interno dell’istruzione if. In particolare, sto cercando di far apparire un pulsante solo sulla pagina di fatturazione dell’utente. In realtà, sembra che non funzioni per nessun URL della forma /my, sia che si tratti di fatturazione, preferenze, attività o altro. Sto facendo qualcosa di sbagliato? Cosa dovrei usare? (Ricorda che questo non funziona solo all’interno dell’istruzione if. Altrimenti, l’uso di /my ha funzionato e funziona correttamente.)

<script type="text/discourse-plugin" version="0.8">
api.registerConnectorClass("above-user-profile", "back-button", {
    setupComponent(args, component) {
    api.onPageChange((url) => {

        if (url === "/my/billing/subscriptions" ){ 
          document.querySelector("html").classList.add("custom-homepage"); 
          component.set("displayCustomHomepage", true); 
        } else {  
          document.querySelector("html").classList.remove("custom-homepage"); 
          component.set("displayCustomHomepage", false); 
        }
    });
    }
});

</script>

<script type="text/x-handlebars" data-template-name="/connectors/above-user-profile/back-button">
  {{#if displayCustomHomepage}} 
    <a href="https://mathbymiles.com/my/preferences" class="btn btn-default">
        <span class="d-button-label">
            Torna alle impostazioni!
        </span>
    </a>
  {{/if}}
</script>
1 Mi Piace

Non è forse perché gli utenti non si trovano mai negli URL /my/*, dato che si tratta semplicemente di reindirizzamenti intelligenti?

Ad esempio, /my/preferences mi reindirizza a /u/falco/preferences, quindi non mi trovo mai sulla pagina /my/preferences affinché la condizione if nel tuo codice venga attivata.

2 Mi Piace

Capisco, hai ragione. Vedo perché non sarebbe appropriato per un if, dato che non sarebbe mai vero. Allora, cosa posso fare?

Ho provato a fare invece, nell’if,

url === "/u/" + user.username + "/billing/subscriptions"

dove

const user = api.getCurrentUser(),

ma anche questo non sembra funzionare…

EDIT: Quindi, usando console.log, sono riuscito a capire che in generale questo approccio funziona bene. Ad esempio, se inserisco semplicemente il codice

const user = api.getCurrentUser()
console.log("/u/" + user.username + "/billing/subscriptions")

in uno script, ottengo come risultato /u/Miles/billing/subscriptions come desiderato.

Tuttavia, il problema si verifica quando provo a inserire questo all’interno di setupComponent(args, component) {}. Una volta fatto questo, console.log non mostra più nulla. Ancora non sono sicuro di cosa stia sbagliando…

Hai accesso all’oggetto api nel metodo setupComponent? Mi chiedo se questo sia il motivo per cui stai riscontrando problemi.

Pensavo proprio così, dato che l’uso di api.onPageChange(url) è già presente e funziona correttamente. Tieni presente che sto adattando il codice da qui, quindi sembra davvero vero che ho accesso all’oggetto api nel metodo setupComponent.

Solo per ulteriori chiarimenti, ecco cosa ho ottenuto finora:

Con il codice

<script type="text/discourse-plugin" version="0.8">
    const user = api.getCurrentUser();
    console.log("/u/" + user.username + "/billing/subscriptions");

    api.registerConnectorClass("above-user-profile", "back-button", {
    setupComponent(args, component) {

    api.onPageChange((url) => {

        if (url === "/u/" + user.username + "/billing/subscriptions" ){ 
          document.querySelector("html").classList.add("custom-homepage"); 
          component.set("displayCustomHomepage", true); 
        } else {  
          document.querySelector("html").classList.remove("custom-homepage"); 
          component.set("displayCustomHomepage", false); 
        }
    });
    }
});

ottengo l’output corretto /u/Miles/billing/subscriptions dalla console. Ma quando faccio

<script type="text/discourse-plugin" version="0.8">
    

    api.registerConnectorClass("above-user-profile", "back-button", {
    setupComponent(args, component) {

    const user = api.getCurrentUser();
    console.log("/u/" + user.username + "/billing/subscriptions");

    api.onPageChange((url) => {

        if (url === "/u/" + user.username + "/billing/subscriptions" ){ 
          document.querySelector("html").classList.add("custom-homepage"); 
          component.set("displayCustomHomepage", true); 
        } else {  
          document.querySelector("html").classList.remove("custom-homepage"); 
          component.set("displayCustomHomepage", false); 
        }
    });
    }
});

non c’è alcun output da trovare…