@strapi/admin 5.56.0 → 5.57.0

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 (311) hide show
  1. package/dist/admin/admin/src/components/Filters.js +1 -1
  2. package/dist/admin/admin/src/components/Filters.js.map +1 -1
  3. package/dist/admin/admin/src/components/Filters.mjs +1 -1
  4. package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/FormInputs/Enumeration.js +2 -2
  6. package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
  7. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +2 -2
  8. package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/MediaLibraryBanner.js +38 -2
  10. package/dist/admin/admin/src/components/MediaLibraryBanner.js.map +1 -1
  11. package/dist/admin/admin/src/components/MediaLibraryBanner.mjs +18 -2
  12. package/dist/admin/admin/src/components/MediaLibraryBanner.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/RelativeTime.js +9 -0
  14. package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
  15. package/dist/admin/admin/src/components/RelativeTime.mjs +10 -1
  16. package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
  17. package/dist/admin/admin/src/components/TopBanners.js +52 -0
  18. package/dist/admin/admin/src/components/TopBanners.js.map +1 -0
  19. package/dist/admin/admin/src/components/TopBanners.mjs +30 -0
  20. package/dist/admin/admin/src/components/TopBanners.mjs.map +1 -0
  21. package/dist/admin/admin/src/features/Tracking.js +28 -8
  22. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  23. package/dist/admin/admin/src/features/Tracking.mjs +29 -10
  24. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  25. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +4 -20
  26. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
  27. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +4 -20
  28. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
  29. package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.js +59 -0
  30. package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.js.map +1 -0
  31. package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.mjs +37 -0
  32. package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.mjs.map +1 -0
  33. package/dist/admin/admin/src/translations/en.json.js +5 -0
  34. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  35. package/dist/admin/admin/src/translations/en.json.mjs +5 -0
  36. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  37. package/dist/admin/admin/src/utils/getFetchClient.js +3 -3
  38. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  39. package/dist/admin/admin/src/utils/getFetchClient.mjs +2 -2
  40. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  41. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js +6 -1
  42. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js.map +1 -1
  43. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs +6 -1
  44. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs.map +1 -1
  45. package/dist/admin/src/components/MediaLibraryBanner.d.ts +10 -1
  46. package/dist/admin/src/components/TopBanners.d.ts +8 -0
  47. package/dist/admin/src/features/Tracking.d.ts +12 -1
  48. package/dist/admin/src/layouts/useAuthenticatedAccessTracking.d.ts +6 -0
  49. package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.d.ts +5 -0
  50. package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
  51. package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts +8 -2
  52. package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts.map +1 -1
  53. package/dist/ee/server/src/controllers/authentication.d.ts.map +1 -1
  54. package/dist/ee/server/src/controllers/user.d.ts.map +1 -1
  55. package/dist/ee/server/src/index.d.ts +4 -1
  56. package/dist/ee/server/src/index.d.ts.map +1 -1
  57. package/dist/ee/server/src/services/index.d.ts +4 -1
  58. package/dist/ee/server/src/services/index.d.ts.map +1 -1
  59. package/dist/ee/server/src/services/metrics.d.ts.map +1 -1
  60. package/dist/ee/server/src/services/persist-tables.d.ts.map +1 -1
  61. package/dist/ee/server/src/services/seat-enforcement.d.ts +3 -1
  62. package/dist/ee/server/src/services/seat-enforcement.d.ts.map +1 -1
  63. package/dist/server/ee/server/src/controllers/admin.js +3 -4
  64. package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
  65. package/dist/server/ee/server/src/controllers/admin.mjs +3 -4
  66. package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
  67. package/dist/server/ee/server/src/controllers/authentication-utils/utils.js +2 -2
  68. package/dist/server/ee/server/src/controllers/authentication-utils/utils.js.map +1 -1
  69. package/dist/server/ee/server/src/controllers/authentication-utils/utils.mjs +2 -2
  70. package/dist/server/ee/server/src/controllers/authentication-utils/utils.mjs.map +1 -1
  71. package/dist/server/ee/server/src/controllers/authentication.js +11 -11
  72. package/dist/server/ee/server/src/controllers/authentication.js.map +1 -1
  73. package/dist/server/ee/server/src/controllers/authentication.mjs +11 -11
  74. package/dist/server/ee/server/src/controllers/authentication.mjs.map +1 -1
  75. package/dist/server/ee/server/src/controllers/user.js +7 -8
  76. package/dist/server/ee/server/src/controllers/user.js.map +1 -1
  77. package/dist/server/ee/server/src/controllers/user.mjs +8 -9
  78. package/dist/server/ee/server/src/controllers/user.mjs.map +1 -1
  79. package/dist/server/ee/server/src/services/metrics.js +9 -7
  80. package/dist/server/ee/server/src/services/metrics.js.map +1 -1
  81. package/dist/server/ee/server/src/services/metrics.mjs +9 -7
  82. package/dist/server/ee/server/src/services/metrics.mjs.map +1 -1
  83. package/dist/server/ee/server/src/services/persist-tables.js +3 -4
  84. package/dist/server/ee/server/src/services/persist-tables.js.map +1 -1
  85. package/dist/server/ee/server/src/services/persist-tables.mjs +3 -4
  86. package/dist/server/ee/server/src/services/persist-tables.mjs.map +1 -1
  87. package/dist/server/ee/server/src/services/role.js +2 -2
  88. package/dist/server/ee/server/src/services/role.js.map +1 -1
  89. package/dist/server/ee/server/src/services/role.mjs +1 -1
  90. package/dist/server/ee/server/src/services/role.mjs.map +1 -1
  91. package/dist/server/ee/server/src/services/seat-enforcement.js +20 -20
  92. package/dist/server/ee/server/src/services/seat-enforcement.js.map +1 -1
  93. package/dist/server/ee/server/src/services/seat-enforcement.mjs +20 -20
  94. package/dist/server/ee/server/src/services/seat-enforcement.mjs.map +1 -1
  95. package/dist/server/ee/server/src/services/user.js +1 -2
  96. package/dist/server/ee/server/src/services/user.js.map +1 -1
  97. package/dist/server/ee/server/src/services/user.mjs +2 -3
  98. package/dist/server/ee/server/src/services/user.mjs.map +1 -1
  99. package/dist/server/ee/server/src/utils/sso-lock.js +2 -2
  100. package/dist/server/ee/server/src/utils/sso-lock.js.map +1 -1
  101. package/dist/server/ee/server/src/utils/sso-lock.mjs +1 -1
  102. package/dist/server/ee/server/src/utils/sso-lock.mjs.map +1 -1
  103. package/dist/server/server/src/audit-logs/admin-users.js +3 -3
  104. package/dist/server/server/src/audit-logs/admin-users.js.map +1 -1
  105. package/dist/server/server/src/audit-logs/admin-users.mjs +2 -2
  106. package/dist/server/server/src/audit-logs/admin-users.mjs.map +1 -1
  107. package/dist/server/server/src/audit-logs/tokens.js +3 -3
  108. package/dist/server/server/src/audit-logs/tokens.js.map +1 -1
  109. package/dist/server/server/src/audit-logs/tokens.mjs +2 -2
  110. package/dist/server/server/src/audit-logs/tokens.mjs.map +1 -1
  111. package/dist/server/server/src/audit-logs/webhooks.js +2 -2
  112. package/dist/server/server/src/audit-logs/webhooks.js.map +1 -1
  113. package/dist/server/server/src/audit-logs/webhooks.mjs +1 -1
  114. package/dist/server/server/src/audit-logs/webhooks.mjs.map +1 -1
  115. package/dist/server/server/src/bootstrap.js +6 -4
  116. package/dist/server/server/src/bootstrap.js.map +1 -1
  117. package/dist/server/server/src/bootstrap.mjs +6 -4
  118. package/dist/server/server/src/bootstrap.mjs.map +1 -1
  119. package/dist/server/server/src/controllers/admin-token.js +8 -8
  120. package/dist/server/server/src/controllers/admin-token.js.map +1 -1
  121. package/dist/server/server/src/controllers/admin-token.mjs +4 -4
  122. package/dist/server/server/src/controllers/admin-token.mjs.map +1 -1
  123. package/dist/server/server/src/controllers/admin.js +3 -5
  124. package/dist/server/server/src/controllers/admin.js.map +1 -1
  125. package/dist/server/server/src/controllers/admin.mjs +2 -4
  126. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  127. package/dist/server/server/src/controllers/api-token.js +8 -8
  128. package/dist/server/server/src/controllers/api-token.js.map +1 -1
  129. package/dist/server/server/src/controllers/api-token.mjs +4 -4
  130. package/dist/server/server/src/controllers/api-token.mjs.map +1 -1
  131. package/dist/server/server/src/controllers/formatters/conditions.js +2 -2
  132. package/dist/server/server/src/controllers/formatters/conditions.js.map +1 -1
  133. package/dist/server/server/src/controllers/formatters/conditions.mjs +2 -2
  134. package/dist/server/server/src/controllers/formatters/conditions.mjs.map +1 -1
  135. package/dist/server/server/src/controllers/transfer/index.js +2 -2
  136. package/dist/server/server/src/controllers/transfer/index.js.map +1 -1
  137. package/dist/server/server/src/controllers/transfer/index.mjs +2 -2
  138. package/dist/server/server/src/controllers/transfer/index.mjs.map +1 -1
  139. package/dist/server/server/src/controllers/transfer/token.js +8 -8
  140. package/dist/server/server/src/controllers/transfer/token.js.map +1 -1
  141. package/dist/server/server/src/controllers/transfer/token.mjs +4 -4
  142. package/dist/server/server/src/controllers/transfer/token.mjs.map +1 -1
  143. package/dist/server/server/src/domain/action/index.js +18 -16
  144. package/dist/server/server/src/domain/action/index.js.map +1 -1
  145. package/dist/server/server/src/domain/action/index.mjs +16 -14
  146. package/dist/server/server/src/domain/action/index.mjs.map +1 -1
  147. package/dist/server/server/src/domain/action/provider.mjs +4 -4
  148. package/dist/server/server/src/domain/action/provider.mjs.map +1 -1
  149. package/dist/server/server/src/domain/condition/index.js +7 -4
  150. package/dist/server/server/src/domain/condition/index.js.map +1 -1
  151. package/dist/server/server/src/domain/condition/index.mjs +7 -4
  152. package/dist/server/server/src/domain/condition/index.mjs.map +1 -1
  153. package/dist/server/server/src/domain/permission/index.js +24 -15
  154. package/dist/server/server/src/domain/permission/index.js.map +1 -1
  155. package/dist/server/server/src/domain/permission/index.mjs +21 -12
  156. package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
  157. package/dist/server/server/src/middlewares/rateLimit.js +5 -5
  158. package/dist/server/server/src/middlewares/rateLimit.js.map +1 -1
  159. package/dist/server/server/src/middlewares/rateLimit.mjs +4 -4
  160. package/dist/server/server/src/middlewares/rateLimit.mjs.map +1 -1
  161. package/dist/server/server/src/register.js +6 -0
  162. package/dist/server/server/src/register.js.map +1 -1
  163. package/dist/server/server/src/register.mjs +6 -0
  164. package/dist/server/server/src/register.mjs.map +1 -1
  165. package/dist/server/server/src/services/action.js +1 -2
  166. package/dist/server/server/src/services/action.js.map +1 -1
  167. package/dist/server/server/src/services/action.mjs +1 -2
  168. package/dist/server/server/src/services/action.mjs.map +1 -1
  169. package/dist/server/server/src/services/api-token.js +61 -49
  170. package/dist/server/server/src/services/api-token.js.map +1 -1
  171. package/dist/server/server/src/services/api-token.mjs +53 -41
  172. package/dist/server/server/src/services/api-token.mjs.map +1 -1
  173. package/dist/server/server/src/services/condition.js +2 -2
  174. package/dist/server/server/src/services/condition.js.map +1 -1
  175. package/dist/server/server/src/services/condition.mjs +1 -1
  176. package/dist/server/server/src/services/condition.mjs.map +1 -1
  177. package/dist/server/server/src/services/content-type.js +5 -4
  178. package/dist/server/server/src/services/content-type.js.map +1 -1
  179. package/dist/server/server/src/services/content-type.mjs +8 -7
  180. package/dist/server/server/src/services/content-type.mjs.map +1 -1
  181. package/dist/server/server/src/services/homepage.js +2 -1
  182. package/dist/server/server/src/services/homepage.js.map +1 -1
  183. package/dist/server/server/src/services/homepage.mjs +2 -1
  184. package/dist/server/server/src/services/homepage.mjs.map +1 -1
  185. package/dist/server/server/src/services/passport/local-strategy.js +2 -2
  186. package/dist/server/server/src/services/passport/local-strategy.js.map +1 -1
  187. package/dist/server/server/src/services/passport/local-strategy.mjs +1 -1
  188. package/dist/server/server/src/services/passport/local-strategy.mjs.map +1 -1
  189. package/dist/server/server/src/services/passport.js +1 -2
  190. package/dist/server/server/src/services/passport.js.map +1 -1
  191. package/dist/server/server/src/services/passport.mjs +1 -2
  192. package/dist/server/server/src/services/passport.mjs.map +1 -1
  193. package/dist/server/server/src/services/permission/engine.js +4 -4
  194. package/dist/server/server/src/services/permission/engine.js.map +1 -1
  195. package/dist/server/server/src/services/permission/engine.mjs +2 -2
  196. package/dist/server/server/src/services/permission/engine.mjs.map +1 -1
  197. package/dist/server/server/src/services/permission/permissions-manager/index.js +2 -3
  198. package/dist/server/server/src/services/permission/permissions-manager/index.js.map +1 -1
  199. package/dist/server/server/src/services/permission/permissions-manager/index.mjs +1 -2
  200. package/dist/server/server/src/services/permission/permissions-manager/index.mjs.map +1 -1
  201. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js +6 -6
  202. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js.map +1 -1
  203. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs +4 -4
  204. package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs.map +1 -1
  205. package/dist/server/server/src/services/permission/permissions-manager/sanitize.js +47 -41
  206. package/dist/server/server/src/services/permission/permissions-manager/sanitize.js.map +1 -1
  207. package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs +44 -38
  208. package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs.map +1 -1
  209. package/dist/server/server/src/services/permission/permissions-manager/validate.js +30 -26
  210. package/dist/server/server/src/services/permission/permissions-manager/validate.js.map +1 -1
  211. package/dist/server/server/src/services/permission/permissions-manager/validate.mjs +28 -24
  212. package/dist/server/server/src/services/permission/permissions-manager/validate.mjs.map +1 -1
  213. package/dist/server/server/src/services/permission/queries.js +9 -9
  214. package/dist/server/server/src/services/permission/queries.js.map +1 -1
  215. package/dist/server/server/src/services/permission/queries.mjs +9 -9
  216. package/dist/server/server/src/services/permission/queries.mjs.map +1 -1
  217. package/dist/server/server/src/services/permission/rename-fields.js +118 -0
  218. package/dist/server/server/src/services/permission/rename-fields.js.map +1 -0
  219. package/dist/server/server/src/services/permission/rename-fields.mjs +116 -0
  220. package/dist/server/server/src/services/permission/rename-fields.mjs.map +1 -0
  221. package/dist/server/server/src/services/permission/sections-builder/index.js +2 -2
  222. package/dist/server/server/src/services/permission/sections-builder/index.js.map +1 -1
  223. package/dist/server/server/src/services/permission/sections-builder/index.mjs +2 -2
  224. package/dist/server/server/src/services/permission/sections-builder/index.mjs.map +1 -1
  225. package/dist/server/server/src/services/permission/sections-builder/section.js +1 -2
  226. package/dist/server/server/src/services/permission/sections-builder/section.js.map +1 -1
  227. package/dist/server/server/src/services/permission/sections-builder/section.mjs +1 -2
  228. package/dist/server/server/src/services/permission/sections-builder/section.mjs.map +1 -1
  229. package/dist/server/server/src/services/permission/sections-builder/utils.js +6 -6
  230. package/dist/server/server/src/services/permission/sections-builder/utils.js.map +1 -1
  231. package/dist/server/server/src/services/permission/sections-builder/utils.mjs +4 -4
  232. package/dist/server/server/src/services/permission/sections-builder/utils.mjs.map +1 -1
  233. package/dist/server/server/src/services/role.js +20 -19
  234. package/dist/server/server/src/services/role.js.map +1 -1
  235. package/dist/server/server/src/services/role.mjs +20 -19
  236. package/dist/server/server/src/services/role.mjs.map +1 -1
  237. package/dist/server/server/src/services/transfer/token.js +20 -16
  238. package/dist/server/server/src/services/transfer/token.js.map +1 -1
  239. package/dist/server/server/src/services/transfer/token.mjs +14 -10
  240. package/dist/server/server/src/services/transfer/token.mjs.map +1 -1
  241. package/dist/server/server/src/services/user.js +2 -3
  242. package/dist/server/server/src/services/user.js.map +1 -1
  243. package/dist/server/server/src/services/user.mjs +3 -4
  244. package/dist/server/server/src/services/user.mjs.map +1 -1
  245. package/dist/server/server/src/strategies/api-token-utils.js +2 -3
  246. package/dist/server/server/src/strategies/api-token-utils.js.map +1 -1
  247. package/dist/server/server/src/strategies/api-token-utils.mjs +2 -3
  248. package/dist/server/server/src/strategies/api-token-utils.mjs.map +1 -1
  249. package/dist/server/server/src/strategies/content-api-token.js +3 -3
  250. package/dist/server/server/src/strategies/content-api-token.js.map +1 -1
  251. package/dist/server/server/src/strategies/content-api-token.mjs +1 -1
  252. package/dist/server/server/src/strategies/content-api-token.mjs.map +1 -1
  253. package/dist/server/server/src/strategies/data-transfer.js +4 -4
  254. package/dist/server/server/src/strategies/data-transfer.js.map +1 -1
  255. package/dist/server/server/src/strategies/data-transfer.mjs +3 -3
  256. package/dist/server/server/src/strategies/data-transfer.mjs.map +1 -1
  257. package/dist/server/server/src/validation/common-validators.js +9 -10
  258. package/dist/server/server/src/validation/common-validators.js.map +1 -1
  259. package/dist/server/server/src/validation/common-validators.mjs +13 -14
  260. package/dist/server/server/src/validation/common-validators.mjs.map +1 -1
  261. package/dist/server/server/src/validation/user.js +1 -2
  262. package/dist/server/server/src/validation/user.js.map +1 -1
  263. package/dist/server/server/src/validation/user.mjs +1 -2
  264. package/dist/server/server/src/validation/user.mjs.map +1 -1
  265. package/dist/server/src/audit-logs/tokens.d.ts.map +1 -1
  266. package/dist/server/src/bootstrap.d.ts.map +1 -1
  267. package/dist/server/src/controllers/admin-token.d.ts.map +1 -1
  268. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  269. package/dist/server/src/controllers/api-token.d.ts.map +1 -1
  270. package/dist/server/src/controllers/formatters/conditions.d.ts +1 -1
  271. package/dist/server/src/controllers/formatters/conditions.d.ts.map +1 -1
  272. package/dist/server/src/controllers/homepage.d.ts +1 -1
  273. package/dist/server/src/controllers/index.d.ts +1 -1
  274. package/dist/server/src/controllers/transfer/index.d.ts.map +1 -1
  275. package/dist/server/src/controllers/transfer/token.d.ts.map +1 -1
  276. package/dist/server/src/domain/action/index.d.ts +1 -0
  277. package/dist/server/src/domain/action/index.d.ts.map +1 -1
  278. package/dist/server/src/domain/condition/index.d.ts +2 -2
  279. package/dist/server/src/domain/condition/index.d.ts.map +1 -1
  280. package/dist/server/src/domain/permission/index.d.ts.map +1 -1
  281. package/dist/server/src/index.d.ts +3 -3
  282. package/dist/server/src/index.d.ts.map +1 -1
  283. package/dist/server/src/middlewares/index.d.ts.map +1 -1
  284. package/dist/server/src/middlewares/rateLimit.d.ts.map +1 -1
  285. package/dist/server/src/register.d.ts.map +1 -1
  286. package/dist/server/src/services/action.d.ts.map +1 -1
  287. package/dist/server/src/services/api-token.d.ts.map +1 -1
  288. package/dist/server/src/services/condition.d.ts.map +1 -1
  289. package/dist/server/src/services/content-type.d.ts.map +1 -1
  290. package/dist/server/src/services/homepage.d.ts +1 -1
  291. package/dist/server/src/services/homepage.d.ts.map +1 -1
  292. package/dist/server/src/services/index.d.ts +2 -2
  293. package/dist/server/src/services/index.d.ts.map +1 -1
  294. package/dist/server/src/services/passport/local-strategy.d.ts.map +1 -1
  295. package/dist/server/src/services/passport.d.ts.map +1 -1
  296. package/dist/server/src/services/permission/engine.d.ts.map +1 -1
  297. package/dist/server/src/services/permission/permissions-manager/permission-fields.d.ts.map +1 -1
  298. package/dist/server/src/services/permission/permissions-manager/sanitize.d.ts.map +1 -1
  299. package/dist/server/src/services/permission/permissions-manager/validate.d.ts.map +1 -1
  300. package/dist/server/src/services/permission/queries.d.ts.map +1 -1
  301. package/dist/server/src/services/permission/rename-fields.d.ts +21 -0
  302. package/dist/server/src/services/permission/rename-fields.d.ts.map +1 -0
  303. package/dist/server/src/services/permission/sections-builder/section.d.ts.map +1 -1
  304. package/dist/server/src/services/permission/sections-builder/utils.d.ts +1 -1
  305. package/dist/server/src/services/permission/sections-builder/utils.d.ts.map +1 -1
  306. package/dist/server/src/services/role.d.ts +1 -1
  307. package/dist/server/src/services/role.d.ts.map +1 -1
  308. package/dist/server/src/services/transfer/token.d.ts.map +1 -1
  309. package/dist/server/src/strategies/content-api-token.d.ts.map +1 -1
  310. package/dist/server/src/validation/user.d.ts.map +1 -1
  311. package/package.json +9 -9
