@strapi/admin 4.0.4 → 4.0.8

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 (199) hide show
  1. package/admin/src/components/UpgradePlanModal/index.js +7 -2
  2. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/isValidJSONString.js +15 -0
  3. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/schema.js +11 -12
  4. package/admin/src/content-manager/components/InputJSON/FieldWrapper.js +32 -0
  5. package/admin/src/content-manager/components/InputJSON/Label.js +5 -11
  6. package/admin/src/content-manager/components/InputJSON/index.js +27 -27
  7. package/admin/src/content-manager/components/PreviewWysiwyg/Wrapper.js +4 -0
  8. package/admin/src/content-manager/components/PreviewWysiwyg/utils/mdRenderer.js +1 -1
  9. package/admin/src/content-manager/components/RepeatableComponent/DraggedItem/index.js +4 -0
  10. package/admin/src/content-manager/components/Wysiwyg/Editor.js +4 -1
  11. package/admin/src/content-manager/components/Wysiwyg/EditorStylesContainer.js +2 -1
  12. package/admin/src/content-manager/components/Wysiwyg/WysiwygNav.js +14 -8
  13. package/admin/src/content-manager/components/Wysiwyg/WysiwygStyles.js +1 -0
  14. package/admin/src/content-manager/components/Wysiwyg/index.js +4 -1
  15. package/admin/src/content-manager/pages/EditSettingsView/components/DisplayedFields.js +1 -3
  16. package/admin/src/content-manager/pages/EditSettingsView/components/FormModal.js +4 -3
  17. package/admin/src/content-manager/pages/EditSettingsView/components/ModalForm.js +52 -11
  18. package/admin/src/content-manager/pages/EditSettingsView/index.js +10 -1
  19. package/admin/src/content-manager/pages/EditSettingsView/reducer.js +26 -5
  20. package/admin/src/content-manager/pages/EditSettingsView/utils/layout.js +40 -9
  21. package/admin/src/content-manager/pages/EditView/index.js +2 -1
  22. package/admin/src/pages/Admin/index.js +2 -0
  23. package/admin/src/pages/InternalErrorPage/index.js +53 -0
  24. package/admin/src/pages/MarketplacePage/index.js +13 -13
  25. package/admin/src/pages/NotFoundPage/index.js +45 -2
  26. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/index.js +1 -1
  27. package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/EventInput/index.js +2 -10
  28. package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/utils/schema.js +1 -4
  29. package/admin/src/pages/SettingsPage/pages/Webhooks/ListView/index.js +4 -1
  30. package/admin/src/translations/dk.json +300 -110
  31. package/admin/src/translations/en.json +5 -1
  32. package/admin/src/translations/es.json +204 -4
  33. package/admin/src/translations/fr.json +3 -0
  34. package/admin/src/translations/hu.json +672 -0
  35. package/admin/src/translations/ja.json +327 -7
  36. package/admin/src/translations/languageNativeNames.js +1 -0
  37. package/admin/src/translations/nl.json +512 -125
  38. package/admin/src/translations/pt-BR.json +398 -19
  39. package/admin/src/translations/uk.json +40 -40
  40. package/admin/src/translations/zh-Hans.json +9 -9
  41. package/admin/src/translations/zh.json +7 -0
  42. package/build/1856.a06395b4.chunk.js +1 -0
  43. package/build/2481.7d15bd79.chunk.js +1 -0
  44. package/build/2912.38fb9bd1.chunk.js +1 -0
  45. package/build/{6354.48168bc8.chunk.js → 3215.4d042146.chunk.js} +2 -2
  46. package/build/{6354.48168bc8.chunk.js.LICENSE.txt → 3215.4d042146.chunk.js.LICENSE.txt} +0 -0
  47. package/build/4261.a4e1e93c.chunk.js +1 -0
  48. package/build/4362.e3d2d72b.chunk.js +1 -0
  49. package/build/460.639962f0.chunk.js +2 -0
  50. package/build/{6060.3af8877e.chunk.js.LICENSE.txt → 460.639962f0.chunk.js.LICENSE.txt} +0 -0
  51. package/build/4715.31ca1967.chunk.js +1 -0
  52. package/build/4741.c2bfe032.chunk.js +2 -0
  53. package/build/{4741.1fb6ad6e.chunk.js.LICENSE.txt → 4741.c2bfe032.chunk.js.LICENSE.txt} +0 -0
  54. package/build/497.8f30da61.chunk.js +1 -0
  55. package/build/4982.da4adb38.chunk.js +1 -0
  56. package/build/5032.ed02a466.chunk.js +2 -0
  57. package/build/{8530.a978bde6.chunk.js.LICENSE.txt → 5032.ed02a466.chunk.js.LICENSE.txt} +0 -0
  58. package/build/6250.dc6d7a58.chunk.js +1 -0
  59. package/build/6925.bd694b04.chunk.js +2 -0
  60. package/build/{6925.4767e761.chunk.js.LICENSE.txt → 6925.bd694b04.chunk.js.LICENSE.txt} +2 -1
  61. package/build/7841.ef9bcee9.chunk.js +1 -0
  62. package/build/849.9075d399.chunk.js +1 -0
  63. package/build/9235.ced8aebf.chunk.js +1 -0
  64. package/build/9238.bdd93dae.chunk.js +1 -0
  65. package/build/Admin-authenticatedApp.f65c428a.chunk.js +1 -0
  66. package/build/Admin_homePage.a20b5e76.chunk.js +1 -0
  67. package/build/Admin_marketplace.e8654056.chunk.js +1 -0
  68. package/build/Admin_pluginsPage.7d1bd7ce.chunk.js +1 -0
  69. package/build/{Admin_profilePage.077e17a5.chunk.js → Admin_profilePage.67dd744c.chunk.js} +1 -1
  70. package/build/Admin_settingsPage.05877e0b.chunk.js +1 -0
  71. package/build/admin-edit-roles-page.2d1b6461.chunk.js +1 -0
  72. package/build/admin-edit-users.e736db15.chunk.js +1 -0
  73. package/build/admin-users.5f79c031.chunk.js +1 -0
  74. package/build/api-tokens-create-page.10586e16.chunk.js +1 -0
  75. package/build/{api-tokens-create-page.07be3e07.chunk.js → api-tokens-edit-page.f9e3038d.chunk.js} +1 -1
  76. package/build/{api-tokens-list-page.da9714d8.chunk.js → api-tokens-list-page.e071058b.chunk.js} +1 -1
  77. package/build/codemirror-css.48b438c9.chunk.js +1 -0
  78. package/build/{codemirror-javacript.381a518a.chunk.js → codemirror-javacript.8c7c015d.chunk.js} +1 -1
  79. package/build/codemirror-theme.b5559efc.chunk.js +1 -0
  80. package/build/content-manager.07db1dd9.chunk.js +1 -0
  81. package/build/{content-type-builder-translation-dk-json.5c6344f9.chunk.js → content-type-builder-translation-dk-json.098bd218.chunk.js} +1 -1
  82. package/build/content-type-builder-translation-es-json.20c177ee.chunk.js +1 -0
  83. package/build/content-type-builder.52f5975c.chunk.js +1 -0
  84. package/build/cropper-css.ace19575.chunk.js +1 -0
  85. package/build/dk-json.7356ea4b.chunk.js +1 -0
  86. package/build/email-settings-page.4338588d.chunk.js +1 -0
  87. package/build/email-translation-dk-json.f8a595bf.chunk.js +1 -0
  88. package/build/email-translation-es-json.eb303dea.chunk.js +1 -0
  89. package/build/en-json.3422a59e.chunk.js +1 -0
  90. package/build/es-json.ed9c8bef.chunk.js +1 -0
  91. package/build/fontawesome-css-all.3b89f909.chunk.js +1 -0
  92. package/build/fontawesome-css.36cff9ae.chunk.js +1 -0
  93. package/build/fr-json.390bcdeb.chunk.js +1 -0
  94. package/build/highlight.js.6321cb45.chunk.js +1 -0
  95. package/build/hu-json.a741d263.chunk.js +1 -0
  96. package/build/i18n-settings-page.51e37957.chunk.js +1 -0
  97. package/build/i18n-translation-dk-json.932d3cc2.chunk.js +1 -0
  98. package/build/i18n-translation-es-json.347904f3.chunk.js +1 -0
  99. package/build/index.html +1 -1
  100. package/build/ja-json.52581a2a.chunk.js +1 -0
  101. package/build/main.59b96514.js +2 -0
  102. package/build/{main.ca080a1e.js.LICENSE.txt → main.59b96514.js.LICENSE.txt} +0 -0
  103. package/build/nl-json.ac661b7f.chunk.js +1 -0
  104. package/build/pt-BR-json.8b3f799d.chunk.js +1 -0
  105. package/build/runtime~main.75c67df1.js +1 -0
  106. package/build/{sk-json.2eb1ec0d.chunk.js → sk-json.a40bc2c8.chunk.js} +1 -1
  107. package/build/sso-settings-page.c073b6d7.chunk.js +1 -0
  108. package/build/uk-json.da2ed14e.chunk.js +1 -0
  109. package/build/upload-settings.62631a39.chunk.js +1 -0
  110. package/build/{upload-translation-dk-json.e8c0a891.chunk.js → upload-translation-dk-json.bc6af8b4.chunk.js} +1 -1
  111. package/build/upload-translation-en-json.6b529046.chunk.js +1 -0
  112. package/build/upload-translation-es-json.b53d6641.chunk.js +1 -0
  113. package/build/{upload-translation-ja-json.568f097e.chunk.js → upload-translation-ja-json.71aa85eb.chunk.js} +1 -1
  114. package/build/upload.803ab265.chunk.js +1 -0
  115. package/build/users-advanced-settings-page.7694d3c9.chunk.js +1 -0
  116. package/build/users-email-settings-page.862eb51e.chunk.js +1 -0
  117. package/build/{users-permissions-translation-dk-json.a36b323b.chunk.js → users-permissions-translation-dk-json.3e0295e5.chunk.js} +1 -1
  118. package/build/users-permissions-translation-es-json.a4f81eaa.chunk.js +1 -0
  119. package/build/{users-permissions-translation-ru-json.44dd1f10.chunk.js → users-permissions-translation-ru-json.5709c5a0.chunk.js} +1 -1
  120. package/build/users-providers-settings-page.47f97b06.chunk.js +1 -0
  121. package/build/users-roles-settings-page.b67e2b4d.chunk.js +1 -0
  122. package/build/webhook-edit-page.adad0a42.chunk.js +1 -0
  123. package/build/webhook-list-page.5c8f2a91.chunk.js +1 -0
  124. package/build/zh-Hans-json.5843950b.chunk.js +1 -0
  125. package/build/zh-json.2e4c9ef4.chunk.js +1 -0
  126. package/ee/admin/pages/App/utils/customRoutes.js +1 -1
  127. package/ee/server/controllers/authentication/utils.js +1 -1
  128. package/index.js +43 -26
  129. package/package.json +13 -13
  130. package/server/bootstrap.js +16 -0
  131. package/server/controllers/webhooks.js +6 -10
  132. package/server/services/api-token.js +1 -1
  133. package/server/services/metrics.js +6 -0
  134. package/server/services/permission/permissions-manager/sanitize.js +13 -5
  135. package/server/services/user.js +10 -0
  136. package/server/strategies/api-token.js +0 -3
  137. package/build/1024.1b15fbb5.chunk.js +0 -1
  138. package/build/1856.0a6992d6.chunk.js +0 -1
  139. package/build/2912.d903b59a.chunk.js +0 -1
  140. package/build/3742.2281afd7.chunk.js +0 -1
  141. package/build/4045.0b43d55e.chunk.js +0 -1
  142. package/build/4064.2683bcce.chunk.js +0 -1
  143. package/build/4261.061aed35.chunk.js +0 -1
  144. package/build/4672.7ad6782a.chunk.js +0 -1
  145. package/build/4715.f134f37a.chunk.js +0 -1
  146. package/build/4741.1fb6ad6e.chunk.js +0 -2
  147. package/build/497.726adbfa.chunk.js +0 -1
  148. package/build/4982.a7f87e6c.chunk.js +0 -1
  149. package/build/6060.3af8877e.chunk.js +0 -2
  150. package/build/6250.7b4872b1.chunk.js +0 -1
  151. package/build/6925.4767e761.chunk.js +0 -2
  152. package/build/7841.d2aa6f5e.chunk.js +0 -1
  153. package/build/8530.a978bde6.chunk.js +0 -2
  154. package/build/Admin-authenticatedApp.8c375af0.chunk.js +0 -1
  155. package/build/Admin_homePage.f9cdd615.chunk.js +0 -1
  156. package/build/Admin_marketplace.4f6c77f2.chunk.js +0 -1
  157. package/build/Admin_pluginsPage.cd9a871c.chunk.js +0 -1
  158. package/build/Admin_settingsPage.9752ef85.chunk.js +0 -1
  159. package/build/admin-edit-roles-page.27b047fc.chunk.js +0 -1
  160. package/build/admin-edit-users.a0dede23.chunk.js +0 -1
  161. package/build/admin-users.a11177c1.chunk.js +0 -1
  162. package/build/api-tokens-edit-page.d6afc60e.chunk.js +0 -1
  163. package/build/codemirror-css.f9701755.chunk.js +0 -1
  164. package/build/codemirror-theme.1563c1c2.chunk.js +0 -1
  165. package/build/content-manager.51651b3b.chunk.js +0 -1
  166. package/build/content-type-builder-translation-es-json.7e2055ad.chunk.js +0 -1
  167. package/build/content-type-builder.c815d0c6.chunk.js +0 -1
  168. package/build/cropper-css.45c47fe3.chunk.js +0 -1
  169. package/build/dk-json.9516eb08.chunk.js +0 -1
  170. package/build/email-settings-page.03e18bb2.chunk.js +0 -1
  171. package/build/email-translation-dk-json.e1480892.chunk.js +0 -1
  172. package/build/email-translation-es-json.abbba8e3.chunk.js +0 -1
  173. package/build/en-json.9e3c8615.chunk.js +0 -1
  174. package/build/es-json.fa8ddd1d.chunk.js +0 -1
  175. package/build/fontawesome-css-all.9c41f1d7.chunk.js +0 -1
  176. package/build/fontawesome-css.24c8dbfc.chunk.js +0 -1
  177. package/build/fr-json.bae03a2c.chunk.js +0 -1
  178. package/build/highlight.js.90b600ee.chunk.js +0 -1
  179. package/build/i18n-settings-page.89d1776c.chunk.js +0 -1
  180. package/build/ja-json.57abaacb.chunk.js +0 -1
  181. package/build/main.ca080a1e.js +0 -2
  182. package/build/nl-json.d757328d.chunk.js +0 -1
  183. package/build/pt-BR-json.6d1cfdb2.chunk.js +0 -1
  184. package/build/runtime~main.6f530910.js +0 -1
  185. package/build/sso-settings-page.d4ab164b.chunk.js +0 -1
  186. package/build/uk-json.c50ad2a8.chunk.js +0 -1
  187. package/build/upload-settings.aa148b01.chunk.js +0 -1
  188. package/build/upload-translation-en-json.31ea0622.chunk.js +0 -1
  189. package/build/upload-translation-es-json.42b5c758.chunk.js +0 -1
  190. package/build/upload.1991e997.chunk.js +0 -1
  191. package/build/users-advanced-settings-page.23ed7ee9.chunk.js +0 -1
  192. package/build/users-email-settings-page.64dc429a.chunk.js +0 -1
  193. package/build/users-permissions-translation-es-json.c8ef51bd.chunk.js +0 -1
  194. package/build/users-providers-settings-page.329f102a.chunk.js +0 -1
  195. package/build/users-roles-settings-page.e28982b6.chunk.js +0 -1
  196. package/build/webhook-edit-page.678af4e2.chunk.js +0 -1
  197. package/build/webhook-list-page.5abda9c2.chunk.js +0 -1
  198. package/build/zh-Hans-json.fcc53388.chunk.js +0 -1
  199. package/build/zh-json.496bd6c4.chunk.js +0 -1
