-/**
- * Entity Selector Popup
- * @extends {Component}
- */
-class EntitySelectorPopup {
+import {Component} from './component';
+
+export class EntitySelectorPopup extends Component {
setup() {
- this.elem = this.$el;
+ this.container = this.$el;
this.selectButton = this.$refs.select;
- window.EntitySelectorPopup = this;
+ this.selectorEl = this.$refs.selector;
this.callback = null;
this.selection = null;
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 {String} searchText
+ * @param {EntitySelectorSearchOptions} searchOptions
+ */
+ show(callback, searchText = '', searchOptions = {}) {
this.callback = callback;
- this.elem.components.popup.show();
+ this.getSelector().configureSearchOptions(searchOptions);
+ this.getPopup().show();
+
+ if (searchText) {
+ this.getSelector().searchText(searchText);
+ }
+
+ this.getSelector().focusSearch();
}
hide() {
- this.elem.components.popup.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) {
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);
+ }
+
+}