// Couture liste → content script du formulaire mairie (contrat lu par la tâche // sœur « formater les données pour le formulaire mairie »). // // Clé UNIQUE, pas indexée par uid : le content script s'exécute sur le site de // la mairie et n'a aucun moyen d'apprendre un uid (le fragment d'URL a été // écarté). Une clé connue d'avance lui suffit donc à lire « l'événement à // créer ». Corollaire assumé : le dernier clic gagne, et on n'efface pas à la // lecture pour que le formulaire survive à un rechargement. // // `debut`/`fin` sont sérialisés en ISO 8601 : le contrat reste explicite quel // que soit le moteur, et le content script réhydrate avec `new Date(iso)`. export const CLE_EVENEMENT_EN_ATTENTE = "evenement-en-attente"; // `lieu` est laissé brut ("" si absent) : c'est le signal dont le content // script a besoin pour décider s'il pose aussi les coordonnées du café. export function serialiserPourFormulaire(evenement) { return { uid: evenement.uid, titre: evenement.titre, description: evenement.description, lieu: evenement.lieu, debut: evenement.debut.toISOString(), fin: evenement.fin.toISOString(), categories: evenement.categories, journeeEntiere: evenement.journeeEntiere, }; } // `storage` est injecté (obligatoire) : testable sans navigateur. export async function deposerEvenement(storage, evenement) { await storage.set({ [CLE_EVENEMENT_EN_ATTENTE]: serialiserPourFormulaire(evenement), }); }