@strapi/admin 4.7.2-exp.24dd7d95972fa822bf43e9b095b51027402c229e → 4.8.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/admin/src/content-manager/components/ComponentInitializer/index.js +1 -1
- package/admin/src/content-manager/components/EditViewDataManagerProvider/index.js +3 -31
- package/admin/src/content-manager/components/EditViewDataManagerProvider/reducer.js +65 -134
- package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/findAllAndReplace.js +85 -0
- package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/index.js +1 -2
- package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/schema.js +7 -1
- package/admin/src/content-manager/components/NonRepeatableComponent/index.js +1 -1
- package/admin/src/content-manager/components/RelationInput/RelationInput.js +1 -2
- package/admin/src/content-manager/components/RelationInputDataManager/RelationInputDataManager.js +39 -33
- package/admin/src/content-manager/hooks/useRelation/useRelation.js +2 -2
- package/admin/src/content-manager/pages/EditView/Header/index.js +1 -1
- package/admin/src/content-manager/utils/createDefaultForm.js +0 -8
- package/admin/src/pages/AuthPage/components/Register/index.js +1 -1
- package/admin/src/pages/SettingsPage/components/Tokens/FormHead/index.js +1 -0
- package/admin/src/pages/SettingsPage/components/Tokens/Table/index.js +2 -2
- package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/schema.js +1 -1
- package/admin/src/pages/SettingsPage/pages/Roles/CreatePage/index.js +266 -4
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/ActionRow/index.js +1 -2
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/Collapse/index.js +2 -3
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/ActionRow/index.js +2 -3
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/SubActionRow/index.js +2 -3
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/GlobalActions/index.js +9 -4
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PluginsAndSettings/SubCategory/index.js +3 -7
- package/admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js +303 -124
- package/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/utils/schema.js +1 -1
- package/admin/src/pages/SettingsPage/utils/defaultRoutes.js +18 -10
- package/admin/src/translations/ca.json +7 -13
- package/admin/src/translations/de.json +0 -6
- package/admin/src/translations/dk.json +0 -6
- package/admin/src/translations/en.json +0 -6
- package/admin/src/translations/es.json +0 -6
- package/admin/src/translations/eu.json +165 -171
- package/admin/src/translations/fr.json +0 -6
- package/admin/src/translations/gu.json +0 -6
- package/admin/src/translations/he.json +0 -6
- package/admin/src/translations/hi.json +0 -6
- package/admin/src/translations/hu.json +0 -6
- package/admin/src/translations/id.json +0 -6
- package/admin/src/translations/it.json +0 -6
- package/admin/src/translations/ja.json +0 -6
- package/admin/src/translations/ko.json +0 -6
- package/admin/src/translations/ml.json +0 -6
- package/admin/src/translations/nl.json +0 -6
- package/admin/src/translations/no.json +0 -6
- package/admin/src/translations/pl.json +0 -6
- package/admin/src/translations/pt-BR.json +0 -6
- package/admin/src/translations/ru.json +0 -6
- package/admin/src/translations/sa.json +0 -6
- package/admin/src/translations/sk.json +0 -6
- package/admin/src/translations/sv.json +0 -6
- package/admin/src/translations/th.json +0 -6
- package/admin/src/translations/tr.json +0 -6
- package/admin/src/translations/zh-Hans.json +0 -6
- package/admin/src/translations/zh.json +0 -6
- package/build/{4649.daa290f6.chunk.js → 4649.33220ac3.chunk.js} +2 -2
- package/build/{6891.ef7464be.chunk.js → 7112.2bf13da3.chunk.js} +6 -6
- package/build/7259.3675c199.chunk.js +1 -0
- package/build/{3094.1cac9087.chunk.js → 8580.0aa21940.chunk.js} +5 -5
- package/build/{Admin-authenticatedApp.884faefa.chunk.js → Admin-authenticatedApp.5abacdd4.chunk.js} +4 -4
- package/build/Admin_settingsPage.caf3b9ab.chunk.js +9 -0
- package/build/{admin-app.d9d96db4.chunk.js → admin-app.4b313104.chunk.js} +2 -2
- package/build/admin-edit-roles-page.3b196317.chunk.js +216 -0
- package/build/{admin-edit-users.48031e30.chunk.js → admin-edit-users.af3b0f15.chunk.js} +1 -1
- package/build/admin-roles-list.0ad504a7.chunk.js +2 -0
- package/build/{admin-users.77b4188a.chunk.js → admin-users.af8c3123.chunk.js} +1 -1
- package/build/api-tokens-list-page.93f24348.chunk.js +16 -0
- package/build/ca-json.43e14418.chunk.js +1 -0
- package/build/content-manager.84afc839.chunk.js +1139 -0
- package/build/{content-type-builder.cdd117c3.chunk.js → content-type-builder.55dac849.chunk.js} +1 -1
- package/build/de-json.fcac7381.chunk.js +1 -0
- package/build/dk-json.e34cad0d.chunk.js +1 -0
- package/build/{en-json.e688dfe2.chunk.js → en-json.01a88a30.chunk.js} +1 -1
- package/build/es-json.715b6fd8.chunk.js +1 -0
- package/build/eu-json.fb17c8f9.chunk.js +1 -0
- package/build/fr-json.f66c3211.chunk.js +1 -0
- package/build/gu-json.4d667d0c.chunk.js +1 -0
- package/build/{he-json.f0de8cdb.chunk.js → he-json.3cf0b48a.chunk.js} +1 -1
- package/build/{hi-json.14a17920.chunk.js → hi-json.323be97d.chunk.js} +1 -1
- package/build/{hu-json.33172d09.chunk.js → hu-json.fe71e6c8.chunk.js} +1 -1
- package/build/id-json.41e07c46.chunk.js +1 -0
- package/build/index.html +1 -1
- package/build/it-json.bfe27ed8.chunk.js +1 -0
- package/build/ja-json.81b6d1e3.chunk.js +1 -0
- package/build/ko-json.4539f4ba.chunk.js +1 -0
- package/build/main.5b92c1d6.js +3809 -0
- package/build/{ml-json.3e69969b.chunk.js → ml-json.8988e374.chunk.js} +1 -1
- package/build/{nl-json.641782d5.chunk.js → nl-json.98345913.chunk.js} +1 -1
- package/build/{no-json.9b3cd181.chunk.js → no-json.19a2dbfa.chunk.js} +1 -1
- package/build/pl-json.59a5dab3.chunk.js +1 -0
- package/build/pt-BR-json.9410688b.chunk.js +1 -0
- package/build/{ru-json.c4a4f50b.chunk.js → ru-json.6a01cea6.chunk.js} +1 -1
- package/build/runtime~main.0bf1f619.js +2 -0
- package/build/sa-json.6359a11c.chunk.js +1 -0
- package/build/sk-json.2374f129.chunk.js +1 -0
- package/build/{sv-json.207afc0d.chunk.js → sv-json.ae6e71ea.chunk.js} +1 -1
- package/build/th-json.5f659396.chunk.js +1 -0
- package/build/{tr-json.f1a0d19d.chunk.js → tr-json.bac5dbd3.chunk.js} +1 -1
- package/build/transfer-tokens-list-page.ce37354b.chunk.js +16 -0
- package/build/zh-Hans-json.4c9706a6.chunk.js +1 -0
- package/build/{zh-json.085a34f4.chunk.js → zh-json.3529f1e5.chunk.js} +1 -1
- package/ee/server/controllers/index.js +0 -1
- package/ee/server/controllers/role.js +0 -39
- package/ee/server/controllers/user.js +1 -35
- package/ee/server/routes/index.js +0 -49
- package/ee/server/validation/role.js +28 -20
- package/package.json +13 -13
- package/server/bootstrap.js +0 -1
- package/server/controllers/api-token.js +4 -2
- package/server/controllers/permission.js +2 -4
- package/server/controllers/role.js +70 -23
- package/server/controllers/transfer/runner.js +5 -3
- package/server/domain/user.js +3 -0
- package/server/routes/roles.js +48 -0
- package/server/services/permission/permissions-manager/sanitize.js +2 -2
- package/server/services/permission/queries.js +1 -74
- package/server/strategies/data-transfer.js +3 -1
- package/server/validation/permission.js +1 -82
- package/server/validation/role.js +44 -0
- package/admin/src/assets/images/hot-air-balloon.png +0 -0
- package/admin/src/assets/images/upgrade-details.png +0 -0
- package/admin/src/components/UpgradePlanModal/index.js +0 -123
- package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/findLeafByPathAndReplace.js +0 -51
- package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/recursivelyFindPathsBasedOnCondition.js +0 -79
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/ActionRow/utils/constants.js +0 -3
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/Collapse/utils/constants.js +0 -3
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/ActionRow/utils/constants.js +0 -3
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/SubActionRow/utils/constants.js +0 -3
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/GlobalActions/utils/constants.js +0 -3
- package/admin/src/pages/SettingsPage/pages/Roles/EditPage/components/PluginsAndSettings/SubCategory/utils/constants.js +0 -3
- package/build/617f9c948fa79e6d73bd.png +0 -0
- package/build/6d21938306785f176538.png +0 -0
- package/build/7259.63e91b59.chunk.js +0 -1
- package/build/Admin_settingsPage.6814a96e.chunk.js +0 -177
- package/build/admin-edit-roles-page.bf130aaf.chunk.js +0 -1
- package/build/api-tokens-list-page.149903c8.chunk.js +0 -16
- package/build/ca-json.59c4502c.chunk.js +0 -1
- package/build/content-manager.d792c194.chunk.js +0 -1139
- package/build/de-json.dbc2cf1b.chunk.js +0 -1
- package/build/dk-json.52f67b15.chunk.js +0 -1
- package/build/es-json.c40c57dd.chunk.js +0 -1
- package/build/eu-json.6702a0d2.chunk.js +0 -1
- package/build/fr-json.ea9ec573.chunk.js +0 -1
- package/build/gu-json.94f0d242.chunk.js +0 -1
- package/build/id-json.e0d83d41.chunk.js +0 -1
- package/build/it-json.8be59205.chunk.js +0 -1
- package/build/ja-json.3008b720.chunk.js +0 -1
- package/build/ko-json.7d2f95b1.chunk.js +0 -1
- package/build/main.64fe0c37.js +0 -3928
- package/build/pl-json.05814145.chunk.js +0 -1
- package/build/pt-BR-json.d72350de.chunk.js +0 -1
- package/build/runtime~main.684b5fed.js +0 -2
- package/build/sa-json.e5e7ccaf.chunk.js +0 -1
- package/build/sk-json.3529b8aa.chunk.js +0 -1
- package/build/th-json.f664b96d.chunk.js +0 -1
- package/build/transfer-tokens-list-page.c6f8039a.chunk.js +0 -16
- package/build/zh-Hans-json.993d085f.chunk.js +0 -1
- package/ee/admin/pages/SettingsPage/pages/Roles/CreatePage/index.js +0 -270
- package/ee/admin/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/ActionRow/utils/constants.js +0 -3
- package/ee/admin/pages/SettingsPage/pages/Roles/EditPage/components/ConditionsModal/ConditionsSelect/MenuList/utils/constants.js +0 -3
- package/ee/admin/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/Collapse/utils/constants.js +0 -3
- package/ee/admin/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/ActionRow/utils/constants.js +0 -3
- package/ee/admin/pages/SettingsPage/pages/Roles/EditPage/components/ContentTypeCollapse/CollapsePropertyMatrix/SubActionRow/utils/constants.js +0 -3
- package/ee/admin/pages/SettingsPage/pages/Roles/EditPage/components/GlobalActions/utils/constants.js +0 -3
- package/ee/admin/pages/SettingsPage/pages/Roles/EditPage/components/PluginsAndSettings/SubCategory/utils/constants.js +0 -3
- package/ee/admin/pages/SettingsPage/pages/Roles/ListPage/index.js +0 -376
- package/ee/admin/pages/SettingsPage/pages/Roles/ProtectedListPage/index.js +0 -12
- package/ee/server/controllers/permission.js +0 -21
- package/ee/server/validation/permission.js +0 -8
- package/server/domain/role.js +0 -29
- /package/{ee/admin → admin/src}/pages/SettingsPage/pages/Roles/CreatePage/utils/schema.js +0 -0
- /package/{ee/admin → admin/src}/pages/SettingsPage/pages/Roles/ListPage/reducer.js +0 -0
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
|
-
import styled from 'styled-components';
|
|
4
|
-
import { useIntl } from 'react-intl';
|
|
5
|
-
import { Portal, FocusTrap, IconButton, Box, Flex, Typography } from '@strapi/design-system';
|
|
6
|
-
import { LinkButton } from '@strapi/design-system/v2';
|
|
7
|
-
import { ExternalLink, Cross } from '@strapi/icons';
|
|
8
|
-
import { setHexOpacity, useLockScroll } from '@strapi/helper-plugin';
|
|
9
|
-
import AirBalloon from '../../assets/images/hot-air-balloon.png';
|
|
10
|
-
import BigArrow from '../../assets/images/upgrade-details.png';
|
|
11
|
-
|
|
12
|
-
const UpgradeWrapper = styled.div`
|
|
13
|
-
position: absolute;
|
|
14
|
-
z-index: 3;
|
|
15
|
-
inset: 0;
|
|
16
|
-
background: ${({ theme }) => setHexOpacity(theme.colors.neutral800, 0.2)};
|
|
17
|
-
padding: 0 ${({ theme }) => theme.spaces[8]};
|
|
18
|
-
`;
|
|
19
|
-
|
|
20
|
-
const UpgradeContainer = styled(Flex)`
|
|
21
|
-
position: relative;
|
|
22
|
-
max-width: ${830 / 16}rem;
|
|
23
|
-
height: ${415 / 16}rem;
|
|
24
|
-
margin: 0 auto;
|
|
25
|
-
overflow: hidden;
|
|
26
|
-
margin-top: 10%;
|
|
27
|
-
padding-left: ${64 / 16}rem;
|
|
28
|
-
|
|
29
|
-
img:first-of-type {
|
|
30
|
-
position: absolute;
|
|
31
|
-
right: 0;
|
|
32
|
-
top: 0;
|
|
33
|
-
max-width: ${360 / 16}rem;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
img:not(:first-of-type) {
|
|
37
|
-
width: ${130 / 16}rem;
|
|
38
|
-
margin-left: 12%;
|
|
39
|
-
margin-right: ${20 / 16}rem;
|
|
40
|
-
z-index: 0;
|
|
41
|
-
}
|
|
42
|
-
`;
|
|
43
|
-
|
|
44
|
-
const FlexStart = styled(Flex)`
|
|
45
|
-
max-width: ${400 / 16}rem;
|
|
46
|
-
z-index: 0;
|
|
47
|
-
`;
|
|
48
|
-
|
|
49
|
-
const CloseButtonContainer = styled(Box)`
|
|
50
|
-
position: absolute;
|
|
51
|
-
right: ${({ theme }) => theme.spaces[4]};
|
|
52
|
-
top: ${({ theme }) => theme.spaces[4]};
|
|
53
|
-
`;
|
|
54
|
-
|
|
55
|
-
const UpgradePlanModal = ({ onClose, isOpen }) => {
|
|
56
|
-
useLockScroll(isOpen);
|
|
57
|
-
const { formatMessage } = useIntl();
|
|
58
|
-
|
|
59
|
-
if (!isOpen) {
|
|
60
|
-
return null;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
return (
|
|
64
|
-
<Portal>
|
|
65
|
-
<UpgradeWrapper onClick={onClose}>
|
|
66
|
-
<FocusTrap onEscape={onClose}>
|
|
67
|
-
<UpgradeContainer
|
|
68
|
-
onClick={(e) => e.stopPropagation()}
|
|
69
|
-
aria-labelledby="upgrade-plan"
|
|
70
|
-
background="neutral0"
|
|
71
|
-
hasRadius
|
|
72
|
-
>
|
|
73
|
-
<img src={AirBalloon} alt="air-balloon" />
|
|
74
|
-
<CloseButtonContainer>
|
|
75
|
-
<IconButton onClick={onClose} aria-label="Close" icon={<Cross />} />
|
|
76
|
-
</CloseButtonContainer>
|
|
77
|
-
<FlexStart direction="column" alignItems="flex-start" gap={6}>
|
|
78
|
-
<Typography fontWeight="bold" textColor="primary600">
|
|
79
|
-
{formatMessage({
|
|
80
|
-
id: 'app.components.UpgradePlanModal.text-ce',
|
|
81
|
-
defaultMessage: 'COMMUNITY EDITION',
|
|
82
|
-
})}
|
|
83
|
-
</Typography>
|
|
84
|
-
<Flex direction="column" alignItems="stretch" gap={2}>
|
|
85
|
-
<Typography variant="alpha" as="h2" id="upgrade-plan">
|
|
86
|
-
{formatMessage({
|
|
87
|
-
id: 'app.components.UpgradePlanModal.limit-reached',
|
|
88
|
-
defaultMessage: 'You have reached the limit',
|
|
89
|
-
})}
|
|
90
|
-
</Typography>
|
|
91
|
-
<Typography>
|
|
92
|
-
{formatMessage({
|
|
93
|
-
id: 'app.components.UpgradePlanModal.text-power',
|
|
94
|
-
defaultMessage:
|
|
95
|
-
'Unlock the full power of Strapi by upgrading your plan to the Enterprise Edition',
|
|
96
|
-
})}
|
|
97
|
-
</Typography>
|
|
98
|
-
</Flex>
|
|
99
|
-
<LinkButton
|
|
100
|
-
href="https://strapi.io/pricing-self-hosted"
|
|
101
|
-
isExternal
|
|
102
|
-
endIcon={<ExternalLink />}
|
|
103
|
-
>
|
|
104
|
-
{formatMessage({
|
|
105
|
-
id: 'app.components.UpgradePlanModal.button',
|
|
106
|
-
defaultMessage: 'Learn more',
|
|
107
|
-
})}
|
|
108
|
-
</LinkButton>
|
|
109
|
-
</FlexStart>
|
|
110
|
-
<img src={BigArrow} alt="upgrade-arrow" />
|
|
111
|
-
</UpgradeContainer>
|
|
112
|
-
</FocusTrap>
|
|
113
|
-
</UpgradeWrapper>
|
|
114
|
-
</Portal>
|
|
115
|
-
);
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
UpgradePlanModal.propTypes = {
|
|
119
|
-
onClose: PropTypes.func.isRequired,
|
|
120
|
-
isOpen: PropTypes.bool.isRequired,
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
export default UpgradePlanModal;
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import set from 'lodash/set';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @param {string} endpath – the final path that you're looking to replace
|
|
5
|
-
* @returns {function} findLeafReducer – a function that will be used in the reduce
|
|
6
|
-
*/
|
|
7
|
-
export const findLeafByPathAndReplace = (endpath, replaceWith) => {
|
|
8
|
-
/**
|
|
9
|
-
* @param {object} acc – the data tree
|
|
10
|
-
* @param {*} curr – string, this _could_ be used to index the accumulator
|
|
11
|
-
* @param {*} ind - your current index of the array you're reducing
|
|
12
|
-
* @returns {object} – the new object with the replaced values
|
|
13
|
-
*/
|
|
14
|
-
const findLeafAndReplace = (acc, curr, ind, currentArr) => {
|
|
15
|
-
/**
|
|
16
|
-
* Because we're returning the `accumulator[current]` at the bottom
|
|
17
|
-
* and some components may not exist at this point, we check if `accumulator`
|
|
18
|
-
* exists before trying to access & replace properties.
|
|
19
|
-
*/
|
|
20
|
-
if (!acc) return acc;
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* If this is the last item in the array of paths
|
|
24
|
-
* then we assume it's a leaf and we can replace it.
|
|
25
|
-
*/
|
|
26
|
-
if (ind === currentArr.length - 1 && endpath === curr) {
|
|
27
|
-
set(acc, curr, replaceWith);
|
|
28
|
-
|
|
29
|
-
return acc;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* If the value of the accumulator[current] is an array
|
|
34
|
-
* then we need to loop over it and call the reducer again
|
|
35
|
-
* this time with each array item being the accumulator.
|
|
36
|
-
*/
|
|
37
|
-
if (Array.isArray(acc[curr])) {
|
|
38
|
-
acc[curr].forEach((item) => {
|
|
39
|
-
currentArr.slice(ind + 1).reduce(findLeafAndReplace, item);
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* accumulator[current]return accumulator[current] instead of the main accumulator,
|
|
45
|
-
* this will stop the same keys overwrite the wrong objects
|
|
46
|
-
*/
|
|
47
|
-
return acc[curr];
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
return findLeafAndReplace;
|
|
51
|
-
};
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @typedef Attribute
|
|
3
|
-
* @type { { type: string }}
|
|
4
|
-
*
|
|
5
|
-
* @typedef Attributes
|
|
6
|
-
* @type {{ [key: string]: Attribute }}
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* This function will recursively find all the paths in the `currentContentTypeLayout.attributes`
|
|
11
|
-
* based on the boolean return of the condition e.g. `type === 'relation'`.
|
|
12
|
-
*
|
|
13
|
-
* It's original use was for the preperation of action items for the INIT_FORM action. It requires
|
|
14
|
-
* knowledge of the `components` in the entity, however `components` doesn't change nor does the predicate
|
|
15
|
-
* function so we don't need to pass it everytime hence why it's curried.
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* @param {{[key: string]: { attributes: Attributes }}} components
|
|
19
|
-
* @param {(value: Attribute) => boolean} predicate
|
|
20
|
-
* @returns {(attributes: Attributes) => string[]}
|
|
21
|
-
*/
|
|
22
|
-
const recursivelyFindPathsBasedOnConditionSetup = (components, predicate = () => false) => {
|
|
23
|
-
/**
|
|
24
|
-
*
|
|
25
|
-
* @param {Attributes} attributes
|
|
26
|
-
* @returns {string[]}
|
|
27
|
-
*/
|
|
28
|
-
const recursivelyFindPathsBasedOnCondition = (attributes) => {
|
|
29
|
-
return Object.entries(attributes).reduce((acc, [key, value]) => {
|
|
30
|
-
if (predicate(value)) {
|
|
31
|
-
acc = [...acc, key];
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
if (value.type === 'component') {
|
|
35
|
-
const componentAttributes = components[value.component].attributes;
|
|
36
|
-
|
|
37
|
-
const attributesInComponent = recursivelyFindPathsBasedOnCondition(componentAttributes);
|
|
38
|
-
|
|
39
|
-
const attributesInComponentPaths = attributesInComponent.map((path) => `${key}.${path}`);
|
|
40
|
-
|
|
41
|
-
acc = [...acc, attributesInComponentPaths];
|
|
42
|
-
} else if (value.type === 'dynamiczone') {
|
|
43
|
-
const dynamicComponents = value.components;
|
|
44
|
-
|
|
45
|
-
const attributesInDynamicComponents = dynamicComponents
|
|
46
|
-
.flatMap((componentName) => {
|
|
47
|
-
return recursivelyFindPathsBasedOnCondition({
|
|
48
|
-
[componentName]: { type: 'component', component: componentName },
|
|
49
|
-
/**
|
|
50
|
-
* DynamicZones are an array of components, therefore the componentName shouldn't
|
|
51
|
-
* be part of the path because it's not a property of the component.
|
|
52
|
-
*
|
|
53
|
-
* e.g. { dynamic_zone: [{ __component: 'basic.simple', id: 36, my_name: null, categories: { count: 1, } }] }
|
|
54
|
-
* where the path to `id` is `dynamic_zone.id` and not `dynamic_zone.basic.simple.id`
|
|
55
|
-
*
|
|
56
|
-
* NOTE: we don't need to know the path to the `array` because it's about data shape not about the actual data
|
|
57
|
-
*/
|
|
58
|
-
}).map((path) => {
|
|
59
|
-
return path.split(`${componentName}.`)[1];
|
|
60
|
-
});
|
|
61
|
-
})
|
|
62
|
-
/**
|
|
63
|
-
* We filter because this will give you `dynamiczone.undefined` because the dynamic_zone component
|
|
64
|
-
* is not required to be returned in this circumstance.
|
|
65
|
-
*/
|
|
66
|
-
.filter((path) => Boolean(path))
|
|
67
|
-
.map((path) => `${key}.${path}`);
|
|
68
|
-
|
|
69
|
-
acc = [...acc, attributesInDynamicComponents];
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return acc.flat();
|
|
73
|
-
}, []);
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
return recursivelyFindPathsBasedOnCondition;
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
export { recursivelyFindPathsBasedOnConditionSetup as recursivelyFindPathsBasedOnCondition };
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[7259],{30493:function(k,E,e){e.d(E,{Z:function(){return g}});var t=e(32735),u=e(5636),s=e(60216),a=e.n(s),o=e(13478),i=e(57269),r=e(39161),l=e(8888);const c=({onRegenerate:d,idToRegenerate:n,backUrl:m})=>{const{formatMessage:M}=(0,u.useIntl)(),[R,O]=(0,t.useState)(!1),{regenerateData:_,isLoadingConfirmation:A}=(0,l.rW)(m,n,d),D=async()=>{_(),O(!1)};return t.createElement(t.Fragment,null,t.createElement(r.Button,{startIcon:t.createElement(i.Refresh,null),type:"button",size:"S",variant:"tertiary",onClick:()=>O(!0),name:"regenerate"},M({id:"Settings.tokens.regenerate",defaultMessage:"Regenerate"})),t.createElement(o.ConfirmDialog,{bodyText:{id:"Settings.tokens.popUpWarning.message",defaultMessage:"Are you sure you want to regenerate this token?"},iconRightButton:t.createElement(i.Refresh,null),isConfirmButtonLoading:A,isOpen:R,onToggleDialog:()=>O(!1),onConfirm:D,leftButtonText:{id:"Settings.tokens.Button.cancel",defaultMessage:"Cancel"},rightButtonText:{id:"Settings.tokens.Button.regenerate",defaultMessage:"Regenerate"},title:{id:"Settings.tokens.RegenerateDialog.title",defaultMessage:"Regenerate token"}}))};c.defaultProps={onRegenerate(){}},c.propTypes={onRegenerate:a().func,idToRegenerate:a().oneOfType([a().number,a().string]).isRequired,backUrl:a().string.isRequired};var f=c;const p=({title:d,token:n,setToken:m,canEditInputs:M,canRegenerate:R,isSubmitting:O,backUrl:_,regenerateUrl:A})=>{const{formatMessage:D}=(0,u.useIntl)(),S=F=>{m({...n,accessKey:F})};return t.createElement(r.HeaderLayout,{title:n?.name||D(d),primaryAction:M?t.createElement(r.Flex,{gap:2},R&&n?.id&&t.createElement(f,{backUrl:A,onRegenerate:S,idToRegenerate:n?.id}),t.createElement(r.Button,{disabled:O,loading:O,startIcon:t.createElement(i.Check,null),type:"submit",size:"S"},D({id:"global.save",defaultMessage:"Save"}))):R&&n?.id&&t.createElement(f,{onRegenerate:S,idToRegenerate:n?.id,backUrl:A}),navigationAction:t.createElement(o.Link,{startIcon:t.createElement(i.ArrowLeft,null),to:_},D({id:"global.back",defaultMessage:"Back"}))})};p.propTypes={token:a().shape({id:a().oneOfType([a().number,a().string]),type:a().string,lifespan:a().oneOfType([a().number,a().string]),name:a().string,accessKey:a().string,permissions:a().array,description:a().string,createdAt:a().string}),canEditInputs:a().bool.isRequired,canRegenerate:a().bool.isRequired,setToken:a().func.isRequired,isSubmitting:a().bool.isRequired,backUrl:a().string.isRequired,title:a().shape({id:a().string,label:a().string}).isRequired,regenerateUrl:a().string.isRequired},p.defaultProps={token:void 0};var g=p},4321:function(k,E,e){var t=e(32735),u=e(60216),s=e.n(u),a=e(5636),o=e(39161),i=e.n(o),r=e(37944);const l=({token:c,errors:f,values:p,onChange:g,isCreating:d})=>{const{formatMessage:n}=(0,a.useIntl)();return t.createElement(t.Fragment,null,t.createElement(o.Select,{name:"lifespan",label:n({id:"Settings.tokens.form.duration",defaultMessage:"Token duration"}),value:p.lifespan!==null?p.lifespan:"0",error:f.lifespan?n(f.lifespan?.id?f.lifespan:{id:f.lifespan,defaultMessage:f.lifespan}):null,onChange:m=>{g({target:{name:"lifespan",value:m}})},required:!0,disabled:!d,placeholder:"Select"},t.createElement(o.Option,{value:"604800000"},n({id:"Settings.tokens.duration.7-days",defaultMessage:"7 days"})),t.createElement(o.Option,{value:"2592000000"},n({id:"Settings.tokens.duration.30-days",defaultMessage:"30 days"})),t.createElement(o.Option,{value:"7776000000"},n({id:"Settings.tokens.duration.90-days",defaultMessage:"90 days"})),t.createElement(o.Option,{value:"0"},n({id:"Settings.tokens.duration.unlimited",defaultMessage:"Unlimited"}))),t.createElement(o.Typography,{variant:"pi",textColor:"neutral600"},!d&&`${n({id:"Settings.tokens.duration.expiration-date",defaultMessage:"Expiration date"})}: ${(0,r.IX)(c?.createdAt,parseInt(p.lifespan,10))}`))};l.propTypes={errors:s().shape({lifespan:s().string}),onChange:s().func.isRequired,values:s().shape({lifespan:s().oneOfType([s().number,s().string])}).isRequired,isCreating:s().bool.isRequired,token:s().shape({id:s().oneOfType([s().number,s().string]),type:s().string,lifespan:s().string,name:s().string,accessKey:s().string,permissions:s().array,description:s().string,createdAt:s().string})},l.defaultProps={errors:{},token:{}},E.Z=l},93682:function(k,E,e){var t=e(32735),u=e(5636),s=e(13478),a=e.n(s),o=e(39161),i=e.n(o),r=e(57269),l=e.n(r),c=e(60216),f=e.n(c),p=e(59087),g=e.n(p);const d=({token:n,tokenType:m})=>{const{formatMessage:M}=(0,u.useIntl)(),R=(0,s.useNotification)(),{trackUsage:O}=(0,s.useTracking)(),_=(0,t.useRef)(O);return t.createElement(s.ContentBox,{endAction:n&&t.createElement("span",{style:{alignSelf:"start"}},t.createElement(p.CopyToClipboard,{onCopy:()=>{_.current("didCopyTokenKey",{tokenType:m}),R({type:"success",message:{id:"Settings.tokens.notification.copied"}})},text:n},t.createElement(o.IconButton,{label:M({id:"app.component.CopyToClipboard.label",defaultMessage:"Copy to clipboard"}),noBorder:!0,icon:t.createElement(r.Duplicate,null),style:{padding:0,height:"1rem"}}))),title:n||M({id:"Settings.tokens.copy.editTitle",defaultMessage:"This token isn\u2019t accessible anymore."}),subtitle:M(n?{id:"Settings.tokens.copy.lastWarning",defaultMessage:"Make sure to copy this token, you won\u2019t be able to see it again!"}:{id:"Settings.tokens.copy.editMessage",defaultMessage:"For security reasons, you can only see your token once."}),icon:t.createElement(r.Key,null),iconBackground:"neutral100"})};d.defaultProps={token:null},d.propTypes={token:f().string,tokenType:f().string.isRequired},E.Z=d},42789:function(k,E,e){var t=e(32735),u=e(60216),s=e.n(u),a=e(5636),o=e(39161),i=e.n(o);const r=({errors:l,values:c,onChange:f,canEditInputs:p})=>{const{formatMessage:g}=(0,a.useIntl)();return t.createElement(o.Textarea,{label:g({id:"Settings.tokens.form.description",defaultMessage:"Description"}),name:"description",error:l.description?g(l.description?.id?l.description:{id:l.description,defaultMessage:l.description}):null,onChange:f,disabled:!p},c.description)};r.propTypes={errors:s().shape({description:s().string}),onChange:s().func.isRequired,canEditInputs:s().bool.isRequired,values:s().shape({description:s().string}).isRequired},r.defaultProps={errors:{}},E.Z=r},8377:function(k,E,e){var t=e(32735),u=e(60216),s=e.n(u),a=e(5636),o=e(39161),i=e.n(o);const r=({errors:l,values:c,onChange:f,canEditInputs:p})=>{const{formatMessage:g}=(0,a.useIntl)();return t.createElement(o.TextInput,{name:"name",error:l.name?g(l.name?.id?l.name:{id:l.name,defaultMessage:l.name}):null,label:g({id:"Settings.tokens.form.name",defaultMessage:"Name"}),onChange:f,value:c.name,disabled:!p,required:!0})};r.propTypes={errors:s().shape({name:s().string}),onChange:s().func.isRequired,canEditInputs:s().bool.isRequired,values:s().shape({name:s().string}).isRequired},r.defaultProps={errors:{}},E.Z=r},68774:function(k,E,e){e.d(E,{Z:function(){return t},f:function(){return u}});const t="api-token",u="transfer-token"},37944:function(k,E,e){e.d(E,{IX:function(){return a},fK:function(){return l},mk:function(){return p}});var t=e(64213),u=e(54049),a=(g,d,n="en")=>{if(d&&typeof d=="number"){const m=d/24/60/60/1e3;return(0,t.format)((0,t.addDays)(new Date(g),m),"PPP",{locale:u[n]})}return"Unlimited"},o=e(5173),i=e(13478),l=o.Ry().shape({name:o.Z_(i.translatedErrors.string).required(i.translatedErrors.required),type:o.Z_(i.translatedErrors.string).oneOf(["read-only","full-access","custom"]).required(i.translatedErrors.required),description:o.Z_().nullable(),lifespan:o.Rx().integer().min(0).nullable().defined(i.translatedErrors.required)}),c=e(92891),p=g=>{const d={allActionsIds:[],permissions:[]};return d.permissions=Object.keys(g).map(n=>({apiId:n,label:n.split("::")[1],controllers:(0,c.flatten)(Object.keys(g[n].controllers).map(m=>({controller:m,actions:(0,c.flatten)(g[n].controllers[m].map(M=>{const R=`${n}.${m}.${M}`;return n.includes("api::")&&d.allActionsIds.push(R),{action:M,actionId:R}}))})))})),d}},37259:function(k,E,e){e.d(E,{Z:function(){return G}});var t=e(32735),u=e(5636),s=e(83281),a=e(5141),o=e(84968),i=e(13478),r=e(39161),l=e(64421),c=e(5173),p=c.Ry().shape({name:c.Z_(i.translatedErrors.string).required(i.translatedErrors.required),description:c.Z_().nullable(),lifespan:c.Rx().integer().min(0).nullable().defined(i.translatedErrors.required)}),g=e(57269),d=e(60216),n=e.n(d);const m=({transferTokenName:C})=>{const{formatMessage:h}=(0,u.useIntl)();return(0,i.useFocusWhenNavigate)(),t.createElement(r.Main,{"aria-busy":"true"},t.createElement(i.SettingsPageTitle,{name:"Transfer Tokens"}),t.createElement(r.HeaderLayout,{primaryAction:t.createElement(r.Button,{disabled:!0,startIcon:t.createElement(g.Check,null),type:"button",size:"L"},h({id:"global.save",defaultMessage:"Save"})),title:C||h({id:"Settings.transferTokens.createPage.title",defaultMessage:"Create Transfer Token"})}),t.createElement(r.ContentLayout,null,t.createElement(i.LoadingIndicatorPage,null)))};m.defaultProps={transferTokenName:null},m.propTypes={transferTokenName:n().string};var M=m,R=e(72041),O=e(4321),_=e(8377),A=e(42789);const D=({errors:C,onChange:h,canEditInputs:L,isCreating:B,values:I,transferToken:T})=>{const{formatMessage:U}=(0,u.useIntl)();return t.createElement(r.Box,{background:"neutral0",hasRadius:!0,shadow:"filterShadow",paddingTop:6,paddingBottom:6,paddingLeft:7,paddingRight:7},t.createElement(r.Flex,{direction:"column",alignItems:"stretch",gap:4},t.createElement(r.Typography,{variant:"delta",as:"h2"},U({id:"global.details",defaultMessage:"Details"})),t.createElement(r.Grid,{gap:5},t.createElement(r.GridItem,{key:"name",col:6,xs:12},t.createElement(_.Z,{errors:C,values:I,canEditInputs:L,onChange:h})),t.createElement(r.GridItem,{key:"description",col:6,xs:12},t.createElement(A.Z,{errors:C,values:I,canEditInputs:L,onChange:h})),t.createElement(r.GridItem,{key:"lifespan",col:6,xs:12},t.createElement(O.Z,{isCreating:B,errors:C,values:I,onChange:h,token:T})))))};D.propTypes={errors:n().shape({name:n().string,description:n().string,lifespan:n().string,type:n().string}),onChange:n().func.isRequired,canEditInputs:n().bool.isRequired,values:n().shape({name:n().string,description:n().string,lifespan:n().oneOfType([n().number,n().string]),type:n().string}).isRequired,isCreating:n().bool.isRequired,transferToken:n().shape({id:n().oneOfType([n().number,n().string]),type:n().string,lifespan:n().string,name:n().string,accessKey:n().string,permissions:n().array,description:n().string,createdAt:n().string})},D.defaultProps={errors:{},transferToken:{}};var S=D,F=e(93682),V=e(30493),W=e(68774);const $="Name already taken";var G=()=>{(0,i.useFocusWhenNavigate)();const{formatMessage:C}=(0,u.useIntl)(),{lockApp:h,unlockApp:L}=(0,i.useOverlayBlocker)(),B=(0,i.useNotification)(),I=(0,a.useHistory)(),[T,U]=(0,t.useState)(I.location.state?.transferToken.accessKey?{...I.location.state.transferToken}:null),{trackUsage:H}=(0,i.useTracking)(),N=(0,t.useRef)(H),{setCurrentStep:z}=(0,i.useGuidedTour)(),{allowedActions:{canCreate:j,canUpdate:X,canRegenerate:Y}}=(0,i.useRBAC)(R.Z.settings["transfer-tokens"]),{params:{id:x}}=(0,a.useRouteMatch)("/settings/transfer-tokens/:id"),{get:Q,post:J,put:q}=(0,i.useFetchClient)(),v=x==="create";(0,t.useEffect)(()=>{N.current(v?"didAddTokenFromList":"didEditTokenFromList",{tokenType:W.f})},[v]);const{status:w}=(0,o.useQuery)(["transfer-token",x],async()=>{const{data:{data:y}}=await Q(`/admin/transfer/tokens/${x}`);return U({...y}),y},{enabled:!v&&!T,onError(){B({type:"warning",message:{id:"notification.error",defaultMessage:"An error occured"}})}}),ee=async(y,K)=>{N.current(v?"willCreateToken":"willEditToken",{tokenType:W.f}),h();const Z=y.lifespan&&parseInt(y.lifespan,10)&&y.lifespan!=="0"?parseInt(y.lifespan,10):null;try{const{data:{data:P}}=v?await J("/admin/transfer/tokens",{...y,lifespan:Z,permissions:["push"]}):await q(`/admin/transfer/tokens/${x}`,{name:y.name,description:y.description,type:y.type,permissions:["push"]});L(),v&&(I.replace(`/settings/transfer-tokens/${P.id}`,{transferToken:P}),z("transferTokens.success")),U({...P}),B({type:"success",message:C(v?{id:"notification.success.transfertokencreated",defaultMessage:"Transfer Token successfully created"}:{id:"notification.success.transfertokenedited",defaultMessage:"Transfer Token successfully edited"})}),N.current(v?"didCreateToken":"didEditToken",{type:T?.type,tokenType:W.f})}catch(P){const te=(0,l.Iz)(P.response.data);K.setErrors(te),P?.response?.data?.error?.message===$?B({type:"warning",message:P.response.data.message||"notification.error.tokennamenotunique"}):B({type:"warning",message:P?.response?.data?.message||"notification.error"}),L()}},b=X&&!v||j&&v;return!v&&!T&&w!=="success"?t.createElement(M,{transferTokenName:T?.name}):t.createElement(r.Main,null,t.createElement(i.SettingsPageTitle,{name:"Transfer Tokens"}),t.createElement(s.Formik,{validationSchema:p,validateOnChange:!1,initialValues:{name:T?.name||"",description:T?.description||"",lifespan:T?.lifespan?T.lifespan.toString():T?.lifespan},enableReinitialize:!0,onSubmit:(y,K)=>ee(y,K)},({errors:y,handleChange:K,isSubmitting:Z,values:P})=>t.createElement(i.Form,null,t.createElement(V.Z,{backUrl:"/settings/transfer-tokens",title:{id:"Settings.transferTokens.createPage.title",defaultMessage:"Create Transfer Token"},token:T,setToken:U,canEditInputs:b,canRegenerate:Y,isSubmitting:Z,regenerateUrl:"/admin/transfer/tokens/"}),t.createElement(r.ContentLayout,null,t.createElement(r.Flex,{direction:"column",alignItems:"stretch",gap:6},Boolean(T?.name)&&t.createElement(F.Z,{token:T?.accessKey,tokenType:W.f}),t.createElement(S,{errors:y,onChange:K,canEditInputs:b,isCreating:v,values:P,transferToken:T}))))))}}}]);
|