@webiny/app-trash-bin 6.3.0-beta.4 → 6.4.0-beta.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 (339) hide show
  1. package/Domain/Models/TrashBinItem/ITrashBinItemMapper.js +0 -3
  2. package/Domain/Models/TrashBinItem/TrashBinItem.js +13 -12
  3. package/Domain/Models/TrashBinItem/TrashBinItem.js.map +1 -1
  4. package/Domain/Models/TrashBinItem/index.js +0 -2
  5. package/Domain/Models/index.js +0 -2
  6. package/Domain/Repositories/Search/ISearchRepository.js +0 -3
  7. package/Domain/Repositories/Search/SearchRepository.js +12 -11
  8. package/Domain/Repositories/Search/SearchRepository.js.map +1 -1
  9. package/Domain/Repositories/Search/SearchRepositoryFactory.js +13 -12
  10. package/Domain/Repositories/Search/SearchRepositoryFactory.js.map +1 -1
  11. package/Domain/Repositories/Search/index.js +0 -2
  12. package/Domain/Repositories/SelectedItems/ISelectedItemsRepository.js +0 -3
  13. package/Domain/Repositories/SelectedItems/SelectedItemsRepository.js +24 -23
  14. package/Domain/Repositories/SelectedItems/SelectedItemsRepository.js.map +1 -1
  15. package/Domain/Repositories/SelectedItems/SelectedItemsRepositoryFactory.js +13 -12
  16. package/Domain/Repositories/SelectedItems/SelectedItemsRepositoryFactory.js.map +1 -1
  17. package/Domain/Repositories/SelectedItems/index.js +0 -2
  18. package/Domain/Repositories/Sorting/SortingRepositoryWithDefaults.js +16 -17
  19. package/Domain/Repositories/Sorting/SortingRepositoryWithDefaults.js.map +1 -1
  20. package/Domain/Repositories/Sorting/index.js +0 -2
  21. package/Domain/Repositories/TrashBinItems/ITrashBinItemsRepository.js +0 -3
  22. package/Domain/Repositories/TrashBinItems/TrashBinItemMapper.js +16 -15
  23. package/Domain/Repositories/TrashBinItems/TrashBinItemMapper.js.map +1 -1
  24. package/Domain/Repositories/TrashBinItems/TrashBinItemsRepository.js +81 -90
  25. package/Domain/Repositories/TrashBinItems/TrashBinItemsRepository.js.map +1 -1
  26. package/Domain/Repositories/TrashBinItems/TrashBinItemsRepositoryFactory.js +13 -12
  27. package/Domain/Repositories/TrashBinItems/TrashBinItemsRepositoryFactory.js.map +1 -1
  28. package/Domain/Repositories/TrashBinItems/TrashBinItemsRepositoryWithLoading.js +34 -33
  29. package/Domain/Repositories/TrashBinItems/TrashBinItemsRepositoryWithLoading.js.map +1 -1
  30. package/Domain/Repositories/TrashBinItems/index.js +0 -2
  31. package/Domain/Repositories/index.js +0 -3
  32. package/Domain/index.js +0 -2
  33. package/Gateways/TrashBinBulkActions/ITrashBinBulkActionsGateway.js +0 -3
  34. package/Gateways/TrashBinBulkActions/index.js +0 -3
  35. package/Gateways/TrashBinDeleteItem/ITrashBinDeleteItemGateway.js +0 -3
  36. package/Gateways/TrashBinDeleteItem/index.js +0 -3
  37. package/Gateways/TrashBinListItems/ITrashBinListGateway.js +0 -3
  38. package/Gateways/TrashBinListItems/index.js +0 -3
  39. package/Gateways/TrashBinRestoreItem/ITrashBinRestoreItemGateway.js +0 -3
  40. package/Gateways/TrashBinRestoreItem/index.js +0 -3
  41. package/Gateways/index.js +0 -3
  42. package/Presentation/TrashBin/TrashBin.js +51 -40
  43. package/Presentation/TrashBin/TrashBin.js.map +1 -1
  44. package/Presentation/TrashBin/TrashBin.test.js +778 -752
  45. package/Presentation/TrashBin/TrashBin.test.js.map +1 -1
  46. package/Presentation/TrashBin/TrashBinControllers.js +53 -75
  47. package/Presentation/TrashBin/TrashBinControllers.js.map +1 -1
  48. package/Presentation/TrashBin/TrashBinPresenter.js +50 -53
  49. package/Presentation/TrashBin/TrashBinPresenter.js.map +1 -1
  50. package/Presentation/TrashBin/controllers/BulkAction/BulkActionsController.js +10 -9
  51. package/Presentation/TrashBin/controllers/BulkAction/BulkActionsController.js.map +1 -1
  52. package/Presentation/TrashBin/controllers/BulkAction/IBulkActionsController.js +0 -3
  53. package/Presentation/TrashBin/controllers/BulkAction/index.js +0 -2
  54. package/Presentation/TrashBin/controllers/DeleteItem/DeleteItemController.js +9 -8
  55. package/Presentation/TrashBin/controllers/DeleteItem/DeleteItemController.js.map +1 -1
  56. package/Presentation/TrashBin/controllers/DeleteItem/IDeleteItemController.js +0 -3
  57. package/Presentation/TrashBin/controllers/DeleteItem/index.js +0 -2
  58. package/Presentation/TrashBin/controllers/GetRestoredItemById/GetRestoredItemByIdController.js +11 -10
  59. package/Presentation/TrashBin/controllers/GetRestoredItemById/GetRestoredItemByIdController.js.map +1 -1
  60. package/Presentation/TrashBin/controllers/GetRestoredItemById/IGetRestoredItemByIdController.js +0 -3
  61. package/Presentation/TrashBin/controllers/GetRestoredItemById/index.js +0 -2
  62. package/Presentation/TrashBin/controllers/ListItems/IListItemsController.js +0 -3
  63. package/Presentation/TrashBin/controllers/ListItems/ListItemsController.js +9 -8
  64. package/Presentation/TrashBin/controllers/ListItems/ListItemsController.js.map +1 -1
  65. package/Presentation/TrashBin/controllers/ListItems/index.js +0 -2
  66. package/Presentation/TrashBin/controllers/ListMoreItems/IListMoreItemsController.js +0 -3
  67. package/Presentation/TrashBin/controllers/ListMoreItems/ListMoreItemsController.js +9 -8
  68. package/Presentation/TrashBin/controllers/ListMoreItems/ListMoreItemsController.js.map +1 -1
  69. package/Presentation/TrashBin/controllers/ListMoreItems/index.js +0 -2
  70. package/Presentation/TrashBin/controllers/RestoreItem/IRestoreItemController.js +0 -3
  71. package/Presentation/TrashBin/controllers/RestoreItem/RestoreItemController.js +9 -8
  72. package/Presentation/TrashBin/controllers/RestoreItem/RestoreItemController.js.map +1 -1
  73. package/Presentation/TrashBin/controllers/RestoreItem/index.js +0 -2
  74. package/Presentation/TrashBin/controllers/SearchItems/ISearchItemsController.js +0 -3
  75. package/Presentation/TrashBin/controllers/SearchItems/SearchItemsController.js +12 -11
  76. package/Presentation/TrashBin/controllers/SearchItems/SearchItemsController.js.map +1 -1
  77. package/Presentation/TrashBin/controllers/SearchItems/index.js +0 -2
  78. package/Presentation/TrashBin/controllers/SelectAllItems/ISelectAllItemsController.js +0 -3
  79. package/Presentation/TrashBin/controllers/SelectAllItems/SelectAllItemsController.js +9 -8
  80. package/Presentation/TrashBin/controllers/SelectAllItems/SelectAllItemsController.js.map +1 -1
  81. package/Presentation/TrashBin/controllers/SelectAllItems/index.js +0 -2
  82. package/Presentation/TrashBin/controllers/SelectItems/ISelectItemsController.js +0 -3
  83. package/Presentation/TrashBin/controllers/SelectItems/SelectItemsController.js +10 -9
  84. package/Presentation/TrashBin/controllers/SelectItems/SelectItemsController.js.map +1 -1
  85. package/Presentation/TrashBin/controllers/SelectItems/index.js +0 -2
  86. package/Presentation/TrashBin/controllers/SortItems/ISortItemsController.d.ts +2 -2
  87. package/Presentation/TrashBin/controllers/SortItems/ISortItemsController.js +0 -3
  88. package/Presentation/TrashBin/controllers/SortItems/SortItemsController.d.ts +2 -2
  89. package/Presentation/TrashBin/controllers/SortItems/SortItemsController.js +13 -14
  90. package/Presentation/TrashBin/controllers/SortItems/SortItemsController.js.map +1 -1
  91. package/Presentation/TrashBin/controllers/SortItems/index.js +0 -2
  92. package/Presentation/TrashBin/controllers/UnselectAllItems/IUnselectAllItemsController.js +0 -3
  93. package/Presentation/TrashBin/controllers/UnselectAllItems/UnselectAllItemsController.js +9 -8
  94. package/Presentation/TrashBin/controllers/UnselectAllItems/UnselectAllItemsController.js.map +1 -1
  95. package/Presentation/TrashBin/controllers/UnselectAllItems/index.js +0 -2
  96. package/Presentation/TrashBin/controllers/index.js +0 -2
  97. package/Presentation/TrashBin/index.js +0 -2
  98. package/Presentation/TrashBinConfigs/TrashBinConfigs.js +49 -52
  99. package/Presentation/TrashBinConfigs/TrashBinConfigs.js.map +1 -1
  100. package/Presentation/TrashBinConfigs/index.js +0 -2
  101. package/Presentation/TrashBinRenderer/TrashBinRenderer.js +10 -15
  102. package/Presentation/TrashBinRenderer/TrashBinRenderer.js.map +1 -1
  103. package/Presentation/TrashBinRenderer/index.js +0 -2
  104. package/Presentation/abstractions/ITrashBinControllers.js +0 -3
  105. package/Presentation/abstractions/ITrashBinPresenter.js +0 -3
  106. package/Presentation/abstractions/index.js +0 -3
  107. package/Presentation/components/Actions/DeleteItem/DeleteItem.js +15 -20
  108. package/Presentation/components/Actions/DeleteItem/DeleteItem.js.map +1 -1
  109. package/Presentation/components/Actions/DeleteItem/index.js +0 -2
  110. package/Presentation/components/Actions/RestoreItem/RestoreItem.js +14 -19
  111. package/Presentation/components/Actions/RestoreItem/RestoreItem.js.map +1 -1
  112. package/Presentation/components/Actions/RestoreItem/index.js +0 -2
  113. package/Presentation/components/Actions/index.js +0 -2
  114. package/Presentation/components/BottomInfoBar/BottomInfoBar.js +15 -16
  115. package/Presentation/components/BottomInfoBar/BottomInfoBar.js.map +1 -1
  116. package/Presentation/components/BottomInfoBar/ListMeta.js +10 -13
  117. package/Presentation/components/BottomInfoBar/ListMeta.js.map +1 -1
  118. package/Presentation/components/BottomInfoBar/ListStatus.js +13 -16
  119. package/Presentation/components/BottomInfoBar/ListStatus.js.map +1 -1
  120. package/Presentation/components/BottomInfoBar/index.js +0 -2
  121. package/Presentation/components/BulkActions/BulkActions/BulkActions.js +47 -56
  122. package/Presentation/components/BulkActions/BulkActions/BulkActions.js.map +1 -1
  123. package/Presentation/components/BulkActions/BulkActions/index.js +0 -2
  124. package/Presentation/components/BulkActions/DeleteItems/DeleteItems.js +58 -73
  125. package/Presentation/components/BulkActions/DeleteItems/DeleteItems.js.map +1 -1
  126. package/Presentation/components/BulkActions/DeleteItems/index.js +0 -2
  127. package/Presentation/components/BulkActions/RestoreItems/RestoreItems.js +67 -83
  128. package/Presentation/components/BulkActions/RestoreItems/RestoreItems.js.map +1 -1
  129. package/Presentation/components/BulkActions/RestoreItems/RestoreItemsReportMessage.js +9 -10
  130. package/Presentation/components/BulkActions/RestoreItems/RestoreItemsReportMessage.js.map +1 -1
  131. package/Presentation/components/BulkActions/RestoreItems/index.js +0 -2
  132. package/Presentation/components/BulkActions/index.js +0 -2
  133. package/Presentation/components/Cells/CellActions/CellActions.js +12 -17
  134. package/Presentation/components/Cells/CellActions/CellActions.js.map +1 -1
  135. package/Presentation/components/Cells/CellActions/index.js +0 -2
  136. package/Presentation/components/Cells/CellCreatedBy/CellCreatedBy.js +7 -12
  137. package/Presentation/components/Cells/CellCreatedBy/CellCreatedBy.js.map +1 -1
  138. package/Presentation/components/Cells/CellCreatedBy/index.js +0 -2
  139. package/Presentation/components/Cells/CellDeletedBy/CellDeletedBy.js +7 -12
  140. package/Presentation/components/Cells/CellDeletedBy/CellDeletedBy.js.map +1 -1
  141. package/Presentation/components/Cells/CellDeletedBy/index.js +0 -2
  142. package/Presentation/components/Cells/CellDeletedOn/CellDeletedOn.js +10 -15
  143. package/Presentation/components/Cells/CellDeletedOn/CellDeletedOn.js.map +1 -1
  144. package/Presentation/components/Cells/CellDeletedOn/index.js +0 -2
  145. package/Presentation/components/Cells/CellTitle/CellTitle.js +16 -19
  146. package/Presentation/components/Cells/CellTitle/CellTitle.js.map +1 -1
  147. package/Presentation/components/Cells/CellTitle/index.js +0 -2
  148. package/Presentation/components/Cells/index.js +0 -2
  149. package/Presentation/components/Empty/Empty.js +19 -20
  150. package/Presentation/components/Empty/Empty.js.map +1 -1
  151. package/Presentation/components/Empty/index.js +0 -2
  152. package/Presentation/components/SearchInput/SearchInput.js +25 -32
  153. package/Presentation/components/SearchInput/SearchInput.js.map +1 -1
  154. package/Presentation/components/SearchInput/index.js +0 -2
  155. package/Presentation/components/Table/Table.js +23 -28
  156. package/Presentation/components/Table/Table.js.map +1 -1
  157. package/Presentation/components/Table/index.js +0 -2
  158. package/Presentation/components/Title/Title.js +9 -12
  159. package/Presentation/components/Title/Title.js.map +1 -1
  160. package/Presentation/components/Title/index.js +0 -2
  161. package/Presentation/components/TrashBinOverlay/TrashBinOverlay.js +18 -24
  162. package/Presentation/components/TrashBinOverlay/TrashBinOverlay.js.map +1 -1
  163. package/Presentation/components/TrashBinOverlay/index.js +0 -2
  164. package/Presentation/configs/index.js +0 -2
  165. package/Presentation/configs/list/Browser/BulkAction.js +56 -66
  166. package/Presentation/configs/list/Browser/BulkAction.js.map +1 -1
  167. package/Presentation/configs/list/Browser/EntryAction.js +8 -11
  168. package/Presentation/configs/list/Browser/EntryAction.js.map +1 -1
  169. package/Presentation/configs/list/Browser/Table/Column.js +7 -10
  170. package/Presentation/configs/list/Browser/Table/Column.js.map +1 -1
  171. package/Presentation/configs/list/Browser/Table/Sorting.js +4 -7
  172. package/Presentation/configs/list/Browser/Table/Sorting.js.map +1 -1
  173. package/Presentation/configs/list/Browser/Table/index.js +4 -3
  174. package/Presentation/configs/list/Browser/Table/index.js.map +1 -1
  175. package/Presentation/configs/list/Browser/index.js +5 -4
  176. package/Presentation/configs/list/Browser/index.js.map +1 -1
  177. package/Presentation/configs/list/TrashBinListConfig.js +24 -23
  178. package/Presentation/configs/list/TrashBinListConfig.js.map +1 -1
  179. package/Presentation/configs/list/index.js +0 -2
  180. package/Presentation/hooks/index.js +0 -2
  181. package/Presentation/hooks/useDeleteTrashBinItem.js +22 -27
  182. package/Presentation/hooks/useDeleteTrashBinItem.js.map +1 -1
  183. package/Presentation/hooks/useRestoreTrashBinItem.js +28 -36
  184. package/Presentation/hooks/useRestoreTrashBinItem.js.map +1 -1
  185. package/Presentation/hooks/useTrashBin.js +68 -44
  186. package/Presentation/hooks/useTrashBin.js.map +1 -1
  187. package/Presentation/hooks/useTrashBinItem.js +4 -6
  188. package/Presentation/hooks/useTrashBinItem.js.map +1 -1
  189. package/Presentation/index.js +36 -43
  190. package/Presentation/index.js.map +1 -1
  191. package/UseCases/BulkAction/BulkActionUseCase.js +9 -8
  192. package/UseCases/BulkAction/BulkActionUseCase.js.map +1 -1
  193. package/UseCases/BulkAction/IBulkActionUseCase.js +0 -3
  194. package/UseCases/BulkAction/index.js +0 -2
  195. package/UseCases/DeleteItem/DeleteItemUseCase.js +9 -8
  196. package/UseCases/DeleteItem/DeleteItemUseCase.js.map +1 -1
  197. package/UseCases/DeleteItem/IDeleteItemUseCase.js +0 -3
  198. package/UseCases/DeleteItem/index.js +0 -2
  199. package/UseCases/GetRestoredItem/GetRestoredItemUseCase.js +10 -9
  200. package/UseCases/GetRestoredItem/GetRestoredItemUseCase.js.map +1 -1
  201. package/UseCases/GetRestoredItem/IGetRestoredItemUseCase.js +0 -3
  202. package/UseCases/GetRestoredItem/index.js +0 -2
  203. package/UseCases/ListItems/IListItemsUseCase.js +0 -3
  204. package/UseCases/ListItems/ListItemsUseCase.js +11 -10
  205. package/UseCases/ListItems/ListItemsUseCase.js.map +1 -1
  206. package/UseCases/ListItems/ListItemsUseCaseWithSearch.js +14 -13
  207. package/UseCases/ListItems/ListItemsUseCaseWithSearch.js.map +1 -1
  208. package/UseCases/ListItems/ListItemsUseCaseWithSorting.js +14 -13
  209. package/UseCases/ListItems/ListItemsUseCaseWithSorting.js.map +1 -1
  210. package/UseCases/ListItems/index.js +0 -2
  211. package/UseCases/ListMoreItems/IListMoreItemsUseCase.js +0 -3
  212. package/UseCases/ListMoreItems/ListMoreItemsUseCase.js +9 -8
  213. package/UseCases/ListMoreItems/ListMoreItemsUseCase.js.map +1 -1
  214. package/UseCases/ListMoreItems/index.js +0 -2
  215. package/UseCases/RestoreItem/IRestoreItemUseCase.js +0 -3
  216. package/UseCases/RestoreItem/RestoreItemUseCase.js +9 -8
  217. package/UseCases/RestoreItem/RestoreItemUseCase.js.map +1 -1
  218. package/UseCases/RestoreItem/index.js +0 -2
  219. package/UseCases/SearchItems/ISearchItemsUseCase.js +0 -3
  220. package/UseCases/SearchItems/SearchItemsUseCase.js +9 -8
  221. package/UseCases/SearchItems/SearchItemsUseCase.js.map +1 -1
  222. package/UseCases/SearchItems/index.js +0 -2
  223. package/UseCases/SelectAllItems/ISelectAllItemsUseCase.js +0 -3
  224. package/UseCases/SelectAllItems/SelectAllItemsUseCase.js +9 -8
  225. package/UseCases/SelectAllItems/SelectAllItemsUseCase.js.map +1 -1
  226. package/UseCases/SelectAllItems/index.js +0 -2
  227. package/UseCases/SelectItems/ISelectItemsUseCase.js +0 -3
  228. package/UseCases/SelectItems/SelectItemsUseCase.js +9 -8
  229. package/UseCases/SelectItems/SelectItemsUseCase.js.map +1 -1
  230. package/UseCases/SelectItems/index.js +0 -2
  231. package/UseCases/SortItems/ISortItemsUseCase.js +0 -3
  232. package/UseCases/SortItems/SortItemsUseCase.js +9 -8
  233. package/UseCases/SortItems/SortItemsUseCase.js.map +1 -1
  234. package/UseCases/SortItems/index.js +0 -2
  235. package/UseCases/UnSelectAllItems/IUnselectAllItemsUseCase.js +0 -3
  236. package/UseCases/UnSelectAllItems/UnselectAllItemsUseCase.js +9 -8
  237. package/UseCases/UnSelectAllItems/UnselectAllItemsUseCase.js.map +1 -1
  238. package/UseCases/UnSelectAllItems/index.js +0 -2
  239. package/UseCases/index.js +0 -2
  240. package/index.js +0 -2
  241. package/package.json +13 -14
  242. package/types.js +7 -6
  243. package/types.js.map +1 -1
  244. package/Domain/Models/TrashBinItem/ITrashBinItemMapper.js.map +0 -1
  245. package/Domain/Models/TrashBinItem/index.js.map +0 -1
  246. package/Domain/Models/index.js.map +0 -1
  247. package/Domain/Repositories/Search/ISearchRepository.js.map +0 -1
  248. package/Domain/Repositories/Search/index.js.map +0 -1
  249. package/Domain/Repositories/SelectedItems/ISelectedItemsRepository.js.map +0 -1
  250. package/Domain/Repositories/SelectedItems/index.js.map +0 -1
  251. package/Domain/Repositories/Sorting/index.js.map +0 -1
  252. package/Domain/Repositories/TrashBinItems/ITrashBinItemsRepository.js.map +0 -1
  253. package/Domain/Repositories/TrashBinItems/index.js.map +0 -1
  254. package/Domain/Repositories/index.js.map +0 -1
  255. package/Domain/index.js.map +0 -1
  256. package/Gateways/TrashBinBulkActions/ITrashBinBulkActionsGateway.js.map +0 -1
  257. package/Gateways/TrashBinBulkActions/index.js.map +0 -1
  258. package/Gateways/TrashBinDeleteItem/ITrashBinDeleteItemGateway.js.map +0 -1
  259. package/Gateways/TrashBinDeleteItem/index.js.map +0 -1
  260. package/Gateways/TrashBinListItems/ITrashBinListGateway.js.map +0 -1
  261. package/Gateways/TrashBinListItems/index.js.map +0 -1
  262. package/Gateways/TrashBinRestoreItem/ITrashBinRestoreItemGateway.js.map +0 -1
  263. package/Gateways/TrashBinRestoreItem/index.js.map +0 -1
  264. package/Gateways/index.js.map +0 -1
  265. package/Presentation/TrashBin/controllers/BulkAction/IBulkActionsController.js.map +0 -1
  266. package/Presentation/TrashBin/controllers/BulkAction/index.js.map +0 -1
  267. package/Presentation/TrashBin/controllers/DeleteItem/IDeleteItemController.js.map +0 -1
  268. package/Presentation/TrashBin/controllers/DeleteItem/index.js.map +0 -1
  269. package/Presentation/TrashBin/controllers/GetRestoredItemById/IGetRestoredItemByIdController.js.map +0 -1
  270. package/Presentation/TrashBin/controllers/GetRestoredItemById/index.js.map +0 -1
  271. package/Presentation/TrashBin/controllers/ListItems/IListItemsController.js.map +0 -1
  272. package/Presentation/TrashBin/controllers/ListItems/index.js.map +0 -1
  273. package/Presentation/TrashBin/controllers/ListMoreItems/IListMoreItemsController.js.map +0 -1
  274. package/Presentation/TrashBin/controllers/ListMoreItems/index.js.map +0 -1
  275. package/Presentation/TrashBin/controllers/RestoreItem/IRestoreItemController.js.map +0 -1
  276. package/Presentation/TrashBin/controllers/RestoreItem/index.js.map +0 -1
  277. package/Presentation/TrashBin/controllers/SearchItems/ISearchItemsController.js.map +0 -1
  278. package/Presentation/TrashBin/controllers/SearchItems/index.js.map +0 -1
  279. package/Presentation/TrashBin/controllers/SelectAllItems/ISelectAllItemsController.js.map +0 -1
  280. package/Presentation/TrashBin/controllers/SelectAllItems/index.js.map +0 -1
  281. package/Presentation/TrashBin/controllers/SelectItems/ISelectItemsController.js.map +0 -1
  282. package/Presentation/TrashBin/controllers/SelectItems/index.js.map +0 -1
  283. package/Presentation/TrashBin/controllers/SortItems/ISortItemsController.js.map +0 -1
  284. package/Presentation/TrashBin/controllers/SortItems/index.js.map +0 -1
  285. package/Presentation/TrashBin/controllers/UnselectAllItems/IUnselectAllItemsController.js.map +0 -1
  286. package/Presentation/TrashBin/controllers/UnselectAllItems/index.js.map +0 -1
  287. package/Presentation/TrashBin/controllers/index.js.map +0 -1
  288. package/Presentation/TrashBin/index.js.map +0 -1
  289. package/Presentation/TrashBinConfigs/index.js.map +0 -1
  290. package/Presentation/TrashBinRenderer/index.js.map +0 -1
  291. package/Presentation/abstractions/ITrashBinControllers.js.map +0 -1
  292. package/Presentation/abstractions/ITrashBinPresenter.js.map +0 -1
  293. package/Presentation/abstractions/index.js.map +0 -1
  294. package/Presentation/components/Actions/DeleteItem/index.js.map +0 -1
  295. package/Presentation/components/Actions/RestoreItem/index.js.map +0 -1
  296. package/Presentation/components/Actions/index.js.map +0 -1
  297. package/Presentation/components/BottomInfoBar/index.js.map +0 -1
  298. package/Presentation/components/BulkActions/BulkActions/index.js.map +0 -1
  299. package/Presentation/components/BulkActions/DeleteItems/index.js.map +0 -1
  300. package/Presentation/components/BulkActions/RestoreItems/index.js.map +0 -1
  301. package/Presentation/components/BulkActions/index.js.map +0 -1
  302. package/Presentation/components/Cells/CellActions/index.js.map +0 -1
  303. package/Presentation/components/Cells/CellCreatedBy/index.js.map +0 -1
  304. package/Presentation/components/Cells/CellDeletedBy/index.js.map +0 -1
  305. package/Presentation/components/Cells/CellDeletedOn/index.js.map +0 -1
  306. package/Presentation/components/Cells/CellTitle/index.js.map +0 -1
  307. package/Presentation/components/Cells/index.js.map +0 -1
  308. package/Presentation/components/Empty/index.js.map +0 -1
  309. package/Presentation/components/SearchInput/index.js.map +0 -1
  310. package/Presentation/components/Table/index.js.map +0 -1
  311. package/Presentation/components/Title/index.js.map +0 -1
  312. package/Presentation/components/TrashBinOverlay/index.js.map +0 -1
  313. package/Presentation/configs/index.js.map +0 -1
  314. package/Presentation/configs/list/index.js.map +0 -1
  315. package/Presentation/hooks/index.js.map +0 -1
  316. package/UseCases/BulkAction/IBulkActionUseCase.js.map +0 -1
  317. package/UseCases/BulkAction/index.js.map +0 -1
  318. package/UseCases/DeleteItem/IDeleteItemUseCase.js.map +0 -1
  319. package/UseCases/DeleteItem/index.js.map +0 -1
  320. package/UseCases/GetRestoredItem/IGetRestoredItemUseCase.js.map +0 -1
  321. package/UseCases/GetRestoredItem/index.js.map +0 -1
  322. package/UseCases/ListItems/IListItemsUseCase.js.map +0 -1
  323. package/UseCases/ListItems/index.js.map +0 -1
  324. package/UseCases/ListMoreItems/IListMoreItemsUseCase.js.map +0 -1
  325. package/UseCases/ListMoreItems/index.js.map +0 -1
  326. package/UseCases/RestoreItem/IRestoreItemUseCase.js.map +0 -1
  327. package/UseCases/RestoreItem/index.js.map +0 -1
  328. package/UseCases/SearchItems/ISearchItemsUseCase.js.map +0 -1
  329. package/UseCases/SearchItems/index.js.map +0 -1
  330. package/UseCases/SelectAllItems/ISelectAllItemsUseCase.js.map +0 -1
  331. package/UseCases/SelectAllItems/index.js.map +0 -1
  332. package/UseCases/SelectItems/ISelectItemsUseCase.js.map +0 -1
  333. package/UseCases/SelectItems/index.js.map +0 -1
  334. package/UseCases/SortItems/ISortItemsUseCase.js.map +0 -1
  335. package/UseCases/SortItems/index.js.map +0 -1
  336. package/UseCases/UnSelectAllItems/IUnselectAllItemsUseCase.js.map +0 -1
  337. package/UseCases/UnSelectAllItems/index.js.map +0 -1
  338. package/UseCases/index.js.map +0 -1
  339. package/index.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { describe, it, expect, beforeEach, vi } from "vitest";
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
2
  import { TrashBinPresenter } from "./TrashBinPresenter.js";
