| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| import React, { useMemo, useState } from 'react';
|
| import { Empty } from '@douyinfe/semi-ui';
|
| import CardTable from '../../common/ui/CardTable';
|
| import {
|
| IllustrationNoResult,
|
| IllustrationNoResultDark,
|
| } from '@douyinfe/semi-illustrations';
|
| import { getDeploymentsColumns } from './DeploymentsColumnDefs';
|
|
|
|
|
| import ViewLogsModal from './modals/ViewLogsModal';
|
| import ExtendDurationModal from './modals/ExtendDurationModal';
|
| import ViewDetailsModal from './modals/ViewDetailsModal';
|
| import UpdateConfigModal from './modals/UpdateConfigModal';
|
| import ConfirmationDialog from './modals/ConfirmationDialog';
|
|
|
| const DeploymentsTable = (deploymentsData) => {
|
| const {
|
| deployments,
|
| loading,
|
| searching,
|
| activePage,
|
| pageSize,
|
| deploymentCount,
|
| compactMode,
|
| visibleColumns,
|
| rowSelection,
|
| batchOperationsEnabled = true,
|
| handlePageChange,
|
| handlePageSizeChange,
|
| handleRow,
|
| t,
|
| COLUMN_KEYS,
|
|
|
| startDeployment,
|
| restartDeployment,
|
| deleteDeployment,
|
| syncDeploymentToChannel,
|
| setEditingDeployment,
|
| setShowEdit,
|
| refresh,
|
| } = deploymentsData;
|
|
|
|
|
| const [selectedDeployment, setSelectedDeployment] = useState(null);
|
| const [showLogsModal, setShowLogsModal] = useState(false);
|
| const [showExtendModal, setShowExtendModal] = useState(false);
|
| const [showDetailsModal, setShowDetailsModal] = useState(false);
|
| const [showConfigModal, setShowConfigModal] = useState(false);
|
| const [showConfirmDialog, setShowConfirmDialog] = useState(false);
|
| const [confirmOperation, setConfirmOperation] = useState('delete');
|
|
|
|
|
| const handleViewLogs = (deployment) => {
|
| setSelectedDeployment(deployment);
|
| setShowLogsModal(true);
|
| };
|
|
|
| const handleExtendDuration = (deployment) => {
|
| setSelectedDeployment(deployment);
|
| setShowExtendModal(true);
|
| };
|
|
|
| const handleViewDetails = (deployment) => {
|
| setSelectedDeployment(deployment);
|
| setShowDetailsModal(true);
|
| };
|
|
|
| const handleUpdateConfig = (deployment, operation = 'update') => {
|
| setSelectedDeployment(deployment);
|
| if (operation === 'delete' || operation === 'destroy') {
|
| setConfirmOperation(operation);
|
| setShowConfirmDialog(true);
|
| } else {
|
| setShowConfigModal(true);
|
| }
|
| };
|
|
|
| const handleConfirmAction = () => {
|
| if (
|
| selectedDeployment &&
|
| (confirmOperation === 'delete' || confirmOperation === 'destroy')
|
| ) {
|
| deleteDeployment(selectedDeployment.id);
|
| }
|
| setShowConfirmDialog(false);
|
| setSelectedDeployment(null);
|
| };
|
|
|
| const handleModalSuccess = (updatedDeployment) => {
|
|
|
| refresh?.();
|
| };
|
|
|
|
|
| const allColumns = useMemo(() => {
|
| return getDeploymentsColumns({
|
| t,
|
| COLUMN_KEYS,
|
| startDeployment,
|
| restartDeployment,
|
| deleteDeployment,
|
| setEditingDeployment,
|
| setShowEdit,
|
| refresh,
|
| activePage,
|
| deployments,
|
|
|
| onViewLogs: handleViewLogs,
|
| onExtendDuration: handleExtendDuration,
|
| onViewDetails: handleViewDetails,
|
| onUpdateConfig: handleUpdateConfig,
|
| onSyncToChannel: syncDeploymentToChannel,
|
| });
|
| }, [
|
| t,
|
| COLUMN_KEYS,
|
| startDeployment,
|
| restartDeployment,
|
| deleteDeployment,
|
| syncDeploymentToChannel,
|
| setEditingDeployment,
|
| setShowEdit,
|
| refresh,
|
| activePage,
|
| deployments,
|
| ]);
|
|
|
|
|
| const getVisibleColumns = () => {
|
| return allColumns.filter((column) => visibleColumns[column.key]);
|
| };
|
|
|
| const visibleColumnsList = useMemo(() => {
|
| return getVisibleColumns();
|
| }, [visibleColumns, allColumns]);
|
|
|
| const tableColumns = useMemo(() => {
|
| if (compactMode) {
|
|
|
| return visibleColumnsList.map(({ fixed, width, ...rest }) => ({
|
| ...rest,
|
| width: width ? Math.max(width * 0.8, 80) : undefined,
|
| }));
|
| }
|
| return visibleColumnsList;
|
| }, [compactMode, visibleColumnsList]);
|
|
|
| return (
|
| <>
|
| <CardTable
|
| columns={tableColumns}
|
| dataSource={deployments}
|
| scroll={compactMode ? { x: 800 } : { x: 1200 }}
|
| pagination={{
|
| currentPage: activePage,
|
| pageSize: pageSize,
|
| total: deploymentCount,
|
| pageSizeOpts: [10, 20, 50, 100],
|
| showSizeChanger: true,
|
| onPageSizeChange: handlePageSizeChange,
|
| onPageChange: handlePageChange,
|
| }}
|
| hidePagination={true}
|
| expandAllRows={false}
|
| onRow={handleRow}
|
| rowSelection={batchOperationsEnabled ? rowSelection : undefined}
|
| empty={
|
| <Empty
|
| image={<IllustrationNoResult style={{ width: 150, height: 150 }} />}
|
| darkModeImage={
|
| <IllustrationNoResultDark style={{ width: 150, height: 150 }} />
|
| }
|
| description={t('搜索无结果')}
|
| style={{ padding: 30 }}
|
| />
|
| }
|
| className='rounded-xl overflow-hidden'
|
| size='middle'
|
| loading={loading || searching}
|
| />
|
|
|
| {/* Enhanced Modals */}
|
| <ViewLogsModal
|
| visible={showLogsModal}
|
| onCancel={() => setShowLogsModal(false)}
|
| deployment={selectedDeployment}
|
| t={t}
|
| />
|
|
|
| <ExtendDurationModal
|
| visible={showExtendModal}
|
| onCancel={() => setShowExtendModal(false)}
|
| deployment={selectedDeployment}
|
| onSuccess={handleModalSuccess}
|
| t={t}
|
| />
|
|
|
| <ViewDetailsModal
|
| visible={showDetailsModal}
|
| onCancel={() => setShowDetailsModal(false)}
|
| deployment={selectedDeployment}
|
| t={t}
|
| />
|
|
|
| <UpdateConfigModal
|
| visible={showConfigModal}
|
| onCancel={() => setShowConfigModal(false)}
|
| deployment={selectedDeployment}
|
| onSuccess={handleModalSuccess}
|
| t={t}
|
| />
|
|
|
| <ConfirmationDialog
|
| visible={showConfirmDialog}
|
| onCancel={() => setShowConfirmDialog(false)}
|
| onConfirm={handleConfirmAction}
|
| title={t('确认操作')}
|
| type='danger'
|
| deployment={selectedDeployment}
|
| operation={confirmOperation}
|
| t={t}
|
| />
|
| </>
|
| );
|
| };
|
|
|
| export default DeploymentsTable;
|
|
|