1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- import React from 'react';
- import { Switch, Route, useParams } from 'react-router-dom';
- import { clusterTopicPath, clusterTopicsPath } from 'lib/paths';
- import { ClusterName, TopicName } from 'redux/interfaces';
- import Breadcrumb from 'components/common/Breadcrumb/Breadcrumb';
- import EditContainer from 'components/Topics/Topic/Edit/EditContainer';
- import DetailsContainer from 'components/Topics/Topic/Details/DetailsContainer';
- import PageLoader from 'components/common/PageLoader/PageLoader';
- import SendMessageContainer from './SendMessage/SendMessageContainer';
- interface RouterParams {
- clusterName: ClusterName;
- topicName: TopicName;
- }
- interface TopicProps {
- isTopicFetching: boolean;
- fetchTopicDetails: (clusterName: ClusterName, topicName: TopicName) => void;
- }
- const Topic: React.FC<TopicProps> = ({
- isTopicFetching,
- fetchTopicDetails,
- }) => {
- const { clusterName, topicName } = useParams<RouterParams>();
- React.useEffect(() => {
- fetchTopicDetails(clusterName, topicName);
- }, [fetchTopicDetails, clusterName, topicName]);
- const rootBreadcrumbLinks = [
- {
- href: clusterTopicsPath(clusterName),
- label: 'All Topics',
- },
- ];
- const childBreadcrumbLinks = [
- ...rootBreadcrumbLinks,
- {
- href: clusterTopicPath(clusterName, topicName),
- label: topicName,
- },
- ];
- const topicPageUrl = '/ui/clusters/:clusterName/topics/:topicName';
- return (
- <div className="section">
- <div className="level">
- <div className="level-item level-left">
- <Switch>
- <Route exact path={`${topicPageUrl}/message`}>
- <Breadcrumb links={childBreadcrumbLinks}>
- Produce Message
- </Breadcrumb>
- </Route>
- <Route exact path={`${topicPageUrl}/edit`}>
- <Breadcrumb links={childBreadcrumbLinks}>Edit</Breadcrumb>
- </Route>
- <Route path={topicPageUrl}>
- <Breadcrumb links={rootBreadcrumbLinks}>{topicName}</Breadcrumb>
- </Route>
- </Switch>
- </div>
- </div>
- {isTopicFetching ? (
- <PageLoader />
- ) : (
- <Switch>
- <Route
- exact
- path="/ui/clusters/:clusterName/topics/:topicName/edit"
- component={EditContainer}
- />
- <Route
- exact
- path="/ui/clusters/:clusterName/topics/:topicName/message"
- component={SendMessageContainer}
- />
- <Route
- path="/ui/clusters/:clusterName/topics/:topicName"
- component={DetailsContainer}
- />
- </Switch>
- )}
- </div>
- );
- };
- export default Topic;
|