@aws-amplify/ui-react-storage 3.10.2 → 3.11.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 (313) hide show
  1. package/README.md +23 -15
  2. package/dist/browser.js +1 -1
  3. package/dist/{createStorageBrowser-Cbdy8OAN.js → createStorageBrowser-CVfazB4S.js} +193 -207
  4. package/dist/esm/components/StorageBrowser/actions/handlers/listLocations.mjs +1 -1
  5. package/dist/esm/components/StorageBrowser/createStorageBrowser/StorageBrowserDefault.mjs +1 -1
  6. package/dist/esm/components/StorageBrowser/createStorageBrowser/createProvider.mjs +5 -3
  7. package/dist/esm/components/StorageBrowser/createStorageBrowser/createStorageBrowser.mjs +1 -1
  8. package/dist/esm/components/StorageBrowser/displayText/libraries/en/uploadView.mjs +3 -6
  9. package/dist/esm/components/StorageBrowser/fileItems/constants.mjs +11 -0
  10. package/dist/esm/components/StorageBrowser/fileItems/context.mjs +42 -0
  11. package/dist/esm/components/StorageBrowser/fileItems/fileItemsReducer.mjs +33 -0
  12. package/dist/esm/components/StorageBrowser/fileItems/utils.mjs +55 -0
  13. package/dist/esm/components/StorageBrowser/useAction/createEnhancedListHandler.mjs +20 -101
  14. package/dist/esm/components/StorageBrowser/useAction/searchItems.mjs +74 -0
  15. package/dist/esm/components/StorageBrowser/useAction/useListLocationItems.mjs +1 -0
  16. package/dist/esm/components/StorageBrowser/views/LocationActionView/CopyView/CopyViewProvider.mjs +3 -2
  17. package/dist/esm/components/StorageBrowser/views/LocationActionView/CopyView/useFolders.mjs +1 -2
  18. package/dist/esm/components/StorageBrowser/views/LocationActionView/CreateFolderView/CreateFolderViewProvider.mjs +0 -1
  19. package/dist/esm/components/StorageBrowser/views/LocationActionView/DeleteView/DeleteViewProvider.mjs +4 -3
  20. package/dist/esm/components/StorageBrowser/views/LocationActionView/UploadView/useUploadView.mjs +13 -34
  21. package/dist/esm/components/StorageBrowser/views/LocationDetailView/LocationDetailViewProvider.mjs +0 -1
  22. package/dist/esm/components/StorageBrowser/views/LocationDetailView/useLocationDetailView.mjs +4 -5
  23. package/dist/esm/components/StorageBrowser/views/LocationsView/useLocationsView.mjs +1 -2
  24. package/dist/esm/components/StorageBrowser/views/context/actionViews.mjs +1 -1
  25. package/dist/esm/components/StorageBrowser/views/context/primaryViews.mjs +1 -1
  26. package/dist/esm/components/StorageBrowser/views/utils/tableResolvers/constants.mjs +9 -1
  27. package/dist/esm/components/StorageBrowser/views/utils/tableResolvers/copyResolvers.mjs +4 -42
  28. package/dist/esm/components/StorageBrowser/views/utils/tableResolvers/deleteResolvers.mjs +4 -42
  29. package/dist/esm/components/StorageBrowser/views/utils/tableResolvers/utils.mjs +45 -5
  30. package/dist/esm/version.mjs +1 -1
  31. package/dist/index.js +1 -1
  32. package/dist/types/components/FileUploader/FileUploader.d.ts +1 -1
  33. package/dist/types/components/FileUploader/hooks/index.d.ts +2 -1
  34. package/dist/types/components/FileUploader/hooks/useFileUploader/actions.d.ts +2 -2
  35. package/dist/types/components/FileUploader/hooks/useFileUploader/index.d.ts +2 -1
  36. package/dist/types/components/FileUploader/hooks/useFileUploader/reducer.d.ts +1 -1
  37. package/dist/types/components/FileUploader/hooks/useFileUploader/types.d.ts +2 -2
  38. package/dist/types/components/FileUploader/hooks/useFileUploader/useFileUploader.d.ts +4 -3
  39. package/dist/types/components/FileUploader/hooks/useUploadFiles/index.d.ts +2 -1
  40. package/dist/types/components/FileUploader/hooks/useUploadFiles/useUploadFiles.d.ts +3 -3
  41. package/dist/types/components/FileUploader/index.d.ts +2 -2
  42. package/dist/types/components/FileUploader/types.d.ts +3 -3
  43. package/dist/types/components/FileUploader/ui/Container/index.d.ts +2 -1
  44. package/dist/types/components/FileUploader/ui/DropZone/DropZone.d.ts +1 -1
  45. package/dist/types/components/FileUploader/ui/DropZone/index.d.ts +1 -1
  46. package/dist/types/components/FileUploader/ui/DropZone/types.d.ts +1 -1
  47. package/dist/types/components/FileUploader/ui/FileList/FileControl.d.ts +1 -1
  48. package/dist/types/components/FileUploader/ui/FileList/FileDetails.d.ts +1 -1
  49. package/dist/types/components/FileUploader/ui/FileList/FileList.d.ts +1 -1
  50. package/dist/types/components/FileUploader/ui/FileList/FileRemoveButton.d.ts +1 -1
  51. package/dist/types/components/FileUploader/ui/FileList/FileStatusMessage.d.ts +1 -1
  52. package/dist/types/components/FileUploader/ui/FileList/FileThumbnail.d.ts +1 -1
  53. package/dist/types/components/FileUploader/ui/FileList/index.d.ts +1 -1
  54. package/dist/types/components/FileUploader/ui/FileList/types.d.ts +2 -2
  55. package/dist/types/components/FileUploader/ui/FileListFooter/FileListFooter.d.ts +1 -1
  56. package/dist/types/components/FileUploader/ui/FileListFooter/index.d.ts +2 -1
  57. package/dist/types/components/FileUploader/ui/FileListHeader/FileListHeader.d.ts +1 -1
  58. package/dist/types/components/FileUploader/ui/FileListHeader/index.d.ts +2 -1
  59. package/dist/types/components/FileUploader/ui/FilePicker/FilePicker.d.ts +1 -1
  60. package/dist/types/components/FileUploader/ui/FilePicker/index.d.ts +2 -1
  61. package/dist/types/components/FileUploader/ui/index.d.ts +12 -6
  62. package/dist/types/components/FileUploader/utils/displayText.d.ts +1 -1
  63. package/dist/types/components/FileUploader/utils/getInput.d.ts +3 -3
  64. package/dist/types/components/FileUploader/utils/index.d.ts +4 -2
  65. package/dist/types/components/FileUploader/utils/resolveFile.d.ts +1 -1
  66. package/dist/types/components/FileUploader/utils/uploadFile.d.ts +1 -1
  67. package/dist/types/components/StorageBrowser/ErrorBoundary/index.d.ts +2 -1
  68. package/dist/types/components/StorageBrowser/StorageBrowserAmplify.d.ts +1 -1
  69. package/dist/types/components/StorageBrowser/actions/__testUtils__/permissions.d.ts +1 -1
  70. package/dist/types/components/StorageBrowser/actions/configs/context.d.ts +1 -1
  71. package/dist/types/components/StorageBrowser/actions/configs/defaults.d.ts +1 -1
  72. package/dist/types/components/StorageBrowser/actions/configs/index.d.ts +4 -2
  73. package/dist/types/components/StorageBrowser/actions/configs/types.d.ts +2 -2
  74. package/dist/types/components/StorageBrowser/actions/configs/utils.d.ts +1 -1
  75. package/dist/types/components/StorageBrowser/actions/handlers/copy.d.ts +1 -1
  76. package/dist/types/components/StorageBrowser/actions/handlers/createFolder.d.ts +1 -1
  77. package/dist/types/components/StorageBrowser/actions/handlers/defaults.d.ts +6 -6
  78. package/dist/types/components/StorageBrowser/actions/handlers/delete.d.ts +1 -1
  79. package/dist/types/components/StorageBrowser/actions/handlers/download.d.ts +1 -1
  80. package/dist/types/components/StorageBrowser/actions/handlers/listLocationItems.d.ts +2 -2
  81. package/dist/types/components/StorageBrowser/actions/handlers/listLocations.d.ts +1 -1
  82. package/dist/types/components/StorageBrowser/actions/handlers/types.d.ts +1 -1
  83. package/dist/types/components/StorageBrowser/actions/handlers/upload.d.ts +1 -1
  84. package/dist/types/components/StorageBrowser/actions/handlers/utils.d.ts +3 -3
  85. package/dist/types/components/StorageBrowser/actions/index.d.ts +4 -2
  86. package/dist/types/components/StorageBrowser/adapters/createAmplifyAuthAdapter/createAmplifyAuthAdapter.d.ts +1 -1
  87. package/dist/types/components/StorageBrowser/adapters/createAmplifyAuthAdapter/createAmplifyListLocationsHandler.d.ts +1 -1
  88. package/dist/types/components/StorageBrowser/adapters/createAmplifyAuthAdapter/getPaginatedLocations.d.ts +1 -1
  89. package/dist/types/components/StorageBrowser/adapters/createManagedAuthAdapter/createLocationCredentialsHandler.d.ts +2 -2
  90. package/dist/types/components/StorageBrowser/adapters/createManagedAuthAdapter/createManagedAuthAdapter.d.ts +1 -1
  91. package/dist/types/components/StorageBrowser/adapters/index.d.ts +1 -1
  92. package/dist/types/components/StorageBrowser/adapters/permissionParsers.d.ts +2 -2
  93. package/dist/types/components/StorageBrowser/adapters/types.d.ts +3 -3
  94. package/dist/types/components/StorageBrowser/components/ComponentsProvider.d.ts +1 -1
  95. package/dist/types/components/StorageBrowser/components/base/DropdownMenu.d.ts +1 -1
  96. package/dist/types/components/StorageBrowser/components/base/Field.d.ts +1 -1
  97. package/dist/types/components/StorageBrowser/components/base/PaginationButton.d.ts +1 -1
  98. package/dist/types/components/StorageBrowser/components/base/Table.d.ts +1 -1
  99. package/dist/types/components/StorageBrowser/components/composables/ActionDestination.d.ts +1 -1
  100. package/dist/types/components/StorageBrowser/components/composables/ActionsList.d.ts +1 -1
  101. package/dist/types/components/StorageBrowser/components/composables/DataTable/DataTable.d.ts +2 -2
  102. package/dist/types/components/StorageBrowser/components/composables/DataTable/dataCells/ButtonDataCell.d.ts +1 -1
  103. package/dist/types/components/StorageBrowser/components/composables/DataTable/dataCells/TextDataCell.d.ts +1 -1
  104. package/dist/types/components/StorageBrowser/components/composables/DataTable/headers/SortHeader.d.ts +1 -1
  105. package/dist/types/components/StorageBrowser/components/composables/DataTable/index.d.ts +3 -2
  106. package/dist/types/components/StorageBrowser/components/composables/DataTable/types.d.ts +8 -8
  107. package/dist/types/components/StorageBrowser/components/composables/Message.d.ts +1 -1
  108. package/dist/types/components/StorageBrowser/components/composables/context.d.ts +1 -1
  109. package/dist/types/components/StorageBrowser/components/composables/defaults.d.ts +1 -1
  110. package/dist/types/components/StorageBrowser/components/composables/index.d.ts +1 -1
  111. package/dist/types/components/StorageBrowser/components/composables/types.d.ts +20 -20
  112. package/dist/types/components/StorageBrowser/components/defaults.d.ts +1 -1
  113. package/dist/types/components/StorageBrowser/components/elements/IconElement.d.ts +2 -1
  114. package/dist/types/components/StorageBrowser/components/elements/defaults.d.ts +1 -1
  115. package/dist/types/components/StorageBrowser/components/elements/index.d.ts +4 -2
  116. package/dist/types/components/StorageBrowser/components/index.d.ts +9 -6
  117. package/dist/types/components/StorageBrowser/components/types.d.ts +1 -1
  118. package/dist/types/components/StorageBrowser/configuration/context.d.ts +1 -1
  119. package/dist/types/components/StorageBrowser/configuration/createConfigurationProvider.d.ts +1 -1
  120. package/dist/types/components/StorageBrowser/configuration/index.d.ts +1 -1
  121. package/dist/types/components/StorageBrowser/configuration/types.d.ts +3 -3
  122. package/dist/types/components/StorageBrowser/configuration/useGetActionInputCallback.d.ts +1 -1
  123. package/dist/types/components/StorageBrowser/controls/context.d.ts +1 -1
  124. package/dist/types/components/StorageBrowser/controls/hooks/compareFunctions/compareButtonData.d.ts +1 -1
  125. package/dist/types/components/StorageBrowser/controls/hooks/compareFunctions/compareDateData.d.ts +1 -1
  126. package/dist/types/components/StorageBrowser/controls/hooks/compareFunctions/compareNumberData.d.ts +1 -1
  127. package/dist/types/components/StorageBrowser/controls/hooks/compareFunctions/compareTextData.d.ts +1 -1
  128. package/dist/types/components/StorageBrowser/controls/hooks/getNavigationItems.d.ts +2 -2
  129. package/dist/types/components/StorageBrowser/controls/hooks/getNavigationParts.d.ts +1 -1
  130. package/dist/types/components/StorageBrowser/controls/hooks/useActionCancel.d.ts +1 -1
  131. package/dist/types/components/StorageBrowser/controls/hooks/useActionDestination.d.ts +1 -1
  132. package/dist/types/components/StorageBrowser/controls/hooks/useActionExit.d.ts +1 -1
  133. package/dist/types/components/StorageBrowser/controls/hooks/useActionStart.d.ts +1 -1
  134. package/dist/types/components/StorageBrowser/controls/hooks/useActionsList.d.ts +1 -1
  135. package/dist/types/components/StorageBrowser/controls/hooks/useAddFiles.d.ts +1 -1
  136. package/dist/types/components/StorageBrowser/controls/hooks/useAddFolder.d.ts +1 -1
  137. package/dist/types/components/StorageBrowser/controls/hooks/useDataRefresh.d.ts +1 -1
  138. package/dist/types/components/StorageBrowser/controls/hooks/useDataTable.d.ts +1 -1
  139. package/dist/types/components/StorageBrowser/controls/hooks/useDropZone.d.ts +1 -1
  140. package/dist/types/components/StorageBrowser/controls/hooks/useFolderNameField.d.ts +1 -1
  141. package/dist/types/components/StorageBrowser/controls/hooks/useLoadingIndicator.d.ts +1 -1
  142. package/dist/types/components/StorageBrowser/controls/hooks/useMessage.d.ts +1 -1
  143. package/dist/types/components/StorageBrowser/controls/hooks/useNavigation.d.ts +1 -1
  144. package/dist/types/components/StorageBrowser/controls/hooks/useOverwriteToggle.d.ts +1 -1
  145. package/dist/types/components/StorageBrowser/controls/hooks/usePagination.d.ts +1 -1
  146. package/dist/types/components/StorageBrowser/controls/hooks/useResolvedComposable.d.ts +1 -1
  147. package/dist/types/components/StorageBrowser/controls/hooks/useSearchField.d.ts +1 -1
  148. package/dist/types/components/StorageBrowser/controls/hooks/useSearchSubfoldersToggle.d.ts +1 -1
  149. package/dist/types/components/StorageBrowser/controls/hooks/useStatusDisplay.d.ts +1 -1
  150. package/dist/types/components/StorageBrowser/controls/hooks/useTitle.d.ts +1 -1
  151. package/dist/types/components/StorageBrowser/controls/index.d.ts +1 -1
  152. package/dist/types/components/StorageBrowser/controls/types.d.ts +4 -4
  153. package/dist/types/components/StorageBrowser/createStorageBrowser/createProvider.d.ts +2 -2
  154. package/dist/types/components/StorageBrowser/createStorageBrowser/createStorageBrowser.d.ts +1 -1
  155. package/dist/types/components/StorageBrowser/createStorageBrowser/index.d.ts +1 -1
  156. package/dist/types/components/StorageBrowser/createStorageBrowser/types.d.ts +30 -12
  157. package/dist/types/components/StorageBrowser/credentials/context.d.ts +1 -1
  158. package/dist/types/components/StorageBrowser/credentials/credentialsStore/create.d.ts +1 -1
  159. package/dist/types/components/StorageBrowser/credentials/credentialsStore/index.d.ts +1 -1
  160. package/dist/types/components/StorageBrowser/credentials/credentialsStore/registry.d.ts +2 -2
  161. package/dist/types/components/StorageBrowser/credentials/credentialsStore/store.d.ts +2 -2
  162. package/dist/types/components/StorageBrowser/credentials/credentialsStore/types.d.ts +2 -2
  163. package/dist/types/components/StorageBrowser/credentials/index.d.ts +3 -2
  164. package/dist/types/components/StorageBrowser/credentials/types.d.ts +4 -4
  165. package/dist/types/components/StorageBrowser/credentials/useCredentialsStore.d.ts +2 -2
  166. package/dist/types/components/StorageBrowser/displayText/context.d.ts +1 -1
  167. package/dist/types/components/StorageBrowser/displayText/index.d.ts +1 -1
  168. package/dist/types/components/StorageBrowser/displayText/libraries/en/copyView.d.ts +1 -1
  169. package/dist/types/components/StorageBrowser/displayText/libraries/en/createFolderView.d.ts +1 -1
  170. package/dist/types/components/StorageBrowser/displayText/libraries/en/default.d.ts +1 -1
  171. package/dist/types/components/StorageBrowser/displayText/libraries/en/deleteView.d.ts +1 -1
  172. package/dist/types/components/StorageBrowser/displayText/libraries/en/locationDetailView.d.ts +1 -1
  173. package/dist/types/components/StorageBrowser/displayText/libraries/en/locationsView.d.ts +1 -1
  174. package/dist/types/components/StorageBrowser/displayText/libraries/en/shared.d.ts +1 -1
  175. package/dist/types/components/StorageBrowser/displayText/libraries/en/uploadView.d.ts +1 -1
  176. package/dist/types/components/StorageBrowser/displayText/types.d.ts +5 -5
  177. package/dist/types/components/StorageBrowser/displayText/utils.d.ts +1 -1
  178. package/dist/types/components/StorageBrowser/fileItems/constants.d.ts +4 -0
  179. package/dist/types/components/StorageBrowser/fileItems/context.d.ts +6 -0
  180. package/dist/types/components/StorageBrowser/fileItems/fileItemsReducer.d.ts +6 -0
  181. package/dist/types/components/StorageBrowser/fileItems/index.d.ts +3 -0
  182. package/dist/types/components/StorageBrowser/fileItems/types.d.ts +44 -0
  183. package/dist/types/components/StorageBrowser/fileItems/utils.d.ts +5 -0
  184. package/dist/types/components/StorageBrowser/index.d.ts +12 -7
  185. package/dist/types/components/StorageBrowser/locationItems/context.d.ts +1 -1
  186. package/dist/types/components/StorageBrowser/locationItems/index.d.ts +2 -1
  187. package/dist/types/components/StorageBrowser/storage-internal.d.ts +2 -1
  188. package/dist/types/components/StorageBrowser/store/constants.d.ts +1 -1
  189. package/dist/types/components/StorageBrowser/store/context.d.ts +1 -1
  190. package/dist/types/components/StorageBrowser/store/index.d.ts +1 -1
  191. package/dist/types/components/StorageBrowser/store/storeReducer.d.ts +1 -1
  192. package/dist/types/components/StorageBrowser/store/types.d.ts +2 -2
  193. package/dist/types/components/StorageBrowser/store/useStoreReducer.d.ts +1 -1
  194. package/dist/types/components/StorageBrowser/store/utils.d.ts +2 -2
  195. package/dist/types/components/StorageBrowser/store/validateStoreProps.d.ts +1 -1
  196. package/dist/types/components/StorageBrowser/tasks/constants.d.ts +1 -1
  197. package/dist/types/components/StorageBrowser/tasks/index.d.ts +1 -1
  198. package/dist/types/components/StorageBrowser/tasks/types.d.ts +1 -1
  199. package/dist/types/components/StorageBrowser/tasks/utils.d.ts +1 -1
  200. package/dist/types/components/StorageBrowser/useAction/context.d.ts +1 -1
  201. package/dist/types/components/StorageBrowser/useAction/createEnhancedListHandler.d.ts +19 -41
  202. package/dist/types/components/StorageBrowser/useAction/index.d.ts +1 -1
  203. package/dist/types/components/StorageBrowser/useAction/searchItems.d.ts +24 -0
  204. package/dist/types/components/StorageBrowser/useAction/types.d.ts +5 -5
  205. package/dist/types/components/StorageBrowser/useAction/useAction.d.ts +1 -1
  206. package/dist/types/components/StorageBrowser/useAction/useHandler.d.ts +2 -2
  207. package/dist/types/components/StorageBrowser/useAction/useList.d.ts +3 -3
  208. package/dist/types/components/StorageBrowser/useAction/useListFolderItems.d.ts +4 -8
  209. package/dist/types/components/StorageBrowser/useAction/useListLocationItems.d.ts +5 -5
  210. package/dist/types/components/StorageBrowser/useAction/useListLocations.d.ts +4 -4
  211. package/dist/types/components/StorageBrowser/useAction/utils.d.ts +2 -2
  212. package/dist/types/components/StorageBrowser/validators/assertLocationData.d.ts +1 -1
  213. package/dist/types/components/StorageBrowser/validators/assertRegisterAuthListener.d.ts +1 -1
  214. package/dist/types/components/StorageBrowser/validators/index.d.ts +1 -2
  215. package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/CopyView.d.ts +1 -1
  216. package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/CopyViewProvider.d.ts +1 -1
  217. package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/FoldersMessageControl.d.ts +1 -1
  218. package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/FoldersPaginationControl.d.ts +1 -1
  219. package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/FoldersTableControl.d.ts +2 -2
  220. package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/getDestinationPickerTableData.d.ts +1 -1
  221. package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/types.d.ts +3 -3
  222. package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/useCopyView.d.ts +1 -1
  223. package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/useFolders.d.ts +2 -2
  224. package/dist/types/components/StorageBrowser/views/LocationActionView/CreateFolderView/CreateFolderView.d.ts +1 -1
  225. package/dist/types/components/StorageBrowser/views/LocationActionView/CreateFolderView/CreateFolderViewProvider.d.ts +1 -1
  226. package/dist/types/components/StorageBrowser/views/LocationActionView/CreateFolderView/types.d.ts +2 -2
  227. package/dist/types/components/StorageBrowser/views/LocationActionView/CreateFolderView/useCreateFolderView.d.ts +1 -1
  228. package/dist/types/components/StorageBrowser/views/LocationActionView/DeleteView/DeleteView.d.ts +1 -1
  229. package/dist/types/components/StorageBrowser/views/LocationActionView/DeleteView/DeleteViewProvider.d.ts +1 -1
  230. package/dist/types/components/StorageBrowser/views/LocationActionView/DeleteView/types.d.ts +2 -2
  231. package/dist/types/components/StorageBrowser/views/LocationActionView/DeleteView/useDeleteView.d.ts +1 -1
  232. package/dist/types/components/StorageBrowser/views/LocationActionView/LocationActionView.d.ts +1 -1
  233. package/dist/types/components/StorageBrowser/views/LocationActionView/UploadView/UploadView.d.ts +1 -1
  234. package/dist/types/components/StorageBrowser/views/LocationActionView/UploadView/UploadViewProvider.d.ts +1 -1
  235. package/dist/types/components/StorageBrowser/views/LocationActionView/UploadView/types.d.ts +3 -3
  236. package/dist/types/components/StorageBrowser/views/LocationActionView/UploadView/useUploadView.d.ts +1 -1
  237. package/dist/types/components/StorageBrowser/views/LocationActionView/index.d.ts +9 -5
  238. package/dist/types/components/StorageBrowser/views/LocationActionView/types.d.ts +4 -4
  239. package/dist/types/components/StorageBrowser/views/LocationDetailView/LocationDetailView.d.ts +1 -1
  240. package/dist/types/components/StorageBrowser/views/LocationDetailView/LocationDetailViewProvider.d.ts +1 -1
  241. package/dist/types/components/StorageBrowser/views/LocationDetailView/getLocationDetailViewTableData/constants.d.ts +1 -1
  242. package/dist/types/components/StorageBrowser/views/LocationDetailView/getLocationDetailViewTableData/getFileRowContent.d.ts +2 -2
  243. package/dist/types/components/StorageBrowser/views/LocationDetailView/getLocationDetailViewTableData/getFolderRowContent.d.ts +1 -1
  244. package/dist/types/components/StorageBrowser/views/LocationDetailView/getLocationDetailViewTableData/getHeaders.d.ts +1 -1
  245. package/dist/types/components/StorageBrowser/views/LocationDetailView/getLocationDetailViewTableData/getLocationDetailViewTableData.d.ts +4 -4
  246. package/dist/types/components/StorageBrowser/views/LocationDetailView/getLocationDetailViewTableData/types.d.ts +1 -1
  247. package/dist/types/components/StorageBrowser/views/LocationDetailView/index.d.ts +1 -1
  248. package/dist/types/components/StorageBrowser/views/LocationDetailView/types.d.ts +4 -4
  249. package/dist/types/components/StorageBrowser/views/LocationDetailView/useLocationDetailView.d.ts +1 -1
  250. package/dist/types/components/StorageBrowser/views/LocationsView/LocationsView.d.ts +1 -1
  251. package/dist/types/components/StorageBrowser/views/LocationsView/LocationsViewProvider.d.ts +1 -1
  252. package/dist/types/components/StorageBrowser/views/LocationsView/getLocationsViewTableData/getHeaders.d.ts +1 -1
  253. package/dist/types/components/StorageBrowser/views/LocationsView/getLocationsViewTableData/getLocationsViewTableData.d.ts +3 -3
  254. package/dist/types/components/StorageBrowser/views/LocationsView/getLocationsViewTableData/types.d.ts +2 -2
  255. package/dist/types/components/StorageBrowser/views/LocationsView/index.d.ts +1 -1
  256. package/dist/types/components/StorageBrowser/views/LocationsView/types.d.ts +2 -2
  257. package/dist/types/components/StorageBrowser/views/LocationsView/useLocationsView.d.ts +2 -2
  258. package/dist/types/components/StorageBrowser/views/context/actionViews.d.ts +2 -2
  259. package/dist/types/components/StorageBrowser/views/context/getViews.d.ts +3 -3
  260. package/dist/types/components/StorageBrowser/views/context/primaryViews.d.ts +2 -2
  261. package/dist/types/components/StorageBrowser/views/context/types.d.ts +1 -1
  262. package/dist/types/components/StorageBrowser/views/context/views.d.ts +3 -3
  263. package/dist/types/components/StorageBrowser/views/hooks/useResolveTableData/index.d.ts +1 -1
  264. package/dist/types/components/StorageBrowser/views/hooks/useResolveTableData/types.d.ts +2 -2
  265. package/dist/types/components/StorageBrowser/views/hooks/useResolveTableData/useResolveTableData.d.ts +2 -2
  266. package/dist/types/components/StorageBrowser/views/index.d.ts +8 -4
  267. package/dist/types/components/StorageBrowser/views/types.d.ts +5 -5
  268. package/dist/types/components/StorageBrowser/views/useView.d.ts +3 -3
  269. package/dist/types/components/StorageBrowser/views/utils/index.d.ts +1 -1
  270. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/__testUtils__/tasks.d.ts +7 -12
  271. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/constants.d.ts +1 -0
  272. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/copyResolvers.d.ts +2 -3
  273. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/deleteResolvers.d.ts +2 -3
  274. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/index.d.ts +3 -2
  275. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/types.d.ts +13 -13
  276. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/uploadResolvers.d.ts +1 -1
  277. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/utils.d.ts +15 -7
  278. package/dist/types/components/StorageImage/index.d.ts +1 -1
  279. package/dist/types/components/StorageImage/types.d.ts +3 -3
  280. package/dist/types/components/StorageManager/StorageManager.d.ts +1 -1
  281. package/dist/types/components/StorageManager/index.d.ts +2 -2
  282. package/dist/types/components/StorageManager/types.d.ts +2 -2
  283. package/dist/types/components/StorageManager/ui/Container/index.d.ts +2 -1
  284. package/dist/types/components/StorageManager/ui/DropZone/DropZone.d.ts +1 -1
  285. package/dist/types/components/StorageManager/ui/DropZone/index.d.ts +1 -1
  286. package/dist/types/components/StorageManager/ui/DropZone/types.d.ts +1 -1
  287. package/dist/types/components/StorageManager/ui/FileList/FileControl.d.ts +1 -1
  288. package/dist/types/components/StorageManager/ui/FileList/FileDetails.d.ts +1 -1
  289. package/dist/types/components/StorageManager/ui/FileList/FileList.d.ts +1 -1
  290. package/dist/types/components/StorageManager/ui/FileList/FileRemoveButton.d.ts +1 -1
  291. package/dist/types/components/StorageManager/ui/FileList/FileStatusMessage.d.ts +1 -1
  292. package/dist/types/components/StorageManager/ui/FileList/FileThumbnail.d.ts +1 -1
  293. package/dist/types/components/StorageManager/ui/FileList/index.d.ts +1 -1
  294. package/dist/types/components/StorageManager/ui/FileList/types.d.ts +2 -2
  295. package/dist/types/components/StorageManager/ui/FileListFooter/FileListFooter.d.ts +1 -1
  296. package/dist/types/components/StorageManager/ui/FileListFooter/index.d.ts +2 -1
  297. package/dist/types/components/StorageManager/ui/FileListHeader/FileListHeader.d.ts +1 -1
  298. package/dist/types/components/StorageManager/ui/FileListHeader/index.d.ts +2 -1
  299. package/dist/types/components/StorageManager/ui/FilePicker/FilePicker.d.ts +1 -1
  300. package/dist/types/components/StorageManager/ui/FilePicker/index.d.ts +2 -1
  301. package/dist/types/components/StorageManager/ui/index.d.ts +12 -6
  302. package/dist/types/components/index.d.ts +6 -3
  303. package/dist/types/index.d.ts +4 -2
  304. package/dist/types/version.d.ts +1 -1
  305. package/package.json +6 -6
  306. package/dist/esm/components/StorageBrowser/files/context.mjs +0 -31
  307. package/dist/esm/components/StorageBrowser/files/utils.mjs +0 -52
  308. package/dist/esm/components/StorageBrowser/validators/isFileTooBig.mjs +0 -4
  309. package/dist/types/components/StorageBrowser/files/context.d.ts +0 -6
  310. package/dist/types/components/StorageBrowser/files/index.d.ts +0 -2
  311. package/dist/types/components/StorageBrowser/files/types.d.ts +0 -28
  312. package/dist/types/components/StorageBrowser/files/utils.d.ts +0 -7
  313. package/dist/types/components/StorageBrowser/validators/isFileTooBig.d.ts +0 -2
