fix(forms): close completed drawers and restore portal styling
This commit is contained in:
15 files changed
+598
-9
No files matched your search
@@ -96,6 +96,7 @@ const headingId = `${idBase}-heading`;
|
||||
if (timer) window.clearTimeout(timer);
|
||||
frame.removeEventListener('load', onLoad);
|
||||
container.removeEventListener('aia:jotform-activate', activate);
|
||||
container.removeEventListener('aia:jotform-reset', reset);
|
||||
window.removeEventListener('pagehide', dispose);
|
||||
document.removeEventListener('astro:before-swap', dispose);
|
||||
delete container.dataset.jotformFallbackInitialized;
|
||||
@@ -118,6 +119,20 @@ const headingId = `${idBase}-heading`;
|
||||
container.dataset.jotformIframeActivated = 'true';
|
||||
};
|
||||
|
||||
// A completed drawer is renewed only on a later deliberate opening.
|
||||
// Replacing the frame also invalidates messages from its old WindowProxy.
|
||||
const reset = () => {
|
||||
if (container.dataset.jotformDeferred !== 'true' || container.dataset.formContext !== 'consultation') return;
|
||||
dispose();
|
||||
const freshFrame = frame.cloneNode(false);
|
||||
freshFrame.removeAttribute('src');
|
||||
frame.replaceWith(freshFrame);
|
||||
delete container.dataset.jotformDocumentLoaded;
|
||||
delete container.dataset.jotformIframeActivated;
|
||||
initialize(container);
|
||||
};
|
||||
container.addEventListener('aia:jotform-reset', reset);
|
||||
|
||||
if (container.dataset.jotformDeferred === 'true') {
|
||||
container.addEventListener('aia:jotform-activate', activate, { once: true });
|
||||
} else {
|
||||
|
||||
@@ -169,6 +169,9 @@ const consultationTestEnabled = formAIframe.enabled && formAIframe.context === '
|
||||
|
||||
{consultationTestEnabled
|
||||
? <div class="service-inquiry-drawer__iframe">
|
||||
<p data-service-inquiry-completed hidden role="status" aria-live="polite" aria-atomic="true">
|
||||
{lang === 'es' ? '¡Gracias! Hemos recibido su mensaje.' : 'Thank you! Your message has been received.'}
|
||||
</p>
|
||||
<JotformIframe config={formAIframe} heading={serviceCopy.heading} variant="drawer" deferUntilActivated hideHeading />
|
||||
</div>
|
||||
: <div class="service-inquiry-form" role="group" data-aia-form data-form-mode={mode} data-form-mode-reason={config.reason} data-logical-form="service" data-mock-result={mockResult} data-mock-success="Demo only: the local fixture completed without sending anything." data-mock-failed="Demo only: the local fixture simulated a failed submission." data-mock-unavailable="Demo only: the local fixture simulated an unavailable service.">
|
||||
|
||||
@@ -36,7 +36,38 @@ const serialized = payload ? JSON.stringify(payload).replaceAll('<', '\\u003c')
|
||||
[hidden] { display: none; }
|
||||
.employee-portal__content :global(a) { color: var(--color-primary); text-decoration: underline; }
|
||||
.employee-portal__content :global(a:focus-visible) { outline: 3px solid var(--color-focus, #115bbd); outline-offset: 3px; }
|
||||
.employee-portal__content :global(table) { display: block; overflow-x: auto; max-width: 100%; }
|
||||
.employee-portal__content :global(td), .employee-portal__content :global(th) { padding: .5rem; }
|
||||
.employee-portal__content { line-height: 1.65; }
|
||||
.employee-portal__content :global(:is(h1, h2, h3, h4, h5, h6)) {
|
||||
color: var(--color-primary); font-family: var(--font-heading); line-height: 1.25;
|
||||
margin-block: 2rem 1rem;
|
||||
}
|
||||
.employee-portal__content :global(:is(h1, h2)) { font-size: clamp(1.8rem, 3vw, 2.5rem); }
|
||||
.employee-portal__content :global(h3) { font-size: clamp(1.4rem, 2vw, 1.8rem); }
|
||||
.employee-portal__content :global(h4) { font-size: 1.25rem; }
|
||||
.employee-portal__content :global(p) { margin-block: .75rem 1.25rem; }
|
||||
.employee-portal__content :global(:is(ul, ol)) { padding-inline-start: 1.5rem; margin-block: 1rem 1.5rem; }
|
||||
.employee-portal__content :global(li) { margin-block: .5rem; }
|
||||
.employee-portal__content :global(:is(section, article) + :is(section, article)) { margin-block-start: 2.5rem; }
|
||||
.employee-portal__content :global(hr) { border: 0; border-top: 1px solid var(--color-border); margin-block: 2rem; }
|
||||
.employee-portal__content :global(a.portal-resource-button) {
|
||||
display: inline-block; background: var(--color-accent); border: 2px solid var(--color-accent);
|
||||
border-radius: var(--radius-sm); color: var(--color-primary); font-family: var(--font-body);
|
||||
font-size: 1rem; font-weight: 400; line-height: 1.5; padding: .65rem 1.2rem;
|
||||
margin-block: .35rem; max-width: 100%; text-decoration: none;
|
||||
}
|
||||
.employee-portal__content :global(a.portal-resource-button:is(:hover, :focus-visible)) {
|
||||
background: transparent; border-color: var(--color-accent-strong);
|
||||
}
|
||||
.employee-portal__content :global(a.portal-contact-link) {
|
||||
/* Dark orange preserves the source accent with readable contrast on white. */
|
||||
color: #a94600; text-underline-offset: .2em;
|
||||
}
|
||||
.employee-portal__content :global(table) { display: block; overflow-x: auto; max-width: 100%; border-collapse: collapse; margin-block: 1.5rem; }
|
||||
.employee-portal__content :global(td), .employee-portal__content :global(th) {
|
||||
padding: .75rem; border-bottom: 1px solid var(--color-border); text-align: start; vertical-align: top;
|
||||
}
|
||||
.employee-portal__content :global(th) { background: var(--color-tint); color: var(--color-primary); }
|
||||
.employee-portal__content :global(dt) { font-weight: 600; margin-top: 1rem; }
|
||||
.employee-portal__content :global(dd) { margin-inline-start: 1rem; }
|
||||
@media (max-width: 500px) { .employee-portal__access { align-items: stretch; flex-direction: column; } }
|
||||
</style>
|
||||
Reference in new issue
Block a user