mirror of
https://github.com/ansible/awx.git
synced 2026-05-21 07:47:44 -02:30
create ArrayTextField component
This commit is contained in:
69
awx/ui_next/src/components/FormField/ArrayTextField.jsx
Normal file
69
awx/ui_next/src/components/FormField/ArrayTextField.jsx
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
import { useField } from 'formik';
|
||||||
|
import { FormGroup, TextArea } from '@patternfly/react-core';
|
||||||
|
import FieldTooltip from './FieldTooltip';
|
||||||
|
|
||||||
|
function ArrayTextField(props) {
|
||||||
|
const {
|
||||||
|
id,
|
||||||
|
helperText,
|
||||||
|
name,
|
||||||
|
label,
|
||||||
|
tooltip,
|
||||||
|
tooltipMaxWidth,
|
||||||
|
validate,
|
||||||
|
isRequired,
|
||||||
|
type,
|
||||||
|
...rest
|
||||||
|
} = props;
|
||||||
|
|
||||||
|
const [field, meta, helpers] = useField({ name, validate });
|
||||||
|
const isValid = !(meta.touched && meta.error);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<FormGroup
|
||||||
|
fieldId={id}
|
||||||
|
helperText={helperText}
|
||||||
|
helperTextInvalid={meta.error}
|
||||||
|
isRequired={isRequired}
|
||||||
|
validated={isValid ? 'default' : 'error'}
|
||||||
|
label={label}
|
||||||
|
labelIcon={<FieldTooltip content={tooltip} maxWidth={tooltipMaxWidth} />}
|
||||||
|
>
|
||||||
|
<TextArea
|
||||||
|
id={id}
|
||||||
|
isRequired={isRequired}
|
||||||
|
validated={isValid ? 'default' : 'error'}
|
||||||
|
resizeOrientation="vertical"
|
||||||
|
{...rest}
|
||||||
|
{...field}
|
||||||
|
value={field.value.join('\n')}
|
||||||
|
onChange={value => {
|
||||||
|
helpers.setValue(value.split('\n').map(v => v.trim()));
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</FormGroup>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
ArrayTextField.propTypes = {
|
||||||
|
helperText: PropTypes.string,
|
||||||
|
id: PropTypes.string.isRequired,
|
||||||
|
name: PropTypes.string.isRequired,
|
||||||
|
label: PropTypes.oneOfType([PropTypes.object, PropTypes.string]).isRequired,
|
||||||
|
validate: PropTypes.func,
|
||||||
|
isRequired: PropTypes.bool,
|
||||||
|
tooltip: PropTypes.node,
|
||||||
|
tooltipMaxWidth: PropTypes.string,
|
||||||
|
};
|
||||||
|
|
||||||
|
ArrayTextField.defaultProps = {
|
||||||
|
helperText: '',
|
||||||
|
validate: () => {},
|
||||||
|
isRequired: false,
|
||||||
|
tooltip: null,
|
||||||
|
tooltipMaxWidth: '',
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ArrayTextField;
|
||||||
@@ -4,3 +4,4 @@ export { default as FieldTooltip } from './FieldTooltip';
|
|||||||
export { default as PasswordField } from './PasswordField';
|
export { default as PasswordField } from './PasswordField';
|
||||||
export { default as PasswordInput } from './PasswordInput';
|
export { default as PasswordInput } from './PasswordInput';
|
||||||
export { default as FormSubmitError } from './FormSubmitError';
|
export { default as FormSubmitError } from './FormSubmitError';
|
||||||
|
export { default as ArrayTextField } from './ArrayTextField';
|
||||||
|
|||||||
@@ -98,7 +98,6 @@ function NotificationTemplateForm({
|
|||||||
i18n,
|
i18n,
|
||||||
}) {
|
}) {
|
||||||
const handleSubmit = values => {
|
const handleSubmit = values => {
|
||||||
// TODO: convert list values to arrays (do it in the field itself?)
|
|
||||||
onSubmit(normalizeFields(values, defaultMessages));
|
onSubmit(normalizeFields(values, defaultMessages));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import FormField, {
|
|||||||
PasswordField,
|
PasswordField,
|
||||||
CheckboxField,
|
CheckboxField,
|
||||||
FieldTooltip,
|
FieldTooltip,
|
||||||
|
ArrayTextField,
|
||||||
} from '../../../components/FormField';
|
} from '../../../components/FormField';
|
||||||
import AnsibleSelect from '../../../components/AnsibleSelect';
|
import AnsibleSelect from '../../../components/AnsibleSelect';
|
||||||
import CodeMirrorInput from '../../../components/CodeMirrorInput';
|
import CodeMirrorInput from '../../../components/CodeMirrorInput';
|
||||||
@@ -80,7 +81,7 @@ function EmailFields({ i18n }) {
|
|||||||
validate={required(null, i18n)}
|
validate={required(null, i18n)}
|
||||||
isRequired
|
isRequired
|
||||||
/>
|
/>
|
||||||
<FormField
|
<ArrayTextField
|
||||||
id="email-recipients"
|
id="email-recipients"
|
||||||
label={i18n._(t`Recipient list`)}
|
label={i18n._(t`Recipient list`)}
|
||||||
name="notification_configuration.recipients"
|
name="notification_configuration.recipients"
|
||||||
@@ -182,7 +183,7 @@ function GrafanaFields({ i18n }) {
|
|||||||
name="notification_configuration.panelId"
|
name="notification_configuration.panelId"
|
||||||
type="text"
|
type="text"
|
||||||
/>
|
/>
|
||||||
<FormField
|
<ArrayTextField
|
||||||
id="grafana-tags"
|
id="grafana-tags"
|
||||||
label={i18n._(t`Tags for the annotation (optional)`)}
|
label={i18n._(t`Tags for the annotation (optional)`)}
|
||||||
name="notification_configuration.annotation_tags"
|
name="notification_configuration.annotation_tags"
|
||||||
@@ -232,7 +233,7 @@ function IRCFields({ i18n }) {
|
|||||||
validate={required(null, i18n)}
|
validate={required(null, i18n)}
|
||||||
isRequired
|
isRequired
|
||||||
/>
|
/>
|
||||||
<FormField
|
<ArrayTextField
|
||||||
id="irc-targets"
|
id="irc-targets"
|
||||||
label={i18n._(t`Destination channels or users`)}
|
label={i18n._(t`Destination channels or users`)}
|
||||||
name="notification_configuration.targets"
|
name="notification_configuration.targets"
|
||||||
@@ -365,7 +366,7 @@ function RocketChatFields({ i18n }) {
|
|||||||
function SlackFields({ i18n }) {
|
function SlackFields({ i18n }) {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<FormField
|
<ArrayTextField
|
||||||
id="slack-channels"
|
id="slack-channels"
|
||||||
label={i18n._(t`Destination channels`)}
|
label={i18n._(t`Destination channels`)}
|
||||||
name="notification_configuration.channels"
|
name="notification_configuration.channels"
|
||||||
@@ -414,7 +415,7 @@ function TwilioFields({ i18n }) {
|
|||||||
tooltip={i18n._(t`Enter the number associated with the "Messaging
|
tooltip={i18n._(t`Enter the number associated with the "Messaging
|
||||||
Service" in Twilio in the format +18005550199.`)}
|
Service" in Twilio in the format +18005550199.`)}
|
||||||
/>
|
/>
|
||||||
<FormField
|
<ArrayTextField
|
||||||
id="twilio-destination-numbers"
|
id="twilio-destination-numbers"
|
||||||
label={i18n._(t`Destination SMS number(s)`)}
|
label={i18n._(t`Destination SMS number(s)`)}
|
||||||
name="notification_configuration.to_numbers"
|
name="notification_configuration.to_numbers"
|
||||||
|
|||||||
Reference in New Issue
Block a user