feat(config): add support for setting custom identifier field (#1543)
This commit is contained in:
committed by
Shawn Erquhart
parent
288359da3b
commit
12418dd7f0
@ -42,7 +42,9 @@ const slugFormatter = (collection, entryData, slugConfig) => {
|
||||
|
||||
const identifier = entryData.get(selectIdentifier(collection));
|
||||
if (!identifier) {
|
||||
throw new Error('Collection must have a field name that is a valid entry identifier');
|
||||
throw new Error(
|
||||
'Collection must have a field name that is a valid entry identifier, or must have `identifier_field` set',
|
||||
);
|
||||
}
|
||||
|
||||
const slug = template
|
||||
|
@ -126,7 +126,7 @@ const getConfigSchema = () => ({
|
||||
fields: {
|
||||
contains: {
|
||||
properties: {
|
||||
name: { enum: IDENTIFIER_FIELDS },
|
||||
name: { enum: [{ $data: '3/identifier_field' }, ...IDENTIFIER_FIELDS] },
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -169,7 +169,7 @@ class ConfigError extends Error {
|
||||
* the config that is passed in.
|
||||
*/
|
||||
export function validateConfig(config) {
|
||||
const ajv = new AJV({ allErrors: true, jsonPointers: true });
|
||||
const ajv = new AJV({ allErrors: true, jsonPointers: true, $data: true });
|
||||
ajvErrors(ajv);
|
||||
|
||||
const valid = ajv.validate(getConfigSchema(), config);
|
||||
|
@ -113,9 +113,10 @@ export const selectAllowDeletion = collection =>
|
||||
export const selectTemplateName = (collection, slug) =>
|
||||
selectors[collection.get('type')].templateName(collection, slug);
|
||||
export const selectIdentifier = collection => {
|
||||
const identifier = collection.get('identifier_field');
|
||||
const indentifierFields = identifier ? [identifier, ...IDENTIFIER_FIELDS] : IDENTIFIER_FIELDS;
|
||||
const fieldNames = collection.get('fields').map(field => field.get('name'));
|
||||
return IDENTIFIER_FIELDS.find(id => fieldNames.find(name => name.toLowerCase().trim() === id));
|
||||
// There must be a field whose `name` matches one of the IDENTIFIER_FIELDS.
|
||||
return indentifierFields.find(id => fieldNames.find(name => name.toLowerCase().trim() === id));
|
||||
};
|
||||
export const selectInferedField = (collection, fieldName) => {
|
||||
const inferableField = INFERABLE_FIELDS[fieldName];
|
||||
|
Reference in New Issue
Block a user