diff --git a/webpack/ForemanWebhooks/Routes/Webhooks/Components/WebhookForm/Components/FieldConstructor.js b/webpack/ForemanWebhooks/Routes/Webhooks/Components/WebhookForm/Components/FieldConstructor.js new file mode 100644 index 0000000..f6848f3 --- /dev/null +++ b/webpack/ForemanWebhooks/Routes/Webhooks/Components/WebhookForm/Components/FieldConstructor.js @@ -0,0 +1,305 @@ +import React, { useEffect, useState } from 'react'; +import PropTypes from 'prop-types'; +import AutocompleteInput from 'foremanReact/components/common/AutocompleteInput/AutocompleteInput'; +import { translate as __ } from 'foremanReact/common/I18n'; +import { + ExclamationCircleIcon, + HelpIcon, + PencilAltIcon, +} from '@patternfly/react-icons'; +import { + TextInput, + Checkbox, + Button, + FormHelperText, + HelperText, + HelperTextItem, + Icon, + TextArea, + FormGroup, + Popover, + Grid, + GridItem, +} from '@patternfly/react-core'; + +const FormField = ({ + name, + type, + required, + options, + isLoading, + validated, + value, + disabled, + setValue, + placeholder, + errMsg, + ...props +}) => { + const [fieldValidated, setFieldValidated] = useState('default'); + const [firstLoad, setFirstLoad] = useState(true); + const [isDisabled, setIsDisabled] = useState(disabled); + + const requiredValidate = () => { + if (firstLoad || !required) return; + if (!value || value === '' || validated === 'error') + setFieldValidated('error'); + else setFieldValidated('success'); + }; + + const localHandler = (_event, newValue) => { + setValue(name, newValue); + }; + + useEffect(() => { + setFirstLoad(false); + }, []); + + useEffect(() => { + requiredValidate(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [value]); + + if (type === 'checkbox') { + return ( + <> + { + setValue(name, newValue); + }} + isDisabled={isLoading || isDisabled} + isRequired={required} + type={type} + validated={fieldValidated} + /> + + + ); + } else if (type === 'textarea') { + return ( + <> +