mirror of
https://github.com/strapi/strapi.git
synced 2025-09-06 23:28:02 +00:00
Handle added upload relations
This commit is contained in:
parent
2d4dded100
commit
043838ba3f
@ -615,7 +615,7 @@ class SettingPage extends React.PureComponent {
|
|||||||
const {
|
const {
|
||||||
onSubmit,
|
onSubmit,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
// console.log(this.props.schema);
|
console.log(this.props.schema);
|
||||||
// TODO: Add loader!
|
// TODO: Add loader!
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -229,12 +229,21 @@ module.exports = async cb => {
|
|||||||
|
|
||||||
return acc;
|
return acc;
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const getApisKeys = (data, sameArray) => sameArray.map(apiPath => {
|
const getApisKeys = (data, sameArray) => sameArray.map(apiPath => {
|
||||||
const fields = Object.keys(_.get(data.models, apiPath.concat(['fields'])));
|
const fields = Object.keys(_.get(data.models, apiPath.concat(['fields'])));
|
||||||
|
|
||||||
return fields.map(field => `${apiPath.join('.')}.fields.${field}`);
|
return fields.map(field => `${apiPath.join('.')}.fields.${field}`);
|
||||||
});
|
});
|
||||||
|
const getApisUploadRelations = (data, sameArray) => sameArray.map(apiPath => {
|
||||||
|
const relationPath = [...apiPath, 'relations'];
|
||||||
|
const relationsObject = _.get(data.models, relationPath, {});
|
||||||
|
const relations = Object.keys(relationsObject)
|
||||||
|
.filter(relationName => {
|
||||||
|
return _.get(data.models, [...relationPath, relationName, 'plugin' ]) === 'upload';
|
||||||
|
});
|
||||||
|
|
||||||
|
return relations.map(relation => `${apiPath.join('.')}.editDisplay.availableFields.${relation}`);
|
||||||
|
});
|
||||||
|
|
||||||
const getEditDisplayAvailableFieldsPath = attrPath => [..._.take(attrPath, attrPath.length -2), 'editDisplay', 'availableFields', attrPath[attrPath.length - 1]];
|
const getEditDisplayAvailableFieldsPath = attrPath => [..._.take(attrPath, attrPath.length -2), 'editDisplay', 'availableFields', attrPath[attrPath.length - 1]];
|
||||||
const getEditDisplayFieldsPath = attrPath => [..._.take(attrPath, attrPath.length -2), 'editDisplay', 'fields'];
|
const getEditDisplayFieldsPath = attrPath => [..._.take(attrPath, attrPath.length -2), 'editDisplay', 'fields'];
|
||||||
@ -259,6 +268,9 @@ module.exports = async cb => {
|
|||||||
const schemaSameApisKeys = _.flattenDeep(getApisKeys(schema, sameApis));
|
const schemaSameApisKeys = _.flattenDeep(getApisKeys(schema, sameApis));
|
||||||
const prevSchemaSameApisKeys = _.flattenDeep(getApisKeys(prevSchema, sameApis));
|
const prevSchemaSameApisKeys = _.flattenDeep(getApisKeys(prevSchema, sameApis));
|
||||||
const sameApisAttrToAdd = schemaSameApisKeys.filter(attr => prevSchemaSameApisKeys.indexOf(attr) === -1).map(splitted);
|
const sameApisAttrToAdd = schemaSameApisKeys.filter(attr => prevSchemaSameApisKeys.indexOf(attr) === -1).map(splitted);
|
||||||
|
const prevSchemaSameApisUploadRelations = _.flattenDeep(getApisUploadRelations(prevSchema, sameApis));
|
||||||
|
const schemaSameApisUploadRelations = _.flattenDeep(getApisUploadRelations(schema, sameApis));
|
||||||
|
const sameApisUploadRelationsToAdd = schemaSameApisUploadRelations.filter(attr => prevSchemaSameApisUploadRelations.indexOf(attr) === -1).map(splitted);
|
||||||
const sameApisAttrToRemove = prevSchemaSameApisKeys.filter(attr => schemaSameApisKeys.indexOf(attr) === -1).map(splitted);
|
const sameApisAttrToRemove = prevSchemaSameApisKeys.filter(attr => schemaSameApisKeys.indexOf(attr) === -1).map(splitted);
|
||||||
|
|
||||||
// Remove api
|
// Remove api
|
||||||
@ -337,6 +349,17 @@ module.exports = async cb => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Special handler for the upload relations
|
||||||
|
sameApisUploadRelationsToAdd.forEach(attrPath => {
|
||||||
|
const attr = _.get(schema.models, attrPath);
|
||||||
|
_.set(prevSchema.models, attrPath, attr);
|
||||||
|
|
||||||
|
const fieldsPath = [..._.take(attrPath, attrPath.length -2), 'fields'];
|
||||||
|
const currentFields = _.get(prevSchema.models, fieldsPath, []);
|
||||||
|
currentFields.push(attr.name);
|
||||||
|
_.set(prevSchema.models, fieldsPath, currentFields);
|
||||||
|
});
|
||||||
|
|
||||||
await pluginStore.set({ key: 'schema', value: prevSchema });
|
await pluginStore.set({ key: 'schema', value: prevSchema });
|
||||||
} catch(err) {
|
} catch(err) {
|
||||||
console.log('error', err);
|
console.log('error', err);
|
||||||
|
@ -117,6 +117,11 @@ module.exports = {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Delete them from the available fields
|
||||||
|
fieldsToRemove.forEach(field => {
|
||||||
|
_.unset(schema, [...schemaPath, 'editDisplay', 'availableFields', field]);
|
||||||
|
});
|
||||||
|
|
||||||
_.set(schema, [...schemaPath, 'editDisplay', 'fields'], newList.toJS());
|
_.set(schema, [...schemaPath, 'editDisplay', 'fields'], newList.toJS());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user