@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
+ }>;
@@ -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.5",
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
  };
@@ -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
+ }