ZDDC/transmittal/js/visibility.js
2026-06-11 13:32:31 -05:00

75 lines
2.2 KiB
JavaScript

(function (app) {
'use strict';
const dom = app.dom;
const visibility = app.modules.visibility = {};
// Field visibility rules based on document type
const FIELD_RULES = {
'from': ['Transmittal', 'Submittal'],
'to': ['Transmittal', 'Submittal']
};
function getDocumentType() {
const typeInput = dom.qs('#type');
return typeInput ? (typeInput.value || 'Transmittal').trim() : 'Transmittal';
}
function isFieldVisible(fieldId, docType) {
const rules = FIELD_RULES[fieldId];
if (!rules) {
return true; // No rules = always visible
}
return rules.includes(docType);
}
function getFieldContainer(fieldId) {
const input = dom.qs('#' + fieldId);
if (!input) {
return null;
}
// Find the parent container (the div with col-span-6 or col-span-12)
let container = input.parentElement;
while (container && !container.className.includes('col-span-')) {
container = container.parentElement;
if (!container || container.tagName === 'FORM') {
break;
}
}
return container || input.parentElement;
}
visibility.applyFieldVisibility = function applyFieldVisibility() {
const docType = getDocumentType();
Object.keys(FIELD_RULES).forEach(function(fieldId) {
const container = getFieldContainer(fieldId);
if (!container) { return; }
container.hidden = !isFieldVisible(fieldId, docType);
});
};
visibility.bindTypeInput = function bindTypeInput() {
const typeInput = dom.qs('#type');
if (!typeInput) {
return;
}
// Apply visibility on input change
typeInput.addEventListener('input', function() {
visibility.applyFieldVisibility();
if (app.markDirty) {
app.markDirty();
}
});
typeInput.addEventListener('change', function() {
visibility.applyFieldVisibility();
});
};
app.registerInit(function () {
visibility.bindTypeInput();
visibility.applyFieldVisibility();
});
})(window.transmittalApp);