@aws-amplify/ui-react-storage 3.10.3 → 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 (55) hide show
  1. package/dist/browser.js +1 -1
  2. package/dist/{createStorageBrowser-B75dAYRb.js → createStorageBrowser-CVfazB4S.js} +167 -169
  3. package/dist/esm/components/StorageBrowser/actions/handlers/listLocations.mjs +1 -1
  4. package/dist/esm/components/StorageBrowser/createStorageBrowser/StorageBrowserDefault.mjs +1 -1
  5. package/dist/esm/components/StorageBrowser/createStorageBrowser/createProvider.mjs +5 -3
  6. package/dist/esm/components/StorageBrowser/createStorageBrowser/createStorageBrowser.mjs +1 -1
  7. package/dist/esm/components/StorageBrowser/displayText/libraries/en/uploadView.mjs +3 -6
  8. package/dist/esm/components/StorageBrowser/fileItems/constants.mjs +11 -0
  9. package/dist/esm/components/StorageBrowser/fileItems/context.mjs +42 -0
  10. package/dist/esm/components/StorageBrowser/fileItems/fileItemsReducer.mjs +33 -0
  11. package/dist/esm/components/StorageBrowser/fileItems/utils.mjs +55 -0
  12. package/dist/esm/components/StorageBrowser/views/LocationActionView/CopyView/CopyViewProvider.mjs +3 -2
  13. package/dist/esm/components/StorageBrowser/views/LocationActionView/CreateFolderView/CreateFolderViewProvider.mjs +0 -1
  14. package/dist/esm/components/StorageBrowser/views/LocationActionView/DeleteView/DeleteViewProvider.mjs +4 -3
  15. package/dist/esm/components/StorageBrowser/views/LocationActionView/UploadView/useUploadView.mjs +13 -34
  16. package/dist/esm/components/StorageBrowser/views/LocationDetailView/LocationDetailViewProvider.mjs +0 -1
  17. package/dist/esm/components/StorageBrowser/views/LocationDetailView/useLocationDetailView.mjs +3 -3
  18. package/dist/esm/components/StorageBrowser/views/context/actionViews.mjs +1 -1
  19. package/dist/esm/components/StorageBrowser/views/context/primaryViews.mjs +1 -1
  20. package/dist/esm/components/StorageBrowser/views/utils/tableResolvers/constants.mjs +9 -1
  21. package/dist/esm/components/StorageBrowser/views/utils/tableResolvers/copyResolvers.mjs +4 -42
  22. package/dist/esm/components/StorageBrowser/views/utils/tableResolvers/deleteResolvers.mjs +4 -42
  23. package/dist/esm/components/StorageBrowser/views/utils/tableResolvers/utils.mjs +45 -5
  24. package/dist/esm/version.mjs +1 -1
  25. package/dist/index.js +1 -1
  26. package/dist/types/components/StorageBrowser/actions/index.d.ts +1 -1
  27. package/dist/types/components/StorageBrowser/createStorageBrowser/createProvider.d.ts +1 -1
  28. package/dist/types/components/StorageBrowser/createStorageBrowser/types.d.ts +21 -3
  29. package/dist/types/components/StorageBrowser/displayText/types.d.ts +1 -1
  30. package/dist/types/components/StorageBrowser/fileItems/constants.d.ts +4 -0
  31. package/dist/types/components/StorageBrowser/fileItems/context.d.ts +6 -0
  32. package/dist/types/components/StorageBrowser/fileItems/fileItemsReducer.d.ts +6 -0
  33. package/dist/types/components/StorageBrowser/fileItems/index.d.ts +3 -0
  34. package/dist/types/components/StorageBrowser/fileItems/types.d.ts +44 -0
  35. package/dist/types/components/StorageBrowser/fileItems/utils.d.ts +5 -0
  36. package/dist/types/components/StorageBrowser/validators/index.d.ts +1 -2
  37. package/dist/types/components/StorageBrowser/views/LocationActionView/UploadView/types.d.ts +1 -1
  38. package/dist/types/components/StorageBrowser/views/utils/index.d.ts +1 -1
  39. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/__testUtils__/tasks.d.ts +6 -11
  40. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/constants.d.ts +1 -0
  41. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/copyResolvers.d.ts +2 -3
  42. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/deleteResolvers.d.ts +2 -3
  43. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/index.d.ts +3 -2
  44. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/types.d.ts +10 -10
  45. package/dist/types/components/StorageBrowser/views/utils/tableResolvers/utils.d.ts +15 -7
  46. package/dist/types/version.d.ts +1 -1
  47. package/package.json +1 -1
  48. package/dist/esm/components/StorageBrowser/files/context.mjs +0 -31
  49. package/dist/esm/components/StorageBrowser/files/utils.mjs +0 -52
  50. package/dist/esm/components/StorageBrowser/validators/isFileTooBig.mjs +0 -4
  51. package/dist/types/components/StorageBrowser/files/context.d.ts +0 -6
  52. package/dist/types/components/StorageBrowser/files/index.d.ts +0 -2
  53. package/dist/types/components/StorageBrowser/files/types.d.ts +0 -28
  54. package/dist/types/components/StorageBrowser/files/utils.d.ts +0 -7
  55. package/dist/types/components/StorageBrowser/validators/isFileTooBig.d.ts +0 -2
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ var uiReactCore = require('@aws-amplify/ui-react-core');
9
9
  var auth = require('aws-amplify/auth');
