@susonwaiba/react-media-uploader 0.1.3 → 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.
- package/.github/workflows/release.yml +25 -0
- package/NEXTJS_INTEGRATION.md +128 -128
- package/README.md +118 -106
- package/bun.lock +37 -0
- package/dist/hooks/use-media-uploader.d.ts +8 -1
- package/dist/hooks/use-media-uploader.js +87 -33
- package/dist/lib/media-helper.d.ts +4 -0
- package/dist/lib/media-helper.js +13 -0
- package/package.json +42 -40
- package/src/hooks/use-media-uploader.ts +327 -261
- package/src/index.ts +3 -3
- package/src/lib/media-helper.ts +170 -153
- package/src/types/media.ts +47 -47
- package/tsconfig.json +19 -19
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
name: Release Package
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [created]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
build:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
steps:
|
|
11
|
+
- uses: actions/checkout@v4
|
|
12
|
+
- name: Setup Node
|
|
13
|
+
uses: actions/setup-node@v4
|
|
14
|
+
with:
|
|
15
|
+
node-version: 24
|
|
16
|
+
registry-url: https://registry.npmjs.org/
|
|
17
|
+
- name: Setup Bun
|
|
18
|
+
uses: oven-sh/setup-bun@v2
|
|
19
|
+
with:
|
|
20
|
+
bun-version: 1.3.4
|
|
21
|
+
- run: bun install
|
|
22
|
+
- run: bun run build
|
|
23
|
+
- run: npm publish
|
|
24
|
+
env:
|
|
25
|
+
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
|
package/NEXTJS_INTEGRATION.md
CHANGED
|
@@ -1,128 +1,128 @@
|
|
|
1
|
-
# NextJS Integration
|
|
2
|
-
|
|
3
|
-
## Prisma schema
|
|
4
|
-
|
|
5
|
-
```text
|
|
6
|
-
enum MediaStatusEnum {
|
|
7
|
-
INIT
|
|
8
|
-
TEMP
|
|
9
|
-
ACTIVE
|
|
10
|
-
INACTIVE
|
|
11
|
-
CANCELED
|
|
12
|
-
DELETED
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
enum MediaTypeEnum {
|
|
16
|
-
IMAGE
|
|
17
|
-
PDF
|
|
18
|
-
DOCS
|
|
19
|
-
OTHER
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
model Media {
|
|
23
|
-
id String @id @default(cuid())
|
|
24
|
-
status MediaStatusEnum @default(INIT)
|
|
25
|
-
type MediaTypeEnum
|
|
26
|
-
title String
|
|
27
|
-
description String?
|
|
28
|
-
name String
|
|
29
|
-
dir String?
|
|
30
|
-
path String
|
|
31
|
-
provider String
|
|
32
|
-
container String?
|
|
33
|
-
mimeType String?
|
|
34
|
-
size Float?
|
|
35
|
-
height Float?
|
|
36
|
-
width Float?
|
|
37
|
-
duration Float?
|
|
38
|
-
tags String[] @default([])
|
|
39
|
-
checksum String?
|
|
40
|
-
createdAt DateTime @default(now())
|
|
41
|
-
updatedAt DateTime @default(now()) @updatedAt
|
|
42
|
-
deletedAt DateTime?
|
|
43
|
-
}
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
## API endpoints
|
|
47
|
-
|
|
48
|
-
- POST: `/api/media/generate-upload-url`
|
|
49
|
-
|
|
50
|
-
Payload:
|
|
51
|
-
|
|
52
|
-
```json
|
|
53
|
-
{
|
|
54
|
-
"type": "IMAGE",
|
|
55
|
-
"name": "screenshot.jpeg",
|
|
56
|
-
"mimeType": "image/jpeg",
|
|
57
|
-
"size": 40868,
|
|
58
|
-
"checksum": "b745eb078c31eaa2ef5d87f772bbf37d78528d3c"
|
|
59
|
-
}
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
Response:
|
|
63
|
-
|
|
64
|
-
```json
|
|
65
|
-
{
|
|
66
|
-
"item": {},
|
|
67
|
-
"uploadUrl": "<upload_url_with_token>"
|
|
68
|
-
}
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
- POST: `/api/media/mark-media-as-active`
|
|
72
|
-
|
|
73
|
-
Payload:
|
|
74
|
-
|
|
75
|
-
```json
|
|
76
|
-
{
|
|
77
|
-
"mediaIds": []
|
|
78
|
-
}
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
Response:
|
|
82
|
-
|
|
83
|
-
```json
|
|
84
|
-
{
|
|
85
|
-
"items": []
|
|
86
|
-
}
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
- POST: `/api/media/mark-media-as-canceled`
|
|
90
|
-
|
|
91
|
-
Payload:
|
|
92
|
-
|
|
93
|
-
```json
|
|
94
|
-
{
|
|
95
|
-
"mediaIds": []
|
|
96
|
-
}
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
Response:
|
|
100
|
-
|
|
101
|
-
```json
|
|
102
|
-
{
|
|
103
|
-
"items": []
|
|
104
|
-
}
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
- POST: `/api/media/mark-media-as-temp`
|
|
108
|
-
|
|
109
|
-
Payload:
|
|
110
|
-
|
|
111
|
-
```json
|
|
112
|
-
{
|
|
113
|
-
"mediaIds": []
|
|
114
|
-
}
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
Response:
|
|
118
|
-
|
|
119
|
-
```json
|
|
120
|
-
{
|
|
121
|
-
"items": []
|
|
122
|
-
}
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
## Storage cleanup
|
|
126
|
-
|
|
127
|
-
Run cron and filter with status for unused media cleanup.
|
|
128
|
-
|
|
1
|
+
# NextJS Integration
|
|
2
|
+
|
|
3
|
+
## Prisma schema
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
enum MediaStatusEnum {
|
|
7
|
+
INIT
|
|
8
|
+
TEMP
|
|
9
|
+
ACTIVE
|
|
10
|
+
INACTIVE
|
|
11
|
+
CANCELED
|
|
12
|
+
DELETED
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
enum MediaTypeEnum {
|
|
16
|
+
IMAGE
|
|
17
|
+
PDF
|
|
18
|
+
DOCS
|
|
19
|
+
OTHER
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
model Media {
|
|
23
|
+
id String @id @default(cuid())
|
|
24
|
+
status MediaStatusEnum @default(INIT)
|
|
25
|
+
type MediaTypeEnum
|
|
26
|
+
title String
|
|
27
|
+
description String?
|
|
28
|
+
name String
|
|
29
|
+
dir String?
|
|
30
|
+
path String
|
|
31
|
+
provider String
|
|
32
|
+
container String?
|
|
33
|
+
mimeType String?
|
|
34
|
+
size Float?
|
|
35
|
+
height Float?
|
|
36
|
+
width Float?
|
|
37
|
+
duration Float?
|
|
38
|
+
tags String[] @default([])
|
|
39
|
+
checksum String?
|
|
40
|
+
createdAt DateTime @default(now())
|
|
41
|
+
updatedAt DateTime @default(now()) @updatedAt
|
|
42
|
+
deletedAt DateTime?
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## API endpoints
|
|
47
|
+
|
|
48
|
+
- POST: `/api/media/generate-upload-url`
|
|
49
|
+
|
|
50
|
+
Payload:
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"type": "IMAGE",
|
|
55
|
+
"name": "screenshot.jpeg",
|
|
56
|
+
"mimeType": "image/jpeg",
|
|
57
|
+
"size": 40868,
|
|
58
|
+
"checksum": "b745eb078c31eaa2ef5d87f772bbf37d78528d3c"
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Response:
|
|
63
|
+
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"item": {},
|
|
67
|
+
"uploadUrl": "<upload_url_with_token>"
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
- POST: `/api/media/mark-media-as-active`
|
|
72
|
+
|
|
73
|
+
Payload:
|
|
74
|
+
|
|
75
|
+
```json
|
|
76
|
+
{
|
|
77
|
+
"mediaIds": []
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Response:
|
|
82
|
+
|
|
83
|
+
```json
|
|
84
|
+
{
|
|
85
|
+
"items": []
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
- POST: `/api/media/mark-media-as-canceled`
|
|
90
|
+
|
|
91
|
+
Payload:
|
|
92
|
+
|
|
93
|
+
```json
|
|
94
|
+
{
|
|
95
|
+
"mediaIds": []
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Response:
|
|
100
|
+
|
|
101
|
+
```json
|
|
102
|
+
{
|
|
103
|
+
"items": []
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
- POST: `/api/media/mark-media-as-temp`
|
|
108
|
+
|
|
109
|
+
Payload:
|
|
110
|
+
|
|
111
|
+
```json
|
|
112
|
+
{
|
|
113
|
+
"mediaIds": []
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Response:
|
|
118
|
+
|
|
119
|
+
```json
|
|
120
|
+
{
|
|
121
|
+
"items": []
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Storage cleanup
|
|
126
|
+
|
|
127
|
+
Run cron and filter with status for unused media cleanup.
|
|
128
|
+
|
package/README.md
CHANGED
|
@@ -1,106 +1,118 @@
|
|
|
1
|
-
# React Media Uploader
|
|
2
|
-
|
|
3
|
-
`Status: Under development`
|
|
4
|
-
|
|
5
|
-
## Quick start
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
bun install
|
|
9
|
-
|
|
10
|
-
bun run build
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## Hook
|
|
14
|
-
|
|
15
|
-
#### Upload on select
|
|
16
|
-
|
|
17
|
-
```typescript
|
|
18
|
-
"use client";
|
|
19
|
-
|
|
20
|
-
import { useMediaUploader } from "@susonwaiba/react-media-uploader";
|
|
21
|
-
|
|
22
|
-
export function Uploader() {
|
|
23
|
-
const uploader = useMediaUploader();
|
|
24
|
-
return (
|
|
25
|
-
<input
|
|
26
|
-
name="image"
|
|
27
|
-
type="file"
|
|
28
|
-
onChange={uploader.onFileInputChange}
|
|
29
|
-
/>
|
|
30
|
-
);
|
|
31
|
-
}
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
#### Manual upload
|
|
35
|
-
|
|
36
|
-
```typescript
|
|
37
|
-
"use client";
|
|
38
|
-
|
|
39
|
-
import { useMediaUploader, MediaStatusEnum } from "@susonwaiba/react-media-uploader";
|
|
40
|
-
|
|
41
|
-
export function ManualUploader() {
|
|
42
|
-
const uploader = useMediaUploader({
|
|
43
|
-
enableManualUpload: true,
|
|
44
|
-
// Update media status to ACTIVE status on success
|
|
45
|
-
mediaUploadSuccessStatus: MediaStatusEnum.ACTIVE,
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
const onSubmit = async (e: React.FormEvent) => {
|
|
49
|
-
e.preventDefault();
|
|
50
|
-
const mediaValues = await uploader.uploadManually();
|
|
51
|
-
console.log("mediaValues ->", mediaValues);
|
|
52
|
-
// submit data to API
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
return (
|
|
56
|
-
<form onSubmit={onSubmit}>
|
|
57
|
-
<div className="mb-4">
|
|
58
|
-
<input
|
|
59
|
-
name="image"
|
|
60
|
-
type="file"
|
|
61
|
-
multiple
|
|
62
|
-
onChange={uploader.onFileInputChange}
|
|
63
|
-
/>
|
|
64
|
-
</div>
|
|
65
|
-
<div>
|
|
66
|
-
<button type="submit">Upload</button>
|
|
67
|
-
</div>
|
|
68
|
-
</form>
|
|
69
|
-
);
|
|
70
|
-
}
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
#### UseMediaUploaderProps
|
|
74
|
-
|
|
75
|
-
```typescript
|
|
76
|
-
export interface UseMediaUploaderProps<T extends object> {
|
|
77
|
-
defaultValues?: T;
|
|
78
|
-
mediaUploadSuccessStatus?: MediaStatusEnum;
|
|
79
|
-
enableManualUpload?: boolean;
|
|
80
|
-
serverConfig?: {
|
|
81
|
-
additionalHeaders?: Record<string, string>;
|
|
82
|
-
generateUploadUrl?: string;
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
```
|
|
1
|
+
# React Media Uploader
|
|
2
|
+
|
|
3
|
+
`Status: Under development`
|
|
4
|
+
|
|
5
|
+
## Quick start
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
bun install
|
|
9
|
+
|
|
10
|
+
bun run build
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Hook
|
|
14
|
+
|
|
15
|
+
#### Upload on select
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
"use client";
|
|
19
|
+
|
|
20
|
+
import { useMediaUploader } from "@susonwaiba/react-media-uploader";
|
|
21
|
+
|
|
22
|
+
export function Uploader() {
|
|
23
|
+
const uploader = useMediaUploader();
|
|
24
|
+
return (
|
|
25
|
+
<input
|
|
26
|
+
name="image"
|
|
27
|
+
type="file"
|
|
28
|
+
onChange={uploader.onFileInputChange}
|
|
29
|
+
/>
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
#### Manual upload
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
"use client";
|
|
38
|
+
|
|
39
|
+
import { useMediaUploader, MediaStatusEnum } from "@susonwaiba/react-media-uploader";
|
|
40
|
+
|
|
41
|
+
export function ManualUploader() {
|
|
42
|
+
const uploader = useMediaUploader({
|
|
43
|
+
enableManualUpload: true,
|
|
44
|
+
// Update media status to ACTIVE status on success
|
|
45
|
+
mediaUploadSuccessStatus: MediaStatusEnum.ACTIVE,
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
const onSubmit = async (e: React.FormEvent) => {
|
|
49
|
+
e.preventDefault();
|
|
50
|
+
const mediaValues = await uploader.uploadManually();
|
|
51
|
+
console.log("mediaValues ->", mediaValues);
|
|
52
|
+
// submit data to API
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
return (
|
|
56
|
+
<form onSubmit={onSubmit}>
|
|
57
|
+
<div className="mb-4">
|
|
58
|
+
<input
|
|
59
|
+
name="image"
|
|
60
|
+
type="file"
|
|
61
|
+
multiple
|
|
62
|
+
onChange={uploader.onFileInputChange}
|
|
63
|
+
/>
|
|
64
|
+
</div>
|
|
65
|
+
<div>
|
|
66
|
+
<button type="submit">Upload</button>
|
|
67
|
+
</div>
|
|
68
|
+
</form>
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
#### UseMediaUploaderProps
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
export interface UseMediaUploaderProps<T extends object> {
|
|
77
|
+
defaultValues?: T;
|
|
78
|
+
mediaUploadSuccessStatus?: MediaStatusEnum;
|
|
79
|
+
enableManualUpload?: boolean;
|
|
80
|
+
serverConfig?: {
|
|
81
|
+
additionalHeaders?: Record<string, string>;
|
|
82
|
+
generateUploadUrl?: string;
|
|
83
|
+
onGenerateUploadUrl?: (
|
|
84
|
+
media: Partial<Media>,
|
|
85
|
+
) => Promise<{ item: Media; uploadUrl: string }>;
|
|
86
|
+
markMediaAsTemp?: string;
|
|
87
|
+
onMarkMediaAsTemp?: (
|
|
88
|
+
mediaIds: (string | number)[],
|
|
89
|
+
) => Promise<Partial<Media>[]>;
|
|
90
|
+
markMediaAsActive?: string;
|
|
91
|
+
onMarkMediaAsActive?: (
|
|
92
|
+
mediaIds: (string | number)[],
|
|
93
|
+
) => Promise<Partial<Media>[]>;
|
|
94
|
+
markMediaAsCanceled?: string;
|
|
95
|
+
onMarkMediaAsCanceled?: (
|
|
96
|
+
mediaIds: (string | number)[],
|
|
97
|
+
) => Promise<Partial<Media>[]>;
|
|
98
|
+
};
|
|
99
|
+
onUploadSuccess?: (currentValues: any) => Promise<void>;
|
|
100
|
+
onUploadFailure?: (uploadRes: any) => Promise<void>;
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
#### UseMediaUploaderResponse
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
export interface UseMediaUploaderResponse<T extends object> {
|
|
108
|
+
values: T;
|
|
109
|
+
setValues: (val: T) => void;
|
|
110
|
+
enableManualUpload?: boolean;
|
|
111
|
+
uploadManually: () => Promise<T>;
|
|
112
|
+
mediaItems: Record<string, MediaItem>;
|
|
113
|
+
setMediaItems: (items: Record<string, MediaItem>) => void;
|
|
114
|
+
uploadInfos: Record<string, UploadMediaInfo>;
|
|
115
|
+
onFileInputChange: (e: React.ChangeEvent<HTMLInputElement>) => Promise<void>;
|
|
116
|
+
onFileChange: (file: File, name: string, multiple?: boolean) => Promise<void>;
|
|
117
|
+
}
|
|
118
|
+
```
|
package/bun.lock
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"@types/react": "^18",
|
|
9
9
|
"@types/react-dom": "^18",
|
|
10
10
|
"tsc-alias": "^1",
|
|
11
|
+
"tsc-watch": "^7.2.0",
|
|
11
12
|
"typescript": "^5",
|
|
12
13
|
},
|
|
13
14
|
"peerDependencies": {
|
|
@@ -50,6 +51,8 @@
|
|
|
50
51
|
|
|
51
52
|
"commander": ["commander@9.5.0", "", {}, "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ=="],
|
|
52
53
|
|
|
54
|
+
"cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="],
|
|
55
|
+
|
|
53
56
|
"csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="],
|
|
54
57
|
|
|
55
58
|
"delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="],
|
|
@@ -58,6 +61,8 @@
|
|
|
58
61
|
|
|
59
62
|
"dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="],
|
|
60
63
|
|
|
64
|
+
"duplexer": ["duplexer@0.1.2", "", {}, "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg=="],
|
|
65
|
+
|
|
61
66
|
"es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="],
|
|
62
67
|
|
|
63
68
|
"es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="],
|
|
@@ -66,6 +71,8 @@
|
|
|
66
71
|
|
|
67
72
|
"es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="],
|
|
68
73
|
|
|
74
|
+
"event-stream": ["event-stream@3.3.4", "", { "dependencies": { "duplexer": "~0.1.1", "from": "~0", "map-stream": "~0.1.0", "pause-stream": "0.0.11", "split": "0.3", "stream-combiner": "~0.0.4", "through": "~2.3.1" } }, "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g=="],
|
|
75
|
+
|
|
69
76
|
"fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="],
|
|
70
77
|
|
|
71
78
|
"fastq": ["fastq@1.19.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="],
|
|
@@ -76,6 +83,8 @@
|
|
|
76
83
|
|
|
77
84
|
"form-data": ["form-data@4.0.5", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w=="],
|
|
78
85
|
|
|
86
|
+
"from": ["from@0.1.7", "", {}, "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g=="],
|
|
87
|
+
|
|
79
88
|
"fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
|
|
80
89
|
|
|
81
90
|
"function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="],
|
|
@@ -108,6 +117,10 @@
|
|
|
108
117
|
|
|
109
118
|
"is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="],
|
|
110
119
|
|
|
120
|
+
"isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
|
|
121
|
+
|
|
122
|
+
"map-stream": ["map-stream@0.1.0", "", {}, "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g=="],
|
|
123
|
+
|
|
111
124
|
"math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="],
|
|
112
125
|
|
|
113
126
|
"merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="],
|
|
@@ -120,16 +133,24 @@
|
|
|
120
133
|
|
|
121
134
|
"mylas": ["mylas@2.1.14", "", {}, "sha512-BzQguy9W9NJgoVn2mRWzbFrFWWztGCcng2QI9+41frfk+Athwgx3qhqhvStz7ExeUUu7Kzw427sNzHpEZNINog=="],
|
|
122
135
|
|
|
136
|
+
"node-cleanup": ["node-cleanup@2.1.2", "", {}, "sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw=="],
|
|
137
|
+
|
|
123
138
|
"normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="],
|
|
124
139
|
|
|
140
|
+
"path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="],
|
|
141
|
+
|
|
125
142
|
"path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="],
|
|
126
143
|
|
|
144
|
+
"pause-stream": ["pause-stream@0.0.11", "", { "dependencies": { "through": "~2.3" } }, "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A=="],
|
|
145
|
+
|
|
127
146
|
"picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
|
|
128
147
|
|
|
129
148
|
"plimit-lit": ["plimit-lit@1.6.1", "", { "dependencies": { "queue-lit": "^1.5.1" } }, "sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA=="],
|
|
130
149
|
|
|
131
150
|
"proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="],
|
|
132
151
|
|
|
152
|
+
"ps-tree": ["ps-tree@1.2.0", "", { "dependencies": { "event-stream": "=3.3.4" }, "bin": { "ps-tree": "./bin/ps-tree.js" } }, "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA=="],
|
|
153
|
+
|
|
133
154
|
"queue-lit": ["queue-lit@1.5.2", "", {}, "sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw=="],
|
|
134
155
|
|
|
135
156
|
"queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="],
|
|
@@ -148,12 +169,28 @@
|
|
|
148
169
|
|
|
149
170
|
"scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="],
|
|
150
171
|
|
|
172
|
+
"shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="],
|
|
173
|
+
|
|
174
|
+
"shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="],
|
|
175
|
+
|
|
151
176
|
"slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="],
|
|
152
177
|
|
|
178
|
+
"split": ["split@0.3.3", "", { "dependencies": { "through": "2" } }, "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA=="],
|
|
179
|
+
|
|
180
|
+
"stream-combiner": ["stream-combiner@0.0.4", "", { "dependencies": { "duplexer": "~0.1.1" } }, "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw=="],
|
|
181
|
+
|
|
182
|
+
"string-argv": ["string-argv@0.3.2", "", {}, "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q=="],
|
|
183
|
+
|
|
184
|
+
"through": ["through@2.3.8", "", {}, "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="],
|
|
185
|
+
|
|
153
186
|
"to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
|
|
154
187
|
|
|
155
188
|
"tsc-alias": ["tsc-alias@1.8.16", "", { "dependencies": { "chokidar": "^3.5.3", "commander": "^9.0.0", "get-tsconfig": "^4.10.0", "globby": "^11.0.4", "mylas": "^2.1.9", "normalize-path": "^3.0.0", "plimit-lit": "^1.2.6" }, "bin": { "tsc-alias": "dist/bin/index.js" } }, "sha512-QjCyu55NFyRSBAl6+MTFwplpFcnm2Pq01rR/uxfqJoLMm6X3O14KEGtaSDZpJYaE1bJBGDjD0eSuiIWPe2T58g=="],
|
|
156
189
|
|
|
190
|
+
"tsc-watch": ["tsc-watch@7.2.0", "", { "dependencies": { "cross-spawn": "^7.0.6", "node-cleanup": "^2.1.2", "ps-tree": "^1.2.0", "string-argv": "^0.3.2" }, "peerDependencies": { "typescript": "*" }, "bin": { "tsc-watch": "dist/lib/tsc-watch.js" } }, "sha512-4gRFawQD1cVSaILvG7wl2x6NtteKbS2dGBMbL7Q6n1ldLIOKXCJUoEwUXdGuee4dp+zcnA6tukBBLz1lZrNI9w=="],
|
|
191
|
+
|
|
157
192
|
"typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
|
|
193
|
+
|
|
194
|
+
"which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
|
|
158
195
|
}
|
|
159
196
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { MediaStatusEnum, type MediaItem } from "../types/media";
|
|
1
|
+
import { type Media, MediaStatusEnum, type MediaItem } from "../types/media";
|
|
2
2
|
import { type AxiosProgressEvent } from "axios";
|
|
3
3
|
export interface UploadMediaInfo extends Omit<AxiosProgressEvent, "event"> {
|
|
4
4
|
event?: undefined;
|
|
@@ -11,9 +11,16 @@ export interface UseMediaUploaderProps<T extends object> {
|
|
|
11
11
|
serverConfig?: {
|
|
12
12
|
additionalHeaders?: Record<string, string>;
|
|
13
13
|
generateUploadUrl?: string;
|
|
14
|
+
onGenerateUploadUrl?: (media: Partial<Media>) => Promise<{
|
|
15
|
+
item: Media;
|
|
16
|
+
uploadUrl: string;
|
|
17
|
+
}>;
|
|
14
18
|
markMediaAsTemp?: string;
|
|
19
|
+
onMarkMediaAsTemp?: (mediaIds: (string | number)[]) => Promise<Partial<Media>[]>;
|
|
15
20
|
markMediaAsActive?: string;
|
|
21
|
+
onMarkMediaAsActive?: (mediaIds: (string | number)[]) => Promise<Partial<Media>[]>;
|
|
16
22
|
markMediaAsCanceled?: string;
|
|
23
|
+
onMarkMediaAsCanceled?: (mediaIds: (string | number)[]) => Promise<Partial<Media>[]>;
|
|
17
24
|
};
|
|
18
25
|
onUploadSuccess?: (currentValues: any) => Promise<void>;
|
|
19
26
|
onUploadFailure?: (uploadRes: any) => Promise<void>;
|