-
Notifications
You must be signed in to change notification settings - Fork 0
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
/projects/:projectId/members #58
Conversation
tesso57
commented
Jan 4, 2023
- close /project/:project_id/member #38
- 新規Project作成の メンバー追加の部分を作成しました。
多分Figmaの時点でちょっとおかしかったと思うんですけど、このページってprojectの修正ではなくて新規作成のときのメンバー入力画面ですよね?(修正は他の情報と一緒に1つの画面でできるようになっていそう) |
あとFigmaだとそれぞれのメンバーの在籍期間を入力するフォームがない気がするのでどこかに入れたいですね |
そういえば在籍期間フォームのデザインもなんとなくで作りました |
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.
細かいところ見れてないですが一旦
確認お願いします:pray:
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.
1個見逃してました
再度レビューお願いします。 |
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.
いくつかお願いします:pray:
Generic にすると、複雑さが増して無理やり共通化しているから良くないかな
そこまで無理やりな共通化だとは感じなかったので大丈夫だと思います:blob_thumbs_up:
再レビューお願いします。:pray: |
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.
ありがとうございます、思ってたより複雑な感じになってしまいましたね:thonk_sweat:
一度、grid で実装したんですが、表示幅が足りないと要素が飛び出てしまいやめました。今の実装だと、widthを30%しているので微妙に感じています。
は一旦このままで大丈夫だと思います:pray:
最後に1箇所だけお願いしたいです
src/components/UI/BaseSelect.vue
Outdated
const isEquals = (a: T, b: T) => { | ||
if (value.value !== null && typeof value.value === 'object') { | ||
return JSON.stringify(a) === JSON.stringify(b) | ||
} else { | ||
return a === b | ||
} | ||
} |
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.
今回実装した部分では options
からのみ modelValue
が生成されてるので問題なさそうなんですが、stringify でオブジェクトを比較する方法は プロパティ の順番を変えたりするだけで等価でなくなってしまうので、そこは留意したほうが良さそうです
(特に util として切り出す場合)
ref: Playground
対策としては
- オブジェクトを再帰的に等しいか比較する
正直めんどくさいので https://github.com/NickGard/tiny-isequal とかのライブラリに頼ったほうがいいと思います (このライブラリがベストかはわからないです) - オブジェクトの特定の比較可能なプロパティを使って比較するようにする
この場合は optional な Props としてcompareWith
とかby
とかのkeyof T
or(T) => any
or(T, T) => boolean
(もしくはこれらの和集合) をとって、指定されていない場合は object の id、指定されている場合はこれらから算出される値をつかって比較することになります
https://headlessui.com/react/listbox#binding-objects-as-values とかはこの方式でした
とかがありそうです (個人的には 2 のほうが好みです)
一応 BaseSelect
は今回いじらないことにして、src/components/UI/FormProjectDuration.vue
で BaseSelect には一意な key のみを渡して、key からオブジェクトを算出するようにする方針もあります
src/pages/ProjectNew.vue
Outdated
:user="member" | ||
:class="$style.projectMember" | ||
@delete="handleDelete" | ||
@update="member.duration = $event" |
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.
意図してたら申し訳ないのですが、ここ下のイベントを update:modelValue
で発行するようにしたら @update
を丸々消せませんか?
dateType === 'sinceSemester' | ||
? numValue | ||
: props.modelValue.since.semester | ||
.map((_, i) => [ |
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
して .flat
するのは .flatMap
でかけます 🤟
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap
src/components/UI/BaseSelect.vue
Outdated
const isEquals = (a: T, b: T) => { | ||
if (value.value !== null && typeof value.value === 'object') { | ||
return JSON.stringify(a) === JSON.stringify(b) | ||
} else { | ||
return a === b | ||
} | ||
} |
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.
今回実装した部分では options
からのみ modelValue
が生成されてるので問題なさそうなんですが、stringify でオブジェクトを比較する方法は プロパティ の順番を変えたりするだけで等価でなくなってしまうので、そこは留意したほうが良さそうです
(特に util として切り出す場合)
ref: Playground
対策としては
- オブジェクトを再帰的に等しいか比較する
正直めんどくさいので https://github.com/NickGard/tiny-isequal とかのライブラリに頼ったほうがいいと思います (このライブラリがベストかはわからないです) - オブジェクトの特定の比較可能なプロパティを使って比較するようにする
この場合は optional な Props としてcompareWith
とかby
とかのkeyof T
or(T) => any
or(T, T) => boolean
(もしくはこれらの和集合) をとって、指定されていない場合は object の id、指定されている場合はこれらから算出される値をつかって比較することになります
https://headlessui.com/react/listbox#binding-objects-as-values とかはこの方式でした
とかがありそうです (個人的には 2 のほうが好みです)
一応 BaseSelect
は今回いじらないことにして、src/components/UI/FormProjectDuration.vue
で BaseSelect には一意な key のみを渡して、key からオブジェクトを算出するようにする方針もあります
@SSlime-s レビューお願いしたいです:pray: |
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.
見た感じよさそうな気がするのでマージします
1年間ありがとうございました