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にし、月ごとの表示にして、ページャーを付けた #2886

Merged
merged 25 commits into from
Jul 14, 2021

Conversation

obregonia1
Copy link
Contributor

@obregonia1 obregonia1 commented Jun 26, 2021

ref: #2840 , #2872

概要

ニコニコカレンダーをvue.js化しました。
以前までは直近30日の日報を表示させていましたが、今回の変更でカレンダーを月ごとに表示し、ページャーを付けて月を移動できるようにしました。
なので、今回の変更でカレンダー上部にカレンダーの年月の表示とページャー< , >を追加し、カレンダーの各マスに表示していた月日表示05/12を日付のみの表示12に変更しています。

変更前
image

変更後
image

@obregonia1 obregonia1 self-assigned this Jun 26, 2021
@obregonia1 obregonia1 requested a review from kasai441 June 26, 2021 06:20
@obregonia1
Copy link
Contributor Author

@kasai441
こちらレビューよろしくお願いしますー🙏

@kasai441
Copy link
Contributor

@obregonia1
了解しましたー

@obregonia1
Copy link
Contributor Author

@kasai441
Lintを通し忘れていたので少し修正しています🙏

Copy link
Contributor

@kasai441 kasai441 left a comment

Choose a reason for hiding this comment

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

@obregonia1

レビュー完了しました。カレンダーちゃんと動くのですごいですね!問題ないかと思いますー

細かい点ばかりコメントしています。Vue.jsもJSも不明な点が多く、間違った指摘となっているかもしれませんが、感想レベルでご覧ください。

  • コメント以外で気になった点

カレンダーをめくってリンクから日報に遷移した後、ブラウザバックすると最新の月に戻ってしまうのは、ユーザビリティが低そうです。が、少し調べた感じでは、これを直すのは難しそうなので、今後の拡張案として言及するだけに留めておきます。

@@ -40,15 +40,6 @@ def url
user_url(self)
end

def niconico_calendar
reports_date_and_emotion = self.reports_date_and_emotion(CALENDAR_TERM)
Copy link
Contributor

Choose a reason for hiding this comment

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

CALENDAR_TERM は他に使用していないので、ファイル上部の宣言も削除していいと思いますー

Copy link
Contributor Author

Choose a reason for hiding this comment

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

見落としてました。ありがとうございます!

last_wday = reports_date_and_emotion.first[:date].wday
blanks = Array.new(last_wday) { { report: nil, date: nil, emotion: nil } }

[*blanks, *reports_date_and_emotion].each_slice(DAYS_IN_WEEK)
Copy link
Contributor

Choose a reason for hiding this comment

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

同じくDAYS_IN_WEEKの宣言も

Copy link
Contributor Author

Choose a reason for hiding this comment

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

こちらも見落としてましたー。