10
10
  var storage = require('aws-amplify/storage');
11
11
  var internal = require('@aws-amplify/ui-react/internal');
12
- var createStorageBrowser = require('./createStorageBrowser-B75dAYRb.js');
12
+ var createStorageBrowser = require('./createStorageBrowser-CVfazB4S.js');
13
13
  require('@aws-amplify/storage/internals');
14
14
  require('aws-amplify');
15
15
  require('aws-amplify/utils');
@@ -1,4 +1,4 @@
1
- export type { ActionInputConfig, CopyHandler, CopyHandlerData, CopyHandlerInput, CopyHandlerOutput, CreateFolderHandler, CreateFolderHandlerData, CreateFolderHandlerInput, CreateFolderHandlerOptions, CreateFolderHandlerOutput, DefaultHandlers, DownloadHandler, DownloadHandlerData, DownloadHandlerInput, DownloadHandlerOptions, DownloadHandlerOutput, DeleteHandler, DeleteHandlerData, DeleteHandlerInput, DeleteHandlerOptions, DeleteHandlerOutput, FileData, FileDataItem, FileItem, FolderData, ListHandler, ListHandlerInput, ListHandlerOptions, ListHandlerOutput, ListLocationItemsHandler, ListLocationItemsHandlerInput, ListLocationItemsHandlerOptions, ListLocationItemsHandlerOutput, ListLocationsExcludeOptions, ListLocations, ListLocationsInput, ListLocationsOutput, ListLocationsHandler, ListLocationsHandlerInput, ListLocationsHandlerOptions, ListLocationsHandlerOutput, LocationData, LocationItemData, LocationItemType, LocationPermissions, LocationType, TaskData, TaskHandler, TaskHandlerInput, TaskHandlerOptions, TaskHandlerOutput, TaskResult, TaskResultStatus, UploadHandler, UploadHandlerData, UploadHandlerInput, UploadHandlerOptions, UploadHandlerOutput, } from './handlers';
1
+ export type { ActionInputConfig, CopyHandler, CopyHandlerData, CopyHandlerInput, CopyHandlerOutput, CreateFolderHandler, CreateFolderHandlerData, CreateFolderHandlerInput, CreateFolderHandlerOptions, CreateFolderHandlerOutput, DefaultHandlers, DownloadHandler, DownloadHandlerData, DownloadHandlerInput, DownloadHandlerOptions, DownloadHandlerOutput, DeleteHandler, DeleteHandlerData, DeleteHandlerInput, DeleteHandlerOptions, DeleteHandlerOutput, FileData, FileDataItem, FileItem, FolderData, ListHandler, ListHandlerInput, ListHandlerOptions, ListHandlerOutput, ListLocationItemsHandler, ListLocationItemsHandlerInput, ListLocationItemsHandlerOptions, ListLocationItemsHandlerOutput, ListLocationsExcludeOptions, ListLocations, ListLocationsInput, ListLocationsOutput, ListLocationsHandler, ListLocationsHandlerInput, ListLocationsHandlerOptions, ListLocationsHandlerOutput, LocationData, LocationItemData, LocationItemType, LocationPermissions, LocationType, OptionalFileData, TaskData, TaskHandler, TaskHandlerInput, TaskHandlerOptions, TaskHandlerOutput, TaskResult, TaskResultStatus, UploadHandler, UploadHandlerData, UploadHandlerInput, UploadHandlerOptions, UploadHandlerOutput, } from './handlers';
2
2
  export { copyHandler, createFileDataItem, createFolderHandler, defaultHandlers, downloadHandler, getFileKey, isFileDataItem, isFileItem, isMultipartUpload, listLocationItemsHandler, listLocationsHandler, uploadHandler, } from './handlers';
