diff --git a/frontend/src/pages/xray/balancers/BalancersTab.tsx b/frontend/src/pages/xray/balancers/BalancersTab.tsx index dffc1f719..001e986ea 100644 --- a/frontend/src/pages/xray/balancers/BalancersTab.tsx +++ b/frontend/src/pages/xray/balancers/BalancersTab.tsx @@ -1,13 +1,14 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; -import { Button, Divider, Dropdown, Empty, Modal, Radio, Select, Space, Table, Tag, Tooltip } from 'antd'; -import { PlusOutlined, MoreOutlined, EditOutlined, DeleteOutlined, SyncOutlined } from '@ant-design/icons'; +import { Button, Dropdown, Empty, Modal, Select, Space, Table, Tabs, Tag, Tooltip } from 'antd'; +import { PlusOutlined, MoreOutlined, EditOutlined, DeleteOutlined, SyncOutlined, DeploymentUnitOutlined, RadarChartOutlined } from '@ant-design/icons'; import type { ColumnsType } from 'antd/es/table'; import BalancerFormModal from './BalancerFormModal'; import type { BalancerFormValue } from './BalancerFormModal'; -import { syncObservatories } from './balancer-helpers'; -import { JsonEditor } from '@/components/form'; +import { syncObservatories, observersRemovedByDeletingBalancer } from './balancer-helpers'; +import ObservatorySettingsTab from './ObservatorySettingsTab'; +import { catTabLabel } from '@/pages/settings/catTabLabel'; import { HttpUtil } from '@/utils'; import type { XraySettingsValue, SetTemplate } from '@/hooks/useXraySetting'; import type { @@ -184,8 +185,15 @@ export default function BalancersTab({ } function confirmDelete(idx: number) { + const removed = templateSettings + ? observersRemovedByDeletingBalancer(templateSettings, idx) + : { observatory: false, burst: false }; + const warnings: string[] = []; + if (removed.observatory) warnings.push(t('pages.xray.observatory.deleteAlsoObservatory')); + if (removed.burst) warnings.push(t('pages.xray.observatory.deleteAlsoBurst')); modal.confirm({ title: `${t('delete')} ${t('pages.xray.Balancers')} #${idx + 1}?`, + content: warnings.length ? warnings.join(' ') : undefined, okText: t('delete'), okType: 'danger', cancelText: t('cancel'), @@ -316,92 +324,61 @@ export default function BalancersTab({ }, ]; - const hasObservatory = !!templateSettings?.observatory; - const hasBurstObservatory = !!templateSettings?.burstObservatory; - const showObsEditor = hasObservatory || hasBurstObservatory; + const balancerSettingsTab = ( + + {rows.length === 0 ? ( + + + + ) : ( + <> + + + +