feat: 添加 LoRA 类型和反馈控制器,优化数据集名称和目标模型保存功能

This commit is contained in:
Vixalie
2026-03-28 17:53:09 +08:00
parent 7eaafb068d
commit 3a7b21e3e7
4 changed files with 131 additions and 32 deletions
@@ -1,16 +1,65 @@
<script lang="ts">
import { activeDatasetMeta } from '$lib/stores/dataset';
import { onMount } from 'svelte';
import { activeDatasetMeta, updateActiveDatasetMeta } from '$lib/stores/dataset';
import {
createDebouncedTrigger,
createSaveFeedbackController,
type SaveFeedbackState,
} from '$lib/utils/form-save';
import { onDestroy, onMount } from 'svelte';
import { get } from 'svelte/store';
let name = $state('');
let saveFeedback = $state<SaveFeedbackState>('idle');
const feedback = createSaveFeedbackController((state) => {
saveFeedback = state;
});
onMount(() => {
name = get(activeDatasetMeta)?.name ?? '';
});
onDestroy(() => {
saveLater.cancel();
feedback.dispose();
});
async function saveDatasetName(value: string) {
const nextName = value.trim();
if (!nextName) {
feedback.markNotUpdated();
return;
}
try {
await updateActiveDatasetMeta({ name: nextName });
feedback.markUpdated();
} catch (error) {
console.error('Failed to save dataset name:', error);
feedback.markNotUpdated();
}
}
const saveLater = createDebouncedTrigger(() => {
void saveDatasetName(name);
}, 5000);
function saveNameDelayed() {
saveLater.trigger();
}
</script>
<label class="input w-fit in-focus-within:outline-0">
<label
class={[
'input w-fit in-focus-within:outline-0 transition-colors duration-300 ease-out',
saveFeedback === 'updated' && 'border-green-500',
saveFeedback === 'not-updated' && 'border-red-500',
]}>
<span class="label min-w-[10em]">Dataset Name</span>
<input type="text" bind:value={name} class="min-w-[20em] focus:outline-0" />
<input
type="text"
bind:value={name}
oninput={saveNameDelayed}
class="min-w-[20em] focus:outline-0" />
</label>