fix: address PR review feedback for keybinding presets

- Use file-input icon instead of download for import action
- Replace custom delete dialog with dialogService.confirm
- Add 3s timeout to all keybinding preset toast notifications
This commit is contained in:
Johnpaul
2026-03-16 17:45:40 +01:00
parent 1b32add744
commit 5779972811
4 changed files with 12 additions and 65 deletions

View File

@@ -1,31 +0,0 @@
<template>
<div
class="flex w-full max-w-[420px] flex-col border-t border-border-default"
>
<div class="flex flex-col gap-4 p-4">
<p class="m-0 text-sm text-muted-foreground">
{{ $t('g.keybindingPresets.deletePresetWarning') }}
</p>
<div class="flex justify-end gap-2">
<Button
variant="textonly"
class="text-muted-foreground"
@click="onResult(false)"
>
{{ $t('g.close') }}
</Button>
<Button variant="secondary" @click="onResult(true)">
{{ $t('g.delete') }}
</Button>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import Button from '@/components/ui/button/Button.vue'
const { onResult } = defineProps<{
onResult: (result: boolean) => void
}>()
</script>

View File

@@ -1,7 +0,0 @@
<template>
<div class="flex w-full items-center p-4">
<p class="m-0 text-sm font-medium">
{{ $t('g.keybindingPresets.deletePresetTitle') }}
</p>
</div>
</template>

View File

@@ -34,7 +34,7 @@
{{ $t('g.keybindingPresets.importKeybindingPreset') }}
</span>
<i
class="icon-[lucide--download] shrink-0 text-base-foreground"
class="icon-[lucide--file-input] shrink-0 text-base-foreground"
aria-hidden="true"
/>
</button>

View File

@@ -2,8 +2,6 @@ import { toRaw } from 'vue'
import { fromZodError } from 'zod-validation-error'
import { downloadBlob } from '@/base/common/downloadUtil'
import DeletePresetContent from '@/components/dialog/content/setting/keybinding/DeletePresetContent.vue'
import DeletePresetHeader from '@/components/dialog/content/setting/keybinding/DeletePresetHeader.vue'
import UnsavedChangesContent from '@/components/dialog/content/setting/keybinding/UnsavedChangesContent.vue'
import UnsavedChangesHeader from '@/components/dialog/content/setting/keybinding/UnsavedChangesHeader.vue'
import { useErrorHandling } from '@/composables/useErrorHandling'
@@ -67,28 +65,8 @@ export function useKeybindingPresetService() {
await settingStore.set('Comfy.Keybinding.CurrentPreset', 'default')
}
const DELETE_DIALOG_KEY = 'delete-keybinding-preset'
const UNSAVED_DIALOG_KEY = 'unsaved-keybinding-changes'
function showDeletePresetDialog(): Promise<boolean> {
return new Promise((resolve) => {
dialogService.showSmallLayoutDialog({
key: DELETE_DIALOG_KEY,
headerComponent: DeletePresetHeader,
component: DeletePresetContent,
props: {
onResult: (result: boolean) => {
resolve(result)
dialogStore.closeDialog({ key: DELETE_DIALOG_KEY })
}
},
dialogComponentProps: {
onClose: () => resolve(false)
}
})
})
}
function showUnsavedChangesDialog(
presetName: string
): Promise<boolean | null> {
@@ -159,12 +137,17 @@ export function useKeybindingPresetService() {
await settingStore.set('Comfy.Keybinding.CurrentPreset', name)
toast.add({
severity: 'success',
summary: t('g.keybindingPresets.presetSaved', { name })
summary: t('g.keybindingPresets.presetSaved', { name }),
life: 3000
})
}
async function deletePreset(name: string) {
const confirmed = await showDeletePresetDialog()
const confirmed = await dialogService.confirm({
title: t('g.keybindingPresets.deletePresetTitle'),
message: t('g.keybindingPresets.deletePresetWarning'),
type: 'delete'
})
if (!confirmed) return
const resp = await api.deleteUserData(presetFilePath(name))
@@ -178,7 +161,8 @@ export function useKeybindingPresetService() {
toast.add({
severity: 'info',
summary: t('g.keybindingPresets.presetDeleted', { name })
summary: t('g.keybindingPresets.presetDeleted', { name }),
life: 3000
})
}
@@ -226,7 +210,8 @@ export function useKeybindingPresetService() {
toast.add({
severity: 'success',
summary: t('g.keybindingPresets.presetImported')
summary: t('g.keybindingPresets.presetImported'),
life: 3000
})
}