feat: add input for leadID and Username
ci-web / test (push) Has been cancelled

This commit is contained in:
Nuxgrid
2026-07-28 15:28:55 +02:00
parent 4b3a5720a3
commit 118ac02505
2 changed files with 45 additions and 5 deletions
+5 -2
View File
@@ -132,8 +132,11 @@ export const api = {
listDemos: () => request<{ items: Demo[] }>('GET', '/demos'), listDemos: () => request<{ items: Demo[] }>('GET', '/demos'),
getDemo: (id: string) => request<Demo>('GET', `/demos/${id}`), getDemo: (id: string) => request<Demo>('GET', `/demos/${id}`),
createDemo: (leadId?: string) => createDemo: (username: string, leadId?: string) =>
request<Demo>('POST', '/demos', leadId ? { lead_id: leadId } : {}), request<Demo>('POST', '/demos', {
username,
...(leadId ? { lead_id: leadId } : {}),
}),
extendDemo: (id: string) => request<Demo>('POST', `/demos/${id}/extend`), extendDemo: (id: string) => request<Demo>('POST', `/demos/${id}/extend`),
deleteDemo: (id: string) => request<Demo>('DELETE', `/demos/${id}`), deleteDemo: (id: string) => request<Demo>('DELETE', `/demos/${id}`),
+40 -3
View File
@@ -3,8 +3,11 @@ import {
Badge, Badge,
Button, Button,
Flex, Flex,
FormControl,
FormLabel,
Heading, Heading,
HStack, HStack,
Input,
Link, Link,
Modal, Modal,
ModalBody, ModalBody,
@@ -45,6 +48,10 @@ export function Demos() {
const [busy, setBusy] = useState<string | null>(null) const [busy, setBusy] = useState<string | null>(null)
const [toDelete, setToDelete] = useState<Demo | null>(null) const [toDelete, setToDelete] = useState<Demo | null>(null)
// --- Formulaire de création ---
const [newUsername, setNewUsername] = useState('')
const [newLeadId, setNewLeadId] = useState('')
// --- Détails d'une démo (modale) --- // --- Détails d'une démo (modale) ---
const [detailsFor, setDetailsFor] = useState<Demo | null>(null) const [detailsFor, setDetailsFor] = useState<Demo | null>(null)
const [details, setDetails] = useState<DemoDetails | null>(null) const [details, setDetails] = useState<DemoDetails | null>(null)
@@ -69,10 +76,16 @@ export function Demos() {
}, [load]) }, [load])
const create = async () => { const create = async () => {
if (!newUsername.trim()) {
toast({ status: 'warning', title: 'Username requis' })
return
}
setBusy('new') setBusy('new')
try { try {
await api.createDemo() await api.createDemo(newUsername.trim(), newLeadId.trim() || undefined)
toast({ status: 'success', title: 'Démo lancée' }) toast({ status: 'success', title: 'Démo lancée' })
setNewUsername('')
setNewLeadId('')
await load() await load()
} catch (err) { } catch (err) {
const msg = err instanceof ApiError ? err.message : 'Erreur' const msg = err instanceof ApiError ? err.message : 'Erreur'
@@ -138,9 +151,33 @@ export function Demos() {
return ( return (
<> <>
<Flex mb={6} align="center"> <Flex mb={6} align="flex-end" gap={4} wrap="wrap">
<Heading size="md">Démos</Heading> <Heading size="md" mr={4}>
Démos
</Heading>
<Spacer /> <Spacer />
<FormControl maxW="220px">
<FormLabel fontSize="sm" mb={1}>
Username
</FormLabel>
<Input
size="sm"
placeholder="ex: acme-corp"
value={newUsername}
onChange={(e) => setNewUsername(e.target.value)}
/>
</FormControl>
<FormControl maxW="220px">
<FormLabel fontSize="sm" mb={1}>
Lead ID (optionnel)
</FormLabel>
<Input
size="sm"
placeholder="uuid du lead"
value={newLeadId}
onChange={(e) => setNewLeadId(e.target.value)}
/>
</FormControl>
<Button colorScheme="primary" isLoading={busy === 'new'} onClick={create}> <Button colorScheme="primary" isLoading={busy === 'new'} onClick={create}>
Nouvelle démo Nouvelle démo
</Button> </Button>