fix: 編集で任意項目を空にできるようにする - #44
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
📝 WalkthroughWalkthroughOptional bottle fields now support clearing through explicit ChangesBottle field clearing
Estimated code review effort: 2 (Simple) | ~10 minutes Sequence Diagram(s)sequenceDiagram
actor Editor
participant EditBottleForm
participant BottleSchema
participant Prisma
Editor->>EditBottleForm: Clear optional fields and submit
EditBottleForm->>EditBottleForm: Convert empty values to null
EditBottleForm->>BottleSchema: Send PATCH payload
BottleSchema-->>EditBottleForm: Accept nullish optional fields
EditBottleForm->>Prisma: Update bottle fields with null
Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
ご指摘ありがとうございます。解決策 (b)(スコープに属する理由の記載)で対応します。
そのため解決策 (a)(別 PR へ分離)は取れません。型エラーはその原因(スキーマ変更)と不可分で、分離すると本ブランチ単体がコンパイル不能になります。挙動は変えておらず(作成は従来どおり空→ この理由は PR 本文の「Issue 要件外の対応」にも記載済みです。以上より、本 PR のスコープ内の変更として維持します。 |
- bottleSchema の任意項目を nullish 化(null 受理。作成の空→undefined→省略は不変) - 編集フォームは空欄を明示 null で送信し、region は「未選択」項目(センチネル→null)でクリア可能に - 作成フォームの subRegion は nullish 化に伴う value の型安全化(挙動不変) - PATCH で null が updateMany の data に渡り値が消える回帰テストを追加
25f1090 to
d9280be
Compare
関連 issue
resolve #43
やったこと
概要
編集で任意項目を空にしても既存値を消せなかった問題を、「空欄を明示
nullとして end-to-end で運ぶ」ことで修正した。原因は「空欄→undefined→JSON.stringifyでキー欠落→prisma.updateは欠けたキーを更新しない」。変更点
src/lib/schemas/bottle.ts):任意項目(region・subRegion・age・caskType・note)を.optional()→.nullish()(nullを受理)。作成の「空→undefined→省略」挙動は不変(nullを追加で許すだけ)edit-bottle-form.tsx):nullに正規化して送信(undefinedだと JSON から落ちて消せないため)regionに「未選択」項目を追加してクリア可能に。Radix は空文字SelectItemを禁止するため、センチネル値("__none__")→onValueChangeでnullに正規化(センチネルは送信データに出さない)。null のときはvalue ?? NONEで「未選択」項目を選択状態にする(レビュー指摘の UX 整合)bottleSchemaがnullを受理しparsed.dataをupdateManyに渡すため、既存コードでnullが保存される)bottle-form.tsx):スキーマ nullish 化に伴うsubRegionの value 型安全化(value={field.value ?? ""})。1 行・挙動不変受け入れ条件(セルフチェック)
age・region・subRegion・caskType・note)を空にして保存すると、その値が削除される(DB がnullになる)regionを「未選択」に戻せる UI があるnull入りボディを受理し(400 にしない)、nullを保存するnullを送るとupdateManyのdataにnullが渡り、対象が消える(複数の任意項目をnullにした代表 1 本)動作確認
pnpm lintが通るpnpm testが通る(PATCH の null クリア回帰テストを追加。23 本)pnpm buildが通るIssue 要件外の対応(あれば)
bottle-form.tsxのsubRegionvalue を型安全化(1 行)。共有スキーマをnullishにした型的波及への追随で、挙動は変えていない。備考
Summary by CodeRabbit
New Features
Bug Fixes
null.