feat: ui:disabled allowed in MultiEntityPicker

Signed-off-by: Nikunj Hudka <nikunjhudka123@gmail.com>
This commit is contained in:
Nikunj Hudka
2025-02-23 23:01:19 -04:00
parent 4c6c47b401
commit 3bed6958fa
2 changed files with 39 additions and 1 deletions
@@ -407,6 +407,38 @@ describe('<MultiEntityPicker />', () => {
});
});
describe('ui:disabled MultiEntityPicker', () => {
beforeEach(() => {
uiSchema = {
'ui:options': {
allowArbitraryValues: true,
},
'ui:disabled': true,
};
props = {
onChange,
schema,
required: true,
uiSchema,
rawErrors,
formData,
} as unknown as FieldProps<any>;
catalogApi.getEntities.mockResolvedValue({ items: entities });
});
it('Prevents user from modifying input when ui:disabled is true', async () => {
props.formData = ['component/default:myentity'];
await renderInTestApp(
<Wrapper>
<MultiEntityPicker {...props} />
</Wrapper>,
);
const input = screen.getByRole('textbox');
expect(input).toBeDisabled();
});
});
describe('Optional MultiEntityPicker', () => {
beforeEach(() => {
uiSchema = {
@@ -61,10 +61,12 @@ export const MultiEntityPicker = (props: MultiEntityPickerProps) => {
formData,
idSchema,
} = props;
const catalogFilter = buildCatalogFilter(uiSchema);
const defaultKind = uiSchema['ui:options']?.defaultKind;
const defaultNamespace =
uiSchema['ui:options']?.defaultNamespace || undefined;
const isDisabled = uiSchema?.['ui:disabled'] ?? false;
const [noOfItemsSelected, setNoOfItemsSelected] = useState(0);
const catalogApi = useApi(catalogApiRef);
@@ -151,7 +153,10 @@ export const MultiEntityPicker = (props: MultiEntityPickerProps) => {
multiple
filterSelectedOptions
disabled={
required && !allowArbitraryValues && entities?.entities?.length === 1
isDisabled ||
(required &&
!allowArbitraryValues &&
entities?.entities?.length === 1)
}
id={idSchema?.$id}
defaultValue={formData}
@@ -175,6 +180,7 @@ export const MultiEntityPicker = (props: MultiEntityPickerProps) => {
<TextField
{...params}
label={title}
disabled={isDisabled}
margin="dense"
helperText={description}
FormHelperTextProps={{