Skip to content

Commit e5fd4e0

Browse files
committed
feat(FR-2845): warn about cascading model card deletions when deleting associated vfolder
1 parent 7a4501f commit e5fd4e0

22 files changed

Lines changed: 107 additions & 36 deletions

react/src/pages/AdminModelCardListPage.tsx

Lines changed: 65 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@ import { useBAIPaginationOptionStateOnSearchParam } from '../hooks/reactPaginati
1818
import { useSetBAINotification } from '../hooks/useBAINotification';
1919
import { useBAISettingUserState } from '../hooks/useBAISetting';
2020
import { useCurrentProjectValue } from '../hooks/useCurrentProject';
21-
import { DeleteFilled, SettingOutlined } from '@ant-design/icons';
21+
import {
22+
DeleteFilled,
23+
ExclamationCircleFilled,
24+
SettingOutlined,
25+
} from '@ant-design/icons';
2226
import { App, Checkbox, Tooltip, Typography, theme } from 'antd';
2327
import {
2428
BAIButton,
@@ -42,6 +46,7 @@ import {
4246
toLocalId,
4347
useBAILogger,
4448
useFetchKey,
49+
BAIAlert,
4550
} from 'backend.ai-ui';
4651
import dayjs from 'dayjs';
4752
import * as _ from 'lodash-es';
@@ -465,35 +470,47 @@ const AdminModelCardListPage: React.FC = () => {
465470
})}
466471
requireConfirmInput
467472
extraContent={
468-
<BAIFlex align="center" gap="xs">
469-
<Tooltip title={t('adminModelCard.AlsoDeleteModelFolderTooltip')}>
470-
<Checkbox
471-
checked={alsoDeleteFolder}
472-
onChange={(e) => setAlsoDeleteFolder(e.target.checked)}
473+
<BAIFlex direction="column" align="stretch" gap="xs">
474+
<BAIFlex align="start" gap="xs">
475+
<Tooltip title={t('adminModelCard.AlsoDeleteModelFolderTooltip')}>
476+
<Checkbox
477+
checked={alsoDeleteFolder}
478+
onChange={(e) => setAlsoDeleteFolder(e.target.checked)}
479+
/>
480+
</Tooltip>
481+
<span>
482+
{t('adminModelCard.AlsoDeleteModelFolder')}
483+
{deletingModelCard?.vfolder && (
484+
<span style={{ marginLeft: token.marginXXS }}>
485+
{'('}
486+
<VFolderNodeIdenticonV2
487+
vfolderNodeIdenticonFrgmt={deletingModelCard.vfolder}
488+
style={{
489+
verticalAlign: 'middle',
490+
marginInline: token.marginXXS,
491+
}}
492+
/>
493+
<BAILink
494+
to={generateFolderPath(deletingModelCard.vfolderId)}
495+
onClick={(e) => e.stopPropagation()}
496+
>
497+
{deletingModelCard.vfolder.metadata.name}
498+
</BAILink>
499+
{')'}
500+
</span>
501+
)}
502+
</span>
503+
</BAIFlex>
504+
{alsoDeleteFolder && (
505+
<BAIAlert
506+
type="error"
507+
icon={<ExclamationCircleFilled />}
508+
showIcon
509+
description={t(
510+
'adminModelCard.AlsoDeleteModelFolderCascadeWarning',
511+
)}
473512
/>
474-
</Tooltip>
475-
<span>
476-
{t('adminModelCard.AlsoDeleteModelFolder')}
477-
{deletingModelCard?.vfolder && (
478-
<span style={{ marginLeft: token.marginXXS }}>
479-
{'('}
480-
<VFolderNodeIdenticonV2
481-
vfolderNodeIdenticonFrgmt={deletingModelCard.vfolder}
482-
style={{
483-
verticalAlign: 'middle',
484-
marginInline: token.marginXXS,
485-
}}
486-
/>
487-
<BAILink
488-
to={generateFolderPath(deletingModelCard.vfolderId)}
489-
onClick={(e) => e.stopPropagation()}
490-
>
491-
{deletingModelCard.vfolder.metadata.name}
492-
</BAILink>
493-
{')'}
494-
</span>
495-
)}
496-
</span>
513+
)}
497514
</BAIFlex>
498515
}
499516
onOk={() => {
@@ -572,14 +589,26 @@ const AdminModelCardListPage: React.FC = () => {
572589
count: selectedModelCards.length,
573590
})}
574591
extraContent={
575-
<BAIFlex align="center" gap="xs">
576-
<Tooltip title={t('adminModelCard.AlsoDeleteModelFolderTooltip')}>
577-
<Checkbox
578-
checked={alsoDeleteFoldersBulk}
579-
onChange={(e) => setAlsoDeleteFoldersBulk(e.target.checked)}
592+
<BAIFlex direction="column" align="stretch" gap="xs">
593+
<BAIFlex align="center" gap="xs">
594+
<Tooltip title={t('adminModelCard.AlsoDeleteModelFolderTooltip')}>
595+
<Checkbox
596+
checked={alsoDeleteFoldersBulk}
597+
onChange={(e) => setAlsoDeleteFoldersBulk(e.target.checked)}
598+
/>
599+
</Tooltip>
600+
<span>{t('adminModelCard.AlsoDeleteModelFolders')}</span>
601+
</BAIFlex>
602+
{alsoDeleteFoldersBulk && (
603+
<BAIAlert
604+
type="error"
605+
icon={<ExclamationCircleFilled />}
606+
showIcon
607+
description={t(
608+
'adminModelCard.AlsoDeleteModelFoldersCascadeWarning',
609+
)}
580610
/>
581-
</Tooltip>
582-
<span>{t('adminModelCard.AlsoDeleteModelFolders')}</span>
611+
)}
583612
</BAIFlex>
584613
}
585614
onOk={() => {

resources/i18n/de.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,10 @@
126126
"AddFramework": "Framework hinzufügen",
127127
"AddLabel": "Etikett hinzufügen",
128128
"AlsoDeleteModelFolder": "Zugehörigen Modellordner ebenfalls löschen",
129+
"AlsoDeleteModelFolderCascadeWarning": "Das Löschen des zugehörigen Modellordners löscht auch alle Modellkarten, die ihn verwenden.",
129130
"AlsoDeleteModelFolderTooltip": "Der Modellordner wird in den Papierkorb verschoben. Sie können ihn dauerhaft unter Daten > Papierkorb löschen.",
130131
"AlsoDeleteModelFolders": "Zugehörige Modellordner ebenfalls löschen",
132+
"AlsoDeleteModelFoldersCascadeWarning": "Das Löschen der zugehörigen Modellordner löscht auch alle Modellkarten, die sie verwenden.",
131133
"Architecture": "Architektur",
132134
"ArchitectureTooltip": "Die Modellarchitektur (z. B. Transformer, CNN, RNN).",
133135
"Author": "Autor",

resources/i18n/el.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,10 @@
126126
"AddFramework": "Προσθήκη πλαισίου",
127127
"AddLabel": "Προσθήκη ετικέτας",
128128
"AlsoDeleteModelFolder": "Διαγραφή του συσχετισμένου φακέλου μοντέλου",
129+
"AlsoDeleteModelFolderCascadeWarning": "Η διαγραφή του συσχετισμένου φακέλου μοντέλου θα διαγράψει επίσης κάθε κάρτα μοντέλου που τον χρησιμοποιεί.",
129130
"AlsoDeleteModelFolderTooltip": "Ο φάκελος μοντέλου θα μετακινηθεί στα σκουπίδια. Μπορείτε να τον διαγράψετε οριστικά από Δεδομένα > Σκουπίδια.",
130131
"AlsoDeleteModelFolders": "Διαγραφή των συσχετισμένων φακέλων μοντέλου",
132+
"AlsoDeleteModelFoldersCascadeWarning": "Η διαγραφή των συσχετισμένων φακέλων μοντέλου θα διαγράψει επίσης κάθε κάρτα μοντέλου που τους χρησιμοποιεί.",
131133
"Architecture": "Αρχιτεκτονική",
132134
"ArchitectureTooltip": "Η αρχιτεκτονική μοντέλου (π.χ. Transformer, CNN, RNN).",
133135
"Author": "Συγγραφέας",

resources/i18n/en.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,10 @@
126126
"AddFramework": "Add framework",
127127
"AddLabel": "Add label",
128128
"AlsoDeleteModelFolder": "Also delete the associated model folder",
129+
"AlsoDeleteModelFolderCascadeWarning": "Deleting the associated model folder will also delete every model card that uses it.",
129130
"AlsoDeleteModelFolderTooltip": "The model folder will be moved to trash. You can permanently delete it from Data > Trash.",
130131
"AlsoDeleteModelFolders": "Also delete the associated model folders",
132+
"AlsoDeleteModelFoldersCascadeWarning": "Deleting the associated model folders will also delete every model card that uses them.",
131133
"Architecture": "Architecture",
132134
"ArchitectureTooltip": "The model architecture (e.g., Transformer, CNN, RNN).",
133135
"Author": "Author",

resources/i18n/es.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,10 @@
126126
"AddFramework": "Agregar framework",
127127
"AddLabel": "Agregar etiqueta",
128128
"AlsoDeleteModelFolder": "Eliminar también la carpeta del modelo asociada",
129+
"AlsoDeleteModelFolderCascadeWarning": "Eliminar la carpeta del modelo asociada también eliminará todas las tarjetas de modelo que la utilicen.",
129130
"AlsoDeleteModelFolderTooltip": "La carpeta del modelo se moverá a la papelera. Puede eliminarla permanentemente desde Datos > Papelera.",
130131
"AlsoDeleteModelFolders": "Eliminar también las carpetas del modelo asociadas",
132+
"AlsoDeleteModelFoldersCascadeWarning": "Eliminar las carpetas del modelo asociadas también eliminará todas las tarjetas de modelo que las utilicen.",
131133
"Architecture": "Arquitectura",
132134
"ArchitectureTooltip": "La arquitectura del modelo (p. ej., Transformer, CNN, RNN).",
133135
"Author": "Autor",

resources/i18n/fi.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,10 @@
126126
"AddFramework": "Lisää kehys",
127127
"AddLabel": "Lisää tunniste",
128128
"AlsoDeleteModelFolder": "Poista myös siihen liittyvä mallinkansio",
129+
"AlsoDeleteModelFolderCascadeWarning": "Liittyvän mallikansion poistaminen poistaa myös kaikki mallikortit, jotka käyttävät sitä.",
129130
"AlsoDeleteModelFolderTooltip": "Mallinkansio siirretään roskakoriin. Voit poistaa sen pysyvästi kohdasta Data > Roskat.",
130131
"AlsoDeleteModelFolders": "Poista myös niihin liittyvät mallikansiot",
132+
"AlsoDeleteModelFoldersCascadeWarning": "Liittyvien mallikansioiden poistaminen poistaa myös kaikki mallikortit, jotka käyttävät niitä.",
131133
"Architecture": "Arkkitehtuuri",
132134
"ArchitectureTooltip": "Malliarkkitehtuuri (esim. Transformer, CNN, RNN).",
133135
"Author": "Tekijä",

resources/i18n/fr.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,10 @@
126126
"AddFramework": "Ajouter un framework",
127127
"AddLabel": "Ajouter une étiquette",
128128
"AlsoDeleteModelFolder": "Supprimer également le dossier de modèle associé",
129+
"AlsoDeleteModelFolderCascadeWarning": "La suppression du dossier de modèle associé supprimera également toutes les fiches de modèle qui l'utilisent.",
129130
"AlsoDeleteModelFolderTooltip": "Le dossier de modèle sera déplacé vers la poubelle. Vous pouvez le supprimer définitivement depuis Données > Poubelle.",
130131
"AlsoDeleteModelFolders": "Supprimer également les dossiers de modèle associés",
132+
"AlsoDeleteModelFoldersCascadeWarning": "La suppression des dossiers de modèle associés supprimera également toutes les fiches de modèle qui les utilisent.",
131133
"Architecture": "Architecture",
132134
"ArchitectureTooltip": "L'architecture du modèle (ex. : Transformer, CNN, RNN).",
133135
"Author": "Auteur",

resources/i18n/id.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,10 @@
126126
"AddFramework": "Tambah kerangka kerja",
127127
"AddLabel": "Tambah label",
128128
"AlsoDeleteModelFolder": "Hapus juga folder model yang terkait",
129+
"AlsoDeleteModelFolderCascadeWarning": "Menghapus folder model yang terkait juga akan menghapus setiap kartu model yang menggunakannya.",
129130
"AlsoDeleteModelFolderTooltip": "Folder model akan dipindahkan ke tempat sampah. Anda dapat menghapusnya secara permanen dari Data > Sampah.",
130131
"AlsoDeleteModelFolders": "Hapus juga folder-folder model yang terkait",
132+
"AlsoDeleteModelFoldersCascadeWarning": "Menghapus folder-folder model yang terkait juga akan menghapus setiap kartu model yang menggunakannya.",
131133
"Architecture": "Arsitektur",
132134
"ArchitectureTooltip": "Arsitektur model (mis. Transformer, CNN, RNN).",
133135
"Author": "Pengarang",

resources/i18n/it.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,10 @@
126126
"AddFramework": "Aggiungi framework",
127127
"AddLabel": "Aggiungi etichetta",
128128
"AlsoDeleteModelFolder": "Elimina anche la cartella del modello associata",
129+
"AlsoDeleteModelFolderCascadeWarning": "L'eliminazione della cartella del modello associata eliminerà anche ogni scheda modello che la utilizza.",
129130
"AlsoDeleteModelFolderTooltip": "La cartella del modello verrà spostata nel cestino. Puoi eliminarla definitivamente da Dati > Rifiuti.",
130131
"AlsoDeleteModelFolders": "Elimina anche le cartelle del modello associate",
132+
"AlsoDeleteModelFoldersCascadeWarning": "L'eliminazione delle cartelle del modello associate eliminerà anche ogni scheda modello che le utilizza.",
131133
"Architecture": "Architettura",
132134
"ArchitectureTooltip": "L'architettura del modello (es. Transformer, CNN, RNN).",
133135
"Author": "Autore",

resources/i18n/ja.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,10 @@
126126
"AddFramework": "フレームワークを追加",
127127
"AddLabel": "ラベルを追加",
128128
"AlsoDeleteModelFolder": "関連するモデルフォルダも削除する",
129+
"AlsoDeleteModelFolderCascadeWarning": "関連するモデルフォルダを削除すると、それを使用しているすべてのモデルカードも削除されます。",
129130
"AlsoDeleteModelFolderTooltip": "モデルフォルダはゴミ箱に移動されます。データ > ゴミ箱から完全に削除できます。",
130131
"AlsoDeleteModelFolders": "関連するモデルフォルダをすべて削除する",
132+
"AlsoDeleteModelFoldersCascadeWarning": "関連するモデルフォルダをすべて削除すると、それらを使用しているすべてのモデルカードも削除されます。",
131133
"Architecture": "アーキテクチャ",
132134
"ArchitectureTooltip": "モデルのアーキテクチャです (例: Transformer, CNN, RNN)。",
133135
"Author": "著者",

0 commit comments

Comments
 (0)