3
3
  export type { ExtendedActionConfigs, ActionViewConfig, ActionViewConfigs, ActionConfigsProviderProps, ActionHandler, CustomActionConfigs, DefaultActionConfigs, } from './configs';
4
4
  export { ActionConfigsProvider, defaultActionConfigs, defaultActionViewConfigs, getActionConfigs, isDefaultActionViewType, useActionConfigs, } from './configs';
@@ -1,3 +1,3 @@
1
1
  import React from 'react';
2
2
  import type { CreateStorageBrowserInput, StorageBrowserProviderProps } from './types';
3
- export default function createProvider({ actions, components, config, }: CreateStorageBrowserInput): (props: StorageBrowserProviderProps) => React.JSX.Element;
3
+ export default function createProvider({ actions, components, config, options, }: CreateStorageBrowserInput): (props: StorageBrowserProviderProps) => React.JSX.Element;
@@ -86,6 +86,20 @@ export interface StorageBrowserActions {
86
86
  default?: DefaultActionConfigs;
87
87
  custom?: CustomActionConfigs;
88
88
  }
89
+ export interface StorageBrowserOptions {
90
+ /**
91
+ * @description Overrides default file validation called when selecting files to be uploaded
92
+ * @param {File} file — The file to validate
93
+ * @returns {boolean} — Returns true if `file` is valid, false otherwise
94
+ * @example
95
+ * ```tsx
96
+ * const MAX_FILE_SIZE = 10 * 1000 * 1000 * 1000; // 10 GB in bytes
97
+ *
98
+ * const myValidateFile = (file: File) => file.size < MAX_FILE_SIZE;
99
+ * ```
100
+ */
101
+ validateFile?: (file: File) => boolean;
102
+ }
89
103
  /**
90
104
  * @description configuration and options for `createStorageBrowser`
91
105
  */
@@ -107,6 +121,10 @@ export interface CreateStorageBrowserInput {
107
121
  * @description Overrides default `components` used within `StorageBrowser`
108
122
  */
109
123
  components?: StorageBrowserComponents;
124
+ /**
125
+ * @description Additional options and overrides for `StorageBrowser`
126
+ */
127
+ options?: StorageBrowserOptions;
110
128
  }
111
129
  /**
112
130
  * `StorageBrowser` component properties
@@ -162,17 +180,17 @@ export interface StorageBrowserProviderProps<TViews = {}> extends StoreProviderP
162
180
  */
163
181
  views?: TViews;
164
182
  /**
165
- * @deprecated will be removed in a future major verison. Prefer `value` for controlled behavior or `defaultValue` for initializng `actionType`
183
+ * @deprecated will be removed in a future major version. Prefer `value` for controlled behavior or `defaultValue` for initializing `actionType`
166
184
  * @description initial `actionType`, does not update
167
185
  */
168
186
  actionType?: string;
169
187
  /**
170
- * @deprecated will be removed in a future major verison. Prefer `value` for controlled behavior or `defaultValue` for initializng `actionType`
188
+ * @deprecated will be removed in a future major version. Prefer `value` for controlled behavior or `defaultValue` for initializing `actionType`
171
189
  * @description initial `location` data, does not update
172
190
  */
173
191
  location?: LocationData;
174
192
  /**
175
- * @deprecated will be removed in a future major verison. Prefer `value` for controlled behavior or `defaultValue` for initializng `actionType`
193
+ * @deprecated will be removed in a future major version. Prefer `value` for controlled behavior or `defaultValue` for initializing `actionType`
176
194
  * @description initial `location` subpath to establish navigation state, does not update
177
195
  */
178
196
  path?: string;
@@ -1,7 +1,7 @@
1
1
  import type { StatusCounts, Task } from '../tasks';
2
2
  import type { CopyHandlerData, CreateFolderHandlerData, DeleteHandlerData, FolderData, LocationData, LocationItemData, TaskData, UploadHandlerData, LocationPermissions } from '../actions';
