mirror of
https://github.com/stablyai/orca.git
synced 2026-10-26 08:02:44 +00:00
Address PR refresh review feedback
Co-authored-by: Orca <help@stably.ai>
This commit is contained in:
@@ -14,6 +14,7 @@ import {
|
||||
} from 'lucide-react'
|
||||
import { useAppStore, type AppState } from '@/store'
|
||||
import {
|
||||
buildGitHubPRRefreshStateClearToken,
|
||||
getGitHubPRRefreshStateExpiryAt,
|
||||
mergePRCommentIntoList,
|
||||
prChecksCacheSuffix,
|
||||
@@ -665,16 +666,17 @@ export default function ChecksPanel(): React.JSX.Element {
|
||||
setPrRefreshStateNow(Date.now())
|
||||
const storeState = useAppStore.getState()
|
||||
const rawState = storeState.prRefreshStates[prCacheKey]
|
||||
if (!rawState) {
|
||||
const token = buildGitHubPRRefreshStateClearToken(
|
||||
rawState,
|
||||
storeState.prRefreshSequences,
|
||||
prCacheKey
|
||||
)
|
||||
if (!token) {
|
||||
return
|
||||
}
|
||||
// Why: time alone does not publish Zustand updates; this timeout clears
|
||||
// abandoned active refresh UI without treating expiry as no-PR evidence.
|
||||
storeState.expireGitHubPRRefreshState(prCacheKey, {
|
||||
sequence: storeState.prRefreshSequences[prCacheKey] ?? 0,
|
||||
status: rawState.status,
|
||||
updatedAt: rawState.updatedAt
|
||||
})
|
||||
storeState.expireGitHubPRRefreshState(prCacheKey, token)
|
||||
},
|
||||
Math.max(0, expiryAt - Date.now() + 1)
|
||||
)
|
||||
@@ -1846,13 +1848,11 @@ export default function ChecksPanel(): React.JSX.Element {
|
||||
}
|
||||
const refreshStoreState = useAppStore.getState()
|
||||
const rawPRRefreshState = refreshStoreState.prRefreshStates[prCacheKey]
|
||||
const startedPRRefreshToken = rawPRRefreshState
|
||||
? {
|
||||
sequence: refreshStoreState.prRefreshSequences[prCacheKey] ?? 0,
|
||||
status: rawPRRefreshState.status,
|
||||
updatedAt: rawPRRefreshState.updatedAt
|
||||
}
|
||||
: null
|
||||
const startedPRRefreshToken = buildGitHubPRRefreshStateClearToken(
|
||||
rawPRRefreshState,
|
||||
refreshStoreState.prRefreshSequences,
|
||||
prCacheKey
|
||||
)
|
||||
let refreshedPR: PRInfo | null = null
|
||||
try {
|
||||
refreshedPR = await fetchPRForBranch(repo.path, branch, {
|
||||
|
||||
@@ -40,6 +40,8 @@ export function getChecksPanelEmptyStateCopy(
|
||||
}
|
||||
|
||||
const blockedReason = input.hostedReviewBlockedReason
|
||||
// Why: hosted-review metadata with missing PR cache data is ambiguous, so
|
||||
// avoid showing "no PR" or publish guidance until GitHub status is refreshed.
|
||||
if (
|
||||
input.hasAmbiguousGitHubHostedReview === true &&
|
||||
(input.prRefreshStatus === 'paused' ||
|
||||
|
||||
@@ -637,7 +637,7 @@ export type PRRefreshState = {
|
||||
message?: string
|
||||
}
|
||||
|
||||
type PRRefreshStateClearToken = {
|
||||
export type PRRefreshStateClearToken = {
|
||||
sequence: number
|
||||
status: PRRefreshState['status']
|
||||
updatedAt: number
|
||||
@@ -1484,6 +1484,21 @@ function isPRRefreshStateExpired(state: PRRefreshState, now: number): boolean {
|
||||
return expiryAt !== null && now > expiryAt
|
||||
}
|
||||
|
||||
export function buildGitHubPRRefreshStateClearToken(
|
||||
state: PRRefreshState | undefined,
|
||||
sequences: Record<string, number>,
|
||||
cacheKey: string
|
||||
): PRRefreshStateClearToken | null {
|
||||
if (!state) {
|
||||
return null
|
||||
}
|
||||
return {
|
||||
sequence: sequences[cacheKey] ?? 0,
|
||||
status: state.status,
|
||||
updatedAt: state.updatedAt
|
||||
}
|
||||
}
|
||||
|
||||
export function getGitHubPRRefreshStateExpiryAt(state: PRRefreshState | undefined): number | null {
|
||||
if (!state) {
|
||||
return null
|
||||
@@ -2817,13 +2832,11 @@ export const createGitHubSlice: StateCreator<AppState, [], [], GitHubSlice> = (s
|
||||
const requestStartedAt = Date.now()
|
||||
const requestStartedHostedReviewEntry = get().hostedReviewCache[hostedReviewCacheKey]
|
||||
const requestStartedPRRefreshState = get().prRefreshStates[cacheKey]
|
||||
const requestStartedPRRefreshToken = requestStartedPRRefreshState
|
||||
? {
|
||||
sequence: get().prRefreshSequences[cacheKey] ?? 0,
|
||||
status: requestStartedPRRefreshState.status,
|
||||
updatedAt: requestStartedPRRefreshState.updatedAt
|
||||
}
|
||||
: null
|
||||
const requestStartedPRRefreshToken = buildGitHubPRRefreshStateClearToken(
|
||||
requestStartedPRRefreshState,
|
||||
get().prRefreshSequences,
|
||||
cacheKey
|
||||
)
|
||||
prRequestGenerations.set(cacheKey, generation)
|
||||
|
||||
const request = (async () => {
|
||||
|
||||
Reference in New Issue
Block a user