Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

提出物一覧をVue.jsで非同期にした #2280

Merged
merged 24 commits into from
Mar 1, 2021

Conversation

hogucc
Copy link
Contributor

@hogucc hogucc commented Jan 27, 2021

ref #2178

概要

提出物一覧(全て、未チェック、未返信、自分の担当)をVue.jsで非同期に読み込むようにした

やったこと

提出物一覧の読み込みの非同期化

  • 提出物一覧(全て、未チェック、未返信、自分の担当)をVue.jsで非同期に読み込むようにした
  • ページャーをvuejs-paginateを用いて実装
  • product_checker.vueをproduct.vueの子コンポーネントに変更
  • 一覧ページ全体が読み込まれるまで「ロード中」の文言を表示するようにした

既存のテストコードの修正

  • 未チェック、未返信、自分の担当タブ関連のシステムテストをproducts_test.rbから別ファイルに切り出し
    • uncheked_controller、self_assigned_controller、not_responded_controllerのテストは元々products_test.rbの1ファイルにまとめられていた。が、他のテストはコントローラーごとにファイルが分かれていること、products_test.rb内のテストが増えて読みづらくなったことから、ファイルを分割したほうが良いと考えた
  • 提出物一覧の一括で開くボタンをクリックするテストを追加
    • 一括で開くボタンは今回の対応以前から存在していたが、テストが存在しなかったため追加した

@hogucc hogucc force-pushed the make-the-submissions-lists-spa branch from 2f96b4b to be0de02 Compare January 29, 2021 13:45
@hogucc hogucc marked this pull request as ready for review January 31, 2021 14:27
@hogucc hogucc requested a review from Chi-rr January 31, 2021 14:29
@hogucc
Copy link
Contributor Author

hogucc commented Jan 31, 2021

@Chi-rr
お手すきの際にコードレビューをお願いいたします🙇‍♀️
(※ コードレビューは運用上、現在システム開発に参加されている生徒の方にお願いすることになっています。が、今回は特別にご本人からレビュワーの経験を積みたいというお話があったので、レビューを担当していただくことになりました。)

@hogucc
Copy link
Contributor Author

hogucc commented Feb 8, 2021

@Chi-rr こちらできれば今週の水曜日までにレビューいただけると助かります💦難しい場合もご連絡いただけるとありがたいです🙏

@Chi-rr
Copy link
Member

Chi-rr commented Feb 8, 2021

@hogucc
遅くなってしまい申し訳ありません🙇‍♀️🙇‍♀️
本日中に確認させていただきます🙌

Copy link
Member

@Chi-rr Chi-rr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

遅くなってしまい申し訳ありません🙇‍♀️レビューいたしました!
全体的に良さそうで、少し気になった点にコメントさせていただきました🤲
またご確認いただけると幸いです!

