164 lines
4.8 KiB
JavaScript
164 lines
4.8 KiB
JavaScript
(() => {
|
|
if (typeof window === 'undefined') {
|
|
return;
|
|
}
|
|
|
|
if (window.__tenantpilotSidebarStoreFallbackApplied) {
|
|
return;
|
|
}
|
|
|
|
window.__tenantpilotSidebarStoreFallbackApplied = true;
|
|
|
|
const ensureSidebarStore = () => {
|
|
const Alpine = window.Alpine;
|
|
|
|
if (!Alpine || typeof Alpine.store !== 'function') {
|
|
return false;
|
|
}
|
|
|
|
try {
|
|
const existing = Alpine.store('sidebar');
|
|
|
|
if (existing && typeof existing === 'object') {
|
|
return true;
|
|
}
|
|
} catch {
|
|
// Alpine.store('sidebar') can throw if stores aren't ready yet.
|
|
}
|
|
|
|
const storeFactory = () => {
|
|
return {
|
|
isOpen: true,
|
|
isOpenDesktop: true,
|
|
collapsedGroups: [],
|
|
|
|
resizeObserver: null,
|
|
|
|
init() {
|
|
this.setUpResizeObserver();
|
|
|
|
document.addEventListener('livewire:navigated', () => {
|
|
this.setUpResizeObserver();
|
|
});
|
|
},
|
|
|
|
setUpResizeObserver() {
|
|
if (typeof ResizeObserver === 'undefined') {
|
|
return;
|
|
}
|
|
|
|
if (this.resizeObserver) {
|
|
this.resizeObserver.disconnect();
|
|
}
|
|
|
|
let previousWidth = window.innerWidth;
|
|
|
|
this.resizeObserver = new ResizeObserver(() => {
|
|
const currentWidth = window.innerWidth;
|
|
|
|
const wasDesktop = previousWidth >= 1024;
|
|
const isNowMobile = currentWidth < 1024;
|
|
const isNowDesktop = currentWidth >= 1024;
|
|
|
|
if (wasDesktop && isNowMobile) {
|
|
this.isOpenDesktop = this.isOpen;
|
|
|
|
if (this.isOpen) {
|
|
this.close();
|
|
}
|
|
} else if (!wasDesktop && isNowDesktop) {
|
|
this.isOpen = this.isOpenDesktop;
|
|
}
|
|
|
|
previousWidth = currentWidth;
|
|
});
|
|
|
|
this.resizeObserver.observe(document.body);
|
|
|
|
if (window.innerWidth < 1024) {
|
|
if (this.isOpen) {
|
|
this.isOpenDesktop = true;
|
|
this.close();
|
|
}
|
|
} else {
|
|
this.isOpenDesktop = this.isOpen;
|
|
}
|
|
},
|
|
|
|
groupIsCollapsed(label) {
|
|
if (!Array.isArray(this.collapsedGroups)) {
|
|
this.collapsedGroups = [];
|
|
}
|
|
|
|
return this.collapsedGroups.includes(label);
|
|
},
|
|
|
|
collapseGroup(label) {
|
|
if (!this.groupIsCollapsed(label)) {
|
|
this.collapsedGroups = this.collapsedGroups.concat(label);
|
|
}
|
|
},
|
|
|
|
toggleCollapsedGroup(label) {
|
|
if (this.groupIsCollapsed(label)) {
|
|
this.collapsedGroups = this.collapsedGroups.filter((item) => item !== label);
|
|
} else {
|
|
this.collapsedGroups = this.collapsedGroups.concat(label);
|
|
}
|
|
},
|
|
|
|
close() {
|
|
this.isOpen = false;
|
|
|
|
if (window.innerWidth >= 1024) {
|
|
this.isOpenDesktop = false;
|
|
}
|
|
},
|
|
|
|
open() {
|
|
this.isOpen = true;
|
|
|
|
if (window.innerWidth >= 1024) {
|
|
this.isOpenDesktop = true;
|
|
}
|
|
},
|
|
};
|
|
};
|
|
|
|
try {
|
|
Alpine.store('sidebar', storeFactory());
|
|
|
|
return true;
|
|
} catch {
|
|
return false;
|
|
}
|
|
};
|
|
|
|
const tryEnsure = () => {
|
|
ensureSidebarStore();
|
|
};
|
|
|
|
window.addEventListener('alpine:init', tryEnsure);
|
|
window.addEventListener('alpine:initialized', tryEnsure);
|
|
document.addEventListener('alpine:init', tryEnsure);
|
|
document.addEventListener('alpine:initialized', tryEnsure);
|
|
document.addEventListener('livewire:navigated', tryEnsure);
|
|
|
|
if (document.readyState === 'loading') {
|
|
document.addEventListener('DOMContentLoaded', tryEnsure, { once: true });
|
|
} else {
|
|
tryEnsure();
|
|
}
|
|
|
|
let tries = 0;
|
|
const maxTries = 50;
|
|
|
|
const timer = setInterval(() => {
|
|
tries += 1;
|
|
|
|
if (ensureSidebarStore() || tries >= maxTries) {
|
|
clearInterval(timer);
|
|
}
|
|
}, 100);
|
|
})();
|