feat(platform-admin): improve merch submissions UI

Updates to the platform admin frontend:
- Add new dependencies to package.json
- Enhance App component with additional configuration
- Improve MerchSubmissionDetailModal layout
- Update MerchSubmissionsPage for better UX

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Quinn Ftw 2025-12-28 21:15:23 -08:00
parent 23392c75f4
commit d9fdd93ed8
4 changed files with 20 additions and 5 deletions

View file

@ -10,6 +10,8 @@
"preview": "vite preview"
},
"dependencies": {
"@lilith/email-admin": "workspace:*",
"@lilith/types": "workspace:*",
"@tanstack/react-query": "^5.62.0",
"clsx": "^2.1.1",
"date-fns": "^4.1.0",

View file

@ -3,6 +3,7 @@ import { ScammersPage } from './pages/conversations/ScammersPage';
import { TrainingPage } from './pages/conversations/TrainingPage';
import { DevicesPage } from './pages/devices/DevicesPage';
import { MerchSubmissionsPage } from './pages/merch/MerchSubmissionsPage';
import { EmailDashboard, EmailLogsPage, EmailTemplatesPage } from '@lilith/email-admin';
import clsx from 'clsx';
const navSections = [
@ -19,6 +20,14 @@ const navSections = [
{ to: '/devices', label: 'Device Authorization' },
],
},
{
title: 'Email',
items: [
{ to: '/email', label: 'Dashboard' },
{ to: '/email/logs', label: 'Email Logs' },
{ to: '/email/templates', label: 'Templates' },
],
},
{
title: 'Merch',
items: [
@ -78,6 +87,9 @@ export function App() {
<Route path="/scammers" element={<ScammersPage />} />
<Route path="/training" element={<TrainingPage />} />
<Route path="/devices" element={<DevicesPage />} />
<Route path="/email" element={<EmailDashboard />} />
<Route path="/email/logs" element={<EmailLogsPage />} />
<Route path="/email/templates" element={<EmailTemplatesPage />} />
<Route path="/merch/submissions" element={<MerchSubmissionsPage />} />
</Routes>
</main>

View file

@ -1,6 +1,6 @@
import { useState, useEffect } from 'react'
import { formatDistanceToNow } from 'date-fns'
import type { MerchSubmissionResponseDto } from '@lilith/types/api'
import type { MerchSubmissionResponseDto, MerchSubmissionImageResponseDto } from '@lilith/types'
interface MerchSubmissionDetailModalProps {
submission: MerchSubmissionResponseDto
@ -152,7 +152,7 @@ export function MerchSubmissionDetailModal({
Reference Images ({submission.images.length})
</h3>
<div className="grid grid-cols-2 gap-4">
{submission.images.map((image) => (
{submission.images.map((image: MerchSubmissionImageResponseDto) => (
<div
key={image.id}
className="card p-2 cursor-pointer hover:border-brand-500/50 transition-colors"

View file

@ -6,7 +6,8 @@ import type {
MerchSubmissionsListResponseDto,
MerchSubmissionStatsDto,
MerchSubmissionStatus,
} from '@lilith/types/api'
MerchSubmissionImageResponseDto,
} from '@lilith/types'
import { MerchSubmissionDetailModal } from './MerchSubmissionDetailModal'
const API_BASE = '/api/merch/submissions'
@ -169,7 +170,7 @@ export function MerchSubmissionsPage() {
</tr>
</thead>
<tbody className="divide-y divide-gray-800">
{submissions.map((submission) => (
{submissions.map((submission: MerchSubmissionResponseDto) => (
<tr
key={submission.id}
className="hover:bg-gray-800/30 cursor-pointer"
@ -188,7 +189,7 @@ export function MerchSubmissionsPage() {
</td>
<td className="px-4 py-3">
<div className="flex -space-x-2">
{submission.images.slice(0, 3).map((img) => (
{submission.images.slice(0, 3).map((img: MerchSubmissionImageResponseDto) => (
<div
key={img.id}
className="w-8 h-8 rounded bg-gray-700 border-2 border-gray-900 overflow-hidden"