Wire admin studio SSR and search infrastructure

This commit is contained in:
2026-05-01 11:46:06 +02:00
parent 257b0dbef6
commit 18cea8b0f0
329 changed files with 197465 additions and 2741 deletions

View File

@@ -222,11 +222,27 @@ export default function ArtworkActionBar({ artwork, stats, canonicalUrl, onStats
// Count a view on every page load.
useEffect(() => {
if (!artwork?.id) return
fetch(`/api/art/${artwork.id}/view`, {
method: 'POST',
headers: { 'X-CSRF-TOKEN': csrfToken || '', 'Content-Type': 'application/json' },
credentials: 'same-origin',
}).catch(() => {})
const postView = () => {
fetch(`/api/art/${artwork.id}/view`, {
method: 'POST',
headers: { 'X-CSRF-TOKEN': csrfToken || '', 'Content-Type': 'application/json' },
credentials: 'same-origin',
keepalive: true,
}).catch(() => {})
}
if (typeof window === 'undefined') {
postView()
return undefined
}
if (typeof window.requestIdleCallback === 'function') {
const handle = window.requestIdleCallback(postView, { timeout: 1500 })
return () => window.cancelIdleCallback(handle)
}
const handle = window.setTimeout(postView, 1200)
return () => window.clearTimeout(handle)
}, [artwork?.id]) // eslint-disable-line react-hooks/exhaustive-deps
const postInteraction = async (url, body) => {
@@ -327,7 +343,7 @@ export default function ArtworkActionBar({ artwork, stats, canonicalUrl, onStats
].join(' ')}
>
<HeartIcon filled={favorited} />
<span className="tabular-nums">{favCount}</span>
<span className="tabular-nums" aria-hidden="true">{favCount}</span>
</button>
<button
@@ -342,7 +358,7 @@ export default function ArtworkActionBar({ artwork, stats, canonicalUrl, onStats
].join(' ')}
>
<BookmarkIcon filled={bookmarked} />
<span className="tabular-nums">{savedCount}</span>
<span className="tabular-nums" aria-hidden="true">{savedCount}</span>
</button>
{/* Share pill */}
@@ -403,7 +419,7 @@ export default function ArtworkActionBar({ artwork, stats, canonicalUrl, onStats
].join(' ')}
>
<HeartIcon filled={favorited} />
<span className="tabular-nums">{favCount}</span>
<span className="tabular-nums" aria-hidden="true">{favCount}</span>
</button>
<button
@@ -418,7 +434,7 @@ export default function ArtworkActionBar({ artwork, stats, canonicalUrl, onStats
].join(' ')}
>
<BookmarkIcon filled={bookmarked} />
<span className="tabular-nums">{savedCount}</span>
<span className="tabular-nums" aria-hidden="true">{savedCount}</span>
</button>
{/* Share */}