strapi-plugin-navigation 2.1.0 → 2.2.0
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 +17 -7
- package/admin/src/components/AdditionalFieldInput/index.d.ts +5 -0
- package/admin/src/components/AdditionalFieldInput/index.js +71 -0
- package/admin/src/components/AdditionalFieldInput/types.d.ts +14 -0
- package/admin/src/components/AdditionalFieldInput/types.js +3 -0
- package/admin/src/components/Item/index.js +2 -3
- package/admin/src/components/RestartAlert/index.d.ts +1 -1
- package/admin/src/components/TextArrayInput/index.d.ts +14 -0
- package/admin/src/components/TextArrayInput/index.js +45 -0
- package/admin/src/hooks/useAllContentTypes.d.ts +1 -4
- package/admin/src/hooks/useAllContentTypes.js +3 -7
- package/admin/src/hooks/useNavigationConfig.d.ts +1 -1
- package/admin/src/hooks/useNavigationConfig.js +6 -6
- package/admin/src/pages/DataManagerProvider/index.d.ts +1 -1
- package/admin/src/pages/DataManagerProvider/index.js +9 -11
- package/admin/src/pages/SettingsPage/components/CustomFieldForm/index.d.ts +12 -0
- package/admin/src/pages/SettingsPage/components/CustomFieldForm/index.js +112 -0
- package/admin/src/pages/SettingsPage/components/CustomFieldModal/index.d.ts +12 -0
- package/admin/src/pages/SettingsPage/components/CustomFieldModal/index.js +20 -0
- package/admin/src/pages/SettingsPage/components/CustomFieldTable/index.d.ts +11 -0
- package/admin/src/pages/SettingsPage/components/CustomFieldTable/index.js +105 -0
- package/admin/src/pages/SettingsPage/index.d.ts +2 -1
- package/admin/src/pages/SettingsPage/index.js +109 -74
- package/admin/src/pages/SettingsPage/types.d.ts +32 -0
- package/admin/src/pages/SettingsPage/types.js +3 -0
- package/admin/src/pages/SettingsPage/utils/form.d.ts +18 -0
- package/admin/src/pages/SettingsPage/utils/form.js +34 -0
- package/admin/src/pages/SettingsPage/utils/functions.d.ts +2 -2
- package/admin/src/pages/SettingsPage/utils/functions.js +1 -1
- package/admin/src/pages/View/components/NavigationItemForm/index.d.ts +3 -55
- package/admin/src/pages/View/components/NavigationItemForm/index.js +162 -177
- package/admin/src/pages/View/components/NavigationItemForm/types.d.ts +90 -0
- package/admin/src/pages/View/components/NavigationItemForm/types.js +3 -0
- package/admin/src/pages/View/components/NavigationItemForm/utils/form.d.ts +24 -43
- package/admin/src/pages/View/components/NavigationItemForm/utils/form.js +78 -45
- package/admin/src/pages/View/components/NavigationItemPopup/index.js +1 -2
- package/admin/src/pages/View/components/NavigationManager/AllNavigations/icons.d.ts +4 -0
- package/admin/src/pages/View/components/NavigationManager/AllNavigations/icons.js +11 -0
- package/admin/src/pages/View/components/NavigationManager/AllNavigations/index.d.ts +9 -0
- package/admin/src/pages/View/components/NavigationManager/{List → AllNavigations}/index.js +32 -31
- package/admin/src/pages/View/components/NavigationManager/DeletionConfirm/index.d.ts +9 -0
- package/admin/src/pages/View/components/NavigationManager/{Delete → DeletionConfirm}/index.js +18 -12
- package/admin/src/pages/View/components/NavigationManager/ErrorDetails/index.d.ts +9 -0
- package/admin/src/pages/View/components/NavigationManager/{Error → ErrorDetails}/index.js +10 -10
- package/admin/src/pages/View/components/NavigationManager/Footer/index.d.ts +24 -0
- package/admin/src/pages/View/components/NavigationManager/Footer/index.js +13 -0
- package/admin/src/pages/View/components/NavigationManager/Form/index.d.ts +3 -2
- package/admin/src/pages/View/components/NavigationManager/Form/index.js +7 -2
- package/admin/src/pages/View/components/NavigationManager/NavigationUpdate/index.d.ts +9 -0
- package/admin/src/pages/View/components/NavigationManager/{Edit → NavigationUpdate}/index.js +16 -11
- package/admin/src/pages/View/components/NavigationManager/NewNavigation/index.d.ts +10 -0
- package/admin/src/pages/View/components/NavigationManager/{Create → NewNavigation}/index.js +16 -11
- package/admin/src/pages/View/components/NavigationManager/index.d.ts +3 -2
- package/admin/src/pages/View/components/NavigationManager/index.js +22 -21
- package/admin/src/pages/View/components/NavigationManager/types.d.ts +2 -15
- package/admin/src/pages/View/index.d.ts +1 -1
- package/admin/src/pages/View/index.js +1 -1
- package/admin/src/pages/View/utils/parsers.d.ts +1 -0
- package/admin/src/pages/View/utils/parsers.js +8 -7
- package/admin/src/translations/en.json +37 -0
- package/admin/src/translations/index.d.ts +2 -1
- package/admin/src/translations/index.js +1 -1
- package/admin/src/utils/api.d.ts +8 -7
- package/admin/src/utils/api.js +6 -41
- package/admin/src/utils/enums.d.ts +25 -0
- package/admin/src/utils/enums.js +30 -0
- package/admin/src/utils/functions.d.ts +16 -0
- package/admin/src/utils/functions.js +46 -0
- package/admin/src/utils/index.d.ts +3 -17
- package/admin/src/utils/index.js +16 -39
- package/package.json +5 -5
- package/server/config/index.js +6 -4
- package/server/config/setupStrategy.js +13 -1
- package/server/content-types/index.d.ts +5 -25
- package/server/content-types/navigation/index.d.ts +0 -7
- package/server/content-types/navigation/index.js +0 -2
- package/server/content-types/navigation-item/index.d.ts +5 -13
- package/server/content-types/navigation-item/index.js +0 -2
- package/server/content-types/navigation-item/schema.d.ts +5 -0
- package/server/content-types/navigation-item/schema.js +5 -0
- package/server/content-types/navigations-items-related/index.d.ts +0 -5
- package/server/content-types/navigations-items-related/index.js +0 -2
- package/server/controllers/admin.js +1 -1
- package/server/controllers/client.js +2 -1
- package/server/graphql/types/navigation-item.d.ts +2 -1
- package/server/graphql/types/navigation-item.js +26 -2
- package/server/index.d.ts +5 -25
- package/server/services/admin.js +26 -14
- package/server/services/client.js +64 -21
- package/server/services/common.js +25 -6
- package/server/utils/constant.d.ts +0 -3
- package/server/utils/constant.js +1 -2
- package/server/utils/functions.d.ts +12 -12
- package/server/utils/functions.js +60 -22
- package/strapi-server.d.ts +5 -25
- package/tsconfig.tsbuildinfo +1 -1
- package/types/config.d.ts +6 -2
- package/types/contentTypes.d.ts +22 -1
- package/types/services.d.ts +14 -5
- package/types/utils.d.ts +6 -1
- package/types/utils.js +15 -1
- package/admin/src/pages/View/components/NavigationManager/Create/index.d.ts +0 -9
- package/admin/src/pages/View/components/NavigationManager/Delete/index.d.ts +0 -8
- package/admin/src/pages/View/components/NavigationManager/Edit/index.d.ts +0 -8
- package/admin/src/pages/View/components/NavigationManager/Error/index.d.ts +0 -8
- package/admin/src/pages/View/components/NavigationManager/List/index.d.ts +0 -8
- package/admin/src/pages/View/utils/enums.d.ts +0 -9
- package/admin/src/pages/View/utils/enums.js +0 -12
- package/admin/src/utils/getTrad.d.ts +0 -3
- package/admin/src/utils/getTrad.js +0 -9
- package/server/content-types/navigation/lifecycle.d.ts +0 -9
- package/server/content-types/navigation/lifecycle.js +0 -10
- package/server/content-types/navigation-item/lifecycle.d.ts +0 -16
- package/server/content-types/navigation-item/lifecycle.js +0 -31
- package/server/content-types/navigations-items-related/lifecycle.d.ts +0 -8
- package/server/content-types/navigations-items-related/lifecycle.js +0 -22
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
const lodash_1 = require("lodash");
|
|
30
|
+
const react_1 = __importStar(require("react"));
|
|
31
|
+
const helper_plugin_1 = require("@strapi/helper-plugin");
|
|
32
|
+
const VisuallyHidden_1 = require("@strapi/design-system/VisuallyHidden");
|
|
33
|
+
const Table_1 = require("@strapi/design-system/Table");
|
|
34
|
+
const icons_1 = require("@strapi/icons");
|
|
35
|
+
const Typography_1 = require("@strapi/design-system/Typography");
|
|
36
|
+
const Tooltip_1 = require("@strapi/design-system/Tooltip");
|
|
37
|
+
const Stack_1 = require("@strapi/design-system/Stack");
|
|
38
|
+
const IconButton_1 = require("@strapi/design-system/IconButton");
|
|
39
|
+
const utils_1 = require("../../../../utils");
|
|
40
|
+
const ConfirmationDialog_1 = __importDefault(require("../../../../components/ConfirmationDialog"));
|
|
41
|
+
const translations_1 = require("../../../../translations");
|
|
42
|
+
const refreshIcon = react_1.default.createElement(icons_1.Refresh, null);
|
|
43
|
+
const plusIcon = react_1.default.createElement(icons_1.Plus, null);
|
|
44
|
+
const tradPrefix = "pages.settings.form.customFields.table.";
|
|
45
|
+
const CustomFieldTable = ({ data, onOpenModal, onRemoveCustomField, onToggleCustomField, }) => {
|
|
46
|
+
const [confirmationVisible, setIsConfirmationVisible] = (0, react_1.useState)(false);
|
|
47
|
+
const [fieldToRemove, setFieldToRemove] = (0, react_1.useState)(null);
|
|
48
|
+
const toggleNotification = (0, helper_plugin_1.useNotification)();
|
|
49
|
+
const customFields = (0, react_1.useMemo)(() => (0, lodash_1.sortBy)(data, "name"), [data]);
|
|
50
|
+
const handleRemove = (0, react_1.useCallback)((field) => {
|
|
51
|
+
setFieldToRemove(field);
|
|
52
|
+
setIsConfirmationVisible(true);
|
|
53
|
+
}, [setFieldToRemove, setIsConfirmationVisible]);
|
|
54
|
+
const cleanup = (0, react_1.useCallback)(() => {
|
|
55
|
+
setFieldToRemove(null);
|
|
56
|
+
setIsConfirmationVisible(false);
|
|
57
|
+
}, [setFieldToRemove, setIsConfirmationVisible]);
|
|
58
|
+
const handleConfirm = (0, react_1.useCallback)(() => {
|
|
59
|
+
if (fieldToRemove === null) {
|
|
60
|
+
toggleNotification({
|
|
61
|
+
type: 'warning',
|
|
62
|
+
message: {
|
|
63
|
+
id: (0, translations_1.getTradId)(`${tradPrefix}confirmation.error`),
|
|
64
|
+
default: 'Something went wrong',
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
onRemoveCustomField(fieldToRemove);
|
|
70
|
+
}
|
|
71
|
+
cleanup();
|
|
72
|
+
}, [cleanup, fieldToRemove, translations_1.getTradId, onRemoveCustomField, toggleNotification]);
|
|
73
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
74
|
+
react_1.default.createElement(ConfirmationDialog_1.default, { isVisible: confirmationVisible, header: (0, utils_1.getMessage)(`${tradPrefix}confirmation.header`), children: (0, utils_1.getMessage)(`${tradPrefix}confirmation.message`), labelConfirm: (0, utils_1.getMessage)(`${tradPrefix}confirmation.confirm`), iconConfirm: refreshIcon, mainIcon: refreshIcon, onConfirm: handleConfirm, onCancel: cleanup }),
|
|
75
|
+
react_1.default.createElement(Table_1.Table, { colCount: 4, rowCount: data.length + 1, footer: react_1.default.createElement(Table_1.TFooter, { onClick: (e) => { e.preventDefault(); onOpenModal(null); }, icon: plusIcon }, (0, utils_1.getMessage)(`${tradPrefix}footer`)) },
|
|
76
|
+
react_1.default.createElement(Table_1.Thead, null,
|
|
77
|
+
react_1.default.createElement(Table_1.Tr, null,
|
|
78
|
+
react_1.default.createElement(Table_1.Th, { width: "20%" },
|
|
79
|
+
react_1.default.createElement(Typography_1.Typography, { variant: "sigma", textColor: "neutral600" }, (0, utils_1.getMessage)(`${tradPrefix}header.name`))),
|
|
80
|
+
react_1.default.createElement(Table_1.Th, { width: "60%" },
|
|
81
|
+
react_1.default.createElement(Typography_1.Typography, { variant: "sigma", textColor: "neutral600" }, (0, utils_1.getMessage)(`${tradPrefix}header.label`))),
|
|
82
|
+
react_1.default.createElement(Table_1.Th, { width: "15%" },
|
|
83
|
+
react_1.default.createElement(Typography_1.Typography, { variant: "sigma", textColor: "neutral600" }, (0, utils_1.getMessage)(`${tradPrefix}header.type`))),
|
|
84
|
+
react_1.default.createElement(Table_1.Th, { width: "5%" },
|
|
85
|
+
react_1.default.createElement(Typography_1.Typography, { variant: "sigma", textColor: "neutral600" }, (0, utils_1.getMessage)(`${tradPrefix}header.required`))),
|
|
86
|
+
react_1.default.createElement(Table_1.Th, null,
|
|
87
|
+
react_1.default.createElement(VisuallyHidden_1.VisuallyHidden, null)))),
|
|
88
|
+
react_1.default.createElement(Table_1.Tbody, null, customFields.map(customField => (react_1.default.createElement(Table_1.Tr, { key: customField.name },
|
|
89
|
+
react_1.default.createElement(Table_1.Td, { width: '20%' },
|
|
90
|
+
react_1.default.createElement(Typography_1.Typography, { fontWeight: "semiBold", textColor: "neutral800" }, customField.name)),
|
|
91
|
+
react_1.default.createElement(Table_1.Td, { width: "60%" },
|
|
92
|
+
react_1.default.createElement(Typography_1.Typography, { textColor: "neutral800" }, customField.label)),
|
|
93
|
+
react_1.default.createElement(Table_1.Td, { width: "15%" },
|
|
94
|
+
react_1.default.createElement(Typography_1.Typography, { textColor: "neutral800" }, customField.type)),
|
|
95
|
+
react_1.default.createElement(Table_1.Td, { width: "5%" },
|
|
96
|
+
react_1.default.createElement(Tooltip_1.Tooltip, { description: (0, utils_1.getMessage)(`${tradPrefix}${customField.required ? "required" : "notRequired"}`) },
|
|
97
|
+
react_1.default.createElement(Typography_1.Typography, { textColor: "neutral800" }, customField.required ? react_1.default.createElement(icons_1.Check, null) : react_1.default.createElement(icons_1.Minus, null)))),
|
|
98
|
+
react_1.default.createElement(Table_1.Td, null,
|
|
99
|
+
react_1.default.createElement(Stack_1.Stack, { horizontal: true, size: 1 },
|
|
100
|
+
react_1.default.createElement(IconButton_1.IconButton, { onClick: () => onOpenModal(customField), label: (0, utils_1.getMessage)(`${tradPrefix}edit`), icon: react_1.default.createElement(icons_1.Pencil, null), noBorder: true }),
|
|
101
|
+
react_1.default.createElement(IconButton_1.IconButton, { onClick: () => onToggleCustomField(customField), label: (0, utils_1.getMessage)(`${tradPrefix}${customField.enabled ? 'disable' : 'enable'}`), icon: customField.enabled ? react_1.default.createElement(icons_1.Eye, null) : react_1.default.createElement(icons_1.EyeStriked, null), noBorder: true }),
|
|
102
|
+
react_1.default.createElement(IconButton_1.IconButton, { onClick: () => handleRemove(customField), label: (0, utils_1.getMessage)(`${tradPrefix}remove`), icon: react_1.default.createElement(icons_1.Trash, null), noBorder: true }))))))))));
|
|
103
|
+
};
|
|
104
|
+
exports.default = CustomFieldTable;
|
|
105
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -27,8 +27,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
29
|
const react_1 = __importStar(require("react"));
|
|
30
|
-
const formik_1 = require("formik");
|
|
31
30
|
const lodash_1 = require("lodash");
|
|
31
|
+
const formik_1 = require("formik");
|
|
32
32
|
const helper_plugin_1 = require("@strapi/helper-plugin");
|
|
33
33
|
const Main_1 = require("@strapi/design-system/Main");
|
|
34
34
|
const Layout_1 = require("@strapi/design-system/Layout");
|
|
@@ -46,47 +46,69 @@ const icons_1 = require("@strapi/icons");
|
|
|
46
46
|
const permissions_1 = __importDefault(require("../../permissions"));
|
|
47
47
|
const useNavigationConfig_1 = __importDefault(require("../../hooks/useNavigationConfig"));
|
|
48
48
|
const useAllContentTypes_1 = __importDefault(require("../../hooks/useAllContentTypes"));
|
|
49
|
-
const
|
|
49
|
+
const utils_1 = require("../../utils");
|
|
50
50
|
const ConfirmationDialog_1 = __importDefault(require("../../components/ConfirmationDialog"));
|
|
51
51
|
const RestartAlert_1 = __importDefault(require("../../components/RestartAlert"));
|
|
52
|
-
const
|
|
52
|
+
const utils_2 = require("../../utils");
|
|
53
53
|
const functions_1 = require("./utils/functions");
|
|
54
54
|
const styles_1 = require("../../components/Alert/styles");
|
|
55
55
|
const DisableI18nModal_1 = require("./components/DisableI18nModal");
|
|
56
|
+
const CustomFieldModal_1 = __importDefault(require("./components/CustomFieldModal"));
|
|
57
|
+
const CustomFieldTable_1 = __importDefault(require("./components/CustomFieldTable"));
|
|
56
58
|
const RESTART_NOT_REQUIRED = { required: false };
|
|
57
59
|
const RESTART_REQUIRED = { required: true, reasons: [] };
|
|
60
|
+
const RELATION_ATTRIBUTE_TYPES = ['relation', 'media', 'component'];
|
|
61
|
+
const BOX_DEFAULT_PROPS = {
|
|
62
|
+
background: "neutral0",
|
|
63
|
+
hasRadius: true,
|
|
64
|
+
shadow: "filterShadow",
|
|
65
|
+
padding: 6,
|
|
66
|
+
};
|
|
58
67
|
const SettingsPage = () => {
|
|
59
68
|
const { lockApp, unlockApp } = (0, helper_plugin_1.useOverlayBlocker)();
|
|
60
69
|
const { lockAppWithAutoreload, unlockAppWithAutoreload } = (0, helper_plugin_1.useAutoReloadOverlayBlocker)();
|
|
61
|
-
const [isRestorePopupOpen, setIsRestorePopupOpen] = (0, react_1.useState)(false);
|
|
62
70
|
const [restartStatus, setRestartStatus] = (0, react_1.useState)(RESTART_NOT_REQUIRED);
|
|
63
|
-
const [contentTypeExpanded, setContentTypeExpanded] = (0, react_1.useState)(undefined);
|
|
64
71
|
const [pruneObsoleteI18nNavigations, setPruneObsoleteI18nNavigations] = (0, react_1.useState)(false);
|
|
72
|
+
const [isCustomFieldModalOpen, setIsCustomFieldModalOpen] = (0, react_1.useState)(false);
|
|
73
|
+
const [customFieldSelected, setCustomFieldSelected] = (0, react_1.useState)(null);
|
|
74
|
+
const [customFields, setCustomFields] = (0, react_1.useState)([]);
|
|
75
|
+
const [isRestorePopupOpen, setIsRestorePopupOpen] = (0, react_1.useState)(false);
|
|
76
|
+
const [contentTypeExpanded, setContentTypeExpanded] = (0, react_1.useState)(undefined);
|
|
77
|
+
const { data: navigationConfigData, isLoading: isConfigLoading, error: configErr, submitMutation, restoreMutation, restartMutation } = (0, useNavigationConfig_1.default)();
|
|
78
|
+
const { data: allContentTypesData, isLoading: isContentTypesLoading, error: contentTypesErr } = (0, useAllContentTypes_1.default)();
|
|
79
|
+
const isLoading = isConfigLoading || isContentTypesLoading;
|
|
80
|
+
const isError = configErr || contentTypesErr;
|
|
81
|
+
const configContentTypes = navigationConfigData?.contentTypes || [];
|
|
82
|
+
const formikInitialValues = (0, react_1.useMemo)(() => ({
|
|
83
|
+
allowedLevels: (0, lodash_1.get)(navigationConfigData, "allowedLevels", 2),
|
|
84
|
+
audienceFieldChecked: (0, lodash_1.get)(navigationConfigData, "additionalFields", []).includes(utils_1.navigationItemAdditionalFields.AUDIENCE),
|
|
85
|
+
i18nEnabled: (0, lodash_1.get)(navigationConfigData, "i18nEnabled", false),
|
|
86
|
+
nameFields: (0, lodash_1.get)(navigationConfigData, "contentTypesNameFields", {}),
|
|
87
|
+
pathDefaultFields: (0, lodash_1.get)(navigationConfigData, "pathDefaultFields", {}),
|
|
88
|
+
populate: (0, lodash_1.get)(navigationConfigData, "contentTypesPopulate", {}),
|
|
89
|
+
selectedContentTypes: configContentTypes.map(item => item.uid),
|
|
90
|
+
}), [configContentTypes, navigationConfigData, utils_1.navigationItemAdditionalFields]);
|
|
65
91
|
const { disableI18nModal, setDisableI18nModalOpened, setI18nModalOnCancel, } = (0, DisableI18nModal_1.useDisableI18nModal)(({ pruneNavigations }) => {
|
|
66
92
|
setPruneObsoleteI18nNavigations(pruneNavigations);
|
|
67
93
|
});
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
shadow: "filterShadow",
|
|
76
|
-
padding: 6,
|
|
77
|
-
};
|
|
78
|
-
const preparePayload = ({ form: { selectedContentTypes, nameFields, audienceFieldChecked, allowedLevels, i18nEnabled }, pruneObsoleteI18nNavigations }) => ({
|
|
79
|
-
i18nEnabled,
|
|
94
|
+
(0, react_1.useEffect)(() => {
|
|
95
|
+
const additionalFields = navigationConfigData?.additionalFields
|
|
96
|
+
?.filter((field) => field !== utils_1.navigationItemAdditionalFields.AUDIENCE);
|
|
97
|
+
setCustomFields(additionalFields || []);
|
|
98
|
+
}, [navigationConfigData]);
|
|
99
|
+
const preparePayload = (0, react_1.useCallback)(({ form: { allowedLevels, audienceFieldChecked, i18nEnabled, nameFields, pathDefaultFields, populate, selectedContentTypes, }, pruneObsoleteI18nNavigations }) => ({
|
|
100
|
+
additionalFields: audienceFieldChecked ? ['audience', ...customFields] : [...customFields],
|
|
80
101
|
allowedLevels,
|
|
81
|
-
pruneObsoleteI18nNavigations,
|
|
82
102
|
contentTypes: selectedContentTypes,
|
|
83
103
|
contentTypesNameFields: nameFields,
|
|
84
104
|
contentTypesPopulate: populate,
|
|
85
|
-
|
|
105
|
+
i18nEnabled,
|
|
106
|
+
pathDefaultFields,
|
|
107
|
+
pruneObsoleteI18nNavigations,
|
|
86
108
|
gql: {
|
|
87
|
-
navigationItemRelated: selectedContentTypes.map(uid => (0, functions_1.resolveGlobalLikeId)(uid)),
|
|
109
|
+
navigationItemRelated: selectedContentTypes.map((uid) => (0, functions_1.resolveGlobalLikeId)(uid)),
|
|
88
110
|
}
|
|
89
|
-
});
|
|
111
|
+
}), [customFields]);
|
|
90
112
|
const onSave = async (form) => {
|
|
91
113
|
lockApp();
|
|
92
114
|
const payload = preparePayload({ form, pruneObsoleteI18nNavigations });
|
|
@@ -125,22 +147,17 @@ const SettingsPage = () => {
|
|
|
125
147
|
const handleRestart = async () => {
|
|
126
148
|
lockAppWithAutoreload();
|
|
127
149
|
await restartMutation();
|
|
128
|
-
setRestartStatus(RESTART_NOT_REQUIRED);
|
|
129
150
|
unlockAppWithAutoreload();
|
|
151
|
+
setRestartStatus(RESTART_NOT_REQUIRED);
|
|
130
152
|
};
|
|
131
153
|
const handleRestartDiscard = () => setRestartStatus(RESTART_NOT_REQUIRED);
|
|
132
154
|
const handleSetContentTypeExpanded = key => setContentTypeExpanded(key === contentTypeExpanded ? undefined : key);
|
|
133
|
-
const prepareNameFieldFor = (uid, current, value) => ({
|
|
134
|
-
...current,
|
|
135
|
-
[uid]: value && !(0, lodash_1.isEmpty)(value) ? [...value] : undefined,
|
|
136
|
-
});
|
|
137
155
|
if (isLoading || isError) {
|
|
138
156
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
139
|
-
react_1.default.createElement(helper_plugin_1.SettingsPageTitle, { name: (0,
|
|
157
|
+
react_1.default.createElement(helper_plugin_1.SettingsPageTitle, { name: (0, utils_2.getMessage)('Settings.email.plugin.title', 'Configuration') }),
|
|
140
158
|
react_1.default.createElement(helper_plugin_1.LoadingIndicatorPage, null, "Fetching plugin config...")));
|
|
141
159
|
}
|
|
142
|
-
const
|
|
143
|
-
const allContentTypes = !isLoading && Object.values(allContentTypesData).filter(({ uid }) => (0, functions_1.isContentTypeEligible)(uid, {
|
|
160
|
+
const allContentTypes = !isLoading ? Object.values(allContentTypesData).filter(({ uid }) => (0, functions_1.isContentTypeEligible)(uid, {
|
|
144
161
|
allowedContentTypes: navigationConfigData?.allowedContentTypes,
|
|
145
162
|
restrictedContentTypes: navigationConfigData?.restrictedContentTypes,
|
|
146
163
|
})).map(ct => {
|
|
@@ -154,69 +171,81 @@ const SettingsPage = () => {
|
|
|
154
171
|
};
|
|
155
172
|
}
|
|
156
173
|
return ct;
|
|
157
|
-
});
|
|
158
|
-
const selectedContentTypes = configContentTypes.map(item => item.uid);
|
|
159
|
-
const audienceFieldChecked = navigationConfigData?.additionalFields.includes(enums_1.navigationItemAdditionalFields.AUDIENCE);
|
|
160
|
-
const allowedLevels = navigationConfigData?.allowedLevels || 2;
|
|
161
|
-
const nameFields = navigationConfigData?.contentTypesNameFields || {};
|
|
162
|
-
const populate = navigationConfigData?.contentTypesPopulate || {};
|
|
163
|
-
const i18nEnabled = navigationConfigData?.i18nEnabled ?? false;
|
|
174
|
+
}) : [];
|
|
164
175
|
const isI18NPluginEnabled = navigationConfigData?.isI18NPluginEnabled;
|
|
165
176
|
const defaultLocale = navigationConfigData?.defaultLocale;
|
|
177
|
+
const handleSubmitCustomField = (field) => {
|
|
178
|
+
const filteredFields = customFields.filter(f => f.name !== field.name);
|
|
179
|
+
setCustomFields([...filteredFields, field]);
|
|
180
|
+
setCustomFieldSelected(null);
|
|
181
|
+
setIsCustomFieldModalOpen(false);
|
|
182
|
+
};
|
|
183
|
+
const handleOpenCustomFieldModal = (field) => {
|
|
184
|
+
setCustomFieldSelected(field);
|
|
185
|
+
setIsCustomFieldModalOpen(true);
|
|
186
|
+
};
|
|
187
|
+
const handleRemoveCustomField = (field) => {
|
|
188
|
+
const filteredFields = customFields.filter(f => f.name !== field.name);
|
|
189
|
+
setCustomFields(filteredFields);
|
|
190
|
+
setCustomFieldSelected(null);
|
|
191
|
+
setIsCustomFieldModalOpen(false);
|
|
192
|
+
};
|
|
193
|
+
const handleToggleCustomField = (field) => {
|
|
194
|
+
const updatedField = { ...field, enabled: !(0, lodash_1.get)(field, 'enabled', false) };
|
|
195
|
+
const filteredFields = customFields.filter(f => f.name !== field.name);
|
|
196
|
+
setCustomFields([...filteredFields, updatedField]);
|
|
197
|
+
};
|
|
166
198
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
167
|
-
react_1.default.createElement(helper_plugin_1.SettingsPageTitle, { name: (0,
|
|
199
|
+
react_1.default.createElement(helper_plugin_1.SettingsPageTitle, { name: (0, utils_2.getMessage)('Settings.email.plugin.title', 'Configuration') }),
|
|
168
200
|
react_1.default.createElement(Main_1.Main, { labelledBy: "title" },
|
|
169
|
-
react_1.default.createElement(formik_1.Formik, { initialValues: {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
allowedLevels,
|
|
173
|
-
nameFields,
|
|
174
|
-
populate,
|
|
175
|
-
i18nEnabled,
|
|
176
|
-
}, onSubmit: onSave }, ({ handleSubmit, setFieldValue, values }) => (react_1.default.createElement(helper_plugin_1.Form, { noValidate: true, onSubmit: handleSubmit },
|
|
177
|
-
react_1.default.createElement(Layout_1.HeaderLayout, { title: (0, utils_1.getMessage)('pages.settings.header.title'), subtitle: (0, utils_1.getMessage)('pages.settings.header.description'), primaryAction: react_1.default.createElement(helper_plugin_1.CheckPermissions, { permissions: permissions_1.default.access },
|
|
178
|
-
react_1.default.createElement(Button_1.Button, { type: "submit", startIcon: react_1.default.createElement(icons_1.Check, null), disabled: restartStatus.required }, (0, utils_1.getMessage)('pages.settings.actions.submit'))) }),
|
|
201
|
+
react_1.default.createElement(formik_1.Formik, { initialValues: formikInitialValues, onSubmit: onSave }, ({ handleSubmit, setFieldValue, values }) => (react_1.default.createElement(formik_1.Form, { noValidate: true, onSubmit: handleSubmit },
|
|
202
|
+
react_1.default.createElement(Layout_1.HeaderLayout, { title: (0, utils_2.getMessage)('pages.settings.header.title'), subtitle: (0, utils_2.getMessage)('pages.settings.header.description'), primaryAction: react_1.default.createElement(helper_plugin_1.CheckPermissions, { permissions: permissions_1.default.access },
|
|
203
|
+
react_1.default.createElement(Button_1.Button, { type: "submit", startIcon: react_1.default.createElement(icons_1.Check, null), disabled: restartStatus.required }, (0, utils_2.getMessage)('pages.settings.actions.submit'))) }),
|
|
179
204
|
react_1.default.createElement(Layout_1.ContentLayout, null,
|
|
180
205
|
react_1.default.createElement(Stack_1.Stack, { spacing: 7 },
|
|
181
|
-
restartStatus.required && (react_1.default.createElement(RestartAlert_1.default, { closeLabel: (0,
|
|
182
|
-
react_1.default.createElement(Button_1.Button, { onClick: handleRestart, startIcon: react_1.default.createElement(icons_1.Play, null) }, (0,
|
|
206
|
+
restartStatus.required && (react_1.default.createElement(RestartAlert_1.default, { closeLabel: (0, utils_2.getMessage)('pages.settings.actions.restart.alert.cancel'), title: (0, utils_2.getMessage)('pages.settings.actions.restart.alert.title'), action: react_1.default.createElement(Box_1.Box, null,
|
|
207
|
+
react_1.default.createElement(Button_1.Button, { onClick: handleRestart, startIcon: react_1.default.createElement(icons_1.Play, null) }, (0, utils_2.getMessage)('pages.settings.actions.restart'))), onClose: handleRestartDiscard },
|
|
183
208
|
react_1.default.createElement(react_1.default.Fragment, null,
|
|
184
|
-
react_1.default.createElement(Box_1.Box, { paddingBottom: 1 }, (0,
|
|
185
|
-
restartStatus.reasons
|
|
186
|
-
react_1.default.createElement(Box_1.Box, { ...
|
|
209
|
+
react_1.default.createElement(Box_1.Box, { paddingBottom: 1 }, (0, utils_2.getMessage)('pages.settings.actions.restart.alert.description')),
|
|
210
|
+
restartStatus.reasons?.map((reason, i) => react_1.default.createElement(Box_1.Box, { paddingBottom: 1, key: i, children: (0, utils_2.getMessage)(`pages.settings.actions.restart.alert.reason.${reason}`) }))))),
|
|
211
|
+
react_1.default.createElement(Box_1.Box, { ...BOX_DEFAULT_PROPS },
|
|
187
212
|
react_1.default.createElement(Stack_1.Stack, { size: 4 },
|
|
188
|
-
react_1.default.createElement(Typography_1.Typography, { variant: "delta", as: "h2" }, (0,
|
|
213
|
+
react_1.default.createElement(Typography_1.Typography, { variant: "delta", as: "h2" }, (0, utils_2.getMessage)('pages.settings.general.title')),
|
|
189
214
|
react_1.default.createElement(Grid_1.Grid, { gap: 4 },
|
|
190
215
|
react_1.default.createElement(Grid_1.GridItem, { col: 12, s: 12, xs: 12 },
|
|
191
|
-
react_1.default.createElement(Select_1.Select, { name: "selectedContentTypes", label: (0,
|
|
216
|
+
react_1.default.createElement(Select_1.Select, { name: "selectedContentTypes", label: (0, utils_2.getMessage)('pages.settings.form.contentTypes.label'), placeholder: (0, utils_2.getMessage)('pages.settings.form.contentTypes.placeholder'), hint: (0, utils_2.getMessage)('pages.settings.form.contentTypes.hint'), onClear: () => setFieldValue('selectedContentTypes', [], false), value: values.selectedContentTypes, onChange: (value) => setFieldValue('selectedContentTypes', value, false), multi: true, withTags: true, disabled: restartStatus.required }, allContentTypes.map((item) => react_1.default.createElement(Select_1.Option, { key: item.uid, value: item.uid }, item.info.displayName)))),
|
|
192
217
|
!(0, lodash_1.isEmpty)(values.selectedContentTypes) && (react_1.default.createElement(Grid_1.GridItem, { col: 12 },
|
|
193
|
-
react_1.default.createElement(Accordion_1.AccordionGroup, { label: (0,
|
|
218
|
+
react_1.default.createElement(Accordion_1.AccordionGroup, { label: (0, utils_2.getMessage)('pages.settings.form.contentTypesSettings.label'), labelAction: react_1.default.createElement(Tooltip_1.Tooltip, { description: (0, utils_2.getMessage)('pages.settings.form.contentTypesSettings.tooltip') },
|
|
194
219
|
react_1.default.createElement(icons_1.Information, { "aria-hidden": true })) }, (0, lodash_1.orderBy)(values.selectedContentTypes).map(uid => {
|
|
195
|
-
const
|
|
220
|
+
const contentType = allContentTypes.find(item => item.uid == uid);
|
|
221
|
+
if (!contentType)
|
|
222
|
+
return;
|
|
223
|
+
const { attributes, info: { displayName }, available, isSingle } = contentType;
|
|
196
224
|
const stringAttributes = Object.keys(attributes).filter(_ => attributes[_].type === 'string');
|
|
197
|
-
const relationAttributes = Object.keys(attributes).filter(_ => attributes[_].type
|
|
225
|
+
const relationAttributes = Object.keys(attributes).filter(_ => RELATION_ATTRIBUTE_TYPES.includes(attributes[_].type));
|
|
198
226
|
const key = `collectionSettings-${uid}`;
|
|
199
227
|
return (react_1.default.createElement(Accordion_1.Accordion, { expanded: contentTypeExpanded === key, toggle: () => handleSetContentTypeExpanded(key), key: key, id: key, size: "S" },
|
|
200
|
-
react_1.default.createElement(Accordion_1.AccordionToggle, { title: displayName, togglePosition: "left", startIcon: (isSingle && !available)
|
|
228
|
+
react_1.default.createElement(Accordion_1.AccordionToggle, { title: displayName, togglePosition: "left", startIcon: (isSingle && !available) ? (react_1.default.createElement(icons_1.ExclamationMarkCircle, { "aria-hidden": true })) : null }),
|
|
201
229
|
react_1.default.createElement(Accordion_1.AccordionContent, null,
|
|
202
230
|
react_1.default.createElement(Box_1.Box, { padding: 6 },
|
|
203
231
|
react_1.default.createElement(Stack_1.Stack, { size: 4 },
|
|
204
|
-
(isSingle && !available) && (react_1.default.createElement(styles_1.PermanentAlert, { title: (0,
|
|
205
|
-
react_1.default.createElement(Select_1.Select, { name: `collectionSettings-${uid}-entryLabel`, label: (0,
|
|
206
|
-
react_1.default.createElement(Select_1.Select, { name: `collectionSettings-${uid}-populate`, label: (0,
|
|
232
|
+
(isSingle && !available) && (react_1.default.createElement(styles_1.PermanentAlert, { title: (0, utils_2.getMessage)('pages.settings.form.contentTypesSettings.initializationWarning.title'), variant: "danger", onClose: (e) => e.preventDefault() }, (0, utils_2.getMessage)('pages.settings.form.contentTypesSettings.initializationWarning.content'))),
|
|
233
|
+
react_1.default.createElement(Select_1.Select, { name: `collectionSettings-${uid}-entryLabel`, label: (0, utils_2.getMessage)('pages.settings.form.nameField.label'), hint: (0, utils_2.getMessage)(`pages.settings.form.nameField.${(0, lodash_1.isEmpty)(stringAttributes) ? 'empty' : 'hint'}`), placeholder: (0, utils_2.getMessage)('pages.settings.form.nameField.placeholder'), onClear: () => setFieldValue('nameFields', (0, utils_1.prepareNewValueForRecord)(uid, values.nameFields, [])), value: values.nameFields[uid] || [], onChange: (value) => setFieldValue('nameFields', (0, utils_1.prepareNewValueForRecord)(uid, values.nameFields, value)), multi: true, withTags: true, disabled: restartStatus.required || (0, lodash_1.isEmpty)(stringAttributes) }, stringAttributes.map(key => (react_1.default.createElement(Select_1.Option, { key: uid + key, value: key }, (0, lodash_1.capitalize)(key.split('_').join(' ')))))),
|
|
234
|
+
react_1.default.createElement(Select_1.Select, { name: `collectionSettings-${uid}-populate`, label: (0, utils_2.getMessage)('pages.settings.form.populate.label'), hint: (0, utils_2.getMessage)(`pages.settings.form.populate.${(0, lodash_1.isEmpty)(relationAttributes) ? 'empty' : 'hint'}`), placeholder: (0, utils_2.getMessage)('pages.settings.form.populate.placeholder'), onClear: () => setFieldValue('populate', (0, utils_1.prepareNewValueForRecord)(uid, values.populate, [])), value: values.populate[uid] || [], onChange: (value) => setFieldValue('populate', (0, utils_1.prepareNewValueForRecord)(uid, values.populate, value)), multi: true, withTags: true, disabled: restartStatus.required || (0, lodash_1.isEmpty)(relationAttributes) }, relationAttributes.map(key => (react_1.default.createElement(Select_1.Option, { key: uid + key, value: key }, (0, lodash_1.capitalize)(key.split('_').join(' ')))))),
|
|
235
|
+
react_1.default.createElement(Select_1.Select, { name: `collectionSettings-${uid}-pathDefaultFields`, label: (0, utils_2.getMessage)('pages.settings.form.pathDefaultFields.label'), hint: (0, utils_2.getMessage)(`pages.settings.form.pathDefaultFields.${(0, lodash_1.isEmpty)(stringAttributes) ? 'empty' : 'hint'}`), placeholder: (0, utils_2.getMessage)('pages.settings.form.pathDefaultFields.placeholder'), onClear: () => setFieldValue('pathDefaultFields', (0, utils_1.prepareNewValueForRecord)(uid, values.pathDefaultFields, [])), value: values.pathDefaultFields[uid] || [], onChange: (value) => setFieldValue('pathDefaultFields', (0, utils_1.prepareNewValueForRecord)(uid, values.pathDefaultFields, value)), multi: true, withTags: true, disabled: restartStatus.required || (0, lodash_1.isEmpty)(stringAttributes) }, stringAttributes.map(key => (react_1.default.createElement(Select_1.Option, { key: uid + key, value: key }, (0, lodash_1.capitalize)(key.split('_').join(' ')))))))))));
|
|
207
236
|
}))))))),
|
|
208
|
-
react_1.default.createElement(Box_1.Box, { ...
|
|
237
|
+
react_1.default.createElement(Box_1.Box, { ...BOX_DEFAULT_PROPS },
|
|
209
238
|
react_1.default.createElement(Stack_1.Stack, { size: 4 },
|
|
210
|
-
react_1.default.createElement(Typography_1.Typography, { variant: "delta", as: "h2" }, (0,
|
|
239
|
+
react_1.default.createElement(Typography_1.Typography, { variant: "delta", as: "h2" }, (0, utils_2.getMessage)('pages.settings.additional.title')),
|
|
211
240
|
react_1.default.createElement(Grid_1.Grid, { gap: 4 },
|
|
212
241
|
react_1.default.createElement(Grid_1.GridItem, { col: 3, s: 6, xs: 12 },
|
|
213
|
-
react_1.default.createElement(NumberInput_1.NumberInput, { name: "allowedLevels", label: (0,
|
|
242
|
+
react_1.default.createElement(NumberInput_1.NumberInput, { name: "allowedLevels", label: (0, utils_2.getMessage)('pages.settings.form.allowedLevels.label'), placeholder: (0, utils_2.getMessage)('pages.settings.form.allowedLevels.placeholder'), hint: (0, utils_2.getMessage)('pages.settings.form.allowedLevels.hint'), onValueChange: (value) => setFieldValue('allowedLevels', value, false), value: values.allowedLevels, disabled: restartStatus.required })),
|
|
214
243
|
react_1.default.createElement(Grid_1.GridItem, { col: 4, s: 12, xs: 12 },
|
|
215
|
-
react_1.default.createElement(ToggleInput_1.ToggleInput, { name: "audienceFieldChecked", label: (0,
|
|
244
|
+
react_1.default.createElement(ToggleInput_1.ToggleInput, { name: "audienceFieldChecked", label: (0, utils_2.getMessage)('pages.settings.form.audience.label'), hint: (0, utils_2.getMessage)('pages.settings.form.audience.hint'), checked: values.audienceFieldChecked, onChange: () => setFieldValue('audienceFieldChecked', !values.audienceFieldChecked, false), onLabel: "Enabled", offLabel: "Disabled", disabled: restartStatus.required })),
|
|
216
245
|
isI18NPluginEnabled && (react_1.default.createElement(Grid_1.GridItem, { col: 4, s: 12, xs: 12 },
|
|
217
|
-
react_1.default.createElement(ToggleInput_1.ToggleInput, { name: "i18nEnabled", label: (0,
|
|
218
|
-
? (0,
|
|
219
|
-
: (0,
|
|
246
|
+
react_1.default.createElement(ToggleInput_1.ToggleInput, { name: "i18nEnabled", label: (0, utils_2.getMessage)('pages.settings.form.i18n.label'), hint: defaultLocale
|
|
247
|
+
? (0, utils_2.getMessage)('pages.settings.form.i18n.hint')
|
|
248
|
+
: (0, utils_2.getMessage)('pages.settings.form.i18n.hint.missingDefaultLocale'), checked: values.i18nEnabled, onChange: ({ target: { checked } }) => {
|
|
220
249
|
setFieldValue('i18nEnabled', checked, false);
|
|
221
250
|
if (checked) {
|
|
222
251
|
setPruneObsoleteI18nNavigations(false);
|
|
@@ -228,17 +257,23 @@ const SettingsPage = () => {
|
|
|
228
257
|
});
|
|
229
258
|
}
|
|
230
259
|
}, onLabel: "Enabled", offLabel: "Disabled", disabled: restartStatus.required || !defaultLocale })))))),
|
|
231
|
-
react_1.default.createElement(Box_1.Box, { ...
|
|
260
|
+
react_1.default.createElement(Box_1.Box, { ...BOX_DEFAULT_PROPS },
|
|
261
|
+
react_1.default.createElement(Stack_1.Stack, { size: 4 },
|
|
262
|
+
react_1.default.createElement(Typography_1.Typography, { variant: "delta", as: "h2" }, (0, utils_2.getMessage)('pages.settings.customFields.title')),
|
|
263
|
+
react_1.default.createElement(CustomFieldTable_1.default, { data: customFields, onOpenModal: handleOpenCustomFieldModal, onRemoveCustomField: handleRemoveCustomField, onToggleCustomField: handleToggleCustomField }))),
|
|
264
|
+
react_1.default.createElement(Box_1.Box, { ...BOX_DEFAULT_PROPS },
|
|
232
265
|
react_1.default.createElement(Stack_1.Stack, { size: 4 },
|
|
233
|
-
react_1.default.createElement(Typography_1.Typography, { variant: "delta", as: "h2" }, (0,
|
|
266
|
+
react_1.default.createElement(Typography_1.Typography, { variant: "delta", as: "h2" }, (0, utils_2.getMessage)('pages.settings.restoring.title')),
|
|
234
267
|
react_1.default.createElement(Grid_1.Grid, { gap: 4 },
|
|
235
268
|
react_1.default.createElement(Grid_1.GridItem, { col: 12, s: 12, xs: 12 },
|
|
236
|
-
react_1.default.createElement(Typography_1.Typography, null, (0,
|
|
269
|
+
react_1.default.createElement(Typography_1.Typography, null, (0, utils_2.getMessage)('pages.settings.actions.restore.description'))),
|
|
237
270
|
react_1.default.createElement(Grid_1.GridItem, { col: 6, s: 12, xs: 12 },
|
|
238
271
|
react_1.default.createElement(helper_plugin_1.CheckPermissions, { permissions: permissions_1.default.access },
|
|
239
|
-
react_1.default.createElement(Button_1.Button, { variant: "danger-light", startIcon: react_1.default.createElement(icons_1.Refresh, null), onClick: () => setIsRestorePopupOpen(true) }, (0,
|
|
240
|
-
react_1.default.createElement(ConfirmationDialog_1.default, { isVisible: isRestorePopupOpen, header: (0,
|
|
241
|
-
disableI18nModal))))))))))
|
|
272
|
+
react_1.default.createElement(Button_1.Button, { variant: "danger-light", startIcon: react_1.default.createElement(icons_1.Refresh, null), onClick: () => setIsRestorePopupOpen(true) }, (0, utils_2.getMessage)('pages.settings.actions.restore'))),
|
|
273
|
+
react_1.default.createElement(ConfirmationDialog_1.default, { isVisible: isRestorePopupOpen, header: (0, utils_2.getMessage)('pages.settings.actions.restore.confirmation.header'), labelConfirm: (0, utils_2.getMessage)('pages.settings.actions.restore.confirmation.confirm'), iconConfirm: react_1.default.createElement(icons_1.Refresh, null), onConfirm: () => onPopupClose(true), onCancel: () => onPopupClose(false) }, (0, utils_2.getMessage)('pages.settings.actions.restore.confirmation.description')),
|
|
274
|
+
disableI18nModal)))))))))),
|
|
275
|
+
isCustomFieldModalOpen &&
|
|
276
|
+
react_1.default.createElement(CustomFieldModal_1.default, { onClose: () => setIsCustomFieldModalOpen(false), onSubmit: handleSubmitCustomField, isOpen: isCustomFieldModalOpen, data: customFieldSelected, usedCustomFieldNames: customFields.filter(f => f.name !== customFieldSelected?.name).map(f => f.name) })));
|
|
242
277
|
};
|
|
243
278
|
exports.default = SettingsPage;
|
|
244
279
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { StrapiContentTypeFullSchema } from "strapi-typed";
|
|
2
|
+
import { Effect, NavigationPluginConfig } from "../../../../types";
|
|
3
|
+
export declare type RawPayload = {
|
|
4
|
+
allowedLevels: number;
|
|
5
|
+
audienceFieldChecked: boolean;
|
|
6
|
+
i18nEnabled: boolean;
|
|
7
|
+
nameFields: Record<string, string[]>;
|
|
8
|
+
pathDefaultFields: Record<string, string[]>;
|
|
9
|
+
populate: Record<string, string[]>;
|
|
10
|
+
selectedContentTypes: string[];
|
|
11
|
+
};
|
|
12
|
+
export declare type StrapiContentTypeSchema = StrapiContentTypeFullSchema & {
|
|
13
|
+
available: boolean;
|
|
14
|
+
isSingle: boolean;
|
|
15
|
+
plugin: string;
|
|
16
|
+
label: string;
|
|
17
|
+
};
|
|
18
|
+
export declare type PreparePayload = (payload: {
|
|
19
|
+
form: RawPayload;
|
|
20
|
+
pruneObsoleteI18nNavigations: boolean;
|
|
21
|
+
}) => Omit<NavigationPluginConfig, "slugify">;
|
|
22
|
+
export declare type OnSave = Effect<RawPayload>;
|
|
23
|
+
export declare type OnPopupClose = Effect<boolean>;
|
|
24
|
+
export declare type HandleSetContentTypeExpanded = Effect<string | undefined>;
|
|
25
|
+
export declare type RestartReasons = 'I18N' | 'GRAPH_QL' | 'I18N_NAVIGATIONS_PRUNE';
|
|
26
|
+
export declare type RestartStatus = {
|
|
27
|
+
required: true;
|
|
28
|
+
reasons?: RestartReasons[];
|
|
29
|
+
} | {
|
|
30
|
+
required: false;
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { NavigationItemCustomField } from "../../../../../types";
|
|
2
|
+
export declare const schemaFactory: (usedCustomFieldNames: string[]) => import("yup/lib/object").OptionalObjectSchema<{
|
|
3
|
+
name: import("yup/lib/string").RequiredStringSchema<string | undefined, Record<string, any>>;
|
|
4
|
+
label: import("yup/lib/string").RequiredStringSchema<string | undefined, Record<string, any>>;
|
|
5
|
+
type: import("yup/lib/mixed").MixedSchema<any, Record<string, any>, any>;
|
|
6
|
+
required: import("yup/lib/boolean").RequiredBooleanSchema<boolean | undefined, Record<string, any>>;
|
|
7
|
+
multi: import("yup/lib/mixed").MixedSchema<any, Record<string, any>, any>;
|
|
8
|
+
options: import("yup/lib/mixed").MixedSchema<any, Record<string, any>, any>;
|
|
9
|
+
}, Record<string, any>, import("yup/lib/object").TypeOfShape<{
|
|
10
|
+
name: import("yup/lib/string").RequiredStringSchema<string | undefined, Record<string, any>>;
|
|
11
|
+
label: import("yup/lib/string").RequiredStringSchema<string | undefined, Record<string, any>>;
|
|
12
|
+
type: import("yup/lib/mixed").MixedSchema<any, Record<string, any>, any>;
|
|
13
|
+
required: import("yup/lib/boolean").RequiredBooleanSchema<boolean | undefined, Record<string, any>>;
|
|
14
|
+
multi: import("yup/lib/mixed").MixedSchema<any, Record<string, any>, any>;
|
|
15
|
+
options: import("yup/lib/mixed").MixedSchema<any, Record<string, any>, any>;
|
|
16
|
+
}>>;
|
|
17
|
+
export declare const defaultValues: NavigationItemCustomField;
|
|
18
|
+
//# sourceMappingURL=form.d.ts.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defaultValues = exports.schemaFactory = void 0;
|
|
4
|
+
const yup_1 = require("yup");
|
|
5
|
+
const helper_plugin_1 = require("@strapi/helper-plugin");
|
|
6
|
+
const translations_1 = require("../../../translations");
|
|
7
|
+
const schemaFactory = (usedCustomFieldNames) => {
|
|
8
|
+
return (0, yup_1.object)({
|
|
9
|
+
name: (0, yup_1.string)().matches(/^\S+$/, "Invalid name string. Name cannot contain spaces").required(helper_plugin_1.translatedErrors.required).notOneOf(usedCustomFieldNames, helper_plugin_1.translatedErrors.unique),
|
|
10
|
+
label: (0, yup_1.string)().required(helper_plugin_1.translatedErrors.required),
|
|
11
|
+
type: (0, yup_1.mixed)().required(helper_plugin_1.translatedErrors.required).oneOf(['string', 'boolean', 'select'], (0, translations_1.getTradId)("notification.error.customField.type")),
|
|
12
|
+
required: (0, yup_1.bool)().required(helper_plugin_1.translatedErrors.required),
|
|
13
|
+
multi: (0, yup_1.mixed)().when('type', {
|
|
14
|
+
is: (val) => val === 'select',
|
|
15
|
+
then: (0, yup_1.bool)().required(helper_plugin_1.translatedErrors.required),
|
|
16
|
+
otherwise: (0, yup_1.bool)().notRequired()
|
|
17
|
+
}),
|
|
18
|
+
options: (0, yup_1.mixed)().when('type', {
|
|
19
|
+
is: (val) => val === 'select',
|
|
20
|
+
then: (0, yup_1.array)().of((0, yup_1.string)()),
|
|
21
|
+
otherwise: (0, yup_1.mixed)().notRequired(),
|
|
22
|
+
})
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
exports.schemaFactory = schemaFactory;
|
|
26
|
+
exports.defaultValues = {
|
|
27
|
+
name: "",
|
|
28
|
+
label: "",
|
|
29
|
+
type: "string",
|
|
30
|
+
required: false,
|
|
31
|
+
multi: false,
|
|
32
|
+
options: [],
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=form.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export function resolveGlobalLikeId(uid?: string): any;
|
|
2
2
|
export function resolveGlobalLikeId(uid?: string): any;
|
|
3
|
-
export function isContentTypeEligible(uid?: string, config?: {}): boolean
|
|
4
|
-
export function isContentTypeEligible(uid?: string, config?: {}): boolean
|
|
3
|
+
export function isContentTypeEligible(uid?: string, config?: {}): boolean;
|
|
4
|
+
export function isContentTypeEligible(uid?: string, config?: {}): boolean;
|
|
5
5
|
//# sourceMappingURL=functions.d.ts.map
|
|
@@ -19,7 +19,7 @@ module.exports = {
|
|
|
19
19
|
const { allowedContentTypes = [], restrictedContentTypes = [] } = config;
|
|
20
20
|
const isOneOfAllowedType = allowedContentTypes.filter(_ => uid.includes(_) || (uid === _)).length > 0;
|
|
21
21
|
const isNoneOfRestricted = restrictedContentTypes.filter(_ => uid.includes(_) || (uid === _)).length === 0;
|
|
22
|
-
return uid && isOneOfAllowedType && isNoneOfRestricted;
|
|
22
|
+
return !!uid && isOneOfAllowedType && isNoneOfRestricted;
|
|
23
23
|
},
|
|
24
24
|
};
|
|
25
25
|
//# sourceMappingURL=functions.js.map
|
|
@@ -1,57 +1,5 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { NavigationItemFormProps } from './types';
|
|
3
|
+
declare const NavigationItemForm: React.FC<NavigationItemFormProps>;
|
|
1
4
|
export default NavigationItemForm;
|
|
2
|
-
declare function NavigationItemForm({ config, availableLocale, isLoading: isPreloading, inputsPrefix, data, contentTypes, contentTypeEntities, usedContentTypeEntities, availableAudience, additionalFields, contentTypesNameFields, onSubmit, onCancel, getContentTypeEntities, usedContentTypesData, appendLabelPublicationStatus, locale, readNavigationItemFromLocale, }: {
|
|
3
|
-
config: any;
|
|
4
|
-
availableLocale: any;
|
|
5
|
-
isLoading: any;
|
|
6
|
-
inputsPrefix: any;
|
|
7
|
-
data?: {} | undefined;
|
|
8
|
-
contentTypes?: any[] | undefined;
|
|
9
|
-
contentTypeEntities?: any[] | undefined;
|
|
10
|
-
usedContentTypeEntities?: any[] | undefined;
|
|
11
|
-
availableAudience?: any[] | undefined;
|
|
12
|
-
additionalFields?: any[] | undefined;
|
|
13
|
-
contentTypesNameFields?: {} | undefined;
|
|
14
|
-
onSubmit: any;
|
|
15
|
-
onCancel: any;
|
|
16
|
-
getContentTypeEntities: any;
|
|
17
|
-
usedContentTypesData: any;
|
|
18
|
-
appendLabelPublicationStatus?: (() => string) | undefined;
|
|
19
|
-
locale: any;
|
|
20
|
-
readNavigationItemFromLocale: any;
|
|
21
|
-
}): JSX.Element;
|
|
22
|
-
declare namespace NavigationItemForm {
|
|
23
|
-
namespace defaultProps {
|
|
24
|
-
const fieldsToDisable: never[];
|
|
25
|
-
const formErrors: {};
|
|
26
|
-
const inputsPrefix: string;
|
|
27
|
-
function onSubmit(e: any): any;
|
|
28
|
-
const requestError: null;
|
|
29
|
-
}
|
|
30
|
-
namespace propTypes {
|
|
31
|
-
export const config: PropTypes.Validator<object>;
|
|
32
|
-
export const availableLocale: PropTypes.Requireable<(string | null | undefined)[]>;
|
|
33
|
-
export const isLoading: PropTypes.Requireable<boolean>;
|
|
34
|
-
const fieldsToDisable_1: PropTypes.Requireable<any[]>;
|
|
35
|
-
export { fieldsToDisable_1 as fieldsToDisable };
|
|
36
|
-
const formErrors_1: PropTypes.Validator<object>;
|
|
37
|
-
export { formErrors_1 as formErrors };
|
|
38
|
-
const inputsPrefix_1: PropTypes.Requireable<string>;
|
|
39
|
-
export { inputsPrefix_1 as inputsPrefix };
|
|
40
|
-
export const data: PropTypes.Validator<object>;
|
|
41
|
-
const onSubmit_1: PropTypes.Requireable<(...args: any[]) => any>;
|
|
42
|
-
export { onSubmit_1 as onSubmit };
|
|
43
|
-
const requestError_1: PropTypes.Requireable<object>;
|
|
44
|
-
export { requestError_1 as requestError };
|
|
45
|
-
export const contentTypes: PropTypes.Requireable<any[]>;
|
|
46
|
-
export const contentTypeEntities: PropTypes.Requireable<any[]>;
|
|
47
|
-
export const usedContentTypeEntities: PropTypes.Requireable<any[]>;
|
|
48
|
-
export const availableAudience: PropTypes.Requireable<any[]>;
|
|
49
|
-
export const additionalFields: PropTypes.Requireable<any[]>;
|
|
50
|
-
export const getContentTypeEntities: PropTypes.Validator<(...args: any[]) => any>;
|
|
51
|
-
export const appendLabelPublicationStatus: PropTypes.Requireable<(...args: any[]) => any>;
|
|
52
|
-
export const onCancel: PropTypes.Requireable<(...args: any[]) => any>;
|
|
53
|
-
export const readNavigationItemFromLocale: PropTypes.Validator<(...args: any[]) => any>;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
import PropTypes from "prop-types";
|
|
57
5
|
//# sourceMappingURL=index.d.ts.map
|