Activate process button on VSF list-card form input
This commit is contained in:
@@ -83,6 +83,25 @@
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
const formCard = document.querySelector('#layout-vsf-list-card .sg-form-sections-card');
|
||||||
|
const processButton = formCard?.querySelector('.sg-button--process');
|
||||||
|
|
||||||
|
const updateProcessButtonState = () => {
|
||||||
|
if (!formCard || !processButton) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const hasPulldownSelection = Array.from(formCard.querySelectorAll('[data-pulldown-option]'))
|
||||||
|
.some((option) => option.getAttribute('aria-checked') === 'true');
|
||||||
|
const hasTextInput = Array.from(formCard.querySelectorAll('input[type="text"], textarea'))
|
||||||
|
.some((field) => field.value.trim().length > 0);
|
||||||
|
const isActive = hasPulldownSelection || hasTextInput;
|
||||||
|
|
||||||
|
processButton.disabled = !isActive;
|
||||||
|
processButton.setAttribute('aria-disabled', String(!isActive));
|
||||||
|
processButton.classList.toggle('sg-button--process-inactive', !isActive);
|
||||||
|
};
|
||||||
|
|
||||||
const updatePulldownSelectionState = (demo) => {
|
const updatePulldownSelectionState = (demo) => {
|
||||||
const trigger = demo.querySelector('.sg-pulldown-demo__trigger');
|
const trigger = demo.querySelector('.sg-pulldown-demo__trigger');
|
||||||
const selectableOptions = demo.querySelectorAll('[data-pulldown-option]');
|
const selectableOptions = demo.querySelectorAll('[data-pulldown-option]');
|
||||||
@@ -101,6 +120,7 @@
|
|||||||
trigger.classList.toggle('sg-form-active', selectedCount > 0);
|
trigger.classList.toggle('sg-form-active', selectedCount > 0);
|
||||||
trigger.dataset.componentState = selectedCount > 0 ? 'selected' : 'inactive-selectable';
|
trigger.dataset.componentState = selectedCount > 0 ? 'selected' : 'inactive-selectable';
|
||||||
demo.dataset.componentState = selectedCount > 0 ? 'selected' : 'inactive-selectable';
|
demo.dataset.componentState = selectedCount > 0 ? 'selected' : 'inactive-selectable';
|
||||||
|
updateProcessButtonState();
|
||||||
};
|
};
|
||||||
|
|
||||||
document.querySelectorAll('.sg-pulldown-demo').forEach((demo) => {
|
document.querySelectorAll('.sg-pulldown-demo').forEach((demo) => {
|
||||||
@@ -148,6 +168,10 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
document.querySelectorAll('.sg-pulldown-demo').forEach(updatePulldownSelectionState);
|
document.querySelectorAll('.sg-pulldown-demo').forEach(updatePulldownSelectionState);
|
||||||
|
formCard?.querySelectorAll('input[type="text"], textarea').forEach((field) => {
|
||||||
|
field.addEventListener('input', updateProcessButtonState);
|
||||||
|
});
|
||||||
|
updateProcessButtonState();
|
||||||
|
|
||||||
document.addEventListener('click', (event) => {
|
document.addEventListener('click', (event) => {
|
||||||
if (event.target.closest('.sg-pulldown-demo')) {
|
if (event.target.closest('.sg-pulldown-demo')) {
|
||||||
|
|||||||
Reference in New Issue
Block a user