@susonwaiba/react-media-uploader 0.1.4 → 0.1.5
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
|
};
|
|
@@ -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
|
};
|
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
|
+
}
|