import {elemHasListener, HTMLSidebarElement, SidebarBase, SidebarConfig, SIDEBARJS, SIDEBARJS_FALLBACK_NAME, SidebarPosition} from './sidebar.core';
import {SidebarElement} from './sidebar.element';
export class SidebarService implements SidebarBase {
private readonly instances: {[key: string]: SidebarElement};
constructor() {
this.instances = {};
}
private fallbackName(sidebarName?: string | null) {
return sidebarName || SIDEBARJS_FALLBACK_NAME;
}
private getInstance(sidebarName?: string): SidebarElement | undefined {
return this.instances[this.fallbackName(sidebarName)];
}
public create(options?: SidebarConfig): SidebarElement {
const name = this.fallbackName(options?.component?.getAttribute(SIDEBARJS));
this.instances[name] = new SidebarElement(options);
return this.instances[name];
}
public open(sidebarName?: string): void {
this.getInstance(sidebarName)?.open();
}
public close(sidebarName?: string): void {
this.getInstance(sidebarName)?.close();
}
public toggle(sidebarName?: string): void {
this.getInstance(sidebarName)?.toggle();
}
public isVisible(sidebarName?: string): boolean {
return !!this.getInstance(sidebarName)?.isVisible();
}
public setPosition(position: SidebarPosition, sidebarName?: string): void {
this.getInstance(sidebarName)?.setPosition(position);
}
public elemHasListener(elem: HTMLSidebarElement, value?: boolean): boolean {
return elemHasListener(elem, value);
}
public destroy(sidebarName?: string): void {
const name = this.fallbackName(sidebarName);
if (this.instances[name]) {
this.instances[name].destroy();
this.instances[name] = null as any;
delete this.instances[name];
}
}
}