diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/actions.js b/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/actions.js index 053efc44b7..94a9991fef 100644 --- a/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/actions.js +++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/actions.js @@ -251,6 +251,7 @@ function setAttributeFormData(hash) { unique: false, maxLength: false, minLength: false, + multiple: false, min: false, max: false, }), diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/forms.json b/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/forms.json index 2928393c43..8ecf385475 100644 --- a/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/forms.json +++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/forms.json @@ -725,7 +725,7 @@ "label": { "id": "content-type-builder.form.attribute.item.media.multiple" }, - "name": "multiple", + "name": "params.multiple", "type": "checkbox", "value": false, "validations": { diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/actions.js b/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/actions.js index dcb476ee04..219f15d33b 100644 --- a/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/actions.js +++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/actions.js @@ -120,7 +120,7 @@ export function modelFetch(modelName) { export function modelFetchSucceeded(data) { const model = data; - const defaultKeys = ['required', 'unique', 'type', 'key', 'target', 'nature', 'targetColumnName', 'columnName']; + const defaultKeys = ['required', 'unique', 'type', 'key', 'target', 'nature', 'targetColumnName', 'columnName', 'multiple']; forEach(model.model.attributes, (attribute, index) => { map(attribute.params, (value, key) => { diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/sagas.js b/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/sagas.js index ebb690db6c..f0da32e794 100644 --- a/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/sagas.js +++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/ModelPage/sagas.js @@ -100,7 +100,7 @@ export function* submitChanges(action) { set(body.attributes[index].params, 'plugin', true); } - if (!value) { + if (!value && key !== 'multiple') { const paramsKey = includes(key, 'Value') ? replace(key,'Value', '') : key; unset(body.attributes[index].params, paramsKey); } @@ -116,6 +116,7 @@ export function* submitChanges(action) { const baseUrl = '/content-type-builder/models/'; const requestUrl = method === 'POST' ? baseUrl : `${baseUrl}${body.name}`; const opts = { method, body }; + const response = yield call(request, requestUrl, opts, true); if (response.ok) { diff --git a/packages/strapi-plugin-content-type-builder/services/ContentTypeBuilder.js b/packages/strapi-plugin-content-type-builder/services/ContentTypeBuilder.js index 325cb90dfc..09a03eba67 100755 --- a/packages/strapi-plugin-content-type-builder/services/ContentTypeBuilder.js +++ b/packages/strapi-plugin-content-type-builder/services/ContentTypeBuilder.js @@ -44,18 +44,23 @@ module.exports = { const model = source ? _.get(strapi.plugins, [source, 'models', name]) : _.get(strapi.models, name); - // const model = _.get(strapi.models, name); - const attributes = []; _.forEach(model.attributes, (params, name) => { const relation = _.find(model.associations, { alias: name }); - if (relation) { - params = _.omit(params, ['collection', 'model', 'via']); - params.target = relation.model || relation.collection; - params.key = relation.via; - params.nature = relation.nature; - params.targetColumnName = _.get((params.plugin ? strapi.plugins[params.plugin].models : strapi.models )[params.target].attributes[params.key], 'columnName', ''); + if (relation && !_.isArray(_.get(relation, 'related'))) { + if (params.plugin === 'upload' && relation.model || relation.collection === 'file') { + params = { + type: 'media', + multiple: params.collection ? true : false + }; + } else { + params = _.omit(params, ['collection', 'model', 'via']); + params.target = relation.model || relation.collection; + params.key = relation.via; + params.nature = relation.nature; + params.targetColumnName = _.get((params.plugin ? strapi.plugins[params.plugin].models : strapi.models )[params.target].attributes[params.key], 'columnName', ''); + } } attributes.push({ @@ -144,6 +149,14 @@ module.exports = { _.forEach(attributesConfigurable, attribute => { if (_.has(attribute, 'params.type')) { attrs[attribute.name] = attribute.params; + + if (attribute.params.type === 'media') { + attrs[attribute.name] = { + [attribute.params.multiple ? 'collection' : 'model']: 'file', + via: 'related', + plugin: 'upload' + } + } } else if (_.has(attribute, 'params.target')) { const relation = attribute.params; const attr = { diff --git a/packages/strapi-plugin-upload/models/File.settings.json b/packages/strapi-plugin-upload/models/File.settings.json index cdd330c296..57ed36057b 100644 --- a/packages/strapi-plugin-upload/models/File.settings.json +++ b/packages/strapi-plugin-upload/models/File.settings.json @@ -36,7 +36,8 @@ }, "related": { "collection": "*", - "filter": "field" + "filter": "field", + "configurable": false } } } diff --git a/packages/strapi-plugin-users-permissions/models/User.settings.json b/packages/strapi-plugin-users-permissions/models/User.settings.json index 99479b1cba..d7d33e058c 100644 --- a/packages/strapi-plugin-users-permissions/models/User.settings.json +++ b/packages/strapi-plugin-users-permissions/models/User.settings.json @@ -38,6 +38,10 @@ "via": "users", "plugin": "users-permissions", "configurable": false + }, + "products": { + "collection": "product", + "via": "manager" } } -} +} \ No newline at end of file