Closed Ayato-kosaka closed 11 months ago
@Takapy1 ちょっと次の打ち合わせで相談させて欲しい、、
↓で整理しているけど、かなり根深そう。。 https://docs.google.com/spreadsheets/d/148SwXNGl5tc4HASBQrhUfb0t0FwoSpvR-10nULA8xhI/edit#gid=0
問題は、「しおり選択 → 新規作成」と「URLでPreview → Edit遷移」で同じ、下記初期値になること
そうすると、新規作成 で呼び出すべき itineraryCreate を呼び出す制御をするINPUTが無い。 ここを切り分けるには、下記2対策が考えられる。(※その他良い案があればそれを使いたい)
1 は、難易度低いけど、パラメータ増えるから避けたい。 2 は、難易度が高そう。。
ちょっと要検討そう
案3 しおり選択からホーム画面に戻るとstate の itineraryID クリアする
navigation.onLeave(setItineraryID(null))
案4 createItinerary で、Stack ごと新しくする→つまり、Context が初期化される(そんなことできるのかは不明)
navigation.onEnter(setItineraryID(null))
案4が一番あるべきに近そう。 そうすると、以下の優先順で初期化できる
@Ayato-kosaka 時間とってちゃんと確認してから返信します!
@Ayato-kosaka 内容理解にめちゃ苦戦してる! あしたのMtg までにもう少し俺もコード理解深めてみるけど 理解不十分だったらごめん!!!
@Takapy1 打ち合わせで説明するから大丈夫だよ!🙆
だめだ、、、 ItineraryPageNavigator 直下に Context があるから、案4 で ItineraryTopTabNavigator のStack新しくしてもState 持ったままだ、、
本来の画面遷移から考えると↓にならないといけないが、
↓になっているのがおかしい
対応内容 memo
react navigation を使って EditPlan に遷移すると、ヘッダが 3つ出る。 あまりに大きいのと、Edit Plan からの遷移は ItineraryEdit だけで良い。 理想はモーダル化して、ItineraryEdit に選択した Place を渡したい。 ただ、Edit Plan は Plan を update する処理が入っているので、Context の管理下かから外れることが出来ない。 つまり、Context の階層関係と、 react navigation の階層関係で合わない。
Context の階層関係
react navigation の階層関係
じゃあどうするべきか、と考えると
nacigation events を使って無理やりモーダルみたいにしてみる
react navigation で親の screen options を setOptions するにはどうするか
ちょっと考えてみたけど、Context 指向じゃないと無理そうだから無理やり非推奨の実装する。 今の所困りそうにないけど、後々困ったらまた考える。
一回 react navigation のドキュメント全部読もうかな、、 そうしないとイマイチ動きがわからんなぁ、、
react navigation のドキュメントは完全にネストは最小限にすべきで、レイアウト指向でネストを決定すべきって書いてるなぁ、、 じゃあ、Context の考え方を再整理したほうが良いのかなぁ、
方針としては、
↑を対応するとなると EditPlan の実装が大まかにか分かるからかなりの実装修正が必要になる。。 対応すべきか? → 今後のデータコンセプトの修正で必要なくなるかもだけど、まずは当たり前品質改善 -> インスタ だから対応する
UT でバグ検知。 PlanEdit 画面で Representative Plan の開始時間を変更しても、 ItineraryEdit 画面に戻ると反映されていない。
起因 ①PlanEdit 画面で開始時間を変更 → DB の PlanGroup を更新 ②上記を ItineraryEdit 画面で検知して useEffect が発射し、DB の plan の startTime が更新 ③戻るボタン押下時にDB の plan をPlanEdit 画面の画面保持情報で上書きするため、元の値で上書きされる。
原因 ItineraryEdit 画面 はリアルタイムに DB をウォッチし、DB を直接更新する仕組み。 PlanEdit 画面は、画面情報を保持しておき、RemovePage で一括DB更新する仕組み。
なのに、起因①のように、PlanGroup だけその場で更新しているため障害となる。
対策 PlanGroup も画面で情報を保持しておき、画面離脱時に更新するようにする。
UT でバグ検知。 Plan のサムネイル画像作成後、 ItineraryEdit に戻り、再度 PlanEdit に入ると場所の画像に更新される。
原因 plan.imageUrl 更新処理の設計不備。 place.imageUrl を監視して更新している。
解決策 place.place_id を監視し、place が plan が持っているものから更新された場合、 title, imageUrl を更新する
デグレ検知 Create Itinerary を2回行うと1回目が残っている