getaddress-autocomplete-modal
Version:
GetAddress.io - Autocomplete modal plug-in
110 lines • 4.62 kB
JavaScript
import ControlsContainer from "./ControlsContainer.js";
import SuggestionList from "./SuggestionList.js";
import Storage from "./Storage.js";
import HistoryList from "./HistoryList.js";
export default class Modal {
constructor(client, attributeValues, textbox) {
this.client = client;
this.attributeValues = attributeValues;
this.textbox = textbox;
this.modal = document.createElement('DIV');
this.element = this.modal;
this.open = (initialValue) => {
const body = document.getElementsByTagName("BODY")[0];
body.classList.add(this.attributeValues.bodyClassName);
this.dispatchOpening(initialValue);
Storage.clearExpired();
if (initialValue && this.attributeValues.options.copy_text_on_open) {
this.controlsContainer.input.setValue(initialValue);
}
else {
this.controlsContainer.input.setValue("");
}
this.modal.style.display = 'flex';
this.controlsContainer.focus();
this.dispatchOpen(initialValue);
};
this.close = () => {
const body = document.getElementsByTagName("BODY")[0];
body.classList.remove(this.attributeValues.bodyClassName);
const data = this.controlsContainer.input.value();
this.dispatchClosing(data);
this.modal.style.display = 'none';
if (this.attributeValues.options.copy_text_on_close) {
this.textbox.value = data;
}
this.textbox.focus();
this.dispatchClosed(data);
};
this.suggestionList = new SuggestionList(this.client, this, attributeValues);
this.historyList = new HistoryList(this, this.attributeValues);
this.controlsContainer = new ControlsContainer(this.client, this, this.suggestionList, this.attributeValues, this.historyList);
this.build();
}
destroy() {
this.suggestionList.destroy();
this.controlsContainer.destroy();
this.element.remove();
}
build() {
this.modal.className = this.attributeValues.modalClassName;
this.modal.insertBefore(this.historyList.element, null);
this.modal.insertBefore(this.suggestionList.element, this.historyList.element);
this.modal.insertBefore(this.controlsContainer.element, this.suggestionList.element);
document.body.insertBefore(this.modal, null);
}
dispatchClosing(data) {
const evt = new Event("getaddress-autocomplete-modal-closing", { bubbles: true });
evt["data"] = data;
this.element.dispatchEvent(evt);
}
dispatchClosed(data) {
const evt = new Event("getaddress-autocomplete-modal-closed", { bubbles: true });
evt["data"] = data;
this.element.dispatchEvent(evt);
}
dispatchOpening(data) {
const evt = new Event("getaddress-autocomplete-modal-opening", { bubbles: true });
evt["data"] = data;
this.element.dispatchEvent(evt);
}
dispatchOpen(data) {
const evt = new Event("getaddress-autocomplete-modal-open", { bubbles: true });
evt["data"] = data;
this.element.dispatchEvent(evt);
}
dispatchSuggestions(data, suggestions) {
const evt = new Event("getaddress-autocomplete-modal-suggestions", { bubbles: true });
evt["suggestions"] = suggestions;
evt["data"] = data;
this.element.dispatchEvent(evt);
}
dispatchSuggestionsFailed(query, status, message) {
const evt = new Event("getaddress-autocomplete-modal-suggestions-failed", { bubbles: true });
evt["status"] = status;
evt["message"] = message;
evt["query"] = query;
this.element.dispatchEvent(evt);
}
Save(id, address) {
if (this.attributeValues.options.remember_last_search) {
Storage.save(id, address);
}
}
dispatchSelected(id, address) {
const data = this.controlsContainer.input.value();
const evt = new Event("getaddress-autocomplete-modal-selected", { bubbles: true });
evt["address"] = address;
evt["data"] = data;
evt["id"] = id;
this.element.dispatchEvent(evt);
}
dispatchSelectedFailed(query, status, message) {
const evt = new Event("getaddress-autocomplete-modal-selected-failed", { bubbles: true });
evt["status"] = status;
evt["message"] = message;
evt["query"] = query;
this.element.dispatchEvent(evt);
}
}
//# sourceMappingURL=Modal.js.map