57 lines
1.5 KiB
JavaScript
57 lines
1.5 KiB
JavaScript
import debounce from 'lodash.debounce';
|
|
import { Utility } from '../../core/utility';
|
|
import { EventManager, EventWrapper, EVENT_TYPE } from '../../lib/event-manager/event-manager';
|
|
|
|
export const AUTO_SUBMIT_INPUT_UTIL_SELECTOR = '[uw-auto-submit-input]';
|
|
|
|
const AUTO_SUBMIT_INPUT_INITIALIZED_CLASS = 'auto-submit-input--initialized';
|
|
|
|
@Utility({
|
|
selector: AUTO_SUBMIT_INPUT_UTIL_SELECTOR,
|
|
})
|
|
export class AutoSubmitInput {
|
|
|
|
_element;
|
|
|
|
_eventManager;
|
|
|
|
_form;
|
|
_debouncedHandler;
|
|
|
|
constructor(element) {
|
|
if (!element) {
|
|
throw new Error('Auto Submit Input utility needs to be passed an element!');
|
|
}
|
|
|
|
this._element = element;
|
|
|
|
this._eventManager = new EventManager();
|
|
|
|
if (this._element.classList.contains(AUTO_SUBMIT_INPUT_INITIALIZED_CLASS)) {
|
|
return false;
|
|
}
|
|
|
|
this._form = this._element.form;
|
|
if (!this._form) {
|
|
throw new Error('Could not determine associated form for auto submit input');
|
|
}
|
|
|
|
this._debouncedHandler = debounce(this.autoSubmit, 500);
|
|
|
|
const inputEvent = new EventWrapper(EVENT_TYPE.INPUT, this._debouncedHandler.bind(this), this._element);
|
|
this._eventManager.registerNewListener(inputEvent);
|
|
|
|
this._element.classList.add(AUTO_SUBMIT_INPUT_INITIALIZED_CLASS);
|
|
}
|
|
|
|
destroy() {
|
|
this._eventManager.cleanUp();
|
|
if(this._element.classList.contains(AUTO_SUBMIT_INPUT_INITIALIZED_CLASS))
|
|
this._element.classList.remove(AUTO_SUBMIT_INPUT_INITIALIZED_CLASS);
|
|
}
|
|
|
|
autoSubmit() {
|
|
this._form.submit();
|
|
}
|
|
}
|