WIP add kapacitor Step component
parent
e1b0a63ad2
commit
f1361bfb0c
|
@ -0,0 +1,139 @@
|
|||
import React, {PureComponent} from 'react'
|
||||
import {connect} from 'react-redux'
|
||||
|
||||
import {ErrorHandling} from 'src/shared/decorators/errors'
|
||||
|
||||
import WizardTextInput from 'src/reusable_ui/components/wizard/WizardTextInput'
|
||||
import WizardCheckbox from 'src/reusable_ui/components/wizard/WizardCheckbox'
|
||||
|
||||
import {notify as notifyAction} from 'src/shared/actions/notifications'
|
||||
import {insecureSkipVerifyText} from 'src/shared/copy/tooltipText'
|
||||
|
||||
import {createKapacitor, pingKapacitor} from 'src/shared/apis'
|
||||
|
||||
import {
|
||||
notifyKapacitorCreateFailed,
|
||||
notifyKapacitorCreated,
|
||||
notifyKapacitorConnectionFailed,
|
||||
} from 'src/shared/copy/notifications'
|
||||
|
||||
import {Kapacitor} from 'src/types'
|
||||
import {DEFAULT_KAPACITOR} from 'src/shared/constants'
|
||||
import {getDeep} from 'src/utils/wrappers'
|
||||
|
||||
interface Props {
|
||||
setCompletion: (isComplete: boolean) => void
|
||||
notify: typeof notifyAction
|
||||
}
|
||||
|
||||
interface State {
|
||||
kapacitor: Kapacitor
|
||||
exists: boolean
|
||||
}
|
||||
|
||||
@ErrorHandling
|
||||
class SourceStep extends PureComponent<Props, State> {
|
||||
constructor(props: Props) {
|
||||
super(props)
|
||||
this.state = {
|
||||
kapacitor: DEFAULT_KAPACITOR,
|
||||
exists: false,
|
||||
}
|
||||
// NEED SOURCE FROM PREV STEP, not current source!!!
|
||||
// and other kapacitors associated with source.
|
||||
}
|
||||
|
||||
public next = async () => {
|
||||
const {kapacitor} = this.state
|
||||
const {notify} = this.props
|
||||
|
||||
// const isNameTaken = kapacitors.some(k => k.name === kapacitor.name)
|
||||
// const isNew = !params.id
|
||||
|
||||
// if (isNew && isNameTaken) {
|
||||
// notify(notifyKapacitorNameAlreadyTaken)
|
||||
// return
|
||||
// }
|
||||
|
||||
try {
|
||||
const {data} = await createKapacitor(source, kapacitor)
|
||||
this.setState({kapacitor: data})
|
||||
this.checkKapacitorConnection(data)
|
||||
notify(notifyKapacitorCreated())
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
notify(notifyKapacitorCreateFailed())
|
||||
}
|
||||
}
|
||||
|
||||
public render() {
|
||||
const {kapacitor} = this.state
|
||||
return (
|
||||
<>
|
||||
<WizardTextInput
|
||||
value={kapacitor.url}
|
||||
label="Kapacitor URL"
|
||||
onChange={this.onChangeInput('url')}
|
||||
valueModifier={this.URLModifier}
|
||||
/>
|
||||
<WizardTextInput
|
||||
value={kapacitor.name}
|
||||
label="Name"
|
||||
onChange={this.onChangeInput('name')}
|
||||
/>
|
||||
<WizardTextInput
|
||||
value={kapacitor.username}
|
||||
label="Username"
|
||||
onChange={this.onChangeInput('username')}
|
||||
/>
|
||||
<WizardTextInput
|
||||
value={kapacitor.password}
|
||||
label="Password"
|
||||
onChange={this.onChangeInput('password')}
|
||||
/>
|
||||
{this.isHTTPS && (
|
||||
<WizardCheckbox
|
||||
isChecked={kapacitor.insecureSkipVerify}
|
||||
text={`Unsafe SSL: ${insecureSkipVerifyText}`}
|
||||
onChange={this.onChangeInput('insecureSkipVerify')}
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
private URLModifier = (value: string): string => {
|
||||
const url = value.trim()
|
||||
if (url.startsWith('http')) {
|
||||
return url
|
||||
}
|
||||
return `http://${url}`
|
||||
}
|
||||
|
||||
private onChangeInput = (key: string) => (value: string | boolean) => {
|
||||
const {kapacitor} = this.state
|
||||
this.setState({kapacitor: {...kapacitor, [key]: value}})
|
||||
}
|
||||
|
||||
private checkKapacitorConnection = async (kapacitor: Kapacitor) => {
|
||||
try {
|
||||
await pingKapacitor(kapacitor)
|
||||
this.setState({exists: true})
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
this.setState({exists: false})
|
||||
this.props.notify(notifyKapacitorConnectionFailed())
|
||||
}
|
||||
}
|
||||
|
||||
private get isHTTPS(): boolean {
|
||||
const {kapacitor} = this.state
|
||||
return getDeep<string>(kapacitor, 'url', '').startsWith('https')
|
||||
}
|
||||
}
|
||||
|
||||
const mdtp = {
|
||||
notify: notifyAction,
|
||||
}
|
||||
|
||||
export default connect(null, mdtp, null, {withRef: true})(SourceStep)
|
Loading…
Reference in New Issue