/* * @Author: ZhaoYing * @Date: 2026-02-03 16:34:12 * @Last Modified by: ZhaoYing * @Last Modified time: 2026-03-13 17:36:16 */ import React, { useState, useEffect, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { Button, App, Flex, Row, Col, Collapse } from 'antd'; import clsx from 'clsx'; import type { MySharedOutItem } from './types'; import { mySharedOutList, cancelShare, cancelSpaceShare } from '@/api/application' 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) => { 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(); }) } }); }; 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 => (
handleCancelOne(item)} />
{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;