@strapi/admin 4.15.5-alpha.4 → 4.15.5-alpha.6

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 (183) hide show
  1. package/dist/_chunks/{AuthenticatedApp-31e6418d.js → AuthenticatedApp-052b1f3f.js} +21 -21
  2. package/dist/_chunks/{AuthenticatedApp-31e6418d.js.map → AuthenticatedApp-052b1f3f.js.map} +1 -1
  3. package/dist/_chunks/{AuthenticatedApp-52d37e32.mjs → AuthenticatedApp-4cc69f67.mjs} +21 -21
  4. package/dist/_chunks/{AuthenticatedApp-52d37e32.mjs.map → AuthenticatedApp-4cc69f67.mjs.map} +1 -1
  5. package/dist/_chunks/{HomePage-0f953b49.js → HomePage-2e941916.js} +4 -4
  6. package/dist/_chunks/{HomePage-0f953b49.js.map → HomePage-2e941916.js.map} +1 -1
  7. package/dist/_chunks/{HomePage-1e7b2e66.mjs → HomePage-64aa34e8.mjs} +4 -4
  8. package/dist/_chunks/{HomePage-1e7b2e66.mjs.map → HomePage-64aa34e8.mjs.map} +1 -1
  9. package/dist/_chunks/{HomePage-a2c12504.mjs → HomePage-7a55e445.mjs} +4 -4
  10. package/dist/_chunks/{HomePage-a2c12504.mjs.map → HomePage-7a55e445.mjs.map} +1 -1
  11. package/dist/_chunks/{HomePage-d0f7fc69.js → HomePage-8cb64a1d.js} +4 -4
  12. package/dist/_chunks/{HomePage-d0f7fc69.js.map → HomePage-8cb64a1d.js.map} +1 -1
  13. package/dist/_chunks/{InstalledPluginsPage-46e14507.js → InstalledPluginsPage-5209e974.js} +3 -3
  14. package/dist/_chunks/{InstalledPluginsPage-46e14507.js.map → InstalledPluginsPage-5209e974.js.map} +1 -1
  15. package/dist/_chunks/{InstalledPluginsPage-3fc71003.mjs → InstalledPluginsPage-dff1be98.mjs} +3 -3
  16. package/dist/_chunks/{InstalledPluginsPage-3fc71003.mjs.map → InstalledPluginsPage-dff1be98.mjs.map} +1 -1
  17. package/dist/_chunks/{Login-550366a9.js → Login-e0373d0e.js} +2 -2
  18. package/dist/_chunks/{Login-550366a9.js.map → Login-e0373d0e.js.map} +1 -1
  19. package/dist/_chunks/{Login-57e0fd9c.mjs → Login-f60d0115.mjs} +2 -2
  20. package/dist/_chunks/{Login-57e0fd9c.mjs.map → Login-f60d0115.mjs.map} +1 -1
  21. package/dist/_chunks/{MarketplacePage-2505749a.mjs → MarketplacePage-602fc4ee.mjs} +3 -3
  22. package/dist/_chunks/{MarketplacePage-2505749a.mjs.map → MarketplacePage-602fc4ee.mjs.map} +1 -1
  23. package/dist/_chunks/{MarketplacePage-138e7b39.js → MarketplacePage-62570c61.js} +3 -3
  24. package/dist/_chunks/{MarketplacePage-138e7b39.js.map → MarketplacePage-62570c61.js.map} +1 -1
  25. package/dist/_chunks/{ProfilePage-bd50b4f3.mjs → ProfilePage-1d607e48.mjs} +3 -3
  26. package/dist/_chunks/{ProfilePage-bd50b4f3.mjs.map → ProfilePage-1d607e48.mjs.map} +1 -1
  27. package/dist/_chunks/{ProfilePage-23b8a29f.js → ProfilePage-e7c7f60a.js} +3 -3
  28. package/dist/_chunks/{ProfilePage-23b8a29f.js.map → ProfilePage-e7c7f60a.js.map} +1 -1
  29. package/dist/_chunks/{constants-362e760f.mjs → constants-0215e710.mjs} +6 -6
  30. package/dist/_chunks/{constants-362e760f.mjs.map → constants-0215e710.mjs.map} +1 -1
  31. package/dist/_chunks/{constants-88f9d2a0.js → constants-1aae728c.js} +3 -3
  32. package/dist/_chunks/{constants-88f9d2a0.js.map → constants-1aae728c.js.map} +1 -1
  33. package/dist/_chunks/{constants-6dcb43aa.mjs → constants-428b48c7.mjs} +2 -2
  34. package/dist/_chunks/{constants-6dcb43aa.mjs.map → constants-428b48c7.mjs.map} +1 -1
  35. package/dist/_chunks/{constants-e2c67ec8.mjs → constants-6128de70.mjs} +5 -5
  36. package/dist/_chunks/{constants-e2c67ec8.mjs.map → constants-6128de70.mjs.map} +1 -1
  37. package/dist/_chunks/{constants-59bcff2e.mjs → constants-6e912136.mjs} +3 -3
  38. package/dist/_chunks/{constants-59bcff2e.mjs.map → constants-6e912136.mjs.map} +1 -1
  39. package/dist/_chunks/{constants-ac7899ed.js → constants-873f0b02.js} +5 -5
  40. package/dist/_chunks/{constants-ac7899ed.js.map → constants-873f0b02.js.map} +1 -1
  41. package/dist/_chunks/{constants-4539f7ac.js → constants-c29c58fe.js} +6 -6
  42. package/dist/_chunks/{constants-4539f7ac.js.map → constants-c29c58fe.js.map} +1 -1
  43. package/dist/_chunks/{constants-06897e38.js → constants-dde6f1d0.js} +2 -2
  44. package/dist/_chunks/{constants-06897e38.js.map → constants-dde6f1d0.js.map} +1 -1
  45. package/dist/_chunks/{index-be02d51c.js → index-011c80df.js} +20 -20
  46. package/dist/_chunks/{index-be02d51c.js.map → index-011c80df.js.map} +1 -1
  47. package/dist/_chunks/{index-70189e76.mjs → index-098cfdc0.mjs} +3 -3
  48. package/dist/_chunks/{index-70189e76.mjs.map → index-098cfdc0.mjs.map} +1 -1
  49. package/dist/_chunks/{index-aceb13c1.mjs → index-09f50ad7.mjs} +4 -4
  50. package/dist/_chunks/{index-aceb13c1.mjs.map → index-09f50ad7.mjs.map} +1 -1
  51. package/dist/_chunks/{index-19b1984d.js → index-0dcf223b.js} +2 -2
  52. package/dist/_chunks/{index-19b1984d.js.map → index-0dcf223b.js.map} +1 -1
  53. package/dist/_chunks/{index-23925f10.mjs → index-0dd93c2e.mjs} +2 -2
  54. package/dist/_chunks/{index-23925f10.mjs.map → index-0dd93c2e.mjs.map} +1 -1
  55. package/dist/_chunks/{index-ce41b6f0.mjs → index-0e6b3168.mjs} +4 -4
  56. package/dist/_chunks/{index-ce41b6f0.mjs.map → index-0e6b3168.mjs.map} +1 -1
  57. package/dist/_chunks/{index-dc4938ad.mjs → index-18c52895.mjs} +5 -5
  58. package/dist/_chunks/{index-dc4938ad.mjs.map → index-18c52895.mjs.map} +1 -1
  59. package/dist/_chunks/{index-133699a3.js → index-19517b07.js} +4 -4
  60. package/dist/_chunks/{index-133699a3.js.map → index-19517b07.js.map} +1 -1
  61. package/dist/_chunks/{index-bb22dbbc.mjs → index-19bf0d84.mjs} +3 -3
  62. package/dist/_chunks/{index-bb22dbbc.mjs.map → index-19bf0d84.mjs.map} +1 -1
  63. package/dist/_chunks/{index-36a7c525.js → index-22d25b03.js} +3 -3
  64. package/dist/_chunks/{index-36a7c525.js.map → index-22d25b03.js.map} +1 -1
  65. package/dist/_chunks/{index-3a96c79f.mjs → index-25f64a5b.mjs} +3 -3
  66. package/dist/_chunks/{index-3a96c79f.mjs.map → index-25f64a5b.mjs.map} +1 -1
  67. package/dist/_chunks/{index-628c5937.js → index-2ee9157f.js} +8 -8
  68. package/dist/_chunks/{index-628c5937.js.map → index-2ee9157f.js.map} +1 -1
  69. package/dist/_chunks/{index-cd6b99a8.js → index-347f52cd.js} +5 -5
  70. package/dist/_chunks/{index-cd6b99a8.js.map → index-347f52cd.js.map} +1 -1
  71. package/dist/_chunks/{index-c36d6802.js → index-3890a641.js} +3 -3
  72. package/dist/_chunks/{index-c36d6802.js.map → index-3890a641.js.map} +1 -1
  73. package/dist/_chunks/{index-a0af8beb.js → index-3b7eba5f.js} +3 -3
  74. package/dist/_chunks/{index-a0af8beb.js.map → index-3b7eba5f.js.map} +1 -1
  75. package/dist/_chunks/{index-1a7cc203.mjs → index-3fdbcbff.mjs} +3 -3
  76. package/dist/_chunks/{index-1a7cc203.mjs.map → index-3fdbcbff.mjs.map} +1 -1
  77. package/dist/_chunks/{index-898ba1c6.js → index-3fe35214.js} +3 -3
  78. package/dist/_chunks/{index-898ba1c6.js.map → index-3fe35214.js.map} +1 -1
  79. package/dist/_chunks/{index-0b787ac1.js → index-423d7707.js} +5 -5
  80. package/dist/_chunks/{index-0b787ac1.js.map → index-423d7707.js.map} +1 -1
  81. package/dist/_chunks/{index-2c76e5e2.js → index-48824a39.js} +3 -3
  82. package/dist/_chunks/{index-2c76e5e2.js.map → index-48824a39.js.map} +1 -1
  83. package/dist/_chunks/{index-ff9d30ef.js → index-4c9d7545.js} +5 -5
  84. package/dist/_chunks/{index-ff9d30ef.js.map → index-4c9d7545.js.map} +1 -1
  85. package/dist/_chunks/{index-2b48526d.mjs → index-50a55783.mjs} +5 -5
  86. package/dist/_chunks/{index-2b48526d.mjs.map → index-50a55783.mjs.map} +1 -1
  87. package/dist/_chunks/{index-1a3e997a.mjs → index-55321986.mjs} +8 -8
  88. package/dist/_chunks/{index-1a3e997a.mjs.map → index-55321986.mjs.map} +1 -1
  89. package/dist/_chunks/{index-3be46ca9.mjs → index-56931941.mjs} +3 -3
  90. package/dist/_chunks/{index-3be46ca9.mjs.map → index-56931941.mjs.map} +1 -1
  91. package/dist/_chunks/{index-03e8b9e3.mjs → index-58bbc57f.mjs} +3 -3
  92. package/dist/_chunks/{index-03e8b9e3.mjs.map → index-58bbc57f.mjs.map} +1 -1
  93. package/dist/_chunks/{index-4b8c01d4.js → index-65f3f3b1.js} +2 -2
  94. package/dist/_chunks/{index-4b8c01d4.js.map → index-65f3f3b1.js.map} +1 -1
  95. package/dist/_chunks/{index-6db2b431.js → index-70a326dc.js} +5 -5
  96. package/dist/_chunks/{index-6db2b431.js.map → index-70a326dc.js.map} +1 -1
  97. package/dist/_chunks/{index-148939b0.js → index-72c7683c.js} +4 -4
  98. package/dist/_chunks/{index-148939b0.js.map → index-72c7683c.js.map} +1 -1
  99. package/dist/_chunks/{index-6e44aef9.js → index-753c6b59.js} +3 -3
  100. package/dist/_chunks/{index-6e44aef9.js.map → index-753c6b59.js.map} +1 -1
  101. package/dist/_chunks/{index-fae4b277.mjs → index-75a43800.mjs} +4 -4
  102. package/dist/_chunks/{index-fae4b277.mjs.map → index-75a43800.mjs.map} +1 -1
  103. package/dist/_chunks/{index-d63b0b91.js → index-77e6bb8d.js} +4 -4
  104. package/dist/_chunks/{index-d63b0b91.js.map → index-77e6bb8d.js.map} +1 -1
  105. package/dist/_chunks/{index-5113c6be.mjs → index-7f8a49c1.mjs} +2 -2
  106. package/dist/_chunks/{index-5113c6be.mjs.map → index-7f8a49c1.mjs.map} +1 -1
  107. package/dist/_chunks/{index-994d2c5d.mjs → index-84c3bfeb.mjs} +2 -2
  108. package/dist/_chunks/{index-994d2c5d.mjs.map → index-84c3bfeb.mjs.map} +1 -1
  109. package/dist/_chunks/{index-5c19f439.js → index-85026f16.js} +5 -5
  110. package/dist/_chunks/{index-5c19f439.js.map → index-85026f16.js.map} +1 -1
  111. package/dist/_chunks/{index-c9e68296.mjs → index-86db271c.mjs} +5 -5
  112. package/dist/_chunks/{index-c9e68296.mjs.map → index-86db271c.mjs.map} +1 -1
  113. package/dist/_chunks/{index-be8eb534.js → index-88a630d3.js} +3 -3
  114. package/dist/_chunks/{index-be8eb534.js.map → index-88a630d3.js.map} +1 -1
  115. package/dist/_chunks/{index-91ef29b3.mjs → index-8c49ec55.mjs} +3 -3
  116. package/dist/_chunks/{index-91ef29b3.mjs.map → index-8c49ec55.mjs.map} +1 -1
  117. package/dist/_chunks/{index-15c76f0b.mjs → index-8ddc40ed.mjs} +4 -4
  118. package/dist/_chunks/{index-15c76f0b.mjs.map → index-8ddc40ed.mjs.map} +1 -1
  119. package/dist/_chunks/{index-24b626a6.js → index-9214b657.js} +3 -3
  120. package/dist/_chunks/{index-24b626a6.js.map → index-9214b657.js.map} +1 -1
  121. package/dist/_chunks/{index-58ffc071.js → index-95aa46db.js} +3 -3
  122. package/dist/_chunks/{index-58ffc071.js.map → index-95aa46db.js.map} +1 -1
  123. package/dist/_chunks/{index-8bca9e4c.mjs → index-a9047c13.mjs} +4 -4
  124. package/dist/_chunks/{index-8bca9e4c.mjs.map → index-a9047c13.mjs.map} +1 -1
  125. package/dist/_chunks/{index-4fef292a.mjs → index-ab4e350f.mjs} +3 -3
  126. package/dist/_chunks/{index-4fef292a.mjs.map → index-ab4e350f.mjs.map} +1 -1
  127. package/dist/_chunks/{index-9195720c.js → index-ac37ca84.js} +5 -5
  128. package/dist/_chunks/{index-9195720c.js.map → index-ac37ca84.js.map} +1 -1
  129. package/dist/_chunks/{index-aee95cda.js → index-ae4b769d.js} +3 -3
  130. package/dist/_chunks/{index-aee95cda.js.map → index-ae4b769d.js.map} +1 -1
  131. package/dist/_chunks/{index-4544af4c.mjs → index-af4b6c84.mjs} +20 -20
  132. package/dist/_chunks/{index-4544af4c.mjs.map → index-af4b6c84.mjs.map} +1 -1
  133. package/dist/_chunks/{index-9f8605e5.mjs → index-b0989259.mjs} +3 -3
  134. package/dist/_chunks/{index-9f8605e5.mjs.map → index-b0989259.mjs.map} +1 -1
  135. package/dist/_chunks/{index-64a156de.js → index-b45bf5b8.js} +3 -3
  136. package/dist/_chunks/{index-64a156de.js.map → index-b45bf5b8.js.map} +1 -1
  137. package/dist/_chunks/{index-610889c4.mjs → index-b8295ba1.mjs} +4 -4
  138. package/dist/_chunks/{index-610889c4.mjs.map → index-b8295ba1.mjs.map} +1 -1
  139. package/dist/_chunks/{index-b17c7874.mjs → index-c3f0206f.mjs} +3 -3
  140. package/dist/_chunks/{index-b17c7874.mjs.map → index-c3f0206f.mjs.map} +1 -1
  141. package/dist/_chunks/{index-074a5de8.js → index-c4cdb3d2.js} +2 -2
  142. package/dist/_chunks/{index-074a5de8.js.map → index-c4cdb3d2.js.map} +1 -1
  143. package/dist/_chunks/{index-6b1148f6.js → index-cb321951.js} +4 -4
  144. package/dist/_chunks/{index-6b1148f6.js.map → index-cb321951.js.map} +1 -1
  145. package/dist/_chunks/{index-13ab14ec.mjs → index-cce3ffb3.mjs} +3 -3
  146. package/dist/_chunks/{index-13ab14ec.mjs.map → index-cce3ffb3.mjs.map} +1 -1
  147. package/dist/_chunks/{index-9deb8ccb.js → index-cdaa6174.js} +4 -4
  148. package/dist/_chunks/{index-9deb8ccb.js.map → index-cdaa6174.js.map} +1 -1
  149. package/dist/_chunks/{index-eb59cabf.js → index-d155c4c0.js} +3 -3
  150. package/dist/_chunks/{index-eb59cabf.js.map → index-d155c4c0.js.map} +1 -1
  151. package/dist/_chunks/{index-67a35378.mjs → index-d81aa061.mjs} +3 -3
  152. package/dist/_chunks/{index-67a35378.mjs.map → index-d81aa061.mjs.map} +1 -1
  153. package/dist/_chunks/{index-8cafda81.js → index-d95b6d21.js} +4 -4
  154. package/dist/_chunks/{index-8cafda81.js.map → index-d95b6d21.js.map} +1 -1
  155. package/dist/_chunks/{index-d3dea80c.js → index-dd0a8ff3.js} +6 -6
  156. package/dist/_chunks/{index-d3dea80c.js.map → index-dd0a8ff3.js.map} +1 -1
  157. package/dist/_chunks/{index-ea43b165.mjs → index-dddefc45.mjs} +5 -5
  158. package/dist/_chunks/{index-ea43b165.mjs.map → index-dddefc45.mjs.map} +1 -1
  159. package/dist/_chunks/{index-c59a117e.mjs → index-e1e11ca2.mjs} +3 -3
  160. package/dist/_chunks/{index-c59a117e.mjs.map → index-e1e11ca2.mjs.map} +1 -1
  161. package/dist/_chunks/{index-c45d5f19.mjs → index-e38dc1b2.mjs} +4 -4
  162. package/dist/_chunks/{index-c45d5f19.mjs.map → index-e38dc1b2.mjs.map} +1 -1
  163. package/dist/_chunks/{index-0778959c.mjs → index-e9697692.mjs} +6 -6
  164. package/dist/_chunks/{index-0778959c.mjs.map → index-e9697692.mjs.map} +1 -1
  165. package/dist/_chunks/{index-02064a74.js → index-eefc7852.js} +3 -3
  166. package/dist/_chunks/{index-02064a74.js.map → index-eefc7852.js.map} +1 -1
  167. package/dist/_chunks/{index-9eb4c34d.mjs → index-f4138f76.mjs} +5 -5
  168. package/dist/_chunks/{index-9eb4c34d.mjs.map → index-f4138f76.mjs.map} +1 -1
  169. package/dist/_chunks/{index-86172b2d.js → index-fc62e1c6.js} +4 -4
  170. package/dist/_chunks/{index-86172b2d.js.map → index-fc62e1c6.js.map} +1 -1
  171. package/dist/_chunks/{index-59880344.mjs → index-fd85d188.mjs} +5 -5
  172. package/dist/_chunks/{index-59880344.mjs.map → index-fd85d188.mjs.map} +1 -1
  173. package/dist/_chunks/{schema-e3080441.js → schema-93c4fc79.js} +2 -2
  174. package/dist/_chunks/{schema-e3080441.js.map → schema-93c4fc79.js.map} +1 -1
  175. package/dist/_chunks/{schema-549f8236.mjs → schema-db83441c.mjs} +2 -2
  176. package/dist/_chunks/{schema-549f8236.mjs.map → schema-db83441c.mjs.map} +1 -1
  177. package/dist/_chunks/{validateWorkflow-7bff41ac.mjs → validateWorkflow-1dc51587.mjs} +3 -3
  178. package/dist/_chunks/{validateWorkflow-7bff41ac.mjs.map → validateWorkflow-1dc51587.mjs.map} +1 -1
  179. package/dist/_chunks/{validateWorkflow-a7311af1.js → validateWorkflow-8581e095.js} +3 -3
  180. package/dist/_chunks/{validateWorkflow-a7311af1.js.map → validateWorkflow-8581e095.js.map} +1 -1
  181. package/dist/admin/index.js +1 -1
  182. package/dist/admin/index.mjs +1 -1
  183. package/package.json +12 -12
