@webbio/strapi-plugin-page-builder 0.12.2-platform → 0.12.3-platform

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/README.md +166 -166
  2. package/admin/src/api/collection-type.ts +111 -111
  3. package/admin/src/api/entity-relation.ts +42 -42
  4. package/admin/src/api/has-page-relation.ts +37 -37
  5. package/admin/src/api/has-platform-relation.ts +40 -40
  6. package/admin/src/api/page-type-relation.ts +41 -41
  7. package/admin/src/api/platform-page-types.ts +45 -45
  8. package/admin/src/api/platform-relation.ts +42 -42
  9. package/admin/src/api/platform.ts +35 -35
  10. package/admin/src/api/search-filtered-entity.ts +114 -114
  11. package/admin/src/api/template.ts +39 -39
  12. package/admin/src/components/Combobox/index.tsx +83 -83
  13. package/admin/src/components/Combobox/react-select-custom-styles.tsx +121 -121
  14. package/admin/src/components/Combobox/styles.ts +46 -46
  15. package/admin/src/components/ConfirmModal/index.tsx +90 -90
  16. package/admin/src/components/EditView/CollectionTypeSearch/index.tsx +127 -127
  17. package/admin/src/components/EditView/CollectionTypeSettings/CreatePageButton/index.tsx +149 -149
  18. package/admin/src/components/EditView/CollectionTypeSettings/CreatePageButton/styles.ts +19 -19
  19. package/admin/src/components/EditView/CollectionTypeSettings/index.tsx +82 -82
  20. package/admin/src/components/EditView/Details/index.tsx +48 -48
  21. package/admin/src/components/EditView/Details/styles.ts +51 -51
  22. package/admin/src/components/EditView/PageSettings/index.tsx +124 -124
  23. package/admin/src/components/EditView/Platform/platform-select.tsx +30 -30
  24. package/admin/src/components/EditView/Template/TemplateConfirmModal/index.tsx +36 -36
  25. package/admin/src/components/EditView/Template/TemplateSelect/index.tsx +70 -70
  26. package/admin/src/components/EditView/Template/TemplateSelect/use-template-modules.ts +41 -41
  27. package/admin/src/components/EditView/index.tsx +35 -35
  28. package/admin/src/components/EditView/page-type-select.tsx +32 -32
  29. package/admin/src/components/EditView/wrapper.tsx +41 -41
  30. package/admin/src/components/GlobalPlatformSelect/index.tsx +40 -40
  31. package/admin/src/components/GlobalPlatformSelect/styles.ts +27 -27
  32. package/admin/src/components/Initializer/index.tsx +24 -24
  33. package/admin/src/components/PageFilters/PageTypeFilter/index.tsx +39 -39
  34. package/admin/src/components/PageFilters/PlatformFilter/index.tsx +32 -32
  35. package/admin/src/components/PageFilters/filters.tsx +189 -189
  36. package/admin/src/components/PageFilters/index.tsx +35 -35
  37. package/admin/src/components/PageTypeEditView/TemplatePlatformSelect/index.tsx +76 -76
  38. package/admin/src/components/PageTypeEditView/index.tsx +53 -53
  39. package/admin/src/components/PlatformFilteredSelectField/InputIcon/index.tsx +23 -23
  40. package/admin/src/components/PlatformFilteredSelectField/Multi/index.tsx +210 -210
  41. package/admin/src/components/PlatformFilteredSelectField/Single/index.tsx +197 -197
  42. package/admin/src/components/PlatformFilteredSelectField/hooks/useRelationLoad.tsx +128 -128
  43. package/admin/src/components/PlatformFilteredSelectField/index.tsx +85 -85
  44. package/admin/src/components/PlatformFilteredSelectField/styles.tsx +77 -77
  45. package/admin/src/components/PlatformFilteredSelectField/utils/get-translations.ts +3 -3
  46. package/admin/src/components/PlatformFilteredSelectField/utils/relation-helper.ts +147 -147
  47. package/admin/src/components/PluginIcon/index.tsx +94 -94
  48. package/admin/src/components/StrapiCore/admin/admin/src/content-manager/components/Relations/RelationInput.tsx +689 -689
  49. package/admin/src/components/StrapiCore/admin/admin/src/content-manager/components/Relations/RelationInputDataManager.tsx +6 -6
  50. package/admin/src/components/StrapiCore/admin/admin/src/content-manager/components/Relations/useRelation.ts +170 -170
  51. package/admin/src/components/StrapiCore/admin/admin/src/content-manager/components/Relations/utils/getRelationLink.ts +5 -5
  52. package/admin/src/components/StrapiCore/admin/admin/src/content-manager/components/Relations/utils/normalizeRelations.ts +52 -52
  53. package/admin/src/components/StrapiCore/admin/admin/src/content-manager/constants/attributes.ts +3 -3
  54. package/admin/src/components/StrapiCore/admin/admin/src/content-manager/hooks/useDragAndDrop.ts +253 -253
  55. package/admin/src/components/StrapiCore/admin/admin/src/content-manager/hooks/useKeyboardDragAndDrop.ts +96 -96
  56. package/admin/src/components/StrapiCore/admin/admin/src/content-manager/hooks/usePrev.ts +11 -11
  57. package/admin/src/components/StrapiCore/admin/admin/src/content-manager/utils/dragAndDrop.ts +8 -8
  58. package/admin/src/components/StrapiCore/admin/admin/src/content-manager/utils/paths.ts +29 -29
  59. package/admin/src/components/StrapiCore/admin/admin/src/content-manager/utils/refs.ts +19 -19
  60. package/admin/src/components/StrapiCore/admin/admin/src/content-manager/utils/translations.ts +3 -3
  61. package/admin/src/components/StrapiCore/content-manager/shared/contracts/collection-types.ts +300 -300
  62. package/admin/src/components/StrapiCore/content-manager/shared/contracts/components.ts +72 -72
  63. package/admin/src/components/StrapiCore/content-manager/shared/contracts/content-types.ts +116 -116
  64. package/admin/src/components/StrapiCore/content-manager/shared/contracts/index.ts +8 -8
  65. package/admin/src/components/StrapiCore/content-manager/shared/contracts/init.ts +22 -22
  66. package/admin/src/components/StrapiCore/content-manager/shared/contracts/relations.ts +80 -80
  67. package/admin/src/components/StrapiCore/content-manager/shared/contracts/review-workflows.ts +88 -88
  68. package/admin/src/components/StrapiCore/content-manager/shared/contracts/single-types.ts +112 -112
  69. package/admin/src/components/StrapiCore/content-manager/shared/contracts/uid.ts +48 -48
  70. package/admin/src/components/StrapiCore/content-manager/shared/index.ts +1 -1
  71. package/admin/src/constants.ts +3 -3
  72. package/admin/src/index.tsx +101 -101
  73. package/admin/src/middlewares/index.tsx +37 -37
  74. package/admin/src/pages/app/index.tsx +14 -14
  75. package/admin/src/pluginId.ts +5 -5
  76. package/admin/src/translations/en.json +9 -9
  77. package/admin/src/translations/nl.json +9 -9
  78. package/admin/src/utils/findDomElement.ts +6 -6
  79. package/admin/src/utils/findElementParent.ts +20 -20
  80. package/admin/src/utils/getObjectFromFormName.ts +42 -42
  81. package/admin/src/utils/getRequestUrl.ts +11 -11
  82. package/admin/src/utils/getTrad.ts +5 -5
  83. package/admin/src/utils/hooks/useDebounce.ts +17 -17
  84. package/admin/src/utils/hooks/useDefaultPlatformFromLocalStorage.ts +61 -61
  85. package/admin/src/utils/hooks/useGetLocaleFromUrl.ts +9 -9
  86. package/admin/src/utils/hooks/useHideOverviewFilterTags.ts +34 -34
  87. package/admin/src/utils/hooks/usePlatformFormData.ts +64 -64
  88. package/admin/src/utils/hooks/usePrevious.ts +12 -12
  89. package/admin/src/utils/sanitizeModules.ts +93 -93
  90. package/custom.d.ts +6 -6
  91. package/dist/package.json +1 -1
  92. package/dist/server/bootstrap.js +1 -1
  93. package/dist/server/graphql/page-by-path.js +20 -17
  94. package/dist/server/graphql/pages-by-uid.js +5 -5
  95. package/dist/server/services/private-content/graphql/index.js +27 -27
  96. package/dist/server/services/private-content/graphql/types/index.js +74 -74
  97. package/dist/tsconfig.server.tsbuildinfo +1 -1
  98. package/package.json +78 -78
  99. package/server/bootstrap/collection-type-lifecycles.ts +47 -47
  100. package/server/bootstrap/permissions.ts +161 -161
  101. package/server/bootstrap.ts +261 -261
  102. package/server/config/index.ts +4 -4
  103. package/server/content-types/index.ts +7 -7
  104. package/server/content-types/user-category/schema.json +23 -23
  105. package/server/controllers/collection-types.ts +32 -32
  106. package/server/controllers/index.ts +19 -19
  107. package/server/controllers/page-type.ts +18 -18
  108. package/server/controllers/page.ts +9 -9
  109. package/server/controllers/platform.ts +21 -21
  110. package/server/controllers/private-content.ts +17 -17
  111. package/server/controllers/sitemap.ts +32 -32
  112. package/server/controllers/template.ts +16 -16
  113. package/server/controllers/user-category.ts +3 -3
  114. package/server/destroy.ts +5 -5
  115. package/server/graphql/index.ts +9 -9
  116. package/server/graphql/page-by-path.ts +135 -132
  117. package/server/graphql/page-type.ts +67 -67
  118. package/server/graphql/pages-by-uid.ts +89 -89
  119. package/server/index.ts +23 -23
  120. package/server/middlewares/index.ts +1 -1
  121. package/server/policies/index.ts +5 -5
  122. package/server/policies/isAuthorizedPage.ts +11 -11
  123. package/server/register.ts +22 -22
  124. package/server/routes/index.ts +115 -115
  125. package/server/routes/user-category.ts +3 -3
  126. package/server/schema/page-end.json +96 -96
  127. package/server/schema/page-start.json +87 -87
  128. package/server/schema/page-type-end.json +53 -53
  129. package/server/schema/page-type-start.json +38 -38
  130. package/server/schema/platform-start.json +21 -21
  131. package/server/schema/template-end.json +40 -40
  132. package/server/schema/template-start.json +35 -35
  133. package/server/services/builder.ts +232 -232
  134. package/server/services/collection-types.ts +95 -95
  135. package/server/services/email.ts +127 -127
  136. package/server/services/index.ts +23 -23
  137. package/server/services/page-type.ts +30 -30
  138. package/server/services/page.ts +24 -24
  139. package/server/services/platform.ts +30 -30
  140. package/server/services/private-content/components/admin-email.json +22 -22
  141. package/server/services/private-content/components/email.json +22 -22
  142. package/server/services/private-content/components/platform-email.json +30 -30
  143. package/server/services/private-content/constants/index.ts +13 -13
  144. package/server/services/private-content/graphql/index.ts +88 -88
  145. package/server/services/private-content/graphql/resolvers/findOnePage.ts +40 -40
  146. package/server/services/private-content/graphql/resolvers/findPage.ts +45 -45
  147. package/server/services/private-content/graphql/resolvers/forgot-password.ts +34 -34
  148. package/server/services/private-content/graphql/resolvers/login.ts +56 -56
  149. package/server/services/private-content/graphql/resolvers/register.ts +78 -78
  150. package/server/services/private-content/graphql/resolvers/reset-password.ts +44 -44
  151. package/server/services/private-content/graphql/types/index.ts +96 -96
  152. package/server/services/private-content/index.ts +95 -95
  153. package/server/services/private-content/mail-template/txtMail.email.template.text.ts +6 -6
  154. package/server/services/private-content/page.ts +20 -20
  155. package/server/services/private-content/platform.ts +19 -19
  156. package/server/services/private-content/schemas/index.ts +28 -28
  157. package/server/services/private-content/user.ts +197 -197
  158. package/server/services/sitemap.ts +83 -83
  159. package/server/services/template.ts +13 -13
  160. package/server/services/user-category.ts +3 -3
  161. package/server/utils/filter-underscore-arguments.ts +12 -12
  162. package/server/utils/reload-strapi-on-load.ts +13 -13
  163. package/server/utils/strapi.ts +50 -50
  164. package/shared/utils/constants.ts +8 -8
  165. package/shared/utils/sleep.ts +1 -1
  166. package/strapi-admin.js +3 -3
  167. package/strapi-server.js +3 -3
  168. package/tsconfig.json +20 -20
  169. package/tsconfig.server.json +25 -25
  170. package/dist/server/graphql/page-by-slug.js +0 -89
  171. package/dist/server/utils/graphql.js +0 -100
  172. package/dist/server/utils/paginationValidation.js +0 -31
