gestion_table_tournante_libre/src/interface/generation/meilleure.js

36 lines
1.6 KiB
JavaScript
Raw Normal View History

// © 2026 TechnoLibre (http://www.technolibre.ca)
// License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
// La meilleure proposition, que la section de la génération annonce en tête
// (§ 5.4, § 5.7), pure : SectionGeneration.svelte la câble.
//
// Elle se lit dans le tableau des propositions, sur la table d'évaluation
// de la charge (evaluation et tableau, propositions/modele.js) : la même
// mesure, le même classement et la même cellule que la section des
// propositions affiche au rang 1 ; aucune valeur ne se recalcule ici.
import { evaluation, tableau } from '../propositions/modele.js';
/** La colonne du tableau que l'annonce reprend. */
export const COLONNE_ANNONCEE = 'collisionsCumulees';
/**
* La proposition au rang 1 du classement, et sa cellule des collisions
* cumulées.
*
* @param {Object} charge la charge de l'état observable de la séance
* @returns {null|{id: number, cellule: {colonne: string, valeur: number|null,
* cle: string|null, decimales: number}}} null quand aucune proposition ne
* se classe : aucune proposition, aucune comparable — population changée —,
* ou une configuration que la mesure refuse ; sinon l'identifiant de la
* première ligne du classement et sa cellule, telle que le tableau la porte,
* que texteCellule écrit
*/
export function meilleureProposition(charge) {
const { table } = evaluation(charge);
if (table === null) return null;
const [premiere] = tableau(table).lignes;
if (premiere === undefined) return null;
return { id: premiere.id, cellule: premiere.cellules.find(({ colonne }) => colonne === COLONNE_ANNONCEE) };
}