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

✨ スケジュール詳細画面を追加 #122

Merged
merged 5 commits into from
Dec 5, 2023

Conversation

tatsutakein
Copy link
Member

@tatsutakein tatsutakein commented Dec 5, 2023

Issue

  • close #ISSUE_NUMBER 🦕

概要

スケジュール詳細画面を追加します。

レビュー観点

特になし

レビューレベル

  • Lv0: まったく見ないで Approve する
  • Lv1: ぱっとみて違和感がないかチェックして Approve する
  • Lv2: 仕様レベルまで理解して、仕様通りに動くかある程度検証して Approve する
  • Lv3: 実際に環境で動作確認したうえで Approve する

レビュー優先度

  • すぐに見てもらいたい ( hotfix など ) 🚀
  • 今日中に見てもらいたい 🚗
  • 今日〜明日中で見てもらいたい 🚶
  • 数日以内で見てもらいたい 🐢

参考リンク

スクリーンショット

Before After

Summary by CodeRabbit

  • 新機能

    • スケジュールの詳細画面へのナビゲーションを追加しました。
    • 最近のスケジュールをクリックした際に詳細画面に遷移する機能を実装しました。
  • バグ修正

    • スケジュールリスト画面からのナビゲーションを改善しました。
  • ドキュメンテーション

    • スケジュール詳細画面のUIコンポーネントに関するドキュメントを更新しました。
  • リファクタ

    • スケジュール関連のステートマシンのコードを整理しました。
  • スタイル

    • スケジュール詳細画面のスタイルを調整しました。
  • テスト

    • スケジュール詳細機能に関するテストケースを追加しました。
  • チョア

    • 内部コードのクリーンアップを行いました。
  • リバート

    • 不具合があった変更を元に戻しました。

@tatsutakein tatsutakein requested a review from a team as a code owner December 5, 2023 12:13
Copy link

coderabbitai bot commented Dec 5, 2023

Walkthrough

アプリケーションのナビゲーションロジックに新しいケースscheduleDetail(scheduleId: String)が追加され、特定のスケジュールの詳細ビューへのナビゲーションが可能になりました。これに伴い、関連するUIコンポーネント、ステートマシン、イベント、インテント、ナビゲーション関数が追加され、スケジュール詳細機能が全体的に拡張されました。

Changes

ファイルパス 変更概要
.../RootStateMachine.swift
.../RootView.swift
.../ComposeTopScreen.swift
.../NitoNavHost.kt
.../TopNavigation.kt
.../TopScreen.kt
.../TopScreen.ios.kt
新しいナビゲーションケースscheduleDetailの追加、関連するビューとクリックイベントのハンドリングのための変更
.../ComposeScheduleDetailScreen.swift
.../ScheduleDetailScreen.ios.kt
新しいComposeScheduleDetailScreen構造体と対応するiOSビューコントローラの追加
.../ScheduleDetailEvent.kt
.../ScheduleDetailIntent.kt
.../ScheduleDetailNavigation.kt
.../ScheduleDetailScreen.kt
.../ScheduleDetailScreenUiState.kt
.../ScheduleDetailStateMachine.kt
スケジュール詳細機能に関連する新しいイベント、インテント、ナビゲーション関数、UIステート、ステートマシンの追加
.../ScheduleFeatureModule.kt ScheduleDetailStateMachineのための新しいファクトリ宣言の追加
.../TopScreenEvent.kt
.../TopScreenStateMachine.kt
新しいイベントOnRecentScheduleClickedの追加とステートマシンの変更

🐰✨
新しい道が開かれた、
スケジュールの詳細へと続く。
コードのうさぎが跳ねる、
変更を祝いつつ。


Tips

Chat with CodeRabbit Bot (@coderabbitai)

  • If you reply to a review comment from CodeRabbit, the bot will automatically respond.
  • To engage with CodeRabbit bot directly around the specific lines of code in the PR, mention @coderabbitai in your review comment
  • Note: Review comments are made on code diffs or files, not on the PR overview.
  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.

