Convert DashboadsPage to typescript

pull/10616/head
Iris Scholten 2018-05-30 12:04:49 -07:00
parent ce9b019fb8
commit eb5de1d002
1 changed files with 67 additions and 78 deletions

View File

@ -1,8 +1,6 @@
import React, {Component} from 'react'
import PropTypes from 'prop-types'
import {withRouter} from 'react-router'
import React, {PureComponent} from 'react'
import {withRouter, InjectedRouter} from 'react-router'
import {connect} from 'react-redux'
import {bindActionCreators} from 'redux'
import download from 'src/external/download'
import DashboardsHeader from 'src/dashboards/components/DashboardsHeader'
@ -18,60 +16,30 @@ import {
import {NEW_DASHBOARD} from 'src/dashboards/constants'
import {ErrorHandling} from 'src/shared/decorators/errors'
import {Source, Dashboard} from 'src/types'
interface Props {
source: Source
router: InjectedRouter
handleGetDashboards: () => void
handleGetChronografVersion: () => void
handleDeleteDashboard: (dashboard: Dashboard) => void
dashboards: Dashboard[]
}
@ErrorHandling
class DashboardsPage extends Component {
componentDidMount() {
class DashboardsPage extends PureComponent<Props> {
public componentDidMount() {
this.props.handleGetDashboards()
}
handleCreateDashboard = async () => {
const {
source: {id},
router: {push},
} = this.props
const {data} = await createDashboard(NEW_DASHBOARD)
push(`/sources/${id}/dashboards/${data.id}`)
}
handleCloneDashboard = dashboard => async () => {
const {
source: {id},
router: {push},
} = this.props
const {data} = await createDashboard({
...dashboard,
name: `${dashboard.name} (clone)`,
})
push(`/sources/${id}/dashboards/${data.id}`)
}
handleDeleteDashboard = dashboard => () => {
this.props.handleDeleteDashboard(dashboard)
}
handleExportDashboard = dashboard => async () => {
const dashboardForDownload = await this.modifyDashboardForDownload(
dashboard
)
download(
JSON.stringify(dashboardForDownload),
`${dashboard.name}.json`,
'text/plain'
)
}
modifyDashboardForDownload = async dashboard => {
const version = await this.props.handleGetChronografVersion()
return {chronografVersion: version, dashboard}
}
render() {
public render() {
const {dashboards} = this.props
const dashboardLink = `/sources/${this.props.source.id}`
return (
<div className="page">
<DashboardsHeader sourceName={this.props.source.name} />
<DashboardsHeader />
<DashboardsContents
dashboardLink={dashboardLink}
dashboards={dashboards}
@ -83,27 +51,51 @@ class DashboardsPage extends Component {
</div>
)
}
}
const {arrayOf, func, string, shape} = PropTypes
private handleCreateDashboard = async (): Promise<void> => {
const {
source: {id},
router: {push},
} = this.props
const {data} = await createDashboard(NEW_DASHBOARD)
push(`/sources/${id}/dashboards/${data.id}`)
}
DashboardsPage.propTypes = {
source: shape({
id: string.isRequired,
name: string.isRequired,
type: string,
links: shape({
proxy: string.isRequired,
}).isRequired,
telegraf: string.isRequired,
}),
router: shape({
push: func.isRequired,
}).isRequired,
handleGetDashboards: func.isRequired,
handleGetChronografVersion: func.isRequired,
handleDeleteDashboard: func.isRequired,
dashboards: arrayOf(shape()),
private handleCloneDashboard = (dashboard: Dashboard) => async (): Promise<
void
> => {
const {
source: {id},
router: {push},
} = this.props
const {data} = await createDashboard({
...dashboard,
name: `${dashboard.name} (clone)`,
})
push(`/sources/${id}/dashboards/${data.id}`)
}
private handleDeleteDashboard = (dashboard: Dashboard) => (): void => {
this.props.handleDeleteDashboard(dashboard)
}
private handleExportDashboard = (dashboard: Dashboard) => async (): Promise<
void
> => {
const dashboardForDownload = await this.modifyDashboardForDownload(
dashboard
)
download(
JSON.stringify(dashboardForDownload),
`${dashboard.name}.json`,
'text/plain'
)
}
private modifyDashboardForDownload = async (dashboard: Dashboard) => {
const version = await this.props.handleGetChronografVersion()
return {chronografVersion: version, dashboard}
}
}
const mapStateToProps = ({dashboardUI: {dashboards, dashboard}}) => ({
@ -111,15 +103,12 @@ const mapStateToProps = ({dashboardUI: {dashboards, dashboard}}) => ({
dashboard,
})
const mapDispatchToProps = dispatch => ({
handleGetDashboards: bindActionCreators(getDashboardsAsync, dispatch),
handleDeleteDashboard: bindActionCreators(deleteDashboardAsync, dispatch),
handleGetChronografVersion: bindActionCreators(
getChronografVersion,
dispatch
),
})
const mapDispatchToProps = {
handleGetDashboards: getDashboardsAsync,
handleDeleteDashboard: deleteDashboardAsync,
handleGetChronografVersion: getChronografVersion,
}
export default connect(mapStateToProps, mapDispatchToProps)(
withRouter(DashboardsPage)
export default withRouter(
connect(mapStateToProps, mapDispatchToProps)(DashboardsPage)
)