refactor(ui): simplify filter preset empty state

- Remove default presets and restore defaults functionality
- Unify preset UI: always show '+ Add' button regardless of preset count
- Remove empty state message and restore button to reduce visual clutter
- Clean up unused translation keys (restoreDefaults, noPresets)
- Fix spacing issues in filter panel
This commit is contained in:
Will Miao
2026-01-30 10:25:22 +08:00
parent 233427600a
commit 666db4cdd0
12 changed files with 6 additions and 87 deletions

View File

@@ -216,8 +216,6 @@
"presetDeleteConfirmClick": "Zum Bestätigen erneut klicken", "presetDeleteConfirmClick": "Zum Bestätigen erneut klicken",
"presetOverwriteConfirm": "Voreinstellung \"{name}\" existiert bereits. Überschreiben?", "presetOverwriteConfirm": "Voreinstellung \"{name}\" existiert bereits. Überschreiben?",
"presetNamePlaceholder": "Voreinstellungsname...", "presetNamePlaceholder": "Voreinstellungsname...",
"restoreDefaults": "Standard wiederherstellen",
"noPresets": "Noch keine Voreinstellungen gespeichert. Filter unten auswählen und auf + klicken zum Speichern",
"baseModel": "Basis-Modell", "baseModel": "Basis-Modell",
"modelTags": "Tags (Top 20)", "modelTags": "Tags (Top 20)",
"modelTypes": "Model Types", "modelTypes": "Model Types",

View File

@@ -216,8 +216,6 @@
"presetDeleteConfirmClick": "Click again to confirm", "presetDeleteConfirmClick": "Click again to confirm",
"presetOverwriteConfirm": "Preset \"{name}\" already exists. Overwrite?", "presetOverwriteConfirm": "Preset \"{name}\" already exists. Overwrite?",
"presetNamePlaceholder": "Preset name...", "presetNamePlaceholder": "Preset name...",
"restoreDefaults": "Restore defaults",
"noPresets": "No presets saved yet. Select filters below and click + to save",
"baseModel": "Base Model", "baseModel": "Base Model",
"modelTags": "Tags (Top 20)", "modelTags": "Tags (Top 20)",
"modelTypes": "Model Types", "modelTypes": "Model Types",

View File

@@ -216,8 +216,6 @@
"presetDeleteConfirmClick": "Haga clic de nuevo para confirmar", "presetDeleteConfirmClick": "Haga clic de nuevo para confirmar",
"presetOverwriteConfirm": "El preset \"{name}\" ya existe. ¿Sobrescribir?", "presetOverwriteConfirm": "El preset \"{name}\" ya existe. ¿Sobrescribir?",
"presetNamePlaceholder": "Nombre del preajuste...", "presetNamePlaceholder": "Nombre del preajuste...",
"restoreDefaults": "Restaurar predeterminados",
"noPresets": "Aún no hay preajustes guardados. Seleccione filtros abajo y haga clic en + para guardar",
"baseModel": "Modelo base", "baseModel": "Modelo base",
"modelTags": "Etiquetas (Top 20)", "modelTags": "Etiquetas (Top 20)",
"modelTypes": "Model Types", "modelTypes": "Model Types",

View File

@@ -216,8 +216,6 @@
"presetDeleteConfirmClick": "Cliquez à nouveau pour confirmer", "presetDeleteConfirmClick": "Cliquez à nouveau pour confirmer",
"presetOverwriteConfirm": "Le préréglage \"{name}\" existe déjà. Remplacer?", "presetOverwriteConfirm": "Le préréglage \"{name}\" existe déjà. Remplacer?",
"presetNamePlaceholder": "Nom du préréglage...", "presetNamePlaceholder": "Nom du préréglage...",
"restoreDefaults": "Restaurer les paramètres par défaut",
"noPresets": "Aucun préréglage enregistré. Sélectionnez des filtres ci-dessous et cliquez sur + pour enregistrer",
"baseModel": "Modèle de base", "baseModel": "Modèle de base",
"modelTags": "Tags (Top 20)", "modelTags": "Tags (Top 20)",
"modelTypes": "Model Types", "modelTypes": "Model Types",

View File