3
3
  import { LoadingRepository, MetaRepository, SortingRepository } from "@webiny/app-utils";
4
4
  import { LoadingActions } from "../../types.js";
@@ -8,787 +8,813 @@ import { SelectedItemsRepository } from "../../Domain/Repositories/SelectedItems
8
8
  import { SortingRepositoryWithDefaults } from "../../Domain/Repositories/Sorting/index.js";
9
9
  import { TrashBinItemsRepository, TrashBinItemsRepositoryWithLoading } from "../../Domain/Repositories/TrashBinItems/index.js";
10
10
  const identity1 = {
11
- id: "1234",
12
- displayName: "John Doe",
13
- type: "admin"
11
+ id: "1234",
12
+ displayName: "John Doe",
13
+ type: "admin"
14
14
  };
15
15
  const identity2 = {
16
- id: "5678",
17
- displayName: "Jane Doe",
18
- type: "admin"
16
+ id: "5678",
17
+ displayName: "Jane Doe",
18
+ type: "admin"
19
19
  };
20
- const createBinListGateway = ({
21
- execute
22
- }) => ({
23
- execute
24
- });
25
- const createBinDeleteItemGateway = ({
26
- execute
27
- }) => ({
28
- execute
29
- });
30
- const createBinRestoreItemGateway = ({
31
- execute
32
- }) => ({
33
- execute
34
- });
35
- const createBinBulkActionsGateway = ({
36
- execute
37
- }) => ({
38
- execute
39
- });
40
- class CustomItemMapper {
41
- toDTO(data) {
42
- return {
43
- id: data.id,
44
- title: data.title,
45
- location: data.location,
46
- createdBy: data.createdBy,
47
- deletedOn: data.deletedOn,
48
- deletedBy: data.deletedBy
49
- };
50
- }
51
- }
52
- const defaultSorting = [{
53
- field: "deletedOn",
54
- order: "desc"
55
- }];
56
- describe("TrashBin", () => {
57
- const item1 = {
58
- id: "item-1",
59
- title: "Item 1",
60
- location: {
61
- folderId: "folder-a"
62
- },
63
- createdBy: identity1,
64
- deletedBy: identity2,
65
- deletedOn: new Date().toString(),
66
- custom: "any custom data"
67
- };
68
- const item2 = {
69
- id: "item-2",
70
- title: "Item 2",
71
- location: {
72
- folderId: "folder-a"
73
- },
74
- createdBy: identity1,
75
- deletedBy: identity1,
76
- deletedOn: new Date().toString(),
77
- custom: "any custom data"
78
- };
79
- const item3 = {
80
- id: "item-3",
81
- title: "Item 3",
82
- location: {
83
- folderId: "folder-b"
84
- },
85
- createdBy: identity2,
86
- deletedBy: identity2,
87
- deletedOn: new Date().toString(),
88
- custom: "any custom data"
89
- };
90
- const item4 = {
91
- id: "item-4",
92
- title: "Item 4",
93
- location: {
94
- folderId: "folder-b"
95
- },
96
- createdBy: identity1,
97
- deletedBy: identity1,
98
- deletedOn: new Date().toString(),
99
- custom: "any custom data"
100
- };
101
- const listGateway = createBinListGateway({
102
- execute: vi.fn().mockImplementation(() => {
103
- return Promise.resolve([[item1, item2, item3], {
104
- totalCount: 3,
105
- cursor: null,
106
- hasMoreItems: false
107
- }]);
108
- })
109
- });
110
- const deleteItemGateway = createBinDeleteItemGateway({
111
- execute: vi.fn().mockImplementation(() => {
112
- return Promise.resolve(true);
113
- })
114
- });
115
- const restoreItemGateway = createBinRestoreItemGateway({
116
- execute: vi.fn().mockImplementation(() => {
117
- return Promise.resolve(item1);
118
- })
119
- });
120
- const bulkActionGateway = createBinBulkActionsGateway({
121
- execute: vi.fn().mockImplementation(() => {
122
- return Promise.resolve({
123
- id: "123456789"
124
- });
125
- })
126
- });
127
- const itemMapper = new CustomItemMapper();
128
- const BulkActionDeleteItems = "BulkDeleteItems";
129
- const BulkActionRestoreItems = "BulkRestoreItems";
130
- const init = (listGateway, deleteItemGateway, restoreItemGateway, retentionPeriod = 90) => {
131
- const selectedRepo = new SelectedItemsRepository();
132
- const loadingRepo = new LoadingRepository();
133
- const sortRepo = new SortingRepository();
134
- const sortRepoWithDefaults = new SortingRepositoryWithDefaults(defaultSorting, sortRepo);
135
- const metaRepo = new MetaRepository();
136
- const searchRepo = new SearchRepository();
137
- const trashBinItemsRepo = new TrashBinItemsRepository(metaRepo, listGateway, deleteItemGateway, restoreItemGateway, bulkActionGateway, itemMapper);
138
- const itemsRepo = new TrashBinItemsRepositoryWithLoading(loadingRepo, trashBinItemsRepo);
139
- return {
140
- presenter: new TrashBinPresenter(itemsRepo, selectedRepo, sortRepoWithDefaults, searchRepo, retentionPeriod),
141
- controllers: new TrashBinControllers(itemsRepo, selectedRepo, sortRepoWithDefaults, searchRepo, BulkActionDeleteItems, BulkActionRestoreItems).getControllers()
142
- };
143
- };
144
- beforeEach(() => {
145
- vi.clearAllMocks();
146
- });
147
- it("should create a presenter and list trash bin entries from the gateway", async () => {
148
- const {
149
- presenter,
150
- controllers
151
- } = init(listGateway, deleteItemGateway, restoreItemGateway);
152
- const listPromise = controllers.listItems.execute();
153
-
154
- // Let's check the transition to loading state
155
- expect(presenter.vm).toMatchObject({
156
- items: [],
157
- loading: {
158
- [LoadingActions.list]: true
159
- }
160
- });
161
- await listPromise;
162
- expect(listGateway.execute).toHaveBeenCalledTimes(1);
163
- expect(listGateway.execute).toHaveBeenCalledWith({
164
- sort: ["deletedOn_DESC"]
165
- });
166
- expect(presenter.vm).toMatchObject({
167
- items: [{
168
- id: "item-1",
169
- title: "Item 1",
170
- createdBy: identity1,
171
- deletedBy: identity2,
172
- deletedOn: expect.any(String)
173
- }, {
174
- id: "item-2",
175
- title: "Item 2",
176
- createdBy: identity1,
177
- deletedBy: identity1,
178
- deletedOn: expect.any(String)
179
- }, {
180
- id: "item-3",
181
- title: "Item 3",
182
- createdBy: identity2,
183
- deletedBy: identity2,
184
- deletedOn: expect.any(String)
185
- }],
186
- loading: {
187
- [LoadingActions.list]: false
188
- }
189
- });
190
- });
191
- it("should list more items from the gateway", async () => {
192
- const listGateway = createBinListGateway({
193
- execute: vi.fn().mockImplementationOnce(() => {
194
- return Promise.resolve([[item1, item2, item3], {
195
- totalCount: 4,
196
- cursor: "IjMi",
197
- hasMoreItems: true
198
- }]);
199
- }).mockImplementationOnce(() => {
200
- return Promise.resolve([[item4], {
201
- totalCount: 4,
202
- cursor: null,
203
- hasMoreItems: false
204
- }]);
205
- })
206
- });
207
- const {
208
- presenter,
209
- controllers
210
- } = init(listGateway, deleteItemGateway, restoreItemGateway);
211
-
212
- // Let's list some initial entries
213
- await controllers.listItems.execute();
214
- expect(listGateway.execute).toHaveBeenCalledTimes(1);
215
-
216
- // Let's list more items from the gateway
217
- const listMorePromise = controllers.listMoreItems.execute();
218
- expect(presenter.vm).toMatchObject({
219
- loading: {
220
- [LoadingActions.listMore]: true
221
- }
222
- });
223
- await listMorePromise;
224
- expect(listGateway.execute).toHaveBeenCalledTimes(2);
225
- expect(listGateway.execute).toHaveBeenCalledWith({
226
- after: "IjMi",
227
- search: undefined,
228
- sort: ["deletedOn_DESC"]
229
- });
230
- expect(presenter.vm).toMatchObject({
231
- items: [{
232
- id: "item-1",
233
- title: "Item 1",
234
- createdBy: identity1,
235
- deletedBy: identity2,
236
- deletedOn: expect.any(String)
237
- }, {
238
- id: "item-2",
239
- title: "Item 2",
240
- createdBy: identity1,
241
- deletedBy: identity1,
242
- deletedOn: expect.any(String)
243
- }, {
244
- id: "item-3",
245
- title: "Item 3",
246
- createdBy: identity2,
247
- deletedBy: identity2,
248
- deletedOn: expect.any(String)
249
- }, {
250
- id: "item-4",
251
- title: "Item 4",
252
- createdBy: identity1,
253
- deletedBy: identity1,
254
- deletedOn: expect.any(String)
255
- }],
256
- loading: {
257
- [LoadingActions.listMore]: false
258
- }
259
- });
260
- });
261
- it("should be able to sort items", async () => {
262
- const sortListGateway = createBinListGateway({
263
- execute: vi.fn().mockImplementationOnce(() => {
264
- return Promise.resolve([[item1, item2, item3], {
265
- totalCount: 3,
266
- cursor: null,
267
- hasMoreItems: false
268
- }]);
269
- }).mockImplementation(() => {
270
- return Promise.resolve([[item3, item2, item1], {
271
- totalCount: 3,
272
- cursor: null,
273
- hasMoreItems: false
274
- }]);
275
- })
20
+ const createBinListGateway = ({ execute })=>({
21
+ execute
276
22
  });
277
- const {
278
- presenter,
279
- controllers
280
- } = init(sortListGateway, deleteItemGateway, restoreItemGateway);
281
-
282
- // let's list some entries from the gateway
283
- await controllers.listItems.execute();
284
- expect(sortListGateway.execute).toHaveBeenNthCalledWith(1, {
285
- sort: ["deletedOn_DESC"]
286
- });
287
-
288
- // Let's sort items, it should call back the list gateway to retrieve the items sorted
289
- await controllers.sortItems.execute(() => [{
290
- id: "deletedOn",
291
- desc: false
292
- }]);
293
- expect(sortListGateway.execute).toHaveBeenNthCalledWith(2, {
294
- sort: ["deletedOn_ASC"]
295
- });
296
- expect(presenter.vm).toMatchObject({
297
- items: [{
298
- id: "item-3",
299
- title: "Item 3",
300
- createdBy: identity2,
301
- deletedBy: identity2,
302
- deletedOn: expect.any(String)
303
- }, {
304
- id: "item-2",
305
- title: "Item 2",
306
- createdBy: identity1,
307
- deletedBy: identity1,
308
- deletedOn: expect.any(String)
309
- }, {
310
- id: "item-1",
311
- title: "Item 1",
312
- createdBy: identity1,
313
- deletedBy: identity2,
314
- deletedOn: expect.any(String)
315
- }],
316
- loading: {
317
- [LoadingActions.list]: false
318
- },
319
- sorting: [{
320
- id: "deletedOn",
321
- desc: false
322
- }]
323
- });
324
- });
325
- it("should be able to search items", async () => {
326
- const searchItemsGateway = createBinListGateway({
327
- execute: vi.fn().mockImplementationOnce(() => {
328
- return Promise.resolve([[item1, item2, item3], {
329
- totalCount: 3,
330
- cursor: null,
331
- hasMoreItems: false
332
- }]);
333
- }).mockImplementationOnce(() => {
334
- return Promise.resolve([[item1], {
335
- totalCount: 1,
336
- cursor: null,
337
- hasMoreItems: false
338
- }]);
339
- }).mockImplementationOnce(() => {
340
- return Promise.resolve([[], {
341
- totalCount: 0,
342
- cursor: null,
343
- hasMoreItems: false
344
- }]);
345
- })
346
- });
347
- const {
348
- presenter,
349
- controllers
350
- } = init(searchItemsGateway, deleteItemGateway, restoreItemGateway);
351
-
352
- // let's list some entries from the gateway
353
- await controllers.listItems.execute();
354
- expect(searchItemsGateway.execute).toHaveBeenNthCalledWith(1, {
355
- sort: ["deletedOn_DESC"]
23
+ const createBinDeleteItemGateway = ({ execute })=>({
24
+ execute
356
25
  });
357
-
358
- // Let's search for items, it should return items from the gateway
359
- await controllers.searchItems.execute("Item 1");
360
- expect(searchItemsGateway.execute).toHaveBeenNthCalledWith(2, {
361
- sort: ["deletedOn_DESC"],
362
- search: "Item 1"
26
+ const createBinRestoreItemGateway = ({ execute })=>({
27
+ execute
363
28
  });
364
- expect(presenter.vm).toMatchObject({
365
- items: [{
366
- id: "item-1",
367
- title: "Item 1",
368
- createdBy: identity1,
369
- deletedBy: identity2,
370
- deletedOn: expect.any(String)
371
- }],
372
- loading: {
373
- [LoadingActions.list]: false
374
- },
375
- searchQuery: "Item 1"
29
+ const createBinBulkActionsGateway = ({ execute })=>({
30
+ execute
376
31
  });
377
-
378
- // Let's search for items, it should return no items from the gateway
379
- await controllers.searchItems.execute("Not found query");
380
- expect(searchItemsGateway.execute).toHaveBeenNthCalledWith(3, {
381
- sort: ["deletedOn_DESC"],
382
- search: "Not found query"
383
- });
384
- expect(presenter.vm).toMatchObject({
385
- items: [],
386
- loading: {
387
- [LoadingActions.list]: false
388
- },
389
- searchQuery: "Not found query",
390
- isEmptyView: true
391
- });
392
- });
393
- it("should be able to select items", async () => {
394
- const {
395
- presenter,
396
- controllers
397
- } = init(listGateway, deleteItemGateway, restoreItemGateway);
398
-
399
- // let's list some entries from the gateway
400
- await controllers.listItems.execute();
401
-
402
- // No selected items found by default
403
- expect(presenter.vm).toMatchObject({
404
- selectedItems: []
405
- });
406
-
407
- // Let's select the first Item
408
- await controllers.selectItems.execute([{
409
- id: "item-1",
410
- title: "Item 1",
411
- location: {
412
- folderId: "folder-a"
413
- },
414
- createdBy: identity1,
415
- deletedBy: identity2,
416
- deletedOn: new Date().toString()
417
- }]);
418
- expect(presenter.vm).toMatchObject({
419
- selectedItems: [{
420
- id: "item-1",
421
- title: "Item 1",
422
- location: {
423
- folderId: "folder-a"
424
- },
425
- createdBy: identity1,
426
- deletedBy: identity2,
427
- deletedOn: expect.any(String)
428
- }]
429
- });
430
-
431
- // Let's select the second item
432
- await controllers.selectItems.execute([{
433
- id: "item-1",
434
- title: "Item 1",
435
- location: {
436
- folderId: "folder-a"
437
- },
438
- createdBy: identity1,
439
- deletedBy: identity2,
440
- deletedOn: new Date().toString()
441
- }, {
442
- id: "item-2",
443
- title: "Item 2",
444
- location: {
445
- folderId: "folder-a"
446
- },
447
- createdBy: identity1,
448
- deletedBy: identity1,
449
- deletedOn: new Date().toString()
450
- }]);
451
- expect(presenter.vm).toMatchObject({
452
- selectedItems: [{
453
- id: "item-1",
454
- title: "Item 1",
455
- location: {
456
- folderId: "folder-a"
457
- },
458
- createdBy: identity1,
459
- deletedBy: identity2,
460
- deletedOn: expect.any(String)
461
- }, {
462
- id: "item-2",
463
- title: "Item 2",
464
- location: {
465
- folderId: "folder-a"
466
- },
467
- createdBy: identity1,
468
- deletedBy: identity1,
469
- deletedOn: expect.any(String)
470
- }]
471
- });
472
- });
473
- it("should delete an item, removing it from the list", async () => {
474
- const {
475
- presenter,
476
- controllers
477
- } = init(listGateway, deleteItemGateway, restoreItemGateway);
478
-
479
- // let's list some entries from the gateway
480
- await controllers.listItems.execute();
481
- expect(listGateway.execute).toHaveBeenCalledTimes(1);
482
- expect(presenter.vm).toMatchObject({
483
- items: [{
484
- id: "item-1",
485
- title: "Item 1",
486
- location: {
487
- folderId: "folder-a"
488
- },
489
- createdBy: identity1,
490
- deletedBy: identity2,
491
- deletedOn: expect.any(String)
492
- }, {
493
- id: "item-2",
494
- title: "Item 2",
495
- location: {
496
- folderId: "folder-a"
497
- },
498
- createdBy: identity1,
499
- deletedBy: identity1,
500
- deletedOn: expect.any(String)
501
- }, {
502
- id: "item-3",
503
- title: "Item 3",
504
- location: {
505
- folderId: "folder-b"
506
- },
507
- createdBy: identity2,
508
- deletedBy: identity2,
509
- deletedOn: expect.any(String)
510
- }]
511
- });
512
- const deletePromise = controllers.deleteItem.execute(item1.id);
513
-
514
- // Let's check the transition to loading state
515
- expect(presenter.vm).toMatchObject({
516
- loading: {
517
- [LoadingActions.delete]: true
518
- }
519
- });
520
- await deletePromise;
521
- expect(deleteItemGateway.execute).toHaveBeenCalledTimes(1);
522
- expect(deleteItemGateway.execute).toHaveBeenCalledWith(item1.id);
523
- expect(presenter.vm).toMatchObject({
524
- items: [{
525
- id: "item-2",
526
- title: "Item 2",
527
- location: {
528
- folderId: "folder-a"
529
- },
530
- createdBy: identity1,
531
- deletedBy: identity1,
532
- deletedOn: expect.any(String)
533
- }, {
534
- id: "item-3",
535
- title: "Item 3",
536
- location: {
537
- folderId: "folder-b"
538
- },
539
- createdBy: identity2,
540
- deletedBy: identity2,
541
- deletedOn: expect.any(String)
542
- }]
543
- });
544
- });
545
- it("should restore an item, removing it from the list", async () => {
546
- const {
547
- presenter,
548
- controllers
549
- } = init(listGateway, deleteItemGateway, restoreItemGateway);
550
-
551
- // let's list some entries from the gateway
552
- await controllers.listItems.execute();
553
- expect(listGateway.execute).toHaveBeenCalledTimes(1);
554
- expect(presenter.vm).toMatchObject({
555
- items: [{
32
+ class CustomItemMapper {
33
+ toDTO(data) {
34
+ return {
35
+ id: data.id,
36
+ title: data.title,
37
+ location: data.location,
38
+ createdBy: data.createdBy,
39
+ deletedOn: data.deletedOn,
40
+ deletedBy: data.deletedBy
41
+ };
42
+ }
43
+ }
44
+ const defaultSorting = [
45
+ {
46
+ field: "deletedOn",
47
+ order: "desc"
48
+ }
49
+ ];
50
+ describe("TrashBin", ()=>{
51
+ const item1 = {
556
52
  id: "item-1",
557
53
  title: "Item 1",
558
54
  location: {
559
- folderId: "folder-a"
55
+ folderId: "folder-a"
560
56
  },
561
57
  createdBy: identity1,
562
58
  deletedBy: identity2,
563
- deletedOn: expect.any(String)
564
- }, {
59
+ deletedOn: new Date().toString(),
60
+ custom: "any custom data"
61
+ };
62
+ const item2 = {
565
63
  id: "item-2",
566
64
  title: "Item 2",
567
65
  location: {
568
- folderId: "folder-a"
66
+ folderId: "folder-a"
569
67
  },
570
68
  createdBy: identity1,
571
69
  deletedBy: identity1,
572
- deletedOn: expect.any(String)
573
- }, {
70
+ deletedOn: new Date().toString(),
71
+ custom: "any custom data"
72
+ };
73
+ const item3 = {
574
74
  id: "item-3",
575
75
  title: "Item 3",
576
76
  location: {
577
- folderId: "folder-b"
77
+ folderId: "folder-b"
578
78
  },
579
79
  createdBy: identity2,
580
80
  deletedBy: identity2,
581
- deletedOn: expect.any(String)
582
- }]
583
- });
584
- const restorePromise = controllers.restoreItem.execute(item1.id);
585
-
586
- // Let's check the transition to loading state
587
- expect(presenter.vm).toMatchObject({
588
- loading: {
589
- [LoadingActions.restore]: true
590
- }
591
- });
592
- await restorePromise;
593
- expect(restoreItemGateway.execute).toHaveBeenCalledTimes(1);
594
- expect(restoreItemGateway.execute).toHaveBeenCalledWith(item1.id);
595
- expect(presenter.vm).toMatchObject({
596
- items: [{
597
- id: "item-2",
598
- title: "Item 2",
81
+ deletedOn: new Date().toString(),
82
+ custom: "any custom data"
83
+ };
84
+ const item4 = {
85
+ id: "item-4",
86
+ title: "Item 4",
599
87
  location: {
600
- folderId: "folder-a"
88
+ folderId: "folder-b"
601
89
  },
602
90
  createdBy: identity1,
603
91
  deletedBy: identity1,
604
- deletedOn: expect.any(String)
605
- }, {
606
- id: "item-3",
607
- title: "Item 3",
608
- location: {
609
- folderId: "folder-b"
610
- },
611
- createdBy: identity2,
612
- deletedBy: identity2,
613
- deletedOn: expect.any(String)
614
- }],
615
- restoredItems: [{
616
- id: "item-1",
617
- title: "Item 1",
618
- location: {
619
- folderId: "folder-a"
620
- },
621
- createdBy: identity1,
622
- deletedBy: identity2,
623
- deletedOn: expect.any(String)
624
- }]
625
- });
626
-
627
- // We should be able to get the restored item by id
628
- const restoredItem = await controllers.getRestoredItemById.execute("item-1");
629
- expect(restoredItem).toMatchObject({
630
- id: "item-1",
631
- title: "Item 1",
632
- location: {
633
- folderId: "folder-a"
634
- },
635
- createdBy: identity1,
636
- deletedBy: identity2,
637
- deletedOn: expect.any(String)
638
- });
639
- });
640
- it.each([[0, "0 days"], [1, "1 day"], [2, "2 days"]])("should set the retention period to `%s` when input is `%i`", (input, output) => {
641
- const {
642
- presenter
643
- } = init(listGateway, deleteItemGateway, restoreItemGateway, input);
644
- expect(presenter.vm).toMatchObject({
645
- retentionPeriod: output
646
- });
647
- });
648
- it("should be able to perform bulk action - RESTORE", async () => {
649
- const {
650
- controllers
651
- } = init(listGateway, deleteItemGateway, restoreItemGateway);
652
-
653
- // let's list some entries from the gateway
654
- await controllers.listItems.execute();
655
- expect(listGateway.execute).toHaveBeenCalledTimes(1);
656
- const restoreBulkActionPromise = controllers.restoreBulkAction.execute({
657
- search: "Custom search",
658
- where: {
659
- title: "Item title"
660
- },
661
- data: {
662
- any: 1
663
- }
664
- });
665
- await restoreBulkActionPromise;
666
- expect(bulkActionGateway.execute).toHaveBeenCalledTimes(1);
667
- expect(bulkActionGateway.execute).toHaveBeenCalledWith({
668
- action: BulkActionRestoreItems,
669
- search: "Custom search",
670
- where: {
671
- title: "Item title"
672
- },
673
- data: {
674
- any: 1
675
- }
676
- });
677
- });
678
- it("should be able to perform bulk action - DELETE", async () => {
679
- const {
680
- controllers
681
- } = init(listGateway, deleteItemGateway, restoreItemGateway);
682
-
683
- // let's list some entries from the gateway
684
- await controllers.listItems.execute();
685
- expect(listGateway.execute).toHaveBeenCalledTimes(1);
686
- const deleteBulkActionPromise = controllers.deleteBulkAction.execute({
687
- search: "Custom search",
688
- where: {
689
- title: "Item title"
690
- },
691
- data: {
692
- any: 1
693
- }
694
- });
695
- await deleteBulkActionPromise;
696
- expect(bulkActionGateway.execute).toHaveBeenCalledTimes(1);
697
- expect(bulkActionGateway.execute).toHaveBeenCalledWith({
698
- action: BulkActionDeleteItems,
699
- search: "Custom search",
700
- where: {
701
- title: "Item title"
702
- },
703
- data: {
704
- any: 1
705
- }
92
+ deletedOn: new Date().toString(),
93
+ custom: "any custom data"
94
+ };
95
+ const listGateway = createBinListGateway({
96
+ execute: vi.fn().mockImplementation(()=>Promise.resolve([
97
+ [
98
+ item1,
99
+ item2,
100
+ item3
101
+ ],
102
+ {
103
+ totalCount: 3,
104
+ cursor: null,
105
+ hasMoreItems: false
106
+ }
107
+ ]))
108
+ });
109
+ const deleteItemGateway = createBinDeleteItemGateway({
110
+ execute: vi.fn().mockImplementation(()=>Promise.resolve(true))
111
+ });
112
+ const restoreItemGateway = createBinRestoreItemGateway({
113
+ execute: vi.fn().mockImplementation(()=>Promise.resolve(item1))
114
+ });
115
+ const bulkActionGateway = createBinBulkActionsGateway({
116
+ execute: vi.fn().mockImplementation(()=>Promise.resolve({
117
+ id: "123456789"
118
+ }))
119
+ });
120
+ const itemMapper = new CustomItemMapper();
121
+ const BulkActionDeleteItems = "BulkDeleteItems";
122
+ const BulkActionRestoreItems = "BulkRestoreItems";
123
+ const init = (listGateway, deleteItemGateway, restoreItemGateway, retentionPeriod = 90)=>{
124
+ const selectedRepo = new SelectedItemsRepository();
125
+ const loadingRepo = new LoadingRepository();
126
+ const sortRepo = new SortingRepository();
127
+ const sortRepoWithDefaults = new SortingRepositoryWithDefaults(defaultSorting, sortRepo);
128
+ const metaRepo = new MetaRepository();
129
+ const searchRepo = new SearchRepository();
130
+ const trashBinItemsRepo = new TrashBinItemsRepository(metaRepo, listGateway, deleteItemGateway, restoreItemGateway, bulkActionGateway, itemMapper);
131
+ const itemsRepo = new TrashBinItemsRepositoryWithLoading(loadingRepo, trashBinItemsRepo);
132
+ return {
133
+ presenter: new TrashBinPresenter(itemsRepo, selectedRepo, sortRepoWithDefaults, searchRepo, retentionPeriod),
134
+ controllers: new TrashBinControllers(itemsRepo, selectedRepo, sortRepoWithDefaults, searchRepo, BulkActionDeleteItems, BulkActionRestoreItems).getControllers()
135
+ };
136
+ };
137
+ beforeEach(()=>{
138
+ vi.clearAllMocks();
139
+ });
140
+ it("should create a presenter and list trash bin entries from the gateway", async ()=>{
141
+ const { presenter, controllers } = init(listGateway, deleteItemGateway, restoreItemGateway);
142
+ const listPromise = controllers.listItems.execute();
143
+ expect(presenter.vm).toMatchObject({
144
+ items: [],
145
+ loading: {
146
+ [LoadingActions.list]: true
147
+ }
148
+ });
149
+ await listPromise;
150
+ expect(listGateway.execute).toHaveBeenCalledTimes(1);
151
+ expect(listGateway.execute).toHaveBeenCalledWith({
152
+ sort: [
153
+ "deletedOn_DESC"
154
+ ]
155
+ });
156
+ expect(presenter.vm).toMatchObject({
157
+ items: [
158
+ {
159
+ id: "item-1",
160
+ title: "Item 1",
161
+ createdBy: identity1,
162
+ deletedBy: identity2,
163
+ deletedOn: expect.any(String)
164
+ },
165
+ {
166
+ id: "item-2",
167
+ title: "Item 2",
168
+ createdBy: identity1,
169
+ deletedBy: identity1,
170
+ deletedOn: expect.any(String)
171
+ },
172
+ {
173
+ id: "item-3",
174
+ title: "Item 3",
175
+ createdBy: identity2,
176
+ deletedBy: identity2,
177
+ deletedOn: expect.any(String)
178
+ }
179
+ ],
180
+ loading: {
181
+ [LoadingActions.list]: false
182
+ }
183
+ });
184
+ });
185
+ it("should list more items from the gateway", async ()=>{
186
+ const listGateway = createBinListGateway({
187
+ execute: vi.fn().mockImplementationOnce(()=>Promise.resolve([
188
+ [
189
+ item1,
190
+ item2,
191
+ item3
192
+ ],
193
+ {
194
+ totalCount: 4,
195
+ cursor: "IjMi",
196
+ hasMoreItems: true
197
+ }
198
+ ])).mockImplementationOnce(()=>Promise.resolve([
199
+ [
200
+ item4
201
+ ],
202
+ {
203
+ totalCount: 4,
204
+ cursor: null,
205
+ hasMoreItems: false
206
+ }
207
+ ]))
208
+ });
209
+ const { presenter, controllers } = init(listGateway, deleteItemGateway, restoreItemGateway);
210
+ await controllers.listItems.execute();
211
+ expect(listGateway.execute).toHaveBeenCalledTimes(1);
212
+ const listMorePromise = controllers.listMoreItems.execute();
213
+ expect(presenter.vm).toMatchObject({
214
+ loading: {
215
+ [LoadingActions.listMore]: true
216
+ }
217
+ });
218
+ await listMorePromise;
219
+ expect(listGateway.execute).toHaveBeenCalledTimes(2);
220
+ expect(listGateway.execute).toHaveBeenCalledWith({
221
+ after: "IjMi",
222
+ search: void 0,
223
+ sort: [
224
+ "deletedOn_DESC"
225
+ ]
226
+ });
227
+ expect(presenter.vm).toMatchObject({
228
+ items: [
229
+ {
230
+ id: "item-1",
231
+ title: "Item 1",
232
+ createdBy: identity1,
233
+ deletedBy: identity2,
234
+ deletedOn: expect.any(String)
235
+ },
236
+ {
237
+ id: "item-2",
238
+ title: "Item 2",
239
+ createdBy: identity1,
240
+ deletedBy: identity1,
241
+ deletedOn: expect.any(String)
242
+ },
243
+ {
244
+ id: "item-3",
245
+ title: "Item 3",
246
+ createdBy: identity2,
247
+ deletedBy: identity2,
248
+ deletedOn: expect.any(String)
249
+ },
250
+ {
251
+ id: "item-4",
252
+ title: "Item 4",
253
+ createdBy: identity1,
254
+ deletedBy: identity1,
255
+ deletedOn: expect.any(String)
256
+ }
257
+ ],
258
+ loading: {
259
+ [LoadingActions.listMore]: false
260
+ }
261
+ });
262
+ });
263
+ it("should be able to sort items", async ()=>{
264
+ const sortListGateway = createBinListGateway({
265
+ execute: vi.fn().mockImplementationOnce(()=>Promise.resolve([
266
+ [
267
+ item1,
268
+ item2,
269
+ item3
270
+ ],
271
+ {
272
+ totalCount: 3,
273
+ cursor: null,
274
+ hasMoreItems: false
275
+ }
276
+ ])).mockImplementation(()=>Promise.resolve([
277
+ [
278
+ item3,
279
+ item2,
280
+ item1
281
+ ],
282
+ {
283
+ totalCount: 3,
284
+ cursor: null,
285
+ hasMoreItems: false
286
+ }
287
+ ]))
288
+ });
289
+ const { presenter, controllers } = init(sortListGateway, deleteItemGateway, restoreItemGateway);
290
+ await controllers.listItems.execute();
291
+ expect(sortListGateway.execute).toHaveBeenNthCalledWith(1, {
292
+ sort: [
293
+ "deletedOn_DESC"
294
+ ]
295
+ });
296
+ await controllers.sortItems.execute(()=>[
297
+ {
298
+ id: "deletedOn",
299
+ desc: false
300
+ }
301
+ ]);
302
+ expect(sortListGateway.execute).toHaveBeenNthCalledWith(2, {
303
+ sort: [
304
+ "deletedOn_ASC"
305
+ ]
306
+ });
307
+ expect(presenter.vm).toMatchObject({
308
+ items: [
309
+ {
310
+ id: "item-3",
311
+ title: "Item 3",
312
+ createdBy: identity2,
313
+ deletedBy: identity2,
314
+ deletedOn: expect.any(String)
315
+ },
316
+ {
317
+ id: "item-2",
318
+ title: "Item 2",
319
+ createdBy: identity1,
320
+ deletedBy: identity1,
321
+ deletedOn: expect.any(String)
322
+ },
323
+ {
324
+ id: "item-1",
325
+ title: "Item 1",
326
+ createdBy: identity1,
327
+ deletedBy: identity2,
328
+ deletedOn: expect.any(String)
329
+ }
330
+ ],
331
+ loading: {
332
+ [LoadingActions.list]: false
333
+ },
334
+ sorting: [
335
+ {
336
+ id: "deletedOn",
337
+ desc: false
338
+ }
339
+ ]
340
+ });
341
+ });
342
+ it("should be able to search items", async ()=>{
343
+ const searchItemsGateway = createBinListGateway({
344
+ execute: vi.fn().mockImplementationOnce(()=>Promise.resolve([
345
+ [
346
+ item1,
347
+ item2,
348
+ item3
349
+ ],
350
+ {
351
+ totalCount: 3,
352
+ cursor: null,
353
+ hasMoreItems: false
354
+ }
355
+ ])).mockImplementationOnce(()=>Promise.resolve([
356
+ [
357
+ item1
358
+ ],
359
+ {
360
+ totalCount: 1,
361
+ cursor: null,
362
+ hasMoreItems: false
363
+ }
364
+ ])).mockImplementationOnce(()=>Promise.resolve([
365
+ [],
366
+ {
367
+ totalCount: 0,
368
+ cursor: null,
369
+ hasMoreItems: false
370
+ }
371
+ ]))
372
+ });
373
+ const { presenter, controllers } = init(searchItemsGateway, deleteItemGateway, restoreItemGateway);
374
+ await controllers.listItems.execute();
375
+ expect(searchItemsGateway.execute).toHaveBeenNthCalledWith(1, {
376
+ sort: [
377
+ "deletedOn_DESC"
378
+ ]
379
+ });
380
+ await controllers.searchItems.execute("Item 1");
381
+ expect(searchItemsGateway.execute).toHaveBeenNthCalledWith(2, {
382
+ sort: [
383
+ "deletedOn_DESC"
384
+ ],
385
+ search: "Item 1"
386
+ });
387
+ expect(presenter.vm).toMatchObject({
388
+ items: [
389
+ {
390
+ id: "item-1",
391
+ title: "Item 1",
392
+ createdBy: identity1,
393
+ deletedBy: identity2,
394
+ deletedOn: expect.any(String)
395
+ }
396
+ ],
397
+ loading: {
398
+ [LoadingActions.list]: false
399
+ },
400
+ searchQuery: "Item 1"
401
+ });
402
+ await controllers.searchItems.execute("Not found query");
403
+ expect(searchItemsGateway.execute).toHaveBeenNthCalledWith(3, {
404
+ sort: [
405
+ "deletedOn_DESC"
406
+ ],
407
+ search: "Not found query"
408
+ });
409
+ expect(presenter.vm).toMatchObject({
410
+ items: [],
411
+ loading: {
412
+ [LoadingActions.list]: false
413
+ },
414
+ searchQuery: "Not found query",
415
+ isEmptyView: true
416
+ });
417
+ });
418
+ it("should be able to select items", async ()=>{
419
+ const { presenter, controllers } = init(listGateway, deleteItemGateway, restoreItemGateway);
420
+ await controllers.listItems.execute();
421
+ expect(presenter.vm).toMatchObject({
422
+ selectedItems: []
423
+ });
424
+ await controllers.selectItems.execute([
425
+ {
426
+ id: "item-1",
427
+ title: "Item 1",
428
+ location: {
429
+ folderId: "folder-a"
430
+ },
431
+ createdBy: identity1,
432
+ deletedBy: identity2,
433
+ deletedOn: new Date().toString()
434
+ }
435
+ ]);
436
+ expect(presenter.vm).toMatchObject({
437
+ selectedItems: [
438
+ {
439
+ id: "item-1",
440
+ title: "Item 1",
441
+ location: {
442
+ folderId: "folder-a"
443
+ },
444
+ createdBy: identity1,
445
+ deletedBy: identity2,
446
+ deletedOn: expect.any(String)
447
+ }
448
+ ]
449
+ });
450
+ await controllers.selectItems.execute([
451
+ {
452
+ id: "item-1",
453
+ title: "Item 1",
454
+ location: {
455
+ folderId: "folder-a"
456
+ },
457
+ createdBy: identity1,
458
+ deletedBy: identity2,
459
+ deletedOn: new Date().toString()
460
+ },
461
+ {
462
+ id: "item-2",
463
+ title: "Item 2",
464
+ location: {
465
+ folderId: "folder-a"
466
+ },
467
+ createdBy: identity1,
468
+ deletedBy: identity1,
469
+ deletedOn: new Date().toString()
470
+ }
471
+ ]);
472
+ expect(presenter.vm).toMatchObject({
473
+ selectedItems: [
474
+ {
475
+ id: "item-1",
476
+ title: "Item 1",
477
+ location: {
478
+ folderId: "folder-a"
479
+ },
480
+ createdBy: identity1,
481
+ deletedBy: identity2,
482
+ deletedOn: expect.any(String)
483
+ },
484
+ {
485
+ id: "item-2",
486
+ title: "Item 2",
487
+ location: {
488
+ folderId: "folder-a"
489
+ },
490
+ createdBy: identity1,
491
+ deletedBy: identity1,
492
+ deletedOn: expect.any(String)
493
+ }
494
+ ]
495
+ });
496
+ });
497
+ it("should delete an item, removing it from the list", async ()=>{
498
+ const { presenter, controllers } = init(listGateway, deleteItemGateway, restoreItemGateway);
499
+ await controllers.listItems.execute();
500
+ expect(listGateway.execute).toHaveBeenCalledTimes(1);
501
+ expect(presenter.vm).toMatchObject({
502
+ items: [
503
+ {
504
+ id: "item-1",
505
+ title: "Item 1",
506
+ location: {
507
+ folderId: "folder-a"
508
+ },
509
+ createdBy: identity1,
510
+ deletedBy: identity2,
511
+ deletedOn: expect.any(String)
512
+ },
513
+ {
514
+ id: "item-2",
515
+ title: "Item 2",
516
+ location: {
517
+ folderId: "folder-a"
518
+ },
519
+ createdBy: identity1,
520
+ deletedBy: identity1,
521
+ deletedOn: expect.any(String)
522
+ },
523
+ {
524
+ id: "item-3",
525
+ title: "Item 3",
526
+ location: {
527
+ folderId: "folder-b"
528
+ },
529
+ createdBy: identity2,
530
+ deletedBy: identity2,
531
+ deletedOn: expect.any(String)
532
+ }
533
+ ]
534
+ });
535
+ const deletePromise = controllers.deleteItem.execute(item1.id);
536
+ expect(presenter.vm).toMatchObject({
537
+ loading: {
538
+ [LoadingActions["delete"]]: true
539
+ }
540
+ });
541
+ await deletePromise;
542
+ expect(deleteItemGateway.execute).toHaveBeenCalledTimes(1);
543
+ expect(deleteItemGateway.execute).toHaveBeenCalledWith(item1.id);
544
+ expect(presenter.vm).toMatchObject({
545
+ items: [
546
+ {
547
+ id: "item-2",
548
+ title: "Item 2",
549
+ location: {
550
+ folderId: "folder-a"
551
+ },
552
+ createdBy: identity1,
553
+ deletedBy: identity1,
554
+ deletedOn: expect.any(String)
555
+ },
556
+ {
557
+ id: "item-3",
558
+ title: "Item 3",
559
+ location: {
560
+ folderId: "folder-b"
561
+ },
562
+ createdBy: identity2,
563
+ deletedBy: identity2,
564
+ deletedOn: expect.any(String)
565
+ }
566
+ ]
567
+ });
568
+ });
569
+ it("should restore an item, removing it from the list", async ()=>{
570
+ const { presenter, controllers } = init(listGateway, deleteItemGateway, restoreItemGateway);
571
+ await controllers.listItems.execute();
572
+ expect(listGateway.execute).toHaveBeenCalledTimes(1);
573
+ expect(presenter.vm).toMatchObject({
574
+ items: [
575
+ {
576
+ id: "item-1",
577
+ title: "Item 1",
578
+ location: {
579
+ folderId: "folder-a"
580
+ },
581
+ createdBy: identity1,
582
+ deletedBy: identity2,
583
+ deletedOn: expect.any(String)
584
+ },
585
+ {
586
+ id: "item-2",
587
+ title: "Item 2",
588
+ location: {
589
+ folderId: "folder-a"
590
+ },
591
+ createdBy: identity1,
592
+ deletedBy: identity1,
593
+ deletedOn: expect.any(String)
594
+ },
595
+ {
596
+ id: "item-3",
597
+ title: "Item 3",
598
+ location: {
599
+ folderId: "folder-b"
600
+ },
601
+ createdBy: identity2,
602
+ deletedBy: identity2,
603
+ deletedOn: expect.any(String)
604
+ }
605
+ ]
606
+ });
607
+ const restorePromise = controllers.restoreItem.execute(item1.id);
608
+ expect(presenter.vm).toMatchObject({
609
+ loading: {
610
+ [LoadingActions.restore]: true
611
+ }
612
+ });
613
+ await restorePromise;
614
+ expect(restoreItemGateway.execute).toHaveBeenCalledTimes(1);
615
+ expect(restoreItemGateway.execute).toHaveBeenCalledWith(item1.id);
616
+ expect(presenter.vm).toMatchObject({
617
+ items: [
618
+ {
619
+ id: "item-2",
620
+ title: "Item 2",
621
+ location: {
622
+ folderId: "folder-a"
623
+ },
624
+ createdBy: identity1,
625
+ deletedBy: identity1,
626
+ deletedOn: expect.any(String)
627
+ },
628
+ {
629
+ id: "item-3",
630
+ title: "Item 3",
631
+ location: {
632
+ folderId: "folder-b"
633
+ },
634
+ createdBy: identity2,
635
+ deletedBy: identity2,
636
+ deletedOn: expect.any(String)
637
+ }
638
+ ],
639
+ restoredItems: [
640
+ {
641
+ id: "item-1",
642
+ title: "Item 1",
643
+ location: {
644
+ folderId: "folder-a"
645
+ },
646
+ createdBy: identity1,
647
+ deletedBy: identity2,
648
+ deletedOn: expect.any(String)
649
+ }
650
+ ]
651
+ });
652
+ const restoredItem = await controllers.getRestoredItemById.execute("item-1");
653
+ expect(restoredItem).toMatchObject({
654
+ id: "item-1",
655
+ title: "Item 1",
656
+ location: {
657
+ folderId: "folder-a"
658
+ },
659
+ createdBy: identity1,
660
+ deletedBy: identity2,
661
+ deletedOn: expect.any(String)
662
+ });
663
+ });
664
+ it.each([
665
+ [
666
+ 0,
667
+ "0 days"
668
+ ],
669
+ [
670
+ 1,
671
+ "1 day"
672
+ ],
673
+ [
674
+ 2,
675
+ "2 days"
676
+ ]
677
+ ])("should set the retention period to `%s` when input is `%i`", (input, output)=>{
678
+ const { presenter } = init(listGateway, deleteItemGateway, restoreItemGateway, input);
679
+ expect(presenter.vm).toMatchObject({
680
+ retentionPeriod: output
681
+ });
682
+ });
683
+ it("should be able to perform bulk action - RESTORE", async ()=>{
684
+ const { controllers } = init(listGateway, deleteItemGateway, restoreItemGateway);
685
+ await controllers.listItems.execute();
686
+ expect(listGateway.execute).toHaveBeenCalledTimes(1);
687
+ const restoreBulkActionPromise = controllers.restoreBulkAction.execute({
688
+ search: "Custom search",
689
+ where: {
690
+ title: "Item title"
691
+ },
692
+ data: {
693
+ any: 1
694
+ }
695
+ });
696
+ await restoreBulkActionPromise;
697
+ expect(bulkActionGateway.execute).toHaveBeenCalledTimes(1);
698
+ expect(bulkActionGateway.execute).toHaveBeenCalledWith({
699
+ action: BulkActionRestoreItems,
700
+ search: "Custom search",
701
+ where: {
702
+ title: "Item title"
703
+ },
704
+ data: {
705
+ any: 1
706
+ }
707
+ });
708
+ });
709
+ it("should be able to perform bulk action - DELETE", async ()=>{
710
+ const { controllers } = init(listGateway, deleteItemGateway, restoreItemGateway);
711
+ await controllers.listItems.execute();
712
+ expect(listGateway.execute).toHaveBeenCalledTimes(1);
713
+ const deleteBulkActionPromise = controllers.deleteBulkAction.execute({
714
+ search: "Custom search",
715
+ where: {
716
+ title: "Item title"
717
+ },
718
+ data: {
719
+ any: 1
720
+ }
721
+ });
722
+ await deleteBulkActionPromise;
723
+ expect(bulkActionGateway.execute).toHaveBeenCalledTimes(1);
724
+ expect(bulkActionGateway.execute).toHaveBeenCalledWith({
725
+ action: BulkActionDeleteItems,
726
+ search: "Custom search",
727
+ where: {
728
+ title: "Item title"
729
+ },
730
+ data: {
731
+ any: 1
732
+ }
733
+ });
734
+ });
735
+ it("should be able to `selectAll` and `unselectAll` items", async ()=>{
736
+ {
737
+ const listGateway = createBinListGateway({
738
+ execute: vi.fn().mockImplementation(()=>Promise.resolve([
739
+ [
740
+ item1,
741
+ item2,
742
+ item3
743
+ ],
744
+ {
745
+ totalCount: 4,
746
+ cursor: "IjMi",
747
+ hasMoreItems: true
748
+ }
749
+ ]))
750
+ });
751
+ const { presenter, controllers } = init(listGateway, deleteItemGateway, restoreItemGateway);
752
+ await controllers.listItems.execute();
753
+ expect(listGateway.execute).toHaveBeenCalledTimes(1);
754
+ expect(presenter.vm.items.length).toBe(3);
755
+ expect(presenter.vm.selectedItems.length).toBe(0);
756
+ expect(presenter.vm.allowSelectAll).toBeFalsy();
757
+ expect(presenter.vm.isSelectedAll).toBeFalsy();
758
+ await controllers.selectItems.execute([
759
+ item1,
760
+ item2,
761
+ item3
762
+ ]);
763
+ expect(presenter.vm.selectedItems.length).toBe(3);
764
+ expect(presenter.vm.allowSelectAll).toBeTruthy();
765
+ expect(presenter.vm.isSelectedAll).toBeFalsy();
766
+ await controllers.selectAllItems.execute();
767
+ expect(presenter.vm.selectedItems.length).toBe(3);
768
+ expect(presenter.vm.allowSelectAll).toBeTruthy();
769
+ expect(presenter.vm.isSelectedAll).toBeTruthy();
770
+ await controllers.unselectAllItems.execute();
771
+ expect(presenter.vm.selectedItems.length).toBe(0);
772
+ expect(presenter.vm.allowSelectAll).toBeFalsy();
773
+ expect(presenter.vm.isSelectedAll).toBeFalsy();
774
+ await controllers.selectItems.execute([
775
+ item1,
776
+ item2,
777
+ item3
778
+ ]);
779
+ expect(presenter.vm.selectedItems.length).toBe(3);
780
+ await controllers.selectAllItems.execute();
781
+ expect(presenter.vm.isSelectedAll).toBeTruthy();
782
+ await controllers.selectItems.execute([
783
+ item1,
784
+ item2
785
+ ]);
786
+ expect(presenter.vm.isSelectedAll).toBeFalsy();
787
+ expect(presenter.vm.allowSelectAll).toBeFalsy();
788
+ }
789
+ {
790
+ const listGateway = createBinListGateway({
791
+ execute: vi.fn().mockImplementation(()=>Promise.resolve([
792
+ [
793
+ item1,
794
+ item2,
795
+ item3
796
+ ],
797
+ {
798
+ totalCount: 3,
799
+ cursor: null,
800
+ hasMoreItems: false
801
+ }
802
+ ]))
803
+ });
804
+ const { presenter, controllers } = init(listGateway, deleteItemGateway, restoreItemGateway);
805
+ await controllers.listItems.execute();
806
+ expect(listGateway.execute).toHaveBeenCalledTimes(1);
807
+ expect(presenter.vm.items.length).toBe(3);
808
+ await controllers.selectItems.execute([
809
+ item1,
810
+ item2,
811
+ item3
812
+ ]);
813
+ expect(presenter.vm.selectedItems.length).toBe(3);
814
+ expect(presenter.vm.allowSelectAll).toBeFalsy();
815
+ expect(presenter.vm.isSelectedAll).toBeFalsy();
816
+ }
706
817
  });
707
- });
708
- it("should be able to `selectAll` and `unselectAll` items", async () => {
709
- {
710
- // let's test the functionality by listing items that span multiple pages.
711
- const listGateway = createBinListGateway({
712
- execute: vi.fn().mockImplementation(() => {
713
- return Promise.resolve([[item1, item2, item3], {
714
- totalCount: 4,
715
- cursor: "IjMi",
716
- hasMoreItems: true
717
- }]);
718
- })
719
- });
720
- const {
721
- presenter,
722
- controllers
723
- } = init(listGateway, deleteItemGateway, restoreItemGateway);
724
-
725
- // let's list some entries from the gateway
726
- await controllers.listItems.execute();
727
- expect(listGateway.execute).toHaveBeenCalledTimes(1);
728
-
729
- // let's check the initial vm state
730
- expect(presenter.vm.items.length).toBe(3);
731
- expect(presenter.vm.selectedItems.length).toBe(0);
732
- expect(presenter.vm.allowSelectAll).toBeFalsy();
733
- expect(presenter.vm.isSelectedAll).toBeFalsy();
734
-
735
- // let's check the vm state after selecting all items on the page
736
- await controllers.selectItems.execute([item1, item2, item3]);
737
- expect(presenter.vm.selectedItems.length).toBe(3);
738
- expect(presenter.vm.allowSelectAll).toBeTruthy();
739
- expect(presenter.vm.isSelectedAll).toBeFalsy();
740
-
741
- // let's check the vm state after selecting all items
742
- await controllers.selectAllItems.execute();
743
- expect(presenter.vm.selectedItems.length).toBe(3);
744
- expect(presenter.vm.allowSelectAll).toBeTruthy();
745
- expect(presenter.vm.isSelectedAll).toBeTruthy();
746
-
747
- // let's check the vm state after unselecting all items
748
- await controllers.unselectAllItems.execute();
749
- expect(presenter.vm.selectedItems.length).toBe(0);
750
- expect(presenter.vm.allowSelectAll).toBeFalsy();
751
- expect(presenter.vm.isSelectedAll).toBeFalsy();
752
-
753
- // let's check the vm state after unselecting one item
754
- await controllers.selectItems.execute([item1, item2, item3]);
755
- expect(presenter.vm.selectedItems.length).toBe(3);
756
- await controllers.selectAllItems.execute();
757
- expect(presenter.vm.isSelectedAll).toBeTruthy();
758
- await controllers.selectItems.execute([item1, item2]);
759
- expect(presenter.vm.isSelectedAll).toBeFalsy();
760
- expect(presenter.vm.allowSelectAll).toBeFalsy();
761
- }
762
- {
763
- // let's test the functionality by listing items that span only one page.
764
- const listGateway = createBinListGateway({
765
- execute: vi.fn().mockImplementation(() => {
766
- return Promise.resolve([[item1, item2, item3], {
767
- totalCount: 3,
768
- cursor: null,
769
- hasMoreItems: false
770
- }]);
771
- })
772
- });
773
- const {
774
- presenter,
775
- controllers
776
- } = init(listGateway, deleteItemGateway, restoreItemGateway);
777
-
778
- // let's list some entries from the gateway
779
- await controllers.listItems.execute();
780
- expect(listGateway.execute).toHaveBeenCalledTimes(1);
781
-
782
- // let's check the initial vm state
783
- expect(presenter.vm.items.length).toBe(3);
784
-
785
- // let's check the vm state after selecting all items in the page
786
- await controllers.selectItems.execute([item1, item2, item3]);
787
- expect(presenter.vm.selectedItems.length).toBe(3);
788
- expect(presenter.vm.allowSelectAll).toBeFalsy();
789
- expect(presenter.vm.isSelectedAll).toBeFalsy();
790
- }
791
- });
792
818
  });
793
819
 
794
820
  //# sourceMappingURL=TrashBin.test.js.map