@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?.markMediaAsCanceled) {
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
+ }>;
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@susonwaiba/react-media-uploader",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "source": "src/index.ts",
5
5
  "module": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -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?.markMediaAsCanceled) {
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
  };
@@ -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
+ }