This commit is contained in:
吴杨帆 2026-05-31 01:23:29 -04:00 committed by GitHub
commit bc77012063
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 36 additions and 7 deletions

View file

@ -176,6 +176,16 @@ export function resolveSettingsCloseConfig(
return base.onboardingCompleted ? base : { ...base, onboardingCompleted: true };
}
export function projectsWithClearedPendingPrompt(
projects: Project[],
projectId: string | null | undefined,
): Project[] {
if (!projectId) return projects;
return projects.map((p) =>
p.id === projectId ? { ...p, pendingPrompt: undefined } : p,
);
}
export function App() {
return (
<IframeKeepAliveProvider>
@ -1113,17 +1123,18 @@ function AppInner() {
}, []);
const handleBack = useCallback(() => {
const projectId = route.kind === 'project' ? route.projectId : null;
if (projectId) {
setProjects((curr) => projectsWithClearedPendingPrompt(curr, projectId));
void patchProject(projectId, { pendingPrompt: null });
}
navigate({ kind: 'home', view: 'home' });
}, []);
}, [route]);
const handleClearPendingPrompt = useCallback(() => {
const projectId = route.kind === 'project' ? route.projectId : null;
if (!projectId) return;
setProjects((curr) =>
curr.map((p) =>
p.id === projectId ? { ...p, pendingPrompt: undefined } : p,
),
);
setProjects((curr) => projectsWithClearedPendingPrompt(curr, projectId));
void patchProject(projectId, { pendingPrompt: null });
}, [route]);

View file

@ -4,10 +4,11 @@ import {
buildPersistedConfig,
isAutosaveDraftOnlyChange,
persistComposioConfigChange,
projectsWithClearedPendingPrompt,
resolveSettingsCloseConfig,
shouldSyncMediaProvidersOnSave,
} from '../src/App';
import type { AppConfig } from '../src/types';
import type { AppConfig, Project } from '../src/types';
const baseConfig: AppConfig = {
mode: 'api',
@ -123,3 +124,20 @@ describe('resolveSettingsCloseConfig', () => {
});
});
});
describe('projectsWithClearedPendingPrompt', () => {
const projects: Project[] = [
{ id: 'a', name: 'A', pendingPrompt: 'keep me' } as Project,
{ id: 'b', name: 'B', pendingPrompt: 'stale seed' } as Project,
];
it('clears pendingPrompt for the target project (#2878)', () => {
const next = projectsWithClearedPendingPrompt(projects, 'b');
expect(next.find((p) => p.id === 'b')?.pendingPrompt).toBeUndefined();
expect(next.find((p) => p.id === 'a')?.pendingPrompt).toBe('keep me');
});
it('returns the original list when projectId is missing', () => {
expect(projectsWithClearedPendingPrompt(projects, null)).toBe(projects);
});
});