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

卒業証書のPDFファイルをアップロードできる機能を追加 #8190

Open
wants to merge 13 commits into
base: main
Choose a base branch
from

Conversation

hagiya0121
Copy link
Contributor

@hagiya0121 hagiya0121 commented Nov 13, 2024

Issue

概要

管理者のユーザー登録情報変更画面で卒業証書のPDFファイルをアップロード及び削除できる機能を追加しました。

変更確認方法

  1. feature/add-diploma-pdf-uploadをローカルに取り込む
    1. git fetch origin pull/8190/head:feature/add-diploma-pdf-upload
    2. git checkout feature/add-diploma-pdf-upload
  2. foreman start -f Procfile.dev でローカルサーバーを立ち上げ
  3. komagata(管理者)でログイン
  4. ユーザー登録情報変更画面にアクセス
  5. 卒業証書PDF項目でbootcamp/test/fixtures/files/users/diplomas/diploma.pdf
    をアップロードして、ページ下部の更新するボタンを押す
  6. ユーザー登録情報変更画面にアクセス
  7. 卒業証書PDF項目にdiploma.pdfと表示され、PDFを確認を押してPDFが表示されることを確認する
  8. 卒業証書PDF項目で削除ボタンを押して、ページ下部の更新するボタンを押す
  9. ユーザー登録情報変更画面にアクセス
  10. 卒業証書PDF項目でdiploma.pdfという表示が消えていることを確認

Screenshot

変更前

image

変更後

image

@hagiya0121 hagiya0121 requested a review from machida November 14, 2024 01:42
@hagiya0121
Copy link
Contributor Author

@machida
お疲れ様です。デザインをお願いしたいです🙏

@machida
Copy link
Member

machida commented Nov 14, 2024

@hagiya0121 了解です!!

@machida
Copy link
Member

machida commented Nov 18, 2024

@hagiya0121 お待たせしました!!デザイン入れましたのでご確認お願いします。OKでしたらレビューに進めてくださいー

@machida machida removed their assignment Nov 18, 2024
@hagiya0121
Copy link
Contributor Author

@ham-cap
お疲れ様です。
こちらのPRのレビューをお願いしたいです🙏
ご都合が悪いときは遠慮なくおっしゃってください🙇

@hagiya0121 hagiya0121 requested a review from ham-cap November 23, 2024 10:25
@hagiya0121 hagiya0121 marked this pull request as ready for review November 23, 2024 22:45
@ham-cap
Copy link
Contributor

ham-cap commented Nov 28, 2024

@hagiya0121
返信が大変遅くなってしまい申し訳ありません🙇‍♂️
先日チーム開発のプラクティスを修了してしまったところなので、別の方にご依頼いただけますでしょうか🙏
恐縮ですがよろしくお願いいたします🙏

@hagiya0121
Copy link
Contributor Author

hagiya0121 commented Nov 28, 2024

@ham-cap
分かりました、ご連絡いただきありがとうございます🙇

@hagiya0121 hagiya0121 requested review from mousu-a and removed request for ham-cap November 28, 2024 07:38
@hagiya0121
Copy link
Contributor Author

@mousu-a
お疲れ様です。
こちらのPRのレビューをお願いしたいです🙏
ご都合が悪いときは遠慮なくおっしゃってください🙇

@mousu-a
Copy link
Contributor

mousu-a commented Nov 28, 2024

@hagiya0121
レビュー依頼ありがとうございます!
ぜひ引き受けさせていただきます〜😄
一週間ほどかかりそうなスケジュール感です🙇‍♂️

Copy link
Contributor

@mousu-a mousu-a left a comment

Choose a reason for hiding this comment

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

@hagiya0121
実装お疲れ様です🍵
レビューお待たせいたしました🙏
いくつかコメントしているのでご確認いただければと思います〜


以下 "変更確認方法"について気になったところのフィードバックになります!
5番 のpdfのパスについてですが、bootcamp/test/fixtures/files/users/diplomas/diploma.pdf の方がいいかもです。

あと、「アップロードして更新する」とありますが、「アップロードして、ページ下部の"更新する"ボタンを押す」 とかの方が間違いがないと思います。8番も同様です!
一瞬「画面の更新かな?」と思ってしまいました😅

const removeDiplomaFlag = document.getElementById('remove-diploma-flag')

