/* * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ import React, { ChangeEvent } from "react"; import { EuiLink, EuiIcon, EuiFormRow, EuiSelect, EuiSpacer, EuiFieldText, EuiFieldNumber } from "@elastic/eui"; import moment from "moment-timezone"; import EuiFormCustomLabel from "../EuiFormCustomLabel"; import { UITransition } from "../../../../../models/interfaces"; import { TRANSITION_DOCUMENTATION_URL } from "../../../../utils/constants"; const timezones = moment.tz.names().map((tz) => ({ label: tz, text: tz })); const conditionTypeOptions = [ { value: "none", text: "No condition" }, { value: "min_index_age", text: "Minimum index age" }, { value: "min_doc_count", text: "Minimum doc count" }, { value: "min_size", text: "Minimum size" }, { value: "min_rollover_age", text: "Minimum rollover age" }, { value: "cron", text: "Cron expression" }, ]; interface TransitionProps { uiTransition: UITransition; onChangeTransition: (transition: UITransition) => void; } const Transition = ({ uiTransition, onChangeTransition }: TransitionProps) => { // We currently only support one transition condition const conditionType = Object.keys(uiTransition.transition.conditions || []).pop() || "none"; const conditions = uiTransition.transition.conditions; return ( <> { const selectedConditionType = e.target.value; const transition = { ...uiTransition.transition }; if (selectedConditionType === "none") delete transition.conditions; if (selectedConditionType === "min_index_age") transition.conditions = { min_index_age: "30d" }; if (selectedConditionType === "min_doc_count") transition.conditions = { min_doc_count: 1000000 }; if (selectedConditionType === "min_size") transition.conditions = { min_size: "50gb" }; if (selectedConditionType === "min_rollover_age") transition.conditions = { min_rollover_age: "7d" }; if (selectedConditionType === "cron") transition.conditions = { cron: { cron: { expression: "* 17 * * SAT", timezone: "America/Los_Angeles" } } }; onChangeTransition({ ...uiTransition, transition, }); }} data-test-subj="create-state-action-type" /> {conditionType === "min_index_age" && ( <> ) => { const minIndexAge = e.target.value; onChangeTransition({ ...uiTransition, transition: { ...uiTransition.transition, conditions: { min_index_age: minIndexAge, }, }, }); }} data-test-subj="transition-render-conditions-min-index-age" /> )} {conditionType === "min_doc_count" && ( <> ) => { const minDocCount = e.target.valueAsNumber; const conditions = { min_doc_count: minDocCount }; // TODO: clean this up.. // set it to undefined instead of deleting... as we use the presence of the key itself for the type of transition if (isNaN(minDocCount)) conditions.min_doc_count = undefined; onChangeTransition({ ...uiTransition, transition: { ...uiTransition.transition, conditions, }, }); }} data-test-subj="transition-render-conditions-min-doc-count" /> )} {conditionType === "min_size" && ( <> ) => { const minSize = e.target.value; onChangeTransition({ ...uiTransition, transition: { ...uiTransition.transition, conditions: { min_size: minSize, }, }, }); }} data-test-subj="transition-render-conditions-min-size" /> )} {conditionType === "min_rollover_age" && ( <> ) => { const minRolloverAge = e.target.value; onChangeTransition({ ...uiTransition, transition: { ...uiTransition.transition, conditions: { min_rollover_age: minRolloverAge, }, }, }); }} data-test-subj="transition-render-conditions-min-rollover-age" /> )} {conditionType === "cron" && ( <> Learn more } /> ) => { const expression = e.target.value; onChangeTransition({ ...uiTransition, transition: { ...uiTransition.transition, conditions: { cron: { cron: { expression, timezone: uiTransition.transition.conditions?.cron?.cron.timezone || "", }, }, }, }, }); }} data-test-subj="transition-render-conditions-min-size" /> ) => { const timezone = e.target.value; onChangeTransition({ ...uiTransition, transition: { ...uiTransition.transition, conditions: { cron: { cron: { expression: uiTransition.transition.conditions?.cron?.cron.expression || "", timezone, }, }, }, }, }); }} /> )} ); }; export default Transition;