Skip to content

Commit 8822bb0

Browse files
committed
Preserve Missing Models browser geometry during refresh
1 parent 10a0327 commit 8822bb0

2 files changed

Lines changed: 57 additions & 2 deletions

File tree

tests/test_downloads_tab_workflow_route.mjs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1634,6 +1634,53 @@ test('background Apply validation uses the Missing Models workflow signature', a
16341634
]);
16351635
});
16361636

1637+
test('Apply selected model preserves Missing Models browser geometry during both refresh stages', async () => {
1638+
const applyOptimisticAnalysisData = eval(
1639+
`(${extractMethod(queueMethodsSource, 'applyOptimisticAnalysisData')})`
1640+
);
1641+
const refreshAnalysisInBackground = eval(
1642+
`(${extractMethod(queueMethodsSource, 'refreshAnalysisInBackground')})`
1643+
);
1644+
const contentElement = {};
1645+
const workflow = { nodes: [{ id: 7, widgets_values: ['linked.safetensors'] }] };
1646+
const optimisticData = { missing_models: [], resolved_models: [{ node_id: 7, optimistic: true }] };
1647+
const analyzedData = { missing_models: [], resolved_models: [{ node_id: 7, optimistic: false }] };
1648+
const renderCalls = [];
1649+
const dialog = {
1650+
activeTab: 'missing',
1651+
contentElement,
1652+
activeMissingWorkflowSignature: 'linked-missing-signature',
1653+
cachedWorkflowSignature: null,
1654+
cachedAnalysisData: null,
1655+
applyResolvedSelectionAliasesToAnalysisData() {},
1656+
getMissingWorkflowSignature() {
1657+
return 'linked-missing-signature';
1658+
},
1659+
getCurrentWorkflow() {
1660+
return workflow;
1661+
},
1662+
cloneAnalysisData(data) {
1663+
return data;
1664+
},
1665+
saveAnalysisCacheForActiveWorkflow() {},
1666+
displayMissingModels(...args) {
1667+
renderCalls.push(args);
1668+
},
1669+
reconnectActiveDownloads() {},
1670+
async fetchJson() {
1671+
return analyzedData;
1672+
},
1673+
};
1674+
1675+
applyOptimisticAnalysisData.call(dialog, optimisticData, workflow);
1676+
await refreshAnalysisInBackground.call(dialog, workflow);
1677+
1678+
assert.deepEqual(renderCalls, [
1679+
[contentElement, optimisticData, { preserveBrowser: true }],
1680+
[contentElement, analyzedData, { preserveBrowser: true }],
1681+
]);
1682+
});
1683+
16371684
test('background Loaded Models refresh keeps the current view until new data is ready', async () => {
16381685
const loadLoadedModels = eval(`(${extractMethod(tabsLoadedMethodsSource, 'loadLoadedModels')})`);
16391686
const workflow = {

web/resolver/actions/queue_methods.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2633,7 +2633,11 @@ export const queueMethods = {
26332633
this.saveAnalysisCacheForActiveWorkflow?.();
26342634

26352635
if (this.activeTab === 'missing' && this.contentElement) {
2636-
this.displayMissingModels(this.contentElement, data);
2636+
this.displayMissingModels(
2637+
this.contentElement,
2638+
data,
2639+
{ preserveBrowser: true }
2640+
);
26372641
this.reconnectActiveDownloads?.();
26382642
} else {
26392643
this.missingModels = Array.isArray(data.missing_models) ? data.missing_models : [];
@@ -2661,7 +2665,11 @@ export const queueMethods = {
26612665
this.saveAnalysisCacheForActiveWorkflow?.();
26622666

26632667
if (this.activeTab === 'missing' && this.contentElement && !this._analysisProgressToken) {
2664-
this.displayMissingModels(this.contentElement, data);
2668+
this.displayMissingModels(
2669+
this.contentElement,
2670+
data,
2671+
{ preserveBrowser: true }
2672+
);
26652673
this.reconnectActiveDownloads?.();
26662674
}
26672675
} catch (error) {

0 commit comments

Comments
 (0)