mirror of
https://github.com/ansible/awx.git
synced 2026-03-22 03:17:39 -02:30
Allows user to generate a label on the JTForm
This commit is contained in:
@@ -1,4 +1,7 @@
|
|||||||
import { useState, useEffect } from 'react';
|
import {
|
||||||
|
useState,
|
||||||
|
useEffect
|
||||||
|
} from 'react';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Hook for using PatternFly's <Select> component when a pre-existing value
|
Hook for using PatternFly's <Select> component when a pre-existing value
|
||||||
@@ -21,6 +24,7 @@ export default function useSyncedSelectValue(value, onChange) {
|
|||||||
}, [value, options]);
|
}, [value, options]);
|
||||||
|
|
||||||
const onSelect = (event, item) => {
|
const onSelect = (event, item) => {
|
||||||
|
|
||||||
if (selections.includes(item)) {
|
if (selections.includes(item)) {
|
||||||
onChange(selections.filter(i => i !== item));
|
onChange(selections.filter(i => i !== item));
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -57,13 +57,26 @@ function LabelSelect({ value, placeholder, onChange, onError }) {
|
|||||||
<Select
|
<Select
|
||||||
variant={SelectVariant.typeaheadMulti}
|
variant={SelectVariant.typeaheadMulti}
|
||||||
onToggle={toggleExpanded}
|
onToggle={toggleExpanded}
|
||||||
onSelect={onSelect}
|
onSelect={(e, item) => {
|
||||||
|
if (typeof item === 'string') {
|
||||||
|
item = { id: item, name: item };
|
||||||
|
}
|
||||||
|
onSelect(e, item);
|
||||||
|
}}
|
||||||
onClear={() => onChange([])}
|
onClear={() => onChange([])}
|
||||||
onFilter={event => {
|
onFilter={event => {
|
||||||
const str = event.target.value.toLowerCase();
|
const str = event.target.value.toLowerCase();
|
||||||
const matches = options.filter(o => o.name.toLowerCase().includes(str));
|
const matches = options.filter(o => o.name.toLowerCase().includes(str));
|
||||||
return renderOptions(matches);
|
return renderOptions(matches);
|
||||||
}}
|
}}
|
||||||
|
isCreatable
|
||||||
|
onCreateOption={label => {
|
||||||
|
label = label.trim();
|
||||||
|
if (!options.includes(label)) {
|
||||||
|
setOptions(options.concat({ name: label, id: label }));
|
||||||
|
}
|
||||||
|
return label;
|
||||||
|
}}
|
||||||
selections={selections}
|
selections={selections}
|
||||||
isExpanded={isExpanded}
|
isExpanded={isExpanded}
|
||||||
ariaLabelledBy="label-select"
|
ariaLabelledBy="label-select"
|
||||||
|
|||||||
@@ -56,4 +56,20 @@ describe('<LabelSelect />', () => {
|
|||||||
const selectOptions = wrapper.find('SelectOption');
|
const selectOptions = wrapper.find('SelectOption');
|
||||||
expect(selectOptions).toHaveLength(4);
|
expect(selectOptions).toHaveLength(4);
|
||||||
});
|
});
|
||||||
|
test('Generate a label ', async () => {
|
||||||
|
let wrapper;
|
||||||
|
const onChange = jest.fn();
|
||||||
|
LabelsAPI.read.mockReturnValueOnce({
|
||||||
|
data: {
|
||||||
|
options,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
await act(async () => {
|
||||||
|
wrapper = mount(
|
||||||
|
<LabelSelect value={[]} onError={() => {}} onChange={onChange} />
|
||||||
|
);
|
||||||
|
});
|
||||||
|
await wrapper.find('Select').invoke('onSelect')({}, 'foo');
|
||||||
|
expect(onChange).toBeCalledWith([{ id: 'foo', name: 'foo' }]);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user