@@ -216,8 +216,6 @@
"presetDeleteConfirmClick": "לחץ שוב לאישור", "presetDeleteConfirmClick": "לחץ שוב לאישור",
"presetOverwriteConfirm": "הפריסט \"{name}\" כבר קיים. לדרוס?", "presetOverwriteConfirm": "הפריסט \"{name}\" כבר קיים. לדרוס?",
"presetNamePlaceholder": "שם קביעה מראש...", "presetNamePlaceholder": "שם קביעה מראש...",
"restoreDefaults": "שחזור ברירות מחדל",
"noPresets": "עדיין אין קביעות מראש שמורות. בחר מסננים למטה ולחץ על + כדי לשמור",
"baseModel": "מודל בסיס", "baseModel": "מודל בסיס",
"modelTags": "תגיות (20 המובילות)", "modelTags": "תגיות (20 המובילות)",
"modelTypes": "Model Types", "modelTypes": "Model Types",

View File

@@ -216,8 +216,6 @@
"presetDeleteConfirmClick": "もう一度クリックして確認", "presetDeleteConfirmClick": "もう一度クリックして確認",
"presetOverwriteConfirm": "プリセット「{name}」は既に存在します。上書きしますか?", "presetOverwriteConfirm": "プリセット「{name}」は既に存在します。上書きしますか?",
"presetNamePlaceholder": "プリセット名...", "presetNamePlaceholder": "プリセット名...",
"restoreDefaults": "デフォルトを復元",
"noPresets": "まだプリセットが保存されていません。下のフィルタを選択して+をクリックして保存",
"baseModel": "ベースモデル", "baseModel": "ベースモデル",
"modelTags": "タグ上位20", "modelTags": "タグ上位20",
"modelTypes": "Model Types", "modelTypes": "Model Types",

View File

@@ -216,8 +216,6 @@
"presetDeleteConfirmClick": "다시 클릭하여 확인", "presetDeleteConfirmClick": "다시 클릭하여 확인",
"presetOverwriteConfirm": "프리셋 \"{name}\"이(가) 이미 존재합니다. 덮어쓰시겠습니까?", "presetOverwriteConfirm": "프리셋 \"{name}\"이(가) 이미 존재합니다. 덮어쓰시겠습니까?",
"presetNamePlaceholder": "프리셋 이름...", "presetNamePlaceholder": "프리셋 이름...",
"restoreDefaults": "기본값 복원",
"noPresets": "저장된 프리셋이 없습니다. 아래 필터를 선택하고 +를 클릭하여 저장",
"baseModel": "베이스 모델", "baseModel": "베이스 모델",
"modelTags": "태그 (상위 20개)", "modelTags": "태그 (상위 20개)",
"modelTypes": "Model Types", "modelTypes": "Model Types",

View File

@@ -216,8 +216,6 @@
"presetDeleteConfirmClick": "Нажмите еще раз для подтверждения", "presetDeleteConfirmClick": "Нажмите еще раз для подтверждения",
"presetOverwriteConfirm": "Пресет \"{name}\" уже существует. Перезаписать?", "presetOverwriteConfirm": "Пресет \"{name}\" уже существует. Перезаписать?",
"presetNamePlaceholder": "Имя пресета...", "presetNamePlaceholder": "Имя пресета...",
"restoreDefaults": "Восстановить по умолчанию",
"noPresets": "Пресеты еще не сохранены. Выберите фильтры ниже и нажмите + для сохранения",
"baseModel": "Базовая модель", "baseModel": "Базовая модель",
"modelTags": "Теги (Топ 20)", "modelTags": "Теги (Топ 20)",
"modelTypes": "Model Types", "modelTypes": "Model Types",

View File

@@ -216,8 +216,6 @@
"presetDeleteConfirmClick": "再次点击确认", "presetDeleteConfirmClick": "再次点击确认",
"presetOverwriteConfirm": "预设 \"{name}\" 已存在。是否覆盖?", "presetOverwriteConfirm": "预设 \"{name}\" 已存在。是否覆盖?",
"presetNamePlaceholder": "预设名称...", "presetNamePlaceholder": "预设名称...",
"restoreDefaults": "恢复默认",
"noPresets": "尚未保存预设。选择下方筛选器并点击 + 保存",
"baseModel": "基础模型", "baseModel": "基础模型",
"modelTags": "标签前20", "modelTags": "标签前20",
"modelTypes": "Model Types", "modelTypes": "Model Types",

View File

@@ -216,8 +216,6 @@
"presetDeleteConfirmClick": "再次點擊確認", "presetDeleteConfirmClick": "再次點擊確認",
"presetOverwriteConfirm": "預設 \"{name}\" 已存在。是否覆蓋?", "presetOverwriteConfirm": "預設 \"{name}\" 已存在。是否覆蓋?",
"presetNamePlaceholder": "預設名稱...", "presetNamePlaceholder": "預設名稱...",
"restoreDefaults": "恢復預設",
"noPresets": "尚未儲存預設。選擇下方篩選器並點擊 + 儲存",
"baseModel": "基礎模型", "baseModel": "基礎模型",
"modelTags": "標籤(前 20", "modelTags": "標籤(前 20",
"modelTypes": "Model Types", "modelTypes": "Model Types",