@@ -9,12 +9,12 @@ const reactHelmet = require("react-helmet");
9
9
  const reactIntl = require("react-intl");
10
10
  const reactRedux = require("react-redux");
11
11
  const useDebounce = require("./useDebounce-4712871e.js");
12
- const AuthenticatedApp = require("./AuthenticatedApp-31e6418d.js");
12
+ const AuthenticatedApp = require("./AuthenticatedApp-052b1f3f.js");
13
13
  const styled = require("styled-components");
14
14
  const v2 = require("@strapi/design-system/v2");
15
15
  const pluralize = require("pluralize");
16
16
  const semver = require("semver");
17
- const index = require("./index-133699a3.js");
17
+ const index = require("./index-19517b07.js");
18
18
  const qs = require("qs");
19
19
  const reactQuery = require("react-query");
20
20
  require("semver/functions/lt");
@@ -1032,4 +1032,4 @@ const ProtectedMarketplacePage = () => {
1032
1032
  };
1033
1033
  exports.MarketplacePage = MarketplacePage;
1034
1034
  exports.ProtectedMarketplacePage = ProtectedMarketplacePage;
1035
- //# sourceMappingURL=MarketplacePage-138e7b39.js.map
1035
+ //# sourceMappingURL=MarketplacePage-62570c61.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MarketplacePage-138e7b39.js","sources":["../../admin/src/pages/Marketplace/components/NpmPackagesFilters.tsx","../../admin/src/pages/Marketplace/components/NpmPackageCard.tsx","../../admin/src/pages/Marketplace/components/NpmPackagesGrid.tsx","../../admin/src/pages/Marketplace/components/PageHeader.tsx","../../admin/src/pages/Marketplace/components/OfflineLayout.tsx","../../admin/src/pages/Marketplace/components/SortSelect.tsx","../../admin/src/pages/Marketplace/hooks/useMarketplaceData.ts","../../admin/src/pages/Marketplace/hooks/useNavigatorOnline.ts","../../admin/src/pages/Marketplace/MarketplacePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n Tag,\n MultiSelect,\n MultiSelectOption,\n MultiSelectProps,\n Popover,\n Flex,\n} from '@strapi/design-system';\nimport { Cross, Filter } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport type { Categories, Collections, FilterTypes } from '../hooks/useMarketplaceData';\nimport type { NpmPackageType, MarketplacePageQuery } from '../MarketplacePage';\n\ninterface NpmPackagesFiltersProps {\n handleSelectClear: (type: FilterTypes) => void;\n handleSelectChange: (update: Partial<MarketplacePageQuery>) => void;\n npmPackageType: NpmPackageType;\n possibleCategories: Partial<Record<Categories, number>>;\n possibleCollections: Partial<Record<Collections, number>>;\n query: MarketplacePageQuery;\n}\n\nconst NpmPackagesFilters = ({\n handleSelectClear,\n handleSelectChange,\n npmPackageType,\n possibleCategories,\n possibleCollections,\n query,\n}: NpmPackagesFiltersProps) => {\n const [isVisible, setIsVisible] = React.useState(false);\n const buttonRef = React.useRef<HTMLButtonElement>(null!);\n const { formatMessage } = useIntl();\n\n const handleToggle = () => setIsVisible((prev) => !prev);\n\n const handleTagRemove = (tagToRemove: string, filterType: FilterTypes) => {\n const update = {\n [filterType]: (query[filterType] ?? []).filter((previousTag) => previousTag !== tagToRemove),\n };\n\n handleSelectChange(update);\n };\n\n return (\n <>\n <Box paddingTop={1} paddingBottom={1}>\n <ButtonToggle\n variant=\"tertiary\"\n ref={buttonRef}\n startIcon={<Filter />}\n onClick={handleToggle}\n size=\"S\"\n >\n {formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </ButtonToggle>\n {isVisible && (\n <Popover source={buttonRef} onDismiss={handleToggle} padding={3} spacing={4}>\n <FiltersFlex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <FilterSelect\n message={formatMessage({\n id: 'admin.pages.MarketPlacePage.filters.collections',\n defaultMessage: 'Collections',\n })}\n value={query?.collections || []}\n onChange={(newCollections) => {\n const update = { collections: newCollections };\n handleSelectChange(update);\n }}\n onClear={() => handleSelectClear('collections')}\n possibleFilters={possibleCollections}\n customizeContent={(values) =>\n formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.filters.collectionsSelected',\n defaultMessage:\n '{count, plural, =0 {No collections} one {# collection} other {# collections}} selected',\n },\n { count: values?.length ?? 0 }\n )\n }\n />\n {npmPackageType === 'plugin' && (\n <FilterSelect\n message={formatMessage({\n id: 'admin.pages.MarketPlacePage.filters.categories',\n defaultMessage: 'Categories',\n })}\n value={query?.categories || []}\n onChange={(newCategories) => {\n const update = { categories: newCategories };\n handleSelectChange(update);\n }}\n onClear={() => handleSelectClear('categories')}\n possibleFilters={possibleCategories}\n customizeContent={(values) =>\n formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.filters.categoriesSelected',\n defaultMessage:\n '{count, plural, =0 {No categories} one {# category} other {# categories}} selected',\n },\n { count: values?.length ?? 0 }\n )\n }\n />\n )}\n </FiltersFlex>\n </Popover>\n )}\n </Box>\n {query.collections?.map((collection) => (\n <Box key={collection} padding={1}>\n <Tag icon={<Cross />} onClick={() => handleTagRemove(collection, 'collections')}>\n {collection}\n </Tag>\n </Box>\n ))}\n {npmPackageType === 'plugin' &&\n query.categories?.map((category) => (\n <Box key={category} padding={1}>\n <Tag icon={<Cross />} onClick={() => handleTagRemove(category, 'categories')}>\n {category}\n </Tag>\n </Box>\n ))}\n </>\n );\n};\n\nconst ButtonToggle = styled(Button)`\n height: ${({ theme }) => theme.sizes.input.S};\n`;\n\nconst FiltersFlex = styled(Flex)`\n /* Hide the label, every input needs a label. */\n label {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * FilterSelect\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FilterSelectProps\n extends Pick<MultiSelectProps, 'customizeContent' | 'onClear' | 'onChange' | 'value'> {\n message: string;\n possibleFilters:\n | NpmPackagesFiltersProps['possibleCategories']\n | NpmPackagesFiltersProps['possibleCollections'];\n}\n\nconst FilterSelect = ({\n message,\n value,\n onChange,\n possibleFilters,\n onClear,\n customizeContent,\n}: FilterSelectProps) => {\n return (\n <MultiSelect\n data-testid={`${message}-button`}\n label={message}\n placeholder={message}\n size=\"M\"\n onChange={onChange}\n onClear={onClear}\n value={value}\n customizeContent={customizeContent}\n >\n {Object.entries(possibleFilters).map(([filterName, count]) => {\n return (\n <MultiSelectOption\n data-testid={`${filterName}-${count}`}\n key={filterName}\n value={filterName}\n >\n {`${filterName} (${count})`}\n </MultiSelectOption>\n );\n })}\n </MultiSelect>\n );\n};\n\nexport { NpmPackagesFilters };\nexport type { NpmPackagesFiltersProps };\n","import { Box, Flex, Icon, Tooltip, Typography, Divider, Button } from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport {\n useTracking,\n pxToRem,\n AppInfoContextValue,\n useNotification,\n useClipboard,\n} from '@strapi/helper-plugin';\nimport { CheckCircle, ExternalLink, Download, Github, Star, Check, Duplicate } from '@strapi/icons';\nimport pluralize from 'pluralize';\nimport { useIntl } from 'react-intl';\nimport * as semver from 'semver';\nimport styled from 'styled-components';\n\nimport StrapiLogo from '../../../assets/images/logo-strapi-2022.svg';\n\nimport type { Plugin, Provider } from '../hooks/useMarketplaceData';\nimport type { NpmPackageType } from '../MarketplacePage';\n\n// Custom component to have an ellipsis after the 2nd line\nconst EllipsisText = styled(Typography)`\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n overflow: hidden;\n`;\n\ninterface NpmPackageCardProps extends Pick<AppInfoContextValue, 'useYarn'> {\n npmPackage: Plugin | Provider;\n isInstalled: boolean;\n isInDevelopmentMode: AppInfoContextValue['autoReload'];\n npmPackageType: NpmPackageType;\n strapiAppVersion: AppInfoContextValue['strapiVersion'];\n}\n\nconst NpmPackageCard = ({\n npmPackage,\n isInstalled,\n useYarn,\n isInDevelopmentMode,\n npmPackageType,\n strapiAppVersion,\n}: NpmPackageCardProps) => {\n const { attributes } = npmPackage;\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const commandToCopy = useYarn\n ? `yarn add ${attributes.npmPackageName}`\n : `npm install ${attributes.npmPackageName}`;\n\n const madeByStrapiMessage = formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.tooltip.madeByStrapi',\n defaultMessage: 'Made by Strapi',\n });\n\n const npmPackageHref = `https://market.strapi.io/${pluralize.plural(npmPackageType)}/${\n attributes.slug\n }`;\n\n return (\n <Flex\n direction=\"column\"\n justifyContent=\"space-between\"\n paddingTop={4}\n paddingRight={4}\n paddingBottom={4}\n paddingLeft={4}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n height=\"100%\"\n alignItems=\"normal\"\n data-testid=\"npm-package-card\"\n >\n <Box>\n <Flex direction=\"row\" justifyContent=\"space-between\" alignItems=\"flex-start\">\n <Box\n as=\"img\"\n src={attributes.logo.url}\n alt={`${attributes.name} logo`}\n hasRadius\n width={11}\n height={11}\n />\n <PackageStats\n githubStars={attributes.githubStars}\n npmDownloads={attributes.npmDownloads}\n npmPackageType={npmPackageType}\n />\n </Flex>\n <Box paddingTop={4}>\n <Typography as=\"h3\" variant=\"delta\">\n <Flex alignItems=\"center\">\n {attributes.name}\n {attributes.validated && !attributes.madeByStrapi && (\n <Tooltip\n description={formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.tooltip.verified',\n defaultMessage: 'Plugin verified by Strapi',\n })}\n >\n <Flex>\n <Icon as={CheckCircle} marginLeft={2} color=\"success600\" />\n </Flex>\n </Tooltip>\n )}\n {attributes.madeByStrapi && (\n <Tooltip description={madeByStrapiMessage}>\n <Flex>\n <Box\n as=\"img\"\n src={StrapiLogo}\n alt={madeByStrapiMessage}\n marginLeft={1}\n width={6}\n height=\"auto\"\n />\n </Flex>\n </Tooltip>\n )}\n </Flex>\n </Typography>\n </Box>\n <Box paddingTop={2}>\n <EllipsisText as=\"p\" variant=\"omega\" textColor=\"neutral600\">\n {attributes.description}\n </EllipsisText>\n </Box>\n </Box>\n\n <Flex gap={2} style={{ alignSelf: 'flex-end' }} paddingTop={6}>\n <LinkButton\n size=\"S\"\n href={npmPackageHref}\n isExternal\n endIcon={<ExternalLink />}\n aria-label={formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.info.label',\n defaultMessage: 'Learn more about {pluginName}',\n },\n { pluginName: attributes.name }\n )}\n variant=\"tertiary\"\n onClick={() => trackUsage('didPluginLearnMore')}\n >\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.info.text',\n defaultMessage: 'More',\n })}\n </LinkButton>\n <InstallPluginButton\n isInstalled={isInstalled}\n isInDevelopmentMode={isInDevelopmentMode}\n commandToCopy={commandToCopy}\n strapiAppVersion={strapiAppVersion}\n strapiPeerDepVersion={attributes.strapiVersion}\n pluginName={attributes.name}\n />\n </Flex>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * InstallPluginButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface InstallPluginButtonProps\n extends Pick<NpmPackageCardProps, 'isInstalled' | 'isInDevelopmentMode' | 'strapiAppVersion'> {\n commandToCopy: string;\n pluginName: string;\n strapiPeerDepVersion?: string;\n}\n\nconst InstallPluginButton = ({\n isInstalled,\n isInDevelopmentMode,\n commandToCopy,\n strapiAppVersion,\n strapiPeerDepVersion,\n pluginName,\n}: InstallPluginButtonProps) => {\n const toggleNotification = useNotification();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { copy } = useClipboard();\n\n const handleCopy = async () => {\n const didCopy = await copy(commandToCopy);\n\n if (didCopy) {\n trackUsage('willInstallPlugin');\n toggleNotification({\n type: 'success',\n message: { id: 'admin.pages.MarketPlacePage.plugin.copy.success' },\n });\n }\n };\n\n // Already installed\n if (isInstalled) {\n return (\n <Box paddingLeft={4}>\n <Icon as={Check} marginRight={2} width={12} height={12} color=\"success600\" />\n <Typography variant=\"omega\" textColor=\"success600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.installed',\n defaultMessage: 'Installed',\n })}\n </Typography>\n </Box>\n );\n }\n\n // In development, show install button\n if (isInDevelopmentMode) {\n return (\n <CardButton\n strapiAppVersion={strapiAppVersion}\n strapiPeerDepVersion={strapiPeerDepVersion}\n handleCopy={handleCopy}\n pluginName={pluginName}\n />\n );\n }\n\n // Not in development and plugin not installed already. Show nothing\n return null;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CardButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CardButtonProps\n extends Pick<NpmPackageCardProps, 'strapiAppVersion'>,\n Pick<InstallPluginButtonProps, 'strapiPeerDepVersion' | 'pluginName'> {\n handleCopy: () => void;\n}\n\nconst CardButton = ({\n strapiPeerDepVersion,\n strapiAppVersion,\n handleCopy,\n pluginName,\n}: CardButtonProps) => {\n const { formatMessage } = useIntl();\n const versionRange = semver.validRange(strapiPeerDepVersion);\n const isCompatible = semver.satisfies(strapiAppVersion ?? '', versionRange ?? '');\n\n const installMessage = formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.copy',\n defaultMessage: 'Copy install command',\n });\n\n // Only plugins receive a strapiAppVersion\n if (strapiAppVersion) {\n if (!versionRange || !isCompatible) {\n return (\n <Tooltip\n data-testid={`tooltip-${pluginName}`}\n description={\n !versionRange\n ? formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.version.null',\n defaultMessage:\n 'Unable to verify compatibility with your Strapi version: \"{strapiAppVersion}\"',\n },\n { strapiAppVersion }\n )\n : formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.version',\n defaultMessage:\n 'Update your Strapi version: \"{strapiAppVersion}\" to: \"{versionRange}\"',\n },\n {\n strapiAppVersion,\n versionRange,\n }\n )\n }\n >\n <Button\n size=\"S\"\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={handleCopy}\n disabled={!isCompatible}\n >\n {installMessage}\n </Button>\n </Tooltip>\n );\n }\n }\n\n return (\n <Button size=\"S\" startIcon={<Duplicate />} variant=\"secondary\" onClick={handleCopy}>\n {installMessage}\n </Button>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PackageStats\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PackageStatsProps {\n githubStars?: number;\n npmDownloads?: number;\n npmPackageType: NpmPackageType;\n}\n\nconst PackageStats = ({ githubStars = 0, npmDownloads = 0, npmPackageType }: PackageStatsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex gap={1}>\n {!!githubStars && (\n <>\n <Icon as={Github} height={pxToRem(12)} width={pxToRem(12)} aria-hidden />\n <Icon as={Star} height={pxToRem(12)} width={pxToRem(12)} color=\"warning500\" aria-hidden />\n <p\n aria-label={formatMessage(\n {\n id: `admin.pages.MarketPlacePage.${npmPackageType}.githubStars`,\n defaultMessage: `This {package} was starred {starsCount} on GitHub`,\n },\n {\n starsCount: githubStars,\n package: npmPackageType,\n }\n )}\n >\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {githubStars}\n </Typography>\n </p>\n <VerticalDivider unsetMargin={false} />\n </>\n )}\n <Icon as={Download} height={pxToRem(12)} width={pxToRem(12)} aria-hidden />\n <p\n aria-label={formatMessage(\n {\n id: `admin.pages.MarketPlacePage.${npmPackageType}.downloads`,\n defaultMessage: `This {package} has {downloadsCount} weekly downloads`,\n },\n {\n downloadsCount: npmDownloads,\n package: npmPackageType,\n }\n )}\n >\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {npmDownloads}\n </Typography>\n </p>\n </Flex>\n );\n};\n\nconst VerticalDivider = styled(Divider)`\n width: ${pxToRem(12)};\n transform: rotate(90deg);\n`;\n\nexport { NpmPackageCard };\nexport type { NpmPackageCardProps };\n","import {\n Box,\n Flex,\n Grid,\n GridItem,\n GridLayout,\n Icon,\n Loader,\n Typography,\n} from '@strapi/design-system';\nimport { AnErrorOccurred, AppInfoContextValue } from '@strapi/helper-plugin';\nimport { EmptyDocuments } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { NpmPackageCard, NpmPackageCardProps } from './NpmPackageCard';\n\nimport type { Plugin, Provider } from '../hooks/useMarketplaceData';\n\ninterface NpmPackagesGridProps extends Pick<NpmPackageCardProps, 'npmPackageType' | 'useYarn'> {\n debouncedSearch: string;\n installedPackageNames: string[];\n isInDevelopmentMode: AppInfoContextValue['autoReload'];\n npmPackages?: Array<Plugin | Provider>;\n status: 'idle' | 'loading' | 'error' | 'success';\n strapiAppVersion?: NpmPackageCardProps['strapiAppVersion'];\n}\n\nconst NpmPackagesGrid = ({\n status,\n npmPackages = [],\n installedPackageNames = [],\n useYarn,\n isInDevelopmentMode,\n npmPackageType,\n strapiAppVersion,\n debouncedSearch,\n}: NpmPackagesGridProps) => {\n const { formatMessage } = useIntl();\n\n if (status === 'error') {\n return (\n <Flex paddingTop={8}>\n <AnErrorOccurred />\n </Flex>\n );\n }\n\n if (status === 'loading') {\n return (\n <Flex justifyContent=\"center\" paddingTop={8}>\n <Loader>Loading content...</Loader>\n </Flex>\n );\n }\n\n const emptySearchMessage = formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.search.empty',\n defaultMessage: 'No result for \"{target}\"',\n },\n { target: debouncedSearch }\n );\n\n if (npmPackages.length === 0) {\n return (\n <Box position=\"relative\">\n <GridLayout>\n {Array(12)\n .fill(null)\n .map((_, idx) => (\n <EmptyPluginCard key={idx} height=\"234px\" hasRadius />\n ))}\n </GridLayout>\n <Box position=\"absolute\" top={11} width=\"100%\">\n <Flex alignItems=\"center\" justifyContent=\"center\" direction=\"column\">\n <Icon as={EmptyDocuments} color={undefined} width=\"160px\" height=\"88px\" />\n <Box paddingTop={6}>\n <Typography variant=\"delta\" as=\"p\" textColor=\"neutral600\">\n {emptySearchMessage}\n </Typography>\n </Box>\n </Flex>\n </Box>\n </Box>\n );\n }\n\n return (\n <Grid gap={4}>\n {npmPackages.map((npmPackage) => (\n <GridItem col={4} s={6} xs={12} style={{ height: '100%' }} key={npmPackage.id}>\n <NpmPackageCard\n npmPackage={npmPackage}\n isInstalled={installedPackageNames.includes(npmPackage.attributes.npmPackageName)}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType={npmPackageType}\n strapiAppVersion={strapiAppVersion}\n />\n </GridItem>\n ))}\n </Grid>\n );\n};\n\nconst EmptyPluginCard = styled(Box)`\n background: ${({ theme }) =>\n `linear-gradient(180deg, rgba(234, 234, 239, 0) 0%, ${theme.colors.neutral150} 100%)`};\n opacity: 0.33;\n`;\n\nexport { NpmPackagesGrid };\n","import { HeaderLayout } from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { useTracking } from '@strapi/helper-plugin';\nimport { Upload } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport type { NpmPackageType } from '../MarketplacePage';\n\ninterface PageHeaderProps {\n isOnline?: boolean;\n npmPackageType?: NpmPackageType;\n}\n\nconst PageHeader = ({ isOnline, npmPackageType = 'plugin' }: PageHeaderProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const tracking = npmPackageType === 'provider' ? 'didSubmitProvider' : 'didSubmitPlugin';\n\n return (\n <HeaderLayout\n title={formatMessage({\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n })}\n subtitle={formatMessage({\n id: 'admin.pages.MarketPlacePage.subtitle',\n defaultMessage: 'Get more out of Strapi',\n })}\n primaryAction={\n isOnline && (\n <LinkButton\n startIcon={<Upload />}\n variant=\"tertiary\"\n href={`https://market.strapi.io/submit-${npmPackageType}`}\n onClick={() => trackUsage(tracking)}\n isExternal\n >\n {formatMessage({\n id: `admin.pages.MarketPlacePage.submit.${npmPackageType}.link`,\n defaultMessage: `Submit ${npmPackageType}`,\n })}\n </LinkButton>\n )\n }\n />\n );\n};\n\nexport { PageHeader };\nexport type { PageHeaderProps };\n","import { Box, Flex, Layout, Main, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\n\nimport { PageHeader } from './PageHeader';\n\nconst OfflineLayout = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Layout>\n <Main>\n <PageHeader />\n <Flex\n width=\"100%\"\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n paddingTop={pxToRem(120)}\n >\n <Box paddingBottom={2}>\n <Typography textColor=\"neutral700\" variant=\"alpha\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.offline.title',\n defaultMessage: 'You are offline',\n })}\n </Typography>\n </Box>\n <Box paddingBottom={6}>\n <Typography textColor=\"neutral700\" variant=\"epsilon\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.offline.subtitle',\n defaultMessage: 'You need to be connected to the Internet to access Strapi Market.',\n })}\n </Typography>\n </Box>\n <svg\n width=\"88\"\n height=\"88\"\n viewBox=\"0 0 88 88\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect x=\".5\" y=\".5\" width=\"87\" height=\"87\" rx=\"43.5\" fill=\"#F0F0FF\" />\n <path\n d=\"M34 39.3h-4c-2.6 0-4.7 1-6.6 2.8a9 9 0 0 0-2.7 6.6 9 9 0 0 0 2.7 6.6A9 9 0 0 0 30 58h22.8L34 39.3Zm-11-11 3-3 39 39-3 3-4.7-4.6H30a13.8 13.8 0 0 1-14-14c0-3.8 1.3-7 4-9.7 2.6-2.7 5.7-4.2 9.5-4.3L23 28.2Zm38.2 11.1c3 .2 5.5 1.5 7.6 3.7A11 11 0 0 1 72 51c0 4-1.6 7.2-5 9.5l-3.3-3.4a6.5 6.5 0 0 0 3.6-6.1c0-1.9-.7-3.5-2-5-1.5-1.3-3.1-2-5-2h-3.5v-1.2c0-3.6-1.2-6.6-3.7-9a13 13 0 0 0-15-2.3L34.6 28a17 17 0 0 1 20.3 1.5c3.5 2.7 5.5 6 6.3 10Z\"\n fill=\"#4945FF\"\n />\n <rect x=\".5\" y=\".5\" width=\"87\" height=\"87\" rx=\"43.5\" stroke=\"#D9D8FF\" />\n </svg>\n </Flex>\n </Main>\n </Layout>\n );\n};\n\nexport { OfflineLayout };\n","import { Box, SingleSelectOption, SingleSelect } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nconst SORT_TYPES = {\n 'name:asc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.alphabetical.selected',\n defaultMessage: 'Sort by alphabetical order',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.alphabetical',\n defaultMessage: 'Alphabetical order',\n },\n },\n 'submissionDate:desc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.newest.selected',\n defaultMessage: 'Sort by newest',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.newest',\n defaultMessage: 'Newest',\n },\n },\n 'githubStars:desc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.githubStars.selected',\n defaultMessage: 'Sort by GitHub stars',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.githubStars',\n defaultMessage: 'Number of GitHub stars',\n },\n },\n 'npmDownloads:desc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.npmDownloads.selected',\n defaultMessage: 'Sort by npm downloads',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.npmDownloads',\n defaultMessage: 'Number of downloads',\n },\n },\n} as const;\n\ninterface SortSelectProps {\n sortQuery: keyof typeof SORT_TYPES;\n handleSelectChange: (payload: { sort: string }) => void;\n}\n\nconst SortSelect = ({ sortQuery, handleSelectChange }: SortSelectProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <SelectWrapper>\n <SingleSelect\n size=\"S\"\n id=\"sort-by-select\"\n value={sortQuery}\n customizeContent={() => formatMessage(SORT_TYPES[sortQuery].selected)}\n onChange={(sortName) => {\n // @ts-expect-error – in V2 design-system we'll only ever return strings.\n handleSelectChange({ sort: sortName });\n }}\n label={formatMessage({\n id: 'admin.pages.MarketPlacePage.sort.label',\n defaultMessage: 'Sort by',\n })}\n >\n {Object.entries(SORT_TYPES).map(([sortName, messages]) => {\n return (\n <SingleSelectOption key={sortName} value={sortName}>\n {formatMessage(messages.option)}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </SelectWrapper>\n );\n};\n\nconst SelectWrapper = styled(Box)`\n font-weight: ${({ theme }) => theme.fontWeights.semiBold};\n\n span {\n font-size: ${({ theme }) => theme.fontSizes[1]};\n }\n\n /* Hide the label, every input needs a label. */\n label {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n }\n`;\n\nexport { SortSelect };\nexport type { SortSelectProps };\n","import { useNotifyAT } from '@strapi/design-system';\nimport { useNotification } from '@strapi/helper-plugin';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\n\nimport type { MarketplacePageQuery, NpmPackageType, TabQuery } from '../MarketplacePage';\n\nconst MARKETPLACE_API_URL = 'https://market-api.strapi.io';\n\ninterface UseMarketplaceDataParams {\n npmPackageType: NpmPackageType;\n debouncedSearch: string;\n query?: MarketplacePageQuery;\n tabQuery: TabQuery;\n}\n\ntype Collections =\n | 'Verified'\n | 'Made by the community'\n | 'Made by Strapi'\n | 'Made by official partners';\n\ntype Categories = 'Custom fields' | 'Deployment' | 'Monitoring';\n\ntype FilterTypes = 'categories' | 'collections';\n\ninterface Plugin {\n id: string;\n attributes: {\n name: string;\n description: string;\n slug: string;\n npmPackageName: string;\n npmPackageUrl: string;\n npmDownloads: number;\n repositoryUrl: string;\n githubStars: number;\n logo: {\n url: string;\n };\n developerName: string;\n validated: boolean;\n madeByStrapi: boolean;\n strapiCompatibility: string;\n submissionDate: string;\n collections: Collections[];\n categories: Categories[];\n strapiVersion: string;\n screenshots: Array<{\n url: string;\n }>;\n };\n}\n\ninterface Provider {\n id: string;\n attributes: {\n name: string;\n description: string;\n slug: string;\n npmPackageName: string;\n npmPackageUrl: string;\n npmDownloads: number;\n repositoryUrl: string;\n githubStars: number;\n pluginName: string;\n logo: {\n url: string;\n };\n developerName: string;\n validated: boolean;\n madeByStrapi: boolean;\n strapiCompatibility: string;\n strapiVersion?: never;\n submissionDate: string;\n collections: Collections[];\n };\n}\n\ninterface MarketplaceMeta {\n collections: Record<Collections, number>;\n pagination: {\n page: number;\n pageSize: number;\n pageCount: number;\n total: number;\n };\n}\n\ninterface MarketplaceResponse<TData extends Plugin | Provider> {\n data: TData[];\n meta: TData extends Provider\n ? MarketplaceMeta\n : MarketplaceMeta & { categories: Record<Categories, number> };\n}\n\nfunction useMarketplaceData({\n npmPackageType,\n debouncedSearch,\n query,\n tabQuery,\n}: UseMarketplaceDataParams) {\n const { notifyStatus } = useNotifyAT();\n const { formatMessage } = useIntl();\n const toggleNotification = useNotification();\n const marketplaceTitle = formatMessage({\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n });\n\n const notifyMarketplaceLoad = () => {\n notifyStatus(\n formatMessage(\n {\n id: 'app.utils.notify.data-loaded',\n defaultMessage: 'The {target} has loaded',\n },\n { target: marketplaceTitle }\n )\n );\n };\n\n const paginationParams = {\n page: query?.page || 1,\n pageSize: query?.pageSize || 24,\n };\n\n const pluginParams = {\n ...tabQuery.plugin,\n pagination: paginationParams,\n search: debouncedSearch,\n };\n\n const { data: pluginsResponse, status: pluginsStatus } = useQuery(\n ['marketplace', 'plugins', pluginParams],\n async () => {\n try {\n const queryString = qs.stringify(pluginParams);\n const res = await fetch(`${MARKETPLACE_API_URL}/plugins?${queryString}`);\n\n if (!res.ok) {\n throw new Error('Failed to fetch marketplace plugins.');\n }\n\n const data = (await res.json()) as MarketplaceResponse<Plugin>;\n\n return data;\n } catch (error) {\n // silence\n }\n\n return null;\n },\n {\n onSuccess() {\n notifyMarketplaceLoad();\n },\n onError() {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error', defaultMessage: 'An error occured' },\n });\n },\n }\n );\n\n const providerParams = {\n ...tabQuery.provider,\n pagination: paginationParams,\n search: debouncedSearch,\n };\n\n const { data: providersResponse, status: providersStatus } = useQuery(\n ['marketplace', 'providers', providerParams],\n async () => {\n const queryString = qs.stringify(providerParams);\n const res = await fetch(`${MARKETPLACE_API_URL}/providers?${queryString}`);\n\n if (!res.ok) {\n throw new Error('Failed to fetch marketplace providers.');\n }\n\n const data = (await res.json()) as MarketplaceResponse<Provider>;\n\n return data;\n },\n {\n onSuccess() {\n notifyMarketplaceLoad();\n },\n onError() {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error', defaultMessage: 'An error occured' },\n });\n },\n }\n );\n\n const npmPackageTypeResponse = npmPackageType === 'plugin' ? pluginsResponse : providersResponse;\n\n const possibleCollections = npmPackageTypeResponse?.meta.collections ?? {};\n const possibleCategories = pluginsResponse?.meta.categories ?? {};\n\n const { pagination } = npmPackageTypeResponse?.meta ?? {};\n\n return {\n pluginsResponse,\n providersResponse,\n pluginsStatus,\n providersStatus,\n possibleCollections,\n possibleCategories,\n pagination,\n };\n}\n\nexport { useMarketplaceData };\nexport type {\n MarketplaceResponse,\n Plugin,\n Provider,\n MarketplaceMeta,\n Collections,\n Categories,\n FilterTypes,\n UseMarketplaceDataParams,\n};\n","import * as React from 'react';\n\n/**\n * For more details about this hook see:\n * https://www.30secondsofcode.org/react/s/use-navigator-on-line\n */\nexport const useNavigatorOnline = (): boolean => {\n const onlineStatus =\n typeof navigator !== 'undefined' && typeof navigator.onLine === 'boolean'\n ? navigator.onLine\n : true;\n\n const [isOnline, setIsOnline] = React.useState(onlineStatus);\n\n const setOnline = () => setIsOnline(true);\n const setOffline = () => setIsOnline(false);\n\n React.useEffect(() => {\n window.addEventListener('online', setOnline);\n window.addEventListener('offline', setOffline);\n\n return () => {\n window.removeEventListener('online', setOnline);\n window.removeEventListener('offline', setOffline);\n };\n }, []);\n\n return isOnline;\n};\n","import * as React from 'react';\n\nimport {\n Box,\n ContentLayout,\n Flex,\n Icon,\n Layout,\n Main,\n Searchbar,\n Tab,\n TabGroup,\n TabPanel,\n TabPanels,\n Tabs,\n} from '@strapi/design-system';\nimport {\n CheckPagePermissions,\n ContentBox,\n PageSizeURLQuery,\n PaginationURLQuery,\n useAppInfo,\n useFocusWhenNavigate,\n useNotification,\n useQueryParams,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { ExternalLink, GlassesSquare } from '@strapi/icons';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { useDebounce } from '../../hooks/useDebounce';\nimport { selectAdminPermissions } from '../../selectors';\n\nimport { NpmPackagesFilters } from './components/NpmPackagesFilters';\nimport { NpmPackagesGrid } from './components/NpmPackagesGrid';\nimport { OfflineLayout } from './components/OfflineLayout';\nimport { PageHeader } from './components/PageHeader';\nimport { SortSelect, SortSelectProps } from './components/SortSelect';\nimport { FilterTypes, useMarketplaceData } from './hooks/useMarketplaceData';\nimport { useNavigatorOnline } from './hooks/useNavigatorOnline';\n\ntype NpmPackageType = 'plugin' | 'provider';\n\ninterface MarketplacePageQuery {\n collections?: string[];\n categories?: string[];\n npmPackageType?: NpmPackageType;\n page?: number;\n pageSize?: number;\n search?: string;\n sort?: SortSelectProps['sortQuery'];\n}\n\ninterface TabQuery {\n plugin: MarketplacePageQuery;\n provider: MarketplacePageQuery;\n}\n\nconst MarketplacePage = () => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const toggleNotification = useNotification();\n const [{ query }, setQuery] = useQueryParams<MarketplacePageQuery>();\n const debouncedSearch = useDebounce(query?.search, 500) || '';\n\n const { autoReload: isInDevelopmentMode, dependencies, useYarn, strapiVersion } = useAppInfo();\n const isOnline = useNavigatorOnline();\n\n const npmPackageType = query?.npmPackageType || 'plugin';\n\n const [tabQuery, setTabQuery] = React.useState<TabQuery>({\n plugin: npmPackageType === 'plugin' ? { ...query } : {},\n provider: npmPackageType === 'provider' ? { ...query } : {},\n });\n\n useFocusWhenNavigate();\n\n React.useEffect(() => {\n trackUsage('didGoToMarketplace');\n }, [trackUsage]);\n\n React.useEffect(() => {\n if (!isInDevelopmentMode) {\n toggleNotification({\n type: 'info',\n message: {\n id: 'admin.pages.MarketPlacePage.production',\n defaultMessage: 'Manage plugins from the development environment',\n },\n });\n }\n }, [toggleNotification, isInDevelopmentMode]);\n\n const {\n pluginsResponse,\n providersResponse,\n pluginsStatus,\n providersStatus,\n possibleCollections,\n possibleCategories,\n pagination,\n } = useMarketplaceData({ npmPackageType, debouncedSearch, query, tabQuery });\n\n if (!isOnline) {\n return <OfflineLayout />;\n }\n\n const handleTabChange = (selected: number) => {\n const selectedTab = selected === 0 ? 'plugin' : 'provider';\n const hasTabQuery = tabQuery[selectedTab] && Object.keys(tabQuery[selectedTab]).length;\n\n if (hasTabQuery) {\n setQuery({\n // Keep filters and search\n ...tabQuery[selectedTab],\n search: query?.search || '',\n // Set tab and reset page\n npmPackageType: selectedTab,\n page: 1,\n });\n } else {\n setQuery({\n // Set tab\n npmPackageType: selectedTab,\n // Clear filters\n collections: [],\n categories: [],\n sort: 'name:asc',\n page: 1,\n // Keep search\n search: query?.search || '',\n });\n }\n };\n\n const handleSelectChange = (update: Partial<MarketplacePageQuery>) => {\n setQuery({ ...update, page: 1 });\n setTabQuery((prev) => ({\n ...prev,\n [npmPackageType]: { ...prev[npmPackageType], ...update },\n }));\n };\n\n const handleSelectClear = (filterType: FilterTypes) => {\n setQuery({ [filterType]: [], page: undefined }, 'remove');\n setTabQuery((prev) => ({ ...prev, [npmPackageType]: {} }));\n };\n\n const handleSortSelectChange: SortSelectProps['handleSelectChange'] = ({ sort }) =>\n // @ts-expect-error - this is a narrowing issue.\n handleSelectChange({ sort });\n\n // Check if plugins and providers are installed already\n const installedPackageNames = Object.keys(dependencies ?? {});\n\n return (\n <Layout>\n <Main>\n <Helmet\n title={formatMessage({\n id: 'admin.pages.MarketPlacePage.helmet',\n defaultMessage: 'Marketplace - Plugins',\n })}\n />\n <PageHeader isOnline={isOnline} npmPackageType={npmPackageType} />\n <ContentLayout>\n <TabGroup\n label={formatMessage({\n id: 'admin.pages.MarketPlacePage.tab-group.label',\n defaultMessage: 'Plugins and Providers for Strapi',\n })}\n id=\"tabs\"\n variant=\"simple\"\n initialSelectedTabIndex={['plugin', 'provider'].indexOf(npmPackageType)}\n onTabChange={handleTabChange}\n >\n <Flex justifyContent=\"space-between\" paddingBottom={4}>\n <Tabs>\n <Tab>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugins',\n defaultMessage: 'Plugins',\n })}{' '}\n {pluginsResponse ? `(${pluginsResponse.meta.pagination.total})` : '...'}\n </Tab>\n <Tab>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.providers',\n defaultMessage: 'Providers',\n })}{' '}\n {providersResponse ? `(${providersResponse.meta.pagination.total})` : '...'}\n </Tab>\n </Tabs>\n <Box width=\"25%\">\n <Searchbar\n name=\"searchbar\"\n onClear={() => setQuery({ search: '', page: 1 })}\n value={query?.search}\n onChange={(e) => setQuery({ search: e.target.value, page: 1 })}\n clearLabel={formatMessage({\n id: 'admin.pages.MarketPlacePage.search.clear',\n defaultMessage: 'Clear the search',\n })}\n placeholder={formatMessage({\n id: 'admin.pages.MarketPlacePage.search.placeholder',\n defaultMessage: 'Search',\n })}\n >\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.search.placeholder',\n defaultMessage: 'Search',\n })}\n </Searchbar>\n </Box>\n </Flex>\n <Flex paddingBottom={4} gap={2}>\n <SortSelect\n sortQuery={query?.sort || 'name:asc'}\n handleSelectChange={handleSortSelectChange}\n />\n <NpmPackagesFilters\n npmPackageType={npmPackageType}\n possibleCollections={possibleCollections}\n possibleCategories={possibleCategories}\n query={query || {}}\n handleSelectChange={handleSelectChange}\n handleSelectClear={handleSelectClear}\n />\n </Flex>\n\n <TabPanels>\n {/* Plugins panel */}\n <TabPanel>\n <NpmPackagesGrid\n npmPackages={pluginsResponse?.data}\n status={pluginsStatus}\n installedPackageNames={installedPackageNames}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType=\"plugin\"\n strapiAppVersion={strapiVersion}\n debouncedSearch={debouncedSearch}\n />\n </TabPanel>\n {/* Providers panel */}\n <TabPanel>\n <NpmPackagesGrid\n npmPackages={providersResponse?.data}\n status={providersStatus}\n installedPackageNames={installedPackageNames}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType=\"provider\"\n debouncedSearch={debouncedSearch}\n />\n </TabPanel>\n </TabPanels>\n </TabGroup>\n {pagination ? (\n <Box paddingTop={4}>\n <Flex alignItems=\"flex-end\" justifyContent=\"space-between\">\n <PageSizeURLQuery options={['12', '24', '50', '100']} defaultValue=\"24\" />\n <PaginationURLQuery pagination={pagination} />\n </Flex>\n </Box>\n ) : null}\n <Box paddingTop={8}>\n <a\n href=\"https://strapi.canny.io/plugin-requests\"\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n style={{ textDecoration: 'none' }}\n onClick={() => trackUsage('didMissMarketplacePlugin')}\n >\n <ContentBox\n title={formatMessage({\n id: 'admin.pages.MarketPlacePage.missingPlugin.title',\n defaultMessage: 'Documentation',\n })}\n subtitle={formatMessage({\n id: 'admin.pages.MarketPlacePage.missingPlugin.description',\n defaultMessage:\n \"Tell us what plugin you are looking for and we'll let our community plugin developers know in case they are in search for inspiration!\",\n })}\n icon={<GlassesSquare />}\n iconBackground=\"alternative100\"\n endAction={\n <Icon as={ExternalLink} color=\"neutral600\" width={3} height={3} marginLeft={2} />\n }\n />\n </a>\n </Box>\n </ContentLayout>\n </Main>\n </Layout>\n );\n};\n\nconst ProtectedMarketplacePage = () => {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n // @ts-expect-error – the selector is not typed.\n <CheckPagePermissions permissions={permissions.marketplace.main}>\n <MarketplacePage />\n </CheckPagePermissions>\n );\n};\n\nexport { MarketplacePage, ProtectedMarketplacePage };\nexport type { NpmPackageType, MarketplacePageQuery, TabQuery };\n"],"names":["React","useIntl","jsxs","Fragment","Box","jsx","Filter","Popover","Tag","Cross","styled","Button","Flex","MultiSelect","MultiSelectOption","Typography","useTracking","pluralize","Tooltip","Icon","CheckCircle","StrapiLogo","LinkButton","ExternalLink","useNotification","useClipboard","Check","semver","Duplicate","Github","pxToRem","Star","Download","Divider","AnErrorOccurred","Loader","GridLayout","EmptyDocuments","Grid","GridItem","HeaderLayout","Upload","Layout","Main","SingleSelect","SingleSelectOption","useNotifyAT","useQuery","qs","useQueryParams","useDebounce","useAppInfo","useFocusWhenNavigate","Helmet","ContentLayout","TabGroup","Tabs","Tab","Searchbar","TabPanels","TabPanel","PageSizeURLQuery","PaginationURLQuery","ContentBox","GlassesSquare","useSelector","selectAdminPermissions","CheckPagePermissions"],"mappings":"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"}
1
+ {"version":3,"file":"MarketplacePage-62570c61.js","sources":["../../admin/src/pages/Marketplace/components/NpmPackagesFilters.tsx","../../admin/src/pages/Marketplace/components/NpmPackageCard.tsx","../../admin/src/pages/Marketplace/components/NpmPackagesGrid.tsx","../../admin/src/pages/Marketplace/components/PageHeader.tsx","../../admin/src/pages/Marketplace/components/OfflineLayout.tsx","../../admin/src/pages/Marketplace/components/SortSelect.tsx","../../admin/src/pages/Marketplace/hooks/useMarketplaceData.ts","../../admin/src/pages/Marketplace/hooks/useNavigatorOnline.ts","../../admin/src/pages/Marketplace/MarketplacePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n Tag,\n MultiSelect,\n MultiSelectOption,\n MultiSelectProps,\n Popover,\n Flex,\n} from '@strapi/design-system';\nimport { Cross, Filter } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport type { Categories, Collections, FilterTypes } from '../hooks/useMarketplaceData';\nimport type { NpmPackageType, MarketplacePageQuery } from '../MarketplacePage';\n\ninterface NpmPackagesFiltersProps {\n handleSelectClear: (type: FilterTypes) => void;\n handleSelectChange: (update: Partial<MarketplacePageQuery>) => void;\n npmPackageType: NpmPackageType;\n possibleCategories: Partial<Record<Categories, number>>;\n possibleCollections: Partial<Record<Collections, number>>;\n query: MarketplacePageQuery;\n}\n\nconst NpmPackagesFilters = ({\n handleSelectClear,\n handleSelectChange,\n npmPackageType,\n possibleCategories,\n possibleCollections,\n query,\n}: NpmPackagesFiltersProps) => {\n const [isVisible, setIsVisible] = React.useState(false);\n const buttonRef = React.useRef<HTMLButtonElement>(null!);\n const { formatMessage } = useIntl();\n\n const handleToggle = () => setIsVisible((prev) => !prev);\n\n const handleTagRemove = (tagToRemove: string, filterType: FilterTypes) => {\n const update = {\n [filterType]: (query[filterType] ?? []).filter((previousTag) => previousTag !== tagToRemove),\n };\n\n handleSelectChange(update);\n };\n\n return (\n <>\n <Box paddingTop={1} paddingBottom={1}>\n <ButtonToggle\n variant=\"tertiary\"\n ref={buttonRef}\n startIcon={<Filter />}\n onClick={handleToggle}\n size=\"S\"\n >\n {formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </ButtonToggle>\n {isVisible && (\n <Popover source={buttonRef} onDismiss={handleToggle} padding={3} spacing={4}>\n <FiltersFlex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <FilterSelect\n message={formatMessage({\n id: 'admin.pages.MarketPlacePage.filters.collections',\n defaultMessage: 'Collections',\n })}\n value={query?.collections || []}\n onChange={(newCollections) => {\n const update = { collections: newCollections };\n handleSelectChange(update);\n }}\n onClear={() => handleSelectClear('collections')}\n possibleFilters={possibleCollections}\n customizeContent={(values) =>\n formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.filters.collectionsSelected',\n defaultMessage:\n '{count, plural, =0 {No collections} one {# collection} other {# collections}} selected',\n },\n { count: values?.length ?? 0 }\n )\n }\n />\n {npmPackageType === 'plugin' && (\n <FilterSelect\n message={formatMessage({\n id: 'admin.pages.MarketPlacePage.filters.categories',\n defaultMessage: 'Categories',\n })}\n value={query?.categories || []}\n onChange={(newCategories) => {\n const update = { categories: newCategories };\n handleSelectChange(update);\n }}\n onClear={() => handleSelectClear('categories')}\n possibleFilters={possibleCategories}\n customizeContent={(values) =>\n formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.filters.categoriesSelected',\n defaultMessage:\n '{count, plural, =0 {No categories} one {# category} other {# categories}} selected',\n },\n { count: values?.length ?? 0 }\n )\n }\n />\n )}\n </FiltersFlex>\n </Popover>\n )}\n </Box>\n {query.collections?.map((collection) => (\n <Box key={collection} padding={1}>\n <Tag icon={<Cross />} onClick={() => handleTagRemove(collection, 'collections')}>\n {collection}\n </Tag>\n </Box>\n ))}\n {npmPackageType === 'plugin' &&\n query.categories?.map((category) => (\n <Box key={category} padding={1}>\n <Tag icon={<Cross />} onClick={() => handleTagRemove(category, 'categories')}>\n {category}\n </Tag>\n </Box>\n ))}\n </>\n );\n};\n\nconst ButtonToggle = styled(Button)`\n height: ${({ theme }) => theme.sizes.input.S};\n`;\n\nconst FiltersFlex = styled(Flex)`\n /* Hide the label, every input needs a label. */\n label {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * FilterSelect\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FilterSelectProps\n extends Pick<MultiSelectProps, 'customizeContent' | 'onClear' | 'onChange' | 'value'> {\n message: string;\n possibleFilters:\n | NpmPackagesFiltersProps['possibleCategories']\n | NpmPackagesFiltersProps['possibleCollections'];\n}\n\nconst FilterSelect = ({\n message,\n value,\n onChange,\n possibleFilters,\n onClear,\n customizeContent,\n}: FilterSelectProps) => {\n return (\n <MultiSelect\n data-testid={`${message}-button`}\n label={message}\n placeholder={message}\n size=\"M\"\n onChange={onChange}\n onClear={onClear}\n value={value}\n customizeContent={customizeContent}\n >\n {Object.entries(possibleFilters).map(([filterName, count]) => {\n return (\n <MultiSelectOption\n data-testid={`${filterName}-${count}`}\n key={filterName}\n value={filterName}\n >\n {`${filterName} (${count})`}\n </MultiSelectOption>\n );\n })}\n </MultiSelect>\n );\n};\n\nexport { NpmPackagesFilters };\nexport type { NpmPackagesFiltersProps };\n","import { Box, Flex, Icon, Tooltip, Typography, Divider, Button } from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport {\n useTracking,\n pxToRem,\n AppInfoContextValue,\n useNotification,\n useClipboard,\n} from '@strapi/helper-plugin';\nimport { CheckCircle, ExternalLink, Download, Github, Star, Check, Duplicate } from '@strapi/icons';\nimport pluralize from 'pluralize';\nimport { useIntl } from 'react-intl';\nimport * as semver from 'semver';\nimport styled from 'styled-components';\n\nimport StrapiLogo from '../../../assets/images/logo-strapi-2022.svg';\n\nimport type { Plugin, Provider } from '../hooks/useMarketplaceData';\nimport type { NpmPackageType } from '../MarketplacePage';\n\n// Custom component to have an ellipsis after the 2nd line\nconst EllipsisText = styled(Typography)`\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n overflow: hidden;\n`;\n\ninterface NpmPackageCardProps extends Pick<AppInfoContextValue, 'useYarn'> {\n npmPackage: Plugin | Provider;\n isInstalled: boolean;\n isInDevelopmentMode: AppInfoContextValue['autoReload'];\n npmPackageType: NpmPackageType;\n strapiAppVersion: AppInfoContextValue['strapiVersion'];\n}\n\nconst NpmPackageCard = ({\n npmPackage,\n isInstalled,\n useYarn,\n isInDevelopmentMode,\n npmPackageType,\n strapiAppVersion,\n}: NpmPackageCardProps) => {\n const { attributes } = npmPackage;\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const commandToCopy = useYarn\n ? `yarn add ${attributes.npmPackageName}`\n : `npm install ${attributes.npmPackageName}`;\n\n const madeByStrapiMessage = formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.tooltip.madeByStrapi',\n defaultMessage: 'Made by Strapi',\n });\n\n const npmPackageHref = `https://market.strapi.io/${pluralize.plural(npmPackageType)}/${\n attributes.slug\n }`;\n\n return (\n <Flex\n direction=\"column\"\n justifyContent=\"space-between\"\n paddingTop={4}\n paddingRight={4}\n paddingBottom={4}\n paddingLeft={4}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n height=\"100%\"\n alignItems=\"normal\"\n data-testid=\"npm-package-card\"\n >\n <Box>\n <Flex direction=\"row\" justifyContent=\"space-between\" alignItems=\"flex-start\">\n <Box\n as=\"img\"\n src={attributes.logo.url}\n alt={`${attributes.name} logo`}\n hasRadius\n width={11}\n height={11}\n />\n <PackageStats\n githubStars={attributes.githubStars}\n npmDownloads={attributes.npmDownloads}\n npmPackageType={npmPackageType}\n />\n </Flex>\n <Box paddingTop={4}>\n <Typography as=\"h3\" variant=\"delta\">\n <Flex alignItems=\"center\">\n {attributes.name}\n {attributes.validated && !attributes.madeByStrapi && (\n <Tooltip\n description={formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.tooltip.verified',\n defaultMessage: 'Plugin verified by Strapi',\n })}\n >\n <Flex>\n <Icon as={CheckCircle} marginLeft={2} color=\"success600\" />\n </Flex>\n </Tooltip>\n )}\n {attributes.madeByStrapi && (\n <Tooltip description={madeByStrapiMessage}>\n <Flex>\n <Box\n as=\"img\"\n src={StrapiLogo}\n alt={madeByStrapiMessage}\n marginLeft={1}\n width={6}\n height=\"auto\"\n />\n </Flex>\n </Tooltip>\n )}\n </Flex>\n </Typography>\n </Box>\n <Box paddingTop={2}>\n <EllipsisText as=\"p\" variant=\"omega\" textColor=\"neutral600\">\n {attributes.description}\n </EllipsisText>\n </Box>\n </Box>\n\n <Flex gap={2} style={{ alignSelf: 'flex-end' }} paddingTop={6}>\n <LinkButton\n size=\"S\"\n href={npmPackageHref}\n isExternal\n endIcon={<ExternalLink />}\n aria-label={formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.info.label',\n defaultMessage: 'Learn more about {pluginName}',\n },\n { pluginName: attributes.name }\n )}\n variant=\"tertiary\"\n onClick={() => trackUsage('didPluginLearnMore')}\n >\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.info.text',\n defaultMessage: 'More',\n })}\n </LinkButton>\n <InstallPluginButton\n isInstalled={isInstalled}\n isInDevelopmentMode={isInDevelopmentMode}\n commandToCopy={commandToCopy}\n strapiAppVersion={strapiAppVersion}\n strapiPeerDepVersion={attributes.strapiVersion}\n pluginName={attributes.name}\n />\n </Flex>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * InstallPluginButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface InstallPluginButtonProps\n extends Pick<NpmPackageCardProps, 'isInstalled' | 'isInDevelopmentMode' | 'strapiAppVersion'> {\n commandToCopy: string;\n pluginName: string;\n strapiPeerDepVersion?: string;\n}\n\nconst InstallPluginButton = ({\n isInstalled,\n isInDevelopmentMode,\n commandToCopy,\n strapiAppVersion,\n strapiPeerDepVersion,\n pluginName,\n}: InstallPluginButtonProps) => {\n const toggleNotification = useNotification();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { copy } = useClipboard();\n\n const handleCopy = async () => {\n const didCopy = await copy(commandToCopy);\n\n if (didCopy) {\n trackUsage('willInstallPlugin');\n toggleNotification({\n type: 'success',\n message: { id: 'admin.pages.MarketPlacePage.plugin.copy.success' },\n });\n }\n };\n\n // Already installed\n if (isInstalled) {\n return (\n <Box paddingLeft={4}>\n <Icon as={Check} marginRight={2} width={12} height={12} color=\"success600\" />\n <Typography variant=\"omega\" textColor=\"success600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.installed',\n defaultMessage: 'Installed',\n })}\n </Typography>\n </Box>\n );\n }\n\n // In development, show install button\n if (isInDevelopmentMode) {\n return (\n <CardButton\n strapiAppVersion={strapiAppVersion}\n strapiPeerDepVersion={strapiPeerDepVersion}\n handleCopy={handleCopy}\n pluginName={pluginName}\n />\n );\n }\n\n // Not in development and plugin not installed already. Show nothing\n return null;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CardButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CardButtonProps\n extends Pick<NpmPackageCardProps, 'strapiAppVersion'>,\n Pick<InstallPluginButtonProps, 'strapiPeerDepVersion' | 'pluginName'> {\n handleCopy: () => void;\n}\n\nconst CardButton = ({\n strapiPeerDepVersion,\n strapiAppVersion,\n handleCopy,\n pluginName,\n}: CardButtonProps) => {\n const { formatMessage } = useIntl();\n const versionRange = semver.validRange(strapiPeerDepVersion);\n const isCompatible = semver.satisfies(strapiAppVersion ?? '', versionRange ?? '');\n\n const installMessage = formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.copy',\n defaultMessage: 'Copy install command',\n });\n\n // Only plugins receive a strapiAppVersion\n if (strapiAppVersion) {\n if (!versionRange || !isCompatible) {\n return (\n <Tooltip\n data-testid={`tooltip-${pluginName}`}\n description={\n !versionRange\n ? formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.version.null',\n defaultMessage:\n 'Unable to verify compatibility with your Strapi version: \"{strapiAppVersion}\"',\n },\n { strapiAppVersion }\n )\n : formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.version',\n defaultMessage:\n 'Update your Strapi version: \"{strapiAppVersion}\" to: \"{versionRange}\"',\n },\n {\n strapiAppVersion,\n versionRange,\n }\n )\n }\n >\n <Button\n size=\"S\"\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={handleCopy}\n disabled={!isCompatible}\n >\n {installMessage}\n </Button>\n </Tooltip>\n );\n }\n }\n\n return (\n <Button size=\"S\" startIcon={<Duplicate />} variant=\"secondary\" onClick={handleCopy}>\n {installMessage}\n </Button>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PackageStats\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PackageStatsProps {\n githubStars?: number;\n npmDownloads?: number;\n npmPackageType: NpmPackageType;\n}\n\nconst PackageStats = ({ githubStars = 0, npmDownloads = 0, npmPackageType }: PackageStatsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex gap={1}>\n {!!githubStars && (\n <>\n <Icon as={Github} height={pxToRem(12)} width={pxToRem(12)} aria-hidden />\n <Icon as={Star} height={pxToRem(12)} width={pxToRem(12)} color=\"warning500\" aria-hidden />\n <p\n aria-label={formatMessage(\n {\n id: `admin.pages.MarketPlacePage.${npmPackageType}.githubStars`,\n defaultMessage: `This {package} was starred {starsCount} on GitHub`,\n },\n {\n starsCount: githubStars,\n package: npmPackageType,\n }\n )}\n >\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {githubStars}\n </Typography>\n </p>\n <VerticalDivider unsetMargin={false} />\n </>\n )}\n <Icon as={Download} height={pxToRem(12)} width={pxToRem(12)} aria-hidden />\n <p\n aria-label={formatMessage(\n {\n id: `admin.pages.MarketPlacePage.${npmPackageType}.downloads`,\n defaultMessage: `This {package} has {downloadsCount} weekly downloads`,\n },\n {\n downloadsCount: npmDownloads,\n package: npmPackageType,\n }\n )}\n >\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {npmDownloads}\n </Typography>\n </p>\n </Flex>\n );\n};\n\nconst VerticalDivider = styled(Divider)`\n width: ${pxToRem(12)};\n transform: rotate(90deg);\n`;\n\nexport { NpmPackageCard };\nexport type { NpmPackageCardProps };\n","import {\n Box,\n Flex,\n Grid,\n GridItem,\n GridLayout,\n Icon,\n Loader,\n Typography,\n} from '@strapi/design-system';\nimport { AnErrorOccurred, AppInfoContextValue } from '@strapi/helper-plugin';\nimport { EmptyDocuments } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { NpmPackageCard, NpmPackageCardProps } from './NpmPackageCard';\n\nimport type { Plugin, Provider } from '../hooks/useMarketplaceData';\n\ninterface NpmPackagesGridProps extends Pick<NpmPackageCardProps, 'npmPackageType' | 'useYarn'> {\n debouncedSearch: string;\n installedPackageNames: string[];\n isInDevelopmentMode: AppInfoContextValue['autoReload'];\n npmPackages?: Array<Plugin | Provider>;\n status: 'idle' | 'loading' | 'error' | 'success';\n strapiAppVersion?: NpmPackageCardProps['strapiAppVersion'];\n}\n\nconst NpmPackagesGrid = ({\n status,\n npmPackages = [],\n installedPackageNames = [],\n useYarn,\n isInDevelopmentMode,\n npmPackageType,\n strapiAppVersion,\n debouncedSearch,\n}: NpmPackagesGridProps) => {\n const { formatMessage } = useIntl();\n\n if (status === 'error') {\n return (\n <Flex paddingTop={8}>\n <AnErrorOccurred />\n </Flex>\n );\n }\n\n if (status === 'loading') {\n return (\n <Flex justifyContent=\"center\" paddingTop={8}>\n <Loader>Loading content...</Loader>\n </Flex>\n );\n }\n\n const emptySearchMessage = formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.search.empty',\n defaultMessage: 'No result for \"{target}\"',\n },\n { target: debouncedSearch }\n );\n\n if (npmPackages.length === 0) {\n return (\n <Box position=\"relative\">\n <GridLayout>\n {Array(12)\n .fill(null)\n .map((_, idx) => (\n <EmptyPluginCard key={idx} height=\"234px\" hasRadius />\n ))}\n </GridLayout>\n <Box position=\"absolute\" top={11} width=\"100%\">\n <Flex alignItems=\"center\" justifyContent=\"center\" direction=\"column\">\n <Icon as={EmptyDocuments} color={undefined} width=\"160px\" height=\"88px\" />\n <Box paddingTop={6}>\n <Typography variant=\"delta\" as=\"p\" textColor=\"neutral600\">\n {emptySearchMessage}\n </Typography>\n </Box>\n </Flex>\n </Box>\n </Box>\n );\n }\n\n return (\n <Grid gap={4}>\n {npmPackages.map((npmPackage) => (\n <GridItem col={4} s={6} xs={12} style={{ height: '100%' }} key={npmPackage.id}>\n <NpmPackageCard\n npmPackage={npmPackage}\n isInstalled={installedPackageNames.includes(npmPackage.attributes.npmPackageName)}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType={npmPackageType}\n strapiAppVersion={strapiAppVersion}\n />\n </GridItem>\n ))}\n </Grid>\n );\n};\n\nconst EmptyPluginCard = styled(Box)`\n background: ${({ theme }) =>\n `linear-gradient(180deg, rgba(234, 234, 239, 0) 0%, ${theme.colors.neutral150} 100%)`};\n opacity: 0.33;\n`;\n\nexport { NpmPackagesGrid };\n","import { HeaderLayout } from '@strapi/design-system';\nimport { LinkButton } from '@strapi/design-system/v2';\nimport { useTracking } from '@strapi/helper-plugin';\nimport { Upload } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport type { NpmPackageType } from '../MarketplacePage';\n\ninterface PageHeaderProps {\n isOnline?: boolean;\n npmPackageType?: NpmPackageType;\n}\n\nconst PageHeader = ({ isOnline, npmPackageType = 'plugin' }: PageHeaderProps) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const tracking = npmPackageType === 'provider' ? 'didSubmitProvider' : 'didSubmitPlugin';\n\n return (\n <HeaderLayout\n title={formatMessage({\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n })}\n subtitle={formatMessage({\n id: 'admin.pages.MarketPlacePage.subtitle',\n defaultMessage: 'Get more out of Strapi',\n })}\n primaryAction={\n isOnline && (\n <LinkButton\n startIcon={<Upload />}\n variant=\"tertiary\"\n href={`https://market.strapi.io/submit-${npmPackageType}`}\n onClick={() => trackUsage(tracking)}\n isExternal\n >\n {formatMessage({\n id: `admin.pages.MarketPlacePage.submit.${npmPackageType}.link`,\n defaultMessage: `Submit ${npmPackageType}`,\n })}\n </LinkButton>\n )\n }\n />\n );\n};\n\nexport { PageHeader };\nexport type { PageHeaderProps };\n","import { Box, Flex, Layout, Main, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\n\nimport { PageHeader } from './PageHeader';\n\nconst OfflineLayout = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Layout>\n <Main>\n <PageHeader />\n <Flex\n width=\"100%\"\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n paddingTop={pxToRem(120)}\n >\n <Box paddingBottom={2}>\n <Typography textColor=\"neutral700\" variant=\"alpha\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.offline.title',\n defaultMessage: 'You are offline',\n })}\n </Typography>\n </Box>\n <Box paddingBottom={6}>\n <Typography textColor=\"neutral700\" variant=\"epsilon\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.offline.subtitle',\n defaultMessage: 'You need to be connected to the Internet to access Strapi Market.',\n })}\n </Typography>\n </Box>\n <svg\n width=\"88\"\n height=\"88\"\n viewBox=\"0 0 88 88\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect x=\".5\" y=\".5\" width=\"87\" height=\"87\" rx=\"43.5\" fill=\"#F0F0FF\" />\n <path\n d=\"M34 39.3h-4c-2.6 0-4.7 1-6.6 2.8a9 9 0 0 0-2.7 6.6 9 9 0 0 0 2.7 6.6A9 9 0 0 0 30 58h22.8L34 39.3Zm-11-11 3-3 39 39-3 3-4.7-4.6H30a13.8 13.8 0 0 1-14-14c0-3.8 1.3-7 4-9.7 2.6-2.7 5.7-4.2 9.5-4.3L23 28.2Zm38.2 11.1c3 .2 5.5 1.5 7.6 3.7A11 11 0 0 1 72 51c0 4-1.6 7.2-5 9.5l-3.3-3.4a6.5 6.5 0 0 0 3.6-6.1c0-1.9-.7-3.5-2-5-1.5-1.3-3.1-2-5-2h-3.5v-1.2c0-3.6-1.2-6.6-3.7-9a13 13 0 0 0-15-2.3L34.6 28a17 17 0 0 1 20.3 1.5c3.5 2.7 5.5 6 6.3 10Z\"\n fill=\"#4945FF\"\n />\n <rect x=\".5\" y=\".5\" width=\"87\" height=\"87\" rx=\"43.5\" stroke=\"#D9D8FF\" />\n </svg>\n </Flex>\n </Main>\n </Layout>\n );\n};\n\nexport { OfflineLayout };\n","import { Box, SingleSelectOption, SingleSelect } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nconst SORT_TYPES = {\n 'name:asc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.alphabetical.selected',\n defaultMessage: 'Sort by alphabetical order',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.alphabetical',\n defaultMessage: 'Alphabetical order',\n },\n },\n 'submissionDate:desc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.newest.selected',\n defaultMessage: 'Sort by newest',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.newest',\n defaultMessage: 'Newest',\n },\n },\n 'githubStars:desc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.githubStars.selected',\n defaultMessage: 'Sort by GitHub stars',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.githubStars',\n defaultMessage: 'Number of GitHub stars',\n },\n },\n 'npmDownloads:desc': {\n selected: {\n id: 'admin.pages.MarketPlacePage.sort.npmDownloads.selected',\n defaultMessage: 'Sort by npm downloads',\n },\n option: {\n id: 'admin.pages.MarketPlacePage.sort.npmDownloads',\n defaultMessage: 'Number of downloads',\n },\n },\n} as const;\n\ninterface SortSelectProps {\n sortQuery: keyof typeof SORT_TYPES;\n handleSelectChange: (payload: { sort: string }) => void;\n}\n\nconst SortSelect = ({ sortQuery, handleSelectChange }: SortSelectProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <SelectWrapper>\n <SingleSelect\n size=\"S\"\n id=\"sort-by-select\"\n value={sortQuery}\n customizeContent={() => formatMessage(SORT_TYPES[sortQuery].selected)}\n onChange={(sortName) => {\n // @ts-expect-error – in V2 design-system we'll only ever return strings.\n handleSelectChange({ sort: sortName });\n }}\n label={formatMessage({\n id: 'admin.pages.MarketPlacePage.sort.label',\n defaultMessage: 'Sort by',\n })}\n >\n {Object.entries(SORT_TYPES).map(([sortName, messages]) => {\n return (\n <SingleSelectOption key={sortName} value={sortName}>\n {formatMessage(messages.option)}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n </SelectWrapper>\n );\n};\n\nconst SelectWrapper = styled(Box)`\n font-weight: ${({ theme }) => theme.fontWeights.semiBold};\n\n span {\n font-size: ${({ theme }) => theme.fontSizes[1]};\n }\n\n /* Hide the label, every input needs a label. */\n label {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n }\n`;\n\nexport { SortSelect };\nexport type { SortSelectProps };\n","import { useNotifyAT } from '@strapi/design-system';\nimport { useNotification } from '@strapi/helper-plugin';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\n\nimport type { MarketplacePageQuery, NpmPackageType, TabQuery } from '../MarketplacePage';\n\nconst MARKETPLACE_API_URL = 'https://market-api.strapi.io';\n\ninterface UseMarketplaceDataParams {\n npmPackageType: NpmPackageType;\n debouncedSearch: string;\n query?: MarketplacePageQuery;\n tabQuery: TabQuery;\n}\n\ntype Collections =\n | 'Verified'\n | 'Made by the community'\n | 'Made by Strapi'\n | 'Made by official partners';\n\ntype Categories = 'Custom fields' | 'Deployment' | 'Monitoring';\n\ntype FilterTypes = 'categories' | 'collections';\n\ninterface Plugin {\n id: string;\n attributes: {\n name: string;\n description: string;\n slug: string;\n npmPackageName: string;\n npmPackageUrl: string;\n npmDownloads: number;\n repositoryUrl: string;\n githubStars: number;\n logo: {\n url: string;\n };\n developerName: string;\n validated: boolean;\n madeByStrapi: boolean;\n strapiCompatibility: string;\n submissionDate: string;\n collections: Collections[];\n categories: Categories[];\n strapiVersion: string;\n screenshots: Array<{\n url: string;\n }>;\n };\n}\n\ninterface Provider {\n id: string;\n attributes: {\n name: string;\n description: string;\n slug: string;\n npmPackageName: string;\n npmPackageUrl: string;\n npmDownloads: number;\n repositoryUrl: string;\n githubStars: number;\n pluginName: string;\n logo: {\n url: string;\n };\n developerName: string;\n validated: boolean;\n madeByStrapi: boolean;\n strapiCompatibility: string;\n strapiVersion?: never;\n submissionDate: string;\n collections: Collections[];\n };\n}\n\ninterface MarketplaceMeta {\n collections: Record<Collections, number>;\n pagination: {\n page: number;\n pageSize: number;\n pageCount: number;\n total: number;\n };\n}\n\ninterface MarketplaceResponse<TData extends Plugin | Provider> {\n data: TData[];\n meta: TData extends Provider\n ? MarketplaceMeta\n : MarketplaceMeta & { categories: Record<Categories, number> };\n}\n\nfunction useMarketplaceData({\n npmPackageType,\n debouncedSearch,\n query,\n tabQuery,\n}: UseMarketplaceDataParams) {\n const { notifyStatus } = useNotifyAT();\n const { formatMessage } = useIntl();\n const toggleNotification = useNotification();\n const marketplaceTitle = formatMessage({\n id: 'global.marketplace',\n defaultMessage: 'Marketplace',\n });\n\n const notifyMarketplaceLoad = () => {\n notifyStatus(\n formatMessage(\n {\n id: 'app.utils.notify.data-loaded',\n defaultMessage: 'The {target} has loaded',\n },\n { target: marketplaceTitle }\n )\n );\n };\n\n const paginationParams = {\n page: query?.page || 1,\n pageSize: query?.pageSize || 24,\n };\n\n const pluginParams = {\n ...tabQuery.plugin,\n pagination: paginationParams,\n search: debouncedSearch,\n };\n\n const { data: pluginsResponse, status: pluginsStatus } = useQuery(\n ['marketplace', 'plugins', pluginParams],\n async () => {\n try {\n const queryString = qs.stringify(pluginParams);\n const res = await fetch(`${MARKETPLACE_API_URL}/plugins?${queryString}`);\n\n if (!res.ok) {\n throw new Error('Failed to fetch marketplace plugins.');\n }\n\n const data = (await res.json()) as MarketplaceResponse<Plugin>;\n\n return data;\n } catch (error) {\n // silence\n }\n\n return null;\n },\n {\n onSuccess() {\n notifyMarketplaceLoad();\n },\n onError() {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error', defaultMessage: 'An error occured' },\n });\n },\n }\n );\n\n const providerParams = {\n ...tabQuery.provider,\n pagination: paginationParams,\n search: debouncedSearch,\n };\n\n const { data: providersResponse, status: providersStatus } = useQuery(\n ['marketplace', 'providers', providerParams],\n async () => {\n const queryString = qs.stringify(providerParams);\n const res = await fetch(`${MARKETPLACE_API_URL}/providers?${queryString}`);\n\n if (!res.ok) {\n throw new Error('Failed to fetch marketplace providers.');\n }\n\n const data = (await res.json()) as MarketplaceResponse<Provider>;\n\n return data;\n },\n {\n onSuccess() {\n notifyMarketplaceLoad();\n },\n onError() {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error', defaultMessage: 'An error occured' },\n });\n },\n }\n );\n\n const npmPackageTypeResponse = npmPackageType === 'plugin' ? pluginsResponse : providersResponse;\n\n const possibleCollections = npmPackageTypeResponse?.meta.collections ?? {};\n const possibleCategories = pluginsResponse?.meta.categories ?? {};\n\n const { pagination } = npmPackageTypeResponse?.meta ?? {};\n\n return {\n pluginsResponse,\n providersResponse,\n pluginsStatus,\n providersStatus,\n possibleCollections,\n possibleCategories,\n pagination,\n };\n}\n\nexport { useMarketplaceData };\nexport type {\n MarketplaceResponse,\n Plugin,\n Provider,\n MarketplaceMeta,\n Collections,\n Categories,\n FilterTypes,\n UseMarketplaceDataParams,\n};\n","import * as React from 'react';\n\n/**\n * For more details about this hook see:\n * https://www.30secondsofcode.org/react/s/use-navigator-on-line\n */\nexport const useNavigatorOnline = (): boolean => {\n const onlineStatus =\n typeof navigator !== 'undefined' && typeof navigator.onLine === 'boolean'\n ? navigator.onLine\n : true;\n\n const [isOnline, setIsOnline] = React.useState(onlineStatus);\n\n const setOnline = () => setIsOnline(true);\n const setOffline = () => setIsOnline(false);\n\n React.useEffect(() => {\n window.addEventListener('online', setOnline);\n window.addEventListener('offline', setOffline);\n\n return () => {\n window.removeEventListener('online', setOnline);\n window.removeEventListener('offline', setOffline);\n };\n }, []);\n\n return isOnline;\n};\n","import * as React from 'react';\n\nimport {\n Box,\n ContentLayout,\n Flex,\n Icon,\n Layout,\n Main,\n Searchbar,\n Tab,\n TabGroup,\n TabPanel,\n TabPanels,\n Tabs,\n} from '@strapi/design-system';\nimport {\n CheckPagePermissions,\n ContentBox,\n PageSizeURLQuery,\n PaginationURLQuery,\n useAppInfo,\n useFocusWhenNavigate,\n useNotification,\n useQueryParams,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { ExternalLink, GlassesSquare } from '@strapi/icons';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { useDebounce } from '../../hooks/useDebounce';\nimport { selectAdminPermissions } from '../../selectors';\n\nimport { NpmPackagesFilters } from './components/NpmPackagesFilters';\nimport { NpmPackagesGrid } from './components/NpmPackagesGrid';\nimport { OfflineLayout } from './components/OfflineLayout';\nimport { PageHeader } from './components/PageHeader';\nimport { SortSelect, SortSelectProps } from './components/SortSelect';\nimport { FilterTypes, useMarketplaceData } from './hooks/useMarketplaceData';\nimport { useNavigatorOnline } from './hooks/useNavigatorOnline';\n\ntype NpmPackageType = 'plugin' | 'provider';\n\ninterface MarketplacePageQuery {\n collections?: string[];\n categories?: string[];\n npmPackageType?: NpmPackageType;\n page?: number;\n pageSize?: number;\n search?: string;\n sort?: SortSelectProps['sortQuery'];\n}\n\ninterface TabQuery {\n plugin: MarketplacePageQuery;\n provider: MarketplacePageQuery;\n}\n\nconst MarketplacePage = () => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const toggleNotification = useNotification();\n const [{ query }, setQuery] = useQueryParams<MarketplacePageQuery>();\n const debouncedSearch = useDebounce(query?.search, 500) || '';\n\n const { autoReload: isInDevelopmentMode, dependencies, useYarn, strapiVersion } = useAppInfo();\n const isOnline = useNavigatorOnline();\n\n const npmPackageType = query?.npmPackageType || 'plugin';\n\n const [tabQuery, setTabQuery] = React.useState<TabQuery>({\n plugin: npmPackageType === 'plugin' ? { ...query } : {},\n provider: npmPackageType === 'provider' ? { ...query } : {},\n });\n\n useFocusWhenNavigate();\n\n React.useEffect(() => {\n trackUsage('didGoToMarketplace');\n }, [trackUsage]);\n\n React.useEffect(() => {\n if (!isInDevelopmentMode) {\n toggleNotification({\n type: 'info',\n message: {\n id: 'admin.pages.MarketPlacePage.production',\n defaultMessage: 'Manage plugins from the development environment',\n },\n });\n }\n }, [toggleNotification, isInDevelopmentMode]);\n\n const {\n pluginsResponse,\n providersResponse,\n pluginsStatus,\n providersStatus,\n possibleCollections,\n possibleCategories,\n pagination,\n } = useMarketplaceData({ npmPackageType, debouncedSearch, query, tabQuery });\n\n if (!isOnline) {\n return <OfflineLayout />;\n }\n\n const handleTabChange = (selected: number) => {\n const selectedTab = selected === 0 ? 'plugin' : 'provider';\n const hasTabQuery = tabQuery[selectedTab] && Object.keys(tabQuery[selectedTab]).length;\n\n if (hasTabQuery) {\n setQuery({\n // Keep filters and search\n ...tabQuery[selectedTab],\n search: query?.search || '',\n // Set tab and reset page\n npmPackageType: selectedTab,\n page: 1,\n });\n } else {\n setQuery({\n // Set tab\n npmPackageType: selectedTab,\n // Clear filters\n collections: [],\n categories: [],\n sort: 'name:asc',\n page: 1,\n // Keep search\n search: query?.search || '',\n });\n }\n };\n\n const handleSelectChange = (update: Partial<MarketplacePageQuery>) => {\n setQuery({ ...update, page: 1 });\n setTabQuery((prev) => ({\n ...prev,\n [npmPackageType]: { ...prev[npmPackageType], ...update },\n }));\n };\n\n const handleSelectClear = (filterType: FilterTypes) => {\n setQuery({ [filterType]: [], page: undefined }, 'remove');\n setTabQuery((prev) => ({ ...prev, [npmPackageType]: {} }));\n };\n\n const handleSortSelectChange: SortSelectProps['handleSelectChange'] = ({ sort }) =>\n // @ts-expect-error - this is a narrowing issue.\n handleSelectChange({ sort });\n\n // Check if plugins and providers are installed already\n const installedPackageNames = Object.keys(dependencies ?? {});\n\n return (\n <Layout>\n <Main>\n <Helmet\n title={formatMessage({\n id: 'admin.pages.MarketPlacePage.helmet',\n defaultMessage: 'Marketplace - Plugins',\n })}\n />\n <PageHeader isOnline={isOnline} npmPackageType={npmPackageType} />\n <ContentLayout>\n <TabGroup\n label={formatMessage({\n id: 'admin.pages.MarketPlacePage.tab-group.label',\n defaultMessage: 'Plugins and Providers for Strapi',\n })}\n id=\"tabs\"\n variant=\"simple\"\n initialSelectedTabIndex={['plugin', 'provider'].indexOf(npmPackageType)}\n onTabChange={handleTabChange}\n >\n <Flex justifyContent=\"space-between\" paddingBottom={4}>\n <Tabs>\n <Tab>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugins',\n defaultMessage: 'Plugins',\n })}{' '}\n {pluginsResponse ? `(${pluginsResponse.meta.pagination.total})` : '...'}\n </Tab>\n <Tab>\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.providers',\n defaultMessage: 'Providers',\n })}{' '}\n {providersResponse ? `(${providersResponse.meta.pagination.total})` : '...'}\n </Tab>\n </Tabs>\n <Box width=\"25%\">\n <Searchbar\n name=\"searchbar\"\n onClear={() => setQuery({ search: '', page: 1 })}\n value={query?.search}\n onChange={(e) => setQuery({ search: e.target.value, page: 1 })}\n clearLabel={formatMessage({\n id: 'admin.pages.MarketPlacePage.search.clear',\n defaultMessage: 'Clear the search',\n })}\n placeholder={formatMessage({\n id: 'admin.pages.MarketPlacePage.search.placeholder',\n defaultMessage: 'Search',\n })}\n >\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.search.placeholder',\n defaultMessage: 'Search',\n })}\n </Searchbar>\n </Box>\n </Flex>\n <Flex paddingBottom={4} gap={2}>\n <SortSelect\n sortQuery={query?.sort || 'name:asc'}\n handleSelectChange={handleSortSelectChange}\n />\n <NpmPackagesFilters\n npmPackageType={npmPackageType}\n possibleCollections={possibleCollections}\n possibleCategories={possibleCategories}\n query={query || {}}\n handleSelectChange={handleSelectChange}\n handleSelectClear={handleSelectClear}\n />\n </Flex>\n\n <TabPanels>\n {/* Plugins panel */}\n <TabPanel>\n <NpmPackagesGrid\n npmPackages={pluginsResponse?.data}\n status={pluginsStatus}\n installedPackageNames={installedPackageNames}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType=\"plugin\"\n strapiAppVersion={strapiVersion}\n debouncedSearch={debouncedSearch}\n />\n </TabPanel>\n {/* Providers panel */}\n <TabPanel>\n <NpmPackagesGrid\n npmPackages={providersResponse?.data}\n status={providersStatus}\n installedPackageNames={installedPackageNames}\n useYarn={useYarn}\n isInDevelopmentMode={isInDevelopmentMode}\n npmPackageType=\"provider\"\n debouncedSearch={debouncedSearch}\n />\n </TabPanel>\n </TabPanels>\n </TabGroup>\n {pagination ? (\n <Box paddingTop={4}>\n <Flex alignItems=\"flex-end\" justifyContent=\"space-between\">\n <PageSizeURLQuery options={['12', '24', '50', '100']} defaultValue=\"24\" />\n <PaginationURLQuery pagination={pagination} />\n </Flex>\n </Box>\n ) : null}\n <Box paddingTop={8}>\n <a\n href=\"https://strapi.canny.io/plugin-requests\"\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n style={{ textDecoration: 'none' }}\n onClick={() => trackUsage('didMissMarketplacePlugin')}\n >\n <ContentBox\n title={formatMessage({\n id: 'admin.pages.MarketPlacePage.missingPlugin.title',\n defaultMessage: 'Documentation',\n })}\n subtitle={formatMessage({\n id: 'admin.pages.MarketPlacePage.missingPlugin.description',\n defaultMessage:\n \"Tell us what plugin you are looking for and we'll let our community plugin developers know in case they are in search for inspiration!\",\n })}\n icon={<GlassesSquare />}\n iconBackground=\"alternative100\"\n endAction={\n <Icon as={ExternalLink} color=\"neutral600\" width={3} height={3} marginLeft={2} />\n }\n />\n </a>\n </Box>\n </ContentLayout>\n </Main>\n </Layout>\n );\n};\n\nconst ProtectedMarketplacePage = () => {\n const permissions = useSelector(selectAdminPermissions);\n\n return (\n // @ts-expect-error – the selector is not typed.\n <CheckPagePermissions permissions={permissions.marketplace.main}>\n <MarketplacePage />\n </CheckPagePermissions>\n );\n};\n\nexport { MarketplacePage, ProtectedMarketplacePage };\nexport type { NpmPackageType, MarketplacePageQuery, TabQuery };\n"],"names":["React","useIntl","jsxs","Fragment","Box","jsx","Filter","Popover","Tag","Cross","styled","Button","Flex","MultiSelect","MultiSelectOption","Typography","useTracking","pluralize","Tooltip","Icon","CheckCircle","StrapiLogo","LinkButton","ExternalLink","useNotification","useClipboard","Check","semver","Duplicate","Github","pxToRem","Star","Download","Divider","AnErrorOccurred","Loader","GridLayout","EmptyDocuments","Grid","GridItem","HeaderLayout","Upload","Layout","Main","SingleSelect","SingleSelectOption","useNotifyAT","useQuery","qs","useQueryParams","useDebounce","useAppInfo","useFocusWhenNavigate","Helmet","ContentLayout","TabGroup","Tabs","Tab","Searchbar","TabPanels","TabPanel","PageSizeURLQuery","PaginationURLQuery","ContentBox","GlassesSquare","useSelector","selectAdminPermissions","CheckPagePermissions"],"mappings":"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"}
@@ -10,8 +10,8 @@ import { useIntl } from "react-intl";
10
10
  import { useQuery, useMutation } from "react-query";
