mirror of
https://github.com/stablyai/orca.git
synced 2026-10-20 08:03:28 +00:00
* Add mobile diff review * Wrap mobile review notes prompt * Fix mobile review unreviewed navigation * Clear review completion when a refreshed diff invalidates a reviewed file mergeMobileDiffReviewState invalidates a file's reviewed flag when its diff identity changes, but left completedAt set — inconsistent with markUnreviewed. Drop completedAt on invalidation and add a regression test. Co-authored-by: Orca <help@stably.ai> --------- Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com> Co-authored-by: Orca <help@stably.ai>
74 lines
3.0 KiB
TypeScript
74 lines
3.0 KiB
TypeScript
import { SafeAreaView } from 'react-native-safe-area-context'
|
|
import { Text, View } from 'react-native'
|
|
import type { useMobileDiffReviewController } from '../session/use-mobile-diff-review-controller'
|
|
import { MobileDiffReviewBody } from './MobileDiffReviewBody'
|
|
import { MobileDiffReviewDrawers } from './MobileDiffReviewDrawers'
|
|
import { MobileDiffReviewFileSummary } from './MobileDiffReviewFileSummary'
|
|
import { MobileDiffReviewFooter } from './MobileDiffReviewFooter'
|
|
import { MobileDiffReviewHeader } from './MobileDiffReviewHeader'
|
|
import { mobileDiffReviewStyles as styles } from './mobile-diff-review-screen-styles'
|
|
|
|
type Props = {
|
|
controller: ReturnType<typeof useMobileDiffReviewController>
|
|
onBack: () => void
|
|
}
|
|
|
|
export function MobileDiffReviewScreenView({ controller, onBack }: Props) {
|
|
return (
|
|
<SafeAreaView style={styles.safeArea} edges={['top']}>
|
|
<MobileDiffReviewHeader
|
|
filter={controller.filter}
|
|
queueLength={controller.queue.length}
|
|
reviewedCount={controller.reviewedCount}
|
|
unsentCount={controller.unsentComments.length}
|
|
worktreeLabel={controller.worktreeLabel}
|
|
onBack={onBack}
|
|
onOpenActions={() => controller.setShowOverflow(true)}
|
|
onSelectFilter={controller.selectFilter}
|
|
/>
|
|
{controller.currentItem ? (
|
|
<MobileDiffReviewFileSummary
|
|
currentIndex={controller.currentIndex}
|
|
diffState={controller.diffState}
|
|
fileNotes={controller.fileNotes}
|
|
filteredCount={controller.filteredQueue.length}
|
|
item={controller.currentItem}
|
|
staleCommentIds={controller.staleCommentIds}
|
|
onEditNote={controller.openEditComposer}
|
|
onJumpHunk={controller.jumpHunk}
|
|
/>
|
|
) : null}
|
|
{controller.actionError ? (
|
|
<View style={styles.actionError}>
|
|
<Text style={styles.actionErrorText}>{controller.actionError}</Text>
|
|
</View>
|
|
) : null}
|
|
<MobileDiffReviewBody
|
|
activeHunkIndex={controller.activeHunkIndex}
|
|
commentsByLine={controller.commentsByLine}
|
|
currentItem={controller.currentItem}
|
|
diffState={controller.diffState}
|
|
filteredCount={controller.filteredQueue.length}
|
|
listRef={controller.listRef}
|
|
screenState={controller.screenState}
|
|
staleCommentIds={controller.staleCommentIds}
|
|
onAddNote={controller.openComposer}
|
|
onEditNote={controller.openEditComposer}
|
|
onRetry={controller.retryAction}
|
|
/>
|
|
{controller.currentItem ? (
|
|
<MobileDiffReviewFooter
|
|
busyAction={controller.busyAction}
|
|
item={controller.currentItem}
|
|
onAddFileNote={() => controller.openComposer(0)}
|
|
onDiscard={controller.setDiscardTarget}
|
|
onGitMutation={(method, item) => void controller.runGitMutation(method, item)}
|
|
onMarkReviewed={() => void controller.markReviewed()}
|
|
onMoveFile={controller.moveFile}
|
|
/>
|
|
) : null}
|
|
<MobileDiffReviewDrawers controller={controller} />
|
|
</SafeAreaView>
|
|
)
|
|
}
|