{"version":3,"file":"ironsource-fusion-ui-components-sidebar-common-base.mjs","sources":["../../../projects/fusion-ui/components/sidebar/common/base/sidebar.base.component.ts","../../../projects/fusion-ui/components/sidebar/common/base/ironsource-fusion-ui-components-sidebar-common-base.ts"],"sourcesContent":["import {Directive, ElementRef, EventEmitter, HostBinding, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {LayoutUser} from '@ironsource/fusion-ui/entities';\nimport {BehaviorSubject, fromEvent, merge, Subject, Subscription} from 'rxjs';\nimport {isNullOrUndefined} from '@ironsource/fusion-ui/utils';\nimport {takeUntil} from 'rxjs/operators';\nimport {SidebarMenuItem, SidebarConfiguration} from '@ironsource/fusion-ui/components/sidebar/common/entities';\nimport {SidebarMenuService} from '@ironsource/fusion-ui/components/sidebar/common/services';\nimport {DynamicComponentConfiguration} from '@ironsource/fusion-ui/components/dynamic-components/common/entities';\nimport {WindowService} from '@ironsource/fusion-ui/services/window';\n\n@Directive()\nexport abstract class SidebarBaseComponent implements OnInit, OnDestroy {\n    @Input() set configuration(value: SidebarConfiguration) {\n        this.menuItems = value?.menuItems ?? [];\n        this.user = value?.user;\n        this.dynamicContent = value?.sidebarDynamicContent;\n        this.pathNameNormalizeRegex = value?.pathNameNormalizeRegex;\n        this.isLogoClickable = !!value?.logoClickable;\n    }\n    @Input() set sidebarOpen(value: boolean) {\n        this.setSidebarState(value);\n    }\n    @Input() saveSidebarState = true;\n\n    @Output() sidebarOpenChange = new EventEmitter<boolean>();\n    @Output() sidebarMenuItemClicked = new EventEmitter<SidebarMenuItem>();\n    @Output() navigationEnded = new EventEmitter();\n    @Output() sidebarClosedHovered = new EventEmitter<boolean>();\n    @Output() logoutIconClicked = new EventEmitter<LayoutUser>();\n    @Output() logoClicked = new EventEmitter();\n\n    // Must be set to host!\n    @HostBinding('class.fu-sidebar-closed') get sidebarClosed() {\n        return !this.isSidebarOpen;\n    }\n\n    menuItems: SidebarMenuItem[] = [];\n    user: LayoutUser;\n    dynamicContent: DynamicComponentConfiguration;\n    pathNameNormalizeRegex: RegExp;\n\n    isLogoClickable = false;\n    isSidebarOpen: boolean;\n\n    openedMenuItem$ = this.sidebarMenuService.openedMenuItem$;\n\n    // sidebar closed but need expand it by mouse over\n    isSidebarClosedHovered$ = new BehaviorSubject(false);\n\n    // for sidebar closed mouse events (closed-open)\n    private listenHostMouseEvents$ = new BehaviorSubject(true);\n    private sidebarMouseEventSubscription$: Subscription;\n\n    private onDestroy$ = new Subject();\n\n    constructor(private windowRef: WindowService, private elementRef: ElementRef, private sidebarMenuService: SidebarMenuService) {}\n\n    ngOnInit() {\n        // emit state to host\n        this.sidebarOpenChange.emit(this.isSidebarOpen);\n\n        // init mouse events on host (if closed)\n        this.listenHostMouseEvents$.asObservable().pipe(takeUntil(this.onDestroy$)).subscribe(this.initHostMouseEventListeners.bind(this));\n\n        if (!this.saveSidebarState) {\n            this.windowRef.nativeWindow.localStorage.removeItem('sidebarState');\n        }\n    }\n\n    ngOnDestroy() {\n        this.onDestroy$.next();\n        this.onDestroy$.complete();\n    }\n\n    onLogoClicked() {\n        if (this.isLogoClickable) {\n            this.logoClicked.emit();\n        }\n    }\n\n    onMenuItemClicked(menuItem: SidebarMenuItem) {\n        this.sidebarMenuItemClicked.emit(menuItem);\n    }\n\n    onNavigationEnded() {\n        this.navigationEnded.emit();\n    }\n\n    onLogoutIconClicked() {\n        this.logoutIconClicked.emit(this.user);\n    }\n\n    private initHostMouseEventListeners(isClosed: boolean): void {\n        if (isClosed) {\n            this.sidebarMouseEventSubscription$ = merge(\n                fromEvent(this.elementRef.nativeElement, 'mouseenter'),\n                fromEvent(this.elementRef.nativeElement, 'mouseleave')\n            )\n                .pipe(takeUntil(this.onDestroy$))\n                .subscribe(($event: MouseEvent) => {\n                    const sidebarClosedHovered = this.isSidebarOpen ? false : $event.type === 'mouseenter';\n                    // for mouseenter\n                    this.isSidebarClosedHovered$.next(sidebarClosedHovered);\n                    this.sidebarClosedHovered.emit(sidebarClosedHovered);\n                });\n        } else {\n            if (this.sidebarMouseEventSubscription$ && typeof this.sidebarMouseEventSubscription$.unsubscribe === 'function') {\n                this.sidebarMouseEventSubscription$.unsubscribe();\n                this.sidebarMouseEventSubscription$ = null;\n            }\n        }\n    }\n\n    private setSidebarState(isOpen: boolean) {\n        this.isSidebarOpen = isNullOrUndefined(isOpen) ? this.getSidebarState() : isOpen;\n        if (this.saveSidebarState) {\n            this.windowRef.nativeWindow.localStorage.setItem('sidebarState', JSON.stringify(this.isSidebarOpen));\n        }\n        // activate sidebar mouse listeners\n        this.listenHostMouseEvents$.next(!this.isSidebarOpen);\n    }\n\n    private getSidebarState(): boolean {\n        const storedState = JSON.parse(this.windowRef.nativeWindow.localStorage.getItem('sidebarState') ?? 'true');\n        return !isNullOrUndefined(storedState) ? storedState : true;\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}