@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,210 +1,210 @@
1
- import React, { useEffect, useState } from 'react';
2
- import { useIntl } from 'react-intl';
3
- import { useCMEditViewDataManager } from '@strapi/helper-plugin';
4
- import { useSelector } from 'react-redux';
5
- import { useFetchClient } from '@strapi/helper-plugin';
6
- import pick from 'lodash/pick';
7
-
8
- import {
9
- RelationInput,
10
- RelationInputProps
11
- } from '../../StrapiCore/admin/admin/src/content-manager/components/Relations/RelationInput';
12
-
13
- import { useGetLocaleFromUrl } from '../../../utils/hooks/useGetLocaleFromUrl';
14
- import { getSearchFilteredEntities } from '../../../api/search-filtered-entity';
15
- import RelationHelper, { IPlatformFilteredSelectFieldProps } from '../utils/relation-helper';
16
- import { getTranslation } from '../utils/get-translations';
17
- import { Platform } from '../../../api/platform';
18
-
19
- const PAGE = 1;
20
-
21
- // This is largely a copy of https://github.com/strapi/strapi/blob/4e6961c7b8127f0f3bb0ad1fc430351ae9c4b8fa/packages/core/admin/admin/src/content-manager/components/Relations/RelationInputDataManager.tsx
22
-
23
- export interface IMultiPlatformFilteredSelectFieldProps extends IPlatformFilteredSelectFieldProps {
24
- relations?: any;
25
- isCloningEntry?: boolean;
26
- totalRelations: number;
27
- relationsFromModifiedData?: Record<string, any>[];
28
- selectedPlatform?: Platform;
29
- hiddenId?: number[];
30
- }
31
-
32
- const MultiPlatformFilteredSelectField = ({
33
- attribute,
34
- description,
35
- labelAction,
36
- error,
37
- required,
38
- placeholder,
39
- intlLabel,
40
- name,
41
- relations,
42
- isCloningEntry,
43
- totalRelations,
44
- relationsFromModifiedData,
45
- selectedPlatform,
46
- hiddenId
47
- }: IMultiPlatformFilteredSelectFieldProps) => {
48
- const fetchClient = useFetchClient();
49
- const {
50
- initialData,
51
- modifiedData,
52
- layout,
53
- allLayoutData,
54
- relationReorder,
55
- relationDisconnect,
56
- relationConnect,
57
- isCreatingEntry
58
- } = useCMEditViewDataManager() as any;
59
- const { locales } = useSelector((state: any) => state.i18n_locales);
60
- const urlLocale = useGetLocaleFromUrl();
61
- const defaultLocale = locales.find((locale: any) => locale.isDefault);
62
- const selectedLocale = initialData?.locale ?? urlLocale ?? defaultLocale.code;
63
-
64
- const [searchResults, setSearchResults] = useState<RelationInputProps['searchResults']>({
65
- data: [],
66
- isLoading: false
67
- });
68
- const [selectedResults, setSelectedResults] = useState<RelationInputProps['relations']>({
69
- data: [],
70
- isLoading: false,
71
- isFetchingNextPage: false
72
- });
73
-
74
- const { formatMessage } = useIntl();
75
-
76
- const { targetAttributes, targetFieldValue, targetField } = RelationHelper.getTargetAttributes(
77
- name,
78
- attribute,
79
- modifiedData,
80
- layout,
81
- allLayoutData
82
- );
83
-
84
- const label = intlLabel?.id
85
- ? formatMessage({ id: intlLabel.id, defaultMessage: intlLabel?.defaultMessage }, { ...intlLabel.values })
86
- : name;
87
-
88
- const hint = description?.id
89
- ? formatMessage({ id: description.id, defaultMessage: description.defaultMessage }, { ...description.values })
90
- : '';
91
-
92
- useEffect(() => {
93
- setSelectedResults({ data: targetFieldValue, isLoading: false, isFetchingNextPage: false });
94
- }, [targetFieldValue]);
95
-
96
- const getItems = async (inputValue?: string) => {
97
- const entities = await getSearchFilteredEntities({
98
- fetchClient,
99
- page: PAGE,
100
- uid: targetAttributes?.target || '',
101
- locale: selectedLocale,
102
- searchQuery: inputValue,
103
- platformTitle: attribute?.pluginOptions?.filteredSelect?.disablePlatformFilter ? '' : selectedPlatform?.title,
104
- notIds: [...(selectedResults?.data || []).map((x: Record<string, any>) => x.id), ...(hiddenId || [])],
105
- customFilters: attribute?.pluginOptions?.filteredSelect?.customFilters
106
- });
107
-
108
- const mapped = entities?.results.map((x) => ({
109
- id: x.id,
110
- mainField: x.title,
111
- href: x?.href,
112
- publicationState: x.publicationState,
113
- publishedAt: x.publishedAt
114
- }));
115
-
116
- // @ts-expect-error data is fine
117
- setSearchResults({ data: mapped || [], isLoading: false });
118
- };
119
-
120
- const handleRelationReorder = (oldIndex: number, newIndex: number) => {
121
- relationReorder?.({
122
- name: targetField,
123
- newIndex,
124
- oldIndex
125
- });
126
- };
127
-
128
- const handleRelationLoadMore = () => {
129
- relations.fetchNextPage();
130
- };
131
-
132
- const handleRelationConnect = (relation: Record<string, any>) => {
133
- relationConnect?.({ name: targetField, value: relation, toOneRelation: false });
134
- };
135
-
136
- const handleRelationDisconnect = (relation: Record<string, any>) => {
137
- relationDisconnect?.({ name: targetField, id: relation.id });
138
- };
139
-
140
- return (
141
- <RelationInput
142
- id={name}
143
- name={name || ''}
144
- error={error}
145
- canReorder
146
- description={hint}
147
- iconButtonAriaLabel="Drag"
148
- label={`${label} ${totalRelations > 0 ? `(${totalRelations})` : ''}`}
149
- labelLoadMore={
150
- !isCreatingEntry || isCloningEntry
151
- ? formatMessage({
152
- id: getTranslation('relation.loadMore'),
153
- defaultMessage: 'Load More'
154
- })
155
- : undefined
156
- }
157
- liveText=""
158
- listAriaDescription={formatMessage({
159
- id: getTranslation('dnd.instructions'),
160
- defaultMessage: `Press spacebar to grab and re-order`
161
- })}
162
- loadingMessage={formatMessage({
163
- id: getTranslation('relation.isLoading'),
164
- defaultMessage: 'Relations are loading'
165
- })}
166
- labelDisconnectRelation={formatMessage({
167
- id: getTranslation('relation.disconnect'),
168
- defaultMessage: 'Remove'
169
- })}
170
- numberOfRelationsToDisplay={5}
171
- noRelationsMessage={formatMessage({
172
- id: getTranslation('relation.notAvailable'),
173
- defaultMessage: 'No relations available'
174
- })}
175
- onRelationConnect={handleRelationConnect}
176
- onRelationDisconnect={handleRelationDisconnect}
177
- onRelationLoadMore={handleRelationLoadMore}
178
- onRelationReorder={handleRelationReorder}
179
- onSearch={(e?: string) => getItems(e)}
180
- // onSearchNextPage={(e) => console.log(e)}
181
- placeholder={formatMessage(
182
- placeholder || {
183
- id: getTranslation('relation.add'),
184
- defaultMessage: 'Add relation'
185
- }
186
- )}
187
- publicationStateTranslations={{
188
- draft: 'Draft',
189
- published: 'Published'
190
- }}
191
- relations={pick(
192
- { ...relations, data: relationsFromModifiedData },
193
- 'data',
194
- 'hasNextPage',
195
- 'isFetchingNextPage',
196
- 'isLoading',
197
- 'isSuccess'
198
- )}
199
- searchResults={searchResults}
200
- size={8}
201
- // @ts-ignore
202
- hint={hint || ''}
203
- labelAction={labelAction}
204
- required={required}
205
- disabled={!selectedPlatform}
206
- />
207
- );
208
- };
209
-
210
- export default MultiPlatformFilteredSelectField;
1
+ import React, { useEffect, useState } from 'react';
2
+ import { useIntl } from 'react-intl';
3
+ import { useCMEditViewDataManager } from '@strapi/helper-plugin';
4
+ import { useSelector } from 'react-redux';
5
+ import { useFetchClient } from '@strapi/helper-plugin';
6
+ import pick from 'lodash/pick';
7
+
8
+ import {
9
+ RelationInput,
10
+ RelationInputProps
11
+ } from '../../StrapiCore/admin/admin/src/content-manager/components/Relations/RelationInput';
12
+
13
+ import { useGetLocaleFromUrl } from '../../../utils/hooks/useGetLocaleFromUrl';
14
+ import { getSearchFilteredEntities } from '../../../api/search-filtered-entity';
15
+ import RelationHelper, { IPlatformFilteredSelectFieldProps } from '../utils/relation-helper';
16
+ import { getTranslation } from '../utils/get-translations';
17
+ import { Platform } from '../../../api/platform';
18
+
19
+ const PAGE = 1;
20
+
21
+ // This is largely a copy of https://github.com/strapi/strapi/blob/4e6961c7b8127f0f3bb0ad1fc430351ae9c4b8fa/packages/core/admin/admin/src/content-manager/components/Relations/RelationInputDataManager.tsx
22
+
23
+ export interface IMultiPlatformFilteredSelectFieldProps extends IPlatformFilteredSelectFieldProps {
24
+ relations?: any;
25
+ isCloningEntry?: boolean;
26
+ totalRelations: number;
27
+ relationsFromModifiedData?: Record<string, any>[];
28
+ selectedPlatform?: Platform;
29
+ hiddenId?: number[];
30
+ }
31
+
32
+ const MultiPlatformFilteredSelectField = ({
33
+ attribute,
34
+ description,
35
+ labelAction,
36
+ error,
37
+ required,
38
+ placeholder,
39
+ intlLabel,
40
+ name,
41
+ relations,
42
+ isCloningEntry,
43
+ totalRelations,
44
+ relationsFromModifiedData,
45
+ selectedPlatform,
46
+ hiddenId
47
+ }: IMultiPlatformFilteredSelectFieldProps) => {
48
+ const fetchClient = useFetchClient();
49
+ const {
50
+ initialData,
51
+ modifiedData,
52
+ layout,
53
+ allLayoutData,
54
+ relationReorder,
55
+ relationDisconnect,
56
+ relationConnect,
57
+ isCreatingEntry
58
+ } = useCMEditViewDataManager() as any;
59
+ const { locales } = useSelector((state: any) => state.i18n_locales);
60
+ const urlLocale = useGetLocaleFromUrl();
61
+ const defaultLocale = locales.find((locale: any) => locale.isDefault);
62
+ const selectedLocale = initialData?.locale ?? urlLocale ?? defaultLocale.code;
63
+
64
+ const [searchResults, setSearchResults] = useState<RelationInputProps['searchResults']>({
65
+ data: [],
66
+ isLoading: false
67
+ });
68
+ const [selectedResults, setSelectedResults] = useState<RelationInputProps['relations']>({
69
+ data: [],
70
+ isLoading: false,
71
+ isFetchingNextPage: false
72
+ });
73
+
74
+ const { formatMessage } = useIntl();
75
+
76
+ const { targetAttributes, targetFieldValue, targetField } = RelationHelper.getTargetAttributes(
77
+ name,
78
+ attribute,
79
+ modifiedData,
80
+ layout,
81
+ allLayoutData
82
+ );
83
+
84
+ const label = intlLabel?.id
85
+ ? formatMessage({ id: intlLabel.id, defaultMessage: intlLabel?.defaultMessage }, { ...intlLabel.values })
86
+ : name;
87
+
88
+ const hint = description?.id
89
+ ? formatMessage({ id: description.id, defaultMessage: description.defaultMessage }, { ...description.values })
90
+ : '';
91
+
92
+ useEffect(() => {
93
+ setSelectedResults({ data: targetFieldValue, isLoading: false, isFetchingNextPage: false });
94
+ }, [targetFieldValue]);
95
+
96
+ const getItems = async (inputValue?: string) => {
97
+ const entities = await getSearchFilteredEntities({
98
+ fetchClient,
99
+ page: PAGE,
100
+ uid: targetAttributes?.target || '',
101
+ locale: selectedLocale,
102
+ searchQuery: inputValue,
103
+ platformTitle: attribute?.pluginOptions?.filteredSelect?.disablePlatformFilter ? '' : selectedPlatform?.title,
104
+ notIds: [...(selectedResults?.data || []).map((x: Record<string, any>) => x.id), ...(hiddenId || [])],
105
+ customFilters: attribute?.pluginOptions?.filteredSelect?.customFilters
106
+ });
107
+
108
+ const mapped = entities?.results.map((x) => ({
109
+ id: x.id,
110
+ mainField: x.title,
111
+ href: x?.href,
112
+ publicationState: x.publicationState,
113
+ publishedAt: x.publishedAt
114
+ }));
115
+
116
+ // @ts-expect-error data is fine
117
+ setSearchResults({ data: mapped || [], isLoading: false });
118
+ };
119
+
120
+ const handleRelationReorder = (oldIndex: number, newIndex: number) => {
121
+ relationReorder?.({
122
+ name: targetField,
123
+ newIndex,
124
+ oldIndex
125
+ });
126
+ };
127
+
128
+ const handleRelationLoadMore = () => {
129
+ relations.fetchNextPage();
130
+ };
131
+
132
+ const handleRelationConnect = (relation: Record<string, any>) => {
133
+ relationConnect?.({ name: targetField, value: relation, toOneRelation: false });
134
+ };
135
+
136
+ const handleRelationDisconnect = (relation: Record<string, any>) => {
137
+ relationDisconnect?.({ name: targetField, id: relation.id });
138
+ };
139
+
140
+ return (
141
+ <RelationInput
142
+ id={name}
143
+ name={name || ''}
144
+ error={error}
145
+ canReorder
146
+ description={hint}
147
+ iconButtonAriaLabel="Drag"
148
+ label={`${label} ${totalRelations > 0 ? `(${totalRelations})` : ''}`}
149
+ labelLoadMore={
150
+ !isCreatingEntry || isCloningEntry
151
+ ? formatMessage({
152
+ id: getTranslation('relation.loadMore'),
153
+ defaultMessage: 'Load More'
154
+ })
155
+ : undefined
156
+ }
157
+ liveText=""
158
+ listAriaDescription={formatMessage({
159
+ id: getTranslation('dnd.instructions'),
160
+ defaultMessage: `Press spacebar to grab and re-order`
161
+ })}
162
+ loadingMessage={formatMessage({
163
+ id: getTranslation('relation.isLoading'),
164
+ defaultMessage: 'Relations are loading'
165
+ })}
166
+ labelDisconnectRelation={formatMessage({
167
+ id: getTranslation('relation.disconnect'),
168
+ defaultMessage: 'Remove'
169
+ })}
170
+ numberOfRelationsToDisplay={5}
171
+ noRelationsMessage={formatMessage({
172
+ id: getTranslation('relation.notAvailable'),
173
+ defaultMessage: 'No relations available'
174
+ })}
175
+ onRelationConnect={handleRelationConnect}
176
+ onRelationDisconnect={handleRelationDisconnect}
177
+ onRelationLoadMore={handleRelationLoadMore}
178
+ onRelationReorder={handleRelationReorder}
179
+ onSearch={(e?: string) => getItems(e)}
180
+ // onSearchNextPage={(e) => console.log(e)}
181
+ placeholder={formatMessage(
182
+ placeholder || {
183
+ id: getTranslation('relation.add'),
184
+ defaultMessage: 'Add relation'
185
+ }
186
+ )}
187
+ publicationStateTranslations={{
188
+ draft: 'Draft',
189
+ published: 'Published'
190
+ }}
191
+ relations={pick(
192
+ { ...relations, data: relationsFromModifiedData },
193
+ 'data',
194
+ 'hasNextPage',
195
+ 'isFetchingNextPage',
196
+ 'isLoading',
197
+ 'isSuccess'
198
+ )}
199
+ searchResults={searchResults}
200
+ size={8}
201
+ // @ts-ignore
202
+ hint={hint || ''}
203
+ labelAction={labelAction}
204
+ required={required}
205
+ disabled={!selectedPlatform}
206
+ />
207
+ );
208
+ };
209
+
210
+ export default MultiPlatformFilteredSelectField;