import React, { useState } from 'react'; import useFieldApi from '@data-driven-forms/react-form-renderer/use-field-api'; import useFormApi from '@data-driven-forms/react-form-renderer/use-form-api'; import { Alert } from '@patternfly/react-core'; import { FormGroup, Select, SelectOption, SelectVariant, Spinner, } from '@patternfly/react-core'; import PropTypes from 'prop-types'; import { useGetAWSSourcesQuery } from '../../../store/apiSlice'; export const AWSSourcesSelect = ({ label, isRequired, className, ...props }) => { const { change, getState } = useFormApi(); const { input } = useFieldApi(props); const [isOpen, setIsOpen] = useState(false); const [selectedSourceId, setSelectedSourceId] = useState( getState()?.values?.['aws-sources-select'] ); const { data: sources, isFetching, isSuccess, isError, refetch, } = useGetAWSSourcesQuery(); const handleSelect = (_, sourceName) => { const sourceId = sources.find((source) => source.name === sourceName).id; setSelectedSourceId(sourceId); setIsOpen(false); change(input.name, sourceId); }; const handleClear = () => { setSelectedSourceId(); change(input.name, undefined); }; const handleToggle = () => { // Refetch upon opening (but not upon closing) if (!isOpen) { refetch(); } setIsOpen(!isOpen); }; return ( <> <> {isError && ( Sources cannot be reached, try again later or enter an AWS account ID manually. )} ); }; AWSSourcesSelect.propTypes = { className: PropTypes.string, label: PropTypes.node, isRequired: PropTypes.bool, };