@strapi/admin 4.12.0 → 4.12.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/admin/src/components/LeftMenu/index.js +1 -1
- package/admin/src/components/PluginsInitializer/index.js +23 -0
- package/admin/src/content-manager/components/CollectionTypeFormWrapper/index.js +9 -14
- package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/cleanData.js +1 -1
- package/admin/src/content-manager/components/InputUID/index.js +2 -3
- package/admin/src/content-manager/components/RelationInput/RelationInput.js +1 -1
- package/admin/src/content-manager/components/RelationInputDataManager/utils/getRelationLink.js +1 -3
- package/admin/src/content-manager/components/RelationInputDataManager/utils/select.js +4 -6
- package/admin/src/content-manager/components/SingleTypeFormWrapper/index.js +7 -9
- package/admin/src/content-manager/pages/App/utils/getContentTypeLinks.js +1 -3
- package/admin/src/content-manager/pages/EditSettingsView/index.js +31 -18
- package/admin/src/content-manager/pages/ListSettingsView/components/EditFieldForm.js +1 -3
- package/admin/src/content-manager/pages/ListSettingsView/components/Settings.js +1 -3
- package/admin/src/content-manager/pages/ListSettingsView/components/SortDisplayedFields.js +14 -32
- package/admin/src/content-manager/pages/ListSettingsView/index.js +50 -40
- package/admin/src/content-manager/pages/ListView/components/BulkActionButtons/SelectedEntriesModal/index.js +7 -2
- package/admin/src/content-manager/pages/ListView/components/CellContent/RelationMultiple/index.js +2 -2
- package/admin/src/content-manager/pages/ListView/index.js +10 -4
- package/admin/src/content-manager/sharedReducers/crudReducer/reducer.js +1 -1
- package/admin/src/content-manager/utils/checkIfAttributeIsDisplayable.js +2 -4
- package/admin/src/content-manager/utils/index.js +0 -1
- package/admin/src/hooks/index.js +0 -3
- package/admin/src/hooks/useAdminRolePermissions/__mocks__/index.js +5 -0
- package/admin/src/hooks/useAdminRolePermissions/index.js +34 -0
- package/admin/src/hooks/useAdminRoles/__mocks__/index.js +5 -0
- package/admin/src/hooks/useAdminRoles/index.js +40 -0
- package/admin/src/pages/AuthPage/components/Register/index.js +4 -0
- package/admin/src/pages/AuthPage/constants.js +2 -2
- package/admin/src/pages/InstalledPluginsPage/Plugins.js +2 -2
- package/admin/src/pages/InstalledPluginsPage/hooks/usePlugins/index.js +29 -0
- package/admin/src/pages/MarketplacePage/hooks/useFetchMarketplacePlugins/index.js +44 -0
- package/admin/src/pages/MarketplacePage/hooks/useFetchMarketplaceProviders/index.js +44 -0
- package/admin/src/pages/MarketplacePage/utils/useMarketplaceData.js +2 -2
- package/admin/src/pages/SettingsPage/pages/Roles/CreatePage/index.js +24 -9
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/RoleForm/index.js +1 -0
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/index.js +34 -20
- package/admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js +31 -84
- package/admin/src/pages/SettingsPage/pages/Roles/hooks/useAdminRolePermissionLayout/index.js +23 -0
- package/admin/src/translations/ar.json +9 -3
- package/admin/src/translations/ca.json +8 -2
- package/admin/src/translations/de.json +8 -2
- package/admin/src/translations/dk.json +8 -2
- package/admin/src/translations/en.json +9 -3
- package/admin/src/translations/es.json +9 -3
- package/admin/src/translations/eu.json +8 -2
- package/admin/src/translations/fr.json +9 -2
- package/admin/src/translations/gu.json +8 -2
- package/admin/src/translations/hi.json +9 -3
- package/admin/src/translations/hu.json +9 -3
- package/admin/src/translations/ja.json +12 -6
- package/admin/src/translations/ko.json +12 -6
- package/admin/src/translations/ml.json +8 -2
- package/admin/src/translations/nl.json +8 -2
- package/admin/src/translations/pl.json +8 -2
- package/admin/src/translations/pt-BR.json +8 -2
- package/admin/src/translations/ru.json +8 -2
- package/admin/src/translations/sa.json +9 -3
- package/admin/src/translations/sk.json +8 -2
- package/admin/src/translations/sv.json +7 -2
- package/admin/src/translations/tr.json +8 -2
- package/admin/src/translations/zh-Hans.json +8 -2
- package/admin/src/translations/zh.json +8 -2
- package/admin/src/utils/index.js +0 -1
- package/build/1049.f76cb14b.chunk.js +1 -0
- package/build/1386.879bcd90.chunk.js +7 -0
- package/build/{2225.15d1df72.chunk.js → 2225.c6244756.chunk.js} +1 -1
- package/build/2379.f1641312.chunk.js +1 -0
- package/build/2395.46f8d0c1.chunk.js +26 -0
- package/build/2801.5cef5ec8.chunk.js +1 -0
- package/build/{3483.e2ee2547.chunk.js → 3483.03c24f96.chunk.js} +1 -1
- package/build/3929.5632f24d.chunk.js +114 -0
- package/build/4546.cfafae68.chunk.js +1 -0
- package/build/6691.4985ef22.chunk.js +105 -0
- package/build/7464.3e64a1d5.chunk.js +1 -0
- package/build/8276.10a3f883.chunk.js +26 -0
- package/build/{9806.aa25371d.chunk.js → 9806.3392505e.chunk.js} +2 -2
- package/build/{Admin-authenticatedApp.376233ff.chunk.js → Admin-authenticatedApp.3c585a0d.chunk.js} +3 -3
- package/build/{Admin_marketplace.f0b87fce.chunk.js → Admin_marketplace.dde9c148.chunk.js} +6 -6
- package/build/Admin_pluginsPage.bbe79434.chunk.js +6 -0
- package/build/{Admin_profilePage.a968035f.chunk.js → Admin_profilePage.192edc52.chunk.js} +1 -1
- package/build/{Admin_settingsPage.8c600d1a.chunk.js → Admin_settingsPage.97cb9d41.chunk.js} +1 -1
- package/build/admin-app.91898385.chunk.js +36 -0
- package/build/admin-edit-roles-page.6d567273.chunk.js +267 -0
- package/build/{admin-edit-users.67704088.chunk.js → admin-edit-users.79eeb125.chunk.js} +1 -1
- package/build/admin-roles-list.23ddff26.chunk.js +22 -0
- package/build/{admin-users.3279ffb0.chunk.js → admin-users.123aa08e.chunk.js} +1 -1
- package/build/ar-json.74e40bc7.chunk.js +1 -0
- package/build/{ca-json.a53c10b6.chunk.js → ca-json.fc6001d3.chunk.js} +1 -1
- package/build/content-manager.2af15f57.chunk.js +1099 -0
- package/build/{de-json.b3be02c7.chunk.js → de-json.e72545cf.chunk.js} +1 -1
- package/build/dk-json.e77140ef.chunk.js +1 -0
- package/build/{en-json.e34140fc.chunk.js → en-json.08c05fcf.chunk.js} +1 -1
- package/build/es-json.b1f2284b.chunk.js +1 -0
- package/build/{eu-json.633025f0.chunk.js → eu-json.63d0a898.chunk.js} +1 -1
- package/build/{fr-json.aa8839d2.chunk.js → fr-json.33c6428b.chunk.js} +1 -1
- package/build/{gu-json.5bd62812.chunk.js → gu-json.7efe8cc2.chunk.js} +1 -1
- package/build/{hi-json.9104eb78.chunk.js → hi-json.0d633692.chunk.js} +1 -1
- package/build/{hu-json.9f4aae42.chunk.js → hu-json.c74b6a1e.chunk.js} +1 -1
- package/build/index.html +1 -1
- package/build/{ja-json.91286391.chunk.js → ja-json.e1959a1c.chunk.js} +1 -1
- package/build/{ko-json.fcf3ec4b.chunk.js → ko-json.ce5d6d94.chunk.js} +1 -1
- package/build/main.f13fc96c.js +2856 -0
- package/build/{ml-json.557aa14c.chunk.js → ml-json.940d7ace.chunk.js} +1 -1
- package/build/{nl-json.b2b16eea.chunk.js → nl-json.fe38f0fb.chunk.js} +1 -1
- package/build/{pl-json.f094a417.chunk.js → pl-json.d55e8e78.chunk.js} +1 -1
- package/build/{pt-BR-json.dec7fb01.chunk.js → pt-BR-json.ae0a0d2e.chunk.js} +1 -1
- package/build/review-workflows-settings-create-view.cb08cfa2.chunk.js +1 -0
- package/build/review-workflows-settings-edit-view.3c7cbe63.chunk.js +1 -0
- package/build/review-workflows-settings-list-view.1611dc1f.chunk.js +56 -0
- package/build/{ru-json.8193d8c4.chunk.js → ru-json.1c976644.chunk.js} +1 -1
- package/build/{runtime~main.58ec8df6.js → runtime~main.2902859a.js} +1 -1
- package/build/{sa-json.a56836f1.chunk.js → sa-json.2c03ef4e.chunk.js} +1 -1
- package/build/sk-json.b41847e8.chunk.js +1 -0
- package/build/sso-settings-page.12b6d8ae.chunk.js +1 -0
- package/build/{sv-json.fd0e86c6.chunk.js → sv-json.568cb7ae.chunk.js} +1 -1
- package/build/{tr-json.56c32cf6.chunk.js → tr-json.c9f22432.chunk.js} +1 -1
- package/build/upload-settings.7f93d4c0.chunk.js +14 -0
- package/build/upload.37488080.chunk.js +58 -0
- package/build/users-advanced-settings-page.f0760eb8.chunk.js +9 -0
- package/build/users-email-settings-page.ff4b32f3.chunk.js +9 -0
- package/build/users-providers-settings-page.48de0306.chunk.js +14 -0
- package/build/users-roles-settings-page.3f9f063e.chunk.js +30 -0
- package/build/{zh-Hans-json.36d81cdc.chunk.js → zh-Hans-json.937b395b.chunk.js} +1 -1
- package/build/{zh-json.1cc86ff0.chunk.js → zh-json.bfc2e036.chunk.js} +1 -1
- package/ee/admin/hooks/useAuthProviders/index.js +1 -3
- package/ee/admin/pages/AuthResponse/index.js +1 -3
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stage/Stage.js +35 -32
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/CreateView/CreateView.js +1 -7
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/EditView/EditView.js +16 -14
- package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/ListView/ListView.js +32 -31
- package/ee/admin/pages/SettingsPage/pages/SingleSignOn/index.js +16 -26
- package/ee/server/config/admin-actions.js +6 -6
- package/ee/server/services/review-workflows/entity-service-decorator.js +4 -3
- package/index.js +2 -0
- package/package.json +16 -16
- package/scripts/build.js +1 -0
- package/server/controllers/role.js +9 -1
- package/server/middlewares/rateLimit.js +6 -2
- package/server/services/role.js +3 -2
- package/server/services/transfer/token.js +27 -4
- package/server/validation/authentication/register.js +2 -2
- package/webpack.config.js +2 -1
- package/admin/src/content-manager/components/SingleTypeFormWrapper/utils/getRequestUrl.js +0 -5
- package/admin/src/content-manager/components/SingleTypeFormWrapper/utils/index.js +0 -2
- package/admin/src/content-manager/pages/EditSettingsView/utils/api.js +0 -16
- package/admin/src/content-manager/pages/ListSettingsView/init.js +0 -9
- package/admin/src/content-manager/utils/getRequestUrl.js +0 -4
- package/admin/src/hooks/marketplace/useFetchMarketplacePlugins/index.js +0 -44
- package/admin/src/hooks/marketplace/useFetchMarketplaceProviders/index.js +0 -44
- package/admin/src/hooks/useFetchEnabledPlugins/index.js +0 -24
- package/admin/src/hooks/useFetchEnabledPlugins/utils/api.js +0 -10
- package/admin/src/hooks/useFetchPermissionsLayout/index.js +0 -42
- package/admin/src/hooks/useFetchPermissionsLayout/reducer.js +0 -35
- package/admin/src/hooks/useFetchRole/index.js +0 -68
- package/admin/src/hooks/useFetchRole/reducer.js +0 -33
- package/admin/src/hooks/useRolesList/index.js +0 -58
- package/admin/src/hooks/useRolesList/init.js +0 -5
- package/admin/src/hooks/useRolesList/reducer.js +0 -31
- package/admin/src/utils/getRequestUrl.js +0 -3
- package/build/1049.758a01f5.chunk.js +0 -1
- package/build/1386.762d6eb8.chunk.js +0 -7
- package/build/2379.0ca87a89.chunk.js +0 -1
- package/build/2395.df7a044a.chunk.js +0 -26
- package/build/2801.b1140c9b.chunk.js +0 -1
- package/build/4546.ff9fdf30.chunk.js +0 -1
- package/build/6691.f880a0b6.chunk.js +0 -105
- package/build/7065.ec811562.chunk.js +0 -114
- package/build/7464.8a6c1e6c.chunk.js +0 -1
- package/build/8276.6c7b8e6e.chunk.js +0 -26
- package/build/Admin_pluginsPage.8728ff6e.chunk.js +0 -6
- package/build/admin-app.1c3f7fd6.chunk.js +0 -36
- package/build/admin-edit-roles-page.a49b9f4f.chunk.js +0 -267
- package/build/admin-roles-list.0c129e98.chunk.js +0 -23
- package/build/ar-json.f530bc3f.chunk.js +0 -1
- package/build/content-manager.e9205db1.chunk.js +0 -1103
- package/build/dk-json.842aa391.chunk.js +0 -1
- package/build/es-json.f57b5335.chunk.js +0 -1
- package/build/main.1e3b0985.js +0 -2856
- package/build/review-workflows-settings-create-view.05758184.chunk.js +0 -1
- package/build/review-workflows-settings-edit-view.c33f7c58.chunk.js +0 -1
- package/build/review-workflows-settings-list-view.f055e1be.chunk.js +0 -56
- package/build/sk-json.bf2f057a.chunk.js +0 -1
- package/build/sso-settings-page.7c9b2fd9.chunk.js +0 -1
- package/build/upload-settings.cac210a0.chunk.js +0 -14
- package/build/upload.cbfeefa5.chunk.js +0 -58
- package/build/users-advanced-settings-page.18379a56.chunk.js +0 -9
- package/build/users-email-settings-page.a87978e5.chunk.js +0 -9
- package/build/users-providers-settings-page.8876c1ee.chunk.js +0 -14
- package/build/users-roles-settings-page.0431f48c.chunk.js +0 -30
- /package/admin/src/{hooks/marketplace → pages/MarketplacePage}/constants.js +0 -0
|
@@ -27,16 +27,16 @@ import {
|
|
|
27
27
|
import { ArrowLeft } from '@strapi/icons';
|
|
28
28
|
import { format } from 'date-fns';
|
|
29
29
|
import { Formik } from 'formik';
|
|
30
|
-
import get from 'lodash/get';
|
|
31
30
|
import isEmpty from 'lodash/isEmpty';
|
|
32
31
|
import { useIntl } from 'react-intl';
|
|
33
32
|
import { useSelector } from 'react-redux';
|
|
34
33
|
import { useHistory, useRouteMatch } from 'react-router-dom';
|
|
35
34
|
import styled from 'styled-components';
|
|
36
35
|
|
|
37
|
-
import {
|
|
36
|
+
import { useAdminRolePermissions } from '../../../../../hooks/useAdminRolePermissions';
|
|
38
37
|
import { selectAdminPermissions } from '../../../../App/selectors';
|
|
39
38
|
import Permissions from '../EditPage/components/Permissions';
|
|
39
|
+
import { useAdminRolePermissionLayout } from '../hooks/useAdminRolePermissionLayout';
|
|
40
40
|
|
|
41
41
|
import schema from './utils/schema';
|
|
42
42
|
|
|
@@ -51,6 +51,7 @@ const UsersRoleNumber = styled.div`
|
|
|
51
51
|
`;
|
|
52
52
|
|
|
53
53
|
const CreatePage = () => {
|
|
54
|
+
const route = useRouteMatch('/settings/roles/duplicate/:id');
|
|
54
55
|
const toggleNotification = useNotification();
|
|
55
56
|
const { lockApp, unlockApp } = useOverlayBlocker();
|
|
56
57
|
const { formatMessage } = useIntl();
|
|
@@ -58,17 +59,30 @@ const CreatePage = () => {
|
|
|
58
59
|
const { replace } = useHistory();
|
|
59
60
|
const permissionsRef = useRef();
|
|
60
61
|
const { trackUsage } = useTracking();
|
|
61
|
-
const params = useRouteMatch('/settings/roles/duplicate/:id');
|
|
62
|
-
const id = get(params, 'params.id', null);
|
|
63
|
-
const { isLoading: isLayoutLoading, data: permissionsLayout } = useFetchPermissionsLayout();
|
|
64
|
-
const { permissions: rolePermissions, isLoading: isRoleLoading } = useFetchRole(id);
|
|
65
62
|
const { post, put } = useFetchClient();
|
|
66
63
|
|
|
64
|
+
const { params } = route ?? {};
|
|
65
|
+
|
|
66
|
+
const { isLoading: isLoadingPermissionsLayout, data: permissionsLayout } =
|
|
67
|
+
useAdminRolePermissionLayout(params?.id, {
|
|
68
|
+
cacheTime: 0,
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
const { permissions: rolePermissions, isLoading: isLoadingRole } = useAdminRolePermissions(
|
|
72
|
+
{ id: params?.id },
|
|
73
|
+
{
|
|
74
|
+
cacheTime: 0,
|
|
75
|
+
|
|
76
|
+
// only fetch permissions if a role is cloned
|
|
77
|
+
enabled: !!params?.id,
|
|
78
|
+
}
|
|
79
|
+
);
|
|
80
|
+
|
|
67
81
|
const handleCreateRoleSubmit = (data) => {
|
|
68
82
|
lockApp();
|
|
69
83
|
setIsSubmiting(true);
|
|
70
84
|
|
|
71
|
-
if (id) {
|
|
85
|
+
if (params?.id) {
|
|
72
86
|
trackUsage('willDuplicateRole');
|
|
73
87
|
} else {
|
|
74
88
|
trackUsage('willCreateNewRole');
|
|
@@ -78,7 +92,7 @@ const CreatePage = () => {
|
|
|
78
92
|
.then(async ({ data: res }) => {
|
|
79
93
|
const { permissionsToSend } = permissionsRef.current.getPermissions();
|
|
80
94
|
|
|
81
|
-
if (id) {
|
|
95
|
+
if (params?.id) {
|
|
82
96
|
trackUsage('didDuplicateRole');
|
|
83
97
|
} else {
|
|
84
98
|
trackUsage('didCreateNewRole');
|
|
@@ -213,6 +227,7 @@ const CreatePage = () => {
|
|
|
213
227
|
defaultMessage: 'Name',
|
|
214
228
|
})}
|
|
215
229
|
onChange={handleChange}
|
|
230
|
+
required
|
|
216
231
|
value={values.name}
|
|
217
232
|
/>
|
|
218
233
|
</GridItem>
|
|
@@ -232,7 +247,7 @@ const CreatePage = () => {
|
|
|
232
247
|
</Grid>
|
|
233
248
|
</Flex>
|
|
234
249
|
</Box>
|
|
235
|
-
{!
|
|
250
|
+
{!isLoadingPermissionsLayout && !isLoadingRole ? (
|
|
236
251
|
<Box shadow="filterShadow" hasRadius>
|
|
237
252
|
<Permissions
|
|
238
253
|
isFormDisabled={false}
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
Link,
|
|
6
6
|
LoadingIndicatorPage,
|
|
7
7
|
SettingsPageTitle,
|
|
8
|
+
useAPIErrorHandler,
|
|
8
9
|
useFetchClient,
|
|
9
10
|
useNotification,
|
|
10
11
|
useOverlayBlocker,
|
|
@@ -12,11 +13,12 @@ import {
|
|
|
12
13
|
} from '@strapi/helper-plugin';
|
|
13
14
|
import { ArrowLeft } from '@strapi/icons';
|
|
14
15
|
import { Formik } from 'formik';
|
|
15
|
-
import get from 'lodash/get';
|
|
16
16
|
import { useIntl } from 'react-intl';
|
|
17
17
|
import { useRouteMatch } from 'react-router-dom';
|
|
18
18
|
|
|
19
|
-
import {
|
|
19
|
+
import { useAdminRolePermissions } from '../../../../../hooks/useAdminRolePermissions';
|
|
20
|
+
import { useAdminRoles } from '../../../../../hooks/useAdminRoles';
|
|
21
|
+
import { useAdminRolePermissionLayout } from '../hooks/useAdminRolePermissionLayout';
|
|
20
22
|
|
|
21
23
|
import { Permissions, RoleForm } from './components';
|
|
22
24
|
import schema from './utils/schema';
|
|
@@ -27,21 +29,37 @@ const EditPage = () => {
|
|
|
27
29
|
const {
|
|
28
30
|
params: { id },
|
|
29
31
|
} = useRouteMatch('/settings/roles/:id');
|
|
32
|
+
const { put } = useFetchClient();
|
|
30
33
|
const [isSubmitting, setIsSubmiting] = useState(false);
|
|
31
34
|
const permissionsRef = useRef();
|
|
32
35
|
const { lockApp, unlockApp } = useOverlayBlocker();
|
|
33
36
|
const { trackUsage } = useTracking();
|
|
37
|
+
const { formatAPIError } = useAPIErrorHandler();
|
|
38
|
+
|
|
39
|
+
const { isLoading: isLoadingPermissionsLayout, data: permissionsLayout } =
|
|
40
|
+
useAdminRolePermissionLayout(id, {
|
|
41
|
+
cacheTime: 0,
|
|
42
|
+
});
|
|
34
43
|
|
|
35
|
-
const { isLoading: isLayoutLoading, data: permissionsLayout } = useFetchPermissionsLayout(id);
|
|
36
44
|
const {
|
|
37
|
-
role,
|
|
38
|
-
permissions: rolePermissions,
|
|
45
|
+
roles: [role = {}],
|
|
39
46
|
isLoading: isRoleLoading,
|
|
40
|
-
|
|
41
|
-
} =
|
|
47
|
+
refetch: refetchRole,
|
|
48
|
+
} = useAdminRoles(
|
|
49
|
+
{ id },
|
|
50
|
+
{
|
|
51
|
+
cacheTime: 0,
|
|
52
|
+
}
|
|
53
|
+
);
|
|
42
54
|
|
|
43
|
-
const {
|
|
55
|
+
const { permissions, isLoading: isLoadingPermissions } = useAdminRolePermissions(
|
|
56
|
+
{ id },
|
|
57
|
+
{
|
|
58
|
+
cacheTime: 0,
|
|
59
|
+
}
|
|
60
|
+
);
|
|
44
61
|
|
|
62
|
+
// TODO: this should use a react-query mutation
|
|
45
63
|
const handleEditRoleSubmit = async (data) => {
|
|
46
64
|
try {
|
|
47
65
|
lockApp();
|
|
@@ -62,21 +80,17 @@ const EditPage = () => {
|
|
|
62
80
|
}
|
|
63
81
|
|
|
64
82
|
permissionsRef.current.setFormAfterSubmit();
|
|
65
|
-
|
|
83
|
+
|
|
84
|
+
await refetchRole();
|
|
66
85
|
|
|
67
86
|
toggleNotification({
|
|
68
87
|
type: 'success',
|
|
69
88
|
message: { id: 'notification.success.saved' },
|
|
70
89
|
});
|
|
71
|
-
} catch (
|
|
72
|
-
console.error(err.response);
|
|
73
|
-
|
|
74
|
-
const errorMessage = get(err, 'response.payload.message', 'An error occured');
|
|
75
|
-
const message = get(err, 'response.payload.data.permissions[0]', errorMessage);
|
|
76
|
-
|
|
90
|
+
} catch (error) {
|
|
77
91
|
toggleNotification({
|
|
78
92
|
type: 'warning',
|
|
79
|
-
message,
|
|
93
|
+
message: formatAPIError(error),
|
|
80
94
|
});
|
|
81
95
|
} finally {
|
|
82
96
|
setIsSubmiting(false);
|
|
@@ -84,7 +98,7 @@ const EditPage = () => {
|
|
|
84
98
|
}
|
|
85
99
|
};
|
|
86
100
|
|
|
87
|
-
const isFormDisabled = role.code === 'strapi-super-admin';
|
|
101
|
+
const isFormDisabled = !isRoleLoading && role.code === 'strapi-super-admin';
|
|
88
102
|
|
|
89
103
|
return (
|
|
90
104
|
<Main>
|
|
@@ -137,7 +151,7 @@ const EditPage = () => {
|
|
|
137
151
|
<ContentLayout>
|
|
138
152
|
<Flex direction="column" alignItems="stretch" gap={6}>
|
|
139
153
|
<RoleForm
|
|
140
|
-
isLoading={isRoleLoading}
|
|
154
|
+
isLoading={isRoleLoading || isLoadingPermissions}
|
|
141
155
|
disabled={isFormDisabled}
|
|
142
156
|
errors={errors}
|
|
143
157
|
values={values}
|
|
@@ -145,11 +159,11 @@ const EditPage = () => {
|
|
|
145
159
|
onBlur={handleBlur}
|
|
146
160
|
role={role}
|
|
147
161
|
/>
|
|
148
|
-
{!
|
|
162
|
+
{!isLoadingPermissionsLayout && !isRoleLoading && !isLoadingPermissions ? (
|
|
149
163
|
<Box shadow="filterShadow" hasRadius>
|
|
150
164
|
<Permissions
|
|
151
165
|
isFormDisabled={isFormDisabled}
|
|
152
|
-
permissions={
|
|
166
|
+
permissions={permissions}
|
|
153
167
|
ref={permissionsRef}
|
|
154
168
|
layout={permissionsLayout}
|
|
155
169
|
/>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useCallback,
|
|
1
|
+
import React, { useCallback, useReducer, useState } from 'react';
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
ActionLayout,
|
|
@@ -21,78 +21,27 @@ import {
|
|
|
21
21
|
LoadingIndicatorPage,
|
|
22
22
|
SearchURLQuery,
|
|
23
23
|
SettingsPageTitle,
|
|
24
|
-
|
|
25
|
-
useFilter,
|
|
24
|
+
useAPIErrorHandler,
|
|
26
25
|
useFocusWhenNavigate,
|
|
27
|
-
useNotification,
|
|
28
26
|
useQueryParams,
|
|
27
|
+
useNotification,
|
|
29
28
|
useRBAC,
|
|
30
29
|
} from '@strapi/helper-plugin';
|
|
31
30
|
import { Duplicate, Pencil, Plus, Trash } from '@strapi/icons';
|
|
32
|
-
import get from 'lodash/get';
|
|
33
31
|
import { useIntl } from 'react-intl';
|
|
34
32
|
import { useSelector } from 'react-redux';
|
|
35
33
|
import { useHistory } from 'react-router-dom';
|
|
36
34
|
|
|
37
|
-
import {
|
|
35
|
+
import { useAdminRoles } from '../../../../../hooks/useAdminRoles';
|
|
38
36
|
import { selectAdminPermissions } from '../../../../App/selectors';
|
|
39
37
|
|
|
40
38
|
import EmptyRole from './components/EmptyRole';
|
|
41
39
|
import BaseRoleRow from './components/RoleRow';
|
|
42
40
|
import reducer, { initialState } from './reducer';
|
|
43
41
|
|
|
44
|
-
const
|
|
45
|
-
useFocusWhenNavigate();
|
|
46
|
-
const { locale } = useIntl();
|
|
47
|
-
const permissions = useSelector(selectAdminPermissions);
|
|
48
|
-
const {
|
|
49
|
-
isLoading: isLoadingForPermissions,
|
|
50
|
-
allowedActions: { canCreate, canDelete, canRead, canUpdate },
|
|
51
|
-
} = useRBAC(permissions.settings.roles);
|
|
52
|
-
|
|
53
|
-
const { getData, roles, isLoading } = useRolesList(false);
|
|
54
|
-
const [{ query }] = useQueryParams();
|
|
55
|
-
const _q = query?._q || '';
|
|
56
|
-
|
|
57
|
-
const { includes } = useFilter(locale, {
|
|
58
|
-
sensitivity: 'base',
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* @type {Intl.Collator}
|
|
63
|
-
*/
|
|
64
|
-
const formatter = useCollator(locale, {
|
|
65
|
-
sensitivity: 'base',
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
const sortedRoles = (roles || [])
|
|
69
|
-
.filter((role) => includes(role.name, _q) || includes(role.description, _q))
|
|
70
|
-
.sort(
|
|
71
|
-
(a, b) => formatter.compare(a.name, b.name) || formatter.compare(a.description, b.description)
|
|
72
|
-
);
|
|
73
|
-
|
|
74
|
-
useEffect(() => {
|
|
75
|
-
if (!isLoadingForPermissions && canRead) {
|
|
76
|
-
getData();
|
|
77
|
-
}
|
|
78
|
-
}, [isLoadingForPermissions, canRead, getData]);
|
|
79
|
-
|
|
80
|
-
return {
|
|
81
|
-
isLoadingForPermissions,
|
|
82
|
-
canCreate,
|
|
83
|
-
canDelete,
|
|
84
|
-
canRead,
|
|
85
|
-
canUpdate,
|
|
86
|
-
isLoading,
|
|
87
|
-
getData,
|
|
88
|
-
sortedRoles,
|
|
89
|
-
roles,
|
|
90
|
-
};
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
const useRoleActions = ({ getData, canCreate, canDelete, canUpdate }) => {
|
|
42
|
+
const useRoleActions = ({ canCreate, canDelete, canUpdate, refetchRoles }) => {
|
|
94
43
|
const { formatMessage } = useIntl();
|
|
95
|
-
|
|
44
|
+
const { formatAPIError } = useAPIErrorHandler();
|
|
96
45
|
const toggleNotification = useNotification();
|
|
97
46
|
const [isWarningDeleteAllOpened, setIsWarningDeleteAllOpenend] = useState(false);
|
|
98
47
|
const { push } = useHistory();
|
|
@@ -113,26 +62,16 @@ const useRoleActions = ({ getData, canCreate, canDelete, canUpdate }) => {
|
|
|
113
62
|
ids: [roleToDelete],
|
|
114
63
|
});
|
|
115
64
|
|
|
116
|
-
await
|
|
65
|
+
await refetchRoles();
|
|
117
66
|
|
|
118
67
|
dispatch({
|
|
119
68
|
type: 'RESET_DATA_TO_DELETE',
|
|
120
69
|
});
|
|
121
|
-
} catch (
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
toggleNotification({
|
|
127
|
-
type: 'warning',
|
|
128
|
-
message: errorsMsg,
|
|
129
|
-
});
|
|
130
|
-
} else {
|
|
131
|
-
toggleNotification({
|
|
132
|
-
type: 'warning',
|
|
133
|
-
message: { id: 'notification.error' },
|
|
134
|
-
});
|
|
135
|
-
}
|
|
70
|
+
} catch (error) {
|
|
71
|
+
toggleNotification({
|
|
72
|
+
type: 'warning',
|
|
73
|
+
message: formatAPIError(error),
|
|
74
|
+
});
|
|
136
75
|
}
|
|
137
76
|
handleToggleModal();
|
|
138
77
|
};
|
|
@@ -244,17 +183,25 @@ const useRoleActions = ({ getData, canCreate, canDelete, canUpdate }) => {
|
|
|
244
183
|
|
|
245
184
|
const RoleListPage = () => {
|
|
246
185
|
const { formatMessage } = useIntl();
|
|
186
|
+
useFocusWhenNavigate();
|
|
187
|
+
const permissions = useSelector(selectAdminPermissions);
|
|
188
|
+
const [{ query }] = useQueryParams();
|
|
189
|
+
const {
|
|
190
|
+
isLoading: isLoadingForPermissions,
|
|
191
|
+
allowedActions: { canCreate, canDelete, canRead, canUpdate },
|
|
192
|
+
} = useRBAC(permissions.settings.roles);
|
|
247
193
|
|
|
248
194
|
const {
|
|
249
|
-
|
|
250
|
-
canCreate,
|
|
251
|
-
canRead,
|
|
252
|
-
canDelete,
|
|
253
|
-
canUpdate,
|
|
195
|
+
roles,
|
|
254
196
|
isLoading,
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
197
|
+
refetch: refetchRoles,
|
|
198
|
+
} = useAdminRoles(
|
|
199
|
+
{ filters: query?._q ? { name: { $containsi: query._q } } : undefined },
|
|
200
|
+
{
|
|
201
|
+
cacheTime: 0,
|
|
202
|
+
enabled: !isLoadingForPermissions && canRead,
|
|
203
|
+
}
|
|
204
|
+
);
|
|
258
205
|
|
|
259
206
|
const {
|
|
260
207
|
handleNewRoleClick,
|
|
@@ -263,12 +210,12 @@ const RoleListPage = () => {
|
|
|
263
210
|
showModalConfirmButtonLoading,
|
|
264
211
|
handleToggleModal,
|
|
265
212
|
handleDeleteData,
|
|
266
|
-
} = useRoleActions({
|
|
213
|
+
} = useRoleActions({ refetchRoles, canCreate, canDelete, canUpdate });
|
|
267
214
|
|
|
268
215
|
// ! TODO - Show the search bar only if the user is allowed to read - add the search input
|
|
269
216
|
// canRead
|
|
270
217
|
|
|
271
|
-
const rowCount =
|
|
218
|
+
const rowCount = roles.length + 1;
|
|
272
219
|
const colCount = 6;
|
|
273
220
|
|
|
274
221
|
if (isLoadingForPermissions) {
|
|
@@ -370,7 +317,7 @@ const RoleListPage = () => {
|
|
|
370
317
|
</Tr>
|
|
371
318
|
</Thead>
|
|
372
319
|
<Tbody>
|
|
373
|
-
{
|
|
320
|
+
{roles?.map((role, index) => (
|
|
374
321
|
<BaseRoleRow
|
|
375
322
|
key={role.id}
|
|
376
323
|
id={role.id}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { useFetchClient } from '@strapi/helper-plugin';
|
|
2
|
+
import { useQuery } from 'react-query';
|
|
3
|
+
|
|
4
|
+
export const useAdminRolePermissionLayout = (id, queryOptions = {}) => {
|
|
5
|
+
const { get } = useFetchClient();
|
|
6
|
+
|
|
7
|
+
const { data, error, isError, isLoading } = useQuery(
|
|
8
|
+
['permissions', id],
|
|
9
|
+
async () => {
|
|
10
|
+
const {
|
|
11
|
+
data: { data },
|
|
12
|
+
} = await get('/admin/permissions', {
|
|
13
|
+
// TODO: check with BE why we deviate from our usual admin API format here
|
|
14
|
+
params: { role: id },
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
return data;
|
|
18
|
+
},
|
|
19
|
+
queryOptions
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
return { data, error, isError, isLoading };
|
|
23
|
+
};
|
|
@@ -398,18 +398,24 @@
|
|
|
398
398
|
"coming.soon": "هذا المحتوى قيد الإنشاء حاليًا وسيعود في غضون أسابيع قليلة!",
|
|
399
399
|
"component.Input.error.validation.integer": "يجب أن تكون القيمة عددًا صحيحًا",
|
|
400
400
|
"components.AutoReloadBlocker.description": "Strapi قم بتشغيل باستخدام أحد الأوامر التالية:",
|
|
401
|
-
"components.FilterOptions.FILTER_TYPES.$contains": "يحتوي على
|
|
401
|
+
"components.FilterOptions.FILTER_TYPES.$contains": "يحتوي على",
|
|
402
|
+
"components.FilterOptions.FILTER_TYPES.$containsi": "يحتوي على (case insensitive)",
|
|
402
403
|
"components.FilterOptions.FILTER_TYPES.$endsWith": "ينتهي بـ",
|
|
404
|
+
"components.FilterOptions.FILTER_TYPES.$endsWithi": "ينتهي بـ (case insensitive)",
|
|
403
405
|
"components.FilterOptions.FILTER_TYPES.$eq": "هو",
|
|
406
|
+
"components.FilterOptions.FILTER_TYPES.$eqi": "هو (case insensitive)",
|
|
404
407
|
"components.FilterOptions.FILTER_TYPES.$gt": "أكبر من",
|
|
405
408
|
"components.FilterOptions.FILTER_TYPES.$gte": "أكبر من أو يساوي",
|
|
406
409
|
"components.FilterOptions.FILTER_TYPES.$lt": "أقل من",
|
|
407
410
|
"components.FilterOptions.FILTER_TYPES.$lte": "أقل من أو يساوي",
|
|
408
411
|
"components.FilterOptions.FILTER_TYPES.$ne": "ليس",
|
|
409
|
-
"components.FilterOptions.FILTER_TYPES.$
|
|
412
|
+
"components.FilterOptions.FILTER_TYPES.$nei": "ليس (case insensitive)",
|
|
413
|
+
"components.FilterOptions.FILTER_TYPES.$notContains": "لا يحتوي على",
|
|
414
|
+
"components.FilterOptions.FILTER_TYPES.$notContainsi": "لا يحتوي على (case insensitive)",
|
|
410
415
|
"components.FilterOptions.FILTER_TYPES.$notNull": "هو ليس لاشيء",
|
|
411
416
|
"components.FilterOptions.FILTER_TYPES.$null": "هو لاشيء",
|
|
412
417
|
"components.FilterOptions.FILTER_TYPES.$startsWith": "يبدا ب",
|
|
418
|
+
"components.FilterOptions.FILTER_TYPES.$startsWithi": "يبدا ب (case insensitive)",
|
|
413
419
|
"components.Input.error.contain.lowercase": "يجب أن تحتوي كلمة المرور على حرف صغير واحد على الأقل",
|
|
414
420
|
"components.Input.error.contain.number": "يجب ان تحتوي كلمة المرور على الاقل رقما واحدا",
|
|
415
421
|
"components.Input.error.contain.uppercase": "يجب أن تحتوي كلمة المرور على حرف كبير واحد على الأقل",
|
|
@@ -559,7 +565,7 @@
|
|
|
559
565
|
"content-manager.success.record.unpublish": "غير منشورة",
|
|
560
566
|
"content-manager.utils.data-loaded": "The {number, plural, =1 {entry has} other {entries have}} successfully been loaded",
|
|
561
567
|
"dark": "داكن",
|
|
562
|
-
"Documentation": "توثيق",
|
|
568
|
+
"Documentation": "توثيق",
|
|
563
569
|
"form.button.continue": "واصل",
|
|
564
570
|
"form.button.done": "منتهي",
|
|
565
571
|
"global.actions": "أجراءات",
|
|
@@ -380,18 +380,24 @@
|
|
|
380
380
|
"components.AutoReloadBlocker.description": "Inicia Strapi amb una de les ordres següents:",
|
|
381
381
|
"components.AutoReloadBlocker.header": "Cal recarregar aquesta extensió.",
|
|
382
382
|
"components.ErrorBoundary.title": "Alguna cosa ha sortit malament...",
|
|
383
|
-
"components.FilterOptions.FILTER_TYPES.$contains": "conté
|
|
383
|
+
"components.FilterOptions.FILTER_TYPES.$contains": "conté",
|
|
384
|
+
"components.FilterOptions.FILTER_TYPES.$containsi": "conté (no distingeix entre majúscules i minúscules)",
|
|
384
385
|
"components.FilterOptions.FILTER_TYPES.$endsWith": "acaba amb",
|
|
386
|
+
"components.FilterOptions.FILTER_TYPES.$endsWithi": "acaba amb (no distingeix entre majúscules i minúscules)",
|
|
385
387
|
"components.FilterOptions.FILTER_TYPES.$eq": "és",
|
|
388
|
+
"components.FilterOptions.FILTER_TYPES.$eqi": "és (no distingeix entre majúscules i minúscules)",
|
|
386
389
|
"components.FilterOptions.FILTER_TYPES.$gt": "és més gran que",
|
|
387
390
|
"components.FilterOptions.FILTER_TYPES.$gte": "és més gran o igual a",
|
|
388
391
|
"components.FilterOptions.FILTER_TYPES.$lt": "és menor que",
|
|
389
392
|
"components.FilterOptions.FILTER_TYPES.$lte": "és menor o igual a",
|
|
390
393
|
"components.FilterOptions.FILTER_TYPES.$ne": "no és",
|
|
391
|
-
"components.FilterOptions.FILTER_TYPES.$
|
|
394
|
+
"components.FilterOptions.FILTER_TYPES.$nei": "no és (no distingeix entre majúscules i minúscules)",
|
|
395
|
+
"components.FilterOptions.FILTER_TYPES.$notContains": "no conté",
|
|
396
|
+
"components.FilterOptions.FILTER_TYPES.$notContainsi": "no conté (no distingeix entre majúscules i minúscules)",
|
|
392
397
|
"components.FilterOptions.FILTER_TYPES.$notNull": "no és nul",
|
|
393
398
|
"components.FilterOptions.FILTER_TYPES.$null": "és nul",
|
|
394
399
|
"components.FilterOptions.FILTER_TYPES.$startsWith": "comença amb",
|
|
400
|
+
"components.FilterOptions.FILTER_TYPES.$startsWithi": "comença amb (no distingeix entre majúscules i minúscules)",
|
|
395
401
|
"components.Input.error.attribute.key.taken": "Aquest valor ja existeix",
|
|
396
402
|
"components.Input.error.attribute.sameKeyAndName": "No pot ser igual",
|
|
397
403
|
"components.Input.error.attribute.taken": "Aquest nom de camp ja existeix",
|
|
@@ -375,18 +375,24 @@
|
|
|
375
375
|
"components.AutoReloadBlocker.description": "Strapi mit einem der folgenden Befehle ausführen:",
|
|
376
376
|
"components.AutoReloadBlocker.header": "Dieses Plugin benötigt das Neuladen-Feature.",
|
|
377
377
|
"components.ErrorBoundary.title": "Etwas ist falsch gelaufen...",
|
|
378
|
-
"components.FilterOptions.FILTER_TYPES.$contains": "enthält
|
|
378
|
+
"components.FilterOptions.FILTER_TYPES.$contains": "enthält",
|
|
379
|
+
"components.FilterOptions.FILTER_TYPES.$containsi": "enthält (Groß- und Kleinschreibung wird nicht beachtet)",
|
|
379
380
|
"components.FilterOptions.FILTER_TYPES.$endsWith": "endet mit",
|
|
381
|
+
"components.FilterOptions.FILTER_TYPES.$endsWithi": "endet mit (Groß- und Kleinschreibung wird nicht beachtet)",
|
|
380
382
|
"components.FilterOptions.FILTER_TYPES.$eq": "ist",
|
|
383
|
+
"components.FilterOptions.FILTER_TYPES.$eqi": "ist (Groß- und Kleinschreibung wird nicht beachtet)",
|
|
381
384
|
"components.FilterOptions.FILTER_TYPES.$gt": "ist größer als",
|
|
382
385
|
"components.FilterOptions.FILTER_TYPES.$gte": "is größer als oder gleich",
|
|
383
386
|
"components.FilterOptions.FILTER_TYPES.$lt": "is kleiner als",
|
|
384
387
|
"components.FilterOptions.FILTER_TYPES.$lte": "is kleiner als oder gleich",
|
|
385
388
|
"components.FilterOptions.FILTER_TYPES.$ne": "ist nicht",
|
|
386
|
-
"components.FilterOptions.FILTER_TYPES.$
|
|
389
|
+
"components.FilterOptions.FILTER_TYPES.$nei": "ist nicht (Groß- und Kleinschreibung wird nicht beachtet)",
|
|
390
|
+
"components.FilterOptions.FILTER_TYPES.$notContains": "enthält nicht",
|
|
391
|
+
"components.FilterOptions.FILTER_TYPES.$notContainsi": "enthält nicht (Groß- und Kleinschreibung wird nicht beachtet)",
|
|
387
392
|
"components.FilterOptions.FILTER_TYPES.$notNull": "ist nicht null",
|
|
388
393
|
"components.FilterOptions.FILTER_TYPES.$null": "ist null",
|
|
389
394
|
"components.FilterOptions.FILTER_TYPES.$startsWith": "startet mit",
|
|
395
|
+
"components.FilterOptions.FILTER_TYPES.$startsWithi": "startet mit (Groß- und Kleinschreibung wird nicht beachtet)",
|
|
390
396
|
"components.Input.error.attribute.key.taken": "Dieser Wert existiert bereits",
|
|
391
397
|
"components.Input.error.attribute.sameKeyAndName": "Darf nicht gleich sein",
|
|
392
398
|
"components.Input.error.attribute.taken": "Dieser Feldname ist bereits vergeben",
|
|
@@ -324,18 +324,24 @@
|
|
|
324
324
|
"components.AutoReloadBlocker.description": "Kør Strapi med en af følgende kommandoer:",
|
|
325
325
|
"components.AutoReloadBlocker.header": "Reload funktion er påkrævet for dette plugin.",
|
|
326
326
|
"components.ErrorBoundary.title": "Noget gik galt...",
|
|
327
|
-
"components.FilterOptions.FILTER_TYPES.$contains": "indeholder
|
|
327
|
+
"components.FilterOptions.FILTER_TYPES.$contains": "indeholder",
|
|
328
|
+
"components.FilterOptions.FILTER_TYPES.$containsi": "indeholder (sag ufølsom)",
|
|
328
329
|
"components.FilterOptions.FILTER_TYPES.$endsWith": "slutter med",
|
|
330
|
+
"components.FilterOptions.FILTER_TYPES.$endsWithi": "slutter med (sag ufølsom)",
|
|
329
331
|
"components.FilterOptions.FILTER_TYPES.$eq": "er",
|
|
332
|
+
"components.FilterOptions.FILTER_TYPES.$eqi": "er (sag ufølsom)",
|
|
330
333
|
"components.FilterOptions.FILTER_TYPES.$gt": "er større end",
|
|
331
334
|
"components.FilterOptions.FILTER_TYPES.$gte": "er større end eller lig med",
|
|
332
335
|
"components.FilterOptions.FILTER_TYPES.$lt": "er mindre end",
|
|
333
336
|
"components.FilterOptions.FILTER_TYPES.$lte": "er mindre end eller lig med",
|
|
334
337
|
"components.FilterOptions.FILTER_TYPES.$ne": "er ikke",
|
|
335
|
-
"components.FilterOptions.FILTER_TYPES.$
|
|
338
|
+
"components.FilterOptions.FILTER_TYPES.$nei": "er ikke (sag ufølsom)",
|
|
339
|
+
"components.FilterOptions.FILTER_TYPES.$notContains": "indeholder ikke",
|
|
340
|
+
"components.FilterOptions.FILTER_TYPES.$notContainsi": "indeholder ikke (sag ufølsom)",
|
|
336
341
|
"components.FilterOptions.FILTER_TYPES.$notNull": "er ikke null",
|
|
337
342
|
"components.FilterOptions.FILTER_TYPES.$null": "er null",
|
|
338
343
|
"components.FilterOptions.FILTER_TYPES.$startsWith": "starter med",
|
|
344
|
+
"components.FilterOptions.FILTER_TYPES.$startsWithi": "starter med (sag ufølsom)",
|
|
339
345
|
"components.Input.error.attribute.key.taken": "Værdien findes allerede",
|
|
340
346
|
"components.Input.error.attribute.sameKeyAndName": "Kan ikke være lig",
|
|
341
347
|
"components.Input.error.attribute.taken": "Dette feltnavn findes allerede",
|
|
@@ -553,18 +553,24 @@
|
|
|
553
553
|
"components.AutoReloadBlocker.description": "Run Strapi with one of the following commands:",
|
|
554
554
|
"components.AutoReloadBlocker.header": "Reload feature is required for this plugin.",
|
|
555
555
|
"components.ErrorBoundary.title": "Something went wrong...",
|
|
556
|
-
"components.FilterOptions.FILTER_TYPES.$contains": "contains
|
|
556
|
+
"components.FilterOptions.FILTER_TYPES.$contains": "contains",
|
|
557
|
+
"components.FilterOptions.FILTER_TYPES.$containsi": "contains (case insensitive)",
|
|
557
558
|
"components.FilterOptions.FILTER_TYPES.$endsWith": "ends with",
|
|
559
|
+
"components.FilterOptions.FILTER_TYPES.$endsWithi": "ends with (case insensitive)",
|
|
558
560
|
"components.FilterOptions.FILTER_TYPES.$eq": "is",
|
|
561
|
+
"components.FilterOptions.FILTER_TYPES.$eqi": "is (case insensitive)",
|
|
559
562
|
"components.FilterOptions.FILTER_TYPES.$gt": "is greater than",
|
|
560
563
|
"components.FilterOptions.FILTER_TYPES.$gte": "is greater than or equal to",
|
|
561
564
|
"components.FilterOptions.FILTER_TYPES.$lt": "is lower than",
|
|
562
565
|
"components.FilterOptions.FILTER_TYPES.$lte": "is lower than or equal to",
|
|
563
566
|
"components.FilterOptions.FILTER_TYPES.$ne": "is not",
|
|
564
|
-
"components.FilterOptions.FILTER_TYPES.$
|
|
567
|
+
"components.FilterOptions.FILTER_TYPES.$nei": "is not (case insensitive)",
|
|
568
|
+
"components.FilterOptions.FILTER_TYPES.$notContains": "does not contain",
|
|
569
|
+
"components.FilterOptions.FILTER_TYPES.$notContainsi": "does not contain (case insensitive)",
|
|
565
570
|
"components.FilterOptions.FILTER_TYPES.$notNull": "is not null",
|
|
566
571
|
"components.FilterOptions.FILTER_TYPES.$null": "is null",
|
|
567
572
|
"components.FilterOptions.FILTER_TYPES.$startsWith": "starts with",
|
|
573
|
+
"components.FilterOptions.FILTER_TYPES.$startsWithi": "starts with (case insensitive)",
|
|
568
574
|
"components.Input.error.attribute.key.taken": "This value already exists",
|
|
569
575
|
"components.Input.error.attribute.sameKeyAndName": "Can't be equal",
|
|
570
576
|
"components.Input.error.attribute.taken": "This field name already exists",
|
|
@@ -727,7 +733,7 @@
|
|
|
727
733
|
"content-manager.containers.ListPage.items": "{number, plural, =0 {items} one {item} other {items}}",
|
|
728
734
|
"content-manager.containers.ListPage.table-headers.publishedAt": "State",
|
|
729
735
|
"content-manager.containers.ListPage.selectedEntriesModal.title": "Publish entries",
|
|
730
|
-
"content-manager.containers.ListPage.selectedEntriesModal.selectedCount": "<b>{readyToPublishCount}</b> {readyToPublishCount, plural, =0 {entries} one {entry} other {entries}} ready to publish. <b>{withErrorsCount}</b> {withErrorsCount, plural, =0 {entries} one {entry} other {entries}} waiting for action.",
|
|
736
|
+
"content-manager.containers.ListPage.selectedEntriesModal.selectedCount": "<b>{alreadyPublishedCount}</b> {alreadyPublishedCount, plural, =0 {entries} one {entry} other {entries}} already published. <b>{readyToPublishCount}</b> {readyToPublishCount, plural, =0 {entries} one {entry} other {entries}} ready to publish. <b>{withErrorsCount}</b> {withErrorsCount, plural, =0 {entries} one {entry} other {entries}} waiting for action.",
|
|
731
737
|
"content-manager.containers.ListPage.selectedEntriesModal.publishedCount": "<b>{publishedCount}</b> {publishedCount, plural, =0 {entries} one {entry} other {entries}} published. <b>{withErrorsCount}</b> {withErrorsCount, plural, =0 {entries} one {entry} other {entries}} waiting for action.",
|
|
732
738
|
"content-manager.containers.ListSettingsView.modal-form.edit-label": "Edit {fieldName}",
|
|
733
739
|
"content-manager.containers.SettingPage.add.field": "Insert another field",
|
|
@@ -329,18 +329,24 @@
|
|
|
329
329
|
"components.AutoReloadBlocker.description": "Inicia Strapi con uno de los siguientes comandos:",
|
|
330
330
|
"components.AutoReloadBlocker.header": "Es necesario recargar para este plugin.",
|
|
331
331
|
"components.ErrorBoundary.title": "Algo salió mal...",
|
|
332
|
-
"components.FilterOptions.FILTER_TYPES.$contains": "contiene
|
|
332
|
+
"components.FilterOptions.FILTER_TYPES.$contains": "contiene",
|
|
333
|
+
"components.FilterOptions.FILTER_TYPES.$containsi": "contiene (insensible a mayúsculas y minúsculas)",
|
|
333
334
|
"components.FilterOptions.FILTER_TYPES.$endsWith": "termina con",
|
|
335
|
+
"components.FilterOptions.FILTER_TYPES.$endsWithi": "termina con (insensible a mayúsculas y minúsculas)",
|
|
334
336
|
"components.FilterOptions.FILTER_TYPES.$eq": "es",
|
|
337
|
+
"components.FilterOptions.FILTER_TYPES.$eqi": "es (insensible a mayúsculas y minúsculas)",
|
|
335
338
|
"components.FilterOptions.FILTER_TYPES.$gt": "es mayor que",
|
|
336
339
|
"components.FilterOptions.FILTER_TYPES.$gte": "es mayor o igual a",
|
|
337
340
|
"components.FilterOptions.FILTER_TYPES.$lt": "es menor que",
|
|
338
341
|
"components.FilterOptions.FILTER_TYPES.$lte": "es menor o igual a",
|
|
339
342
|
"components.FilterOptions.FILTER_TYPES.$ne": "no es",
|
|
340
|
-
"components.FilterOptions.FILTER_TYPES.$
|
|
343
|
+
"components.FilterOptions.FILTER_TYPES.$nei": "no es (insensible a mayúsculas y minúsculas)",
|
|
344
|
+
"components.FilterOptions.FILTER_TYPES.$notContains": "no contiene",
|
|
345
|
+
"components.FilterOptions.FILTER_TYPES.$notContainsi": "no contiene (insensible a mayúsculas y minúsculas)",
|
|
341
346
|
"components.FilterOptions.FILTER_TYPES.$notNull": "is not null",
|
|
342
347
|
"components.FilterOptions.FILTER_TYPES.$null": "is null",
|
|
343
|
-
"components.FilterOptions.FILTER_TYPES.$startsWith": "
|
|
348
|
+
"components.FilterOptions.FILTER_TYPES.$startsWith": "comienza con",
|
|
349
|
+
"components.FilterOptions.FILTER_TYPES.$startsWithi": "comienza con (insensible a mayúsculas y minúsculas)",
|
|
344
350
|
"components.Input.error.attribute.key.taken": "Este valor ya existe",
|
|
345
351
|
"components.Input.error.attribute.sameKeyAndName": "No puede ser igual",
|
|
346
352
|
"components.Input.error.attribute.taken": "Este nombre de campo ya existe",
|
|
@@ -459,18 +459,24 @@
|
|
|
459
459
|
"components.AutoReloadBlocker.description": "Exekutatu Strapi komando hauetako batekin:",
|
|
460
460
|
"components.AutoReloadBlocker.header": "Plugin honetarako birkargatu eginbidea beharrezkoa da",
|
|
461
461
|
"components.ErrorBoundary.title": "Zerbait gaizki atera da...",
|
|
462
|
-
"components.FilterOptions.FILTER_TYPES.$contains": "da
|
|
462
|
+
"components.FilterOptions.FILTER_TYPES.$contains": "da",
|
|
463
|
+
"components.FilterOptions.FILTER_TYPES.$containsi": "da (ez ditu letra larriak eta txikiak bereizten)",
|
|
463
464
|
"components.FilterOptions.FILTER_TYPES.$endsWith": "honekin bukatzen da",
|
|
465
|
+
"components.FilterOptions.FILTER_TYPES.$endsWithi": "honekin bukatzen da (ez ditu letra larriak eta txikiak bereizten)",
|
|
464
466
|
"components.FilterOptions.FILTER_TYPES.$eq": "da",
|
|
467
|
+
"components.FilterOptions.FILTER_TYPES.$eqi": "da (ez ditu letra larriak eta txikiak bereizten)",
|
|
465
468
|
"components.FilterOptions.FILTER_TYPES.$gt": "baino handiagoa da",
|
|
466
469
|
"components.FilterOptions.FILTER_TYPES.$gte": "baino handiagoa edo berdina da",
|
|
467
470
|
"components.FilterOptions.FILTER_TYPES.$lt": "baino baxuagoa da",
|
|
468
471
|
"components.FilterOptions.FILTER_TYPES.$lte": "baino txikiagoa edo berdina da",
|
|
469
472
|
"components.FilterOptions.FILTER_TYPES.$ne": "ez da",
|
|
470
|
-
"components.FilterOptions.FILTER_TYPES.$
|
|
473
|
+
"components.FilterOptions.FILTER_TYPES.$nei": "ez da (ez ditu letra larriak eta txikiak bereizten)",
|
|
474
|
+
"components.FilterOptions.FILTER_TYPES.$notContains": "ez dauka",
|
|
475
|
+
"components.FilterOptions.FILTER_TYPES.$notContainsi": "ez dauka (ez ditu letra larriak eta txikiak bereizten)",
|
|
471
476
|
"components.FilterOptions.FILTER_TYPES.$notNull": "ez da nulua",
|
|
472
477
|
"components.FilterOptions.FILTER_TYPES.$null": "nulua da",
|
|
473
478
|
"components.FilterOptions.FILTER_TYPES.$startsWith": "hasten da",
|
|
479
|
+
"components.FilterOptions.FILTER_TYPES.$startsWithi": "hasten da (ez ditu letra larriak eta txikiak bereizten)",
|
|
474
480
|
"components.Input.error.attribute.key.taken": "Balio hori existitzen da",
|
|
475
481
|
"components.Input.error.attribute.sameKeyAndName": "Ezin da berdina izan",
|
|
476
482
|
"components.Input.error.attribute.taken": "Eremu-izen hau dagoeneko badago",
|