@websolutespa/payload-plugin-bowl 2.0.1 → 3.0.1

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 (455) hide show
  1. package/CHANGELOG.md +23 -4
  2. package/README.md +1 -1
  3. package/dist/blocks/MenuItem.js +219 -0
  4. package/dist/blocks/MenuItem.js.map +1 -0
  5. package/dist/blocks/index.js +4 -0
  6. package/dist/blocks/index.js.map +1 -0
  7. package/dist/blocks/withComponentBlock.js +31 -0
  8. package/dist/blocks/withComponentBlock.js.map +1 -0
  9. package/dist/bowl.js +331 -0
  10. package/dist/bowl.js.map +1 -0
  11. package/dist/collections/Address.js +7 -0
  12. package/dist/collections/Address.js.map +1 -0
  13. package/dist/collections/Category.js +94 -0
  14. package/dist/collections/Category.js.map +1 -0
  15. package/dist/collections/ConsentPreference.js +34 -0
  16. package/dist/collections/ConsentPreference.js.map +1 -0
  17. package/dist/collections/Continent.js +24 -0
  18. package/dist/collections/Continent.js.map +1 -0
  19. package/dist/collections/Country.js +66 -0
  20. package/dist/collections/Country.js.map +1 -0
  21. package/dist/collections/CountryZone.js +24 -0
  22. package/dist/collections/CountryZone.js.map +1 -0
  23. package/dist/collections/EmailConfig.js +84 -0
  24. package/dist/collections/EmailConfig.js.map +1 -0
  25. package/dist/collections/EndUsers.js +24 -0
  26. package/dist/collections/EndUsers.js.map +1 -0
  27. package/dist/collections/Label.js +26 -0
  28. package/dist/collections/Label.js.map +1 -0
  29. package/dist/collections/Language.js +35 -0
  30. package/dist/collections/Language.js.map +1 -0
  31. package/dist/collections/LegalNotice.js +29 -0
  32. package/dist/collections/LegalNotice.js.map +1 -0
  33. package/dist/collections/Market.js +106 -0
  34. package/dist/collections/Market.js.map +1 -0
  35. package/dist/collections/Media.js +40 -0
  36. package/dist/collections/Media.js.map +1 -0
  37. package/dist/collections/Menu.js +49 -0
  38. package/dist/collections/Menu.js.map +1 -0
  39. package/dist/collections/Municipality.js +68 -0
  40. package/dist/collections/Municipality.js.map +1 -0
  41. package/dist/collections/Province.js +59 -0
  42. package/dist/collections/Province.js.map +1 -0
  43. package/dist/collections/Redirect.js +90 -0
  44. package/dist/collections/Redirect.js.map +1 -0
  45. package/dist/collections/Region.js +45 -0
  46. package/dist/collections/Region.js.map +1 -0
  47. package/dist/collections/SubContinent.js +36 -0
  48. package/dist/collections/SubContinent.js.map +1 -0
  49. package/dist/collections/Template.js +79 -0
  50. package/dist/collections/Template.js.map +1 -0
  51. package/dist/collections/Users.js +11 -0
  52. package/dist/collections/Users.js.map +1 -0
  53. package/dist/components/Category/CategoryMenu.js +47 -0
  54. package/dist/components/Category/CategoryMenu.js.map +1 -0
  55. package/dist/components/Category/CategoryTree.js +430 -0
  56. package/dist/components/Category/CategoryTree.js.map +1 -0
  57. package/dist/components/Category/CategoryTree.scss +330 -0
  58. package/dist/components/Category/CategoryTreeRoute.js +51 -0
  59. package/dist/components/Category/CategoryTreeRoute.js.map +1 -0
  60. package/dist/components/Category/category.service.js +32 -0
  61. package/dist/components/Category/category.service.js.map +1 -0
  62. package/dist/components/DataTree/DataTree.js +281 -0
  63. package/dist/components/DataTree/DataTree.js.map +1 -0
  64. package/dist/components/DataTree/DataTree.scss +363 -0
  65. package/dist/components/DataTree/DataTreeProvider.js +67 -0
  66. package/dist/components/DataTree/DataTreeProvider.js.map +1 -0
  67. package/dist/components/DataTree/EventEmitter.js +38 -0
  68. package/dist/components/DataTree/EventEmitter.js.map +1 -0
  69. package/dist/components/DataTree/useDataTree.js +52 -0
  70. package/dist/components/DataTree/useDataTree.js.map +1 -0
  71. package/dist/components/DecoratedList/DecoratedList.js +17 -0
  72. package/dist/components/DecoratedList/DecoratedList.js.map +1 -0
  73. package/dist/components/IconServer/IconServer.js +15 -0
  74. package/dist/components/IconServer/IconServer.js.map +1 -0
  75. package/dist/components/IconServer/IconServer.scss +14 -0
  76. package/dist/components/ImportExport/ImportExportList.js +91 -0
  77. package/dist/components/ImportExport/ImportExportList.js.map +1 -0
  78. package/dist/components/ImportExport/ImportExportList.scss +70 -0
  79. package/dist/components/ImportExport/ImportExportRedirect.js +142 -0
  80. package/dist/components/ImportExport/ImportExportRedirect.js.map +1 -0
  81. package/dist/components/ImportExport/ImportModal.js +458 -0
  82. package/dist/components/ImportExport/ImportModal.js.map +1 -0
  83. package/dist/components/ImportExport/ImportModal.scss +99 -0
  84. package/dist/components/ImportExport/types.js +3 -0
  85. package/dist/components/ImportExport/types.js.map +1 -0
  86. package/dist/components/LeaveWithoutSaving/LeaveWithoutSaving.js +83 -0
  87. package/dist/components/LeaveWithoutSaving/LeaveWithoutSaving.js.map +1 -0
  88. package/dist/components/LeaveWithoutSaving/LeaveWithoutSaving.scss +46 -0
  89. package/dist/components/LeaveWithoutSaving/usePreventLeave.js +119 -0
  90. package/dist/components/LeaveWithoutSaving/usePreventLeave.js.map +1 -0
  91. package/dist/components/LocalizedDescription/LocalizedDescriptionClient.js +15 -0
  92. package/dist/components/LocalizedDescription/LocalizedDescriptionClient.js.map +1 -0
  93. package/dist/components/LocalizedDescription/LocalizedDescriptionServer.js +13 -0
  94. package/dist/components/LocalizedDescription/LocalizedDescriptionServer.js.map +1 -0
  95. package/dist/components/LogoServer/LogoServer.js +20 -0
  96. package/dist/components/LogoServer/LogoServer.js.map +1 -0
  97. package/dist/components/LogoServer/LogoServer.scss +21 -0
  98. package/dist/core/access/access.js +181 -0
  99. package/dist/core/access/access.js.map +1 -0
  100. package/dist/core/access/access.test.js +454 -0
  101. package/dist/core/access/access.test.js.map +1 -0
  102. package/dist/core/access/index.js +3 -0
  103. package/dist/core/access/index.js.map +1 -0
  104. package/dist/core/api/action.service.js +441 -0
  105. package/dist/core/api/action.service.js.map +1 -0
  106. package/dist/core/api/action.service.test.js +218 -0
  107. package/dist/core/api/action.service.test.js.map +1 -0
  108. package/dist/core/api/cache.service.js +33 -0
  109. package/dist/core/api/cache.service.js.map +1 -0
  110. package/dist/core/api/cache.service.test.js +33 -0
  111. package/dist/core/api/cache.service.test.js.map +1 -0
  112. package/dist/core/api/category.service.js +53 -0
  113. package/dist/core/api/category.service.js.map +1 -0
  114. package/dist/core/api/collection.service.js +457 -0
  115. package/dist/core/api/collection.service.js.map +1 -0
  116. package/dist/core/api/collection.service.test.js +318 -0
  117. package/dist/core/api/collection.service.test.js.map +1 -0
  118. package/dist/core/api/email.service.js +84 -0
  119. package/dist/core/api/email.service.js.map +1 -0
  120. package/dist/core/api/global.service.js +18 -0
  121. package/dist/core/api/global.service.js.map +1 -0
  122. package/dist/core/api/health.service.js +12 -0
  123. package/dist/core/api/health.service.js.map +1 -0
  124. package/dist/core/api/index.js +16 -0
  125. package/dist/core/api/index.js.map +1 -0
  126. package/dist/core/api/locale.service.js +58 -0
  127. package/dist/core/api/locale.service.js.map +1 -0
  128. package/dist/core/api/locale.service.test.js +46 -0
  129. package/dist/core/api/locale.service.test.js.map +1 -0
  130. package/dist/core/api/menu.service.js +81 -0
  131. package/dist/core/api/menu.service.js.map +1 -0
  132. package/dist/core/api/menu.service.test.js +300 -0
  133. package/dist/core/api/menu.service.test.js.map +1 -0
  134. package/dist/core/api/page.service.js +171 -0
  135. package/dist/core/api/page.service.js.map +1 -0
  136. package/dist/core/api/page.service.test.js +68 -0
  137. package/dist/core/api/page.service.test.js.map +1 -0
  138. package/dist/core/api/pagination.service.js +29 -0
  139. package/dist/core/api/pagination.service.js.map +1 -0
  140. package/dist/core/api/pagination.service.test.js +175 -0
  141. package/dist/core/api/pagination.service.test.js.map +1 -0
  142. package/dist/core/api/redirect.service.js +106 -0
  143. package/dist/core/api/redirect.service.js.map +1 -0
  144. package/dist/core/api/redirect.service.test.js +106 -0
  145. package/dist/core/api/redirect.service.test.js.map +1 -0
  146. package/dist/core/api/route.service.js +451 -0
  147. package/dist/core/api/route.service.js.map +1 -0
  148. package/dist/core/api/route.service.test.js +214 -0
  149. package/dist/core/api/route.service.test.js.map +1 -0
  150. package/dist/core/api/static.service.js +249 -0
  151. package/dist/core/api/static.service.js.map +1 -0
  152. package/dist/core/api/static.service.test.js +240 -0
  153. package/dist/core/api/static.service.test.js.map +1 -0
  154. package/dist/core/api/store.service.js +336 -0
  155. package/dist/core/api/store.service.js.map +1 -0
  156. package/dist/core/api/store.service.test.js +105 -0
  157. package/dist/core/api/store.service.test.js.map +1 -0
  158. package/dist/core/api/types.js +21 -0
  159. package/dist/core/api/types.js.map +1 -0
  160. package/dist/core/api/utils.js +83 -0
  161. package/dist/core/api/utils.js.map +1 -0
  162. package/dist/core/api/where.service.js +231 -0
  163. package/dist/core/api/where.service.js.map +1 -0
  164. package/dist/core/collections/index.js +12 -0
  165. package/dist/core/collections/index.js.map +1 -0
  166. package/dist/core/collections/withAction.js +91 -0
  167. package/dist/core/collections/withAction.js.map +1 -0
  168. package/dist/core/collections/withAction.test.js +68 -0
  169. package/dist/core/collections/withAction.test.js.map +1 -0
  170. package/dist/core/collections/withAddress.js +122 -0
  171. package/dist/core/collections/withAddress.js.map +1 -0
  172. package/dist/core/collections/withBlock.js +17 -0
  173. package/dist/core/collections/withBlock.js.map +1 -0
  174. package/dist/core/collections/withBlock.test.js +68 -0
  175. package/dist/core/collections/withBlock.test.js.map +1 -0
  176. package/dist/core/collections/withCollection.js +61 -0
  177. package/dist/core/collections/withCollection.js.map +1 -0
  178. package/dist/core/collections/withCollection.test.js +64 -0
  179. package/dist/core/collections/withCollection.test.js.map +1 -0
  180. package/dist/core/collections/withEndUser.js +301 -0
  181. package/dist/core/collections/withEndUser.js.map +1 -0
  182. package/dist/core/collections/withGlobal.js +27 -0
  183. package/dist/core/collections/withGlobal.js.map +1 -0
  184. package/dist/core/collections/withGlobal.test.js +57 -0
  185. package/dist/core/collections/withGlobal.test.js.map +1 -0
  186. package/dist/core/collections/withMenu.js +19 -0
  187. package/dist/core/collections/withMenu.js.map +1 -0
  188. package/dist/core/collections/withMenu.test.js +63 -0
  189. package/dist/core/collections/withMenu.test.js.map +1 -0
  190. package/dist/core/collections/withPage.js +126 -0
  191. package/dist/core/collections/withPage.js.map +1 -0
  192. package/dist/core/collections/withPage.test.js +103 -0
  193. package/dist/core/collections/withPage.test.js.map +1 -0
  194. package/dist/core/collections/withStaticCollection.js +60 -0
  195. package/dist/core/collections/withStaticCollection.js.map +1 -0
  196. package/dist/core/collections/withStaticCollection.test.js +84 -0
  197. package/dist/core/collections/withStaticCollection.test.js.map +1 -0
  198. package/dist/core/collections/withUser.js +56 -0
  199. package/dist/core/collections/withUser.js.map +1 -0
  200. package/dist/core/decorators/category.js +28 -0
  201. package/dist/core/decorators/category.js.map +1 -0
  202. package/dist/core/decorators/components.js +9 -0
  203. package/dist/core/decorators/components.js.map +1 -0
  204. package/dist/core/decorators/href.js +25 -0
  205. package/dist/core/decorators/href.js.map +1 -0
  206. package/dist/core/decorators/index.js +11 -0
  207. package/dist/core/decorators/index.js.map +1 -0
  208. package/dist/core/decorators/localize.js +27 -0
  209. package/dist/core/decorators/localize.js.map +1 -0
  210. package/dist/core/decorators/menu.js +246 -0
  211. package/dist/core/decorators/menu.js.map +1 -0
  212. package/dist/core/decorators/nav.js +42 -0
  213. package/dist/core/decorators/nav.js.map +1 -0
  214. package/dist/core/decorators/rich-text.js +39 -0
  215. package/dist/core/decorators/rich-text.js.map +1 -0
  216. package/dist/core/decorators/schema.js +16 -0
  217. package/dist/core/decorators/schema.js.map +1 -0
  218. package/dist/core/decorators/upload.js +44 -0
  219. package/dist/core/decorators/upload.js.map +1 -0
  220. package/dist/core/encryption/encryption.js +66 -0
  221. package/dist/core/encryption/encryption.js.map +1 -0
  222. package/dist/core/encryption/index.js +3 -0
  223. package/dist/core/encryption/index.js.map +1 -0
  224. package/dist/core/fields/index.js +28 -0
  225. package/dist/core/fields/index.js.map +1 -0
  226. package/dist/core/fields/withAbstract.js +15 -0
  227. package/dist/core/fields/withAbstract.js.map +1 -0
  228. package/dist/core/fields/withAbstract.test.js +72 -0
  229. package/dist/core/fields/withAbstract.test.js.map +1 -0
  230. package/dist/core/fields/withAnchor.js +56 -0
  231. package/dist/core/fields/withAnchor.js.map +1 -0
  232. package/dist/core/fields/withCategory.js +21 -0
  233. package/dist/core/fields/withCategory.js.map +1 -0
  234. package/dist/core/fields/withCategory.test.js +63 -0
  235. package/dist/core/fields/withCategory.test.js.map +1 -0
  236. package/dist/core/fields/withCheckbox.js +19 -0
  237. package/dist/core/fields/withCheckbox.js.map +1 -0
  238. package/dist/core/fields/withCheckbox.test.js +59 -0
  239. package/dist/core/fields/withCheckbox.test.js.map +1 -0
  240. package/dist/core/fields/withComponents.js +17 -0
  241. package/dist/core/fields/withComponents.js.map +1 -0
  242. package/dist/core/fields/withComponents.test.js +62 -0
  243. package/dist/core/fields/withComponents.test.js.map +1 -0
  244. package/dist/core/fields/withDate.js +18 -0
  245. package/dist/core/fields/withDate.js.map +1 -0
  246. package/dist/core/fields/withDate.test.js +56 -0
  247. package/dist/core/fields/withDate.test.js.map +1 -0
  248. package/dist/core/fields/withDescription.js +15 -0
  249. package/dist/core/fields/withDescription.js.map +1 -0
  250. package/dist/core/fields/withDescription.test.js +72 -0
  251. package/dist/core/fields/withDescription.test.js.map +1 -0
  252. package/dist/core/fields/withId.js +19 -0
  253. package/dist/core/fields/withId.js.map +1 -0
  254. package/dist/core/fields/withId.test.js +61 -0
  255. package/dist/core/fields/withId.test.js.map +1 -0
  256. package/dist/core/fields/withIsActive.js +15 -0
  257. package/dist/core/fields/withIsActive.js.map +1 -0
  258. package/dist/core/fields/withIsActive.test.js +59 -0
  259. package/dist/core/fields/withIsActive.test.js.map +1 -0
  260. package/dist/core/fields/withIsDefault.js +15 -0
  261. package/dist/core/fields/withIsDefault.js.map +1 -0
  262. package/dist/core/fields/withIsDefault.test.js +59 -0
  263. package/dist/core/fields/withIsDefault.test.js.map +1 -0
  264. package/dist/core/fields/withLink.js +116 -0
  265. package/dist/core/fields/withLink.js.map +1 -0
  266. package/dist/core/fields/withLink.test.js +144 -0
  267. package/dist/core/fields/withLink.test.js.map +1 -0
  268. package/dist/core/fields/withMarkets.js +21 -0
  269. package/dist/core/fields/withMarkets.js.map +1 -0
  270. package/dist/core/fields/withMarkets.test.js +65 -0
  271. package/dist/core/fields/withMarkets.test.js.map +1 -0
  272. package/dist/core/fields/withMedia.js +20 -0
  273. package/dist/core/fields/withMedia.js.map +1 -0
  274. package/dist/core/fields/withMedia.test.js +41 -0
  275. package/dist/core/fields/withMedia.test.js.map +1 -0
  276. package/dist/core/fields/withMedias.js +25 -0
  277. package/dist/core/fields/withMedias.js.map +1 -0
  278. package/dist/core/fields/withMedias.test.js +46 -0
  279. package/dist/core/fields/withMedias.test.js.map +1 -0
  280. package/dist/core/fields/withName.js +17 -0
  281. package/dist/core/fields/withName.js.map +1 -0
  282. package/dist/core/fields/withName.test.js +59 -0
  283. package/dist/core/fields/withName.test.js.map +1 -0
  284. package/dist/core/fields/withNav.js +28 -0
  285. package/dist/core/fields/withNav.js.map +1 -0
  286. package/dist/core/fields/withNavs.js +53 -0
  287. package/dist/core/fields/withNavs.js.map +1 -0
  288. package/dist/core/fields/withOrder.js +80 -0
  289. package/dist/core/fields/withOrder.js.map +1 -0
  290. package/dist/core/fields/withOrder.test.js +56 -0
  291. package/dist/core/fields/withOrder.test.js.map +1 -0
  292. package/dist/core/fields/withRelated.js +18 -0
  293. package/dist/core/fields/withRelated.js.map +1 -0
  294. package/dist/core/fields/withRelated.test.js +62 -0
  295. package/dist/core/fields/withRelated.test.js.map +1 -0
  296. package/dist/core/fields/withRichText.js +68 -0
  297. package/dist/core/fields/withRichText.js.map +1 -0
  298. package/dist/core/fields/withRichText.test.js +72 -0
  299. package/dist/core/fields/withRichText.test.js.map +1 -0
  300. package/dist/core/fields/withRoles.js +27 -0
  301. package/dist/core/fields/withRoles.js.map +1 -0
  302. package/dist/core/fields/withRoles.test.js +49 -0
  303. package/dist/core/fields/withRoles.test.js.map +1 -0
  304. package/dist/core/fields/withSelect.js +23 -0
  305. package/dist/core/fields/withSelect.js.map +1 -0
  306. package/dist/core/fields/withSelect.test.js +59 -0
  307. package/dist/core/fields/withSelect.test.js.map +1 -0
  308. package/dist/core/fields/withSeoWeight.js +19 -0
  309. package/dist/core/fields/withSeoWeight.js.map +1 -0
  310. package/dist/core/fields/withSlug.js +33 -0
  311. package/dist/core/fields/withSlug.js.map +1 -0
  312. package/dist/core/fields/withSlug.test.js +71 -0
  313. package/dist/core/fields/withSlug.test.js.map +1 -0
  314. package/dist/core/fields/withTemplate.js +49 -0
  315. package/dist/core/fields/withTemplate.js.map +1 -0
  316. package/dist/core/fields/withTemplate.test.js +93 -0
  317. package/dist/core/fields/withTemplate.test.js.map +1 -0
  318. package/dist/core/fields/withTenants.js +21 -0
  319. package/dist/core/fields/withTenants.js.map +1 -0
  320. package/dist/core/fields/withTenants.test.js +42 -0
  321. package/dist/core/fields/withTenants.test.js.map +1 -0
  322. package/dist/core/fields/withText.js +18 -0
  323. package/dist/core/fields/withText.js.map +1 -0
  324. package/dist/core/fields/withText.test.js +56 -0
  325. package/dist/core/fields/withText.test.js.map +1 -0
  326. package/dist/core/fields/withTitle.js +17 -0
  327. package/dist/core/fields/withTitle.js.map +1 -0
  328. package/dist/core/fields/withTitle.test.js +58 -0
  329. package/dist/core/fields/withTitle.test.js.map +1 -0
  330. package/dist/core/index.js +11 -0
  331. package/dist/core/index.js.map +1 -0
  332. package/dist/core/logger/index.js +3 -0
  333. package/dist/core/logger/index.js.map +1 -0
  334. package/dist/core/logger/logger.js +9 -0
  335. package/dist/core/logger/logger.js.map +1 -0
  336. package/dist/core/translations/index.js +3 -0
  337. package/dist/core/translations/index.js.map +1 -0
  338. package/dist/core/translations/translations.js +137 -0
  339. package/dist/core/translations/translations.js.map +1 -0
  340. package/dist/core/translations/translations.test.js +72 -0
  341. package/dist/core/translations/translations.test.js.map +1 -0
  342. package/dist/core/utils/findByIDHandler.js +28 -0
  343. package/dist/core/utils/findByIDHandler.js.map +1 -0
  344. package/dist/core/utils/findHandler.js +31 -0
  345. package/dist/core/utils/findHandler.js.map +1 -0
  346. package/dist/core/utils/getPreviewURL.js +45 -0
  347. package/dist/core/utils/getPreviewURL.js.map +1 -0
  348. package/dist/core/utils/getRequestCollection.js +49 -0
  349. package/dist/core/utils/getRequestCollection.js.map +1 -0
  350. package/dist/core/utils/index.js +7 -0
  351. package/dist/core/utils/index.js.map +1 -0
  352. package/dist/core/utils/mergeCollections.js +18 -0
  353. package/dist/core/utils/mergeCollections.js.map +1 -0
  354. package/dist/core/utils/mergeFields.js +20 -0
  355. package/dist/core/utils/mergeFields.js.map +1 -0
  356. package/dist/core/utils/mergeGlobals.js +17 -0
  357. package/dist/core/utils/mergeGlobals.js.map +1 -0
  358. package/dist/core/utils/richText.js +29 -0
  359. package/dist/core/utils/richText.js.map +1 -0
  360. package/dist/core/utils/sortByGroup.js +36 -0
  361. package/dist/core/utils/sortByGroup.js.map +1 -0
  362. package/dist/debug.js +25 -0
  363. package/dist/debug.js.map +1 -0
  364. package/dist/declaration.d.js +3 -0
  365. package/dist/declaration.d.js.map +1 -0
  366. package/dist/exports/client.d.ts +36 -0
  367. package/dist/exports/client.d.ts.map +1 -0
  368. package/dist/exports/client.js +8 -0
  369. package/dist/exports/client.js.map +1 -0
  370. package/dist/exports/rsc.d.ts +18 -0
  371. package/dist/exports/rsc.d.ts.map +1 -0
  372. package/dist/exports/rsc.js +5 -0
  373. package/dist/exports/rsc.js.map +1 -0
  374. package/dist/fields/color-picker/ColorCell.js +19 -0
  375. package/dist/fields/color-picker/ColorCell.js.map +1 -0
  376. package/dist/fields/color-picker/ColorField.js +131 -0
  377. package/dist/fields/color-picker/ColorField.js.map +1 -0
  378. package/dist/fields/color-picker/index.js +26 -0
  379. package/dist/fields/color-picker/index.js.map +1 -0
  380. package/dist/fields/color-picker/styles.scss +113 -0
  381. package/dist/fields/color-picker/utils.js +6 -0
  382. package/dist/fields/color-picker/utils.js.map +1 -0
  383. package/dist/fields/index.js +3 -0
  384. package/dist/fields/index.js.map +1 -0
  385. package/dist/globals/App.js +97 -0
  386. package/dist/globals/App.js.map +1 -0
  387. package/dist/globals/Locale.js +82 -0
  388. package/dist/globals/Locale.js.map +1 -0
  389. package/dist/globals/LocaleRowLabel.js +16 -0
  390. package/dist/globals/LocaleRowLabel.js.map +1 -0
  391. package/dist/index.d.ts +891 -844
  392. package/dist/index.d.ts.map +1 -0
  393. package/dist/index.js +11 -9263
  394. package/dist/index.js.map +1 -0
  395. package/dist/mapper.js +199 -0
  396. package/dist/mapper.js.map +1 -0
  397. package/dist/options.js +76 -0
  398. package/dist/options.js.map +1 -0
  399. package/dist/test/blocks/blocks.js +13 -0
  400. package/dist/test/blocks/blocks.js.map +1 -0
  401. package/dist/test/collections/ActionCollection.js +12 -0
  402. package/dist/test/collections/ActionCollection.js.map +1 -0
  403. package/dist/test/collections/AdminCollection.js +18 -0
  404. package/dist/test/collections/AdminCollection.js.map +1 -0
  405. package/dist/test/collections/BlockCollection.js +16 -0
  406. package/dist/test/collections/BlockCollection.js.map +1 -0
  407. package/dist/test/collections/Collection.js +12 -0
  408. package/dist/test/collections/Collection.js.map +1 -0
  409. package/dist/test/collections/FieldCollection.js +84 -0
  410. package/dist/test/collections/FieldCollection.js.map +1 -0
  411. package/dist/test/collections/GlobalCollection.js +12 -0
  412. package/dist/test/collections/GlobalCollection.js.map +1 -0
  413. package/dist/test/collections/LinkCollection.js +12 -0
  414. package/dist/test/collections/LinkCollection.js.map +1 -0
  415. package/dist/test/collections/MenuCollection.js +12 -0
  416. package/dist/test/collections/MenuCollection.js.map +1 -0
  417. package/dist/test/collections/PageCollection.js +12 -0
  418. package/dist/test/collections/PageCollection.js.map +1 -0
  419. package/dist/test/collections/RoleCollection.js +19 -0
  420. package/dist/test/collections/RoleCollection.js.map +1 -0
  421. package/dist/test/collections/RoleFieldCollection.js +40 -0
  422. package/dist/test/collections/RoleFieldCollection.js.map +1 -0
  423. package/dist/test/collections/StaticCollection.js +56 -0
  424. package/dist/test/collections/StaticCollection.js.map +1 -0
  425. package/dist/test/collections/StorePageCollection.js +12 -0
  426. package/dist/test/collections/StorePageCollection.js.map +1 -0
  427. package/dist/test/collections/TenantCollection.js +22 -0
  428. package/dist/test/collections/TenantCollection.js.map +1 -0
  429. package/dist/test/collections/TranslationCollection.js +16 -0
  430. package/dist/test/collections/TranslationCollection.js.map +1 -0
  431. package/dist/test/collections/TypeACollection.js +18 -0
  432. package/dist/test/collections/TypeACollection.js.map +1 -0
  433. package/dist/test/collections/TypeBCollection.js +18 -0
  434. package/dist/test/collections/TypeBCollection.js.map +1 -0
  435. package/dist/test/collections/actions/NewsletterAction.js +29 -0
  436. package/dist/test/collections/actions/NewsletterAction.js.map +1 -0
  437. package/dist/test/collections/actions/RegisterAction.js +44 -0
  438. package/dist/test/collections/actions/RegisterAction.js.map +1 -0
  439. package/dist/test/collections/users/EndUsers.js +40 -0
  440. package/dist/test/collections/users/EndUsers.js.map +1 -0
  441. package/dist/test/collections/users/Users.js +20 -0
  442. package/dist/test/collections/users/Users.js.map +1 -0
  443. package/dist/test/index.js +32 -0
  444. package/dist/test/index.js.map +1 -0
  445. package/dist/test/payload.config.js +106 -0
  446. package/dist/test/payload.config.js.map +1 -0
  447. package/dist/test/utils.js +52 -0
  448. package/dist/test/utils.js.map +1 -0
  449. package/dist/translations.js +467 -0
  450. package/dist/translations.js.map +1 -0
  451. package/dist/types.js +31 -0
  452. package/dist/types.js.map +1 -0
  453. package/package.json +119 -37
  454. package/scss/styles.scss +0 -1
  455. package/dist/index.css +0 -796
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/collections/Template.ts"],"sourcesContent":["import { hasRole, isAdmin, isRole } from '../core';\r\nimport { BowlCollection, BowlOptions, roles } from '../types';\r\n\r\nexport const Template = (options: BowlOptions): BowlCollection => ({\r\n type: 'withCollection',\r\n slug: options.slug.template,\r\n admin: {\r\n group: options.group.config,\r\n useAsTitle: 'name',\r\n defaultColumns: ['name', 'id'],\r\n hidden: (args) => !hasRole(args.user, roles.Admin),\r\n },\r\n access: {\r\n create: isAdmin,\r\n read: isRole(),\r\n update: isAdmin,\r\n delete: isAdmin,\r\n },\r\n fields: [\r\n // inherited fields: id, createdAt, updatedAt\r\n { type: 'withId', required: true },\r\n { type: 'withName', required: true },\r\n // !!! todo withSelect ?\r\n {\r\n name: 'compatibleCollections',\r\n label: 'Compatible pages',\r\n type: 'select',\r\n hasMany: true,\r\n admin: {\r\n isClearable: true,\r\n },\r\n options: (() => {\r\n const selectOptions = options.pages.map(slug => ({\r\n value: slug,\r\n label: slug,\r\n }));\r\n if (selectOptions.length > 0) {\r\n return selectOptions;\r\n } else {\r\n return [{\r\n value: '',\r\n label: 'none',\r\n }];\r\n }\r\n })(),\r\n },\r\n // !!! todo withCheckbox ?\r\n {\r\n name: 'hasCompatibleCollections',\r\n type: 'checkbox',\r\n admin: {\r\n disabled: true,\r\n },\r\n hooks: {\r\n beforeChange: [\r\n ({ data }) => {\r\n if (data?.compatibleCollections && data.compatibleCollections.length > 0) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n },\r\n ],\r\n },\r\n },\r\n ],\r\n});\r\n"],"names":["hasRole","isAdmin","isRole","roles","Template","options","type","slug","template","admin","group","config","useAsTitle","defaultColumns","hidden","args","user","Admin","access","create","read","update","delete","fields","required","name","label","hasMany","isClearable","selectOptions","pages","map","value","length","disabled","hooks","beforeChange","data","compatibleCollections"],"mappings":"AAAA,SAASA,OAAO,EAAEC,OAAO,EAAEC,MAAM,QAAQ,UAAU;AACnD,SAAsCC,KAAK,QAAQ,WAAW;AAE9D,OAAO,MAAMC,WAAW,CAACC,UAA0C,CAAA;QACjEC,MAAM;QACNC,MAAMF,QAAQE,IAAI,CAACC,QAAQ;QAC3BC,OAAO;YACLC,OAAOL,QAAQK,KAAK,CAACC,MAAM;YAC3BC,YAAY;YACZC,gBAAgB;gBAAC;gBAAQ;aAAK;YAC9BC,QAAQ,CAACC,OAAS,CAACf,QAAQe,KAAKC,IAAI,EAAEb,MAAMc,KAAK;QACnD;QACAC,QAAQ;YACNC,QAAQlB;YACRmB,MAAMlB;YACNmB,QAAQpB;YACRqB,QAAQrB;QACV;QACAsB,QAAQ;YACN,6CAA6C;YAC7C;gBAAEjB,MAAM;gBAAUkB,UAAU;YAAK;YACjC;gBAAElB,MAAM;gBAAYkB,UAAU;YAAK;YACnC,wBAAwB;YACxB;gBACEC,MAAM;gBACNC,OAAO;gBACPpB,MAAM;gBACNqB,SAAS;gBACTlB,OAAO;oBACLmB,aAAa;gBACf;gBACAvB,SAAS,AAAC,CAAA;oBACR,MAAMwB,gBAAgBxB,QAAQyB,KAAK,CAACC,GAAG,CAACxB,CAAAA,OAAS,CAAA;4BAC/CyB,OAAOzB;4BACPmB,OAAOnB;wBACT,CAAA;oBACA,IAAIsB,cAAcI,MAAM,GAAG,GAAG;wBAC5B,OAAOJ;oBACT,OAAO;wBACL,OAAO;4BAAC;gCACNG,OAAO;gCACPN,OAAO;4BACT;yBAAE;oBACJ;gBACF,CAAA;YACF;YACA,0BAA0B;YAC1B;gBACED,MAAM;gBACNnB,MAAM;gBACNG,OAAO;oBACLyB,UAAU;gBACZ;gBACAC,OAAO;oBACLC,cAAc;wBACZ,CAAC,EAAEC,IAAI,EAAE;4BACP,IAAIA,MAAMC,yBAAyBD,KAAKC,qBAAqB,CAACL,MAAM,GAAG,GAAG;gCACxE,OAAO;4BACT,OAAO;gCACL,OAAO;4BACT;wBACF;qBACD;gBACH;YACF;SACD;IACH,CAAA,EAAG"}
@@ -0,0 +1,11 @@
1
+ export const Users = (options)=>({
2
+ type: 'withUser',
3
+ slug: options.slug.users,
4
+ fields: [
5
+ {
6
+ type: 'withRoles'
7
+ }
8
+ ]
9
+ });
10
+
11
+ //# sourceMappingURL=Users.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/collections/Users.ts"],"sourcesContent":["import { BowlCollection, BowlOptions } from '../types';\r\n\r\nexport const Users = (options: BowlOptions): BowlCollection => ({\r\n type: 'withUser',\r\n slug: options.slug.users,\r\n fields: [\r\n {\r\n type: 'withRoles',\r\n },\r\n /*\r\n {\r\n type: 'withTenants',\r\n relationTo: ['someCollection'],\r\n },\r\n */\r\n ],\r\n});\r\n"],"names":["Users","options","type","slug","users","fields"],"mappings":"AAEA,OAAO,MAAMA,QAAQ,CAACC,UAA0C,CAAA;QAC9DC,MAAM;QACNC,MAAMF,QAAQE,IAAI,CAACC,KAAK;QACxBC,QAAQ;YACN;gBACEH,MAAM;YACR;SAOD;IACH,CAAA,EAAG"}
@@ -0,0 +1,47 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { Link, useConfig } from '@payloadcms/ui';
4
+ import { getClassNames } from '@websolutespa/bom-core';
5
+ import { usePathname } from 'next/navigation';
6
+ import React from 'react';
7
+ export const CategoryMenu = (props)=>{
8
+ const { collectionSlug } = props;
9
+ const slug = collectionSlug;
10
+ const { config } = useConfig();
11
+ const { routes } = config;
12
+ const pathname = usePathname();
13
+ const items = [
14
+ {
15
+ name: 'List',
16
+ url: `${routes.admin}/collections/${slug}`
17
+ },
18
+ {
19
+ name: 'Tree',
20
+ url: `${routes.admin}/tree/${slug}`
21
+ }
22
+ ];
23
+ const isActive = (url)=>{
24
+ // console.log('isActive', pathname, url);
25
+ return pathname === url;
26
+ };
27
+ return /*#__PURE__*/ _jsx("div", {
28
+ className: "category-menu",
29
+ children: /*#__PURE__*/ _jsx("div", {
30
+ className: "tabs-field__tabs-wrap",
31
+ children: /*#__PURE__*/ _jsx("div", {
32
+ className: "tabs-field__tabs",
33
+ children: items.map((item, i)=>/*#__PURE__*/ _jsx(Link, {
34
+ className: getClassNames('tabs-field__tab-button', {
35
+ 'tabs-field__tab-button--active': isActive(item.url)
36
+ }),
37
+ href: item.url,
38
+ children: /*#__PURE__*/ _jsx("span", {
39
+ children: item.name
40
+ })
41
+ }, i))
42
+ })
43
+ })
44
+ });
45
+ };
46
+
47
+ //# sourceMappingURL=CategoryMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/Category/CategoryMenu.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { Link, useConfig } from '@payloadcms/ui';\r\nimport { getClassNames } from '@websolutespa/bom-core';\r\nimport { usePathname } from 'next/navigation';\r\nimport { CollectionSlug } from 'payload';\r\nimport React from 'react';\r\n\r\nexport type CategoryMenuProps = {\r\n collectionSlug: CollectionSlug; // 'category';\r\n hasCreatePermission?: boolean; // true;\r\n newDocumentURL?: string; // '/admin/collections/category/create'\r\n};\r\n\r\nexport const CategoryMenu: React.FC<CategoryMenuProps> = (props) => {\r\n const { collectionSlug } = props;\r\n const slug = collectionSlug;\r\n const { config } = useConfig();\r\n const { routes } = config;\r\n const pathname = usePathname();\r\n const items = [\r\n {\r\n name: 'List',\r\n url: `${routes.admin}/collections/${slug}`,\r\n }, {\r\n name: 'Tree',\r\n url: `${routes.admin}/tree/${slug}`,\r\n },\r\n ];\r\n const isActive = ((url: string) => {\r\n // console.log('isActive', pathname, url);\r\n return pathname === url;\r\n });\r\n return (\r\n <div className=\"category-menu\">\r\n <div className=\"tabs-field__tabs-wrap\">\r\n <div className=\"tabs-field__tabs\">\r\n {items.map((item, i) => (\r\n <Link\r\n key={i}\r\n className={getClassNames('tabs-field__tab-button', { 'tabs-field__tab-button--active': isActive(item.url) })}\r\n href={item.url}\r\n >\r\n <span>{item.name}</span>\r\n </Link>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n"],"names":["Link","useConfig","getClassNames","usePathname","React","CategoryMenu","props","collectionSlug","slug","config","routes","pathname","items","name","url","admin","isActive","div","className","map","item","i","href","span"],"mappings":"AAAA;;AAEA,SAASA,IAAI,EAAEC,SAAS,QAAQ,iBAAiB;AACjD,SAASC,aAAa,QAAQ,yBAAyB;AACvD,SAASC,WAAW,QAAQ,kBAAkB;AAE9C,OAAOC,WAAW,QAAQ;AAQ1B,OAAO,MAAMC,eAA4C,CAACC;IACxD,MAAM,EAAEC,cAAc,EAAE,GAAGD;IAC3B,MAAME,OAAOD;IACb,MAAM,EAAEE,MAAM,EAAE,GAAGR;IACnB,MAAM,EAAES,MAAM,EAAE,GAAGD;IACnB,MAAME,WAAWR;IACjB,MAAMS,QAAQ;QACZ;YACEC,MAAM;YACNC,KAAK,CAAC,EAAEJ,OAAOK,KAAK,CAAC,aAAa,EAAEP,KAAK,CAAC;QAC5C;QAAG;YACDK,MAAM;YACNC,KAAK,CAAC,EAAEJ,OAAOK,KAAK,CAAC,MAAM,EAAEP,KAAK,CAAC;QACrC;KACD;IACD,MAAMQ,WAAY,CAACF;QACjB,0CAA0C;QAC1C,OAAOH,aAAaG;IACtB;IACA,qBACE,KAACG;QAAIC,WAAU;kBACb,cAAA,KAACD;YAAIC,WAAU;sBACb,cAAA,KAACD;gBAAIC,WAAU;0BACZN,MAAMO,GAAG,CAAC,CAACC,MAAMC,kBAChB,KAACrB;wBAECkB,WAAWhB,cAAc,0BAA0B;4BAAE,kCAAkCc,SAASI,KAAKN,GAAG;wBAAE;wBAC1GQ,MAAMF,KAAKN,GAAG;kCAEd,cAAA,KAACS;sCAAMH,KAAKP,IAAI;;uBAJXQ;;;;AAWnB,EAAE"}
@@ -0,0 +1,430 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { FormSubmit, Gutter, Link, ListHeader, Popup, ViewDescription, toast, useAuth, useConfig, useDocumentDrawer, useLocale, useTranslation } from '@payloadcms/ui';
4
+ import { getRouteResolver } from '@websolutespa/payload-utils';
5
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
6
+ import { options } from '../../options';
7
+ import { DataTree } from '../DataTree/DataTree';
8
+ import LeaveWithoutSaving from '../LeaveWithoutSaving/LeaveWithoutSaving';
9
+ import { ROOT_ITEM, getNewCategoriesFromChanges } from './category.service';
10
+ import { CategoryMenu } from './CategoryMenu';
11
+ import './CategoryTree.scss';
12
+ // https://rct.lukasbach.com/docs/getstarted
13
+ const USE_BULK_UPDATE = true;
14
+ function CategoryTreeConflict({ conflicts }) {
15
+ const { config } = useConfig();
16
+ const { routes: { admin: adminRoute } } = config;
17
+ const summaryConflicts = useMemo(()=>{
18
+ const summaryConflicts = [];
19
+ const getRouteKey = (routes)=>{
20
+ return routes.map((x)=>`${x.schema}-${x.page}`).join('_');
21
+ };
22
+ conflicts.forEach((routes)=>{
23
+ const routeKey = getRouteKey(routes);
24
+ if (summaryConflicts.find((x)=>getRouteKey(x) === routeKey) === undefined) {
25
+ summaryConflicts.push(routes);
26
+ }
27
+ });
28
+ return summaryConflicts;
29
+ }, [
30
+ conflicts
31
+ ]);
32
+ return /*#__PURE__*/ _jsx("span", {
33
+ className: "category__conflicts",
34
+ children: summaryConflicts.length > 0 && /*#__PURE__*/ _jsx(Popup, {
35
+ button: /*#__PURE__*/ _jsx("span", {
36
+ className: "category__conflict",
37
+ children: "conflict detected"
38
+ }),
39
+ buttonType: "custom",
40
+ className: 'category-popup',
41
+ horizontalAlign: "left",
42
+ size: "large",
43
+ verticalAlign: "bottom",
44
+ children: /*#__PURE__*/ _jsx("div", {
45
+ className: 'category-popup__content',
46
+ children: summaryConflicts.map((routes, c)=>/*#__PURE__*/ _jsxs("div", {
47
+ className: 'category-popup__card',
48
+ children: [
49
+ /*#__PURE__*/ _jsxs("h4", {
50
+ children: [
51
+ /*#__PURE__*/ _jsxs("span", {
52
+ children: [
53
+ "Conflict ",
54
+ c + 1
55
+ ]
56
+ }),
57
+ " ",
58
+ /*#__PURE__*/ _jsx("small", {
59
+ children: routes.map((r)=>r.schema).join(', ')
60
+ })
61
+ ]
62
+ }),
63
+ /*#__PURE__*/ _jsx("ul", {
64
+ children: routes.map((route, r)=>/*#__PURE__*/ _jsxs("li", {
65
+ children: [
66
+ /*#__PURE__*/ _jsxs(Link, {
67
+ className: "category-popup__link btn btn--style-secondary",
68
+ id: 'action-edit',
69
+ href: `${adminRoute}/collections/${route.schema}/${route.page}`,
70
+ children: [
71
+ /*#__PURE__*/ _jsx("span", {
72
+ children: route.title
73
+ }),
74
+ " ",
75
+ /*#__PURE__*/ _jsx("small", {
76
+ children: route.schema
77
+ })
78
+ ]
79
+ }, `link-${r}-${route.page}`),
80
+ /*#__PURE__*/ _jsx("p", {
81
+ className: "category-popup__url",
82
+ children: route.id
83
+ })
84
+ ]
85
+ }, `route-${r}-${route.page}`))
86
+ })
87
+ ]
88
+ }, `card-${c}`))
89
+ })
90
+ })
91
+ });
92
+ }
93
+ export const CategoryTree = (props)=>{
94
+ const { slug } = props;
95
+ const { config, getEntityConfig } = useConfig();
96
+ const collectionConfig = getEntityConfig({
97
+ collectionSlug: slug
98
+ });
99
+ const { code: locale } = useLocale();
100
+ const { t, i18n } = useTranslation();
101
+ const { permissions, user } = useAuth();
102
+ const dataTreeRef = useRef(null);
103
+ const [categories, setCategories] = useState(null);
104
+ const [items, setItems] = useState(null);
105
+ const [changes, setChanges] = useState(null);
106
+ const [dirty, setDirty] = useState(false);
107
+ const [id, setId] = useState(null);
108
+ const routeResolver = getRouteResolver(config);
109
+ useEffect(()=>{
110
+ const getData = async ()=>{
111
+ try {
112
+ const search = `?pagination=false&depth=0&locale=${locale}`;
113
+ const url = routeResolver.api(`/${options.slug.category}${search}`);
114
+ const httpResponse = await fetch(url, {
115
+ method: 'GET',
116
+ credentials: 'include',
117
+ headers: {
118
+ 'Content-Type': 'application/json'
119
+ }
120
+ });
121
+ if (!httpResponse.ok) {
122
+ throw httpResponse;
123
+ }
124
+ const categories = await httpResponse.json();
125
+ categories.sort((a, b)=>{
126
+ return (a.order || 0) - (b.order || 0);
127
+ });
128
+ // const rootCategory: ICategory | undefined = getRootCategory(categories);
129
+ const children = categories.filter((x)=>x.category == null || x.category === x.id || x.category === ROOT_ITEM).map((x)=>x.id);
130
+ const items = {};
131
+ items[ROOT_ITEM] = {
132
+ index: ROOT_ITEM,
133
+ data: {
134
+ title: ROOT_ITEM,
135
+ conflicts: []
136
+ },
137
+ // children: rootCategory ? [rootCategory.id] : [],
138
+ children,
139
+ isFolder: true,
140
+ canMove: false,
141
+ canRename: false
142
+ };
143
+ categories.forEach((x)=>{
144
+ // const isTopCategory = x.id === firstTopCategory?.id;
145
+ const children = categories.filter((child)=>child.category === x.id && child.id !== x.id).sort((a, b)=>{
146
+ return (a.order || 0) - (b.order || 0);
147
+ }).map((x)=>x.id);
148
+ items[x.id] = {
149
+ index: x.id,
150
+ data: {
151
+ title: x.title,
152
+ conflicts: []
153
+ },
154
+ children,
155
+ isFolder: true,
156
+ canRename: true,
157
+ canMove: true
158
+ };
159
+ });
160
+ setCategories(categories);
161
+ setItems({
162
+ ...items
163
+ });
164
+ // console.log('CategoryTree.getData', 'categories', categories, 'items', items);
165
+ // console.log('CategoryTree', 'items', items);
166
+ } catch (error) {
167
+ console.log('CategoryTree.getData.error', error);
168
+ }
169
+ };
170
+ getData();
171
+ }, [
172
+ locale
173
+ ]);
174
+ const [DocumentDrawer, , { isDrawerOpen, openDrawer }] = useDocumentDrawer({
175
+ collectionSlug: slug,
176
+ id
177
+ });
178
+ const openDrawerRef = useRef(false);
179
+ useEffect(()=>{
180
+ if (openDrawerRef.current) {
181
+ openDrawer();
182
+ openDrawerRef.current = false;
183
+ }
184
+ }, [
185
+ openDrawer,
186
+ id
187
+ ]);
188
+ const onChange = (changes)=>{
189
+ // console.log('onChange', changes);
190
+ setChanges(changes);
191
+ setDirty(true);
192
+ // console.log(JSON.stringify(items) !== JSON.stringify(changes));
193
+ };
194
+ const onEdit = (items, treeId)=>{
195
+ // console.log('onEdit', items, treeId, items.index);
196
+ if (typeof items.index === 'string') {
197
+ openDrawerRef.current = true;
198
+ setId(items.index);
199
+ }
200
+ };
201
+ const onSubmit = async ()=>{
202
+ // console.log('onSubmit', changes);
203
+ if (!categories || !changes) {
204
+ return;
205
+ }
206
+ const newCategories = getNewCategoriesFromChanges(categories, changes);
207
+ const updateCategory = async (item)=>{
208
+ // console.log('updateCategory', item);
209
+ try {
210
+ const search = `?depth=0&locale=${locale}&fallback-locale=null`;
211
+ const url = routeResolver.api(`/${slug}/${item.id}${search}`);
212
+ const httpResponse = await fetch(url, {
213
+ method: 'PATCH',
214
+ body: JSON.stringify({
215
+ id: item.id,
216
+ category: item.category,
217
+ order: item.order
218
+ }),
219
+ credentials: 'include',
220
+ headers: {
221
+ 'Content-Type': 'application/json'
222
+ }
223
+ });
224
+ if (!httpResponse.ok) {
225
+ throw httpResponse;
226
+ }
227
+ const response = await httpResponse.json();
228
+ // console.log('updateCategory', response);
229
+ return response;
230
+ } catch (error) {
231
+ console.log('CategoryTree.updateCategory.error', error);
232
+ }
233
+ };
234
+ if (USE_BULK_UPDATE) {
235
+ try {
236
+ const records = newCategories.map((x)=>({
237
+ action: 'upadate',
238
+ item: {
239
+ id: x.id,
240
+ category: x.category,
241
+ order: x.order
242
+ }
243
+ }));
244
+ const url = routeResolver.api(`/${slug}/bulk/`);
245
+ const httpResponse = await fetch(url, {
246
+ method: 'PATCH',
247
+ body: JSON.stringify(records),
248
+ credentials: 'include',
249
+ headers: {
250
+ 'Content-Type': 'application/json'
251
+ }
252
+ });
253
+ if (!httpResponse.ok) {
254
+ throw httpResponse;
255
+ }
256
+ const categories = await httpResponse.json();
257
+ categories.sort((a, b)=>(a.order || 0) - (b.order || 0));
258
+ // console.log('CategoryTree.onSubmit.success', categories);
259
+ setDirty(false);
260
+ toast.success('Updated successfully.');
261
+ } catch (error) {
262
+ toast.error(`There was an error while saving ${slug}.`);
263
+ console.log('CategoryTree.onSubmit.error', error);
264
+ }
265
+ } else {
266
+ try {
267
+ const promises = newCategories.map((x)=>()=>updateCategory(x));
268
+ const responses = [];
269
+ for (const promise of promises){
270
+ const response = await promise();
271
+ responses.push(response);
272
+ }
273
+ // console.log('CategoryTree.onSubmit.success', responses);
274
+ toast.success('Updated successfully.');
275
+ } catch (error) {
276
+ toast.error(`There was an error while saving ${slug}.`);
277
+ console.log('CategoryTree.onSubmit.error', error);
278
+ }
279
+ }
280
+ };
281
+ useEffect(()=>{
282
+ if (!categories) {
283
+ return;
284
+ }
285
+ const getPostData = (changes)=>{
286
+ const payload = Object.fromEntries(Object.entries(changes).map(([k, v])=>[
287
+ k,
288
+ {
289
+ index: v.index,
290
+ children: v.children
291
+ }
292
+ ]));
293
+ return payload;
294
+ };
295
+ const getRoutes = async ()=>{
296
+ try {
297
+ const postData = changes ? getPostData(changes) : undefined;
298
+ const search = '';
299
+ const url = routeResolver.api(`/route/changes${search}`);
300
+ const httpResponse = await fetch(url, {
301
+ method: 'POST',
302
+ body: postData ? JSON.stringify(postData) : undefined,
303
+ credentials: 'include',
304
+ headers: {
305
+ 'Content-Type': 'application/json'
306
+ }
307
+ });
308
+ if (!httpResponse.ok) {
309
+ throw httpResponse;
310
+ }
311
+ const routes = await httpResponse.json();
312
+ return routes;
313
+ } catch (error) {
314
+ console.log('CategoryTree.getRoutes.error', error);
315
+ throw error;
316
+ }
317
+ };
318
+ getRoutes().then((routes)=>{
319
+ const routeMap = new Map();
320
+ for (const route of routes){
321
+ if (routeMap.has(route.id)) {
322
+ routeMap.get(route.id).push(route);
323
+ } else {
324
+ routeMap.set(route.id, [
325
+ route
326
+ ]);
327
+ }
328
+ }
329
+ const conflictingRouteMap = new Map([
330
+ ...routeMap
331
+ ].filter(([k, v])=>v.length > 1));
332
+ // console.log('CategoryTree.changes.getRoutes', routes);
333
+ // console.log('CategoryTree.changes.routeMap', routeMap);
334
+ // console.log('CategoryTree.changes.conflictingRouteMap', conflictingRouteMap);
335
+ if (items) {
336
+ Object.entries(items).forEach(([k, v])=>{
337
+ v.data.conflicts = [];
338
+ for (const conflict of conflictingRouteMap){
339
+ const routes = conflict[1];
340
+ if (routes.find((x)=>x.category === k)) {
341
+ v.data.conflicts.push(routes);
342
+ }
343
+ }
344
+ // console.log(k, v.data.conflicts);
345
+ v.data.extra = /*#__PURE__*/ _jsx(CategoryTreeConflict, {
346
+ conflicts: v.data.conflicts
347
+ });
348
+ if (dataTreeRef.current) {
349
+ dataTreeRef.current.onSetData(v, v.data);
350
+ }
351
+ });
352
+ // console.log(items);
353
+ setItems({
354
+ ...items
355
+ });
356
+ }
357
+ });
358
+ }, [
359
+ changes,
360
+ categories
361
+ ]);
362
+ // const modalKey = `${locale}-localized-field-modal-${path}`;
363
+ // const isModalOpened = isModalOpen(modalSlug);
364
+ const onSave = useCallback((args)=>{
365
+ setId(args.doc.id);
366
+ }, []);
367
+ return /*#__PURE__*/ _jsxs("div", {
368
+ className: "collection-list",
369
+ children: [
370
+ /*#__PURE__*/ _jsx(CategoryMenu, {
371
+ collectionSlug: slug
372
+ }),
373
+ /*#__PURE__*/ _jsx(Gutter, {
374
+ children: /*#__PURE__*/ _jsxs("div", {
375
+ className: "collection-list__wrap",
376
+ children: [
377
+ /*#__PURE__*/ _jsx(ListHeader, {
378
+ collectionConfig: collectionConfig,
379
+ Description: /*#__PURE__*/ _jsx("div", {
380
+ className: 'collection-list__sub-header',
381
+ children: collectionConfig.admin?.description && /*#__PURE__*/ _jsx(ViewDescription, {
382
+ collectionSlug: collectionConfig.slug,
383
+ description: collectionConfig.admin.description
384
+ })
385
+ }),
386
+ newDocumentURL: "",
387
+ disableBulkDelete: true,
388
+ disableBulkEdit: true,
389
+ hasCreatePermission: false,
390
+ i18n: i18n,
391
+ isBulkUploadEnabled: false,
392
+ smallBreak: true,
393
+ openBulkUpload: ()=>{},
394
+ onBulkUploadSuccess: ()=>{},
395
+ viewType: "list"
396
+ }),
397
+ items && /*#__PURE__*/ _jsxs(_Fragment, {
398
+ children: [
399
+ /*#__PURE__*/ _jsx(DataTree, {
400
+ ref: dataTreeRef,
401
+ items: items,
402
+ rootItem: ROOT_ITEM,
403
+ onChange: onChange,
404
+ onEdit: onEdit
405
+ }),
406
+ /*#__PURE__*/ _jsx("div", {
407
+ className: "collection-list__foot",
408
+ children: /*#__PURE__*/ _jsx(FormSubmit, {
409
+ type: "button",
410
+ disabled: !dirty,
411
+ onClick: onSubmit,
412
+ children: t('general:save')
413
+ })
414
+ }),
415
+ /*#__PURE__*/ _jsx(LeaveWithoutSaving, {
416
+ modified: dirty
417
+ })
418
+ ]
419
+ }),
420
+ id && /*#__PURE__*/ _jsx(DocumentDrawer, {
421
+ onSave: onSave
422
+ })
423
+ ]
424
+ })
425
+ })
426
+ ]
427
+ });
428
+ };
429
+
430
+ //# sourceMappingURL=CategoryTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/Category/CategoryTree.tsx"],"sourcesContent":["'use client';\r\n\r\nimport { DocumentDrawerProps, FormSubmit, Gutter, Link, ListHeader, Popup, ViewDescription, toast, useAuth, useConfig, useDocumentDrawer, useLocale, useTranslation } from '@payloadcms/ui';\r\nimport { ICategory, IEquatable, IRoute } from '@websolutespa/bom-core';\r\nimport { getRouteResolver } from '@websolutespa/payload-utils';\r\nimport { CollectionSlug, DefaultDocumentIDType } from 'payload';\r\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { TreeItem } from 'react-complex-tree';\r\nimport { options } from '../../options';\r\nimport { DataTree, DataTreeInstance } from '../DataTree/DataTree';\r\nimport LeaveWithoutSaving from '../LeaveWithoutSaving/LeaveWithoutSaving';\r\nimport { CategoryTreeItem, CategoryTreeItems, ROOT_ITEM, getNewCategoriesFromChanges } from './category.service';\r\nimport { CategoryMenu } from './CategoryMenu';\r\nimport './CategoryTree.scss';\r\n\r\n// https://rct.lukasbach.com/docs/getstarted\r\n\r\nconst USE_BULK_UPDATE = true;\r\n\r\nexport type CategoryTreeConflictProps = {\r\n conflicts: IRoute[][];\r\n};\r\n\r\nexport type RouteConflict = {\r\n schema: string;\r\n page: IEquatable;\r\n template: string;\r\n category: IEquatable;\r\n routes: IRoute[];\r\n};\r\n\r\nfunction CategoryTreeConflict({ conflicts }: CategoryTreeConflictProps) {\r\n const { config } = useConfig();\r\n const { routes: { admin: adminRoute } } = config;\r\n const summaryConflicts = useMemo(() => {\r\n const summaryConflicts: IRoute[][] = [];\r\n const getRouteKey = (routes: IRoute[]): string => {\r\n return routes.map(x => `${x.schema}-${x.page}`).join('_');\r\n };\r\n conflicts.forEach(routes => {\r\n const routeKey = getRouteKey(routes);\r\n if (summaryConflicts.find(x => getRouteKey(x) === routeKey) === undefined) {\r\n summaryConflicts.push(routes);\r\n }\r\n });\r\n return summaryConflicts;\r\n }, [conflicts]);\r\n return (\r\n <span className=\"category__conflicts\">\r\n {summaryConflicts.length > 0 && (\r\n <Popup\r\n button={(\r\n <span className=\"category__conflict\">\r\n conflict detected\r\n </span>\r\n )}\r\n buttonType=\"custom\"\r\n className={'category-popup'}\r\n horizontalAlign=\"left\"\r\n size=\"large\"\r\n verticalAlign=\"bottom\"\r\n >\r\n <div className={'category-popup__content'}>\r\n {summaryConflicts.map((routes, c) => (\r\n <div key={`card-${c}`} className={'category-popup__card'}>\r\n <h4><span>Conflict {c + 1}</span> <small>{routes.map(r => r.schema).join(', ')}</small></h4>\r\n <ul>\r\n {routes.map((route, r) => (\r\n <li key={`route-${r}-${route.page}`}>\r\n <Link\r\n key={`link-${r}-${route.page}`}\r\n className=\"category-popup__link btn btn--style-secondary\"\r\n id={'action-edit'}\r\n href={`${adminRoute}/collections/${route.schema}/${route.page}`}\r\n >\r\n <span>{route.title}</span> <small>{route.schema}</small>\r\n </Link>\r\n <p className=\"category-popup__url\">{route.id}</p>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n ))}\r\n </div>\r\n </Popup>\r\n )}\r\n </span>\r\n );\r\n}\r\n\r\nexport type CategoryTreeProps = {\r\n slug: CollectionSlug;\r\n};\r\n\r\nexport const CategoryTree: React.FC<CategoryTreeProps> = (props) => {\r\n const { slug } = props;\r\n const { config, getEntityConfig } = useConfig();\r\n const collectionConfig = getEntityConfig({ collectionSlug: slug });\r\n const { code: locale } = useLocale();\r\n const { t, i18n } = useTranslation();\r\n const { permissions, user } = useAuth();\r\n\r\n const dataTreeRef = useRef<DataTreeInstance<CategoryTreeItem>>(null);\r\n\r\n const [categories, setCategories] = useState<ICategory[] | null>(null);\r\n const [items, setItems] = useState<CategoryTreeItems | null>(null);\r\n const [changes, setChanges] = useState<CategoryTreeItems | null>(null);\r\n const [dirty, setDirty] = useState(false);\r\n const [id, setId] = useState<DefaultDocumentIDType | null>(null);\r\n\r\n const routeResolver = getRouteResolver(config);\r\n\r\n useEffect(() => {\r\n const getData = async () => {\r\n try {\r\n const search = `?pagination=false&depth=0&locale=${locale}`;\r\n const url = routeResolver.api(`/${options.slug.category}${search}`);\r\n const httpResponse = await fetch(url, {\r\n method: 'GET',\r\n credentials: 'include',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n if (!httpResponse.ok) {\r\n throw httpResponse;\r\n }\r\n const categories = await httpResponse.json() as ICategory[];\r\n categories.sort((a, b) => {\r\n return (a.order || 0) - (b.order || 0);\r\n });\r\n // const rootCategory: ICategory | undefined = getRootCategory(categories);\r\n const children = categories.filter(x =>\r\n x.category == null ||\r\n x.category === x.id ||\r\n x.category === ROOT_ITEM\r\n ).map(x => x.id);\r\n const items: CategoryTreeItems = {};\r\n items[ROOT_ITEM] = {\r\n index: ROOT_ITEM,\r\n data: {\r\n title: ROOT_ITEM,\r\n conflicts: [],\r\n },\r\n // children: rootCategory ? [rootCategory.id] : [],\r\n children,\r\n isFolder: true,\r\n canMove: false,\r\n canRename: false,\r\n };\r\n categories.forEach(x => {\r\n // const isTopCategory = x.id === firstTopCategory?.id;\r\n const children = categories.filter(child => child.category === x.id && child.id !== x.id).sort((a, b) => {\r\n return (a.order || 0) - (b.order || 0);\r\n }).map(x => x.id);\r\n items[x.id] = {\r\n index: x.id,\r\n data: {\r\n title: x.title as string,\r\n conflicts: [],\r\n },\r\n children,\r\n isFolder: true,\r\n canRename: true,\r\n canMove: true, // !isTopCategory,\r\n };\r\n });\r\n setCategories(categories);\r\n setItems({ ...items });\r\n // console.log('CategoryTree.getData', 'categories', categories, 'items', items);\r\n // console.log('CategoryTree', 'items', items);\r\n } catch (error) {\r\n console.log('CategoryTree.getData.error', error);\r\n }\r\n };\r\n getData();\r\n }, [locale]);\r\n\r\n const [DocumentDrawer, , { isDrawerOpen, openDrawer }] = useDocumentDrawer({\r\n collectionSlug: slug,\r\n id,\r\n });\r\n\r\n const openDrawerRef = useRef(false);\r\n\r\n useEffect(() => {\r\n if (openDrawerRef.current) {\r\n openDrawer();\r\n openDrawerRef.current = false;\r\n }\r\n }, [openDrawer, id]);\r\n\r\n const onChange = (changes: CategoryTreeItems) => {\r\n // console.log('onChange', changes);\r\n setChanges(changes);\r\n setDirty(true);\r\n // console.log(JSON.stringify(items) !== JSON.stringify(changes));\r\n };\r\n\r\n const onEdit = (items: TreeItem<CategoryTreeItem>, treeId: string) => {\r\n // console.log('onEdit', items, treeId, items.index);\r\n if (typeof items.index === 'string') {\r\n openDrawerRef.current = true;\r\n setId(items.index);\r\n }\r\n };\r\n\r\n const onSubmit = async () => {\r\n // console.log('onSubmit', changes);\r\n if (!categories || !changes) {\r\n return;\r\n }\r\n const newCategories = getNewCategoriesFromChanges(categories, changes);\r\n const updateCategory = async (item: ICategory) => {\r\n // console.log('updateCategory', item);\r\n try {\r\n const search = `?depth=0&locale=${locale}&fallback-locale=null`;\r\n const url: string = routeResolver.api(`/${slug}/${item.id}${search}`);\r\n const httpResponse = await fetch(url, {\r\n method: 'PATCH',\r\n body: JSON.stringify({\r\n id: item.id,\r\n category: item.category,\r\n order: item.order,\r\n }),\r\n credentials: 'include',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n if (!httpResponse.ok) {\r\n throw httpResponse;\r\n }\r\n const response = await httpResponse.json();\r\n // console.log('updateCategory', response);\r\n return response;\r\n } catch (error) {\r\n console.log('CategoryTree.updateCategory.error', error);\r\n }\r\n };\r\n if (USE_BULK_UPDATE) {\r\n try {\r\n const records = newCategories.map(x => ({\r\n action: 'upadate',\r\n item: {\r\n id: x.id,\r\n category: x.category,\r\n order: x.order,\r\n },\r\n }));\r\n const url: string = routeResolver.api(`/${slug}/bulk/`);\r\n const httpResponse = await fetch(url, {\r\n method: 'PATCH',\r\n body: JSON.stringify(records),\r\n credentials: 'include',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n if (!httpResponse.ok) {\r\n throw httpResponse;\r\n }\r\n const categories: { order?: number }[] = await httpResponse.json();\r\n categories.sort((a, b) => (a.order || 0) - (b.order || 0));\r\n // console.log('CategoryTree.onSubmit.success', categories);\r\n setDirty(false);\r\n toast.success('Updated successfully.');\r\n } catch (error) {\r\n toast.error(`There was an error while saving ${slug}.`);\r\n console.log('CategoryTree.onSubmit.error', error);\r\n }\r\n } else {\r\n try {\r\n const promises = newCategories.map(x => () => updateCategory(x));\r\n const responses = [];\r\n for (const promise of promises) {\r\n const response = await promise();\r\n responses.push(response);\r\n }\r\n // console.log('CategoryTree.onSubmit.success', responses);\r\n toast.success('Updated successfully.');\r\n } catch (error) {\r\n toast.error(`There was an error while saving ${slug}.`);\r\n console.log('CategoryTree.onSubmit.error', error);\r\n }\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (!categories) {\r\n return;\r\n }\r\n const getPostData = (changes: CategoryTreeItems) => {\r\n const payload = Object.fromEntries(Object.entries(changes)\r\n .map(([k, v]: any) => [k, {\r\n index: v.index,\r\n children: v.children,\r\n }])\r\n );\r\n return payload;\r\n };\r\n const getRoutes = async () => {\r\n try {\r\n const postData = changes ? getPostData(changes) : undefined;\r\n const search = '';\r\n const url = routeResolver.api(`/route/changes${search}`);\r\n const httpResponse = await fetch(url, {\r\n method: 'POST',\r\n body: postData ? JSON.stringify(postData) : undefined,\r\n credentials: 'include',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n if (!httpResponse.ok) {\r\n throw httpResponse;\r\n }\r\n const routes = await httpResponse.json() as IRoute[];\r\n return routes;\r\n } catch (error) {\r\n console.log('CategoryTree.getRoutes.error', error);\r\n throw error;\r\n }\r\n };\r\n getRoutes().then(routes => {\r\n const routeMap = new Map<string, IRoute[]>();\r\n for (const route of routes) {\r\n if (routeMap.has(route.id)) {\r\n routeMap.get(route.id)!.push(route);\r\n } else {\r\n routeMap.set(route.id, [route]);\r\n }\r\n }\r\n const conflictingRouteMap = new Map(\r\n [...routeMap].filter(([k, v]) => v.length > 1)\r\n );\r\n // console.log('CategoryTree.changes.getRoutes', routes);\r\n // console.log('CategoryTree.changes.routeMap', routeMap);\r\n // console.log('CategoryTree.changes.conflictingRouteMap', conflictingRouteMap);\r\n if (items) {\r\n Object.entries(items).forEach(([k, v]) => {\r\n v.data.conflicts = [];\r\n for (const conflict of conflictingRouteMap) {\r\n const routes = conflict[1];\r\n if (routes.find(x => x.category === k)) {\r\n v.data.conflicts.push(routes);\r\n }\r\n }\r\n // console.log(k, v.data.conflicts);\r\n v.data.extra = (\r\n <CategoryTreeConflict conflicts={v.data.conflicts} />\r\n );\r\n if (dataTreeRef.current) {\r\n dataTreeRef.current.onSetData(v, v.data);\r\n }\r\n });\r\n // console.log(items);\r\n setItems({ ...items });\r\n }\r\n });\r\n\r\n }, [changes, categories]);\r\n\r\n // const modalKey = `${locale}-localized-field-modal-${path}`;\r\n // const isModalOpened = isModalOpen(modalSlug);\r\n\r\n const onSave = useCallback<Required<DocumentDrawerProps>['onSave']>((args) => {\r\n setId(args.doc.id as DefaultDocumentIDType | null);\r\n }, []);\r\n\r\n return (\r\n <div className=\"collection-list\">\r\n <CategoryMenu collectionSlug={slug} />\r\n <Gutter>\r\n <div className=\"collection-list__wrap\">\r\n <ListHeader\r\n collectionConfig={collectionConfig}\r\n Description={\r\n <div className={'collection-list__sub-header'}>\r\n {collectionConfig.admin?.description && (\r\n <ViewDescription\r\n collectionSlug={collectionConfig.slug}\r\n description={collectionConfig.admin.description}\r\n />\r\n )}\r\n </div>\r\n }\r\n newDocumentURL=\"\"\r\n disableBulkDelete={true}\r\n disableBulkEdit={true}\r\n hasCreatePermission={false}\r\n i18n={i18n}\r\n isBulkUploadEnabled={false}\r\n smallBreak={true}\r\n openBulkUpload={() => { }}\r\n onBulkUploadSuccess={() => { }}\r\n viewType=\"list\"\r\n />\r\n {items && (\r\n <>\r\n <DataTree<CategoryTreeItem> ref={dataTreeRef} items={items} rootItem={ROOT_ITEM} onChange={onChange} onEdit={onEdit} />\r\n <div className=\"collection-list__foot\">\r\n <FormSubmit type=\"button\" disabled={!dirty} onClick={onSubmit}>\r\n {t('general:save')}\r\n </FormSubmit>\r\n </div>\r\n <LeaveWithoutSaving modified={dirty} />\r\n </>\r\n )}\r\n {id && (\r\n <DocumentDrawer onSave={onSave} />\r\n )}\r\n </div>\r\n </Gutter>\r\n </div>\r\n );\r\n};\r\n\r\n"],"names":["FormSubmit","Gutter","Link","ListHeader","Popup","ViewDescription","toast","useAuth","useConfig","useDocumentDrawer","useLocale","useTranslation","getRouteResolver","React","useCallback","useEffect","useMemo","useRef","useState","options","DataTree","LeaveWithoutSaving","ROOT_ITEM","getNewCategoriesFromChanges","CategoryMenu","USE_BULK_UPDATE","CategoryTreeConflict","conflicts","config","routes","admin","adminRoute","summaryConflicts","getRouteKey","map","x","schema","page","join","forEach","routeKey","find","undefined","push","span","className","length","button","buttonType","horizontalAlign","size","verticalAlign","div","c","h4","small","r","ul","route","li","id","href","title","p","CategoryTree","props","slug","getEntityConfig","collectionConfig","collectionSlug","code","locale","t","i18n","permissions","user","dataTreeRef","categories","setCategories","items","setItems","changes","setChanges","dirty","setDirty","setId","routeResolver","getData","search","url","api","category","httpResponse","fetch","method","credentials","headers","ok","json","sort","a","b","order","children","filter","index","data","isFolder","canMove","canRename","child","error","console","log","DocumentDrawer","isDrawerOpen","openDrawer","openDrawerRef","current","onChange","onEdit","treeId","onSubmit","newCategories","updateCategory","item","body","JSON","stringify","response","records","action","success","promises","responses","promise","getPostData","payload","Object","fromEntries","entries","k","v","getRoutes","postData","then","routeMap","Map","has","get","set","conflictingRouteMap","conflict","extra","onSetData","onSave","args","doc","Description","description","newDocumentURL","disableBulkDelete","disableBulkEdit","hasCreatePermission","isBulkUploadEnabled","smallBreak","openBulkUpload","onBulkUploadSuccess","viewType","ref","rootItem","type","disabled","onClick","modified"],"mappings":"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"}