Files
ACORE/static/assets/js/utilities.js
T
lokses 4c2984a81e chat: same-origin /chat/api proxy вместо прямого CORS к Mattermost
Браузер больше не ходит на chat.* с portal.* — REST идёт через Django с PAT;
WS backoff без бесконечных 403; utilities.js ждёт DOMContentLoaded.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 12:53:04 +03:00

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();
}
});