@@ -28,13 +28,7 @@ const formatLayout = arr => {
28
28
 
29
29
  return acc2;
30
30
  }, []);
31
- const rowId =
32
- acc.length === 0
33
- ? 0
34
- : Math.max.apply(
35
- Math,
36
- acc.map(o => o.rowId)
37
- ) + 1;
31
+ const rowId = acc.length === 0 ? 0 : Math.max.apply(Math, acc.map(o => o.rowId)) + 1;
38
32
 
39
33
  const currentRowSize = getRowSize(currentRow);
40
34
 
@@ -75,7 +69,7 @@ const unformatLayout = arr => {
75
69
  }, []);
76
70
  };
77
71
 
78
- const getInputSize = type => {
72
+ const getDefaultInputSize = type => {
79
73
  switch (type) {
80
74
  case 'boolean':
81
75
  case 'date':
@@ -95,4 +89,41 @@ const getInputSize = type => {
95
89
  }
96
90
  };
97
91
 
98
- export { createLayout, formatLayout, getInputSize, getRowSize, unformatLayout };
92
+ const getFieldSize = (name, layouts = []) => {
93
+ return layouts.reduce((acc, { rowContent }) => {
94
+ const size = rowContent.find(row => row.name === name)?.size ?? null;
95
+
96
+ if (size) {
97
+ acc = size;
98
+ }
99
+
100
+ return acc;
101
+ }, null);
102
+ };
103
+
104
+ const setFieldSize = (name, size, layouts = []) => {
105
+ return layouts.map(row => {
106
+ row.rowContent = row.rowContent.map(column => {
107
+ if (column.name === name) {
108
+ return {
109
+ ...column,
110
+ size,
111
+ };
112
+ }
113
+
114
+ return column;
115
+ });
116
+
117
+ return row;
118
+ });
119
+ };
120
+
121
+ export {
122
+ createLayout,
123
+ formatLayout,
124
+ getDefaultInputSize,
125
+ getFieldSize,
126
+ setFieldSize,
127
+ getRowSize,
128
+ unformatLayout,
129
+ };
@@ -309,6 +309,7 @@ const EditView = ({
309
309
  )}
310
310
  <Box as="aside" aria-labelledby="links">
311
311
  <Stack size={2}>
312
+ <InjectionZone area="contentManager.editView.right-links" slug={slug} />
312
313
  {slug !== 'strapi::administrator' && (
313
314
  <CheckPermissions permissions={ctbPermissions}>
314
315
  <LinkButton
@@ -343,7 +344,7 @@ const EditView = ({
343
344
  })}
344
345
  </LinkButton>
345
346
  </CheckPermissions>
346
- <InjectionZone area="contentManager.editView.right-links" slug={slug} />
347
+
347
348
  {allowedActions.canDelete && (
348
349
  <DeleteLink
349
350
  isCreatingEntry={isCreatingEntry}
@@ -27,6 +27,7 @@ const MarketplacePage = lazy(() =>
27
27
  import(/* webpackChunkName: "Admin_marketplace" */ '../MarketplacePage')
28
28
  );
29
29
  const NotFoundPage = lazy(() => import('../NotFoundPage'));
30
+ const InternalErrorPage = lazy(() => import('../InternalErrorPage'));
30
31
 
31
32
  const ProfilePage = lazy(() =>
32
33
  import(/* webpackChunkName: "Admin_profilePage" */ '../ProfilePage')
@@ -87,6 +88,7 @@ const Admin = () => {
87
88
  <InstalledPluginsPage />
88
89
  </Route>
89
90
  <Route path="/404" component={NotFoundPage} />
91
+ <Route path="/500" component={InternalErrorPage} />
90
92
  <Route path="" component={NotFoundPage} />
91
93
  </Switch>
92
94
  </Suspense>
@@ -0,0 +1,53 @@
1
+ /**
2
+ * InternalErrorPage
3
+ *
4
+ * This is the page we show when the user gets a 500 error
5
+ *
6
+ */
7
+ import React from 'react';
8
+ import { useFocusWhenNavigate } from '@strapi/helper-plugin';
9
+ import { Main } from '@strapi/design-system/Main';
10
+ import { LinkButton } from '@strapi/design-system/LinkButton';
11
+ import { ContentLayout, HeaderLayout } from '@strapi/design-system/Layout';
12
+ import { EmptyStateLayout } from '@strapi/design-system/EmptyStateLayout';
13
+ import EmptyPictures from '@strapi/icons/EmptyPictures';
14
+ import ArrowRight from '@strapi/icons/ArrowRight';
15
+ import { useIntl } from 'react-intl';
16
+
17
+ const InternalErrorPage = () => {
18
+ const { formatMessage } = useIntl();
19
+ useFocusWhenNavigate();
20
+
21
+ return (
22
+ <Main labelledBy="title">
23
+ <HeaderLayout
24
+ id="title"
25
+ title={formatMessage({
26
+ id: 'content-manager.pageNotFound',
27
+ defaultMessage: 'Page not found',
28
+ })}
29
+ />
30
+ <ContentLayout>
31
+ <EmptyStateLayout
32
+ action={
33
+ <LinkButton variant="secondary" endIcon={<ArrowRight />} to="/">
34
+ {formatMessage({
35
+ id: 'app.components.NotFoundPage.back',
36
+ defaultMessage: 'Back to homepage',
37
+ })}
38
+ </LinkButton>
39
+ }
40
+ content={formatMessage({
41
+ id: 'notification.error',
42
+ defaultMessage: 'An error occured',
43
+ })}
44
+ hasRadius
45
+ icon={<EmptyPictures width="10rem" />}
46
+ shadow="tableShadow"
47
+ />
48
+ </ContentLayout>
49
+ </Main>
50
+ );
51
+ };
52
+
53
+ export default InternalErrorPage;
@@ -10,6 +10,7 @@ import { Stack } from '@strapi/design-system/Stack';
10
10
  import { LinkButton } from '@strapi/design-system/LinkButton';
11
11
  import { Main } from '@strapi/design-system/Main';
12
12
  import { Typography } from '@strapi/design-system/Typography';
13
+ import ExternalLink from '@strapi/icons/ExternalLink';
13
14
  import adminPermissions from '../../permissions';
14
15
  import MarketplacePicture from './assets/marketplace-coming-soon.png';
15
16
 
@@ -79,31 +80,30 @@ const MarketPlacePage = () => {
79
80
  </Typography>
80
81
  <Typography variant="alpha" textColor="primary700">
81
82
  {formatMessage({
82
- id: 'admin.pages.MarketPlacePage.coming-soon.2',
83
- defaultMessage: 'A new way to make Strapi awesome.',
83
+ id: 'admin.pages.MarketPlacePage.published',
84
+ defaultMessage: 'Finally here.',
84
85
  })}
85
86
  </Typography>
86
- <Flex maxWidth={pxToRem(580)} paddingTop={3}>
87
+ <Flex maxWidth={pxToRem(620)} paddingTop={3}>
87
88
  <CenterTypography variant="epsilon" textColor="neutral600">
88
89
  {formatMessage({
89
- id: 'admin.pages.MarketPlacePage.content.subtitle',
90
+ id: 'admin.pages.MarketPlacePage.content.subtitle.published',
90
91
  defaultMessage:
91
- 'The new marketplace will help you get more out of Strapi. We are working hard to offer the best experience to discover and install plugins.',
92
+ 'The web marketplace helps you get the most of Strapi. In addition, we are working hard to offer the best experience to discover and install plugins, directly from the app.',
92
93
  })}
93
94
  </CenterTypography>
94
95
  </Flex>
95
96
  <Stack paddingTop={6} horizontal size={2}>
96
- {/* Temporarily hidden until we have the right URL for the link */}
97
- {/* <LinkButton href="https://strapi.io/" size="L" variant="secondary">
97
+ <LinkButton href="https://market.strapi.io" size="L" variant="primary" endIcon={<ExternalLink />}>
98
98
  {formatMessage({
99
- id: 'admin.pages.MarketPlacePage.submit.plugin.link',
100
- defaultMessage: 'Submit your plugin',
99
+ id: 'admin.pages.MarketPlacePage.submit.market.link',
100
+ defaultMessage: 'Visit the web marketplace',
101
101
  })}
102
- </LinkButton> */}
103
- <LinkButton href="https://strapi.io/blog/strapi-market-is-coming-soon" size="L">
102
+ </LinkButton>
103
+ <LinkButton href="https://market.strapi.io/submit-plugin" size="L" variant="secondary">
104
104
  {formatMessage({
105
- id: 'admin.pages.MarketPlacePage.blog.link',
106
- defaultMessage: 'Read our blog post',
105
+ id: 'admin.pages.MarketPlacePage.submit.plugin.link',
106
+ defaultMessage: 'Submit your plugin',
107
107
  })}
108
108
  </LinkButton>
109
109
  </Stack>
@@ -4,7 +4,50 @@
4
4
  * This is the page we show when the user visits a url that doesn't have a route
5
5
  *
6
6
  */
7
+ import React from 'react';
8
+ import { useFocusWhenNavigate } from '@strapi/helper-plugin';
9
+ import { Main } from '@strapi/design-system/Main';
10
+ import { LinkButton } from '@strapi/design-system/LinkButton';
11
+ import { ContentLayout, HeaderLayout } from '@strapi/design-system/Layout';
12
+ import { EmptyStateLayout } from '@strapi/design-system/EmptyStateLayout';
13
+ import EmptyPictures from '@strapi/icons/EmptyPictures';
14
+ import ArrowRight from '@strapi/icons/ArrowRight';
15
+ import { useIntl } from 'react-intl';
7
16
 
8
- const NotFoundPage = () => 'TODO NOT FOUND';
17
+ const NoContentType = () => {
18
+ const { formatMessage } = useIntl();
19
+ useFocusWhenNavigate();
9
20
 
10
- export default NotFoundPage;
21
+ return (
22
+ <Main labelledBy="title">
23
+ <HeaderLayout
24
+ id="title"
25
+ title={formatMessage({
26
+ id: 'content-manager.pageNotFound',
27
+ defaultMessage: 'Page not found',
28
+ })}
29
+ />
30
+ <ContentLayout>
31
+ <EmptyStateLayout
32
+ action={
33
+ <LinkButton variant="secondary" endIcon={<ArrowRight />} to="/">
34
+ {formatMessage({
35
+ id: 'app.components.NotFoundPage.back',
36
+ defaultMessage: 'Back to homepage',
37
+ })}
38
+ </LinkButton>
39
+ }
40
+ content={formatMessage({
41
+ id: 'app.page.not.found',
42
+ defaultMessage: "Oops! We can't seem to find the page you're looging for...",
43
+ })}
44
+ hasRadius
45
+ icon={<EmptyPictures width="10rem" />}
46
+ shadow="tableShadow"
47
+ />
48
+ </ContentLayout>
49
+ </Main>
50
+ );
51
+ };
52
+
53
+ export default NoContentType;
@@ -111,7 +111,7 @@ const ApiTokenListView = () => {
111
111
  >
112
112
  {formatMessage({
113
113
  id: 'Settings.apiTokens.create',
114
- defaultMessage: 'Add Entry',
114
+ defaultMessage: 'Create new API Token',
115
115
  })}
116
116
  </LinkButton>
117
117
  ) : (
@@ -63,7 +63,7 @@ const EventInput = ({ isDraftAndPublish }) => {
63
63
  : displayedData.events.default;
64
64
 
65
65
  const { formatMessage } = useIntl();
66
- const { values, errors, handleChange: onChange } = useFormikContext();
66
+ const { values, handleChange: onChange } = useFormikContext();
67
67
 
68
68
  const inputName = 'events';
69
69
  const inputValue = values.events;
@@ -100,7 +100,7 @@ const EventInput = ({ isDraftAndPublish }) => {
100
100
 
101
101
  return (
102
102
  <Stack size={1}>
103
- <FieldLabel required>
103
+ <FieldLabel>
104
104
  {formatMessage({
105
105
  id: 'Settings.webhooks.form.events',
106
106
  defaultMessage: 'Events',
@@ -154,14 +154,6 @@ const EventInput = ({ isDraftAndPublish }) => {
154
154
  })}
155
155
  </tbody>
156
156
  </StyledTable>
157
- {errors.events && (
158
- <Typography variant="pi" textColor="danger600" data-strapi-field-error>
159
- {formatMessage({
160
- id: 'components.Input.error.validation.required',
161
- defaultMessage: 'This value is required',
162
- })}
163
- </Typography>
164
- )}
165
157
  </Stack>
166
158
  );
167
159
  };
@@ -29,10 +29,7 @@ const schema = yup.object().shape({
29
29
  })
30
30
  );
31
31
  }),
32
- events: yup
33
- .array()
34
- .min(1, translatedErrors.min)
35
- .required(translatedErrors.required),
32
+ events: yup.array(),
36
33
  });
37
34
 
38
35
  export default schema;
@@ -281,7 +281,10 @@ const ListView = () => {
281
281
  size="L"
282
282
  variant="danger-light"
283
283
  >
284
- Delete
284
+ {formatMessage({
285
+ id: 'Settings.webhooks.events.delete',
286
+ defaultMessage: 'Delete',
287
+ })}
285
288
  </Button>
286
289
  </>
287
290
  }