Botão do rodapé do tópico dependenteKeys não funciona

Tenho problemas para fazer dependentKeys funcionar em registerTopicFooterButton (documentado aqui)

Meu código (exemplo mínimo)

  api.registerTopicFooterButton({
    id: "my-topic-footer-button",
    action() {
      this.topic.updateTags(["my-tag"]);
    },
    title() {
      return "my.button.title";
    },
    label() {
      return "my.button.label";
    },
    dependentKeys: ["topic.tags"],
    disabled() {
      return this.topic.tags.includes("my-tag");
    }
  });

Esperado: assim que eu pressionar o botão, as tags do tópico serão definidas como my-tag (funciona), o que aciona uma nova renderização do botão e o desabilita.
Esperado: assim que eu adicionar a tag manualmente, o botão será desabilitado

Realidade: a nova renderização não é acionada em nenhum dos cenários.
O botão é corretamente desabilitado/habilitado na atualização da página.

Alguém consegue identificar meu erro?

1 curtida

Ter uma propriedade computada dependendo de topic.tags fará com que ela seja invalidada quando o próprio array for substituído. Mas não causará invalidação quando itens forem adicionados/removidos do array.

Portanto, acho que você provavelmente quer topic.tags.@each (docs).

Em geral, estamos tentando nos afastar de propriedades computadas e nos aproximar de getters nativos/autotracking. Acho que teremos que modernizar a API topic-footer-buttons em algum momento para suportar isso :thinking:

2 curtidas

Obrigado pela resposta rápida, David!

No entanto, usar topic.tags.@each não resolve isso… (de qualquer forma, nem quando a tag é adicionada manualmente, nem quando o botão é pressionado).
Um console.log na função disabled() não é executado. Ele também não é executado em displayed().

1 curtida

Quando você clica no seu botão, a nova tag aparece corretamente no topo do tópico?

1 curtida

Sim, isso funciona bem.

Eu também tentei this.topic.notifyPropertyChange("tags");

E até fiquei desesperado e tentei manipular outras propriedades (como this.topic.title = this.topic.title + "!" e incluindo topic.title em dependentKeys). Isso também não funciona. Usar this.topic.set... também não funciona.

1 curtida

Curiosamente, se eu copiar/colar seu exemplo do OP e executar localmente, parece funcionar perfeitamente:

Existem outros temas/plugins que podem estar interferindo? Ou talvez algo diferente em seu código ‘real’, em comparação com o exemplo mínimo no OP?

:thinking:

Meu código "minimalista" no OP é o meu código "real" no momento. Vou movê-lo para uma instalação completamente limpa e ver se isso muda alguma coisa.

EDIT sim, funciona em uma instalação limpa :sob: :sob:

Vou deslistar este tópico para não ter que viver com a vergonha :wink:
Eu o atualizarei quando descobrir o que estava causando isso.

Obrigado pela sua ajuda @david!!

2 curtidas

Este tópico foi automaticamente fechado 30 dias após a última resposta. Novas respostas não são mais permitidas.