修复资源工作台合并回归
恢复 UI 编辑器钱包入口和创建资源语义 恢复资源详情关闭后的滚动位置 更新资源生成入口测试断言 锁定缺失登录时生成失败的公开投影
This commit is contained in:
@@ -8803,6 +8803,12 @@ mod tests {
|
||||
let public = serde_json::to_string(&public_draft).expect("serialize failed draft");
|
||||
assert!(!public.contains(prompt));
|
||||
assert!(!public.contains(&input.idempotency_key));
|
||||
assert!(public_draft
|
||||
.generations
|
||||
.iter()
|
||||
.any(|record| record.generation_id == input.generation_id
|
||||
&& record.phase == AssetCanvasGenerationStatus::Failed
|
||||
&& record.error_code.as_deref() == Some("configuration-missing")));
|
||||
let ledger = read_generation_ledger(directory.path(), &input.generation_id)
|
||||
.expect("read retryable generation ledger")
|
||||
.expect("missing-login ledger exists");
|
||||
|
||||
@@ -199,6 +199,15 @@ type ResourceEditorRoute = {
|
||||
generationMode: 'create' | 'derive';
|
||||
};
|
||||
|
||||
function defaultCreatedResourceName(
|
||||
editKind: ResourceEditorRoute['capability']['editKind'],
|
||||
) {
|
||||
if (editKind === 'video') return '新视频';
|
||||
if (editKind === 'sound-effect') return '新音效';
|
||||
if (editKind === 'background-music') return '新背景音乐';
|
||||
return '新资源';
|
||||
}
|
||||
|
||||
type UiEditorRoute = {
|
||||
resourceId: string;
|
||||
resourceLabel: string;
|
||||
@@ -2002,7 +2011,7 @@ export default function ProjectDevelopmentView({
|
||||
}
|
||||
function closeOnEscape(event: KeyboardEvent) {
|
||||
if (event.key === 'Escape') {
|
||||
restoreResourceListScrollRef.current = false;
|
||||
restoreResourceListScrollRef.current = true;
|
||||
setFocusedResourceId(null);
|
||||
}
|
||||
}
|
||||
@@ -3332,7 +3341,7 @@ export default function ProjectDevelopmentView({
|
||||
|
||||
function closeResourceFocus() {
|
||||
advanceFocusGeneration();
|
||||
restoreResourceListScrollRef.current = false;
|
||||
restoreResourceListScrollRef.current = true;
|
||||
setFocusedResourceId(null);
|
||||
}
|
||||
|
||||
@@ -3516,12 +3525,13 @@ export default function ProjectDevelopmentView({
|
||||
) : null}
|
||||
|
||||
{mode === 'resources' && uiEditorRoute ? (
|
||||
<div className="h-full min-h-0 min-w-0 w-full overflow-hidden rounded-2xl border border-(--platform-desktop-panel-border) bg-(--platform-desktop-panel-fill) shadow-(--platform-panel-shadow)">
|
||||
<div className="game-workbench-editor-shell h-full min-h-0 min-w-0 w-full overflow-hidden">
|
||||
<UiEditorPage
|
||||
projectPath={projectPath}
|
||||
resourceId={uiEditorRoute.resourceId}
|
||||
projectId={manifest.projectId}
|
||||
resourceLabel={uiEditorRoute.resourceLabel}
|
||||
walletEntry={walletEntry}
|
||||
onBack={() => setUiEditorRoute(null)}
|
||||
/>
|
||||
</div>
|
||||
@@ -3540,11 +3550,21 @@ export default function ProjectDevelopmentView({
|
||||
/>
|
||||
) : mode === 'resources' && resourceEditorRoute ? (
|
||||
<ResourceEditSurface
|
||||
resourceLabel={resourceEditorRoute.resource.label}
|
||||
resourceLabel={
|
||||
resourceEditorRoute.resource?.label ??
|
||||
defaultCreatedResourceName(
|
||||
resourceEditorRoute.capability.editKind,
|
||||
)
|
||||
}
|
||||
editKind={resourceEditorRoute.capability.editKind}
|
||||
initialAssetName={defaultDerivedResourceName(
|
||||
resourceEditorRoute.resource,
|
||||
)}
|
||||
generationMode={resourceEditorRoute.generationMode}
|
||||
initialAssetName={
|
||||
resourceEditorRoute.resource
|
||||
? defaultDerivedResourceName(resourceEditorRoute.resource)
|
||||
: defaultCreatedResourceName(
|
||||
resourceEditorRoute.capability.editKind,
|
||||
)
|
||||
}
|
||||
semanticNotice={resourceEditorRoute.capability.semanticNotice}
|
||||
onCancel={cancelResourceEditor}
|
||||
onSubmit={submitResourceEdit}
|
||||
|
||||
@@ -1855,7 +1855,7 @@ export function registerProjectWorkbenchFoundationTests() {
|
||||
'resources.focused.document',
|
||||
);
|
||||
expect(screen.getByLabelText('搜索项目资源')).not.toBeNull();
|
||||
expect(screen.getByRole('button', { name: '新增资源' })).not.toBeNull();
|
||||
expect(screen.getByRole('button', { name: '生成视频' })).not.toBeNull();
|
||||
expect(screen.getByRole('button', { name: '按依赖' })).not.toBeNull();
|
||||
expect(
|
||||
screen
|
||||
@@ -9409,7 +9409,8 @@ export function registerProjectSupervisorSurfaceTests() {
|
||||
projectPath,
|
||||
});
|
||||
let directTurnUpdateHandler:
|
||||
((event: { payload: Record<string, unknown> }) => void) | null = null;
|
||||
| ((event: { payload: Record<string, unknown> }) => void)
|
||||
| null = null;
|
||||
const listen = vi.fn(
|
||||
async (
|
||||
eventName: string,
|
||||
@@ -10367,7 +10368,8 @@ export function registerProjectAgentStatusTests() {
|
||||
},
|
||||
);
|
||||
let runtimeUpdateHandler:
|
||||
((event: { payload: Record<string, unknown> }) => void) | null = null;
|
||||
| ((event: { payload: Record<string, unknown> }) => void)
|
||||
| null = null;
|
||||
const listen = vi.fn(
|
||||
async (
|
||||
eventName: string,
|
||||
|
||||
@@ -718,7 +718,7 @@ describe('project resource live canvas integration', () => {
|
||||
);
|
||||
expect(sourceDetails.hasAttribute('aria-modal')).toBe(false);
|
||||
expect(document.querySelector('.game-resource-focus-backdrop')).toBeNull();
|
||||
expect(screen.getByRole('button', { name: '新增资源' })).not.toBeNull();
|
||||
expect(screen.getByRole('button', { name: '生成视频' })).not.toBeNull();
|
||||
expect(
|
||||
screen
|
||||
.getByRole('button', { name: '按依赖' })
|
||||
|
||||
Reference in New Issue
Block a user