@@ -212,7 +212,7 @@ const Root = ({ children, disabled = false, onChange, options = [], onOpenChange
212
212
  label: filter.label,
213
213
  value: filter.name
214
214
  })),
215
- placholder: formatMessage({
215
+ placeholder: formatMessage({
216
216
  id: 'app.utils.select-field',
217
217
  defaultMessage: 'Select field'
218
218
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"Filters.js","sources":["../../../../../admin/src/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Popover, Tag } from '@strapi/design-system';\nimport { Plus, Filter as FilterIcon, Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport {\n BASE_FILTERS,\n CONTAINS_FILTERS,\n FilterOption,\n IS_SENSITIVE_FILTERS,\n NUMERIC_FILTERS,\n STRING_PARSE_FILTERS,\n FILTERS_WITH_NO_VALUE,\n} from '../constants/filters';\nimport { useControllableState } from '../hooks/useControllableState';\nimport {\n deepEncodeQueryValues,\n useQueryParams,\n withEncodedUserParams,\n} from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\nimport { Form, InputProps } from './Form';\nimport { InputRenderer } from './FormInputs/Renderer';\n\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FilterFormData {\n name: string;\n filter: string;\n value?: string;\n}\n\n/**\n * Carries the position in the `$and` array so we replace that exact entry, not every entry\n * sharing the same `(name, operator, value)`.\n */\ninterface EditingFilter extends FilterFormData {\n index: number;\n}\n\ninterface FitlersContextValue {\n disabled: boolean;\n onChange: (data: FilterFormData) => void;\n options: Filters.Filter[];\n setOpen: (open: boolean) => void;\n editingFilter: EditingFilter | null;\n setEditingFilter: (filter: EditingFilter | null) => void;\n}\n\nconst [FiltersProvider, useFilters] = createContext<FitlersContextValue>('Filters');\n\nconst getFilterDetails = (\n filterEntry: Record<string, unknown>,\n options: Filters.Filter[]\n): { name: string; operator: string; value: unknown } | null => {\n const [name] = Object.keys(filterEntry);\n const option = options.find((o) => o.name === name);\n if (!option) {\n return null;\n }\n\n const operatorObj =\n option.type === 'relation'\n ? (filterEntry[name] as Record<string, unknown>)?.[option.mainField?.name ?? 'id']\n : filterEntry[name];\n\n if (typeof operatorObj !== 'object' || operatorObj === null) {\n return null;\n }\n\n const [operator] = Object.keys(operatorObj as Record<string, unknown>);\n if (!operator) {\n return null;\n }\n\n return { name, operator, value: (operatorObj as Record<string, unknown>)[operator] };\n};\n\ninterface RootProps\n extends Partial<Pick<FitlersContextValue, 'disabled' | 'onChange' | 'options'>>,\n Popover.Props {\n children: React.ReactNode;\n}\n\nconst Root = ({\n children,\n disabled = false,\n onChange,\n options = [],\n onOpenChange,\n open: openProp,\n defaultOpen,\n ...restProps\n}: RootProps) => {\n const [editingFilter, setEditingFilter] = React.useState<EditingFilter | null>(null);\n\n const handleChange = (data: FilterFormData) => {\n if (onChange) {\n onChange(data);\n }\n };\n\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n React.useEffect(() => {\n if (!open) {\n setEditingFilter(null);\n }\n }, [open]);\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen} {...restProps}>\n <FiltersProvider\n setOpen={setOpen}\n disabled={disabled}\n onChange={handleChange}\n options={options}\n editingFilter={editingFilter}\n setEditingFilter={setEditingFilter}\n >\n {children}\n </FiltersProvider>\n </Popover.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Trigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst Trigger = React.forwardRef<HTMLButtonElement, Filters.TriggerProps>(\n ({ label }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const disabled = useFilters('Trigger', ({ disabled }) => disabled);\n\n return (\n <Popover.Trigger>\n <Button\n variant=\"tertiary\"\n ref={forwardedRef}\n startIcon={<FilterIcon />}\n size=\"S\"\n disabled={disabled}\n >\n {label || formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n </Popover.Trigger>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Popover\n * -----------------------------------------------------------------------------------------------*/\n/**\n * The zIndex property is used to override the zIndex of the Portal element of the Popover.\n * This is needed to ensure that the DatePicker is rendered above the Popover when opened.\n * The issue was that both the DatePicker and the Popover are rendered in a Portal and have the same zIndex.\n * On init, since the DatePicker is rendered before the Popover in the DOM,\n * it's causing the issue of appearing behind the Popover.\n */\nconst PopoverImpl = ({ zIndex }: { zIndex?: number }) => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n const { formatMessage } = useIntl();\n const options = useFilters('Popover', ({ options }) => options);\n const onChange = useFilters('Popover', ({ onChange }) => onChange);\n const setOpen = useFilters('Popover', ({ setOpen }) => setOpen);\n const editingFilter = useFilters('Popover', ({ editingFilter }) => editingFilter);\n const setEditingFilter = useFilters('Popover', ({ setEditingFilter }) => setEditingFilter);\n\n const initialValues = React.useMemo(() => {\n return editingFilter ?? { name: options[0]?.name, filter: BASE_FILTERS[0].value };\n }, [editingFilter, options]);\n\n if (options.length === 0) {\n return null;\n }\n\n const handleSubmit = (data: FilterFormData) => {\n const value = FILTERS_WITH_NO_VALUE.includes(data.filter) ? 'true' : (data.value ?? '');\n\n if (!value) {\n return;\n }\n\n if (onChange) {\n onChange(data);\n }\n\n /**\n * There will ALWAYS be an option because we use the options to create the form data.\n */\n const fieldOptions = options.find((filter) => filter.name === data.name)!;\n\n /**\n * If the filter is a relation, we need to nest the filter object,\n * we filter based on the mainField of the relation, if there is no mainField, we use the id.\n * At the end, we pass the operator & value. This value _could_ look like:\n * ```json\n * {\n * \"$eq\": \"1\",\n * }\n * ```\n */\n const operatorValuePairing = {\n [data.filter]: value,\n };\n\n const newFilterEntry = {\n [data.name]:\n fieldOptions.type === 'relation'\n ? {\n [fieldOptions.mainField?.name ?? 'id']: operatorValuePairing,\n }\n : operatorValuePairing,\n };\n\n const existingFilters = query.filters?.$and ?? [];\n\n const newFilterQuery = editingFilter\n ? {\n ...query.filters,\n $and: existingFilters.map((filter, i) =>\n i === editingFilter.index ? newFilterEntry : filter\n ),\n }\n : {\n ...query.filters,\n $and: [...existingFilters, newFilterEntry],\n };\n\n setQuery(\n withEncodedUserParams(query, { filters: deepEncodeQueryValues(newFilterQuery), page: 1 }),\n 'push',\n true\n );\n setOpen(false);\n setEditingFilter(null);\n };\n\n return (\n <Popover.Content style={{ zIndex }}>\n <Box padding={3}>\n <Form\n method=\"POST\"\n initialValues={initialValues}\n onSubmit={handleSubmit}\n key={\n editingFilter\n ? `edit-${editingFilter.index}-${editingFilter.name}-${editingFilter.filter}-${editingFilter.value ?? 'empty'}`\n : 'create'\n }\n >\n {({ values: formValues, modified, isSubmitting }) => {\n const filter = options.find((filter) => filter.name === formValues.name);\n const Input = filter?.input || InputRenderer;\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2} style={{ minWidth: 184 }}>\n {[\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n name: 'name',\n options: options.map((filter) => ({\n label: filter.label,\n value: filter.name,\n })),\n placholder: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n type: 'enumeration' as const,\n },\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n name: 'filter',\n options:\n filter?.operators ||\n getFilterList(filter).map((opt) => ({\n label: formatMessage(opt.label),\n value: opt.value,\n })),\n placeholder: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n type: 'enumeration' as const,\n },\n ].map((field) => (\n <InputRenderer key={field.name} {...field} />\n ))}\n {filter &&\n formValues.filter &&\n !FILTERS_WITH_NO_VALUE.includes(formValues.filter) ? (\n <Input\n {...filter}\n label={null}\n aria-label={filter.label}\n name=\"value\"\n // @ts-expect-error – if type is `custom` then `Input` will be a custom component.\n type={filter.mainField?.type ?? filter.type}\n />\n ) : null}\n <Button\n disabled={!modified || isSubmitting}\n size=\"L\"\n variant=\"secondary\"\n startIcon={<Plus />}\n type=\"submit\"\n fullWidth\n >\n {editingFilter\n ? formatMessage({\n id: 'app.utils.update-filter',\n defaultMessage: 'Update filter',\n })\n : formatMessage({ id: 'app.utils.add-filter', defaultMessage: 'Add filter' })}\n </Button>\n </Flex>\n );\n }}\n </Form>\n </Box>\n </Popover.Content>\n );\n};\n\n/**\n * Depending on the selected field find the possible filters to apply\n */\nconst getFilterList = (filter?: Filters.Filter): FilterOption[] => {\n if (!filter) {\n return [];\n }\n\n const type = filter.mainField?.type ? filter.mainField.type : filter.type;\n\n switch (type) {\n case 'email':\n case 'text':\n case 'string': {\n return [\n ...BASE_FILTERS,\n ...IS_SENSITIVE_FILTERS,\n ...CONTAINS_FILTERS,\n ...STRING_PARSE_FILTERS,\n ];\n }\n\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n case 'time':\n case 'date': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS, ...CONTAINS_FILTERS];\n }\n\n case 'datetime': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n\n case 'enumeration': {\n return BASE_FILTERS;\n }\n\n default:\n return [...BASE_FILTERS, ...IS_SENSITIVE_FILTERS];\n }\n};\n\n/* -------------------------------------------------------------------------------------------------\n * List\n * -----------------------------------------------------------------------------------------------*/\n\nconst List = () => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n\n const options = useFilters('List', ({ options }) => options);\n\n /**\n * Removed by position: identical filters are a legal query, so matching on\n * `(name, operator, value)` would drop every copy at once.\n */\n const handleRemove = (index: number) => {\n const nextFilters = (query?.filters?.$and ?? []).filter((_, i) => i !== index);\n\n setQuery(\n withEncodedUserParams(query, {\n filters: deepEncodeQueryValues({ $and: nextFilters }),\n page: 1,\n })\n );\n };\n\n if (!query?.filters?.$and?.length) {\n return null;\n }\n\n return (\n <>\n {query?.filters?.$and?.map((queryFilter, index) => {\n const details = getFilterDetails(queryFilter, options);\n if (!details || typeof details.value === 'object') {\n return null;\n }\n\n const filter = options.find(({ name }) => name === details.name);\n if (!filter) {\n return null;\n }\n /**\n * `index` is the position in the raw `$and` array — entries skipped above still count.\n * Never cache it: `qs` re-indexes on removal, so dropping entry 0 of [0, 1, 2]\n * leaves [0, 1] and any held index goes stale.\n */\n return (\n <AttributeTag\n key={`${index}-${details.name}-${details.operator}-${details.value}`}\n {...filter}\n index={index}\n onRemove={handleRemove}\n operator={details.operator}\n value={String(details.value)}\n />\n );\n })}\n </>\n );\n};\n\ninterface AttributeTagProps extends Filters.Filter {\n /**\n * Position in the `$and` array. An explicit prop rather than a closure bound at the call\n * site, so it stays part of the props comparison if this ever gets memoised.\n */\n index: number;\n onRemove: (index: number) => void;\n operator: string;\n value: string;\n}\n\nconst AttributeTag = ({\n index,\n input,\n label,\n mainField,\n name,\n onRemove,\n operator,\n options,\n value,\n ...filter\n}: AttributeTagProps) => {\n const { formatMessage, formatDate, formatTime, formatNumber } = useIntl();\n const setOpen = useFilters('AttributeTag', ({ setOpen }) => setOpen);\n const setEditingFilter = useFilters('AttributeTag', ({ setEditingFilter }) => setEditingFilter);\n\n const handleEdit = () => {\n setEditingFilter({\n name,\n filter: operator,\n index,\n value: FILTERS_WITH_NO_VALUE.includes(operator) ? undefined : value,\n });\n setOpen(true);\n };\n\n const handleRemove = () => {\n onRemove(index);\n };\n\n const type = mainField?.type ? mainField.type : filter.type;\n\n let formattedValue: string = value;\n\n switch (type) {\n case 'date':\n formattedValue = formatDate(value, { dateStyle: 'full' });\n break;\n case 'datetime':\n formattedValue = formatDate(value, { dateStyle: 'full', timeStyle: 'short' });\n break;\n case 'time':\n const [hour, minute] = value.split(':');\n const date = new Date();\n date.setHours(Number(hour));\n date.setMinutes(Number(minute));\n\n formattedValue = formatTime(date, {\n hour: 'numeric',\n minute: 'numeric',\n });\n break;\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal':\n formattedValue = formatNumber(Number(value));\n break;\n }\n\n // Handle custom input\n if (input && options) {\n // If the custom input has an options array, find the option with a customValue matching the query value\n const selectedOption = options.find((option) => {\n return (typeof option === 'string' ? option : option.value) === value;\n });\n\n formattedValue = selectedOption\n ? typeof selectedOption === 'string'\n ? selectedOption\n : (selectedOption.label ?? selectedOption.value)\n : value;\n }\n\n const operatorLabel = formatMessage({\n id: `components.FilterOptions.FILTER_TYPES.${operator}`,\n defaultMessage: operator,\n });\n\n const content = FILTERS_WITH_NO_VALUE.includes(operator)\n ? `${label} ${operatorLabel}`\n : `${label} ${operatorLabel} ${formattedValue}`;\n\n return (\n <Tag padding={1} onClick={handleRemove} icon={<Cross />} label={content}>\n <Box tag=\"span\" cursor=\"pointer\" onClick={handleEdit}>\n {content}\n </Box>\n </Tag>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EXPORTS\n * -----------------------------------------------------------------------------------------------*/\n\nconst Filters = {\n List,\n Popover: PopoverImpl,\n Root,\n Trigger,\n};\n\ninterface MainField {\n name: string;\n type: Schema.Attribute.Kind | 'custom';\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Filters {\n export interface Filter {\n input?: React.ComponentType<ValueInputProps>;\n label: string;\n /**\n * the name of the attribute we use to display the actual name e.g. relations\n * are just ids, so we use the mainField to display something meaninginful by\n * looking at the target's schema\n */\n mainField?: MainField;\n name: string;\n operators?: Array<{\n label: string;\n value: string;\n }>;\n options?: Array<{ label?: string; value: string }> | string[];\n type: InputProps['type'] | 'relation' | 'custom';\n }\n\n export interface ValueInputProps extends Omit<Filter, 'label'> {\n ['aria-label']: string;\n }\n\n export type Props = RootProps;\n\n export interface TriggerProps {\n label?: string;\n }\n\n export interface Query {\n filters?: {\n /**\n * Typically, a filter will be:\n * ```ts\n * {\n * [attributeName]: {\n * [operator]: value\n * }\n * }\n * ```\n * However, for relation items it becomes more nested.\n * ```ts\n * {\n * [attributeName]: {\n * [relationTargetAttribute]: {\n * [operator]: value\n * }\n * }\n * }\n * ```\n */\n $and?: Array<Record<string, Record<string, string | Record<string, string>>>>;\n };\n page?: number;\n _q?: string;\n }\n}\n\nexport { Filters };\n"],"names":["FiltersProvider","useFilters","createContext","getFilterDetails","filterEntry","options","name","Object","keys","option","find","o","operatorObj","type","mainField","operator","value","Root","children","disabled","onChange","onOpenChange","open","openProp","defaultOpen","restProps","editingFilter","setEditingFilter","React","useState","handleChange","data","setOpen","useControllableState","prop","defaultProp","useEffect","_jsx","Popover","Trigger","forwardRef","label","forwardedRef","formatMessage","useIntl","Button","variant","ref","startIcon","FilterIcon","size","id","defaultMessage","PopoverImpl","zIndex","query","setQuery","useQueryParams","initialValues","useMemo","filter","BASE_FILTERS","length","handleSubmit","FILTERS_WITH_NO_VALUE","includes","fieldOptions","operatorValuePairing","newFilterEntry","existingFilters","filters","$and","newFilterQuery","map","i","index","withEncodedUserParams","deepEncodeQueryValues","page","Content","style","Box","padding","Form","method","onSubmit","values","formValues","modified","isSubmitting","Input","input","InputRenderer","_jsxs","Flex","direction","alignItems","gap","minWidth","placholder","operators","getFilterList","opt","placeholder","field","aria-label","Plus","fullWidth","IS_SENSITIVE_FILTERS","CONTAINS_FILTERS","STRING_PARSE_FILTERS","NUMERIC_FILTERS","List","handleRemove","nextFilters","_","_Fragment","queryFilter","details","AttributeTag","onRemove","String","formatDate","formatTime","formatNumber","handleEdit","undefined","formattedValue","dateStyle","timeStyle","hour","minute","split","date","Date","setHours","Number","setMinutes","selectedOption","operatorLabel","content","Tag","onClick","icon","Cross","tag","cursor","Filters"],"mappings":"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"}
1
+ {"version":3,"file":"Filters.js","sources":["../../../../../admin/src/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Popover, Tag } from '@strapi/design-system';\nimport { Plus, Filter as FilterIcon, Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport {\n BASE_FILTERS,\n CONTAINS_FILTERS,\n FilterOption,\n IS_SENSITIVE_FILTERS,\n NUMERIC_FILTERS,\n STRING_PARSE_FILTERS,\n FILTERS_WITH_NO_VALUE,\n} from '../constants/filters';\nimport { useControllableState } from '../hooks/useControllableState';\nimport {\n deepEncodeQueryValues,\n useQueryParams,\n withEncodedUserParams,\n} from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\nimport { Form, InputProps } from './Form';\nimport { InputRenderer } from './FormInputs/Renderer';\n\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FilterFormData {\n name: string;\n filter: string;\n value?: string;\n}\n\n/**\n * Carries the position in the `$and` array so we replace that exact entry, not every entry\n * sharing the same `(name, operator, value)`.\n */\ninterface EditingFilter extends FilterFormData {\n index: number;\n}\n\ninterface FitlersContextValue {\n disabled: boolean;\n onChange: (data: FilterFormData) => void;\n options: Filters.Filter[];\n setOpen: (open: boolean) => void;\n editingFilter: EditingFilter | null;\n setEditingFilter: (filter: EditingFilter | null) => void;\n}\n\nconst [FiltersProvider, useFilters] = createContext<FitlersContextValue>('Filters');\n\nconst getFilterDetails = (\n filterEntry: Record<string, unknown>,\n options: Filters.Filter[]\n): { name: string; operator: string; value: unknown } | null => {\n const [name] = Object.keys(filterEntry);\n const option = options.find((o) => o.name === name);\n if (!option) {\n return null;\n }\n\n const operatorObj =\n option.type === 'relation'\n ? (filterEntry[name] as Record<string, unknown>)?.[option.mainField?.name ?? 'id']\n : filterEntry[name];\n\n if (typeof operatorObj !== 'object' || operatorObj === null) {\n return null;\n }\n\n const [operator] = Object.keys(operatorObj as Record<string, unknown>);\n if (!operator) {\n return null;\n }\n\n return { name, operator, value: (operatorObj as Record<string, unknown>)[operator] };\n};\n\ninterface RootProps\n extends Partial<Pick<FitlersContextValue, 'disabled' | 'onChange' | 'options'>>,\n Popover.Props {\n children: React.ReactNode;\n}\n\nconst Root = ({\n children,\n disabled = false,\n onChange,\n options = [],\n onOpenChange,\n open: openProp,\n defaultOpen,\n ...restProps\n}: RootProps) => {\n const [editingFilter, setEditingFilter] = React.useState<EditingFilter | null>(null);\n\n const handleChange = (data: FilterFormData) => {\n if (onChange) {\n onChange(data);\n }\n };\n\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n React.useEffect(() => {\n if (!open) {\n setEditingFilter(null);\n }\n }, [open]);\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen} {...restProps}>\n <FiltersProvider\n setOpen={setOpen}\n disabled={disabled}\n onChange={handleChange}\n options={options}\n editingFilter={editingFilter}\n setEditingFilter={setEditingFilter}\n >\n {children}\n </FiltersProvider>\n </Popover.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Trigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst Trigger = React.forwardRef<HTMLButtonElement, Filters.TriggerProps>(\n ({ label }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const disabled = useFilters('Trigger', ({ disabled }) => disabled);\n\n return (\n <Popover.Trigger>\n <Button\n variant=\"tertiary\"\n ref={forwardedRef}\n startIcon={<FilterIcon />}\n size=\"S\"\n disabled={disabled}\n >\n {label || formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n </Popover.Trigger>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Popover\n * -----------------------------------------------------------------------------------------------*/\n/**\n * The zIndex property is used to override the zIndex of the Portal element of the Popover.\n * This is needed to ensure that the DatePicker is rendered above the Popover when opened.\n * The issue was that both the DatePicker and the Popover are rendered in a Portal and have the same zIndex.\n * On init, since the DatePicker is rendered before the Popover in the DOM,\n * it's causing the issue of appearing behind the Popover.\n */\nconst PopoverImpl = ({ zIndex }: { zIndex?: number }) => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n const { formatMessage } = useIntl();\n const options = useFilters('Popover', ({ options }) => options);\n const onChange = useFilters('Popover', ({ onChange }) => onChange);\n const setOpen = useFilters('Popover', ({ setOpen }) => setOpen);\n const editingFilter = useFilters('Popover', ({ editingFilter }) => editingFilter);\n const setEditingFilter = useFilters('Popover', ({ setEditingFilter }) => setEditingFilter);\n\n const initialValues = React.useMemo(() => {\n return editingFilter ?? { name: options[0]?.name, filter: BASE_FILTERS[0].value };\n }, [editingFilter, options]);\n\n if (options.length === 0) {\n return null;\n }\n\n const handleSubmit = (data: FilterFormData) => {\n const value = FILTERS_WITH_NO_VALUE.includes(data.filter) ? 'true' : (data.value ?? '');\n\n if (!value) {\n return;\n }\n\n if (onChange) {\n onChange(data);\n }\n\n /**\n * There will ALWAYS be an option because we use the options to create the form data.\n */\n const fieldOptions = options.find((filter) => filter.name === data.name)!;\n\n /**\n * If the filter is a relation, we need to nest the filter object,\n * we filter based on the mainField of the relation, if there is no mainField, we use the id.\n * At the end, we pass the operator & value. This value _could_ look like:\n * ```json\n * {\n * \"$eq\": \"1\",\n * }\n * ```\n */\n const operatorValuePairing = {\n [data.filter]: value,\n };\n\n const newFilterEntry = {\n [data.name]:\n fieldOptions.type === 'relation'\n ? {\n [fieldOptions.mainField?.name ?? 'id']: operatorValuePairing,\n }\n : operatorValuePairing,\n };\n\n const existingFilters = query.filters?.$and ?? [];\n\n const newFilterQuery = editingFilter\n ? {\n ...query.filters,\n $and: existingFilters.map((filter, i) =>\n i === editingFilter.index ? newFilterEntry : filter\n ),\n }\n : {\n ...query.filters,\n $and: [...existingFilters, newFilterEntry],\n };\n\n setQuery(\n withEncodedUserParams(query, { filters: deepEncodeQueryValues(newFilterQuery), page: 1 }),\n 'push',\n true\n );\n setOpen(false);\n setEditingFilter(null);\n };\n\n return (\n <Popover.Content style={{ zIndex }}>\n <Box padding={3}>\n <Form\n method=\"POST\"\n initialValues={initialValues}\n onSubmit={handleSubmit}\n key={\n editingFilter\n ? `edit-${editingFilter.index}-${editingFilter.name}-${editingFilter.filter}-${editingFilter.value ?? 'empty'}`\n : 'create'\n }\n >\n {({ values: formValues, modified, isSubmitting }) => {\n const filter = options.find((filter) => filter.name === formValues.name);\n const Input = filter?.input || InputRenderer;\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2} style={{ minWidth: 184 }}>\n {[\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n name: 'name',\n options: options.map((filter) => ({\n label: filter.label,\n value: filter.name,\n })),\n placeholder: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n type: 'enumeration' as const,\n },\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n name: 'filter',\n options:\n filter?.operators ||\n getFilterList(filter).map((opt) => ({\n label: formatMessage(opt.label),\n value: opt.value,\n })),\n placeholder: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n type: 'enumeration' as const,\n },\n ].map((field) => (\n <InputRenderer key={field.name} {...field} />\n ))}\n {filter &&\n formValues.filter &&\n !FILTERS_WITH_NO_VALUE.includes(formValues.filter) ? (\n <Input\n {...filter}\n label={null}\n aria-label={filter.label}\n name=\"value\"\n // @ts-expect-error – if type is `custom` then `Input` will be a custom component.\n type={filter.mainField?.type ?? filter.type}\n />\n ) : null}\n <Button\n disabled={!modified || isSubmitting}\n size=\"L\"\n variant=\"secondary\"\n startIcon={<Plus />}\n type=\"submit\"\n fullWidth\n >\n {editingFilter\n ? formatMessage({\n id: 'app.utils.update-filter',\n defaultMessage: 'Update filter',\n })\n : formatMessage({ id: 'app.utils.add-filter', defaultMessage: 'Add filter' })}\n </Button>\n </Flex>\n );\n }}\n </Form>\n </Box>\n </Popover.Content>\n );\n};\n\n/**\n * Depending on the selected field find the possible filters to apply\n */\nconst getFilterList = (filter?: Filters.Filter): FilterOption[] => {\n if (!filter) {\n return [];\n }\n\n const type = filter.mainField?.type ? filter.mainField.type : filter.type;\n\n switch (type) {\n case 'email':\n case 'text':\n case 'string': {\n return [\n ...BASE_FILTERS,\n ...IS_SENSITIVE_FILTERS,\n ...CONTAINS_FILTERS,\n ...STRING_PARSE_FILTERS,\n ];\n }\n\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n case 'time':\n case 'date': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS, ...CONTAINS_FILTERS];\n }\n\n case 'datetime': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n\n case 'enumeration': {\n return BASE_FILTERS;\n }\n\n default:\n return [...BASE_FILTERS, ...IS_SENSITIVE_FILTERS];\n }\n};\n\n/* -------------------------------------------------------------------------------------------------\n * List\n * -----------------------------------------------------------------------------------------------*/\n\nconst List = () => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n\n const options = useFilters('List', ({ options }) => options);\n\n /**\n * Removed by position: identical filters are a legal query, so matching on\n * `(name, operator, value)` would drop every copy at once.\n */\n const handleRemove = (index: number) => {\n const nextFilters = (query?.filters?.$and ?? []).filter((_, i) => i !== index);\n\n setQuery(\n withEncodedUserParams(query, {\n filters: deepEncodeQueryValues({ $and: nextFilters }),\n page: 1,\n })\n );\n };\n\n if (!query?.filters?.$and?.length) {\n return null;\n }\n\n return (\n <>\n {query?.filters?.$and?.map((queryFilter, index) => {\n const details = getFilterDetails(queryFilter, options);\n if (!details || typeof details.value === 'object') {\n return null;\n }\n\n const filter = options.find(({ name }) => name === details.name);\n if (!filter) {\n return null;\n }\n /**\n * `index` is the position in the raw `$and` array — entries skipped above still count.\n * Never cache it: `qs` re-indexes on removal, so dropping entry 0 of [0, 1, 2]\n * leaves [0, 1] and any held index goes stale.\n */\n return (\n <AttributeTag\n key={`${index}-${details.name}-${details.operator}-${details.value}`}\n {...filter}\n index={index}\n onRemove={handleRemove}\n operator={details.operator}\n value={String(details.value)}\n />\n );\n })}\n </>\n );\n};\n\ninterface AttributeTagProps extends Filters.Filter {\n /**\n * Position in the `$and` array. An explicit prop rather than a closure bound at the call\n * site, so it stays part of the props comparison if this ever gets memoised.\n */\n index: number;\n onRemove: (index: number) => void;\n operator: string;\n value: string;\n}\n\nconst AttributeTag = ({\n index,\n input,\n label,\n mainField,\n name,\n onRemove,\n operator,\n options,\n value,\n ...filter\n}: AttributeTagProps) => {\n const { formatMessage, formatDate, formatTime, formatNumber } = useIntl();\n const setOpen = useFilters('AttributeTag', ({ setOpen }) => setOpen);\n const setEditingFilter = useFilters('AttributeTag', ({ setEditingFilter }) => setEditingFilter);\n\n const handleEdit = () => {\n setEditingFilter({\n name,\n filter: operator,\n index,\n value: FILTERS_WITH_NO_VALUE.includes(operator) ? undefined : value,\n });\n setOpen(true);\n };\n\n const handleRemove = () => {\n onRemove(index);\n };\n\n const type = mainField?.type ? mainField.type : filter.type;\n\n let formattedValue: string = value;\n\n switch (type) {\n case 'date':\n formattedValue = formatDate(value, { dateStyle: 'full' });\n break;\n case 'datetime':\n formattedValue = formatDate(value, { dateStyle: 'full', timeStyle: 'short' });\n break;\n case 'time':\n const [hour, minute] = value.split(':');\n const date = new Date();\n date.setHours(Number(hour));\n date.setMinutes(Number(minute));\n\n formattedValue = formatTime(date, {\n hour: 'numeric',\n minute: 'numeric',\n });\n break;\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal':\n formattedValue = formatNumber(Number(value));\n break;\n }\n\n // Handle custom input\n if (input && options) {\n // If the custom input has an options array, find the option with a customValue matching the query value\n const selectedOption = options.find((option) => {\n return (typeof option === 'string' ? option : option.value) === value;\n });\n\n formattedValue = selectedOption\n ? typeof selectedOption === 'string'\n ? selectedOption\n : (selectedOption.label ?? selectedOption.value)\n : value;\n }\n\n const operatorLabel = formatMessage({\n id: `components.FilterOptions.FILTER_TYPES.${operator}`,\n defaultMessage: operator,\n });\n\n const content = FILTERS_WITH_NO_VALUE.includes(operator)\n ? `${label} ${operatorLabel}`\n : `${label} ${operatorLabel} ${formattedValue}`;\n\n return (\n <Tag padding={1} onClick={handleRemove} icon={<Cross />} label={content}>\n <Box tag=\"span\" cursor=\"pointer\" onClick={handleEdit}>\n {content}\n </Box>\n </Tag>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EXPORTS\n * -----------------------------------------------------------------------------------------------*/\n\nconst Filters = {\n List,\n Popover: PopoverImpl,\n Root,\n Trigger,\n};\n\ninterface MainField {\n name: string;\n type: Schema.Attribute.Kind | 'custom';\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Filters {\n export interface Filter {\n input?: React.ComponentType<ValueInputProps>;\n label: string;\n /**\n * the name of the attribute we use to display the actual name e.g. relations\n * are just ids, so we use the mainField to display something meaninginful by\n * looking at the target's schema\n */\n mainField?: MainField;\n name: string;\n operators?: Array<{\n label: string;\n value: string;\n }>;\n options?: Array<{ label?: string; value: string }> | string[];\n type: InputProps['type'] | 'relation' | 'custom';\n }\n\n export interface ValueInputProps extends Omit<Filter, 'label'> {\n ['aria-label']: string;\n }\n\n export type Props = RootProps;\n\n export interface TriggerProps {\n label?: string;\n }\n\n export interface Query {\n filters?: {\n /**\n * Typically, a filter will be:\n * ```ts\n * {\n * [attributeName]: {\n * [operator]: value\n * }\n * }\n * ```\n * However, for relation items it becomes more nested.\n * ```ts\n * {\n * [attributeName]: {\n * [relationTargetAttribute]: {\n * [operator]: value\n * }\n * }\n * }\n * ```\n */\n $and?: Array<Record<string, Record<string, string | Record<string, string>>>>;\n };\n page?: number;\n _q?: string;\n }\n}\n\nexport { Filters };\n"],"names":["FiltersProvider","useFilters","createContext","getFilterDetails","filterEntry","options","name","Object","keys","option","find","o","operatorObj","type","mainField","operator","value","Root","children","disabled","onChange","onOpenChange","open","openProp","defaultOpen","restProps","editingFilter","setEditingFilter","React","useState","handleChange","data","setOpen","useControllableState","prop","defaultProp","useEffect","_jsx","Popover","Trigger","forwardRef","label","forwardedRef","formatMessage","useIntl","Button","variant","ref","startIcon","FilterIcon","size","id","defaultMessage","PopoverImpl","zIndex","query","setQuery","useQueryParams","initialValues","useMemo","filter","BASE_FILTERS","length","handleSubmit","FILTERS_WITH_NO_VALUE","includes","fieldOptions","operatorValuePairing","newFilterEntry","existingFilters","filters","$and","newFilterQuery","map","i","index","withEncodedUserParams","deepEncodeQueryValues","page","Content","style","Box","padding","Form","method","onSubmit","values","formValues","modified","isSubmitting","Input","input","InputRenderer","_jsxs","Flex","direction","alignItems","gap","minWidth","placeholder","operators","getFilterList","opt","field","aria-label","Plus","fullWidth","IS_SENSITIVE_FILTERS","CONTAINS_FILTERS","STRING_PARSE_FILTERS","NUMERIC_FILTERS","List","handleRemove","nextFilters","_","_Fragment","queryFilter","details","AttributeTag","onRemove","String","formatDate","formatTime","formatNumber","handleEdit","undefined","formattedValue","dateStyle","timeStyle","hour","minute","split","date","Date","setHours","Number","setMinutes","selectedOption","operatorLabel","content","Tag","onClick","icon","Cross","tag","cursor","Filters"],"mappings":"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"}
@@ -190,7 +190,7 @@ const Root = ({ children, disabled = false, onChange, options = [], onOpenChange
190
190
  label: filter.label,
191
191
  value: filter.name
192
192
  })),
193
- placholder: formatMessage({
193
+ placeholder: formatMessage({
194
194
  id: 'app.utils.select-field',
195
195
  defaultMessage: 'Select field'
196
196
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"Filters.mjs","sources":["../../../../../admin/src/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Popover, Tag } from '@strapi/design-system';\nimport { Plus, Filter as FilterIcon, Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport {\n BASE_FILTERS,\n CONTAINS_FILTERS,\n FilterOption,\n IS_SENSITIVE_FILTERS,\n NUMERIC_FILTERS,\n STRING_PARSE_FILTERS,\n FILTERS_WITH_NO_VALUE,\n} from '../constants/filters';\nimport { useControllableState } from '../hooks/useControllableState';\nimport {\n deepEncodeQueryValues,\n useQueryParams,\n withEncodedUserParams,\n} from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\nimport { Form, InputProps } from './Form';\nimport { InputRenderer } from './FormInputs/Renderer';\n\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FilterFormData {\n name: string;\n filter: string;\n value?: string;\n}\n\n/**\n * Carries the position in the `$and` array so we replace that exact entry, not every entry\n * sharing the same `(name, operator, value)`.\n */\ninterface EditingFilter extends FilterFormData {\n index: number;\n}\n\ninterface FitlersContextValue {\n disabled: boolean;\n onChange: (data: FilterFormData) => void;\n options: Filters.Filter[];\n setOpen: (open: boolean) => void;\n editingFilter: EditingFilter | null;\n setEditingFilter: (filter: EditingFilter | null) => void;\n}\n\nconst [FiltersProvider, useFilters] = createContext<FitlersContextValue>('Filters');\n\nconst getFilterDetails = (\n filterEntry: Record<string, unknown>,\n options: Filters.Filter[]\n): { name: string; operator: string; value: unknown } | null => {\n const [name] = Object.keys(filterEntry);\n const option = options.find((o) => o.name === name);\n if (!option) {\n return null;\n }\n\n const operatorObj =\n option.type === 'relation'\n ? (filterEntry[name] as Record<string, unknown>)?.[option.mainField?.name ?? 'id']\n : filterEntry[name];\n\n if (typeof operatorObj !== 'object' || operatorObj === null) {\n return null;\n }\n\n const [operator] = Object.keys(operatorObj as Record<string, unknown>);\n if (!operator) {\n return null;\n }\n\n return { name, operator, value: (operatorObj as Record<string, unknown>)[operator] };\n};\n\ninterface RootProps\n extends Partial<Pick<FitlersContextValue, 'disabled' | 'onChange' | 'options'>>,\n Popover.Props {\n children: React.ReactNode;\n}\n\nconst Root = ({\n children,\n disabled = false,\n onChange,\n options = [],\n onOpenChange,\n open: openProp,\n defaultOpen,\n ...restProps\n}: RootProps) => {\n const [editingFilter, setEditingFilter] = React.useState<EditingFilter | null>(null);\n\n const handleChange = (data: FilterFormData) => {\n if (onChange) {\n onChange(data);\n }\n };\n\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n React.useEffect(() => {\n if (!open) {\n setEditingFilter(null);\n }\n }, [open]);\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen} {...restProps}>\n <FiltersProvider\n setOpen={setOpen}\n disabled={disabled}\n onChange={handleChange}\n options={options}\n editingFilter={editingFilter}\n setEditingFilter={setEditingFilter}\n >\n {children}\n </FiltersProvider>\n </Popover.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Trigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst Trigger = React.forwardRef<HTMLButtonElement, Filters.TriggerProps>(\n ({ label }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const disabled = useFilters('Trigger', ({ disabled }) => disabled);\n\n return (\n <Popover.Trigger>\n <Button\n variant=\"tertiary\"\n ref={forwardedRef}\n startIcon={<FilterIcon />}\n size=\"S\"\n disabled={disabled}\n >\n {label || formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n </Popover.Trigger>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Popover\n * -----------------------------------------------------------------------------------------------*/\n/**\n * The zIndex property is used to override the zIndex of the Portal element of the Popover.\n * This is needed to ensure that the DatePicker is rendered above the Popover when opened.\n * The issue was that both the DatePicker and the Popover are rendered in a Portal and have the same zIndex.\n * On init, since the DatePicker is rendered before the Popover in the DOM,\n * it's causing the issue of appearing behind the Popover.\n */\nconst PopoverImpl = ({ zIndex }: { zIndex?: number }) => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n const { formatMessage } = useIntl();\n const options = useFilters('Popover', ({ options }) => options);\n const onChange = useFilters('Popover', ({ onChange }) => onChange);\n const setOpen = useFilters('Popover', ({ setOpen }) => setOpen);\n const editingFilter = useFilters('Popover', ({ editingFilter }) => editingFilter);\n const setEditingFilter = useFilters('Popover', ({ setEditingFilter }) => setEditingFilter);\n\n const initialValues = React.useMemo(() => {\n return editingFilter ?? { name: options[0]?.name, filter: BASE_FILTERS[0].value };\n }, [editingFilter, options]);\n\n if (options.length === 0) {\n return null;\n }\n\n const handleSubmit = (data: FilterFormData) => {\n const value = FILTERS_WITH_NO_VALUE.includes(data.filter) ? 'true' : (data.value ?? '');\n\n if (!value) {\n return;\n }\n\n if (onChange) {\n onChange(data);\n }\n\n /**\n * There will ALWAYS be an option because we use the options to create the form data.\n */\n const fieldOptions = options.find((filter) => filter.name === data.name)!;\n\n /**\n * If the filter is a relation, we need to nest the filter object,\n * we filter based on the mainField of the relation, if there is no mainField, we use the id.\n * At the end, we pass the operator & value. This value _could_ look like:\n * ```json\n * {\n * \"$eq\": \"1\",\n * }\n * ```\n */\n const operatorValuePairing = {\n [data.filter]: value,\n };\n\n const newFilterEntry = {\n [data.name]:\n fieldOptions.type === 'relation'\n ? {\n [fieldOptions.mainField?.name ?? 'id']: operatorValuePairing,\n }\n : operatorValuePairing,\n };\n\n const existingFilters = query.filters?.$and ?? [];\n\n const newFilterQuery = editingFilter\n ? {\n ...query.filters,\n $and: existingFilters.map((filter, i) =>\n i === editingFilter.index ? newFilterEntry : filter\n ),\n }\n : {\n ...query.filters,\n $and: [...existingFilters, newFilterEntry],\n };\n\n setQuery(\n withEncodedUserParams(query, { filters: deepEncodeQueryValues(newFilterQuery), page: 1 }),\n 'push',\n true\n );\n setOpen(false);\n setEditingFilter(null);\n };\n\n return (\n <Popover.Content style={{ zIndex }}>\n <Box padding={3}>\n <Form\n method=\"POST\"\n initialValues={initialValues}\n onSubmit={handleSubmit}\n key={\n editingFilter\n ? `edit-${editingFilter.index}-${editingFilter.name}-${editingFilter.filter}-${editingFilter.value ?? 'empty'}`\n : 'create'\n }\n >\n {({ values: formValues, modified, isSubmitting }) => {\n const filter = options.find((filter) => filter.name === formValues.name);\n const Input = filter?.input || InputRenderer;\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2} style={{ minWidth: 184 }}>\n {[\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n name: 'name',\n options: options.map((filter) => ({\n label: filter.label,\n value: filter.name,\n })),\n placholder: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n type: 'enumeration' as const,\n },\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n name: 'filter',\n options:\n filter?.operators ||\n getFilterList(filter).map((opt) => ({\n label: formatMessage(opt.label),\n value: opt.value,\n })),\n placeholder: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n type: 'enumeration' as const,\n },\n ].map((field) => (\n <InputRenderer key={field.name} {...field} />\n ))}\n {filter &&\n formValues.filter &&\n !FILTERS_WITH_NO_VALUE.includes(formValues.filter) ? (\n <Input\n {...filter}\n label={null}\n aria-label={filter.label}\n name=\"value\"\n // @ts-expect-error – if type is `custom` then `Input` will be a custom component.\n type={filter.mainField?.type ?? filter.type}\n />\n ) : null}\n <Button\n disabled={!modified || isSubmitting}\n size=\"L\"\n variant=\"secondary\"\n startIcon={<Plus />}\n type=\"submit\"\n fullWidth\n >\n {editingFilter\n ? formatMessage({\n id: 'app.utils.update-filter',\n defaultMessage: 'Update filter',\n })\n : formatMessage({ id: 'app.utils.add-filter', defaultMessage: 'Add filter' })}\n </Button>\n </Flex>\n );\n }}\n </Form>\n </Box>\n </Popover.Content>\n );\n};\n\n/**\n * Depending on the selected field find the possible filters to apply\n */\nconst getFilterList = (filter?: Filters.Filter): FilterOption[] => {\n if (!filter) {\n return [];\n }\n\n const type = filter.mainField?.type ? filter.mainField.type : filter.type;\n\n switch (type) {\n case 'email':\n case 'text':\n case 'string': {\n return [\n ...BASE_FILTERS,\n ...IS_SENSITIVE_FILTERS,\n ...CONTAINS_FILTERS,\n ...STRING_PARSE_FILTERS,\n ];\n }\n\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n case 'time':\n case 'date': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS, ...CONTAINS_FILTERS];\n }\n\n case 'datetime': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n\n case 'enumeration': {\n return BASE_FILTERS;\n }\n\n default:\n return [...BASE_FILTERS, ...IS_SENSITIVE_FILTERS];\n }\n};\n\n/* -------------------------------------------------------------------------------------------------\n * List\n * -----------------------------------------------------------------------------------------------*/\n\nconst List = () => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n\n const options = useFilters('List', ({ options }) => options);\n\n /**\n * Removed by position: identical filters are a legal query, so matching on\n * `(name, operator, value)` would drop every copy at once.\n */\n const handleRemove = (index: number) => {\n const nextFilters = (query?.filters?.$and ?? []).filter((_, i) => i !== index);\n\n setQuery(\n withEncodedUserParams(query, {\n filters: deepEncodeQueryValues({ $and: nextFilters }),\n page: 1,\n })\n );\n };\n\n if (!query?.filters?.$and?.length) {\n return null;\n }\n\n return (\n <>\n {query?.filters?.$and?.map((queryFilter, index) => {\n const details = getFilterDetails(queryFilter, options);\n if (!details || typeof details.value === 'object') {\n return null;\n }\n\n const filter = options.find(({ name }) => name === details.name);\n if (!filter) {\n return null;\n }\n /**\n * `index` is the position in the raw `$and` array — entries skipped above still count.\n * Never cache it: `qs` re-indexes on removal, so dropping entry 0 of [0, 1, 2]\n * leaves [0, 1] and any held index goes stale.\n */\n return (\n <AttributeTag\n key={`${index}-${details.name}-${details.operator}-${details.value}`}\n {...filter}\n index={index}\n onRemove={handleRemove}\n operator={details.operator}\n value={String(details.value)}\n />\n );\n })}\n </>\n );\n};\n\ninterface AttributeTagProps extends Filters.Filter {\n /**\n * Position in the `$and` array. An explicit prop rather than a closure bound at the call\n * site, so it stays part of the props comparison if this ever gets memoised.\n */\n index: number;\n onRemove: (index: number) => void;\n operator: string;\n value: string;\n}\n\nconst AttributeTag = ({\n index,\n input,\n label,\n mainField,\n name,\n onRemove,\n operator,\n options,\n value,\n ...filter\n}: AttributeTagProps) => {\n const { formatMessage, formatDate, formatTime, formatNumber } = useIntl();\n const setOpen = useFilters('AttributeTag', ({ setOpen }) => setOpen);\n const setEditingFilter = useFilters('AttributeTag', ({ setEditingFilter }) => setEditingFilter);\n\n const handleEdit = () => {\n setEditingFilter({\n name,\n filter: operator,\n index,\n value: FILTERS_WITH_NO_VALUE.includes(operator) ? undefined : value,\n });\n setOpen(true);\n };\n\n const handleRemove = () => {\n onRemove(index);\n };\n\n const type = mainField?.type ? mainField.type : filter.type;\n\n let formattedValue: string = value;\n\n switch (type) {\n case 'date':\n formattedValue = formatDate(value, { dateStyle: 'full' });\n break;\n case 'datetime':\n formattedValue = formatDate(value, { dateStyle: 'full', timeStyle: 'short' });\n break;\n case 'time':\n const [hour, minute] = value.split(':');\n const date = new Date();\n date.setHours(Number(hour));\n date.setMinutes(Number(minute));\n\n formattedValue = formatTime(date, {\n hour: 'numeric',\n minute: 'numeric',\n });\n break;\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal':\n formattedValue = formatNumber(Number(value));\n break;\n }\n\n // Handle custom input\n if (input && options) {\n // If the custom input has an options array, find the option with a customValue matching the query value\n const selectedOption = options.find((option) => {\n return (typeof option === 'string' ? option : option.value) === value;\n });\n\n formattedValue = selectedOption\n ? typeof selectedOption === 'string'\n ? selectedOption\n : (selectedOption.label ?? selectedOption.value)\n : value;\n }\n\n const operatorLabel = formatMessage({\n id: `components.FilterOptions.FILTER_TYPES.${operator}`,\n defaultMessage: operator,\n });\n\n const content = FILTERS_WITH_NO_VALUE.includes(operator)\n ? `${label} ${operatorLabel}`\n : `${label} ${operatorLabel} ${formattedValue}`;\n\n return (\n <Tag padding={1} onClick={handleRemove} icon={<Cross />} label={content}>\n <Box tag=\"span\" cursor=\"pointer\" onClick={handleEdit}>\n {content}\n </Box>\n </Tag>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EXPORTS\n * -----------------------------------------------------------------------------------------------*/\n\nconst Filters = {\n List,\n Popover: PopoverImpl,\n Root,\n Trigger,\n};\n\ninterface MainField {\n name: string;\n type: Schema.Attribute.Kind | 'custom';\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Filters {\n export interface Filter {\n input?: React.ComponentType<ValueInputProps>;\n label: string;\n /**\n * the name of the attribute we use to display the actual name e.g. relations\n * are just ids, so we use the mainField to display something meaninginful by\n * looking at the target's schema\n */\n mainField?: MainField;\n name: string;\n operators?: Array<{\n label: string;\n value: string;\n }>;\n options?: Array<{ label?: string; value: string }> | string[];\n type: InputProps['type'] | 'relation' | 'custom';\n }\n\n export interface ValueInputProps extends Omit<Filter, 'label'> {\n ['aria-label']: string;\n }\n\n export type Props = RootProps;\n\n export interface TriggerProps {\n label?: string;\n }\n\n export interface Query {\n filters?: {\n /**\n * Typically, a filter will be:\n * ```ts\n * {\n * [attributeName]: {\n * [operator]: value\n * }\n * }\n * ```\n * However, for relation items it becomes more nested.\n * ```ts\n * {\n * [attributeName]: {\n * [relationTargetAttribute]: {\n * [operator]: value\n * }\n * }\n * }\n * ```\n */\n $and?: Array<Record<string, Record<string, string | Record<string, string>>>>;\n };\n page?: number;\n _q?: string;\n }\n}\n\nexport { Filters };\n"],"names":["FiltersProvider","useFilters","createContext","getFilterDetails","filterEntry","options","name","Object","keys","option","find","o","operatorObj","type","mainField","operator","value","Root","children","disabled","onChange","onOpenChange","open","openProp","defaultOpen","restProps","editingFilter","setEditingFilter","React","useState","handleChange","data","setOpen","useControllableState","prop","defaultProp","useEffect","_jsx","Popover","Trigger","forwardRef","label","forwardedRef","formatMessage","useIntl","Button","variant","ref","startIcon","FilterIcon","size","id","defaultMessage","PopoverImpl","zIndex","query","setQuery","useQueryParams","initialValues","useMemo","filter","BASE_FILTERS","length","handleSubmit","FILTERS_WITH_NO_VALUE","includes","fieldOptions","operatorValuePairing","newFilterEntry","existingFilters","filters","$and","newFilterQuery","map","i","index","withEncodedUserParams","deepEncodeQueryValues","page","Content","style","Box","padding","Form","method","onSubmit","values","formValues","modified","isSubmitting","Input","input","InputRenderer","_jsxs","Flex","direction","alignItems","gap","minWidth","placholder","operators","getFilterList","opt","placeholder","field","aria-label","Plus","fullWidth","IS_SENSITIVE_FILTERS","CONTAINS_FILTERS","STRING_PARSE_FILTERS","NUMERIC_FILTERS","List","handleRemove","nextFilters","_","_Fragment","queryFilter","details","AttributeTag","onRemove","String","formatDate","formatTime","formatNumber","handleEdit","undefined","formattedValue","dateStyle","timeStyle","hour","minute","split","date","Date","setHours","Number","setMinutes","selectedOption","operatorLabel","content","Tag","onClick","icon","Cross","tag","cursor","Filters"],"mappings":"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"}
1
+ {"version":3,"file":"Filters.mjs","sources":["../../../../../admin/src/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Popover, Tag } from '@strapi/design-system';\nimport { Plus, Filter as FilterIcon, Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport {\n BASE_FILTERS,\n CONTAINS_FILTERS,\n FilterOption,\n IS_SENSITIVE_FILTERS,\n NUMERIC_FILTERS,\n STRING_PARSE_FILTERS,\n FILTERS_WITH_NO_VALUE,\n} from '../constants/filters';\nimport { useControllableState } from '../hooks/useControllableState';\nimport {\n deepEncodeQueryValues,\n useQueryParams,\n withEncodedUserParams,\n} from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\nimport { Form, InputProps } from './Form';\nimport { InputRenderer } from './FormInputs/Renderer';\n\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FilterFormData {\n name: string;\n filter: string;\n value?: string;\n}\n\n/**\n * Carries the position in the `$and` array so we replace that exact entry, not every entry\n * sharing the same `(name, operator, value)`.\n */\ninterface EditingFilter extends FilterFormData {\n index: number;\n}\n\ninterface FitlersContextValue {\n disabled: boolean;\n onChange: (data: FilterFormData) => void;\n options: Filters.Filter[];\n setOpen: (open: boolean) => void;\n editingFilter: EditingFilter | null;\n setEditingFilter: (filter: EditingFilter | null) => void;\n}\n\nconst [FiltersProvider, useFilters] = createContext<FitlersContextValue>('Filters');\n\nconst getFilterDetails = (\n filterEntry: Record<string, unknown>,\n options: Filters.Filter[]\n): { name: string; operator: string; value: unknown } | null => {\n const [name] = Object.keys(filterEntry);\n const option = options.find((o) => o.name === name);\n if (!option) {\n return null;\n }\n\n const operatorObj =\n option.type === 'relation'\n ? (filterEntry[name] as Record<string, unknown>)?.[option.mainField?.name ?? 'id']\n : filterEntry[name];\n\n if (typeof operatorObj !== 'object' || operatorObj === null) {\n return null;\n }\n\n const [operator] = Object.keys(operatorObj as Record<string, unknown>);\n if (!operator) {\n return null;\n }\n\n return { name, operator, value: (operatorObj as Record<string, unknown>)[operator] };\n};\n\ninterface RootProps\n extends Partial<Pick<FitlersContextValue, 'disabled' | 'onChange' | 'options'>>,\n Popover.Props {\n children: React.ReactNode;\n}\n\nconst Root = ({\n children,\n disabled = false,\n onChange,\n options = [],\n onOpenChange,\n open: openProp,\n defaultOpen,\n ...restProps\n}: RootProps) => {\n const [editingFilter, setEditingFilter] = React.useState<EditingFilter | null>(null);\n\n const handleChange = (data: FilterFormData) => {\n if (onChange) {\n onChange(data);\n }\n };\n\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n React.useEffect(() => {\n if (!open) {\n setEditingFilter(null);\n }\n }, [open]);\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen} {...restProps}>\n <FiltersProvider\n setOpen={setOpen}\n disabled={disabled}\n onChange={handleChange}\n options={options}\n editingFilter={editingFilter}\n setEditingFilter={setEditingFilter}\n >\n {children}\n </FiltersProvider>\n </Popover.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Trigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst Trigger = React.forwardRef<HTMLButtonElement, Filters.TriggerProps>(\n ({ label }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const disabled = useFilters('Trigger', ({ disabled }) => disabled);\n\n return (\n <Popover.Trigger>\n <Button\n variant=\"tertiary\"\n ref={forwardedRef}\n startIcon={<FilterIcon />}\n size=\"S\"\n disabled={disabled}\n >\n {label || formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n </Popover.Trigger>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Popover\n * -----------------------------------------------------------------------------------------------*/\n/**\n * The zIndex property is used to override the zIndex of the Portal element of the Popover.\n * This is needed to ensure that the DatePicker is rendered above the Popover when opened.\n * The issue was that both the DatePicker and the Popover are rendered in a Portal and have the same zIndex.\n * On init, since the DatePicker is rendered before the Popover in the DOM,\n * it's causing the issue of appearing behind the Popover.\n */\nconst PopoverImpl = ({ zIndex }: { zIndex?: number }) => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n const { formatMessage } = useIntl();\n const options = useFilters('Popover', ({ options }) => options);\n const onChange = useFilters('Popover', ({ onChange }) => onChange);\n const setOpen = useFilters('Popover', ({ setOpen }) => setOpen);\n const editingFilter = useFilters('Popover', ({ editingFilter }) => editingFilter);\n const setEditingFilter = useFilters('Popover', ({ setEditingFilter }) => setEditingFilter);\n\n const initialValues = React.useMemo(() => {\n return editingFilter ?? { name: options[0]?.name, filter: BASE_FILTERS[0].value };\n }, [editingFilter, options]);\n\n if (options.length === 0) {\n return null;\n }\n\n const handleSubmit = (data: FilterFormData) => {\n const value = FILTERS_WITH_NO_VALUE.includes(data.filter) ? 'true' : (data.value ?? '');\n\n if (!value) {\n return;\n }\n\n if (onChange) {\n onChange(data);\n }\n\n /**\n * There will ALWAYS be an option because we use the options to create the form data.\n */\n const fieldOptions = options.find((filter) => filter.name === data.name)!;\n\n /**\n * If the filter is a relation, we need to nest the filter object,\n * we filter based on the mainField of the relation, if there is no mainField, we use the id.\n * At the end, we pass the operator & value. This value _could_ look like:\n * ```json\n * {\n * \"$eq\": \"1\",\n * }\n * ```\n */\n const operatorValuePairing = {\n [data.filter]: value,\n };\n\n const newFilterEntry = {\n [data.name]:\n fieldOptions.type === 'relation'\n ? {\n [fieldOptions.mainField?.name ?? 'id']: operatorValuePairing,\n }\n : operatorValuePairing,\n };\n\n const existingFilters = query.filters?.$and ?? [];\n\n const newFilterQuery = editingFilter\n ? {\n ...query.filters,\n $and: existingFilters.map((filter, i) =>\n i === editingFilter.index ? newFilterEntry : filter\n ),\n }\n : {\n ...query.filters,\n $and: [...existingFilters, newFilterEntry],\n };\n\n setQuery(\n withEncodedUserParams(query, { filters: deepEncodeQueryValues(newFilterQuery), page: 1 }),\n 'push',\n true\n );\n setOpen(false);\n setEditingFilter(null);\n };\n\n return (\n <Popover.Content style={{ zIndex }}>\n <Box padding={3}>\n <Form\n method=\"POST\"\n initialValues={initialValues}\n onSubmit={handleSubmit}\n key={\n editingFilter\n ? `edit-${editingFilter.index}-${editingFilter.name}-${editingFilter.filter}-${editingFilter.value ?? 'empty'}`\n : 'create'\n }\n >\n {({ values: formValues, modified, isSubmitting }) => {\n const filter = options.find((filter) => filter.name === formValues.name);\n const Input = filter?.input || InputRenderer;\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2} style={{ minWidth: 184 }}>\n {[\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n name: 'name',\n options: options.map((filter) => ({\n label: filter.label,\n value: filter.name,\n })),\n placeholder: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n type: 'enumeration' as const,\n },\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n name: 'filter',\n options:\n filter?.operators ||\n getFilterList(filter).map((opt) => ({\n label: formatMessage(opt.label),\n value: opt.value,\n })),\n placeholder: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n type: 'enumeration' as const,\n },\n ].map((field) => (\n <InputRenderer key={field.name} {...field} />\n ))}\n {filter &&\n formValues.filter &&\n !FILTERS_WITH_NO_VALUE.includes(formValues.filter) ? (\n <Input\n {...filter}\n label={null}\n aria-label={filter.label}\n name=\"value\"\n // @ts-expect-error – if type is `custom` then `Input` will be a custom component.\n type={filter.mainField?.type ?? filter.type}\n />\n ) : null}\n <Button\n disabled={!modified || isSubmitting}\n size=\"L\"\n variant=\"secondary\"\n startIcon={<Plus />}\n type=\"submit\"\n fullWidth\n >\n {editingFilter\n ? formatMessage({\n id: 'app.utils.update-filter',\n defaultMessage: 'Update filter',\n })\n : formatMessage({ id: 'app.utils.add-filter', defaultMessage: 'Add filter' })}\n </Button>\n </Flex>\n );\n }}\n </Form>\n </Box>\n </Popover.Content>\n );\n};\n\n/**\n * Depending on the selected field find the possible filters to apply\n */\nconst getFilterList = (filter?: Filters.Filter): FilterOption[] => {\n if (!filter) {\n return [];\n }\n\n const type = filter.mainField?.type ? filter.mainField.type : filter.type;\n\n switch (type) {\n case 'email':\n case 'text':\n case 'string': {\n return [\n ...BASE_FILTERS,\n ...IS_SENSITIVE_FILTERS,\n ...CONTAINS_FILTERS,\n ...STRING_PARSE_FILTERS,\n ];\n }\n\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n case 'time':\n case 'date': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS, ...CONTAINS_FILTERS];\n }\n\n case 'datetime': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n\n case 'enumeration': {\n return BASE_FILTERS;\n }\n\n default:\n return [...BASE_FILTERS, ...IS_SENSITIVE_FILTERS];\n }\n};\n\n/* -------------------------------------------------------------------------------------------------\n * List\n * -----------------------------------------------------------------------------------------------*/\n\nconst List = () => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n\n const options = useFilters('List', ({ options }) => options);\n\n /**\n * Removed by position: identical filters are a legal query, so matching on\n * `(name, operator, value)` would drop every copy at once.\n */\n const handleRemove = (index: number) => {\n const nextFilters = (query?.filters?.$and ?? []).filter((_, i) => i !== index);\n\n setQuery(\n withEncodedUserParams(query, {\n filters: deepEncodeQueryValues({ $and: nextFilters }),\n page: 1,\n })\n );\n };\n\n if (!query?.filters?.$and?.length) {\n return null;\n }\n\n return (\n <>\n {query?.filters?.$and?.map((queryFilter, index) => {\n const details = getFilterDetails(queryFilter, options);\n if (!details || typeof details.value === 'object') {\n return null;\n }\n\n const filter = options.find(({ name }) => name === details.name);\n if (!filter) {\n return null;\n }\n /**\n * `index` is the position in the raw `$and` array — entries skipped above still count.\n * Never cache it: `qs` re-indexes on removal, so dropping entry 0 of [0, 1, 2]\n * leaves [0, 1] and any held index goes stale.\n */\n return (\n <AttributeTag\n key={`${index}-${details.name}-${details.operator}-${details.value}`}\n {...filter}\n index={index}\n onRemove={handleRemove}\n operator={details.operator}\n value={String(details.value)}\n />\n );\n })}\n </>\n );\n};\n\ninterface AttributeTagProps extends Filters.Filter {\n /**\n * Position in the `$and` array. An explicit prop rather than a closure bound at the call\n * site, so it stays part of the props comparison if this ever gets memoised.\n */\n index: number;\n onRemove: (index: number) => void;\n operator: string;\n value: string;\n}\n\nconst AttributeTag = ({\n index,\n input,\n label,\n mainField,\n name,\n onRemove,\n operator,\n options,\n value,\n ...filter\n}: AttributeTagProps) => {\n const { formatMessage, formatDate, formatTime, formatNumber } = useIntl();\n const setOpen = useFilters('AttributeTag', ({ setOpen }) => setOpen);\n const setEditingFilter = useFilters('AttributeTag', ({ setEditingFilter }) => setEditingFilter);\n\n const handleEdit = () => {\n setEditingFilter({\n name,\n filter: operator,\n index,\n value: FILTERS_WITH_NO_VALUE.includes(operator) ? undefined : value,\n });\n setOpen(true);\n };\n\n const handleRemove = () => {\n onRemove(index);\n };\n\n const type = mainField?.type ? mainField.type : filter.type;\n\n let formattedValue: string = value;\n\n switch (type) {\n case 'date':\n formattedValue = formatDate(value, { dateStyle: 'full' });\n break;\n case 'datetime':\n formattedValue = formatDate(value, { dateStyle: 'full', timeStyle: 'short' });\n break;\n case 'time':\n const [hour, minute] = value.split(':');\n const date = new Date();\n date.setHours(Number(hour));\n date.setMinutes(Number(minute));\n\n formattedValue = formatTime(date, {\n hour: 'numeric',\n minute: 'numeric',\n });\n break;\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal':\n formattedValue = formatNumber(Number(value));\n break;\n }\n\n // Handle custom input\n if (input && options) {\n // If the custom input has an options array, find the option with a customValue matching the query value\n const selectedOption = options.find((option) => {\n return (typeof option === 'string' ? option : option.value) === value;\n });\n\n formattedValue = selectedOption\n ? typeof selectedOption === 'string'\n ? selectedOption\n : (selectedOption.label ?? selectedOption.value)\n : value;\n }\n\n const operatorLabel = formatMessage({\n id: `components.FilterOptions.FILTER_TYPES.${operator}`,\n defaultMessage: operator,\n });\n\n const content = FILTERS_WITH_NO_VALUE.includes(operator)\n ? `${label} ${operatorLabel}`\n : `${label} ${operatorLabel} ${formattedValue}`;\n\n return (\n <Tag padding={1} onClick={handleRemove} icon={<Cross />} label={content}>\n <Box tag=\"span\" cursor=\"pointer\" onClick={handleEdit}>\n {content}\n </Box>\n </Tag>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EXPORTS\n * -----------------------------------------------------------------------------------------------*/\n\nconst Filters = {\n List,\n Popover: PopoverImpl,\n Root,\n Trigger,\n};\n\ninterface MainField {\n name: string;\n type: Schema.Attribute.Kind | 'custom';\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Filters {\n export interface Filter {\n input?: React.ComponentType<ValueInputProps>;\n label: string;\n /**\n * the name of the attribute we use to display the actual name e.g. relations\n * are just ids, so we use the mainField to display something meaninginful by\n * looking at the target's schema\n */\n mainField?: MainField;\n name: string;\n operators?: Array<{\n label: string;\n value: string;\n }>;\n options?: Array<{ label?: string; value: string }> | string[];\n type: InputProps['type'] | 'relation' | 'custom';\n }\n\n export interface ValueInputProps extends Omit<Filter, 'label'> {\n ['aria-label']: string;\n }\n\n export type Props = RootProps;\n\n export interface TriggerProps {\n label?: string;\n }\n\n export interface Query {\n filters?: {\n /**\n * Typically, a filter will be:\n * ```ts\n * {\n * [attributeName]: {\n * [operator]: value\n * }\n * }\n * ```\n * However, for relation items it becomes more nested.\n * ```ts\n * {\n * [attributeName]: {\n * [relationTargetAttribute]: {\n * [operator]: value\n * }\n * }\n * }\n * ```\n */\n $and?: Array<Record<string, Record<string, string | Record<string, string>>>>;\n };\n page?: number;\n _q?: string;\n }\n}\n\nexport { Filters };\n"],"names":["FiltersProvider","useFilters","createContext","getFilterDetails","filterEntry","options","name","Object","keys","option","find","o","operatorObj","type","mainField","operator","value","Root","children","disabled","onChange","onOpenChange","open","openProp","defaultOpen","restProps","editingFilter","setEditingFilter","React","useState","handleChange","data","setOpen","useControllableState","prop","defaultProp","useEffect","_jsx","Popover","Trigger","forwardRef","label","forwardedRef","formatMessage","useIntl","Button","variant","ref","startIcon","FilterIcon","size","id","defaultMessage","PopoverImpl","zIndex","query","setQuery","useQueryParams","initialValues","useMemo","filter","BASE_FILTERS","length","handleSubmit","FILTERS_WITH_NO_VALUE","includes","fieldOptions","operatorValuePairing","newFilterEntry","existingFilters","filters","$and","newFilterQuery","map","i","index","withEncodedUserParams","deepEncodeQueryValues","page","Content","style","Box","padding","Form","method","onSubmit","values","formValues","modified","isSubmitting","Input","input","InputRenderer","_jsxs","Flex","direction","alignItems","gap","minWidth","placeholder","operators","getFilterList","opt","field","aria-label","Plus","fullWidth","IS_SENSITIVE_FILTERS","CONTAINS_FILTERS","STRING_PARSE_FILTERS","NUMERIC_FILTERS","List","handleRemove","nextFilters","_","_Fragment","queryFilter","details","AttributeTag","onRemove","String","formatDate","formatTime","formatNumber","handleEdit","undefined","formattedValue","dateStyle","timeStyle","hour","minute","split","date","Date","setHours","Number","setMinutes","selectedOption","operatorLabel","content","Tag","onClick","icon","Cross","tag","cursor","Filters"],"mappings":"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"}
@@ -7,7 +7,7 @@ var reactIntl = require('react-intl');
7
7
  var useFocusInputField = require('../../hooks/useFocusInputField.js');
8
8
  var Form = require('../Form.js');
9
9
 
10
- const EnumerationInput = /*#__PURE__*/ React.forwardRef(({ name, required, label, hint, labelAction, options = [], ...props }, ref)=>{
10
+ const EnumerationInput = /*#__PURE__*/ React.forwardRef(({ name, required, label, hint, labelAction, options = [], placeholder, ...props }, ref)=>{
11
11
  const { formatMessage } = reactIntl.useIntl();
12
12
  const field = Form.useField(name);
13
13
  const fieldRef = useFocusInputField.useFocusInputField(name);
@@ -34,7 +34,7 @@ const EnumerationInput = /*#__PURE__*/ React.forwardRef(({ name, required, label
34
34
  value: "",
35
35
  disabled: required,
36
36
  hidden: required,
37
- children: formatMessage({
37
+ children: placeholder || formatMessage({
38
38
  id: 'components.InputSelect.option.placeholder',
39
39
  defaultMessage: 'Choose here'
40
40
  })
@@ -1 +1 @@
1
- {"version":3,"file":"Enumeration.js","sources":["../../../../../../admin/src/components/FormInputs/Enumeration.tsx"],"sourcesContent":["import { forwardRef, memo } from 'react';\n\nimport { SingleSelect, SingleSelectOption, useComposedRefs, Field } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useFocusInputField } from '../../hooks/useFocusInputField';\nimport { useField } from '../Form';\n\nimport { EnumerationProps } from './types';\n\nconst EnumerationInput = forwardRef<HTMLDivElement, EnumerationProps>(\n ({ name, required, label, hint, labelAction, options = [], ...props }, ref) => {\n const { formatMessage } = useIntl();\n const field = useField<string | number | null>(name);\n const fieldRef = useFocusInputField<HTMLDivElement>(name);\n\n const composedRefs = useComposedRefs(ref, fieldRef);\n\n return (\n <Field.Root error={field.error} name={name} hint={hint} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <SingleSelect\n ref={composedRefs}\n onChange={(value) => {\n field.onChange(name, value === '' ? null : value);\n }}\n value={field.value}\n {...props}\n >\n <SingleSelectOption value=\"\" disabled={required} hidden={required}>\n {formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n })}\n </SingleSelectOption>\n {options.map(({ value, label, disabled, hidden }) => {\n return (\n <SingleSelectOption key={value} value={value} disabled={disabled} hidden={hidden}>\n {label ?? formatMessage({ id: value, defaultMessage: value })}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n }\n);\n\nconst MemoizedEnumerationInput = memo(EnumerationInput);\n\nexport { MemoizedEnumerationInput as EnumerationInput };\n"],"names":["EnumerationInput","forwardRef","name","required","label","hint","labelAction","options","props","ref","formatMessage","useIntl","field","useField","fieldRef","useFocusInputField","composedRefs","useComposedRefs","_jsxs","Field","Root","error","_jsx","Label","action","SingleSelect","onChange","value","SingleSelectOption","disabled","hidden","id","defaultMessage","map","Hint","Error","MemoizedEnumerationInput","memo"],"mappings":";;;;;;;;;AAUA,MAAMA,iCAAmBC,gBAAAA,CACvB,CAAC,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAEC,WAAW,EAAEC,OAAAA,GAAU,EAAE,EAAE,GAAGC,OAAO,EAAEC,GAAAA,GAAAA;IACrE,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,QAAQC,aAAAA,CAAiCX,IAAAA,CAAAA;AAC/C,IAAA,MAAMY,WAAWC,qCAAAA,CAAmCb,IAAAA,CAAAA;IAEpD,MAAMc,YAAAA,GAAeC,6BAAgBR,GAAAA,EAAKK,QAAAA,CAAAA;IAE1C,qBACEI,eAAA,CAACC,mBAAMC,IAAI,EAAA;AAACC,QAAAA,KAAAA,EAAOT,MAAMS,KAAK;QAAEnB,IAAAA,EAAMA,IAAAA;QAAMG,IAAAA,EAAMA,IAAAA;QAAMF,QAAAA,EAAUA,QAAAA;;AAChE,0BAAAmB,cAAA,CAACH,mBAAMI,KAAK,EAAA;gBAACC,MAAAA,EAAQlB,WAAAA;AAAcF,gBAAAA,QAAAA,EAAAA;;0BACnCc,eAAA,CAACO,yBAAAA,EAAAA;gBACChB,GAAAA,EAAKO,YAAAA;AACLU,gBAAAA,QAAAA,EAAU,CAACC,KAAAA,GAAAA;AACTf,oBAAAA,KAAAA,CAAMc,QAAQ,CAACxB,IAAAA,EAAMyB,KAAAA,KAAU,KAAK,IAAA,GAAOA,KAAAA,CAAAA;AAC7C,gBAAA,CAAA;AACAA,gBAAAA,KAAAA,EAAOf,MAAMe,KAAK;AACjB,gBAAA,GAAGnB,KAAK;;kCAETc,cAAA,CAACM,+BAAAA,EAAAA;wBAAmBD,KAAAA,EAAM,EAAA;wBAAGE,QAAAA,EAAU1B,QAAAA;wBAAU2B,MAAAA,EAAQ3B,QAAAA;kCACtDO,aAAAA,CAAc;4BACbqB,EAAAA,EAAI,2CAAA;4BACJC,cAAAA,EAAgB;AAClB,yBAAA;;oBAEDzB,OAAAA,CAAQ0B,GAAG,CAAC,CAAC,EAAEN,KAAK,EAAEvB,KAAK,EAAEyB,QAAQ,EAAEC,MAAM,EAAE,GAAA;AAC9C,wBAAA,qBACER,cAAA,CAACM,+BAAAA,EAAAA;4BAA+BD,KAAAA,EAAOA,KAAAA;4BAAOE,QAAAA,EAAUA,QAAAA;4BAAUC,MAAAA,EAAQA,MAAAA;AACvE1B,4BAAAA,QAAAA,EAAAA,KAAAA,IAASM,aAAAA,CAAc;gCAAEqB,EAAAA,EAAIJ,KAAAA;gCAAOK,cAAAA,EAAgBL;AAAM,6BAAA;AADpCA,yBAAAA,EAAAA,KAAAA,CAAAA;AAI7B,oBAAA,CAAA;;;AAEF,0BAAAL,cAAA,CAACH,mBAAMe,IAAI,EAAA,EAAA,CAAA;AACX,0BAAAZ,cAAA,CAACH,mBAAMgB,KAAK,EAAA,EAAA;;;AAGlB,CAAA,CAAA;AAGF,MAAMC,yCAA2BC,UAAAA,CAAKrC,gBAAAA;;;;"}
1
+ {"version":3,"file":"Enumeration.js","sources":["../../../../../../admin/src/components/FormInputs/Enumeration.tsx"],"sourcesContent":["import { forwardRef, memo } from 'react';\n\nimport { SingleSelect, SingleSelectOption, useComposedRefs, Field } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useFocusInputField } from '../../hooks/useFocusInputField';\nimport { useField } from '../Form';\n\nimport { EnumerationProps } from './types';\n\nconst EnumerationInput = forwardRef<HTMLDivElement, EnumerationProps>(\n ({ name, required, label, hint, labelAction, options = [], placeholder, ...props }, ref) => {\n const { formatMessage } = useIntl();\n const field = useField<string | number | null>(name);\n const fieldRef = useFocusInputField<HTMLDivElement>(name);\n\n const composedRefs = useComposedRefs(ref, fieldRef);\n\n return (\n <Field.Root error={field.error} name={name} hint={hint} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <SingleSelect\n ref={composedRefs}\n onChange={(value) => {\n field.onChange(name, value === '' ? null : value);\n }}\n value={field.value}\n {...props}\n >\n <SingleSelectOption value=\"\" disabled={required} hidden={required}>\n {placeholder ||\n formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n })}\n </SingleSelectOption>\n {options.map(({ value, label, disabled, hidden }) => {\n return (\n <SingleSelectOption key={value} value={value} disabled={disabled} hidden={hidden}>\n {label ?? formatMessage({ id: value, defaultMessage: value })}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n }\n);\n\nconst MemoizedEnumerationInput = memo(EnumerationInput);\n\nexport { MemoizedEnumerationInput as EnumerationInput };\n"],"names":["EnumerationInput","forwardRef","name","required","label","hint","labelAction","options","placeholder","props","ref","formatMessage","useIntl","field","useField","fieldRef","useFocusInputField","composedRefs","useComposedRefs","_jsxs","Field","Root","error","_jsx","Label","action","SingleSelect","onChange","value","SingleSelectOption","disabled","hidden","id","defaultMessage","map","Hint","Error","MemoizedEnumerationInput","memo"],"mappings":";;;;;;;;;AAUA,MAAMA,gBAAAA,iBAAmBC,iBACvB,CAAC,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAEC,WAAW,EAAEC,OAAAA,GAAU,EAAE,EAAEC,WAAW,EAAE,GAAGC,KAAAA,EAAO,EAAEC,GAAAA,GAAAA;IAClF,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,QAAQC,aAAAA,CAAiCZ,IAAAA,CAAAA;AAC/C,IAAA,MAAMa,WAAWC,qCAAAA,CAAmCd,IAAAA,CAAAA;IAEpD,MAAMe,YAAAA,GAAeC,6BAAgBR,GAAAA,EAAKK,QAAAA,CAAAA;IAE1C,qBACEI,eAAA,CAACC,mBAAMC,IAAI,EAAA;AAACC,QAAAA,KAAAA,EAAOT,MAAMS,KAAK;QAAEpB,IAAAA,EAAMA,IAAAA;QAAMG,IAAAA,EAAMA,IAAAA;QAAMF,QAAAA,EAAUA,QAAAA;;AAChE,0BAAAoB,cAAA,CAACH,mBAAMI,KAAK,EAAA;gBAACC,MAAAA,EAAQnB,WAAAA;AAAcF,gBAAAA,QAAAA,EAAAA;;0BACnCe,eAAA,CAACO,yBAAAA,EAAAA;gBACChB,GAAAA,EAAKO,YAAAA;AACLU,gBAAAA,QAAAA,EAAU,CAACC,KAAAA,GAAAA;AACTf,oBAAAA,KAAAA,CAAMc,QAAQ,CAACzB,IAAAA,EAAM0B,KAAAA,KAAU,KAAK,IAAA,GAAOA,KAAAA,CAAAA;AAC7C,gBAAA,CAAA;AACAA,gBAAAA,KAAAA,EAAOf,MAAMe,KAAK;AACjB,gBAAA,GAAGnB,KAAK;;kCAETc,cAAA,CAACM,+BAAAA,EAAAA;wBAAmBD,KAAAA,EAAM,EAAA;wBAAGE,QAAAA,EAAU3B,QAAAA;wBAAU4B,MAAAA,EAAQ5B,QAAAA;AACtDK,wBAAAA,QAAAA,EAAAA,WAAAA,IACCG,aAAAA,CAAc;4BACZqB,EAAAA,EAAI,2CAAA;4BACJC,cAAAA,EAAgB;AAClB,yBAAA;;oBAEH1B,OAAAA,CAAQ2B,GAAG,CAAC,CAAC,EAAEN,KAAK,EAAExB,KAAK,EAAE0B,QAAQ,EAAEC,MAAM,EAAE,GAAA;AAC9C,wBAAA,qBACER,cAAA,CAACM,+BAAAA,EAAAA;4BAA+BD,KAAAA,EAAOA,KAAAA;4BAAOE,QAAAA,EAAUA,QAAAA;4BAAUC,MAAAA,EAAQA,MAAAA;AACvE3B,4BAAAA,QAAAA,EAAAA,KAAAA,IAASO,aAAAA,CAAc;gCAAEqB,EAAAA,EAAIJ,KAAAA;gCAAOK,cAAAA,EAAgBL;AAAM,6BAAA;AADpCA,yBAAAA,EAAAA,KAAAA,CAAAA;AAI7B,oBAAA,CAAA;;;AAEF,0BAAAL,cAAA,CAACH,mBAAMe,IAAI,EAAA,EAAA,CAAA;AACX,0BAAAZ,cAAA,CAACH,mBAAMgB,KAAK,EAAA,EAAA;;;AAGlB,CAAA,CAAA;AAGF,MAAMC,yCAA2BC,UAAAA,CAAKtC,gBAAAA;;;;"}
@@ -5,7 +5,7 @@ import { useIntl } from 'react-intl';
5
5
  import { useFocusInputField } from '../../hooks/useFocusInputField.mjs';
6
6
  import { useField } from '../Form.mjs';
7
7
 
8
- const EnumerationInput = /*#__PURE__*/ forwardRef(({ name, required, label, hint, labelAction, options = [], ...props }, ref)=>{
8
+ const EnumerationInput = /*#__PURE__*/ forwardRef(({ name, required, label, hint, labelAction, options = [], placeholder, ...props }, ref)=>{
9
9
  const { formatMessage } = useIntl();
10
10
  const field = useField(name);
11
11
  const fieldRef = useFocusInputField(name);
@@ -32,7 +32,7 @@ const EnumerationInput = /*#__PURE__*/ forwardRef(({ name, required, label, hint
32
32
  value: "",
33
33
  disabled: required,
34
34
  hidden: required,
35
- children: formatMessage({
35
+ children: placeholder || formatMessage({
36
36
  id: 'components.InputSelect.option.placeholder',
37
37
  defaultMessage: 'Choose here'
38
38
  })
@@ -1 +1 @@
1
- {"version":3,"file":"Enumeration.mjs","sources":["../../../../../../admin/src/components/FormInputs/Enumeration.tsx"],"sourcesContent":["import { forwardRef, memo } from 'react';\n\nimport { SingleSelect, SingleSelectOption, useComposedRefs, Field } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useFocusInputField } from '../../hooks/useFocusInputField';\nimport { useField } from '../Form';\n\nimport { EnumerationProps } from './types';\n\nconst EnumerationInput = forwardRef<HTMLDivElement, EnumerationProps>(\n ({ name, required, label, hint, labelAction, options = [], ...props }, ref) => {\n const { formatMessage } = useIntl();\n const field = useField<string | number | null>(name);\n const fieldRef = useFocusInputField<HTMLDivElement>(name);\n\n const composedRefs = useComposedRefs(ref, fieldRef);\n\n return (\n <Field.Root error={field.error} name={name} hint={hint} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <SingleSelect\n ref={composedRefs}\n onChange={(value) => {\n field.onChange(name, value === '' ? null : value);\n }}\n value={field.value}\n {...props}\n >\n <SingleSelectOption value=\"\" disabled={required} hidden={required}>\n {formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n })}\n </SingleSelectOption>\n {options.map(({ value, label, disabled, hidden }) => {\n return (\n <SingleSelectOption key={value} value={value} disabled={disabled} hidden={hidden}>\n {label ?? formatMessage({ id: value, defaultMessage: value })}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n }\n);\n\nconst MemoizedEnumerationInput = memo(EnumerationInput);\n\nexport { MemoizedEnumerationInput as EnumerationInput };\n"],"names":["EnumerationInput","forwardRef","name","required","label","hint","labelAction","options","props","ref","formatMessage","useIntl","field","useField","fieldRef","useFocusInputField","composedRefs","useComposedRefs","_jsxs","Field","Root","error","_jsx","Label","action","SingleSelect","onChange","value","SingleSelectOption","disabled","hidden","id","defaultMessage","map","Hint","Error","MemoizedEnumerationInput","memo"],"mappings":";;;;;;;AAUA,MAAMA,iCAAmBC,UAAAA,CACvB,CAAC,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAEC,WAAW,EAAEC,OAAAA,GAAU,EAAE,EAAE,GAAGC,OAAO,EAAEC,GAAAA,GAAAA;IACrE,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMC,QAAQC,QAAAA,CAAiCX,IAAAA,CAAAA;AAC/C,IAAA,MAAMY,WAAWC,kBAAAA,CAAmCb,IAAAA,CAAAA;IAEpD,MAAMc,YAAAA,GAAeC,gBAAgBR,GAAAA,EAAKK,QAAAA,CAAAA;IAE1C,qBACEI,IAAA,CAACC,MAAMC,IAAI,EAAA;AAACC,QAAAA,KAAAA,EAAOT,MAAMS,KAAK;QAAEnB,IAAAA,EAAMA,IAAAA;QAAMG,IAAAA,EAAMA,IAAAA;QAAMF,QAAAA,EAAUA,QAAAA;;AAChE,0BAAAmB,GAAA,CAACH,MAAMI,KAAK,EAAA;gBAACC,MAAAA,EAAQlB,WAAAA;AAAcF,gBAAAA,QAAAA,EAAAA;;0BACnCc,IAAA,CAACO,YAAAA,EAAAA;gBACChB,GAAAA,EAAKO,YAAAA;AACLU,gBAAAA,QAAAA,EAAU,CAACC,KAAAA,GAAAA;AACTf,oBAAAA,KAAAA,CAAMc,QAAQ,CAACxB,IAAAA,EAAMyB,KAAAA,KAAU,KAAK,IAAA,GAAOA,KAAAA,CAAAA;AAC7C,gBAAA,CAAA;AACAA,gBAAAA,KAAAA,EAAOf,MAAMe,KAAK;AACjB,gBAAA,GAAGnB,KAAK;;kCAETc,GAAA,CAACM,kBAAAA,EAAAA;wBAAmBD,KAAAA,EAAM,EAAA;wBAAGE,QAAAA,EAAU1B,QAAAA;wBAAU2B,MAAAA,EAAQ3B,QAAAA;kCACtDO,aAAAA,CAAc;4BACbqB,EAAAA,EAAI,2CAAA;4BACJC,cAAAA,EAAgB;AAClB,yBAAA;;oBAEDzB,OAAAA,CAAQ0B,GAAG,CAAC,CAAC,EAAEN,KAAK,EAAEvB,KAAK,EAAEyB,QAAQ,EAAEC,MAAM,EAAE,GAAA;AAC9C,wBAAA,qBACER,GAAA,CAACM,kBAAAA,EAAAA;4BAA+BD,KAAAA,EAAOA,KAAAA;4BAAOE,QAAAA,EAAUA,QAAAA;4BAAUC,MAAAA,EAAQA,MAAAA;AACvE1B,4BAAAA,QAAAA,EAAAA,KAAAA,IAASM,aAAAA,CAAc;gCAAEqB,EAAAA,EAAIJ,KAAAA;gCAAOK,cAAAA,EAAgBL;AAAM,6BAAA;AADpCA,yBAAAA,EAAAA,KAAAA,CAAAA;AAI7B,oBAAA,CAAA;;;AAEF,0BAAAL,GAAA,CAACH,MAAMe,IAAI,EAAA,EAAA,CAAA;AACX,0BAAAZ,GAAA,CAACH,MAAMgB,KAAK,EAAA,EAAA;;;AAGlB,CAAA,CAAA;AAGF,MAAMC,yCAA2BC,IAAAA,CAAKrC,gBAAAA;;;;"}
1
+ {"version":3,"file":"Enumeration.mjs","sources":["../../../../../../admin/src/components/FormInputs/Enumeration.tsx"],"sourcesContent":["import { forwardRef, memo } from 'react';\n\nimport { SingleSelect, SingleSelectOption, useComposedRefs, Field } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useFocusInputField } from '../../hooks/useFocusInputField';\nimport { useField } from '../Form';\n\nimport { EnumerationProps } from './types';\n\nconst EnumerationInput = forwardRef<HTMLDivElement, EnumerationProps>(\n ({ name, required, label, hint, labelAction, options = [], placeholder, ...props }, ref) => {\n const { formatMessage } = useIntl();\n const field = useField<string | number | null>(name);\n const fieldRef = useFocusInputField<HTMLDivElement>(name);\n\n const composedRefs = useComposedRefs(ref, fieldRef);\n\n return (\n <Field.Root error={field.error} name={name} hint={hint} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <SingleSelect\n ref={composedRefs}\n onChange={(value) => {\n field.onChange(name, value === '' ? null : value);\n }}\n value={field.value}\n {...props}\n >\n <SingleSelectOption value=\"\" disabled={required} hidden={required}>\n {placeholder ||\n formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n })}\n </SingleSelectOption>\n {options.map(({ value, label, disabled, hidden }) => {\n return (\n <SingleSelectOption key={value} value={value} disabled={disabled} hidden={hidden}>\n {label ?? formatMessage({ id: value, defaultMessage: value })}\n </SingleSelectOption>\n );\n })}\n </SingleSelect>\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n }\n);\n\nconst MemoizedEnumerationInput = memo(EnumerationInput);\n\nexport { MemoizedEnumerationInput as EnumerationInput };\n"],"names":["EnumerationInput","forwardRef","name","required","label","hint","labelAction","options","placeholder","props","ref","formatMessage","useIntl","field","useField","fieldRef","useFocusInputField","composedRefs","useComposedRefs","_jsxs","Field","Root","error","_jsx","Label","action","SingleSelect","onChange","value","SingleSelectOption","disabled","hidden","id","defaultMessage","map","Hint","Error","MemoizedEnumerationInput","memo"],"mappings":";;;;;;;AAUA,MAAMA,gBAAAA,iBAAmBC,WACvB,CAAC,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAEC,WAAW,EAAEC,OAAAA,GAAU,EAAE,EAAEC,WAAW,EAAE,GAAGC,KAAAA,EAAO,EAAEC,GAAAA,GAAAA;IAClF,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMC,QAAQC,QAAAA,CAAiCZ,IAAAA,CAAAA;AAC/C,IAAA,MAAMa,WAAWC,kBAAAA,CAAmCd,IAAAA,CAAAA;IAEpD,MAAMe,YAAAA,GAAeC,gBAAgBR,GAAAA,EAAKK,QAAAA,CAAAA;IAE1C,qBACEI,IAAA,CAACC,MAAMC,IAAI,EAAA;AAACC,QAAAA,KAAAA,EAAOT,MAAMS,KAAK;QAAEpB,IAAAA,EAAMA,IAAAA;QAAMG,IAAAA,EAAMA,IAAAA;QAAMF,QAAAA,EAAUA,QAAAA;;AAChE,0BAAAoB,GAAA,CAACH,MAAMI,KAAK,EAAA;gBAACC,MAAAA,EAAQnB,WAAAA;AAAcF,gBAAAA,QAAAA,EAAAA;;0BACnCe,IAAA,CAACO,YAAAA,EAAAA;gBACChB,GAAAA,EAAKO,YAAAA;AACLU,gBAAAA,QAAAA,EAAU,CAACC,KAAAA,GAAAA;AACTf,oBAAAA,KAAAA,CAAMc,QAAQ,CAACzB,IAAAA,EAAM0B,KAAAA,KAAU,KAAK,IAAA,GAAOA,KAAAA,CAAAA;AAC7C,gBAAA,CAAA;AACAA,gBAAAA,KAAAA,EAAOf,MAAMe,KAAK;AACjB,gBAAA,GAAGnB,KAAK;;kCAETc,GAAA,CAACM,kBAAAA,EAAAA;wBAAmBD,KAAAA,EAAM,EAAA;wBAAGE,QAAAA,EAAU3B,QAAAA;wBAAU4B,MAAAA,EAAQ5B,QAAAA;AACtDK,wBAAAA,QAAAA,EAAAA,WAAAA,IACCG,aAAAA,CAAc;4BACZqB,EAAAA,EAAI,2CAAA;4BACJC,cAAAA,EAAgB;AAClB,yBAAA;;oBAEH1B,OAAAA,CAAQ2B,GAAG,CAAC,CAAC,EAAEN,KAAK,EAAExB,KAAK,EAAE0B,QAAQ,EAAEC,MAAM,EAAE,GAAA;AAC9C,wBAAA,qBACER,GAAA,CAACM,kBAAAA,EAAAA;4BAA+BD,KAAAA,EAAOA,KAAAA;4BAAOE,QAAAA,EAAUA,QAAAA;4BAAUC,MAAAA,EAAQA,MAAAA;AACvE3B,4BAAAA,QAAAA,EAAAA,KAAAA,IAASO,aAAAA,CAAc;gCAAEqB,EAAAA,EAAIJ,KAAAA;gCAAOK,cAAAA,EAAgBL;AAAM,6BAAA;AADpCA,yBAAAA,EAAAA,KAAAA,CAAAA;AAI7B,oBAAA,CAAA;;;AAEF,0BAAAL,GAAA,CAACH,MAAMe,IAAI,EAAA,EAAA,CAAA;AACX,0BAAAZ,GAAA,CAACH,MAAMgB,KAAK,EAAA,EAAA;;;AAGlB,CAAA,CAAA;AAGF,MAAMC,yCAA2BC,IAAAA,CAAKtC,gBAAAA;;;;"}
@@ -1,12 +1,34 @@
1
1
  'use strict';
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
4
5
  var designSystem = require('@strapi/design-system');
5
6
  var icons = require('@strapi/icons');
6
7
  var reactIntl = require('react-intl');
8
+ var reactRouterDom = require('react-router-dom');
7
9
  var usePersistentState = require('../hooks/usePersistentState.js');
8
10
  var DismissibleBanner = require('./DismissibleBanner.js');
9
11
 
12
+ function _interopNamespace(e) {
13
+ if (e && e.__esModule) return e;
14
+ var n = Object.create(null);
15
+ if (e) {
16
+ Object.keys(e).forEach(function (k) {
17
+ if (k !== 'default') {
18
+ var d = Object.getOwnPropertyDescriptor(e, k);
19
+ Object.defineProperty(n, k, d.get ? d : {
20
+ enumerable: true,
21
+ get: function () { return e[k]; }
22
+ });
23
+ }
24
+ });
25
+ }
26
+ n.default = e;
27
+ return Object.freeze(n);
28
+ }
29
+
30
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
31
+
10
32
  const Banner = ({ isLegacyMediaLibrary, onDismiss })=>{
11
33
  const { formatMessage } = reactIntl.useIntl();
12
34
  return /*#__PURE__*/ jsxRuntime.jsx(DismissibleBanner.DismissibleBanner, {
@@ -66,13 +88,27 @@ const Banner = ({ isLegacyMediaLibrary, onDismiss })=>{
66
88
  })
67
89
  });
68
90
  };
69
- const MediaLibraryBanner = ()=>{
91
+ const MediaLibraryBanner = ({ onVisibilityChange } = {})=>{
70
92
  const isLegacyMediaLibrary = window.strapi.featureFlags.isEnabled('useLegacyMediaLibrary');
71
93
  // The flag state is part of the key (not the stored value) so dismissing one
72
94
  // message never collides with the other, and toggling `useLegacyMediaLibrary`
73
95
  // (enabling it, or rolling it back) brings the banner back with the right message.
74
96
  const [isDismissed, setIsDismissed] = usePersistentState.useScopedPersistentState(`STRAPI_MEDIA_LIBRARY_BANNER_DISMISSED_FOR_${isLegacyMediaLibrary}`, false);
75
- if (isDismissed) {
97
+ // `AuthenticatedLayout` renders this banner on every admin page, but it's only
98
+ // relevant on the Media Library itself (both the new and legacy `upload` plugin
99
+ // route share the same `plugins/upload` mount point).
100
+ const isOnMediaLibraryPage = reactRouterDom.useMatch('/plugins/upload/*') !== null;
101
+ const isVisible = isOnMediaLibraryPage && !isDismissed;
102
+ // useLayoutEffect (not useEffect) so the parent's re-render from this lands before the
103
+ // browser paints — otherwise a possibly-visible `UpsellBanner` would flash on screen for a
104
+ // frame before being hidden.
105
+ React__namespace.useLayoutEffect(()=>{
106
+ onVisibilityChange?.(isVisible);
107
+ }, [
108
+ isVisible,
109
+ onVisibilityChange
110
+ ]);
111
+ if (!isVisible) {
76
112
  return null;
77
113
  }
78
114
  return /*#__PURE__*/ jsxRuntime.jsx(Banner, {
@@ -1 +1 @@
1
- {"version":3,"file":"MediaLibraryBanner.js","sources":["../../../../../admin/src/components/MediaLibraryBanner.tsx"],"sourcesContent":["import { LinkButton, Typography } from '@strapi/design-system';\nimport { ExternalLink } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useScopedPersistentState } from '../hooks/usePersistentState';\n\nimport { DismissibleBanner } from './DismissibleBanner';\n\nconst Banner = ({\n isLegacyMediaLibrary,\n onDismiss,\n}: {\n isLegacyMediaLibrary: boolean;\n onDismiss: () => void;\n}) => {\n const { formatMessage } = useIntl();\n\n return (\n <DismissibleBanner\n onDismiss={onDismiss}\n closeLabel={formatMessage({\n id: 'app.components.MediaLibraryBanner.close',\n defaultMessage: 'Close',\n })}\n message={\n <>\n <Typography\n variant=\"delta\"\n fontWeight=\"bold\"\n textColor=\"neutral0\"\n textAlign=\"center\"\n fontSize={2}\n >\n {formatMessage({\n id: 'app.components.MediaLibraryBanner.intro',\n defaultMessage: 'Introducing the new Media Library ',\n })}\n </Typography>\n <Typography\n variant=\"delta\"\n textColor=\"neutral0\"\n textAlign=\"center\"\n paddingRight={4}\n fontSize={2}\n >\n {formatMessage(\n isLegacyMediaLibrary\n ? {\n id: 'app.components.MediaLibraryBanner.text',\n defaultMessage:\n 'Check the documentation to learn how to switch to the new one.',\n }\n : {\n id: 'app.components.MediaLibraryBanner.text.enabled',\n defaultMessage: \"You're now using the revamped version.\",\n }\n )}\n </Typography>\n </>\n }\n action={\n isLegacyMediaLibrary ? (\n <LinkButton\n width=\"max-content\"\n variant=\"tertiary\"\n startIcon={<ExternalLink />}\n href=\"https://docs.strapi.io/cms/features/media-library\"\n target=\"_blank\"\n >\n {formatMessage({\n id: 'app.components.MediaLibraryBanner.button',\n defaultMessage: 'Docs',\n })}\n </LinkButton>\n ) : (\n <LinkButton\n width=\"max-content\"\n variant=\"tertiary\"\n href=\"https://strapi.io/blog/strapi-release-roundup-everything-that-changed-between-june-and-august-2026\"\n target=\"_blank\"\n >\n {formatMessage({\n id: 'app.components.MediaLibraryBanner.button.enabled',\n defaultMessage: 'Read blog post',\n })}\n </LinkButton>\n )\n }\n />\n );\n};\n\nconst MediaLibraryBanner = () => {\n const isLegacyMediaLibrary = window.strapi.featureFlags.isEnabled('useLegacyMediaLibrary');\n\n // The flag state is part of the key (not the stored value) so dismissing one\n // message never collides with the other, and toggling `useLegacyMediaLibrary`\n // (enabling it, or rolling it back) brings the banner back with the right message.\n const [isDismissed, setIsDismissed] = useScopedPersistentState<boolean>(\n `STRAPI_MEDIA_LIBRARY_BANNER_DISMISSED_FOR_${isLegacyMediaLibrary}`,\n false\n );\n\n if (isDismissed) {\n return null;\n }\n\n return (\n <Banner isLegacyMediaLibrary={isLegacyMediaLibrary} onDismiss={() => setIsDismissed(true)} />\n );\n};\n\nexport { MediaLibraryBanner };\n"],"names":["Banner","isLegacyMediaLibrary","onDismiss","formatMessage","useIntl","_jsx","DismissibleBanner","closeLabel","id","defaultMessage","message","_jsxs","_Fragment","Typography","variant","fontWeight","textColor","textAlign","fontSize","paddingRight","action","LinkButton","width","startIcon","ExternalLink","href","target","MediaLibraryBanner","window","strapi","featureFlags","isEnabled","isDismissed","setIsDismissed","useScopedPersistentState"],"mappings":";;;;;;;;;AAQA,MAAMA,SAAS,CAAC,EACdC,oBAAoB,EACpBC,SAAS,EAIV,GAAA;IACC,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1B,IAAA,qBACEC,cAAA,CAACC,mCAAAA,EAAAA;QACCJ,SAAAA,EAAWA,SAAAA;AACXK,QAAAA,UAAAA,EAAYJ,aAAAA,CAAc;YACxBK,EAAAA,EAAI,yCAAA;YACJC,cAAAA,EAAgB;AAClB,SAAA,CAAA;QACAC,OAAAA,gBACEC,eAAA,CAAAC,mBAAA,EAAA;;8BACEP,cAAA,CAACQ,uBAAAA,EAAAA;oBACCC,OAAAA,EAAQ,OAAA;oBACRC,UAAAA,EAAW,MAAA;oBACXC,SAAAA,EAAU,UAAA;oBACVC,SAAAA,EAAU,QAAA;oBACVC,QAAAA,EAAU,CAAA;8BAETf,aAAAA,CAAc;wBACbK,EAAAA,EAAI,yCAAA;wBACJC,cAAAA,EAAgB;AAClB,qBAAA;;8BAEFJ,cAAA,CAACQ,uBAAAA,EAAAA;oBACCC,OAAAA,EAAQ,OAAA;oBACRE,SAAAA,EAAU,UAAA;oBACVC,SAAAA,EAAU,QAAA;oBACVE,YAAAA,EAAc,CAAA;oBACdD,QAAAA,EAAU,CAAA;AAETf,oBAAAA,QAAAA,EAAAA,aAAAA,CACCF,oBAAAA,GACI;wBACEO,EAAAA,EAAI,wCAAA;wBACJC,cAAAA,EACE;qBACJ,GACA;wBACED,EAAAA,EAAI,gDAAA;wBACJC,cAAAA,EAAgB;AAClB,qBAAA;;;;AAKZW,QAAAA,MAAAA,EACEnB,qCACEI,cAAA,CAACgB,uBAAAA,EAAAA;YACCC,KAAAA,EAAM,aAAA;YACNR,OAAAA,EAAQ,UAAA;AACRS,YAAAA,SAAAA,gBAAWlB,cAAA,CAACmB,kBAAAA,EAAAA,EAAAA,CAAAA;YACZC,IAAAA,EAAK,mDAAA;YACLC,MAAAA,EAAO,QAAA;sBAENvB,aAAAA,CAAc;gBACbK,EAAAA,EAAI,0CAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA;2BAGFJ,cAAA,CAACgB,uBAAAA,EAAAA;YACCC,KAAAA,EAAM,aAAA;YACNR,OAAAA,EAAQ,UAAA;YACRW,IAAAA,EAAK,oGAAA;YACLC,MAAAA,EAAO,QAAA;sBAENvB,aAAAA,CAAc;gBACbK,EAAAA,EAAI,kDAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA;;;AAMZ,CAAA;AAEA,MAAMkB,kBAAAA,GAAqB,IAAA;AACzB,IAAA,MAAM1B,uBAAuB2B,MAAAA,CAAOC,MAAM,CAACC,YAAY,CAACC,SAAS,CAAC,uBAAA,CAAA;;;;IAKlE,MAAM,CAACC,aAAaC,cAAAA,CAAe,GAAGC,4CACpC,CAAC,0CAA0C,EAAEjC,oBAAAA,CAAAA,CAAsB,EACnE,KAAA,CAAA;AAGF,IAAA,IAAI+B,WAAAA,EAAa;QACf,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,qBACE3B,cAAA,CAACL,MAAAA,EAAAA;QAAOC,oBAAAA,EAAsBA,oBAAAA;AAAsBC,QAAAA,SAAAA,EAAW,IAAM+B,cAAAA,CAAe,IAAA;;AAExF;;;;"}
1
+ {"version":3,"file":"MediaLibraryBanner.js","sources":["../../../../../admin/src/components/MediaLibraryBanner.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { LinkButton, Typography } from '@strapi/design-system';\nimport { ExternalLink } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useMatch } from 'react-router-dom';\n\nimport { useScopedPersistentState } from '../hooks/usePersistentState';\n\nimport { DismissibleBanner } from './DismissibleBanner';\n\nconst Banner = ({\n isLegacyMediaLibrary,\n onDismiss,\n}: {\n isLegacyMediaLibrary: boolean;\n onDismiss: () => void;\n}) => {\n const { formatMessage } = useIntl();\n\n return (\n <DismissibleBanner\n onDismiss={onDismiss}\n closeLabel={formatMessage({\n id: 'app.components.MediaLibraryBanner.close',\n defaultMessage: 'Close',\n })}\n message={\n <>\n <Typography\n variant=\"delta\"\n fontWeight=\"bold\"\n textColor=\"neutral0\"\n textAlign=\"center\"\n fontSize={2}\n >\n {formatMessage({\n id: 'app.components.MediaLibraryBanner.intro',\n defaultMessage: 'Introducing the new Media Library ',\n })}\n </Typography>\n <Typography\n variant=\"delta\"\n textColor=\"neutral0\"\n textAlign=\"center\"\n paddingRight={4}\n fontSize={2}\n >\n {formatMessage(\n isLegacyMediaLibrary\n ? {\n id: 'app.components.MediaLibraryBanner.text',\n defaultMessage:\n 'Check the documentation to learn how to switch to the new one.',\n }\n : {\n id: 'app.components.MediaLibraryBanner.text.enabled',\n defaultMessage: \"You're now using the revamped version.\",\n }\n )}\n </Typography>\n </>\n }\n action={\n isLegacyMediaLibrary ? (\n <LinkButton\n width=\"max-content\"\n variant=\"tertiary\"\n startIcon={<ExternalLink />}\n href=\"https://docs.strapi.io/cms/features/media-library\"\n target=\"_blank\"\n >\n {formatMessage({\n id: 'app.components.MediaLibraryBanner.button',\n defaultMessage: 'Docs',\n })}\n </LinkButton>\n ) : (\n <LinkButton\n width=\"max-content\"\n variant=\"tertiary\"\n href=\"https://strapi.io/blog/strapi-release-roundup-everything-that-changed-between-june-and-august-2026\"\n target=\"_blank\"\n >\n {formatMessage({\n id: 'app.components.MediaLibraryBanner.button.enabled',\n defaultMessage: 'Read blog post',\n })}\n </LinkButton>\n )\n }\n />\n );\n};\n\ninterface MediaLibraryBannerProps {\n /**\n * Called synchronously (before paint) whenever this banner's own visibility changes, so a\n * parent rendering it alongside another banner (e.g. `UpsellBanner`) can hide that other one\n * instead of stacking both. This banner owns its dismissal state, so it's the source of truth\n * for whether it's showing — the parent shouldn't have to re-derive that itself.\n */\n onVisibilityChange?: (isVisible: boolean) => void;\n}\n\nconst MediaLibraryBanner = ({ onVisibilityChange }: MediaLibraryBannerProps = {}) => {\n const isLegacyMediaLibrary = window.strapi.featureFlags.isEnabled('useLegacyMediaLibrary');\n\n // The flag state is part of the key (not the stored value) so dismissing one\n // message never collides with the other, and toggling `useLegacyMediaLibrary`\n // (enabling it, or rolling it back) brings the banner back with the right message.\n const [isDismissed, setIsDismissed] = useScopedPersistentState<boolean>(\n `STRAPI_MEDIA_LIBRARY_BANNER_DISMISSED_FOR_${isLegacyMediaLibrary}`,\n false\n );\n\n // `AuthenticatedLayout` renders this banner on every admin page, but it's only\n // relevant on the Media Library itself (both the new and legacy `upload` plugin\n // route share the same `plugins/upload` mount point).\n const isOnMediaLibraryPage = useMatch('/plugins/upload/*') !== null;\n\n const isVisible = isOnMediaLibraryPage && !isDismissed;\n\n // useLayoutEffect (not useEffect) so the parent's re-render from this lands before the\n // browser paints — otherwise a possibly-visible `UpsellBanner` would flash on screen for a\n // frame before being hidden.\n React.useLayoutEffect(() => {\n onVisibilityChange?.(isVisible);\n }, [isVisible, onVisibilityChange]);\n\n if (!isVisible) {\n return null;\n }\n\n return (\n <Banner isLegacyMediaLibrary={isLegacyMediaLibrary} onDismiss={() => setIsDismissed(true)} />\n );\n};\n\nexport { MediaLibraryBanner };\n"],"names":["Banner","isLegacyMediaLibrary","onDismiss","formatMessage","useIntl","_jsx","DismissibleBanner","closeLabel","id","defaultMessage","message","_jsxs","_Fragment","Typography","variant","fontWeight","textColor","textAlign","fontSize","paddingRight","action","LinkButton","width","startIcon","ExternalLink","href","target","MediaLibraryBanner","onVisibilityChange","window","strapi","featureFlags","isEnabled","isDismissed","setIsDismissed","useScopedPersistentState","isOnMediaLibraryPage","useMatch","isVisible","React","useLayoutEffect"],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import * as React from 'react';
2
3
  import { LinkButton, Typography } from '@strapi/design-system';
3
4
  import { ExternalLink } from '@strapi/icons';
4
5
  import { useIntl } from 'react-intl';
6
+ import { useMatch } from 'react-router-dom';
5
7
  import { useScopedPersistentState } from '../hooks/usePersistentState.mjs';
6
8
  import { DismissibleBanner } from './DismissibleBanner.mjs';
7
9
 
@@ -64,13 +66,27 @@ const Banner = ({ isLegacyMediaLibrary, onDismiss })=>{
64
66
  })
65
67
  });
66
68
  };
67
- const MediaLibraryBanner = ()=>{
69
+ const MediaLibraryBanner = ({ onVisibilityChange } = {})=>{
68
70
  const isLegacyMediaLibrary = window.strapi.featureFlags.isEnabled('useLegacyMediaLibrary');
69
71
  // The flag state is part of the key (not the stored value) so dismissing one
70
72
  // message never collides with the other, and toggling `useLegacyMediaLibrary`
71
73
  // (enabling it, or rolling it back) brings the banner back with the right message.
72
74
  const [isDismissed, setIsDismissed] = useScopedPersistentState(`STRAPI_MEDIA_LIBRARY_BANNER_DISMISSED_FOR_${isLegacyMediaLibrary}`, false);
73
- if (isDismissed) {
75
+ // `AuthenticatedLayout` renders this banner on every admin page, but it's only
76
+ // relevant on the Media Library itself (both the new and legacy `upload` plugin
77
+ // route share the same `plugins/upload` mount point).
78
+ const isOnMediaLibraryPage = useMatch('/plugins/upload/*') !== null;
79
+ const isVisible = isOnMediaLibraryPage && !isDismissed;
80
+ // useLayoutEffect (not useEffect) so the parent's re-render from this lands before the
81
+ // browser paints — otherwise a possibly-visible `UpsellBanner` would flash on screen for a
82
+ // frame before being hidden.
83
+ React.useLayoutEffect(()=>{
84
+ onVisibilityChange?.(isVisible);
85
+ }, [
86
+ isVisible,
87
+ onVisibilityChange
88
+ ]);
89
+ if (!isVisible) {
74
90
  return null;
75
91
  }
76
92
  return /*#__PURE__*/ jsx(Banner, {