diff --git a/admin/src/components/ConfirmModal/index.js b/admin/src/components/ConfirmModal/index.js index 53356a1..4082a18 100644 --- a/admin/src/components/ConfirmModal/index.js +++ b/admin/src/components/ConfirmModal/index.js @@ -5,7 +5,7 @@ import { Flex } from '@strapi/design-system/Flex'; import { Text } from '@strapi/design-system/Text'; import { Stack } from '@strapi/design-system/Stack'; import { Button } from '@strapi/design-system/Button'; -import DeleteIcon from '@strapi/icons/DeleteIcon'; +import DeleteIcon from '@strapi/icons/Delete'; import AlertWarningIcon from '@strapi/icons/AlertWarningIcon'; import getTrad from '../../helpers/getTrad'; diff --git a/server/services/type.js b/server/services/type.js index 01a6805..fd6e57e 100644 --- a/server/services/type.js +++ b/server/services/type.js @@ -2,7 +2,7 @@ const { logMessage, sanitizeConfig } = require('../utils'); const difference = require('../utils/getObjectDiff'); const ConfigType = class ConfigType { - constructor(queryString, configPrefix, uid, jsonFields) { + constructor(queryString, configPrefix, uid, jsonFields, relations) { if (!queryString) { strapi.log.error(logMessage('Query string is missing for ConfigType')); } @@ -10,6 +10,7 @@ const ConfigType = class ConfigType { this.configPrefix = configPrefix; this.uid = uid; this.jsonFields = jsonFields || []; + this.relations = relations || {}; } /** diff --git a/server/types/admin-role.js b/server/types/admin-role.js index c9b260c..d1188aa 100644 --- a/server/types/admin-role.js +++ b/server/types/admin-role.js @@ -20,24 +20,31 @@ const AdminRolePermissionsConfigType = class AdminRolePermissionsConfigType exte .findOne({ where: { [this.uid]: configName } }); if (existingConfig && configContent === null) { - await queryAPI.delete({ where: { [this.uid]: configName } }); + await queryAPI.delete({ + where: { [this.uid]: configName }, + populate: this.relations.map(({ relationName }) => relationName), + }); return; } if (!existingConfig) { - const { permissions } = configContent; - delete configContent.permissions; + // Format JSON fields. const query = { ...configContent }; this.jsonFields.map((field) => query[field] = JSON.stringify(configContent[field])); - const newConfig = await queryAPI.create({ data: query }); - await strapi.admin.services.role.assignPermissions(newConfig.id, permissions); + + this.relations.map(({ queryString }) => { + const queryAPI = strapi.query(queryString); + + // Compare relations + // Make changes to the db + }); + + await queryAPI.create({ data: query }); } else { - await strapi.admin.services.role.assignPermissions(existingConfig.id, configContent.permissions); - delete configContent.permissions; const query = { ...configContent }; this.jsonFields.map((field) => query[field] = JSON.stringify(configContent[field])); - await queryAPI.update({ where: { [this.uid]: configName }, data: query }); + await queryAPI.update({ where: { [this.uid]: configName }, data: { ...query } }); } } diff --git a/server/types/index.js b/server/types/index.js index 0cdb5e8..6bd89d3 100644 --- a/server/types/index.js +++ b/server/types/index.js @@ -8,5 +8,14 @@ module.exports = { 'i18n-locale': new ConfigType('plugin::i18n.locale', 'i18n-locale', 'code'), 'core-store': new ConfigType('strapi::core-store', 'core-store', 'key', ['value']), 'user-role': new UserRoleConfigType('plugin::users-permissions.role', 'user-role', 'type'), - 'admin-role': new AdminRoleConfigType('admin::role', 'admin-role', 'code'), + 'admin-role': new AdminRoleConfigType( + 'admin::role', + 'admin-role', + 'code', + [], + [{ + queryString: 'admin::permission', + relationName: 'permissions', + }] + ), };