This commit is contained in:
+5
-2
@@ -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}`),
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user