%PDF- %PDF-
| Direktori : /proc/self/root/www/loslex/test/vendor/wire-elements/modal/resources/js/ |
| Current File : //proc/self/root/www/loslex/test/vendor/wire-elements/modal/resources/js/modal.js |
window.LivewireUIModal = () => {
return {
show: false,
showActiveComponent: true,
activeComponent: false,
componentHistory: [],
modalWidth: null ,
listeners: [],
getActiveComponentModalAttribute(key) {
if (this.$wire.get('components')[this.activeComponent] !== undefined) {
return this.$wire.get('components')[this.activeComponent]['modalAttributes'][key];
}
},
closeModalOnEscape(trigger) {
if (this.getActiveComponentModalAttribute('closeOnEscape') === false) {
return;
}
let force = this.getActiveComponentModalAttribute('closeOnEscapeIsForceful') === true;
this.closeModal(force);
},
closeModalOnClickAway(trigger) {
if (this.getActiveComponentModalAttribute('closeOnClickAway') === false) {
return;
}
this.closeModal(true);
},
closeModal(force = false, skipPreviousModals = 0, destroySkipped = false) {
if(this.show === false) {
return;
}
if (this.getActiveComponentModalAttribute('dispatchCloseEvent') === true) {
const componentName = this.$wire.get('components')[this.activeComponent].name;
Livewire.dispatch('modalClosed', {name: componentName});
}
if (this.getActiveComponentModalAttribute('destroyOnClose') === true) {
Livewire.dispatch('destroyComponent', {id: this.activeComponent});
}
if (skipPreviousModals > 0) {
for (var i = 0; i < skipPreviousModals; i++) {
if (destroySkipped) {
const id = this.componentHistory[this.componentHistory.length - 1];
Livewire.dispatch('destroyComponent', {id: id});
}
this.componentHistory.pop();
}
}
const id = this.componentHistory.pop();
if (id && !force) {
if (id) {
this.setActiveModalComponent(id, true);
} else {
this.setShowPropertyTo(false);
}
} else {
this.setShowPropertyTo(false);
}
},
setActiveModalComponent(id, skip = false) {
this.setShowPropertyTo(true);
if (this.activeComponent === id) {
return;
}
if (this.activeComponent !== false && skip === false) {
this.componentHistory.push(this.activeComponent);
}
let focusableTimeout = 50;
if (this.activeComponent === false) {
this.activeComponent = id
this.showActiveComponent = true;
this.modalWidth = this.getActiveComponentModalAttribute('maxWidthClass');
} else {
this.showActiveComponent = false;
focusableTimeout = 400;
setTimeout(() => {
this.activeComponent = id;
this.showActiveComponent = true;
this.modalWidth = this.getActiveComponentModalAttribute('maxWidthClass');
}, 300);
}
this.$nextTick(() => {
let focusable = this.$refs[id]?.querySelector('[autofocus]');
if (focusable) {
setTimeout(() => {
focusable.focus();
}, focusableTimeout);
}
});
},
focusables() {
let selector = 'a, button, input:not([type=\'hidden\'], textarea, select, details, [tabindex]:not([tabindex=\'-1\']))'
return [...this.$el.querySelectorAll(selector)]
.filter(el => !el.hasAttribute('disabled'))
},
firstFocusable() {
return this.focusables()[0]
},
lastFocusable() {
return this.focusables().slice(-1)[0]
},
nextFocusable() {
return this.focusables()[this.nextFocusableIndex()] || this.firstFocusable()
},
prevFocusable() {
return this.focusables()[this.prevFocusableIndex()] || this.lastFocusable()
},
nextFocusableIndex() {
return (this.focusables().indexOf(document.activeElement) + 1) % (this.focusables().length + 1)
},
prevFocusableIndex() {
return Math.max(0, this.focusables().indexOf(document.activeElement)) - 1
},
setShowPropertyTo(show) {
this.show = show;
if (show) {
document.body.classList.add('overflow-y-hidden');
} else {
document.body.classList.remove('overflow-y-hidden');
setTimeout(() => {
this.activeComponent = false;
this.$wire.resetState();
}, 300);
}
},
init() {
this.modalWidth = this.getActiveComponentModalAttribute('maxWidthClass');
this.listeners.push(
Livewire.on('closeModal', (data) => {
this.closeModal(data?.force ?? false, data?.skipPreviousModals ?? 0, data?.destroySkipped ?? false);
})
);
this.listeners.push(
Livewire.on('activeModalComponentChanged', ({id}) => {
this.setActiveModalComponent(id);
})
);
},
destroy() {
this.listeners.forEach((listener) => {
listener();
});
}
};
}