Skip to content

Commit da04040

Browse files
committed
Improve file upload UI for apps form
1 parent 9152dd6 commit da04040

1 file changed

Lines changed: 29 additions & 14 deletions

File tree

src/pages/Apps.jsx

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -272,10 +272,24 @@ export default function Apps() {
272272
placeholder="https://forums.jtechforums.org/..."
273273
required
274274
/>
275-
<div className="grid gap-4 md:grid-cols-2">
276-
<FileField label="App icon" name="icon" accept="image/png,image/jpeg,image/webp" file={files.icon} onChange={handleFileChange} />
277-
<FileField label="APK file" name="apk" accept=".apk" file={files.apk} onChange={handleFileChange} />
278-
</div>
275+
<div className="grid gap-4 md:grid-cols-2">
276+
<FileField
277+
label="App icon"
278+
name="icon"
279+
accept="image/png,image/jpeg,image/webp"
280+
file={files.icon}
281+
onChange={handleFileChange}
282+
helper="PNG/JPG/WebP • 1024×1024 preferred • < 2 MB"
283+
/>
284+
<FileField
285+
label="APK file"
286+
name="apk"
287+
accept=".apk"
288+
file={files.apk}
289+
onChange={handleFileChange}
290+
helper="Signed release build • max 200 MB"
291+
/>
292+
</div>
279293
<button
280294
type="submit"
281295
disabled={submissionStatus.state === 'loading'}
@@ -431,21 +445,22 @@ function InputField({ label, name, value, onChange, required, placeholder }) {
431445
);
432446
}
433447

434-
function FileField({ label, name, accept, onChange, file }) {
448+
function FileField({ label, name, accept, onChange, file, helper }) {
435449
return (
436450
<div>
437451
<label htmlFor={name} className="text-sm font-semibold text-white">
438452
{label}
439453
</label>
440-
<input
441-
id={name}
442-
name={name}
443-
type="file"
444-
accept={accept}
445-
onChange={onChange}
446-
className="mt-2 w-full rounded-2xl border border-dashed border-white/20 bg-black/10 px-4 py-3 text-sm text-white focus:border-sky-400 focus:outline-none"
447-
/>
448-
{file && <p className="mt-1 text-xs text-slate-300">{file.name}</p>}
454+
<label
455+
htmlFor={name}
456+
className="mt-2 flex cursor-pointer flex-col items-center justify-center rounded-3xl border border-dashed border-white/20 bg-slate-900/30 px-4 py-8 text-center text-sm text-white transition hover:border-sky-400 hover:bg-slate-900/60"
457+
>
458+
<i className="fa-solid fa-cloud-arrow-up text-2xl text-sky-300" />
459+
<span className="mt-2 font-semibold">{file ? 'Replace file' : 'Click to upload'}</span>
460+
{file && <span className="mt-1 text-xs text-slate-300">{file.name}</span>}
461+
{helper && <span className="mt-1 text-xs text-slate-400">{helper}</span>}
462+
</label>
463+
<input id={name} name={name} type="file" accept={accept} onChange={onChange} className="hidden" />
449464
</div>
450465
);
451466
}

0 commit comments

Comments
 (0)