{"version":3,"file":"static/js/service-drawer.1cada1cc.chunk.js","mappings":"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","sources":["app-react/services/drawer/drawer-content-decorator.ts","app-react/services/drawer/drawer-handler.ts","app-react/services/drawer/drawer.service.ts"],"sourcesContent":["import React from 'react';\r\nimport {IDrawerContent} from './drawer.service.interface';\r\n\r\nexport class DrawerContentDecorator implements IDrawerContent {\r\n constructor(private readonly _originalDrawerContent: IDrawerContent, private readonly _id: string) {\r\n\r\n }\r\n\r\n get id(): string {\r\n if(this._originalDrawerContent.id) {\r\n return this._originalDrawerContent.id;\r\n }\r\n\r\n return this._id;\r\n }\r\n get isMinimized(): boolean {\r\n return this._originalDrawerContent.isMinimized;\r\n }\r\n\r\n onClose(): void {\r\n if(this._originalDrawerContent.onClose) {\r\n this._originalDrawerContent.onClose();\r\n }\r\n }\r\n\r\n render(): React.ReactNode {\r\n return this._originalDrawerContent.render();\r\n }\r\n\r\n get title(): string {\r\n return this._originalDrawerContent.title;\r\n }\r\n\r\n get minOverlayZIndex(): number | null {\r\n return this._originalDrawerContent.minOverlayZIndex;\r\n }\r\n\r\n get supportsCloseIntent(): boolean {\r\n return Boolean(this._originalDrawerContent.supportsCloseIntent);\r\n }\r\n\r\n onOverlayClicked(): void {\r\n if(this._originalDrawerContent.onOverlayClicked) {\r\n this._originalDrawerContent.onOverlayClicked();\r\n }\r\n }\r\n}","import { action, observable, runInAction, makeObservable } from \"mobx\";\r\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\r\nimport {IDrawerContent, IDrawerContentHandler, IDrawer} from \"./drawer.service.interface\";\r\nimport {DrawerContentDecorator} from './drawer-content-decorator';\r\n\r\nexport class Drawer implements IDrawer {\r\n\r\n\r\n @observable.ref\r\n isSpinnerVisible: boolean = false;\r\n\r\n\r\n @observable.ref\r\n private _drawerContentStack: IDrawerContent[] = [];\r\n\r\n constructor(private _services:IServiceFactoryExtended){\r\n makeObservable(this);\r\n }\r\n\r\n getOverlayZIndex(): number {\r\n const itemIndex = this.getLastVisibleDrawerItemIndex();\r\n const drawerItem = this.currentContent && this.currentContent[itemIndex];\r\n if(drawerItem?.minOverlayZIndex) {\r\n return drawerItem.minOverlayZIndex;\r\n }\r\n\r\n return 110;\r\n }\r\n\r\n /**\r\n * The drawer can contain multiple items but only the last one added will actually be visible on the screen.\r\n * However if the last one has isMinimized=true then the one added before will be rendered and so on.\r\n * Basically this method returns the index of the item that will be rendered as visible in the drawer.\r\n * There might be other items rendered in the drawer but those will have display: none\r\n */\r\n getLastVisibleDrawerItemIndex(): number {\r\n const currentDrawerContent = this.currentContent;\r\n for(let i = currentDrawerContent.length - 1; i>=0; i--) {\r\n if(!currentDrawerContent[i].isMinimized) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n @action.bound\r\n showSpinner(): void {\r\n this.isSpinnerVisible = true;\r\n }\r\n\r\n @action.bound\r\n hideSpinner(): void {\r\n this.isSpinnerVisible = false;\r\n }\r\n\r\n\r\n @action.bound\r\n push(content: IDrawerContent): IDrawerContentHandler {\r\n\r\n content = new DrawerContentDecorator(content, this._services.tools.getGuid());\r\n\r\n const clone = [...this._drawerContentStack];\r\n\r\n const existingContentIndex = clone.findIndex(c => c.id === content.id);\r\n\r\n if(existingContentIndex >= 0) {\r\n clone.splice(existingContentIndex, 1); // if is already in the drawer we will remove it here in order to put it on top in the next line\r\n }\r\n\r\n this._drawerContentStack = [...clone, content];\r\n\r\n return {\r\n remove: () => {\r\n const contentIndexToRemove = this._drawerContentStack.findIndex(c => c.id === content.id);\r\n if(contentIndexToRemove >= 0) {\r\n this._removeOneDrawerItem(contentIndexToRemove);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _removeOneDrawerItem(itemIndex: number): void {\r\n runInAction(() => {\r\n const clone = [...this._drawerContentStack];\r\n clone.splice(itemIndex, 1);\r\n this._drawerContentStack = clone;\r\n });\r\n\r\n }\r\n\r\n @action.bound\r\n back() {\r\n const itemOnTheStackTop = this._drawerContentStack[this._drawerContentStack.length - 1]\r\n this._closeDrawerContentItem(itemOnTheStackTop);\r\n if(!itemOnTheStackTop.isMinimized) {\r\n this._removeOneDrawerItem(this._drawerContentStack.length - 1);\r\n }\r\n }\r\n\r\n get currentContent(): IDrawerContent[] {\r\n return this._drawerContentStack;\r\n }\r\n\r\n get isOpen(): boolean{\r\n return this._getNonMinimizedContents().length > 0 || this.isSpinnerVisible;\r\n }\r\n\r\n get shouldShowBackButton(): boolean {\r\n return 1 < this.currentContent.filter(item => !item.isMinimized).length;\r\n }\r\n _getNonMinimizedContents(): IDrawerContent[] {\r\n return this.currentContent.filter(c => !c.isMinimized);\r\n }\r\n\r\n private _closeDrawerContentItem(item: IDrawerContent) {\r\n if(item.onClose){\r\n try {\r\n item.onClose();\r\n } catch(err){\r\n this._services.logger.error(`Fail to call onClose for drawer content ${item}`, err)\r\n }\r\n }\r\n }\r\n\r\n onOverlayClicked() {\r\n this._drawerContentStack.forEach(item => {\r\n item.onOverlayClicked();\r\n })\r\n }\r\n\r\n @action.bound\r\n closeDrawer(): void {\r\n const nonClosableItems: IDrawerContent[] = [];\r\n\r\n this._drawerContentStack.forEach(drawerContent => {\r\n if(drawerContent.supportsCloseIntent) {\r\n nonClosableItems.push(drawerContent);\r\n } else {\r\n this._closeDrawerContentItem(drawerContent);\r\n if(drawerContent.isMinimized) {\r\n nonClosableItems.push(drawerContent);\r\n }\r\n }\r\n });\r\n this._drawerContentStack = nonClosableItems;\r\n this.hideSpinner();\r\n }\r\n}\r\n","import {ServiceBase} from \"../ServiceBase\";\r\nimport {IServiceFactoryExtended} from \"../service-factory-extended.interface\";\r\nimport {Drawer} from \"./drawer-handler\";\r\nimport {IDrawerService} from \"./drawer.service.interface\";\r\nimport {IOverlayConsumer} from \"../overlay/overlay-consumer.interface\";\r\n\r\nexport class DrawerService extends ServiceBase implements IDrawerService, IOverlayConsumer{\r\n\r\n left: Drawer;\r\n right: Drawer;\r\n\r\n constructor(serviceFactory: IServiceFactoryExtended) {\r\n super(serviceFactory);\r\n\r\n this.left = new Drawer(this.services);\r\n this.right = new Drawer(this.services);\r\n\r\n serviceFactory.overlay.registerConsumer(this);\r\n this.reaction(() => this.services.user.isAuthorized, isAuthorized => !isAuthorized && this._closeDrawers());\r\n }\r\n\r\n private _closeDrawers():void{\r\n this.left.closeDrawer();\r\n this.right.closeDrawer();\r\n }\r\n\r\n get needsOverlay(): boolean {\r\n return this.left.isOpen || this.right.isOpen\r\n }\r\n\r\n getOverlayZIndex(): number | undefined {\r\n return Math.max(this.left.getOverlayZIndex(), this.right.getOverlayZIndex())\r\n }\r\n onOverlayClicked(): void {\r\n this.left.onOverlayClicked();\r\n this.right.onOverlayClicked();\r\n this._closeDrawers();\r\n }\r\n\r\n}\r\n"],"names":["DrawerContentDecorator","_originalDrawerContent","_id","this","id","isMinimized","onClose","render","title","minOverlayZIndex","Boolean","supportsCloseIntent","onOverlayClicked","Drawer","observable","action","_services","makeObservable","itemIndex","getLastVisibleDrawerItemIndex","drawerItem","currentContent","currentDrawerContent","i","length","isSpinnerVisible","content","tools","getGuid","clone","_drawerContentStack","existingContentIndex","findIndex","c","splice","remove","contentIndexToRemove","_removeOneDrawerItem","runInAction","itemOnTheStackTop","_closeDrawerContentItem","_getNonMinimizedContents","filter","item","err","logger","error","forEach","nonClosableItems","drawerContent","push","hideSpinner","DrawerService","serviceFactory","left","right","services","overlay","registerConsumer","reaction","user","isAuthorized","_closeDrawers","closeDrawer","isOpen","Math","max","getOverlayZIndex","ServiceBase"],"sourceRoot":""}