3
3
  import type { MessageType } from '../components';
4
- import type { FileItems } from '../files';
4
+ import type { FileItems } from '../fileItems';
5
5
  import type { LocationState } from '../store';
6
6
  /**
7
7
  * Common list view display text values
@@ -0,0 +1,4 @@
1
+ import type { FileItemsState, ResolvedFiles } from './types';
2
+ export declare const DEFAULT_STATE: FileItemsState;
3
+ export declare const DEFAULT_RESOLVED_FILES: ResolvedFiles;
4
+ export declare const UPLOAD_FILE_SIZE_LIMIT: number;
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import type { FileItemsContextType, FileItemsProviderProps } from './types';
3
+ export declare const FileItemsContext: React.Context<FileItemsContextType>, useFileItems: (params?: {
4
+ errorMessage?: string | undefined;
5
+ } | undefined) => FileItemsContextType;
6
+ export declare function FileItemsProvider({ children, validateFile, }: FileItemsProviderProps): React.JSX.Element;
@@ -0,0 +1,6 @@
1
+ import type { FileItemsState, FileItemsActionType } from './types';
2
+ export declare const fileItemsReducer: React.Reducer<FileItemsState, Exclude<FileItemsActionType, {
3
+ type: 'SELECT_FILES';
4
+ } | {
5
+ type: 'ADD_FILES';
6
+ }>>;
@@ -0,0 +1,3 @@
1
+ export { FileItemsContext, FileItemsProvider, useFileItems } from './context';
2
+ export * from './types';
3
+ export { defaultValidateFile } from './utils';
@@ -0,0 +1,44 @@
1
+ import type { FileItem, LocationItemType } from '../actions';
2
+ /**
3
+ * native OS file picker type. to restrict selectable file types, define the picker types
4
+ * followed by accepted file types as strings
5
+ * @example
6
+ * ```ts
7
+ * type JPEGOnly = ['FOLDER', '.jpeg'];
8
+ * ```
9
+ */
10
+ export type SelectionType = LocationItemType | [LocationItemType, ...string[]];
11
+ export type FileItemsActionType = {
12
+ type: 'ADD_FILES';
13
+ files?: File[];
14
+ } | {
15
+ type: 'ADD_FILE_ITEMS';
16
+ validFiles?: File[];
17
+ invalidFiles?: File[];
18
+ } | {
19
+ type: 'REMOVE_FILE_ITEM';
20
+ id: string;
21
+ } | {
22
+ type: 'SELECT_FILES';
23
+ selectionType?: SelectionType;
24
+ } | {
25
+ type: 'RESET_FILE_ITEMS';
26
+ };
27
+ export type FileItemsActionDispatchType = Exclude<FileItemsActionType, {
28
+ type: 'ADD_FILE_ITEMS';
29
+ }>;
30
+ export type HandleFileItemsAction = (input: FileItemsActionDispatchType) => void;
31
+ export interface ResolvedFiles {
32
+ validFiles: File[] | undefined;
33
+ invalidFiles: File[] | undefined;
34
+ }
35
+ export type FileItems = FileItem[];
36
+ export interface FileItemsState {
37
+ validItems: FileItems | undefined;
38
+ invalidItems: FileItems | undefined;
39
+ }
40
+ export type FileItemsContextType = [FileItemsState, HandleFileItemsAction];
41
+ export interface FileItemsProviderProps {
42
+ children?: React.ReactNode;
43
+ validateFile?: (file: File) => boolean;
44
+ }
@@ -0,0 +1,5 @@
1
+ import type { FileItems, ResolvedFiles, SelectionType } from './types';
2
+ export declare const defaultValidateFile: (file: File) => boolean;
3
+ export declare const resolveFiles: (files: File[] | undefined, validateFile?: ((file: File) => boolean) | undefined) => ResolvedFiles;
4
+ export declare const processFileItems: (prevItems: FileItems | undefined, files: File[] | undefined) => FileItems | undefined;
5
+ export declare const parseFileSelectParams: (value?: SelectionType) => [selectType: import("@aws-amplify/ui-react/dist/types/components/FileSelect/FileSelect").SelectType, options?: import("@aws-amplify/ui-react/internal").FileSelectOptions | undefined];
@@ -1,4 +1,3 @@
1
+ export { assertAccountId } from './assertAccountId';
1
2
  export { assertLocationData, assertPrefix } from './assertLocationData';
