@@ -11,7 +11,6 @@ import ImageModifyForm, {
11
11
} from "@/components/image-modify-form" ;
12
12
import { ChevronLeft , Loader } from "lucide-react" ;
13
13
import Header from "@/components/header" ;
14
- import * as process from "node:process" ;
15
14
16
15
interface UploadFormData {
17
16
title : string ;
@@ -102,6 +101,44 @@ export default function HomePage() {
102
101
setModifications ( ( prevModifications ) => [ ...prevModifications , data ] ) ;
103
102
} ;
104
103
104
+ const handleRemove = ( index : number ) => {
105
+ const dt = new DataTransfer ( ) ;
106
+
107
+ const inputElement = document . getElementById (
108
+ "image-selection" ,
109
+ ) as HTMLInputElement ;
110
+
111
+ if ( inputElement ?. files ) {
112
+ const { files } = inputElement ;
113
+
114
+ for ( let i = 0 ; i < files . length ; i ++ ) {
115
+ if ( i !== index ) {
116
+ dt . items . add ( files [ i ] ! ) ;
117
+ }
118
+ }
119
+
120
+ inputElement . files = dt . files ;
121
+
122
+ setImageFiles ( Array . from ( dt . files ) ) ;
123
+
124
+ setImageMetas ( ( prevMetas ) => {
125
+ const newMetas = [ ...prevMetas ] ;
126
+ newMetas . splice ( index , 1 ) ;
127
+ return newMetas ;
128
+ } ) ;
129
+
130
+ setModifications ( ( prevModifications ) => {
131
+ const newModifications = [ ...prevModifications ] ;
132
+ newModifications . splice ( index , 1 ) ;
133
+ return newModifications ;
134
+ } ) ;
135
+
136
+ if ( dt . files . length === 0 ) {
137
+ setInputFileKey ( ( prev ) => prev + 1 ) ;
138
+ }
139
+ }
140
+ } ;
141
+
105
142
const processImagesMutation = useMutation ( {
106
143
mutationFn : async ( formData : FormData ) => {
107
144
const res = await fetch ( "/api/modify" , {
@@ -232,11 +269,12 @@ export default function HomePage() {
232
269
< div className = "space-y-6" >
233
270
< input
234
271
key = { inputFileKey }
272
+ id = "image-selection"
235
273
type = "file"
236
274
multiple
237
275
accept = "image/*"
238
276
onChange = { handleImageSelection }
239
- className = "bg-input w-full rounded border border-primary p-2 text-primary"
277
+ className = "w-full rounded border border-primary bg-input p-2 text-primary"
240
278
/>
241
279
< div className = "flex-start flex flex-wrap gap-10" >
242
280
{ imageMetas . map ( ( meta , index ) => (
@@ -245,20 +283,21 @@ export default function HomePage() {
245
283
imageData = { meta }
246
284
index = { index }
247
285
onClone = { handleClone }
286
+ onRemove = { handleRemove }
248
287
onChange = { ( data ) => handleModificationChange ( index , data ) }
249
288
/>
250
289
) ) }
251
290
</ div >
252
291
{ imageFiles . length > 0 && (
253
292
< div className = "flex" >
254
293
< button
255
- className = "bg-gradient-button disabled:bg-gradient-button-disabled disabled:text-disabled ml-auto mt-4 flex h-[40px] items-center rounded px-10 font-bold text-primary transition disabled:opacity-50"
294
+ className = "ml-auto mt-4 flex h-[40px] items-center rounded bg-gradient-button px-10 font-bold text-primary transition disabled:bg-gradient-button-disabled disabled:text-disabled disabled:opacity-50"
256
295
onClick = { resetForms }
257
296
>
258
297
Reset
259
298
</ button >
260
299
< button
261
- className = "text-md bg-gradient-button disabled:bg-gradient-button-disabled disabled:text-disabled ml-5 mt-4 flex h-[40px] items-center rounded px-10 font-bold text-primary transition disabled:opacity-50"
300
+ className = "text-md ml-5 mt-4 flex h-[40px] items-center rounded bg-gradient-button px-10 font-bold text-primary transition disabled:bg-gradient-button-disabled disabled:text-disabled disabled:opacity-50"
262
301
onClick = { handleModificationSubmit }
263
302
disabled = { loading }
264
303
>
@@ -277,7 +316,7 @@ export default function HomePage() {
277
316
< button
278
317
type = "button"
279
318
onClick = { ( ) => setStep ( 1 ) }
280
- className = "bg-gradient-button mt-2 flex h-[40px] w-[200px] items-center justify-center rounded-md text-primary"
319
+ className = "mt-2 flex h-[40px] w-[200px] items-center justify-center rounded-md bg-gradient-button text-primary"
281
320
>
282
321
< ChevronLeft size = { 32 } />
283
322
</ button >
@@ -293,19 +332,19 @@ export default function HomePage() {
293
332
</ div >
294
333
< div className = "flex" >
295
334
< button
296
- className = "bg-gradient-button disabled:bg-gradient-button-disabled disabled:text-disabled mt-4 flex h-[40px] items-center rounded px-10 font-bold text-primary transition disabled:opacity-50"
335
+ className = "mt-4 flex h-[40px] items-center rounded bg-gradient-button px-10 font-bold text-primary transition disabled:bg-gradient-button-disabled disabled:text-disabled disabled:opacity-50"
297
336
onClick = { resetForms }
298
337
>
299
338
Reset
300
339
</ button >
301
340
< button
302
- className = "bg-gradient-button disabled:bg-gradient-button-disabled disabled:text-disabled ml-auto mt-4 flex h-[40px] items-center rounded px-10 font-bold text-primary transition disabled:opacity-50"
341
+ className = "ml-auto mt-4 flex h-[40px] items-center rounded bg-gradient-button px-10 font-bold text-primary transition disabled:bg-gradient-button-disabled disabled:text-disabled disabled:opacity-50"
303
342
onClick = { handleDownload }
304
343
>
305
344
Download
306
345
</ button >
307
346
< button
308
- className = "bg-gradient-button disabled:bg-gradient-button-disabled disabled:text-disabled ml-5 mt-4 flex h-[40px] items-center rounded px-10 font-bold text-primary transition disabled:opacity-50"
347
+ className = "ml-5 mt-4 flex h-[40px] items-center rounded bg-gradient-button px-10 font-bold text-primary transition disabled:bg-gradient-button-disabled disabled:text-disabled disabled:opacity-50"
309
348
onClick = { handleUploadSubmit }
310
349
>
311
350
Upload
0 commit comments