diff --git a/ui/src/dashboards/components/DashboardsPageContents.js b/ui/src/dashboards/components/DashboardsPageContents.js deleted file mode 100644 index f9cc047ff..000000000 --- a/ui/src/dashboards/components/DashboardsPageContents.js +++ /dev/null @@ -1,101 +0,0 @@ -import React, {Component} from 'react' -import PropTypes from 'prop-types' - -import Authorized, {EDITOR_ROLE} from 'src/auth/Authorized' - -import DashboardsTable from 'src/dashboards/components/DashboardsTable' -import SearchBar from 'src/hosts/components/SearchBar' -import FancyScrollbar from 'shared/components/FancyScrollbar' -import {ErrorHandling} from 'src/shared/decorators/errors' - -@ErrorHandling -class DashboardsPageContents extends Component { - constructor(props) { - super(props) - - this.state = { - searchTerm: '', - } - } - - filterDashboards = searchTerm => { - this.setState({searchTerm}) - } - - render() { - const { - dashboards, - onDeleteDashboard, - onCreateDashboard, - onCloneDashboard, - onExportDashboard, - dashboardLink, - } = this.props - const {searchTerm} = this.state - - let tableHeader - if (dashboards === null) { - tableHeader = 'Loading Dashboards...' - } else if (dashboards.length === 1) { - tableHeader = '1 Dashboard' - } else { - tableHeader = `${dashboards.length} Dashboards` - } - const filteredDashboards = dashboards.filter(d => - d.name.toLowerCase().includes(searchTerm.toLowerCase()) - ) - - return ( - -
-
-
-
-
-

{tableHeader}

-
- - - - -
-
-
- -
-
-
-
-
-
- ) - } -} - -const {arrayOf, func, shape, string} = PropTypes - -DashboardsPageContents.propTypes = { - dashboards: arrayOf(shape()), - onDeleteDashboard: func.isRequired, - onCreateDashboard: func.isRequired, - onCloneDashboard: func.isRequired, - onExportDashboard: func.isRequired, - dashboardLink: string.isRequired, -} - -export default DashboardsPageContents diff --git a/ui/src/dashboards/components/DashboardsPageContents.tsx b/ui/src/dashboards/components/DashboardsPageContents.tsx new file mode 100644 index 000000000..dd5001680 --- /dev/null +++ b/ui/src/dashboards/components/DashboardsPageContents.tsx @@ -0,0 +1,120 @@ +import React, {Component} from 'react' +import Authorized, {EDITOR_ROLE} from 'src/auth/Authorized' + +import DashboardsTable from 'src/dashboards/components/DashboardsTable' +import SearchBar from 'src/hosts/components/SearchBar' +import FancyScrollbar from 'src/shared/components/FancyScrollbar' +import {ErrorHandling} from 'src/shared/decorators/errors' +import {Dashboard} from 'src/types/dashboard' + +interface Props { + dashboards: Dashboard[] + onDeleteDashboard: () => void + onCreateDashboard: () => void + onCloneDashboard: () => void + onExportDashboard: () => void + dashboardLink: string +} + +interface State { + searchTerm: string +} + +@ErrorHandling +class DashboardsPageContents extends Component { + constructor(props) { + super(props) + + this.state = { + searchTerm: '', + } + } + + public render() { + const { + onDeleteDashboard, + onCreateDashboard, + onCloneDashboard, + onExportDashboard, + dashboardLink, + } = this.props + + return ( + +
+
+
+
+ {this.renderPanelHeading} +
+ +
+
+
+
+
+
+ ) + } + + private renderPanelHeading(): JSX.Element { + const {onCreateDashboard} = this.props + + return ( +
+

{this.panelTitle}

+
+ + + + + +
+
+ ) + } + + private get filteredDashboards(): Dashboard[] { + const {dashboards} = this.props + const {searchTerm} = this.state + + return dashboards.filter(d => + d.name.toLowerCase().includes(searchTerm.toLowerCase()) + ) + } + + private get panelTitle(): string { + const {dashboards} = this.props + + if (dashboards === null) { + return 'Loading Dashboards...' + } else if (dashboards.length === 1) { + return '1 Dashboard' + } + + return `${dashboards.length} Dashboards` + } + + private filterDashboards = (searchTerm: string): void => { + this.setState({searchTerm}) + } +} + +export default DashboardsPageContents