import React from 'react'; import PropTypes from 'prop-types'; import { isEmpty, toUpper, includes } from 'lodash'; import Button from 'antd/lib/button'; import List from 'antd/lib/list'; import Modal from 'antd/lib/modal'; import Input from 'antd/lib/input'; import Steps from 'antd/lib/steps'; import { wrap as wrapDialog, DialogPropType } from '@/components/DialogWrapper'; import { PreviewCard } from '@/components/PreviewCard'; import EmptyState from '@/components/items-list/components/EmptyState'; import DynamicForm from '@/components/dynamic-form/DynamicForm'; import helper from '@/components/dynamic-form/dynamicFormHelper'; import { HelpTrigger, TYPES as HELP_TRIGGER_TYPES } from '@/components/HelpTrigger'; const { Step } = Steps; const { Search } = Input; const StepEnum = { SELECT_TYPE: 0, CONFIGURE_IT: 1, DONE: 2, }; class CreateSourceDialog extends React.Component { static propTypes = { dialog: DialogPropType.isRequired, types: PropTypes.arrayOf(PropTypes.object), sourceType: PropTypes.string.isRequired, imageFolder: PropTypes.string.isRequired, helpTriggerPrefix: PropTypes.string, onCreate: PropTypes.func.isRequired, }; static defaultProps = { types: [], helpTriggerPrefix: null, }; state = { searchText: '', selectedType: null, savingSource: false, currentStep: StepEnum.SELECT_TYPE, }; selectType = (selectedType) => { this.setState({ selectedType, currentStep: StepEnum.CONFIGURE_IT }); }; resetType = () => { if (this.state.currentStep === StepEnum.CONFIGURE_IT) { this.setState({ searchText: '', selectedType: null, currentStep: StepEnum.SELECT_TYPE }); } }; createSource = (values, successCallback, errorCallback) => { const { selectedType, savingSource } = this.state; if (!savingSource) { this.setState({ savingSource: true, currentStep: StepEnum.DONE }); this.props.onCreate(selectedType, values).then((data) => { successCallback('Saved.'); this.props.dialog.close({ success: true, data }); }).catch((error) => { this.setState({ savingSource: false, currentStep: StepEnum.CONFIGURE_IT }); errorCallback(error.message); }); } }; renderTypeSelector() { const { types } = this.props; const { searchText } = this.state; const filteredTypes = types.filter(type => isEmpty(searchText) || includes(type.name.toLowerCase(), searchText.toLowerCase())); return (
this.setState({ searchText: e.target.value })} autoFocus data-test="SearchSource" />
{isEmpty(filteredTypes) ? () : ( this.renderItem(item)} /> )}
); } renderForm() { const { imageFolder, helpTriggerPrefix } = this.props; const { selectedType } = this.state; const fields = helper.getFields(selectedType); const helpTriggerType = `${helpTriggerPrefix}${toUpper(selectedType.type)}`; return (
{selectedType.name}

{selectedType.name}

{HELP_TRIGGER_TYPES[helpTriggerType] && ( Setup Instructions )}
); } renderItem(item) { const { imageFolder } = this.props; return ( this.selectType(item)} > ); } render() { const { currentStep, savingSource } = this.state; const { dialog, sourceType } = this.props; return ( dialog.dismiss()}>Cancel), (), ] : [ (), ( ), ]} >
{currentStep === StepEnum.CONFIGURE_IT ? ( Type Selection} className="clickable" onClick={this.resetType} /> ) : ()} {currentStep === StepEnum.SELECT_TYPE && this.renderTypeSelector()} {currentStep !== StepEnum.SELECT_TYPE && this.renderForm()}
); } } export default wrapDialog(CreateSourceDialog);