X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/b94b945fb03e21a1997cfe6e50148967586cb26d..refs/pull/5429/head:/resources/js/components/entity-selector-popup.js diff --git a/resources/js/components/entity-selector-popup.js b/resources/js/components/entity-selector-popup.js index 147f7b583..29c06e909 100644 --- a/resources/js/components/entity-selector-popup.js +++ b/resources/js/components/entity-selector-popup.js @@ -1,37 +1,53 @@ +import {Component} from './component'; -class EntitySelectorPopup { +export class EntitySelectorPopup extends Component { - constructor(elem) { - this.elem = elem; - window.EntitySelectorPopup = this; + setup() { + this.container = this.$el; + this.selectButton = this.$refs.select; + this.selectorEl = this.$refs.selector; this.callback = null; this.selection = null; - this.selectButton = elem.querySelector('.entity-link-selector-confirm'); this.selectButton.addEventListener('click', this.onSelectButtonClick.bind(this)); - window.$events.listen('entity-select-change', this.onSelectionChange.bind(this)); - window.$events.listen('entity-select-confirm', this.onSelectionConfirm.bind(this)); + window.$events.listen('entity-select-confirm', this.handleConfirmedSelection.bind(this)); } - show(callback) { + /** + * Show the selector popup. + * @param {Function} callback + * @param {EntitySelectorSearchOptions} searchOptions + */ + show(callback, searchOptions = {}) { this.callback = callback; - this.elem.components.overlay.show(); + this.getSelector().configureSearchOptions(searchOptions); + this.getPopup().show(); + + this.getSelector().focusSearch(); } hide() { - this.elem.components.overlay.hide(); + this.getPopup().hide(); } - onSelectButtonClick() { - this.hide(); - if (this.selection !== null && this.callback) this.callback(this.selection); + /** + * @returns {Popup} + */ + getPopup() { + return window.$components.firstOnElement(this.container, 'popup'); } - onSelectionConfirm(entity) { - this.hide(); - if (this.callback && entity) this.callback(entity); + /** + * @returns {EntitySelector} + */ + getSelector() { + return window.$components.firstOnElement(this.selectorEl, 'entity-selector'); + } + + onSelectButtonClick() { + this.handleConfirmedSelection(this.selection); } onSelectionChange(entity) { @@ -42,6 +58,11 @@ class EntitySelectorPopup { this.selectButton.removeAttribute('disabled'); } } -} -export default EntitySelectorPopup; \ No newline at end of file + handleConfirmedSelection(entity) { + this.hide(); + this.getSelector().reset(); + if (this.callback && entity) this.callback(entity); + } + +}