Переглянути джерело

fix: drop parittion always shows success even failed (#827)

Signed-off-by: shanghaikid <jiangruiyi@gmail.com>
ryjiang 4 місяців тому
батько
коміт
95978c0f81

+ 2 - 1
client/src/http/Partition.service.ts

@@ -4,6 +4,7 @@ import type {
   PartitionManageParam,
   PartitionParam,
 } from '@/pages/databases/collections/partitions/Types';
+import { ResStatus } from '@server/types';
 
 export class PartitionService extends BaseModel {
   static getPartitions(collectionName: string) {
@@ -17,7 +18,7 @@ export class PartitionService extends BaseModel {
 
   static managePartition(param: PartitionManageParam) {
     const { collectionName, partitionName, type } = param;
-    return super.create({
+    return super.create<ResStatus>({
       path: `/partitions`,
       data: {
         collection_name: collectionName,

+ 15 - 3
client/src/pages/databases/collections/partitions/Partitions.tsx

@@ -16,7 +16,7 @@ import DropPartitionDialog from '@/pages/dialogs/DropPartitionDialog';
 import { formatNumber } from '@/utils';
 import { getLabelDisplayedRows } from '@/pages/search/Utils';
 import { makeStyles } from '@mui/styles';
-import type { PartitionData } from '@server/types';
+import type { PartitionData, ResStatus } from '@server/types';
 
 const useStyles = makeStyles((theme: Theme) => ({
   wrapper: {
@@ -89,9 +89,21 @@ const Partitions = () => {
   } = usePaginationHook(list);
 
   // on delete
-  const onDelete = () => {
-    openSnackBar(successTrans('delete', { name: t('partition') }));
+  const onDelete = (res: ResStatus[]) => {
+    let hasError = false;
+    res.forEach(r => {
+      if (r.error_code !== 'Success') {
+        console.log('delete error', r);
+        openSnackBar(r.reason, 'error');
+        hasError = true;
+        return;
+      }
+    });
+
     fetchPartitions(collectionName);
+
+    if (hasError) return;
+    openSnackBar(successTrans('delete', { name: t('partition') }));
   };
 
   // on handle search

+ 11 - 3
client/src/pages/dialogs/DropPartitionDialog.tsx

@@ -5,7 +5,14 @@ import DeleteTemplate from '@/components/customDialog/DeleteDialogTemplate';
 import { PartitionService } from '@/http';
 import { PartitionManageParam } from '../databases/collections/partitions/Types';
 import { ManageRequestMethods } from '@/consts';
-import { DropPartitionProps } from './Types';
+import type { PartitionData } from '@server/types';
+import { ResStatus } from '@server/types';
+
+export interface DropPartitionProps {
+  partitions: PartitionData[];
+  collectionName: string;
+  onDelete: (res: ResStatus[]) => void;
+}
 
 const DropPartitionDialog: FC<DropPartitionProps> = props => {
   const { partitions, onDelete, collectionName } = props;
@@ -15,17 +22,18 @@ const DropPartitionDialog: FC<DropPartitionProps> = props => {
   const { t: dialogTrans } = useTranslation('dialog');
 
   const handleDelete = async () => {
+    const res = [];
     for (const partition of partitions) {
       const param: PartitionManageParam = {
         partitionName: partition.name,
         collectionName,
         type: ManageRequestMethods.DELETE,
       };
-      await PartitionService.managePartition(param);
+      res.push(await PartitionService.managePartition(param));
     }
 
     handleCloseDialog();
-    onDelete && onDelete();
+    onDelete && onDelete(res);
   };
 
   return (

+ 0 - 6
client/src/pages/dialogs/Types.ts

@@ -5,12 +5,6 @@ export interface DropCollectionProps {
   onDelete: () => void;
 }
 
-export interface DropPartitionProps {
-  partitions: PartitionData[];
-  collectionName: string;
-  onDelete: () => void;
-}
-
 export interface PartitionCreateProps {
   onCreate: (collectionName: string) => void;
   collectionName: string;