removeDiplomaButton.addEventListener('click', () => {
diplomaFileLink && (diplomaFileLink.style.display = 'none')
Copy link
Contributor

@mousu-a mousu-a Dec 2, 2024

Choose a reason for hiding this comment

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

すみません、ここの説明ほしいです🙏
なぜこのコードが必要なのかがわからない感じです。
diplomaFileLink && (diplomaFileLink.style.display = 'none')

Copy link
Contributor Author

@hagiya0121 hagiya0121 Dec 3, 2024

Choose a reason for hiding this comment

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

diplomaFileLink && (diplomaFileLink.style.display = 'none')の動作としてはファイルアップロード後(更新するを押した後)のリンクを非表示にしています。見た目はリンクっぽくないんですけど画像の赤枠全体がリンクです。
52e890b704da06768146c252c390f26657317389149c9040ab3448a4598540a3
これがないとファイルアップロード後に削除を押しても画像のようにリンクが残ったままになってしまいます。
image

Copy link
Contributor

@mousu-a mousu-a Dec 3, 2024

Choose a reason for hiding this comment

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

diplomaFileLinkが存在する場合のみ右辺が発火するわけですね。
勉強になります🙏

その場合下記のような形ではどうでしょうか?

if (diplomaFileLink) diplomaFileLink.style.display = 'none'

Copy link
Contributor Author

Choose a reason for hiding this comment

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

町田さんがデザインを入れた際に変更してくれたみたいです🤔18c14ab2e02b8526752

- if @user.diploma_file.attached?
= link_to @user.diploma_file.filename, url_for(@user.diploma_file), class: 'a-text-input', id: 'diploma-file-link'
- display = @user.diploma_file.attached? ? 'display: none' : 'display: block'
= f.file_field :diploma_file, class: 'a-text-input', id: 'diploma-upload-field', style: display
Copy link
Contributor

@mousu-a mousu-a Dec 2, 2024

Choose a reason for hiding this comment

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

display → display_styleでもいいかもです。

Copy link
Contributor Author

Choose a reason for hiding this comment

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

そちらの名前の方がわかりやすいですね。変更しました!
fd1d8db

- display = @user.diploma_file.attached? ? 'display: none' : 'display: block'
= f.file_field :diploma_file, class: 'a-text-input', id: 'diploma-upload-field', style: display
button type='button' id='remove-diploma-button' class='a-button is-md is-secondary' 削除

Copy link
Contributor

@mousu-a mousu-a Dec 2, 2024

Choose a reason for hiding this comment

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

button_tagが使えそうです!

Copy link
Contributor Author

Choose a reason for hiding this comment

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

変更しました
3aeb25a

Copy link
Contributor

Choose a reason for hiding this comment

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

ファイルがアップロードされていない状態で削除ボタンがあるのはおかしい気がします🤔

@@ -111,6 +111,7 @@ ja:
other_editor: その他のエディタ
hide_mentor_profile: プロフィール非公開
invoice_payment: 「請求書払い」
diploma_file: 卒業証書PDF
Copy link
Contributor

@mousu-a mousu-a Dec 3, 2024

Choose a reason for hiding this comment

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

提案です!
"卒業証書(PDF)"とかでもいいかもです。

Copy link
Contributor Author

Choose a reason for hiding this comment

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

そちらの方がいいと思います。変更しました
b2ff53d

@@ -85,3 +85,42 @@ document.addEventListener('DOMContentLoaded', () => {
}
initializeFileInput(document)
})

Copy link
Contributor

Choose a reason for hiding this comment

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

今回実装する部分を関数にして↑の DOMContentLoadedに入れてはどうでしょうか?

あと画面の読み込み時に実行していますが、該当する画面でない場合のreturnがなさそうです。

Copy link
Contributor Author

Choose a reason for hiding this comment

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

変更しました
6b5d653

@@ -104,6 +104,28 @@
.form-item-block__item
= render 'users/form/graduate', f: f

.form-item
// 卒業証書
Copy link
Contributor

@mousu-a mousu-a Dec 3, 2024

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.

削除しました
fd1d8db

@@ -85,3 +85,42 @@ document.addEventListener('DOMContentLoaded', () => {
}
initializeFileInput(document)
})

