mirror of
https://github.com/strapi/strapi.git
synced 2025-11-14 17:19:01 +00:00
Add component category edit to allow renaming
This commit is contained in:
parent
d405285fae
commit
7d0c798d90
@ -29,4 +29,4 @@
|
|||||||
"via": "menusections"
|
"via": "menusections"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -7,7 +7,10 @@
|
|||||||
},
|
},
|
||||||
"options": {
|
"options": {
|
||||||
"increments": true,
|
"increments": true,
|
||||||
"timestamps": ["created_at", "updated_at"],
|
"timestamps": [
|
||||||
|
"created_at",
|
||||||
|
"updated_at"
|
||||||
|
],
|
||||||
"comment": ""
|
"comment": ""
|
||||||
},
|
},
|
||||||
"attributes": {
|
"attributes": {
|
||||||
@ -35,12 +38,21 @@
|
|||||||
"collection": "category"
|
"collection": "category"
|
||||||
},
|
},
|
||||||
"price_range": {
|
"price_range": {
|
||||||
"enum": ["very_cheap", "cheap", "average", "expensive", "very_expensive"],
|
"enum": [
|
||||||
|
"very_cheap",
|
||||||
|
"cheap",
|
||||||
|
"average",
|
||||||
|
"expensive",
|
||||||
|
"very_expensive"
|
||||||
|
],
|
||||||
"type": "enumeration"
|
"type": "enumeration"
|
||||||
},
|
},
|
||||||
"body": {
|
"body": {
|
||||||
"type": "dynamiczone",
|
"type": "dynamiczone",
|
||||||
"components": ["default.closingperiod", "default.restaurantservice"]
|
"components": [
|
||||||
|
"default.closingperiod",
|
||||||
|
"default.restaurantservice"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"type": "richtext",
|
"type": "richtext",
|
||||||
@ -71,4 +83,4 @@
|
|||||||
"type": "text"
|
"type": "text"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -22,4 +22,4 @@
|
|||||||
"type": "component"
|
"type": "component"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -87,6 +87,14 @@
|
|||||||
"config": {
|
"config": {
|
||||||
"policies": []
|
"policies": []
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"method": "PUT",
|
||||||
|
"path": "/component-categories/:name",
|
||||||
|
"handler": "ComponentCategories.editCategory",
|
||||||
|
"config": {
|
||||||
|
"policies": []
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,27 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const validateComponentCategory = require('./validation/componentCategory');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
async editCategory(ctx) {
|
||||||
|
const { body } = ctx.request;
|
||||||
|
const service =
|
||||||
|
strapi.plugins['content-type-builder'].services.componentcategories;
|
||||||
|
|
||||||
|
try {
|
||||||
|
await validateComponentCategory(body);
|
||||||
|
} catch (error) {
|
||||||
|
return ctx.send({ error }, 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
const { name } = ctx.params;
|
||||||
|
|
||||||
|
strapi.reload.isWatching = false;
|
||||||
|
|
||||||
|
await service.editCategory(name, body);
|
||||||
|
|
||||||
|
strapi.reload();
|
||||||
|
|
||||||
|
ctx.send({ name: body.name });
|
||||||
|
},
|
||||||
|
};
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const yup = require('yup');
|
||||||
|
const formatYupErrors = require('./yup-formatter');
|
||||||
|
|
||||||
|
const { isValidName } = require('./common');
|
||||||
|
|
||||||
|
module.exports = data => {
|
||||||
|
return componentCategorySchema
|
||||||
|
.validate(data, {
|
||||||
|
strict: true,
|
||||||
|
abortEarly: false,
|
||||||
|
})
|
||||||
|
.catch(error => Promise.reject(formatYupErrors(error)));
|
||||||
|
};
|
||||||
|
|
||||||
|
const componentCategorySchema = yup
|
||||||
|
.object({
|
||||||
|
name: yup
|
||||||
|
.string()
|
||||||
|
.min(3)
|
||||||
|
.test(isValidName)
|
||||||
|
.required('name.required'),
|
||||||
|
})
|
||||||
|
.noUnknown();
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const { join } = require('path');
|
||||||
|
const fse = require('fs-extra');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
async editCategory(name, infos) {
|
||||||
|
const componentsDir = join(strapi.dir, 'components');
|
||||||
|
|
||||||
|
// don't do anything the name doesn't change
|
||||||
|
if (name === infos.name) return;
|
||||||
|
|
||||||
|
if (await fse.pathExists(join(componentsDir, infos.name))) {
|
||||||
|
throw strapi.errors.badRequest('Name already taken');
|
||||||
|
}
|
||||||
|
|
||||||
|
const componentService =
|
||||||
|
strapi.plugins['content-type-builder'].services.components;
|
||||||
|
|
||||||
|
const promises = Object.keys(strapi.components)
|
||||||
|
.filter(uid => {
|
||||||
|
const [category] = uid.split('.');
|
||||||
|
return category === name;
|
||||||
|
})
|
||||||
|
.map(uid => {
|
||||||
|
const [, name] = uid.split('.');
|
||||||
|
return componentService.updateComponentInModels(
|
||||||
|
uid,
|
||||||
|
`${infos.name}.${name}`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
await Promise.all(promises);
|
||||||
|
|
||||||
|
await fse.move(join(componentsDir, name), join(componentsDir, infos.name));
|
||||||
|
},
|
||||||
|
};
|
||||||
Loading…
x
Reference in New Issue
Block a user