修复画布参考图上传删除链路 (#164)
主站规范生成支持多张参考图 修复普通生成参考图删除与提交状态不同步 优化触屏设备删除按钮可达性并补充回归测试 --------- Co-authored-by: kdletters <kdletters@qq.com> Reviewed-on: http://192.168.35.82/git/GenarrativeAI/Genarrative/pulls/164 Co-authored-by: 孟豪 <mh18530625731@163.com> Co-committed-by: 孟豪 <mh18530625731@163.com>
This commit was merged in pull request #164.
This commit is contained in:
@@ -94,6 +94,41 @@ function resetFailedGenerationDialog(dialog: GenerateDialogState) {
|
||||
};
|
||||
}
|
||||
|
||||
export function resolveSpecGenerationReferences(
|
||||
dialog: GenerateDialogState | null | undefined,
|
||||
) {
|
||||
if (!dialog || dialog.mode !== 'spec') {
|
||||
return [];
|
||||
}
|
||||
if (dialog.specType === 'icon') {
|
||||
return dialog.specReference ? [dialog.specReference] : [];
|
||||
}
|
||||
if (dialog.generationReferences?.length) {
|
||||
return dialog.generationReferences;
|
||||
}
|
||||
return dialog.specReference ? [dialog.specReference] : [];
|
||||
}
|
||||
|
||||
export function setSpecGenerationReferences(
|
||||
dialog: GenerateDialogState,
|
||||
references: NonNullable<GenerateDialogState['generationReferences']>,
|
||||
) {
|
||||
if (dialog.mode !== 'spec') {
|
||||
return dialog;
|
||||
}
|
||||
return dialog.specType === 'icon'
|
||||
? {
|
||||
...dialog,
|
||||
specReference: references[0] ?? null,
|
||||
generationReferences: [],
|
||||
}
|
||||
: {
|
||||
...dialog,
|
||||
specReference: null,
|
||||
generationReferences: references,
|
||||
};
|
||||
}
|
||||
|
||||
function resetFailedGenerationPanel(panel: QuickEditPanelState) {
|
||||
return {
|
||||
...panel,
|
||||
@@ -1017,12 +1052,22 @@ function createNormalizedGenerationDialogDraft({
|
||||
characterView: getNormalizedString(sourceLayer, 'characterView'),
|
||||
customPrompt: getNormalizedString(sourceLayer, 'customPrompt'),
|
||||
},
|
||||
specReference:
|
||||
resolveNormalizedReferences(
|
||||
sourceLayer,
|
||||
'reference',
|
||||
availableLayers,
|
||||
)[0] ?? null,
|
||||
...(specType === 'icon'
|
||||
? {
|
||||
specReference:
|
||||
resolveNormalizedReferences(
|
||||
sourceLayer,
|
||||
'reference',
|
||||
availableLayers,
|
||||
)[0] ?? null,
|
||||
}
|
||||
: {
|
||||
generationReferences: resolveNormalizedReferences(
|
||||
sourceLayer,
|
||||
'reference',
|
||||
availableLayers,
|
||||
),
|
||||
}),
|
||||
},
|
||||
sourceLayer,
|
||||
);
|
||||
@@ -1776,14 +1821,25 @@ export function createSameSourceGenerationDialogDraft({
|
||||
|
||||
if (sourceMode === 'spec') {
|
||||
const specType = resolveSpecTypeFromSourceLayer(sourceLayer, sourceDialog);
|
||||
const sourceReferences =
|
||||
sourceDialog?.mode === 'spec'
|
||||
? resolveSpecGenerationReferences(sourceDialog)
|
||||
: [];
|
||||
return placeDraftBesideSourceLayer(
|
||||
restoreSpecValuesFromLayer(
|
||||
{
|
||||
...createSpecDialogDraft({ canvasSize, viewport, specType }),
|
||||
prompt,
|
||||
sourceLayerId: sourceLayer.id,
|
||||
specReference:
|
||||
sourceDialog?.mode === 'spec' ? sourceDialog.specReference : null,
|
||||
...(specType === 'icon'
|
||||
? {
|
||||
specReference: sourceReferences[0] ?? null,
|
||||
generationReferences: [],
|
||||
}
|
||||
: {
|
||||
specReference: null,
|
||||
generationReferences: sourceReferences,
|
||||
}),
|
||||
},
|
||||
sourceLayer,
|
||||
specType,
|
||||
@@ -2102,11 +2158,20 @@ export function appendGenerationReference(
|
||||
if (getReferenceMediaType(layer) !== 'image') {
|
||||
return dialog;
|
||||
}
|
||||
return {
|
||||
const resetDialog = {
|
||||
...resetFailedGenerationDialog(dialog),
|
||||
specReference: createCanvasLayerReference(layer),
|
||||
composerOpen: true,
|
||||
};
|
||||
return setSpecGenerationReferences(
|
||||
resetDialog,
|
||||
dialog.specType === 'icon'
|
||||
? [createCanvasLayerReference(layer)]
|
||||
: appendLimitedImageReferences(
|
||||
resolveSpecGenerationReferences(dialog),
|
||||
[createCanvasLayerReference(layer)],
|
||||
resolveDialogExtraImageReferenceLimit(dialog),
|
||||
),
|
||||
);
|
||||
}
|
||||
if (dialog?.mode === 'video' && !isSeedanceVideoModel(dialog.videoModel)) {
|
||||
return dialog;
|
||||
|
||||
Reference in New Issue
Block a user