View File

@@ -660,15 +660,7 @@
to { opacity: 1; } to { opacity: 1; }
} }
.no-presets {
width: 100%;
padding: 12px 8px;
text-align: center;
font-size: 0.9em;
color: var(--text-color);
opacity: 0.6;
font-style: italic;
}
/* Mobile adjustments */ /* Mobile adjustments */
@media (max-width: 768px) { @media (max-width: 768px) {

View File

@@ -195,9 +195,6 @@ export class FilterPresetManager {
} }
if (!presets) { if (!presets) {
if (this.currentPage === 'loras') {
return this.getDefaultPresets();
}
return []; return [];
} }
@@ -213,28 +210,12 @@ export class FilterPresetManager {
return true; return true;
}); });
if (validPresets.length === 0 && this.currentPage === 'loras') {
return this.getDefaultPresets();
}
return validPresets; return validPresets;
} }
getDefaultPresets() {
return [
{
name: "WAN Models",
filters: {
baseModel: ["Wan Video*"],
tags: {},
license: {},
modelTypes: []
},
createdAt: Date.now(),
isDefault: true
}
];
}
/** /**
* Resolve base model patterns to actual available models * Resolve base model patterns to actual available models
@@ -542,16 +523,7 @@ export class FilterPresetManager {
return Array.isArray(localPresets) && localPresets.length > 0; return Array.isArray(localPresets) && localPresets.length > 0;
} }
async restoreDefaultPresets() {
const defaultPresets = this.getDefaultPresets();
await this.savePresets(defaultPresets);
this.renderPresets();
showToast(
translate('toast.presets.restored', {}, 'Default presets restored'),
{},
'success'
);
}
/** /**
* Check if the add button should be disabled * Check if the add button should be disabled
@@ -763,31 +735,6 @@ export class FilterPresetManager {
const presets = this.loadPresets(); const presets = this.loadPresets();
presetsContainer.innerHTML = ''; presetsContainer.innerHTML = '';
// Show empty state with restore option if no presets
if (presets.length === 0) {
const emptyState = document.createElement('div');
emptyState.className = 'presets-empty-state';
emptyState.style.cssText = 'width: 100%; padding: 12px; text-align: center;';
const noPresetsMsg = document.createElement('div');
noPresetsMsg.className = 'no-presets';
noPresetsMsg.style.cssText = 'margin-bottom: 8px;';
noPresetsMsg.textContent = translate('header.filter.noPresets', {}, 'No presets saved yet. Select filters below and click + to save');
const restoreLink = document.createElement('button');
restoreLink.className = 'restore-defaults-btn';
restoreLink.style.cssText = 'background: none; border: none; color: var(--lora-accent); cursor: pointer; font-size: 13px; text-decoration: underline; padding: 4px 8px;';
restoreLink.textContent = translate('header.filter.restoreDefaults', {}, 'Restore defaults');
restoreLink.addEventListener('click', (e) => {
e.stopPropagation();
this.restoreDefaultPresets();
});
emptyState.appendChild(noPresetsMsg);
emptyState.appendChild(restoreLink);
presetsContainer.appendChild(emptyState);
}
// Render existing presets // Render existing presets
presets.forEach(preset => { presets.forEach(preset => {
const presetEl = document.createElement('div'); const presetEl = document.createElement('div');
@@ -840,7 +787,7 @@ export class FilterPresetManager {
presetsContainer.appendChild(presetEl); presetsContainer.appendChild(presetEl);
}); });
// Add the "Add new preset" button as the last element // Add the "Add new preset" button (always shown, unified style)
const addBtn = document.createElement('div'); const addBtn = document.createElement('div');
addBtn.className = 'filter-preset add-preset-btn'; addBtn.className = 'filter-preset add-preset-btn';
addBtn.innerHTML = `<i class="fas fa-plus"></i> ${translate('common.actions.add', {}, 'Add')}`; addBtn.innerHTML = `<i class="fas fa-plus"></i> ${translate('common.actions.add', {}, 'Add')}`;
@@ -854,7 +801,7 @@ export class FilterPresetManager {
presetsContainer.appendChild(addBtn); presetsContainer.appendChild(addBtn);
// Update add button state // Update add button state (handles disabled state based on filters)
this.updateAddButtonState(); this.updateAddButtonState();
} }