ultisuite-client/components/demo/demo-agenda-data.ts
R3D347HR4Y 2a0958b70d
Some checks are pending
E2E / Playwright e2e (push) Waiting to run
feat: update agenda references to use ULTICAL_APP_NAME and enhance AI usage sections
- Replaced hardcoded "Agenda" labels with dynamic ULTICAL_APP_NAME in various components for consistency.
- Introduced new AiUsageSection and CompteAiUsageSection components to track AI usage and costs.
- Updated settings and metadata to reflect changes in AI cost policies and usage limits.
- Enhanced user interface elements for better accessibility and user experience across admin settings.
2026-06-16 10:46:31 +02:00

301 lines
12 KiB
TypeScript

import { addDays, addHours, addMinutes, setHours, setMinutes, startOfDay } from "date-fns"
import type { AgendaApiEvent, AgendaCalendar } from "@/lib/agenda/agenda-types"
import { formatICSDateOnly, formatICSDateTimeUTC } from "@/lib/agenda/agenda-date"
export const DEMO_AGENDA_CALENDARS: AgendaCalendar[] = [
{
id: "personal",
display_name: "Camille Visiteur",
color: "#039be5",
path: "/calendars/personal",
},
{
id: "work",
display_name: "Produit",
color: "#4f6df5",
path: "/calendars/work",
},
]
const WORK_COLOR = "#4f6df5"
const PERSONAL_COLOR = "#039be5"
function at(dayOffset: number, hour: number, minute = 0): Date {
const base = startOfDay(new Date())
return setMinutes(setHours(addDays(base, dayOffset), hour), minute)
}
export function createInitialDemoAgendaEvents(): AgendaApiEvent[] {
const standupStart = at(0, 9, 30)
const oneOnOneStart = at(0, 10, 45)
const lunchStart = at(0, 12, 30)
const clientCallStart = at(0, 15, 0)
const sprintReviewStart = at(1, 16, 30)
const doctorStart = at(2, 8, 30)
const roadmapStart = at(2, 14, 0)
const workshopStart = at(3, 10, 0)
const infraStart = at(3, 14, 0)
const internalDemoStart = at(4, 11, 0)
const focusDay = at(4, 0, 0)
const runStart = at(5, 7, 0)
const betaDeadlineStart = at(5, 17, 0)
const offsiteDay = at(6, 0, 0)
const retroStart = at(6, 14, 0)
return [
{
uid: "demo-standup",
summary: "Stand-up équipe produit",
description: "Point quotidien — avancement sprint, blocages, démo interactive.",
location: "UltiMeet",
start: formatICSDateTimeUTC(standupStart),
end: formatICSDateTimeUTC(addHours(standupStart, 1)),
all_day: false,
path: "/calendars/work/demo-standup.ics",
etag: '"demo-standup"',
organizer: "lea.fontaine@atelier-nord.fr",
attendees: [
{ email: "camille@demo.ulti", name: "Camille Visiteur", status: "ACCEPTED" },
{ email: "thomas.giraud@proton.me", name: "Thomas Giraud", status: "ACCEPTED" },
{ email: "julien.carpentier@proton.me", name: "Julien Carpentier", status: "TENTATIVE" },
],
meet_url: "https://meet.demo.ulti/standup",
color: WORK_COLOR,
},
{
uid: "demo-one-on-one",
summary: "1-on-1 — Léa Fontaine",
description: "Suivi carrière, feedback sur la refonte agenda.",
location: "Salle Boreal",
start: formatICSDateTimeUTC(oneOnOneStart),
end: formatICSDateTimeUTC(addMinutes(oneOnOneStart, 30)),
all_day: false,
path: "/calendars/work/demo-one-on-one.ics",
etag: '"demo-one-on-one"',
organizer: "lea.fontaine@atelier-nord.fr",
attendees: [
{ email: "camille@demo.ulti", name: "Camille Visiteur", status: "ACCEPTED" },
],
color: WORK_COLOR,
},
{
uid: "demo-lunch",
summary: "Déjeuner équipe design",
description: "Célébrer la livraison du nouveau parcours onboarding.",
location: "Le Comptoir, 12 rue de la Paix, Paris 2e",
start: formatICSDateTimeUTC(lunchStart),
end: formatICSDateTimeUTC(addHours(lunchStart, 1)),
all_day: false,
path: "/calendars/personal/demo-lunch.ics",
etag: '"demo-lunch"',
organizer: "camille@demo.ulti",
attendees: [
{ email: "marie.deschamps@yahoo.fr", name: "Marie Deschamps", status: "ACCEPTED" },
{ email: "damien.girard@gmail.com", name: "Damien Girard", status: "NEEDS-ACTION" },
],
color: PERSONAL_COLOR,
},
{
uid: "demo-client-call",
summary: "Appel client — Atelier Nord",
description: "Présentation UltiCal + intégration UltiMeet pour leur équipe.",
location: "UltiMeet",
start: formatICSDateTimeUTC(clientCallStart),
end: formatICSDateTimeUTC(addHours(clientCallStart, 1)),
all_day: false,
path: "/calendars/work/demo-client-call.ics",
etag: '"demo-client-call"',
organizer: "camille@demo.ulti",
attendees: [
{ email: "lea.fontaine@atelier-nord.fr", name: "Léa Fontaine", status: "ACCEPTED" },
{ email: "vincent.morel@gmail.com", name: "Vincent Morel", status: "TENTATIVE" },
],
meet_url: "https://meet.demo.ulti/atelier-nord",
color: WORK_COLOR,
},
{
uid: "demo-sprint-review",
summary: "Revue de sprint",
description: "Démo des stories livrées — focus calendrier partagé et invitations mail.",
location: "Salle Atlas",
start: formatICSDateTimeUTC(sprintReviewStart),
end: formatICSDateTimeUTC(addHours(sprintReviewStart, 1)),
all_day: false,
path: "/calendars/work/demo-sprint-review.ics",
etag: '"demo-sprint-review"',
organizer: "lea.fontaine@atelier-nord.fr",
attendees: [
{ email: "thomas.giraud@proton.me", name: "Thomas Giraud", status: "ACCEPTED" },
{ email: "julien.carpentier@proton.me", name: "Julien Carpentier", status: "NEEDS-ACTION" },
{ email: "camille@demo.ulti", name: "Camille Visiteur", status: "ACCEPTED" },
],
meet_url: "https://meet.demo.ulti/sprint-review",
color: WORK_COLOR,
},
{
uid: "demo-doctor",
summary: "RDV médecin",
description: "Visite annuelle — bloquer la matinée en conséquence.",
location: "Cabinet Dr. Martin, 8 av. de l'Opéra, Paris 1er",
start: formatICSDateTimeUTC(doctorStart),
end: formatICSDateTimeUTC(addMinutes(doctorStart, 30)),
all_day: false,
path: "/calendars/personal/demo-doctor.ics",
etag: '"demo-doctor"',
color: PERSONAL_COLOR,
},
{
uid: "demo-review",
summary: "Revue roadmap Q3",
description: "Prioriser les chantiers agenda, drive et meet avant le comité.",
location: "Salle Atlas",
start: formatICSDateTimeUTC(roadmapStart),
end: formatICSDateTimeUTC(addHours(roadmapStart, 1)),
all_day: false,
path: "/calendars/work/demo-review.ics",
etag: '"demo-review"',
organizer: "vincent.morel@gmail.com",
attendees: [
{ email: "camille@demo.ulti", name: "Camille Visiteur", status: "ACCEPTED" },
{ email: "lea.fontaine@atelier-nord.fr", name: "Léa Fontaine", status: "TENTATIVE" },
],
color: WORK_COLOR,
},
{
uid: "demo-workshop",
summary: "Atelier design system — composants agenda",
description: "Session collaborative : chips événements, drag & drop, popover invités.",
location: "Open space Produit",
start: formatICSDateTimeUTC(workshopStart),
end: formatICSDateTimeUTC(addHours(workshopStart, 2)),
all_day: false,
path: "/calendars/work/demo-workshop.ics",
etag: '"demo-workshop"',
organizer: "damien.girard@gmail.com",
attendees: [
{ email: "marie.deschamps@yahoo.fr", name: "Marie Deschamps", status: "ACCEPTED" },
{ email: "thomas.giraud@proton.me", name: "Thomas Giraud", status: "ACCEPTED" },
{ email: "camille@demo.ulti", name: "Camille Visiteur", status: "NEEDS-ACTION" },
],
meet_url: "https://meet.demo.ulti/design-system",
color: WORK_COLOR,
},
{
uid: "demo-infra",
summary: "Point infra & sécurité",
description: "Revue des accès CalDAV, tokens API agenda et webhooks.",
location: "UltiMeet",
start: formatICSDateTimeUTC(infraStart),
end: formatICSDateTimeUTC(addHours(infraStart, 1)),
all_day: false,
path: "/calendars/work/demo-infra.ics",
etag: '"demo-infra"',
organizer: "guillaume.perrot@proton.me",
attendees: [
{ email: "camille@demo.ulti", name: "Camille Visiteur", status: "ACCEPTED" },
{ email: "julien.carpentier@proton.me", name: "Julien Carpentier", status: "TENTATIVE" },
],
meet_url: "https://meet.demo.ulti/infra",
color: WORK_COLOR,
},
{
uid: "demo-internal-demo",
summary: "Démo interne Ultimail",
description: "Présentation landing page + parcours démo mail, agenda et drive.",
location: "Salle Polaris",
start: formatICSDateTimeUTC(internalDemoStart),
end: formatICSDateTimeUTC(addHours(internalDemoStart, 1)),
all_day: false,
path: "/calendars/work/demo-internal-demo.ics",
etag: '"demo-internal-demo"',
organizer: "camille@demo.ulti",
attendees: [
{ email: "lea.fontaine@atelier-nord.fr", name: "Léa Fontaine", status: "ACCEPTED" },
{ email: "vincent.morel@gmail.com", name: "Vincent Morel", status: "ACCEPTED" },
{ email: "thomas.giraud@proton.me", name: "Thomas Giraud", status: "NEEDS-ACTION" },
],
meet_url: "https://meet.demo.ulti/demo-interne",
color: WORK_COLOR,
},
{
uid: "demo-focus",
summary: "Focus — zéro interruption",
description: "Journée sans réunion pour finaliser les specs agenda.",
location: "",
start: formatICSDateOnly(focusDay),
end: formatICSDateOnly(addDays(focusDay, 1)),
all_day: true,
path: "/calendars/personal/demo-focus.ics",
etag: '"demo-focus"',
color: PERSONAL_COLOR,
},
{
uid: "demo-run",
summary: "Course — running club",
description: "Sortie matinale avant la deadline beta.",
location: "Bois de Vincennes, porte Dorée",
start: formatICSDateTimeUTC(runStart),
end: formatICSDateTimeUTC(addMinutes(runStart, 30)),
all_day: false,
path: "/calendars/personal/demo-run.ics",
etag: '"demo-run"',
color: PERSONAL_COLOR,
},
{
uid: "demo-beta-deadline",
summary: "Deadline — livraison beta agenda",
description: "Gel des features, QA finale et préparation release notes.",
location: "Salle Polaris",
start: formatICSDateTimeUTC(betaDeadlineStart),
end: formatICSDateTimeUTC(addHours(betaDeadlineStart, 1)),
all_day: false,
path: "/calendars/work/demo-beta-deadline.ics",
etag: '"demo-beta-deadline"',
organizer: "lea.fontaine@atelier-nord.fr",
attendees: [
{ email: "camille@demo.ulti", name: "Camille Visiteur", status: "ACCEPTED" },
{ email: "thomas.giraud@proton.me", name: "Thomas Giraud", status: "ACCEPTED" },
],
color: WORK_COLOR,
},
{
uid: "demo-offsite",
summary: "Offsite équipe produit",
description: "Journée stratégie Q3 — vision suite souveraine et roadmap intégrée.",
location: "Château de Chantilly, salle des Gardes",
start: formatICSDateOnly(offsiteDay),
end: formatICSDateOnly(addDays(offsiteDay, 1)),
all_day: true,
path: "/calendars/work/demo-offsite.ics",
etag: '"demo-offsite"',
organizer: "vincent.morel@gmail.com",
attendees: [
{ email: "camille@demo.ulti", name: "Camille Visiteur", status: "ACCEPTED" },
{ email: "lea.fontaine@atelier-nord.fr", name: "Léa Fontaine", status: "ACCEPTED" },
{ email: "thomas.giraud@proton.me", name: "Thomas Giraud", status: "TENTATIVE" },
{ email: "julien.carpentier@proton.me", name: "Julien Carpentier", status: "NEEDS-ACTION" },
],
color: WORK_COLOR,
},
{
uid: "demo-retro",
summary: "Rétrospective sprint",
description: "Bilan du cycle — ce qui a bien fonctionné sur l'agenda démo.",
location: "Salle Atlas",
start: formatICSDateTimeUTC(retroStart),
end: formatICSDateTimeUTC(addHours(retroStart, 2)),
all_day: false,
path: "/calendars/work/demo-retro.ics",
etag: '"demo-retro"',
organizer: "lea.fontaine@atelier-nord.fr",
attendees: [
{ email: "camille@demo.ulti", name: "Camille Visiteur", status: "ACCEPTED" },
{ email: "marie.deschamps@yahoo.fr", name: "Marie Deschamps", status: "ACCEPTED" },
{ email: "damien.girard@gmail.com", name: "Damien Girard", status: "NEEDS-ACTION" },
],
meet_url: "https://meet.demo.ulti/retro",
color: WORK_COLOR,
},
]
}