mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-05-06 16:36:45 -03:00
fix(filters): apply preset base models from full list
This commit is contained in:
@@ -232,7 +232,7 @@ export class FilterPresetManager {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const fetchOptions = signal ? { signal } : {};
|
const fetchOptions = signal ? { signal } : {};
|
||||||
const response = await fetch(`/api/lm/${this.currentPage}/base-models`, fetchOptions);
|
const response = await fetch(`/api/lm/${this.currentPage}/base-models?limit=0`, fetchOptions);
|
||||||
|
|
||||||
if (!response.ok) throw new Error('Failed to fetch base models');
|
if (!response.ok) throw new Error('Failed to fetch base models');
|
||||||
|
|
||||||
|
|||||||
@@ -113,6 +113,7 @@ function renderControlsDom(pageKey) {
|
|||||||
<input id="baseModelSearchInput" />
|
<input id="baseModelSearchInput" />
|
||||||
<div id="baseModelTags" class="filter-tags"></div>
|
<div id="baseModelTags" class="filter-tags"></div>
|
||||||
<div id="baseModelEmptyState" hidden></div>
|
<div id="baseModelEmptyState" hidden></div>
|
||||||
|
<div id="filterPresets" class="filter-presets"></div>
|
||||||
<div id="modelTagsFilter" class="filter-tags"></div>
|
<div id="modelTagsFilter" class="filter-tags"></div>
|
||||||
<button class="clear-filter"></button>
|
<button class="clear-filter"></button>
|
||||||
</div>
|
</div>
|
||||||
@@ -476,6 +477,98 @@ describe('FilterManager tag and base model filters', () => {
|
|||||||
eventManager.cleanup();
|
eventManager.cleanup();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('applies all base models from a preset using the full base model list', async () => {
|
||||||
|
global.fetch = vi.fn((url) => {
|
||||||
|
if (url.includes('/base-models?limit=0')) {
|
||||||
|
return Promise.resolve({
|
||||||
|
ok: true,
|
||||||
|
json: async () => ({
|
||||||
|
success: true,
|
||||||
|
base_models: [
|
||||||
|
{ name: 'SDXL 1.0', count: 5 },
|
||||||
|
{ name: 'SDXL Lightning', count: 3 },
|
||||||
|
{ name: 'SDXL Hyper', count: 2 },
|
||||||
|
],
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (url.includes('/base-models')) {
|
||||||
|
return Promise.resolve({
|
||||||
|
ok: true,
|
||||||
|
json: async () => ({
|
||||||
|
success: true,
|
||||||
|
base_models: [{ name: 'SDXL 1.0', count: 5 }],
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (url.includes('/top-tags')) {
|
||||||
|
return Promise.resolve({
|
||||||
|
ok: true,
|
||||||
|
json: async () => ({
|
||||||
|
success: true,
|
||||||
|
tags: [],
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (url.includes('/model-types')) {
|
||||||
|
return Promise.resolve({
|
||||||
|
ok: true,
|
||||||
|
json: async () => ({
|
||||||
|
success: true,
|
||||||
|
model_types: [],
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return Promise.resolve({
|
||||||
|
ok: true,
|
||||||
|
json: async () => ({ success: true }),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
renderControlsDom('loras');
|
||||||
|
const stateModule = await import('../../../static/js/state/index.js');
|
||||||
|
stateModule.initPageState('loras');
|
||||||
|
stateModule.state.global.settings.filter_presets = {
|
||||||
|
loras: [
|
||||||
|
{
|
||||||
|
name: 'SDXL Family',
|
||||||
|
filters: {
|
||||||
|
baseModel: ['SDXL 1.0', 'SDXL Lightning', 'SDXL Hyper'],
|
||||||
|
tags: {},
|
||||||
|
license: {},
|
||||||
|
modelTypes: [],
|
||||||
|
tagLogic: 'any',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
|
||||||
|
const { getCurrentPageState } = stateModule;
|
||||||
|
const { FilterManager } = await import('../../../static/js/managers/FilterManager.js');
|
||||||
|
|
||||||
|
const manager = new FilterManager({ page: 'loras' });
|
||||||
|
|
||||||
|
await vi.waitFor(() => {
|
||||||
|
expect(document.querySelector('[data-base-model="SDXL Hyper"]')).not.toBeNull();
|
||||||
|
});
|
||||||
|
|
||||||
|
await manager.presetManager.applyPreset('SDXL Family');
|
||||||
|
|
||||||
|
expect(manager.activePreset).toBe('SDXL Family');
|
||||||
|
expect(manager.filters.baseModel).toEqual(['SDXL 1.0', 'SDXL Lightning', 'SDXL Hyper']);
|
||||||
|
expect(getCurrentPageState().filters.baseModel).toEqual(['SDXL 1.0', 'SDXL Lightning', 'SDXL Hyper']);
|
||||||
|
expect(loadMoreWithVirtualScrollMock).toHaveBeenCalledWith(true, false);
|
||||||
|
expect(showToastMock).toHaveBeenCalledWith(
|
||||||
|
'Preset "SDXL Family" applied',
|
||||||
|
{},
|
||||||
|
'success',
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('PageControls favorites, sorting, and duplicates scenarios', () => {
|
describe('PageControls favorites, sorting, and duplicates scenarios', () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user