CodeRabbit Commands (invoked as PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger a review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai help to get help.

Note: For conversation with the bot, please use the review comments on code diffs or files.

CodeRabbit Configration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • The JSON schema for the configuration file is available here.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/coderabbit-overrides.v2.json

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Review Status

Actionable comments generated: 4

Configuration used: CodeRabbit UI

Commits Files that changed from the base of the PR and between 8338340 and 6bbac97.
Files selected for processing (18)
  • app/ios/Modules/Sources/Navigation/RootStateMachine.swift (1 hunks)
  • app/ios/Modules/Sources/Navigation/RootView.swift (2 hunks)
  • app/ios/Modules/Sources/Schedule/ComposeScheduleDetailScreen.swift (1 hunks)
  • app/ios/Modules/Sources/Top/ComposeTopScreen.swift (2 hunks)
  • app/shared/src/commonMain/kotlin/club/nito/app/shared/NitoNavHost.kt (3 hunks)
  • feature/schedule/src/commonMain/kotlin/club/nito/feature/schedule/detail/ScheduleDetailEvent.kt (1 hunks)
  • feature/schedule/src/commonMain/kotlin/club/nito/feature/schedule/detail/ScheduleDetailIntent.kt (1 hunks)
  • feature/schedule/src/commonMain/kotlin/club/nito/feature/schedule/detail/ScheduleDetailNavigation.kt (1 hunks)
  • feature/schedule/src/commonMain/kotlin/club/nito/feature/schedule/detail/ScheduleDetailScreen.kt (1 hunks)
  • feature/schedule/src/commonMain/kotlin/club/nito/feature/schedule/detail/ScheduleDetailScreenUiState.kt (1 hunks)
  • feature/schedule/src/commonMain/kotlin/club/nito/feature/schedule/detail/ScheduleDetailStateMachine.kt (1 hunks)
  • feature/schedule/src/commonMain/kotlin/club/nito/feature/schedule/di/ScheduleFeatureModule.kt (2 hunks)
  • feature/schedule/src/iosMain/kotlin/club/nito/feature/schedule/detail/ScheduleDetailScreen.ios.kt (1 hunks)
  • feature/top/src/commonMain/kotlin/club/nito/feature/top/TopNavigation.kt (2 hunks)
  • feature/top/src/commonMain/kotlin/club/nito/feature/top/TopScreen.kt (2 hunks)
  • feature/top/src/commonMain/kotlin/club/nito/feature/top/TopScreenEvent.kt (1 hunks)
  • feature/top/src/commonMain/kotlin/club/nito/feature/top/TopScreenStateMachine.kt (1 hunks)
  • feature/top/src/iosMain/kotlin/club/nito/feature/top/TopScreen.ios.kt (1 hunks)
Additional comments: 26
app/ios/Modules/Sources/Navigation/RootStateMachine.swift (2)
  • 17-22: 新しいケースscheduleDetail(scheduleId: String)Routing列挙型に追加されました。この変更は、特定のスケジュールIDによって識別される詳細ビューへのナビゲーションを可能にするためのものであることを示しています。この変更により、アプリケーションのナビゲーションロジックが拡張されたと考えられます。

  • 17-22: 新しいscheduleDetailケースがアプリケーション全体で適切に処理されているかを確認する必要があります。これには、ナビゲーションロジック、イベントハンドリング、および関連するUIコンポーネントが含まれます。

app/ios/Modules/Sources/Navigation/RootView.swift (2)
  • 42-43: 新しいscheduleDetailケースが追加され、ComposeScheduleDetailScreenが条件に応じて構成されるようになりました。この変更は、新しいスケジュール詳細画面機能の追加に対応しています。

  • 29-30: ComposeTopScreenに新しいクロージャonRecentScheduleClickedが追加され、スケジュールIDに基づいてscheduleDetailルーティングケースに対する意図をステートマシンにディスパッチするようになりました。この変更は、最近のスケジュールがクリックされたときにスケジュール詳細画面へのナビゲーションを処理するためのものです。

app/ios/Modules/Sources/Top/ComposeTopScreen.swift (2)
  • 6-19: 新しいクロージャonRecentScheduleClickedComposeTopScreen構造体に追加されました。これは、スケジュールの詳細画面へのナビゲーションを処理するために使用されると思われます。この変更は、プルリクエストの目的と一致しています。

  • 25-31: makeUIViewControllerメソッド内でonRecentScheduleClickedクロージャがTopRouteViewControllerのイニシャライザに正しく渡されています。これにより、最近のスケジュールがクリックされたときに詳細画面に適切にナビゲートすることができます。

app/shared/src/commonMain/kotlin/club/nito/app/shared/NitoNavHost.kt (3)
  • 7-14: 変更されたコードは、スケジュール詳細に関連する新しいインポートを追加しており、これはユーザーが提供した事実と一致しています。

  • 45-49: topScreen関数にonRecentScheduleClickedコールバックが追加されており、これは新しいスケジュール詳細画面へのナビゲーションを処理するためのものです。これもユーザーが提供した事実と一致しています。

  • 63-63: scheduleDetailScreen関数の呼び出しが追加されており、これは新しいスケジュール詳細画面をサポートするための変更です。

feature/schedule/src/commonMain/kotlin/club/nito/feature/schedule/detail/ScheduleDetailEvent.kt (1)
  • 1-5: 現在の実装には問題がないようですが、将来的に他のイベントが追加される可能性があるため、拡張性を考慮して設計されていることを確認してください。
feature/schedule/src/commonMain/kotlin/club/nito/feature/schedule/detail/ScheduleDetailIntent.kt (1)
  • 6-7: ClickParticipateClickParticipateScheduleの二つのデータクラスが似たようなアクションを表しているように見えます。もし同じアクションを表す場合は、混乱を避けるために一つに統合することを検討してください。
feature/schedule/src/commonMain/kotlin/club/nito/feature/schedule/detail/ScheduleDetailScreen.kt (3)
  • 127-128: ナビゲーションアイコンのonClickが空です。これは意図的なプレースホルダーかもしれませんが、機能が完成する前に実装する必要があります。

  • 79-85: ScheduleDetailEvent.NavigateToScheduleDetailイベントは処理されていません。これは将来の実装のためのプレースホルダーかもしれませんが、機能が完成する前に実装する必要があります。

  • 419-420: OutlinedTextFieldIconButtonは現在無効になっており、"Coming Soon."というプレースホルダーテキストがあります。これらは将来の機能のためのプレースホルダーですが、機能がライブになる前に実装するか削除する必要があります。

feature/schedule/src/commonMain/kotlin/club/nito/feature/schedule/detail/ScheduleDetailScreenUiState.kt (1)
  • 7-16: このコードハンクは、スケジュール詳細画面のUI状態を管理するためのデータクラスと、参加確認ダイアログのUI状態を表すシールドクラスを適切に定義しています。問題は見当たりません。
feature/schedule/src/commonMain/kotlin/club/nito/feature/schedule/detail/ScheduleDetailStateMachine.kt (1)
  • 1-77: コードレビューを行いましたが、ロジック、セキュリティ、パフォーマンス、ベストプラクティスの観点から問題は見つかりませんでした。ScheduleDetailStateMachine クラスは、スケジュール詳細画面の状態とイベントを適切に管理しているようです。
feature/schedule/src/commonMain/kotlin/club/nito/feature/schedule/di/ScheduleFeatureModule.kt (2)
  • 3-7: 新しいインポート文とScheduleDetailStateMachineのファクトリ宣言が追加されています。これは、スケジュール詳細に関する新しい機能が追加されたことを示しています。

  • 17-24: ScheduleDetailStateMachineの新しいファクトリ宣言には、ScheduleId型のパラメータが含まれています。これは、スケジュールIDに基づいてスケジュール詳細を取得するための依存性注入を設定していることを示しています。

feature/schedule/src/iosMain/kotlin/club/nito/feature/schedule/detail/ScheduleDetailScreen.ios.kt (1)
  • 1-19: コードは正しく、iOS用のスケジュール詳細画面のビューコントローラを作成するための関数ScheduleDetailRouteViewControllerが適切に定義されています。引数としてidstateMachineを受け取り、ComposeUIViewControllerを使用してScheduleDetailRouteコンポーザブルをレンダリングします。また、NitoThemeを適用してアプリのテーマをコンポーザブル内で使用しています。このコードは、PRの目的と生成されたサマリーに記載されている新しい機能追加に対応しています。
feature/top/src/commonMain/kotlin/club/nito/feature/top/TopNavigation.kt (2)
  • 3-3: 新しいパラメータonRecentScheduleClickedの型としてScheduleIdを使用するために、ScheduleIdのインポート文が追加されました。これは適切な変更です。

  • 14-26: topScreen関数に新しいパラメータonRecentScheduleClickedが追加されました。この変更により、この関数を呼び出すすべての箇所で新しいパラメータが考慮されているか確認する必要があります。

feature/top/src/commonMain/kotlin/club/nito/feature/top/TopScreen.kt (3)
  • 20-26: 新しいスケジュール詳細画面の機能追加に伴い、ScheduleIdのインポートが追加されています。これは期待される変更であり、問題はありません。

  • 30-34: TopRoute関数にonRecentScheduleClickedパラメータが追加されており、これは新しいスケジュール詳細画面へのナビゲーションを処理するためのものです。これも期待される変更であり、問題はありません。

  • 36-42: TopScreenEvent.OnRecentScheduleClickedイベントが発生した際にonRecentScheduleClickedが呼び出されるようになっており、これは新しいスケジュール詳細画面へのナビゲーションを処理するためのものです。これも期待される変更であり、問題はありません。

feature/top/src/commonMain/kotlin/club/nito/feature/top/TopScreenStateMachine.kt (1)
  • 48-58: この変更は、TopScreenIntent.ClickShowConfirmParticipateDialog インテントが TopScreenEvent.OnRecentScheduleClicked イベントを発行するように変更されたことを示しています。これは、新しいスケジュール詳細画面機能の追加に関連する可能性があります。変更されたロジックが意図したとおりに機能するかどうかを確認してください。
feature/top/src/iosMain/kotlin/club/nito/feature/top/TopScreen.ios.kt (1)
  • 9-21: 新しいパラメータonRecentScheduleClickedTopRouteViewController関数に追加されました。この変更は、既存のコードに影響を与えずに新しい機能を統合するための良い方法です。デフォルト値が空のラムダ関数に設定されているため、後方互換性が保たれています。この変更により、最近のスケジュールがクリックされたときのナビゲーションロジックが適切に更新されていることを確認してください。

Comment on lines +7 to +9
* Navigate to schedule list screen
*/
public data class OnRecentScheduleClicked(val scheduleId: ScheduleId) : TopScreenEvent()
Copy link

Choose a reason for hiding this comment

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

コメントが間違っています。OnRecentScheduleClicked イベントはスケジュール詳細画面へのナビゲーションを表すため、コメントを修正する必要があります。

-     * Navigate to schedule list screen
+     * Navigate to schedule detail screen

Committable suggestion

IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.

Suggested change
* Navigate to schedule list screen
*/
public data class OnRecentScheduleClicked(val scheduleId: ScheduleId) : TopScreenEvent()
* Navigate to schedule detail screen
*/
public data class OnRecentScheduleClicked(val scheduleId: ScheduleId) : TopScreenEvent()

Comment on lines +22 to +24
backStackEntry.path<String>("id")?.let { id ->
ScheduleDetailRoute(id = id)
}
Copy link

Choose a reason for hiding this comment

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

エラーハンドリングの追加を検討してください。backStackEntry.path<String>("id")がnullを返す場合、ScheduleDetailRouteが呼び出されない状況が発生する可能性があります。nullの場合に適切なフィードバックやログを提供することが重要です。

backStackEntry.path<String>("id")?.let { id ->
    ScheduleDetailRoute(id = id)
} ?: run {
    // 適切なエラーハンドリングをここに追加する
}

Comment on lines +26 to +27
public func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
}
Copy link

