4c2984a81e
Браузер больше не ходит на chat.* с portal.* — REST идёт через Django с PAT; WS backoff без бесконечных 403; utilities.js ждёт DOMContentLoaded. Co-authored-by: Cursor <cursoragent@cursor.com>
70 lines
2.6 KiB
JavaScript
70 lines
2.6 KiB
JavaScript
function utilitiesPageRoot() {
|
|
return document.getElementById('utilities-page');
|
|
}
|
|
|
|
function utilitiesGetPharmacyId() {
|
|
var root = utilitiesPageRoot();
|
|
if (!root) return '';
|
|
var select = document.getElementById('utilities-pharmacy-select');
|
|
if (select && select.value) return select.value;
|
|
return root.getAttribute('data-own-pharmacy') || '';
|
|
}
|
|
|
|
function utilitiesGetReadingMode(pharmacyId, typeId) {
|
|
var root = utilitiesPageRoot();
|
|
if (!root || !typeId) return 'single';
|
|
var configs = {};
|
|
var typeModes = {};
|
|
try {
|
|
configs = JSON.parse(root.getAttribute('data-meter-configs') || '{}');
|
|
typeModes = JSON.parse(root.getAttribute('data-type-modes') || '{}');
|
|
} catch (e) {
|
|
return 'single';
|
|
}
|
|
if (pharmacyId) {
|
|
var key = pharmacyId + ':' + typeId;
|
|
if (configs[key]) return configs[key];
|
|
}
|
|
return typeModes[typeId] || 'single';
|
|
}
|
|
|
|
function utilitiesFormModeUpdate() {
|
|
var typeSelect = document.getElementById('utilities-type-select');
|
|
var singleWrap = document.getElementById('utilities-single-wrap');
|
|
var dayNightWrap = document.getElementById('utilities-daynight-wrap');
|
|
var hint = document.getElementById('utilities-mode-hint');
|
|
if (!typeSelect || !singleWrap || !dayNightWrap) return;
|
|
|
|
var pharmacyId = utilitiesGetPharmacyId();
|
|
var typeId = typeSelect.value;
|
|
var mode = utilitiesGetReadingMode(pharmacyId, typeId);
|
|
var isDayNight = mode === 'day_night';
|
|
|
|
singleWrap.style.display = isDayNight ? 'none' : '';
|
|
dayNightWrap.style.display = isDayNight ? '' : 'none';
|
|
|
|
var valueInput = singleWrap.querySelector('input[name=value]');
|
|
var dayInput = dayNightWrap.querySelector('input[name=value_day]');
|
|
var nightInput = dayNightWrap.querySelector('input[name=value_night]');
|
|
if (valueInput) valueInput.required = !isDayNight;
|
|
if (dayInput) dayInput.required = isDayNight;
|
|
if (nightInput) nightInput.required = isDayNight;
|
|
|
|
if (hint) {
|
|
hint.textContent = isDayNight
|
|
? 'Лічильник у режимі «день / ніч» — вкажіть обидва показники.'
|
|
: (typeId ? 'Звичайний лічильник — одне показання.' : '');
|
|
}
|
|
}
|
|
|
|
document.addEventListener('DOMContentLoaded', function () {
|
|
document.body.addEventListener('htmx:afterSwap', function (evt) {
|
|
if (document.getElementById('utilities-page')) {
|
|
utilitiesFormModeUpdate();
|
|
}
|
|
});
|
|
if (document.getElementById('utilities-page')) {
|
|
utilitiesFormModeUpdate();
|
|
}
|
|
});
|