@webbio/strapi-plugin-page-builder 0.12.2-platform → 0.12.4-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/collection-type-lifecycles.js +1 -1
  93. package/dist/server/bootstrap.js +1 -1
  94. package/dist/server/graphql/page-by-path.js +20 -17
  95. package/dist/server/graphql/page-by-slug.js +9 -9
  96. package/dist/server/graphql/pages-by-uid.js +5 -5
  97. package/dist/server/services/private-content/graphql/index.js +27 -27
  98. package/dist/server/services/private-content/graphql/types/index.js +74 -74
  99. package/dist/server/utils/graphql.js +18 -18
  100. package/dist/tsconfig.server.tsbuildinfo +1 -1
  101. package/package.json +78 -78
  102. package/server/bootstrap/collection-type-lifecycles.ts +47 -47
  103. package/server/bootstrap/permissions.ts +161 -161
  104. package/server/bootstrap.ts +261 -261
  105. package/server/config/index.ts +4 -4
  106. package/server/content-types/index.ts +7 -7
  107. package/server/content-types/user-category/schema.json +23 -23
  108. package/server/controllers/collection-types.ts +32 -32
  109. package/server/controllers/index.ts +19 -19
  110. package/server/controllers/page-type.ts +18 -18
  111. package/server/controllers/page.ts +9 -9
  112. package/server/controllers/platform.ts +21 -21
  113. package/server/controllers/private-content.ts +17 -17
  114. package/server/controllers/sitemap.ts +32 -32
  115. package/server/controllers/template.ts +16 -16
  116. package/server/controllers/user-category.ts +3 -3
  117. package/server/destroy.ts +5 -5
  118. package/server/graphql/index.ts +9 -9
  119. package/server/graphql/page-by-path.ts +135 -132
  120. package/server/graphql/page-type.ts +67 -67
  121. package/server/graphql/pages-by-uid.ts +89 -89
  122. package/server/index.ts +23 -23
  123. package/server/middlewares/index.ts +1 -1
  124. package/server/policies/index.ts +5 -5
  125. package/server/policies/isAuthorizedPage.ts +11 -11
  126. package/server/register.ts +22 -22
  127. package/server/routes/index.ts +115 -115
  128. package/server/routes/user-category.ts +3 -3
  129. package/server/schema/page-end.json +96 -96
  130. package/server/schema/page-start.json +87 -87
  131. package/server/schema/page-type-end.json +53 -53
  132. package/server/schema/page-type-start.json +38 -38
  133. package/server/schema/platform-start.json +21 -21
  134. package/server/schema/template-end.json +40 -40
  135. package/server/schema/template-start.json +35 -35
  136. package/server/services/builder.ts +232 -232
  137. package/server/services/collection-types.ts +95 -95
  138. package/server/services/email.ts +127 -127
  139. package/server/services/index.ts +23 -23
  140. package/server/services/page-type.ts +30 -30
  141. package/server/services/page.ts +24 -24
  142. package/server/services/platform.ts +30 -30
  143. package/server/services/private-content/components/admin-email.json +22 -22
  144. package/server/services/private-content/components/email.json +22 -22
  145. package/server/services/private-content/components/platform-email.json +30 -30
  146. package/server/services/private-content/constants/index.ts +13 -13
  147. package/server/services/private-content/graphql/index.ts +88 -88
  148. package/server/services/private-content/graphql/resolvers/findOnePage.ts +40 -40
  149. package/server/services/private-content/graphql/resolvers/findPage.ts +45 -45
  150. package/server/services/private-content/graphql/resolvers/forgot-password.ts +34 -34
  151. package/server/services/private-content/graphql/resolvers/login.ts +56 -56
  152. package/server/services/private-content/graphql/resolvers/register.ts +78 -78
  153. package/server/services/private-content/graphql/resolvers/reset-password.ts +44 -44
  154. package/server/services/private-content/graphql/types/index.ts +96 -96
  155. package/server/services/private-content/index.ts +95 -95
  156. package/server/services/private-content/mail-template/txtMail.email.template.text.ts +6 -6
  157. package/server/services/private-content/page.ts +20 -20
  158. package/server/services/private-content/platform.ts +19 -19
  159. package/server/services/private-content/schemas/index.ts +28 -28
  160. package/server/services/private-content/user.ts +197 -197
  161. package/server/services/sitemap.ts +83 -83
  162. package/server/services/template.ts +13 -13
  163. package/server/services/user-category.ts +3 -3
  164. package/server/utils/filter-underscore-arguments.ts +12 -12
  165. package/server/utils/reload-strapi-on-load.ts +13 -13
  166. package/server/utils/strapi.ts +50 -50
  167. package/shared/utils/constants.ts +8 -8
  168. package/shared/utils/sleep.ts +1 -1
  169. package/strapi-admin.js +3 -3
  170. package/strapi-server.js +3 -3
  171. package/tsconfig.json +20 -20
  172. package/tsconfig.server.json +25 -25
