Commit 8d02d32b authored by Kourser's avatar Kourser
Browse files

« Passer en privé » proposait de fermer le canal

Le panneau s'ouvrait sur une liste de cases à cocher — vide, tant que personne
n'est admis en cellule — et le seul bouton en dessous disait « Fermer le
canal ». C'est le vocabulaire de « Clore », qui est le bouton d'à côté et qui
détruit la conversation vivante. On venait rendre un canal privé, on se voyait
proposer de le supprimer : on s'arrêtait là, et le geste passait pour cassé.

Le bouton dit maintenant ce qu'il fait, et compte : « Passer en privé — vous
seul », ou « avec trois personnes ». Une liste vide s'explique au lieu de
laisser croire à un écran mort. Et le passage réussi se dit — la seule
confirmation était une pastille de couleur en bout de ligne, trop discrète
pour un geste dont on se demande s'il a pris.

Co-Authored-By: default avatarClaude Opus 5 <noreply@anthropic.com>
parent 258821c5
Loading
Loading
Loading
Loading
+31 −6
Changes for apps/web/src/ecrans/CanauxCrise.tsx: 31 added lines, 6 removed lines.
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ export function CanauxCrise({ criseId }: { criseId: string }) {
  const [ouvert, definirOuvert] = useState(false);
  const [libelle, definirLibelle] = useState("");
  const [prive, definirPrive] = useState(false);
  const [message, definirMessage] = useState<string | null>(null);
  const [choisis, definirChoisis] = useState<string[]>([]);
  const [avecVoix, definirAvecVoix] = useState(true);
  const [erreur, definirErreur] = useState<string | null>(null);
@@ -81,10 +82,15 @@ export function CanauxCrise({ criseId }: { criseId: string }) {
  }

  async function appliquerAcces(salonId: string, versPrive: boolean, liste: string[]) {
    definirErreur(null);
    definirErreur(null); definirMessage(null);
    try {
      await api.poster(`/api/crises/${criseId}/salons/${salonId}/acces`,
      const r = await api.poster<{ message: string }>(
        `/api/crises/${criseId}/salons/${salonId}/acces`,
        { prive: versPrive, membres: liste });
      // Le seul retour visible était la pastille de la ligne, qui change de
      // « ouvert à la crise » à « privé ». Trop discret pour un geste dont on
      // se demande s'il a pris : on le dit.
      definirMessage(r.message);
      await client.invalidateQueries({ queryKey: ["salons", criseId] });
      await client.invalidateQueries({ queryKey: ["salles", criseId] });
      definirEdite(null);
@@ -105,6 +111,7 @@ export function CanauxCrise({ criseId }: { criseId: string }) {

      <div className="contenu">
        {erreur && <div className="carte alerte" style={{ marginBottom: 12 }}>{erreur}</div>}
        {message && <div className="succes" style={{ marginBottom: 12 }}>{message}</div>}

        <div className="carte" style={{ marginBottom: 16 }}>
          <div className="ligne">
@@ -317,6 +324,16 @@ export function CanauxCrise({ criseId }: { criseId: string }) {
                                                                                              + "le "
                                                                                              + "passé.")}
                      </p>
                      {/* Personne en cellule, donc personne à cocher : sans un
                          mot, le panneau s'ouvre sur du vide et l'on croit
                          l'écran cassé. */}
                      {disponibles.length === 0 && (
                        <p className="aide" style={{ marginTop: 0 }}>
                          {t("Personne n’est encore admis en cellule sur cette crise : il "
                            + "n’y a donc personne à cocher. Vous pouvez passer le canal "
                            + "en privé pour vous seul, et y admettre du monde ensuite.")}
                        </p>
                      )}
                      {disponibles.map((m) => (
                        <label key={m.compte_id} className="ligne"
                          style={{ gap: 8, padding: "2px 0", fontSize: 13.5,
@@ -327,12 +344,20 @@ export function CanauxCrise({ criseId }: { criseId: string }) {
                          {m.nom}
                        </label>
                      ))}
                      <button className="petit" style={{ marginTop: 6 }}
                      {/* Il disait « Fermer le canal » — le vocabulaire de
                          « Clore », qui est le bouton d'à côté et détruit la
                          conversation vivante. Qui cliquait « Passer en privé »
                          se voyait proposer autre chose, et s'arrêtait là. */}
                      <div className="ligne" style={{ gap: 6, marginTop: 6 }}>
                        <button className="accent petit"
                          onClick={() => void appliquerAcces(s.id, true, choisis)}>
                        {t("Fermer "
                                                                                                            + "le "
                                                                                                            + "canal")}
                          {choisis.length === 0
                            ? t("Passer en privé — vous seul")
                            : t("Passer en privé avec {n} personne(s)", { n: choisis.length })}
                        </button>
                        <button className="discret petit"
                          onClick={() => definirEdite(null)}>{t("Annuler")}</button>
                      </div>
                    </div>
                  )}
                </td>
+4 −0
Changes for apps/web/src/langues/en.ts: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -2481,6 +2481,10 @@ export const EN: Record<string, string> = {
  "Réunions enregistrées": "Recorded meetings",
  "Vers l'extérieur": "Outward",
  "Fin de crise": "End of crisis",
  "Personne n’est encore admis en cellule sur cette crise : il n’y a donc personne à cocher. Vous pouvez passer le canal en privé pour vous seul, et y admettre du monde ensuite.":
    "Nobody has been admitted to a cell on this crisis yet, so there is nobody to tick. You can make the channel private for yourself alone, and let people in afterwards.",
  "Passer en privé — vous seul": "Make private — you alone",
  "Passer en privé avec {n} personne(s)": "Make private with {n} person(s)",
  "Vous avez été nommé dans ce canal.": "You were named in this channel.",
  "En attendant, la cellule tient par le canal et la main courante — et le téléphone reste le repli que le dossier de préparation prévoit.":
    "In the meantime the cell holds through the channel and the log — and the telephone remains the fallback the preparedness file provides for.",