Add QR code field to finished books admin; v2.0.32
Publish Container / docker (push) Successful in 14m33s
Publish Container / docker (push) Successful in 14m33s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
e86594b096
commit
7ac23635b2
3 files changed
+8
-1
No files matched your search
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "siteforge",
|
"name": "siteforge",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "2.0.31",
|
"version": "2.0.32",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
@@ -4194,6 +4194,12 @@ async function handleAssetUpload(event: ChangeEvent<HTMLInputElement>) {
|
|||||||
<label>Download URL <span style={{ fontWeight: 400, opacity: 0.7 }}>(ZIP — Google Drive, Dropbox, etc.)</span></label>
|
<label>Download URL <span style={{ fontWeight: 400, opacity: 0.7 }}>(ZIP — Google Drive, Dropbox, etc.)</span></label>
|
||||||
<input type="url" placeholder="https://drive.google.com/…" value={book.downloadUrl ?? ''} onChange={e => setForm(f => ({ ...f, finishedBooks: (f.finishedBooks ?? []).map(b => b.id === book.id ? { ...b, downloadUrl: e.target.value } : b) }))} />
|
<input type="url" placeholder="https://drive.google.com/…" value={book.downloadUrl ?? ''} onChange={e => setForm(f => ({ ...f, finishedBooks: (f.finishedBooks ?? []).map(b => b.id === book.id ? { ...b, downloadUrl: e.target.value } : b) }))} />
|
||||||
</div>
|
</div>
|
||||||
|
<div className="admin-field">
|
||||||
|
<label>Download QR Code <span style={{ fontWeight: 400, opacity: 0.7 }}>(image URL)</span></label>
|
||||||
|
<input type="url" placeholder="https://…/qr.png" value={book.downloadQrUrl ?? ''} onChange={e => setForm(f => ({ ...f, finishedBooks: (f.finishedBooks ?? []).map(b => b.id === book.id ? { ...b, downloadQrUrl: e.target.value } : b) }))} />
|
||||||
|
{renderImageAssetSelector(book.downloadQrUrl, value => setForm(f => ({ ...f, finishedBooks: (f.finishedBooks ?? []).map(b => b.id === book.id ? { ...b, downloadQrUrl: value } : b) })), `finished-book-qr-${book.id}`)}
|
||||||
|
{renderImagePreview(book.downloadQrUrl, `${book.title} QR code`)}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<button type="button" className="btn-admin-remove" onClick={() => setForm(f => ({ ...f, finishedBooks: (f.finishedBooks ?? []).filter(b => b.id !== book.id) }))}>Remove</button>
|
<button type="button" className="btn-admin-remove" onClick={() => setForm(f => ({ ...f, finishedBooks: (f.finishedBooks ?? []).filter(b => b.id !== book.id) }))}>Remove</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -92,6 +92,7 @@ export interface FinishedBook {
|
|||||||
imageUrl: string
|
imageUrl: string
|
||||||
season: number
|
season: number
|
||||||
downloadUrl?: string
|
downloadUrl?: string
|
||||||
|
downloadQrUrl?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface PodcastHost {
|
export interface PodcastHost {
|
||||||
|
|||||||
Reference in new issue
Block a user