fix: deprecate inconsistent config param case (#4172)

This commit is contained in:
andreascm
2020-08-31 19:25:48 +08:00
committed by GitHub
parent f1376aa5c3
commit 88a5a8098e
31 changed files with 409 additions and 144 deletions

View File

@ -113,7 +113,7 @@ export default class RelationControl extends React.Component {
const metadata = {};
const allOptions = await Promise.all(
initialSearchValues.map((v, index) => {
return query(forID, collection, [field.get('valueField')], v, file, 1).then(
return query(forID, collection, [field.get('value_field')], v, file, 1).then(
({ payload }) => {
const hits = payload.response?.hits || [];
const options = this.parseHitOptions(hits);
@ -189,8 +189,8 @@ export default class RelationControl extends React.Component {
parseHitOptions = hits => {
const { field } = this.props;
const valueField = field.get('valueField');
const displayField = field.get('displayFields') || List([field.get('valueField')]);
const valueField = field.get('value_field');
const displayField = field.get('display_fields') || List([field.get('value_field')]);
const options = hits.reduce((acc, hit) => {
const valuesPaths = stringTemplate.expandPath({ data: hit.data, path: valueField });
for (let i = 0; i < valuesPaths.length; i++) {
@ -214,8 +214,8 @@ export default class RelationControl extends React.Component {
loadOptions = debounce((term, callback) => {
const { field, query, forID } = this.props;
const collection = field.get('collection');
const searchFields = field.get('searchFields');
const optionsLength = field.get('optionsLength') || 20;
const searchFields = field.get('search_fields');
const optionsLength = field.get('options_length') || 20;
const searchFieldsArray = List.isList(searchFields) ? searchFields.toJS() : [searchFields];
const file = field.get('file');

View File

@ -15,34 +15,34 @@ const RelationControl = NetlifyCmsWidgetRelation.controlComponent;
const fieldConfig = {
name: 'post',
collection: 'posts',
displayFields: ['title', 'slug'],
searchFields: ['title', 'body'],
valueField: 'title',
display_fields: ['title', 'slug'],
search_fields: ['title', 'body'],
value_field: 'title',
};
const customizedOptionsLengthConfig = {
name: 'post',
collection: 'posts',
displayFields: ['title', 'slug'],
searchFields: ['title', 'body'],
valueField: 'title',
optionsLength: 10,
display_fields: ['title', 'slug'],
search_fields: ['title', 'body'],
value_field: 'title',
options_length: 10,
};
const deeplyNestedFieldConfig = {
name: 'post',
collection: 'posts',
displayFields: ['title', 'slug', 'deeply.nested.post.field'],
searchFields: ['deeply.nested.post.field'],
valueField: 'title',
display_fields: ['title', 'slug', 'deeply.nested.post.field'],
search_fields: ['deeply.nested.post.field'],
value_field: 'title',
};
const nestedFieldConfig = {
name: 'post',
collection: 'posts',
displayFields: ['title', 'slug', 'nested.field_1'],
searchFields: ['nested.field_1', 'nested.field_2'],
valueField: 'title',
display_fields: ['title', 'slug', 'nested.field_1'],
search_fields: ['nested.field_1', 'nested.field_2'],
value_field: 'title',
};
const generateHits = length => {
@ -327,9 +327,9 @@ describe('Relation widget', () => {
const stringTemplateConfig = {
name: 'post',
collection: 'posts',
displayFields: ['{{slug}}', '{{filename}}', '{{extension}}'],
searchFields: ['slug'],
valueField: '{{slug}}',
display_fields: ['{{slug}}', '{{filename}}', '{{extension}}'],
search_fields: ['slug'],
value_field: '{{slug}}',
};
const field = fromJS(stringTemplateConfig);
@ -348,8 +348,8 @@ describe('Relation widget', () => {
});
});
it('should default displayFields to valueField', async () => {
const field = fromJS(fieldConfig).delete('displayFields');
it('should default display_fields to value_field', async () => {
const field = fromJS(fieldConfig).delete('display_fields');
const { getAllByText, input } = setup({ field });
fireEvent.keyDown(input, { key: 'ArrowDown' });
@ -361,9 +361,9 @@ describe('Relation widget', () => {
const fieldConfig = {
name: 'numbers',
collection: 'numbers_collection',
valueField: 'index',
searchFields: ['index'],
displayFields: ['title'],
value_field: 'index',
search_fields: ['index'],
display_fields: ['title'],
};
const field = fromJS(fieldConfig);
@ -442,8 +442,8 @@ describe('Relation widget', () => {
name: 'categories',
collection: 'file',
file: 'simple_file',
valueField: 'categories.*',
displayFields: ['categories.*'],
value_field: 'categories.*',
display_fields: ['categories.*'],
};
it('should handle simple list', async () => {
@ -462,8 +462,8 @@ describe('Relation widget', () => {
const field = fromJS({
...fileFieldConfig,
file: 'nested_file',
valueField: 'nested.categories.*.id',
displayFields: ['nested.categories.*.name'],
value_field: 'nested.categories.*.id',
display_fields: ['nested.categories.*.name'],
});
const { getAllByText, input, getByText } = setup({ field });
fireEvent.keyDown(input, { key: 'ArrowDown' });

View File

@ -1,12 +1,19 @@
export default {
properties: {
collection: { type: 'string' },
valueField: { type: 'string' },
searchFields: { type: 'array', minItems: 1, items: { type: 'string' } },
value_field: { type: 'string' },
search_fields: { type: 'array', minItems: 1, items: { type: 'string' } },
file: { type: 'string' },
multiple: { type: 'boolean' },
displayFields: { type: 'array', minItems: 1, items: { type: 'string' } },
optionsLength: { type: 'integer' },
display_fields: { type: 'array', minItems: 1, items: { type: 'string' } },
options_length: { type: 'integer' },
},
required: ['collection', 'valueField', 'searchFields'],
oneOf: [
{
required: ['collection', 'value_field', 'search_fields'],
},
{
required: ['collection', 'valueField', 'searchFields'],
},
],
};