Choose a reason for hiding this comment

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

updateUIViewControllerメソッドが空です。これは、作成後にUIViewControllerを更新する必要がない場合に意図的なものかもしれませんが、もし将来的にUIViewControllerの状態を更新する必要が生じた場合に備えて、このメソッドの実装を検討するか、またはコメントを追加してその目的を明確にすることをお勧めします。

is TopScreenIntent.ClickShowConfirmParticipateDialog -> showConfirmParticipateSchedule.emit(intent.schedule)
is TopScreenIntent.ClickShowConfirmParticipateDialog -> {
_events.emit(_events.value + TopScreenEvent.OnRecentScheduleClicked(intent.schedule.id))
// showConfirmParticipateSchedule.emit(intent.schedule)
Copy link

Choose a reason for hiding this comment

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

コメントアウトされたコードは将来の保守性に影響を与える可能性があるため、もはや必要ない場合は削除することをお勧めします。

- // showConfirmParticipateSchedule.emit(intent.schedule)

Committable suggestion

IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation.

Suggested change
// showConfirmParticipateSchedule.emit(intent.schedule)

@tatsutakein tatsutakein merged commit 7545806 into main Dec 5, 2023
4 checks passed
@tatsutakein tatsutakein deleted the rt/add-schedule-detail-screen branch December 5, 2023 12:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant