-
Notifications
You must be signed in to change notification settings - Fork 71
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
Conversation
@kasai441 |
@obregonia1 |
@kasai441 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
レビュー完了しました。カレンダーちゃんと動くのですごいですね!問題ないかと思いますー
細かい点ばかりコメントしています。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) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
CALENDAR_TERM は他に使用していないので、ファイル上部の宣言も削除していいと思いますー
There was a problem hiding this comment.
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) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
同じくDAYS_IN_WEEKの宣言も
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
こちらも見落としてましたー。
app/javascript/niconico_calendar.vue
Outdated
let week = [] | ||
let weekIndex = 1 | ||
let weekDay = 0 | ||
this.calendarSquares.forEach(function (date, i, ary) { |
There was a problem hiding this comment.
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しましたがそういう書き方が多いようです。
There was a problem hiding this comment.
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) | ||
} |
There was a problem hiding this comment.
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では無いみたいです。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
なるほど、勉強になります:memo:
app/javascript/niconico_calendar.vue
Outdated
for (let date = 1; date <= this.lastDate; date++) { | ||
let result = null | ||
if ((result = this.calendarReports.find(report => | ||
Number(report.reported_on.split('-')[2]) === date))) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
resultへの代入とif文を分けた方が読みやすいかもしれません
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
確かに読みにくいですね!resultの代入を分け、日報の日付を取得するメソッドを追加しました。
app/javascript/niconico_calendar.vue
Outdated
} | ||
return calendar | ||
}, | ||
calendarWeeksAry() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
細かいですが、Aryという文字がなくてもcalendarWeeks
で配列であることがわかるように思いました。project内には変数にAryをつけているものが見つからなかったのと、複数形で命名した変数に配列格納するパターンが多かったので揃えた方がいいかもしれません。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
確かにそうですね〜。変更しました。
app/javascript/niconico_calendar.vue
Outdated
week.push(date) | ||
weekDay++ | ||
if (week.length === 7 || i === ary.length - 1) { | ||
const weekObj = {weekIndex: weekIndex, week: week} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
weekIndex
は id
week
は value
が見やすいと個人的には思います🤔
weekObjはすぐに配列に格納するので、以下でどうでしょうか
weeks.push({id: id, value: value})
app/javascript/niconico_calendar.vue
Outdated
const lastDay = new Date(this.calendarYear, this.calendarMonth, 0) | ||
return lastDay.getDate() | ||
}, | ||
calendarSquares() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
変数名は好みですが、calendarDates
などが明示的で良いかもしれません🤔
There was a problem hiding this comment.
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( |
There was a problem hiding this comment.
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'の最初の日報
There was a problem hiding this comment.
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') | ||
| ロード中 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
日報がないユーザーの場合、ずっとロード中になるので、条件を分岐して、「日報がありません」のようなメッセージを出すといいかと思います。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
これも気付いていませんでした。
日報がない場合の文言を表示するようにしました。
すみません、一点追記です。 |
この仕様も未確認でした。これは特に要件にはなかったので新たにIssueを立てておこうと思います! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
変更点確認、動作確認しましたー、OKですー
$nextTick
だと、可読性もよくていいですね!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
conflictの修正お願いします〜
app/javascript/niconico_calendar.vue
Outdated
.calendar__head | ||
.calendar__head--previous( | ||
v-show='!oldestMonth()' | ||
@click='previousMonth' | ||
) < | ||
.calendar__head--year--month {{ calendarYear }}年{{ calendarMonth }}月 | ||
.calendar__head--next( | ||
v-show='!newestMonth()' | ||
@click='nextMonth' | ||
) > |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@machida
デザイン必要な部分です。
@komagata @obregonia1 デザイン入れましたー |
app/javascript/niconico_calendar.js
Outdated
import NiconicoCalendar from './niconico_calendar' | ||
|
||
document.addEventListener('DOMContentLoaded', () => { | ||
const niconicoCalendar = document.getElementById('js-niconico_calendar') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
15行目とselectorが2回書かれているので変数に入れて共通化すると良さそうです〜
app/javascript/niconico_calendar.vue
Outdated
|
||
<style scoped> | ||
|
||
</style> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
不要なら削除しちゃってください〜
@komagata |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
確認しました、OKですー🙆♂️
@komagata |
@obregonia1 おおお〜、おめでとうございます!お疲れ様でした〜!! |
ref: #2840 , #2872
概要
ニコニコカレンダーをvue.js化しました。
以前までは直近30日の日報を表示させていましたが、今回の変更でカレンダーを月ごとに表示し、ページャーを付けて月を移動できるようにしました。
なので、今回の変更でカレンダー上部にカレンダーの年月の表示とページャー
<
,>
を追加し、カレンダーの各マスに表示していた月日表示05/12
を日付のみの表示12
に変更しています。変更前
変更後