import React, { useCallback, useEffect } from 'react'; import { arrayOf, string, func, bool } from 'prop-types'; import { withRouter } from 'react-router-dom'; import { t, Trans } from '@lingui/macro'; import { FormGroup } from '@patternfly/react-core'; import { InstanceGroupsAPI } from 'api'; import { InstanceGroup } from 'types'; import { getQSConfig, parseQueryString } from 'util/qs'; import useRequest from 'hooks/useRequest'; import Popover from '../Popover'; import OptionsList from '../OptionsList'; import Lookup from './Lookup'; import LookupErrorMessage from './shared/LookupErrorMessage'; const QS_CONFIG = getQSConfig('instance-groups', { page: 1, page_size: 5, order_by: 'name', }); function InstanceGroupsLookup({ value, onChange, tooltip, className, required, history, fieldName, validate, }) { const { result: { instanceGroups, count, relatedSearchableKeys, searchableKeys }, request: fetchInstanceGroups, error, isLoading, } = useRequest( useCallback(async () => { const params = parseQueryString(QS_CONFIG, history.location.search); const [{ data }, actionsResponse] = await Promise.all([ InstanceGroupsAPI.read(params), InstanceGroupsAPI.readOptions(), ]); return { instanceGroups: data.results, count: data.count, relatedSearchableKeys: ( actionsResponse?.data?.related_search_fields || [] ).map((val) => val.slice(0, -8)), searchableKeys: Object.keys( actionsResponse.data.actions?.GET || {} ).filter((key) => actionsResponse.data.actions?.GET[key].filterable), }; }, [history.location]), { instanceGroups: [], count: 0, relatedSearchableKeys: [], searchableKeys: [], } ); useEffect(() => { fetchInstanceGroups(); }, [fetchInstanceGroups]); return ( } fieldId="org-instance-groups" > Selected
Note: The order in which these are selected sets the execution precedence. Select more than one to enable drag. } renderOptionsList={({ state, dispatch, canDelete }) => ( dispatch({ type: 'SELECT_ITEM', item })} deselectItem={(item) => dispatch({ type: 'DESELECT_ITEM', item })} sortSelectedItems={(selectedItems) => dispatch({ type: 'SET_SELECTED_ITEMS', selectedItems }) } isSelectedDraggable /> )} />
); } InstanceGroupsLookup.propTypes = { value: arrayOf(InstanceGroup).isRequired, tooltip: string, onChange: func.isRequired, className: string, required: bool, validate: func, fieldName: string, }; InstanceGroupsLookup.defaultProps = { tooltip: '', className: '', required: false, validate: () => undefined, fieldName: 'instance_groups', }; export default withRouter(InstanceGroupsLookup);