133 lines
4.0 KiB
JavaScript
Raw Normal View History

import React from 'react';
import { get } from 'lodash';
import * as yup from 'yup';
2021-01-22 17:57:15 +01:00
import pluginPkg from '../../package.json';
import middlewares from './middlewares';
2021-01-22 17:57:15 +01:00
import pluginId from './pluginId';
import pluginLogo from './assets/images/logo.svg';
import trads from './translations';
import { getTrad } from './utils';
import pluginPermissions from './permissions';
import CheckboxConfirmation from './components/CheckboxConfirmation';
import SettingsPage from './containers/SettingsPage';
import mutateCTBContentTypeSchema from './utils/mutateCTBContentTypeSchema';
import LOCALIZED_FIELDS from './utils/localizedFields';
import Initializer from './containers/Initializer';
import i18nReducers from './hooks/reducers';
2021-01-22 17:57:15 +01:00
export default strapi => {
const pluginDescription = pluginPkg.strapi.description || pluginPkg.description;
middlewares.forEach(middleware => {
strapi.middlewares.add(middleware);
});
2021-01-22 17:57:15 +01:00
const plugin = {
description: pluginDescription,
icon: pluginPkg.strapi.icon,
id: pluginId,
isReady: false,
2021-01-22 17:57:15 +01:00
isRequired: pluginPkg.strapi.required || false,
mainComponent: null,
name: pluginPkg.strapi.name,
pluginLogo,
preventComponentRendering: false,
settings: {
global: {
links: [
{
title: {
id: getTrad('plugin.name'),
defaultMessage: 'Internationalization',
},
name: 'internationalization',
to: `${strapi.settingsBaseURL}/internationalization`,
Component: () => <SettingsPage />,
2021-02-08 13:47:43 +01:00
permissions: pluginPermissions.accessMain,
},
],
},
},
2021-01-22 17:57:15 +01:00
trads,
reducers: i18nReducers,
boot(app) {
const ctbPlugin = app.getPlugin('content-type-builder');
if (ctbPlugin) {
const ctbFormsAPI = ctbPlugin.apis.forms;
ctbFormsAPI.addContentTypeSchemaMutation(mutateCTBContentTypeSchema);
ctbFormsAPI.components.add({ id: 'checkboxConfirmation', component: CheckboxConfirmation });
ctbFormsAPI.extendContentType({
validator: () => ({
i18n: yup.object().shape({
localized: yup.bool(),
}),
}),
form: {
advanced() {
return [
[
{
name: 'pluginOptions.i18n.localized',
description: {
id: getTrad('plugin.schema.i18n.localized.description-content-type'),
},
type: 'checkboxConfirmation',
label: { id: getTrad('plugin.schema.i18n.localized.label-content-type') },
},
],
];
},
},
});
ctbFormsAPI.extendFields(LOCALIZED_FIELDS, {
validator: () => ({
i18n: yup.object().shape({
localized: yup.bool(),
}),
}),
form: {
advanced({ contentTypeSchema, forTarget, type, step }) {
if (forTarget !== 'contentType') {
return [];
}
const hasI18nEnabled = get(
contentTypeSchema,
['schema', 'pluginOptions', 'i18n', 'localized'],
false
);
if (!hasI18nEnabled) {
return [];
}
if (type === 'component' && step === '1') {
return [];
}
return [
[
{
name: 'pluginOptions.i18n.localized',
description: {
id: getTrad('plugin.schema.i18n.localized.description-field'),
},
type: 'checkbox',
label: { id: getTrad('plugin.schema.i18n.localized.label-field') },
},
],
];
},
},
});
}
},
initializer: Initializer,
2021-01-22 17:57:15 +01:00
};
return strapi.registerPlugin(plugin);
};