Erro na página de convites - "Cannot read properties of undefined (reading 'slice')"

Na versão estável mais recente, vejo um erro de JavaScript quando clico no botão “Criar link de convite” em /u/user_name/invited/pending.

O console mostra:

Uncaught (in promise) TypeError: Cannot read properties of undefined (reading ‘slice’) at h.shortKey (chunk.f105ceace2ad381ddb2f.d41d8cd9.js:241:61588)

Se o objeto de convite for renderizado antes que invite_key seja preenchido pelo servidor, invite_key será indefinido e ele falhará ao usar .slice() em nada.

Em invite.js, a função shortKey tenta encurtar uma chave de convite:

shortKey(key) {
return key.slice(0, 4) + “…”;
}

Não consigo reproduzi-lo no meta, então talvez eu o veja porque meu servidor ou rede não é tão rápido. Mas verificar se a chave existe antes de usá-la parece resolvê-lo:

return key ? key.slice(0, 4) + “…” : “”;;

Para uma correção simples, é melhor postar aqui ou abrir um PR?

A chave de convite não é anulável, no entanto:

E isso está iterando sobre model.invites:

Eu dei uma olhada no código e não tenho certeza de onde o código parcialmente preenchido pode vir, mesmo quando adicionei um atraso de 400ms na rede aqui, não consigo reproduzir.

Acho que precisamos de algum tipo de reprodução aqui antes de aplicar o patch, esse patch acaba permitindo que as pessoas copiem um link de convite quebrado.

Obrigado por analisar e apontar isso.

Colocar o atraso em before_create deve expô-lo.

Eu atualizei para:

{{else}}
  {{icon "link"}}
+ {{#if invite.invite_key}}
    {{i18n
      "user.invited.invited_via_link"
      key=invite.shortKey
      count=invite.redemption_count
      max=invite.max_redemptions_allowed
    }}
+ {{else}}
+   <em>Gerando link...</em>
+ {{/if}}
{{/if}}

Acho que isso seria bom como um PR, desde que seja localizado.

Ainda um pouco confuso sobre onde estamos preenchendo o Invite com um objeto meio cheio, mas é melhor do que falhar e parece correto para mim.

Você vê este erro aqui no Meta? Imagino se ele já foi corrigido no latest. Nesse caso, só precisamos identificar o commit que o corrigiu e fazer o backport para o stable.

O convite é adicionado à lista imediatamente após save(), mas antes que invite_key seja preenchido pelo servidor. Ele ainda está presente em latest, então abri PR #35679

1 curtida