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 (