refactor(cluster): one rule for the filter panel

The panel had grown two shapes for the same kind of choice. Some filters were
checkboxes, some were chips, and New counties only was a checkbox duplicating a
chip - which I added, and which was the worst of it: a control that exists twice
is not more discoverable, it is one control the operator has to recognise twice.

The rule now:

  SWITCH  a behaviour that is on or off, and narrows nothing by a property of
          the station: hide worked, group duplicates, the two display options,
          LoTW users only.
  CHIPS   pick any number from a set; none picked means all. Status, mode,
          spotter continent. Selected is solid, unselected is the same chip
          faded, so the palette keeps teaching the colour code while switched
          off.

Nothing appears in both shapes. The duplicate county checkbox is gone.

Spotter continent became a chip row: seven two-letter codes fit on two lines,
they read as a set the way Status and Mode do, and several can be picked at
once - which "EU or NA" needs and a dropdown cannot express.

Both Lock buttons now sit in the heading of the section they lock, instead of
floating between sections, and every multi-select section clears the same way
through the same heading slot. One section helper and one chip helper, so the
next filter cannot drift.

The panel was also entirely hardcoded English - Search call, Hide worked, Bands,
Status - against the project's own bilingual rule. All of it goes through t()
now, both locales.
This commit is contained in:
2026-08-10 19:00:09 +02:00
parent d41352a3a5
commit c95a1137fc
3 changed files with 121 additions and 131 deletions
+2 -2
View File
@@ -266,7 +266,7 @@ const en: Dict = {
'clu.selfSpot': 'Self-spot while I log', 'clu.selfSpotEvery': 'at most every', 'clu.selfSpotMinutes': 'min',
'clu.selfSpotHint': 'Announces YOU on the master cluster when you log a QSO — the spot carries your station callsign and the frequency you just worked on, so callers find you without waiting for someone else to spot you. Sent on the first QSO of a frequency, then no more often than the gap below. Five minutes is the floor: a self-spot is traffic every user of the node sees.',
'clu.freeNodes': 'Free public nodes:',
'clu.lotwOnly': 'LoTW users only', 'clu.newCountyOnly': 'New counties only', 'clu.spotterCont': 'Spotter continent', 'clu.allContinents': 'All continents', 'clu.lotwBadge': 'Uploads to LoTW', 'clu.muteWorkedShort': 'No colour on worked', 'clu.slotHighlightShort': 'Colour unworked here', 'clu.muteWorked': 'No colour or badge on stations already worked',
'clu.filters': 'Filters', 'clu.hideFilters': 'Hide filters', 'clu.searchCall': 'Search call…', 'clu.hideWorked': 'Hide worked', 'clu.groupDup': 'Group duplicates', 'clu.mode': 'Mode', 'clu.bands': 'Bands', 'clu.source': 'Source', 'clu.clear': 'clear', 'clu.allSources': 'All sources', 'clu.lockModeTitle': 'Only show spots whose mode matches the entry strip', 'clu.lockBandTitle': "Lock to the entry strip's current band", 'clu.lotwOnly': 'LoTW users only', 'clu.spotterCont': 'Spotter continent', 'clu.lotwBadge': 'Uploads to LoTW', 'clu.muteWorkedShort': 'No colour on worked', 'clu.slotHighlightShort': 'Colour unworked here', 'clu.muteWorked': 'No colour or badge on stations already worked',
'clu.muteWorkedHint': '(they stay in the list, just quiet — leaves the colour for what is left to do)',
'clu.slotHighlight': 'Colour the stations not worked on this band and mode',
'clu.slotHighlightHint': '(by callsign, whatever the entity status says)',
@@ -686,7 +686,7 @@ const fr: Dict = {
'clu.selfSpot': "M'auto-spotter quand j'enregistre", 'clu.selfSpotEvery': 'au plus toutes les', 'clu.selfSpotMinutes': 'min',
'clu.selfSpotHint': "Annonce TON indicatif sur le cluster maître quand tu enregistres un QSO — le spot porte l'indicatif de station et la fréquence que tu viens de travailler, pour qu'on te trouve sans attendre que quelqu'un te spotte. Envoyé au premier QSO d'une fréquence, puis pas plus souvent que l'intervalle ci-dessous. Cinq minutes est le plancher : un auto-spot est du trafic que voient tous les utilisateurs du nœud.",
'clu.freeNodes': 'Nœuds publics gratuits :',
'clu.lotwOnly': 'Utilisateurs LoTW seulement', 'clu.newCountyOnly': 'Nouveaux comtés seulement', 'clu.spotterCont': 'Continent du spotter', 'clu.allContinents': 'Tous les continents', 'clu.lotwBadge': 'Utilise LoTW', 'clu.muteWorkedShort': 'Pas de couleur sur les faits', 'clu.slotHighlightShort': 'Colorer les non faits ici', 'clu.muteWorked': 'Aucune couleur ni badge sur les stations déjà contactées',
'clu.filters': 'Filtres', 'clu.hideFilters': 'Masquer les filtres', 'clu.searchCall': 'Chercher un indicatif…', 'clu.hideWorked': 'Masquer les contactés', 'clu.groupDup': 'Grouper les doublons', 'clu.mode': 'Mode', 'clu.bands': 'Bandes', 'clu.source': 'Source', 'clu.clear': 'effacer', 'clu.allSources': 'Toutes les sources', 'clu.lockModeTitle': 'N afficher que les spots du mode de la barre de saisie', 'clu.lockBandTitle': 'Verrouiller sur la bande de la barre de saisie', 'clu.lotwOnly': 'Utilisateurs LoTW seulement', 'clu.spotterCont': 'Continent du spotter', 'clu.lotwBadge': 'Utilise LoTW', 'clu.muteWorkedShort': 'Pas de couleur sur les faits', 'clu.slotHighlightShort': 'Colorer les non faits ici', 'clu.muteWorked': 'Aucune couleur ni badge sur les stations déjà contactées',
'clu.muteWorkedHint': '(elles restent dans la liste, simplement discrètes — la couleur reste pour ce qui est à faire)',
'clu.slotHighlight': 'Colorer les stations non contactées sur cette bande et ce mode',
'clu.slotHighlightHint': "(par indicatif, quel que soit le statut de l'entité)",