/*
* 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;