diff --git a/packages/strapi-helper-plugin/package.json b/packages/strapi-helper-plugin/package.json index 6770478301..57cf60a598 100644 --- a/packages/strapi-helper-plugin/package.json +++ b/packages/strapi-helper-plugin/package.json @@ -106,4 +106,4 @@ "webpack-hot-middleware": "^2.18.2", "whatwg-fetch": "^2.0.3" } -} +} \ No newline at end of file diff --git a/packages/strapi-plugin-content-manager/admin/src/containers/SettingsPage/index.js b/packages/strapi-plugin-content-manager/admin/src/containers/SettingsPage/index.js index 51e4649122..2e1071d6b8 100644 --- a/packages/strapi-plugin-content-manager/admin/src/containers/SettingsPage/index.js +++ b/packages/strapi-plugin-content-manager/admin/src/containers/SettingsPage/index.js @@ -1,5 +1,5 @@ /** - * + * * SettingsPage */ @@ -8,7 +8,7 @@ import { connect } from 'react-redux'; import { bindActionCreators, compose } from 'redux'; import { createStructuredSelector } from 'reselect'; import cn from 'classnames'; -import { get, isObject, sortBy } from 'lodash'; +import { get, sortBy } from 'lodash'; import PropTypes from 'prop-types'; import { onChange, onSubmit, onReset } from 'containers/App/actions'; import { makeSelectModifiedSchema, makeSelectSubmitSuccess } from 'containers/App/selectors'; @@ -36,23 +36,23 @@ class SettingsPage extends React.PureComponent { componentWillUnmount() { this.props.onReset(); } - - getModels = (data = this.props.schema.models, destination = '/', init = []) => { + + getModels = (data = this.props.schema.models, destination = '/') => { const models = Object.keys(data).reduce((acc, curr) => { if (curr !== 'plugins') { - - if (!data[curr].fields && isObject(data[curr])) { - return this.getModels(data[curr], `${destination}${curr}/`, acc); + + if (!data[curr].fields && _.isObject(data[curr])) { + return acc.concat(this.getModels(data[curr], `${destination}${curr}/`)); } - + return acc.concat([{ name: curr, destination: `${destination}${curr}` }]); - } - - return this.getModels(data[curr], `${destination}${curr}/`, acc); - }, init); + } + + return acc.concat(this.getModels(data[curr], `${destination}${curr}/`)); + }, []); return sortBy( - models.filter(obj => obj.name !== 'permission' && obj.name !== 'role' && !(obj.name === 'file' && obj.destination === '/plugins/upload/file')), + models.filter(obj => !!this.props.schema.layout[obj.name]), ['name'], ); } diff --git a/packages/strapi-plugin-content-manager/config/functions/bootstrap.js b/packages/strapi-plugin-content-manager/config/functions/bootstrap.js index 9b9624b3c9..19f95e9c33 100644 --- a/packages/strapi-plugin-content-manager/config/functions/bootstrap.js +++ b/packages/strapi-plugin-content-manager/config/functions/bootstrap.js @@ -51,12 +51,12 @@ module.exports = async cb => { return acc; }, {}); + // Reference all current models const appModels = Object.keys(pluginsModel).reduce((acc, curr) => { const models = Object.keys(_.get(pluginsModel, [curr, 'models'], {})); return acc.concat(models); }, Object.keys(strapi.models).filter(m => m !== 'core_store')); - // Init schema const schema = { generalSettings: { @@ -110,7 +110,9 @@ module.exports = async cb => { }); // Don't display fields that are hidden by default like the resetPasswordToken for the model user - _.unset(fields, fieldsToRemove); + fieldsToRemove.forEach(field => { + _.unset(fields, field); + }); schemaModel.attributes = _.omit(schemaModel.attributes, fieldsToRemove); schemaModel.fields = fields; @@ -231,7 +233,7 @@ module.exports = async cb => { try { // Retrieve the previous schema from the db const prevSchema = await pluginStore.get({ key: 'schema' }); - + // If no schema stored if (!prevSchema) { _.set(schema, 'layout', tempLayout); @@ -240,9 +242,11 @@ module.exports = async cb => { return cb(); } else { - const layoutModels = Object.keys(_.get(prevSchema, 'layout')); + const modelsLayout = Object.keys(_.get(prevSchema, 'layout', {})); - layoutModels.forEach(model => { + // Remove previous model from the schema.layout + // Usually needed when renaming a model + modelsLayout.forEach(model => { if (!appModels.includes(model)) { _.unset(prevSchema, ['layout', model]); } @@ -383,4 +387,4 @@ module.exports = async cb => { } cb(); -}; +}; \ No newline at end of file diff --git a/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/index.js b/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/index.js index 5c3cd69f3c..4d61e66ddd 100644 --- a/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/index.js +++ b/packages/strapi-plugin-content-type-builder/admin/src/containers/Form/index.js @@ -23,8 +23,8 @@ import { size, split, take, - toNumber, toLower, + toNumber, replace, } from 'lodash'; import { FormattedMessage } from 'react-intl'; diff --git a/packages/strapi-plugin-email/config/functions/bootstrap.js b/packages/strapi-plugin-email/config/functions/bootstrap.js index 784a00eea5..fa2b34617b 100644 --- a/packages/strapi-plugin-email/config/functions/bootstrap.js +++ b/packages/strapi-plugin-email/config/functions/bootstrap.js @@ -26,7 +26,8 @@ module.exports = async cb => { fs.readdir(path.join(basePath, 'node_modules'), async (err, node_modules) => { // get all email providers const emails = _.filter(node_modules, (node_module) => { - return _.startsWith(node_module, ('strapi-provider-email')); + // DEPRECATED strapi-email-* will be remove in next version + return _.startsWith(node_module, 'strapi-provider-email') || _.startsWith(node_module, 'strapi-email'); }); // mount all providers to get configs diff --git a/packages/strapi-plugin-upload/config/functions/bootstrap.js b/packages/strapi-plugin-upload/config/functions/bootstrap.js index d20fd0b657..d437af25e2 100644 --- a/packages/strapi-plugin-upload/config/functions/bootstrap.js +++ b/packages/strapi-plugin-upload/config/functions/bootstrap.js @@ -26,7 +26,8 @@ module.exports = async cb => { fs.readdir(path.join(basePath, 'node_modules'), async (err, node_modules) => { // get all upload provider const uploads = _.filter(node_modules, (node_module) => { - return _.startsWith(node_module, ('strapi-provider-upload')); + // DEPRECATED strapi-upload-* will be remove in next version + return _.startsWith(node_module, 'strapi-provider-upload') || _.startsWith(node_module, 'strapi-upload'); }); // mount all providers to get configs diff --git a/packages/strapi-plugin-users-permissions/config/queries/mongoose.js b/packages/strapi-plugin-users-permissions/config/queries/mongoose.js index 88e988ed95..b0128bc32e 100644 --- a/packages/strapi-plugin-users-permissions/config/queries/mongoose.js +++ b/packages/strapi-plugin-users-permissions/config/queries/mongoose.js @@ -12,9 +12,9 @@ module.exports = { const result = this.aggregate(aggregateStages); - if (_.has(filters, 'start')) result.skip(filters.start); - if (_.has(filters, 'limit')) result.limit(filters.limit); - if (_.has(filters, 'sort')) result.sort(filters.sort); + if (_.has(filters, 'start') && filters.start) result.skip(filters.start); + if (_.has(filters, 'limit') && filters.limit) result.limit(filters.limit); + if (_.has(filters, 'sort') && filters.sort) result.sort(filters.sort); return result; }, diff --git a/packages/strapi-plugin-users-permissions/package.json b/packages/strapi-plugin-users-permissions/package.json index 840a5f2363..d6616575cd 100644 --- a/packages/strapi-plugin-users-permissions/package.json +++ b/packages/strapi-plugin-users-permissions/package.json @@ -56,4 +56,4 @@ "npm": ">= 5.0.0" }, "license": "MIT" -} +} \ No newline at end of file diff --git a/packages/strapi-utils/lib/models.js b/packages/strapi-utils/lib/models.js index de1545ad24..f6888ee923 100644 --- a/packages/strapi-utils/lib/models.js +++ b/packages/strapi-utils/lib/models.js @@ -584,7 +584,7 @@ module.exports = { }; } else if (model.attributes[key]) { field = model.attributes[key]; - } else { + } else if (typeof key === 'string') { // Remove the filter keyword at the end let splitKey = key.split('_').slice(0, -1); splitKey = splitKey.join('_');