Topic.tsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import React from 'react';
  2. import { Switch, Route, useParams } from 'react-router-dom';
  3. import { ClusterName, TopicName } from 'redux/interfaces';
  4. import EditContainer from 'components/Topics/Topic/Edit/EditContainer';
  5. import DetailsContainer from 'components/Topics/Topic/Details/DetailsContainer';
  6. import PageLoader from 'components/common/PageLoader/PageLoader';
  7. import SendMessage from './SendMessage/SendMessage';
  8. interface RouterParams {
  9. clusterName: ClusterName;
  10. topicName: TopicName;
  11. }
  12. interface TopicProps {
  13. isTopicFetching: boolean;
  14. resetTopicMessages: () => void;
  15. fetchTopicDetails: (payload: {
  16. clusterName: ClusterName;
  17. topicName: TopicName;
  18. }) => void;
  19. }
  20. const Topic: React.FC<TopicProps> = ({
  21. isTopicFetching,
  22. fetchTopicDetails,
  23. resetTopicMessages,
  24. }) => {
  25. const { clusterName, topicName } = useParams<RouterParams>();
  26. React.useEffect(() => {
  27. fetchTopicDetails({ clusterName, topicName });
  28. }, [fetchTopicDetails, clusterName, topicName]);
  29. React.useEffect(() => {
  30. return () => {
  31. resetTopicMessages();
  32. };
  33. }, []);
  34. if (isTopicFetching) {
  35. return <PageLoader />;
  36. }
  37. return (
  38. <Switch>
  39. <Route
  40. exact
  41. path="/ui/clusters/:clusterName/topics/:topicName/edit"
  42. component={EditContainer}
  43. />
  44. <Route
  45. exact
  46. path="/ui/clusters/:clusterName/topics/:topicName/message"
  47. component={SendMessage}
  48. />
  49. <Route
  50. path="/ui/clusters/:clusterName/topics/:topicName"
  51. component={DetailsContainer}
  52. />
  53. </Switch>
  54. );
  55. };
  56. export default Topic;