feat(helpdesk): show manual domain input when customer has no domains
When the domain API returns an empty list for a selected customer, the domain select is replaced with two text inputs: domain name (required) and URL (optional). JS syncs the manual values into the existing hidden domain_no/domain_url fields so the server-side validation and save logic is unchanged. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -25,6 +25,9 @@ export function initHandoverDomainSelect(root = document) {
|
||||
const domainSelect = group.querySelector('#wizard-domain');
|
||||
const domainUrlInput = group.querySelector('#wizard-domain-url');
|
||||
const feedback = group.querySelector('#wizard-domain-feedback');
|
||||
const manualBlock = group.querySelector('#wizard-domain-manual');
|
||||
const manualNoInput = group.querySelector('#wizard-domain-manual-no');
|
||||
const manualUrlInput = group.querySelector('#wizard-domain-manual-url');
|
||||
if (!lookupContainer || !domainSelect) {
|
||||
return EMPTY_API;
|
||||
}
|
||||
@@ -67,6 +70,24 @@ export function initHandoverDomainSelect(root = document) {
|
||||
feedback.dataset.variant = variant || '';
|
||||
};
|
||||
|
||||
const showManual = (show) => {
|
||||
if (!manualBlock) {
|
||||
return;
|
||||
}
|
||||
manualBlock.hidden = !show;
|
||||
domainSelect.closest('.app-wizard-domain-select-wrap')?.toggleAttribute('hidden', show);
|
||||
if (!show && manualNoInput) {
|
||||
manualNoInput.value = '';
|
||||
}
|
||||
if (!show && manualUrlInput) {
|
||||
manualUrlInput.value = '';
|
||||
}
|
||||
// When showing manual, clear the hidden domain_no/url so only manual values submit
|
||||
if (show && domainUrlInput) {
|
||||
domainUrlInput.value = '';
|
||||
}
|
||||
};
|
||||
|
||||
const resetDomain = () => {
|
||||
clearOptions();
|
||||
addPlaceholder(textInitial);
|
||||
@@ -75,6 +96,7 @@ export function initHandoverDomainSelect(root = document) {
|
||||
domainUrlInput.value = '';
|
||||
}
|
||||
setFeedback('', '');
|
||||
showManual(false);
|
||||
};
|
||||
|
||||
const loadDomains = async (debitorNo) => {
|
||||
@@ -95,9 +117,11 @@ export function initHandoverDomainSelect(root = document) {
|
||||
|
||||
if (items.length === 0) {
|
||||
domainSelect.disabled = true;
|
||||
setFeedback(textEmpty, 'warning');
|
||||
setFeedback('', '');
|
||||
showManual(true);
|
||||
return;
|
||||
}
|
||||
showManual(false);
|
||||
|
||||
items.forEach((item) => {
|
||||
const opt = document.createElement('option');
|
||||
@@ -126,6 +150,23 @@ export function initHandoverDomainSelect(root = document) {
|
||||
}
|
||||
});
|
||||
|
||||
// Sync manual inputs → hidden domain_no / domain_url fields
|
||||
if (manualNoInput) {
|
||||
on(manualNoInput, 'input', () => {
|
||||
const hiddenNo = scope.querySelector('input[name="domain_no"]');
|
||||
if (hiddenNo) {
|
||||
hiddenNo.value = manualNoInput.value.trim();
|
||||
}
|
||||
});
|
||||
}
|
||||
if (manualUrlInput) {
|
||||
on(manualUrlInput, 'input', () => {
|
||||
if (domainUrlInput) {
|
||||
domainUrlInput.value = manualUrlInput.value.trim();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
on(lookupContainer, 'lookup:select', (event) => {
|
||||
const debitorNo = event.detail?.value || '';
|
||||
if (debitorNo) {
|
||||
|
||||
Reference in New Issue
Block a user