@@ -1,121 +1,121 @@
1
- // @ts-nocheck
2
- import { StylesConfig } from 'react-select';
3
- import { useTheme } from 'styled-components';
4
- import { IReactSelectValue } from '.';
5
-
6
- export const useReactSelectCustomStyles = (): StylesConfig<IReactSelectValue, false> => {
7
- const theme = useTheme() as Record<string, any>;
8
-
9
- return {
10
- control: (provided, { isFocused, isDisabled }) => ({
11
- ...provided,
12
- color: theme.colors.neutral800,
13
- backgroundColor: isDisabled ? theme.colors.neutral100 : theme.colors.neutral0,
14
- minHeight: '40px',
15
- lineHeight: 1.4,
16
- borderRadius: theme.borderRadius,
17
- fontSize: theme.fontSizes[2],
18
- borderColor: isFocused ? theme.colors.buttonPrimary600 : theme.colors.neutral200,
19
- boxShadow: isFocused ? `${theme.colors.buttonPrimary600} 0px 0px 0px 2px` : 'none',
20
-
21
- ':hover': {
22
- borderColor: isFocused ? theme.colors.buttonPrimary600 : theme.colors.neutral200
23
- }
24
- }),
25
-
26
- input: (provided, {}) => ({
27
- ...provided,
28
- color: theme.colors.neutral800
29
- }),
30
- singleValue: (provided, {}) => ({
31
- ...provided,
32
- color: theme.colors.neutral800
33
- }),
34
- placeholder: (provided) => ({
35
- ...provided,
36
- color: theme.colors.neutral500
37
- }),
38
- menu: (provided) => ({
39
- ...provided,
40
- border: `1px solid ${theme.colors.neutral150}`,
41
- boxShadow: '0px 1px 4px rgba(33, 33, 52, 0.1)',
42
- borderRadius: theme.borderRadius,
43
- backgroundColor: theme.colors.neutral0
44
- }),
45
- menuList: (provided) => ({
46
- ...provided,
47
- paddingLeft: '4px',
48
- paddingRight: '4px'
49
- }),
50
- option: (provided, { isFocused, isSelected, isDisabled }) => ({
51
- ...provided,
52
- backgroundColor: isFocused ? theme.colors.primary100 : 'transparent',
53
- fontSize: theme.fontSizes[2],
54
- borderRadius: theme.borderRadius,
55
- color: isSelected ? theme.colors.buttonPrimary600 : theme.colors.neutral800,
56
- fontWeight: isSelected ? 700 : 400,
57
- minHeight: '40px',
58
- display: 'flex',
59
- justifyContent: 'center',
60
- flexDirection: 'column',
61
- gap: '4px',
62
- opacity: isDisabled ? 0.7 : 1,
63
-
64
- 'span:not(:first-of-type)': {
65
- fontSize: theme.fontSizes[1],
66
- color: theme.colors.neutral500
67
- },
68
-
69
- '&:active': {
70
- backgroundColor: theme.colors.primary100
71
- }
72
- }),
73
- loadingIndicator: (provided) => ({
74
- ...provided,
75
- '>span': {
76
- backgroundColor: theme.colors.buttonPrimary600
77
- }
78
- }),
79
- loadingMessage: (provided) => ({
80
- ...provided,
81
- color: theme.colors.neutral500
82
- }),
83
- noOptionsMessage: (provided) => ({
84
- ...provided,
85
- color: theme.colors.neutral500
86
- }),
87
- clearIndicator: (provided, { isFocused }) => ({
88
- ...provided,
89
- cursor: 'pointer',
90
- display: 'flex',
91
- alignItems: 'center',
92
- justifyContent: 'center',
93
- paddingLeft: '6px',
94
- paddingRight: '6px',
95
- svg: {
96
- width: '0.6875rem',
97
- path: {
98
- fill: theme.colors.neutral600
99
- }
100
- },
101
- ':hover svg path': {
102
- fill: theme.colors.neutral700
103
- }
104
- }),
105
-
106
- dropdownIndicator: (provided, { isFocused }) => ({
107
- ...provided,
108
- display: 'flex',
109
- alignItems: 'center',
110
- justifyContent: 'center',
111
- paddingLeft: '6px',
112
- paddingRight: '12px',
113
- svg: {
114
- width: '0.375rem',
115
- path: {
116
- fill: theme.colors.neutral600
117
- }
118
- }
119
- })
120
- };
121
- };
1
+ // @ts-nocheck
2
+ import { StylesConfig } from 'react-select';
3
+ import { useTheme } from 'styled-components';
4
+ import { IReactSelectValue } from '.';
5
+
6
+ export const useReactSelectCustomStyles = (): StylesConfig<IReactSelectValue, false> => {
7
+ const theme = useTheme() as Record<string, any>;
8
+
9
+ return {
10
+ control: (provided, { isFocused, isDisabled }) => ({
11
+ ...provided,
12
+ color: theme.colors.neutral800,
13
+ backgroundColor: isDisabled ? theme.colors.neutral100 : theme.colors.neutral0,
14
+ minHeight: '40px',
15
+ lineHeight: 1.4,
16
+ borderRadius: theme.borderRadius,
17
+ fontSize: theme.fontSizes[2],
18
+ borderColor: isFocused ? theme.colors.buttonPrimary600 : theme.colors.neutral200,
19
+ boxShadow: isFocused ? `${theme.colors.buttonPrimary600} 0px 0px 0px 2px` : 'none',
20
+
21
+ ':hover': {
22
+ borderColor: isFocused ? theme.colors.buttonPrimary600 : theme.colors.neutral200
23
+ }
24
+ }),
25
+
26
+ input: (provided, {}) => ({
27
+ ...provided,
28
+ color: theme.colors.neutral800
29
+ }),
30
+ singleValue: (provided, {}) => ({
31
+ ...provided,
32
+ color: theme.colors.neutral800
33
+ }),
34
+ placeholder: (provided) => ({
35
+ ...provided,
36
+ color: theme.colors.neutral500
37
+ }),
38
+ menu: (provided) => ({
39
+ ...provided,
40
+ border: `1px solid ${theme.colors.neutral150}`,
41
+ boxShadow: '0px 1px 4px rgba(33, 33, 52, 0.1)',
42
+ borderRadius: theme.borderRadius,
43
+ backgroundColor: theme.colors.neutral0
44
+ }),
45
+ menuList: (provided) => ({
46
+ ...provided,
47
+ paddingLeft: '4px',
48
+ paddingRight: '4px'
49
+ }),
50
+ option: (provided, { isFocused, isSelected, isDisabled }) => ({
51
+ ...provided,
52
+ backgroundColor: isFocused ? theme.colors.primary100 : 'transparent',
53
+ fontSize: theme.fontSizes[2],
54
+ borderRadius: theme.borderRadius,
55
+ color: isSelected ? theme.colors.buttonPrimary600 : theme.colors.neutral800,
56
+ fontWeight: isSelected ? 700 : 400,
57
+ minHeight: '40px',
58
+ display: 'flex',
59
+ justifyContent: 'center',
60
+ flexDirection: 'column',
61
+ gap: '4px',
62
+ opacity: isDisabled ? 0.7 : 1,
63
+
64
+ 'span:not(:first-of-type)': {
65
+ fontSize: theme.fontSizes[1],
66
+ color: theme.colors.neutral500
67
+ },
68
+
69
+ '&:active': {
70
+ backgroundColor: theme.colors.primary100
71
+ }
72
+ }),
73
+ loadingIndicator: (provided) => ({
74
+ ...provided,
75
+ '>span': {
76
+ backgroundColor: theme.colors.buttonPrimary600
77
+ }
78
+ }),
79
+ loadingMessage: (provided) => ({
80
+ ...provided,
81
+ color: theme.colors.neutral500
82
+ }),
83
+ noOptionsMessage: (provided) => ({
84
+ ...provided,
85
+ color: theme.colors.neutral500
86
+ }),
87
+ clearIndicator: (provided, { isFocused }) => ({
88
+ ...provided,
89
+ cursor: 'pointer',
90
+ display: 'flex',
91
+ alignItems: 'center',
92
+ justifyContent: 'center',
93
+ paddingLeft: '6px',
94
+ paddingRight: '6px',
95
+ svg: {
96
+ width: '0.6875rem',
97
+ path: {
98
+ fill: theme.colors.neutral600
99
+ }
100
+ },
101
+ ':hover svg path': {
102
+ fill: theme.colors.neutral700
103
+ }
104
+ }),
105
+
106
+ dropdownIndicator: (provided, { isFocused }) => ({
107
+ ...provided,
108
+ display: 'flex',
109
+ alignItems: 'center',
110
+ justifyContent: 'center',
111
+ paddingLeft: '6px',
112
+ paddingRight: '12px',
113
+ svg: {
114
+ width: '0.375rem',
115
+ path: {
116
+ fill: theme.colors.neutral600
117
+ }
118
+ }
119
+ })
120
+ };
121
+ };
@@ -1,46 +1,46 @@
1
- import styled, { css } from 'styled-components';
2
-
3
- const Wrapper = styled.div`
4
- ${({ theme }) => css`
5
- width: 100%;
6
- display: flex;
7
- flex-direction: column;
8
- gap: 4px;
9
- `}
10
- `;
11
-
12
- const ElementWrapper = styled.div`
13
- ${({ theme }) => css`
14
- width: 100%;
15
- display: flex;
16
- gap: 4px;
17
- > :first-child {
18
- flex-grow: 1;
19
- }
20
- `}
21
- `;
22
-
23
- const Option = styled.span`
24
- display: flex;
25
- flex-direction: column;
26
- `;
27
-
28
- const LabelWrapper = styled.div`
29
- ${({ theme }) => css`
30
- width: 100%;
31
- display: flex;
32
- gap: 4px;
33
- justify-content: space-between;
34
- color: ${theme.colors.neutral800};
35
- font-size: ${theme.fontSizes[1]};
36
- `}
37
- `;
38
-
39
- const ComboboxStyles = {
40
- Wrapper,
41
- Option,
42
- LabelWrapper,
43
- ElementWrapper
44
- };
45
-
46
- export default ComboboxStyles;
1
+ import styled, { css } from 'styled-components';
2
+
3
+ const Wrapper = styled.div`
4
+ ${({ theme }) => css`
5
+ width: 100%;
6
+ display: flex;
7
+ flex-direction: column;
8
+ gap: 4px;
9
+ `}
10
+ `;
11
+
12
+ const ElementWrapper = styled.div`
13
+ ${({ theme }) => css`
14
+ width: 100%;
15
+ display: flex;
16
+ gap: 4px;
17
+ > :first-child {
18
+ flex-grow: 1;
19
+ }
20
+ `}
21
+ `;
22
+
23
+ const Option = styled.span`
24
+ display: flex;
25
+ flex-direction: column;
26
+ `;
27
+
28
+ const LabelWrapper = styled.div`
29
+ ${({ theme }) => css`
30
+ width: 100%;
31
+ display: flex;
32
+ gap: 4px;
33
+ justify-content: space-between;
34
+ color: ${theme.colors.neutral800};
35
+ font-size: ${theme.fontSizes[1]};
36
+ `}
37
+ `;
38
+
39
+ const ComboboxStyles = {
40
+ Wrapper,
41
+ Option,
42
+ LabelWrapper,
43
+ ElementWrapper
44
+ };
45
+
46
+ export default ComboboxStyles;
@@ -1,90 +1,90 @@
1
- import React, { useEffect } from 'react';
2
- import { useIntl } from 'react-intl';
3
-
4
- import { ModalLayout, ModalBody, ModalHeader, ModalFooter, Button, Typography } from '@strapi/design-system';
5
-
6
- import getTrad from '../../utils/getTrad';
7
- import { sleep } from '../../../../shared/utils/sleep';
8
-
9
- export interface IConfirmModalProps {
10
- onSubmit: () => void;
11
- closeModal: () => void;
12
- isOpen?: boolean;
13
- title?: React.ReactNode;
14
- body?: React.ReactNode;
15
- submitText?: string;
16
- }
17
-
18
- const ConfirmModal = ({
19
- isOpen,
20
- title,
21
- body,
22
- submitText,
23
- onSubmit = () => {
24
- console.warn('Modal submit function not set');
25
- },
26
- closeModal = () => {
27
- console.warn('Modal close function not set');
28
- }
29
- }: IConfirmModalProps): JSX.Element => {
30
- const { formatMessage } = useIntl();
31
-
32
- const colors = {
33
- text: 'neutral800',
34
- icon: 'neutral900'
35
- };
36
-
37
- const fixModalFocus = async () => {
38
- if (isOpen) {
39
- // To make sure the modal's focus trap works, we need to wait a short time before blurring the document
40
- await sleep(100);
41
- // @ts-ignore
42
- document?.activeElement?.blur();
43
- }
44
- };
45
-
46
- useEffect(() => {
47
- fixModalFocus();
48
- }, [isOpen]);
49
-
50
- if (!isOpen) {
51
- return <></>;
52
- }
53
-
54
- return (
55
- <ModalLayout onClose={closeModal} labelledBy="title" width="500px">
56
- <ModalHeader>
57
- <Typography fontWeight="bold" textColor={colors.text} as="h2" id="title">
58
- {title}
59
- </Typography>
60
- </ModalHeader>
61
-
62
- {/* New Strapi design system overflow styling breaks dropdowns in modals */}
63
- <ModalBody style={{ overflow: 'initial' }}>
64
- <Typography textColor={colors.text} id="body">
65
- {body}
66
- </Typography>
67
- </ModalBody>
68
-
69
- <ModalFooter
70
- startActions={
71
- <Button onClick={closeModal} variant="tertiary">
72
- {formatMessage({
73
- id: getTrad('template.confirmModal.buttons.cancel')
74
- })}
75
- </Button>
76
- }
77
- endActions={
78
- <Button onClick={onSubmit}>
79
- {submitText ||
80
- formatMessage({
81
- id: getTrad('template.confirmModal.buttons.submit')
82
- })}
83
- </Button>
84
- }
85
- />
86
- </ModalLayout>
87
- );
88
- };
89
-
90
- export default ConfirmModal;
1
+ import React, { useEffect } from 'react';
2
+ import { useIntl } from 'react-intl';
3
+
4
+ import { ModalLayout, ModalBody, ModalHeader, ModalFooter, Button, Typography } from '@strapi/design-system';
5
+
6
+ import getTrad from '../../utils/getTrad';
7
+ import { sleep } from '../../../../shared/utils/sleep';
8
+
9
+ export interface IConfirmModalProps {
10
+ onSubmit: () => void;
11
+ closeModal: () => void;
12
+ isOpen?: boolean;
13
+ title?: React.ReactNode;
14
+ body?: React.ReactNode;
15
+ submitText?: string;
16
+ }
17
+
18
+ const ConfirmModal = ({
19
+ isOpen,
20
+ title,
21
+ body,
22
+ submitText,
23
+ onSubmit = () => {
24
+ console.warn('Modal submit function not set');
25
+ },
26
+ closeModal = () => {
27
+ console.warn('Modal close function not set');
28
+ }
29
+ }: IConfirmModalProps): JSX.Element => {
30
+ const { formatMessage } = useIntl();
31
+
32
+ const colors = {
33
+ text: 'neutral800',
34
+ icon: 'neutral900'
35
+ };
36
+
37
+ const fixModalFocus = async () => {
38
+ if (isOpen) {
39
+ // To make sure the modal's focus trap works, we need to wait a short time before blurring the document
40
+ await sleep(100);
41
+ // @ts-ignore
42
+ document?.activeElement?.blur();
43
+ }
44
+ };
45
+
46
+ useEffect(() => {
47
+ fixModalFocus();
48
+ }, [isOpen]);
49
+
50
+ if (!isOpen) {
51
+ return <></>;
52
+ }
53
+
54
+ return (
55
+ <ModalLayout onClose={closeModal} labelledBy="title" width="500px">
56
+ <ModalHeader>
57
+ <Typography fontWeight="bold" textColor={colors.text} as="h2" id="title">
58
+ {title}
59
+ </Typography>
60
+ </ModalHeader>
61
+
62
+ {/* New Strapi design system overflow styling breaks dropdowns in modals */}
63
+ <ModalBody style={{ overflow: 'initial' }}>
64
+ <Typography textColor={colors.text} id="body">
65
+ {body}
66
+ </Typography>
67
+ </ModalBody>
68
+
69
+ <ModalFooter
70
+ startActions={
71
+ <Button onClick={closeModal} variant="tertiary">
72
+ {formatMessage({
73
+ id: getTrad('template.confirmModal.buttons.cancel')
74
+ })}
75
+ </Button>
76
+ }
77
+ endActions={
78
+ <Button onClick={onSubmit}>
79
+ {submitText ||
80
+ formatMessage({
81
+ id: getTrad('template.confirmModal.buttons.submit')
82
+ })}
83
+ </Button>
84
+ }
85
+ />
86
+ </ModalLayout>
87
+ );
88
+ };
89
+
90
+ export default ConfirmModal;