Merge pull request #8441 from GoFightNguyen/scaffolder/EntityPicker-arbitrary-values
EntityPicker: option for disabling arbitrary values
This commit is contained in:
@@ -20,7 +20,7 @@ import { renderInTestApp, TestApiProvider } from '@backstage/test-utils';
|
||||
import { FieldProps } from '@rjsf/core';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import React from 'react';
|
||||
import { EntityPicker } from './EntityPicker';
|
||||
import { EntityPicker, allowArbitraryValues } from './EntityPicker';
|
||||
|
||||
const makeEntity = (kind: string, namespace: string, name: string): Entity => ({
|
||||
apiVersion: 'backstage.io/v1beta1',
|
||||
@@ -136,3 +136,37 @@ describe('<EntityPicker />', () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('allowArbitraryValues', () => {
|
||||
describe('without ui:options', () => {
|
||||
it('defaults to true', () => {
|
||||
const uiSchema = {};
|
||||
const result = allowArbitraryValues(uiSchema);
|
||||
expect(result).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('without ui:options.allowArbitraryValues', () => {
|
||||
it('defaults to true', () => {
|
||||
const uiSchema = { 'ui:options': {} };
|
||||
const result = allowArbitraryValues(uiSchema);
|
||||
expect(result).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('with ui:options.allowArbitraryValues set to true', () => {
|
||||
it('is true', () => {
|
||||
const uiSchema = { 'ui:options': { allowArbitraryValues: true } };
|
||||
const result = allowArbitraryValues(uiSchema);
|
||||
expect(result).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('with ui:options.allowArbitraryValues set to false', () => {
|
||||
it('is false', () => {
|
||||
const uiSchema = { 'ui:options': { allowArbitraryValues: false } };
|
||||
const result = allowArbitraryValues(uiSchema);
|
||||
expect(result).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -21,10 +21,13 @@ import {
|
||||
import { TextField } from '@material-ui/core';
|
||||
import FormControl from '@material-ui/core/FormControl';
|
||||
import Autocomplete from '@material-ui/lab/Autocomplete';
|
||||
import { FieldProps } from '@rjsf/core';
|
||||
import { FieldProps, UiSchema } from '@rjsf/core';
|
||||
import React, { useCallback, useEffect } from 'react';
|
||||
import { useAsync } from 'react-use';
|
||||
|
||||
export const allowArbitraryValues = (uiSchema: UiSchema): boolean =>
|
||||
(uiSchema['ui:options']?.allowArbitraryValues as boolean) ?? true;
|
||||
|
||||
export const EntityPicker = ({
|
||||
onChange,
|
||||
schema: { title = 'Entity', description = 'An entity from the catalog' },
|
||||
@@ -75,7 +78,7 @@ export const EntityPicker = ({
|
||||
onChange={onSelect}
|
||||
options={entityRefs || []}
|
||||
autoSelect
|
||||
freeSolo
|
||||
freeSolo={allowArbitraryValues(uiSchema)}
|
||||
renderInput={params => (
|
||||
<TextField
|
||||
{...params}
|
||||
|
||||
Reference in New Issue
Block a user