From ba43494d3292cf1d03f012e95b20c7a7bcdee331 Mon Sep 17 00:00:00 2001 From: DrJKL Date: Wed, 26 Nov 2025 18:13:55 -0800 Subject: [PATCH] WIP: Deleting assets, UI only, also not wired up --- src/components/dialog/GlobalDialog.vue | 1 + src/components/dialog/confirm/ConfirmBody.vue | 14 +++++++ .../dialog/confirm/ConfirmFooter.vue | 38 +++++++++++++++++++ .../dialog/confirm/ConfirmHeader.vue | 12 ++++++ .../dialog/confirm/confirmDialog.ts | 31 +++++++++++++++ src/platform/assets/components/AssetCard.vue | 36 +++++++++++++++++- .../assets/components/UploadModelDialog.vue | 2 +- src/stores/dialogStore.ts | 18 ++++----- 8 files changed, 139 insertions(+), 13 deletions(-) create mode 100644 src/components/dialog/confirm/ConfirmBody.vue create mode 100644 src/components/dialog/confirm/ConfirmFooter.vue create mode 100644 src/components/dialog/confirm/ConfirmHeader.vue create mode 100644 src/components/dialog/confirm/confirmDialog.ts diff --git a/src/components/dialog/GlobalDialog.vue b/src/components/dialog/GlobalDialog.vue index 4566b0684..2074132b5 100644 --- a/src/components/dialog/GlobalDialog.vue +++ b/src/components/dialog/GlobalDialog.vue @@ -14,6 +14,7 @@

diff --git a/src/components/dialog/confirm/ConfirmBody.vue b/src/components/dialog/confirm/ConfirmBody.vue new file mode 100644 index 000000000..30fe57c8e --- /dev/null +++ b/src/components/dialog/confirm/ConfirmBody.vue @@ -0,0 +1,14 @@ + + diff --git a/src/components/dialog/confirm/ConfirmFooter.vue b/src/components/dialog/confirm/ConfirmFooter.vue new file mode 100644 index 000000000..51b275b3d --- /dev/null +++ b/src/components/dialog/confirm/ConfirmFooter.vue @@ -0,0 +1,38 @@ + + diff --git a/src/components/dialog/confirm/ConfirmHeader.vue b/src/components/dialog/confirm/ConfirmHeader.vue new file mode 100644 index 000000000..3c8337733 --- /dev/null +++ b/src/components/dialog/confirm/ConfirmHeader.vue @@ -0,0 +1,12 @@ + + diff --git a/src/components/dialog/confirm/confirmDialog.ts b/src/components/dialog/confirm/confirmDialog.ts new file mode 100644 index 000000000..c615e6475 --- /dev/null +++ b/src/components/dialog/confirm/confirmDialog.ts @@ -0,0 +1,31 @@ +import ConfirmBody from '@/components/dialog/confirm/ConfirmBody.vue' +import ConfirmFooter from '@/components/dialog/confirm/ConfirmFooter.vue' +import ConfirmHeader from '@/components/dialog/confirm/ConfirmHeader.vue' +import { useDialogStore } from '@/stores/dialogStore' +import type { ComponentAttrs } from 'vue-component-type-helpers' + +interface ConfirmDialogOptions { + headerProps?: ComponentAttrs + props?: ComponentAttrs + footerProps?: ComponentAttrs +} + +export function showConfirmDialog(options: ConfirmDialogOptions = {}) { + const dialogStore = useDialogStore() + const { headerProps, props, footerProps } = options + return dialogStore.showDialog({ + headerComponent: ConfirmHeader, + component: ConfirmBody, + footerComponent: ConfirmFooter, + headerProps, + props, + footerProps, + dialogComponentProps: { + pt: { + header: 'py-0! px-0!', + content: 'p-0!', + footer: 'p-0!' + } + } + }) +} diff --git a/src/platform/assets/components/AssetCard.vue b/src/platform/assets/components/AssetCard.vue index c974dd643..fabc076fc 100644 --- a/src/platform/assets/components/AssetCard.vue +++ b/src/platform/assets/components/AssetCard.vue @@ -54,7 +54,12 @@ - + @@ -120,9 +125,11 @@ import IconGroup from '@/components/button/IconGroup.vue' import IconTextButton from '@/components/button/IconTextButton.vue' import MoreButton from '@/components/button/MoreButton.vue' import EditableText from '@/components/common/EditableText.vue' +import { showConfirmDialog } from '@/components/dialog/confirm/confirmDialog' import AssetBadgeGroup from '@/platform/assets/components/AssetBadgeGroup.vue' import type { AssetDisplayItem } from '@/platform/assets/composables/useAssetBrowser' import { useSettingStore } from '@/platform/settings/settingStore' +import { useDialogStore } from '@/stores/dialogStore' import { cn } from '@/utils/tailwindUtil' const { asset, interactive } = defineProps<{ @@ -135,6 +142,7 @@ defineEmits<{ }>() const settingStore = useSettingStore() +const { closeDialog } = useDialogStore() const dropdownMenuButton = useTemplateRef>( 'dropdown-menu-button' @@ -155,6 +163,32 @@ const { isLoading, error } = useImage({ alt: asset.name }) +async function confirmDeletion() { + dropdownMenuButton.value?.hide() + const confirmDialog = showConfirmDialog({ + headerProps: { + title: 'Delete this model?' + }, + props: { + confirmationText: + 'This model will be permanently removed from your library.' + }, + footerProps: { + confirmText: 'Delete', + // TODO: These need to be put into the new Button Variants once we have them. + confirmClass: cn( + 'bg-danger-200 text-base-foreground hover:bg-danger-200/80 focus:bg-danger-200/80 focus:ring ring-base-foreground' + ), + onCancel: () => { + closeDialog(confirmDialog) + }, + onConfirm: () => { + closeDialog(confirmDialog) + } + } + }) +} + function startAssetRename() { dropdownMenuButton.value?.hide() isEditing.value = true diff --git a/src/platform/assets/components/UploadModelDialog.vue b/src/platform/assets/components/UploadModelDialog.vue index 159f852a2..e6c19e25e 100644 --- a/src/platform/assets/components/UploadModelDialog.vue +++ b/src/platform/assets/components/UploadModelDialog.vue @@ -1,6 +1,6 @@