@@ -1,6 +1,6 @@
1
1
  import { listCallerAccessGrants } from '@aws-amplify/storage/internals';
2
- import '@aws-amplify/ui';
3
2
  import { assertAccountId } from '../../validators/assertAccountId.mjs';
3
+ import '@aws-amplify/ui';
4
4
  import { getFilteredLocations } from './utils.mjs';
5
5
 
6
6
  const DEFAULT_PAGE_SIZE = 1000;
@@ -17,7 +17,7 @@ import '../views/LocationActionView/CreateFolderView/CreateFolderView.mjs';
17
17
  import '../views/LocationActionView/DeleteView/DeleteView.mjs';
18
18
  import '../views/context/actionViews.mjs';
19
19
  import '../views/LocationActionView/UploadView/UploadView.mjs';
20
- import '../files/context.mjs';
20
+ import '../fileItems/context.mjs';
21
21
  import '../views/LocationDetailView/LocationDetailView.mjs';
22
22
  import '../views/LocationsView/LocationsView.mjs';
23
23
 
@@ -15,7 +15,8 @@ import { componentsDefault } from '../components/defaults.mjs';
15
15
  import { createConfigurationProvider } from '../configuration/createConfigurationProvider.mjs';
16
16
  import '../configuration/context.mjs';
17
17
  import { DisplayTextProvider } from '../displayText/context.mjs';
