@@ -11,7 +11,6 @@ import ImageModifyForm, {
1111} from "@/components/image-modify-form" ;
1212import { ChevronLeft , Loader } from "lucide-react" ;
1313import Header from "@/components/header" ;
14- import * as process from "node:process" ;
1514
1615interface UploadFormData {
1716 title : string ;
@@ -102,6 +101,44 @@ export default function HomePage() {
102101 setModifications ( ( prevModifications ) => [ ...prevModifications , data ] ) ;
103102 } ;
104103
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+
105142 const processImagesMutation = useMutation ( {
106143 mutationFn : async ( formData : FormData ) => {
107144 const res = await fetch ( "/api/modify" , {
@@ -232,11 +269,12 @@ export default function HomePage() {
232269 < div className = "space-y-6" >
233270 < input
234271 key = { inputFileKey }
272+ id = "image-selection"
235273 type = "file"
236274 multiple
237275 accept = "image/*"
238276 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"
240278 />
241279 < div className = "flex-start flex flex-wrap gap-10" >
242280 { imageMetas . map ( ( meta , index ) => (
@@ -245,20 +283,21 @@ export default function HomePage() {
245283 imageData = { meta }
246284 index = { index }
247285 onClone = { handleClone }
286+ onRemove = { handleRemove }
248287 onChange = { ( data ) => handleModificationChange ( index , data ) }
249288 />
250289 ) ) }
251290 </ div >
252291 { imageFiles . length > 0 && (
253292 < div className = "flex" >
254293 < 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"
256295 onClick = { resetForms }
257296 >
258297 Reset
259298 </ button >
260299 < 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"
262301 onClick = { handleModificationSubmit }
263302 disabled = { loading }
264303 >
@@ -277,7 +316,7 @@ export default function HomePage() {
277316 < button
278317 type = "button"
279318 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"
281320 >
282321 < ChevronLeft size = { 32 } />
283322 </ button >
@@ -293,19 +332,19 @@ export default function HomePage() {
293332 </ div >
294333 < div className = "flex" >
295334 < 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"
297336 onClick = { resetForms }
298337 >
299338 Reset
300339 </ button >
301340 < 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"
303342 onClick = { handleDownload }
304343 >
305344 Download
306345 </ button >
307346 < 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"
309348 onClick = { handleUploadSubmit }
310349 >
311350 Upload
0 commit comments