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.
- package/README.md +128 -31
- package/admin/src/components/AdditionalFieldInput/index.js +2 -2
- package/admin/src/components/AdditionalFieldInput/types.d.ts +4 -3
- package/admin/src/components/ConfirmationDialog/index.d.ts +10 -10
- package/admin/src/components/EmptyView/index.js +2 -0
- package/admin/src/components/Item/ItemCardHeader/icons.d.ts +1 -1
- package/admin/src/components/Item/ItemCardHeader/icons.js +2 -1
- package/admin/src/components/Item/ItemCardHeader/index.d.ts +1 -0
- package/admin/src/components/Item/ItemCardHeader/index.js +10 -8
- package/admin/src/components/Item/index.d.ts +15 -15
- package/admin/src/components/Item/index.js +10 -8
- package/admin/src/components/NavigationItemList/index.d.ts +13 -12
- package/admin/src/components/NavigationItemList/index.js +2 -2
- package/admin/src/hooks/useNavigationManager.d.ts +0 -1
- package/admin/src/index.d.ts +5 -7
- package/admin/src/index.js +12 -18
- package/admin/src/pages/DataManagerProvider/index.d.ts +1 -1
- package/admin/src/pages/DataManagerProvider/index.js +32 -5
- package/admin/src/pages/DataManagerProvider/reducer.d.ts +16 -16
- package/admin/src/pages/NoAccessPage/index.d.ts +3 -0
- package/admin/src/pages/NoAccessPage/index.js +31 -0
- package/admin/src/pages/SettingsPage/index.d.ts +0 -1
- package/admin/src/pages/SettingsPage/index.js +9 -0
- package/admin/src/pages/SettingsPage/types.d.ts +8 -8
- package/admin/src/pages/SettingsPage/utils/functions.d.ts +0 -2
- package/admin/src/pages/View/components/NavigationHeader/index.d.ts +2 -1
- package/admin/src/pages/View/components/NavigationHeader/index.js +19 -9
- package/admin/src/pages/View/components/NavigationItemForm/index.js +25 -19
- package/admin/src/pages/View/components/NavigationItemForm/types.d.ts +10 -9
- package/admin/src/pages/View/components/NavigationItemForm/utils/form.d.ts +6 -6
- package/admin/src/pages/View/components/NavigationItemPopup/NavigationItemPopupFooter.d.ts +12 -10
- package/admin/src/pages/View/components/NavigationItemPopup/NavigationItemPopupFooter.js +5 -1
- package/admin/src/pages/View/components/NavigationItemPopup/NavigationItemPopupHeader.d.ts +2 -1
- package/admin/src/pages/View/components/NavigationItemPopup/NavigationItemPopupHeader.js +6 -2
- package/admin/src/pages/View/components/NavigationItemPopup/index.d.ts +13 -12
- package/admin/src/pages/View/components/NavigationItemPopup/index.js +4 -3
- package/admin/src/pages/View/components/NavigationManager/AllNavigations/icons.d.ts +0 -1
- package/admin/src/pages/View/components/NavigationManager/AllNavigations/index.d.ts +0 -1
- package/admin/src/pages/View/components/NavigationManager/DeletionConfirm/index.d.ts +0 -1
- package/admin/src/pages/View/components/NavigationManager/ErrorDetails/index.d.ts +0 -1
- package/admin/src/pages/View/components/NavigationManager/Footer/index.d.ts +1 -1
- package/admin/src/pages/View/components/NavigationManager/Form/index.d.ts +0 -1
- package/admin/src/pages/View/components/NavigationManager/NavigationUpdate/index.d.ts +0 -1
- package/admin/src/pages/View/components/NavigationManager/NewNavigation/index.d.ts +0 -1
- package/admin/src/pages/View/components/NavigationManager/index.d.ts +0 -1
- package/admin/src/pages/View/components/NavigationManager/types.d.ts +3 -3
- package/admin/src/pages/View/index.d.ts +1 -1
- package/admin/src/pages/View/index.js +42 -25
- package/admin/src/permissions.d.ts +6 -2
- package/admin/src/permissions.js +1 -0
- package/admin/src/translations/ca.json +198 -0
- package/admin/src/translations/en.json +11 -1
- package/admin/src/translations/fr.json +3 -1
- package/admin/src/translations/index.d.ts +2 -0
- package/admin/src/translations/index.js +2 -0
- package/admin/src/utils/functions.d.ts +2 -2
- package/package.json +16 -14
- package/permissions.d.ts +1 -0
- package/permissions.js +1 -0
- package/server/bootstrap/index.js +6 -0
- package/server/config/setupStrategy.js +11 -0
- package/server/controllers/client.js +15 -0
- package/server/i18n/graphQLEnhancers.d.ts +1 -1
- package/server/i18n/navigationSetupStrategy.js +68 -40
- package/server/i18n/types.d.ts +11 -11
- package/server/i18n/utils.d.ts +2 -2
- package/server/routes/admin.js +99 -2
- package/server/routes/client.js +8 -0
- package/server/services/admin.js +114 -57
- package/server/services/client.js +17 -1
- package/server/services/common.js +31 -16
- package/server/utils/functions.d.ts +3 -1
- package/server/utils/functions.js +31 -2
- package/tsconfig.tsbuildinfo +1 -1
- package/types/config.d.ts +8 -8
- package/types/contentTypes.d.ts +20 -20
- package/types/controllers.d.ts +3 -2
- package/types/graphQL.d.ts +1 -1
- package/types/i18n.d.ts +2 -2
- package/types/services.d.ts +7 -3
- 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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
|
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,8 +1,8 @@
|
|
|
1
1
|
import { Dispatch, SetStateAction } from "react";
|
|
2
2
|
import { Navigation as FullNavigationEntity } from "../../../../../../types";
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export
|
|
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
|
}
|
|
@@ -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)(() =>
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
3
|
+
let access: {
|
|
4
4
|
action: string;
|
|
5
5
|
subject: null;
|
|
6
6
|
}[];
|
|
7
|
-
|
|
7
|
+
let update: {
|
|
8
|
+
action: string;
|
|
9
|
+
subject: null;
|
|
10
|
+
}[];
|
|
11
|
+
let settings: {
|
|
8
12
|
action: string;
|
|
9
13
|
subject: null;
|
|
10
14
|
}[];
|
package/admin/src/permissions.js
CHANGED
|
@@ -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
|
}
|