strapi-plugin-navigation 2.3.0-beta.0 → 2.3.1

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.
Files changed (81) hide show
  1. package/README.md +128 -31
  2. package/admin/src/components/AdditionalFieldInput/index.js +2 -2
  3. package/admin/src/components/AdditionalFieldInput/types.d.ts +4 -3
  4. package/admin/src/components/ConfirmationDialog/index.d.ts +10 -10
  5. package/admin/src/components/EmptyView/index.js +2 -0
  6. package/admin/src/components/Item/ItemCardHeader/icons.d.ts +1 -1
  7. package/admin/src/components/Item/ItemCardHeader/icons.js +2 -1
  8. package/admin/src/components/Item/ItemCardHeader/index.d.ts +1 -0
  9. package/admin/src/components/Item/ItemCardHeader/index.js +10 -8
  10. package/admin/src/components/Item/index.d.ts +15 -15
  11. package/admin/src/components/Item/index.js +10 -8
  12. package/admin/src/components/NavigationItemList/index.d.ts +13 -12
  13. package/admin/src/components/NavigationItemList/index.js +2 -2
  14. package/admin/src/hooks/useNavigationManager.d.ts +0 -1
  15. package/admin/src/index.d.ts +5 -7
  16. package/admin/src/index.js +12 -18
  17. package/admin/src/pages/DataManagerProvider/index.d.ts +1 -1
  18. package/admin/src/pages/DataManagerProvider/index.js +32 -5
  19. package/admin/src/pages/DataManagerProvider/reducer.d.ts +16 -16
  20. package/admin/src/pages/NoAccessPage/index.d.ts +3 -0
  21. package/admin/src/pages/NoAccessPage/index.js +31 -0
  22. package/admin/src/pages/SettingsPage/index.d.ts +0 -1
  23. package/admin/src/pages/SettingsPage/index.js +9 -0
  24. package/admin/src/pages/SettingsPage/types.d.ts +8 -8
  25. package/admin/src/pages/SettingsPage/utils/functions.d.ts +0 -2
  26. package/admin/src/pages/View/components/NavigationHeader/index.d.ts +2 -1
  27. package/admin/src/pages/View/components/NavigationHeader/index.js +19 -9
  28. package/admin/src/pages/View/components/NavigationItemForm/index.js +25 -19
  29. package/admin/src/pages/View/components/NavigationItemForm/types.d.ts +10 -9
  30. package/admin/src/pages/View/components/NavigationItemForm/utils/form.d.ts +6 -6
  31. package/admin/src/pages/View/components/NavigationItemPopup/NavigationItemPopupFooter.d.ts +12 -10
  32. package/admin/src/pages/View/components/NavigationItemPopup/NavigationItemPopupFooter.js +5 -1
  33. package/admin/src/pages/View/components/NavigationItemPopup/NavigationItemPopupHeader.d.ts +2 -1
  34. package/admin/src/pages/View/components/NavigationItemPopup/NavigationItemPopupHeader.js +6 -2
  35. package/admin/src/pages/View/components/NavigationItemPopup/index.d.ts +13 -12
  36. package/admin/src/pages/View/components/NavigationItemPopup/index.js +4 -3
  37. package/admin/src/pages/View/components/NavigationManager/AllNavigations/icons.d.ts +0 -1
  38. package/admin/src/pages/View/components/NavigationManager/AllNavigations/index.d.ts +0 -1
  39. package/admin/src/pages/View/components/NavigationManager/DeletionConfirm/index.d.ts +0 -1
  40. package/admin/src/pages/View/components/NavigationManager/ErrorDetails/index.d.ts +0 -1
  41. package/admin/src/pages/View/components/NavigationManager/Footer/index.d.ts +1 -1
  42. package/admin/src/pages/View/components/NavigationManager/Form/index.d.ts +0 -1
  43. package/admin/src/pages/View/components/NavigationManager/NavigationUpdate/index.d.ts +0 -1
  44. package/admin/src/pages/View/components/NavigationManager/NewNavigation/index.d.ts +0 -1
  45. package/admin/src/pages/View/components/NavigationManager/index.d.ts +0 -1
  46. package/admin/src/pages/View/components/NavigationManager/types.d.ts +3 -3
  47. package/admin/src/pages/View/index.d.ts +1 -1
  48. package/admin/src/pages/View/index.js +42 -25
  49. package/admin/src/permissions.d.ts +6 -2
  50. package/admin/src/permissions.js +1 -0
  51. package/admin/src/translations/ca.json +198 -0
  52. package/admin/src/translations/en.json +11 -1
  53. package/admin/src/translations/fr.json +3 -1
  54. package/admin/src/translations/index.d.ts +2 -0
  55. package/admin/src/translations/index.js +2 -0
  56. package/admin/src/utils/functions.d.ts +2 -2
  57. package/package.json +16 -14
  58. package/permissions.d.ts +1 -0
  59. package/permissions.js +1 -0
  60. package/server/bootstrap/index.js +6 -0
  61. package/server/config/setupStrategy.js +11 -0
  62. package/server/controllers/client.js +15 -0
  63. package/server/i18n/graphQLEnhancers.d.ts +1 -1
  64. package/server/i18n/navigationSetupStrategy.js +68 -40
  65. package/server/i18n/types.d.ts +11 -11
  66. package/server/i18n/utils.d.ts +2 -2
  67. package/server/routes/admin.js +99 -2
  68. package/server/routes/client.js +8 -0
  69. package/server/services/admin.js +114 -57
  70. package/server/services/client.js +17 -1
  71. package/server/services/common.js +31 -16
  72. package/server/utils/functions.d.ts +3 -1
  73. package/server/utils/functions.js +31 -2
  74. package/tsconfig.tsbuildinfo +1 -1
  75. package/types/config.d.ts +8 -8
  76. package/types/contentTypes.d.ts +20 -20
  77. package/types/controllers.d.ts +3 -2
  78. package/types/graphQL.d.ts +1 -1
  79. package/types/i18n.d.ts +2 -2
  80. package/types/services.d.ts +7 -3
  81. package/types/utils.d.ts +25 -20
@@ -1,5 +1,5 @@
1
1
  export default NavigationItemPopUp;
