mirror of
https://github.com/grafana/grafana.git
synced 2025-02-14 17:43:35 -06:00
* Update hook form * Update Form component * Update ChangePassword.tsx * Update custom types * Update SaveDashboardForm * Update form story * Update FieldArray.story.tsx * Bump hook form version * Update typescript to v4.2.4 * Update ForgottenPassword.tsx * Update LoginForm.tsx * Update SignupPage.tsx * Update VerifyEmail.tsx * Update AdminEditOrgPage.tsx * Update UserCreatePage.tsx * Update BasicSettings.tsx * Update NotificationChannelForm.tsx * Update NotificationChannelOptions.tsx * Update NotificationSettings.tsx * Update OptionElement.tsx * Update AlertRuleForm.tsx * Update AlertTypeStep.tsx * Update AnnotationsField.tsx * Update ConditionField.tsx * Update ConditionsStep.tsx * Update GroupAndNamespaceFields.tsx * Update LabelsField.tsx * Update QueryStep.tsx * Update RowOptionsForm.tsx * Update SaveDashboardAsForm.tsx * Update NewDashboardsFolder.tsx * Update ImportDashboardForm.tsx * Update DashboardImportPage.tsx * Update NewOrgPage.tsx * Update OrgProfile.tsx * Update UserInviteForm.tsx * Update PlaylistForm.tsx * Update ChangePasswordForm.tsx * Update UserProfileEditForm.tsx * Update TeamSettings.tsx * Update SignupInvited.tsx * Expose setValue from the Form * Update typescript to v4.2.4 * Remove ref from field props * Fix tests * Revert TS update * Use exact version * Update latest batch of changes * Reduce the number of strict TS errors * Fix defaults * more type error fixes * Update CreateTeam * fix folder picker in rule form * fixes for hook form 7 * Update docs Co-authored-by: Domas <domasx2@gmail.com>
57 lines
1.8 KiB
TypeScript
57 lines
1.8 KiB
TypeScript
import React, { FC } from 'react';
|
|
import { FormAPI, Input, InputControl, Select, TextArea } from '@grafana/ui';
|
|
import { NotificationChannelOption } from '../../../types';
|
|
|
|
interface Props extends Pick<FormAPI<any>, 'register' | 'control'> {
|
|
option: NotificationChannelOption;
|
|
invalid?: boolean;
|
|
}
|
|
|
|
export const OptionElement: FC<Props> = ({ control, option, register, invalid }) => {
|
|
const modelValue = option.secure ? `secureSettings.${option.propertyName}` : `settings.${option.propertyName}`;
|
|
switch (option.element) {
|
|
case 'input':
|
|
return (
|
|
<Input
|
|
{...register(`${modelValue}`, {
|
|
required: option.required ? 'Required' : false,
|
|
validate: (v) => (option.validationRule !== '' ? validateOption(v, option.validationRule) : true),
|
|
})}
|
|
invalid={invalid}
|
|
type={option.inputType}
|
|
placeholder={option.placeholder}
|
|
/>
|
|
);
|
|
|
|
case 'select':
|
|
return (
|
|
<InputControl
|
|
control={control}
|
|
name={`${modelValue}`}
|
|
render={({ field: { ref, ...field } }) => (
|
|
<Select {...field} options={option.selectOptions} invalid={invalid} />
|
|
)}
|
|
/>
|
|
);
|
|
|
|
case 'textarea':
|
|
return (
|
|
<TextArea
|
|
invalid={invalid}
|
|
{...register(`${modelValue}`, {
|
|
required: option.required ? 'Required' : false,
|
|
validate: (v) => (option.validationRule !== '' ? validateOption(v, option.validationRule) : true),
|
|
})}
|
|
/>
|
|
);
|
|
|
|
default:
|
|
console.error('Element not supported', option.element);
|
|
return null;
|
|
}
|
|
};
|
|
|
|
const validateOption = (value: string, validationRule: string) => {
|
|
return RegExp(validationRule).test(value) ? true : 'Invalid format';
|
|
};
|