11
11
  import styled from "styled-components";
12
12
  import * as yup from "yup";
13
- import { M as useLocales, P as useThemeToggle } from "./index-ce41b6f0.mjs";
14
- import { g as getFullName } from "./AuthenticatedApp-52d37e32.mjs";
13
+ import { M as useLocales, P as useThemeToggle } from "./index-0e6b3168.mjs";
14
+ import { g as getFullName } from "./AuthenticatedApp-4cc69f67.mjs";
15
15
  import { s as schema$1 } from "./edit-923cefa0.mjs";
16
16
  import "react-dom/client";
17
17
  import "invariant";
@@ -639,4 +639,4 @@ const UserInfoSection = ({ errors, onChange, values }) => {
639
639
  export {
640
640
  ProfilePage
641
641
  };
642
- //# sourceMappingURL=ProfilePage-bd50b4f3.mjs.map
642
+ //# sourceMappingURL=ProfilePage-1d607e48.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProfilePage-bd50b4f3.mjs","sources":["../../admin/src/pages/ProfilePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n ContentLayout,\n Flex,\n HeaderLayout,\n Main,\n useNotifyAT,\n Grid,\n GridItem,\n Typography,\n SingleSelect,\n SingleSelectOption,\n TextInput,\n FieldAction,\n} from '@strapi/design-system';\nimport {\n auth,\n Form,\n GenericInput,\n GenericInputProps,\n LoadingIndicatorPage,\n pxToRem,\n useAppInfo,\n useFetchClient,\n useFocusWhenNavigate,\n useNotification,\n useOverlayBlocker,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { Check, Eye, EyeStriked } from '@strapi/icons';\nimport { AxiosError } from 'axios';\nimport { Formik, FormikHelpers } from 'formik';\nimport upperFirst from 'lodash/upperFirst';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery } from 'react-query';\nimport styled from 'styled-components';\nimport * as yup from 'yup';\n\nimport { useLocales } from '../components/LanguageProvider';\nimport { useThemeToggle, ThemeName, ThemeToggleContextContextValue } from '../contexts/themeToggle';\nimport { getFullName } from '../utils/getFullName';\n\n// @ts-expect-error – no types available\nimport { profileValidation } from './SettingsPage/pages/Users/utils/validations/users';\n\nimport type { IsSSOLocked } from '../../../shared/contracts/providers';\nimport type { GetMe, UpdateMe } from '../../../shared/contracts/users';\n\nconst schema = yup.object().shape(profileValidation);\n\n/* -------------------------------------------------------------------------------------------------\n * ProfilePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProfilePage = () => {\n const { changeLocale, localeNames } = useLocales();\n const { setUserDisplayName } = useAppInfo();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const { notifyStatus } = useNotifyAT();\n const { currentTheme, themes: allApplicationThemes, onChangeTheme } = useThemeToggle();\n const { get, put } = useFetchClient();\n\n useFocusWhenNavigate();\n\n const {\n isLoading: isLoadingUser,\n data,\n refetch,\n } = useQuery(\n 'user',\n async () => {\n const { data } = await get<GetMe.Response>('/admin/users/me');\n\n return data.data;\n },\n {\n onSuccess() {\n notifyStatus(\n formatMessage({\n id: 'Settings.profile.form.notify.data.loaded',\n defaultMessage: 'Your profile data has been loaded',\n })\n );\n },\n onError() {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error', defaultMessage: 'An error occured' },\n });\n },\n }\n );\n\n const { isLoading: isLoadingSSO, data: dataSSO } = useQuery(\n ['providers', 'isSSOLocked'],\n async () => {\n const {\n data: { data },\n } = await get<IsSSOLocked.Response>('/admin/providers/isSSOLocked');\n\n return data;\n },\n {\n enabled: window.strapi.isEE && window.strapi.features.isEnabled('sso'),\n onError() {\n toggleNotification({\n type: 'warning',\n message: { id: 'Settings.permissions.users.sso.provider.error' },\n });\n },\n }\n );\n\n const isLoading = isLoadingUser || isLoadingSSO;\n\n type UpdateUsersMeBody = UpdateMe.Request['body'] & {\n confirmPassword: string;\n currentTheme: ThemeName;\n };\n\n const submitMutation = useMutation<\n UpdateMe.Response['data'] & { currentTheme: ThemeName },\n AxiosError<UpdateMe.Response>,\n UpdateUsersMeBody\n >(\n async (body) => {\n const { confirmPassword: _confirmPassword, currentTheme, ...bodyRest } = body;\n let dataToSend = bodyRest;\n\n const isPasswordRequestBody = (\n data: UpdateMe.Request['body']\n ): data is UpdateMe.PasswordRequestBody => {\n return 'password' in data;\n };\n\n // The password fields are optional. If the user didn't touch them, don't send any password\n // to the API, because an empty string would throw a validation error\n if (isPasswordRequestBody(dataToSend) && dataToSend.password === '') {\n const {\n password: _password,\n currentPassword: _currentPassword,\n ...passwordRequestBodyRest\n } = dataToSend;\n dataToSend = passwordRequestBodyRest;\n }\n\n const { data } = await put<UpdateMe.Response>('/admin/users/me', dataToSend);\n\n return { ...data.data, currentTheme };\n },\n {\n async onSuccess(data) {\n await refetch();\n const { email, firstname, lastname, username, preferedLanguage } = data;\n auth.setUserInfo({ email, firstname, lastname, username, preferedLanguage });\n const userDisplayName = data.username || getFullName(data.firstname ?? '', data.lastname);\n setUserDisplayName(userDisplayName);\n\n if (data.preferedLanguage) {\n changeLocale(data.preferedLanguage);\n }\n\n // @ts-expect-error – we're going to implement a context assertion to avoid this\n onChangeTheme(data.currentTheme);\n\n trackUsage('didChangeMode', { newMode: data.currentTheme });\n\n toggleNotification({\n type: 'success',\n message: { id: 'notification.success.saved', defaultMessage: 'Saved' },\n });\n },\n async onSettled() {\n // @ts-expect-error – we're going to implement a context assertion to avoid this\n unlockApp();\n },\n }\n );\n\n const { isLoading: isSubmittingForm } = submitMutation;\n\n const handleSubmit = async (\n body: UpdateUsersMeBody,\n { setErrors }: FormikHelpers<UpdateUsersMeBody>\n ) => {\n // @ts-expect-error – we're going to implement a context assertion to avoid this\n lockApp();\n\n const username = body.username;\n submitMutation.mutate(\n { ...body, username },\n {\n onError(error) {\n const res = error?.response?.data;\n\n if (res?.data) {\n return setErrors(res.data);\n }\n\n return toggleNotification({\n type: 'warning',\n message: { id: 'notification.error', defaultMessage: 'An error occured' },\n });\n },\n }\n );\n };\n\n if (isLoading || !data) {\n return (\n <Main aria-busy=\"true\">\n <Helmet\n title={formatMessage({\n id: 'Settings.profile.form.section.helmet.title',\n defaultMessage: 'User profile',\n })}\n />\n <HeaderLayout\n title={formatMessage({\n id: 'Settings.profile.form.section.profile.page.title',\n defaultMessage: 'Profile page',\n })}\n />\n <ContentLayout>\n <LoadingIndicatorPage />\n </ContentLayout>\n </Main>\n );\n }\n\n const hasLockedRole = dataSSO?.isSSOLocked ?? false;\n const { email, firstname, lastname, username, preferedLanguage } = data;\n const initialData = {\n email,\n firstname,\n lastname,\n username,\n preferedLanguage,\n currentTheme,\n confirmPassword: '',\n password: '',\n };\n\n return (\n <Main aria-busy={isSubmittingForm}>\n <Helmet\n title={formatMessage({\n id: 'Settings.profile.form.section.helmet.title',\n defaultMessage: 'User profile',\n })}\n />\n <Formik\n onSubmit={handleSubmit}\n // @ts-expect-error – currentTheme could be undefined because we don't have context assertion yet.\n initialValues={initialData}\n validateOnChange={false}\n validationSchema={schema}\n enableReinitialize\n >\n {({\n errors,\n values: {\n email,\n firstname,\n lastname,\n username,\n preferedLanguage,\n currentTheme,\n ...passwordValues\n },\n handleChange,\n isSubmitting,\n dirty,\n }) => {\n return (\n <Form>\n <HeaderLayout\n title={data.username || getFullName(data.firstname ?? '', data.lastname)}\n primaryAction={\n <Button\n startIcon={<Check />}\n loading={isSubmitting}\n type=\"submit\"\n disabled={!dirty}\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n />\n <Box paddingBottom={10}>\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <UserInfoSection\n errors={errors}\n onChange={handleChange}\n values={{\n firstname,\n lastname,\n username,\n email,\n }}\n />\n {!hasLockedRole && (\n <PasswordSection\n errors={errors}\n onChange={handleChange}\n values={passwordValues}\n />\n )}\n <PreferencesSection\n allApplicationThemes={allApplicationThemes}\n onChange={handleChange}\n values={{\n preferedLanguage,\n currentTheme,\n }}\n localeNames={localeNames}\n />\n </Flex>\n </ContentLayout>\n </Box>\n </Form>\n );\n }}\n </Formik>\n </Main>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PasswordSection\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PasswordSectionProps {\n errors: { currentPassword?: string; password?: string; confirmPassword?: string };\n onChange: React.ChangeEventHandler<HTMLInputElement>;\n values: {\n currentPassword?: string;\n password?: string;\n confirmPassword?: string;\n };\n}\n\nconst PasswordSection = ({ errors, onChange, values }: PasswordSectionProps) => {\n const { formatMessage } = useIntl();\n const [currentPasswordShown, setCurrentPasswordShown] = React.useState(false);\n const [passwordShown, setPasswordShown] = React.useState(false);\n const [passwordConfirmShown, setPasswordConfirmShown] = React.useState(false);\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'global.change-password',\n defaultMessage: 'Change password',\n })}\n </Typography>\n <Grid gap={5}>\n <GridItem s={12} col={6}>\n <TextInput\n error={\n errors.currentPassword\n ? formatMessage({\n id: errors.currentPassword,\n defaultMessage: errors.currentPassword,\n })\n : ''\n }\n onChange={onChange}\n value={values.currentPassword}\n label={formatMessage({\n id: 'Auth.form.currentPassword.label',\n defaultMessage: 'Current Password',\n })}\n name=\"currentPassword\"\n type={currentPasswordShown ? 'text' : 'password'}\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.stopPropagation();\n setCurrentPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n currentPasswordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {currentPasswordShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n />\n </GridItem>\n </Grid>\n <Grid gap={5}>\n <GridItem s={12} col={6}>\n <PasswordInput\n error={\n errors.password\n ? formatMessage({\n id: errors.password,\n defaultMessage: errors.password,\n })\n : ''\n }\n onChange={onChange}\n value={values.password}\n label={formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n })}\n name=\"password\"\n type={passwordShown ? 'text' : 'password'}\n autoComplete=\"new-password\"\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.stopPropagation();\n setPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n passwordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {passwordShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n />\n </GridItem>\n <GridItem s={12} col={6}>\n <PasswordInput\n error={\n errors.confirmPassword\n ? formatMessage({\n id: errors.confirmPassword,\n defaultMessage: errors.confirmPassword,\n })\n : ''\n }\n onChange={onChange}\n value={values.confirmPassword}\n label={formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n })}\n name=\"confirmPassword\"\n type={passwordConfirmShown ? 'text' : 'password'}\n autoComplete=\"new-password\"\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.stopPropagation();\n setPasswordConfirmShown((prev) => !prev);\n }}\n label={formatMessage(\n passwordConfirmShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {passwordConfirmShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n />\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n );\n};\n\nconst PasswordInput = styled(TextInput)`\n ::-ms-reveal {\n display: none;\n }\n`;\n\n// Wrapper of the Eye Icon able to show or hide the Password inside the field\nconst FieldActionWrapper = styled(FieldAction)`\n svg {\n height: ${pxToRem(16)};\n width: ${pxToRem(16)};\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * PreferencesSection\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PreferencesSectionProps extends Pick<GenericInputProps, 'onChange'> {\n values: {\n preferedLanguage?: string;\n currentTheme?: string;\n };\n localeNames: Record<string, string>;\n allApplicationThemes?: Partial<ThemeToggleContextContextValue['themes']>;\n}\n\nconst PreferencesSection = ({\n onChange,\n values,\n localeNames,\n allApplicationThemes = {},\n}: PreferencesSectionProps) => {\n const { formatMessage } = useIntl();\n const themesToDisplay = Object.keys(allApplicationThemes).filter(\n (themeName) => allApplicationThemes[themeName as keyof ThemeToggleContextContextValue['themes']]\n );\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'Settings.profile.form.section.experience.title',\n defaultMessage: 'Experience',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'Settings.profile.form.section.experience.interfaceLanguageHelp',\n defaultMessage:\n 'Preference changes will apply only to you. More information is available {here}.',\n },\n {\n here: (\n <Box\n as=\"a\"\n color=\"primary600\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#locales\"\n >\n {formatMessage({\n id: 'Settings.profile.form.section.experience.here',\n defaultMessage: 'here',\n })}\n </Box>\n ),\n }\n )}\n </Typography>\n </Flex>\n <Grid gap={5}>\n <GridItem s={12} col={6}>\n <SingleSelect\n label={formatMessage({\n id: 'Settings.profile.form.section.experience.interfaceLanguage',\n defaultMessage: 'Interface language',\n })}\n placeholder={formatMessage({\n id: 'global.select',\n defaultMessage: 'Select',\n })}\n hint={formatMessage({\n id: 'Settings.profile.form.section.experience.interfaceLanguage.hint',\n defaultMessage: 'This will only display your own interface in the chosen language.',\n })}\n onClear={() => {\n onChange({\n target: { name: 'preferedLanguage', value: null },\n });\n }}\n clearLabel={formatMessage({\n id: 'Settings.profile.form.section.experience.clear.select',\n defaultMessage: 'Clear the interface language selected',\n })}\n value={values.preferedLanguage}\n onChange={(e) => {\n onChange({\n target: { name: 'preferedLanguage', value: e },\n });\n }}\n >\n {Object.entries(localeNames).map(([language, langName]) => (\n <SingleSelectOption value={language} key={language}>\n {langName}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </GridItem>\n <GridItem s={12} col={6}>\n <SingleSelect\n label={formatMessage({\n id: 'Settings.profile.form.section.experience.mode.label',\n defaultMessage: 'Interface mode',\n })}\n placeholder={formatMessage({\n id: 'components.Select.placeholder',\n defaultMessage: 'Select',\n })}\n hint={formatMessage({\n id: 'Settings.profile.form.section.experience.mode.hint',\n defaultMessage: 'Displays your interface in the chosen mode.',\n })}\n value={values.currentTheme}\n onChange={(e) => {\n onChange({\n target: { name: 'currentTheme', value: e },\n });\n }}\n >\n <SingleSelectOption value=\"system\">\n {formatMessage({\n id: 'Settings.profile.form.section.experience.mode.option-system-label',\n defaultMessage: 'Use system settings',\n })}\n </SingleSelectOption>\n {themesToDisplay.map((theme) => (\n <SingleSelectOption value={theme} key={theme}>\n {formatMessage(\n {\n id: 'Settings.profile.form.section.experience.mode.option-label',\n defaultMessage: '{name} mode',\n },\n {\n name: formatMessage({\n id: theme,\n defaultMessage: upperFirst(theme),\n }),\n }\n )}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * UserInfoSection\n * -----------------------------------------------------------------------------------------------*/\n\ninterface UserInfoSectionProps extends Pick<GenericInputProps, 'onChange'> {\n errors: { firstname?: string; lastname?: string; username?: string; email?: string };\n values: {\n firstname?: string;\n lastname?: string;\n username?: string;\n email?: string;\n };\n}\n\nconst UserInfoSection = ({ errors, onChange, values }: UserInfoSectionProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'global.profile',\n defaultMessage: 'Profile',\n })}\n </Typography>\n <Grid gap={5}>\n <GridItem s={12} col={6}>\n <GenericInput\n intlLabel={{\n id: 'Auth.form.firstname.label',\n defaultMessage: 'First name',\n }}\n error={errors.firstname}\n onChange={onChange}\n value={values.firstname}\n type=\"text\"\n name=\"firstname\"\n required\n />\n </GridItem>\n <GridItem s={12} col={6}>\n <GenericInput\n intlLabel={{\n id: 'Auth.form.lastname.label',\n defaultMessage: 'Last name',\n }}\n error={errors.lastname}\n onChange={onChange}\n value={values.lastname}\n type=\"text\"\n name=\"lastname\"\n />\n </GridItem>\n <GridItem s={12} col={6}>\n <GenericInput\n intlLabel={{ id: 'Auth.form.email.label', defaultMessage: 'Email' }}\n error={errors.email}\n onChange={onChange}\n value={values.email}\n type=\"email\"\n name=\"email\"\n required\n />\n </GridItem>\n <GridItem s={12} col={6}>\n <GenericInput\n intlLabel={{\n id: 'Auth.form.username.label',\n defaultMessage: 'Username',\n }}\n error={errors.username}\n onChange={onChange}\n value={values.username}\n type=\"text\"\n name=\"username\"\n />\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n );\n};\n\nexport { ProfilePage };\n"],"names":["profileValidation","data","currentTheme","email","firstname","lastname","username","preferedLanguage"],"mappings":"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"}
1
+ {"version":3,"file":"ProfilePage-1d607e48.mjs","sources":["../../admin/src/pages/ProfilePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n ContentLayout,\n Flex,\n HeaderLayout,\n Main,\n useNotifyAT,\n Grid,\n GridItem,\n Typography,\n SingleSelect,\n SingleSelectOption,\n TextInput,\n FieldAction,\n} from '@strapi/design-system';\nimport {\n auth,\n Form,\n GenericInput,\n GenericInputProps,\n LoadingIndicatorPage,\n pxToRem,\n useAppInfo,\n useFetchClient,\n useFocusWhenNavigate,\n useNotification,\n useOverlayBlocker,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { Check, Eye, EyeStriked } from '@strapi/icons';\nimport { AxiosError } from 'axios';\nimport { Formik, FormikHelpers } from 'formik';\nimport upperFirst from 'lodash/upperFirst';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery } from 'react-query';\nimport styled from 'styled-components';\nimport * as yup from 'yup';\n\nimport { useLocales } from '../components/LanguageProvider';\nimport { useThemeToggle, ThemeName, ThemeToggleContextContextValue } from '../contexts/themeToggle';\nimport { getFullName } from '../utils/getFullName';\n\n// @ts-expect-error – no types available\nimport { profileValidation } from './SettingsPage/pages/Users/utils/validations/users';\n\nimport type { IsSSOLocked } from '../../../shared/contracts/providers';\nimport type { GetMe, UpdateMe } from '../../../shared/contracts/users';\n\nconst schema = yup.object().shape(profileValidation);\n\n/* -------------------------------------------------------------------------------------------------\n * ProfilePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProfilePage = () => {\n const { changeLocale, localeNames } = useLocales();\n const { setUserDisplayName } = useAppInfo();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const { notifyStatus } = useNotifyAT();\n const { currentTheme, themes: allApplicationThemes, onChangeTheme } = useThemeToggle();\n const { get, put } = useFetchClient();\n\n useFocusWhenNavigate();\n\n const {\n isLoading: isLoadingUser,\n data,\n refetch,\n } = useQuery(\n 'user',\n async () => {\n const { data } = await get<GetMe.Response>('/admin/users/me');\n\n return data.data;\n },\n {\n onSuccess() {\n notifyStatus(\n formatMessage({\n id: 'Settings.profile.form.notify.data.loaded',\n defaultMessage: 'Your profile data has been loaded',\n })\n );\n },\n onError() {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error', defaultMessage: 'An error occured' },\n });\n },\n }\n );\n\n const { isLoading: isLoadingSSO, data: dataSSO } = useQuery(\n ['providers', 'isSSOLocked'],\n async () => {\n const {\n data: { data },\n } = await get<IsSSOLocked.Response>('/admin/providers/isSSOLocked');\n\n return data;\n },\n {\n enabled: window.strapi.isEE && window.strapi.features.isEnabled('sso'),\n onError() {\n toggleNotification({\n type: 'warning',\n message: { id: 'Settings.permissions.users.sso.provider.error' },\n });\n },\n }\n );\n\n const isLoading = isLoadingUser || isLoadingSSO;\n\n type UpdateUsersMeBody = UpdateMe.Request['body'] & {\n confirmPassword: string;\n currentTheme: ThemeName;\n };\n\n const submitMutation = useMutation<\n UpdateMe.Response['data'] & { currentTheme: ThemeName },\n AxiosError<UpdateMe.Response>,\n UpdateUsersMeBody\n >(\n async (body) => {\n const { confirmPassword: _confirmPassword, currentTheme, ...bodyRest } = body;\n let dataToSend = bodyRest;\n\n const isPasswordRequestBody = (\n data: UpdateMe.Request['body']\n ): data is UpdateMe.PasswordRequestBody => {\n return 'password' in data;\n };\n\n // The password fields are optional. If the user didn't touch them, don't send any password\n // to the API, because an empty string would throw a validation error\n if (isPasswordRequestBody(dataToSend) && dataToSend.password === '') {\n const {\n password: _password,\n currentPassword: _currentPassword,\n ...passwordRequestBodyRest\n } = dataToSend;\n dataToSend = passwordRequestBodyRest;\n }\n\n const { data } = await put<UpdateMe.Response>('/admin/users/me', dataToSend);\n\n return { ...data.data, currentTheme };\n },\n {\n async onSuccess(data) {\n await refetch();\n const { email, firstname, lastname, username, preferedLanguage } = data;\n auth.setUserInfo({ email, firstname, lastname, username, preferedLanguage });\n const userDisplayName = data.username || getFullName(data.firstname ?? '', data.lastname);\n setUserDisplayName(userDisplayName);\n\n if (data.preferedLanguage) {\n changeLocale(data.preferedLanguage);\n }\n\n // @ts-expect-error – we're going to implement a context assertion to avoid this\n onChangeTheme(data.currentTheme);\n\n trackUsage('didChangeMode', { newMode: data.currentTheme });\n\n toggleNotification({\n type: 'success',\n message: { id: 'notification.success.saved', defaultMessage: 'Saved' },\n });\n },\n async onSettled() {\n // @ts-expect-error – we're going to implement a context assertion to avoid this\n unlockApp();\n },\n }\n );\n\n const { isLoading: isSubmittingForm } = submitMutation;\n\n const handleSubmit = async (\n body: UpdateUsersMeBody,\n { setErrors }: FormikHelpers<UpdateUsersMeBody>\n ) => {\n // @ts-expect-error – we're going to implement a context assertion to avoid this\n lockApp();\n\n const username = body.username;\n submitMutation.mutate(\n { ...body, username },\n {\n onError(error) {\n const res = error?.response?.data;\n\n if (res?.data) {\n return setErrors(res.data);\n }\n\n return toggleNotification({\n type: 'warning',\n message: { id: 'notification.error', defaultMessage: 'An error occured' },\n });\n },\n }\n );\n };\n\n if (isLoading || !data) {\n return (\n <Main aria-busy=\"true\">\n <Helmet\n title={formatMessage({\n id: 'Settings.profile.form.section.helmet.title',\n defaultMessage: 'User profile',\n })}\n />\n <HeaderLayout\n title={formatMessage({\n id: 'Settings.profile.form.section.profile.page.title',\n defaultMessage: 'Profile page',\n })}\n />\n <ContentLayout>\n <LoadingIndicatorPage />\n </ContentLayout>\n </Main>\n );\n }\n\n const hasLockedRole = dataSSO?.isSSOLocked ?? false;\n const { email, firstname, lastname, username, preferedLanguage } = data;\n const initialData = {\n email,\n firstname,\n lastname,\n username,\n preferedLanguage,\n currentTheme,\n confirmPassword: '',\n password: '',\n };\n\n return (\n <Main aria-busy={isSubmittingForm}>\n <Helmet\n title={formatMessage({\n id: 'Settings.profile.form.section.helmet.title',\n defaultMessage: 'User profile',\n })}\n />\n <Formik\n onSubmit={handleSubmit}\n // @ts-expect-error – currentTheme could be undefined because we don't have context assertion yet.\n initialValues={initialData}\n validateOnChange={false}\n validationSchema={schema}\n enableReinitialize\n >\n {({\n errors,\n values: {\n email,\n firstname,\n lastname,\n username,\n preferedLanguage,\n currentTheme,\n ...passwordValues\n },\n handleChange,\n isSubmitting,\n dirty,\n }) => {\n return (\n <Form>\n <HeaderLayout\n title={data.username || getFullName(data.firstname ?? '', data.lastname)}\n primaryAction={\n <Button\n startIcon={<Check />}\n loading={isSubmitting}\n type=\"submit\"\n disabled={!dirty}\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n />\n <Box paddingBottom={10}>\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <UserInfoSection\n errors={errors}\n onChange={handleChange}\n values={{\n firstname,\n lastname,\n username,\n email,\n }}\n />\n {!hasLockedRole && (\n <PasswordSection\n errors={errors}\n onChange={handleChange}\n values={passwordValues}\n />\n )}\n <PreferencesSection\n allApplicationThemes={allApplicationThemes}\n onChange={handleChange}\n values={{\n preferedLanguage,\n currentTheme,\n }}\n localeNames={localeNames}\n />\n </Flex>\n </ContentLayout>\n </Box>\n </Form>\n );\n }}\n </Formik>\n </Main>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PasswordSection\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PasswordSectionProps {\n errors: { currentPassword?: string; password?: string; confirmPassword?: string };\n onChange: React.ChangeEventHandler<HTMLInputElement>;\n values: {\n currentPassword?: string;\n password?: string;\n confirmPassword?: string;\n };\n}\n\nconst PasswordSection = ({ errors, onChange, values }: PasswordSectionProps) => {\n const { formatMessage } = useIntl();\n const [currentPasswordShown, setCurrentPasswordShown] = React.useState(false);\n const [passwordShown, setPasswordShown] = React.useState(false);\n const [passwordConfirmShown, setPasswordConfirmShown] = React.useState(false);\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'global.change-password',\n defaultMessage: 'Change password',\n })}\n </Typography>\n <Grid gap={5}>\n <GridItem s={12} col={6}>\n <TextInput\n error={\n errors.currentPassword\n ? formatMessage({\n id: errors.currentPassword,\n defaultMessage: errors.currentPassword,\n })\n : ''\n }\n onChange={onChange}\n value={values.currentPassword}\n label={formatMessage({\n id: 'Auth.form.currentPassword.label',\n defaultMessage: 'Current Password',\n })}\n name=\"currentPassword\"\n type={currentPasswordShown ? 'text' : 'password'}\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.stopPropagation();\n setCurrentPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n currentPasswordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {currentPasswordShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n />\n </GridItem>\n </Grid>\n <Grid gap={5}>\n <GridItem s={12} col={6}>\n <PasswordInput\n error={\n errors.password\n ? formatMessage({\n id: errors.password,\n defaultMessage: errors.password,\n })\n : ''\n }\n onChange={onChange}\n value={values.password}\n label={formatMessage({\n id: 'global.password',\n defaultMessage: 'Password',\n })}\n name=\"password\"\n type={passwordShown ? 'text' : 'password'}\n autoComplete=\"new-password\"\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.stopPropagation();\n setPasswordShown((prev) => !prev);\n }}\n label={formatMessage(\n passwordShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {passwordShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n />\n </GridItem>\n <GridItem s={12} col={6}>\n <PasswordInput\n error={\n errors.confirmPassword\n ? formatMessage({\n id: errors.confirmPassword,\n defaultMessage: errors.confirmPassword,\n })\n : ''\n }\n onChange={onChange}\n value={values.confirmPassword}\n label={formatMessage({\n id: 'Auth.form.confirmPassword.label',\n defaultMessage: 'Confirm Password',\n })}\n name=\"confirmPassword\"\n type={passwordConfirmShown ? 'text' : 'password'}\n autoComplete=\"new-password\"\n endAction={\n <FieldActionWrapper\n onClick={(e) => {\n e.stopPropagation();\n setPasswordConfirmShown((prev) => !prev);\n }}\n label={formatMessage(\n passwordConfirmShown\n ? {\n id: 'Auth.form.password.show-password',\n defaultMessage: 'Show password',\n }\n : {\n id: 'Auth.form.password.hide-password',\n defaultMessage: 'Hide password',\n }\n )}\n >\n {passwordConfirmShown ? <Eye /> : <EyeStriked />}\n </FieldActionWrapper>\n }\n />\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n );\n};\n\nconst PasswordInput = styled(TextInput)`\n ::-ms-reveal {\n display: none;\n }\n`;\n\n// Wrapper of the Eye Icon able to show or hide the Password inside the field\nconst FieldActionWrapper = styled(FieldAction)`\n svg {\n height: ${pxToRem(16)};\n width: ${pxToRem(16)};\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * PreferencesSection\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PreferencesSectionProps extends Pick<GenericInputProps, 'onChange'> {\n values: {\n preferedLanguage?: string;\n currentTheme?: string;\n };\n localeNames: Record<string, string>;\n allApplicationThemes?: Partial<ThemeToggleContextContextValue['themes']>;\n}\n\nconst PreferencesSection = ({\n onChange,\n values,\n localeNames,\n allApplicationThemes = {},\n}: PreferencesSectionProps) => {\n const { formatMessage } = useIntl();\n const themesToDisplay = Object.keys(allApplicationThemes).filter(\n (themeName) => allApplicationThemes[themeName as keyof ThemeToggleContextContextValue['themes']]\n );\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'Settings.profile.form.section.experience.title',\n defaultMessage: 'Experience',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'Settings.profile.form.section.experience.interfaceLanguageHelp',\n defaultMessage:\n 'Preference changes will apply only to you. More information is available {here}.',\n },\n {\n here: (\n <Box\n as=\"a\"\n color=\"primary600\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://docs.strapi.io/developer-docs/latest/development/admin-customization.html#locales\"\n >\n {formatMessage({\n id: 'Settings.profile.form.section.experience.here',\n defaultMessage: 'here',\n })}\n </Box>\n ),\n }\n )}\n </Typography>\n </Flex>\n <Grid gap={5}>\n <GridItem s={12} col={6}>\n <SingleSelect\n label={formatMessage({\n id: 'Settings.profile.form.section.experience.interfaceLanguage',\n defaultMessage: 'Interface language',\n })}\n placeholder={formatMessage({\n id: 'global.select',\n defaultMessage: 'Select',\n })}\n hint={formatMessage({\n id: 'Settings.profile.form.section.experience.interfaceLanguage.hint',\n defaultMessage: 'This will only display your own interface in the chosen language.',\n })}\n onClear={() => {\n onChange({\n target: { name: 'preferedLanguage', value: null },\n });\n }}\n clearLabel={formatMessage({\n id: 'Settings.profile.form.section.experience.clear.select',\n defaultMessage: 'Clear the interface language selected',\n })}\n value={values.preferedLanguage}\n onChange={(e) => {\n onChange({\n target: { name: 'preferedLanguage', value: e },\n });\n }}\n >\n {Object.entries(localeNames).map(([language, langName]) => (\n <SingleSelectOption value={language} key={language}>\n {langName}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </GridItem>\n <GridItem s={12} col={6}>\n <SingleSelect\n label={formatMessage({\n id: 'Settings.profile.form.section.experience.mode.label',\n defaultMessage: 'Interface mode',\n })}\n placeholder={formatMessage({\n id: 'components.Select.placeholder',\n defaultMessage: 'Select',\n })}\n hint={formatMessage({\n id: 'Settings.profile.form.section.experience.mode.hint',\n defaultMessage: 'Displays your interface in the chosen mode.',\n })}\n value={values.currentTheme}\n onChange={(e) => {\n onChange({\n target: { name: 'currentTheme', value: e },\n });\n }}\n >\n <SingleSelectOption value=\"system\">\n {formatMessage({\n id: 'Settings.profile.form.section.experience.mode.option-system-label',\n defaultMessage: 'Use system settings',\n })}\n </SingleSelectOption>\n {themesToDisplay.map((theme) => (\n <SingleSelectOption value={theme} key={theme}>\n {formatMessage(\n {\n id: 'Settings.profile.form.section.experience.mode.option-label',\n defaultMessage: '{name} mode',\n },\n {\n name: formatMessage({\n id: theme,\n defaultMessage: upperFirst(theme),\n }),\n }\n )}\n </SingleSelectOption>\n ))}\n </SingleSelect>\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * UserInfoSection\n * -----------------------------------------------------------------------------------------------*/\n\ninterface UserInfoSectionProps extends Pick<GenericInputProps, 'onChange'> {\n errors: { firstname?: string; lastname?: string; username?: string; email?: string };\n values: {\n firstname?: string;\n lastname?: string;\n username?: string;\n email?: string;\n };\n}\n\nconst UserInfoSection = ({ errors, onChange, values }: UserInfoSectionProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'global.profile',\n defaultMessage: 'Profile',\n })}\n </Typography>\n <Grid gap={5}>\n <GridItem s={12} col={6}>\n <GenericInput\n intlLabel={{\n id: 'Auth.form.firstname.label',\n defaultMessage: 'First name',\n }}\n error={errors.firstname}\n onChange={onChange}\n value={values.firstname}\n type=\"text\"\n name=\"firstname\"\n required\n />\n </GridItem>\n <GridItem s={12} col={6}>\n <GenericInput\n intlLabel={{\n id: 'Auth.form.lastname.label',\n defaultMessage: 'Last name',\n }}\n error={errors.lastname}\n onChange={onChange}\n value={values.lastname}\n type=\"text\"\n name=\"lastname\"\n />\n </GridItem>\n <GridItem s={12} col={6}>\n <GenericInput\n intlLabel={{ id: 'Auth.form.email.label', defaultMessage: 'Email' }}\n error={errors.email}\n onChange={onChange}\n value={values.email}\n type=\"email\"\n name=\"email\"\n required\n />\n </GridItem>\n <GridItem s={12} col={6}>\n <GenericInput\n intlLabel={{\n id: 'Auth.form.username.label',\n defaultMessage: 'Username',\n }}\n error={errors.username}\n onChange={onChange}\n value={values.username}\n type=\"text\"\n name=\"username\"\n />\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n );\n};\n\nexport { ProfilePage };\n"],"names":["profileValidation","data","currentTheme","email","firstname","lastname","username","preferedLanguage"],"mappings":"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"}
@@ -12,8 +12,8 @@ const reactIntl = require("react-intl");
12
12
  const reactQuery = require("react-query");
13
13
  const styled = require("styled-components");
14
14
  const yup = require("yup");
15
- const index = require("./index-133699a3.js");
16
- const AuthenticatedApp = require("./AuthenticatedApp-31e6418d.js");
15
+ const index = require("./index-19517b07.js");
16
+ const AuthenticatedApp = require("./AuthenticatedApp-052b1f3f.js");
17
17
  const edit = require("./edit-29bdf5d6.js");
18
18
  require("react-dom/client");
19
19
  require("invariant");
@@ -662,4 +662,4 @@ const UserInfoSection = ({ errors, onChange, values }) => {
662
662
  );
663
663
  };
664
664
  exports.ProfilePage = ProfilePage;
665
- //# sourceMappingURL=ProfilePage-23b8a29f.js.map
665
+ //# sourceMappingURL=ProfilePage-e7c7f60a.js.map