Skip to content
This repository has been archived by the owner on Jun 12, 2024. It is now read-only.

Commit

Permalink
OC-22077 Query widget appearing when clicking add repeat group button…
Browse files Browse the repository at this point in the history
… in form
  • Loading branch information
theywa committed Jan 11, 2024
1 parent bc7dc55 commit df28f95
Showing 1 changed file with 46 additions and 0 deletions.
46 changes: 46 additions & 0 deletions public/js/src/module/form.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
// Extend the Enketo Core Form class, and expose it for local testing.
import { Form, FormModel } from 'enketo-core';
import events from 'enketo-core/src/js/event';
import { scrollIntoViewIfNeeded } from 'enketo-core/src/js/dom-utils';
import $ from 'jquery';
import config from 'enketo/config';
import gui from './gui';
import settings from './settings';
Expand Down Expand Up @@ -419,5 +421,49 @@ Form.prototype.updateValidityInUi = function (control, result) {
}
};

Form.prototype.goToTarget = function (target, options = {}) {
if (target) {
if (this.pages.active && !options.isPageFlip) {
// Flip to page
this.pages.flipToPageContaining($(target));
}
// check if the target has a form control
if (target.closest('.calculation, .setvalue, .setgeopoint')) {
// It is up to the apps to decide what to do with this event.
target.dispatchEvent(events.GoToInvisible());
}
// check if the nearest question or group is irrelevant after page flip
if (target.closest('.or-branch.disabled')) {
// It is up to the apps to decide what to do with this event.
target.dispatchEvent(events.GoToIrrelevant());
}

// Focus on the first non .ignore form control which is not currently readonly.
// If the element is hidden (e.g. because it's been replaced by a widget),
// the focus event will not fire, so we also trigger an applyfocus event that widgets can listen for.
let selector =
'input:not(.ignore):not([readonly]), textarea:not(.ignore):not([readonly]), select:not(.ignore):not([readonly])';

// For repeat DOM, prevent focus on DN dome when all element is readonly or ignore(#733)
if (target.querySelector('.repeat-number')) {
selector =
'.question:not(.or-appearance-dn) input:not(.ignore):not([readonly]), .question:not(.or-appearance-dn) textarea:not(.ignore):not([readonly]), .question:not(.or-appearance-dn) select:not(.ignore):not([readonly])';
}

const input = target.querySelector(selector);

if (input != null) {
input.focus();
input.dispatchEvent(events.ApplyFocus());
}

// Scroll to element if needed. This will generally be a noop unless no
// focusable control was found (e.g. readonly question in pages mode).
scrollIntoViewIfNeeded(target);
}

return !!target;
};

/* eslint import/prefer-default-export: "off" */
export { Form };

0 comments on commit df28f95

Please sign in to comment.