@susonwaiba/react-media-uploader 0.1.4 → 0.1.6
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.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { markMediaAsCanceled, generateFileHash, generateUploadUrl, uploadToStorage, markMediaAsTemp, markMediaAsActive, generateMediaType, } from "../lib/media-helper";
|
|
1
|
+
import { markMediaAsCanceled, generateFileHash, generateUploadUrl, uploadToStorage, markMediaAsTemp, markMediaAsActive, generateMediaType, getMediaImageDimension, } from "../lib/media-helper";
|
|
2
2
|
import { MediaStatusEnum, MediaTypeEnum, } from "../types/media";
|
|
3
3
|
import { useState } from "react";
|
|
4
4
|
export function useMediaUploader({ defaultValues, mediaUploadSuccessStatus = MediaStatusEnum.TEMP, enableManualUpload = false, serverConfig, onUploadSuccess, onUploadFailure, } = {}) {
|
|
@@ -19,8 +19,18 @@ export function useMediaUploader({ defaultValues, mediaUploadSuccessStatus = Med
|
|
|
19
19
|
const localId = crypto.randomUUID();
|
|
20
20
|
const mediaType = await generateMediaType(file);
|
|
21
21
|
let tempPreviewUrl = undefined;
|
|
22
|
+
let tempHeight = undefined;
|
|
23
|
+
let tempWidth = undefined;
|
|
22
24
|
if (mediaType === MediaTypeEnum.IMAGE) {
|
|
23
25
|
tempPreviewUrl = URL.createObjectURL(file);
|
|
26
|
+
try {
|
|
27
|
+
const tempDimension = await getMediaImageDimension(tempPreviewUrl);
|
|
28
|
+
tempHeight = tempDimension.height;
|
|
29
|
+
tempWidth = tempDimension.width;
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
console.log("Error while generating media image dimension ->", e);
|
|
33
|
+
}
|
|
24
34
|
}
|
|
25
35
|
const item = {
|
|
26
36
|
localId,
|
|
@@ -33,6 +43,8 @@ export function useMediaUploader({ defaultValues, mediaUploadSuccessStatus = Med
|
|
|
33
43
|
name: file.name,
|
|
34
44
|
mimeType: file.type,
|
|
35
45
|
size: file.size,
|
|
46
|
+
height: tempHeight,
|
|
47
|
+
width: tempWidth,
|
|
36
48
|
checksum: await generateFileHash(file),
|
|
37
49
|
},
|
|
38
50
|
};
|
|
@@ -87,18 +99,18 @@ export function useMediaUploader({ defaultValues, mediaUploadSuccessStatus = Med
|
|
|
87
99
|
}
|
|
88
100
|
return newState;
|
|
89
101
|
});
|
|
90
|
-
if (serverConfig?.
|
|
102
|
+
if (serverConfig?.onMarkMediaAsCanceled) {
|
|
103
|
+
await serverConfig.onMarkMediaAsCanceled([
|
|
104
|
+
uploadData?.item?.id,
|
|
105
|
+
]);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
91
108
|
await markMediaAsCanceled({
|
|
92
109
|
url: serverConfig?.markMediaAsCanceled,
|
|
93
110
|
additionalHeaders: serverConfig?.additionalHeaders,
|
|
94
111
|
mediaIds: [uploadData?.item?.id],
|
|
95
112
|
});
|
|
96
113
|
}
|
|
97
|
-
else if (serverConfig?.onMarkMediaAsCanceled) {
|
|
98
|
-
await serverConfig.onMarkMediaAsCanceled([
|
|
99
|
-
uploadData?.item?.id,
|
|
100
|
-
]);
|
|
101
|
-
}
|
|
102
114
|
},
|
|
103
115
|
};
|
|
104
116
|
setUploadInfos((previous) => {
|
|
@@ -37,3 +37,7 @@ export interface MarkMediaAsCanceledProps {
|
|
|
37
37
|
mediaIds: (string | number)[];
|
|
38
38
|
}
|
|
39
39
|
export declare function markMediaAsCanceled({ url, additionalHeaders, mediaIds, }: MarkMediaAsActiveProps): Promise<import("axios").AxiosResponse<any, any, {}>>;
|
|
40
|
+
export declare function getMediaImageDimension(imageUrl: string): Promise<{
|
|
41
|
+
height: number;
|
|
42
|
+
width: number;
|
|
43
|
+
}>;
|
package/dist/lib/media-helper.js
CHANGED
|
@@ -75,3 +75,16 @@ export async function markMediaAsCanceled({ url, additionalHeaders, mediaIds, })
|
|
|
75
75
|
});
|
|
76
76
|
return res;
|
|
77
77
|
}
|
|
78
|
+
export async function getMediaImageDimension(imageUrl) {
|
|
79
|
+
return new Promise((res, rej) => {
|
|
80
|
+
const tempImg = new Image();
|
|
81
|
+
tempImg.src = imageUrl;
|
|
82
|
+
tempImg.onload = () => {
|
|
83
|
+
res({
|
|
84
|
+
height: tempImg.naturalHeight,
|
|
85
|
+
width: tempImg.naturalWidth,
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
tempImg.onerror = () => rej(new Error(`Failed to load image: ${imageUrl}`));
|
|
89
|
+
});
|
|
90
|
+
}
|
package/package.json
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
markMediaAsTemp,
|
|
7
7
|
markMediaAsActive,
|
|
8
8
|
generateMediaType,
|
|
9
|
+
getMediaImageDimension,
|
|
9
10
|
} from "@/lib/media-helper";
|
|
10
11
|
import {
|
|
11
12
|
type Media,
|
|
@@ -93,8 +94,17 @@ export function useMediaUploader<T extends object>({
|
|
|
93
94
|
const localId = crypto.randomUUID();
|
|
94
95
|
const mediaType = await generateMediaType(file);
|
|
95
96
|
let tempPreviewUrl: string | undefined = undefined;
|
|
97
|
+
let tempHeight: number | undefined = undefined;
|
|
98
|
+
let tempWidth: number | undefined = undefined;
|
|
96
99
|
if (mediaType === MediaTypeEnum.IMAGE) {
|
|
97
100
|
tempPreviewUrl = URL.createObjectURL(file);
|
|
101
|
+
try {
|
|
102
|
+
const tempDimension = await getMediaImageDimension(tempPreviewUrl);
|
|
103
|
+
tempHeight = tempDimension.height;
|
|
104
|
+
tempWidth = tempDimension.width;
|
|
105
|
+
} catch (e) {
|
|
106
|
+
console.log("Error while generating media image dimension ->", e);
|
|
107
|
+
}
|
|
98
108
|
}
|
|
99
109
|
const item: MediaItem = {
|
|
100
110
|
localId,
|
|
@@ -107,6 +117,8 @@ export function useMediaUploader<T extends object>({
|
|
|
107
117
|
name: file.name,
|
|
108
118
|
mimeType: file.type,
|
|
109
119
|
size: file.size,
|
|
120
|
+
height: tempHeight,
|
|
121
|
+
width: tempWidth,
|
|
110
122
|
checksum: await generateFileHash(file),
|
|
111
123
|
},
|
|
112
124
|
};
|
|
@@ -167,16 +179,16 @@ export function useMediaUploader<T extends object>({
|
|
|
167
179
|
}
|
|
168
180
|
return newState;
|
|
169
181
|
});
|
|
170
|
-
if (serverConfig?.
|
|
182
|
+
if (serverConfig?.onMarkMediaAsCanceled) {
|
|
183
|
+
await serverConfig.onMarkMediaAsCanceled([
|
|
184
|
+
uploadData?.item?.id,
|
|
185
|
+
]);
|
|
186
|
+
} else {
|
|
171
187
|
await markMediaAsCanceled({
|
|
172
188
|
url: serverConfig?.markMediaAsCanceled,
|
|
173
189
|
additionalHeaders: serverConfig?.additionalHeaders,
|
|
174
190
|
mediaIds: [uploadData?.item?.id],
|
|
175
191
|
});
|
|
176
|
-
} else if (serverConfig?.onMarkMediaAsCanceled) {
|
|
177
|
-
await serverConfig.onMarkMediaAsCanceled([
|
|
178
|
-
uploadData?.item?.id,
|
|
179
|
-
]);
|
|
180
192
|
}
|
|
181
193
|
},
|
|
182
194
|
};
|
package/src/lib/media-helper.ts
CHANGED
|
@@ -151,3 +151,20 @@ export async function markMediaAsCanceled({
|
|
|
151
151
|
);
|
|
152
152
|
return res;
|
|
153
153
|
}
|
|
154
|
+
|
|
155
|
+
export async function getMediaImageDimension(imageUrl: string): Promise<{
|
|
156
|
+
height: number;
|
|
157
|
+
width: number;
|
|
158
|
+
}> {
|
|
159
|
+
return new Promise((res, rej) => {
|
|
160
|
+
const tempImg = new Image();
|
|
161
|
+
tempImg.src = imageUrl;
|
|
162
|
+
tempImg.onload = () => {
|
|
163
|
+
res({
|
|
164
|
+
height: tempImg.naturalHeight,
|
|
165
|
+
width: tempImg.naturalWidth,
|
|
166
|
+
});
|
|
167
|
+
};
|
|
168
|
+
tempImg.onerror = () => rej(new Error(`Failed to load image: ${imageUrl}`));
|
|
169
|
+
});
|
|
170
|
+
}
|