18
- import { FilesProvider } from '../files/context.mjs';
18
+ import { FileItemsProvider } from '../fileItems/context.mjs';
19
+ import { defaultValidateFile } from '../fileItems/utils.mjs';
19
20
  import { LocationItemsProvider } from '../locationItems/context.mjs';
20
21
  import { StoreProvider } from '../store/context.mjs';
21
22
  import { ActionHandlersProvider } from '../useAction/context.mjs';
@@ -30,7 +31,7 @@ import '../views/LocationActionView/UploadView/UploadView.mjs';
30
31
  import '../views/LocationDetailView/LocationDetailView.mjs';
31
32
  import '../views/LocationsView/LocationsView.mjs';
32
33
 
33
- function createProvider({ actions, components, config, }) {
34
+ function createProvider({ actions, components, config, options, }) {
34
35
  const { accountId, customEndpoint, registerAuthListener, getLocationCredentials, region, listLocations, } = config;
35
36
  const resolvedActions = {
36
37
  default: {
@@ -59,6 +60,7 @@ function createProvider({ actions, components, config, }) {
59
60
  // override components
60
61
  ...components,
61
62
  };
63
+ const { validateFile = defaultValidateFile } = options ?? {};
62
64
  /**
63
65
  * Provides state, configuration and action values that are shared between
64
66
  * the primary View components
@@ -72,7 +74,7 @@ function createProvider({ actions, components, config, }) {
72
74
  React__default.createElement(ViewsProvider, { actions: resolvedActions, views: views },
73
75
  React__default.createElement(ComponentsProvider, { composables: composables },
74
76
  React__default.createElement(LocationItemsProvider, null,
75
- React__default.createElement(FilesProvider, null, children))))))))));
77
+ React__default.createElement(FileItemsProvider, { validateFile: validateFile }, children))))))))));
76
78
  }
77
79
  return Provider;
78
80
  }
@@ -22,7 +22,7 @@ import { CreateFolderView } from '../views/LocationActionView/CreateFolderView/C
22
22
  import { DeleteView } from '../views/LocationActionView/DeleteView/DeleteView.mjs';
23
23
  import { LocationActionView } from '../views/LocationActionView/LocationActionView.mjs';
24
24
  import { UploadView } from '../views/LocationActionView/UploadView/UploadView.mjs';
25
- import '../files/context.mjs';
25
+ import '../fileItems/context.mjs';
26
26
  import { LocationDetailView } from '../views/LocationDetailView/LocationDetailView.mjs';
27
27
  import { LocationsView } from '../views/LocationsView/LocationsView.mjs';
28
28
  import { useView } from '../views/useView.mjs';
@@ -1,6 +1,4 @@
1
1
  import { DEFAULT_ACTION_VIEW_DISPLAY_TEXT } from './shared.mjs';
2
- import '@aws-amplify/ui';
3
- import { isFileTooBig } from '../../../validators/isFileTooBig.mjs';
4
2
 
5
3
  const DEFAULT_UPLOAD_VIEW_DISPLAY_TEXT = {
6
4
  ...DEFAULT_ACTION_VIEW_DISPLAY_TEXT,
@@ -67,13 +65,12 @@ const DEFAULT_UPLOAD_VIEW_DISPLAY_TEXT = {
67
65
  if (!data?.invalidFiles) {
68
66
  return undefined;
69
67
  }
70
- const tooBigFileNames = data.invalidFiles
71
- .filter(({ file }) => isFileTooBig(file))
68
+ const invalidFileNames = data.invalidFiles
72
69
  .map(({ file }) => file.name)
73
70
  .join(', ');
74
- if (tooBigFileNames) {
71
+ if (invalidFileNames) {
75
72
  return {
76
- content: `Files larger than 160GB cannot be added to the upload queue: ${tooBigFileNames}`,
73
+ content: `Files larger than 160GB cannot be added to the upload queue: ${invalidFileNames}`,
77
74
  type: 'warning',
78
75
  };
79
76
  }
@@ -0,0 +1,11 @@
1
+ const DEFAULT_STATE = {
2
+ validItems: undefined,
3
+ invalidItems: undefined,
4
+ };
5
+ const DEFAULT_RESOLVED_FILES = {
6
+ validFiles: undefined,
7
+ invalidFiles: undefined,
8
+ };
9
+ const UPLOAD_FILE_SIZE_LIMIT = 160 * 1000 * 1000 * 1000;
10
+
11
+ export { DEFAULT_RESOLVED_FILES, DEFAULT_STATE, UPLOAD_FILE_SIZE_LIMIT };
@@ -0,0 +1,42 @@
1
+ import React__default from 'react';
2
+ import { noop } from '@aws-amplify/ui';
3
+ import { createContextUtilities } from '@aws-amplify/ui-react-core';
4
+ import { useFileSelect } from '@aws-amplify/ui-react/internal';
5
+ import { DEFAULT_STATE } from './constants.mjs';
6
+ import { fileItemsReducer } from './fileItemsReducer.mjs';
7
+ import { resolveFiles, parseFileSelectParams } from './utils.mjs';
8
+
9
+ const defaultValue = [DEFAULT_STATE, noop];
10
+ const { FileItemsContext, useFileItems } = createContextUtilities({
11
+ contextName: 'FileItems',
12
+ defaultValue,
13
+ });
14
+ function FileItemsProvider({ children, validateFile, }) {
15
+ const [state, dispatch] = React__default.useReducer(fileItemsReducer, DEFAULT_STATE);
16
+ const [fileInput, handleFileSelect] = useFileSelect((nextFiles) => {
17
+ dispatch({
18
+ type: 'ADD_FILE_ITEMS',
19
+ ...resolveFiles(nextFiles, validateFile),
20
+ });
21
+ });
22
+ const handleFilesAction = React__default.useCallback((action) => {
23
+ if (action.type === 'SELECT_FILES') {
24
+ handleFileSelect(...parseFileSelectParams(action.selectionType));
25
+ }
26
+ else if (action.type === 'ADD_FILES') {
27
+ dispatch({
28
+ type: 'ADD_FILE_ITEMS',
29
+ ...resolveFiles(action.files, validateFile),
30
+ });
31
+ }
32
+ else {
33
+ dispatch(action);
34
+ }
35
+ }, [handleFileSelect, validateFile]);
36
+ const value = React__default.useMemo(() => [state, handleFilesAction], [state, handleFilesAction]);
37
+ return (React__default.createElement(FileItemsContext.Provider, { value: value },
38
+ fileInput,
39
+ children));
40
+ }
41
+
42
+ export { FileItemsContext, FileItemsProvider, useFileItems };
@@ -0,0 +1,33 @@
1
+ import { DEFAULT_STATE } from './constants.mjs';
2
+ import { processFileItems } from './utils.mjs';
3
+
4
+ const fileItemsReducer = (state, action) => {
5
+ switch (action.type) {
6
+ case 'ADD_FILE_ITEMS': {
7
+ if (!action.validFiles?.length && !action.invalidFiles?.length) {
8
+ return state;
9
+ }
10
+ const validItems = processFileItems(state.validItems, action.validFiles);
11
+ // `invalidItems` should only track invalid items from latest action taken
12
+ const invalidItems = processFileItems(undefined, action.invalidFiles);
13
+ return { validItems, invalidItems };
14
+ }
15
+ case 'REMOVE_FILE_ITEM': {
16
+ const { validItems: prevItems } = state;
17
+ if (!prevItems?.length)
18
+ return state;
19
+ const nextItems = prevItems.filter(({ id }) => id !== action.id);
20
+ if (nextItems.length === prevItems.length)
21
+ return state;
22
+ // `validItems` is strictly undefined if it has 0 file items
23
+ // otherwise, `validItems` is guaranteed to have at least 1+ file items
24
+ const validItems = nextItems.length ? nextItems : undefined;
25
+ return { ...state, validItems };
26
+ }
27
+ case 'RESET_FILE_ITEMS': {
28
+ return DEFAULT_STATE;
29
+ }
30
+ }
31
+ };
32
+
33
+ export { fileItemsReducer };
@@ -0,0 +1,55 @@
1
+ import { isUndefined, isString, isEmpty } from '@aws-amplify/ui';
2
+ import { UPLOAD_FILE_SIZE_LIMIT, DEFAULT_RESOLVED_FILES } from './constants.mjs';
3
+
4
+ const compareFileItems = (prev, next) => prev.key.localeCompare(next.key);
5
+ const constructFiles = (files, file) => isUndefined(files) ? [file] : files.concat(file);
6
+ const defaultValidateFile = (file) => file.size <= UPLOAD_FILE_SIZE_LIMIT;
7
+ const resolveFiles = (files, validateFile) => {
8
+ if (!files?.length)
9
+ return DEFAULT_RESOLVED_FILES;
10
+ if (!validateFile)
11
+ return { validFiles: files, invalidFiles: undefined };
12
+ return files.reduce((acc, file) => {
13
+ if (validateFile(file)) {
14
+ acc.validFiles = constructFiles(acc.validFiles, file);
15
+ }
16
+ else {
17
+ acc.invalidFiles = constructFiles(acc.invalidFiles, file);
18
+ }
19
+ return acc;
20
+ },
21
+ // create new copy of default to be modified
22
+ { ...DEFAULT_RESOLVED_FILES });
23
+ };
24
+ const processFileItems = (prevItems, files) => {
25
+ if (!files?.length)
26
+ return prevItems;
27
+ // construct `nextItems` and filter out existing `file` entries
28
+ const nextItems = files.reduce((items, file) => {
29
+ const { name, webkitRelativePath } = file;
30
+ return prevItems?.some(({ file: existing }) => existing.name === name &&
31
+ existing.webkitRelativePath === webkitRelativePath)
32
+ ? items
33
+ : items.concat({
34
+ key: isEmpty(webkitRelativePath) ? name : webkitRelativePath,
35
+ id: crypto.randomUUID(),
36
+ file,
37
+ });
38
+ }, []);
39
+ if (!nextItems.length)
40
+ return prevItems;
41
+ if (!prevItems?.length) {
42
+ return nextItems.sort(compareFileItems);
43
+ }
44
+ return prevItems?.concat(nextItems).sort(compareFileItems);
45
+ };
46
+ const parseFileSelectParams = (value) => {
47
+ if (isUndefined(value))
48
+ return ['FILE', undefined];
49
+ if (isString(value))
50
+ return [value, undefined];
51
+ const [selectType, ...rest] = value;
52
+ return [selectType, !rest?.length ? undefined : { accept: rest.join() }];
53
+ };
54
+
55
+ export { defaultValidateFile, parseFileSelectParams, processFileItems, resolveFiles };
@@ -1,78 +1,8 @@
1
+ import { searchItems } from './searchItems.mjs';
2
+
1
3
  const SEARCH_LIMIT = 10000;
2
4
  const SEARCH_PAGE_SIZE = 1000;
3
- /**
4
- * Normalizes and converts a string to lower case,
5
- * handling Unicode characters and locale-specific case mappings.
6
- * Uses NFKD to fully decompose unicode: https://unicode.org/reports/tr15/#Normalization_Forms_Table
7
- */
8
- function normalize(input) {
9
- return input
10
- .normalize('NFKD')
11
- .replace(/[\u0300-\u036f]/g, '') // remove diacritic modifiers
12
- .toLocaleLowerCase();
13
- }
14
- /**
15
- * Performs a case-insensitive check to determine if a string includes another string,
16
- * handling Unicode characters and locale-specific case mappings.
17
- *
18
- * @param {string} input - The string to search within.
19
- * @param {string} query - The substring to search for.
20
- * @returns {boolean} - Returns `true` if `query` is found in `input` (case-insensitively), otherwise `false`.
21
- *
22
- * @example
23
- * caseInsensitiveIncludes("Photos", "photo"); // true
24
- * caseInsensitiveIncludes("Hello", "HELLO"); // true
25
- * caseInsensitiveIncludes("\uFB00", "\u0046\u0046"); // ff = FF true
26
- * caseInsensitiveIncludes("Cafè", "cafe"); // true
27
- */
28
- function caseInsensitiveIncludes(input, query) {
29
- return normalize(input).includes(normalize(query));
30
- }
31
- function searchItems({ prefix = '', list, options }) {
32
- const { query, filterBy, groupBy } = options;
33
- // filter keys that match `filterBy` search option
34
- const filteredItems = list.filter((item) => {
35
- const key = typeof filterBy === 'function' ? filterBy(item) : filterBy;
36
- const path = item[key];
37
- const suffix = path.slice(prefix.length);
38
- return caseInsensitiveIncludes(suffix, query);
39
- });
40
- if (!groupBy) {
41
- return filteredItems;
42
- }
43
- // group items using the provided grouping delimiter
44
- const uniquePaths = new Map();
45
- for (const item of filteredItems) {
46
- const key = typeof filterBy === 'function' ? filterBy(item) : filterBy;
47
- const path = item[key];
48
- const components = path.split(groupBy);
49
- for (const [i, component] of components.entries()) {
50
- if (!caseInsensitiveIncludes(component, query)) {
51
- continue;
52
- }
53
- // list of components ending with match
54
- const matchedPathSegments = components.slice(0, i + 1);
55
- // create new path
56
- let matchedPath = matchedPathSegments.join(groupBy);
57
- const isFolder = matchedPath !== path;
58
- if (isFolder) {
59
- matchedPath += groupBy;
60
- }
61
- // ignore anything below the prefix for matching
62
- if (matchedPath.length > prefix.length && !uniquePaths.has(matchedPath)) {
63
- // add a new item
64
- uniquePaths.set(matchedPath, {
65
- ...item,
66
- id: crypto.randomUUID(),
67
- [key]: matchedPath,
68
- type: isFolder ? 'FOLDER' : 'FILE',
69
- });
70
- }
71
- }
72
- }
73
- return Array.from(uniquePaths.values());
74
- }
75
- const createEnhancedListHandler = (action) => {
5
+ const createEnhancedListHandler = (handler) => {
76
6
  return async function listActionHandler(prevState, { options, ...input }) {
77
7
  const { nextToken: _nextToken, refresh, reset, search, ...rest } = options ?? {};
78
8
  if (reset) {
@@ -80,44 +10,33 @@ const createEnhancedListHandler = (action) => {
80
10
  }
81
11
  // collect and filter results on `search`
82
12
  if (search) {
83
- const result = [];
84
- let nextNextToken = undefined;
13
+ const items = [];
14
+ let nextToken = undefined;
85
15
  do {
86
- const output = (await action({
16
+ const output = await handler({
87
17
  ...input,
88
- options: {
89
- ...rest,
90
- pageSize: SEARCH_PAGE_SIZE,
91
- nextToken: nextNextToken,
92
- },
93
- }));
94
- result.push(...output.items);
95
- nextNextToken = output.nextToken;
96
- } while (nextNextToken && result.length < SEARCH_LIMIT);
18
+ options: { ...rest, pageSize: SEARCH_PAGE_SIZE, nextToken },
19
+ });
20
+ items.push(...output.items);
21
+ // eslint-disable-next-line prefer-destructuring
22
+ nextToken = output.nextToken;
23
+ } while (nextToken && items.length < SEARCH_LIMIT);
97
24
  return {
98
- items: searchItems({
99
- list: result,
100
- prefix: input.prefix,
101
- options: search,
102
- }),
103
- search: {
104
- // search limit reached but we still have a next token
105
- hasExhaustedSearch: !!nextNextToken,
106
- },
25
+ items: searchItems({ items, prefix: input.prefix, options: search }),
26
+ // search limit reached but we still have a next token
27
+ hasExhaustedSearch: !!nextToken,
107
28
  nextToken: undefined,
108
29
  };
109
30
  }
110
31
  // ignore provided `nextToken` on `refresh`
111
32
  const nextToken = refresh ? undefined : _nextToken;
112
- const output = (await action({
33
+ const output = await handler({
113
34
  ...input,
114
35
  options: { ...rest, nextToken },
115
- }));
116
- return {
117
- items: [...(refresh ? [] : prevState.items), ...output.items],
118
- nextToken: output.nextToken,
119
- };
36
+ });
37
+ const items = [...(refresh ? [] : prevState.items), ...output.items];
38
+ return { ...output, items };
120
39
  };
121
40
  };
122
41
 
123
- export { SEARCH_LIMIT, SEARCH_PAGE_SIZE, createEnhancedListHandler, searchItems };
42
+ export { SEARCH_LIMIT, SEARCH_PAGE_SIZE, createEnhancedListHandler };
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Normalizes and converts a string to lower case,
3
+ * handling Unicode characters and locale-specific case mappings.
4
+ * Uses NFKD to fully decompose unicode: https://unicode.org/reports/tr15/#Normalization_Forms_Table
5
+ */
6
+ function normalize(input) {
7
+ return input
8
+ .normalize('NFKD')
9
+ .replace(/[\u0300-\u036f]/g, '') // remove diacritic modifiers
10
+ .toLocaleLowerCase();
11
+ }
12
+ /**
13
+ * Performs a case-insensitive check to determine if a string includes another string,
14
+ * handling Unicode characters and locale-specific case mappings.
15
+ *
16
+ * @param {string} input - The string to search within.
17
+ * @param {string} query - The substring to search for.
18
+ * @returns {boolean} - Returns `true` if `query` is found in `input` (case-insensitively), otherwise `false`.
19
+ *
20
+ * @example
21
+ * caseInsensitiveIncludes("Photos", "photo"); // true
22
+ * caseInsensitiveIncludes("Hello", "HELLO"); // true
23
+ * caseInsensitiveIncludes("\uFB00", "\u0046\u0046"); // ff = FF true
24
+ * caseInsensitiveIncludes("Cafè", "cafe"); // true
25
+ */
26
+ function caseInsensitiveIncludes(input, query) {
27
+ return normalize(input).includes(normalize(query));
28
+ }
29
+ function searchItems({ prefix = '', items, options, }) {
30
+ const { query, filterBy, groupBy } = options;
31
+ // filter keys that match `filterBy` search option
32
+ const filteredItems = items.filter((item) => {
33
+ const key = typeof filterBy === 'function' ? filterBy(item) : filterBy;
34
+ const path = item[key];
35
+ const suffix = path.slice(prefix.length);
36
+ return caseInsensitiveIncludes(suffix, query);
37
+ });
38
+ if (!groupBy) {
39
+ return filteredItems;
40
+ }
41
+ // group items using the provided grouping delimiter
42
+ const uniquePaths = new Map();
43
+ for (const item of filteredItems) {
44
+ const key = typeof filterBy === 'function' ? filterBy(item) : filterBy;
45
+ const path = item[key];
46
+ const components = path.split(groupBy);
47
+ for (const [i, component] of components.entries()) {
48
+ if (!caseInsensitiveIncludes(component, query)) {
49
+ continue;
50
+ }
51
+ // list of components ending with match
52
+ const matchedPathSegments = components.slice(0, i + 1);
53
+ // create new path
54
+ let matchedPath = matchedPathSegments.join(groupBy);
55
+ const isFolder = matchedPath !== path;
56
+ if (isFolder) {
57
+ matchedPath += groupBy;
58
+ }
59
+ // ignore anything below the prefix for matching
60
+ if (matchedPath.length > prefix.length && !uniquePaths.has(matchedPath)) {
61
+ // add a new item
62
+ uniquePaths.set(matchedPath, {
63
+ ...item,
64
+ id: crypto.randomUUID(),
65
+ [key]: matchedPath,
66
+ type: isFolder ? 'FOLDER' : 'FILE',
67
+ });
68
+ }
69
+ }
70
+ }
71
+ return Array.from(uniquePaths.values());
72
+ }
73
+
74
+ export { searchItems };
@@ -17,6 +17,7 @@ const useListLocationItems = () => {
17
17
  const enhancedHandler = React__default.useMemo(() => createEnhancedListHandler((input) => listLocationItems({ ...input, config: getConfig() })), [getConfig, listLocationItems]);
18
18
  return useAsyncReducer(enhancedHandler, {
19
19
  items: [],
20
+ hasExhaustedSearch: false,
20
21
  nextToken: undefined,
21
22
  });
22
23
  };
@@ -9,7 +9,8 @@ import '@aws-amplify/ui-react-core';
9
9
  import '@aws-amplify/ui-react-core/elements';
10
10
  import { useDisplayText } from '../../../displayText/context.mjs';
11
11
  import useResolveTableData from '../../hooks/useResolveTableData/useResolveTableData.mjs';
12
- import { COPY_TABLE_RESOLVERS, COPY_TABLE_KEYS } from '../../utils/tableResolvers/copyResolvers.mjs';
12
+ import { COPY_TABLE_RESOLVERS } from '../../utils/tableResolvers/copyResolvers.mjs';
13
+ import { FILE_DATA_ITEM_TABLE_KEYS } from '../../utils/tableResolvers/constants.mjs';
13
14
  import { FoldersMessageProvider } from './FoldersMessageControl.mjs';
14
15
  import { FoldersPaginationProvider } from './FoldersPaginationControl.mjs';
15
16
  import { FoldersTableProvider } from './FoldersTableControl.mjs';
@@ -19,7 +20,7 @@ function CopyViewProvider({ children, ...props }) {
19
20
  const { actionCancelLabel, actionDestinationLabel, actionExitLabel, actionStartLabel, getActionCompleteMessage, overwriteWarningMessage, searchPlaceholder, searchSubmitLabel, searchClearLabel, statusDisplayCanceledLabel, statusDisplayCompletedLabel, statusDisplayFailedLabel, statusDisplayQueuedLabel, title, } = displayText;
20
21
  const { destination, folders, isProcessing, isProcessingComplete, statusCounts, tasks: items, onActionCancel, onActionExit, onActionStart, onSelectDestination, onTaskRemove, } = props;
21
22
  const { hasNextPage, highestPageVisited, hasError: hasFoldersError, message: foldersErrorMessage, query, hasExhaustedSearch, isLoading, page, pageItems, onPaginate, onQuery, onSearchClear, onSearch, onSelectFolder, } = folders;
22
- const tableData = useResolveTableData(COPY_TABLE_KEYS, COPY_TABLE_RESOLVERS, {
23
+ const tableData = useResolveTableData(FILE_DATA_ITEM_TABLE_KEYS, COPY_TABLE_RESOLVERS, {
23
24
  items,
24
25
  props: { displayText, isProcessing, onTaskRemove },
25
26
  });
@@ -22,8 +22,7 @@ const DEFAULT_REFRESH_OPTIONS = { ...DEFAULT_LIST_OPTIONS, refresh: true };
22
22
  const useFolders = ({ destination, setDestination, }) => {
23
23
  const { current, key } = destination;
24
24
  const [{ value, hasError, isLoading, message }, handleList] = useList('folderItems');
25
- const { items, nextToken, search } = value;
26
- const { hasExhaustedSearch = false } = search ?? {};
25
+ const { items, nextToken, hasExhaustedSearch = false } = value;
27
26
  const onInitialize = React__default.useCallback(() => {
28
27
  handleList({
29
28
  prefix: key,
@@ -1,7 +1,6 @@
1
1
  import React__default from 'react';
2
2
  import { ControlsContextProvider } from '../../../controls/context.mjs';
3
3
  import { useDisplayText } from '../../../displayText/context.mjs';
4
- import '@aws-amplify/ui';
5
4
  import { isValidFolderName } from './utils.mjs';
6
5
 
7
6
  function CreateFolderViewProvider({ children, ...props }) {
@@ -1,9 +1,10 @@
1
1
  import React__default from 'react';
2
2
  import { ControlsContextProvider } from '../../../controls/context.mjs';
3
3
  import { useDisplayText } from '../../../displayText/context.mjs';
4
- import '@aws-amplify/ui';
5
4
  import useResolveTableData from '../../hooks/useResolveTableData/useResolveTableData.mjs';
6
- import { DELETE_TABLE_RESOLVERS, DELETE_TABLE_KEYS } from '../../utils/tableResolvers/deleteResolvers.mjs';
5
+ import '@aws-amplify/ui';
6
+ import { FILE_DATA_ITEM_TABLE_KEYS } from '../../utils/tableResolvers/constants.mjs';
7
+ import { DELETE_TABLE_RESOLVERS } from '../../utils/tableResolvers/deleteResolvers.mjs';
7
8
 
8
9
  function DeleteViewProvider({ children, ...props }) {
9
10
  const { DeleteView: displayText } = useDisplayText();
@@ -12,7 +13,7 @@ function DeleteViewProvider({ children, ...props }) {
12
13
  const message = isProcessingComplete
13
14
  ? getActionCompleteMessage({ counts: statusCounts })
14
15
  : undefined;
15
- const tableData = useResolveTableData(DELETE_TABLE_KEYS, DELETE_TABLE_RESOLVERS, {
16
+ const tableData = useResolveTableData(FILE_DATA_ITEM_TABLE_KEYS, DELETE_TABLE_RESOLVERS, {
16
17
  items,
17
18
  props: { displayText, isProcessing, onTaskRemove },
18
19
  });
@@ -1,6 +1,6 @@
1
1
  import React__default from 'react';
2
- import { isUndefined } from '@aws-amplify/ui';
3
- import { useFiles } from '../../../files/context.mjs';
2
+ import { useFileItems } from '../../../fileItems/context.mjs';
3
+ import '@aws-amplify/ui';
4
4
  import { useStore } from '../../../store/context.mjs';
5
5
  import '../../../useAction/context.mjs';
6
6
  import { useAction } from '../../../useAction/useAction.mjs';
@@ -10,7 +10,6 @@ import '../../../credentials/context.mjs';
10
10
  import '@aws-amplify/storage/internals';
11
11
  import '../../../configuration/context.mjs';
12
12
  import 'aws-amplify/storage';
13
- import { isFileTooBig } from '../../../validators/isFileTooBig.mjs';
14
13
  import '../../../actions/configs/context.mjs';
15
14
  import '../../../actions/configs/defaults.mjs';
16
15
  import { DEFAULT_OVERWRITE_ENABLED } from './constants.mjs';
@@ -18,44 +17,24 @@ import { DEFAULT_OVERWRITE_ENABLED } from './constants.mjs';
18
17
  const useUploadView = (options) => {
19
18
  const { onExit: _onExit } = options ?? {};
20
19
  const [{ location }, storeDispatch] = useStore();
21
- const [files, filesDispatch] = useFiles();
20
+ const [{ validItems, invalidItems: invalidFiles }, fileItemsDispatch] = useFileItems();
22
21
  const { current } = location;
23
22
  const [isOverwritingEnabled, setIsOverwritingEnabled] = React__default.useState(DEFAULT_OVERWRITE_ENABLED);
24
- const filesData = React__default.useMemo(() => (files ?? [])?.reduce((curr, item) => {
25
- if (isFileTooBig(item.file)) {
26
- curr.invalidFiles = isUndefined(curr.invalidFiles)
27
- ? [item]
28
- : curr.invalidFiles.concat(item);
29
- }
30
- else {
31
- curr.validFiles = isUndefined(curr.validFiles)
32
- ? [item]
33
- : curr.validFiles.concat(item);
34
- const parsedFileItem = {
35
- ...item,
36
- key: `${location.key}${item.key}`,
37
- };
38
- curr.data = curr.data.concat({
39
- ...parsedFileItem,
40
- preventOverwrite: !isOverwritingEnabled,
41
- });
42
- }
43
- return curr;
44
- }, { invalidFiles: undefined, validFiles: undefined, data: [] }), [files, isOverwritingEnabled, location.key]);
45
- const { data, invalidFiles } = filesData;
46
- const [{ isProcessing, isProcessingComplete, statusCounts, tasks }, handleUploads,] = useAction('upload', { items: data });
23
+ const items = React__default.useMemo(() => (validItems ?? []).map((item) => ({
24
+ ...item,
25
+ key: `${location.key}${item.key}`,
26
+ preventOverwrite: !isOverwritingEnabled,
27
+ })), [validItems, isOverwritingEnabled, location.key]);
28
+ const [{ isProcessing, isProcessingComplete, statusCounts, tasks }, handleUploads,] = useAction('upload', { items });
47
29
  const onDropFiles = (files) => {
48
30
  if (files) {
49
- filesDispatch({ type: 'ADD_FILE_ITEMS', files });
31
+ fileItemsDispatch({ type: 'ADD_FILES', files });
50
32
  }
51
33
  };
52
34
  const onSelectFiles = (type) => {
53
- filesDispatch({ type: 'SELECT_FILES', selectionType: type });
35
+ fileItemsDispatch({ type: 'SELECT_FILES', selectionType: type });
54
36
  };
55
37
  const onActionStart = () => {
56
- invalidFiles?.forEach((file) => {
57
- filesDispatch({ type: 'REMOVE_FILE_ITEM', id: file.id });
58
- });
59
38
  handleUploads();
60
39
  };
61
40
  const onActionCancel = () => {
@@ -63,7 +42,7 @@ const useUploadView = (options) => {
63
42
  };
64
43
  const onActionExit = () => {
65
44
  // clear files state
66
- filesDispatch({ type: 'RESET_FILE_ITEMS' });
45
+ fileItemsDispatch({ type: 'RESET_FILE_ITEMS' });
67
46
  // clear selected action
68
47
  storeDispatch({ type: 'RESET_ACTION_TYPE' });
69
48
  _onExit?.(current);
@@ -72,7 +51,7 @@ const useUploadView = (options) => {
72
51
  setIsOverwritingEnabled((prev) => !prev);
73
52
  };
74
53
  const onTaskRemove = ({ data }) => {
75
- filesDispatch({ type: 'REMOVE_FILE_ITEM', id: data.id });
54
+ fileItemsDispatch({ type: 'REMOVE_FILE_ITEM', id: data.id });
76
55
  };
77
56
  return {
78
57
  isProcessing,
@@ -1,7 +1,6 @@
1
1
  import React__default from 'react';
2
2
  import { ControlsContextProvider } from '../../controls/context.mjs';
3
3
  import { useDisplayText } from '../../displayText/context.mjs';
4
- import '@aws-amplify/ui';
5
4
  import { getLocationDetailViewTableData } from './getLocationDetailViewTableData/getLocationDetailViewTableData.mjs';
6
5
 
7
6
  function LocationDetailViewProvider({ children, ...props }) {