/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import React, {useEffect, useState} from 'react'; import {Descriptions, Modal, Spin, Table, Tag, Tooltip} from 'antd'; import {remoteApi} from '../../api/remoteApi/remoteApi'; import {useLanguage} from '../../i18n/LanguageContext'; const ClientInfoModal = ({visible, group, address, onCancel, messageApi}) => { const {t} = useLanguage(); const [loading, setLoading] = useState(false); const [connectionData, setConnectionData] = useState(null); useEffect(() => { const fetchData = async () => { if (!visible) return; setLoading(true); try { const connResponse = await remoteApi.queryConsumerConnection(group, address); if (connResponse.status === 0) { setConnectionData(connResponse.data); }else{ messageApi.error(connResponse.errMsg); } } finally { setLoading(false); } }; fetchData(); }, [visible, group, address]); const connectionColumns = [ { title: t.CLIENTID, dataIndex: 'clientId', key: 'clientId', width: 220, ellipsis: true, render: (text) => ( {text} ) }, {title: t.CLIENTADDR, dataIndex: 'clientAddr', key: 'clientAddr', width: 150, ellipsis: true}, {title: t.LANGUAGE, dataIndex: 'language', key: 'language', width: 100}, {title: t.VERSION, dataIndex: 'versionDesc', key: 'versionDesc', width: 100}, ]; const subscriptionColumns = [ { title: t.TOPIC, dataIndex: 'topic', key: 'topic', width: 250, ellipsis: true, render: (text) => ( {text} ) }, {title: t.SUBSCRIPTION_EXPRESSION, dataIndex: 'subString', key: 'subString', width: 150, ellipsis: true}, { title: t.EXPRESSION_TYPE, dataIndex: 'expressionType', key: 'expressionType', width: 120, render: (text) => {text} }, // --- Added Columns for TagsSet and CodeSet --- { title: t.TAGS_SET, // Ensure t.TAGS_SET is defined in your language file dataIndex: 'tagsSet', key: 'tagsSet', width: 150, render: (tags) => ( tags && tags.length > 0 ? ( {tags.map((tag, index) => ( {tag} ))} ) : 'N/A' ), ellipsis: true, }, { title: t.CODE_SET, // Ensure t.CODE_SET is defined in your language file dataIndex: 'codeSet', key: 'codeSet', width: 150, render: (codes) => ( codes && codes.length > 0 ? ( {codes.map((code, index) => ( {code} ))} ) : 'N/A' ), ellipsis: true, }, // --- End of Added Columns --- {title: t.SUB_VERSION, dataIndex: 'subVersion', key: 'subVersion', width: 150}, ]; const formattedSubscriptionData = connectionData?.subscriptionTable ? Object.keys(connectionData.subscriptionTable).map(key => ({ ...connectionData.subscriptionTable[key], key: key, })) : []; return ( {connectionData && ( <> {connectionData.consumeType} {connectionData.messageModel} {connectionData.consumeFromWhere}

{t.CLIENT_CONNECTIONS}

{t.CLIENT_SUBSCRIPTIONS}

)} ); }; export default ClientInfoModal;