/* * @Author: ZhaoYing * @Date: 2026-02-03 16:34:12 * @Last Modified by: ZhaoYing * @Last Modified time: 2026-03-26 14:39:18 */ import React, { useState, useEffect, useMemo, type MouseEvent } from 'react'; import { useTranslation } from 'react-i18next'; import { Button, App, Flex, Collapse } from 'antd'; import clsx from 'clsx'; import type { MySharedOutItem } from './types'; import { mySharedOutList, cancelShare, cancelSpaceShare } from '@/api/application' import BodyWrapper from '@/components/Empty/BodyWrapper' const MySharing: React.FC = () => { const { t } = useTranslation(); const { modal } = App.useApp(); const [data, setData] = useState([]) useEffect(() => { getList() }, []) const getList = () => { mySharedOutList() .then(res => setData(res as MySharedOutItem[])) } /** Group items by target_workspace_id */ const grouped = useMemo(() => { const map = new Map, items: MySharedOutItem[] }>(); data.forEach(item => { if (!map.has(item.target_workspace_id)) { map.set(item.target_workspace_id, { workspace: { target_workspace_id: item.target_workspace_id, target_workspace_name: item.target_workspace_name, target_workspace_icon: item.target_workspace_icon, }, items: [], }); } map.get(item.target_workspace_id)!.items.push(item); }); return Array.from(map.values()); }, [data]); const handleAllCancel = (workspace: { target_workspace_name: string; target_workspace_id: string; }) => { modal.confirm({ title: t('application.confirmWorkspaceCancelShareDesc', { workspace: workspace.target_workspace_name }), okText: t('common.confirm'), cancelText: t('common.cancel'), okType: 'danger', onOk: () => { cancelSpaceShare(workspace.target_workspace_id) .then(() => { getList(); }) } }); }; const handleCancelOne = (item: MySharedOutItem, e: MouseEvent) => { e.stopPropagation() modal.confirm({ title: t('application.confirmAppCancelShareDesc', { app: item.source_app_name, workspace: item.target_workspace_name }), okText: t('common.confirm'), cancelText: t('common.cancel'), okType: 'danger', onOk: () => { cancelShare(item.source_app_id, item.target_workspace_id) .then(() => { getList(); }) } }); }; /** Navigate to application configuration page */ const handleEdit = (item: MySharedOutItem) => { let url = `/#/application/config/${item.source_app_id}` window.open(url); } return ( {grouped.map(({ workspace, items }) => ( {workspace.target_workspace_icon ? :
{workspace.target_workspace_name[0]}
}
{workspace.target_workspace_name}
{t('application.appCount', { count: items.length })}
), extra: ( ), children: (
{items.map(item => (
handleEdit(item)}>
handleCancelOne(item, e)} />
{item.source_app_name[0]}
{item.source_app_name}
{t('application.type')} {t(`application.${item.source_app_type}`)} {t('application.version')} {item.source_app_version} {t('application.permission')} {t(`application.${item.permission}`)} {t('application.souceStatus')} {item.source_app_is_active ? t('application.sourceActive') : t('application.sourceInactive')}
))}
), }]} /> ))} ); }; export default MySharing;