import React from "react"; import PropTypes from "prop-types"; import { isEmpty, toUpper, includes, get, uniqueId } 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 Link from "@/components/Link"; 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, }; formId = uniqueId("sourceForm"); 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(get(error, "response.data.message", "Failed saving.")); }); } }; renderTypeSelector() { const { types } = this.props; const { searchText } = this.state; const filteredTypes = types.filter( type => isEmpty(searchText) || includes(type.name.toLowerCase(), searchText.toLowerCase()) ); return (