kenkoooo / AtCoderProblems

Extend your AtCoder
https://kenkoooo.com/atcoder/
MIT License
1.39k stars 149 forks source link

ユーザーページの`All`タブへのリンクが機能しない #1457

Closed your-diary closed 7 months ago

your-diary commented 7 months ago

ユーザーページのDifficulty Pies, AllといったタブのURLを開いたとき、真っ白なページが表示されます

AchievementタブやAtCoder Pie Chartsタブは正常に機能します

macOS版Firefox, Chromeで再現

前は確実に動いていて、おそらく3ヶ月前〜1ヶ月前から動かなくなっています

再現方法

  1. 任意のユーザーのAllタブのページにアクセス(例: https://kenkoooo.com/atcoder/#/user/YourDiary?userPageTab=All)

  2. 真っ白なページが表示される

Workaround

  1. まず、Achievementタブのページにアクセス(例: https://kenkoooo.com/atcoder/#/user/YourDiary?userPageTab=Achievement)

  2. Allタブに手動で移動

  3. ちなみに、ここでブラウザをリロードすると真っ白な画面になる(Cmd+Shift+rによるforce refreshでも同様)

hotate29 commented 7 months ago

DifficultyPieChartコンポーネントでエラーが起きているようです。

内部ではcontestMap = useContestMap()という形でcontest.jsonの情報を受け取っています。useContestMap()contest.jsonを読み込んでいる間はundefinedを返すようになっており、contestMapがundefinedになる可能性があります。これを確認せずにcontestMap.get()を呼び出してしまい、エラーが発生。という流れのようです。

https://github.com/kenkoooo/AtCoderProblems/blob/163bb9614c405540190e221df7bb10d753347290/atcoder-problems-frontend/src/pages/UserPage/DifficultyPieChart/index.tsx#L36-L45

対応としては、他のコンポーネント(MyAccountPageなど)の例に倣って読み込み中の表示を出すようにするとかでしょうか。

この処理は b49bac15b970cb613a734c063240be5711d12d57 で追加されたようです。PRのマージと発生時期が概ね一致していますね(デプロイまでの時間もあるので、即反映という事ではないとは思いますが)。

しかしこういうのってlintに引っかかったりしませんかね。手元のVSCodeでは警告が出たのですが、yarn lintしても何も出ませんでした。TypeScriptのlint事情はよく知らないのでちょっと調べてみます。

kenkoooo commented 7 months ago

@your-diary @hotate29 #1369 を一旦リバートしました!調査ありがとうございます!!!

your-diary commented 7 months ago

@hotate29 調査ありがとうございます! @kenkoooo ご対応ありがとうございます!

リンクが機能するようになったことが確認できたため、close致します。