forked from yvv/decision
v3 : interface des objections, des coquilles validées et de la messagerie ; contrôles C28–C31
Une version retenue par une objection le dit sous l'article, à chacun selon son rôle : la personne qui vote voit qu'elle ne se vote plus (les votes faits restent) ; l'auteur, quoi faire (« Modifier l'article visé » pour une redite, « Reformuler » pour une contradiction) ; la personne qui objecte, lever ou réitérer avant l'échéance. Le panier la montre sans choix et ne l'envoie jamais. « Détails » : faire une objection (redit / contredit), les objections et où elles en sont, les coquilles proposées par d'autres avec leur diff resserré, valider / refuser / revenir, l'historique dit qui a validé. Une coquille se propose sur toute version ouverte ou en vigueur. Boîte « Messages » dans le menu, avec le nombre de non-lus (pastille sur le bouton du menu en mobile) : objet, texte, gestes, échéance ; un message traité n'a plus de geste. Répondre à une objection lit son message. Trilingue (fr, en, es). C6 suit la règle : la coquille d'un administrateur sur un texte du seed passe tout de suite ; C28–C31 couvrent le reste. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -19,6 +19,30 @@ export interface PanelState {
|
||||
/** The basket, opened on one section. */
|
||||
section?: string | null;
|
||||
prefill?: { title: string; body: string } | null;
|
||||
/** A new proposal that answers this objection (ADR 0010). */
|
||||
objectionId?: string | null;
|
||||
/** The details of one's own version, its edit form open: to reword it. */
|
||||
edit?: boolean;
|
||||
}
|
||||
|
||||
/** The tabs as the URL names them. */
|
||||
export const TABS: Record<string, Tab> = { panier: 'basket', propositions: 'proposals', proposer: 'propose', details: 'details', reglages: 'settings' };
|
||||
export const TAB_NAMES: Record<Tab, string> = { basket: 'panier', proposals: 'propositions', propose: 'proposer', details: 'details', settings: 'reglages' };
|
||||
|
||||
/** The query of a reader's URL: the unfolded vote and the panel. */
|
||||
export function panelSearch(panel: PanelState | null, vote: string | null): string {
|
||||
const q = new URLSearchParams();
|
||||
if (vote) q.set('vote', vote);
|
||||
if (panel) {
|
||||
q.set('onglet', TAB_NAMES[panel.tab]);
|
||||
if (panel.unitId) q.set('article', panel.unitId);
|
||||
if (panel.proposalId) q.set('version', panel.proposalId);
|
||||
if (panel.draftId) q.set('brouillon', panel.draftId);
|
||||
if (panel.section) q.set('section', panel.section);
|
||||
if (panel.objectionId) q.set('objection', panel.objectionId);
|
||||
if (panel.edit) q.set('modifier', '1');
|
||||
}
|
||||
return q.toString();
|
||||
}
|
||||
|
||||
export interface Shown {
|
||||
|
||||
Reference in New Issue
Block a user