2
- declare function NavigationItemPopUp({ availableLocale, isOpen, isLoading, data, config, onSubmit, onClose, usedContentTypeItems, getContentTypeItems, usedContentTypesData, locale, readNavigationItemFromLocale, slugify, }: {
2
+ declare function NavigationItemPopUp({ availableLocale, isOpen, isLoading, data, config, onSubmit, onClose, usedContentTypeItems, getContentTypeItems, usedContentTypesData, locale, readNavigationItemFromLocale, slugify, permissions, }: {
3
3
  availableLocale: any;
4
4
  isOpen: any;
5
5
  isLoading: any;
@@ -13,20 +13,21 @@ declare function NavigationItemPopUp({ availableLocale, isOpen, isLoading, data,
13
13
  locale: any;
14
14
  readNavigationItemFromLocale: any;
15
15
  slugify: any;
16
+ permissions?: {} | undefined;
16
17
  }): JSX.Element;
17
18
  declare namespace NavigationItemPopUp {
18
19
  namespace propTypes {
19
- const data: PropTypes.Validator<object>;
20
- const config: PropTypes.Validator<object>;
21
- const isOpen: PropTypes.Requireable<boolean>;
22
- const isLoading: PropTypes.Requireable<boolean>;
23
- const onSubmit: PropTypes.Validator<(...args: any[]) => any>;
24
- const onClose: PropTypes.Validator<(...args: any[]) => any>;
25
- const getContentTypeItems: PropTypes.Validator<(...args: any[]) => any>;
26
- const locale: PropTypes.Requireable<string>;
27
- const readNavigationItemFromLocale: PropTypes.Validator<(...args: any[]) => any>;
28
- const slugify: PropTypes.Validator<(...args: any[]) => any>;
20
+ let data: PropTypes.Validator<object>;
21
+ let config: PropTypes.Validator<object>;
22
+ let isOpen: PropTypes.Requireable<boolean>;
23
+ let isLoading: PropTypes.Requireable<boolean>;
24
+ let onSubmit: PropTypes.Validator<(...args: any[]) => any>;
25
+ let onClose: PropTypes.Validator<(...args: any[]) => any>;
26
+ let getContentTypeItems: PropTypes.Validator<(...args: any[]) => any>;
27
+ let locale: PropTypes.Requireable<string>;
28
+ let readNavigationItemFromLocale: PropTypes.Validator<(...args: any[]) => any>;
29
+ let slugify: PropTypes.Validator<(...args: any[]) => any>;
29
30
  }
30
31
  }
31
- import PropTypes from "prop-types";
32
+ import PropTypes from 'prop-types';
32
33
  //# sourceMappingURL=index.d.ts.map
@@ -34,12 +34,13 @@ const NavigationItemForm_1 = __importDefault(require("../NavigationItemForm"));
34
34
  const parsers_1 = require("../../utils/parsers");
35
35
  const NavigationItemPopupHeader_1 = require("./NavigationItemPopupHeader");
36
36
  const utils_1 = require("../../../../utils");
37
- const NavigationItemPopUp = ({ availableLocale, isOpen, isLoading, data, config = {}, onSubmit, onClose, usedContentTypeItems, getContentTypeItems, usedContentTypesData, locale, readNavigationItemFromLocale, slugify, }) => {
37
+ const NavigationItemPopUp = ({ availableLocale, isOpen, isLoading, data, config = {}, onSubmit, onClose, usedContentTypeItems, getContentTypeItems, usedContentTypesData, locale, readNavigationItemFromLocale, slugify, permissions = {}, }) => {
38
38
  const handleOnSubmit = (payload) => {
39
39
  onSubmit(payload);
40
40
  };
41
41
  const { related, relatedType } = data;
42
42
  const { availableAudience = [], additionalFields, contentTypes, contentTypeItems, contentTypesNameFields = {}, } = config;
43
+ const { canUpdate } = permissions;
43
44
  const appendLabelPublicationStatus = (label = '', item = {}, isCollection = false) => {
44
45
  const appendix = (0, parsers_1.isRelationPublished)({
45
46
  relatedRef: item,
@@ -70,8 +71,8 @@ const NavigationItemPopUp = ({ availableLocale, isOpen, isLoading, data, config
70
71
  const preparedData = (0, react_1.useMemo)(prepareFormData.bind(null, data), [data]);
71
72
  const hasViewId = !!data.viewId;
72
73
  return (react_1.default.createElement(ModalLayout_1.ModalLayout, { labelledBy: "condition-modal-breadcrumbs", onClose: onClose, isOpen: isOpen },
73
- react_1.default.createElement(NavigationItemPopupHeader_1.NavigationItemPopupHeader, { isNewItem: !hasViewId }),
74
- react_1.default.createElement(NavigationItemForm_1.default, { availableLocale: availableLocale, config: config, data: preparedData, isLoading: isLoading, additionalFields: additionalFields, contentTypesNameFields: contentTypesNameFields, availableAudience: availableAudience, contentTypes: contentTypes, contentTypeEntities: contentTypeItems, usedContentTypeEntities: usedContentTypeItems, getContentTypeEntities: getContentTypeItems, usedContentTypesData: usedContentTypesData, onSubmit: handleOnSubmit, onCancel: onClose, appendLabelPublicationStatus: appendLabelPublicationStatus, locale: locale, readNavigationItemFromLocale: readNavigationItemFromLocale, slugify: slugify })));
74
+ react_1.default.createElement(NavigationItemPopupHeader_1.NavigationItemPopupHeader, { isNewItem: !hasViewId, canUpdate: canUpdate }),
75
+ react_1.default.createElement(NavigationItemForm_1.default, { availableLocale: availableLocale, config: config, data: preparedData, isLoading: isLoading, additionalFields: additionalFields, contentTypesNameFields: contentTypesNameFields, availableAudience: availableAudience, contentTypes: contentTypes, contentTypeEntities: contentTypeItems, usedContentTypeEntities: usedContentTypeItems, getContentTypeEntities: getContentTypeItems, usedContentTypesData: usedContentTypesData, onSubmit: handleOnSubmit, onCancel: onClose, appendLabelPublicationStatus: appendLabelPublicationStatus, locale: locale, readNavigationItemFromLocale: readNavigationItemFromLocale, slugify: slugify, permissions: permissions })));
75
76
  };
76
77
  NavigationItemPopUp.propTypes = {
77
78
  data: prop_types_1.default.object.isRequired,
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  export declare const edit: JSX.Element;
3
2
  export declare const deleteIcon: JSX.Element;
4
3
  //# sourceMappingURL=icons.d.ts.map
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { Footer } from "../Footer";
3
2
  import { CommonProps, ListState } from "../types";
4
3
  interface Props extends ListState, CommonProps {
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { Footer } from "../Footer";
3
2
  import { CommonProps, DeleteState } from "../types";
4
3
  interface Props extends DeleteState, CommonProps {
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { Footer } from "../Footer";
3
2
  import { CommonProps, ErrorState } from "../types";
4
3
  interface Props extends ErrorState, CommonProps {
@@ -5,7 +5,7 @@ interface FooterBaseProps {
5
5
  end?: ActionProps;
6
6
  start?: ActionProps;
7
7
  }
8
- export declare type Footer = React.FC<{
8
+ export type Footer = React.FC<{
9
9
  navigations: Array<Navigation>;
10
10
  onClose?: VoidEffect;
11
11
  onReset: VoidEffect;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { useIntl } from "react-intl";
3
2
  import { Effect } from "../../../../../../../types";
4
3
  import { Navigation } from "../types";
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { Footer } from "../Footer";
3
2
  import { CommonProps, EditState } from "../types";
4
3
  interface Props extends EditState, CommonProps {
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { Footer } from "../Footer";
3
2
  import { CommonProps, CreateState, Navigation } from "../types";
4
3
  interface Props extends CreateState, CommonProps {
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { VoidEffect } from "../../../../../../types";
3
2
  import { State } from "./types";
4
3
  interface Props {
@@ -1,8 +1,8 @@
1
1
  import { Dispatch, SetStateAction } from "react";
2
2
  import { Navigation as FullNavigationEntity } from "../../../../../../types";
3
- export declare type Navigation = Pick<FullNavigationEntity, "id" | "items" | "name" | "localeCode" | "localizations" | "visible">;
4
- export declare type State = InitialState | ListState | EditState | CreateState | DeleteState | ErrorState;
5
- export declare type SetState = Dispatch<SetStateAction<State>>;
3
+ export type Navigation = Pick<FullNavigationEntity, "id" | "items" | "name" | "localeCode" | "localizations" | "visible">;
4
+ export type State = InitialState | ListState | EditState | CreateState | DeleteState | ErrorState;
5
+ export type SetState = Dispatch<SetStateAction<State>>;
6
6
  interface CommonState {
7
7
  isLoading?: boolean;
8
8
  }
@@ -1,4 +1,4 @@
1
1
  declare const _default: React.MemoExoticComponent<() => JSX.Element>;
2
2
  export default _default;
3
- import React from "react";
3
+ import React from 'react';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -37,9 +37,11 @@ const Box_1 = require("@strapi/design-system/Box");
37
37
  const Icon_1 = require("@strapi/design-system/Icon");
38
38
  const Button_1 = require("@strapi/design-system/Button");
39
39
  const Select_1 = require("@strapi/design-system/Select");
40
+ const Grid_1 = require("@strapi/design-system/Grid");
40
41
  const helper_plugin_1 = require("@strapi/helper-plugin");
41
42
  const EmptyDocuments_1 = __importDefault(require("@strapi/icons/EmptyDocuments"));
42
43
  const Plus_1 = __importDefault(require("@strapi/icons/Plus"));
44
+ const permissions_1 = __importDefault(require("../../permissions"));
43
45
  const NavigationItemList_1 = __importDefault(require("../../components/NavigationItemList"));
44
46
  const NavigationContentHeader_1 = __importDefault(require("./components/NavigationContentHeader"));
45
47
  const NavigationHeader_1 = __importDefault(require("./components/NavigationHeader"));
@@ -49,9 +51,11 @@ const Search_1 = __importDefault(require("../../components/Search"));
49
51
  const useDataManager_1 = __importDefault(require("../../hooks/useDataManager"));
50
52
  const translations_1 = require("../../translations");
51
53
  const parsers_1 = require("./utils/parsers");
54
+ const NoAccessPage_1 = __importDefault(require("../NoAccessPage"));
52
55
  const View = () => {
53
56
  const toggleNotification = (0, helper_plugin_1.useNotification)();
54
- const { items: availableNavigations, activeItem: activeNavigation, changedActiveItem: changedActiveNavigation, config, navigationItemPopupOpened, isLoading, isLoadingForAdditionalDataToBeSet, isLoadingForSubmit, handleChangeNavigationItemPopupVisibility, handleChangeSelection, handleChangeNavigationData, handleResetNavigationData, handleSubmitNavigation, handleLocalizationSelection, handleI18nCopy, getContentTypeItems, error, availableLocale: allAvailableLocale, readNavigationItemFromLocale, slugify, } = (0, useDataManager_1.default)();
57
+ const { items: availableNavigations, activeItem: activeNavigation, changedActiveItem: changedActiveNavigation, config, navigationItemPopupOpened, isLoading, isLoadingForAdditionalDataToBeSet, isLoadingForSubmit, handleChangeNavigationItemPopupVisibility, handleChangeSelection, handleChangeNavigationData, handleResetNavigationData, handleSubmitNavigation, handleLocalizationSelection, handleI18nCopy, getContentTypeItems, error, availableLocale: allAvailableLocale, readNavigationItemFromLocale, slugify, permissions, } = (0, useDataManager_1.default)();
58
+ const { canAccess, canUpdate } = permissions;
55
59
  const availableLocale = (0, react_1.useMemo)(() => allAvailableLocale.filter(locale => locale !== changedActiveNavigation?.localeCode), [changedActiveNavigation, allAvailableLocale]);
56
60
  const { i18nCopyItemsModal, i18nCopySourceLocale, setI18nCopyModalOpened, setI18nCopySourceLocale } = (0, useI18nCopyNavigationItemsModal_1.useI18nCopyNavigationItemsModal)((0, react_1.useCallback)((sourceLocale) => {
57
61
  const source = activeNavigation?.localizations?.find(({ localeCode }) => localeCode === sourceLocale);
@@ -65,11 +69,16 @@ const View = () => {
65
69
  const [searchValue, setSearchValue] = (0, react_1.useState)('');
66
70
  const [structureChanged, setStructureChanged] = (0, react_1.useState)(false);
67
71
  const isSearchEmpty = (0, lodash_1.isEmpty)(searchValue);
72
+ const normalisedSearchValue = (searchValue || '').toLowerCase();
68
73
  const structureHasErrors = !(0, parsers_1.validateNavigationStructure)((changedActiveNavigation || {}).items);
69
- (0, react_1.useEffect)(() => structureHasErrors && toggleNotification({
70
- type: 'warning',
71
- message: (0, translations_1.getTrad)('notification.error.item.relation'),
72
- }), [structureHasErrors]);
74
+ (0, react_1.useEffect)(() => {
75
+ if (structureHasErrors) {
76
+ toggleNotification({
77
+ type: 'warning',
78
+ message: (0, translations_1.getTrad)('notification.error.item.relation'),
79
+ });
80
+ }
81
+ }, [structureHasErrors]);
73
82
  const navigationSelectValue = (0, lodash_1.get)(activeNavigation, "id", null);
74
83
  const handleSave = () => isLoadingForSubmit || structureHasErrors
75
84
  ? null
@@ -79,15 +88,17 @@ const View = () => {
79
88
  handleChangeNavigationItemPopupVisibility(visible);
80
89
  };
81
90
  const addNewNavigationItem = (0, react_1.useCallback)((event, viewParentId = null, isMenuAllowedLevel = true, levelPath = '', parentAttachedToMenu = true, structureId = "0") => {
82
- event.preventDefault();
83
- event.stopPropagation();
84
- changeNavigationItemPopupState(true, {
85
- viewParentId,
86
- isMenuAllowedLevel,
87
- levelPath,
88
- parentAttachedToMenu,
89
- structureId,
90
- });
91
+ if (canUpdate) {
92
+ event.preventDefault();
93
+ event.stopPropagation();
94
+ changeNavigationItemPopupState(true, {
95
+ viewParentId,
96
+ isMenuAllowedLevel,
97
+ levelPath,
98
+ parentAttachedToMenu,
99
+ structureId,
100
+ });
101
+ }
91
102
  }, [changeNavigationItemPopupState]);
92
103
  const usedContentTypesData = (0, react_1.useMemo)(() => changedActiveNavigation ? (0, parsers_1.usedContentTypes)(changedActiveNavigation.items) : [], [changedActiveNavigation]);
93
104
  const pullUsedContentTypeItem = (items = []) => items.reduce((prev, curr) => [...prev, curr.relatedRef ? {
@@ -110,7 +121,7 @@ const View = () => {
110
121
  else
111
122
  return [...subItems, ...acc];
112
123
  }, []);
113
- const filteredList = !isSearchEmpty ? filteredListFactory(changedActiveNavigation.items, (item) => item?.title.includes(searchValue)) : [];
124
+ const filteredList = !isSearchEmpty ? filteredListFactory(changedActiveNavigation.items, (item) => (item?.title || '').toLowerCase().includes(normalisedSearchValue)) : [];
114
125
  const changeCollapseItemDeep = (item, isCollapsed) => {
115
126
  if (item.collapsed !== isCollapsed) {
116
127
  return {
@@ -174,7 +185,9 @@ const View = () => {
174
185
  const onPopUpClose = (e) => {
175
186
  e.preventDefault();
176
187
  e.stopPropagation();
177
- changeNavigationItemPopupState(false);
188
+ if (e.target.tagName !== 'HTML') {
189
+ changeNavigationItemPopupState(false);
190
+ }
178
191
  };
179
192
  const handleChangeNavigationSelection = (...args) => {
180
193
  handleChangeSelection(...args);
@@ -197,7 +210,9 @@ const View = () => {
197
210
  tradId: 'header.action.collapseAll',
198
211
  margin: '8px',
199
212
  },
200
- {
213
+ ];
214
+ if (canUpdate) {
215
+ endActions.push({
201
216
  onClick: addNewNavigationItem,
202
217
  startIcon: react_1.default.createElement(Plus_1.default, null),
203
218
  disabled: isLoadingForSubmit,
@@ -205,10 +220,12 @@ const View = () => {
205
220
  variant: "default",
206
221
  tradId: 'header.action.newItem',
207
222
  margin: '16px',
208
- },
209
- ];
223
+ });
224
+ }
210
225
  return (react_1.default.createElement(Main_1.Main, { labelledBy: "title", "aria-busy": isLoadingForSubmit },
211
- react_1.default.createElement(NavigationHeader_1.default, { structureHasErrors: structureHasErrors, structureHasChanged: structureChanged, availableNavigations: availableNavigations, activeNavigation: activeNavigation, handleChangeSelection: handleChangeNavigationSelection, handleSave: handleSave, handleLocalizationSelection: handleLocalizationSelection, config: config }),
226
+ react_1.default.createElement(NavigationHeader_1.default, { structureHasErrors: structureHasErrors, structureHasChanged: structureChanged, availableNavigations: availableNavigations, activeNavigation: activeNavigation, handleChangeSelection: handleChangeNavigationSelection, handleSave: handleSave, handleLocalizationSelection: handleLocalizationSelection, config: config, permissions: {
227
+ canAccess, canUpdate
228
+ } }),
212
229
  react_1.default.createElement(Layout_1.ContentLayout, null,
213
230
  isLoading && react_1.default.createElement(helper_plugin_1.LoadingIndicatorPage, null),
214
231
  changedActiveNavigation && (react_1.default.createElement(react_1.default.Fragment, null,
@@ -221,8 +238,8 @@ const View = () => {
221
238
  react_1.default.createElement(Icon_1.Icon, { as: EmptyDocuments_1.default, width: "160px", height: "88px", color: "" }),
222
239
  react_1.default.createElement(Box_1.Box, { padding: 4 },
223
240
  react_1.default.createElement(Typography_1.Typography, { variant: "beta", textColor: "neutral600" }, formatMessage((0, translations_1.getTrad)('empty')))),
224
- react_1.default.createElement(Button_1.Button, { variant: 'secondary', startIcon: react_1.default.createElement(Plus_1.default, null), label: formatMessage((0, translations_1.getTrad)('empty.cta')), onClick: addNewNavigationItem }, formatMessage((0, translations_1.getTrad)('empty.cta'))),
225
- config.i18nEnabled && availableLocale.length ? (react_1.default.createElement(Flex_1.Flex, { direction: "column", justifyContent: "center" },
241
+ canUpdate && (react_1.default.createElement(Button_1.Button, { variant: 'secondary', startIcon: react_1.default.createElement(Plus_1.default, null), label: formatMessage((0, translations_1.getTrad)('empty.cta')), onClick: addNewNavigationItem }, formatMessage((0, translations_1.getTrad)('empty.cta')))),
242
+ canUpdate && config.i18nEnabled && availableLocale.length ? (react_1.default.createElement(Flex_1.Flex, { direction: "column", justifyContent: "center" },
226
243
  react_1.default.createElement(Box_1.Box, { paddingTop: 3, paddingBottom: 3 },
227
244
  react_1.default.createElement(Typography_1.Typography, { variant: "beta", textColor: "neutral600" }, formatMessage((0, translations_1.getTrad)('view.i18n.fill.cta')))),
228
245
  react_1.default.createElement(Flex_1.Flex, { direction: "row", justifyContent: "center", alignItems: "center" },
@@ -231,9 +248,9 @@ const View = () => {
231
248
  react_1.default.createElement(Box_1.Box, { paddingLeft: 1, paddingRight: 1 },
232
249
  react_1.default.createElement(Button_1.Button, { variant: "tertiary", onClick: openI18nCopyModalOpened, disabled: !i18nCopySourceLocale, size: "S" }, formatMessage((0, translations_1.getTrad)('view.i18n.fill.cta.button'))))))) : null)),
233
250
  !(0, lodash_1.isEmpty)(changedActiveNavigation.items || [])
234
- && react_1.default.createElement(NavigationItemList_1.default, { items: isSearchEmpty ? changedActiveNavigation.items || [] : filteredList, onItemLevelAdd: addNewNavigationItem, onItemRemove: handleItemRemove, onItemEdit: handleItemEdit, onItemRestore: handleItemRestore, onItemReOrder: handleItemReOrder, onItemToggleCollapse: handleItemToggleCollapse, displayFlat: !isSearchEmpty, root: true, error: error, allowedLevels: config.allowedLevels, contentTypes: config.contentTypes, isParentAttachedToMenu: true, contentTypesNameFields: config.contentTypesNameFields })))),
235
- navigationItemPopupOpened && react_1.default.createElement(NavigationItemPopup_1.default, { availableLocale: availableLocale, isLoading: isLoadingForAdditionalDataToBeSet, data: activeNavigationItem, config: config, usedContentTypesData: usedContentTypesData, usedContentTypeItems: usedContentTypeItems, getContentTypeItems: getContentTypeItems, onSubmit: handleSubmitNavigationItem, onClose: onPopUpClose, locale: activeNavigation.localeCode, readNavigationItemFromLocale: readNavigationItemFromLocale, slugify: slugify }),
236
- i18nCopyItemsModal));
251
+ && react_1.default.createElement(NavigationItemList_1.default, { items: isSearchEmpty ? changedActiveNavigation.items || [] : filteredList, onItemLevelAdd: addNewNavigationItem, onItemRemove: handleItemRemove, onItemEdit: handleItemEdit, onItemRestore: handleItemRestore, onItemReOrder: handleItemReOrder, onItemToggleCollapse: handleItemToggleCollapse, displayFlat: !isSearchEmpty, root: true, error: error, allowedLevels: config.allowedLevels, contentTypes: config.contentTypes, isParentAttachedToMenu: true, contentTypesNameFields: config.contentTypesNameFields, permissions: permissions })))),
252
+ navigationItemPopupOpened && react_1.default.createElement(NavigationItemPopup_1.default, { availableLocale: availableLocale, isLoading: isLoadingForAdditionalDataToBeSet, data: activeNavigationItem, config: config, usedContentTypesData: usedContentTypesData, usedContentTypeItems: usedContentTypeItems, getContentTypeItems: getContentTypeItems, onSubmit: handleSubmitNavigationItem, onClose: onPopUpClose, locale: activeNavigation.localeCode, readNavigationItemFromLocale: readNavigationItemFromLocale, slugify: slugify, permissions: permissions }),
253
+ canUpdate && i18nCopyItemsModal));
237
254
  };
238
255
  exports.default = (0, react_1.memo)(View);
239
256
  //# sourceMappingURL=index.js.map
@@ -1,10 +1,14 @@
1
1
  export default pluginPermissions;
2
2
  declare namespace pluginPermissions {
3
- const access: {
3
+ let access: {
4
4
  action: string;
5
5
  subject: null;
6
6
  }[];
7
- const update: {
7
+ let update: {
8
+ action: string;
9
+ subject: null;
10
+ }[];
11
+ let settings: {
8
12
  action: string;
9
13
  subject: null;
10
14
  }[];
@@ -7,6 +7,7 @@ const permissions_1 = __importDefault(require("../../permissions"));
7
7
  const pluginPermissions = {
8
8
  access: [{ action: permissions_1.default.render(permissions_1.default.navigation.read), subject: null }],
9
9
  update: [{ action: permissions_1.default.render(permissions_1.default.navigation.update), subject: null }],
10
+ settings: [{ action: permissions_1.default.render(permissions_1.default.navigation.settings), subject: null }],
10
11
  };
11
12
  exports.default = pluginPermissions;
12
13
  //# sourceMappingURL=permissions.js.map
@@ -0,0 +1,198 @@
1
+ {
2
+ "components.confirmation.dialog.button.cancel": "Cancel·lar",
3
+ "components.confirmation.dialog.button.confirm": "Confirmeu",
4
+ "components.confirmation.dialog.description": "Vols continuar?",
5
+ "components.confirmation.dialog.header": "Confirmació",
6
+ "components.navigationItem.action.newItem": "Afegeix un element fill",
7
+ "components.navigationItem.badge.draft": "Esborrany",
8
+ "components.navigationItem.badge.published": "Publicat",
9
+ "components.navigationItem.badge.removed": "Eliminat",
10
+ "empty": "El teu menú està buit",
11
+ "empty.cta": "Crea el primer element",
12
+ "header.action.collapseAll": "Col·lapsar tot",
13
+ "header.action.expandAll": "Amplia-ho tot",
14
+ "header.action.manage": "Gestionar",
15
+ "header.action.newItem": "Element nou",
16
+ "header.description": "Definiu la vostra navegació del lloc web",
17
+ "header.meta": "ID: { id }, slug: { key }",
18
+ "header.title": "Navegació",
19
+ "notification.error": "S'ha produït un error en processar la sol·licitud.",
20
+ "notification.error.customField.type": "Tipus de camp personalitzat no compatible",
21
+ "notification.error.item.relation": "Les relacions proporcionades en alguns elements són incorrectes",
22
+ "notification.error.item.slug": "No es pot crear la clau (slug) vàlida de l'encaminador de la IU des de \"{ query }\". \"{ result }\" rebut",
23
+ "notification.navigation.error": "Camí duplicat: { path } al pare: { parentTitle } per a { errorTitles } elements",
24
+ "notification.navigation.item.relation": "La relació d'entitat no existeix!",
25
+ "notification.navigation.item.relation.status.draft": "esborrany",
26
+ "notification.navigation.item.relation.status.published": "publicat",
27
+ "notification.navigation.submit": "S'han desat els canvis de navegació",
28
+ "pages.main.header.localization.select.placeholder": "Seleccioneu la configuració regional",
29
+ "pages.main.search.placeholder": "Escriviu per començar a cercar...",
30
+ "pages.settings.actions.disableI18n.confirmation.confirm": "entenc",
31
+ "pages.settings.actions.disableI18n.confirmation.description.line1": "Esteu desactivant la internacionalització per a la navegació. Les navegacions per a configuracions regionals diferents de les predeterminades no estan disponibles per a la visualització i modificacions mitjançant aquesta extensió.",
32
+ "pages.settings.actions.disableI18n.confirmation.description.line2": "Podeu optar per eliminar les navegacions per a altres configuracions regionals.",
33
+ "pages.settings.actions.disableI18n.confirmation.description.line3": "Recordeu! L'eliminació és irreversible",
34
+ "pages.settings.actions.disableI18n.confirmation.header": "Desactivació de la internacionalització",
35
+ "pages.settings.actions.disableI18n.prune.label": "Navegacions obsoletes",
36
+ "pages.settings.actions.disableI18n.prune.off": "Mantenir",
37
+ "pages.settings.actions.disableI18n.prune.on": "Eliminar",
38
+ "pages.settings.actions.restart": "Reinicieu Strapi",
39
+ "pages.settings.actions.restart.alert.cancel": "Cancel·lar",
40
+ "pages.settings.actions.restart.alert.close": "Descartar",
41
+ "pages.settings.actions.restart.alert.description": "Heu fet un canvi de configuració que requereix que la vostra aplicació Strapi es reiniciï perquè tingui efecte. Fes-ho manualment o utilitzant el botó següent.",
42
+ "pages.settings.actions.restart.alert.reason.GRAPH_QL": "S'aplicaran els canvis de GraphQL.",
43
+ "pages.settings.actions.restart.alert.reason.I18N": "S'aplicaran els canvis d'internacionalització (i18n).",
44
+ "pages.settings.actions.restart.alert.reason.I18N_NAVIGATIONS_PRUNE": "Les navegacions locals obsoletes s'eliminaran.",
45
+ "pages.settings.actions.restart.alert.title": "Strapi requereix reinici",
46
+ "pages.settings.actions.restore": "Restaura la configuració",
47
+ "pages.settings.actions.restore.confirmation.confirm": "Restaurar",
48
+ "pages.settings.actions.restore.confirmation.description": "La configuració de l'extensió es restaurarà des del fitxer plugins.js.",
49
+ "pages.settings.actions.restore.confirmation.header": "Vols continuar?",
50
+ "pages.settings.actions.restore.description": "La restauració de la configuració de l'extensió farà que es substitueixi per la configuració desada dins del fitxer \"plugins.js\".",
51
+ "pages.settings.actions.submit": "Desa la configuració",
52
+ "pages.settings.additional.title": "Configuracions addicionals",
53
+ "pages.settings.customFields.title": "Configuració de camps personalitzats",
54
+ "pages.settings.form.allowedLevels.hint": "Nivell màxim per al qual podeu marcar l'element com a \"Menú adjunt\"",
55
+ "pages.settings.form.allowedLevels.label": "Nivells permesos",
56
+ "pages.settings.form.allowedLevels.placeholder": "per exemple. 2",
57
+ "pages.settings.form.audience.hint": "Activa el camp de públic",
58
+ "pages.settings.form.audience.label": "Públic",
59
+ "pages.settings.form.contentTypes.hint": "Si no se selecciona cap, tampoc no s'habilitarà cap dels tipus de contingut",
60
+ "pages.settings.form.contentTypes.label": "Habilita la navegació per",
61
+ "pages.settings.form.contentTypes.placeholder": "per exemple. Pàgines, publicacions",
62
+ "pages.settings.form.contentTypesSettings.initializationWarning.content": "- El tipus de contingut encara no s'ha inicialitzat. Inicialitzeu-lo primer per poder utilitzar-lo en un editor visual.",
63
+ "pages.settings.form.contentTypesSettings.initializationWarning.title": "Avís",
64
+ "pages.settings.form.contentTypesSettings.label": "Tipus de contingut",
65
+ "pages.settings.form.contentTypesSettings.tooltip": "Configuració personalitzada per tipus de contingut",
66
+ "pages.settings.form.customFields.popup.header.edit": "Edita el camp personalitzat",
67
+ "pages.settings.form.customFields.popup.header.new": "Afegeix un camp personalitzat nou",
68
+ "pages.settings.form.customFields.popup.label.description": "Aquesta etiqueta es mostrarà al formulari d'elements de navegació",
69
+ "pages.settings.form.customFields.popup.label.label": "Etiqueta de camp personalitzada",
70
+ "pages.settings.form.customFields.popup.label.placeholder": "Exemple d'etiqueta",
71
+ "pages.settings.form.customFields.popup.multi.label": "Activa l'entrada d'opcions múltiples",
72
+ "pages.settings.form.customFields.popup.name.description": "El nom del camp personalitzat ha de ser únic",
73
+ "pages.settings.form.customFields.popup.name.label": "Nom del camp personalitzat",
74
+ "pages.settings.form.customFields.popup.name.placeholder": "nom_exemple",
75
+ "pages.settings.form.customFields.popup.options.description": "Activar aquest camp no canviarà els elements de navegació que ja estan sortint",
76
+ "pages.settings.form.customFields.popup.options.label": "Opcions per seleccionar l'entrada",
77
+ "pages.settings.form.customFields.popup.required.description": "Activar aquest camp no canviarà els elements de navegació que ja estan sortint",
78
+ "pages.settings.form.customFields.popup.required.label": "Camp obligatori",
79
+ "pages.settings.form.customFields.popup.type.label": "Tipus de camp personalitzat",
80
+ "pages.settings.form.customFields.table.confirmation.confirm": "Continua",
81
+ "pages.settings.form.customFields.table.confirmation.error": "S'ha produït un error en eliminar el camp personalitzat",
82
+ "pages.settings.form.customFields.table.confirmation.header": "S'està eliminant el camp personalitzat",
83
+ "pages.settings.form.customFields.table.confirmation.message": "Aquesta acció farà que s'eliminin tots els valors dels camps personalitzats dels elements de navegació.",
84
+ "pages.settings.form.customFields.table.disable": "Desactiva el camp personalitzat",
85
+ "pages.settings.form.customFields.table.edit": "Edita el camp personalitzat",
86
+ "pages.settings.form.customFields.table.enable": "Activa el camp personalitzat",
87
+ "pages.settings.form.customFields.table.footer": "Crea un camp personalitzat nou",
88
+ "pages.settings.form.customFields.table.header.label": "Etiqueta",
89
+ "pages.settings.form.customFields.table.header.name": "Nom",
90
+ "pages.settings.form.customFields.table.header.required": "Obligatori",
91
+ "pages.settings.form.customFields.table.header.type": "Tipus",
92
+ "pages.settings.form.customFields.table.notRequired": "no obligatori",
93
+ "pages.settings.form.customFields.table.remove": "Elimina el camp personalitzat",
94
+ "pages.settings.form.customFields.table.required": "obligatori",
95
+ "pages.settings.form.i18n.hint": "Habilitar la internacionalització",
96
+ "pages.settings.form.i18n.hint.missingDefaultLocale": "Falta la configuració regional predeterminada!",
97
+ "pages.settings.form.i18n.label": "i18n",
98
+ "pages.settings.form.nameField.empty": "Aquest tipus de contingut no té cap atribut de text",
99
+ "pages.settings.form.nameField.hint": "Si es deixa el camp de nom buit, prendrà els següents camps ordenats: \"títol\", \"assumpte\" i \"nom\"",
100
+ "pages.settings.form.nameField.label": "Camps de nom",
101
+ "pages.settings.form.nameField.placeholder": "Seleccioneu almenys un o deixeu-lo buit per aplicar els valors predeterminats",
102
+ "pages.settings.form.pathDefaultFields.empty": "Aquest tipus de contingut no té cap atribut adequat",
103
+ "pages.settings.form.pathDefaultFields.hint": "El valor de l'atribut seleccionat serà un valor predeterminat per al camí intern",
104
+ "pages.settings.form.pathDefaultFields.label": "Camps predeterminats del camí",
105
+ "pages.settings.form.pathDefaultFields.placeholder": "Seleccioneu-ne com a mínim un o deixeu-lo buit per desactivar l'emplenat del camp del camí amb el valor dels atributs",
106
+ "pages.settings.form.populate.empty": "Aquest tipus de contingut no té cap camp de relació",
107
+ "pages.settings.form.populate.hint": "Els camps de relació seleccionats s'emplenaran dins de les respostes de l'API",
108
+ "pages.settings.form.populate.label": "Camps a omplir",
109
+ "pages.settings.form.populate.placeholder": "Seleccioneu-ne com a mínim un o deixeu-lo buit per desactivar l'ompliment dels camps de relació",
110
+ "pages.settings.general.title": "Configuració general",
111
+ "pages.settings.header.description": "Configura el connector de navegació",
112
+ "pages.settings.header.title": "Navegació",
113
+ "pages.settings.nameField.title": "Configuració dels tipus de contingut",
114
+ "pages.settings.notification.fetch.error": "No s'ha pogut obtenir la configuració. S'està tornant a provar...",
115
+ "pages.settings.notification.restart.error": "No s'ha pogut reiniciar l'aplicació. Intenta fer-ho manualment.",
116
+ "pages.settings.notification.restart.success": "L'aplicació s'ha reiniciat correctament",
117
+ "pages.settings.notification.restore.error": "La restauració de la configuració ha fallat",
118
+ "pages.settings.notification.restore.success": "La configuració s'ha restaurat correctament",
119
+ "pages.settings.notification.submit.error": "L'actualització de la configuració ha fallat",
120
+ "pages.settings.notification.submit.success": "La configuració s'ha actualitzat correctament",
121
+ "pages.settings.restoring.title": "Restauració",
122
+ "pages.settings.section.subtitle": "Configuració",
123
+ "pages.settings.section.title": "Extensió de navegació",
124
+ "pages.view.actions.i18nCopyItems.confirmation.confirm": "Còpia",
125
+ "pages.view.actions.i18nCopyItems.confirmation.content": "Voleu copiar els elements de navegació?",
126
+ "pages.view.actions.i18nCopyItems.confirmation.header": "Confirmació",
127
+ "plugin.name": "Navegació",
128
+ "popup.item.form.audience.empty": "No hi ha més públic",
129
+ "popup.item.form.audience.label": "Públic",
130
+ "popup.item.form.audience.placeholder": "Selecciona el públic...",
131
+ "popup.item.form.button.cancel": "Cancel·lar",
132
+ "popup.item.form.button.create": "Crea un element",
133
+ "popup.item.form.button.remove": "Eliminar",
134
+ "popup.item.form.button.restore": "Restaura l'element",
135
+ "popup.item.form.button.save": "Desa",
136
+ "popup.item.form.button.update": "Actualitza l'element",
137
+ "popup.item.form.externalPath.label": "URL externa",
138
+ "popup.item.form.externalPath.placeholder": "Enllaç a la pàgina externa",
139
+ "popup.item.form.externalPath.validation.type": "Aquest valor no és una URL adequada.",
140
+ "popup.item.form.i18n.locale.button": "Còpia",
141
+ "popup.item.form.i18n.locale.error.generic": "No es pot copiar l'element",
142
+ "popup.item.form.i18n.locale.error.unavailable": "La versió local no està disponible",
143
+ "popup.item.form.i18n.locale.label": "Copia els detalls de",
144
+ "popup.item.form.i18n.locale.placeholder": "local",
145
+ "popup.item.form.menuAttached.label": "Adjuntar al menú",
146
+ "popup.item.form.path.label": "URL",
147
+ "popup.item.form.path.placeholder": "La part d'URL única identifica aquest element",
148
+ "popup.item.form.path.preview": "Vista prèvia:",
149
+ "popup.item.form.related.empty": "No hi ha més entitats de \"{ contentTypeName }\" per seleccionar",
150
+ "popup.item.form.related.label": "Entitat",
151
+ "popup.item.form.relatedSection.label": "Relació amb",
152
+ "popup.item.form.relatedType.empty": "No hi ha tipus de contingut per seleccionar",
153
+ "popup.item.form.relatedType.label": "Tipus de contingut",
154
+ "popup.item.form.relatedType.placeholder": "Selecciona el tipus de contingut...",
155
+ "popup.item.form.title.label": "Títol",
156
+ "popup.item.form.title.placeholder": "Introduïu el títol de l'element o deixeu-lo en blanc per extreure'l de l'entitat relacionada",
157
+ "popup.item.form.type.external.description": "Camí de sortida: {valor}",
158
+ "popup.item.form.type.external.label": "Pàgina externa",
159
+ "popup.item.form.type.internal.label": "Contingut intern",
160
+ "popup.item.form.type.label": "Tipus d'element de navegació",
161
+ "popup.item.form.type.wrapper.label": "Contenidor",
162
+ "popup.item.form.uiRouterKey.label": "Clau de l'encaminador de la interfície d'usuari",
163
+ "popup.item.form.uiRouterKey.placeholder": "Si està buit, generat automàticament per \"Títol\"",
164
+ "popup.item.header.edit": "Edita l'element de navegació",
165
+ "popup.item.header.new": "Nou element de navegació",
166
+ "popup.navigation.form.name.label": "Nom",
167
+ "popup.navigation.form.name.placeholder": "Nom del menú",
168
+ "popup.navigation.form.validation.name.alreadyUsed": "El nom ja s'utilitza",
169
+ "popup.navigation.form.validation.name.required": "El nom és obligatori",
170
+ "popup.navigation.form.validation.name.tooShort": "El nom és massa curt",
171
+ "popup.navigation.form.validation.visible.required": "Es requereix visibilitat",
172
+ "popup.navigation.form.visible.label": "Visibilitat",
173
+ "popup.navigation.manage.button.cancel": "Cancel·lar",
174
+ "popup.navigation.manage.button.create": "Crear",
175
+ "popup.navigation.manage.button.delete": "Suprimeix",
176
+ "popup.navigation.manage.button.edit": "Edita",
177
+ "popup.navigation.manage.button.goBack": "Torna",
178
+ "popup.navigation.manage.button.save": "Desa",
179
+ "popup.navigation.manage.delete.header": "S'eliminaran els menús següents:",
180
+ "popup.navigation.manage.error.message": "Ha passat un error :(",
181
+ "popup.navigation.manage.header.CREATE": "Nou menú",
182
+ "popup.navigation.manage.header.DELETE": "S'està suprimint",
183
+ "popup.navigation.manage.header.EDIT": "S'està editant \"{name}\"",
184
+ "popup.navigation.manage.header.ERROR": "Error",
185
+ "popup.navigation.manage.header.LIST": "Tots els menús",
186
+ "popup.navigation.manage.navigation.hidden": "amagat",
187
+ "popup.navigation.manage.navigation.visible": "visible",
188
+ "popup.navigation.manage.table.hasSelected": "{count} entrades seleccionades",
189
+ "popup.navigation.manage.table.id": "Id",
190
+ "popup.navigation.manage.table.locale": "Versions locals",
191
+ "popup.navigation.manage.table.name": "Nom",
192
+ "popup.navigation.manage.table.visibility": "Visibilitat",
193
+ "submit.cta.cancel": "Cancel·lar",
194
+ "submit.cta.save": "Desa",
195
+ "view.i18n.fill.cta": "o copia de",
196
+ "view.i18n.fill.cta.button": "còpia",
197
+ "view.i18n.fill.option": "{locale} local"
198
+ }
@@ -2,6 +2,7 @@
2
2
  "plugin.name": "UI Navigation",
3
3
  "header.title": "Navigation",
4
4
  "header.description": "Define your portal navigation",
5
+ "header.meta": "ID: { id }, slug: { key }",
5
6
  "header.action.newItem": "New Item",
6
7
  "header.action.manage": "Manage",
7
8
  "header.action.collapseAll": "Collapse All",
@@ -10,6 +11,7 @@
10
11
  "submit.cta.save": "Save",
11
12
  "empty": "Your navigation is empty",
12
13
  "empty.cta": "Create first item",
14
+ "popup.item.header.view": "View navigation item",
13
15
  "popup.item.header.edit": "Edit navigation item",
14
16
  "popup.item.header.new": "New navigation item",
15
17
  "popup.item.form.title.label": "Title",
@@ -76,13 +78,16 @@
76
78
  "popup.navigation.manage.navigation.visible": "visible",
77
79
  "popup.navigation.manage.navigation.hidden": "hidden",
78
80
  "notification.navigation.submit": "Navigation changes has been saved",
79
- "notification.navigation.error": "Duplicate path: { path } in parent: { parentTitle } for { errorTitles } items",
81
+ "notification.navigation.error": "Duplicate path: \"{ path }\" in parent: \"{ parentTitle }\" for { errorTitles } items",
80
82
  "notification.navigation.item.relation": "Entity relation does not exist!",
81
83
  "notification.navigation.item.relation.status.draft": "draft",
82
84
  "notification.navigation.item.relation.status.published": "published",
83
85
  "notification.error": "Error while processing request.",
84
86
  "notification.error.customField.type": "Unsupported type of custom field",
85
87
  "notification.error.item.relation": "Relations provided in some items are incorrect",
88
+ "notification.error.item.slug": "Unable to create valid UI Router Key(slug) from \"{ query }\". \"{ result }\" received",
89
+ "page.auth.noAccess": "No access",
90
+ "page.auth.not.allowed": "Oops! It seems like You do not have access to this page...",
86
91
  "pages.main.search.placeholder": "Type to start searching...",
87
92
  "pages.main.header.localization.select.placeholder": "Select locale",
88
93
  "pages.settings.general.title": "General settings",
@@ -185,6 +190,10 @@
185
190
  "pages.settings.form.customFields.popup.options.description": "Enabling this field will not change already exiting navigation items",
186
191
  "pages.settings.form.customFields.popup.multi.label": "Enable multiple options input",
187
192
  "components.navigationItem.action.newItem": "Add nested item",
193
+ "components.navigationItem.action.edit": "Edit",
194
+ "components.navigationItem.action.view": "View",
195
+ "components.navigationItem.action.restore": "Restore",
196
+ "components.navigationItem.action.remove": "Remove",
188
197
  "components.navigationItem.badge.removed": "Removed",
189
198
  "components.navigationItem.badge.draft": "Draft",
190
199
  "components.navigationItem.badge.published": "Published",
@@ -192,6 +201,7 @@
192
201
  "components.confirmation.dialog.button.confirm": "Confirm",
193
202
  "components.confirmation.dialog.description": "Do you want to continue?",
194
203
  "components.confirmation.dialog.header": "Confirmation",
204
+ "components.notAccessPage.back": "Back to homepage",
195
205
  "view.i18n.fill.cta": "or bootstrap",
196
206
  "view.i18n.fill.option": "{locale} locale",
197
207
  "view.i18n.fill.cta.button": "copy"
@@ -2,6 +2,7 @@
2
2
  "plugin.name": "UI Navigation",
3
3
  "header.title": "Navigation",
4
4
  "header.description": "Définisser votre menu de navigation",
5
+ "header.meta": "ID: { id }, slug: { key }",
5
6
  "submit.cta.cancel": "Annuler",
6
7
  "submit.cta.save": "Sauvegarder",
7
8
  "empty": "Le menu de navigation est vide",
@@ -41,5 +42,6 @@
41
42
  "components.navigationItem.action.newItem": "Nouvel élément imbriqué",
42
43
  "components.navigationItem.badge.removed": "Supprimé",
43
44
  "components.navigationItem.badge.draft": "Brouillon",
44
- "components.navigationItem.badge.published": "Publié"
45
+ "components.navigationItem.badge.published": "Publié",
46
+ "notification.error.item.slug": "Impossible de créer une clé de routeur d'interface utilisateur valide (slug) à partir de \"{ query }\". \"{ result }\" reçu"
45
47
  }
@@ -7,7 +7,9 @@ export default trads;
7
7
  declare namespace trads {
8
8
  export { en };
9
9
  export { fr };
10
+ export { ca };
10
11
  }
11
12
  import en from "./en.json";
12
13
  import fr from "./fr.json";
14
+ import ca from "./ca.json";
13
15
  //# sourceMappingURL=index.d.ts.map