import React from 'react'; import { CleanUpPolicy, SortOrder, TopicColumnsToSort, } from 'generated-sources'; import { useAppDispatch } from 'lib/hooks/redux'; import ConfirmationModal from 'components/common/ConfirmationModal/ConfirmationModal'; import DropdownItem from 'components/common/Dropdown/DropdownItem'; import { TableCellProps } from 'components/common/SmartTable/TableColumn'; import { TopicWithDetailedInfo } from 'redux/interfaces'; import VerticalElipsisIcon from 'components/common/Icons/VerticalElipsisIcon'; import Dropdown from 'components/common/Dropdown/Dropdown'; import ClusterContext from 'components/contexts/ClusterContext'; import * as S from 'components/Topics/List/List.styled'; import { ClusterNameRoute } from 'lib/paths'; import useModal from 'lib/hooks/useModal'; import useAppParams from 'lib/hooks/useAppParams'; import { deleteTopic, fetchTopicsList, recreateTopic, } from 'redux/reducers/topics/topicsSlice'; import { clearTopicMessages } from 'redux/reducers/topicMessages/topicMessagesSlice'; interface TopicsListParams { clusterName: string; page?: number; perPage?: number; showInternal?: boolean; search?: string; orderBy?: TopicColumnsToSort; sortOrder?: SortOrder; } export interface ActionsCellProps { topicsListParams: TopicsListParams; } const ActionsCell: React.FC< TableCellProps & ActionsCellProps > = ({ hovered, dataItem: { internal, cleanUpPolicy, name }, topicsListParams, }) => { const { isReadOnly, isTopicDeletionAllowed } = React.useContext(ClusterContext); const dispatch = useAppDispatch(); const { clusterName } = useAppParams(); const { isOpen: isDeleteTopicModalOpen, setClose: closeDeleteTopicModal, setOpen: openDeleteTopicModal, } = useModal(false); const { isOpen: isRecreateTopicModalOpen, setClose: closeRecreateTopicModal, setOpen: openRecreateTopicModal, } = useModal(false); const { isOpen: isClearMessagesModalOpen, setClose: closeClearMessagesModal, setOpen: openClearMessagesModal, } = useModal(false); const isHidden = internal || isReadOnly || !hovered; const deleteTopicHandler = () => dispatch(deleteTopic({ clusterName, topicName: name })); const clearTopicMessagesHandler = () => { dispatch(clearTopicMessages({ clusterName, topicName: name })); dispatch(fetchTopicsList(topicsListParams)); closeClearMessagesModal(); }; const recreateTopicHandler = () => { dispatch(recreateTopic({ clusterName, topicName: name })); closeRecreateTopicModal(); }; return ( <> {!isHidden && ( } right> {cleanUpPolicy === CleanUpPolicy.DELETE && ( Clear Messages )} {isTopicDeletionAllowed && ( Remove Topic )} Recreate Topic )} Are you sure want to clear topic messages? Are you sure want to remove {name} topic? Are you sure to recreate {name} topic? ); }; export default React.memo(ActionsCell);