diff --git a/packages/strapi-helper-plugin/lib/src/components/InjectionZone/InjectionZoneList.js b/packages/strapi-helper-plugin/lib/src/components/InjectionZone/InjectionZoneList.js
index addb12f035..fa622161e5 100644
--- a/packages/strapi-helper-plugin/lib/src/components/InjectionZone/InjectionZoneList.js
+++ b/packages/strapi-helper-plugin/lib/src/components/InjectionZone/InjectionZoneList.js
@@ -33,11 +33,19 @@ const InjectionZoneList = ({ area, ...props }) => {
return (
- {compos.map(compo => (
-
-
-
- ))}
+ {compos.map(compo => {
+ const component = compo.Component(props);
+
+ if (component) {
+ return (
+
+
+
+ );
+ }
+
+ return null;
+ })}
);
};
diff --git a/packages/strapi-plugin-i18n/admin/src/components/CMEditViewInjectedComponents/index.js b/packages/strapi-plugin-i18n/admin/src/components/CMEditViewInjectedComponents/index.js
index 80ba661935..89accea426 100644
--- a/packages/strapi-plugin-i18n/admin/src/components/CMEditViewInjectedComponents/index.js
+++ b/packages/strapi-plugin-i18n/admin/src/components/CMEditViewInjectedComponents/index.js
@@ -4,12 +4,12 @@ import { useSelector } from 'react-redux';
import { useParams } from 'react-router-dom';
import { useContentManagerEditViewDataManager, useQueryParams } from 'strapi-helper-plugin';
import selectI18NLocales from '../../selectors/selectI18nLocales';
+import useContentTypePermissions from '../../hooks/useContentTypePermissions';
import CMEditViewLocalePicker from '../CMEditViewLocalePicker';
-import selectCollectionTypesRelatedPermissions from './selectors';
const CMEditViewInjectedComponents = () => {
const { layout, modifiedData, slug, isSingleType } = useContentManagerEditViewDataManager();
- const colllectionTypesRelatedPermissions = useSelector(selectCollectionTypesRelatedPermissions);
+ const { createPermissions, readPermissions } = useContentTypePermissions(slug);
const locales = useSelector(selectI18NLocales);
const params = useParams();
const [{ query }, setQuery] = useQueryParams();
@@ -37,10 +37,6 @@ const CMEditViewInjectedComponents = () => {
return null;
}
- const currentCTRelatedPermissions = colllectionTypesRelatedPermissions[slug];
- const readPermissions = currentCTRelatedPermissions['plugins::content-manager.explorer.read'];
- const createPermissions = currentCTRelatedPermissions['plugins::content-manager.explorer.create'];
-
const localizations = get(modifiedData, 'localizations', []);
return (
diff --git a/packages/strapi-plugin-i18n/admin/src/components/DeleteModalAdditionalInfos/index.js b/packages/strapi-plugin-i18n/admin/src/components/DeleteModalAdditionalInfos/index.js
index 88472fdbdb..1a4e2e5753 100644
--- a/packages/strapi-plugin-i18n/admin/src/components/DeleteModalAdditionalInfos/index.js
+++ b/packages/strapi-plugin-i18n/admin/src/components/DeleteModalAdditionalInfos/index.js
@@ -1,8 +1,15 @@
import * as React from 'react';
import { FormattedMessage } from 'react-intl';
import { getTrad } from '../../utils';
+import useHasI18n from '../../hooks/useHasI18n';
const DeleteModalAdditionalInfos = () => {
+ const hasI18nEnabled = useHasI18n();
+
+ if (!hasI18nEnabled) {
+ return null;
+ }
+
return (
- locales.find(({ code }) => code === localeCode).name;
+ get(
+ locales.find(({ code }) => code === localeCode),
+ 'name',
+ localeCode
+ );
const LocaleListCell = ({ locales, localizations, locale: currentLocaleCode, id }) => {
const allLocalizations = [{ locale: currentLocaleCode }, ...localizations];
diff --git a/packages/strapi-plugin-i18n/admin/src/components/LocalePicker/index.js b/packages/strapi-plugin-i18n/admin/src/components/LocalePicker/index.js
index edc02015b6..87e0825d05 100644
--- a/packages/strapi-plugin-i18n/admin/src/components/LocalePicker/index.js
+++ b/packages/strapi-plugin-i18n/admin/src/components/LocalePicker/index.js
@@ -2,8 +2,11 @@ import React, { useState } from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { Picker, Padded, Text, Flex } from '@buffetjs/core';
import { Carret, useQueryParams } from 'strapi-helper-plugin';
+import { useRouteMatch } from 'react-router-dom';
import styled from 'styled-components';
import get from 'lodash/get';
+import useContentTypePermissions from '../../hooks/useContentTypePermissions';
+import useHasI18n from '../../hooks/useHasI18n';
import selectI18NLocales from '../../selectors/selectI18nLocales';
import getInitialLocale from '../../utils/getInitialLocale';
@@ -37,20 +40,19 @@ const EllipsisParagraph = styled(Text)`
text-align: left;
`;
-const selectContentManagerListViewPluginOptions = state =>
- state.get('content-manager_listView').contentType.pluginOptions;
-
const LocalePicker = () => {
const dispatch = useDispatch();
- const pluginOptions = useSelector(selectContentManagerListViewPluginOptions);
const locales = useSelector(selectI18NLocales);
const [{ query }, setQuery] = useQueryParams();
+ const {
+ params: { slug },
+ } = useRouteMatch('/plugins/content-manager/collectionType/:slug');
+ const isFieldLocalized = useHasI18n();
+ const { createPermissions, readPermissions } = useContentTypePermissions(slug);
const initialLocale = getInitialLocale(query, locales);
const [selected, setSelected] = useState(initialLocale);
- const isFieldLocalized = get(pluginOptions, 'i18n.localized', false);
-
if (!isFieldLocalized) {
return null;
}
@@ -59,6 +61,17 @@ const LocalePicker = () => {
return null;
}
+ const displayedLocales = locales.filter(locale => {
+ const canCreate = createPermissions.find(({ properties }) => {
+ return get(properties, 'locales', []).includes(locale.code);
+ });
+ const canRead = readPermissions.find(({ properties }) =>
+ get(properties, 'locales', []).includes(locale.code)
+ );
+
+ return canCreate || canRead;
+ });
+
return (
{
onToggle();
};
- const hasMultipleLocales = locales.length > 1;
+ const hasMultipleLocales = displayedLocales.length > 1;
return hasMultipleLocales ? (
- {locales.map(locale => {
+ {displayedLocales.map(locale => {
if (locale.id === selected.id) {
return null;
}
diff --git a/packages/strapi-plugin-i18n/admin/src/hooks/useContentTypePermissions/index.js b/packages/strapi-plugin-i18n/admin/src/hooks/useContentTypePermissions/index.js
new file mode 100644
index 0000000000..ef710a1c94
--- /dev/null
+++ b/packages/strapi-plugin-i18n/admin/src/hooks/useContentTypePermissions/index.js
@@ -0,0 +1,14 @@
+import { useSelector } from 'react-redux';
+import selectCollectionTypesRelatedPermissions from '../../selectors/selectCollectionTypesRelatedPermissions';
+
+const useContentTypePermissions = slug => {
+ const collectionTypesRelatedPermissions = useSelector(selectCollectionTypesRelatedPermissions);
+
+ const currentCTRelatedPermissions = collectionTypesRelatedPermissions[slug];
+ const readPermissions = currentCTRelatedPermissions['plugins::content-manager.explorer.read'];
+ const createPermissions = currentCTRelatedPermissions['plugins::content-manager.explorer.create'];
+
+ return { createPermissions, readPermissions };
+};
+
+export default useContentTypePermissions;
diff --git a/packages/strapi-plugin-i18n/admin/src/hooks/useHasI18n/index.js b/packages/strapi-plugin-i18n/admin/src/hooks/useHasI18n/index.js
new file mode 100644
index 0000000000..6fd31ba218
--- /dev/null
+++ b/packages/strapi-plugin-i18n/admin/src/hooks/useHasI18n/index.js
@@ -0,0 +1,13 @@
+import { useSelector } from 'react-redux';
+import get from 'lodash/get';
+
+const selectContentManagerListViewPluginOptions = state =>
+ state.get('content-manager_listView').contentType.pluginOptions;
+
+const useHasI18n = () => {
+ const pluginOptions = useSelector(selectContentManagerListViewPluginOptions);
+
+ return get(pluginOptions, 'i18n.localized', false);
+};
+
+export default useHasI18n;
diff --git a/packages/strapi-plugin-i18n/admin/src/components/CMEditViewInjectedComponents/selectors.js b/packages/strapi-plugin-i18n/admin/src/selectors/selectCollectionTypesRelatedPermissions.js
similarity index 100%
rename from packages/strapi-plugin-i18n/admin/src/components/CMEditViewInjectedComponents/selectors.js
rename to packages/strapi-plugin-i18n/admin/src/selectors/selectCollectionTypesRelatedPermissions.js