chore: update
ci-api / test (push) Successful in 22m30s
ci-web / test (push) Successful in 13m15s

This commit is contained in:
Nuxgrid
2026-08-01 23:33:11 +02:00
parent cb966fcaf0
commit fb10d25ee2
21 changed files with 612 additions and 81 deletions
+83 -17
View File
@@ -1,8 +1,10 @@
import { useState } from 'react'
import {
Box,
Button,
FormControl,
FormLabel,
HStack,
Input,
Modal,
ModalBody,
@@ -14,6 +16,7 @@ import {
Radio,
RadioGroup,
Stack,
Switch,
Text,
useToast,
} from '@chakra-ui/react'
@@ -32,7 +35,14 @@ interface CreateDemoModalProps {
export function CreateDemoModal({ isOpen, onClose, onCreated, leadId, lockedUsername }: CreateDemoModalProps) {
const toast = useToast()
const [username, setUsername] = useState(lockedUsername ?? '')
const [enableTelegram, setEnableTelegram] = useState(false)
const [telegramBotToken, setTelegramBotToken] = useState('')
const [enableNowPayments, setEnableNowPayments] = useState(false)
const [nowPaymentsApiKey, setNowPaymentsApiKey] = useState('')
const [nowPaymentsIpnSecret, setNowPaymentsIpnSecret] = useState('')
const [storageDriver, setStorageDriver] = useState<StorageDriver>('local')
const [s3Bucket, setS3Bucket] = useState('')
const [s3Endpoint, setS3Endpoint] = useState('')
@@ -40,7 +50,11 @@ export function CreateDemoModal({ isOpen, onClose, onCreated, leadId, lockedUser
const reset = () => {
setUsername(lockedUsername ?? '')
setEnableTelegram(false)
setTelegramBotToken('')
setEnableNowPayments(false)
setNowPaymentsApiKey('')
setNowPaymentsIpnSecret('')
setStorageDriver('local')
setS3Bucket('')
setS3Endpoint('')
@@ -65,7 +79,9 @@ export function CreateDemoModal({ isOpen, onClose, onCreated, leadId, lockedUser
const params: CreateDemoParams = {
username: username.trim(),
leadId,
telegramBotToken: telegramBotToken.trim() || undefined,
telegramBotToken: enableTelegram ? telegramBotToken.trim() || undefined : undefined,
nowPaymentsApiKey: enableNowPayments ? nowPaymentsApiKey.trim() || undefined : undefined,
nowPaymentsIpnSecret: enableNowPayments ? nowPaymentsIpnSecret.trim() || undefined : undefined,
storageDriver,
...(storageDriver === 's3'
? { s3Bucket: s3Bucket.trim(), s3Endpoint: s3Endpoint.trim() }
@@ -104,20 +120,70 @@ export function CreateDemoModal({ isOpen, onClose, onCreated, leadId, lockedUser
/>
</FormControl>
{/* --- Telegram --- */}
<FormControl isDisabled={submitting}>
<FormLabel>Token bot Telegram</FormLabel>
<Input
placeholder="123456:ABC-DEF..."
value={telegramBotToken}
onChange={(e) => setTelegramBotToken(e.target.value)}
type="password"
autoComplete="off"
/>
<Text fontSize="xs" color="gray.500" mt={1}>
Optionnel laissez vide si le bot n'est pas encore prêt.
</Text>
<HStack justify="space-between">
<FormLabel mb={0}>Bot Telegram</FormLabel>
<Switch
isChecked={enableTelegram}
onChange={(e) => setEnableTelegram(e.target.checked)}
/>
</HStack>
</FormControl>
{enableTelegram && (
<Box pl={3} borderLeftWidth="2px" borderColor="primary.500">
<FormControl isDisabled={submitting}>
<FormLabel fontSize="sm">Token bot Telegram</FormLabel>
<Input
placeholder="123456:ABC-DEF..."
value={telegramBotToken}
onChange={(e) => setTelegramBotToken(e.target.value)}
type="password"
autoComplete="off"
/>
</FormControl>
</Box>
)}
{/* --- NowPayments --- */}
<FormControl isDisabled={submitting}>
<HStack justify="space-between">
<FormLabel mb={0}>NowPayments (paiement crypto)</FormLabel>
<Switch
isChecked={enableNowPayments}
onChange={(e) => setEnableNowPayments(e.target.checked)}
/>
</HStack>
</FormControl>
{enableNowPayments && (
<Stack spacing={3} pl={3} borderLeftWidth="2px" borderColor="primary.500">
<FormControl isDisabled={submitting}>
<FormLabel fontSize="sm">Clé API NowPayments</FormLabel>
<Input
placeholder="clé API du compte marchand"
value={nowPaymentsApiKey}
onChange={(e) => setNowPaymentsApiKey(e.target.value)}
type="password"
autoComplete="off"
/>
</FormControl>
<FormControl isDisabled={submitting}>
<FormLabel fontSize="sm">Secret IPN NowPayments</FormLabel>
<Input
placeholder="secret configuré côté NowPayments"
value={nowPaymentsIpnSecret}
onChange={(e) => setNowPaymentsIpnSecret(e.target.value)}
type="password"
autoComplete="off"
/>
<Text fontSize="xs" color="gray.500" mt={1}>
Laissez vide pour garder celui pré-généré automatiquement.
</Text>
</FormControl>
</Stack>
)}
{/* --- Stockage --- */}
<FormControl isDisabled={submitting}>
<FormLabel>Stockage des fichiers</FormLabel>
<RadioGroup value={storageDriver} onChange={(v) => setStorageDriver(v as StorageDriver)}>
@@ -129,17 +195,17 @@ export function CreateDemoModal({ isOpen, onClose, onCreated, leadId, lockedUser
</FormControl>
{storageDriver === 's3' && (
<Stack spacing={4} pl={1} borderLeftWidth="2px" borderColor="primary.500">
<FormControl isRequired isDisabled={submitting} pl={3}>
<FormLabel>Nom du bucket</FormLabel>
<Stack spacing={4} pl={3} borderLeftWidth="2px" borderColor="primary.500">
<FormControl isRequired isDisabled={submitting}>
<FormLabel fontSize="sm">Nom du bucket</FormLabel>
<Input
placeholder="mon-bucket-demo"
value={s3Bucket}
onChange={(e) => setS3Bucket(e.target.value)}
/>
</FormControl>
<FormControl isRequired isDisabled={submitting} pl={3}>
<FormLabel>Endpoint S3</FormLabel>
<FormControl isRequired isDisabled={submitting}>
<FormLabel fontSize="sm">Endpoint S3</FormLabel>
<Input
placeholder="https://s3.exemple.com"
value={s3Endpoint}
+4
View File
@@ -78,6 +78,8 @@ export interface CreateDemoParams {
username: string
leadId?: string
telegramBotToken?: string
nowPaymentsApiKey?: string
nowPaymentsIpnSecret?: string
storageDriver: StorageDriver
s3Bucket?: string
s3Endpoint?: string
@@ -167,6 +169,8 @@ export const api = {
username: params.username,
...(params.leadId ? { lead_id: params.leadId } : {}),
...(params.telegramBotToken ? { telegram_bot_token: params.telegramBotToken } : {}),
...(params.nowPaymentsApiKey ? { nowpayments_api_key: params.nowPaymentsApiKey } : {}),
...(params.nowPaymentsIpnSecret ? { nowpayments_ipn_secret: params.nowPaymentsIpnSecret } : {}),
storage_driver: params.storageDriver,
...(params.storageDriver === 's3'
? { s3_bucket: params.s3Bucket, s3_endpoint: params.s3Endpoint }