+import {Component} from './component';
-class PagePicker {
+function toggleElem(elem, show) {
+ elem.toggleAttribute('hidden', !show);
+}
+
+export class PagePicker extends Component {
+
+ setup() {
+ this.input = this.$refs.input;
+ this.resetButton = this.$refs.resetButton;
+ this.selectButton = this.$refs.selectButton;
+ this.display = this.$refs.display;
+ this.defaultDisplay = this.$refs.defaultDisplay;
+ this.buttonSep = this.$refs.buttonSeperator;
- constructor(elem) {
- this.elem = elem;
- this.input = elem.querySelector('input');
- this.resetButton = elem.querySelector('[page-picker-reset]');
- this.selectButton = elem.querySelector('[page-picker-select]');
- this.display = elem.querySelector('[page-picker-display]');
- this.defaultDisplay = elem.querySelector('[page-picker-default]');
- this.buttonSep = elem.querySelector('span.sep');
+ this.selectorEndpoint = this.$opts.selectorEndpoint;
this.value = this.input.value;
this.setupListeners();
setupListeners() {
this.selectButton.addEventListener('click', this.showPopup.bind(this));
this.display.parentElement.addEventListener('click', this.showPopup.bind(this));
+ this.display.addEventListener('click', e => e.stopPropagation());
- this.resetButton.addEventListener('click', event => {
+ this.resetButton.addEventListener('click', () => {
this.setValue('', '');
});
}
showPopup() {
- window.EntitySelectorPopup.show(entity => {
+ /** @type {EntitySelectorPopup} * */
+ const selectorPopup = window.$components.first('entity-selector-popup');
+ selectorPopup.show(entity => {
this.setValue(entity.id, entity.name);
+ }, {
+ initialValue: '',
+ searchEndpoint: this.selectorEndpoint,
+ entityTypes: 'page',
+ entityPermission: 'view',
});
}
}
controlView(name) {
- let hasValue = this.value && this.value !== 0;
+ const hasValue = this.value && this.value !== 0;
toggleElem(this.resetButton, hasValue);
toggleElem(this.buttonSep, hasValue);
toggleElem(this.defaultDisplay, !hasValue);
toggleElem(this.display, hasValue);
if (hasValue) {
- let id = this.getAssetIdFromVal();
+ const id = this.getAssetIdFromVal();
this.display.textContent = `#${id}, ${name}`;
this.display.href = window.baseUrl(`/link/${id}`);
}
}
}
-
-function toggleElem(elem, show) {
- let display = (elem.tagName === 'BUTTON' || elem.tagName === 'SPAN') ? 'inline-block' : 'block';
- elem.style.display = show ? display : 'none';
-}
-
-export default PagePicker;
\ No newline at end of file