@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.
- package/README.md +23 -15
- package/dist/browser.js +1 -1
- package/dist/{createStorageBrowser-Cbdy8OAN.js → createStorageBrowser-CVfazB4S.js} +193 -207
- package/dist/esm/components/StorageBrowser/actions/handlers/listLocations.mjs +1 -1
- package/dist/esm/components/StorageBrowser/createStorageBrowser/StorageBrowserDefault.mjs +1 -1
- package/dist/esm/components/StorageBrowser/createStorageBrowser/createProvider.mjs +5 -3
- package/dist/esm/components/StorageBrowser/createStorageBrowser/createStorageBrowser.mjs +1 -1
- package/dist/esm/components/StorageBrowser/displayText/libraries/en/uploadView.mjs +3 -6
- package/dist/esm/components/StorageBrowser/fileItems/constants.mjs +11 -0
- package/dist/esm/components/StorageBrowser/fileItems/context.mjs +42 -0
- package/dist/esm/components/StorageBrowser/fileItems/fileItemsReducer.mjs +33 -0
- package/dist/esm/components/StorageBrowser/fileItems/utils.mjs +55 -0
- package/dist/esm/components/StorageBrowser/useAction/createEnhancedListHandler.mjs +20 -101
- package/dist/esm/components/StorageBrowser/useAction/searchItems.mjs +74 -0
- package/dist/esm/components/StorageBrowser/useAction/useListLocationItems.mjs +1 -0
- package/dist/esm/components/StorageBrowser/views/LocationActionView/CopyView/CopyViewProvider.mjs +3 -2
- package/dist/esm/components/StorageBrowser/views/LocationActionView/CopyView/useFolders.mjs +1 -2
- package/dist/esm/components/StorageBrowser/views/LocationActionView/CreateFolderView/CreateFolderViewProvider.mjs +0 -1
- package/dist/esm/components/StorageBrowser/views/LocationActionView/DeleteView/DeleteViewProvider.mjs +4 -3
- package/dist/esm/components/StorageBrowser/views/LocationActionView/UploadView/useUploadView.mjs +13 -34
- package/dist/esm/components/StorageBrowser/views/LocationDetailView/LocationDetailViewProvider.mjs +0 -1
- package/dist/esm/components/StorageBrowser/views/LocationDetailView/useLocationDetailView.mjs +4 -5
- package/dist/esm/components/StorageBrowser/views/LocationsView/useLocationsView.mjs +1 -2
- package/dist/esm/components/StorageBrowser/views/context/actionViews.mjs +1 -1
- package/dist/esm/components/StorageBrowser/views/context/primaryViews.mjs +1 -1
- package/dist/esm/components/StorageBrowser/views/utils/tableResolvers/constants.mjs +9 -1
- package/dist/esm/components/StorageBrowser/views/utils/tableResolvers/copyResolvers.mjs +4 -42
- package/dist/esm/components/StorageBrowser/views/utils/tableResolvers/deleteResolvers.mjs +4 -42
- package/dist/esm/components/StorageBrowser/views/utils/tableResolvers/utils.mjs +45 -5
- package/dist/esm/version.mjs +1 -1
- package/dist/index.js +1 -1
- package/dist/types/components/FileUploader/FileUploader.d.ts +1 -1
- package/dist/types/components/FileUploader/hooks/index.d.ts +2 -1
- package/dist/types/components/FileUploader/hooks/useFileUploader/actions.d.ts +2 -2
- package/dist/types/components/FileUploader/hooks/useFileUploader/index.d.ts +2 -1
- package/dist/types/components/FileUploader/hooks/useFileUploader/reducer.d.ts +1 -1
- package/dist/types/components/FileUploader/hooks/useFileUploader/types.d.ts +2 -2
- package/dist/types/components/FileUploader/hooks/useFileUploader/useFileUploader.d.ts +4 -3
- package/dist/types/components/FileUploader/hooks/useUploadFiles/index.d.ts +2 -1
- package/dist/types/components/FileUploader/hooks/useUploadFiles/useUploadFiles.d.ts +3 -3
- package/dist/types/components/FileUploader/index.d.ts +2 -2
- package/dist/types/components/FileUploader/types.d.ts +3 -3
- package/dist/types/components/FileUploader/ui/Container/index.d.ts +2 -1
- package/dist/types/components/FileUploader/ui/DropZone/DropZone.d.ts +1 -1
- package/dist/types/components/FileUploader/ui/DropZone/index.d.ts +1 -1
- package/dist/types/components/FileUploader/ui/DropZone/types.d.ts +1 -1
- package/dist/types/components/FileUploader/ui/FileList/FileControl.d.ts +1 -1
- package/dist/types/components/FileUploader/ui/FileList/FileDetails.d.ts +1 -1
- package/dist/types/components/FileUploader/ui/FileList/FileList.d.ts +1 -1
- package/dist/types/components/FileUploader/ui/FileList/FileRemoveButton.d.ts +1 -1
- package/dist/types/components/FileUploader/ui/FileList/FileStatusMessage.d.ts +1 -1
- package/dist/types/components/FileUploader/ui/FileList/FileThumbnail.d.ts +1 -1
- package/dist/types/components/FileUploader/ui/FileList/index.d.ts +1 -1
- package/dist/types/components/FileUploader/ui/FileList/types.d.ts +2 -2
- package/dist/types/components/FileUploader/ui/FileListFooter/FileListFooter.d.ts +1 -1
- package/dist/types/components/FileUploader/ui/FileListFooter/index.d.ts +2 -1
- package/dist/types/components/FileUploader/ui/FileListHeader/FileListHeader.d.ts +1 -1
- package/dist/types/components/FileUploader/ui/FileListHeader/index.d.ts +2 -1
- package/dist/types/components/FileUploader/ui/FilePicker/FilePicker.d.ts +1 -1
- package/dist/types/components/FileUploader/ui/FilePicker/index.d.ts +2 -1
- package/dist/types/components/FileUploader/ui/index.d.ts +12 -6
- package/dist/types/components/FileUploader/utils/displayText.d.ts +1 -1
- package/dist/types/components/FileUploader/utils/getInput.d.ts +3 -3
- package/dist/types/components/FileUploader/utils/index.d.ts +4 -2
- package/dist/types/components/FileUploader/utils/resolveFile.d.ts +1 -1
- package/dist/types/components/FileUploader/utils/uploadFile.d.ts +1 -1
- package/dist/types/components/StorageBrowser/ErrorBoundary/index.d.ts +2 -1
- package/dist/types/components/StorageBrowser/StorageBrowserAmplify.d.ts +1 -1
- package/dist/types/components/StorageBrowser/actions/__testUtils__/permissions.d.ts +1 -1
- package/dist/types/components/StorageBrowser/actions/configs/context.d.ts +1 -1
- package/dist/types/components/StorageBrowser/actions/configs/defaults.d.ts +1 -1
- package/dist/types/components/StorageBrowser/actions/configs/index.d.ts +4 -2
- package/dist/types/components/StorageBrowser/actions/configs/types.d.ts +2 -2
- package/dist/types/components/StorageBrowser/actions/configs/utils.d.ts +1 -1
- package/dist/types/components/StorageBrowser/actions/handlers/copy.d.ts +1 -1
- package/dist/types/components/StorageBrowser/actions/handlers/createFolder.d.ts +1 -1
- package/dist/types/components/StorageBrowser/actions/handlers/defaults.d.ts +6 -6
- package/dist/types/components/StorageBrowser/actions/handlers/delete.d.ts +1 -1
- package/dist/types/components/StorageBrowser/actions/handlers/download.d.ts +1 -1
- package/dist/types/components/StorageBrowser/actions/handlers/listLocationItems.d.ts +2 -2
- package/dist/types/components/StorageBrowser/actions/handlers/listLocations.d.ts +1 -1
- package/dist/types/components/StorageBrowser/actions/handlers/types.d.ts +1 -1
- package/dist/types/components/StorageBrowser/actions/handlers/upload.d.ts +1 -1
- package/dist/types/components/StorageBrowser/actions/handlers/utils.d.ts +3 -3
- package/dist/types/components/StorageBrowser/actions/index.d.ts +4 -2
- package/dist/types/components/StorageBrowser/adapters/createAmplifyAuthAdapter/createAmplifyAuthAdapter.d.ts +1 -1
- package/dist/types/components/StorageBrowser/adapters/createAmplifyAuthAdapter/createAmplifyListLocationsHandler.d.ts +1 -1
- package/dist/types/components/StorageBrowser/adapters/createAmplifyAuthAdapter/getPaginatedLocations.d.ts +1 -1
- package/dist/types/components/StorageBrowser/adapters/createManagedAuthAdapter/createLocationCredentialsHandler.d.ts +2 -2
- package/dist/types/components/StorageBrowser/adapters/createManagedAuthAdapter/createManagedAuthAdapter.d.ts +1 -1
- package/dist/types/components/StorageBrowser/adapters/index.d.ts +1 -1
- package/dist/types/components/StorageBrowser/adapters/permissionParsers.d.ts +2 -2
- package/dist/types/components/StorageBrowser/adapters/types.d.ts +3 -3
- package/dist/types/components/StorageBrowser/components/ComponentsProvider.d.ts +1 -1
- package/dist/types/components/StorageBrowser/components/base/DropdownMenu.d.ts +1 -1
- package/dist/types/components/StorageBrowser/components/base/Field.d.ts +1 -1
- package/dist/types/components/StorageBrowser/components/base/PaginationButton.d.ts +1 -1
- package/dist/types/components/StorageBrowser/components/base/Table.d.ts +1 -1
- package/dist/types/components/StorageBrowser/components/composables/ActionDestination.d.ts +1 -1
- package/dist/types/components/StorageBrowser/components/composables/ActionsList.d.ts +1 -1
- package/dist/types/components/StorageBrowser/components/composables/DataTable/DataTable.d.ts +2 -2
- package/dist/types/components/StorageBrowser/components/composables/DataTable/dataCells/ButtonDataCell.d.ts +1 -1
- package/dist/types/components/StorageBrowser/components/composables/DataTable/dataCells/TextDataCell.d.ts +1 -1
- package/dist/types/components/StorageBrowser/components/composables/DataTable/headers/SortHeader.d.ts +1 -1
- package/dist/types/components/StorageBrowser/components/composables/DataTable/index.d.ts +3 -2
- package/dist/types/components/StorageBrowser/components/composables/DataTable/types.d.ts +8 -8
- package/dist/types/components/StorageBrowser/components/composables/Message.d.ts +1 -1
- package/dist/types/components/StorageBrowser/components/composables/context.d.ts +1 -1
- package/dist/types/components/StorageBrowser/components/composables/defaults.d.ts +1 -1
- package/dist/types/components/StorageBrowser/components/composables/index.d.ts +1 -1
- package/dist/types/components/StorageBrowser/components/composables/types.d.ts +20 -20
- package/dist/types/components/StorageBrowser/components/defaults.d.ts +1 -1
- package/dist/types/components/StorageBrowser/components/elements/IconElement.d.ts +2 -1
- package/dist/types/components/StorageBrowser/components/elements/defaults.d.ts +1 -1
- package/dist/types/components/StorageBrowser/components/elements/index.d.ts +4 -2
- package/dist/types/components/StorageBrowser/components/index.d.ts +9 -6
- package/dist/types/components/StorageBrowser/components/types.d.ts +1 -1
- package/dist/types/components/StorageBrowser/configuration/context.d.ts +1 -1
- package/dist/types/components/StorageBrowser/configuration/createConfigurationProvider.d.ts +1 -1
- package/dist/types/components/StorageBrowser/configuration/index.d.ts +1 -1
- package/dist/types/components/StorageBrowser/configuration/types.d.ts +3 -3
- package/dist/types/components/StorageBrowser/configuration/useGetActionInputCallback.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/context.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/compareFunctions/compareButtonData.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/compareFunctions/compareDateData.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/compareFunctions/compareNumberData.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/compareFunctions/compareTextData.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/getNavigationItems.d.ts +2 -2
- package/dist/types/components/StorageBrowser/controls/hooks/getNavigationParts.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/useActionCancel.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/useActionDestination.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/useActionExit.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/useActionStart.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/useActionsList.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/useAddFiles.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/useAddFolder.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/useDataRefresh.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/useDataTable.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/useDropZone.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/useFolderNameField.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/useLoadingIndicator.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/useMessage.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/useNavigation.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/useOverwriteToggle.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/usePagination.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/useResolvedComposable.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/useSearchField.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/useSearchSubfoldersToggle.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/useStatusDisplay.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/hooks/useTitle.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/index.d.ts +1 -1
- package/dist/types/components/StorageBrowser/controls/types.d.ts +4 -4
- package/dist/types/components/StorageBrowser/createStorageBrowser/createProvider.d.ts +2 -2
- package/dist/types/components/StorageBrowser/createStorageBrowser/createStorageBrowser.d.ts +1 -1
- package/dist/types/components/StorageBrowser/createStorageBrowser/index.d.ts +1 -1
- package/dist/types/components/StorageBrowser/createStorageBrowser/types.d.ts +30 -12
- package/dist/types/components/StorageBrowser/credentials/context.d.ts +1 -1
- package/dist/types/components/StorageBrowser/credentials/credentialsStore/create.d.ts +1 -1
- package/dist/types/components/StorageBrowser/credentials/credentialsStore/index.d.ts +1 -1
- package/dist/types/components/StorageBrowser/credentials/credentialsStore/registry.d.ts +2 -2
- package/dist/types/components/StorageBrowser/credentials/credentialsStore/store.d.ts +2 -2
- package/dist/types/components/StorageBrowser/credentials/credentialsStore/types.d.ts +2 -2
- package/dist/types/components/StorageBrowser/credentials/index.d.ts +3 -2
- package/dist/types/components/StorageBrowser/credentials/types.d.ts +4 -4
- package/dist/types/components/StorageBrowser/credentials/useCredentialsStore.d.ts +2 -2
- package/dist/types/components/StorageBrowser/displayText/context.d.ts +1 -1
- package/dist/types/components/StorageBrowser/displayText/index.d.ts +1 -1
- package/dist/types/components/StorageBrowser/displayText/libraries/en/copyView.d.ts +1 -1
- package/dist/types/components/StorageBrowser/displayText/libraries/en/createFolderView.d.ts +1 -1
- package/dist/types/components/StorageBrowser/displayText/libraries/en/default.d.ts +1 -1
- package/dist/types/components/StorageBrowser/displayText/libraries/en/deleteView.d.ts +1 -1
- package/dist/types/components/StorageBrowser/displayText/libraries/en/locationDetailView.d.ts +1 -1
- package/dist/types/components/StorageBrowser/displayText/libraries/en/locationsView.d.ts +1 -1
- package/dist/types/components/StorageBrowser/displayText/libraries/en/shared.d.ts +1 -1
- package/dist/types/components/StorageBrowser/displayText/libraries/en/uploadView.d.ts +1 -1
- package/dist/types/components/StorageBrowser/displayText/types.d.ts +5 -5
- package/dist/types/components/StorageBrowser/displayText/utils.d.ts +1 -1
- package/dist/types/components/StorageBrowser/fileItems/constants.d.ts +4 -0
- package/dist/types/components/StorageBrowser/fileItems/context.d.ts +6 -0
- package/dist/types/components/StorageBrowser/fileItems/fileItemsReducer.d.ts +6 -0
- package/dist/types/components/StorageBrowser/fileItems/index.d.ts +3 -0
- package/dist/types/components/StorageBrowser/fileItems/types.d.ts +44 -0
- package/dist/types/components/StorageBrowser/fileItems/utils.d.ts +5 -0
- package/dist/types/components/StorageBrowser/index.d.ts +12 -7
- package/dist/types/components/StorageBrowser/locationItems/context.d.ts +1 -1
- package/dist/types/components/StorageBrowser/locationItems/index.d.ts +2 -1
- package/dist/types/components/StorageBrowser/storage-internal.d.ts +2 -1
- package/dist/types/components/StorageBrowser/store/constants.d.ts +1 -1
- package/dist/types/components/StorageBrowser/store/context.d.ts +1 -1
- package/dist/types/components/StorageBrowser/store/index.d.ts +1 -1
- package/dist/types/components/StorageBrowser/store/storeReducer.d.ts +1 -1
- package/dist/types/components/StorageBrowser/store/types.d.ts +2 -2
- package/dist/types/components/StorageBrowser/store/useStoreReducer.d.ts +1 -1
- package/dist/types/components/StorageBrowser/store/utils.d.ts +2 -2
- package/dist/types/components/StorageBrowser/store/validateStoreProps.d.ts +1 -1
- package/dist/types/components/StorageBrowser/tasks/constants.d.ts +1 -1
- package/dist/types/components/StorageBrowser/tasks/index.d.ts +1 -1
- package/dist/types/components/StorageBrowser/tasks/types.d.ts +1 -1
- package/dist/types/components/StorageBrowser/tasks/utils.d.ts +1 -1
- package/dist/types/components/StorageBrowser/useAction/context.d.ts +1 -1
- package/dist/types/components/StorageBrowser/useAction/createEnhancedListHandler.d.ts +19 -41
- package/dist/types/components/StorageBrowser/useAction/index.d.ts +1 -1
- package/dist/types/components/StorageBrowser/useAction/searchItems.d.ts +24 -0
- package/dist/types/components/StorageBrowser/useAction/types.d.ts +5 -5
- package/dist/types/components/StorageBrowser/useAction/useAction.d.ts +1 -1
- package/dist/types/components/StorageBrowser/useAction/useHandler.d.ts +2 -2
- package/dist/types/components/StorageBrowser/useAction/useList.d.ts +3 -3
- package/dist/types/components/StorageBrowser/useAction/useListFolderItems.d.ts +4 -8
- package/dist/types/components/StorageBrowser/useAction/useListLocationItems.d.ts +5 -5
- package/dist/types/components/StorageBrowser/useAction/useListLocations.d.ts +4 -4
- package/dist/types/components/StorageBrowser/useAction/utils.d.ts +2 -2
- package/dist/types/components/StorageBrowser/validators/assertLocationData.d.ts +1 -1
- package/dist/types/components/StorageBrowser/validators/assertRegisterAuthListener.d.ts +1 -1
- package/dist/types/components/StorageBrowser/validators/index.d.ts +1 -2
- package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/CopyView.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/CopyViewProvider.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/FoldersMessageControl.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/FoldersPaginationControl.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/FoldersTableControl.d.ts +2 -2
- package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/getDestinationPickerTableData.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/types.d.ts +3 -3
- package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/useCopyView.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationActionView/CopyView/useFolders.d.ts +2 -2
- package/dist/types/components/StorageBrowser/views/LocationActionView/CreateFolderView/CreateFolderView.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationActionView/CreateFolderView/CreateFolderViewProvider.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationActionView/CreateFolderView/types.d.ts +2 -2
- package/dist/types/components/StorageBrowser/views/LocationActionView/CreateFolderView/useCreateFolderView.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationActionView/DeleteView/DeleteView.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationActionView/DeleteView/DeleteViewProvider.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationActionView/DeleteView/types.d.ts +2 -2
- package/dist/types/components/StorageBrowser/views/LocationActionView/DeleteView/useDeleteView.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationActionView/LocationActionView.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationActionView/UploadView/UploadView.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationActionView/UploadView/UploadViewProvider.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationActionView/UploadView/types.d.ts +3 -3
- package/dist/types/components/StorageBrowser/views/LocationActionView/UploadView/useUploadView.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationActionView/index.d.ts +9 -5
- package/dist/types/components/StorageBrowser/views/LocationActionView/types.d.ts +4 -4
- package/dist/types/components/StorageBrowser/views/LocationDetailView/LocationDetailView.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationDetailView/LocationDetailViewProvider.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationDetailView/getLocationDetailViewTableData/constants.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationDetailView/getLocationDetailViewTableData/getFileRowContent.d.ts +2 -2
- package/dist/types/components/StorageBrowser/views/LocationDetailView/getLocationDetailViewTableData/getFolderRowContent.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationDetailView/getLocationDetailViewTableData/getHeaders.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationDetailView/getLocationDetailViewTableData/getLocationDetailViewTableData.d.ts +4 -4
- package/dist/types/components/StorageBrowser/views/LocationDetailView/getLocationDetailViewTableData/types.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationDetailView/index.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationDetailView/types.d.ts +4 -4
- package/dist/types/components/StorageBrowser/views/LocationDetailView/useLocationDetailView.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationsView/LocationsView.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationsView/LocationsViewProvider.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationsView/getLocationsViewTableData/getHeaders.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationsView/getLocationsViewTableData/getLocationsViewTableData.d.ts +3 -3
- package/dist/types/components/StorageBrowser/views/LocationsView/getLocationsViewTableData/types.d.ts +2 -2
- package/dist/types/components/StorageBrowser/views/LocationsView/index.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/LocationsView/types.d.ts +2 -2
- package/dist/types/components/StorageBrowser/views/LocationsView/useLocationsView.d.ts +2 -2
- package/dist/types/components/StorageBrowser/views/context/actionViews.d.ts +2 -2
- package/dist/types/components/StorageBrowser/views/context/getViews.d.ts +3 -3
- package/dist/types/components/StorageBrowser/views/context/primaryViews.d.ts +2 -2
- package/dist/types/components/StorageBrowser/views/context/types.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/context/views.d.ts +3 -3
- package/dist/types/components/StorageBrowser/views/hooks/useResolveTableData/index.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/hooks/useResolveTableData/types.d.ts +2 -2
- package/dist/types/components/StorageBrowser/views/hooks/useResolveTableData/useResolveTableData.d.ts +2 -2
- package/dist/types/components/StorageBrowser/views/index.d.ts +8 -4
- package/dist/types/components/StorageBrowser/views/types.d.ts +5 -5
- package/dist/types/components/StorageBrowser/views/useView.d.ts +3 -3
- package/dist/types/components/StorageBrowser/views/utils/index.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/utils/tableResolvers/__testUtils__/tasks.d.ts +7 -12
- package/dist/types/components/StorageBrowser/views/utils/tableResolvers/constants.d.ts +1 -0
- package/dist/types/components/StorageBrowser/views/utils/tableResolvers/copyResolvers.d.ts +2 -3
- package/dist/types/components/StorageBrowser/views/utils/tableResolvers/deleteResolvers.d.ts +2 -3
- package/dist/types/components/StorageBrowser/views/utils/tableResolvers/index.d.ts +3 -2
- package/dist/types/components/StorageBrowser/views/utils/tableResolvers/types.d.ts +13 -13
- package/dist/types/components/StorageBrowser/views/utils/tableResolvers/uploadResolvers.d.ts +1 -1
- package/dist/types/components/StorageBrowser/views/utils/tableResolvers/utils.d.ts +15 -7
- package/dist/types/components/StorageImage/index.d.ts +1 -1
- package/dist/types/components/StorageImage/types.d.ts +3 -3
- package/dist/types/components/StorageManager/StorageManager.d.ts +1 -1
- package/dist/types/components/StorageManager/index.d.ts +2 -2
- package/dist/types/components/StorageManager/types.d.ts +2 -2
- package/dist/types/components/StorageManager/ui/Container/index.d.ts +2 -1
- package/dist/types/components/StorageManager/ui/DropZone/DropZone.d.ts +1 -1
- package/dist/types/components/StorageManager/ui/DropZone/index.d.ts +1 -1
- package/dist/types/components/StorageManager/ui/DropZone/types.d.ts +1 -1
- package/dist/types/components/StorageManager/ui/FileList/FileControl.d.ts +1 -1
- package/dist/types/components/StorageManager/ui/FileList/FileDetails.d.ts +1 -1
- package/dist/types/components/StorageManager/ui/FileList/FileList.d.ts +1 -1
- package/dist/types/components/StorageManager/ui/FileList/FileRemoveButton.d.ts +1 -1
- package/dist/types/components/StorageManager/ui/FileList/FileStatusMessage.d.ts +1 -1
- package/dist/types/components/StorageManager/ui/FileList/FileThumbnail.d.ts +1 -1
- package/dist/types/components/StorageManager/ui/FileList/index.d.ts +1 -1
- package/dist/types/components/StorageManager/ui/FileList/types.d.ts +2 -2
- package/dist/types/components/StorageManager/ui/FileListFooter/FileListFooter.d.ts +1 -1
- package/dist/types/components/StorageManager/ui/FileListFooter/index.d.ts +2 -1
- package/dist/types/components/StorageManager/ui/FileListHeader/FileListHeader.d.ts +1 -1
- package/dist/types/components/StorageManager/ui/FileListHeader/index.d.ts +2 -1
- package/dist/types/components/StorageManager/ui/FilePicker/FilePicker.d.ts +1 -1
- package/dist/types/components/StorageManager/ui/FilePicker/index.d.ts +2 -1
- package/dist/types/components/StorageManager/ui/index.d.ts +12 -6
- package/dist/types/components/index.d.ts +6 -3
- package/dist/types/index.d.ts +4 -2
- package/dist/types/version.d.ts +1 -1
- package/package.json +6 -6
- package/dist/esm/components/StorageBrowser/files/context.mjs +0 -31
- package/dist/esm/components/StorageBrowser/files/utils.mjs +0 -52
- package/dist/esm/components/StorageBrowser/validators/isFileTooBig.mjs +0 -4
- package/dist/types/components/StorageBrowser/files/context.d.ts +0 -6
- package/dist/types/components/StorageBrowser/files/index.d.ts +0 -2
- package/dist/types/components/StorageBrowser/files/types.d.ts +0 -28
- package/dist/types/components/StorageBrowser/files/utils.d.ts +0 -7
- 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 '../
|
|
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 {
|
|
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(
|
|
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 '../
|
|
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
|
|
71
|
-
.filter(({ file }) => isFileTooBig(file))
|
|
68
|
+
const invalidFileNames = data.invalidFiles
|
|
72
69
|
.map(({ file }) => file.name)
|
|
73
70
|
.join(', ');
|
|
74
|
-
if (
|
|
71
|
+
if (invalidFileNames) {
|
|
75
72
|
return {
|
|
76
|
-
content: `Files larger than 160GB cannot be added to the upload queue: ${
|
|
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
|
|
84
|
-
let
|
|
13
|
+
const items = [];
|
|
14
|
+
let nextToken = undefined;
|
|
85
15
|
do {
|
|
86
|
-
const output =
|
|
16
|
+
const output = await handler({
|
|
87
17
|
...input,
|
|
88
|
-
options: {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
-
|
|
100
|
-
|
|
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 =
|
|
33
|
+
const output = await handler({
|
|
113
34
|
...input,
|
|
114
35
|
options: { ...rest, nextToken },
|
|
115
|
-
})
|
|
116
|
-
|
|
117
|
-
|
|
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
|
|
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
|
};
|
package/dist/esm/components/StorageBrowser/views/LocationActionView/CopyView/CopyViewProvider.mjs
CHANGED
|
@@ -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
|
|
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(
|
|
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,
|
|
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
|
|
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(
|
|
16
|
+
const tableData = useResolveTableData(FILE_DATA_ITEM_TABLE_KEYS, DELETE_TABLE_RESOLVERS, {
|
|
16
17
|
items,
|
|
17
18
|
props: { displayText, isProcessing, onTaskRemove },
|
|
18
19
|
});
|
package/dist/esm/components/StorageBrowser/views/LocationActionView/UploadView/useUploadView.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React__default from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
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 [
|
|
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
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
31
|
+
fileItemsDispatch({ type: 'ADD_FILES', files });
|
|
50
32
|
}
|
|
51
33
|
};
|
|
52
34
|
const onSelectFiles = (type) => {
|
|
53
|
-
|
|
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
|
-
|
|
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
|
-
|
|
54
|
+
fileItemsDispatch({ type: 'REMOVE_FILE_ITEM', id: data.id });
|
|
76
55
|
};
|
|
77
56
|
return {
|
|
78
57
|
isProcessing,
|
package/dist/esm/components/StorageBrowser/views/LocationDetailView/LocationDetailViewProvider.mjs
CHANGED
|
@@ -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 }) {
|