Details.tsx 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import React from 'react';
  2. import { NavLink, Route, Switch, useParams } from 'react-router-dom';
  3. import { Connector, Task } from 'generated-sources';
  4. import { ClusterName, ConnectName, ConnectorName } from 'redux/interfaces';
  5. import {
  6. clusterConnectConnectorConfigPath,
  7. clusterConnectConnectorPath,
  8. clusterConnectConnectorTasksPath,
  9. } from 'lib/paths';
  10. import PageLoader from 'components/common/PageLoader/PageLoader';
  11. import Navbar from 'components/common/Navigation/Navbar.styled';
  12. import PageHeading from 'components/common/PageHeading/PageHeading';
  13. import OverviewContainer from './Overview/OverviewContainer';
  14. import TasksContainer from './Tasks/TasksContainer';
  15. import ConfigContainer from './Config/ConfigContainer';
  16. import ActionsContainer from './Actions/ActionsContainer';
  17. interface RouterParams {
  18. clusterName: ClusterName;
  19. connectName: ConnectName;
  20. connectorName: ConnectorName;
  21. }
  22. export interface DetailsProps {
  23. fetchConnector(
  24. clusterName: ClusterName,
  25. connectName: ConnectName,
  26. connectorName: ConnectorName
  27. ): void;
  28. fetchTasks(
  29. clusterName: ClusterName,
  30. connectName: ConnectName,
  31. connectorName: ConnectorName
  32. ): void;
  33. isConnectorFetching: boolean;
  34. areTasksFetching: boolean;
  35. connector: Connector | null;
  36. tasks: Task[];
  37. }
  38. const Details: React.FC<DetailsProps> = ({
  39. fetchConnector,
  40. fetchTasks,
  41. isConnectorFetching,
  42. areTasksFetching,
  43. connector,
  44. }) => {
  45. const { clusterName, connectName, connectorName } = useParams<RouterParams>();
  46. React.useEffect(() => {
  47. fetchConnector(clusterName, connectName, connectorName);
  48. }, [fetchConnector, clusterName, connectName, connectorName]);
  49. React.useEffect(() => {
  50. fetchTasks(clusterName, connectName, connectorName);
  51. }, [fetchTasks, clusterName, connectName, connectorName]);
  52. if (isConnectorFetching || areTasksFetching) {
  53. return <PageLoader />;
  54. }
  55. if (!connector) return null;
  56. return (
  57. <div>
  58. <PageHeading text={connectorName}>
  59. <ActionsContainer />
  60. </PageHeading>
  61. <Navbar role="navigation">
  62. <NavLink
  63. exact
  64. to={clusterConnectConnectorPath(
  65. clusterName,
  66. connectName,
  67. connectorName
  68. )}
  69. activeClassName="is-active"
  70. >
  71. Overview
  72. </NavLink>
  73. <NavLink
  74. exact
  75. to={clusterConnectConnectorTasksPath(
  76. clusterName,
  77. connectName,
  78. connectorName
  79. )}
  80. activeClassName="is-active"
  81. >
  82. Tasks
  83. </NavLink>
  84. <NavLink
  85. exact
  86. to={clusterConnectConnectorConfigPath(
  87. clusterName,
  88. connectName,
  89. connectorName
  90. )}
  91. activeClassName="is-active"
  92. >
  93. Config
  94. </NavLink>
  95. </Navbar>
  96. <Switch>
  97. <Route
  98. exact
  99. path={clusterConnectConnectorTasksPath(
  100. ':clusterName',
  101. ':connectName',
  102. ':connectorName'
  103. )}
  104. component={TasksContainer}
  105. />
  106. <Route
  107. exact
  108. path={clusterConnectConnectorConfigPath(
  109. ':clusterName',
  110. ':connectName',
  111. ':connectorName'
  112. )}
  113. component={ConfigContainer}
  114. />
  115. <Route
  116. exact
  117. path={clusterConnectConnectorPath(
  118. ':clusterName',
  119. ':connectName',
  120. ':connectorName'
  121. )}
  122. component={OverviewContainer}
  123. />
  124. </Switch>
  125. </div>
  126. );
  127. };
  128. export default Details;