app/javascript/product.vue Outdated Show resolved Hide resolved
:break-view-text="null"
)
.thread-list.a-card(v-if="products.length > 0")
product(v-for="(product, index) in products"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

index利用されていなさそうなので、削除できますかね??

Suggested change
product(v-for="(product, index) in products"
product(v-for="product in products"

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

削除しました!

fb44480

Comment on lines 143 to 145
json.products.forEach(c => {
this.products.push(c);
});
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cはどういう変数でしたでしょうか?
productpでもわかりやすいかなと思いました!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

productに修正しました!

1b04a9f

Comment on lines +115 to +117
window.onpopstate = function(){
location.href = location.href
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

こちらのlocation.href = location.hrefは、vuejs-paginateの実装上必要なんでしたっけ?👀

Copy link
Contributor Author

@hogucc hogucc Feb 10, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

はい、そうです!ページャーの2ページ目以降がクリックされたときはpushStateではURLの履歴を追加しているのですが、pushStateはページの読み込みまでは行いません。なので、ブラウザの戻る・進むボタンを押したときにURLは切り替わるけど、ページが遷移しない状態になります。そこで戻る・進むが押されたことをwindow.onpopstateイベントで検知して、現在のページへ画面遷移する(location.href = location.href)ようにしています。
もっと他に良い書き方あるのかもと悩んだのですが、bootcampの他のファイルでもlocation.href = location.hrefを使っているところがあったので、この書き方を選択しました。

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pushStateはページの読み込みまでは行いません。なので、ブラウザの戻る・進むボタンを押したときにURLは切り替わるけど、ページが遷移しない状態になります。

戻る・進むが押されたことをwindow.onpopstateイベントで検知して、現在のページへ画面遷移する(location.href = location.href)ようにしています。

なるほどです〜👀 勉強になります🙏

# frozen_string_literal: true

require 'application_system_test_case'
require 'minitest/mock'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

こちらってなぜrequireしているんでしょうか??👀

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

元々products_test.rbにあったテストを別ファイルに分けたときに、そのままコピーしていたのを消し忘れてました💦
削除しました!

f24dcb6

@hogucc hogucc force-pushed the make-the-submissions-lists-spa branch from b129b7b to 5118755 Compare February 9, 2021 14:06
@hogucc
Copy link
Contributor Author

hogucc commented Feb 10, 2021

@Chi-rr
レビューいただきありがとうございます!
ご指摘点を修正しましたので、お手すきの際にご確認お願いいたします。

またご指摘以外で以下の点を修正しました。こちらも合わせてご確認お願いいたします🙏

Copy link
Member

@Chi-rr Chi-rr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@hogucc
修正ありがとうございます!
追加分合わせて確認いたしました!LGTMです🙆‍♀️

@hogucc
Copy link
Contributor Author

hogucc commented Feb 10, 2021

@Chi-rr
ご確認ありがとうございました✨

@machida
ページャーを作り変えたので以前のページャーの見た目と同じにするために、_pagination.sassとproducts.vueにスタイルの定義を追加したのですが、定義場所や内容に問題がないかご確認いただけないでしょうか。
CSSの追加になるので、machidaさんに確認いただいたほうが良いと思い、ご連絡しました。

※ 以下のPRでも同様の修正をしています。

@hogucc hogucc requested a review from machida February 10, 2021 08:08
@sano11o1
Copy link
Contributor

@machida @hogucc
hogucc さんの説明にいくつか補足させていただきますー
まず、デザインに影響のあるファイルは2つあります。
1つ目は、_pagination.sassです。
_pagination.sassは1月ほど前、雑談部屋で私が町田さんの指示を受けながら修正したファイルになります。
町田さんのアドバイス通りに記述したので間違いはないと思われますが、念のため確認していただけると助かります。

2つ目は、products.vue(もしくはnotifications.vue, reports.vue)です。
ここの<style>内に仮のデザインを入れています。
https://github.com/fjordllc/bootcamp/blob/5118755bbd1f9d7c619a50fd5c51830bf23f388a/app/javascript/products.vue#L174-L182
.pager-disableは無効なページャーのボタンにつけるクラスになります。
https://github.com/fjordllc/bootcamp/blob/5118755bbd1f9d7c619a50fd5c51830bf23f388a/app/javascript/products.vue#L16-L19
kaminariのページャーのボタンに寄せるためには、クリックできないボタンは表示させないようにしたかったので、この仮デザインを作成しました。
outline: none; ですが、これがないとページャーのボタンをクリックした後に、ボタンに青い枠が表示されるため、記述しました。

また私とuniversatoさんのPRでは、is-top, is-bottomクラスを外しています。

.container(v-if="loaded && notifications.length > 0")
.pagination
nav.container
pager-top(
v-if="totalPages > 1"

雑談部屋で指示を受けながらファイルを修正した際に、is-top, is-bottomは共通化させたいので、外しておいてくださいと言われた記憶があります。(PRの説明にすぐに書いておくべきでした...)
以上補足になりますー
お手隙の際に確認していただけると助かります!

@hogucc
Copy link
Contributor Author

hogucc commented Feb 11, 2021

@MashioSano
情報共有ありがとうございます!
is-top, is-bottomクラスは後ほど私も外します!

@hogucc hogucc force-pushed the make-the-submissions-lists-spa branch from 5118755 to beba624 Compare February 11, 2021 03:14
@hogucc
Copy link
Contributor Author

hogucc commented Feb 12, 2021

@machida
ページャーを作り変えたので以前のページャーの見た目と同じにするために、_pagination.sassとproducts.vueにスタイルの定義を追加したのですが、定義場所や内容に問題がないかご確認いただけないでしょうか。
CSSの追加になるので、machidaさんに確認いただいたほうが良いと思い、ご連絡しました。

@machida
リマインドさせていただきます🙏
上記のコメントでCSSのレビューを依頼いたしましたので、お手すきの際にご確認いただければと思います🙇‍♀️
補足として、デザインに影響あるファイルについてSanoさんがこのPR上でmachidaさん宛にコメントをくださっているのでそちらも併せてご確認いただけると助かります!

@machida
Copy link
Member

machida commented Feb 12, 2021

@hogucc ご連絡ありがとうございますー!確認します🙋‍♂️

@machida
Copy link
Member

machida commented Feb 18, 2021

@hogucc @komagata

こちら確認しました!
LGTMですー

今回、ページャーのスタイルをいじってて、不要なリンクを非表示から、disabled な見た目にして、クリックができない、にしたほうが、ページャーのレイアウトの変更が発生しなくて使い心地がよくなるので(特にSPAの場合)、そのようにしました。このPRの提出物一覧ではそのようにしたのですが、別のページでは従来の表示になるので、それは別PRで動作を統一していきたいと思います。

@hogucc
Copy link
Contributor Author

hogucc commented Feb 18, 2021

@machida

今回、ページャーのスタイルをいじってて、不要なリンクを非表示から、disabled な見た目にして、クリックができない、にしたほうが、ページャーのレイアウトの変更が発生しなくて使い心地がよくなるので(特にSPAの場合)、そのようにしました。このPRの提出物一覧ではそのようにしたのですが、別のページでは従来の表示になるので、それは別PRで動作を統一していきたいと思います。

承知しました!ご対応ありがとうございます!

@komagata
お手すきの際にコードレビューをお願いいたします🙇‍♀️

@hogucc hogucc requested review from komagata and removed request for machida February 18, 2021 09:04
@machida
Copy link
Member

machida commented Feb 22, 2021

@hogucc @komagata masterをrebaseして、ページャーのズレが解消されているのを確認しました!こちらでマージお願いします🙏

image

image

image

image

@machida machida force-pushed the make-the-submissions-lists-spa branch from e394b36 to c19b20c Compare February 22, 2021 06:08
@hogucc
Copy link
Contributor Author

hogucc commented Feb 22, 2021

@machida
ご対応ありがとうございます✨

@komagata
こちらコードレビューをお願いいたします🙇‍♀️

@@ -0,0 +1,8 @@
# frozen_string_literal: true

class API::Products::NotRespondedController < ApplicationController
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://github.com/fjordllc/bootcamp/blob/master/test/integration/api/practices_test.rb

こういう感じのAPIのテストがあるといいかもです。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@komagata
以下のコミットでテストを追加しました!ご確認お願いいたします🙏
227c93f

また、テストを追加した際に、APIのコントローラーがAPI::BaseControllerを継承していないことに気づいて修正しました。
55e860e

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

また、テストを追加した際に、APIのコントローラーがAPI::BaseControllerを継承していないことに気づいて修正しました。

ありがとうございます!

@hogucc hogucc force-pushed the make-the-submissions-lists-spa branch from a618959 to 227c93f Compare February 27, 2021 13:30
@hogucc hogucc requested a review from komagata February 27, 2021 14:04
Copy link
Member

@komagata komagata left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

確認しました、OKですー🙆‍♂️

APIのテストいい感じです、ありがとうございます〜

@komagata komagata merged commit bc0d7dc into master Mar 1, 2021
@komagata komagata deleted the make-the-submissions-lists-spa branch March 1, 2021 15:04
@github-actions github-actions bot mentioned this pull request Mar 1, 2021
14 tasks
class API::Products::NotRespondedController < API::BaseController
before_action :require_staff_login
def index
@products = Product.not_responded_products.list.page(params[:page])
Copy link
Contributor

@JunichiIto JunichiIto Mar 2, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@hogucc @komagata
#2398 の調査をしていて気づいたんですが、今の実装だとたぶん提出日順ではなくcreated_at順に並びますね。(詳しく見てませんがVue.js側でソートとかしてないですよね?)

https://github.com/fjordllc/bootcamp/blob/master/app/models/product.rb#L69

https://github.com/fjordllc/bootcamp/blob/master/app/models/product.rb#L38

そもそも論になりますが、データを絞り込むscope(つまりwhere)と並び順を指定するscope(つまりorder)は別々にしておかないと、ユースケースが限定されて再利用性が低くなります。
なので、今のscopeの設計から見直した方がいいように思いました。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@JunichiIto
cc: @komagata
Vue.js側でのソートは特に行っていないので、created_at順に並びますね💦
scopeも再検討するのがよさそうです。

そもそも「自分の担当」タブができたいまタブの構成自体が運用と合っていない気がするので、そこから考え直したほうが良さそうと思いました。
メンターが割り振られてない提出物をわかりやすくしてほしい · Issue #2005

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants