{"version":3,"file":"left-menu.js","sourceRoot":"","sources":["../../../Scripts/components/left-menu.ts"],"names":[],"mappings":"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","sourcesContent":["/// \r\n/// \r\n/// \r\n\r\nnamespace Seac.Components {\r\n\tinterface TreeStruttura {\r\n\t\titemId\t\t: number;\r\n\t\tsubItemList\t: Array;\r\n\t}\r\n\r\n\tclass LeftMenuService extends Seac.Commons.BaseService {\r\n\t\tconstructor() {\r\n\t\t\tsuper();\r\n\t\t}\r\n\r\n\t\t/** Url per la configurazione del menù di navigazione */\r\n\t\tpublic menuNavigazione(visualizzaTutti: boolean): JQuery.jqXHR> {\r\n\t\t\tconst queryParams: Seac.Commons.QueryParams = {\r\n\t\t\t\tvisualizzaTutti: visualizzaTutti\r\n\t\t\t};\r\n\t\t\treturn this.get(this.buildUrl([\r\n\t\t\t\tSeac.Commons.EndPoints.ACCOUNT.ROOT,\r\n\t\t\t\tSeac.Commons.EndPoints.ACCOUNT.ROUTE_MENU_NAVIGAZIONE\r\n\t\t\t], queryParams));\r\n\t\t}\r\n\r\n\t\t/** Lista degli ItemId preferiti */\r\n\t\tpublic preferitoList(): JQuery.jqXHR> {\r\n\t\t\treturn this.get(\r\n\t\t\t\tSeac.Commons.EndPoints.ACCOUNT.ROOT,\r\n\t\t\t\tSeac.Commons.EndPoints.ACCOUNT.ROUTE_MENU_NAVIGAZIONE_PREFERITO_LIST\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t/** Imposta l'item come preferito per l'utente */\r\n\t\tpublic impostaPreferito(menuItemId: number): JQuery.jqXHR {\r\n\t\t\tconst data = {\r\n\t\t\t\tmenuItemId: menuItemId\r\n\t\t\t};\r\n\t\t\treturn this.post(\r\n\t\t\t\tdata,\r\n\t\t\t\tSeac.Commons.EndPoints.ACCOUNT.ROOT,\r\n\t\t\t\tSeac.Commons.EndPoints.ACCOUNT.ROUTE_MENU_NAVIGAZIONE_IMPOSTA_PREFERITO\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t/** Rimuove l'item come preferito per l'utente */\r\n\t\tpublic rimuoviPreferito(menuItemId: number): JQuery.jqXHR {\r\n\t\t\tconst data = {\r\n\t\t\t\tmenuItemId: menuItemId\r\n\t\t\t};\r\n\t\t\treturn this.post(\r\n\t\t\t\tdata,\r\n\t\t\t\tSeac.Commons.EndPoints.ACCOUNT.ROOT,\r\n\t\t\t\tSeac.Commons.EndPoints.ACCOUNT.ROUTE_MENU_NAVIGAZIONE_RIMUOVI_PREFERITO\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\texport class LeftMenu {\r\n\t\tpublic static onMenuToggleEvent: string = 'onMenuToggle';\r\n\r\n\t\t// Attenzione al valore dell'animazione che è definito nel css `_variables.scss`\r\n\t\tprivate _leftMenuAnimationDuration\t: number = 500;\r\n\t\tprivate _leftMenuContainer\t\t\t: JQuery;\r\n\t\tprivate _appContainerInstance\t\t: JQuery;\r\n\t\tprivate _treeListMenuInstance\t\t: DevExpress.ui.dxTreeList;\r\n\t\tprivate _itemIdPreferitoList\t\t: Array = [];\r\n\t\tprivate _gestionePreferitiClass\t\t: string;\r\n\t\tprivate _treeStruttura\t\t\t\t: Array;\r\n\t\tprivate _leftMenuService\t\t\t: LeftMenuService;\r\n\r\n\t\tconstructor(leftMenuContainerId: string, appContainerId: string, treeListMenuId: string, menuItemClass: string, menuItemPreferitoClass: string, gestionePreferitiClass: string) {\r\n\t\t\tthis._leftMenuContainer\t\t\t= $(`#${leftMenuContainerId}`);\r\n\t\t\tthis._appContainerInstance\t\t= $(`#${appContainerId}`);\r\n\t\t\tthis._treeListMenuInstance\t\t= $(`#${treeListMenuId}`).dxTreeList(Seac.Commons.Constants.DevExpress.dxInstance);\r\n\t\t\tthis._gestionePreferitiClass\t= gestionePreferitiClass;\r\n\t\t\tthis._leftMenuService\t\t\t= new LeftMenuService();\r\n\r\n\t\t\t// Sottoscrivo l'evento onEditorPreparing per impostare il placeholder del filtro\r\n\t\t\tthis._treeListMenuInstance.on(Seac.Commons.Constants.DevExpress.dxEditorPreparing, (event: any) => {\r\n\t\t\t\tif (event.parentType === Seac.Commons.Constants.DevExpress.dxFilterRow) { \r\n\t\t\t\t\tevent.editorOptions.placeholder = Seac.Resources.Common.cerca; \r\n\t\t\t\t} \r\n\t\t\t});\r\n\r\n\t\t//\t//Imposto le azioni da eseguire quando il menu è pronto, utile alla gestione dell'arrivo in pagina tramite link. (Seleziona la voce di menu del link della pagina se presente nelle voci di menu)\r\n\t\t//\tthis._treeListMenuInstance.on(Seac.Commons.Constants.DevExpress.dxContentReady, (event: Seac.Commons.DxEvents.DxDataGridContentReadyEvent) => {\r\n\t\t//\t\tconst gridStoreArray\t: Array\t= this._treeListMenuInstance.getDataSource().store()._array;\r\n\t\t//\t\tgridStoreArray.forEach((menuItem: Seac.Models.MenuItem) => {\r\n\t\t//\t\t\tif (menuItem.Link == window.location.pathname) {\r\n\t\t//\t\t\t\t//Nodo in questione\r\n\t\t//\t\t\t\tconst node\t\t\t\t\t: DevExpress.ui.dxTreeListNode\t= this._treeListMenuInstance.getNodeByKey(menuItem.Id);\r\n\t\t//\t\t\t\t//Padre del nodo in questione\r\n\t\t//\t\t\t\tconst parentNode\t\t\t: DevExpress.ui.dxTreeListNode\t= node.parent;\r\n\t\t//\t\t\t\t//Dati del nodo padre in questione\r\n\t\t//\t\t\t\tconst menuItemParentNode\t: Seac.Models.MenuItem\t\t\t= parentNode.data;\r\n\t\t//\r\n\t\t//\t\t\t\t//Se il nodo Padre non ha altri livelli sopra\r\n\t\t//\t\t\t\tif (!menuItemParentNode || !menuItemParentNode.PadreId) {\r\n\t\t//\t\t\t\t\t//Espando la riga del padre\r\n\t\t//\t\t\t\t\tthis._treeListMenuInstance.expandRow(menuItemParentNode.Id);\r\n\t\t//\t\t\t\t\t//Creo l'array che conterra le chiavi delle righe da selezionare(sempre a 1 la lenght)\r\n\t\t//\t\t\t\t\tconst keys: Array = new Array();\r\n\t\t//\t\t\t\t\tkeys.push(menuItem.Id);\r\n\t\t//\t\t\t\t\t//Seleziono il nodo che ha come link l'url di destionazione della pagina\r\n\t\t//\t\t\t\t\tthis._treeListMenuInstance.selectRows(keys, false);\r\n\t\t//\t\t\t\t}else {\r\n\t\t//\t\t\t\t\t//Se il nodo Padre ha alti livelli sopra\r\n\t\t//\t\t\t\t\tconst parentParentNode\t\t\t: DevExpress.ui.dxTreeListNode\t= parentNode.parent; //Nodo padre del nodo padre in questione\r\n\t\t//\t\t\t\t\tconst menuItemParentParentNode\t: Seac.Models.MenuItem\t\t\t= parentParentNode.data;// Dati del nodo padre\r\n\t\t//\t\t\t\t\tif (menuItemParentParentNode.PadreId == null) {//Se non ha altri livelli(Fino ad ora solo 3 livelli di espansione)\r\n\t\t//\t\t\t\t\t\tthis._treeListMenuInstance.expandRow(menuItemParentParentNode.Id);//Espando il nodo padre del padre\r\n\t\t//\t\t\t\t\t\tconst keys: Array = new Array();\r\n\t\t//\t\t\t\t\t\tkeys.push(menuItem.Id);\r\n\t\t//\t\t\t\t\t\tthis._treeListMenuInstance.selectRows(keys, false);//Seleziono la riga in questione\r\n\t\t//\t\t\t\t\t}\r\n\t\t//\t\t\t\t}\r\n\t\t//\t\t\t}\r\n\t\t//\t\t});\r\n\t\t//\t});\r\n\t\t\t\r\n\t\t\t$(document).delegate(`.${menuItemClass}`, Commons.Constants.mouseDownEvent, (event: JQuery.MouseDownEvent) => {\r\n\t\t\t\tlet tdContainer: JQuery;\r\n\t\t\t\tif (event.target.tagName === Seac.Commons.Constants.tdElement.toUpperCase()) {\r\n\t\t\t\t\ttdContainer = $(event.target);\r\n\t\t\t\t}else {\r\n\t\t\t\t\ttdContainer = $(event.target).parents(Seac.Commons.Constants.tdElement);\r\n\t\t\t\t}\r\n\t\t\t\t// Ricerco l'elemento contenente l'id del menu clikkato negli elementi figli\r\n\t\t\t\tlet menuItemIdContainer: JQuery = tdContainer.find('[data-menu-item-id]');\r\n\r\n\t\t\t\t// Ricavo l'id dell'elemento\r\n\t\t\t\tconst menuItemId: number = menuItemIdContainer.data('menu-item-id');\r\n\r\n\t\t\t\t// Ricavo l'indice DevExpress dell'elemento \r\n\t\t\t\tconst selectedRowIndex: number = this._treeListMenuInstance.getRowIndexByKey(menuItemId);\r\n\t\t\t\t// Seleziono l'elemento clikkato\r\n\t\t\t\tthis._treeListMenuInstance.selectRowsByIndexes([selectedRowIndex]);\r\n\r\n\t\t\t\t// Qui ho l'elemento con i dati\r\n\t\t\t\tconst selectedNode: DevExpress.ui.dxTreeListNode = this._treeListMenuInstance.getNodeByKey(menuItemId);\r\n\t\t\t\tif (!selectedNode) {\r\n\t\t\t\t\t// Se non ho selezionato nessun nodo esco senza far nulla\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Se l'elemento ha dei figli espando o comprimo la riga in base allo stato attuale\r\n\t\t\t\tif (selectedNode.hasChildren) {\r\n\t\t\t\t\tif (this._treeListMenuInstance.isRowExpanded(menuItemId)) {\r\n\t\t\t\t\t\tthis._treeListMenuInstance.collapseRow(menuItemId);\r\n\t\t\t\t\t}else {\r\n\t\t\t\t\t\tthis._treeListMenuInstance.expandRow(menuItemId);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// esco dal metodo, in quanto non devo fare nessun redirect\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Se non è stato clicckato l'elemento `anchor` eseguo la navigazione\r\n\t\t\t\tif (($(event.target).prop(Seac.Commons.Constants.nodeName)).toUpperCase() != Seac.Commons.Constants.anchorElement.toUpperCase()) {\r\n\t\t\t\t\tconst menuItem: Seac.Models.MenuItem = selectedNode.data;\r\n\t\t\t\t\tswitch(event.which)\t{\r\n\t\t\t\t\t\tcase 1:\r\n\t\t\t\t\t\t\t// Se è stato clickato il pulsante destro carico la pagina richiesta in questa finestra\r\n\t\t\t\t\t\t\twindow.location.href = menuItem.Link;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 2:\r\n\t\t\t\t\t\t\t// Se è stato clickato il pulsante centrale carico la pagina richiesta in una nuova finestra\r\n\t\t\t\t\t\t\twindow.open(menuItem.Link, Seac.Commons.Constants.targetBlank);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t$(document).delegate(`.${menuItemPreferitoClass}`, Seac.Commons.Constants.mouseDownEvent, (event: JQuery.MouseDownEvent) => {\r\n\t\t\t\tevent.stopPropagation();\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\tconst parentItemNode\t: HTMLElement\t= $(event.currentTarget).parents('div[data-menu-item-id]')[0];\r\n\t\t\t\tconst itemId\t\t\t: number\t\t= +$(parentItemNode).data('menu-item-id');\r\n\t\t\t\t// Cambio lo stato di preferito\r\n\t\t\t\tthis.togglePreferito(itemId);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t/** Ritorna lo stato di apertura del menù laterale */\r\n\t\tpublic isOpened(): boolean {\r\n\t\t\treturn !this._leftMenuContainer.hasClass('full-page');\r\n\t\t}\r\n\r\n\t\t/** Metodo richiamato dal pulsante che permette di visualizzare e nascondere il menu\r\n\t\t\tIl pulsante è nel componente TopMenuComponent */\r\n\t\tpublic toggleMenu(): void {\r\n\t\t\tif (this.isOpened()) {\r\n\t\t\t\tthis.hideMenu();\r\n\t\t\t}else {\r\n\t\t\t\tthis.showMenu();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/** Visualizza il menu e rimuove il cookie 'isHiddenLeftMenu' in modo che venga visualizzato il menu ai successivi ricaricamenti della pagina */\r\n\t\tpublic showMenu(): void {\r\n\t\t\tthis._leftMenuContainer.removeClass('d-none full-page');\r\n\t\t\tthis._appContainerInstance.removeClass('full-page');\r\n\t\t\t$(Seac.Commons.Constants.body).addClass('left-menu-aperto').removeClass('left-menu-chiuso')\r\n\t\t\tCookies.remove(Seac.Commons.ServerConstants.Constants.COOKIE_IS_LEFT_MENU_HIDDEN);\r\n\t\t\t// Alla fine dell'animazione emetto l'evento\r\n\t\t\tconst animationInterval: NodeJS.Timeout = setInterval(() => {\r\n\t\t\t\tconst event: CustomEvent = document.createEvent('CustomEvent');\r\n\t\t\t\tevent.initCustomEvent(LeftMenu.onMenuToggleEvent, /* bubbles */true, /* cancelable */true, /* detail */ true);\r\n\t\t\t\twindow.dispatchEvent(event);\r\n\r\n\t\t\t\tclearInterval(animationInterval);\r\n\t\t\t\tif (Seac.Pages.PageUtility.isMobileDevice) {\r\n\t\t\t\t\t// Se sono su un dispositovo mobile ,eseguo il refresh del menu perché sui dispositivi mobile potrebbe avere dei problemi se è stato ruotato lo schermo\r\n\t\t\t\t\tthis._treeListMenuInstance.refresh()\r\n\t\t\t\t\t\t.then(() => {\r\n\t\t\t\t\t\t\t// Al termine del refresh scrollo il menu all'elemento selezionato\r\n\t\t\t\t\t\t\tconst selectdRowKeys: Array = this._treeListMenuInstance.getSelectedRowKeys();\r\n\t\t\t\t\t\t\tif (selectdRowKeys) {\r\n\t\t\t\t\t\t\t\tconst rowIndex: number = this._treeListMenuInstance.getRowIndexByKey(selectdRowKeys[0]);\r\n\t\t\t\t\t\t\t\tconst selectedElement: JQuery = this._treeListMenuInstance.getRowElement(rowIndex);\r\n\t\t\t\t\t\t\t\tthis._treeListMenuInstance.getScrollable().scrollToElement(selectedElement);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}, this._leftMenuAnimationDuration)\r\n\t\t}\r\n\r\n\t\t/** Nasconde il menu e imposta il cookie 'isHiddenLeftMenu' in modo che non venga visualizzato il menu ai successivi ricaricamenti della pagina */\r\n\t\tpublic hideMenu(): void {\r\n\t\t\tthis._leftMenuContainer.addClass('full-page');\r\n\t\t\tthis._appContainerInstance.addClass('full-page');\r\n\t\t\t$(Seac.Commons.Constants.body).removeClass('left-menu-aperto').addClass('left-menu-chiuso');\r\n\t\t\tCookies.set(Seac.Commons.ServerConstants.Constants.COOKIE_IS_LEFT_MENU_HIDDEN, 'true');\r\n\t\t\t// Alla fine dell'animazione emetto l'evento\r\n\t\t\tconst animationInterval: NodeJS.Timeout = setInterval(() => {\r\n\t\t\t\tconst event: CustomEvent = document.createEvent('CustomEvent');\r\n\t\t\t\tevent.initCustomEvent(LeftMenu.onMenuToggleEvent, /* bubbles */true, /* cancelable */true, /* detail */ false);\r\n\t\t\t\twindow.dispatchEvent(event);\r\n\r\n\t\t\t\tclearInterval(animationInterval);\r\n\t\t\t}, this._leftMenuAnimationDuration)\r\n\t\t}\r\n\r\n\t\t/** Effettua il caricamento degli Item del menù di navigazione */\r\n\t\tprivate caricaItemMenuNavigazione(isInGestionePreferiti: boolean): void {\r\n\t\t\tthis._treeStruttura = null;\r\n\t\t\t// Carico la nuova struttura del menù di navigazione\r\n\t\t\tthis._treeListMenuInstance.option(\r\n\t\t\t\tSeac.Commons.Constants.DevExpress.dxDataSource,\r\n\t\t\t\tnew DevExpress.data.CustomStore({\r\n\t\t\t\t\tload: () => {\r\n\t\t\t\t\t\t// Imposto la chiamata differita\r\n\t\t\t\t\t\tconst itemListDeferred: JQuery.Deferred> = $.Deferred>();\r\n\r\n\t\t\t\t\t\tthis._leftMenuService.menuNavigazione(!isInGestionePreferiti)\r\n\t\t\t\t\t\t\t.then((itemList: Array) => {\r\n\t\t\t\t\t\t\t\tthis._treeStruttura = itemList;\r\n\r\n\t\t\t\t\t\t\t\treturn this._leftMenuService.preferitoList();\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.then((itemIdList: Array) => {\r\n\t\t\t\t\t\t\t\tthis._itemIdPreferitoList = [];\r\n\t\t\t\t\t\t\t\t// Imposto gli id degli item preferiti\r\n\t\t\t\t\t\t\t\tfor (let itemIdIndex = 0; itemIdIndex < itemIdList.length; itemIdIndex++) {\r\n\t\t\t\t\t\t\t\t\tthis._itemIdPreferitoList[itemIdList[itemIdIndex]] = true;\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\titemListDeferred.resolve(this._treeStruttura);\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t;\r\n\t\t\t\t\t\treturn itemListDeferred;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tkey : Seac.Commons.nameof(() => (null).Id)\r\n\t\t\t\t})\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t/* -------------------------------------------------------------------------------- */\r\n\t\t/* Preferiti */\r\n\r\n\t\t/** Abilita / disabilita la gestione dei preferiti */\r\n\t\tpublic toggleGestionePreferiti(): void {\r\n\t\t\tconst isInGestionePreferiti = this.isInGestionePreferiti();\r\n\t\t\tif (isInGestionePreferiti) {\r\n\t\t\t\tthis._treeListMenuInstance.element().removeClass(this._gestionePreferitiClass);\r\n\t\t\t}else {\r\n\t\t\t\tthis._treeListMenuInstance.element().addClass(this._gestionePreferitiClass);\r\n\t\t\t}\r\n\r\n\t\t\tthis.caricaItemMenuNavigazione(isInGestionePreferiti);\r\n\t\t}\r\n\r\n\t\t/** Ritorna se la gestione dei preferiti è abilitata */\r\n\t\tpublic isInGestionePreferiti(): boolean {\r\n\t\t\treturn this._treeListMenuInstance.element().hasClass(this._gestionePreferitiClass);\r\n\t\t}\r\n\r\n\t\t/** Imposta / rimuove lo stato di preferito da una voce di menù */\r\n\t\tpublic togglePreferito(itemId: number): void {\r\n\t\t\tif (this.isItemPreferito(itemId)) {\r\n\t\t\t\tthis.rimuoviPreferito(itemId);\r\n\t\t\t}else {\r\n\t\t\t\tthis.impostaPreferito(itemId);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/** Imposta / rimuove lo stato di preferito da una voce di menù ed aggiorna anche i figli */\r\n\t\tprivate impostaRimuoviPreferito(itemId: number, isPreferito: boolean, aggiornaNodiFigli: boolean) {\r\n\t\t\tconst rowIndex: number = this._treeListMenuInstance.getRowIndexByKey(itemId);\r\n\t\t\t// Per dare all'utente un effetto di immediatezza, cambio subito lo stato del flag.\r\n\t\t\t// In caso di errore lo ripristino.\r\n\t\t\tthis._itemIdPreferitoList[itemId] = isPreferito;\r\n\t\t\tthis._treeListMenuInstance.repaintRows([rowIndex]);\r\n\t\t\tthis.aggiornaPadreItem(itemId);\r\n\r\n\t\t\tlet chiamataServer: JQuery.jqXHR;\r\n\t\t\t// Imposto o rimuovo lo stato lato server\r\n\t\t\tif (isPreferito) {\r\n\t\t\t\tchiamataServer = this._leftMenuService.impostaPreferito(itemId);\r\n\t\t\t}else {\r\n\t\t\t\tchiamataServer = this._leftMenuService.rimuoviPreferito(itemId);\r\n\t\t\t}\r\n\r\n\t\t\t// Attendo l'esito dell'impostazione\r\n\t\t\tchiamataServer\r\n\t\t\t\t.then(() => {\r\n\t\t\t\t\t// Se vanno aggiornati anche i figli richiamo la funzione su tutti i nodi sottostanti\r\n\t\t\t\t\tif (aggiornaNodiFigli) {\r\n\t\t\t\t\t\t// Apro il nodo per visualizzare i figli\r\n\t\t\t\t\t\tthis._treeListMenuInstance.expandRow(itemId);\r\n\r\n\t\t\t\t\t\tconst subItemList: Array = this._treeStruttura.filter((item: Seac.Models.MenuItem) => item.PadreId == itemId);\r\n\t\t\t\t\t\t// Effettuo l'impostazione su tutti i nodi figli assieme\r\n\t\t\t\t\t\tfor (let subItemIndex = 0; subItemIndex < subItemList.length; subItemIndex++) {\r\n\t\t\t\t\t\t\tthis.impostaRimuoviPreferito(\r\n\t\t\t\t\t\t\t\tsubItemList[subItemIndex].Id,\r\n\t\t\t\t\t\t\t\tisPreferito,\r\n\t\t\t\t\t\t\t\taggiornaNodiFigli\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch(() => {\r\n\t\t\t\t\t// Ripristino il valore precedente\r\n\t\t\t\t\tthis._itemIdPreferitoList[itemId] = !isPreferito;\r\n\t\t\t\t\tthis._treeListMenuInstance.repaintRows([rowIndex]);\r\n\t\t\t\t\tthis.aggiornaPadreItem(itemId);\r\n\t\t\t\t})\r\n\t\t\t;\r\n\t\t}\r\n\r\n\t\t/** Imposta lo stato di preferito da una voce di menù */\r\n\t\tpublic impostaPreferito(itemId: number): void {\r\n\t\t\tthis.impostaRimuoviPreferito(\r\n\t\t\t\t/* itemId */\t\t\titemId,\r\n\t\t\t\t/* isPreferito */\t\ttrue,\r\n\t\t\t\t/* aggiornaNodiFigli */\ttrue\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t/** Rimuove lo stato di preferito da una voce di menù */\r\n\t\tpublic rimuoviPreferito(itemId: number): void {\r\n\t\t\tthis.impostaRimuoviPreferito(\r\n\t\t\t\t/* itemId */\t\t\titemId,\r\n\t\t\t\t/* isPreferito */\t\tfalse,\r\n\t\t\t\t/* aggiornaNodiFigli */\ttrue\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t/** Aggiorna l'item padre del nodo */\r\n\t\tprivate aggiornaPadreItem(itemId: number): void {\r\n\t\t\t// Cerco l'item con id itemId\r\n\t\t\tconst itemList: Array = this._treeStruttura.filter((item: Seac.Models.MenuItem) => item.Id == itemId);\r\n\t\t\tif (itemList.length != 1) {\r\n\t\t\t\treturn ;\r\n\t\t\t}\r\n\r\n\t\t\t// Cerco l'item padre\r\n\t\t\tconst itemPadreList: Array = this._treeStruttura.filter((item: Seac.Models.MenuItem) => item.Id == itemList[0].PadreId);\r\n\t\t\tif (itemPadreList.length != 1) {\r\n\t\t\t\treturn ;\r\n\t\t\t}\r\n\r\n\t\t\t// Aggiorno il nodo padre\r\n\t\t\tthis.impostaRimuoviPreferito(\r\n\t\t\t\t/* itemId */\t\t\titemPadreList[0].Id,\r\n\t\t\t\t/* isPreferito */\t\tthis.isAllSubItemsPreferito(itemPadreList[0].Id),\r\n\t\t\t\t/* aggiornaNodiFigli */\tfalse\r\n\t\t\t);\r\n\t\t\t// Aggiorno il nodo padre del padre\r\n\t\t\tif (itemPadreList[0].PadreId) {\r\n\t\t\t\tthis.aggiornaPadreItem(itemPadreList[0].PadreId);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/** Ritorna se un determinato item è preferito */\r\n\t\tpublic isItemPreferito(itemId: number): boolean {\r\n\t\t\treturn !!this._itemIdPreferitoList[itemId];\r\n\t\t}\r\n\r\n\t\t/** Ritorna se tutti gli item sottostanti sono preferiti */\r\n\t\tprivate isAllSubItemsPreferito(itemId: number): boolean {\r\n\t\t\tif (!this._treeStruttura) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\t// Cerco tutti gli item figlio\r\n\t\t\tconst subItemList: Array = this._treeStruttura.filter((item: Seac.Models.MenuItem) => item.PadreId == itemId);\r\n\t\t\t// Controllo lo stato dei sotto item, se sono preferiti oppure uno dei loro sotto item è preferito, allora anche l'item richiesto ha sotto item preferiti\r\n\t\t\tfor (let subItemIndex = 0; subItemIndex < subItemList.length; subItemIndex++) {\r\n\t\t\t\tif (!this.isItemPreferito(subItemList[subItemIndex].Id)) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\r\n\t\t\t// Tutti i sotto item sono preferiti\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t/** Ritorna se almeno uno degli item sottostanti è preferito */\r\n\t\tpublic isSubItemsPreferito(itemId: number): boolean {\r\n\t\t\tif (!this._treeStruttura) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\t// Cerco tutti gli item figlio\r\n\t\t\tconst subItemList: Array = this._treeStruttura.filter((item: Seac.Models.MenuItem) => item.PadreId == itemId);\r\n\t\t\t// Controllo lo stato dei sotto item, se sono preferiti oppure uno dei loro sotto item è preferito, allora anche l'item richiesto ha sotto item preferiti\r\n\t\t\tfor (let subItemIndex = 0; subItemIndex < subItemList.length; subItemIndex++) {\r\n\t\t\t\tif (this.isItemPreferito(subItemList[subItemIndex].Id)) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t\tif (this.isSubItemsPreferito(subItemList[subItemIndex].Id)) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\r\n\t\t\t// Nessun sotto item è preferito\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t// Viene inizializzato nella View\r\n\texport let leftMenuComponent: LeftMenu;\r\n}\r\n"]}