招待ページのエラー - 「undefined のプロパティを読み取れません ( 'slice' を読み取っています)」

最新の安定バージョンで、「招待リンクを作成」ボタンをクリックすると、/u/user_name/invited/pending で JavaScript エラーが発生します。

コンソールには次のように表示されます。

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

招待オブジェクトがサーバーから invite_key が設定される前にレンダリングされると、invite_key が未定義になり、.slice() を何もに対して使用するとクラッシュします。

invite.js では、shortKey 関数は招待キーを短縮しようとします。

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

メタでは再現できません。おそらく、私のサーバーまたはネットワークがそれほど高速ではないため、発生しているのでしょう。しかし、キーが存在するかどうかを確認してから使用すると、解決するようです。

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

簡単な修正の場合、ここに投稿するのとPRを開くのとではどちらが良いですか?

招待キーは null にできません。

そして、これは model.invites を反復処理しています。

コードを確認しましたが、部分的にしか読み込まれていないコードがどこから来るのかわかりません。ネットワークに 400ms の遅延を追加しても再現できませんでした。

パッチを適用する前に、何らかの再現手順が必要だと思います。そのパッチは、壊れた招待リンクをコピーすることを可能にしてしまいます。

確認して指摘していただきありがとうございます。

before_create に遅延を入れると表示されるはずです。

以下のように更新しました。

{{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>リンクを生成中...</em>
+ {{/if}}
{{/if}}

ローカライズされれば、これはPRとして問題ないと思います。

まだ、Inviteに半分しかデータが入っていないオブジェクトがどこで設定されているのか少し混乱していますが、失敗するよりは良いですし、私には正しいように思えます。

Metaでこのエラーが表示されているのにお気づきですか? latestで修正されたかどうか気になります。もしそうなら、修正したコミットを特定し、それをstableにバックポートするだけです。

save() の直後、サーバーから invite_key が設定される前に、招待がリストに追加されます。これは latest にまだ存在するため、PR #35679 を開きました。

「いいね!」 1