Enhance bib management functionality by adding sequence detection and improving UI state synchronization. Introduced a new helper function to check for saved sequences and updated button visibility logic based on sequence presence. Adjusted rendering of action buttons in the assignment interface to reflect the current state more accurately.
This commit is contained in:
@ -2066,6 +2066,7 @@ if ($strLangue == 'fr') {
|
||||
if (container) {
|
||||
initModuleBibTippy(row);
|
||||
}
|
||||
syncBibUiState(row);
|
||||
return container;
|
||||
}
|
||||
|
||||
@ -2247,13 +2248,35 @@ if ($strLangue == 'fr') {
|
||||
});
|
||||
}
|
||||
|
||||
function bibHasSavedSequences(row) {
|
||||
if (!row) return false;
|
||||
let found = false;
|
||||
row.querySelectorAll('.bib-range[data-id]').forEach(function (line) {
|
||||
let id = parseInt(line.getAttribute('data-id') || '0', 10);
|
||||
if (id > 0) {
|
||||
found = true;
|
||||
}
|
||||
});
|
||||
return found;
|
||||
}
|
||||
|
||||
function syncBibUiState(row) {
|
||||
|
||||
let avecEl = row.querySelector('.bib-avec');
|
||||
if (!avecEl) return;
|
||||
if (!row) return;
|
||||
|
||||
let avecBib = parseInt(avecEl.textContent || '0', 10);
|
||||
let avecEl = row.querySelector('.bib-avec');
|
||||
let avecBib = 0;
|
||||
if (avecEl) {
|
||||
avecBib = parseInt(avecEl.textContent || '0', 10);
|
||||
if (isNaN(avecBib)) {
|
||||
avecBib = 0;
|
||||
}
|
||||
}
|
||||
let hasBib = avecBib > 0;
|
||||
let hasSequences = bibHasSavedSequences(row);
|
||||
let inResetMode = row.classList.contains('reset-mode');
|
||||
let inAutoMode = row.classList.contains('auto-mode');
|
||||
let inBatchMode = row.classList.contains('batch-mode');
|
||||
|
||||
// =====================
|
||||
// RADIO TEAM MODE
|
||||
@ -2267,24 +2290,36 @@ if ($strLangue == 'fr') {
|
||||
});
|
||||
|
||||
// =====================
|
||||
// RESET BUTTON
|
||||
// RESET — séquences enregistrées + dossards assignés (ou mode annuler)
|
||||
// =====================
|
||||
let btnReset = row.querySelector('.btn-reset');
|
||||
let resetGroup = row.querySelector('.epr-action-reset-group');
|
||||
|
||||
if (resetGroup) {
|
||||
resetGroup.style.display = hasBib ? '' : 'none';
|
||||
} else if (btnReset) {
|
||||
btnReset.style.display = hasBib ? '' : 'none';
|
||||
}
|
||||
bibSetActionGroupDisplay(
|
||||
row.querySelector('.btn-reset'),
|
||||
hasSequences && (hasBib || inResetMode)
|
||||
);
|
||||
|
||||
// =====================
|
||||
// ASSIGN BUTTON
|
||||
// ASSIGN BATCH — séquences enregistrées ; visible en mode batch (Annuler)
|
||||
// =====================
|
||||
let btnBatch = row.querySelector('.btn-assign-batch');
|
||||
bibSetActionGroupDisplay(
|
||||
row.querySelector('.btn-assign-batch'),
|
||||
hasSequences && ((!inResetMode && !inAutoMode) || inBatchMode)
|
||||
);
|
||||
|
||||
if (btnBatch && !row.classList.contains('reset-mode')) {
|
||||
btnBatch.style.display = hasBib ? '' : '';
|
||||
// =====================
|
||||
// AUTO — séquences enregistrées ; masqué en édition batch/reset/auto
|
||||
// =====================
|
||||
bibSetActionGroupDisplay(
|
||||
row.querySelector('.btn-auto'),
|
||||
hasSequences && !inResetMode && !inAutoMode && !inBatchMode
|
||||
);
|
||||
|
||||
if (hasSequences) {
|
||||
syncAutoUiState(row, row.dataset.autoActive === '1');
|
||||
} else {
|
||||
let badgeWrap = row.querySelector('.epr-auto-badge-wrap');
|
||||
if (badgeWrap) {
|
||||
badgeWrap.style.display = 'none';
|
||||
}
|
||||
}
|
||||
}
|
||||
function updateBatchAnalysis(row) {
|
||||
@ -2500,6 +2535,10 @@ if ($strLangue == 'fr') {
|
||||
}, 0);
|
||||
});
|
||||
|
||||
moduleBib.querySelectorAll('.epr-row').forEach(function (r) {
|
||||
syncBibUiState(r);
|
||||
});
|
||||
|
||||
moduleBib.addEventListener('click', function (e) {
|
||||
|
||||
// =====================
|
||||
@ -2774,6 +2813,7 @@ if ($strLangue == 'fr') {
|
||||
});
|
||||
let info = row.querySelector('.epr-actions .batch-info-text');
|
||||
if (info) info.textContent = '';
|
||||
syncBibUiState(row);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -2905,20 +2945,12 @@ if ($strLangue == 'fr') {
|
||||
if (orderBlock) {
|
||||
orderBlock.closest('.mb-2').style.display = '';
|
||||
}
|
||||
let btnBatch = row.querySelector('.btn-assign-batch');
|
||||
if (btnBatch) {
|
||||
btnBatch.style.display = '';
|
||||
}
|
||||
|
||||
let btnAuto = row.querySelector('.btn-auto');
|
||||
if (btnAuto) {
|
||||
btnAuto.style.display = '';
|
||||
}
|
||||
let info = row.querySelector('.epr-actions .batch-info-text');
|
||||
if (info) {
|
||||
info.innerHTML = '';
|
||||
}
|
||||
row.dataset.mode = '';
|
||||
syncBibUiState(row);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -2808,26 +2808,28 @@ function renderBibRangeHeader() {
|
||||
}
|
||||
|
||||
/** Boutons assignation / reset / auto — fusionnés dans la boîte Assignation de dossard. */
|
||||
function renderBibAssignActions($tabBibAssignments, $strLangue, $infoBib, $blnAutoActive, $blnTeamEpreuve) {
|
||||
function renderBibAssignActions($tabBibAssignments, $strLangue, $infoBib, $blnAutoActive, $blnTeamEpreuve, $blnHasSequences = false) {
|
||||
$strHideNoSeq = $blnHasSequences ? '' : 'display:none;';
|
||||
$strHideReset = ($blnHasSequences && (int)$infoBib['avec_bib'] > 0) ? '' : 'display:none;';
|
||||
ob_start();
|
||||
?>
|
||||
<div class="epr-actions">
|
||||
<div class="epr-action-row epr-action-row-main">
|
||||
<span class="epr-action-group">
|
||||
<span class="epr-action-group epr-action-batch-group" style="<?php echo $strHideNoSeq; ?>">
|
||||
<button type="button" class="btn btn-sm btn-secondary btn-assign-batch"<?php echo fxBibTippyAttr('bib_v4_tip_assign_seq'); ?>>
|
||||
<?php fxBibTexte('bib_v4_assign_seq', 1); ?>
|
||||
</button>
|
||||
<?php echo fxBibAideButton('bib_v4_assign_seq', 'secondary'); ?>
|
||||
</span>
|
||||
<span class="epr-action-group epr-action-reset-group"
|
||||
style="<?php echo ((int)$infoBib['avec_bib'] > 0 ? '' : 'display:none;'); ?>">
|
||||
style="<?php echo $strHideReset; ?>">
|
||||
<button type="button"
|
||||
class="btn btn-sm btn-danger btn-reset"<?php echo fxBibTippyAttr('bib_v4_tip_reset'); ?>>
|
||||
<?php fxBibTexte('bib_v4_reset', 1); ?>
|
||||
</button>
|
||||
<?php echo fxBibAideButton('bib_v4_reset', 'danger'); ?>
|
||||
</span>
|
||||
<span class="epr-action-group">
|
||||
<span class="epr-action-group epr-action-auto-group" style="<?php echo $strHideNoSeq; ?>">
|
||||
<button type="button"
|
||||
class="btn btn-sm btn-auto <?php echo $blnAutoActive ? 'btn-success' : 'btn-secondary'; ?>"<?php echo fxBibTippyAttr('bib_v4_tip_auto'); ?>>
|
||||
<?php echo fxBibEsc($blnAutoActive ? fxBibTexte('bib_v4_auto_config', 0) : fxBibTexte('bib_v4_auto', 0)); ?>
|
||||
@ -3061,7 +3063,8 @@ if ($teamMode <= 0) {
|
||||
$strLangue,
|
||||
$infoBib,
|
||||
$blnAutoActive,
|
||||
(int)$tabEpreuves[$i]['epr_equipe'] === 1
|
||||
(int)$tabEpreuves[$i]['epr_equipe'] === 1,
|
||||
count($tabBibStats) > 0
|
||||
); ?>
|
||||
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user