@cayuse-test/react 1.0.9 → 1.0.10
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/dist/{chunk-M2L7SQBQ.js → chunk-6DB5M6WN.js} +3 -3
- package/dist/chunk-6DB5M6WN.js.map +1 -0
- package/dist/{chunk-XU6XYQR5.js → chunk-RJUCILWA.js} +32 -39
- package/dist/chunk-RJUCILWA.js.map +1 -0
- package/dist/components/index.css +10 -19
- package/dist/components/index.css.map +1 -1
- package/dist/components/index.js +2 -2
- package/dist/index.css +10 -19
- package/dist/index.css.map +1 -1
- package/dist/index.js +2 -2
- package/dist/services/upload-s3/index.d.ts +2 -2
- package/dist/services/upload-s3/index.js +1 -1
- package/package.json +13 -16
- package/dist/chunk-M2L7SQBQ.js.map +0 -1
- package/dist/chunk-XU6XYQR5.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -67,7 +67,7 @@ import {
|
|
|
67
67
|
setDictionary,
|
|
68
68
|
setLoginTenantId,
|
|
69
69
|
useActiveColumns
|
|
70
|
-
} from "./chunk-
|
|
70
|
+
} from "./chunk-RJUCILWA.js";
|
|
71
71
|
import {
|
|
72
72
|
useConfirmNavigation,
|
|
73
73
|
useDebounceCallback,
|
|
@@ -157,7 +157,7 @@ import {
|
|
|
157
157
|
UploadError,
|
|
158
158
|
UploadService,
|
|
159
159
|
createUploadService
|
|
160
|
-
} from "./chunk-
|
|
160
|
+
} from "./chunk-6DB5M6WN.js";
|
|
161
161
|
export {
|
|
162
162
|
ACCESS_TOKEN,
|
|
163
163
|
APP_ENV,
|
|
@@ -23,12 +23,12 @@ type IUploadService = {
|
|
|
23
23
|
downloadUrl: (fileId: string) => Promise<string>;
|
|
24
24
|
download: (fileId: string, fileName: string) => Promise<void>;
|
|
25
25
|
};
|
|
26
|
-
declare const
|
|
26
|
+
declare const serviceDefaultProps: {
|
|
27
27
|
shouldUseMultipart: (fileSize: number) => boolean;
|
|
28
28
|
maxConcurrentUploads: number;
|
|
29
29
|
request: typeof fetch;
|
|
30
30
|
};
|
|
31
|
-
type UploadServiceProps = Partial<typeof
|
|
31
|
+
type UploadServiceProps = Partial<typeof serviceDefaultProps>;
|
|
32
32
|
declare const createUploadService: (props?: UploadServiceProps) => IUploadService;
|
|
33
33
|
declare const UploadService: IUploadService;
|
|
34
34
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cayuse-test/react",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.10",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -30,24 +30,10 @@
|
|
|
30
30
|
"engines": {
|
|
31
31
|
"node": ">=20"
|
|
32
32
|
},
|
|
33
|
-
"packageManager": "pnpm@10.14.0",
|
|
34
33
|
"repository": {
|
|
35
34
|
"type": "git",
|
|
36
35
|
"url": "git+ssh://git@bitbucket.org/cayusellc/cayuse-react-components.git"
|
|
37
36
|
},
|
|
38
|
-
"scripts": {
|
|
39
|
-
"build": "tsup",
|
|
40
|
-
"dev": "tsup --watch",
|
|
41
|
-
"check-types": "tsc --noEmit",
|
|
42
|
-
"format": "prettier --write \"**/*.{js,ts,tsx,md}\"",
|
|
43
|
-
"prepare": "test -f scripts/install-hooks.sh && bash scripts/install-hooks.sh || true",
|
|
44
|
-
"lint": "eslint .",
|
|
45
|
-
"lint:fix": "eslint . --fix",
|
|
46
|
-
"storybook": "storybook dev -p 6006",
|
|
47
|
-
"build-storybook": "storybook build",
|
|
48
|
-
"test": "vitest",
|
|
49
|
-
"prepublishOnly": "pnpm run build"
|
|
50
|
-
},
|
|
51
37
|
"dependencies": {
|
|
52
38
|
"@fortawesome/fontawesome-svg-core": "6.7.2",
|
|
53
39
|
"@fortawesome/free-solid-svg-icons": "6.7.2",
|
|
@@ -114,5 +100,16 @@
|
|
|
114
100
|
"typescript-eslint": "^8.35.0",
|
|
115
101
|
"vite": "^7.1.3",
|
|
116
102
|
"vitest": "^3.2.4"
|
|
103
|
+
},
|
|
104
|
+
"scripts": {
|
|
105
|
+
"build": "tsup",
|
|
106
|
+
"dev": "tsup --watch",
|
|
107
|
+
"check-types": "tsc --noEmit",
|
|
108
|
+
"format": "prettier --write \"**/*.{js,ts,tsx,md}\"",
|
|
109
|
+
"lint": "eslint .",
|
|
110
|
+
"lint:fix": "eslint . --fix",
|
|
111
|
+
"storybook": "storybook dev -p 6006",
|
|
112
|
+
"build-storybook": "storybook build",
|
|
113
|
+
"test": "vitest"
|
|
117
114
|
}
|
|
118
|
-
}
|
|
115
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../packages/services/upload-s3/UploadService.ts"],"sourcesContent":["import pLimit from 'p-limit';\n\nexport class UploadError extends Error {\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tcause: any;\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconstructor(message: string, e?: any) {\n\t\tsuper(message);\n\t\tthis.name = 'UploadError';\n\t\tthis.cause = e;\n\t\tthis.stack = e?.stack;\n\t}\n}\n\ntype SimpleUploadData = {\n\tpreSignedUrl: string;\n\tuploadMetadataId: string;\n};\n\ntype UploadData = {\n\tuploadMetadataId: string;\n\tuploadUrls: string[];\n\tuploadId?: string;\n};\n\ntype ETag = {\n\tpartNumber: number;\n\tetagId: string;\n};\n\nexport type UploadMetadataResource = {\n\tid: string;\n\ttenantId: string;\n\tfileName: string;\n\tcreatedAt: Date;\n\tfinalizedAt: Date;\n\tcompletedAt: Date;\n\tuploadedBy: string;\n\tfileSize: number;\n};\n\nexport type ProgressState = {\n\tstatus:\n\t\t| 'ready'\n\t\t| 'preparing'\n\t\t| 'uploading'\n\t\t| 'finalizing'\n\t\t| 'completed'\n\t\t| 'error'\n\t\t| 'cancelled';\n\tuploaded: number;\n\ttotalSize: number;\n\terror?: UploadError;\n};\n\nexport type IUploadService = {\n\tupload: (\n\t\tfile: File,\n\t\tonProgress: (progress: ProgressState) => void,\n\t) => Promise<UploadMetadataResource>;\n\tdownloadUrl: (fileId: string) => Promise<string>;\n\tdownload: (fileId: string, fileName: string) => Promise<void>;\n};\n\nconst DefaultProps = {\n\tshouldUseMultipart: (fileSize: number) => fileSize > 10 * 2 ** 20,\n\tmaxConcurrentUploads: 5,\n\trequest: fetch,\n};\n\nexport type UploadServiceProps = Partial<typeof DefaultProps>;\n\nconst throwIfFalse = (condition: boolean, message: string) => {\n\tif (!condition) {\n\t\tthrow new UploadError(message);\n\t}\n};\n\nexport const createUploadService = (props?: UploadServiceProps): IUploadService => {\n\tconst options = { ...DefaultProps, ...(props || {}) };\n\n\tconst limit = pLimit(options.maxConcurrentUploads);\n\tconst calcNumberOfParts = (fileSize: number) =>\n\t\tMath.floor(fileSize / (5 * 2 ** 20));\n\n\tconst createMultipartPresignedUrls = async (\n\t\tfileName: string,\n\t\tfileSize: number,\n\t): Promise<UploadData> => {\n\t\tconst numberOfParts = calcNumberOfParts(fileSize);\n\n\t\tconst response = await options.request('/api/v2/attachments/multipart/upload', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({ fileName, fileSize, numberOfParts }),\n\t\t});\n\n\t\treturn await response.json();\n\t};\n\n\tconst downloadUrl = async (fileId: string): Promise<string> => {\n\t\tconst response = await options.request(\n\t\t\t`/api/v2/attachments/download?uploadMetadataId=${fileId}`,\n\t\t);\n\n\t\treturn response.json();\n\t};\n\n\tconst download = async (fileId: string, fileName: string): Promise<void> => {\n\t\tconst url = await downloadUrl(fileId);\n\t\tconst link = document.createElement('a');\n\t\tlink.href = url;\n\t\tlink.download = fileName;\n\t\tlink.click();\n\t};\n\n\tconst createSinglePresignedUrl = async (\n\t\tfileName: string,\n\t\tfileSize: number,\n\t): Promise<SimpleUploadData> => {\n\t\tconst response = await options.request('/api/v2/attachments/upload', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({ fileName, fileSize }),\n\t\t});\n\n\t\treturn await response.json();\n\t};\n\n\tconst preparePart = (blob: Blob, partNumber: number, partSize: number): Blob => {\n\t\tconst start = (partNumber - 1) * partSize;\n\t\tconst end = Math.min(start + partSize, blob.size);\n\n\t\treturn blob.slice(start, end);\n\t};\n\n\tconst uploadPart = async (uploadUrl: string, part: Blob) => {\n\t\tconst response = await fetch(uploadUrl, {\n\t\t\tmethod: 'PUT',\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/octet-stream',\n\t\t\t},\n\t\t\tbody: part,\n\t\t});\n\n\t\treturn response.headers.get('ETag');\n\t};\n\n\tconst completeUpload = async (\n\t\tuploadData: UploadData,\n\t\teTags: ETag[],\n\t): Promise<UploadMetadataResource> => {\n\t\tconst handle = async (response: Response) => {\n\t\t\tconst obj = await response.json();\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new UploadError(obj?.message || 'Unknown error occured');\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t};\n\n\t\tif (eTags && eTags.length > 1) {\n\t\t\tconst response = await options.request(\n\t\t\t\t`/api/v2/attachments/multipart/upload/${uploadData.uploadMetadataId}/complete`,\n\t\t\t\t{\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t\tuploadId: uploadData.uploadId,\n\t\t\t\t\t\tetags: eTags,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn await handle(response);\n\t\t}\n\t\tconst response = await options.request(\n\t\t\t`/api/v2/attachments/upload/${uploadData.uploadMetadataId}/complete`,\n\t\t\t{\n\t\t\t\tmethod: 'POST',\n\t\t\t},\n\t\t);\n\n\t\treturn await handle(response);\n\t};\n\n\tconst createPresignedUrls = async (file: File): Promise<UploadData> => {\n\t\tif (options.shouldUseMultipart(file.size)) {\n\t\t\treturn await createMultipartPresignedUrls(file.name, file.size);\n\t\t}\n\t\tconst data = await createSinglePresignedUrl(file.name, file.size);\n\n\t\treturn {\n\t\t\tuploadMetadataId: data.uploadMetadataId,\n\t\t\tuploadUrls: [data.preSignedUrl],\n\t\t};\n\t};\n\n\tconst createState = <T>(\n\t\tinitialState: T,\n\t\tonStateChange: (state: T) => void,\n\t): [T, (s: Partial<T>) => void] => {\n\t\tconst state = {};\n\n\t\tconst setState = (newState: Partial<T>): void => {\n\t\t\tObject.assign(state, newState);\n\t\t\tonStateChange({ ...(state as T) });\n\t\t};\n\n\t\tsetState(initialState); // initial state\n\n\t\treturn [state as T, setState];\n\t};\n\n\tconst uploadFile = async (\n\t\tfile: File,\n\t\tonProgress: (progress: ProgressState) => void,\n\t): Promise<UploadMetadataResource> => {\n\t\tconst initialState: ProgressState = {\n\t\t\tuploaded: 0,\n\t\t\ttotalSize: file.size,\n\t\t\tstatus: 'ready',\n\t\t};\n\t\tconst [state, setState] = createState(initialState, onProgress);\n\n\t\tsetState({ status: 'preparing' });\n\n\t\ttry {\n\t\t\tconst uploadData = await createPresignedUrls(file);\n\t\t\tsetState({ status: 'uploading' });\n\n\t\t\tconst numberOfParts = uploadData.uploadUrls.length;\n\t\t\tconst partSize = Math.ceil(file.size / numberOfParts);\n\n\t\t\t// prepare parts\n\t\t\tconst queuedParts = uploadData.uploadUrls.map((uploadUrl, index) =>\n\t\t\t\tlimit(async () => {\n\t\t\t\t\tconst partNumber = index + 1;\n\t\t\t\t\tconst part = preparePart(file, partNumber, partSize);\n\t\t\t\t\tconst etagId = await uploadPart(uploadUrl, part);\n\t\t\t\t\tsetState({\n\t\t\t\t\t\tuploaded: Math.min(state.uploaded + partSize, state.totalSize),\n\t\t\t\t\t});\n\n\t\t\t\t\treturn { partNumber, etagId };\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\tconst results = await Promise.all(queuedParts);\n\n\t\t\tconst parts = results.filter((x) => !!x.etagId) as ETag[];\n\n\t\t\t// complete upload\n\t\t\tconst fileMetadata = await completeUpload(uploadData, parts);\n\t\t\tsetState({ status: 'completed' });\n\n\t\t\treturn fileMetadata;\n\t\t} catch (e) {\n\t\t\tif (e instanceof UploadError) {\n\t\t\t\tsetState({ status: 'error', error: e });\n\t\t\t\tthrow e;\n\t\t\t} else {\n\t\t\t\tconst overrideErr = new UploadError(\n\t\t\t\t\t'An error occurred while uploading the file',\n\t\t\t\t\te,\n\t\t\t\t);\n\t\t\t\tsetState({ status: 'error', error: overrideErr });\n\t\t\t\tthrow overrideErr;\n\t\t\t}\n\t\t}\n\t};\n\n\tconst getFilextension = (filename: string) => {\n\t\tconst parts = filename.toLocaleLowerCase().split('.');\n\t\tif (parts.length === 1) return;\n\t\treturn parts.pop();\n\t};\n\n\tconst upload = (\n\t\tfile: File,\n\t\tonProgress: (progress: ProgressState) => void,\n\t): Promise<UploadMetadataResource> => {\n\t\tthrowIfFalse(file.name.length > 0, 'File name must not be blank');\n\t\tthrowIfFalse(file.size > 0, 'File must not be blank');\n\t\tthrowIfFalse(file.size <= 75 * 2 ** 20, 'File size must be less than 75MB');\n\t\tthrowIfFalse(\n\t\t\tgetFilextension(file.name) !== 'exe',\n\t\t\t'Attachments with filetype .exe cannot be accepted. Please try a different file type.',\n\t\t);\n\n\t\treturn uploadFile(file, onProgress);\n\t};\n\n\treturn {\n\t\tdownloadUrl,\n\t\tdownload,\n\t\tupload,\n\t};\n};\n\nexport const UploadService = createUploadService({\n\trequest: (url, options) => {\n\t\tconst storedToken = localStorage?.getItem('fk_accessToken');\n\n\t\tconst opt = { headers: {}, ...(options ?? {}) };\n\n\t\treturn fetch(url, {\n\t\t\t...opt,\n\t\t\theaders: {\n\t\t\t\t...opt.headers,\n\t\t\t\tAuthorization: `Bearer ${storedToken}`,\n\t\t\t},\n\t\t});\n\t},\n});\n\nexport default UploadService;\n"],"mappings":"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","names":["response"]}
|