/* * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ import React, { Component } from "react"; import { EuiText, EuiLink, EuiIcon, EuiFlyoutBody, EuiFlyoutFooter, EuiTitle, EuiFormRow, EuiSpacer, EuiComboBox } from "@elastic/eui"; import { Transition as ITransition, UITransition } from "../../../../../models/interfaces"; import FlyoutFooter from "../../components/FlyoutFooter"; import EuiFormCustomLabel from "../../components/EuiFormCustomLabel"; import { makeId } from "../../../../utils/helpers"; import Transition from "../../components/Transition"; import { TRANSITION_DOCUMENTATION_URL } from "../../../../utils/constants"; interface CreateTransitionProps { editTransition: UITransition | null; onCloseCreateTransition: () => void; onClickSaveTransition: (uiTransition: UITransition) => void; stateOptions: string[]; } interface CreateTransitionState { uiTransition: UITransition | null; } export default class CreateTransition extends Component { constructor(props: CreateTransitionProps) { super(props); let uiTransition = props.editTransition; if (!uiTransition) { uiTransition = { transition: { state_name: "", }, id: makeId(), }; } this.state = { uiTransition }; } onChange = (selectedOptions: { label: string }[]) => { // We should only get back either 0 or 1 options. const destinationState = selectedOptions.pop()?.label || ""; const { uiTransition } = this.state; if (uiTransition == null) return; const newTransition: ITransition = { ...uiTransition.transition, state_name: destinationState }; const newUiTransition = { ...uiTransition, transition: newTransition }; this.setState({ uiTransition: newUiTransition }); }; onCreateOption = (searchValue: string) => { const normalizedSearchValue = searchValue.trim().toLowerCase(); if (!normalizedSearchValue) { return; } const { uiTransition } = this.state; if (uiTransition == null) return; const newTransition: ITransition = { ...uiTransition.transition, state_name: normalizedSearchValue }; const newUiTransition = { ...uiTransition, transition: newTransition }; this.setState({ uiTransition: newUiTransition }); }; onChangeTransition = (uiTransition: UITransition) => { this.setState({ uiTransition }); }; onClickSaveTransition = () => { const { uiTransition } = this.state; if (!uiTransition) return; this.props.onClickSaveTransition(uiTransition); }; render() { const { editTransition, onCloseCreateTransition, stateOptions } = this.props; const { uiTransition } = this.state; let title = "Add transition"; if (!!editTransition) title = "Edit transition"; return ( <>

{title}

Transitions define the conditions that need to be met for a state to change. After all actions in the current state are completed, the policy starts checking the conditions for transitions.{" "} Learn more ({ label: state }))} selectedOptions={[{ label: uiTransition?.transition.state_name || "" }]} onChange={this.onChange} onCreateOption={this.onCreateOption} customOptionText="Add {searchValue} state" /> {!!uiTransition && }
); } }