let week = []
let weekIndex = 1
let weekDay = 0
this.calendarSquares.forEach(function (date, i, ary) {
Copy link
Contributor

Choose a reason for hiding this comment

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

これも参考までですが、mapやforEach内の変数は hoges.forEach((hoge) => {})のように複数形と単数系が対応しているほうが読みやすいかもしれません。プロジェクト内のvueをgrepしましたがそういう書き方が多いようです。

Copy link
Contributor Author

Choose a reason for hiding this comment

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

確かにそうですね。変更しました。

if (this.firstWday > 0) {
for (let blank = 0; blank < this.firstWday; blank++) {
calendar.push(null)
}
Copy link
Contributor

Choose a reason for hiding this comment

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

const calendar = Array(this.firstWday).fill(null)
Rubyではこんな感じの書き方をすると思いますが、JSではfor文を使った方がいいみたいな議論もあるようなので、参考まで。bootcampプロジェクト内でもArrayで初期化しているコードはvueでは無いみたいです。

Copy link
Contributor Author

Choose a reason for hiding this comment

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

なるほど、勉強になります:memo:

for (let date = 1; date <= this.lastDate; date++) {
let result = null
if ((result = this.calendarReports.find(report =>
Number(report.reported_on.split('-')[2]) === date))) {
Copy link
Contributor

Choose a reason for hiding this comment

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

resultへの代入とif文を分けた方が読みやすいかもしれません

Copy link
Contributor Author

Choose a reason for hiding this comment

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

確かに読みにくいですね!resultの代入を分け、日報の日付を取得するメソッドを追加しました。

}
return calendar
},
calendarWeeksAry() {
Copy link
Contributor

Choose a reason for hiding this comment

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

細かいですが、Aryという文字がなくてもcalendarWeeksで配列であることがわかるように思いました。project内には変数にAryをつけているものが見つからなかったのと、複数形で命名した変数に配列格納するパターンが多かったので揃えた方がいいかもしれません。

Copy link
Contributor Author

Choose a reason for hiding this comment

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

確かにそうですね〜。変更しました。

week.push(date)
weekDay++
if (week.length === 7 || i === ary.length - 1) {
const weekObj = {weekIndex: weekIndex, week: week}
Copy link
Contributor

Choose a reason for hiding this comment

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

weekIndexid
weekvalue
が見やすいと個人的には思います🤔

weekObjはすぐに配列に格納するので、以下でどうでしょうか

weeks.push({id: id, value: value})

const lastDay = new Date(this.calendarYear, this.calendarMonth, 0)
return lastDay.getDate()
},
calendarSquares() {
Copy link
Contributor

Choose a reason for hiding this comment

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

変数名は好みですが、calendarDatesなどが明示的で良いかもしれません🤔

Copy link
Contributor Author

@obregonia1 obregonia1 Jul 4, 2021

Choose a reason for hiding this comment

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

nullを含めた配列だったのでカレンダーのマスの意味合いでsquareにしてたんですが、dateの方がわかりやすそうですね。

)
.niconico-calendar__day-label {{ date.date }}
.niconico-calendar__day-value
img.niconico-calendar__emotion-image(
Copy link
Contributor

Choose a reason for hiding this comment

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

ここでdate.emotionがnullの場合エラーを吐いているようです。あえてエラーを出させないのであれば以下のコードが必要かもしれませんが、放置してもいいような気もします🤔

v-if='date.emotion'

sample: ユーザー'hajime'の最初の日報

Copy link
Contributor Author

Choose a reason for hiding this comment

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

今の仕様だとemotionがnullの日報は作れないので特に対応しなくてもいいかなと思いました。

h2.card-header__title
| ニコニコカレンダー
.card-body(v-if='!loaded')
| ロード中
Copy link
Contributor

Choose a reason for hiding this comment

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

日報がないユーザーの場合、ずっとロード中になるので、条件を分岐して、「日報がありません」のようなメッセージを出すといいかと思います。

Copy link
Contributor Author

Choose a reason for hiding this comment

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

これも気付いていませんでした。
日報がない場合の文言を表示するようにしました。

@kasai441
Copy link
Contributor

kasai441 commented Jul 1, 2021

すみません、一点追記です。
テストのlogin_userはvisit_with_authに差し替えとなっています。
mainでは既に反映されているのでプルリクでも書き換えておいた方が良いようです。

@obregonia1
Copy link
Contributor Author

@kasai441

カレンダーをめくってリンクから日報に遷移した後、ブラウザバックすると最新の月に戻ってしまう

この仕様も未確認でした。これは特に要件にはなかったので新たにIssueを立てておこうと思います!
指摘された点修正したので再度レビューよろしくお願いします🙇‍♂️

@obregonia1 obregonia1 requested a review from kasai441 July 4, 2021 09:16
Copy link
Contributor

@kasai441 kasai441 left a comment

Choose a reason for hiding this comment

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

変更点確認、動作確認しましたー、OKですー
$nextTickだと、可読性もよくていいですね!

@obregonia1
Copy link
Contributor Author

@kasai441
ありがとうございます!
approveされていないみたいなのでよろしくお願いします🙇‍♂️

@komagata
こちらレビューよろしくお願いします🙇‍♂️

@obregonia1 obregonia1 requested a review from komagata July 5, 2021 01:19
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.

conflictの修正お願いします〜

@obregonia1 obregonia1 requested a review from machida July 5, 2021 23:41
@obregonia1
Copy link
Contributor Author

@komagata
conflict解消したのですが、町田さんにデザイン依頼し忘れていたので先にデザインをお願いしようと思います。

@machida
app/javascript/niconico_calendar.vueのデザインよろしくお願いします🙇‍♂️

Comment on lines 11 to 20
.calendar__head
.calendar__head--previous(
v-show='!oldestMonth()'
@click='previousMonth'
) <
.calendar__head--year--month {{ calendarYear }}年{{ calendarMonth }}月
.calendar__head--next(
v-show='!newestMonth()'
@click='nextMonth'
) >
Copy link
Contributor Author

Choose a reason for hiding this comment

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

@machida
デザイン必要な部分です。

@obregonia1 obregonia1 removed the request for review from machida July 7, 2021 05:13
@machida
Copy link
Member

machida commented Jul 13, 2021

@komagata @obregonia1 デザイン入れましたー

@obregonia1
Copy link
Contributor Author

@machida
ありがとうございます!

@komagata
こちらレビューよろしくお願いします!

@obregonia1 obregonia1 requested a review from komagata July 13, 2021 09:19
import NiconicoCalendar from './niconico_calendar'

document.addEventListener('DOMContentLoaded', () => {
const niconicoCalendar = document.getElementById('js-niconico_calendar')
Copy link
Member

Choose a reason for hiding this comment

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

15行目とselectorが2回書かれているので変数に入れて共通化すると良さそうです〜

Comment on lines 211 to 214

<style scoped>

</style>
Copy link
Member

Choose a reason for hiding this comment

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

不要なら削除しちゃってください〜

@obregonia1
Copy link
Contributor Author

@komagata
指摘された点修正したので再度確認お願いしますー。

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ですー🙆‍♂️

@komagata komagata merged commit 498f7cb into main Jul 14, 2021
@komagata komagata deleted the feature/display_caleandar_per_month branch July 14, 2021 14:19
@github-actions github-actions bot mentioned this pull request Jul 14, 2021
19 tasks
@obregonia1
Copy link
Contributor Author

@komagata
ありがとうございます!
これでチーム開発で割り振られたIssue全て完了になりました🙌
とても勉強になりました〜✍️

@komagata
Copy link
Member

@obregonia1 おおお〜、おめでとうございます!お疲れ様でした〜!!

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.

4 participants