chore: build
ci-api / test (push) Failing after 14m25s
ci-web / test (push) Failing after 8m17s

This commit is contained in:
Xor290
2026-09-20 16:14:29 +02:00
parent 76b1412968
commit 9e11f01c2c
15 changed files with 65 additions and 359 deletions
+2 -2
View File
@@ -113,8 +113,8 @@ export function CreateProjectModal({ isOpen, onClose, onCreated }: CreateProject
))}
</Select>
<FormHelperText>
Durée réellement payée par le client. À l'échéance le projet est suspendu, puis supprimé
après le délai de grâce s'il n'est pas renouvelé.
Durée réellement payée par le client. À l'échéance le projet est supprimé s'il n'est pas
renouvelé.
</FormHelperText>
</FormControl>
+2 -4
View File
@@ -24,7 +24,7 @@ interface ExtendProjectModalProps {
}
// Renouvellement d'un abonnement : 1 à 12 mois ajoutés à l'échéance courante
// (ou à aujourd'hui si elle est dépassée). Relance un projet suspendu.
// (ou à aujourd'hui si elle est dépassée).
export function ExtendProjectModal({ project, onClose, onExtended }: ExtendProjectModalProps) {
const toast = useToast()
const [months, setMonths] = useState(1)
@@ -72,9 +72,7 @@ export function ExtendProjectModal({ project, onClose, onExtended }: ExtendProje
))}
</Select>
<FormHelperText>
{project?.status === 'suspended'
? "Le projet est suspendu : il sera relancé et l'abonnement repart d'aujourd'hui."
: "Les mois s'ajoutent à l'échéance actuelle."}
Les mois s'ajoutent à l'échéance actuelle.
</FormHelperText>
</FormControl>
</ModalBody>
+2 -5
View File
@@ -58,13 +58,12 @@ export interface Demo {
expires_at: string
}
// Projets vitrine : abonnement de 1 à 12 mois, suspendu à l'échéance puis
// supprimé après un délai de grâce (voir internal/projects côté API).
// Projets vitrine : abonnement de 1 à 12 mois, supprimé à l'échéance
// (voir internal/projects côté API).
export type ProjectStatus =
| 'pending'
| 'provisioning'
| 'ready'
| 'suspended'
| 'deleting'
| 'deleted'
| 'failed'
@@ -81,8 +80,6 @@ export interface Project {
months_purchased: number
created_at: string
expires_at: string
delete_at: string
suspended_at?: string
}
export interface CreateProjectParams {
-3
View File
@@ -101,8 +101,6 @@ export function projectStatusColor(s: ProjectStatus): string {
case 'provisioning':
case 'pending':
return 'blue'
case 'suspended':
return 'orange'
case 'deleting':
case 'failed':
return 'red'
@@ -118,7 +116,6 @@ export function projectStatusLabel(s: ProjectStatus): string {
pending: 'En attente',
provisioning: 'Déploiement…',
ready: 'En ligne',
suspended: 'Suspendu',
deleting: 'Suppression…',
deleted: 'Supprimé',
failed: 'Échec',
+7 -16
View File
@@ -75,21 +75,12 @@ export function Projects() {
}
}
// Échéance affichée : temps restant, ou date de suppression si suspendu.
const deadline = (p: Project) => {
if (p.status === 'suspended') {
return (
<Text color="orange.500" fontSize="sm">
Suppression le {formatDate(p.delete_at)}
</Text>
)
}
return (
<Text fontSize="sm">
{formatDate(p.expires_at)} · {timeRemaining(p.expires_at)}
</Text>
)
}
// Échéance affichée : date de suppression et temps restant.
const deadline = (p: Project) => (
<Text fontSize="sm">
{formatDate(p.expires_at)} · {timeRemaining(p.expires_at)}
</Text>
)
return (
<Box p={{ base: 4, md: 8 }}>
@@ -122,7 +113,7 @@ export function Projects() {
<Tbody>
{projects.map((p) => {
const locked = busy === p.id
const canExtend = p.status === 'ready' || p.status === 'provisioning' || p.status === 'suspended'
const canExtend = p.status === 'ready' || p.status === 'provisioning'
return (
<Tr key={p.id}>
<Td>{p.client_name}</Td>