mirror of
https://github.com/nexu-io/open-design.git
synced 2026-05-31 19:04:39 +07:00
Merge 483f247c27 into 53fb175855
This commit is contained in:
commit
bc77012063
2 changed files with 36 additions and 7 deletions
|
|
@ -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]);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue