/* * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ import React from "react"; import { EuiDescribedFormGroup, EuiFormRow, EuiFormRowProps } from "@elastic/eui"; export type CustomFormRowProps = { position?: "top" | "bottom"; direction?: "hoz" | "ver"; isOptional?: boolean; } & Partial<EuiFormRowProps>; export function OptionalLabel() { return <i> – optional</i>; } export default function CustomFormRow(props: CustomFormRowProps) { const { helpText, children, position = "top", direction = "ver", label, isOptional, ...others } = props; if (direction === "hoz") { return ( <EuiDescribedFormGroup fullWidth descriptionFlexItemProps={{ style: { maxWidth: 700 } }} title={ <div> {label} {isOptional ? <OptionalLabel /> : null} </div> } description={helpText} > {children ? <EuiFormRow {...others}>{children}</EuiFormRow> : null} </EuiDescribedFormGroup> ); } return ( <EuiFormRow {...others} label={ isOptional ? ( <> {label} <OptionalLabel /> </> ) : ( label ) } helpText={position === "bottom" ? helpText : undefined} > <> {helpText && position === "top" ? ( <div style={{ paddingTop: 0, paddingBottom: 4 }} className="euiFormHelpText euiFormRow__text"> {helpText} </div> ) : null} {children} </> </EuiFormRow> ); }