2
3
  export { assertRegisterAuthListener } from './assertRegisterAuthListener';
3
- export { assertAccountId } from './assertAccountId';
4
- export { isFileTooBig } from './isFileTooBig';
@@ -1,5 +1,5 @@
1
1
  import type { LocationData, UploadHandlerData } from '../../../actions';
2
- import type { FileItems } from '../../../files';
2
+ import type { FileItems } from '../../../fileItems';
3
3
  import type { ActionViewType, ActionViewProps, ActionViewState } from '../types';
4
4
  export interface UploadViewState extends ActionViewState<UploadHandlerData> {
5
5
  isOverwritingEnabled: boolean;
@@ -1 +1 @@
1
- export { COPY_TABLE_KEYS, COPY_TABLE_RESOLVERS, DELETE_TABLE_KEYS, DELETE_TABLE_RESOLVERS, UPLOAD_TABLE_KEYS, UPLOAD_TABLE_RESOLVERS, } from './tableResolvers';
1
+ export { COPY_TABLE_RESOLVERS, FILE_DATA_ITEM_TABLE_KEYS, DELETE_TABLE_RESOLVERS, UPLOAD_TABLE_KEYS, UPLOAD_TABLE_RESOLVERS, } from './tableResolvers';
@@ -1,13 +1,8 @@
1
1
  import type { TaskStatus } from '../../../../tasks';
2
- import type { CopyActionTask, DeleteActionTask, UploadActionTask } from '../types';
3
- type MockCopyOrDeleteTaskStatus = Exclude<TaskStatus, 'OVERWRITE_PREVENTED'>;
4
- type MockCopyTasks = {
5
- [K in MockCopyOrDeleteTaskStatus]: Omit<CopyActionTask, 'status'> & {
6
- status: K;
7
- };
8
- };
9
- type MockDeleteTasks = {
10
- [K in MockCopyOrDeleteTaskStatus]: Omit<DeleteActionTask, 'status'> & {
2
+ import type { FileDataTask, UploadActionTask } from '../types';
3
+ type MockFileDataTaskStatus = Exclude<TaskStatus, 'OVERWRITE_PREVENTED'>;
4
+ type MockFileDataTasks = {
5
+ [K in MockFileDataTaskStatus]: Omit<FileDataTask, 'status'> & {
11
6
  status: K;
12
7
  };
13
8
  };
@@ -16,8 +11,8 @@ type MockUploadTasks = {
16
11
  status: K;
17
12
  };
18
13
  };
19
- export declare const MOCK_COPY_TASKS: MockCopyTasks;
20
- export declare const MOCK_DELETE_TASKS: MockDeleteTasks;
14
+ export declare const MOCK_COPY_TASKS: MockFileDataTasks;
15
+ export declare const MOCK_DELETE_TASKS: MockFileDataTasks;
21
16
  export declare const MOCK_UPLOAD_TASKS_SINGLE_PART: MockUploadTasks;
22
17
  export declare const MOCK_UPLOAD_TASKS_MULTIPART: MockUploadTasks;
23
18
  export {};
@@ -14,3 +14,4 @@ export declare const STATUS_ICONS: {
14
14
  readonly CANCELED: "action-canceled";
15
15
  readonly QUEUED: "action-queued";
16
16
  };
17
+ export declare const FILE_DATA_ITEM_TABLE_KEYS: readonly ["name", "folder", "type", "size", "status", "cancel"];
@@ -1,3 +1,2 @@
1
- import type { CopyTaskTableResolvers } from './types';
2
- export declare const COPY_TABLE_KEYS: readonly ["name", "folder", "type", "size", "status", "cancel"];
3
- export declare const COPY_TABLE_RESOLVERS: CopyTaskTableResolvers;
1
+ import type { FileDataTaskTableResolvers } from './types';
2
+ export declare const COPY_TABLE_RESOLVERS: FileDataTaskTableResolvers;
@@ -1,3 +1,2 @@
1
- import type { DeleteTableResolvers } from './types';
2
- export declare const DELETE_TABLE_KEYS: readonly ["name", "folder", "type", "size", "status", "cancel"];
3
- export declare const DELETE_TABLE_RESOLVERS: DeleteTableResolvers;
1
+ import type { FileDataTaskTableResolvers } from './types';
2
+ export declare const DELETE_TABLE_RESOLVERS: FileDataTaskTableResolvers;
@@ -1,3 +1,4 @@
1
- export { COPY_TABLE_KEYS, COPY_TABLE_RESOLVERS } from './copyResolvers';
1
+ export { COPY_TABLE_RESOLVERS } from './copyResolvers';
2
2
  export { UPLOAD_TABLE_KEYS, UPLOAD_TABLE_RESOLVERS } from './uploadResolvers';
3
- export { DELETE_TABLE_KEYS, DELETE_TABLE_RESOLVERS } from './deleteResolvers';
3
+ export { DELETE_TABLE_RESOLVERS } from './deleteResolvers';
4
+ export { FILE_DATA_ITEM_TABLE_KEYS } from './constants';
@@ -1,4 +1,4 @@
1
- import type { CopyHandlerData, DeleteHandlerData, UploadHandlerData } from '../../../actions';
1
+ import type { CopyHandlerData, DeleteHandlerData, UploadHandlerData, TaskData, OptionalFileData } from '../../../actions';
2
2
  import type { CopyViewDisplayText, DeleteViewDisplayText, UploadViewDisplayText } from '../../../displayText';
3
3
  import type { Task } from '../../../tasks';
4
4
  import type { DataTableResolvers } from '../../hooks/useResolveTableData';
@@ -8,6 +8,10 @@ export interface DeleteActionTask extends Task<DeleteHandlerData> {
8
8
  }
9
9
  export interface UploadActionTask extends Task<UploadHandlerData> {
10
10
  }
11
+ export interface FileDataTask extends Task<TaskData & OptionalFileData & {
12
+ fileKey: string;
13
+ }> {
14
+ }
11
15
  interface ActionTableResolverProps<TDisplayText, TTask> {
12
16
  displayText: TDisplayText;
13
17
  isProcessing: boolean;
@@ -20,17 +24,13 @@ export interface DeleteTableResolverProps extends ActionTableResolverProps<Delet
20
24
  export interface UploadTableResolverProps extends ActionTableResolverProps<UploadViewDisplayText, UploadActionTask> {
21
25
  isMultipartUpload: (file: File) => boolean;
22
26
  }
23
- type ActionTableKey = 'name' | 'folder' | 'type' | 'size' | 'status' | 'progress' | 'cancel';
24
- export type CopyTableKey = Exclude<ActionTableKey, 'progress'>;
25
- export type DeleteTableKey = Exclude<ActionTableKey, 'progress'>;
26
- export type UploadTableKey = ActionTableKey;
27
- export interface CopyTaskTableResolvers extends DataTableResolvers<CopyTableKey, CopyTableResolverProps, CopyActionTask> {
28
- }
29
- export interface DeleteTableResolvers extends DataTableResolvers<DeleteTableKey, DeleteTableResolverProps, DeleteActionTask> {
27
+ export type FileDataTaskTableResolverProps = CopyTableResolverProps | DeleteTableResolverProps;
28
+ export type ActionTableKey = 'name' | 'folder' | 'type' | 'size' | 'status' | 'cancel';
29
+ export type UploadTableKey = ActionTableKey | 'progress';
30
+ export interface FileDataTaskTableResolvers extends DataTableResolvers<ActionTableKey, FileDataTaskTableResolverProps, FileDataTask> {
30
31
  }
31
32
  export interface UploadTableResolvers extends DataTableResolvers<UploadTableKey, UploadTableResolverProps, UploadActionTask> {
32
33
  }
33
- export type GetCopyCell = CopyTaskTableResolvers['getCell'];
34
- export type GetDeleteCell = DeleteTableResolvers['getCell'];
34
+ export type GetFileDataCell = FileDataTaskTableResolvers['getCell'];
35
35
  export type GetUploadCell = UploadTableResolvers['getCell'];
36
36
  export {};
@@ -1,12 +1,20 @@
1
- import type { DataTableButtonDataCell, DataTableNumberDataCell } from '../../../components';
2
- import type { CopyActionTask, DeleteActionTask, GetCopyCell, GetDeleteCell, UploadActionTask } from './types';
1
+ import type { DataTableButtonDataCell, DataTableNumberDataCell, WithKey } from '../../../components';
2
+ import type { FileDataTask, GetFileDataCell, UploadActionTask, ActionTableKey } from './types';
3
3
  export declare const getFileType: (value: string, fallback?: string) => string;
4
4
  export declare const getCellName: (value: string) => string;
5
5
  export declare const getUploadCellFolder: ({ data: { file: { webkitRelativePath }, }, }: UploadActionTask, fallback?: string) => string;
6
- export declare const getCopyCellFolder: ({ data: { fileKey, sourceKey }, }: CopyActionTask) => string;
7
- export declare const getDeleteCellFolder: ({ data: { fileKey, key }, }: DeleteActionTask) => string;
6
+ export declare const getFileDataCellFolder: (task: FileDataTask) => string;
8
7
  export declare const getUploadCellProgress: ({ progress, status, }: UploadActionTask) => DataTableNumberDataCell['content'];
9
8
  export declare const getFileSize: (value: number | undefined, fallback?: string) => string;
10
- type CellInput = Parameters<GetCopyCell>[0] | Parameters<GetDeleteCell>[0];
11
- export declare const getCopyOrDeleteCancelCellContent: <TInput extends CellInput, TCallback extends TInput["props"]["onTaskRemove"] extends (item: infer TItem) => void ? (item: TItem) => void : never>(data: TInput) => DataTableButtonDataCell['content'];
12
- export {};
9
+ export declare const getFileDataCancelCellContent: <TInput extends WithKey<import("../../hooks/useResolveTableData/types").CellData<import("./types").FileDataTaskTableResolverProps, FileDataTask>, ActionTableKey>, TCallback extends TInput["props"]["onTaskRemove"] extends (item: infer TItem) => void ? (item: TItem) => void : never>(data: TInput) => DataTableButtonDataCell['content'];
10
+ /**
11
+ * Generates a unique key for a table cell based on the key and item id
12
+ */
13
+ export declare const getFileDataCellKey: ({ key, item, }: WithKey<{
14
+ item: FileDataTask;
15
+ }, ActionTableKey>) => string;
16
+ export declare const name: GetFileDataCell;
17
+ export declare const folder: GetFileDataCell;
18
+ export declare const type: GetFileDataCell;
19
+ export declare const size: GetFileDataCell;
20
+ export declare const cancel: GetFileDataCell;
@@ -1 +1 @@
1
- export declare const VERSION = "3.10.3";
1
+ export declare const VERSION = "3.11.0";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-amplify/ui-react-storage",
3
- "version": "3.10.3",
3
+ "version": "3.11.0",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/esm/index.mjs",
6
6
  "exports": {
@@ -1,31 +0,0 @@
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 { filesReducer, parseFileSelectParams } from './utils.mjs';
6
-
7
- const defaultValue = [undefined, noop];
8
- const { FilesContext, useFiles } = createContextUtilities({
9
- contextName: 'Files',
10
- defaultValue,
11
- });
12
- function FilesProvider({ children, }) {
13
- const [items, dispatch] = React__default.useReducer(filesReducer, []);
14
- const [fileInput, handleFileSelect] = useFileSelect((nextFiles) => {
15
- dispatch({ type: 'ADD_FILE_ITEMS', files: nextFiles });
16
- });
17
- const handleFilesAction = React__default.useCallback((action) => {
18
- if (action.type === 'SELECT_FILES') {
19
- handleFileSelect(...parseFileSelectParams(action.selectionType));
20
- }
21
- else {
22
- dispatch(action);
23
- }
24
- }, [handleFileSelect]);
25
- const value = React__default.useMemo(() => [items, handleFilesAction], [items, handleFilesAction]);
26
- return (React__default.createElement(FilesContext.Provider, { value: value },
27
- fileInput,
28
- children));
29
- }
30
-
31
- export { FilesContext, FilesProvider, useFiles };
@@ -1,52 +0,0 @@
1
- import { isUndefined, isString, isEmpty } from '@aws-amplify/ui';
2
-
3
- const compareFileItems = (prev, next) => prev.key.localeCompare(next.key);
4
- const resolveFiles = (prevItems, files) => {
5
- if (!files?.length)
6
- return prevItems;
7
- // construct `nextItems` and filter out existing `file` entries
8
- const nextItems = files.reduce((items, file) => {
9
- const { name, webkitRelativePath } = file;
10
- return prevItems.some(({ file: existing }) => existing.name === name &&
11
- existing.webkitRelativePath === webkitRelativePath)
12
- ? items
13
- : items.concat({
14
- key: isEmpty(webkitRelativePath) ? name : webkitRelativePath,
15
- id: crypto.randomUUID(),
16
- file,
17
- });
18
- }, []);
19
- if (!nextItems.length)
20
- return prevItems;
21
- if (!prevItems.length) {
22
- return nextItems.sort(compareFileItems);
23
- }
24
- return prevItems.concat(nextItems).sort(compareFileItems);
25
- };
26
- const filesReducer = (prevItems, input) => {
27
- switch (input.type) {
28
- case 'ADD_FILE_ITEMS': {
29
- return resolveFiles(prevItems, input.files);
30
- }
31
- case 'REMOVE_FILE_ITEM': {
32
- const filteredItems = prevItems.filter(({ id }) => id !== input.id);
33
- return filteredItems.length === prevItems.length
34
- ? prevItems
35
- : filteredItems;
36
- }
37
- case 'RESET_FILE_ITEMS': {
38
- return [];
39
- }
40
- // TODO: clear message
41
- }
42
- };
43
- const parseFileSelectParams = (value) => {
44
- if (isUndefined(value))
45
- return ['FILE', undefined];
46
- if (isString(value))
47
- return [value, undefined];
48
- const [selectType, ...rest] = value;
49
- return [selectType, !rest?.length ? undefined : { accept: rest.join() }];
50
- };
51
-
52
- export { filesReducer, parseFileSelectParams, resolveFiles };
@@ -1,4 +0,0 @@
1
- const UPLOAD_FILE_SIZE_LIMIT = 160 * 1000 * 1000 * 1000;
2
- const isFileTooBig = (file) => file.size > UPLOAD_FILE_SIZE_LIMIT;
3
-
4
- export { UPLOAD_FILE_SIZE_LIMIT, isFileTooBig };
@@ -1,6 +0,0 @@
1
- import React from 'react';
2
- import type { FilesContextType, FilesProviderProps } from './types';
3
- export declare const FilesContext: React.Context<FilesContextType>, useFiles: (params?: {
4
- errorMessage?: string | undefined;
5
- } | undefined) => FilesContextType;
6
- export declare function FilesProvider({ children, }: FilesProviderProps): React.JSX.Element;
@@ -1,2 +0,0 @@
1
- export { FilesProvider, FilesContext, useFiles } from './context';
2
- export * from './types';
@@ -1,28 +0,0 @@
1
- import type { FileItem, LocationItemType } from '../actions';
2
- /**
3
- * native OS file picker type. to restrict selectable file types, define the picker types
4
- * followed by accepted file types as strings
5
- * @example
6
- * ```ts
7
- * type JPEGOnly = ['FOLDER', '.jpeg'];
8
- * ```
9
- */
10
- export type SelectionType = LocationItemType | [LocationItemType, ...string[]];
11
- export type FilesActionType = {
12
- type: 'ADD_FILE_ITEMS';
13
- files?: File[];
14
- } | {
15
- type: 'REMOVE_FILE_ITEM';
16
- id: string;
17
- } | {
18
- type: 'SELECT_FILES';
19
- selectionType?: SelectionType;
20
- } | {
21
- type: 'RESET_FILE_ITEMS';
22
- };
23
- export type HandleFilesAction = (input: FilesActionType) => void;
24
- export type FileItems = FileItem[];
25
- export type FilesContextType = [FileItems | undefined, HandleFilesAction];
26
- export interface FilesProviderProps {
27
- children?: React.ReactNode;
28
- }
@@ -1,7 +0,0 @@
1
- import type React from 'react';
2
- import type { FileItems, FilesActionType, SelectionType } from './types';
3
- export declare const resolveFiles: (prevItems: FileItems, files: File[] | undefined) => FileItems;
4
- export declare const filesReducer: React.Reducer<FileItems, Exclude<FilesActionType, {
5
- type: 'SELECT_FILES';
6
- }>>;
7
- export declare const parseFileSelectParams: (value?: SelectionType) => [selectType: import("@aws-amplify/ui-react/dist/types/components/FileSelect/FileSelect").SelectType, options?: import("@aws-amplify/ui-react/internal").FileSelectOptions | undefined];
@@ -1,2 +0,0 @@
1
- export declare const UPLOAD_FILE_SIZE_LIMIT: number;
2
- export declare const isFileTooBig: (file: File) => boolean;