import React from 'react'; import { ClusterName, TopicName } from 'redux/interfaces'; import { Topic, TopicDetails } from 'generated-sources'; import { NavLink, Switch, Route, useHistory } from 'react-router-dom'; import { clusterTopicSettingsPath, clusterTopicPath, clusterTopicMessagesPath, clusterTopicsPath, clusterTopicConsumerGroupsPath, clusterTopicEditPath, clusterTopicSendMessagePath, } from 'lib/paths'; import ClusterContext from 'components/contexts/ClusterContext'; import ConfirmationModal from 'components/common/ConfirmationModal/ConfirmationModal'; import { useDispatch } from 'react-redux'; import { deleteTopicAction } from 'redux/actions'; import PageHeading from 'components/common/PageHeading/PageHeading'; import { Button } from 'components/common/Button/Button'; import Dropdown from 'components/common/Dropdown/Dropdown'; import VerticalElipsisIcon from 'components/common/Icons/VerticalElipsisIcon'; import DropdownItem from 'components/common/Dropdown/DropdownItem'; import styled from 'styled-components'; import Navbar from 'components/common/Navigation/Navbar.styled'; import OverviewContainer from './Overview/OverviewContainer'; import TopicConsumerGroupsContainer from './ConsumerGroups/TopicConsumerGroupsContainer'; import SettingsContainer from './Settings/SettingsContainer'; import Messages from './Messages/Messages'; interface Props extends Topic, TopicDetails { clusterName: ClusterName; topicName: TopicName; isInternal: boolean; isDeleted: boolean; isDeletePolicy: boolean; deleteTopic: (clusterName: ClusterName, topicName: TopicName) => void; clearTopicMessages(clusterName: ClusterName, topicName: TopicName): void; } const HeaderControlsWrapper = styled.div` display: flex; justify-content: flex-end; align-self: center; gap: 26px; `; const Details: React.FC = ({ clusterName, topicName, isInternal, isDeleted, isDeletePolicy, deleteTopic, clearTopicMessages, }) => { const history = useHistory(); const dispatch = useDispatch(); const { isReadOnly, isTopicDeletionAllowed } = React.useContext(ClusterContext); const [isDeleteTopicConfirmationVisible, setDeleteTopicConfirmationVisible] = React.useState(false); const [isClearTopicConfirmationVisible, setClearTopicConfirmationVisible] = React.useState(false); const deleteTopicHandler = React.useCallback(() => { deleteTopic(clusterName, topicName); }, [clusterName, topicName]); React.useEffect(() => { if (isDeleted) { dispatch(deleteTopicAction.cancel()); history.push(clusterTopicsPath(clusterName)); } }, [isDeleted]); const clearTopicMessagesHandler = React.useCallback(() => { clearTopicMessages(clusterName, topicName); setClearTopicConfirmationVisible(false); }, [clusterName, topicName]); return (
{!isReadOnly && !isInternal && ( } right> history.push(clusterTopicEditPath(clusterName, topicName)) } > Edit settings {isDeletePolicy && ( setClearTopicConfirmationVisible(true)} danger > Clear messages )} {isTopicDeletionAllowed && ( setDeleteTopicConfirmationVisible(true)} danger > Remove topic )} )} setDeleteTopicConfirmationVisible(false)} onConfirm={deleteTopicHandler} > Are you sure want to remove {topicName} topic? setClearTopicConfirmationVisible(false)} onConfirm={clearTopicMessagesHandler} > Are you sure want to clear topic messages? Overview Messages Consumers Settings
); }; export default Details;