mirror of
https://github.com/strapi/strapi.git
synced 2025-08-02 13:58:18 +00:00
Init core api extension for i18n
This commit is contained in:
parent
09990678ad
commit
17b2296d11
@ -1,22 +1,27 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const _ = require('lodash');
|
const _ = require('lodash');
|
||||||
const pluralize = require('pluralize');
|
|
||||||
const { getService } = require('../../utils');
|
const { getService } = require('../../utils');
|
||||||
|
|
||||||
module.exports = () => {
|
module.exports = () => {
|
||||||
Object.values(strapi.contentTypes).forEach(model => {
|
const contentTypeService = getService('content-types');
|
||||||
if (getService('content-types').isLocalized(model)) {
|
const coreApiService = getService('core-api');
|
||||||
_.set(model.attributes, 'localizations', {
|
|
||||||
|
Object.values(strapi.contentTypes).forEach(contentType => {
|
||||||
|
if (contentTypeService.isLocalized(contentType)) {
|
||||||
|
const { attributes, modelName } = contentType;
|
||||||
|
|
||||||
|
_.set(attributes, 'localizations', {
|
||||||
writable: true,
|
writable: true,
|
||||||
private: false,
|
private: false,
|
||||||
configurable: false,
|
configurable: false,
|
||||||
visible: false,
|
visible: false,
|
||||||
collection: model.modelName,
|
collection: modelName,
|
||||||
populate: ['id', 'locale', 'published_at'],
|
populate: ['id', 'locale', 'published_at'],
|
||||||
});
|
});
|
||||||
|
|
||||||
_.set(model.attributes, 'locale', {
|
_.set(attributes, 'locale', {
|
||||||
writable: true,
|
writable: true,
|
||||||
private: false,
|
private: false,
|
||||||
configurable: false,
|
configurable: false,
|
||||||
@ -24,34 +29,7 @@ module.exports = () => {
|
|||||||
type: 'string',
|
type: 'string',
|
||||||
});
|
});
|
||||||
|
|
||||||
// add new route
|
coreApiService.addCreateLocalizationAction(contentType);
|
||||||
const route =
|
|
||||||
model.kind === 'singleType'
|
|
||||||
? _.kebabCase(model.modelName)
|
|
||||||
: _.kebabCase(pluralize(model.modelName));
|
|
||||||
|
|
||||||
const localizationRoutes = [
|
|
||||||
{
|
|
||||||
method: 'POST',
|
|
||||||
path: `/${route}/:id/localizations`,
|
|
||||||
handler: `${model.modelName}.createLocalization`,
|
|
||||||
config: {
|
|
||||||
policies: [],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
const handler = function(ctx) {
|
|
||||||
ctx.body = 'works';
|
|
||||||
};
|
|
||||||
|
|
||||||
strapi.config.routes.push(...localizationRoutes);
|
|
||||||
|
|
||||||
_.set(
|
|
||||||
strapi,
|
|
||||||
`api.${model.apiName}.controllers.${model.modelName}.createLocalization`,
|
|
||||||
handler
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
54
packages/strapi-plugin-i18n/services/core-api.js
Normal file
54
packages/strapi-plugin-i18n/services/core-api.js
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const { set } = require('lodash');
|
||||||
|
const { getContentTypeRoutePrefix } = require('strapi-utils').contentTypes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a handler to handle localizations creation in the core api
|
||||||
|
* @param {object} contentType
|
||||||
|
* @returns ((oject) => {})
|
||||||
|
*/
|
||||||
|
const createLocalizationHandler = contentType => {
|
||||||
|
return function(ctx) {
|
||||||
|
ctx.body = 'works';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a route config to handle localizations creation in the core api
|
||||||
|
* @param {object} contentType
|
||||||
|
* @returns {{ method: string, path: string, handler: string, config: { policies: string[] }}}
|
||||||
|
*/
|
||||||
|
const createLocalizationRoute = contentType => {
|
||||||
|
const { modelName } = contentType;
|
||||||
|
|
||||||
|
return {
|
||||||
|
method: 'POST',
|
||||||
|
path: `/${getContentTypeRoutePrefix(contentType)}/:id/localizations`,
|
||||||
|
handler: `${modelName}.createLocalization`,
|
||||||
|
config: {
|
||||||
|
policies: [],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a route & an action to the core api controller of a content type to allow creating new localizations
|
||||||
|
* @param {object} contentType
|
||||||
|
*/
|
||||||
|
const addCreateLocalizationAction = contentType => {
|
||||||
|
const { modelName, apiName } = contentType;
|
||||||
|
|
||||||
|
const localizationRoute = createLocalizationRoute(contentType);
|
||||||
|
|
||||||
|
const coreApiControllerPath = `api.${apiName}.controllers.${modelName}.createLocalization`;
|
||||||
|
const handler = createLocalizationHandler(contentType);
|
||||||
|
|
||||||
|
strapi.config.routes.push(localizationRoute);
|
||||||
|
|
||||||
|
set(strapi, coreApiControllerPath, handler);
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
addCreateLocalizationAction,
|
||||||
|
};
|
@ -1,6 +1,7 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const _ = require('lodash');
|
const _ = require('lodash');
|
||||||
|
const pluralize = require('pluralize');
|
||||||
|
|
||||||
const SINGLE_TYPE = 'singleType';
|
const SINGLE_TYPE = 'singleType';
|
||||||
const COLLECTION_TYPE = 'collectionType';
|
const COLLECTION_TYPE = 'collectionType';
|
||||||
@ -190,6 +191,17 @@ const getGlobalId = (model, modelName, prefix) => {
|
|||||||
const isRelationalAttribute = attribute =>
|
const isRelationalAttribute = attribute =>
|
||||||
_.has(attribute, 'model') || _.has(attribute, 'collection');
|
_.has(attribute, 'model') || _.has(attribute, 'collection');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a route prefix for a contentType
|
||||||
|
* @param {object} contentType
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
const getContentTypeRoutePrefix = contentType => {
|
||||||
|
return isSingleType(contentType)
|
||||||
|
? _.kebabCase(contentType.modelName)
|
||||||
|
: _.kebabCase(pluralize(contentType.modelName));
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
isScalarAttribute,
|
isScalarAttribute,
|
||||||
isMediaAttribute,
|
isMediaAttribute,
|
||||||
@ -211,4 +223,5 @@ module.exports = {
|
|||||||
isKind,
|
isKind,
|
||||||
createContentType,
|
createContentType,
|
||||||
getGlobalId,
|
getGlobalId,
|
||||||
|
getContentTypeRoutePrefix,
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user