Replace native selects with NovaSelect

This commit is contained in:
2026-05-01 07:45:37 +02:00
parent 67be537c86
commit 35011001ba
55 changed files with 3136 additions and 1662 deletions

View File

@@ -1,5 +1,6 @@
import React from 'react'
import { Head, Link, router, usePage } from '@inertiajs/react'
import NovaSelect from '../../components/ui/NovaSelect'
function getCsrfToken() {
if (typeof document === 'undefined') return ''
@@ -188,18 +189,16 @@ export default function AiBiographyAdmin() {
</label>
{['status', 'scope', 'tier', 'visibility', 'review'].map((key) => (
<label key={key} className="rounded-2xl border border-white/10 bg-white/[0.04] px-4 py-3 text-sm text-slate-300">
<div key={key} className="rounded-2xl border border-white/10 bg-white/[0.04] px-4 py-3 text-sm text-slate-300">
<div className="text-[11px] font-semibold uppercase tracking-[0.18em] text-slate-400">{key.replace('_', ' ')}</div>
<select
<NovaSelect
value={filters[key] || 'all'}
onChange={(event) => updateFilter(key, event.target.value)}
className="mt-2 w-full rounded-xl border border-white/10 bg-slate-950/70 px-3 py-2 text-sm text-white outline-none"
>
{(filterOptions[key] || []).map((option) => (
<option key={`${key}-${option.value}`} value={option.value}>{option.label}</option>
))}
</select>
</label>
onChange={(value) => updateFilter(key, value)}
className="mt-2"
options={(filterOptions[key] || []).map((option) => ({ value: option.value, label: option.label }))}
searchable={false}
/>
</div>
))}
<div className="lg:col-span-full flex flex-wrap gap-3">

View File

@@ -1,6 +1,7 @@
import React, { useMemo, useState } from 'react'
import { Head, usePage } from '@inertiajs/react'
import ArtworkViewer from '../../components/viewer/ArtworkViewer'
import NovaSelect from '../../components/ui/NovaSelect'
function requestJson(url, { method = 'GET', body } = {}) {
return fetch(url, {
@@ -140,31 +141,27 @@ export default function ArtworkMaturityQueue() {
</div>
<div className="mt-5 grid gap-3 md:grid-cols-2">
<label className="rounded-2xl border border-white/10 bg-white/[0.04] px-4 py-3 text-sm text-slate-300">
<div className="rounded-2xl border border-white/10 bg-white/[0.04] px-4 py-3 text-sm text-slate-300">
<div className="text-[11px] font-semibold uppercase tracking-[0.18em] text-slate-400">AI action hint</div>
<select
<NovaSelect
value={aiAction}
onChange={(event) => load(status, event.target.value, aiStatus)}
className="mt-2 w-full rounded-xl border border-white/10 bg-slate-950/70 px-3 py-2 text-sm text-white outline-none"
>
{(filterOptions.aiAction || []).map((option) => (
<option key={option.value} value={option.value}>{option.label}</option>
))}
</select>
</label>
onChange={(value) => load(status, value, aiStatus)}
className="mt-2"
options={(filterOptions.aiAction || []).map((option) => ({ value: option.value, label: option.label }))}
searchable={false}
/>
</div>
<label className="rounded-2xl border border-white/10 bg-white/[0.04] px-4 py-3 text-sm text-slate-300">
<div className="rounded-2xl border border-white/10 bg-white/[0.04] px-4 py-3 text-sm text-slate-300">
<div className="text-[11px] font-semibold uppercase tracking-[0.18em] text-slate-400">AI processing status</div>
<select
<NovaSelect
value={aiStatus}
onChange={(event) => load(status, aiAction, event.target.value)}
className="mt-2 w-full rounded-xl border border-white/10 bg-slate-950/70 px-3 py-2 text-sm text-white outline-none"
>
{(filterOptions.aiStatus || []).map((option) => (
<option key={option.value} value={option.value}>{option.label}</option>
))}
</select>
</label>
onChange={(value) => load(status, aiAction, value)}
className="mt-2"
options={(filterOptions.aiStatus || []).map((option) => ({ value: option.value, label: option.label }))}
searchable={false}
/>
</div>
</div>
</section>