document.addEventListener('DOMContentLoaded', () => {
const removePdfButton = document.getElementById('js-remove-pdf-button')
Copy link
Contributor

@mousu-a mousu-a Dec 3, 2024

Choose a reason for hiding this comment

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

この辺りの変数名も、先のコメントで触れたように関数で括れば変数名にpdfってつけなくて良さそうです。

Copy link
Contributor Author

@hagiya0121 hagiya0121 Dec 4, 2024

Choose a reason for hiding this comment

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

変数名の変更とリファクタリングも一緒に行いました。
6b5d653

@hagiya0121
Copy link
Contributor Author

@mousu-a
お疲れ様です!
指摘された点の修正と動作確認方法も確かにわかりづらかったので修正しました🙏
確認お願いします🙇

Copy link
Contributor

@mousu-a mousu-a left a comment

Choose a reason for hiding this comment

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

@hagiya0121
レビューお待たせいたしました🙏
いくつかコメントしているのでご確認いただければと思います〜

- display = @user.diploma_file.attached? ? 'display: none' : 'display: block'
= f.file_field :diploma_file, class: 'a-text-input', id: 'diploma-upload-field', style: display
button type='button' id='remove-diploma-button' class='a-button is-md is-secondary' 削除

Copy link
Contributor

Choose a reason for hiding this comment

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

ファイルがアップロードされていない状態で削除ボタンがあるのはおかしい気がします🤔

@@ -75,6 +75,45 @@ function extractField(elements) {
}
}

function initializePdfUploadField() {
Copy link
Contributor

@mousu-a mousu-a Dec 6, 2024

Choose a reason for hiding this comment

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

提案です!
initializeDiplomaUploadFieldの方がいいかも?

const removeButton = document.getElementById('js-remove-pdf-button')
const fileLink = document.getElementById('js-pdf-file-link')
const removeFlag = document.getElementById('js-remove-pdf-flag')
const fileNameDisplay = document.getElementById('js-pdf-name')
Copy link
Contributor

@mousu-a mousu-a Dec 6, 2024

Choose a reason for hiding this comment

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

提案です!
fileNameDisplay → fileName でも良さそうです🙆

const fileNameDisplay = document.getElementById('js-pdf-name')
const fileInput = uploadField.querySelector('input[type="file"]')

const updateFileNameDisplay = (name = '') => {
Copy link
Contributor

@mousu-a mousu-a Dec 6, 2024

Choose a reason for hiding this comment

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

提案です!
updateDisplayedFileName とかではどうでしょうか?

}

removeButton.addEventListener('click', () => {
if (fileLink) fileLink.style.display = 'none'
Copy link
Contributor

Choose a reason for hiding this comment

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

ファイルがアップロードされている時のみ削除ボタンが表示されていれば、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.

fileLinkはHTMLが生成されない場合があるのでエラーになるようです。

const fileInput = uploadField.querySelector('input[type="file"]')

const updateFileNameDisplay = (name = '') => {
if (name) {
Copy link
Contributor

@mousu-a mousu-a Dec 7, 2024

Choose a reason for hiding this comment

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

こんな感じで書けそうです🙆

fileNameDisplay.textContent = name
const displayedStatus = name ? 'block' : 'none'
fileNameDisplay.style.display = displayedStatus

Copy link
Contributor Author

@hagiya0121 hagiya0121 Dec 8, 2024

Choose a reason for hiding this comment

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

指摘された点とfileInputのイベントリスナーのロジックもリファクタリングしました。
97b19ed

@hagiya0121
Copy link
Contributor Author

@mousu-a
お疲れ様です!指摘された点を修正したので確認お願いします🙏

Copy link
Contributor

@mousu-a mousu-a left a comment

Choose a reason for hiding this comment

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

@hagiya0121
変更ありがとうございます!
気になる点少しだけコメントさせていただきましたのでご確認をお願いいたします🙇‍♂️
他は良さそうです👌

uploadField.style.display = fileLink ? 'none' : 'flex'
removeButton.style.display = fileLink ? 'block' : 'none'

const updateDisplayedFileName = (name = '') => {
Copy link
Contributor

Choose a reason for hiding this comment

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

細かい点ですが、removeButton.style.display = displayedStatusを関数の中に入れるのならばupdateDisplayedFileNameは命名を変更したほうが良さそうに思いました。

"表示状態をアップデートする"ということでupdateDisplayStatusupdateDisplayState とかどうでしょうか。StateはReactにもある概念なので相手に意味が伝わりやすいかも?

もっと良いものがあればそちらにしていただいて構いません🙇‍♂️

Copy link
Contributor Author

Choose a reason for hiding this comment

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

updateDisplayStateがわかりやすそうなのでそっちに変更しました。

const fileName = document.getElementById('js-pdf-name')
const fileInput = uploadField.querySelector('input[type="file"]')

uploadField.style.display = fileLink ? 'none' : 'flex'
Copy link
Contributor

@mousu-a mousu-a Dec 10, 2024

Choose a reason for hiding this comment

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

fileLinkをよくif文に使われているので、if文の条件として分かりやすい名前をつけてあげると可読性があがるかもです。
こんな感じでどうでしょうか。const isFileUploaded = fileLink

Copy link
Contributor Author

@hagiya0121 hagiya0121 Dec 10, 2024

Choose a reason for hiding this comment

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

必要あるか微妙なんですけどisFileUploadedは名前的に真偽値を期待させるので二重否定して真偽値になるようにしました。

@hagiya0121
Copy link
Contributor Author

@mousu-a
修正しました!確認お願いします🙇

Copy link
Contributor

@mousu-a mousu-a left a comment

Choose a reason for hiding this comment

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

#8190 (comment)

isFileUploadedは名前的に真偽値を期待させる

すみません、後で気づきました🙏
個人的には、fileLink はそのままで変数名をfileUploaded とかにするのが丸いように思います。
(たしかrubocopの方で二重否定はOUTとされていたので、個人的に二重否定に対して若干否定的な気持ちがあります😅)

ただ修正必須ではないのでApproveとさせていただきます〜。
変更ありがとうございました!

@hagiya0121
Copy link
Contributor Author

@mousu-a
何度もレビューありがとうございました🙇デフォルトのrubocopだと二重否定ダメなのは知りませんでした💡

@hagiya0121
Copy link
Contributor Author

@komagata
メンバーのレビューが完了したので確認お願いします🙇

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