@@ -1,35 +1,35 @@
1
- {
2
- "draftAndPublish": false,
3
- "displayName": "Templates",
4
- "singularName": "template",
5
- "pluralName": "templates",
6
- "description": "",
7
- "plugin": "page-builder",
8
- "pluginOptions": {
9
- "i18n": {
10
- "localized": true
11
- }
12
- },
13
- "kind": "collectionType",
14
- "collectionName": "templates",
15
- "attributes": {
16
- "title": {
17
- "type": "string",
18
- "required": true,
19
- "pluginOptions": {
20
- "i18n": {
21
- "localized": true
22
- }
23
- }
24
- },
25
- "modules": {
26
- "type": "dynamiczone",
27
- "components": [],
28
- "pluginOptions": {
29
- "i18n": {
30
- "localized": true
31
- }
32
- }
33
- }
34
- }
35
- }
1
+ {
2
+ "draftAndPublish": false,
3
+ "displayName": "Templates",
4
+ "singularName": "template",
5
+ "pluralName": "templates",
6
+ "description": "",
7
+ "plugin": "page-builder",
8
+ "pluginOptions": {
9
+ "i18n": {
10
+ "localized": true
11
+ }
12
+ },
13
+ "kind": "collectionType",
14
+ "collectionName": "templates",
15
+ "attributes": {
16
+ "title": {
17
+ "type": "string",
18
+ "required": true,
19
+ "pluginOptions": {
20
+ "i18n": {
21
+ "localized": true
22
+ }
23
+ }
24
+ },
25
+ "modules": {
26
+ "type": "dynamiczone",
27
+ "components": [],
28
+ "pluginOptions": {
29
+ "i18n": {
30
+ "localized": true
31
+ }
32
+ }
33
+ }
34
+ }
35
+ }
@@ -1,232 +1,232 @@
1
- import partition from 'lodash/partition';
2
- import { Common } from '@strapi/strapi';
3
-
4
- import pageStart from '../schema/page-start.json';
5
- import pageEnd from '../schema/page-end.json';
6
- import pluginId from '../../admin/src/pluginId';
7
- import { PAGE_UID, TEMPLATE_UID, PAGE_TYPE_UID, PLATFORM_UID } from '../../shared/utils/constants';
8
- import { reloadStrapiOnLoad } from '../utils/reload-strapi-on-load';
9
- import pageTypeStart from '../schema/page-type-start.json';
10
- import pageTypeEnd from '../schema/page-type-end.json';
11
- import templateStart from '../schema/template-start.json';
12
- import templateEnd from '../schema/template-end.json';
13
- import platformStart from '../schema/platform-start.json';
14
- import email from './private-content/components/email.json';
15
- import platformEmail from './private-content/components/platform-email.json';
16
- import adminEmail from './private-content/components/admin-email.json';
17
-
18
- const UIDS: Common.UID.ContentType[] = [TEMPLATE_UID, PAGE_TYPE_UID, PLATFORM_UID, PAGE_UID];
19
-
20
- export default {
21
- async buildComponents() {
22
- await this.createEmailComponents();
23
- },
24
- async buildContentTypes() {
25
- this.listenToCreatedContentTypes();
26
-
27
- await this.createContentTypes();
28
-
29
- await this.updateContentTypes();
30
- },
31
- listenToCreatedContentTypes() {
32
- strapi.eventHub.on('content-type.create', async (e) => {
33
- if (e.contentType.uid === PAGE_UID) {
34
- reloadStrapiOnLoad();
35
- }
36
- });
37
- },
38
- async createEmailComponents() {
39
- const foundEmailComponent = strapi.components['internal.email'];
40
- const foundAdminEmail = strapi.components['internal.admin-email'];
41
- const foundPlatformEmail = strapi.components['internal.platform-email'];
42
-
43
- if (!foundAdminEmail && !foundEmailComponent && !foundPlatformEmail) {
44
- try {
45
- const res = await strapi.plugin('content-type-builder').services.components.createComponent({
46
- component: {
47
- category: 'internal',
48
- displayName: platformEmail.info.displayName,
49
- attributes: platformEmail.attributes
50
- },
51
- components: [
52
- {
53
- tmpUID: 'internal.email',
54
- category: 'internal',
55
- displayName: email.info.displayName,
56
- attributes: email.attributes
57
- },
58
- {
59
- tmpUID: 'internal.admin-email',
60
- category: 'internal',
61
- displayName: adminEmail.info.displayName,
62
- attributes: adminEmail.attributes
63
- }
64
- ]
65
- });
66
- return res;
67
- } catch (error) {
68
- console.log(error);
69
- }
70
- }
71
- },
72
- async createEmailComponent() {
73
- try {
74
- const res = await strapi.plugin('content-type-builder').services.components.createComponent({
75
- component: {
76
- category: 'internal',
77
- displayName: email.info.displayName,
78
- attributes: email.attributes
79
- }
80
- });
81
- return res;
82
- } catch (error) {
83
- console.log(error);
84
- }
85
- },
86
- async createPlatformEmail() {
87
- try {
88
- const res = await strapi.plugin('content-type-builder').services.components.createComponent({
89
- component: {
90
- category: 'internal',
91
- displayName: platformEmail.info.displayName,
92
- attributes: platformEmail.attributes
93
- }
94
- });
95
- return res;
96
- } catch (error) {
97
- console.log(error);
98
- }
99
- },
100
- async createAdminEmail() {
101
- try {
102
- const res = await strapi.plugin('content-type-builder').services.components.createComponent({
103
- component: {
104
- category: 'internal',
105
- displayName: adminEmail.info.displayName,
106
- attributes: adminEmail.attributes
107
- }
108
- });
109
- console.log(res);
110
- return res;
111
- } catch (error) {
112
- console.log(error);
113
- }
114
- },
115
- async createContentTypes() {
116
- const newContentTypes = UIDS.filter((c) => !Boolean(strapi.contentType(c)))
117
- .map((c) => this.getContentType(c)?.create)
118
- .filter(Boolean);
119
-
120
- await this.synchronizeContentTypes(newContentTypes);
121
- },
122
- async updateContentTypes() {
123
- const updateContentTypes = UIDS.filter((c) => Boolean(strapi.contentType(c)))
124
- .map((c) => this.getContentType(c).update)
125
- .filter(Boolean);
126
-
127
- await this.synchronizeContentTypes(updateContentTypes);
128
- },
129
- async synchronizeContentTypes(contentTypes: { uid: Common.UID.ContentType; contentType: Record<string, any> }[]) {
130
- const ctb = strapi.service('plugin::content-type-builder.content-types');
131
-
132
- const [updateTypes, newTypes] = partition(contentTypes, (c) => Boolean(strapi.contentType(c.uid)));
133
-
134
- if (newTypes.length > 0) {
135
- console.log(
136
- '[Plugin Page Builder]: Creating content types',
137
- newTypes.map((x) => x.uid)
138
- );
139
- }
140
-
141
- if (updateTypes.length > 0) {
142
- console.log(
143
- '[Plugin Page Builder]: Updating content types',
144
- updateTypes.map((x) => x.uid)
145
- );
146
- }
147
-
148
- if ((newTypes || []).length > 0) {
149
- await ctb.createContentTypes(newTypes.map((c) => ({ contentType: c.contentType, components: [] })));
150
- }
151
-
152
- if ((updateTypes || []).length > 0) {
153
- for await (const updateType of updateTypes) {
154
- await ctb.editContentType(updateType.uid, {
155
- contentType: updateType.contentType,
156
- components: []
157
- });
158
- }
159
- }
160
- },
161
- getContentType(uid: string) {
162
- const contentTypes = {
163
- [PAGE_UID]: {
164
- create: this.getPageContentType(true),
165
- update: this.getPageContentType()
166
- },
167
- [PAGE_TYPE_UID]: {
168
- create: this.getPageTypeContentType(true),
169
- update: this.getPageTypeContentType()
170
- },
171
- [TEMPLATE_UID]: {
172
- create: this.getTemplateContentType(true),
173
- update: this.getTemplateContentType()
174
- },
175
- [PLATFORM_UID]: {
176
- create: this.getPlatformContentType(),
177
- update: this.getPlatformContentType()
178
- }
179
- };
180
-
181
- return contentTypes?.[uid];
182
- },
183
- getPageContentType(create?: boolean) {
184
- const page = create ? pageStart : pageEnd;
185
- const contentType = this.mergeCollectionTypeWithOld(page, PAGE_UID);
186
-
187
- return { uid: PAGE_UID, contentType };
188
- },
189
- getPageTypeContentType(create?: boolean) {
190
- const pageType = create ? pageTypeStart : pageTypeEnd;
191
- const contentType = this.mergeCollectionTypeWithOld(pageType, PAGE_TYPE_UID);
192
-
193
- return { uid: PAGE_TYPE_UID, contentType };
194
- },
195
- getTemplateContentType(create?: boolean) {
196
- const template = create ? templateStart : templateEnd;
197
- const contentType = this.mergeCollectionTypeWithOld(template, TEMPLATE_UID);
198
-
199
- return { uid: TEMPLATE_UID, contentType };
200
- },
201
- getPlatformContentType() {
202
- const platform = platformStart;
203
-
204
- const contentType = this.mergeCollectionTypeWithOld(platform, PLATFORM_UID);
205
-
206
- return { uid: PLATFORM_UID, contentType };
207
- },
208
- mergeCollectionTypeWithOld(collectionType: Record<string, any>, uid: Common.UID.ContentType) {
209
- const { pluginOptions: oldPluginOptions, __schema__: oldSchema } = (strapi.contentType(uid) as any) || {};
210
- const modulesFromConfig = oldSchema?.attributes?.modules ? this.getConfigModuleComponents() : undefined;
211
-
212
- return {
213
- ...collectionType,
214
- displayName: oldSchema?.info?.displayName || collectionType?.displayName,
215
- pluginOptions: {
216
- ...oldPluginOptions,
217
- ...collectionType?.pluginOptions
218
- },
219
- attributes: {
220
- ...oldSchema?.attributes,
221
- ...collectionType.attributes,
222
- ...(((collectionType?.attributes?.modules && collectionType?.attributes?.modules?.length > 0) ||
223
- modulesFromConfig) && {
224
- modules: { ...collectionType?.attributes?.modules, components: modulesFromConfig }
225
- })
226
- }
227
- };
228
- },
229
- getConfigModuleComponents() {
230
- return ((strapi.config.get(`plugin.${pluginId}`) as Record<string, any>)?.modules || []).filter(Boolean);
231
- }
232
- };
1
+ import partition from 'lodash/partition';
2
+ import { Common } from '@strapi/strapi';
3
+
4
+ import pageStart from '../schema/page-start.json';
5
+ import pageEnd from '../schema/page-end.json';
6
+ import pluginId from '../../admin/src/pluginId';
7
+ import { PAGE_UID, TEMPLATE_UID, PAGE_TYPE_UID, PLATFORM_UID } from '../../shared/utils/constants';
8
+ import { reloadStrapiOnLoad } from '../utils/reload-strapi-on-load';
9
+ import pageTypeStart from '../schema/page-type-start.json';
10
+ import pageTypeEnd from '../schema/page-type-end.json';
11
+ import templateStart from '../schema/template-start.json';
12
+ import templateEnd from '../schema/template-end.json';
13
+ import platformStart from '../schema/platform-start.json';
14
+ import email from './private-content/components/email.json';
15
+ import platformEmail from './private-content/components/platform-email.json';
16
+ import adminEmail from './private-content/components/admin-email.json';
17
+
18
+ const UIDS: Common.UID.ContentType[] = [TEMPLATE_UID, PAGE_TYPE_UID, PLATFORM_UID, PAGE_UID];
19
+
20
+ export default {
21
+ async buildComponents() {
22
+ await this.createEmailComponents();
23
+ },
24
+ async buildContentTypes() {
25
+ this.listenToCreatedContentTypes();
26
+
27
+ await this.createContentTypes();
28
+
29
+ await this.updateContentTypes();
30
+ },
31
+ listenToCreatedContentTypes() {
32
+ strapi.eventHub.on('content-type.create', async (e) => {
33
+ if (e.contentType.uid === PAGE_UID) {
34
+ reloadStrapiOnLoad();
35
+ }
36
+ });
37
+ },
38
+ async createEmailComponents() {
39
+ const foundEmailComponent = strapi.components['internal.email'];
40
+ const foundAdminEmail = strapi.components['internal.admin-email'];
41
+ const foundPlatformEmail = strapi.components['internal.platform-email'];
42
+
43
+ if (!foundAdminEmail && !foundEmailComponent && !foundPlatformEmail) {
44
+ try {
45
+ const res = await strapi.plugin('content-type-builder').services.components.createComponent({
46
+ component: {
47
+ category: 'internal',
48
+ displayName: platformEmail.info.displayName,
49
+ attributes: platformEmail.attributes
50
+ },
51
+ components: [
52
+ {
53
+ tmpUID: 'internal.email',
54
+ category: 'internal',
55
+ displayName: email.info.displayName,
56
+ attributes: email.attributes
57
+ },
58
+ {
59
+ tmpUID: 'internal.admin-email',
60
+ category: 'internal',
61
+ displayName: adminEmail.info.displayName,
62
+ attributes: adminEmail.attributes
63
+ }
64
+ ]
65
+ });
66
+ return res;
67
+ } catch (error) {
68
+ console.log(error);
69
+ }
70
+ }
71
+ },
72
+ async createEmailComponent() {
73
+ try {
74
+ const res = await strapi.plugin('content-type-builder').services.components.createComponent({
75
+ component: {
76
+ category: 'internal',
77
+ displayName: email.info.displayName,
78
+ attributes: email.attributes
79
+ }
80
+ });
81
+ return res;
82
+ } catch (error) {
83
+ console.log(error);
84
+ }
85
+ },
86
+ async createPlatformEmail() {
87
+ try {
88
+ const res = await strapi.plugin('content-type-builder').services.components.createComponent({
89
+ component: {
90
+ category: 'internal',
91
+ displayName: platformEmail.info.displayName,
92
+ attributes: platformEmail.attributes
93
+ }
94
+ });
95
+ return res;
96
+ } catch (error) {
97
+ console.log(error);
98
+ }
99
+ },
100
+ async createAdminEmail() {
101
+ try {
102
+ const res = await strapi.plugin('content-type-builder').services.components.createComponent({
103
+ component: {
104
+ category: 'internal',
105
+ displayName: adminEmail.info.displayName,
106
+ attributes: adminEmail.attributes
107
+ }
108
+ });
109
+ console.log(res);
110
+ return res;
111
+ } catch (error) {
112
+ console.log(error);
113
+ }
114
+ },
115
+ async createContentTypes() {
116
+ const newContentTypes = UIDS.filter((c) => !Boolean(strapi.contentType(c)))
117
+ .map((c) => this.getContentType(c)?.create)
118
+ .filter(Boolean);
119
+
120
+ await this.synchronizeContentTypes(newContentTypes);
121
+ },
122
+ async updateContentTypes() {
123
+ const updateContentTypes = UIDS.filter((c) => Boolean(strapi.contentType(c)))
124
+ .map((c) => this.getContentType(c).update)
125
+ .filter(Boolean);
126
+
127
+ await this.synchronizeContentTypes(updateContentTypes);
128
+ },
129
+ async synchronizeContentTypes(contentTypes: { uid: Common.UID.ContentType; contentType: Record<string, any> }[]) {
130
+ const ctb = strapi.service('plugin::content-type-builder.content-types');
131
+
132
+ const [updateTypes, newTypes] = partition(contentTypes, (c) => Boolean(strapi.contentType(c.uid)));
133
+
134
+ if (newTypes.length > 0) {
135
+ console.log(
136
+ '[Plugin Page Builder]: Creating content types',
137
+ newTypes.map((x) => x.uid)
138
+ );
139
+ }
140
+
141
+ if (updateTypes.length > 0) {
142
+ console.log(
143
+ '[Plugin Page Builder]: Updating content types',
144
+ updateTypes.map((x) => x.uid)
145
+ );
146
+ }
147
+
148
+ if ((newTypes || []).length > 0) {
149
+ await ctb.createContentTypes(newTypes.map((c) => ({ contentType: c.contentType, components: [] })));
150
+ }
151
+
152
+ if ((updateTypes || []).length > 0) {
153
+ for await (const updateType of updateTypes) {
154
+ await ctb.editContentType(updateType.uid, {
155
+ contentType: updateType.contentType,
156
+ components: []
157
+ });
158
+ }
159
+ }
160
+ },
161
+ getContentType(uid: string) {
162
+ const contentTypes = {
163
+ [PAGE_UID]: {
164
+ create: this.getPageContentType(true),
165
+ update: this.getPageContentType()
166
+ },
167
+ [PAGE_TYPE_UID]: {
168
+ create: this.getPageTypeContentType(true),
169
+ update: this.getPageTypeContentType()
170
+ },
171
+ [TEMPLATE_UID]: {
172
+ create: this.getTemplateContentType(true),
173
+ update: this.getTemplateContentType()
174
+ },
175
+ [PLATFORM_UID]: {
176
+ create: this.getPlatformContentType(),
177
+ update: this.getPlatformContentType()
178
+ }
179
+ };
180
+
181
+ return contentTypes?.[uid];
182
+ },
183
+ getPageContentType(create?: boolean) {
184
+ const page = create ? pageStart : pageEnd;
185
+ const contentType = this.mergeCollectionTypeWithOld(page, PAGE_UID);
186
+
187
+ return { uid: PAGE_UID, contentType };
188
+ },
189
+ getPageTypeContentType(create?: boolean) {
190
+ const pageType = create ? pageTypeStart : pageTypeEnd;
191
+ const contentType = this.mergeCollectionTypeWithOld(pageType, PAGE_TYPE_UID);
192
+
193
+ return { uid: PAGE_TYPE_UID, contentType };
194
+ },
195
+ getTemplateContentType(create?: boolean) {
196
+ const template = create ? templateStart : templateEnd;
197
+ const contentType = this.mergeCollectionTypeWithOld(template, TEMPLATE_UID);
198
+
199
+ return { uid: TEMPLATE_UID, contentType };
200
+ },
201
+ getPlatformContentType() {
202
+ const platform = platformStart;
203
+
204
+ const contentType = this.mergeCollectionTypeWithOld(platform, PLATFORM_UID);
205
+
206
+ return { uid: PLATFORM_UID, contentType };
207
+ },
208
+ mergeCollectionTypeWithOld(collectionType: Record<string, any>, uid: Common.UID.ContentType) {
209
+ const { pluginOptions: oldPluginOptions, __schema__: oldSchema } = (strapi.contentType(uid) as any) || {};
210
+ const modulesFromConfig = oldSchema?.attributes?.modules ? this.getConfigModuleComponents() : undefined;
211
+
212
+ return {
213
+ ...collectionType,
214
+ displayName: oldSchema?.info?.displayName || collectionType?.displayName,
215
+ pluginOptions: {
216
+ ...oldPluginOptions,
217
+ ...collectionType?.pluginOptions
218
+ },
219
+ attributes: {
220
+ ...oldSchema?.attributes,
221
+ ...collectionType.attributes,
222
+ ...(((collectionType?.attributes?.modules && collectionType?.attributes?.modules?.length > 0) ||
223
+ modulesFromConfig) && {
224
+ modules: { ...collectionType?.attributes?.modules, components: modulesFromConfig }
225
+ })
226
+ }
227
+ };
228
+ },
229
+ getConfigModuleComponents() {
230
+ return ((strapi.config.get(`plugin.${pluginId}`) as Record<string, any>)?.modules || []).filter(Boolean);
231
+ }
232
+ };