@arsedizioni/ars-utils 18.2.310 → 18.2.312
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arsedizioni-ars-utils-clipper.ui.mjs","sources":["../../../projects/ars-utils/clipper.ui/ui/document-menu/document-menu.component.ts","../../../projects/ars-utils/clipper.ui/ui/document-menu/document-menu.component.html","../../../projects/ars-utils/clipper.ui/ui/search-facets/search-facets.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-facets/search-facets.component.html","../../../projects/ars-utils/clipper.ui/ui/document-manager/document-manager.ts","../../../projects/ars-utils/clipper.ui/ui/search-calendar/search-calendar.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-calendar/search-calendar.component.html","../../../projects/ars-utils/clipper.ui/ui/search-result-manager/search-result-manager.ts","../../../projects/ars-utils/clipper.ui/ui/search-result-item/search-result-item.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-result-item/search-result-item.component.html","../../../projects/ars-utils/clipper.ui/ui/references/references.component.ts","../../../projects/ars-utils/clipper.ui/ui/references/references.component.html","../../../projects/ars-utils/clipper.ui/ui/document-index/document-index.component.ts","../../../projects/ars-utils/clipper.ui/ui/document-index/document-index.component.html","../../../projects/ars-utils/clipper.ui/ui/document/document.component.ts","../../../projects/ars-utils/clipper.ui/ui/document/document.component.html","../../../projects/ars-utils/clipper.ui/documents.ts","../../../projects/ars-utils/clipper.ui/ui/search-free-text-help/search-free-text-help.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-free-text-help/search-free-text-help.component.html","../../../projects/ars-utils/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.html","../../../projects/ars-utils/clipper.ui/ui/search-dialog/search-dialog.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-dialog/search-dialog.component.html","../../../projects/ars-utils/clipper.ui/ui/browser-dialog/browser-dialog.component.ts","../../../projects/ars-utils/clipper.ui/ui/browser-dialog/browser-dialog.component.html","../../../projects/ars-utils/clipper.ui/public_api.ts","../../../projects/ars-utils/clipper.ui/arsedizioni-ars-utils-clipper.ui.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Signal, computed, input } from '@angular/core';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { ClipperDocumentInfo } from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\r\nimport { FlexModule } from '@ngbracket/ngx-layout';\r\n\r\n@Component({\r\n selector: 'clipper-document-menu',\r\n templateUrl: './document-menu.component.html',\r\n styleUrls: ['./document-menu.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FlexModule, MatMenuModule, MatIconModule, MatDividerModule, MatTooltipModule]\r\n\r\n})\r\nexport class ClipperDocumentMenuComponent {\r\n\r\n useSelections = input<boolean>(false);\r\n selectionSource = input<'bag' | 'selection' | 'none' | null>('selection');\r\n protected selection: Signal<ClipperDocumentInfo[]> = computed(() => {\r\n if (this.useSelections()) {\r\n switch (this.selectionSource()) {\r\n case 'bag':\r\n return this.parent().clipperService.bag();\r\n case 'selection':\r\n return this.parent()?.selection?.all;\r\n }\r\n }\r\n return [];\r\n });\r\n parent = input<ClipperSearchResultManager>();\r\n item = input<ClipperDocumentInfo>();\r\n isReference = input<boolean>(false);\r\n isReadable = input<boolean>(true);\r\n isDeadline = input<boolean>(false);\r\n isLawInForce = input<boolean>(false);\r\n isLaw = input<boolean>(false);\r\n canPrint = input<boolean>(false);\r\n canFind = input<boolean>(false);\r\n\r\n\r\n /**\r\n * Check if current item or selection is read\r\n * @returns 0 if not read, 1 if read, 2 if unknown\r\n */\r\n isRead(): number {\r\n if (this.item()) return this.item().isRead === true ? 1 : 0;\r\n if (this.parent()?.hasAnySelection()) return 2;\r\n const firstSelection = this.parent()?.getSingleSelection();\r\n if (firstSelection) {\r\n return firstSelection.isRead === true ? 1 : 0;\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * Set the is read flag value\r\n * @param value: true or false\r\n */\r\n setRead(value: boolean) {\r\n this.parent()?.setRead(value, this.item());\r\n }\r\n\r\n}\r\n","@if (selectionSource() && selectionSource() !== 'none') {\r\n@if (selectionSource() === 'selection') {\r\n<button mat-menu-item (click)=\"parent().selection?.clear()\" [attr.aria-label]=\"'Deseleziona tutti'\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n} @else if (selectionSource() === 'bag') {\r\n<button mat-menu-item (click)=\"parent().openBag()\" [attr.aria-label]=\"'Gestisci documenti di lavoro'\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n<mat-divider></mat-divider>\r\n}\r\n@if (item() || (selection()?.length === 1)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\"\r\n (click)=\"parent().open(item() ? item().documentId : selection()[0].documentId)\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n@if (selectionSource() !== 'bag') {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"parent().addItemsToBag(item() ? [item()] : selection())\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n</button>\r\n}\r\n@if(canPrint()) {\r\n<button mat-menu-item (click)=\"parent()?.print()\" [attr.aria-label]=\"'Stampa documento'\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row\" fxFill fxLayoutAlign=\"start center\">\r\n <mat-icon>print</mat-icon>\r\n <div>Stampa</div>\r\n </div>\r\n <div class=\"accent small bold\">CTRL+P</div>\r\n </div>\r\n</button>\r\n}\r\n@if(canFind()) {\r\n<button mat-menu-item (click)=\"parent()?.find()\" [attr.aria-label]=\"'Trova nel documento'\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row\" fxFill fxLayoutAlign=\"start center\">\r\n <mat-icon>find_in_page</mat-icon>\r\n <div>Trova nel documento</div>\r\n </div>\r\n <div class=\"accent small bold\">CTRL+F</div>\r\n </div>\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length > 1))) {\r\n<button mat-menu-item (click)=\"parent().sendItemsTo(item() ? [item()] : selection())\"\r\n [attr.aria-label]=\"'Invia documento per email'\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (((item() && item().model != 11) || (selection()?.length === 1 && selection()[0].model != 11))) {\r\n<button mat-menu-item (click)=\"parent().exportPdf(item() ? item() : selection()[0])\"\r\n [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"parent().showLink(item() ? item() : selection()[0])\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n}\r\n@if (!isReference() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [matMenuTriggerFor]=\"linksMenu\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n}\r\n\r\n@if (!isReference() && isReadable()) {\r\n<mat-divider></mat-divider>\r\n\r\n@if (item() ? item().isRead === true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead ===\r\ntrue)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"parent()?.setRead(false, item())\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n</button>\r\n}\r\n@if (item() ? item().isRead !== true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead !==\r\ntrue)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come già letto'\" (click)=\"parent()?.setRead(true, item())\">\r\n <mat-icon>flag</mat-icon>Segna come già letto\r\n</button>\r\n}\r\n}\r\n\r\n@if ((isLawInForce() || isDeadline()) && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [attr.aria-label]=\"'Mostra report utilizzo'\"\r\n (click)=\"parent().report(item() ? item() : selection()[0])\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"parent().openReferences(item() ? item().documentId : selection()[0].documentId, 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if ( !isReference() &&(item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"parent().openReferences(item() ? item().documentId : selection()[0].documentId, 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra giurisprudenza'\"\r\n (click)=\"parent().openReferences(item() ? item().documentId : selection()[0].documentId, 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra modifiche normative'\"\r\n (click)=\"parent().openReferences(item() ? item().documentId : selection()[0].documentId, 3)\">\r\n Modifiche\r\n </button>\r\n }\r\n</mat-menu>\r\n@if ((item() || selection?.length > 0) && parent().RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<mat-divider></mat-divider>\r\n}\r\n@if ((item() || selection?.length > 0) && parent().RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\" [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\"\r\n [matMenuTriggerFor]=\"menuRS\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n</button>\r\n}\r\n<mat-menu #menuRS=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"parent().RS_newLaw([item()])\">\r\n Nuova legge\r\n </button>\r\n @if (item() || selection?.length === 1) {\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova attività'\" (click)=\"parent().RS_newActivity(item())\">\r\n Nuova attività\r\n </button>\r\n }\r\n @if (item() || selection?.length === 1) {\r\n <button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\" (click)=\"parent().RS_usageReport(item())\">\r\n Report utilizzo norma\r\n </button>\r\n }\r\n</mat-menu>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Output, inject } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n ClipperFacet,\r\n ClipperSearchFacet,\r\n ClipperSearchFacetGroup,\r\n ClipperSearchFacetsSnapshot\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\n\r\n\r\n@Component({\r\n selector: 'clipper-search-facets',\r\n templateUrl: './search-facets.component.html',\r\n styleUrls: ['./search-facets.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FlexModule, MatButtonModule, MatTooltipModule, MatChipsModule, MatIconModule, \r\n MatDividerModule, MatExpansionModule]\r\n})\r\nexport class ClipperSearchFacetsComponent {\r\n @Output() changed = new EventEmitter<ClipperSearchFacetsSnapshot>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n\r\n protected snapshot: ClipperSearchFacetsSnapshot = new ClipperSearchFacetsSnapshot();\r\n\r\n /**\r\n * Update facets\r\n * @param values : the facets values\r\n * @param interval : the date interval for YEAR facets\r\n */\r\n update(values: ClipperSearchFacet[][] | null = null, interval: string | null = null) {\r\n this.snapshot.interval = interval;\r\n if (values) {\r\n this.snapshot.groups = [];\r\n values.forEach(n => {\r\n const name = n[0].typeName;\r\n const index = n[0].type;\r\n const i = this.snapshot.usedGroups.findIndex(n => n.index === index);\r\n const j = this.snapshot.groups.findIndex(n => n.index === index);\r\n if (i === -1 && j === -1) {\r\n this.snapshot.groups.push({\r\n name: name,\r\n selectedValue: null,\r\n selectedValueDescription: null,\r\n values: n,\r\n index: index,\r\n }); \r\n }\r\n });\r\n }\r\n this.snapshot.hasFacets = this.snapshot.groups.length > 0 || this.snapshot.usedGroups.length > 0; \r\n this.snapshot.hasMoreFacets = this.snapshot.hasFacets && this.snapshot.groups.length > this.snapshot.usedGroups.length; \r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Use a facet item as filter\r\n * @param group : the facet group\r\n * @param item : the facet item\r\n */\r\n protected use(group: ClipperSearchFacetGroup, item: ClipperSearchFacet) {\r\n group.selectedValue = item.value;\r\n group.selectedValueDescription = item.title;\r\n const j = this.snapshot.groups.findIndex(n => n.index === group.index);\r\n if (j !== -1) {\r\n this.snapshot.groups.splice(j, 1);\r\n let updated = false;\r\n this.snapshot.usedGroups.forEach((n, i) => {\r\n if (!updated && n.index > group.index) {\r\n this.snapshot.usedGroups.splice(i, 0, group);\r\n updated = true;\r\n }\r\n });\r\n if (!updated) {\r\n this.snapshot.usedGroups.push(group);\r\n }\r\n }\r\n this.apply();\r\n }\r\n\r\n /**\r\n * dismiss a facet group filter\r\n * @param group : the facet group\r\n * @param apply : true to emit changed event and generate a new search, false just for update\r\n */\r\n protected dismiss(group: ClipperSearchFacetGroup, apply: boolean = true) {\r\n group.selectedValue = null;\r\n group.selectedValueDescription = null;\r\n const i = this.snapshot.usedGroups.findIndex(n => n.index === group.index);\r\n if (i !== -1) {\r\n this.snapshot.usedGroups.splice(i, 1);\r\n let updated = false;\r\n this.snapshot.groups.forEach((n, j) => {\r\n if (!updated && n.index > group.index) {\r\n this.snapshot.groups.splice(j, 0, group);\r\n updated = true;\r\n }\r\n });\r\n if (!updated) {\r\n this.snapshot.groups.push(group);\r\n }\r\n }\r\n if (apply) {\r\n this.apply();\r\n }\r\n }\r\n\r\n /**\r\n * Apply filter\r\n */\r\n private apply() {\r\n if (this.snapshot.usedGroups.length > 0) {\r\n this.snapshot.usedGroups.forEach((n) => {\r\n if (n.index === ClipperFacet.Year) {\r\n if (n.selectedValue) {\r\n this.snapshot.fromDate = new Date(parseInt(n.selectedValue), 0, 1, 12, 0, 0);\r\n this.snapshot.toDate = new Date(parseInt(n.selectedValue), 11, 31, 12, 0, 0);\r\n } else {\r\n this.snapshot.fromDate = null;\r\n this.snapshot.toDate = null;\r\n }\r\n } else if (n.index === ClipperFacet.Sector) {\r\n this.snapshot.sector = n.selectedValue ?? null;\r\n } else if (n.index === ClipperFacet.Author) {\r\n this.snapshot.author = n.selectedValue ?? null;\r\n } else if (n.index === ClipperFacet.DocumentType) {\r\n this.snapshot.type = n.selectedValue ?? null;\r\n } else if (n.index === ClipperFacet.Article) {\r\n this.snapshot.anchor = n.selectedValue ?? null;\r\n } else if (n.index === ClipperFacet.Reason) {\r\n this.snapshot.reason = n.selectedValue ?? null;\r\n }\r\n });\r\n }\r\n if (this.snapshot.groups.length > 0) {\r\n this.snapshot.groups.forEach((n) => {\r\n if (n.index === ClipperFacet.Year) {\r\n this.snapshot.changedInterval = this.snapshot.fromDate !== null;\r\n this.snapshot.fromDate = null;\r\n this.snapshot.toDate = null;\r\n } else if (n.index === ClipperFacet.Sector) {\r\n this.snapshot.changedSector = this.snapshot.sector !== null;\r\n this.snapshot.sector = null;\r\n } else if (n.index === ClipperFacet.Author) {\r\n this.snapshot.changedAuthor = this.snapshot.author !== null;\r\n this.snapshot.author = null;\r\n } else if (n.index === ClipperFacet.DocumentType) {\r\n this.snapshot.changedType = this.snapshot.type !== null;\r\n this.snapshot.type = null;\r\n } else if (n.index === ClipperFacet.Article) {\r\n this.snapshot.changedAnchor = this.snapshot.anchor !== null;\r\n this.snapshot.anchor = null;\r\n } else if (n.index === ClipperFacet.Reason) {\r\n this.snapshot.changedReason = this.snapshot.reason !== null;\r\n this.snapshot.reason = null;\r\n }\r\n });\r\n }\r\n this.changed.emit(this.snapshot);\r\n }\r\n\r\n /**\r\n * Clear facets by group index\r\n * @param index : the group index to clear. Use -1 to clear all groups at once\r\n * @returns : the number of groups dismissed\r\n */\r\n protected clear(index: number = -1): number {\r\n let dismissed = 0;\r\n this.snapshot.usedGroups.forEach((n) => {\r\n if (index === -1 || index === n.index) {\r\n if (n.index === ClipperFacet.Year) {\r\n this.snapshot.changedInterval = true;\r\n this.snapshot.fromDate = null;\r\n this.snapshot.toDate = null;\r\n } else if (n.index === ClipperFacet.Sector) {\r\n this.snapshot.changedSector = true;\r\n this.snapshot.sector = null;\r\n } else if (n.index === ClipperFacet.Author) {\r\n this.snapshot.changedAuthor = true;\r\n this.snapshot.author = null;\r\n } else if (n.index === ClipperFacet.DocumentType) {\r\n this.snapshot.changedType = true;\r\n this.snapshot.type = null;\r\n } else if (n.index === ClipperFacet.Article) {\r\n this.snapshot.changedAnchor = true;\r\n this.snapshot.anchor = null;\r\n } else if (n.index === ClipperFacet.Reason) {\r\n this.snapshot.changedReason = true;\r\n this.snapshot.reason = null;\r\n }\r\n this.dismiss(n, false);\r\n dismissed++;\r\n }\r\n });\r\n if (dismissed) {\r\n this.changed.emit(this.snapshot);\r\n }\r\n return dismissed;\r\n }\r\n\r\n /**\r\n * Reset\r\n */\r\n reset() {\r\n this.snapshot.groups = [];\r\n this.snapshot.usedGroups = [];\r\n this.snapshot.hasFacets = false;\r\n this.snapshot.fromDate = null;\r\n this.snapshot.toDate = null;\r\n this.snapshot.sector = null;\r\n this.snapshot.author = null;\r\n this.snapshot.anchor = null;\r\n this.snapshot.type = null;\r\n this.snapshot.reason = null;\r\n }\r\n\r\n /**\r\n * Restore data\r\n * @param data : the data to restore\r\n */\r\n restore(data: ClipperSearchFacetsSnapshot) {\r\n if (data) {\r\n this.snapshot = data;\r\n this.changeDetector.markForCheck();\r\n }\r\n }\r\n\r\n /**\r\n * Save data\r\n */\r\n save(): ClipperSearchFacetsSnapshot {\r\n return this.snapshot;\r\n }\r\n}\r\n","<div fxLayout=\"column\" fxFill class=\"facets-container scroll-hidden\">\r\n @if (snapshot.usedGroups.length > 0) {\r\n <div class=\"facets-selection\">\r\n <mat-chip-set aria-label=\"Selezione\">\r\n @for (ug of snapshot.usedGroups; track ug) {\r\n <mat-chip (removed)=\"dismiss(ug)\" [matTooltip]=\"ug.selectedValueDescription ?? ''\">\r\n {{ug.selectedValueDescription}}\r\n <button matChipRemove [attr.aria-label]=\"'Rimuovi ' + ug.name\" [matTooltip]=\"'Rimuovi ' + ug.name\">\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip>\r\n }\r\n </mat-chip-set>\r\n <mat-divider class=\"divider\"></mat-divider>\r\n </div>\r\n }\r\n <div fxFlex=\"*\" class=\"scroll-auto facets-items-container\">\r\n @if (snapshot.groups.length > 0) {\r\n @for (group of snapshot.groups; track group.index; let i = $index) {\r\n <mat-accordion multi displayMode=\"flat\">\r\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0 \" [expanded]=\"i == 0\">\r\n <mat-expansion-panel-header class=\"accordion-header\" [attr.aria-label]=\"group.name\">\r\n <mat-panel-title>\r\n @if (group.index == 2 && snapshot.interval) {\r\n {{snapshot.interval}} ({{group.values.length}})\r\n } @else {\r\n {{group.name}} ({{group.values.length}})\r\n }\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <nav class=\"facets-items\">\r\n <ul>\r\n @for (item of group.values; track $index) {\r\n <li (click)=\"use(group, item)\" [attr.aria-label]=\"item.title\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"truncated\">\r\n <div class=\"truncated\">{{item.title}}</div>\r\n </div>\r\n <div fxLayoutAlign=\"end\" fxFlexAlign=\"center\">\r\n {{snapshot.hasTooManyResults ? '~' : ''}}{{item.count}}\r\n </div>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n </nav>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n }\r\n } @else if (snapshot.hasFacets && !snapshot.hasMoreFacets) {\r\n <div class=\"facets-message\">\r\n <p class=\"small\"><i>Tutte le opzioni sono state selezionate</i></p>\r\n </div>\r\n }\r\n </div>\r\n</div>","import { Clipboard } from '@angular/cdk/clipboard';\r\nimport { Component, inject } from '@angular/core';\r\nimport { ClipperDocumentInfo, ClipperExportDocumentsParams, ClipperMessages, ClipperModel, ClipperModule, ClipperQueryReferencesMode, ClipperSearchParams, ClipperSendDocumentsByEmailParams, ClipperService } from '@arsedizioni/ars-utils/clipper.common';\r\nimport { BroadcastService, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { DialogResult } from '@arsedizioni/ars-utils/ui';\r\nimport { ApplicationDialogService, SelectableItem, SelectDialogDelete, SendToDialogComponent } from '@arsedizioni/ars-utils/ui.application';\r\nimport saveAs from 'file-saver';\r\nimport { ClipperReferenceDialogResult, ClipperReferencesComponent } from '../references/references.component';\r\n\r\n\r\n@Component({\r\n template: '<div></div>',\r\n standalone: true,\r\n})\r\nexport class ClipperDocumentManager {\r\n\r\n protected clipboard = inject(Clipboard);\r\n public clipperService = inject(ClipperService);\r\n protected broadcastService = inject(BroadcastService);\r\n protected dialogService = inject(ApplicationDialogService);\r\n\r\n\r\n\r\n /**\r\n * Export a document in pdf format\r\n * @param item : the document to export\r\n */\r\n exportPdf(item: ClipperDocumentInfo) {\r\n if (!this.clipperService.loggedIn()) return;\r\n if (!item) return;\r\n this.dialogService\r\n .confirm(\"Confermi l'esportazione?\", 'Attenzione!')\r\n .componentInstance.choosen.subscribe((r: DialogResult) => {\r\n if (r.result === 'ok') {\r\n const id = item.id || item.documentId;\r\n this.dialogService.busy('Esportazione in corso...');\r\n this.clipperService.exportPdf(id)\r\n .subscribe({\r\n next: r2 => {\r\n saveAs(r2, (item.title1 ? item.title1 : id) + '.pdf');\r\n },\r\n complete: () => {\r\n this.dialogService.clearBusy();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Save current document list or just the selected documents as a csv\r\n * @param documentIds: the document id list\r\n * @param searchParams: the search params\r\n */\r\n exportItems(documentIds: string[] | null | undefined, searchParams: ClipperSearchParams | null | undefined = null) {\r\n if (!this.clipperService.loggedIn()) return;\r\n let model: ClipperExportDocumentsParams = { ids: documentIds ?? [], query: null, format: 1 };\r\n if (!model.ids || model.ids.length === 0) {\r\n model.query = searchParams;\r\n }\r\n this.dialogService.busy('Salvataggio in corso...');\r\n this.clipperService.export(model)\r\n .subscribe({\r\n next: r => {\r\n saveAs(r, 'elenco.csv');\r\n },\r\n complete: () => {\r\n this.dialogService.clearBusy();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Archive a list of items\r\n * @param items: the item list\r\n */\r\n addToArchive(items: ClipperDocumentInfo[]) {\r\n this.broadcastService.sendMessage(ClipperMessages.COMMAND_ARCHIVE_ADD, items);\r\n }\r\n\r\n /**\r\n * Create a new deadline\r\n * @param item : the item to add\r\n */\r\n addToCalendar(item: ClipperDocumentInfo) {\r\n this.broadcastService.sendMessage(ClipperMessages.COMMAND_CALENDAR_ADD, item);\r\n }\r\n\r\n /**\r\n * Add a list of items to working documents\r\n * @param items : the item list\r\n */\r\n addItemsToWorkingDocuments(items: ClipperDocumentInfo[]) {\r\n this.broadcastService.sendMessage(ClipperMessages.COMMAND_WORKING_ADD, items);\r\n }\r\n\r\n /**\r\n* Add a list of items to working documents\r\n* @param items : the item list\r\n*/\r\n addItemsToBag(items: ClipperDocumentInfo[]) {\r\n if (!this.clipperService.loggedIn()) return;\r\n this.clipperService.addToBag(items?.map(n => n.documentId ?? n.id) ?? []);\r\n }\r\n\r\n\r\n /**\r\n * Copy metadata to clipboard\r\n * @param item : the item to copy\r\n */\r\n copyMetadataToClipboard(item: ClipperDocumentInfo) {\r\n if (!item || item.model === ClipperModel.Coordinamento) return;\r\n let meta =\r\n (item.id ?? item.documentId) + '\\t' +\r\n item.title1?.replaceAll(\"\\r\\n\", \" \") + '\\t';\r\n if (item.title2)\r\n meta += item.title2.replaceAll(\"\\r\\n\", \" \");\r\n meta += '\\t';\r\n if (item.number)\r\n meta += item.number;\r\n meta += '\\t';\r\n if (item.publishingDate) {\r\n item.publishingDate = new Date(item.publishingDate);\r\n meta += SystemUtils.formatDate(item.publishingDate);\r\n } else if (item.date) {\r\n item.date = new Date(item.date);\r\n meta += SystemUtils.formatDate(item.date);\r\n }\r\n meta += '\\t';\r\n if (item.originDescription)\r\n meta += item.originDescription\r\n this.clipboard.copy(meta);\r\n this.dialogService.toast(\"Metadati copiati negli appunti.\");\r\n }\r\n\r\n /**\r\n * Show a document permalink\r\n * @param item : the item to show the link for\r\n */\r\n showLink(item: ClipperDocumentInfo) {\r\n if (!item) return;\r\n let id = item.id ? item.id : item.documentId;\r\n const channels = item.channelName\r\n ? 'Canali: ' + item.channelName + '<br>'\r\n : '';\r\n let origin = item.origin\r\n ? 'Origine: ' +\r\n item.origin +\r\n ' - ' +\r\n (item.originDescription ? item.originDescription : '') +\r\n '<br>'\r\n : '';\r\n const topics = item.topics ? 'Argomento: ' + item.topics + '<br>' : '';\r\n if (!id) return;\r\n let message =\r\n \"<p >Il link che trovi qui sotto è un riferimento diretto al documento selezionato.</p>\" +\r\n \"<p >Lo puoi utilizzare nella tua documentazione o inviarlo per email ad un tuo collega. La persona che desidererà visualizzare il documento dovrà necessariamente essere un utente abbonato.</p>\" +\r\n \"<p >Seleziona e copia (fai CTRL+C) il link qui sotto.</p>\" +\r\n \"<div class='small accent'>\" +\r\n 'https://clipper.arsedizioni.it/?id=' +\r\n id +\r\n '</div>' +\r\n '<br>' +\r\n '<hr>' +\r\n '<p class=\"small\">' +\r\n channels +\r\n origin +\r\n topics\r\n '</p>';\r\n\r\n this.dialogService.info(message, 'Copia link', 'Chiudi');\r\n }\r\n\r\n /**\r\n * Send documents links by email\r\n * @param items : the document list\r\n */\r\n sendItemsTo(items: ClipperDocumentInfo[]) {\r\n if (!this.clipperService.loggedIn()) return;\r\n if (!items || items.length === 0) return;\r\n const d = this.dialogService.open(SendToDialogComponent, {\r\n ariaLabel: 'invia documenti per email',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: false,\r\n closeOnNavigation: false,\r\n data: {\r\n info:\r\n 'Puoi inviare i documenti a chi vuoi ma, per poterli visualizzare, è necessario essere un utente abbonato.',\r\n count: items.length,\r\n },\r\n minWidth: '375px',\r\n maxWidth: '600px',\r\n width: '99%',\r\n });\r\n d.componentInstance.done\r\n .subscribe((r: ClipperSendDocumentsByEmailParams) => {\r\n r.ids = items?.map(n => n.documentId ?? n.id) ?? [];\r\n this.dialogService.busy('Invio in corso...');\r\n this.clipperService.sendTo(r)\r\n .subscribe({\r\n next: r2 => {\r\n if (!r2.success) {\r\n this.dialogService.error(r2.message);\r\n } else {\r\n this.dialogService.toast('Invio completato con successo.');\r\n d.close();\r\n }\r\n },\r\n complete: () => {\r\n this.dialogService.clearBusy();\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Display a document report\r\n * @param documentId : the document id\r\n * @param title: the document short title\r\n */\r\n openReport(documentId: string, title: string | null = null) {\r\n if (!this.clipperService.loggedIn()) return;\r\n if (!documentId) return;\r\n this.clipperService.report(documentId)\r\n .subscribe({\r\n next: (r) => {\r\n saveAs(r, (title ? title : documentId) + '.html');\r\n },\r\n complete: () => {\r\n this.dialogService.clearBusy();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n* Open an item\r\n* This should be always overridden\r\n* @param documentId : the document id\r\n* @param query : the query document\r\n* @param newWindow: true if the document must be open into a new window\r\n*/\r\n open(\r\n _documentId: string | null | undefined,\r\n _query: string | null | undefined = null,\r\n _newWindow: boolean = false) {\r\n }\r\n\r\n /**\r\n * Display a document report\r\n * @param item : the document\r\n */\r\n report(item: ClipperDocumentInfo) {\r\n if (!item) return;\r\n if (item.model != ClipperModel.NormativaVigente && item.model != ClipperModel.Scadenze) {\r\n this.dialogService.info(\"Questa funzionalità non è disponibile per questo tipo di documento.\");\r\n return;\r\n } else {\r\n this.openReport(item.documentId, item.title1);\r\n }\r\n }\r\n\r\n /**\r\n * Browse document references\r\n * @param document id : the document id\r\n * @param mode : the reference mode\r\n */\r\n openReferences(documentId: string, mode: ClipperQueryReferencesMode = ClipperQueryReferencesMode.ReferencesIn) {\r\n if (!documentId) return;\r\n const d = this.dialogService.open(ClipperReferencesComponent, {\r\n ariaLabel: 'riferimenti legati al documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: false,\r\n closeOnNavigation: false,\r\n data: { documentId: documentId, mode: mode },\r\n minWidth: '375px',\r\n maxWidth: '1000px',\r\n width: '99%',\r\n height: '99%',\r\n });\r\n d.afterClosed()\r\n .subscribe((r: ClipperReferenceDialogResult) => {\r\n if (r && r.documentId) this.open(r.documentId);\r\n });\r\n }\r\n\r\n /**\r\n * Manage clipper bag\r\n */\r\n openBag() {\r\n let items: any = [];\r\n this.clipperService.bag().forEach(n => {\r\n let title = n.title1 ?? n.title2;\r\n items.push({\r\n template: title,\r\n bag: n,\r\n searchBag: { name: title },\r\n });\r\n });\r\n const d = this.dialogService.select({\r\n title: 'Gestisci documenti di lavoro',\r\n multi: false,\r\n mustSelect: false,\r\n okCaption: 'SELEZIONA',\r\n items: items,\r\n canDelete: true,\r\n canView: true,\r\n });\r\n d.componentInstance.view\r\n .subscribe((r: SelectableItem) => {\r\n let item = r.bag;\r\n this.open(item.documentId);\r\n });\r\n d.componentInstance.delete\r\n .subscribe((r: SelectDialogDelete) => {\r\n var item = r.selectedItems[0].bag;\r\n this.clipperService.removeFromBag(item.documentId).add(\r\n () => {\r\n this.dialogService.toast('Operazione completata con successo.');\r\n for (let p = 0; p < r.items.length; p++) {\r\n if (r.items[p].bag.DocumentId === item.DocumentId) {\r\n r.items.splice(p, 1);\r\n if (r.items.length === 0) d.close();\r\n return;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Print current document\r\n */\r\n print() {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage('{\"type\": \"print\"}', '*');\r\n }\r\n\r\n /**\r\n * Find in current document\r\n */\r\n find() {\r\n this.dialogService.info('Per cercare nel documento premi CTRL + F.');\r\n }\r\n\r\n /**\r\n * Checks if a module is supported by RS\r\n * @param module : the module to check\r\n * @returns: true if the module is supported\r\n */\r\n isModuleSupportedByRS(module: ClipperModule): boolean {\r\n return module === ClipperModule.GazzetteBollettiniEFontiDiverse ||\r\n module === ClipperModule.NormativaVigente ||\r\n module === ClipperModule.ScadenzeESegnalazioni;\r\n }\r\n\r\n /**\r\n * Checks if a model is supported by RS\r\n * @param model : the model to check\r\n * @returns: true if the model is supported\r\n */\r\n isModelSupportedByRS(model: ClipperModel): boolean {\r\n return model === ClipperModel.AggiornamentoNormativo ||\r\n model === ClipperModel.NormativaVigente ||\r\n model === ClipperModel.Scadenze;\r\n\r\n }\r\n\r\n /**\r\n * Checks if all documents are supported by RS\r\n * @param documents : the list of documents\r\n * @returns: true if all documents supports RS\r\n */\r\n canSupportRS(documents: ClipperDocumentInfo[]): boolean {\r\n let allow = false;\r\n documents.forEach(n => {\r\n allow = this.isModelSupportedByRS(n.model);\r\n if (!allow) return;\r\n });\r\n return allow;\r\n }\r\n\r\n /**\r\n * Checks if RS is enabled for all given documents\r\n * @param documents : the documents to check\r\n * @returns true if alla documents ar RS enabled\r\n */\r\n RS_enabled(documents: ClipperDocumentInfo[]): boolean {\r\n if (!documents || documents.length === 0) return false;\r\n let allow = false;\r\n documents.forEach(n => {\r\n allow = n && (n.model === ClipperModel.NormativaVigente ||\r\n n.model === ClipperModel.AggiornamentoNormativo ||\r\n n.model === ClipperModel.Scadenze);\r\n if (!allow) return;\r\n });\r\n return allow;\r\n }\r\n\r\n /**\r\n * New law\r\n * @param documents: the array of documents to link to the law\r\n */\r\n RS_newLaw(documents: ClipperDocumentInfo[]) {\r\n if (!this.clipperService.supportsRS()) return;\r\n this.broadcastService.sendMessage(ClipperMessages.INTEROP_RS_NEW_LAW, documents);\r\n }\r\n\r\n /**\r\n * New activity\r\n * @param document: the document to link to the activity\r\n */\r\n RS_newActivity(document: ClipperDocumentInfo) {\r\n if (!document) return;\r\n if (!this.clipperService.supportsRS()) return;\r\n this.broadcastService.sendMessage(ClipperMessages.INTEROP_RS_NEW_ACTIVITY, document);\r\n }\r\n\r\n /**\r\n * Document usage report\r\n * @param document: the law\r\n */\r\n RS_usageReport(document: ClipperDocumentInfo) {\r\n if (!document) return;\r\n if (!this.clipperService.supportsRS()) return;\r\n this.broadcastService.sendMessage(ClipperMessages.INTEROP_RS_USAGE_REPORT, document);\r\n }\r\n\r\n\r\n}\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Output, ViewChild, inject, signal } from '@angular/core';\r\nimport { DateInterval } from '@arsedizioni/ars-utils/core';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatCalendar, MatCalendarCellClassFunction } from '@angular/material/datepicker';\r\nimport { endOfDay, endOfMonth, startOfMonth, startOfToday } from 'date-fns';\r\nimport { CalendarEmptyHeader } from '@arsedizioni/ars-utils/ui.application';\r\nimport { ClipperSearchCalendarSnapshotMonth, ClipperSearchCalendarSnapshotResult } from '@arsedizioni/ars-utils/clipper.common';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'clipper-search-calendar',\r\n templateUrl: './search-calendar.component.html',\r\n styleUrls: ['./search-calendar.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FlexModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatCalendar,\r\n MatChipsModule,\r\n MatIconModule,\r\n MatDividerModule,\r\n MatExpansionModule\r\n ],\r\n})\r\nexport class ClipperSearchCalendarComponent {\r\n @ViewChild('calendar') calendar!: MatCalendar<any>;\r\n @Output() changed = new EventEmitter<DateInterval | null>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n \r\n protected busy = signal<boolean>(false);\r\n protected months = signal<ClipperSearchCalendarSnapshotMonth[]>(null);\r\n protected calendarSpecialDays?: number[] | null = null;\r\n protected calendarEmptyHeader = CalendarEmptyHeader;\r\n public calendarDate: Date = startOfToday();\r\n protected calendarDateClass: MatCalendarCellClassFunction<Date> = (cellDate) => {\r\n if (!this.calendarSpecialDays) return '';\r\n if (this.calendarSpecialDays[cellDate.getDate() - 1] > 0) {\r\n return cellDate < startOfToday() ? 'special-date-expired' : 'special-date';\r\n }\r\n return '';\r\n };\r\n protected calendarDateFilter = (): boolean => { return false; }\r\n\r\n\r\n /**\r\n * Update calendar\r\n * @param value : the snapshot\r\n * @param view : view to update 'month' or ' months'. Default is 'months'\r\n * @param date : the new current date\r\n */\r\n update(value: ClipperSearchCalendarSnapshotResult | null = null,\r\n view: 'month' | 'months' = 'months',\r\n date: Date) {\r\n this.busy.set(true);\r\n setTimeout(() => {\r\n if (view === 'months') {\r\n this.months.set(value?.months);\r\n } else {\r\n if (value && value.months && value.months.length > 0)\r\n this.calendarSpecialDays = value.months[0].days;\r\n if (this.calendar) {\r\n this.calendar.activeDate = date;\r\n this.calendar.selected = date;\r\n this.calendar.updateTodaysDate();\r\n }\r\n this.calendarDate = date;\r\n }\r\n this.changeDetector.markForCheck();\r\n this.busy.set(false);\r\n }, 250);\r\n }\r\n\r\n\r\n /**\r\n * Filter by date\r\n * @param date : the date to filter to or \"month\" to filter by the whole month.\r\n */\r\n protected filterByDate(date: Date | string | null) {\r\n if (date === 'month') {\r\n if (this.calendarDate) {\r\n this.changed.emit(\r\n new DateInterval(\r\n endOfDay(startOfMonth(this.calendarDate)),\r\n endOfMonth(this.calendarDate)));\r\n }\r\n } else if (date) {\r\n this.changed.emit(\r\n new DateInterval(\r\n endOfDay(date as Date),\r\n endOfDay(date as Date)));\r\n } else {\r\n this.changed.emit(null);\r\n }\r\n }\r\n\r\n /**\r\n * Filter by month\r\n * @param monthInfo: the month info\r\n */\r\n protected filterByMonth(monthInfo: ClipperSearchCalendarSnapshotMonth) {\r\n let d = new Date(monthInfo.year, monthInfo.month - 1, 1);\r\n this.changed.emit(\r\n new DateInterval(\r\n endOfDay(startOfMonth(d)),\r\n endOfMonth(d)));\r\n this.calendarSpecialDays = monthInfo.days;\r\n this.calendar.activeDate = d;\r\n this.calendar.updateTodaysDate();\r\n this.calendarDate = d;\r\n }\r\n\r\n /**\r\n * Disable date selection from calendar\r\n */\r\n protected filterCalendarDates = (): boolean => {\r\n return true;\r\n };\r\n}\r\n","<div fxLayout=\"column\" fxFill class=\"calendar-container scroll-hidden\">\r\n <div class=\"calendar-months\">\r\n <div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"center\" fxLayoutGap=\"8px\" fxFill>\r\n @for (m of months(); track m) {\r\n <button fxFlex=\"37px\" mat-button class=\"small uppercase\" (click)=\"filterByMonth(m)\" [disabled]=\"m.total === 0\">\r\n @if (m.expired) {\r\n <span class=\"expired\" [matTooltip]=\"m.expired + ' elementi in ritardo'\">{{m.monthShortName}}</span>\r\n }\r\n @if (!m.expired) {\r\n <span [matTooltip]=\"m.total + ' elementi'\">{{m.monthShortName}}</span>\r\n }\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"separator\"></div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-auto\">\r\n @if (!busy()) {\r\n <mat-calendar #calendar [headerComponent]=\"calendarEmptyHeader\" [dateClass]=\"calendarDateClass\"\r\n [dateFilter]=\"calendarDateFilter\" (selectedChange)=\"filterByDate($event)\" class=\"calendar-month\">\r\n </mat-calendar>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-around\" style=\"padding:0 15px\">\r\n <button type=\"button\" mat-button color=\"primary\" (click)=\"filterByDate('month')\">Tutto il\r\n mese</button>\r\n </div>\r\n }\r\n </div>\r\n</div>","import { BreakpointObserver } from '@angular/cdk/layout';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component, OnDestroy, ViewChild, inject,\r\n signal\r\n} from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { ClipperDocumentInfo, ClipperMessages, ClipperModel, ClipperSearchCalendarSnapshotResult, ClipperSearchFacetsResult, ClipperSearchParams, ClipperSearchResult, ClipperSort, ClipperUtils } from '@arsedizioni/ars-utils/clipper.common';\r\nimport {\r\n DateFormat,\r\n NameValueItem, ScreenService, SelectableModel, SystemUtils,\r\n ThemeService\r\n} from '@arsedizioni/ars-utils/core';\r\nimport { startOfDay, startOfToday, subDays } from 'date-fns';\r\nimport { Subject } from 'rxjs';\r\nimport { ClipperDocumentsUtils } from '../../documents';\r\nimport { ClipperDocumentManager } from '../document-manager/document-manager';\r\nimport { ClipperSearchCalendarComponent } from '../search-calendar/search-calendar.component';\r\nimport { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';\r\n\r\n\r\n\r\n@Component({\r\n template: '<div></div>',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [ClipperDocumentManager, ClipperSearchFacetsComponent, ClipperSearchCalendarComponent],\r\n})\r\nexport class ClipperSearchResultManager\r\n extends ClipperDocumentManager\r\n implements OnDestroy {\r\n @ViewChild('paginator') paginator!: MatPaginator;\r\n @ViewChild('facets') facets!: ClipperSearchFacetsComponent;\r\n @ViewChild('calendar') calendar!: ClipperSearchCalendarComponent;\r\n\r\n protected unsubscribe: Subject<void> = new Subject<void>();\r\n protected changeDetector = inject(ChangeDetectorRef);\r\n protected breakpointObserver = inject(BreakpointObserver);\r\n private themeService = inject(ThemeService);\r\n public screenService = inject(ScreenService);\r\n public selection: SelectableModel<any, string> | null = null;\r\n protected snapshot: ClipperSearchResult | null = new ClipperSearchResult();\r\n protected filterBusy = signal<boolean>(false);\r\n protected filterParams: ClipperSearchParams = new ClipperSearchParams();\r\n protected filterPaneHasBackdrop: boolean = false;\r\n protected filterPaneClosed: boolean = false;\r\n protected filterPane2HasBackdrop: boolean = false;\r\n protected filterPane2Closed: boolean = false;\r\n protected sortOptions: NameValueItem<number>[] = [];\r\n protected sortMode: NameValueItem<number> | null = null;\r\n protected scrollerId: string = 'scroller_' + SystemUtils.generateUUID();\r\n protected restorableId: string | null = null;\r\n protected hasFacets = signal<boolean>(false);\r\n protected hasCalendar = signal<boolean>(false);\r\n protected hasRegions = (): boolean => {\r\n return (this.filterParams.sectors?.filter(n => n.value === 'LR').length ?? 0) > 0;\r\n };\r\n ngOnDestroy() {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n\r\n\r\n /**\r\n * Update menu buttons visibility when the menu is closed\r\n */\r\n updateMenuButtonsVisibility() {\r\n if (this.snapshot) {\r\n this.snapshot.items?.forEach(n => {\r\n n.isMenuOpen = false;\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Scroll on top o list area\r\n * @param top: the top position\r\n */\r\n scroll(top: number = 0) {\r\n const elem = document.getElementById(this.scrollerId);\r\n if (elem) {\r\n elem.scrollTo({ top: top, left: 0, behavior: 'auto' });\r\n }\r\n }\r\n\r\n /**\r\n * Check if every element are selected\r\n */\r\n allSelected(): boolean {\r\n return this.selection?.current?.selected?.length === this.snapshot?.items?.length;\r\n }\r\n\r\n /**\r\n * Master selection toggle\r\n * @param select: true to select all elements false to deselect all elements\r\n */\r\n selectAll(select: boolean = true) {\r\n if (select) {\r\n this.snapshot?.items?.forEach(n => this.selection?.select(n, n.documentId));\r\n } else {\r\n this.snapshot?.items?.forEach(n => this.selection?.deselect(n, n.documentId));\r\n }\r\n }\r\n\r\n /**\r\n * Check if selections exists\r\n * @returns true if at least one element is selected\r\n */\r\n hasAnySelection(): boolean {\r\n return (this.selection?.all?.length ?? 0) > 0;\r\n }\r\n\r\n /**\r\n * Check if only one element is selected\r\n * @returns true if only one element is selected\r\n */\r\n hasSingleSelection(): boolean {\r\n return (this.selection?.all?.length ?? 0) === 1;\r\n }\r\n\r\n /**\r\n * Get the first selected item \r\n * @returns the selected item or null \r\n */\r\n getSingleSelection(): ClipperDocumentInfo | null {\r\n return this.hasAnySelection() ? this.selection?.all[0] : null;\r\n }\r\n\r\n\r\n\r\n /**\r\n * Clear selection\r\n */\r\n clearSelection() {\r\n return this.selection?.clear();\r\n }\r\n\r\n /**\r\n * Return the number of selected items or null\r\n * @returns Return the number of selected items\r\n */\r\n countSelections(): number | null {\r\n return (this.selection && this.selection?.all?.length > 0) ? this.selection?.all?.length : null;\r\n }\r\n\r\n /**\r\n * Get the selected id\r\n */\r\n getSeletectId(): string | null {\r\n if (this.hasAnySelection()) {\r\n return this.selection?.all[0].documentId;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Get all selected ids\r\n */\r\n getSeletectIds(): string[] | null {\r\n if ((this.selection?.all?.length ?? 0) > 100) {\r\n this.dialogService.error('La selezione non può contenere più di 100 elementi.');\r\n return null;\r\n }\r\n let ids: string[] = [];\r\n if (this.hasAnySelection()) {\r\n this.selection?.all?.forEach(n => {\r\n ids.push(n.documentId);\r\n });\r\n }\r\n return ids;\r\n }\r\n\r\n /**\r\n * Get all selected ids\r\n * @returns a tuple list with id and data\r\n */\r\n getSeletectIdsAndData(): [string, ClipperDocumentInfo][] | null {\r\n if ((this.selection?.all?.length ?? 0) > 100) {\r\n this.dialogService.error('La selezione non può contenere più di 100 elementi.');\r\n return null;\r\n }\r\n let data: [string, ClipperDocumentInfo][] = [];\r\n if (this.hasAnySelection()) {\r\n this.selection?.all?.forEach(n => {\r\n data.push([n.documentId, n]);\r\n });\r\n }\r\n return data;\r\n }\r\n\r\n\r\n /**\r\n * Prepare result items\r\n * @param items : the items to process\r\n * @param params : the current search params\r\n */\r\n prepareResultItems(items: ClipperDocumentInfo[], params: ClipperSearchParams) {\r\n const today = startOfToday();\r\n const groupByYear =\r\n !params.sortMode ||\r\n params.sortMode === ClipperSort.DateAsc ||\r\n params.sortMode === ClipperSort.DateDesc ||\r\n params.sortMode === ClipperSort.SourceDateAsc ||\r\n params.sortMode === ClipperSort.SourceDateDesc;\r\n const groupByRelevance = params.sortMode === ClipperSort.Relevance;\r\n const groupByPopularity = params.sortMode === ClipperSort.Popularity;\r\n let group = '';\r\n items?.forEach(n => {\r\n n.documentId = n.documentId ?? n.id;\r\n this.selection?.updateCurrent(n, n.documentId);\r\n if (n.model === ClipperModel.Quesiti) {\r\n n.info = \"Quesito n° \" + n.number + \" del \" + SystemUtils.formatDate(n.date, \"d MMM yyyy\");\r\n } else if (n.model === ClipperModel.Scadenze ||\r\n n.model === ClipperModel.Segnalazioni) {\r\n switch (n.model) {\r\n case ClipperModel.Scadenze:\r\n n.originDescription = 'Scadenza';\r\n break;\r\n case ClipperModel.Segnalazioni:\r\n n.originDescription = 'Segnalazione';\r\n break;\r\n }\r\n if (n.expiringInfo) {\r\n let parts = n.expiringInfo.split('|');\r\n if (parts.length === 3) n.expiringDescription = parts[2];\r\n }\r\n if (n.expiringDate) {\r\n n.date = startOfDay(new Date(n.expiringDate));\r\n const d = startOfDay(subDays(n.date, 15));\r\n n.isExpiring = today <= n.date && today >= d;\r\n n.isExpired = n.date < today;\r\n\r\n }\r\n } else {\r\n if ((n.model === ClipperModel.Articoli ||\r\n n.model === ClipperModel.News) &&\r\n n.tags) {\r\n n.info = n.tags.toUpperCase().substring(1).replaceAll(\"#\", \", \");\r\n }\r\n if (n.model !== ClipperModel.AggiornamentoNormativo &&\r\n n.model !== ClipperModel.NormativaVigente &&\r\n n.model !== ClipperModel.Juris &&\r\n n.date) {\r\n n.date = startOfDay(new Date(n.date ?? n.publishingDate));\r\n const d = startOfDay(subDays(startOfToday(), 7))\r\n n.isNew = n.date > d;\r\n } else {\r\n n.date = null;\r\n }\r\n if (n.anchors) {\r\n let anchorType: number | null = null;\r\n let anchors: any = [];\r\n n.anchors.forEach(a => {\r\n if (a.type === 20) return;\r\n if (a.type !== anchorType) {\r\n if (a.type >= 3)\r\n anchors.push({ text: a.typeDescription });\r\n anchorType = a.type;\r\n }\r\n let score = a.score;\r\n if (score > 7) score -= 7;\r\n else if (score > 5) score -= 5;\r\n else if (score > 3) score -= 3;\r\n anchors.push({\r\n text: a.text,\r\n title: a.title,\r\n documentId: a.documentId,\r\n uri: a.uri,\r\n veryRelevant: score > 0.6\r\n });\r\n });\r\n n.anchors = anchors;\r\n }\r\n if (n.validityState > 0) {\r\n n.validityDescription = 'Il documento non è più vigente';\r\n n.isExpired = true;\r\n if (n.validUntilDate) {\r\n const expiringDate = startOfDay(new Date(n.validUntilDate));\r\n if (expiringDate < today) {\r\n n.validityDescription =\r\n 'Il documento non è più vigente dal ' +\r\n SystemUtils.formatDate(expiringDate) +\r\n '.';\r\n } else {\r\n n.validityDescription =\r\n 'Il documento non sarà più vigente dal ' +\r\n SystemUtils.formatDate(expiringDate) +\r\n '.';\r\n n.isExpired = false;\r\n }\r\n }\r\n }\r\n if (n.expiringDate) {\r\n n.date = startOfDay(new Date(n.expiringDate));\r\n const d = startOfDay(subDays(n.date, 15));\r\n n.isExpiring = today <= n.date && today >= d;\r\n n.isExpired = n.date < today;\r\n }\r\n }\r\n if (groupByYear) {\r\n const year = SystemUtils.formatDate(n.date ?? n.publishingDate, DateFormat.LongMonthAndYear).toLowerCase();\r\n if (group !== year) {\r\n n.group = year;\r\n group = year;\r\n }\r\n } else if (groupByRelevance) {\r\n if (group !== 'none') {\r\n n.group =\r\n 'Elementi più rilevanti per la ricerca: ' + params.text;\r\n group = 'none';\r\n }\r\n } else if (groupByPopularity) {\r\n if (group !== 'none') {\r\n n.group = 'Elementi più popolari in ordine decrescente';\r\n group = 'none';\r\n }\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Prepare results\r\n * @param data : the optional result list to prepare\r\n * @param facets : the optional facets list to prepare\r\n * @param months : the optional snapshot months \r\n * @param month : the optional snapshot month\r\n * @param date : the optinal snapshot current date\r\n */\r\n prepareResults(\r\n data?: ClipperSearchResult | null,\r\n facets?: ClipperSearchFacetsResult | null,\r\n months?: ClipperSearchCalendarSnapshotResult | null,\r\n month?: ClipperSearchCalendarSnapshotResult | null,\r\n date?: Date | null) {\r\n if (data) {\r\n this.selection?.current.clear();\r\n this.snapshot = data;\r\n if (this.snapshot.items) {\r\n this.prepareResultItems(this.snapshot.items, this.filterParams);\r\n }\r\n }\r\n if (facets || months || month) {\r\n this.hasFacets.set(false);\r\n this.hasCalendar.set(false);\r\n if (facets) { \r\n this.facets?.update(facets.facets, facets.interval);\r\n if (this.facets && this.snapshot) {\r\n this.snapshot.facets = this.facets?.save();\r\n this.snapshot.facets.hasTooManyResults = this.snapshot.total >= 1000;\r\n }\r\n this.hasFacets.set(this.snapshot.facets.hasFacets); \r\n } else if (months || month) { \r\n if (months) {\r\n this.calendar?.update(months, 'months', date ?? new Date());\r\n }\r\n if (month) {\r\n this.calendar?.update(month, 'month', date ?? new Date());\r\n }\r\n this.hasCalendar.set(true);\r\n }\r\n }\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n\r\n /**\r\n* Save current document list or just the selected documents as a csv\r\n*/\r\n exportResults() {\r\n if (this.snapshot?.total > 0 || this.hasAnySelection()) {\r\n this.exportItems(this.getSeletectIds(), this.filterParams);\r\n }\r\n }\r\n\r\n /**\r\n * Return item state css class\r\n * @param item : the item to evaluate\r\n */\r\n getItemStateCssClass(item: ClipperDocumentInfo): string | null {\r\n if (item.isRead !== true && ClipperUtils.isClipperModelReadable(item.model)) return 'unread-bg';\r\n else if (item.isExpired) return 'expired-bg';\r\n else if (item.popularity === 3) return 'popular-bg';\r\n else if (item.popularity > 3) return 'very-popular-bg';\r\n return null;\r\n }\r\n\r\n /**\r\n * Return the item state tooltip text\r\n * @param item : the item to evaluate\r\n */\r\n getItemStateTooltip(item: ClipperDocumentInfo): string {\r\n if (item.isRead !== true && ClipperUtils.isClipperModelReadable(item.model)) return 'Non letto';\r\n else if (item.isExpired) return 'Non più vigente';\r\n else if (item.popularity === 3) return 'Documento con numero di citazioni alto';\r\n else if (item.popularity > 3)\r\n return 'Documento con numero di citazioni molto alto';\r\n return '';\r\n }\r\n\r\n /**\r\n * Return the item icon\r\n * @param item : the item to evaluate\r\n */\r\n getItemIcon(item: ClipperDocumentInfo): string {\r\n switch (item.model) {\r\n case ClipperModel.NormativaVigente: return 'gavel';\r\n case ClipperModel.Articoli:\r\n case ClipperModel.Quesiti:\r\n case ClipperModel.MetodiDiAnalisi: return 'extension';\r\n default: return 'updated';\r\n }\r\n }\r\n\r\n /**\r\n * Toggle the read flag\r\n * @param item : the item to update\r\n * @paran e: the optional click event\r\n */\r\n toggleRead(item: ClipperDocumentInfo, e: Event | null = null) {\r\n e?.preventDefault();\r\n e?.stopPropagation();\r\n this.setRead(!item?.isRead, item);\r\n\r\n }\r\n\r\n /**\r\n * Toggle the selection flag\r\n * @param item : the item to update\r\n * @paran e: the optional click event\r\n */\r\n toggleSelection(item: ClipperDocumentInfo, e: Event | null = null) {\r\n e?.preventDefault();\r\n e?.stopPropagation();\r\n this.selection?.toggle(item, item.documentId)\r\n\r\n\r\n }\r\n\r\n /**\r\n * Get the selected id\r\n */\r\n setRead(value: boolean, item: ClipperDocumentInfo = null) {\r\n let documentIds: string[] = [];\r\n if (item) {\r\n documentIds = [item.documentId];\r\n } else if (this.hasAnySelection()) {\r\n documentIds = this.selection?.all?.map(n => n.documentId);\r\n }\r\n return this.clipperService.updateState({ documentIds: documentIds, isRead: value })\r\n .subscribe(r => {\r\n if (r.success) {\r\n if (item) {\r\n item.isRead = value;\r\n } else if (this.hasAnySelection()) {\r\n this.selection?.all?.forEach(n => {\r\n n.isRead = value;\r\n })\r\n }\r\n\r\n // Update dashboard\r\n this.clipperService.updateUnreadItems(\r\n ClipperUtils.getClipperModuleFromModel(item.model), value ? -1 : 1);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Open an item\r\n * @param documentId : the document id\r\n * @param query: the current query or null\r\n * @param newWindow: true if the document must be open into a new window\r\n */\r\n override open(documentId: string, query: string | null | undefined = null, newWindow: boolean = false) {\r\n if (!newWindow) this.openDocument(documentId, query);\r\n else window.open('/documento/' + documentId, '_blank');\r\n }\r\n\r\n /**\r\n * Open a document\r\n * @param documentId : the document id\r\n * @param query: the current query or null\r\n */\r\n openDocument(documentId: string, query: string | null | undefined = null) {\r\n if (!documentId) return;\r\n ClipperDocumentsUtils.openDocument(\r\n this.dialogService,\r\n this.clipperService,\r\n documentId,\r\n query ?? this.filterParams.text,\r\n null,\r\n this.themeService.getTheme());\r\n\r\n }\r\n\r\n ///\r\n // Restorable\r\n ///\r\n\r\n /**\r\n * Save restorable data\r\n * @param id : the restorable id\r\n * @param scroll : the current scroll position\r\n */\r\n save(id: string, scroll: number = 0) {\r\n sessionStorage.setItem(\r\n id,\r\n JSON.stringify({\r\n paginator: {\r\n page: this.paginator?.pageIndex ?? 0,\r\n total: this.snapshot?.total ?? 0,\r\n size: this.paginator?.pageSize ?? 15\r\n },\r\n facets: this.facets?.save(),\r\n filterParams: this.filterParams,\r\n scroll: scroll,\r\n sort: { mode: this.sortMode, options: this.sortOptions },\r\n data: this.snapshot\r\n ? { items: this.snapshot.items, total: this.snapshot.total }\r\n : null\r\n }));\r\n }\r\n\r\n /**\r\n * Restore data\r\n * @param id : the restorable id\r\n */\r\n restore(id: string) {\r\n const value = sessionStorage.getItem(id);\r\n if (value) {\r\n const data = JSON.parse(value);\r\n if (data) {\r\n this.filterParams = data.filterParams;\r\n this.snapshot = data.data;\r\n this.sortMode = data.sort.mode;\r\n this.sortOptions = data.sort.options;\r\n if (this.facets && data.facets) {\r\n this.facets.restore(data.facets);\r\n this.hasFacets.set(data.facets ? true : false);\r\n }\r\n\r\n if (this.paginator && data.paginator) {\r\n this.paginator.pageIndex = data.paginator.page;\r\n this.paginator.pageSize = data.paginator.size;\r\n this.paginator.length = data.paginator.total;\r\n }\r\n this.broadcastService.sendMessage(ClipperMessages.COMMAND_SEARCH_RESTORED, data.filterParams)\r\n this.changeDetector.detectChanges();\r\n\r\n // Scroll top\r\n setTimeout(() => {\r\n this.scroll(data.scroll ?? 0);\r\n }, 100);\r\n }\r\n }\r\n }\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, input, OnInit, ViewChild } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenu, MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ClipperDocumentInfo, ClipperMessages, ClipperModel } from '@arsedizioni/ars-utils/clipper.common';\r\nimport { BroadcastService, FormatPipe, ScreenService } from '@arsedizioni/ars-utils/core';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\r\n\r\n\r\nexport enum ClipperSearchResultItemDisplayMode {\r\n List = 1,\r\n Tile = 2\r\n}\r\n\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'clipper-search-result-item',\r\n templateUrl: './search-result-item.component.html',\r\n styleUrls: ['./search-result-item.component.scss'],\r\n standalone: true,\r\n imports: [\r\n NgClass,\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n FlexLayoutModule,\r\n FormatPipe\r\n ],\r\n})\r\nexport class ClipperSearchResultItemComponent implements OnInit {\r\n\r\n @ViewChild('contextMenuTrigger') contextMenuTrigger!: MatMenuTrigger;\r\n protected unsubscribe: Subject<void> = new Subject<void>();\r\n protected screenService = inject(ScreenService);\r\n protected broadcastService = inject(BroadcastService);\r\n protected changeDetector = inject(ChangeDetectorRef);\r\n parent = input<ClipperSearchResultManager>();\r\n item = input<ClipperDocumentInfo>();\r\n actions = input<MatMenu>();\r\n tileNoPictureUrl = input<string>();\r\n tilePictureUrl = input<string>();\r\n isSelectable = input<boolean>(true);\r\n isReadable = input<boolean>(true);\r\n displayModelName = input<boolean>(false);\r\n displayMode = input<ClipperSearchResultItemDisplayMode>(ClipperSearchResultItemDisplayMode.List);\r\n protected readonly displayModesEnum: typeof ClipperSearchResultItemDisplayMode = ClipperSearchResultItemDisplayMode;\r\n protected readonly modelsEnum: typeof ClipperModel = ClipperModel;\r\n protected contextMenuPosition = { x: '0px', y: '0px' };\r\n\r\n ngOnInit(): void {\r\n this.parent()?.selection?.changed\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(() => {\r\n this.changeDetector.markForCheck();\r\n });\r\n\r\n // React to message broadcasting\r\n this.broadcastService.getMessage()\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(message => {\r\n if (message.id === ClipperMessages.DOCUMENT_NAVIGATED) {\r\n if (this.isReadable && this.item().documentId === message.data.document.documentId && !this.item().isRead) { \r\n this.parent()?.setRead(true, this.item()).add(() => { \r\n this.item().isRead = true;\r\n this.changeDetector.markForCheck();\r\n })\r\n }\r\n }\r\n });\r\n }\r\n\r\n onContextMenu(event: MouseEvent, item: ClipperDocumentInfo) {\r\n event.preventDefault();\r\n this.contextMenuPosition.x = event.clientX + 'px';\r\n this.contextMenuPosition.y = event.clientY + 'px';\r\n this.contextMenuTrigger.menuData = { item: item };\r\n this.contextMenuTrigger.openMenu();\r\n }\r\n\r\n /**\r\n * Checks if current item is selected\r\n * @returns true if current item is selected\r\n */\r\n protected isSelected(): boolean {\r\n return this.isSelectable() && this.parent()?.selection?.isSelected(this.item().documentId);\r\n };\r\n\r\n /**\r\n * Checks if current item is isReadable\r\n * @returns true if current item is isReadable\r\n */\r\n protected isRead(): boolean {\r\n return this.isReadable() && this.item().isRead === true;\r\n };\r\n\r\n}\r\n","<div>\r\n @if (displayMode() === displayModesEnum.List ) {\r\n <div class=\"item\" fxLayout=\"row\" fxLayoutGap=\"6px\" fxLayoutAlign=\"start center\" fxFill\r\n [ngClass]=\"{'item-selected': isSelected() }\" (contextmenu)=\"onContextMenu($event, item())\"\r\n (mouseenter)=\"item().isOver = true\" (mouseleave)=\"item().isOver = false\">\r\n <div fxFlex=\"6px\" fxFlexAlign=\"stretch\" [ngClass]=\"parent()?.getItemStateCssClass(item())\"\r\n [matTooltip]=\"parent()?.getItemStateTooltip(item())\"><span></span>\r\n </div>\r\n <div [fxFlex]=\"isSelectable() ? '48px' : '18px'\" fxLayoutAlign=\"center\">\r\n @if (isSelectable() && (screenService.isTouchable || item().isOver || isSelected())) {\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? parent()?.selection?.toggle(item(), item().documentId) : null\" [checked]=\"isSelected()\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"*\">\r\n <div class=\"item-content\">\r\n @if (displayModelName() && item().modelName) {\r\n @if (item().origin === 'GC' || item().origin === 'GN') {\r\n <div class=\"info-2\">GIURISPRUDENZA</div>\r\n } @else {\r\n <div class=\"info-2\">{{item().modelName}}</div>\r\n }\r\n }\r\n\r\n @if (item().info && item().model === modelsEnum.Quesiti) {\r\n @if(item().info) {\r\n <div class=\"info-1\">{{item().info}}</div>\r\n }\r\n }@else{\r\n @if (item().date) {\r\n <div class=\"info-1\">{{item().date | format:'D':'d MMM yyyy'}}</div>\r\n } @else if (item().author && (item().origin === 'LR' || item().origin === 'GC' || item().origin\r\n === 'GN')) {\r\n <div class=\"info-1\">{{item().author}}</div>\r\n }\r\n }\r\n <div>\r\n <a class=\"link\" (click)=\"parent()?.open(item().documentId)\"\r\n [attr.aria-label]=\"'Apri documento ' + item().title1\">{{item().title1 ?? item().title2}}</a>\r\n @if (item().part > 0) {\r\n <span class=\"badge\">PARTE {{item().part}}</span>\r\n }\r\n @if (item().isCommented) {\r\n <span class=\"badge\">COMMENTATA</span>\r\n }\r\n @if (item().validityState > 0) {\r\n <span class=\"badge-red\">{{item().validityDescription}}</span>\r\n }\r\n </div>\r\n @if(item().description && item().model === modelsEnum.Coordinamento) {\r\n <div class=\"title\">{{item().description}}</div>\r\n }\r\n @if (item().title2 &&\r\n item().model !== modelsEnum.Coordinamento &&\r\n item().model !== modelsEnum.AllerteAlimentari &&\r\n item().model !== modelsEnum.Scadenze &&\r\n item().model !== modelsEnum.Segnalazioni) {\r\n <div class=\"title\">{{item().title2}}</div>\r\n }\r\n @if (item().originDescription ) {\r\n <div class=\"info-1\">\r\n {{item().originDescription}}</div>\r\n }\r\n @if (item().anchors.length > 0) {\r\n <div class=\"details\">\r\n <div>DETTAGLIO</div>\r\n <div class=\"links\">\r\n @for (a of item().anchors; track $index) {\r\n <span>\r\n @if (a.uri && a.text) {\r\n <a (click)=\"parent()?.open(a.documentId + '#' + a.uri)\" [matTooltip]=\"a.title\">{{a.text}} @if\r\n (a.veryRelevant) {\r\n <sup>\r\n <mat-icon style='font-size:x-small; height: 10px; width:10px' color=\"primary\"\r\n matTooltip=\"Molto rilevante\">thumb_up_alt</mat-icon>\r\n </sup>\r\n }</a>\r\n }\r\n @if (!a.uri && a.text) {\r\n <span>{{a.text}}</span>\r\n }\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @if (item().taxonomy?.length > 0) {\r\n <div class=\"details\">\r\n <div>ARGOMENTI</div>\r\n <div class=\"links\">\r\n @for (n of item().taxonomy?.split('\\r\\n'); track $index) {\r\n <div class=\"link\">\r\n {{n}}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @if (item().model === modelsEnum.News || item().model === modelsEnum.Articoli || item().model ===\r\n modelsEnum.Juris) {\r\n @if (!displayModelName() && item().modelName) {\r\n <div class=\"info-1\">{{item().modelName}}</div>\r\n }\r\n @if (item().info){\r\n <div class=\"details\">\r\n <div>ARGOMENTI</div>\r\n <div class=\"links\">\r\n <div>{{item().info}}</div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n @if (item().model === modelsEnum.Coordinamento) {\r\n @if (item().title2) {\r\n <div class=\"details\">\r\n <div>TITOLO DOCUMENTO MODIFICATO</div>\r\n <div class=\"links\">\r\n <div>{{item().title2}}</div>\r\n </div>\r\n </div>\r\n }\r\n @if (item().description) {\r\n <div class=\"details\">\r\n <div>PROSSIMA SCADENZA</div>\r\n <div class=\"links\">\r\n <div>{{item().description}}</div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n <div fxFlex=\"48px\" fxLayoutAlign=\"end\">\r\n @if (item().isOver || item().isMenuOpen || isSelected()) {\r\n @if (isReadable() && !isRead() && item().model !== modelsEnum.Scadenze && item().model !==\r\n modelsEnum.Segnalazioni)\r\n {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Segna come già letta\" [attr.aria-label]=\"'Segna come già letta'\"\r\n (click)=\"parent()?.toggleRead(item(), $event)\">\r\n <mat-icon>flag</mat-icon>\r\n </button>\r\n }\r\n @if(item().model === modelsEnum.Scadenze || item().model === modelsEnum.Segnalazioni) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Aggiungi al tuo calendario\"\r\n [attr.aria-label]=\"'Aggiungi al tuo calendario'\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Menu\" [attr.aria-label]=\"'Menu opzioni'\"\r\n [matMenuTriggerFor]=\"actions()\" [matMenuTriggerData]=\"{item: item()}\" (click)=\"item().isMenuOpen = true\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"tile\" (contextmenu)=\"onContextMenu($event, item())\" (mouseenter)=\"item().isOver = true\"\r\n (mouseleave)=\"item().isOver = false\" [ngClass]=\"{'item-selected': isSelected(), \r\n 'item-unread': isRead()}\" (click)=\"parent()?.open(item().documentId)\">\r\n <div class=\"image-mark\" [ngClass]=\"{'image-mark-unread': !isRead()}\"></div>\r\n <div class=\"image\">\r\n @if (isReadable() || isSelectable()) {\r\n <div class=\"buttons\">\r\n @if (isReadable() && !isRead() && item().isOver === true) {\r\n <button mat-icon-button class=\"read\" matTooltip=\"Segna come già letto\"\r\n (click)=\"parent()?.toggleRead(item(), $event)\"><mat-icon>flag</mat-icon></button>\r\n }\r\n @if (isSelectable() && (isSelected() || item().isOver === true)) {\r\n <button mat-icon-button class=\"check\" [ngClass]=\"{'check-selected': isSelected()}\"\r\n matTooltip=\"Seleziona/Deseleziona\"\r\n (click)=\"parent()?.toggleSelection(item(), $event)\"><mat-icon>check</mat-icon></button>\r\n }\r\n </div>\r\n }\r\n <div class=\"info-1\">{{item().modelName}}</div>\r\n @if (item().info) {\r\n <div class=\"info-2\">{{item().info}}</div>\r\n }\r\n @if (item().pictureId && tilePictureUrl()) {\r\n <img decoding=\"async\" loading=\"lazy\" [src]=\"tilePictureUrl() + '?id=' + item().pictureId\" [alt]=\"item().title2\" />\r\n } @else if (tileNoPictureUrl()) {\r\n <picture>\r\n <img decoding=\"async\" loading=\"lazy\" [src]=\"tileNoPictureUrl()\"\r\n [alt]=\"item().title2 || 'immagine non trovata'\" />\r\n </picture>\r\n }\r\n </div>\r\n <div class=\"body\">\r\n <div class=\"date\">\r\n <span class=\"date-day\" [ngClass]=\"{'unread': !item().isRead}\">{{item().date | format:'D':'d\r\n MMMM'}}</span>\r\n <span class=\"date-divider\"></span>\r\n <span>{{item().date| format:'D':'yyyy'}}</span>\r\n </div>\r\n <div class=\"title\">{{item().title2}}</div>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n<div #contextMenuTrigger=\"matMenuTrigger\" style=\"position: fixed\" [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"actions()\" [matMenuTriggerData]=\"{item: item}\">\r\n</div>","import { Breakpoints } from '@angular/cdk/layout';\r\nimport { AfterViewInit, ChangeDetectionStrategy, Component, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MAT_DIALOG_DATA, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatDrawer, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n ClipperDocumentInfo,\r\n ClipperQueryReferencesMode, ClipperSearchFacetsSnapshot,\r\n ClipperSearchParams\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { SelectableModel, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { fromEvent } from 'rxjs';\r\nimport { debounceTime, takeUntil } from 'rxjs/operators';\r\nimport { ClipperDocumentMenuComponent } from '../document-menu/document-menu.component';\r\nimport { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';\r\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\r\nimport { ClipperSearchResultItemComponent } from '../search-result-item/search-result-item.component';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\nexport interface ClipperReferencesDialogData {\r\n mode?: ClipperQueryReferencesMode | null;\r\n anchor?: string | null;\r\n anchorTitle?: string | null;\r\n documentId: string;\r\n model: number;\r\n\r\n}\r\n\r\nexport interface ClipperReferenceDialogResult {\r\n documentId: string;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './references.component.html',\r\n styleUrls: ['./references.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FlexLayoutModule,\r\n MatDialogTitle,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n MatCheckboxModule,\r\n MatSlideToggleModule,\r\n FormsModule,\r\n MatMenuModule,\r\n MatBadgeModule,\r\n MatPaginatorModule,\r\n MatDialogContent,\r\n MatSidenavModule,\r\n MatProgressBarModule,\r\n ClipperDocumentMenuComponent,\r\n ClipperSearchFacetsComponent,\r\n ClipperSearchResultItemComponent\r\n\r\n ],\r\n})\r\nexport class ClipperReferencesComponent extends ClipperSearchResultManager\r\n implements OnInit, OnDestroy, AfterViewInit {\r\n @ViewChild('filterPane') filterPane!: MatDrawer;\r\n\r\n private dialogRef = inject(MatDialogRef<ClipperReferencesComponent>);\r\n protected dialogData: ClipperReferencesDialogData = inject(MAT_DIALOG_DATA) ?? { mode: ClipperQueryReferencesMode.ReferencesIn };\r\n protected title: string | null = null;\r\n protected item: ClipperDocumentInfo | null = null;\r\n\r\n ngOnInit() {\r\n\r\n if (this.dialogData) {\r\n switch (this.dialogData.mode) {\r\n case ClipperQueryReferencesMode.ReferencesIn:\r\n this.title = \"Documenti richiamati nelle note o nel testo\";\r\n break;\r\n case ClipperQueryReferencesMode.ReferencesOut:\r\n this.title = \"Documenti che richiamano quello in visione\";\r\n break;\r\n case ClipperQueryReferencesMode.ChangesIn:\r\n this.title = \"Modifiche subite\";\r\n break;\r\n case ClipperQueryReferencesMode.ChangesOut:\r\n this.title = \"Modifiche apportate\";\r\n break;\r\n case ClipperQueryReferencesMode.Juris:\r\n this.title = \"Giurisprudenza associata\";\r\n break;\r\n }\r\n if (this.dialogData.anchorTitle) {\r\n this.title += \" - \" + this.dialogData.anchorTitle;\r\n }\r\n\r\n // Use service snapshot\r\n this.snapshot = this.clipperService.referencesSnapshot() ?? { searchParams: new ClipperSearchParams(), interval: \"-1\" };\r\n if (\r\n this.filterParams.mode !== this.dialogData.mode ||\r\n this.filterParams.id !== this.dialogData.documentId ||\r\n this.filterParams.anchor !== this.dialogData.anchor\r\n ) {\r\n this.filterParams = new ClipperSearchParams();\r\n this.filterParams.mode = this.dialogData.mode;\r\n this.filterParams.model = this.dialogData.model;\r\n this.filterParams.anchor = this.dialogData.anchor;\r\n this.filterParams.id = this.dialogData.documentId;\r\n this.filterParams.useModifierInfo = this.dialogData.mode === ClipperQueryReferencesMode.ChangesOut;\r\n this.filterParams.returnModifierInfo = this.dialogData.mode !== ClipperQueryReferencesMode.ChangesOut;\r\n this.clipperService.referencesSnapshot.set(this.snapshot);\r\n }\r\n }\r\n\r\n // Initialize selection\r\n this.selection = new SelectableModel<any, string>(true, 'documentId');\r\n\r\n // Observe layout changes\r\n this.breakpointObserver\r\n .observe([\r\n Breakpoints.XSmall,\r\n Breakpoints.Small,\r\n Breakpoints.Medium,\r\n Breakpoints.Large,\r\n Breakpoints.XLarge,\r\n ])\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(result => {\r\n for (const query of Object.keys(result.breakpoints)) {\r\n if (result.breakpoints[query]) {\r\n this.handleFilterPaneVisibility();\r\n }\r\n }\r\n });\r\n\r\n\r\n // React to window size change\r\n fromEvent(window, 'resize')\r\n .pipe(takeUntil(this.unsubscribe), debounceTime(250))\r\n .subscribe(() => {\r\n this.resize();\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n // Handle filter pane \r\n this.handleFilterPaneVisibility();\r\n // Handle facets\r\n if (this.facets) {\r\n this.facets.changed\r\n .subscribe((value: ClipperSearchFacetsSnapshot) => {\r\n this.snapshot.facets = value;\r\n this.fetch(true);\r\n });\r\n }\r\n }, 0);\r\n this.fetch(true);\r\n this.restoreFacets();\r\n this.resize();\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n /**\r\n * Resize \r\n */\r\n private resize() {\r\n setTimeout(() => {\r\n let elem = document.getElementById('clipper-references-scrollable');\r\n if (elem) {\r\n const height = this.dialogService.getCurrentDialogScrollableHeight(\r\n ['clipper-references-fixed'],\r\n window.innerHeight\r\n );\r\n if (height != elem.clientHeight) {\r\n elem.setAttribute('style', 'padding:0 0 0 0;' + height + 'px !important;max-height:' + height + 'px !important');\r\n }\r\n } else {\r\n this.resize();\r\n }\r\n }, 0);\r\n }\r\n\r\n /**\r\n * Show hide filter pane manually\r\n */\r\n protected toggleFilterPane() {\r\n this.filterPaneClosed = !this.filterPaneClosed;\r\n this.filterPane?.toggle();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Handle filter pane visibility\r\n */\r\n private handleFilterPaneVisibility() {\r\n if (this.filterPane) {\r\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Small) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Medium)) {\r\n if (this.filterPane.opened) {\r\n this.filterPane.close();\r\n }\r\n this.filterPane.mode = 'over';\r\n this.filterPane.disableClose = false;\r\n this.filterPaneHasBackdrop = true;\r\n } else {\r\n if (!this.hasFacets()) {\r\n this.filterPane.close();\r\n } else if (!this.filterPane.opened && !this.filterPaneClosed) {\r\n this.filterPane.open();\r\n } else if (this.filterPane.opened && this.filterPaneClosed) {\r\n this.filterPane.close();\r\n }\r\n this.filterPane.mode = 'side';\r\n this.filterPane.disableClose = true;\r\n this.filterPaneHasBackdrop = false;\r\n }\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Close dialog\r\n */\r\n close() {\r\n this.dialogRef.close();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Send document links by email\r\n * @param item : the item to add\r\n */\r\n sendTo(item: ClipperDocumentInfo = null) {\r\n this.sendItemsTo(item ? [item] : this.selection?.all);\r\n }\r\n /**\r\n * Prepare teh search params\r\n * @param newSearch : true if it is a new search\r\n * @return the new search params\r\n */\r\n private prepareFetch(newSearch: boolean = false): ClipperSearchParams {\r\n const newParams: ClipperSearchParams = SystemUtils.clone(this.filterParams);\r\n newParams.count = 15;\r\n newParams.useModifierInfo =\r\n newParams.mode === ClipperQueryReferencesMode.ChangesOut;\r\n newParams.returnModifierInfo =\r\n newParams.mode !== ClipperQueryReferencesMode.ChangesOut;\r\n if (newSearch) {\r\n newParams.first = 0;\r\n }\r\n // Apply facets\r\n if (this.snapshot.facets?.fromDate) {\r\n newParams.fromDate = this.snapshot.facets?.fromDate;\r\n newParams.toDate = this.snapshot.facets?.toDate;\r\n newParams.year = this.snapshot.facets?.fromDate.getFullYear();\r\n } else if (this.snapshot.facets?.changedInterval) {\r\n newParams.year = null;\r\n newParams.fromDate = null;\r\n newParams.toDate = null;\r\n }\r\n if (this.snapshot.facets?.sector || this.snapshot.facets?.changedSector) {\r\n newParams.sector = this.snapshot.facets?.sector;\r\n }\r\n if (this.snapshot.facets?.type || this.snapshot.facets?.changedType) {\r\n newParams.type = this.snapshot.facets?.type;\r\n }\r\n if (this.snapshot.facets?.author || this.snapshot.facets?.changedAuthor) {\r\n newParams.author = this.snapshot.facets?.author;\r\n }\r\n return newParams;\r\n\r\n }\r\n\r\n\r\n /**\r\n * Perform a search\r\n * @param newSearch: true if is a new search\r\n */\r\n fetch(newSearch: boolean = false) {\r\n if (!this.clipperService.loggedIn()) return;\r\n this.dialogService.busy('Ricerca in corso...');\r\n const searchParams = this.prepareFetch(newSearch);\r\n this.clipperService.references(searchParams.toReferencesSearchParams())\r\n .subscribe({\r\n next: (r) => {\r\n if (!r.success) this.dialogService.error(r.message);\r\n else {\r\n this.prepareResults(r.value);\r\n\r\n // Handle facets\r\n if (this.snapshot.total > 0) {\r\n if (newSearch)\r\n // Update facets\r\n this.fetchFacets(searchParams);\r\n } else {\r\n this.hideFacets();\r\n }\r\n\r\n if (newSearch) {\r\n if (this.paginator) this.paginator.pageIndex = 0;\r\n }\r\n\r\n this.scroll(0);\r\n }\r\n },\r\n complete: () => {\r\n this.dialogService.clearBusy();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Show a new page result\r\n * @param e : the MatPaginator PageEvent data\r\n */\r\n fetchMore(e: PageEvent) {\r\n let first = e.pageIndex * this.filterParams.count;\r\n this.filterParams.first = first;\r\n this.fetch();\r\n }\r\n\r\n /**\r\n * Get facets\r\n * @param params: the clipper search params\r\n */\r\n fetchFacets(params: ClipperSearchParams) {\r\n if (!this.clipperService.loggedIn()) return;\r\n if (!this.snapshot.facets || this.snapshot.facets?.hasMoreFacets) {\r\n this.filterBusy.set(true);\r\n this.clipperService.referencesFacets(params.toReferencesSearchParams())\r\n .subscribe({\r\n next: (r) => {\r\n if (r.success) {\r\n this.prepareResults(null, r.value);\r\n this.handleFilterPaneVisibility();\r\n }\r\n },\r\n complete: () => {\r\n this.filterBusy.set(false);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Hide facets\r\n */\r\n protected hideFacets() {\r\n this.hasFacets.set(false);\r\n this.facets?.reset();\r\n this.filterPane.close();\r\n this.filterPaneClosed = false;\r\n }\r\n /**\r\n * Try to restore stored facets\r\n */\r\n restoreFacets() {\r\n if (this.snapshot.facets) {\r\n this.facets.restore(this.snapshot.facets);\r\n this.handleFilterPaneVisibility();\r\n }\r\n }\r\n\r\n /**\r\n * Close current dialog and return the id to navigate to\r\n * @param documentId : the document id\r\n */\r\n open(documentId: string) {\r\n this.dialogRef.close({ documentId: documentId });\r\n }\r\n}\r\n","<div class=\"clipper-references-fixed\">\r\n <div class=\"dialog-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap='10px' fxFill>\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>{{title}} </h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\r\n (click)=\"close()\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n @if (dialogData.mode > 0 || selection?.hasValue() || (snapshot && snapshot.facets?.hasFacets && filterPane &&\r\n (!filterPane.opened || filterPaneClosed))) {\r\n <div style=\"padding: 0 10px 0 24px; height: 48px; min-height: 48px;\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\">\r\n @if (dialogData.mode === 1) {\r\n <mat-slide-toggle name=\"excludeTextReferences\" [(ngModel)]=\"filterParams.excludeTextReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citati nelle note\r\n </mat-slide-toggle>\r\n } @else if (dialogData.mode == 2) {\r\n <mat-slide-toggle name=\"excludeNotesReferences\" [(ngModel)]=\"filterParams.excludeNotesReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citano nel testo il documento\r\n </mat-slide-toggle>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection?.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button\r\n matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\r\n [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection?.all.length\" matBadgeColor=\"accent\">checklist</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" [selectionSource]=\"selection\" [isReadable]=\"false\"\r\n [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\" aria-label=\"'Affina ricerca'\"\r\n (click)=\"toggleFilterPane()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"clipper-references-scrollable\">\r\n <mat-drawer-container class=\"fill\" [hasBackdrop]=\"filterPaneHasBackdrop\">\r\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small drawer-with-loader\" opened=\"false\">\r\n @if (filterBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (filterBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"56px\" class=\"title-container-with-loader\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlexAlign=\"center\" class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\">\r\n <clipper-search-facets #facets></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" [id]=\"scrollerId\" class=\"scroll-auto\" style=\"padding: 0 5px;\">\r\n @if (!snapshot.total) {\r\n <div class=\"message-container\">\r\n <p class=\"message\"><b>Nessun elemento da visualizzare.</b></p>\r\n </div>\r\n } @else {\r\n <div>\r\n @for (item of snapshot.items; track $index; let i = $index) {\r\n @if (item.group) {\r\n <div class=\"items-group-title\">\r\n <div [ngClass]=\"{'group-spaced': i > 0}\">{{item.group}}</div>\r\n </div>\r\n }\r\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\"\r\n [actions]=\"contextMenu\"></clipper-search-result-item>\r\n }\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"false\" [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n <!-- footer -->\r\n @if ((snapshot?.total ?? 0) > 0) {\r\n <div class=\"items-footer\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <mat-paginator #paginator class=\"paginator\" [hidePageSize]=\"true\" [length]=\"snapshot?.total ?? 0\"\r\n [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\" (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n</div>","import { NgStyle } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter, OnInit,\r\n Output,\r\n ViewChild,\r\n inject,\r\n signal\r\n} from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatListModule, MatSelectionList } from '@angular/material/list';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n ClipperDocumentAnchorInfo,\r\n ClipperService\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\n\r\nexport interface ClipperDocumentIndexDialogData {\r\n documentId: string,\r\n excludedTypes?: number[] | null,\r\n multiple?: boolean | null\r\n}\r\n\r\nexport interface ClipperDocumentIndexDialogResult {\r\n data: ClipperDocumentAnchorInfo[] \r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './document-index.component.html',\r\n styleUrls: ['./document-index.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n FlexLayoutModule,\r\n MatDialogTitle,\r\n MatDialogContent,\r\n MatListModule, \r\n NgStyle, \r\n MatTooltipModule,\r\n MatDialogActions,\r\n MatButtonModule,\r\n MatDialogClose,\r\n ],\r\n})\r\nexport class ClipperDocumentIndexComponent implements OnInit {\r\n @ViewChild('selection') selection!: MatSelectionList;\r\n @Output() done = new EventEmitter<ClipperDocumentIndexDialogResult>();\r\n\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private clipperService = inject(ClipperService);\r\n private dialogService = inject(DialogService);\r\n protected dialogData: ClipperDocumentIndexDialogData = inject(MAT_DIALOG_DATA);\r\n protected items: ClipperDocumentAnchorInfo[] | null;\r\n protected okDisabled = signal<boolean>(false);\r\n\r\n ngOnInit(): void {\r\n if (this.dialogData) {\r\n if (this.dialogData.documentId) {\r\n this.load();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Display document structure\r\n */\r\n private load() {\r\n if (!this.clipperService.loggedIn()) return;\r\n if (!this.dialogData) return;\r\n this.dialogService.setBusy('Caricamento in corso...');\r\n this.clipperService.index(this.dialogData.documentId)\r\n .subscribe({\r\n next: (r) => {\r\n if (!r.success) {\r\n this.dialogService.error(r.message);\r\n } else {\r\n this.items = [];\r\n r.value?.items.forEach((n: ClipperDocumentAnchorInfo) => {\r\n\r\n if (!this.dialogData.excludedTypes || this.dialogData.excludedTypes.indexOf(n.type) === -1) {\r\n if (n.title) n.description = n.title;\r\n else {\r\n if (n.type < 3) {\r\n n.description = n.text.trim();\r\n } else {\r\n n.description =\r\n n.typeDescription.trim() + ' ' + n.text.trim() + '.';\r\n }\r\n }\r\n this.items.push(n);\r\n }\r\n });\r\n this.changeDetector.markForCheck();\r\n }\r\n },\r\n complete: () => {\r\n this.dialogService.clearBusy();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle selection/deselection of an item\r\n */\r\n protected select() {\r\n this.okDisabled.set(\r\n !this.selection || this.selection.selectedOptions.selected.length === 0);\r\n }\r\n\r\n /**\r\n * Confirm selection\r\n * @param item: the selected item or null to use multiple selection if allowed\r\n */\r\n protected use(item: ClipperDocumentAnchorInfo = null) {\r\n if (this.okDisabled()) return;\r\n if (this.dialogData?.multiple) {\r\n if (item) return; // multiple and single item selection not supported\r\n let selection: ClipperDocumentAnchorInfo[] = [];\r\n this.selection.selectedOptions.selected.forEach(n => {\r\n selection.push(n.value);\r\n });\r\n this.done.emit({data: selection});\r\n } else if (item) {\r\n this.done.emit({ data: [item] });\r\n }\r\n }\r\n}\r\n","<h2 mat-dialog-title>Indice</h2>\r\n<div mat-dialog-content>\r\n @if (!items || items.length === 0) {\r\n <div>\r\n <p class=\"message\"><i>Nessun elemento da visualizzare.</i></p>\r\n </div>\r\n } @else {\r\n <mat-selection-list dense #selection (selectionChange)=\"select();\" [multiple]=\"dialogData.multiple\"\r\n hideSingleSelectionIndicator=\"true\">\r\n @for (item of items; track item) {\r\n @if (item.type > 4) {\r\n <div class=\"small uppercase truncated accent\" style=\"display: flex; align-items: center; min-height: 36px;\">\r\n <div><b>{{item.description}}</b></div>\r\n </div>\r\n } @else {\r\n <mat-list-option color=\"primary\" [selected]=\"false\" [value]=\"item\" (click)=\"use(item)\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div [fxFlex]=\"(10 * item.level) + 'px'\"></div>\r\n <div fxFlex=\"*\" class=\"truncated\">\r\n <div class=\"small\" [matTooltip]=\"item.description\">{{item.description}}</div>\r\n </div>\r\n </div>\r\n </mat-list-option>\r\n }\r\n }\r\n </mat-selection-list>\r\n }\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n @if (dialogData.multiple) {\r\n <button mat-flat-button color=\"primary\" [disabled]=\"okDisabled()\" (click)=\"use()\">Usa</button>\r\n }\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">Chiudi</button>\r\n </div>\r\n</div>","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter, OnDestroy,\r\n OnInit,\r\n Output,\r\n Renderer2,\r\n ViewChild,\r\n inject,\r\n signal\r\n} from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogContent, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatDrawer, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { Router } from '@angular/router';\r\nimport {\r\n ClipperDocumentAnchorInfo,\r\n ClipperDocumentInfo,\r\n ClipperDocumentRelevants,\r\n ClipperMessages,\r\n ClipperModel,\r\n ClipperQueryReferencesMode,\r\n ClipperSearchParams\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport {\r\n SafeUrlPipe,\r\n SystemUtils,\r\n ThemeType\r\n} from '@arsedizioni/ars-utils/core';\r\nimport { FilePreviewComponent } from '@arsedizioni/ars-utils/ui.application';\r\nimport { Subject, fromEvent } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { ClipperReferenceDialogResult, ClipperReferencesComponent } from '../references/references.component';\r\nimport { ClipperDocumentIndexComponent, ClipperDocumentIndexDialogResult } from '../document-index/document-index.component';\r\nimport { ClipperDocumentManager } from '../document-manager/document-manager';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { ClipperDocumentsUtils } from '../../documents';\r\nimport { ClipperDocumentMenuComponent } from '../document-menu/document-menu.component';\r\n\r\n\r\nexport interface ClipperDocumentDialogData {\r\n selectionMode: number;\r\n id: string;\r\n query?: string | null;\r\n theme?: ThemeType | null;\r\n\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './document.component.html',\r\n styleUrls: ['./document.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n FlexLayoutModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n MatDividerModule,\r\n MatProgressBarModule,\r\n MatDialogContent,\r\n MatSidenavModule,\r\n SafeUrlPipe,\r\n ClipperDocumentMenuComponent\r\n ],\r\n})\r\nexport class ClipperDocumentComponent extends ClipperDocumentManager\r\n implements OnInit, OnDestroy {\r\n @ViewChild('relevantsPane') relevantsPane!: MatDrawer;\r\n @Output() closing = new EventEmitter();\r\n @Output() opening = new EventEmitter();\r\n\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private breakpointObserver = inject(BreakpointObserver);\r\n private renderer = inject(Renderer2);\r\n private rendererListener1: any;\r\n private router = inject(Router);\r\n private dialogRef = inject(MatDialogRef<ClipperDocumentComponent>);\r\n protected dialogData: ClipperDocumentDialogData = inject(MAT_DIALOG_DATA) ?? { mode: ClipperQueryReferencesMode.ReferencesIn };\r\n protected url = signal<string>(null);\r\n protected title = signal<string>(null);\r\n protected busy = signal<boolean>(false);\r\n protected lastQuery?: string | null = null;\r\n protected lastDocument?: ClipperDocumentInfo | null = {};\r\n protected relevants: ClipperDocumentRelevants = {\r\n items: [],\r\n hits: 0,\r\n hit: 0,\r\n minimumScore: 100,\r\n };\r\n protected relevantsPaneHasBackdrop: boolean = false;\r\n protected relevantsPaneClosed: boolean = false;\r\n protected relevantsBusy = signal<boolean>(false);\r\n protected hasRelevants = signal<boolean>(false);\r\n protected selectionMode?: number | null = null;\r\n\r\n ngOnInit(): void {\r\n if (this.dialogData) {\r\n this.selectionMode = this.dialogData.selectionMode;\r\n if (this.dialogData.id) {\r\n const url =\r\n this.clipperService.serviceUri +\r\n \"/documents/render/?query=\" +\r\n (this.dialogData.query ?? '') +\r\n \"&id=\" +\r\n this.dialogData.id +\r\n \"&theme=\" +\r\n this.dialogData.theme;\r\n this.navigateByUrl(url);\r\n\r\n }\r\n }\r\n\r\n // Listen to window messages\r\n this.rendererListener1 = this.renderer.listen(\r\n 'window',\r\n 'message',\r\n (e: Event) => {\r\n let event = e as MessageEvent;\r\n if (!event) return;\r\n if (event.data) {\r\n try {\r\n var data = JSON.parse(event.data);\r\n if (data) {\r\n switch (data.type) {\r\n case 'navigated':\r\n this.navigated(\r\n data.id,\r\n data.title1,\r\n data.title2,\r\n data.model,\r\n data.module,\r\n data.moduleName,\r\n data.date,\r\n data.number,\r\n data.author,\r\n data.origin,\r\n data.originDescription,\r\n data.bag,\r\n data.validityInfo,\r\n data.expiringInfo,\r\n data.primaryId,\r\n data.primaryModel,\r\n data.secondaryId,\r\n data.isTrial\r\n );\r\n break;\r\n case 'navigate':\r\n this.navigate(data.url);\r\n break;\r\n case 'references':\r\n this.openReferences(\r\n data.id,\r\n data.mode,\r\n data.model,\r\n data.anchor,\r\n data.anchorTitle,\r\n data.update\r\n );\r\n break;\r\n case 'hits':\r\n this.relevants.hits = data.total;\r\n this.updateRelevants();\r\n break;\r\n }\r\n this.changeDetector.markForCheck();\r\n this.resize();\r\n }\r\n } catch {\r\n }\r\n }\r\n }\r\n );\r\n\r\n // Observe layout changes\r\n this.breakpointObserver\r\n .observe([\r\n Breakpoints.XSmall,\r\n Breakpoints.Small,\r\n Breakpoints.Medium,\r\n Breakpoints.Large,\r\n Breakpoints.XLarge,\r\n ])\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(result => {\r\n for (const query of Object.keys(result.breakpoints)) {\r\n if (result.breakpoints[query]) {\r\n this.handleRelevantsPaneVisibility();\r\n }\r\n }\r\n });\r\n\r\n // React to window size change\r\n fromEvent(window, 'resize')\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(() => {\r\n this.resize();\r\n });\r\n this.resize();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n if (this.rendererListener1) {\r\n this.rendererListener1();\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Resize \r\n */\r\n private resize() {\r\n setTimeout(() => {\r\n let elem = document.getElementById('clipper-document-scrollable');\r\n if (elem) {\r\n const height = this.dialogService.getCurrentDialogScrollableHeight(\r\n ['clipper-document-fixed'],\r\n window.innerHeight\r\n );\r\n if (height != elem.clientHeight) {\r\n elem.setAttribute('style', 'padding:0;height:' + height + 'px !important;max-height:' + height + 'px !important');\r\n elem = document.getElementById('clipper-document-iframe');\r\n elem?.setAttribute('style', 'height:' + (height - 20) + 'px !important;max-height:' + (height - 20) + 'px !important');\r\n }\r\n } else {\r\n this.resize();\r\n }\r\n }, 0);\r\n }\r\n\r\n\r\n\r\n /**\r\n * Show hide relevants pane manually\r\n */\r\n protected toggleRelevantsPane() {\r\n this.relevantsPaneClosed = !this.relevantsPaneClosed;\r\n this.relevantsPane?.toggle();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Handle filter pane visibility\r\n */\r\n private handleRelevantsPaneVisibility() {\r\n if (this.relevantsPane) {\r\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Small) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Medium)) {\r\n if (this.relevantsPane.opened) {\r\n this.relevantsPane.close();\r\n }\r\n this.relevantsPane.mode = 'over';\r\n this.relevantsPane.disableClose = false;\r\n this.relevantsPaneHasBackdrop = true;\r\n } else {\r\n if (!this.relevantsPane.opened && !this.relevantsPaneClosed && this.hasRelevants()) {\r\n this.relevantsPane.open();\r\n } else if (this.relevantsPane.opened && this.relevantsPaneClosed) {\r\n this.relevantsPane.close();\r\n }\r\n this.relevantsPane.mode = 'side';\r\n this.relevantsPane.disableClose = true;\r\n this.relevantsPaneHasBackdrop = false;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Close dialog\r\n */\r\n\r\n protected close() {\r\n if (this.closing) {\r\n this.closing.emit();\r\n }\r\n this.dialogRef.close();\r\n }\r\n\r\n /**\r\n * Navigate to a new document\r\n * @param id : the document id\r\n */\r\n navigate(id: string) {\r\n if (!id || id.length == 0)\r\n return; // Nothing to do\r\n\r\n if (id.indexOf('?') !== -1) {\r\n if (id.startsWith('/api'))\r\n this.navigateByUrl(this.clipperService.serviceUri + id.substring(4));\r\n else if (!id.startsWith(this.clipperService.serviceUri))\r\n this.navigateByUrl(this.clipperService.serviceUri + id);\r\n else this.navigateByUrl(id);\r\n } else\r\n this.navigateByUrl(\r\n this.clipperService.serviceUri +\r\n \"/documents/render/?query=&id=\" + id);\r\n\r\n }\r\n\r\n /**\r\n * Navigate by url\r\n * @param url : the url to navigate to\r\n */\r\n navigateByUrl(url: string) {\r\n if (!url || url.length === 0 || url === 'about:blank')\r\n return; // Nothing to do\r\n // Clean url, take only the first anchor\r\n let parts = url.split('#');\r\n url = parts[0];\r\n if (parts.length > 1) {\r\n url += '#' + parts[1];\r\n }\r\n // Handle free text query\r\n let query = '';\r\n let p = url.indexOf('query=');\r\n if (p !== -1) {\r\n p += 6;\r\n while (url.length > p && url[p] !== '&' && url[p] !== '#') {\r\n query += url[p++];\r\n }\r\n if (query.length > 0) {\r\n // Reset\r\n this.relevants.hit = 0;\r\n try {\r\n // Assign query to enable search for fragments\r\n this.lastQuery = decodeURIComponent(encodeURIComponent(query));\r\n } catch {\r\n this.lastQuery = query;\r\n }\r\n }\r\n }\r\n // Theme\r\n if (url.indexOf('theme=') === -1) {\r\n p = url.indexOf('id=');\r\n if (p !== -1) {\r\n url = url.substring(0, p) + 'theme=' + this.dialogData.theme + '&' + url.substring(p);\r\n }\r\n }\r\n\r\n let navigateToFile = url.indexOf('&file=true') !== -1;\r\n if (navigateToFile === true) {\r\n // Preview\r\n this.previewFile(url);\r\n } else {\r\n // Begin loading only if not downloading a file\r\n this.busy.set(url.indexOf('documents/render/item') === -1);\r\n // Navigate\r\n this.url.set(url);\r\n }\r\n }\r\n\r\n /**\r\n * Navigated callback \r\n */\r\n public navigated(\r\n id: string, // Documnent id\r\n title1: string, // Title 1\r\n title2: string, // Title 2\r\n model: number, // Model\r\n moduleId: number, // Module\r\n moduleName: string, // Module name\r\n date: string, // Date\r\n number: string, // Number\r\n author: string, // Author\r\n origin: string, // Origin\r\n originDescription: string, // Origin description\r\n bag: string, // Flags\r\n validityInfo: string, // Info about validity\r\n expiringInfo: string, // Info about expiring date\r\n primaryId: string, // Primary document id\r\n primaryModel: number, // Primary document model\r\n secondaryId: string, // Secondary document id\r\n isTrial: boolean // True if is a trial request\r\n ) {\r\n // Check for session expiring\r\n if (title1 === 'Sessione non valida') {\r\n this.dialogService\r\n .error(title2, null, title1, 'Accedi di nuovo')\r\n .afterClosed()\r\n .subscribe(() => {\r\n this.router.navigate(['login']);\r\n });\r\n return;\r\n }\r\n\r\n // Store data\r\n if (!this.lastDocument) {\r\n this.lastDocument = {};\r\n }\r\n this.lastDocument.id = id;\r\n this.lastDocument.documentId = id;\r\n this.lastDocument.title1 = title1 ? SystemUtils.urlDecode(title1) : null;\r\n this.lastDocument.title2 = title2 ? SystemUtils.urlDecode(title2) : null;\r\n this.lastDocument.model = model;\r\n this.lastDocument.module = moduleId;\r\n this.lastDocument.moduleName = moduleName;\r\n this.lastDocument.date = new Date(date);\r\n this.lastDocument.number = number;\r\n this.lastDocument.author = author;\r\n this.lastDocument.origin = origin;\r\n this.lastDocument.originDescription = originDescription;\r\n this.lastDocument.bag = bag;\r\n this.lastDocument.validityInfo = validityInfo;\r\n this.lastDocument.primaryId = primaryId;\r\n this.lastDocument.primaryModel = primaryModel;\r\n this.lastDocument.hasPrimary =\r\n primaryId &&\r\n (model === ClipperModel.AggiornamentoNormativo ||\r\n model === ClipperModel.NormativaVigente);\r\n if (primaryId) {\r\n var description = '';\r\n switch (primaryModel ? primaryModel : model) {\r\n case ClipperModel.NormativaVigente:\r\n description = 'Testo vigente';\r\n break;\r\n case ClipperModel.AggiornamentoNormativo:\r\n description = 'Testo storico';\r\n break;\r\n case ClipperModel.Scadenze:\r\n description = 'Scadenza';\r\n break;\r\n case ClipperModel.Coordinamento:\r\n description = 'Modifica';\r\n break;\r\n default:\r\n description = 'Collegamento';\r\n break;\r\n }\r\n this.lastDocument.primaryDescription = description;\r\n }\r\n this.lastDocument.secondaryId = secondaryId;\r\n this.lastDocument.isTrial = isTrial;\r\n\r\n // Handle expiring info\r\n this.lastDocument.expiringDescription = null;\r\n if (expiringInfo) {\r\n let parts = expiringInfo.split('#');\r\n if (parts.length > 0) {\r\n let parts2 = parts[0].split('|');\r\n if (parts2.length > 0)\r\n this.lastDocument.expiringDate = new Date(parts2[0]);\r\n if (parts2.length > 1) this.lastDocument.expiringInfo = parts2[1];\r\n if (parts2.length > 2)\r\n this.lastDocument.expiringInfo += '|' + parts2[2];\r\n }\r\n if (parts.length > 1) this.lastDocument.expiringDescription = parts[1];\r\n }\r\n\r\n // Set title\r\n this.title.set(this.lastDocument.title1\r\n ? this.lastDocument.title1\r\n : this.lastDocument.title2);\r\n\r\n // Get last document update\r\n this.clipperService.lastUpdate(this.lastDocument.id).subscribe(r => {\r\n if (r.success) {\r\n this.lastDocument.lastUpdate = r.value;\r\n }\r\n });\r\n\r\n // Notify navigation has completed\r\n this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_NAVIGATED, {\r\n document: this.lastDocument,\r\n });\r\n\r\n this.busy.set(false);\r\n }\r\n\r\n /**\r\n * goto previous document in history\r\n */\r\n protected back() {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage('{\"type\": \"back\"}', '*');\r\n }\r\n\r\n /**\r\n * Goto next document in history\r\n */\r\n protected forward() {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage('{\"type\": \"forward\"}', '*');\r\n }\r\n\r\n\r\n\r\n /**\r\n * Goto next relevant item\r\n */\r\n protected nextRelevant() {\r\n let i = this.relevants.hit + 1;\r\n if (i <= this.relevants.hits) {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage('{\"type\": \"relevant\", \"value\": \"next\"}', '*');\r\n this.relevants.hit++;\r\n }\r\n }\r\n\r\n /**\r\n * Goto previous relevant item\r\n */\r\n protected previousRelevant() {\r\n let i = this.relevants.hit - 1;\r\n if (i > 0) {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage(\r\n '{\"type\": \"relevant\", \"value\": \"previous\"}',\r\n '*'\r\n );\r\n this.relevants.hit--;\r\n }\r\n }\r\n\r\n /**\r\n * Goto a relevant item\r\n * @param item : the item to go to\r\n */\r\n protected gotoRelevant(item: ClipperDocumentAnchorInfo) {\r\n if (item.type === 20) {\r\n window.open(\r\n this.clipperService.serviceUri +\r\n \"/documents/render/item/?id=\" + item.documentId + \"&theme=\" + this.dialogData.theme,\r\n '_blank'\r\n );\r\n } else {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage(\r\n '{\"type\": \"relevant\", \"value\": \"' + item.uri + '\"}',\r\n '*'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Update relevant items\r\n */\r\n private updateRelevants() {\r\n if (\r\n !this.lastQuery ||\r\n this.lastQuery.length === 0 ||\r\n this.lastQuery === ' '\r\n ) {\r\n this.handleRelevantsPaneVisibility();\r\n } else {\r\n let params = new ClipperSearchParams();\r\n params.id = this.lastDocument.documentId ?? this.lastDocument.id;\r\n params.text = this.lastQuery;\r\n params.count = 1;\r\n this.clipperService\r\n .query(params)\r\n .subscribe(r => {\r\n if (!r.success) this.dialogService.error(r.message);\r\n else {\r\n let minimumScore = 0;\r\n if (r.value?.items && r.value?.items.length > 0) {\r\n r.value.items[0].anchors.forEach(n => {\r\n let score = n.score;\r\n if (score > 7) score -= 7;\r\n else if (score > 5) score -= 5;\r\n else if (score > 3) score -= 3;\r\n if (minimumScore > score) minimumScore = score;\r\n n.score = score;\r\n });\r\n this.relevants.minimumScore = minimumScore;\r\n this.relevants.items = r.value.items[0].anchors;\r\n this.hasRelevants.set(this.relevants.items?.length > 0);\r\n }\r\n this.handleRelevantsPaneVisibility();\r\n }\r\n });\r\n }\r\n }\r\n\r\n\r\n\r\n /**\r\n * Display document structure\r\n */\r\n protected index(documentId: string) {\r\n let d = this.dialogService.open(ClipperDocumentIndexComponent, {\r\n ariaLabel: 'indice documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: true,\r\n closeOnNavigation: false,\r\n data: {\r\n documentId: documentId,\r\n excludedTypes: null,\r\n multiple: false\r\n },\r\n minWidth: '375px',\r\n maxWidth: '600px',\r\n width: '99%',\r\n });\r\n d.componentInstance.done\r\n .subscribe((r: ClipperDocumentIndexDialogResult) => {\r\n const item = r.data.length > 0 ? r.data[0] : null;\r\n if (item) {\r\n if (item.documentId === documentId) {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage(\r\n '{\"type\": \"goto\", \"value\":\"' + item.uri + '\"}',\r\n '*'\r\n );\r\n } else {\r\n this.openDocument(item.documentId + '#' + item.uri,);\r\n }\r\n }\r\n\r\n d.close();\r\n });\r\n }\r\n\r\n /**\r\n * Get the id in a query string\r\n * @param url : the url to process\r\n * @param name : the optional id paramenter name. Default is 'id'\r\n * @returns : the id parame\r\n */\r\n private getId(url: string, name: string = 'id'): string {\r\n const start = url.lastIndexOf(name + '=') + 3;\r\n const end = url.indexOf('&', start);\r\n return url.substring(start, end);\r\n }\r\n\r\n /**\r\n * Preview a file if possible\r\n * @param url : the url to preview\r\n */\r\n private previewFile(url: string) {\r\n if (!url || url.length === 0)\r\n return; // Nothing to do\r\n // Get the id\r\n let id = this.getId(url);\r\n if (!id || id.length === 0)\r\n return; // Nothing to do\r\n // Create the url\r\n this.clipperService.newOTP(id).subscribe(\r\n r => {\r\n if (!r.success) this.dialogService.error(r.message);\r\n else if (!r.value.canPreview)\r\n // Donload manually\r\n location.href = url;\r\n else {\r\n this.dialogService.open(FilePreviewComponent, {\r\n panelClass: 'preview-panel',\r\n ariaLabel: 'anteprima',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: true,\r\n data: {\r\n url: url,\r\n embed: r.value.canEmbed\r\n },\r\n minWidth: '375px',\r\n maxWidth: '900px',\r\n width: '99%',\r\n height: '99%'\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Show document comment\r\n */\r\n protected showComment() {\r\n if (this.lastDocument?.bag[7] !== 'T') return;\r\n this.clipperService\r\n .comment(this.lastDocument?.documentId)\r\n .subscribe(r => {\r\n if (!r.success) {\r\n if (r.message === \"Il tuo abbonamento non consente di visualizzare i commenti alle norme.\")\r\n this.dialogService.error(\"Il servizio di <b>commenti alle norme</b> non è compreso nel tuo abbonamento, per maggiori informazioni rivolgersi all'agente commerciale di riferimento o inviare una mail a <a href='mailto:sales@arsedizioni.it' target='_blank'>sales@arsedizioni.it</a>.\", null, \"Attenzione\");\r\n else\r\n this.dialogService.error(r.message);\r\n } else {\r\n if (r.value && r.value.length > 1)\r\n this.dialogService.info(r.value.replace(/\\n/g, '<br>\\r\\n'), \"Commento\", \"Chiudi\", 700);\r\n else\r\n this.dialogService.info(\"Commento non più disponibile o in fase di revisione.\");\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Open an item\r\n * @param documentId : the document id\r\n * @param query: the current query or null\r\n * @param newWindow: true if the document must be open into a new window\r\n */\r\n override open(documentId: string, query: string | null | undefined = null, newWindow: boolean = false) {\r\n if (!newWindow) {\r\n if (this.opening) this.opening.emit({ id: documentId });\r\n else this.openDocument(documentId, query);\r\n } else window.open('/documento/' + documentId, '_blank');\r\n }\r\n\r\n /**\r\n * Open a document\r\n * @param documentId : the document id\r\n * @param query: the current query or null\r\n */\r\n private openDocument(documentId: string, query: string | null | undefined = null) {\r\n if (!documentId) return;\r\n ClipperDocumentsUtils.openDocument(\r\n this.dialogService,\r\n this.clipperService,\r\n documentId,\r\n query,\r\n this.dialogData.selectionMode,\r\n this.dialogData.theme\r\n );\r\n }\r\n\r\n /**\r\n * Browse document references\r\n * @param documentId : the document id\r\n * @param mode : the mode\r\n */\r\n override openReferences(\r\n documentId: string,\r\n mode: ClipperQueryReferencesMode = ClipperQueryReferencesMode.ReferencesIn,\r\n model: number = null,\r\n anchor: string = null,\r\n anchorTitle: string = null,\r\n update: boolean = true\r\n ) {\r\n let d = this.dialogService.open(ClipperReferencesComponent, {\r\n ariaLabel: 'riferimenti legati al documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: true,\r\n closeOnNavigation: false,\r\n data: {\r\n documentId: documentId ?? this.lastDocument?.documentId,\r\n mode: mode,\r\n model: model,\r\n anchor: anchor,\r\n anchorTitle: anchorTitle,\r\n update: update,\r\n },\r\n minWidth: '375px',\r\n maxWidth: '1000px',\r\n width: '99%',\r\n height: '99%',\r\n });\r\n d.afterClosed()\r\n .subscribe((r: ClipperReferenceDialogResult) => {\r\n if (r && r.documentId) {\r\n this.navigate(r.documentId);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Display a report\r\n * @param item\r\n */\r\n protected displayReport(item: ClipperDocumentInfo) {\r\n if (!item) return;\r\n if (item.model != ClipperModel.NormativaVigente && item.model != ClipperModel.Scadenze) {\r\n this.dialogService.info(\"Questa funzionalità non è disponibile per questo tipo di documento.\");\r\n return;\r\n }\r\n this.openReport(item.id, item.title1 ? item.title1 : item.title2);\r\n }\r\n\r\n /**\r\n * Checks if documents can be selected and returned as message\r\n */\r\n protected canSelect(): boolean {\r\n return this.selectionMode > 0 && this.lastDocument && (this.lastDocument?.model === ClipperModel.NormativaVigente || this.lastDocument?.model === ClipperModel.AggiornamentoNormativo)\r\n }\r\n\r\n /**\r\n * Send a message with current selection and close dialog\r\n */\r\n protected select() {\r\n if (this.lastDocument) {\r\n this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_SELECTED_INNER, [\r\n this.lastDocument,\r\n ]);\r\n this.changeDetector.markForCheck();\r\n this.close();\r\n }\r\n }\r\n\r\n}\r\n\r\n","<div class=\"clipper-document-fixed\">\r\n <div style=\"height:6px\">\r\n @if (busy()) {\r\n <mat-progress-bar style=\"z-index:11\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start start\" fxFill>\r\n <div fxFlex=\"*\" class=\"title-container\">\r\n <div class=\"large bold\">{{title()}}</div>\r\n @if (lastDocument && lastDocument?.lastUpdate) {\r\n <div style=\"padding-top: 5px;\">\r\n <div class=\"x-small accent bold uppercase\">\r\n AGGIORNATO A:\r\n {{lastDocument?.lastUpdate}}\r\n </div>\r\n </div>\r\n }\r\n @if (lastDocument && (lastDocument?.expiringDescription || lastDocument?.validityInfo)) {\r\n <div style=\"padding-top: 5px;\">\r\n @if (lastDocument?.expiringDescription) {\r\n <div class=\"x-small accent-low bold uppercase\">\r\n {{lastDocument?.expiringDescription}}</div>\r\n }\r\n @if (lastDocument?.validityInfo) {\r\n <div class=\"x-small error bold uppercase\"><b>Attenzione!</b>\r\n {{lastDocument?.validityInfo}}</div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n @if (canSelect()) {\r\n <div fxFlex=\"170px\" fxFlex.lt-md=\"58px\">\r\n <button fxHide.lt-md fxFlexAlign=\"center\" type=\"button\" color=\"primary\" mat-flat-button (click)=\"select()\"\r\n class=\"clipper-selection-button\" style=\"margin-top: 8px;\">\r\n <span class=\"small uppercase\">Usa selezione</span>\r\n </button>\r\n <button fxHide.gt-sm fxFlexAlign=\"center\" type=\"button\" color=\"primary\" mat-icon-button (click)=\"select()\"\r\n class=\"clipper-selection-icon-button\" matTooltip=\"Usa selezione\" aria-label=\"'Usa la selezione'\"\r\n style=\"margin-top: 4px;\">\r\n <mat-icon>check</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n <div fxFlex=\"164px\" fxFlex.lt-md=\"48px\" fxLayoutAlign=\"end\">\r\n <div class=\"dialog-close\">\r\n <button fxHide.lt-md fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Indietro\"\r\n aria-label=\"Indietro\" (click)=\"back()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n <button fxHide.lt-md fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Avanti\" aria-label=\"Avanti\"\r\n (click)=\"forward()\">\r\n <mat-icon>arrow_forward</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\r\n (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row wrap \" fxFill fxLayoutAlign=\"space-between center\" style=\"padding: 10px 10px 10px 15px;\">\r\n <div fxFlex.xs=\"100\">\r\n @if (lastDocument?.model === 9) {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra indice'\"\r\n (click)=\"index(lastDocument?.documentId)\">\r\n Indice\r\n </button>\r\n }\r\n @if (lastDocument?.bag && (lastDocument?.bag[1] ==='T' || lastDocument?.bag[3] ==='T')) {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" mat-button matTooltip=\"Collegamenti\"\r\n [attr.aria-label]=\"'Collegamenti al documento'\" [matMenuTriggerFor]=\"menuLinks\">\r\n Collegamenti\r\n </button>\r\n }\r\n <mat-menu #menuLinks=\"matMenu\">\r\n @if (lastDocument?.bag && lastDocument?.bag[1] ==='T') {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra documenti richiamati'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[3] ==='T') {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra documenti che richiamano'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[2] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra juris'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra modifiche subite'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 3)\">\r\n Modifiche subite\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] !=='T' && lastDocument?.bag[6] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra modifiche apportate'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 5)\">\r\n Modifiche apportate\r\n </button>\r\n }\r\n </mat-menu>\r\n @if (lastDocument?.hasPrimary) {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" mat-button\r\n [attr.aria-label]=\"'Mostra documento primario'\" (click)=\"navigate(lastDocument?.primaryId)\">\r\n {{lastDocument?.primaryDescription}}\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[2] ==='T') {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" fxHide.lt-md mat-button\r\n [attr.aria-label]=\"'Mostra juris'\" (click)=\"openReferences(lastDocument?.documentId, 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] === 'T') {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" fxHide.lt-md mat-button\r\n [attr.aria-label]=\"'Mostra modifiche subite'\" (click)=\"openReferences(lastDocument?.documentId, 3)\">\r\n Modifiche subite\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] !== 'T' && lastDocument?.bag[6] === 'T') {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" fxHide.lt-md mat-button\r\n [attr.aria-label]=\"'Mostra modifiche apportate'\" (click)=\"openReferences(lastDocument?.documentId, 5)\">\r\n Modifiche apportate\r\n </button>\r\n }\r\n @if (lastDocument?.secondaryId) {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" mat-button\r\n [attr.aria-label]=\"'Mostra documento secondario'\" (click)=\"navigate(lastDocument?.secondaryId)\">\r\n Testo storico\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[7] === 'T') {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra commento'\"\r\n (click)=\"showComment()\">\r\n Commento\r\n </button>\r\n }\r\n </div>\r\n <div fxFlex.xs=\"100\" fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"center\">\r\n @if (hasRelevants() && relevants.hits) {\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\">\r\n <div fxFlexAlign=\"center\" class=\"small item-greyed\" style=\"margin-left:20px; margin-right: 5px\"\r\n matTooltip=\"Parole evidenziate\">{{relevants.hit}}\r\n di {{relevants.hits}}</div>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button [attr.aria-label]=\"'Vai alla parola precedente'\"\r\n (click)=\"previousRelevant()\" matTooltip=\"Parola precedente\" [disabled]=\"relevants.hit <= 1\">\r\n <mat-icon>chevron_left</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button [attr.aria-label]=\"'Vai alla prossima parola'\"\r\n (click)=\"nextRelevant()\" matTooltip=\"Prossima parola\" [disabled]=\"relevants.hit >= relevants.hits\">\r\n <mat-icon>chevron_right</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azioni sul documento\"\r\n [attr.aria-label]=\"'Azioni da eseguire sul documento'\" [matMenuTriggerFor]=\"menuActions\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #menuActions=\"matMenu\">\r\n <ng-template matMenuContent let-item=\"lastDocument\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"lastDocument\" [canPrint]=\"true\" [canFind]=\"true\" [isReadable]=\"false\"\r\n [isLawInForce]=\"lastDocument?.model === 9\" selectionSource=\"none\">\r\n </clipper-document-menu>\r\n </ng-template> \r\n </mat-menu>\r\n @if (hasRelevants() && relevants.items && relevantsPane && (!relevantsPane.opened || relevantsPaneClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Rilevanza\" aria-label=\"'Rilevanza'\"\r\n (click)=\"toggleRelevantsPane()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"clipper-document-scrollable\">\r\n <mat-drawer-container class=\"fill\" [hasBackdrop]=\"[relevantsPaneHasBackdrop]\">\r\n <mat-drawer #relevantsPane position=\"end\" class=\"drawer-small drawer-with-loader\" opened=\"false\">\r\n @if (relevantsBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (relevantsBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"56px\" class=\"title-container-with-loader\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill>\r\n <div class=\"title\">Rilevanza</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button mat-icon-button (click)=\"toggleRelevantsPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"relevants-container scroll-auto\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div>\r\n <p>Parti del documento più significative per la ricerca di <span class='word-hit'>{{lastQuery}}</span>\r\n </p>\r\n </div>\r\n <div fxFlex=\"*\">\r\n <nav class=\"relevants-items\">\r\n <ul>\r\n @for (item of relevants.items; track $index) {\r\n <li class=\"small\" (click)=\"gotoRelevant(item)\" [attr.aria-label]=\"item.title\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start start\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"*\">\r\n {{item.title}}\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (item.score > 1.2) {\r\n <mat-icon style='font-size:x-small; height: 10px; width:10px' color=\"primary\"\r\n matTooltip=\"Molto rilevante\">thumb_up_alt</mat-icon>\r\n }\r\n </div>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n </nav>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div class=\"fill scroll-hidden\">\r\n <iframe id=\"clipper-document-iframe\" class=\"iframe\" [src]=\"url() | safeUrl\"></iframe>\r\n </div>\r\n </mat-drawer-container>\r\n</div>","import { MatDialogRef } from '@angular/material/dialog';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport {\r\n ClipperService\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ClipperDocumentComponent } from './ui/document/document.component';\r\nimport { ThemeType } from '@arsedizioni/ars-utils/core';\r\n\r\nexport class ClipperDocumentsUtils {\r\n /**\r\n * Open a document\r\n * @param dialogService: the dialog service\r\n * @param clipperService: the clipper service\r\n * @param documentId : the document id \r\n * @param query : the query for highlight\r\n * @param selectionMode : the selection mode (1 = single, 2 = multiple, 3 = any selection)\r\n * @param theme: the theme to use. Default is system\r\n */\r\n static openDocument(\r\n dialogService: DialogService,\r\n clipperService: ClipperService,\r\n documentId: string,\r\n query: string | null | undefined = null,\r\n selectionMode: number | null = null,\r\n theme: ThemeType | null = null): MatDialogRef<ClipperDocumentComponent> | null {\r\n\r\n if (!clipperService.loggedIn()) {\r\n dialogService.error(\"Clipper non è disponibile in questo momento. Verifica la connessione.\");\r\n return null;\r\n }\r\n if (!documentId) {\r\n dialogService.error(\"Documento non valido.\");\r\n return null;\r\n }\r\n return dialogService.open(ClipperDocumentComponent, {\r\n ariaLabel: 'documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: false,\r\n data: {\r\n id: documentId,\r\n query: query,\r\n selectionMode: selectionMode,\r\n theme: theme\r\n },\r\n minWidth: '375px',\r\n maxWidth: '1400px',\r\n width: '99%',\r\n height: '99%'\r\n });\r\n }\r\n\r\n /**\r\n * Extract document title\r\n * @param title : the full document title\r\n */\r\n static parseDocumentTitle(title: string) {\r\n const p = title?.indexOf('[');\r\n if (p !== -1) {\r\n return title.substring(0, p);\r\n }\r\n return title;\r\n }\r\n\r\n}","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './search-free-text-help.component.html',\r\n styleUrls: ['./search-free-text-help.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [MatDialogTitle, MatDialogContent, MatDialogActions, FlexModule, MatButtonModule, MatDialogClose]\r\n})\r\nexport class ClipperSearchFreeTextHelpComponent{\r\n}\r\n","<h2 mat-dialog-title>Come effettuare la ricerca in testo libero</h2>\r\n<div mat-dialog-content>\r\n <p>Normalmente viene sempre effettuata una ricerca per frase: tutte le parole specificate debbono essere\r\n \"ragionevolmente vicine\" (entro 5 parole) l'una dall'altra.</p>\r\n <p>La ricerca per frase di solito produce i risultati più rilevanti.</p>\r\n <p>Tuttavia è possibile istruire Clipper per eseguire ricerche differenti e più complesse.</p>\r\n <p>Tutte gli elementi che compongono la stringa di ricerca devono essere separati da virgola.</p>\r\n <ul>\r\n <li>Se un elemento è composto da più parole è una frase, altrimenti una parola</li>\r\n <li>Aggiungendo un <b style=\"font-size: 20px\">+</b> davanti all'elemento, l'elemento <b>dovrà per forza</b> essere presente nel documento\r\n </li>\r\n <li>Aggiungendo un <b style=\"font-size: 20px\">-</b> davanti all'elemento, l'elemento <b>non dovrà</b> essere presente nel documento</li>\r\n </ul>\r\n <p>Ecco alcuni esempi:</p>\r\n <ul>\r\n <li><b>serbatoi interrati</b>: sarà effettuata una ricerca per la frase \"serbatoi interrati\"</li>\r\n <li><b>serbatoi, interrati</b>: sarà effettuata una ricerca per le parole \"serbatoi\" e \"interrati\"; il risultato sarà tutti i documenti che contengono una o l'altra parola.</li>\r\n <li><b>serbatoi, +interrati</b>: sarà effettuata una ricerca per le parole \"serbatoi\" e \"interrati\"; il risultato sarà tutti i documenti che contengono necessariamente \"interrati\" ed eventualmente \"serbatoi\".</li>\r\n <li><b>serbatoi, -interrati</b>: sarà effettuata una ricerca per le parole \"serbatoi\" e \"interrati\"; il risultato sarà tutti i documenti che contengono necessariamente \"interrati\" ma non \"serbatoi\".</li>\r\n <li><b>\"serbatoi interrati\", -gas</b>: sarà effettuata una ricerca per la frase \"serbatoi interrati\" e per la parola \"gas\"; il risultato sarà tutti i documenti che contengono la frase \"serbatoi interrati\" ma non la parola \"gas\".</li>\r\n </ul>\r\n <p>Saranno mostrati per primi (più rilevanti) i documenti che rispettano in pieno la condizione.</p>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" fxFill >\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">Chiudi</button>\r\n </div>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Output, inject } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\n\r\nexport interface SearchFreeTextQueryParams {\r\n query: string;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './search-free-text-query-builder.component.html',\r\n styleUrls: ['./search-free-text-query-builder.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, FormsModule, FlexModule, MatFormFieldModule, MatInputModule, \r\n MatButtonModule, MatIconModule, MatDialogActions, MatDialogClose]\r\n})\r\nexport class ClipperSearchFreeTextQueryBuilderComponent {\r\n @Output() done = new EventEmitter<SearchFreeTextQueryParams>();\r\n\r\n private dialogService = inject(DialogService);\r\n\r\n protected queryAnd: string = '';\r\n protected queryOr: string = '';\r\n protected queryNot: string = '';\r\n protected queryPhrase: string = '';\r\n protected queryStart: string = '';\r\n\r\n /**\r\n * Clear\r\n */\r\n protected clear() {\r\n this.queryAnd = null;\r\n this.queryOr = null;\r\n this.queryNot = null;\r\n this.queryPhrase = null;\r\n this.queryStart = null;\r\n }\r\n\r\n /**\r\n * Submit\r\n */\r\n protected ok() {\r\n let query = '';\r\n // Phrase\r\n if (this.queryPhrase.length > 0) {\r\n query += ' \"';\r\n query += this.queryPhrase.replace('\"', '').trim();\r\n query += '\" ';\r\n }\r\n // Or\r\n if (this.queryOr.length > 0) {\r\n let parts = this.queryOr.split(',');\r\n for (let i = 0; i < parts.length; i++) {\r\n if (query.length > 0) query += ', ';\r\n query += parts[i].replace('\"', '').trim();\r\n }\r\n query += ' ';\r\n }\r\n // And\r\n if (this.queryAnd.length > 0) {\r\n let parts = this.queryAnd.split(',');\r\n for (let i = 0; i < parts.length; i++) {\r\n if (query.length > 0) query += ', +';\r\n query += parts[i].replace('\"', '').trim();\r\n }\r\n query += ' ';\r\n }\r\n // Start with\r\n if (this.queryStart.length > 0) {\r\n if (query.length > 0) query += ', +';\r\n query += this.queryStart.replace('\"', '').trim();\r\n query += '*';\r\n query += ' ';\r\n }\r\n // Not\r\n if (this.queryNot.length > 0) {\r\n if (query.length === 0) {\r\n // Invalid query\r\n this.dialogService.error(\r\n \"L'operatore di esclusione funziona solo se prima è stato inserito un valore in almeno uno degli altri quattro campi.\"\r\n );\r\n return;\r\n }\r\n let parts = this.queryNot.split(',');\r\n for (let i = 0; i < parts.length; i++) {\r\n if (query.length > 0) query += ', -';\r\n query += parts[i].replace('\"', '').trim();\r\n }\r\n query += ' ';\r\n }\r\n\r\n\r\n // Notify\r\n if (query.length > 0) this.done.emit({ query: query });\r\n }\r\n}\r\n","<h2 mat-dialog-title>Trova gli elementi che contengono...</h2>\r\n<div mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <div fxLayout=\"column\">\r\n <mat-form-field>\r\n <mat-label>Questa esatta parola o frase</mat-label>\r\n <input matInput name=\"queryPhrase\" [(ngModel)]=\"queryPhrase\" maxlength=\"200\" />\r\n @if (queryPhrase) {\r\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryPhrase=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Tutte queste parole</mat-label>\r\n <input matInput name=\"queryAnd\" [(ngModel)]=\"queryAnd\" maxlength=\"200\" />\r\n @if (queryAnd) {\r\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryAnd=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n }\r\n <mat-hint>Separate da virgola</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Una qualunque di queste parole</mat-label>\r\n <input matInput name=\"queryOr\" [(ngModel)]=\"queryOr\" maxlength=\"200\" />\r\n @if (queryOr) {\r\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryOr=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n }\r\n <mat-hint>Separate da virgola</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Parole che iniziano con</mat-label>\r\n <input matInput name=\"queryStart\" [(ngModel)]=\"queryStart\" maxlength=\"200\" />\r\n @if (queryStart) {\r\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryStart=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Nessuna qualunque di queste parole</mat-label>\r\n <input matInput name=\"queryNot\" [(ngModel)]=\"queryNot\" maxlength=\"200\" />\r\n @if (queryNot) {\r\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryNot=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n }\r\n <mat-hint>Separate da virgola. L'operatore di esclusione funziona solo se prima è stato inserito un valore in\r\n almeno uno degli altri quattro campi. </mat-hint>\r\n </mat-form-field>\r\n </div>\r\n </form>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\" fxLayoutAlign=\"start\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">Pulisci</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" (click)=\"ok()\">Ok</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">Annulla</button>\r\n </div>\r\n </div>\r\n</div>","import { ChangeDetectionStrategy, Component, EventEmitter, OnDestroy, OnInit, Output, ViewChild, inject, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatOptionModule } from '@angular/material/core';\r\nimport { MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER, MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n ClipperAuthors,\r\n ClipperChannel,\r\n ClipperChannels, ClipperModule,\r\n ClipperRegions,\r\n ClipperSearchParams,\r\n ClipperSearchUtils, ClipperSectorTypes, ClipperSectors, ClipperService, ClipperSources, SectorInfo\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { DateInterval, DateIntervalChangeDirective, NameValueItem, SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport { ChipsSelectorComponent } from '@arsedizioni/ars-utils/ui.application';\r\nimport { Subject } from 'rxjs';\r\nimport { ClipperSearchFreeTextHelpComponent } from '../search-free-text-help/search-free-text-help.component';\r\nimport { ClipperSearchFreeTextQueryBuilderComponent, SearchFreeTextQueryParams } from '../search-free-text-query-builder/search-free-text-query-builder.component';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\n\r\nexport interface ClipperSearchDialogData extends ClipperSearchParams {\r\n displayMode?: 'laws' | 'news' | 'module' | 'simple';\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './search-dialog.component.html',\r\n styleUrls: ['./search-dialog.component.scss'],\r\n providers: [\r\n MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER\r\n ],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FlexLayoutModule,\r\n FormsModule,\r\n MatDialogTitle,\r\n MatDialogContent,\r\n MatCheckboxModule,\r\n MatFormFieldModule,\r\n MatExpansionModule,\r\n MatSelectModule,\r\n MatOptionModule,\r\n MatTooltipModule,\r\n MatInputModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n MatDatepickerModule,\r\n DateIntervalChangeDirective,\r\n MatDialogActions,\r\n MatDialogClose,\r\n MatDialogTitle,\r\n MatDividerModule,\r\n MatSlideToggleModule,\r\n ChipsSelectorComponent,\r\n SafeHtmlPipe,\r\n ],\r\n})\r\nexport class ClipperSearchDialogComponent implements OnInit, OnDestroy {\r\n @ViewChild('okButton') okButton!: HTMLButtonElement;\r\n @Output() done = new EventEmitter<ClipperSearchParams>();\r\n\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n private clipperService = inject(ClipperService);\r\n private dialogService = inject(DialogService);\r\n protected dialogData: ClipperSearchDialogData = inject(MAT_DIALOG_DATA) ?? { displayMode: 'simple' };\r\n protected params: ClipperSearchParams = new ClipperSearchParams();\r\n protected readonly modulesEnum: typeof ClipperModule = ClipperModule;\r\n protected sectors: SectorInfo[] = ClipperSectors.filter((n) => n.group === 'S').map((n) => {\r\n return { name: n.shortName ?? n.name, value: n.value };\r\n });\r\n protected isLaws = (): boolean => {\r\n return (this.dialogData.displayMode === \"laws\" ||\r\n (this.dialogData.displayMode === \"module\" && this.dialogData.module === ClipperModule.NormativaVigente) ||\r\n (this.dialogData.displayMode === \"module\" && this.dialogData.module === ClipperModule.GazzetteBollettiniEFontiDiverse));\r\n };\r\n protected isNews = (): boolean => {\r\n return (this.dialogData.displayMode === \"news\" ||\r\n (this.dialogData.displayMode === \"module\" && this.dialogData.module === ClipperModule.News) ||\r\n (this.dialogData.displayMode === \"module\" && this.dialogData.module === ClipperModule.Approfondimenti));\r\n };\r\n protected isModule = (module: ClipperModule): boolean => {\r\n return this.dialogData.displayMode === \"module\" && this.dialogData.module === module;\r\n }\r\n protected hasRegions = (): boolean => {\r\n return (this.params.sectors?.filter(n => n.value === 'LR').length ?? 0) > 0;\r\n };\r\n protected hasAuthorOrType = (): boolean => {\r\n return this.params.sectors?.length === 1 && this.isLaws();\r\n };\r\n protected regions: NameValueItem<string>[] = [...ClipperRegions];\r\n protected channels: NameValueItem<ClipperChannel>[] = [...ClipperChannels];\r\n protected sources: NameValueItem<string>[] | null = [...ClipperSources];\r\n protected authors = signal<NameValueItem<string>[]>([]);\r\n protected types = signal<NameValueItem<string>[]>([]);\r\n protected topics = signal<NameValueItem<string>[]>([]);\r\n interval: DateInterval = new DateInterval();\r\n sourceInterval: DateInterval = new DateInterval();\r\n\r\n ngOnInit(): void {\r\n if (this.dialogData) {\r\n if (this.dialogData.displayMode === 'simple') {\r\n this.params.text = this.dialogData.text;\r\n this.params.titleOnly = this.dialogData.titleOnly;\r\n this.params.number = this.dialogData.number;\r\n this.params.year = this.dialogData.year;\r\n this.params.fromDate = this.dialogData.fromDate;\r\n this.params.toDate = this.dialogData.toDate;\r\n this.interval = new DateInterval(this.params.fromDate, this.params.toDate);\r\n } else if (this.isLaws()) {\r\n this.params.text = this.dialogData.text;\r\n this.params.titleOnly = this.dialogData.titleOnly;\r\n this.params.number = this.dialogData.number;\r\n this.params.year = this.dialogData.year;\r\n this.params.fromDate = this.dialogData.fromDate;\r\n this.params.toDate = this.dialogData.toDate;\r\n this.interval = new DateInterval(this.params.fromDate, this.params.toDate);\r\n this.params.source = this.dialogData.source;\r\n this.params.sourceNumber = this.dialogData.sourceNumber;\r\n this.params.sourceYear = this.dialogData.sourceYear;\r\n this.params.sourceFromDate = this.dialogData.sourceFromDate;\r\n this.params.sourceToDate = this.dialogData.sourceToDate;\r\n this.sourceInterval = new DateInterval(this.params.sourceFromDate, this.params.sourceToDate);\r\n this.params.sectors = this.dialogData.sectors;\r\n this.params.authors = this.dialogData.authors;\r\n this.params.type = this.dialogData.type;\r\n this.params.topic = this.dialogData.topic;\r\n this.params.showCommentedDocumentsOnly = this.dialogData.showCommentedDocumentsOnly;\r\n } else if (this.isNews()) {\r\n this.params.text = this.dialogData.text;\r\n this.params.titleOnly = this.dialogData.titleOnly;\r\n this.params.year = this.dialogData.year;\r\n this.params.fromDate = this.dialogData.fromDate;\r\n this.params.toDate = this.dialogData.toDate;\r\n this.interval = new DateInterval(this.params.fromDate, this.params.toDate);\r\n this.params.sectors = this.dialogData.sectors;\r\n } else if (this.dialogData.displayMode === 'module') {\r\n switch (this.dialogData.module) {\r\n case ClipperModule.Giurisprudenza:\r\n this.params.text = this.dialogData.text;\r\n this.params.titleOnly = this.dialogData.titleOnly;\r\n this.params.number = this.dialogData.number;\r\n this.params.year = this.dialogData.year;\r\n this.params.fromDate = this.dialogData.fromDate;\r\n this.params.toDate = this.dialogData.toDate;\r\n this.interval = new DateInterval(this.params.fromDate, this.params.toDate);\r\n this.params.sectors = this.dialogData.sectors;\r\n break;\r\n case ClipperModule.ModificheAbrogazioniERinvii:\r\n this.params.changeReason = this.dialogData.changeReason;\r\n this.params.changedNumber = this.dialogData.changedNumber;\r\n this.params.changedYear = this.dialogData.changedYear;\r\n this.params.changedTitle = this.dialogData.changedTitle;\r\n this.params.modifierNumber = this.dialogData.modifierNumber;\r\n this.params.modifierYear = this.dialogData.modifierYear;\r\n this.params.modifierTitle = this.dialogData.modifierTitle;\r\n this.params.sectors = this.dialogData.sectors;\r\n break;\r\n default:\r\n this.params.text = this.dialogData.text;\r\n this.params.titleOnly = this.dialogData.titleOnly;\r\n this.params.year = this.dialogData.year;\r\n this.params.fromDate = this.dialogData.fromDate;\r\n this.params.toDate = this.dialogData.toDate;\r\n this.interval = new DateInterval(this.params.fromDate, this.params.toDate);\r\n break;\r\n }\r\n }\r\n\r\n }\r\n\r\n if (this.isLaws()) {\r\n if (!this.clipperService.loggedIn()) return;\r\n this.clipperService.getTopics()\r\n .subscribe(r => {\r\n if (r.success) {\r\n let name = '';\r\n r.value.forEach(n => {\r\n name = '';\r\n (n.value.match(/./g) || []).forEach(() => {\r\n name += ' ';\r\n });\r\n name += n.value + ' - ' + n.name;\r\n n.header = name;\r\n });\r\n this.topics.set(r.value);\r\n }\r\n });\r\n\r\n if (this.hasAuthorOrType()) {\r\n this.sectorsChanged();\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n\r\n /**\r\n * Updates other lists when sectors changes\r\n */\r\n sectorsChanged() {\r\n // Reset authors and types\r\n this.params.authors = [];\r\n this.params.type = null;\r\n if (this.hasAuthorOrType()) {\r\n let authors: NameValueItem<string>[] = [];\r\n ClipperAuthors.forEach(n => {\r\n if (n.sectorId === this.params.sectors[0].value) {\r\n authors.push(n);\r\n }\r\n }); \r\n let types: NameValueItem<string>[] = [];\r\n ClipperSectorTypes.forEach(n => {\r\n if (n.parentValue === this.params.sectors[0].value) {\r\n types.push(n);\r\n }\r\n });\r\n if (types.length == 0) {\r\n types = [...ClipperSectorTypes];\r\n }\r\n this.authors.set(authors);\r\n this.types.set(types);\r\n }\r\n }\r\n\r\n /**\r\n * Clear search\r\n */\r\n protected clear() {\r\n ClipperSearchUtils.clear(this.params);\r\n this.interval.clear();\r\n this.sourceInterval.clear();\r\n this.sectorsChanged();\r\n }\r\n\r\n\r\n /**\r\n * Show free text help\r\n */\r\n protected help() {\r\n this.dialogService.open(ClipperSearchFreeTextHelpComponent, {\r\n ariaLabel: 'informazioni ricerca',\r\n autoFocus: false,\r\n restoreFocus: true,\r\n disableClose: false,\r\n minWidth: '375px',\r\n maxWidth: '800px',\r\n width: '99%',\r\n });\r\n\r\n }\r\n /**\r\n * Compose a free text search query\r\n */\r\n protected compose() {\r\n const d = this.dialogService.open(ClipperSearchFreeTextQueryBuilderComponent, {\r\n ariaLabel: 'costruisci ricerca',\r\n autoFocus: false,\r\n restoreFocus: true,\r\n disableClose: false,\r\n minWidth: '375px',\r\n maxWidth: '600px',\r\n width: '99%'\r\n });\r\n d.componentInstance.done\r\n .subscribe((r: SearchFreeTextQueryParams) => {\r\n this.params.text = r.query;\r\n // Finished\r\n d.close();\r\n });\r\n }\r\n\r\n /**\r\n * Submit search\r\n */\r\n protected ok() {\r\n this.okButton.focus();\r\n if (this.params.text) {\r\n this.params.text = ClipperSearchUtils.normalizeTextQuery(this.params.text);\r\n }\r\n if (this.interval) {\r\n this.params.fromDate = this.interval.from;\r\n this.params.toDate = this.interval.to;\r\n }\r\n if (this.sourceInterval) {\r\n this.params.sourceFromDate = this.sourceInterval.from;\r\n this.params.sourceToDate = this.sourceInterval.to;\r\n }\r\n this.done.emit(this.params);\r\n }\r\n\r\n /**\r\n * Check if a block of expandable options has a filter on\r\n * @param block : the block id\r\n * @returns true if at least a value is set\r\n */\r\n hasFilter(block: 'source' | 'other' | 'modifier'): boolean {\r\n if (block === 'source') {\r\n return this.params.sourceNumber != null ||\r\n this.params.sourceYear != null ||\r\n this.params.source != null ||\r\n this.sourceInterval.from != null;\r\n } else if (block === 'other') {\r\n if (!this.isModule(ClipperModule.ModificheAbrogazioniERinvii)) {\r\n return this.params.sourceNumber != null ||\r\n this.params.author != null ||\r\n this.params.type != null ||\r\n this.params.topic != null;\r\n } else {\r\n return this.params.changeReason != null;\r\n }\r\n } else if (block === 'modifier') {\r\n return this.params.modifierNumber != null ||\r\n this.params.modifierYear != null ||\r\n this.params.modifierTitle != null;\r\n }\r\n return false;\r\n }\r\n\r\n}\r\n","<h2 mat-dialog-title>Ricerca</h2>\r\n<div mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <mat-accordion multi displayMode=\"flat\">\r\n @if(isLaws() || isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Settori\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Settori\"\r\n [options]=\"sectors\" (changed)=\"sectorsChanged()\" />\r\n @if(hasRegions())\r\n {\r\n <mat-divider style=\"padding-top: 8px; margin-top:8px\"></mat-divider>\r\n <chips-selector mode=\"collapsed\" [(ngModel)]=\"params.authors\" [multiple]=\"true\" name=\"authors\"\r\n label=\"Tutte le regioni\" [options]=\"regions\" />\r\n }\r\n </mat-expansion-panel>\r\n } @else if(isNews()) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Tipologia\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Tipologia\"\r\n [options]=\"sectors\" />\r\n </mat-expansion-panel>\r\n }\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if (isLaws() || isModule(modulesEnum.Giurisprudenza)) {\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input #filterByNumber=\"matInput\" matInput maxlength=\"10\" [(ngModel)]=\"params.number\" name=\"number\" />\r\n @if (params.number) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.number = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.year\" name=\"year\" />\r\n @if (params.year) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.year = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (isLaws() || !isModule(modulesEnum.ScadenzeESegnalazioni)) {\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Testo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.text\" name=\"text\" />\r\n @if (params.text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.text = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix matTooltip=\"Opzioni\" aria-label=\"Opzioni\"\r\n [matMenuTriggerFor]=\"textOptionsMenu\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-form-field>\r\n <div>\r\n <div>\r\n <mat-slide-toggle [(ngModel)]=\"params.titleOnly\" name=\"titleOnly\">Cerca solo nel\r\n titolo</mat-slide-toggle>\r\n </div>\r\n @if(isLaws()) {\r\n <div style=\"padding-top:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"params.showCommentedDocumentsOnly\" name=\"showCommentedDocumentsOnly\"> Mostra\r\n solo norme con commenti</mat-slide-toggle>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n @if(isLaws()) {\r\n <mat-expansion-panel [expanded]=\"hasFilter('source')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Fonte\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.sourceNumber\" name=\"sourceNumber\" />\r\n @if (params.sourceNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.sourceYear\"\r\n name=\"sourceYear\" />\r\n @if (params.sourceYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker2\">\r\n <input matStartDate [(ngModel)]=\"sourceInterval.from\" [dateIntervalChange]=\"sourceInterval\"\r\n #rangeFrom2=\"ngModel\" name=\"rangeFrom2\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"sourceInterval.to\" [dateIntervalChange]=\"sourceInterval\" [end]=\"true\"\r\n #rangeTo2=\"ngModel\" name=\"rangeTo2\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (sourceInterval.from || sourceInterval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"sourceInterval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker2></mat-date-range-picker>\r\n @if (rangeFrom2.invalid || rangeTo2.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.source\" name=\"source\">\r\n @for (s of sources; track $index) {\r\n <mat-option [value]=\"s.value\" [matTooltip]=\"s.name\">\r\n {{s.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if(isLaws()) {\r\n @if(!hasRegions()) {\r\n <mat-form-field>\r\n <mat-label>Autore</mat-label>\r\n <mat-select [(ngModel)]=\"params.author\" name=\"author\">\r\n @for (a of authors(); track $index) {\r\n <mat-option [value]=\"a.value\" [matTooltip]=\"a.name\">\r\n {{a.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Tipo documento</mat-label>\r\n <mat-select [(ngModel)]=\"params.type\" name=\"type\">\r\n @for (t of types(); track $index) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <mat-select [(ngModel)]=\"params.topic\" name=\"topic\">\r\n @for (t of topics(); track $index) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n </mat-expansion-panel>\r\n\r\n } @else if(isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificato\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.changedNumber\" name=\"changedNumber\"\r\n #filterByChangeNumber=\"matInput\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.changedYear\"\r\n name=\"changedYear\" />\r\n @if (params.changedYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.changedTitle\" name=\"changedTitle\" />\r\n @if (params.changedTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('modifier')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificante\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.modifierNumber\" name=\"modifierNumber\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.modifierYear\"\r\n name=\"modifierYear\" />\r\n @if (params.modifierYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.modifierTitle\" name=\"modifierTitle\" />\r\n @if (params.modifierTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <mat-form-field>\r\n <mat-label>Motivo</mat-label>\r\n <mat-select [(ngModel)]=\"params.changeReason\" name=\"changeReason\">\r\n <mat-option>Tutti</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n }\r\n </mat-accordion>\r\n </form>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">Pulisci</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" #okButton [disabled]=\"f.form.invalid\" (click)=\"ok()\">Trova</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">Chiudi</button>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-menu #textOptionsMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"compose()\">\r\n <mat-icon>build</mat-icon>Componi\r\n </button>\r\n <button mat-menu-item (click)=\"help()\">\r\n <mat-icon>help</mat-icon>Come usare la ricerca in testo libero\r\n </button>\r\n</mat-menu>","import { Breakpoints } from '@angular/cdk/layout';\r\nimport { NgClass } from '@angular/common';\r\nimport { AfterViewInit, ChangeDetectionStrategy, Component, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER } from '@angular/material/datepicker';\r\nimport { MAT_DIALOG_DATA, MatDialogContent, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatDrawer, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n ClipperAuthors,\r\n ClipperDocumentChangeReasons,\r\n ClipperMessages,\r\n ClipperModel,\r\n ClipperModels,\r\n ClipperSearchFacetsSnapshot,\r\n ClipperSearchParams,\r\n ClipperSearchResult,\r\n ClipperSearchUtils,\r\n ClipperSectorTypes,\r\n ClipperSectors,\r\n ClipperSelectionMode,\r\n ClipperSort,\r\n ClipperSources\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { SelectableModel, SystemUtils, ThemeType } from '@arsedizioni/ars-utils/core';\r\nimport { fromEvent } from 'rxjs';\r\nimport { debounceTime, takeUntil } from 'rxjs/operators';\r\nimport { ClipperDocumentsUtils } from '../../documents';\r\nimport { ClipperDocumentMenuComponent } from '../document-menu/document-menu.component';\r\nimport { ClipperSearchDialogComponent } from '../search-dialog/search-dialog.component';\r\nimport { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';\r\nimport { ClipperSearchFreeTextHelpComponent } from '../search-free-text-help/search-free-text-help.component';\r\nimport { ClipperSearchFreeTextQueryBuilderComponent, SearchFreeTextQueryParams } from '../search-free-text-query-builder/search-free-text-query-builder.component';\r\nimport { ClipperSearchResultItemComponent } from '../search-result-item/search-result-item.component';\r\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\n\r\nexport interface ClipperBrowserDialogData {\r\n selectionMode?: ClipperSelectionMode | null,\r\n selectableModels?: number[] | null,\r\n initialModel?: number | null,\r\n theme?: ThemeType | null\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './browser-dialog.component.html',\r\n styleUrls: ['./browser-dialog.component.scss'],\r\n providers: [\r\n MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n FlexLayoutModule,\r\n MatTooltipModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatBadgeModule,\r\n MatTabsModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n FormsModule,\r\n MatCheckboxModule,\r\n MatMenuModule,\r\n MatDividerModule,\r\n ClipperDocumentMenuComponent,\r\n MatDialogContent,\r\n MatSidenavModule,\r\n MatProgressBarModule,\r\n ClipperSearchFacetsComponent,\r\n NgClass,\r\n ClipperSearchResultItemComponent,\r\n MatPaginatorModule\r\n ],\r\n})\r\nexport class ClipperBrowserDialogComponent\r\n extends ClipperSearchResultManager\r\n implements OnInit, OnDestroy, AfterViewInit {\r\n @ViewChild('filterPane') filterPane!: MatDrawer;\r\n\r\n private dialogRef = inject(MatDialogRef<ClipperBrowserDialogComponent>);\r\n protected dialogData: ClipperBrowserDialogData = inject(MAT_DIALOG_DATA);\r\n protected title: string = 'Ricerca in Clipper';\r\n protected snapshot: ClipperSearchResult = {\r\n searchInfo: null,\r\n searchParams: new ClipperSearchParams()\r\n };\r\n\r\n protected currentModel: string = 'Tutto';\r\n protected currentSort: string = 'Rilevanza';\r\n\r\n\r\n ngOnInit(): void {\r\n // Use service snapshot\r\n this.snapshot = this.clipperService.snapshot();\r\n if (!this.snapshot)\r\n this.snapshot = {\r\n searchInfo: null,\r\n searchParams: null,\r\n };\r\n if (!this.filterParams) {\r\n this.filterParams = new ClipperSearchParams();\r\n // Store snapshot\r\n this.clipperService.snapshot.set(this.snapshot);\r\n }\r\n\r\n // Initialize selection\r\n this.selection = new SelectableModel<any, string>(true, 'documentId');\r\n\r\n // Update model\r\n if (this.dialogData.initialModel) {\r\n this.changeModel(this.dialogData.initialModel, false);\r\n }\r\n\r\n this.broadcastService.getMessage()\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(message => {\r\n if (message.id === ClipperMessages.DOCUMENT_SELECTED_INNER) {\r\n this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_SELECTED, message.data);\r\n this.changeDetector.markForCheck();\r\n this.close();\r\n }\r\n });\r\n\r\n // React to window size change\r\n fromEvent(window, 'resize')\r\n .pipe(takeUntil(this.unsubscribe), debounceTime(250))\r\n .subscribe(() => {\r\n this.resize();\r\n });\r\n\r\n this.clipperService.visible.set(true);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n this.clipperService.visible.set(false);\r\n }\r\n\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n // Handle filter pane \r\n this.handleFilterPaneVisibility();\r\n // Handle facets\r\n if (this.facets) {\r\n this.facets.changed\r\n .subscribe((value: ClipperSearchFacetsSnapshot) => {\r\n this.snapshot.facets = value;\r\n this.fetch(true);\r\n });\r\n }\r\n }, 0);\r\n this.resize();\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n /**\r\n * Resize \r\n */\r\n private resize() {\r\n setTimeout(() => {\r\n let elem = document.getElementById('clipper-browser-scrollable');\r\n if (elem) {\r\n const height = this.dialogService.getCurrentDialogScrollableHeight(\r\n ['clipper-browser-fixed'],\r\n window.innerHeight\r\n );\r\n if (height != elem.clientHeight) {\r\n elem.setAttribute('style', 'padding:0 0 0 0;height:' + height + 'px !important;max-height:' + height + 'px !important');\r\n }\r\n } else {\r\n this.resize();\r\n }\r\n }, 0);\r\n }\r\n\r\n\r\n /**\r\n* Show hide filter pane manually\r\n*/\r\n protected toggleFilterPane() {\r\n this.filterPaneClosed = !this.filterPaneClosed;\r\n this.filterPane?.toggle();\r\n }\r\n\r\n\r\n /**\r\n * Handle filter pane visibility\r\n */\r\n private handleFilterPaneVisibility() {\r\n if (this.filterPane) {\r\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Small) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Medium)) {\r\n if (this.filterPane.opened) {\r\n this.filterPane.close();\r\n }\r\n this.filterPane.mode = 'over';\r\n this.filterPane.disableClose = false;\r\n this.filterPaneHasBackdrop = true;\r\n } else {\r\n if (!this.hasFacets()) {\r\n this.filterPane.close();\r\n } else if (!this.filterPane.opened && !this.filterPaneClosed) {\r\n this.filterPane.open();\r\n } else if (this.filterPane.opened && this.filterPaneClosed) {\r\n this.filterPane.close();\r\n }\r\n this.filterPane.mode = 'side';\r\n this.filterPane.disableClose = true;\r\n this.filterPaneHasBackdrop = false;\r\n }\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Checks if documents can be selected and returned as message\r\n */\r\n canSelect(): boolean {\r\n let allow =\r\n this.selection &&\r\n ((this.dialogData.selectionMode === 1 &&\r\n this.selection?.current.selected.length === 1) ||\r\n (this.dialogData.selectionMode === 2 &&\r\n this.selection?.current.selected.length > 1) ||\r\n (this.dialogData.selectionMode === 3 &&\r\n this.selection?.current.selected.length > 0));\r\n if (allow && this.dialogData.selectableModels?.length > 0) {\r\n this.selection?.current.selected.forEach(n => {\r\n if (this.dialogData.selectableModels.indexOf(n.model) === -1) {\r\n allow = false;\r\n return;\r\n }\r\n });\r\n }\r\n return allow;\r\n\r\n }\r\n\r\n /**\r\n * Send a message with current selection and close dialog\r\n */\r\n select() {\r\n if (this.selection?.current.selected && this.selection?.current.selected.length > 0) {\r\n this.broadcastService.sendMessage(\r\n ClipperMessages.DOCUMENT_SELECTED,\r\n this.selection?.current.selected\r\n );\r\n this.changeDetector.markForCheck();\r\n this.close();\r\n }\r\n }\r\n\r\n /**\r\n * Close dialog\r\n * @param newRoute: the new route to navigate to\r\n */\r\n close(newRoute: any = null) {\r\n this.dialogRef.close(newRoute);\r\n }\r\n\r\n\r\n /**\r\n * Update sort\r\n */\r\n updateSortOptions() {\r\n switch (this.filterParams.sortMode) {\r\n case ClipperSort.DateAsc:\r\n this.currentSort = 'Data cre.';\r\n break;\r\n case ClipperSort.Popularity:\r\n this.currentSort = 'Popolarità';\r\n break;\r\n case ClipperSort.Relevance:\r\n this.currentSort = 'Rilevanza';\r\n break;\r\n default:\r\n this.filterParams.sortMode = ClipperSort.DateDesc;\r\n this.currentSort = 'Data decr.';\r\n break;\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Update current search info\r\n */\r\n private updateSearchInfo() {\r\n let si = [];\r\n if (\r\n this.filterParams.sector ||\r\n (this.facets && this.snapshot.facets?.sector)\r\n ) {\r\n const s = ClipperSectors.find(n => n.value ===\r\n (this.snapshot.facets && this.snapshot.facets?.sector\r\n ? this.snapshot.facets?.sector\r\n : this.filterParams.sector));\r\n if (s) {\r\n si.push({\r\n field: 'settore',\r\n value: s.name,\r\n sep: si.length > 0,\r\n });\r\n } else {\r\n const s = ClipperModels.find(n => n.value ===\r\n (this.snapshot.facets && this.snapshot.facets?.sector\r\n ? parseInt(this.snapshot.facets?.sector)\r\n : parseInt(this.filterParams.sector)));\r\n if (s) {\r\n si.push({\r\n field: 'sezione',\r\n value: s.name,\r\n sep: si.length > 0,\r\n });\r\n }\r\n }\r\n }\r\n if (\r\n this.filterParams.author ||\r\n (this.snapshot.facets && this.snapshot.facets?.author)\r\n ) {\r\n const a = ClipperAuthors.find(n => n.value ===\r\n (this.snapshot.facets && this.snapshot.facets?.author\r\n ? this.snapshot.facets?.author\r\n : this.filterParams.author));\r\n if (a) {\r\n si.push({\r\n field: 'autore',\r\n value: a.name,\r\n sep: si.length > 0,\r\n });\r\n }\r\n }\r\n if (this.filterParams.topic)\r\n si.push({\r\n field: 'argomento',\r\n value: this.filterParams.topic,\r\n sep: si.length > 0,\r\n });\r\n if (this.filterParams.taxonomy)\r\n si.push({\r\n field: 'argomento',\r\n value: this.filterParams.taxonomyNode,\r\n sep: si.length > 0,\r\n });\r\n if (this.filterParams.number)\r\n si.push({\r\n field: 'numero',\r\n value: this.filterParams.number,\r\n sep: si.length > 0,\r\n });\r\n if (\r\n !this.snapshot.interval &&\r\n (this.filterParams.fromDate ||\r\n (this.snapshot.facets &&\r\n this.snapshot.facets?.fromDate &&\r\n this.filterParams.model !==\r\n ClipperModel.AggiornamentoNormativo))\r\n ) {\r\n let d1 =\r\n this.snapshot.facets && this.snapshot.facets?.fromDate\r\n ? this.snapshot.facets?.fromDate\r\n : this.filterParams.fromDate;\r\n const d2 =\r\n this.snapshot.facets && this.snapshot.facets?.toDate\r\n ? this.snapshot.facets?.toDate\r\n : this.filterParams.toDate;\r\n si.push({\r\n field: !d2 ? 'in data' : 'da data',\r\n value: SystemUtils.formatDate(d1),\r\n sep: si.length > 0,\r\n });\r\n }\r\n if (!this.snapshot.interval &&\r\n (this.filterParams.toDate ||\r\n (this.snapshot.facets &&\r\n this.snapshot.facets?.toDate &&\r\n this.filterParams.model !==\r\n ClipperModel.AggiornamentoNormativo))\r\n ) {\r\n let d =\r\n this.snapshot.facets && this.snapshot.facets?.toDate\r\n ? this.snapshot.facets?.toDate\r\n : this.filterParams.toDate;\r\n si.push({\r\n field: 'a data',\r\n value: SystemUtils.formatDate(d),\r\n sep: si.length > 0,\r\n });\r\n }\r\n if (this.snapshot.interval)\r\n si.push({\r\n field: 'intervallo',\r\n value: this.snapshot.interval,\r\n sep: si.length > 0,\r\n });\r\n if (this.filterParams.source)\r\n si.push({\r\n field: 'fonte',\r\n value: SystemUtils.arrayGetValue(\r\n ClipperSources,\r\n this.filterParams.source\r\n ),\r\n sep: si.length > 0,\r\n });\r\n if (this.filterParams.sourceNumber)\r\n si.push({\r\n field: 'num. fonte',\r\n value: this.filterParams.sourceNumber,\r\n sep: si.length > 0,\r\n });\r\n if (\r\n this.filterParams.sourceFromDate ||\r\n (this.snapshot.facets &&\r\n this.snapshot.facets?.fromDate &&\r\n this.filterParams.model ===\r\n ClipperModel.AggiornamentoNormativo)\r\n ) {\r\n let d1 =\r\n this.snapshot.facets && this.snapshot.facets?.fromDate\r\n ? this.snapshot.facets?.fromDate\r\n : this.filterParams.sourceFromDate;\r\n const d2 =\r\n this.snapshot.facets && this.snapshot.facets?.toDate\r\n ? this.snapshot.facets?.toDate\r\n : this.filterParams.sourceToDate;\r\n si.push({\r\n field: !d2 ? 'in data fonte' : 'da data fonte',\r\n value: SystemUtils.formatDate(d1),\r\n sep: si.length > 0,\r\n });\r\n }\r\n if (\r\n this.filterParams.sourceToDate ||\r\n (this.snapshot.facets &&\r\n this.snapshot.facets?.toDate &&\r\n this.filterParams.model ===\r\n ClipperModel.AggiornamentoNormativo)\r\n ) {\r\n let d =\r\n this.snapshot.facets && this.snapshot.facets?.toDate\r\n ? this.snapshot.facets?.toDate\r\n : this.filterParams.sourceToDate;\r\n si.push({\r\n field: 'a data fonte',\r\n value: SystemUtils.formatDate(d),\r\n sep: si.length > 0,\r\n });\r\n }\r\n if (this.filterParams.text)\r\n si.push({\r\n field: 'testo',\r\n value: this.filterParams.text,\r\n sep: si.length > 0,\r\n });\r\n if (\r\n this.filterParams.type ||\r\n (this.snapshot.facets && this.snapshot.facets?.type)\r\n ) {\r\n const t = ClipperSectorTypes.find(n => n.value ===\r\n (this.snapshot.facets && this.snapshot.facets?.type\r\n ? this.snapshot.facets?.type\r\n : this.filterParams.type));\r\n if (t) {\r\n si.push({\r\n field: 'tipo',\r\n value: t.name,\r\n sep: si.length > 0,\r\n });\r\n }\r\n }\r\n if (this.filterParams.showUnreadDocumentsOnly)\r\n si.push({\r\n field: 'stato',\r\n value: 'non letti',\r\n sep: si.length > 0,\r\n });\r\n if (\r\n this.filterParams.changeReason ||\r\n (this.snapshot.facets && this.snapshot.facets?.reason)\r\n )\r\n si.push({\r\n field: 'tipo mod.',\r\n value: SystemUtils.arrayGetValue(\r\n ClipperDocumentChangeReasons,\r\n this.snapshot.facets && this.snapshot.facets?.reason\r\n ? this.snapshot.facets?.reason\r\n : this.filterParams.changeReason\r\n ),\r\n sep: si.length > 0,\r\n });\r\n if (this.filterParams.changedNumber)\r\n si.push({\r\n field: 'num. modificato',\r\n value: this.filterParams.changedNumber,\r\n sep: si.length > 0,\r\n });\r\n if (this.filterParams.changedYear)\r\n si.push({\r\n field: 'anno modificato',\r\n value: this.filterParams.changedYear,\r\n sep: si.length > 0,\r\n });\r\n if (this.filterParams.changedTitle)\r\n si.push({\r\n field: 'titolo modificato',\r\n value: this.filterParams.changedTitle,\r\n sep: si.length > 0,\r\n });\r\n if (this.filterParams.modifierNumber)\r\n si.push({\r\n field: 'num. modificante',\r\n value: this.filterParams.modifierNumber,\r\n sep: si.length > 0,\r\n });\r\n if (this.filterParams.modifierYear)\r\n si.push({\r\n field: 'anno modificante',\r\n value: this.filterParams.modifierYear,\r\n sep: si.length > 0,\r\n });\r\n if (this.filterParams.modifierTitle)\r\n si.push({\r\n field: 'titolo modificante',\r\n value: this.filterParams.modifierTitle,\r\n sep: si.length > 0,\r\n });\r\n\r\n this.snapshot.searchInfo = si;\r\n }\r\n\r\n /**\r\n * Change search model\r\n * @param model : the new document model \r\n * @param fetch : true if data must be fetched. Default is true\r\n */\r\n changeModel(model: number = null, fetch: boolean = true) {\r\n this.filterParams.model = model;\r\n switch (model) {\r\n case ClipperModel.AggiornamentoNormativo: this.currentModel = \"Gazzette e bollettini\"; break;\r\n case ClipperModel.NormativaVigente: this.currentModel = \"Normativa vigente\"; break;\r\n default:\r\n this.currentModel = \"Tutto\";\r\n break;\r\n }\r\n if (fetch)\r\n this.fetch(true);\r\n }\r\n\r\n /**\r\n * Apply a sort\r\n * @param mode : the sort mode\r\n */\r\n sortBy(mode: number) {\r\n this.filterParams.sortMode = mode;\r\n this.updateSortOptions();\r\n this.fetch(false);\r\n }\r\n\r\n /**\r\n * Get facets\r\n * @param params: the clipper search params\r\n */\r\n fetchFacets(params: ClipperSearchParams) {\r\n if (!this.clipperService.loggedIn()) return;\r\n this.filterBusy.set(true);\r\n this.clipperService.queryFacets(params)\r\n .subscribe({\r\n next: (r) => {\r\n if (r.success) {\r\n this.prepareResults(null, r.value);\r\n this.handleFilterPaneVisibility();\r\n }\r\n },\r\n complete: () => {\r\n this.filterBusy.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Hide facets\r\n */\r\n protected hideFacets() {\r\n this.hasFacets.set(false);\r\n this.facets?.reset();\r\n this.filterPane.close();\r\n this.filterPaneClosed = false;\r\n }\r\n\r\n /**\r\n * Prepare teh search params\r\n * @param newSearch : true if it is a new search\r\n * @return the new search params\r\n */\r\n private prepareFetch(newSearch: boolean = false): ClipperSearchParams {\r\n const newParams: ClipperSearchParams = SystemUtils.clone(this.filterParams);\r\n newParams.count = 15;\r\n if (newParams.year > 0) {\r\n newParams.fromDate = new Date(newParams.year, 0, 1, 2);\r\n newParams.toDate = new Date(newParams.year, 11, 31, 2);\r\n } else {\r\n newParams.year = null;\r\n }\r\n if (newParams.text) {\r\n newParams.text = ClipperSearchUtils.normalizeTextQuery(this.filterParams.text);\r\n }\r\n if (newSearch) {\r\n newParams.first = 0;\r\n if (newParams.text)\r\n newParams.sortMode = ClipperSort.Relevance;\r\n else if (!newParams.sortMode)\r\n newParams.sortMode = ClipperSort.DateDesc;\r\n this.updateSortOptions();\r\n }\r\n // Apply facets\r\n if (this.snapshot.facets?.fromDate) {\r\n newParams.fromDate = this.snapshot.facets?.fromDate;\r\n newParams.toDate = this.snapshot.facets?.toDate;\r\n newParams.year = this.snapshot.facets?.fromDate.getFullYear();\r\n } else if (this.snapshot.facets?.changedInterval) {\r\n newParams.year = null;\r\n newParams.fromDate = null;\r\n newParams.toDate = null;\r\n }\r\n if (this.snapshot.facets?.sector || this.snapshot.facets?.changedSector) {\r\n newParams.sector = this.snapshot.facets?.sector;\r\n }\r\n if (this.snapshot.facets?.type || this.snapshot.facets?.changedType) {\r\n newParams.type = this.snapshot.facets?.type;\r\n }\r\n if (this.snapshot.facets?.author || this.snapshot.facets?.changedAuthor) {\r\n newParams.author = this.snapshot.facets?.author;\r\n }\r\n return newParams;\r\n\r\n }\r\n\r\n\r\n /**\r\n * Perform a search using current params\r\n */\r\n protected fetch(newSearch: boolean = false) {\r\n this.dialogService.busy('Ricerca in corso...');\r\n const searchParams = this.prepareFetch(newSearch);\r\n this.clipperService.query(searchParams)\r\n .subscribe({\r\n next: r => {\r\n if (!r.success) this.dialogService.error(r.message);\r\n else {\r\n this.prepareResults(r.value);\r\n\r\n // Handle facets\r\n if (this.snapshot.total > 0) {\r\n if (newSearch) {\r\n // Update facets\r\n this.fetchFacets(searchParams);\r\n }\r\n } else {\r\n this.hideFacets();\r\n }\r\n\r\n if (newSearch) {\r\n if (this.paginator) this.paginator.pageIndex = 0;\r\n }\r\n\r\n this.scroll(0);\r\n\r\n // Update view\r\n this.updateSearchInfo();\r\n }\r\n },\r\n complete: () => {\r\n this.dialogService.clearBusy();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Show a new page result\r\n * @param e : the MatPaginator PageEvent data\r\n */\r\n fetchMore(e: PageEvent) {\r\n let first = e.pageIndex * this.filterParams.count;\r\n this.filterParams.first = first;\r\n this.fetch();\r\n }\r\n\r\n /**\r\n * Clear search\r\n */\r\n clearSearch() {\r\n this.currentModel = 'Normativa vigente';\r\n this.snapshot.items = null;\r\n this.snapshot.total = 0;\r\n this.snapshot.facets = null;\r\n this.facets.reset();\r\n this.filterParams = new ClipperSearchParams();\r\n this.filterPane.close();\r\n this.updateSearchInfo();\r\n }\r\n\r\n /**\r\n * Open an item\r\n * @param documentId : the document id\r\n * @param query: the current query or null\r\n * @param newWindow: true if the document must be open into a new window\r\n */\r\n override open(documentId: string, query: string | null | undefined = null, newWindow: boolean = false) {\r\n if (!newWindow) this.openDocument(documentId, query);\r\n }\r\n\r\n /**\r\n * Open a document\r\n * @param documentId : the document id\r\n * @param query: the current query or null\r\n */\r\n override openDocument(documentId: string, query: string | null | undefined = null) {\r\n if (!documentId) return;\r\n ClipperDocumentsUtils.openDocument(\r\n this.dialogService,\r\n this.clipperService,\r\n documentId,\r\n query ?? this.filterParams.text,\r\n this.dialogData.selectionMode,\r\n this.dialogData.theme\r\n );\r\n }\r\n\r\n /**\r\n * Compose a free text search query\r\n */\r\n composeSearch() {\r\n let d = this.dialogService.open(ClipperSearchFreeTextQueryBuilderComponent, {\r\n ariaLabel: 'costruisci ricerca',\r\n autoFocus: false,\r\n restoreFocus: true,\r\n disableClose: false,\r\n minWidth: '375px',\r\n maxWidth: '600px',\r\n width: '99%',\r\n });\r\n d.componentInstance.done\r\n .subscribe((r: SearchFreeTextQueryParams) => {\r\n this.filterParams.text = r.query;\r\n d.close();\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Perform search\r\n */\r\n search() {\r\n if (this.filterParams.sector === this.snapshot.facets?.sector)\r\n this.filterParams.sector = null;\r\n\r\n // Reset paginator\r\n if (this.paginator) this.paginator.pageIndex = 0;\r\n\r\n // Reset facets search\r\n this.facets.reset();\r\n\r\n // Do search\r\n this.fetch(true);\r\n }\r\n\r\n /**\r\n * Show advanced search\r\n */\r\n advancedSearch() {\r\n let d = this.dialogService.open(ClipperSearchDialogComponent, {\r\n ariaLabel: 'ricerca avanzata',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: false,\r\n data: {\r\n params: this.filterParams,\r\n enableRead: false,\r\n enableSector: true,\r\n enableType: true,\r\n enableAuthor: true,\r\n enableTopic: true,\r\n enableText: true,\r\n enableDocument: true,\r\n enableSource: true,\r\n },\r\n minWidth: '375px',\r\n maxWidth: '700px',\r\n width: '99%',\r\n });\r\n d.componentInstance.done\r\n .subscribe((r: ClipperSearchParams) => {\r\n // Update search params\r\n r.model = this.filterParams.model;\r\n this.filterParams = r;\r\n this.filterParams.first = 0;\r\n this.filterParams.count = 15;\r\n if (this.filterParams.sector === this.snapshot.facets?.sector)\r\n this.filterParams.sector = null;\r\n\r\n // Reset paginator\r\n if (this.paginator) this.paginator.pageIndex = 0;\r\n\r\n // Reset facets search\r\n this.facets.reset();\r\n\r\n // Do search\r\n this.fetch(true);\r\n\r\n // Finished\r\n d.close();\r\n\r\n });\r\n }\r\n\r\n /**\r\n * Show free text help\r\n */\r\n helpSearch() {\r\n this.dialogService.open(ClipperSearchFreeTextHelpComponent, {\r\n ariaLabel: 'informazioni ricerca',\r\n autoFocus: false,\r\n restoreFocus: true,\r\n disableClose: false,\r\n minWidth: '375px',\r\n maxWidth: '800px',\r\n width: '99%',\r\n });\r\n\r\n }\r\n\r\n\r\n}\r\n","<div class=\"clipper-browser-fixed\">\r\n <div class=\"dialog-header\">\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" class=\"dialog-title\">\r\n <a href=\"https://clipper.arsedizioni.it\" matTooltip=\"Apri Clipper in un nuovo tab\" target=\"_blank\">\r\n <div class=\"clipper-logo\"></div>\r\n </a>\r\n </div>\r\n @if (dialogData?.selectionMode > 0 && canSelect()) {\r\n <div fxFlex=\"170px\" fxFlex.lt-md=\"58px\">\r\n <button fxHide.lt-md fxFlexAlign=\"center\" type=\"button\" color=\"primary\" mat-flat-button (click)=\"select()\"\r\n class=\"clipper-selection-button\">\r\n <span class=\"small uppercase\">Usa selezione</span>\r\n </button>\r\n <button fxHide.gt-sm fxFlexAlign=\"center\" type=\"button\" color=\"primary\" mat-icon-button (click)=\"select()\"\r\n matTooltip=\"Usa selezione\" aria-label=\"'Usa la selezione'\" class=\"clipper-selection-icon-button\">\r\n <mat-icon>check</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n <div fxFlex=\"106px\" fxLayoutAlign=\"end\" class=\"dialog-close\">\r\n @if (clipperService.bag.length > 0) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Documenti di lavoro\" aria-label=\"'Documenti di lavoro'\"\r\n (click)=\"openBag()\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"clipperService.bag.length\"\r\n matBadgeColor=\"accent\">work_outline</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill style=\"padding: 10px 10px 10px 20px\">\r\n <div fxFlex=\"*\">\r\n <div fxLayout=\"row\" fxLayoutGap='10px' fxFill>\r\n <mat-form-field fxFlex=\"130px\" fxHide.xs subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Numero</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"filterParams.number\" #number=\"ngModel\" name=\"number\"\r\n maxlength=\"10\" (keyup.Enter)=\"fetch(true)\">\r\n @if (filterParams.number) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"filterParams.number = null;\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"130px\" fxHide.xs subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" matInput [(ngModel)]=\"filterParams.year\" #year=\"ngModel\" name=\"year\" min=\"0\"\r\n maxlength=\"4\" (keyup.Enter)=\"fetch(true)\" />\r\n @if (filterParams.year) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.year = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (year.invalid) {\r\n <mat-error>Non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"100\" subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Parole, frasi o concetti...</mat-label>\r\n <input matInput #searchInput=\"matInput\" type=\"text\" #text [(ngModel)]=\"filterParams.text\" maxlength=\"200\"\r\n (keyup.Enter)=\"search()\" autofocus />\r\n @if (filterParams.text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.text = ''\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Componi\" matTooltip=\"Componi\"\r\n (click)=\"text.focus(); composeSearch()\">\r\n <mat-icon>build</mat-icon>\r\n </button>\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Informazioni\"\r\n matTooltip=\"Come effettuare la ricerca in testo libero\" (click)=\"text.focus(); helpSearch()\">\r\n <mat-icon>help_outline</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <button type=\"button\" mat-icon-button (click)=\"search()\" [attr.aria-label]=\"'Avvia la ricerca'\"\r\n matTooltip=\"Avvia ricerca\" [disabled]=\"!clipperService.loggedIn()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n <button type=\"button\" mat-icon-button (click)=\"advancedSearch()\" [attr.aria-label]=\"'Ricerca avanzata'\"\r\n matTooltip=\"Ricerca avanzata\" [disabled]=\"!clipperService.loggedIn()\">\r\n <mat-icon>settings</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n @if (snapshot.searchInfo && snapshot.searchInfo.length > 0) {\r\n <div fxHide.xs>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill class=\"small\"\r\n style=\"padding:0 10px 0 20px;\">\r\n <div fxFlex=\"*\">\r\n <b>RICERCA ATTIVA</b> \r\n @for (si of snapshot.searchInfo; track si) {\r\n <span>\r\n {{si.sep ? ' ' : ''}} {{si.field}}: <span class=\"accent lowercase\"><i>{{si.value}}</i></span>\r\n </span>\r\n }\r\n </div>\r\n <div fxFlexAlign=\"start\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azzera ricerca\" (click)=\"clearSearch()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <div>\r\n <div fxLayout=\"row wrap-reverse\" fxLayoutAlign=\"space-between center\" fxFill style=\"padding: 0 10px 0 15px;\">\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\">\r\n @if (snapshot.total > 0) {\r\n <div fxFlexAlign=\"center\">\r\n <mat-checkbox (change)=\"$event ? selectAll($event) : null\"\r\n [indeterminate]=\"selection?.hasValue() && !allSelected()\"\r\n [attr.aria-label]=\"'Seleziona/deseleziona tutto'\" matTooltip=\"Seleziona/deseleziona tutto\"\r\n [disabled]=\"!snapshot.items || snapshot.items.length == 0\">\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <div fxFlex=\"*\">\r\n @if (snapshot.total > 0) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Ordina\"\r\n [attr.aria-label]=\"'Menu ordina'\" [matMenuTriggerFor]=\"menuSort\" [disabled]=\"!snapshot.total\">\r\n <span fxHide.lt-lg>Ordina per:</span>\r\n <mat-icon fxHide.gt-md>sort</mat-icon> {{currentSort}}\r\n </button>\r\n }\r\n <mat-menu #menuSort=\"matMenu\">\r\n <button mat-menu-item (click)=\"sortBy(3)\" [attr.aria-label]=\"'Ordina per data decrescente'\">\r\n Data decrescente\r\n </button>\r\n <button mat-menu-item (click)=\"sortBy(2)\" [attr.aria-label]=\"'Ordina per data crescente'\">\r\n Data crescente\r\n </button>\r\n @if (filterParams.text) {\r\n <button mat-menu-item (click)=\"sortBy(1)\" [attr.aria-label]=\"'Ordina per rilevanza'\">\r\n Rilevanza\r\n </button>\r\n }\r\n <button mat-menu-item (click)=\"sortBy(5)\" [attr.aria-label]=\"'Ordina per popolarità'\">\r\n Popolarità\r\n </button>\r\n </mat-menu>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Menu modello'\"\r\n [matMenuTriggerFor]=\"menuModels\">\r\n <span fxHide.lt-lg>Mostra:</span>\r\n <mat-icon fxHide.gt-md>filter_list</mat-icon> {{currentModel}}\r\n </button>\r\n <mat-menu #menuModels=\"matMenu\">\r\n <button mat-menu-item (click)=\"changeModel(2)\" [attr.aria-label]=\"'Mostra aggiornamento normativo'\">\r\n Gazzette e bollettini\r\n </button>\r\n <button mat-menu-item (click)=\"changeModel(9)\" [attr.aria-label]=\"'Normativa vigente'\">\r\n Normativa vigente\r\n </button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"changeModel()\" [attr.aria-label]=\"'Mostra tutti i documenti'\">\r\n Tutto\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection?.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button\r\n matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\r\n [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection?.all.length\" matBadgeColor=\"accent\">checklist</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" selectionSource=\"selection\" [useSelections]=\"canSelect()\"\r\n [isReadable]=\"false\" [isLawInForce]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed)) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\"\r\n aria-label=\"'Affina ricerca'\" (click)=\"toggleFilterPane()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"clipper-browser-scrollable\">\r\n <mat-drawer-container class=\"fill\">\r\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small drawer-with-loader\" opened=\"false\">\r\n @if (filterBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (filterBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"56px\" class=\"title-container-with-loader\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlexAlign=\"center\" class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\">\r\n <clipper-search-facets #facets></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" [id]=\"scrollerId\" class=\"scroll-auto\" style=\"padding: 0 5px;\">\r\n @if (!snapshot.total) {\r\n <div class=\"message-container\">\r\n <p class=\"message\"><b>Nessun elemento da visualizzare.</b></p>\r\n </div>\r\n } @else {\r\n <div>\r\n @for (item of snapshot.items; track $index; let i = $index) {\r\n @if (item.group) {\r\n <div class=\"items-group-title\">\r\n <div [ngClass]=\"{'group-spaced': i > 0}\">{{item.group}}</div>\r\n </div>\r\n }\r\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\" [actions]=\"contextMenu\"\r\n [displayModelName]=\"true\"></clipper-search-result-item>\r\n }\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [useSelections]=\"canSelect()\" [isReadable]=\"false\"\r\n [isLawInForce]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n <!-- footer -->\r\n @if ((snapshot?.total ?? 0) > 0) {\r\n <div class=\"items-footer\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <mat-paginator #paginator class=\"paginator\" [hidePageSize]=\"true\" [length]=\"snapshot?.total ?? 0\"\r\n [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\" (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n</div>","/*\r\n * Public API Surface of ars-utils\r\n */\r\n\r\nexport * from './ui/browser-dialog/browser-dialog.component';\r\nexport * from './ui/search-dialog/search-dialog.component';\r\nexport * from './ui/search-facets/search-facets.component';\r\nexport * from './ui/search-free-text-help/search-free-text-help.component';\r\nexport * from './ui/search-free-text-query-builder/search-free-text-query-builder.component';\r\nexport * from './ui/search-result-item/search-result-item.component';\r\nexport * from './ui/search-calendar/search-calendar.component';\r\nexport * from './ui/search-result-manager/search-result-manager';\r\nexport * from './ui/references/references.component';\r\nexport * from './ui/document/document.component';\r\nexport * from './ui/document-index/document-index.component';\r\nexport * from './ui/document-menu/document-menu.component';\r\nexport * from './documents';\r\nexport * from './ui/document-manager/document-manager';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i3","i5","FlexModule","i4","i6","i1","takeUntil","i7","i8","i10","i11","i14","i9","i13","i15"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"arsedizioni-ars-utils-clipper.ui.mjs","sources":["../../../projects/ars-utils/clipper.ui/ui/document-menu/document-menu.component.ts","../../../projects/ars-utils/clipper.ui/ui/document-menu/document-menu.component.html","../../../projects/ars-utils/clipper.ui/ui/search-facets/search-facets.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-facets/search-facets.component.html","../../../projects/ars-utils/clipper.ui/ui/document-manager/document-manager.ts","../../../projects/ars-utils/clipper.ui/ui/search-calendar/search-calendar.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-calendar/search-calendar.component.html","../../../projects/ars-utils/clipper.ui/ui/search-result-manager/search-result-manager.ts","../../../projects/ars-utils/clipper.ui/ui/search-result-item/search-result-item.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-result-item/search-result-item.component.html","../../../projects/ars-utils/clipper.ui/ui/references/references.component.ts","../../../projects/ars-utils/clipper.ui/ui/references/references.component.html","../../../projects/ars-utils/clipper.ui/ui/document-index/document-index.component.ts","../../../projects/ars-utils/clipper.ui/ui/document-index/document-index.component.html","../../../projects/ars-utils/clipper.ui/ui/document/document.component.ts","../../../projects/ars-utils/clipper.ui/ui/document/document.component.html","../../../projects/ars-utils/clipper.ui/documents.ts","../../../projects/ars-utils/clipper.ui/ui/search-free-text-help/search-free-text-help.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-free-text-help/search-free-text-help.component.html","../../../projects/ars-utils/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.html","../../../projects/ars-utils/clipper.ui/ui/search-dialog/search-dialog.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-dialog/search-dialog.component.html","../../../projects/ars-utils/clipper.ui/ui/browser-dialog/browser-dialog.component.ts","../../../projects/ars-utils/clipper.ui/ui/browser-dialog/browser-dialog.component.html","../../../projects/ars-utils/clipper.ui/public_api.ts","../../../projects/ars-utils/clipper.ui/arsedizioni-ars-utils-clipper.ui.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Signal, computed, input } from '@angular/core';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { ClipperDocumentInfo } from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\r\nimport { FlexModule } from '@ngbracket/ngx-layout';\r\n\r\n@Component({\r\n selector: 'clipper-document-menu',\r\n templateUrl: './document-menu.component.html',\r\n styleUrls: ['./document-menu.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FlexModule, MatMenuModule, MatIconModule, MatDividerModule, MatTooltipModule]\r\n\r\n})\r\nexport class ClipperDocumentMenuComponent {\r\n\r\n useSelections = input<boolean>(false);\r\n selectionSource = input<'bag' | 'selection' | 'none' | null>('selection');\r\n protected selection: Signal<ClipperDocumentInfo[]> = computed(() => {\r\n if (this.useSelections()) {\r\n switch (this.selectionSource()) {\r\n case 'bag':\r\n return this.parent().clipperService.bag();\r\n case 'selection':\r\n return this.parent()?.selection?.all;\r\n }\r\n }\r\n return [];\r\n });\r\n parent = input<ClipperSearchResultManager>();\r\n item = input<ClipperDocumentInfo>();\r\n isReference = input<boolean>(false);\r\n isReadable = input<boolean>(true);\r\n isDeadline = input<boolean>(false);\r\n isLawInForce = input<boolean>(false);\r\n isLaw = input<boolean>(false);\r\n canPrint = input<boolean>(false);\r\n canFind = input<boolean>(false);\r\n\r\n\r\n /**\r\n * Check if current item or selection is read\r\n * @returns 0 if not read, 1 if read, 2 if unknown\r\n */\r\n isRead(): number {\r\n if (this.item()) return this.item().isRead === true ? 1 : 0;\r\n if (this.parent()?.hasAnySelection()) return 2;\r\n const firstSelection = this.parent()?.getSingleSelection();\r\n if (firstSelection) {\r\n return firstSelection.isRead === true ? 1 : 0;\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * Set the is read flag value\r\n * @param value: true or false\r\n */\r\n setRead(value: boolean) {\r\n this.parent()?.setRead(value, this.item());\r\n }\r\n\r\n}\r\n","@if (selectionSource() && selectionSource() !== 'none') {\r\n@if (selectionSource() === 'selection') {\r\n<button mat-menu-item (click)=\"parent().selection?.clear()\" [attr.aria-label]=\"'Deseleziona tutti'\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n} @else if (selectionSource() === 'bag') {\r\n<button mat-menu-item (click)=\"parent().openBag()\" [attr.aria-label]=\"'Gestisci documenti di lavoro'\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n<mat-divider></mat-divider>\r\n}\r\n@if (item() || (selection()?.length === 1)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\"\r\n (click)=\"parent().open(item() ? item().documentId : selection()[0].documentId)\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n@if (selectionSource() !== 'bag') {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"parent().addItemsToBag(item() ? [item()] : selection())\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n</button>\r\n}\r\n@if(canPrint()) {\r\n<button mat-menu-item (click)=\"parent()?.print()\" [attr.aria-label]=\"'Stampa documento'\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row\" fxFill fxLayoutAlign=\"start center\">\r\n <mat-icon>print</mat-icon>\r\n <div>Stampa</div>\r\n </div>\r\n <div class=\"accent small bold\">CTRL+P</div>\r\n </div>\r\n</button>\r\n}\r\n@if(canFind()) {\r\n<button mat-menu-item (click)=\"parent()?.find()\" [attr.aria-label]=\"'Trova nel documento'\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row\" fxFill fxLayoutAlign=\"start center\">\r\n <mat-icon>find_in_page</mat-icon>\r\n <div>Trova nel documento</div>\r\n </div>\r\n <div class=\"accent small bold\">CTRL+F</div>\r\n </div>\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length > 1))) {\r\n<button mat-menu-item (click)=\"parent().sendItemsTo(item() ? [item()] : selection())\"\r\n [attr.aria-label]=\"'Invia documento per email'\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (((item() && item().model != 11) || (selection()?.length === 1 && selection()[0].model != 11))) {\r\n<button mat-menu-item (click)=\"parent().exportPdf(item() ? item() : selection()[0])\"\r\n [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"parent().showLink(item() ? item() : selection()[0])\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n}\r\n@if (!isReference() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [matMenuTriggerFor]=\"linksMenu\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n}\r\n\r\n@if (!isReference() && isReadable()) {\r\n<mat-divider></mat-divider>\r\n\r\n@if (item() ? item().isRead === true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead ===\r\ntrue)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"parent()?.setRead(false, item())\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n</button>\r\n}\r\n@if (item() ? item().isRead !== true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead !==\r\ntrue)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come già letto'\" (click)=\"parent()?.setRead(true, item())\">\r\n <mat-icon>flag</mat-icon>Segna come già letto\r\n</button>\r\n}\r\n}\r\n\r\n@if ((isLawInForce() || isDeadline()) && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [attr.aria-label]=\"'Mostra report utilizzo'\"\r\n (click)=\"parent().report(item() ? item() : selection()[0])\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"parent().openReferences(item() ? item().documentId : selection()[0].documentId, 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if ( !isReference() &&(item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"parent().openReferences(item() ? item().documentId : selection()[0].documentId, 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra giurisprudenza'\"\r\n (click)=\"parent().openReferences(item() ? item().documentId : selection()[0].documentId, 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra modifiche normative'\"\r\n (click)=\"parent().openReferences(item() ? item().documentId : selection()[0].documentId, 3)\">\r\n Modifiche\r\n </button>\r\n }\r\n</mat-menu>\r\n@if ((item() || selection?.length > 0) && parent().RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<mat-divider></mat-divider>\r\n}\r\n@if ((item() || selection?.length > 0) && parent().RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\" [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\"\r\n [matMenuTriggerFor]=\"menuRS\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n</button>\r\n}\r\n<mat-menu #menuRS=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"parent().RS_newLaw([item()])\">\r\n Nuova legge\r\n </button>\r\n @if (item() || selection?.length === 1) {\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova attività'\" (click)=\"parent().RS_newActivity(item())\">\r\n Nuova attività\r\n </button>\r\n }\r\n @if (item() || selection?.length === 1) {\r\n <button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\" (click)=\"parent().RS_usageReport(item())\">\r\n Report utilizzo norma\r\n </button>\r\n }\r\n</mat-menu>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Output, inject } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n ClipperFacet,\r\n ClipperSearchFacet,\r\n ClipperSearchFacetGroup,\r\n ClipperSearchFacetsSnapshot\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\n\r\n\r\n@Component({\r\n selector: 'clipper-search-facets',\r\n templateUrl: './search-facets.component.html',\r\n styleUrls: ['./search-facets.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FlexModule, MatButtonModule, MatTooltipModule, MatChipsModule, MatIconModule, \r\n MatDividerModule, MatExpansionModule]\r\n})\r\nexport class ClipperSearchFacetsComponent {\r\n @Output() changed = new EventEmitter<ClipperSearchFacetsSnapshot>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n\r\n protected snapshot: ClipperSearchFacetsSnapshot = new ClipperSearchFacetsSnapshot();\r\n\r\n /**\r\n * Update facets\r\n * @param values : the facets values\r\n * @param interval : the date interval for YEAR facets\r\n */\r\n update(values: ClipperSearchFacet[][] | null = null, interval: string | null = null) {\r\n this.snapshot.interval = interval;\r\n if (values) {\r\n this.snapshot.groups = [];\r\n values.forEach(n => {\r\n const name = n[0].typeName;\r\n const index = n[0].type;\r\n const i = this.snapshot.usedGroups.findIndex(n => n.index === index);\r\n const j = this.snapshot.groups.findIndex(n => n.index === index);\r\n if (i === -1 && j === -1) {\r\n this.snapshot.groups.push({\r\n name: name,\r\n selectedValue: null,\r\n selectedValueDescription: null,\r\n values: n,\r\n index: index,\r\n }); \r\n }\r\n });\r\n }\r\n this.snapshot.hasFacets = this.snapshot.groups.length > 0 || this.snapshot.usedGroups.length > 0; \r\n this.snapshot.hasMoreFacets = this.snapshot.hasFacets && this.snapshot.groups.length > this.snapshot.usedGroups.length; \r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Use a facet item as filter\r\n * @param group : the facet group\r\n * @param item : the facet item\r\n */\r\n protected use(group: ClipperSearchFacetGroup, item: ClipperSearchFacet) {\r\n group.selectedValue = item.value;\r\n group.selectedValueDescription = item.title;\r\n const j = this.snapshot.groups.findIndex(n => n.index === group.index);\r\n if (j !== -1) {\r\n this.snapshot.groups.splice(j, 1);\r\n let updated = false;\r\n this.snapshot.usedGroups.forEach((n, i) => {\r\n if (!updated && n.index > group.index) {\r\n this.snapshot.usedGroups.splice(i, 0, group);\r\n updated = true;\r\n }\r\n });\r\n if (!updated) {\r\n this.snapshot.usedGroups.push(group);\r\n }\r\n }\r\n this.apply();\r\n }\r\n\r\n /**\r\n * dismiss a facet group filter\r\n * @param group : the facet group\r\n * @param apply : true to emit changed event and generate a new search, false just for update\r\n */\r\n protected dismiss(group: ClipperSearchFacetGroup, apply: boolean = true) {\r\n group.selectedValue = null;\r\n group.selectedValueDescription = null;\r\n const i = this.snapshot.usedGroups.findIndex(n => n.index === group.index);\r\n if (i !== -1) {\r\n this.snapshot.usedGroups.splice(i, 1);\r\n let updated = false;\r\n this.snapshot.groups.forEach((n, j) => {\r\n if (!updated && n.index > group.index) {\r\n this.snapshot.groups.splice(j, 0, group);\r\n updated = true;\r\n }\r\n });\r\n if (!updated) {\r\n this.snapshot.groups.push(group);\r\n }\r\n }\r\n if (apply) {\r\n this.apply();\r\n }\r\n }\r\n\r\n /**\r\n * Apply filter\r\n */\r\n private apply() {\r\n if (this.snapshot.usedGroups.length > 0) {\r\n this.snapshot.usedGroups.forEach((n) => {\r\n if (n.index === ClipperFacet.Year) {\r\n if (n.selectedValue) {\r\n this.snapshot.fromDate = new Date(parseInt(n.selectedValue), 0, 1, 12, 0, 0);\r\n this.snapshot.toDate = new Date(parseInt(n.selectedValue), 11, 31, 12, 0, 0);\r\n } else {\r\n this.snapshot.fromDate = null;\r\n this.snapshot.toDate = null;\r\n }\r\n } else if (n.index === ClipperFacet.Sector) {\r\n this.snapshot.sector = n.selectedValue ?? null;\r\n } else if (n.index === ClipperFacet.Author) {\r\n this.snapshot.author = n.selectedValue ?? null;\r\n } else if (n.index === ClipperFacet.DocumentType) {\r\n this.snapshot.type = n.selectedValue ?? null;\r\n } else if (n.index === ClipperFacet.Article) {\r\n this.snapshot.anchor = n.selectedValue ?? null;\r\n } else if (n.index === ClipperFacet.Reason) {\r\n this.snapshot.reason = n.selectedValue ?? null;\r\n }\r\n });\r\n }\r\n if (this.snapshot.groups.length > 0) {\r\n this.snapshot.groups.forEach((n) => {\r\n if (n.index === ClipperFacet.Year) {\r\n this.snapshot.changedInterval = this.snapshot.fromDate !== null;\r\n this.snapshot.fromDate = null;\r\n this.snapshot.toDate = null;\r\n } else if (n.index === ClipperFacet.Sector) {\r\n this.snapshot.changedSector = this.snapshot.sector !== null;\r\n this.snapshot.sector = null;\r\n } else if (n.index === ClipperFacet.Author) {\r\n this.snapshot.changedAuthor = this.snapshot.author !== null;\r\n this.snapshot.author = null;\r\n } else if (n.index === ClipperFacet.DocumentType) {\r\n this.snapshot.changedType = this.snapshot.type !== null;\r\n this.snapshot.type = null;\r\n } else if (n.index === ClipperFacet.Article) {\r\n this.snapshot.changedAnchor = this.snapshot.anchor !== null;\r\n this.snapshot.anchor = null;\r\n } else if (n.index === ClipperFacet.Reason) {\r\n this.snapshot.changedReason = this.snapshot.reason !== null;\r\n this.snapshot.reason = null;\r\n }\r\n });\r\n }\r\n this.changed.emit(this.snapshot);\r\n }\r\n\r\n /**\r\n * Clear facets by group index\r\n * @param index : the group index to clear. Use -1 to clear all groups at once\r\n * @returns : the number of groups dismissed\r\n */\r\n protected clear(index: number = -1): number {\r\n let dismissed = 0;\r\n this.snapshot.usedGroups.forEach((n) => {\r\n if (index === -1 || index === n.index) {\r\n if (n.index === ClipperFacet.Year) {\r\n this.snapshot.changedInterval = true;\r\n this.snapshot.fromDate = null;\r\n this.snapshot.toDate = null;\r\n } else if (n.index === ClipperFacet.Sector) {\r\n this.snapshot.changedSector = true;\r\n this.snapshot.sector = null;\r\n } else if (n.index === ClipperFacet.Author) {\r\n this.snapshot.changedAuthor = true;\r\n this.snapshot.author = null;\r\n } else if (n.index === ClipperFacet.DocumentType) {\r\n this.snapshot.changedType = true;\r\n this.snapshot.type = null;\r\n } else if (n.index === ClipperFacet.Article) {\r\n this.snapshot.changedAnchor = true;\r\n this.snapshot.anchor = null;\r\n } else if (n.index === ClipperFacet.Reason) {\r\n this.snapshot.changedReason = true;\r\n this.snapshot.reason = null;\r\n }\r\n this.dismiss(n, false);\r\n dismissed++;\r\n }\r\n });\r\n if (dismissed) {\r\n this.changed.emit(this.snapshot);\r\n }\r\n return dismissed;\r\n }\r\n\r\n /**\r\n * Reset\r\n */\r\n reset() {\r\n this.snapshot.groups = [];\r\n this.snapshot.usedGroups = [];\r\n this.snapshot.hasFacets = false;\r\n this.snapshot.fromDate = null;\r\n this.snapshot.toDate = null;\r\n this.snapshot.sector = null;\r\n this.snapshot.author = null;\r\n this.snapshot.anchor = null;\r\n this.snapshot.type = null;\r\n this.snapshot.reason = null;\r\n }\r\n\r\n /**\r\n * Restore data\r\n * @param data : the data to restore\r\n */\r\n restore(data: ClipperSearchFacetsSnapshot) {\r\n if (data) {\r\n this.snapshot = data;\r\n this.changeDetector.markForCheck();\r\n }\r\n }\r\n\r\n /**\r\n * Save data\r\n */\r\n save(): ClipperSearchFacetsSnapshot {\r\n return this.snapshot;\r\n }\r\n}\r\n","<div fxLayout=\"column\" fxFill class=\"facets-container scroll-hidden\">\r\n @if (snapshot.usedGroups.length > 0) {\r\n <div class=\"facets-selection\">\r\n <mat-chip-set aria-label=\"Selezione\">\r\n @for (ug of snapshot.usedGroups; track ug) {\r\n <mat-chip (removed)=\"dismiss(ug)\" [matTooltip]=\"ug.selectedValueDescription ?? ''\">\r\n {{ug.selectedValueDescription}}\r\n <button matChipRemove [attr.aria-label]=\"'Rimuovi ' + ug.name\" [matTooltip]=\"'Rimuovi ' + ug.name\">\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip>\r\n }\r\n </mat-chip-set>\r\n <mat-divider class=\"divider\"></mat-divider>\r\n </div>\r\n }\r\n <div fxFlex=\"*\" class=\"scroll-auto facets-items-container\">\r\n @if (snapshot.groups.length > 0) {\r\n @for (group of snapshot.groups; track group.index; let i = $index) {\r\n <mat-accordion multi displayMode=\"flat\">\r\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0 \" [expanded]=\"i == 0\">\r\n <mat-expansion-panel-header class=\"accordion-header\" [attr.aria-label]=\"group.name\">\r\n <mat-panel-title>\r\n @if (group.index == 2 && snapshot.interval) {\r\n {{snapshot.interval}} ({{group.values.length}})\r\n } @else {\r\n {{group.name}} ({{group.values.length}})\r\n }\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <nav class=\"facets-items\">\r\n <ul>\r\n @for (item of group.values; track $index) {\r\n <li (click)=\"use(group, item)\" [attr.aria-label]=\"item.title\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"truncated\">\r\n <div class=\"truncated\">{{item.title}}</div>\r\n </div>\r\n <div fxLayoutAlign=\"end\" fxFlexAlign=\"center\">\r\n {{snapshot.hasTooManyResults ? '~' : ''}}{{item.count}}\r\n </div>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n </nav>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n }\r\n } @else if (snapshot.hasFacets && !snapshot.hasMoreFacets) {\r\n <div class=\"facets-message\">\r\n <p class=\"small\"><i>Tutte le opzioni sono state selezionate</i></p>\r\n </div>\r\n }\r\n </div>\r\n</div>","import { Clipboard } from '@angular/cdk/clipboard';\r\nimport { Component, inject } from '@angular/core';\r\nimport { ClipperDocumentInfo, ClipperExportDocumentsParams, ClipperMessages, ClipperModel, ClipperModule, ClipperQueryReferencesMode, ClipperSearchParams, ClipperSendDocumentsByEmailParams, ClipperService } from '@arsedizioni/ars-utils/clipper.common';\r\nimport { BroadcastService, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { DialogResult } from '@arsedizioni/ars-utils/ui';\r\nimport { ApplicationDialogService, SelectableItem, SelectDialogDelete, SendToDialogComponent } from '@arsedizioni/ars-utils/ui.application';\r\nimport saveAs from 'file-saver';\r\nimport { ClipperReferenceDialogResult, ClipperReferencesComponent } from '../references/references.component';\r\n\r\n\r\n@Component({\r\n template: '<div></div>',\r\n standalone: true,\r\n})\r\nexport class ClipperDocumentManager {\r\n\r\n protected clipboard = inject(Clipboard);\r\n public clipperService = inject(ClipperService);\r\n protected broadcastService = inject(BroadcastService);\r\n protected dialogService = inject(ApplicationDialogService);\r\n\r\n\r\n\r\n /**\r\n * Export a document in pdf format\r\n * @param item : the document to export\r\n */\r\n exportPdf(item: ClipperDocumentInfo) {\r\n if (!this.clipperService.loggedIn()) return;\r\n if (!item) return;\r\n this.dialogService\r\n .confirm(\"Confermi l'esportazione?\", 'Attenzione!')\r\n .componentInstance.choosen.subscribe((r: DialogResult) => {\r\n if (r.result === 'ok') {\r\n const id = item.id || item.documentId;\r\n this.dialogService.busy('Esportazione in corso...');\r\n this.clipperService.exportPdf(id)\r\n .subscribe({\r\n next: r2 => {\r\n saveAs(r2, (item.title1 ? item.title1 : id) + '.pdf');\r\n },\r\n complete: () => {\r\n this.dialogService.clearBusy();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Save current document list or just the selected documents as a csv\r\n * @param documentIds: the document id list\r\n * @param searchParams: the search params\r\n */\r\n exportItems(documentIds: string[] | null | undefined, searchParams: ClipperSearchParams | null | undefined = null) {\r\n if (!this.clipperService.loggedIn()) return;\r\n let model: ClipperExportDocumentsParams = { ids: documentIds ?? [], query: null, format: 1 };\r\n if (!model.ids || model.ids.length === 0) {\r\n model.query = searchParams;\r\n }\r\n this.dialogService.busy('Salvataggio in corso...');\r\n this.clipperService.export(model)\r\n .subscribe({\r\n next: r => {\r\n saveAs(r, 'elenco.csv');\r\n },\r\n complete: () => {\r\n this.dialogService.clearBusy();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Archive a list of items\r\n * @param items: the item list\r\n */\r\n addToArchive(items: ClipperDocumentInfo[]) {\r\n this.broadcastService.sendMessage(ClipperMessages.COMMAND_ARCHIVE_ADD, items);\r\n }\r\n\r\n /**\r\n * Create a new deadline\r\n * @param item : the item to add\r\n */\r\n addToCalendar(item: ClipperDocumentInfo) {\r\n this.broadcastService.sendMessage(ClipperMessages.COMMAND_CALENDAR_ADD, item);\r\n }\r\n\r\n /**\r\n * Add a list of items to working documents\r\n * @param items : the item list\r\n */\r\n addItemsToWorkingDocuments(items: ClipperDocumentInfo[]) {\r\n this.broadcastService.sendMessage(ClipperMessages.COMMAND_WORKING_ADD, items);\r\n }\r\n\r\n /**\r\n* Add a list of items to working documents\r\n* @param items : the item list\r\n*/\r\n addItemsToBag(items: ClipperDocumentInfo[]) {\r\n if (!this.clipperService.loggedIn()) return;\r\n this.clipperService.addToBag(items?.map(n => n.documentId ?? n.id) ?? []);\r\n }\r\n\r\n\r\n /**\r\n * Copy metadata to clipboard\r\n * @param item : the item to copy\r\n */\r\n copyMetadataToClipboard(item: ClipperDocumentInfo) {\r\n if (!item || item.model === ClipperModel.Coordinamento) return;\r\n let meta =\r\n (item.id ?? item.documentId) + '\\t' +\r\n item.title1?.replaceAll(\"\\r\\n\", \" \") + '\\t';\r\n if (item.title2)\r\n meta += item.title2.replaceAll(\"\\r\\n\", \" \");\r\n meta += '\\t';\r\n if (item.number)\r\n meta += item.number;\r\n meta += '\\t';\r\n if (item.publishingDate) {\r\n item.publishingDate = new Date(item.publishingDate);\r\n meta += SystemUtils.formatDate(item.publishingDate);\r\n } else if (item.date) {\r\n item.date = new Date(item.date);\r\n meta += SystemUtils.formatDate(item.date);\r\n }\r\n meta += '\\t';\r\n if (item.originDescription)\r\n meta += item.originDescription\r\n this.clipboard.copy(meta);\r\n this.dialogService.toast(\"Metadati copiati negli appunti.\");\r\n }\r\n\r\n /**\r\n * Show a document permalink\r\n * @param item : the item to show the link for\r\n */\r\n showLink(item: ClipperDocumentInfo) {\r\n if (!item) return;\r\n let id = item.id ? item.id : item.documentId;\r\n const channels = item.channelName\r\n ? 'Canali: ' + item.channelName + '<br>'\r\n : '';\r\n let origin = item.origin\r\n ? 'Origine: ' +\r\n item.origin +\r\n ' - ' +\r\n (item.originDescription ? item.originDescription : '') +\r\n '<br>'\r\n : '';\r\n const topics = item.topics ? 'Argomento: ' + item.topics + '<br>' : '';\r\n if (!id) return;\r\n let message =\r\n \"<p >Il link che trovi qui sotto è un riferimento diretto al documento selezionato.</p>\" +\r\n \"<p >Lo puoi utilizzare nella tua documentazione o inviarlo per email ad un tuo collega. La persona che desidererà visualizzare il documento dovrà necessariamente essere un utente abbonato.</p>\" +\r\n \"<p >Seleziona e copia (fai CTRL+C) il link qui sotto.</p>\" +\r\n \"<div class='small accent'>\" +\r\n 'https://clipper.arsedizioni.it/?id=' +\r\n id +\r\n '</div>' +\r\n '<br>' +\r\n '<hr>' +\r\n '<p class=\"small\">' +\r\n channels +\r\n origin +\r\n topics\r\n '</p>';\r\n\r\n this.dialogService.info(message, 'Copia link', 'Chiudi');\r\n }\r\n\r\n /**\r\n * Send documents links by email\r\n * @param items : the document list\r\n */\r\n sendItemsTo(items: ClipperDocumentInfo[]) {\r\n if (!this.clipperService.loggedIn()) return;\r\n if (!items || items.length === 0) return;\r\n const d = this.dialogService.open(SendToDialogComponent, {\r\n ariaLabel: 'invia documenti per email',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: false,\r\n closeOnNavigation: false,\r\n data: {\r\n info:\r\n 'Puoi inviare i documenti a chi vuoi ma, per poterli visualizzare, è necessario essere un utente abbonato.',\r\n count: items.length,\r\n },\r\n minWidth: '375px',\r\n maxWidth: '600px',\r\n width: '99%',\r\n });\r\n d.componentInstance.done\r\n .subscribe((r: ClipperSendDocumentsByEmailParams) => {\r\n r.ids = items?.map(n => n.documentId ?? n.id) ?? [];\r\n this.dialogService.busy('Invio in corso...');\r\n this.clipperService.sendTo(r)\r\n .subscribe({\r\n next: r2 => {\r\n if (!r2.success) {\r\n this.dialogService.error(r2.message);\r\n } else {\r\n this.dialogService.toast('Invio completato con successo.');\r\n d.close();\r\n }\r\n },\r\n complete: () => {\r\n this.dialogService.clearBusy();\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Display a document report\r\n * @param documentId : the document id\r\n * @param title: the document short title\r\n */\r\n openReport(documentId: string, title: string | null = null) {\r\n if (!this.clipperService.loggedIn()) return;\r\n if (!documentId) return;\r\n this.clipperService.report(documentId)\r\n .subscribe({\r\n next: (r) => {\r\n saveAs(r, (title ? title : documentId) + '.html');\r\n },\r\n complete: () => {\r\n this.dialogService.clearBusy();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n* Open an item\r\n* This should be always overridden\r\n* @param documentId : the document id\r\n* @param query : the query document\r\n* @param newWindow: true if the document must be open into a new window\r\n*/\r\n open(\r\n _documentId: string | null | undefined,\r\n _query: string | null | undefined = null,\r\n _newWindow: boolean = false) {\r\n }\r\n\r\n /**\r\n * Display a document report\r\n * @param item : the document\r\n */\r\n report(item: ClipperDocumentInfo) {\r\n if (!item) return;\r\n if (item.model != ClipperModel.NormativaVigente && item.model != ClipperModel.Scadenze) {\r\n this.dialogService.info(\"Questa funzionalità non è disponibile per questo tipo di documento.\");\r\n return;\r\n } else {\r\n this.openReport(item.documentId, item.title1);\r\n }\r\n }\r\n\r\n /**\r\n * Browse document references\r\n * @param document id : the document id\r\n * @param mode : the reference mode\r\n */\r\n openReferences(documentId: string, mode: ClipperQueryReferencesMode = ClipperQueryReferencesMode.ReferencesIn) {\r\n if (!documentId) return;\r\n const d = this.dialogService.open(ClipperReferencesComponent, {\r\n ariaLabel: 'riferimenti legati al documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: false,\r\n closeOnNavigation: false,\r\n data: { documentId: documentId, mode: mode },\r\n minWidth: '375px',\r\n maxWidth: '1000px',\r\n width: '99%',\r\n height: '99%',\r\n });\r\n d.afterClosed()\r\n .subscribe((r: ClipperReferenceDialogResult) => {\r\n if (r && r.documentId) this.open(r.documentId);\r\n });\r\n }\r\n\r\n /**\r\n * Manage clipper bag\r\n */\r\n openBag() {\r\n let items: any = [];\r\n this.clipperService.bag().forEach(n => {\r\n let title = n.title1 ?? n.title2;\r\n items.push({\r\n template: title,\r\n bag: n,\r\n searchBag: { name: title },\r\n });\r\n });\r\n const d = this.dialogService.select({\r\n title: 'Gestisci documenti di lavoro',\r\n multi: false,\r\n mustSelect: false,\r\n okCaption: 'SELEZIONA',\r\n items: items,\r\n canDelete: true,\r\n canView: true,\r\n });\r\n d.componentInstance.view\r\n .subscribe((r: SelectableItem) => {\r\n let item = r.bag;\r\n this.open(item.documentId);\r\n });\r\n d.componentInstance.delete\r\n .subscribe((r: SelectDialogDelete) => {\r\n var item = r.selectedItems[0].bag;\r\n this.clipperService.removeFromBag(item.documentId).add(\r\n () => {\r\n this.dialogService.toast('Operazione completata con successo.');\r\n for (let p = 0; p < r.items.length; p++) {\r\n if (r.items[p].bag.DocumentId === item.DocumentId) {\r\n r.items.splice(p, 1);\r\n if (r.items.length === 0) d.close();\r\n return;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Print current document\r\n */\r\n print() {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage('{\"type\": \"print\"}', '*');\r\n }\r\n\r\n /**\r\n * Find in current document\r\n */\r\n find() {\r\n this.dialogService.info('Per cercare nel documento premi CTRL + F.');\r\n }\r\n\r\n /**\r\n * Checks if a module is supported by RS\r\n * @param module : the module to check\r\n * @returns: true if the module is supported\r\n */\r\n isModuleSupportedByRS(module: ClipperModule): boolean {\r\n return module === ClipperModule.GazzetteBollettiniEFontiDiverse ||\r\n module === ClipperModule.NormativaVigente ||\r\n module === ClipperModule.ScadenzeESegnalazioni;\r\n }\r\n\r\n /**\r\n * Checks if a model is supported by RS\r\n * @param model : the model to check\r\n * @returns: true if the model is supported\r\n */\r\n isModelSupportedByRS(model: ClipperModel): boolean {\r\n return model === ClipperModel.AggiornamentoNormativo ||\r\n model === ClipperModel.NormativaVigente ||\r\n model === ClipperModel.Scadenze;\r\n\r\n }\r\n\r\n /**\r\n * Checks if all documents are supported by RS\r\n * @param documents : the list of documents\r\n * @returns: true if all documents supports RS\r\n */\r\n canSupportRS(documents: ClipperDocumentInfo[]): boolean {\r\n let allow = false;\r\n documents.forEach(n => {\r\n allow = this.isModelSupportedByRS(n.model);\r\n if (!allow) return;\r\n });\r\n return allow;\r\n }\r\n\r\n /**\r\n * Checks if RS is enabled for all given documents\r\n * @param documents : the documents to check\r\n * @returns true if alla documents ar RS enabled\r\n */\r\n RS_enabled(documents: ClipperDocumentInfo[]): boolean {\r\n if (!documents || documents.length === 0) return false;\r\n let allow = false;\r\n documents.forEach(n => {\r\n allow = n && (n.model === ClipperModel.NormativaVigente ||\r\n n.model === ClipperModel.AggiornamentoNormativo ||\r\n n.model === ClipperModel.Scadenze);\r\n if (!allow) return;\r\n });\r\n return allow;\r\n }\r\n\r\n /**\r\n * New law\r\n * @param documents: the array of documents to link to the law\r\n */\r\n RS_newLaw(documents: ClipperDocumentInfo[]) {\r\n if (!this.clipperService.supportsRS()) return;\r\n this.broadcastService.sendMessage(ClipperMessages.INTEROP_RS_NEW_LAW, documents);\r\n }\r\n\r\n /**\r\n * New activity\r\n * @param document: the document to link to the activity\r\n */\r\n RS_newActivity(document: ClipperDocumentInfo) {\r\n if (!document) return;\r\n if (!this.clipperService.supportsRS()) return;\r\n this.broadcastService.sendMessage(ClipperMessages.INTEROP_RS_NEW_ACTIVITY, document);\r\n }\r\n\r\n /**\r\n * Document usage report\r\n * @param document: the law\r\n */\r\n RS_usageReport(document: ClipperDocumentInfo) {\r\n if (!document) return;\r\n if (!this.clipperService.supportsRS()) return;\r\n this.broadcastService.sendMessage(ClipperMessages.INTEROP_RS_USAGE_REPORT, document);\r\n }\r\n\r\n\r\n}\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Output, ViewChild, inject, signal } from '@angular/core';\r\nimport { DateInterval } from '@arsedizioni/ars-utils/core';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatCalendar, MatCalendarCellClassFunction } from '@angular/material/datepicker';\r\nimport { endOfDay, endOfMonth, startOfMonth, startOfToday } from 'date-fns';\r\nimport { CalendarEmptyHeader } from '@arsedizioni/ars-utils/ui.application';\r\nimport { ClipperSearchCalendarSnapshotMonth, ClipperSearchCalendarSnapshotResult } from '@arsedizioni/ars-utils/clipper.common';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'clipper-search-calendar',\r\n templateUrl: './search-calendar.component.html',\r\n styleUrls: ['./search-calendar.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FlexModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatCalendar,\r\n MatChipsModule,\r\n MatIconModule,\r\n MatDividerModule,\r\n MatExpansionModule\r\n ],\r\n})\r\nexport class ClipperSearchCalendarComponent {\r\n @ViewChild('calendar') calendar!: MatCalendar<any>;\r\n @Output() changed = new EventEmitter<DateInterval | null>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n \r\n protected busy = signal<boolean>(false);\r\n protected months = signal<ClipperSearchCalendarSnapshotMonth[]>(null);\r\n protected calendarSpecialDays?: number[] | null = null;\r\n protected calendarEmptyHeader = CalendarEmptyHeader;\r\n public calendarDate: Date = startOfToday();\r\n protected calendarDateClass: MatCalendarCellClassFunction<Date> = (cellDate) => {\r\n if (!this.calendarSpecialDays) return '';\r\n if (this.calendarSpecialDays[cellDate.getDate() - 1] > 0) {\r\n return cellDate < startOfToday() ? 'special-date-expired' : 'special-date';\r\n }\r\n return '';\r\n };\r\n protected calendarDateFilter = (): boolean => { return false; }\r\n\r\n\r\n /**\r\n * Update calendar\r\n * @param value : the snapshot\r\n * @param view : view to update 'month' or ' months'. Default is 'months'\r\n * @param date : the new current date\r\n */\r\n update(value: ClipperSearchCalendarSnapshotResult | null = null,\r\n view: 'month' | 'months' = 'months',\r\n date: Date) {\r\n this.busy.set(true);\r\n setTimeout(() => {\r\n if (view === 'months') {\r\n this.months.set(value?.months);\r\n } else {\r\n if (value && value.months && value.months.length > 0)\r\n this.calendarSpecialDays = value.months[0].days;\r\n if (this.calendar) {\r\n this.calendar.activeDate = date;\r\n this.calendar.selected = date;\r\n this.calendar.updateTodaysDate();\r\n }\r\n this.calendarDate = date;\r\n }\r\n this.changeDetector.markForCheck();\r\n this.busy.set(false);\r\n }, 250);\r\n }\r\n\r\n\r\n /**\r\n * Filter by date\r\n * @param date : the date to filter to or \"month\" to filter by the whole month.\r\n */\r\n protected filterByDate(date: Date | string | null) {\r\n if (date === 'month') {\r\n if (this.calendarDate) {\r\n this.changed.emit(\r\n new DateInterval(\r\n endOfDay(startOfMonth(this.calendarDate)),\r\n endOfMonth(this.calendarDate)));\r\n }\r\n } else if (date) {\r\n this.changed.emit(\r\n new DateInterval(\r\n endOfDay(date as Date),\r\n endOfDay(date as Date)));\r\n } else {\r\n this.changed.emit(null);\r\n }\r\n }\r\n\r\n /**\r\n * Filter by month\r\n * @param monthInfo: the month info\r\n */\r\n protected filterByMonth(monthInfo: ClipperSearchCalendarSnapshotMonth) {\r\n let d = new Date(monthInfo.year, monthInfo.month - 1, 1);\r\n this.changed.emit(\r\n new DateInterval(\r\n endOfDay(startOfMonth(d)),\r\n endOfMonth(d)));\r\n this.calendarSpecialDays = monthInfo.days;\r\n this.calendar.activeDate = d;\r\n this.calendar.updateTodaysDate();\r\n this.calendarDate = d;\r\n }\r\n\r\n /**\r\n * Disable date selection from calendar\r\n */\r\n protected filterCalendarDates = (): boolean => {\r\n return true;\r\n };\r\n}\r\n","<div fxLayout=\"column\" fxFill class=\"calendar-container scroll-hidden\">\r\n <div class=\"calendar-months\">\r\n <div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"center\" fxLayoutGap=\"8px\" fxFill>\r\n @for (m of months(); track m) {\r\n <button fxFlex=\"37px\" mat-button class=\"small uppercase\" (click)=\"filterByMonth(m)\" [disabled]=\"m.total === 0\">\r\n @if (m.expired) {\r\n <span class=\"expired\" [matTooltip]=\"m.expired + ' elementi in ritardo'\">{{m.monthShortName}}</span>\r\n }\r\n @if (!m.expired) {\r\n <span [matTooltip]=\"m.total + ' elementi'\">{{m.monthShortName}}</span>\r\n }\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"separator\"></div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-auto\">\r\n @if (!busy()) {\r\n <mat-calendar #calendar [headerComponent]=\"calendarEmptyHeader\" [dateClass]=\"calendarDateClass\"\r\n [dateFilter]=\"calendarDateFilter\" (selectedChange)=\"filterByDate($event)\" class=\"calendar-month\">\r\n </mat-calendar>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-around\" style=\"padding:0 15px\">\r\n <button type=\"button\" mat-button color=\"primary\" (click)=\"filterByDate('month')\">Tutto il\r\n mese</button>\r\n </div>\r\n }\r\n </div>\r\n</div>","import { BreakpointObserver } from '@angular/cdk/layout';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component, OnDestroy, ViewChild, inject,\r\n signal\r\n} from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { ClipperDocumentInfo, ClipperMessages, ClipperModel, ClipperSearchCalendarSnapshotResult, ClipperSearchFacetsResult, ClipperSearchParams, ClipperSearchResult, ClipperSort, ClipperUtils } from '@arsedizioni/ars-utils/clipper.common';\r\nimport {\r\n DateFormat,\r\n NameValueItem, ScreenService, SelectableModel, SystemUtils,\r\n ThemeService\r\n} from '@arsedizioni/ars-utils/core';\r\nimport { startOfDay, startOfToday, subDays } from 'date-fns';\r\nimport { Subject } from 'rxjs';\r\nimport { ClipperDocumentsUtils } from '../../documents';\r\nimport { ClipperDocumentManager } from '../document-manager/document-manager';\r\nimport { ClipperSearchCalendarComponent } from '../search-calendar/search-calendar.component';\r\nimport { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';\r\n\r\n\r\n\r\n@Component({\r\n template: '<div></div>',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [ClipperDocumentManager, ClipperSearchFacetsComponent, ClipperSearchCalendarComponent],\r\n})\r\nexport class ClipperSearchResultManager\r\n extends ClipperDocumentManager\r\n implements OnDestroy {\r\n @ViewChild('paginator') paginator!: MatPaginator;\r\n @ViewChild('facets') facets!: ClipperSearchFacetsComponent;\r\n @ViewChild('calendar') calendar!: ClipperSearchCalendarComponent;\r\n\r\n protected unsubscribe: Subject<void> = new Subject<void>();\r\n protected changeDetector = inject(ChangeDetectorRef);\r\n protected breakpointObserver = inject(BreakpointObserver);\r\n private themeService = inject(ThemeService);\r\n public screenService = inject(ScreenService);\r\n public selection: SelectableModel<any, string> | null = null;\r\n protected snapshot: ClipperSearchResult | null = new ClipperSearchResult();\r\n protected filterBusy = signal<boolean>(false);\r\n protected filterParams: ClipperSearchParams = new ClipperSearchParams();\r\n protected filterPaneHasBackdrop: boolean = false;\r\n protected filterPaneClosed: boolean = false;\r\n protected filterPane2HasBackdrop: boolean = false;\r\n protected filterPane2Closed: boolean = false;\r\n protected sortOptions: NameValueItem<number>[] = [];\r\n protected sortMode: NameValueItem<number> | null = null;\r\n protected scrollerId: string = 'scroller_' + SystemUtils.generateUUID();\r\n protected restorableId: string | null = null;\r\n protected hasFacets = signal<boolean>(false);\r\n protected hasCalendar = signal<boolean>(false);\r\n protected hasRegions = (): boolean => {\r\n return (this.filterParams.sectors?.filter(n => n.value === 'LR').length ?? 0) > 0;\r\n };\r\n ngOnDestroy() {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n\r\n\r\n /**\r\n * Update menu buttons visibility when the menu is closed\r\n */\r\n updateMenuButtonsVisibility() {\r\n if (this.snapshot) {\r\n this.snapshot.items?.forEach(n => {\r\n n.isMenuOpen = false;\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Scroll on top o list area\r\n * @param top: the top position\r\n */\r\n scroll(top: number = 0) {\r\n const elem = document.getElementById(this.scrollerId);\r\n if (elem) {\r\n elem.scrollTo({ top: top, left: 0, behavior: 'auto' });\r\n }\r\n }\r\n\r\n /**\r\n * Check if every element are selected\r\n */\r\n allSelected(): boolean {\r\n return this.selection?.current?.selected?.length === this.snapshot?.items?.length;\r\n }\r\n\r\n /**\r\n * Master selection toggle\r\n * @param select: true to select all elements false to deselect all elements\r\n */\r\n selectAll(select: boolean = true) {\r\n if (select) {\r\n this.snapshot?.items?.forEach(n => this.selection?.select(n, n.documentId));\r\n } else {\r\n this.snapshot?.items?.forEach(n => this.selection?.deselect(n, n.documentId));\r\n }\r\n }\r\n\r\n /**\r\n * Check if selections exists\r\n * @returns true if at least one element is selected\r\n */\r\n hasAnySelection(): boolean {\r\n return (this.selection?.all?.length ?? 0) > 0;\r\n }\r\n\r\n /**\r\n * Check if only one element is selected\r\n * @returns true if only one element is selected\r\n */\r\n hasSingleSelection(): boolean {\r\n return (this.selection?.all?.length ?? 0) === 1;\r\n }\r\n\r\n /**\r\n * Get the first selected item \r\n * @returns the selected item or null \r\n */\r\n getSingleSelection(): ClipperDocumentInfo | null {\r\n return this.hasAnySelection() ? this.selection?.all[0] : null;\r\n }\r\n\r\n\r\n\r\n /**\r\n * Clear selection\r\n */\r\n clearSelection() {\r\n return this.selection?.clear();\r\n }\r\n\r\n /**\r\n * Return the number of selected items or null\r\n * @returns Return the number of selected items\r\n */\r\n countSelections(): number | null {\r\n return (this.selection && this.selection?.all?.length > 0) ? this.selection?.all?.length : null;\r\n }\r\n\r\n /**\r\n * Get the selected id\r\n */\r\n getSeletectId(): string | null {\r\n if (this.hasAnySelection()) {\r\n return this.selection?.all[0].documentId;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Get all selected ids\r\n */\r\n getSeletectIds(): string[] | null {\r\n if ((this.selection?.all?.length ?? 0) > 100) {\r\n this.dialogService.error('La selezione non può contenere più di 100 elementi.');\r\n return null;\r\n }\r\n let ids: string[] = [];\r\n if (this.hasAnySelection()) {\r\n this.selection?.all?.forEach(n => {\r\n ids.push(n.documentId);\r\n });\r\n }\r\n return ids;\r\n }\r\n\r\n /**\r\n * Get all selected ids\r\n * @returns a tuple list with id and data\r\n */\r\n getSeletectIdsAndData(): [string, ClipperDocumentInfo][] | null {\r\n if ((this.selection?.all?.length ?? 0) > 100) {\r\n this.dialogService.error('La selezione non può contenere più di 100 elementi.');\r\n return null;\r\n }\r\n let data: [string, ClipperDocumentInfo][] = [];\r\n if (this.hasAnySelection()) {\r\n this.selection?.all?.forEach(n => {\r\n data.push([n.documentId, n]);\r\n });\r\n }\r\n return data;\r\n }\r\n\r\n\r\n /**\r\n * Prepare result items\r\n * @param items : the items to process\r\n * @param params : the current search params\r\n */\r\n prepareResultItems(items: ClipperDocumentInfo[], params: ClipperSearchParams) {\r\n const today = startOfToday();\r\n const groupByYear =\r\n !params.sortMode ||\r\n params.sortMode === ClipperSort.DateAsc ||\r\n params.sortMode === ClipperSort.DateDesc ||\r\n params.sortMode === ClipperSort.SourceDateAsc ||\r\n params.sortMode === ClipperSort.SourceDateDesc;\r\n const groupByRelevance = params.sortMode === ClipperSort.Relevance;\r\n const groupByPopularity = params.sortMode === ClipperSort.Popularity;\r\n let group = '';\r\n items?.forEach(n => {\r\n n.documentId = n.documentId ?? n.id;\r\n this.selection?.updateCurrent(n, n.documentId);\r\n if (n.model === ClipperModel.Quesiti) {\r\n n.info = \"Quesito n° \" + n.number + \" del \" + SystemUtils.formatDate(n.date, \"d MMM yyyy\");\r\n } else if (n.model === ClipperModel.Scadenze ||\r\n n.model === ClipperModel.Segnalazioni) {\r\n switch (n.model) {\r\n case ClipperModel.Scadenze:\r\n n.originDescription = 'Scadenza';\r\n break;\r\n case ClipperModel.Segnalazioni:\r\n n.originDescription = 'Segnalazione';\r\n break;\r\n }\r\n if (n.expiringInfo) {\r\n let parts = n.expiringInfo.split('|');\r\n if (parts.length === 3) n.expiringDescription = parts[2];\r\n }\r\n if (n.expiringDate) {\r\n n.date = startOfDay(new Date(n.expiringDate));\r\n const d = startOfDay(subDays(n.date, 15));\r\n n.isExpiring = today <= n.date && today >= d;\r\n n.isExpired = n.date < today;\r\n\r\n }\r\n } else {\r\n if ((n.model === ClipperModel.Articoli ||\r\n n.model === ClipperModel.News) &&\r\n n.tags) {\r\n n.info = n.tags.toUpperCase().substring(1).replaceAll(\"#\", \", \");\r\n }\r\n if (n.model !== ClipperModel.AggiornamentoNormativo &&\r\n n.model !== ClipperModel.NormativaVigente &&\r\n n.model !== ClipperModel.Juris &&\r\n n.date) {\r\n n.date = startOfDay(new Date(n.date ?? n.publishingDate));\r\n const d = startOfDay(subDays(startOfToday(), 7))\r\n n.isNew = n.date > d;\r\n } else {\r\n n.date = null;\r\n }\r\n if (n.anchors) {\r\n let anchorType: number | null = null;\r\n let anchors: any = [];\r\n n.anchors.forEach(a => {\r\n if (a.type === 20) return;\r\n if (a.type !== anchorType) {\r\n if (a.type >= 3)\r\n anchors.push({ text: a.typeDescription });\r\n anchorType = a.type;\r\n }\r\n let score = a.score;\r\n if (score > 7) score -= 7;\r\n else if (score > 5) score -= 5;\r\n else if (score > 3) score -= 3;\r\n anchors.push({\r\n text: a.text,\r\n title: a.title,\r\n documentId: a.documentId,\r\n uri: a.uri,\r\n veryRelevant: score > 0.6\r\n });\r\n });\r\n n.anchors = anchors;\r\n }\r\n if (n.validityState > 0) {\r\n n.validityDescription = 'Il documento non è più vigente';\r\n n.isExpired = true;\r\n if (n.validUntilDate) {\r\n const expiringDate = startOfDay(new Date(n.validUntilDate));\r\n if (expiringDate < today) {\r\n n.validityDescription =\r\n 'Il documento non è più vigente dal ' +\r\n SystemUtils.formatDate(expiringDate) +\r\n '.';\r\n } else {\r\n n.validityDescription =\r\n 'Il documento non sarà più vigente dal ' +\r\n SystemUtils.formatDate(expiringDate) +\r\n '.';\r\n n.isExpired = false;\r\n }\r\n }\r\n }\r\n if (n.expiringDate) {\r\n n.date = startOfDay(new Date(n.expiringDate));\r\n const d = startOfDay(subDays(n.date, 15));\r\n n.isExpiring = today <= n.date && today >= d;\r\n n.isExpired = n.date < today;\r\n }\r\n }\r\n if (groupByYear) {\r\n let date = \r\n (params.sortMode === ClipperSort.SourceDateAsc || params.sortMode === ClipperSort.SourceDateDesc)\r\n ? n.sourceDate ?? n.publishingDate ?? n.date\r\n : n.publishingDate ?? n.date;\r\n const year = SystemUtils.formatDate(date, DateFormat.LongMonthAndYear).toLowerCase();\r\n if (group !== year) {\r\n n.group = year;\r\n group = year;\r\n }\r\n } else if (groupByRelevance) {\r\n if (group !== 'none') {\r\n n.group =\r\n 'Elementi più rilevanti per la ricerca: ' + params.text;\r\n group = 'none';\r\n }\r\n } else if (groupByPopularity) {\r\n if (group !== 'none') {\r\n n.group = 'Elementi più popolari in ordine decrescente';\r\n group = 'none';\r\n }\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Prepare results\r\n * @param data : the optional result list to prepare\r\n * @param facets : the optional facets list to prepare\r\n * @param months : the optional snapshot months \r\n * @param month : the optional snapshot month\r\n * @param date : the optinal snapshot current date\r\n */\r\n prepareResults(\r\n data?: ClipperSearchResult | null,\r\n facets?: ClipperSearchFacetsResult | null,\r\n months?: ClipperSearchCalendarSnapshotResult | null,\r\n month?: ClipperSearchCalendarSnapshotResult | null,\r\n date?: Date | null) {\r\n if (data) {\r\n this.selection?.current.clear();\r\n this.snapshot = data;\r\n if (this.snapshot.items) {\r\n this.prepareResultItems(this.snapshot.items, this.filterParams);\r\n }\r\n }\r\n if (facets || months || month) {\r\n this.hasFacets.set(false);\r\n this.hasCalendar.set(false);\r\n if (facets) { \r\n this.facets?.update(facets.facets, facets.interval);\r\n if (this.facets && this.snapshot) {\r\n this.snapshot.facets = this.facets?.save();\r\n this.snapshot.facets.hasTooManyResults = this.snapshot.total >= 1000;\r\n }\r\n this.hasFacets.set(this.snapshot.facets.hasFacets); \r\n } else if (months || month) { \r\n if (months) {\r\n this.calendar?.update(months, 'months', date ?? new Date());\r\n }\r\n if (month) {\r\n this.calendar?.update(month, 'month', date ?? new Date());\r\n }\r\n this.hasCalendar.set(true);\r\n }\r\n }\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n\r\n /**\r\n* Save current document list or just the selected documents as a csv\r\n*/\r\n exportResults() {\r\n if (this.snapshot?.total > 0 || this.hasAnySelection()) {\r\n this.exportItems(this.getSeletectIds(), this.filterParams);\r\n }\r\n }\r\n\r\n /**\r\n * Return item state css class\r\n * @param item : the item to evaluate\r\n */\r\n getItemStateCssClass(item: ClipperDocumentInfo): string | null {\r\n if (item.isRead !== true && ClipperUtils.isClipperModelReadable(item.model)) return 'unread-bg';\r\n else if (item.isExpired) return 'expired-bg';\r\n else if (item.popularity === 3) return 'popular-bg';\r\n else if (item.popularity > 3) return 'very-popular-bg';\r\n return null;\r\n }\r\n\r\n /**\r\n * Return the item state tooltip text\r\n * @param item : the item to evaluate\r\n */\r\n getItemStateTooltip(item: ClipperDocumentInfo): string {\r\n if (item.isRead !== true && ClipperUtils.isClipperModelReadable(item.model)) return 'Non letto';\r\n else if (item.isExpired) return 'Non più vigente';\r\n else if (item.popularity === 3) return 'Documento con numero di citazioni alto';\r\n else if (item.popularity > 3)\r\n return 'Documento con numero di citazioni molto alto';\r\n return '';\r\n }\r\n\r\n /**\r\n * Return the item icon\r\n * @param item : the item to evaluate\r\n */\r\n getItemIcon(item: ClipperDocumentInfo): string {\r\n switch (item.model) {\r\n case ClipperModel.NormativaVigente: return 'gavel';\r\n case ClipperModel.Articoli:\r\n case ClipperModel.Quesiti:\r\n case ClipperModel.MetodiDiAnalisi: return 'extension';\r\n default: return 'updated';\r\n }\r\n }\r\n\r\n /**\r\n * Toggle the read flag\r\n * @param item : the item to update\r\n * @paran e: the optional click event\r\n */\r\n toggleRead(item: ClipperDocumentInfo, e: Event | null = null) {\r\n e?.preventDefault();\r\n e?.stopPropagation();\r\n this.setRead(!item?.isRead, item);\r\n\r\n }\r\n\r\n /**\r\n * Toggle the selection flag\r\n * @param item : the item to update\r\n * @paran e: the optional click event\r\n */\r\n toggleSelection(item: ClipperDocumentInfo, e: Event | null = null) {\r\n e?.preventDefault();\r\n e?.stopPropagation();\r\n this.selection?.toggle(item, item.documentId)\r\n\r\n\r\n }\r\n\r\n /**\r\n * Get the selected id\r\n */\r\n setRead(value: boolean, item: ClipperDocumentInfo = null) {\r\n let documentIds: string[] = [];\r\n if (item) {\r\n documentIds = [item.documentId];\r\n } else if (this.hasAnySelection()) {\r\n documentIds = this.selection?.all?.map(n => n.documentId);\r\n }\r\n return this.clipperService.updateState({ documentIds: documentIds, isRead: value })\r\n .subscribe(r => {\r\n if (r.success) {\r\n if (item) {\r\n item.isRead = value;\r\n } else if (this.hasAnySelection()) {\r\n this.selection?.all?.forEach(n => {\r\n n.isRead = value;\r\n })\r\n }\r\n\r\n // Update dashboard\r\n this.clipperService.updateUnreadItems(\r\n ClipperUtils.getClipperModuleFromModel(item.model), value ? -1 : 1);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Open an item\r\n * @param documentId : the document id\r\n * @param query: the current query or null\r\n * @param newWindow: true if the document must be open into a new window\r\n */\r\n override open(documentId: string, query: string | null | undefined = null, newWindow: boolean = false) {\r\n if (!newWindow) this.openDocument(documentId, query);\r\n else window.open('/documento/' + documentId, '_blank');\r\n }\r\n\r\n /**\r\n * Open a document\r\n * @param documentId : the document id\r\n * @param query: the current query or null\r\n */\r\n openDocument(documentId: string, query: string | null | undefined = null) {\r\n if (!documentId) return;\r\n ClipperDocumentsUtils.openDocument(\r\n this.dialogService,\r\n this.clipperService,\r\n documentId,\r\n query ?? this.filterParams.text,\r\n null,\r\n this.themeService.getTheme());\r\n\r\n }\r\n\r\n ///\r\n // Restorable\r\n ///\r\n\r\n /**\r\n * Save restorable data\r\n * @param id : the restorable id\r\n * @param scroll : the current scroll position\r\n */\r\n save(id: string, scroll: number = 0) {\r\n sessionStorage.setItem(\r\n id,\r\n JSON.stringify({\r\n paginator: {\r\n page: this.paginator?.pageIndex ?? 0,\r\n total: this.snapshot?.total ?? 0,\r\n size: this.paginator?.pageSize ?? 15\r\n },\r\n facets: this.facets?.save(),\r\n filterParams: this.filterParams,\r\n scroll: scroll,\r\n sort: { mode: this.sortMode, options: this.sortOptions },\r\n data: this.snapshot\r\n ? { items: this.snapshot.items, total: this.snapshot.total }\r\n : null\r\n }));\r\n }\r\n\r\n /**\r\n * Restore data\r\n * @param id : the restorable id\r\n */\r\n restore(id: string) {\r\n const value = sessionStorage.getItem(id);\r\n if (value) {\r\n const data = JSON.parse(value);\r\n if (data) {\r\n this.filterParams = data.filterParams;\r\n this.snapshot = data.data;\r\n this.sortMode = data.sort.mode;\r\n this.sortOptions = data.sort.options;\r\n if (this.facets && data.facets) {\r\n this.facets.restore(data.facets);\r\n this.hasFacets.set(data.facets ? true : false);\r\n }\r\n\r\n if (this.paginator && data.paginator) {\r\n this.paginator.pageIndex = data.paginator.page;\r\n this.paginator.pageSize = data.paginator.size;\r\n this.paginator.length = data.paginator.total;\r\n }\r\n this.broadcastService.sendMessage(ClipperMessages.COMMAND_SEARCH_RESTORED, data.filterParams)\r\n this.changeDetector.detectChanges();\r\n\r\n // Scroll top\r\n setTimeout(() => {\r\n this.scroll(data.scroll ?? 0);\r\n }, 100);\r\n }\r\n }\r\n }\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, input, OnInit, ViewChild } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenu, MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ClipperDocumentInfo, ClipperMessages, ClipperModel } from '@arsedizioni/ars-utils/clipper.common';\r\nimport { BroadcastService, FormatPipe, ScreenService } from '@arsedizioni/ars-utils/core';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\r\n\r\n\r\nexport enum ClipperSearchResultItemDisplayMode {\r\n List = 1,\r\n Tile = 2\r\n}\r\n\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'clipper-search-result-item',\r\n templateUrl: './search-result-item.component.html',\r\n styleUrls: ['./search-result-item.component.scss'],\r\n standalone: true,\r\n imports: [\r\n NgClass,\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n FlexLayoutModule,\r\n FormatPipe\r\n ],\r\n})\r\nexport class ClipperSearchResultItemComponent implements OnInit {\r\n\r\n @ViewChild('contextMenuTrigger') contextMenuTrigger!: MatMenuTrigger;\r\n protected unsubscribe: Subject<void> = new Subject<void>();\r\n protected screenService = inject(ScreenService);\r\n protected broadcastService = inject(BroadcastService);\r\n protected changeDetector = inject(ChangeDetectorRef);\r\n parent = input<ClipperSearchResultManager>();\r\n item = input<ClipperDocumentInfo>();\r\n actions = input<MatMenu>();\r\n tileNoPictureUrl = input<string>();\r\n tilePictureUrl = input<string>();\r\n isSelectable = input<boolean>(true);\r\n isReadable = input<boolean>(true);\r\n displayModelName = input<boolean>(false);\r\n displayMode = input<ClipperSearchResultItemDisplayMode>(ClipperSearchResultItemDisplayMode.List);\r\n protected readonly displayModesEnum: typeof ClipperSearchResultItemDisplayMode = ClipperSearchResultItemDisplayMode;\r\n protected readonly modelsEnum: typeof ClipperModel = ClipperModel;\r\n protected contextMenuPosition = { x: '0px', y: '0px' };\r\n\r\n ngOnInit(): void {\r\n this.parent()?.selection?.changed\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(() => {\r\n this.changeDetector.markForCheck();\r\n });\r\n\r\n // React to message broadcasting\r\n this.broadcastService.getMessage()\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(message => {\r\n if (message.id === ClipperMessages.DOCUMENT_NAVIGATED) {\r\n if (this.isReadable && this.item().documentId === message.data.document.documentId && !this.item().isRead) { \r\n this.parent()?.setRead(true, this.item()).add(() => { \r\n this.item().isRead = true;\r\n this.changeDetector.markForCheck();\r\n })\r\n }\r\n }\r\n });\r\n }\r\n\r\n onContextMenu(event: MouseEvent, item: ClipperDocumentInfo) {\r\n event.preventDefault();\r\n this.contextMenuPosition.x = event.clientX + 'px';\r\n this.contextMenuPosition.y = event.clientY + 'px';\r\n this.contextMenuTrigger.menuData = { item: item };\r\n this.contextMenuTrigger.openMenu();\r\n }\r\n\r\n /**\r\n * Checks if current item is selected\r\n * @returns true if current item is selected\r\n */\r\n protected isSelected(): boolean {\r\n return this.isSelectable() && this.parent()?.selection?.isSelected(this.item().documentId);\r\n };\r\n\r\n /**\r\n * Checks if current item is isReadable\r\n * @returns true if current item is isReadable\r\n */\r\n protected isRead(): boolean {\r\n return this.isReadable() && this.item().isRead === true;\r\n };\r\n\r\n}\r\n","<div>\r\n @if (displayMode() === displayModesEnum.List ) {\r\n <div class=\"item\" fxLayout=\"row\" fxLayoutGap=\"6px\" fxLayoutAlign=\"start center\" fxFill\r\n [ngClass]=\"{'item-selected': isSelected() }\" (contextmenu)=\"onContextMenu($event, item())\"\r\n (mouseenter)=\"item().isOver = true\" (mouseleave)=\"item().isOver = false\">\r\n <div fxFlex=\"6px\" fxFlexAlign=\"stretch\" [ngClass]=\"parent()?.getItemStateCssClass(item())\"\r\n [matTooltip]=\"parent()?.getItemStateTooltip(item())\"><span></span>\r\n </div>\r\n <div [fxFlex]=\"isSelectable() ? '48px' : '18px'\" fxLayoutAlign=\"center\">\r\n @if (isSelectable() && (screenService.isTouchable || item().isOver || isSelected())) {\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? parent()?.selection?.toggle(item(), item().documentId) : null\" [checked]=\"isSelected()\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"*\">\r\n <div class=\"item-content\">\r\n @if (displayModelName() && item().modelName) {\r\n @if (item().origin === 'GC' || item().origin === 'GN') {\r\n <div class=\"info-2\">GIURISPRUDENZA</div>\r\n } @else {\r\n <div class=\"info-2\">{{item().modelName}}</div>\r\n }\r\n }\r\n\r\n @if (item().info && item().model === modelsEnum.Quesiti) {\r\n @if(item().info) {\r\n <div class=\"info-1\">{{item().info}}</div>\r\n }\r\n }@else{\r\n @if (item().date) {\r\n <div class=\"info-1\">{{item().date | format:'D':'d MMM yyyy'}}</div>\r\n } @else if (item().author && (item().origin === 'LR' || item().origin === 'GC' || item().origin\r\n === 'GN')) {\r\n <div class=\"info-1\">{{item().author}}</div>\r\n }\r\n }\r\n <div>\r\n <a class=\"link\" (click)=\"parent()?.open(item().documentId)\"\r\n [attr.aria-label]=\"'Apri documento ' + item().title1\">{{item().title1 ?? item().title2}}</a>\r\n @if (item().part > 0) {\r\n <span class=\"badge\">PARTE {{item().part}}</span>\r\n }\r\n @if (item().isCommented) {\r\n <span class=\"badge\">COMMENTATA</span>\r\n }\r\n @if (item().validityState > 0) {\r\n <span class=\"badge-red\">{{item().validityDescription}}</span>\r\n }\r\n </div>\r\n @if(item().description && item().model === modelsEnum.Coordinamento) {\r\n <div class=\"title\">{{item().description}}</div>\r\n }\r\n @if (item().title2 &&\r\n item().model !== modelsEnum.Coordinamento &&\r\n item().model !== modelsEnum.AllerteAlimentari &&\r\n item().model !== modelsEnum.Scadenze &&\r\n item().model !== modelsEnum.Segnalazioni) {\r\n <div class=\"title\">{{item().title2}}</div>\r\n }\r\n @if (item().originDescription ) {\r\n <div class=\"info-1\">\r\n {{item().originDescription}}</div>\r\n }\r\n @if (item().anchors.length > 0) {\r\n <div class=\"details\">\r\n <div>DETTAGLIO</div>\r\n <div class=\"links\">\r\n @for (a of item().anchors; track $index) {\r\n <span>\r\n @if (a.uri && a.text) {\r\n <a (click)=\"parent()?.open(a.documentId + '#' + a.uri)\" [matTooltip]=\"a.title\">{{a.text}} @if\r\n (a.veryRelevant) {\r\n <sup>\r\n <mat-icon style='font-size:x-small; height: 10px; width:10px' color=\"primary\"\r\n matTooltip=\"Molto rilevante\">thumb_up_alt</mat-icon>\r\n </sup>\r\n }</a>\r\n }\r\n @if (!a.uri && a.text) {\r\n <span>{{a.text}}</span>\r\n }\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @if (item().taxonomy?.length > 0) {\r\n <div class=\"details\">\r\n <div>ARGOMENTI</div>\r\n <div class=\"links\">\r\n @for (n of item().taxonomy?.split('\\r\\n'); track $index) {\r\n <div class=\"link\">\r\n {{n}}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @if (item().model === modelsEnum.News || item().model === modelsEnum.Articoli || item().model ===\r\n modelsEnum.Juris) {\r\n @if (!displayModelName() && item().modelName) {\r\n <div class=\"info-1\">{{item().modelName}}</div>\r\n }\r\n @if (item().info){\r\n <div class=\"details\">\r\n <div>ARGOMENTI</div>\r\n <div class=\"links\">\r\n <div>{{item().info}}</div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n @if (item().model === modelsEnum.Coordinamento) {\r\n @if (item().title2) {\r\n <div class=\"details\">\r\n <div>TITOLO DOCUMENTO MODIFICATO</div>\r\n <div class=\"links\">\r\n <div>{{item().title2}}</div>\r\n </div>\r\n </div>\r\n }\r\n @if (item().description) {\r\n <div class=\"details\">\r\n <div>PROSSIMA SCADENZA</div>\r\n <div class=\"links\">\r\n <div>{{item().description}}</div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n <div fxFlex=\"48px\" fxLayoutAlign=\"end\">\r\n @if (item().isOver || item().isMenuOpen || isSelected()) {\r\n @if (isReadable() && !isRead() && item().model !== modelsEnum.Scadenze && item().model !==\r\n modelsEnum.Segnalazioni)\r\n {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Segna come già letta\" [attr.aria-label]=\"'Segna come già letta'\"\r\n (click)=\"parent()?.toggleRead(item(), $event)\">\r\n <mat-icon>flag</mat-icon>\r\n </button>\r\n }\r\n @if(item().model === modelsEnum.Scadenze || item().model === modelsEnum.Segnalazioni) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Aggiungi al tuo calendario\"\r\n [attr.aria-label]=\"'Aggiungi al tuo calendario'\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Menu\" [attr.aria-label]=\"'Menu opzioni'\"\r\n [matMenuTriggerFor]=\"actions()\" [matMenuTriggerData]=\"{item: item()}\" (click)=\"item().isMenuOpen = true\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"tile\" (contextmenu)=\"onContextMenu($event, item())\" (mouseenter)=\"item().isOver = true\"\r\n (mouseleave)=\"item().isOver = false\" [ngClass]=\"{'item-selected': isSelected(), \r\n 'item-unread': isRead()}\" (click)=\"parent()?.open(item().documentId)\">\r\n <div class=\"image-mark\" [ngClass]=\"{'image-mark-unread': !isRead()}\"></div>\r\n <div class=\"image\">\r\n @if (isReadable() || isSelectable()) {\r\n <div class=\"buttons\">\r\n @if (isReadable() && !isRead() && item().isOver === true) {\r\n <button mat-icon-button class=\"read\" matTooltip=\"Segna come già letto\"\r\n (click)=\"parent()?.toggleRead(item(), $event)\"><mat-icon>flag</mat-icon></button>\r\n }\r\n @if (isSelectable() && (isSelected() || item().isOver === true)) {\r\n <button mat-icon-button class=\"check\" [ngClass]=\"{'check-selected': isSelected()}\"\r\n matTooltip=\"Seleziona/Deseleziona\"\r\n (click)=\"parent()?.toggleSelection(item(), $event)\"><mat-icon>check</mat-icon></button>\r\n }\r\n </div>\r\n }\r\n <div class=\"info-1\">{{item().modelName}}</div>\r\n @if (item().info) {\r\n <div class=\"info-2\">{{item().info}}</div>\r\n }\r\n @if (item().pictureId && tilePictureUrl()) {\r\n <img decoding=\"async\" loading=\"lazy\" [src]=\"tilePictureUrl() + '?id=' + item().pictureId\" [alt]=\"item().title2\" />\r\n } @else if (tileNoPictureUrl()) {\r\n <picture>\r\n <img decoding=\"async\" loading=\"lazy\" [src]=\"tileNoPictureUrl()\"\r\n [alt]=\"item().title2 || 'immagine non trovata'\" />\r\n </picture>\r\n }\r\n </div>\r\n <div class=\"body\">\r\n <div class=\"date\">\r\n <span class=\"date-day\" [ngClass]=\"{'unread': !item().isRead}\">{{item().date | format:'D':'d\r\n MMMM'}}</span>\r\n <span class=\"date-divider\"></span>\r\n <span>{{item().date| format:'D':'yyyy'}}</span>\r\n </div>\r\n <div class=\"title\">{{item().title2}}</div>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n<div #contextMenuTrigger=\"matMenuTrigger\" style=\"position: fixed\" [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"actions()\" [matMenuTriggerData]=\"{item: item}\">\r\n</div>","import { Breakpoints } from '@angular/cdk/layout';\r\nimport { AfterViewInit, ChangeDetectionStrategy, Component, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MAT_DIALOG_DATA, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatDrawer, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n ClipperDocumentInfo,\r\n ClipperQueryReferencesMode, ClipperSearchFacetsSnapshot,\r\n ClipperSearchParams\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { SelectableModel, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { fromEvent } from 'rxjs';\r\nimport { debounceTime, takeUntil } from 'rxjs/operators';\r\nimport { ClipperDocumentMenuComponent } from '../document-menu/document-menu.component';\r\nimport { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';\r\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\r\nimport { ClipperSearchResultItemComponent } from '../search-result-item/search-result-item.component';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\nexport interface ClipperReferencesDialogData {\r\n mode?: ClipperQueryReferencesMode | null;\r\n anchor?: string | null;\r\n anchorTitle?: string | null;\r\n documentId: string;\r\n model: number;\r\n\r\n}\r\n\r\nexport interface ClipperReferenceDialogResult {\r\n documentId: string;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './references.component.html',\r\n styleUrls: ['./references.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FlexLayoutModule,\r\n MatDialogTitle,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n MatCheckboxModule,\r\n MatSlideToggleModule,\r\n FormsModule,\r\n MatMenuModule,\r\n MatBadgeModule,\r\n MatPaginatorModule,\r\n MatDialogContent,\r\n MatSidenavModule,\r\n MatProgressBarModule,\r\n ClipperDocumentMenuComponent,\r\n ClipperSearchFacetsComponent,\r\n ClipperSearchResultItemComponent\r\n\r\n ],\r\n})\r\nexport class ClipperReferencesComponent extends ClipperSearchResultManager\r\n implements OnInit, OnDestroy, AfterViewInit {\r\n @ViewChild('filterPane') filterPane!: MatDrawer;\r\n\r\n private dialogRef = inject(MatDialogRef<ClipperReferencesComponent>);\r\n protected dialogData: ClipperReferencesDialogData = inject(MAT_DIALOG_DATA) ?? { mode: ClipperQueryReferencesMode.ReferencesIn };\r\n protected title: string | null = null;\r\n protected item: ClipperDocumentInfo | null = null;\r\n\r\n ngOnInit() {\r\n\r\n if (this.dialogData) {\r\n switch (this.dialogData.mode) {\r\n case ClipperQueryReferencesMode.ReferencesIn:\r\n this.title = \"Documenti richiamati nelle note o nel testo\";\r\n break;\r\n case ClipperQueryReferencesMode.ReferencesOut:\r\n this.title = \"Documenti che richiamano quello in visione\";\r\n break;\r\n case ClipperQueryReferencesMode.ChangesIn:\r\n this.title = \"Modifiche subite\";\r\n break;\r\n case ClipperQueryReferencesMode.ChangesOut:\r\n this.title = \"Modifiche apportate\";\r\n break;\r\n case ClipperQueryReferencesMode.Juris:\r\n this.title = \"Giurisprudenza associata\";\r\n break;\r\n }\r\n if (this.dialogData.anchorTitle) {\r\n this.title += \" - \" + this.dialogData.anchorTitle;\r\n }\r\n\r\n // Use service snapshot\r\n this.snapshot = this.clipperService.referencesSnapshot() ?? { searchParams: new ClipperSearchParams(), interval: \"-1\" };\r\n if (\r\n this.filterParams.mode !== this.dialogData.mode ||\r\n this.filterParams.id !== this.dialogData.documentId ||\r\n this.filterParams.anchor !== this.dialogData.anchor\r\n ) {\r\n this.filterParams = new ClipperSearchParams();\r\n this.filterParams.mode = this.dialogData.mode;\r\n this.filterParams.model = this.dialogData.model;\r\n this.filterParams.anchor = this.dialogData.anchor;\r\n this.filterParams.id = this.dialogData.documentId;\r\n this.filterParams.useModifierInfo = this.dialogData.mode === ClipperQueryReferencesMode.ChangesOut;\r\n this.filterParams.returnModifierInfo = this.dialogData.mode !== ClipperQueryReferencesMode.ChangesOut;\r\n this.clipperService.referencesSnapshot.set(this.snapshot);\r\n }\r\n }\r\n\r\n // Initialize selection\r\n this.selection = new SelectableModel<any, string>(true, 'documentId');\r\n\r\n // Observe layout changes\r\n this.breakpointObserver\r\n .observe([\r\n Breakpoints.XSmall,\r\n Breakpoints.Small,\r\n Breakpoints.Medium,\r\n Breakpoints.Large,\r\n Breakpoints.XLarge,\r\n ])\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(result => {\r\n for (const query of Object.keys(result.breakpoints)) {\r\n if (result.breakpoints[query]) {\r\n this.handleFilterPaneVisibility();\r\n }\r\n }\r\n });\r\n\r\n\r\n // React to window size change\r\n fromEvent(window, 'resize')\r\n .pipe(takeUntil(this.unsubscribe), debounceTime(250))\r\n .subscribe(() => {\r\n this.resize();\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n // Handle filter pane \r\n this.handleFilterPaneVisibility();\r\n // Handle facets\r\n if (this.facets) {\r\n this.facets.changed\r\n .subscribe((value: ClipperSearchFacetsSnapshot) => {\r\n this.snapshot.facets = value;\r\n this.fetch(true);\r\n });\r\n }\r\n }, 0);\r\n this.fetch(true);\r\n this.restoreFacets();\r\n this.resize();\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n /**\r\n * Resize \r\n */\r\n private resize() {\r\n setTimeout(() => {\r\n let elem = document.getElementById('clipper-references-scrollable');\r\n if (elem) {\r\n const height = this.dialogService.getCurrentDialogScrollableHeight(\r\n ['clipper-references-fixed'],\r\n window.innerHeight\r\n );\r\n if (height != elem.clientHeight) {\r\n elem.setAttribute('style', 'padding:0 0 0 0;' + height + 'px !important;max-height:' + height + 'px !important');\r\n }\r\n } else {\r\n this.resize();\r\n }\r\n }, 0);\r\n }\r\n\r\n /**\r\n * Show hide filter pane manually\r\n */\r\n protected toggleFilterPane() {\r\n this.filterPaneClosed = !this.filterPaneClosed;\r\n this.filterPane?.toggle();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Handle filter pane visibility\r\n */\r\n private handleFilterPaneVisibility() {\r\n if (this.filterPane) {\r\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Small) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Medium)) {\r\n if (this.filterPane.opened) {\r\n this.filterPane.close();\r\n }\r\n this.filterPane.mode = 'over';\r\n this.filterPane.disableClose = false;\r\n this.filterPaneHasBackdrop = true;\r\n } else {\r\n if (!this.hasFacets()) {\r\n this.filterPane.close();\r\n } else if (!this.filterPane.opened && !this.filterPaneClosed) {\r\n this.filterPane.open();\r\n } else if (this.filterPane.opened && this.filterPaneClosed) {\r\n this.filterPane.close();\r\n }\r\n this.filterPane.mode = 'side';\r\n this.filterPane.disableClose = true;\r\n this.filterPaneHasBackdrop = false;\r\n }\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Close dialog\r\n */\r\n close() {\r\n this.dialogRef.close();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Send document links by email\r\n * @param item : the item to add\r\n */\r\n sendTo(item: ClipperDocumentInfo = null) {\r\n this.sendItemsTo(item ? [item] : this.selection?.all);\r\n }\r\n /**\r\n * Prepare teh search params\r\n * @param newSearch : true if it is a new search\r\n * @return the new search params\r\n */\r\n private prepareFetch(newSearch: boolean = false): ClipperSearchParams {\r\n const newParams: ClipperSearchParams = SystemUtils.clone(this.filterParams);\r\n newParams.count = 15;\r\n newParams.useModifierInfo =\r\n newParams.mode === ClipperQueryReferencesMode.ChangesOut;\r\n newParams.returnModifierInfo =\r\n newParams.mode !== ClipperQueryReferencesMode.ChangesOut;\r\n if (newSearch) {\r\n newParams.first = 0;\r\n }\r\n // Apply facets\r\n if (this.snapshot.facets?.fromDate) {\r\n newParams.fromDate = this.snapshot.facets?.fromDate;\r\n newParams.toDate = this.snapshot.facets?.toDate;\r\n newParams.year = this.snapshot.facets?.fromDate.getFullYear();\r\n } else if (this.snapshot.facets?.changedInterval) {\r\n newParams.year = null;\r\n newParams.fromDate = null;\r\n newParams.toDate = null;\r\n }\r\n if (this.snapshot.facets?.sector || this.snapshot.facets?.changedSector) {\r\n newParams.sector = this.snapshot.facets?.sector;\r\n }\r\n if (this.snapshot.facets?.type || this.snapshot.facets?.changedType) {\r\n newParams.type = this.snapshot.facets?.type;\r\n }\r\n if (this.snapshot.facets?.author || this.snapshot.facets?.changedAuthor) {\r\n newParams.author = this.snapshot.facets?.author;\r\n }\r\n return newParams;\r\n\r\n }\r\n\r\n\r\n /**\r\n * Perform a search\r\n * @param newSearch: true if is a new search\r\n */\r\n fetch(newSearch: boolean = false) {\r\n if (!this.clipperService.loggedIn()) return;\r\n this.dialogService.busy('Ricerca in corso...');\r\n const searchParams = this.prepareFetch(newSearch);\r\n this.clipperService.references(searchParams.toReferencesSearchParams())\r\n .subscribe({\r\n next: (r) => {\r\n if (!r.success) this.dialogService.error(r.message);\r\n else {\r\n this.prepareResults(r.value);\r\n\r\n // Handle facets\r\n if (this.snapshot.total > 0) {\r\n if (newSearch)\r\n // Update facets\r\n this.fetchFacets(searchParams);\r\n } else {\r\n this.hideFacets();\r\n }\r\n\r\n if (newSearch) {\r\n if (this.paginator) this.paginator.pageIndex = 0;\r\n }\r\n\r\n this.scroll(0);\r\n }\r\n },\r\n complete: () => {\r\n this.dialogService.clearBusy();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Show a new page result\r\n * @param e : the MatPaginator PageEvent data\r\n */\r\n fetchMore(e: PageEvent) {\r\n let first = e.pageIndex * this.filterParams.count;\r\n this.filterParams.first = first;\r\n this.fetch();\r\n }\r\n\r\n /**\r\n * Get facets\r\n * @param params: the clipper search params\r\n */\r\n fetchFacets(params: ClipperSearchParams) {\r\n if (!this.clipperService.loggedIn()) return;\r\n if (!this.snapshot.facets || this.snapshot.facets?.hasMoreFacets) {\r\n this.filterBusy.set(true);\r\n this.clipperService.referencesFacets(params.toReferencesSearchParams())\r\n .subscribe({\r\n next: (r) => {\r\n if (r.success) {\r\n this.prepareResults(null, r.value);\r\n this.handleFilterPaneVisibility();\r\n }\r\n },\r\n complete: () => {\r\n this.filterBusy.set(false);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Hide facets\r\n */\r\n protected hideFacets() {\r\n this.hasFacets.set(false);\r\n this.facets?.reset();\r\n this.filterPane.close();\r\n this.filterPaneClosed = false;\r\n }\r\n /**\r\n * Try to restore stored facets\r\n */\r\n restoreFacets() {\r\n if (this.snapshot.facets) {\r\n this.facets.restore(this.snapshot.facets);\r\n this.handleFilterPaneVisibility();\r\n }\r\n }\r\n\r\n /**\r\n * Close current dialog and return the id to navigate to\r\n * @param documentId : the document id\r\n */\r\n open(documentId: string) {\r\n this.dialogRef.close({ documentId: documentId });\r\n }\r\n}\r\n","<div class=\"clipper-references-fixed\">\r\n <div class=\"dialog-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap='10px' fxFill>\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>{{title}} </h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\r\n (click)=\"close()\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n @if (dialogData.mode > 0 || selection?.hasValue() || (snapshot && snapshot.facets?.hasFacets && filterPane &&\r\n (!filterPane.opened || filterPaneClosed))) {\r\n <div style=\"padding: 0 10px 0 24px; height: 48px; min-height: 48px;\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\">\r\n @if (dialogData.mode === 1) {\r\n <mat-slide-toggle name=\"excludeTextReferences\" [(ngModel)]=\"filterParams.excludeTextReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citati nelle note\r\n </mat-slide-toggle>\r\n } @else if (dialogData.mode == 2) {\r\n <mat-slide-toggle name=\"excludeNotesReferences\" [(ngModel)]=\"filterParams.excludeNotesReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citano nel testo il documento\r\n </mat-slide-toggle>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection?.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button\r\n matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\r\n [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection?.all.length\" matBadgeColor=\"accent\">checklist</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" [selectionSource]=\"selection\" [isReadable]=\"false\"\r\n [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\" aria-label=\"'Affina ricerca'\"\r\n (click)=\"toggleFilterPane()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"clipper-references-scrollable\">\r\n <mat-drawer-container class=\"fill\" [hasBackdrop]=\"filterPaneHasBackdrop\">\r\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small drawer-with-loader\" opened=\"false\">\r\n @if (filterBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (filterBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"56px\" class=\"title-container-with-loader\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlexAlign=\"center\" class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\">\r\n <clipper-search-facets #facets></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" [id]=\"scrollerId\" class=\"scroll-auto\" style=\"padding: 0 5px;\">\r\n @if (!snapshot.total) {\r\n <div class=\"message-container\">\r\n <p class=\"message\"><b>Nessun elemento da visualizzare.</b></p>\r\n </div>\r\n } @else {\r\n <div>\r\n @for (item of snapshot.items; track $index; let i = $index) {\r\n @if (item.group) {\r\n <div class=\"items-group-title\">\r\n <div [ngClass]=\"{'group-spaced': i > 0}\">{{item.group}}</div>\r\n </div>\r\n }\r\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\"\r\n [actions]=\"contextMenu\"></clipper-search-result-item>\r\n }\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"false\" [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n <!-- footer -->\r\n @if ((snapshot?.total ?? 0) > 0) {\r\n <div class=\"items-footer\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <mat-paginator #paginator class=\"paginator\" [hidePageSize]=\"true\" [length]=\"snapshot?.total ?? 0\"\r\n [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\" (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n</div>","import { NgStyle } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter, OnInit,\r\n Output,\r\n ViewChild,\r\n inject,\r\n signal\r\n} from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatListModule, MatSelectionList } from '@angular/material/list';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n ClipperDocumentAnchorInfo,\r\n ClipperService\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\n\r\nexport interface ClipperDocumentIndexDialogData {\r\n documentId: string,\r\n excludedTypes?: number[] | null,\r\n multiple?: boolean | null\r\n}\r\n\r\nexport interface ClipperDocumentIndexDialogResult {\r\n data: ClipperDocumentAnchorInfo[] \r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './document-index.component.html',\r\n styleUrls: ['./document-index.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n FlexLayoutModule,\r\n MatDialogTitle,\r\n MatDialogContent,\r\n MatListModule, \r\n NgStyle, \r\n MatTooltipModule,\r\n MatDialogActions,\r\n MatButtonModule,\r\n MatDialogClose,\r\n ],\r\n})\r\nexport class ClipperDocumentIndexComponent implements OnInit {\r\n @ViewChild('selection') selection!: MatSelectionList;\r\n @Output() done = new EventEmitter<ClipperDocumentIndexDialogResult>();\r\n\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private clipperService = inject(ClipperService);\r\n private dialogService = inject(DialogService);\r\n protected dialogData: ClipperDocumentIndexDialogData = inject(MAT_DIALOG_DATA);\r\n protected items: ClipperDocumentAnchorInfo[] | null;\r\n protected okDisabled = signal<boolean>(false);\r\n\r\n ngOnInit(): void {\r\n if (this.dialogData) {\r\n if (this.dialogData.documentId) {\r\n this.load();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Display document structure\r\n */\r\n private load() {\r\n if (!this.clipperService.loggedIn()) return;\r\n if (!this.dialogData) return;\r\n this.dialogService.setBusy('Caricamento in corso...');\r\n this.clipperService.index(this.dialogData.documentId)\r\n .subscribe({\r\n next: (r) => {\r\n if (!r.success) {\r\n this.dialogService.error(r.message);\r\n } else {\r\n this.items = [];\r\n r.value?.items.forEach((n: ClipperDocumentAnchorInfo) => {\r\n\r\n if (!this.dialogData.excludedTypes || this.dialogData.excludedTypes.indexOf(n.type) === -1) {\r\n if (n.title) n.description = n.title;\r\n else {\r\n if (n.type < 3) {\r\n n.description = n.text.trim();\r\n } else {\r\n n.description =\r\n n.typeDescription.trim() + ' ' + n.text.trim() + '.';\r\n }\r\n }\r\n this.items.push(n);\r\n }\r\n });\r\n this.changeDetector.markForCheck();\r\n }\r\n },\r\n complete: () => {\r\n this.dialogService.clearBusy();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle selection/deselection of an item\r\n */\r\n protected select() {\r\n this.okDisabled.set(\r\n !this.selection || this.selection.selectedOptions.selected.length === 0);\r\n }\r\n\r\n /**\r\n * Confirm selection\r\n * @param item: the selected item or null to use multiple selection if allowed\r\n */\r\n protected use(item: ClipperDocumentAnchorInfo = null) {\r\n if (this.okDisabled()) return;\r\n if (this.dialogData?.multiple) {\r\n if (item) return; // multiple and single item selection not supported\r\n let selection: ClipperDocumentAnchorInfo[] = [];\r\n this.selection.selectedOptions.selected.forEach(n => {\r\n selection.push(n.value);\r\n });\r\n this.done.emit({data: selection});\r\n } else if (item) {\r\n this.done.emit({ data: [item] });\r\n }\r\n }\r\n}\r\n","<h2 mat-dialog-title>Indice</h2>\r\n<div mat-dialog-content>\r\n @if (!items || items.length === 0) {\r\n <div>\r\n <p class=\"message\"><i>Nessun elemento da visualizzare.</i></p>\r\n </div>\r\n } @else {\r\n <mat-selection-list dense #selection (selectionChange)=\"select();\" [multiple]=\"dialogData.multiple\"\r\n hideSingleSelectionIndicator=\"true\">\r\n @for (item of items; track item) {\r\n @if (item.type > 4) {\r\n <div class=\"small uppercase truncated accent\" style=\"display: flex; align-items: center; min-height: 36px;\">\r\n <div><b>{{item.description}}</b></div>\r\n </div>\r\n } @else {\r\n <mat-list-option color=\"primary\" [selected]=\"false\" [value]=\"item\" (click)=\"use(item)\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div [fxFlex]=\"(10 * item.level) + 'px'\"></div>\r\n <div fxFlex=\"*\" class=\"truncated\">\r\n <div class=\"small\" [matTooltip]=\"item.description\">{{item.description}}</div>\r\n </div>\r\n </div>\r\n </mat-list-option>\r\n }\r\n }\r\n </mat-selection-list>\r\n }\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n @if (dialogData.multiple) {\r\n <button mat-flat-button color=\"primary\" [disabled]=\"okDisabled()\" (click)=\"use()\">Usa</button>\r\n }\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">Chiudi</button>\r\n </div>\r\n</div>","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter, OnDestroy,\r\n OnInit,\r\n Output,\r\n Renderer2,\r\n ViewChild,\r\n inject,\r\n signal\r\n} from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogContent, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatDrawer, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { Router } from '@angular/router';\r\nimport {\r\n ClipperDocumentAnchorInfo,\r\n ClipperDocumentInfo,\r\n ClipperDocumentRelevants,\r\n ClipperMessages,\r\n ClipperModel,\r\n ClipperQueryReferencesMode,\r\n ClipperSearchParams\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport {\r\n SafeUrlPipe,\r\n SystemUtils,\r\n ThemeType\r\n} from '@arsedizioni/ars-utils/core';\r\nimport { FilePreviewComponent } from '@arsedizioni/ars-utils/ui.application';\r\nimport { Subject, fromEvent } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { ClipperReferenceDialogResult, ClipperReferencesComponent } from '../references/references.component';\r\nimport { ClipperDocumentIndexComponent, ClipperDocumentIndexDialogResult } from '../document-index/document-index.component';\r\nimport { ClipperDocumentManager } from '../document-manager/document-manager';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { ClipperDocumentsUtils } from '../../documents';\r\nimport { ClipperDocumentMenuComponent } from '../document-menu/document-menu.component';\r\n\r\n\r\nexport interface ClipperDocumentDialogData {\r\n selectionMode: number;\r\n id: string;\r\n query?: string | null;\r\n theme?: ThemeType | null;\r\n\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './document.component.html',\r\n styleUrls: ['./document.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n FlexLayoutModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n MatDividerModule,\r\n MatProgressBarModule,\r\n MatDialogContent,\r\n MatSidenavModule,\r\n SafeUrlPipe,\r\n ClipperDocumentMenuComponent\r\n ],\r\n})\r\nexport class ClipperDocumentComponent extends ClipperDocumentManager\r\n implements OnInit, OnDestroy {\r\n @ViewChild('relevantsPane') relevantsPane!: MatDrawer;\r\n @Output() closing = new EventEmitter();\r\n @Output() opening = new EventEmitter();\r\n\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private breakpointObserver = inject(BreakpointObserver);\r\n private renderer = inject(Renderer2);\r\n private rendererListener1: any;\r\n private router = inject(Router);\r\n private dialogRef = inject(MatDialogRef<ClipperDocumentComponent>);\r\n protected dialogData: ClipperDocumentDialogData = inject(MAT_DIALOG_DATA) ?? { mode: ClipperQueryReferencesMode.ReferencesIn };\r\n protected url = signal<string>(null);\r\n protected title = signal<string>(null);\r\n protected busy = signal<boolean>(false);\r\n protected lastQuery?: string | null = null;\r\n protected lastDocument?: ClipperDocumentInfo | null = {};\r\n protected relevants: ClipperDocumentRelevants = {\r\n items: [],\r\n hits: 0,\r\n hit: 0,\r\n minimumScore: 100,\r\n };\r\n protected relevantsPaneHasBackdrop: boolean = false;\r\n protected relevantsPaneClosed: boolean = false;\r\n protected relevantsBusy = signal<boolean>(false);\r\n protected hasRelevants = signal<boolean>(false);\r\n protected selectionMode?: number | null = null;\r\n\r\n ngOnInit(): void {\r\n if (this.dialogData) {\r\n this.selectionMode = this.dialogData.selectionMode;\r\n if (this.dialogData.id) {\r\n const url =\r\n this.clipperService.serviceUri +\r\n \"/documents/render/?query=\" +\r\n (this.dialogData.query ?? '') +\r\n \"&id=\" +\r\n this.dialogData.id +\r\n \"&theme=\" +\r\n this.dialogData.theme;\r\n this.navigateByUrl(url);\r\n\r\n }\r\n }\r\n\r\n // Listen to window messages\r\n this.rendererListener1 = this.renderer.listen(\r\n 'window',\r\n 'message',\r\n (e: Event) => {\r\n let event = e as MessageEvent;\r\n if (!event) return;\r\n if (event.data) {\r\n try {\r\n var data = JSON.parse(event.data);\r\n if (data) {\r\n switch (data.type) {\r\n case 'navigated':\r\n this.navigated(\r\n data.id,\r\n data.title1,\r\n data.title2,\r\n data.model,\r\n data.module,\r\n data.moduleName,\r\n data.date,\r\n data.number,\r\n data.author,\r\n data.origin,\r\n data.originDescription,\r\n data.bag,\r\n data.validityInfo,\r\n data.expiringInfo,\r\n data.primaryId,\r\n data.primaryModel,\r\n data.secondaryId,\r\n data.isTrial\r\n );\r\n break;\r\n case 'navigate':\r\n this.navigate(data.url);\r\n break;\r\n case 'references':\r\n this.openReferences(\r\n data.id,\r\n data.mode,\r\n data.model,\r\n data.anchor,\r\n data.anchorTitle,\r\n data.update\r\n );\r\n break;\r\n case 'hits':\r\n this.relevants.hits = data.total;\r\n this.updateRelevants();\r\n break;\r\n }\r\n this.changeDetector.markForCheck();\r\n this.resize();\r\n }\r\n } catch {\r\n }\r\n }\r\n }\r\n );\r\n\r\n // Observe layout changes\r\n this.breakpointObserver\r\n .observe([\r\n Breakpoints.XSmall,\r\n Breakpoints.Small,\r\n Breakpoints.Medium,\r\n Breakpoints.Large,\r\n Breakpoints.XLarge,\r\n ])\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(result => {\r\n for (const query of Object.keys(result.breakpoints)) {\r\n if (result.breakpoints[query]) {\r\n this.handleRelevantsPaneVisibility();\r\n }\r\n }\r\n });\r\n\r\n // React to window size change\r\n fromEvent(window, 'resize')\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(() => {\r\n this.resize();\r\n });\r\n this.resize();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n if (this.rendererListener1) {\r\n this.rendererListener1();\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Resize \r\n */\r\n private resize() {\r\n setTimeout(() => {\r\n let elem = document.getElementById('clipper-document-scrollable');\r\n if (elem) {\r\n const height = this.dialogService.getCurrentDialogScrollableHeight(\r\n ['clipper-document-fixed'],\r\n window.innerHeight\r\n );\r\n if (height != elem.clientHeight) {\r\n elem.setAttribute('style', 'padding:0;height:' + height + 'px !important;max-height:' + height + 'px !important');\r\n elem = document.getElementById('clipper-document-iframe');\r\n elem?.setAttribute('style', 'height:' + (height - 20) + 'px !important;max-height:' + (height - 20) + 'px !important');\r\n }\r\n } else {\r\n this.resize();\r\n }\r\n }, 0);\r\n }\r\n\r\n\r\n\r\n /**\r\n * Show hide relevants pane manually\r\n */\r\n protected toggleRelevantsPane() {\r\n this.relevantsPaneClosed = !this.relevantsPaneClosed;\r\n this.relevantsPane?.toggle();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Handle filter pane visibility\r\n */\r\n private handleRelevantsPaneVisibility() {\r\n if (this.relevantsPane) {\r\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Small) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Medium)) {\r\n if (this.relevantsPane.opened) {\r\n this.relevantsPane.close();\r\n }\r\n this.relevantsPane.mode = 'over';\r\n this.relevantsPane.disableClose = false;\r\n this.relevantsPaneHasBackdrop = true;\r\n } else {\r\n if (!this.relevantsPane.opened && !this.relevantsPaneClosed && this.hasRelevants()) {\r\n this.relevantsPane.open();\r\n } else if (this.relevantsPane.opened && this.relevantsPaneClosed) {\r\n this.relevantsPane.close();\r\n }\r\n this.relevantsPane.mode = 'side';\r\n this.relevantsPane.disableClose = true;\r\n this.relevantsPaneHasBackdrop = false;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Close dialog\r\n */\r\n\r\n protected close() {\r\n if (this.closing) {\r\n this.closing.emit();\r\n }\r\n this.dialogRef.close();\r\n }\r\n\r\n /**\r\n * Navigate to a new document\r\n * @param id : the document id\r\n */\r\n navigate(id: string) {\r\n if (!id || id.length == 0)\r\n return; // Nothing to do\r\n\r\n if (id.indexOf('?') !== -1) {\r\n if (id.startsWith('/api'))\r\n this.navigateByUrl(this.clipperService.serviceUri + id.substring(4));\r\n else if (!id.startsWith(this.clipperService.serviceUri))\r\n this.navigateByUrl(this.clipperService.serviceUri + id);\r\n else this.navigateByUrl(id);\r\n } else\r\n this.navigateByUrl(\r\n this.clipperService.serviceUri +\r\n \"/documents/render/?query=&id=\" + id);\r\n\r\n }\r\n\r\n /**\r\n * Navigate by url\r\n * @param url : the url to navigate to\r\n */\r\n navigateByUrl(url: string) {\r\n if (!url || url.length === 0 || url === 'about:blank')\r\n return; // Nothing to do\r\n // Clean url, take only the first anchor\r\n let parts = url.split('#');\r\n url = parts[0];\r\n if (parts.length > 1) {\r\n url += '#' + parts[1];\r\n }\r\n // Handle free text query\r\n let query = '';\r\n let p = url.indexOf('query=');\r\n if (p !== -1) {\r\n p += 6;\r\n while (url.length > p && url[p] !== '&' && url[p] !== '#') {\r\n query += url[p++];\r\n }\r\n if (query.length > 0) {\r\n // Reset\r\n this.relevants.hit = 0;\r\n try {\r\n // Assign query to enable search for fragments\r\n this.lastQuery = decodeURIComponent(encodeURIComponent(query));\r\n } catch {\r\n this.lastQuery = query;\r\n }\r\n }\r\n }\r\n // Theme\r\n if (url.indexOf('theme=') === -1) {\r\n p = url.indexOf('id=');\r\n if (p !== -1) {\r\n url = url.substring(0, p) + 'theme=' + this.dialogData.theme + '&' + url.substring(p);\r\n }\r\n }\r\n\r\n let navigateToFile = url.indexOf('&file=true') !== -1;\r\n if (navigateToFile === true) {\r\n // Preview\r\n this.previewFile(url);\r\n } else {\r\n // Begin loading only if not downloading a file\r\n this.busy.set(url.indexOf('documents/render/item') === -1);\r\n // Navigate\r\n this.url.set(url);\r\n }\r\n }\r\n\r\n /**\r\n * Navigated callback \r\n */\r\n public navigated(\r\n id: string, // Documnent id\r\n title1: string, // Title 1\r\n title2: string, // Title 2\r\n model: number, // Model\r\n moduleId: number, // Module\r\n moduleName: string, // Module name\r\n date: string, // Date\r\n number: string, // Number\r\n author: string, // Author\r\n origin: string, // Origin\r\n originDescription: string, // Origin description\r\n bag: string, // Flags\r\n validityInfo: string, // Info about validity\r\n expiringInfo: string, // Info about expiring date\r\n primaryId: string, // Primary document id\r\n primaryModel: number, // Primary document model\r\n secondaryId: string, // Secondary document id\r\n isTrial: boolean // True if is a trial request\r\n ) {\r\n // Check for session expiring\r\n if (title1 === 'Sessione non valida') {\r\n this.dialogService\r\n .error(title2, null, title1, 'Accedi di nuovo')\r\n .afterClosed()\r\n .subscribe(() => {\r\n this.router.navigate(['login']);\r\n });\r\n return;\r\n }\r\n\r\n // Store data\r\n if (!this.lastDocument) {\r\n this.lastDocument = {};\r\n }\r\n this.lastDocument.id = id;\r\n this.lastDocument.documentId = id;\r\n this.lastDocument.title1 = title1 ? SystemUtils.urlDecode(title1) : null;\r\n this.lastDocument.title2 = title2 ? SystemUtils.urlDecode(title2) : null;\r\n this.lastDocument.model = model;\r\n this.lastDocument.module = moduleId;\r\n this.lastDocument.moduleName = moduleName;\r\n this.lastDocument.date = new Date(date);\r\n this.lastDocument.number = number;\r\n this.lastDocument.author = author;\r\n this.lastDocument.origin = origin;\r\n this.lastDocument.originDescription = originDescription;\r\n this.lastDocument.bag = bag;\r\n this.lastDocument.validityInfo = validityInfo;\r\n this.lastDocument.primaryId = primaryId;\r\n this.lastDocument.primaryModel = primaryModel;\r\n this.lastDocument.hasPrimary =\r\n primaryId &&\r\n (model === ClipperModel.AggiornamentoNormativo ||\r\n model === ClipperModel.NormativaVigente);\r\n if (primaryId) {\r\n var description = '';\r\n switch (primaryModel ? primaryModel : model) {\r\n case ClipperModel.NormativaVigente:\r\n description = 'Testo vigente';\r\n break;\r\n case ClipperModel.AggiornamentoNormativo:\r\n description = 'Testo storico';\r\n break;\r\n case ClipperModel.Scadenze:\r\n description = 'Scadenza';\r\n break;\r\n case ClipperModel.Coordinamento:\r\n description = 'Modifica';\r\n break;\r\n default:\r\n description = 'Collegamento';\r\n break;\r\n }\r\n this.lastDocument.primaryDescription = description;\r\n }\r\n this.lastDocument.secondaryId = secondaryId;\r\n this.lastDocument.isTrial = isTrial;\r\n\r\n // Handle expiring info\r\n this.lastDocument.expiringDescription = null;\r\n if (expiringInfo) {\r\n let parts = expiringInfo.split('#');\r\n if (parts.length > 0) {\r\n let parts2 = parts[0].split('|');\r\n if (parts2.length > 0)\r\n this.lastDocument.expiringDate = new Date(parts2[0]);\r\n if (parts2.length > 1) this.lastDocument.expiringInfo = parts2[1];\r\n if (parts2.length > 2)\r\n this.lastDocument.expiringInfo += '|' + parts2[2];\r\n }\r\n if (parts.length > 1) this.lastDocument.expiringDescription = parts[1];\r\n }\r\n\r\n // Set title\r\n this.title.set(this.lastDocument.title1\r\n ? this.lastDocument.title1\r\n : this.lastDocument.title2);\r\n\r\n // Get last document update\r\n this.clipperService.lastUpdate(this.lastDocument.id).subscribe(r => {\r\n if (r.success) {\r\n this.lastDocument.lastUpdate = r.value;\r\n }\r\n });\r\n\r\n // Notify navigation has completed\r\n this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_NAVIGATED, {\r\n document: this.lastDocument,\r\n });\r\n\r\n this.busy.set(false);\r\n }\r\n\r\n /**\r\n * goto previous document in history\r\n */\r\n protected back() {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage('{\"type\": \"back\"}', '*');\r\n }\r\n\r\n /**\r\n * Goto next document in history\r\n */\r\n protected forward() {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage('{\"type\": \"forward\"}', '*');\r\n }\r\n\r\n\r\n\r\n /**\r\n * Goto next relevant item\r\n */\r\n protected nextRelevant() {\r\n let i = this.relevants.hit + 1;\r\n if (i <= this.relevants.hits) {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage('{\"type\": \"relevant\", \"value\": \"next\"}', '*');\r\n this.relevants.hit++;\r\n }\r\n }\r\n\r\n /**\r\n * Goto previous relevant item\r\n */\r\n protected previousRelevant() {\r\n let i = this.relevants.hit - 1;\r\n if (i > 0) {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage(\r\n '{\"type\": \"relevant\", \"value\": \"previous\"}',\r\n '*'\r\n );\r\n this.relevants.hit--;\r\n }\r\n }\r\n\r\n /**\r\n * Goto a relevant item\r\n * @param item : the item to go to\r\n */\r\n protected gotoRelevant(item: ClipperDocumentAnchorInfo) {\r\n if (item.type === 20) {\r\n window.open(\r\n this.clipperService.serviceUri +\r\n \"/documents/render/item/?id=\" + item.documentId + \"&theme=\" + this.dialogData.theme,\r\n '_blank'\r\n );\r\n } else {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage(\r\n '{\"type\": \"relevant\", \"value\": \"' + item.uri + '\"}',\r\n '*'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Update relevant items\r\n */\r\n private updateRelevants() {\r\n if (\r\n !this.lastQuery ||\r\n this.lastQuery.length === 0 ||\r\n this.lastQuery === ' '\r\n ) {\r\n this.handleRelevantsPaneVisibility();\r\n } else {\r\n let params = new ClipperSearchParams();\r\n params.id = this.lastDocument.documentId ?? this.lastDocument.id;\r\n params.text = this.lastQuery;\r\n params.count = 1;\r\n this.clipperService\r\n .query(params)\r\n .subscribe(r => {\r\n if (!r.success) this.dialogService.error(r.message);\r\n else {\r\n let minimumScore = 0;\r\n if (r.value?.items && r.value?.items.length > 0) {\r\n r.value.items[0].anchors.forEach(n => {\r\n let score = n.score;\r\n if (score > 7) score -= 7;\r\n else if (score > 5) score -= 5;\r\n else if (score > 3) score -= 3;\r\n if (minimumScore > score) minimumScore = score;\r\n n.score = score;\r\n });\r\n this.relevants.minimumScore = minimumScore;\r\n this.relevants.items = r.value.items[0].anchors;\r\n this.hasRelevants.set(this.relevants.items?.length > 0);\r\n }\r\n this.handleRelevantsPaneVisibility();\r\n }\r\n });\r\n }\r\n }\r\n\r\n\r\n\r\n /**\r\n * Display document structure\r\n */\r\n protected index(documentId: string) {\r\n let d = this.dialogService.open(ClipperDocumentIndexComponent, {\r\n ariaLabel: 'indice documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: true,\r\n closeOnNavigation: false,\r\n data: {\r\n documentId: documentId,\r\n excludedTypes: null,\r\n multiple: false\r\n },\r\n minWidth: '375px',\r\n maxWidth: '600px',\r\n width: '99%',\r\n });\r\n d.componentInstance.done\r\n .subscribe((r: ClipperDocumentIndexDialogResult) => {\r\n const item = r.data.length > 0 ? r.data[0] : null;\r\n if (item) {\r\n if (item.documentId === documentId) {\r\n let f = document.getElementById('clipper-document-iframe') as any;\r\n f?.contentWindow.postMessage(\r\n '{\"type\": \"goto\", \"value\":\"' + item.uri + '\"}',\r\n '*'\r\n );\r\n } else {\r\n this.openDocument(item.documentId + '#' + item.uri,);\r\n }\r\n }\r\n\r\n d.close();\r\n });\r\n }\r\n\r\n /**\r\n * Get the id in a query string\r\n * @param url : the url to process\r\n * @param name : the optional id paramenter name. Default is 'id'\r\n * @returns : the id parame\r\n */\r\n private getId(url: string, name: string = 'id'): string {\r\n const start = url.lastIndexOf(name + '=') + 3;\r\n const end = url.indexOf('&', start);\r\n return url.substring(start, end);\r\n }\r\n\r\n /**\r\n * Preview a file if possible\r\n * @param url : the url to preview\r\n */\r\n private previewFile(url: string) {\r\n if (!url || url.length === 0)\r\n return; // Nothing to do\r\n // Get the id\r\n let id = this.getId(url);\r\n if (!id || id.length === 0)\r\n return; // Nothing to do\r\n // Create the url\r\n this.clipperService.newOTP(id).subscribe(\r\n r => {\r\n if (!r.success) this.dialogService.error(r.message);\r\n else if (!r.value.canPreview)\r\n // Donload manually\r\n location.href = url;\r\n else {\r\n this.dialogService.open(FilePreviewComponent, {\r\n panelClass: 'preview-panel',\r\n ariaLabel: 'anteprima',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: true,\r\n data: {\r\n url: url,\r\n embed: r.value.canEmbed\r\n },\r\n minWidth: '375px',\r\n maxWidth: '900px',\r\n width: '99%',\r\n height: '99%'\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Show document comment\r\n */\r\n protected showComment() {\r\n if (this.lastDocument?.bag[7] !== 'T') return;\r\n this.clipperService\r\n .comment(this.lastDocument?.documentId)\r\n .subscribe(r => {\r\n if (!r.success) {\r\n if (r.message === \"Il tuo abbonamento non consente di visualizzare i commenti alle norme.\")\r\n this.dialogService.error(\"Il servizio di <b>commenti alle norme</b> non è compreso nel tuo abbonamento, per maggiori informazioni rivolgersi all'agente commerciale di riferimento o inviare una mail a <a href='mailto:sales@arsedizioni.it' target='_blank'>sales@arsedizioni.it</a>.\", null, \"Attenzione\");\r\n else\r\n this.dialogService.error(r.message);\r\n } else {\r\n if (r.value && r.value.length > 1)\r\n this.dialogService.info(r.value.replace(/\\n/g, '<br>\\r\\n'), \"Commento\", \"Chiudi\", 700);\r\n else\r\n this.dialogService.info(\"Commento non più disponibile o in fase di revisione.\");\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Open an item\r\n * @param documentId : the document id\r\n * @param query: the current query or null\r\n * @param newWindow: true if the document must be open into a new window\r\n */\r\n override open(documentId: string, query: string | null | undefined = null, newWindow: boolean = false) {\r\n if (!newWindow) {\r\n if (this.opening) this.opening.emit({ id: documentId });\r\n else this.openDocument(documentId, query);\r\n } else window.open('/documento/' + documentId, '_blank');\r\n }\r\n\r\n /**\r\n * Open a document\r\n * @param documentId : the document id\r\n * @param query: the current query or null\r\n */\r\n private openDocument(documentId: string, query: string | null | undefined = null) {\r\n if (!documentId) return;\r\n ClipperDocumentsUtils.openDocument(\r\n this.dialogService,\r\n this.clipperService,\r\n documentId,\r\n query,\r\n this.dialogData.selectionMode,\r\n this.dialogData.theme\r\n );\r\n }\r\n\r\n /**\r\n * Browse document references\r\n * @param documentId : the document id\r\n * @param mode : the mode\r\n */\r\n override openReferences(\r\n documentId: string,\r\n mode: ClipperQueryReferencesMode = ClipperQueryReferencesMode.ReferencesIn,\r\n model: number = null,\r\n anchor: string = null,\r\n anchorTitle: string = null,\r\n update: boolean = true\r\n ) {\r\n let d = this.dialogService.open(ClipperReferencesComponent, {\r\n ariaLabel: 'riferimenti legati al documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: true,\r\n closeOnNavigation: false,\r\n data: {\r\n documentId: documentId ?? this.lastDocument?.documentId,\r\n mode: mode,\r\n model: model,\r\n anchor: anchor,\r\n anchorTitle: anchorTitle,\r\n update: update,\r\n },\r\n minWidth: '375px',\r\n maxWidth: '1000px',\r\n width: '99%',\r\n height: '99%',\r\n });\r\n d.afterClosed()\r\n .subscribe((r: ClipperReferenceDialogResult) => {\r\n if (r && r.documentId) {\r\n this.navigate(r.documentId);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Display a report\r\n * @param item\r\n */\r\n protected displayReport(item: ClipperDocumentInfo) {\r\n if (!item) return;\r\n if (item.model != ClipperModel.NormativaVigente && item.model != ClipperModel.Scadenze) {\r\n this.dialogService.info(\"Questa funzionalità non è disponibile per questo tipo di documento.\");\r\n return;\r\n }\r\n this.openReport(item.id, item.title1 ? item.title1 : item.title2);\r\n }\r\n\r\n /**\r\n * Checks if documents can be selected and returned as message\r\n */\r\n protected canSelect(): boolean {\r\n return this.selectionMode > 0 && this.lastDocument && (this.lastDocument?.model === ClipperModel.NormativaVigente || this.lastDocument?.model === ClipperModel.AggiornamentoNormativo)\r\n }\r\n\r\n /**\r\n * Send a message with current selection and close dialog\r\n */\r\n protected select() {\r\n if (this.lastDocument) {\r\n this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_SELECTED_INNER, [\r\n this.lastDocument,\r\n ]);\r\n this.changeDetector.markForCheck();\r\n this.close();\r\n }\r\n }\r\n\r\n}\r\n\r\n","<div class=\"clipper-document-fixed\">\r\n <div style=\"height:6px\">\r\n @if (busy()) {\r\n <mat-progress-bar style=\"z-index:11\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start start\" fxFill>\r\n <div fxFlex=\"*\" class=\"title-container\">\r\n <div class=\"large bold\">{{title()}}</div>\r\n @if (lastDocument && lastDocument?.lastUpdate) {\r\n <div style=\"padding-top: 5px;\">\r\n <div class=\"x-small accent bold uppercase\">\r\n AGGIORNATO A:\r\n {{lastDocument?.lastUpdate}}\r\n </div>\r\n </div>\r\n }\r\n @if (lastDocument && (lastDocument?.expiringDescription || lastDocument?.validityInfo)) {\r\n <div style=\"padding-top: 5px;\">\r\n @if (lastDocument?.expiringDescription) {\r\n <div class=\"x-small accent-low bold uppercase\">\r\n {{lastDocument?.expiringDescription}}</div>\r\n }\r\n @if (lastDocument?.validityInfo) {\r\n <div class=\"x-small error bold uppercase\"><b>Attenzione!</b>\r\n {{lastDocument?.validityInfo}}</div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n @if (canSelect()) {\r\n <div fxFlex=\"170px\" fxFlex.lt-md=\"58px\">\r\n <button fxHide.lt-md fxFlexAlign=\"center\" type=\"button\" color=\"primary\" mat-flat-button (click)=\"select()\"\r\n class=\"clipper-selection-button\" style=\"margin-top: 8px;\">\r\n <span class=\"small uppercase\">Usa selezione</span>\r\n </button>\r\n <button fxHide.gt-sm fxFlexAlign=\"center\" type=\"button\" color=\"primary\" mat-icon-button (click)=\"select()\"\r\n class=\"clipper-selection-icon-button\" matTooltip=\"Usa selezione\" aria-label=\"'Usa la selezione'\"\r\n style=\"margin-top: 4px;\">\r\n <mat-icon>check</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n <div fxFlex=\"164px\" fxFlex.lt-md=\"48px\" fxLayoutAlign=\"end\">\r\n <div class=\"dialog-close\">\r\n <button fxHide.lt-md fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Indietro\"\r\n aria-label=\"Indietro\" (click)=\"back()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n <button fxHide.lt-md fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Avanti\" aria-label=\"Avanti\"\r\n (click)=\"forward()\">\r\n <mat-icon>arrow_forward</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\r\n (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row wrap \" fxFill fxLayoutAlign=\"space-between center\" style=\"padding: 10px 10px 10px 15px;\">\r\n <div fxFlex.xs=\"100\">\r\n @if (lastDocument?.model === 9) {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra indice'\"\r\n (click)=\"index(lastDocument?.documentId)\">\r\n Indice\r\n </button>\r\n }\r\n @if (lastDocument?.bag && (lastDocument?.bag[1] ==='T' || lastDocument?.bag[3] ==='T')) {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" mat-button matTooltip=\"Collegamenti\"\r\n [attr.aria-label]=\"'Collegamenti al documento'\" [matMenuTriggerFor]=\"menuLinks\">\r\n Collegamenti\r\n </button>\r\n }\r\n <mat-menu #menuLinks=\"matMenu\">\r\n @if (lastDocument?.bag && lastDocument?.bag[1] ==='T') {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra documenti richiamati'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[3] ==='T') {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra documenti che richiamano'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[2] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra juris'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra modifiche subite'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 3)\">\r\n Modifiche subite\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] !=='T' && lastDocument?.bag[6] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra modifiche apportate'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 5)\">\r\n Modifiche apportate\r\n </button>\r\n }\r\n </mat-menu>\r\n @if (lastDocument?.hasPrimary) {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" mat-button\r\n [attr.aria-label]=\"'Mostra documento primario'\" (click)=\"navigate(lastDocument?.primaryId)\">\r\n {{lastDocument?.primaryDescription}}\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[2] ==='T') {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" fxHide.lt-md mat-button\r\n [attr.aria-label]=\"'Mostra juris'\" (click)=\"openReferences(lastDocument?.documentId, 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] === 'T') {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" fxHide.lt-md mat-button\r\n [attr.aria-label]=\"'Mostra modifiche subite'\" (click)=\"openReferences(lastDocument?.documentId, 3)\">\r\n Modifiche subite\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] !== 'T' && lastDocument?.bag[6] === 'T') {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" fxHide.lt-md mat-button\r\n [attr.aria-label]=\"'Mostra modifiche apportate'\" (click)=\"openReferences(lastDocument?.documentId, 5)\">\r\n Modifiche apportate\r\n </button>\r\n }\r\n @if (lastDocument?.secondaryId) {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" mat-button\r\n [attr.aria-label]=\"'Mostra documento secondario'\" (click)=\"navigate(lastDocument?.secondaryId)\">\r\n Testo storico\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[7] === 'T') {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra commento'\"\r\n (click)=\"showComment()\">\r\n Commento\r\n </button>\r\n }\r\n </div>\r\n <div fxFlex.xs=\"100\" fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"center\">\r\n @if (hasRelevants() && relevants.hits) {\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\">\r\n <div fxFlexAlign=\"center\" class=\"small item-greyed\" style=\"margin-left:20px; margin-right: 5px\"\r\n matTooltip=\"Parole evidenziate\">{{relevants.hit}}\r\n di {{relevants.hits}}</div>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button [attr.aria-label]=\"'Vai alla parola precedente'\"\r\n (click)=\"previousRelevant()\" matTooltip=\"Parola precedente\" [disabled]=\"relevants.hit <= 1\">\r\n <mat-icon>chevron_left</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button [attr.aria-label]=\"'Vai alla prossima parola'\"\r\n (click)=\"nextRelevant()\" matTooltip=\"Prossima parola\" [disabled]=\"relevants.hit >= relevants.hits\">\r\n <mat-icon>chevron_right</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azioni sul documento\"\r\n [attr.aria-label]=\"'Azioni da eseguire sul documento'\" [matMenuTriggerFor]=\"menuActions\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #menuActions=\"matMenu\">\r\n <ng-template matMenuContent let-item=\"lastDocument\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"lastDocument\" [canPrint]=\"true\" [canFind]=\"true\" [isReadable]=\"false\"\r\n [isLawInForce]=\"lastDocument?.model === 9\" selectionSource=\"none\">\r\n </clipper-document-menu>\r\n </ng-template> \r\n </mat-menu>\r\n @if (hasRelevants() && relevants.items && relevantsPane && (!relevantsPane.opened || relevantsPaneClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Rilevanza\" aria-label=\"'Rilevanza'\"\r\n (click)=\"toggleRelevantsPane()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"clipper-document-scrollable\">\r\n <mat-drawer-container class=\"fill\" [hasBackdrop]=\"[relevantsPaneHasBackdrop]\">\r\n <mat-drawer #relevantsPane position=\"end\" class=\"drawer-small drawer-with-loader\" opened=\"false\">\r\n @if (relevantsBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (relevantsBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"56px\" class=\"title-container-with-loader\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill>\r\n <div class=\"title\">Rilevanza</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button mat-icon-button (click)=\"toggleRelevantsPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"relevants-container scroll-auto\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div>\r\n <p>Parti del documento più significative per la ricerca di <span class='word-hit'>{{lastQuery}}</span>\r\n </p>\r\n </div>\r\n <div fxFlex=\"*\">\r\n <nav class=\"relevants-items\">\r\n <ul>\r\n @for (item of relevants.items; track $index) {\r\n <li class=\"small\" (click)=\"gotoRelevant(item)\" [attr.aria-label]=\"item.title\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start start\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"*\">\r\n {{item.title}}\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (item.score > 1.2) {\r\n <mat-icon style='font-size:x-small; height: 10px; width:10px' color=\"primary\"\r\n matTooltip=\"Molto rilevante\">thumb_up_alt</mat-icon>\r\n }\r\n </div>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n </nav>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div class=\"fill scroll-hidden\">\r\n <iframe id=\"clipper-document-iframe\" class=\"iframe\" [src]=\"url() | safeUrl\"></iframe>\r\n </div>\r\n </mat-drawer-container>\r\n</div>","import { MatDialogRef } from '@angular/material/dialog';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport {\r\n ClipperService\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ClipperDocumentComponent } from './ui/document/document.component';\r\nimport { ThemeType } from '@arsedizioni/ars-utils/core';\r\n\r\nexport class ClipperDocumentsUtils {\r\n /**\r\n * Open a document\r\n * @param dialogService: the dialog service\r\n * @param clipperService: the clipper service\r\n * @param documentId : the document id \r\n * @param query : the query for highlight\r\n * @param selectionMode : the selection mode (1 = single, 2 = multiple, 3 = any selection)\r\n * @param theme: the theme to use. Default is system\r\n */\r\n static openDocument(\r\n dialogService: DialogService,\r\n clipperService: ClipperService,\r\n documentId: string,\r\n query: string | null | undefined = null,\r\n selectionMode: number | null = null,\r\n theme: ThemeType | null = null): MatDialogRef<ClipperDocumentComponent> | null {\r\n\r\n if (!clipperService.loggedIn()) {\r\n dialogService.error(\"Clipper non è disponibile in questo momento. Verifica la connessione.\");\r\n return null;\r\n }\r\n if (!documentId) {\r\n dialogService.error(\"Documento non valido.\");\r\n return null;\r\n }\r\n return dialogService.open(ClipperDocumentComponent, {\r\n ariaLabel: 'documento',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: false,\r\n data: {\r\n id: documentId,\r\n query: query,\r\n selectionMode: selectionMode,\r\n theme: theme\r\n },\r\n minWidth: '375px',\r\n maxWidth: '1400px',\r\n width: '99%',\r\n height: '99%'\r\n });\r\n }\r\n\r\n /**\r\n * Extract document title\r\n * @param title : the full document title\r\n */\r\n static parseDocumentTitle(title: string) {\r\n const p = title?.indexOf('[');\r\n if (p !== -1) {\r\n return title.substring(0, p);\r\n }\r\n return title;\r\n }\r\n\r\n}","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './search-free-text-help.component.html',\r\n styleUrls: ['./search-free-text-help.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [MatDialogTitle, MatDialogContent, MatDialogActions, FlexModule, MatButtonModule, MatDialogClose]\r\n})\r\nexport class ClipperSearchFreeTextHelpComponent{\r\n}\r\n","<h2 mat-dialog-title>Come effettuare la ricerca in testo libero</h2>\r\n<div mat-dialog-content>\r\n <p>Normalmente viene sempre effettuata una ricerca per frase: tutte le parole specificate debbono essere\r\n \"ragionevolmente vicine\" (entro 5 parole) l'una dall'altra.</p>\r\n <p>La ricerca per frase di solito produce i risultati più rilevanti.</p>\r\n <p>Tuttavia è possibile istruire Clipper per eseguire ricerche differenti e più complesse.</p>\r\n <p>Tutte gli elementi che compongono la stringa di ricerca devono essere separati da virgola.</p>\r\n <ul>\r\n <li>Se un elemento è composto da più parole è una frase, altrimenti una parola</li>\r\n <li>Aggiungendo un <b style=\"font-size: 20px\">+</b> davanti all'elemento, l'elemento <b>dovrà per forza</b> essere presente nel documento\r\n </li>\r\n <li>Aggiungendo un <b style=\"font-size: 20px\">-</b> davanti all'elemento, l'elemento <b>non dovrà</b> essere presente nel documento</li>\r\n </ul>\r\n <p>Ecco alcuni esempi:</p>\r\n <ul>\r\n <li><b>serbatoi interrati</b>: sarà effettuata una ricerca per la frase \"serbatoi interrati\"</li>\r\n <li><b>serbatoi, interrati</b>: sarà effettuata una ricerca per le parole \"serbatoi\" e \"interrati\"; il risultato sarà tutti i documenti che contengono una o l'altra parola.</li>\r\n <li><b>serbatoi, +interrati</b>: sarà effettuata una ricerca per le parole \"serbatoi\" e \"interrati\"; il risultato sarà tutti i documenti che contengono necessariamente \"interrati\" ed eventualmente \"serbatoi\".</li>\r\n <li><b>serbatoi, -interrati</b>: sarà effettuata una ricerca per le parole \"serbatoi\" e \"interrati\"; il risultato sarà tutti i documenti che contengono necessariamente \"interrati\" ma non \"serbatoi\".</li>\r\n <li><b>\"serbatoi interrati\", -gas</b>: sarà effettuata una ricerca per la frase \"serbatoi interrati\" e per la parola \"gas\"; il risultato sarà tutti i documenti che contengono la frase \"serbatoi interrati\" ma non la parola \"gas\".</li>\r\n </ul>\r\n <p>Saranno mostrati per primi (più rilevanti) i documenti che rispettano in pieno la condizione.</p>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" fxFill >\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">Chiudi</button>\r\n </div>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Output, inject } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\n\r\nexport interface SearchFreeTextQueryParams {\r\n query: string;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './search-free-text-query-builder.component.html',\r\n styleUrls: ['./search-free-text-query-builder.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, FormsModule, FlexModule, MatFormFieldModule, MatInputModule, \r\n MatButtonModule, MatIconModule, MatDialogActions, MatDialogClose]\r\n})\r\nexport class ClipperSearchFreeTextQueryBuilderComponent {\r\n @Output() done = new EventEmitter<SearchFreeTextQueryParams>();\r\n\r\n private dialogService = inject(DialogService);\r\n\r\n protected queryAnd: string = '';\r\n protected queryOr: string = '';\r\n protected queryNot: string = '';\r\n protected queryPhrase: string = '';\r\n protected queryStart: string = '';\r\n\r\n /**\r\n * Clear\r\n */\r\n protected clear() {\r\n this.queryAnd = null;\r\n this.queryOr = null;\r\n this.queryNot = null;\r\n this.queryPhrase = null;\r\n this.queryStart = null;\r\n }\r\n\r\n /**\r\n * Submit\r\n */\r\n protected ok() {\r\n let query = '';\r\n // Phrase\r\n if (this.queryPhrase.length > 0) {\r\n query += ' \"';\r\n query += this.queryPhrase.replace('\"', '').trim();\r\n query += '\" ';\r\n }\r\n // Or\r\n if (this.queryOr.length > 0) {\r\n let parts = this.queryOr.split(',');\r\n for (let i = 0; i < parts.length; i++) {\r\n if (query.length > 0) query += ', ';\r\n query += parts[i].replace('\"', '').trim();\r\n }\r\n query += ' ';\r\n }\r\n // And\r\n if (this.queryAnd.length > 0) {\r\n let parts = this.queryAnd.split(',');\r\n for (let i = 0; i < parts.length; i++) {\r\n if (query.length > 0) query += ', +';\r\n query += parts[i].replace('\"', '').trim();\r\n }\r\n query += ' ';\r\n }\r\n // Start with\r\n if (this.queryStart.length > 0) {\r\n if (query.length > 0) query += ', +';\r\n query += this.queryStart.replace('\"', '').trim();\r\n query += '*';\r\n query += ' ';\r\n }\r\n // Not\r\n if (this.queryNot.length > 0) {\r\n if (query.length === 0) {\r\n // Invalid query\r\n this.dialogService.error(\r\n \"L'operatore di esclusione funziona solo se prima è stato inserito un valore in almeno uno degli altri quattro campi.\"\r\n );\r\n return;\r\n }\r\n let parts = this.queryNot.split(',');\r\n for (let i = 0; i < parts.length; i++) {\r\n if (query.length > 0) query += ', -';\r\n query += parts[i].replace('\"', '').trim();\r\n }\r\n query += ' ';\r\n }\r\n\r\n\r\n // Notify\r\n if (query.length > 0) this.done.emit({ query: query });\r\n }\r\n}\r\n","<h2 mat-dialog-title>Trova gli elementi che contengono...</h2>\r\n<div mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <div fxLayout=\"column\">\r\n <mat-form-field>\r\n <mat-label>Questa esatta parola o frase</mat-label>\r\n <input matInput name=\"queryPhrase\" [(ngModel)]=\"queryPhrase\" maxlength=\"200\" />\r\n @if (queryPhrase) {\r\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryPhrase=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Tutte queste parole</mat-label>\r\n <input matInput name=\"queryAnd\" [(ngModel)]=\"queryAnd\" maxlength=\"200\" />\r\n @if (queryAnd) {\r\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryAnd=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n }\r\n <mat-hint>Separate da virgola</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Una qualunque di queste parole</mat-label>\r\n <input matInput name=\"queryOr\" [(ngModel)]=\"queryOr\" maxlength=\"200\" />\r\n @if (queryOr) {\r\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryOr=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n }\r\n <mat-hint>Separate da virgola</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Parole che iniziano con</mat-label>\r\n <input matInput name=\"queryStart\" [(ngModel)]=\"queryStart\" maxlength=\"200\" />\r\n @if (queryStart) {\r\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryStart=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Nessuna qualunque di queste parole</mat-label>\r\n <input matInput name=\"queryNot\" [(ngModel)]=\"queryNot\" maxlength=\"200\" />\r\n @if (queryNot) {\r\n <a matSuffix mat-icon-button aria-label=\"Azzera\" (click)=\"queryNot=''\">\r\n <mat-icon>close</mat-icon>\r\n </a>\r\n }\r\n <mat-hint>Separate da virgola. L'operatore di esclusione funziona solo se prima è stato inserito un valore in\r\n almeno uno degli altri quattro campi. </mat-hint>\r\n </mat-form-field>\r\n </div>\r\n </form>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\" fxLayoutAlign=\"start\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">Pulisci</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" (click)=\"ok()\">Ok</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">Annulla</button>\r\n </div>\r\n </div>\r\n</div>","import { ChangeDetectionStrategy, Component, EventEmitter, OnDestroy, OnInit, Output, ViewChild, inject, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatOptionModule } from '@angular/material/core';\r\nimport { MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER, MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n ClipperAuthors,\r\n ClipperChannel,\r\n ClipperChannels, ClipperModule,\r\n ClipperRegions,\r\n ClipperSearchParams,\r\n ClipperSearchUtils, ClipperSectorTypes, ClipperSectors, ClipperService, ClipperSources, SectorInfo\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { DateInterval, DateIntervalChangeDirective, NameValueItem, SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport { ChipsSelectorComponent } from '@arsedizioni/ars-utils/ui.application';\r\nimport { Subject } from 'rxjs';\r\nimport { ClipperSearchFreeTextHelpComponent } from '../search-free-text-help/search-free-text-help.component';\r\nimport { ClipperSearchFreeTextQueryBuilderComponent, SearchFreeTextQueryParams } from '../search-free-text-query-builder/search-free-text-query-builder.component';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\n\r\nexport interface ClipperSearchDialogData extends ClipperSearchParams {\r\n displayMode?: 'laws' | 'news' | 'module' | 'simple';\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './search-dialog.component.html',\r\n styleUrls: ['./search-dialog.component.scss'],\r\n providers: [\r\n MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER\r\n ],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FlexLayoutModule,\r\n FormsModule,\r\n MatDialogTitle,\r\n MatDialogContent,\r\n MatCheckboxModule,\r\n MatFormFieldModule,\r\n MatExpansionModule,\r\n MatSelectModule,\r\n MatOptionModule,\r\n MatTooltipModule,\r\n MatInputModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n MatDatepickerModule,\r\n DateIntervalChangeDirective,\r\n MatDialogActions,\r\n MatDialogClose,\r\n MatDialogTitle,\r\n MatDividerModule,\r\n MatSlideToggleModule,\r\n ChipsSelectorComponent,\r\n SafeHtmlPipe,\r\n ],\r\n})\r\nexport class ClipperSearchDialogComponent implements OnInit, OnDestroy {\r\n @ViewChild('okButton') okButton!: HTMLButtonElement;\r\n @Output() done = new EventEmitter<ClipperSearchParams>();\r\n\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n private clipperService = inject(ClipperService);\r\n private dialogService = inject(DialogService);\r\n protected dialogData: ClipperSearchDialogData = inject(MAT_DIALOG_DATA) ?? { displayMode: 'simple' };\r\n protected params: ClipperSearchParams = new ClipperSearchParams();\r\n protected readonly modulesEnum: typeof ClipperModule = ClipperModule;\r\n protected sectors: SectorInfo[] = ClipperSectors.filter((n) => n.group === 'S').map((n) => {\r\n return { name: n.shortName ?? n.name, value: n.value };\r\n });\r\n protected isLaws = (): boolean => {\r\n return (this.dialogData.displayMode === \"laws\" ||\r\n (this.dialogData.displayMode === \"module\" && this.dialogData.module === ClipperModule.NormativaVigente) ||\r\n (this.dialogData.displayMode === \"module\" && this.dialogData.module === ClipperModule.GazzetteBollettiniEFontiDiverse));\r\n };\r\n protected isNews = (): boolean => {\r\n return (this.dialogData.displayMode === \"news\" ||\r\n (this.dialogData.displayMode === \"module\" && this.dialogData.module === ClipperModule.News) ||\r\n (this.dialogData.displayMode === \"module\" && this.dialogData.module === ClipperModule.Approfondimenti));\r\n };\r\n protected isModule = (module: ClipperModule): boolean => {\r\n return this.dialogData.displayMode === \"module\" && this.dialogData.module === module;\r\n }\r\n protected hasRegions = (): boolean => {\r\n return (this.params.sectors?.filter(n => n.value === 'LR').length ?? 0) > 0;\r\n };\r\n protected hasAuthorOrType = (): boolean => {\r\n return this.params.sectors?.length === 1 && this.isLaws();\r\n };\r\n protected regions: NameValueItem<string>[] = [...ClipperRegions];\r\n protected channels: NameValueItem<ClipperChannel>[] = [...ClipperChannels];\r\n protected sources: NameValueItem<string>[] | null = [...ClipperSources];\r\n protected authors = signal<NameValueItem<string>[]>([]);\r\n protected types = signal<NameValueItem<string>[]>([]);\r\n protected topics = signal<NameValueItem<string>[]>([]);\r\n interval: DateInterval = new DateInterval();\r\n sourceInterval: DateInterval = new DateInterval();\r\n\r\n ngOnInit(): void {\r\n if (this.dialogData) {\r\n if (this.dialogData.displayMode === 'simple') {\r\n this.params.text = this.dialogData.text;\r\n this.params.titleOnly = this.dialogData.titleOnly;\r\n this.params.number = this.dialogData.number;\r\n this.params.year = this.dialogData.year;\r\n this.params.fromDate = this.dialogData.fromDate;\r\n this.params.toDate = this.dialogData.toDate;\r\n this.interval = new DateInterval(this.params.fromDate, this.params.toDate);\r\n } else if (this.isLaws()) {\r\n this.params.text = this.dialogData.text;\r\n this.params.titleOnly = this.dialogData.titleOnly;\r\n this.params.number = this.dialogData.number;\r\n this.params.year = this.dialogData.year;\r\n this.params.fromDate = this.dialogData.fromDate;\r\n this.params.toDate = this.dialogData.toDate;\r\n this.interval = new DateInterval(this.params.fromDate, this.params.toDate);\r\n this.params.source = this.dialogData.source;\r\n this.params.sourceNumber = this.dialogData.sourceNumber;\r\n this.params.sourceYear = this.dialogData.sourceYear;\r\n this.params.sourceFromDate = this.dialogData.sourceFromDate;\r\n this.params.sourceToDate = this.dialogData.sourceToDate;\r\n this.sourceInterval = new DateInterval(this.params.sourceFromDate, this.params.sourceToDate);\r\n this.params.sectors = this.dialogData.sectors;\r\n this.params.authors = this.dialogData.authors;\r\n this.params.type = this.dialogData.type;\r\n this.params.topic = this.dialogData.topic;\r\n this.params.showCommentedDocumentsOnly = this.dialogData.showCommentedDocumentsOnly;\r\n } else if (this.isNews()) {\r\n this.params.text = this.dialogData.text;\r\n this.params.titleOnly = this.dialogData.titleOnly;\r\n this.params.year = this.dialogData.year;\r\n this.params.fromDate = this.dialogData.fromDate;\r\n this.params.toDate = this.dialogData.toDate;\r\n this.interval = new DateInterval(this.params.fromDate, this.params.toDate);\r\n this.params.sectors = this.dialogData.sectors;\r\n } else if (this.dialogData.displayMode === 'module') {\r\n switch (this.dialogData.module) {\r\n case ClipperModule.Giurisprudenza:\r\n this.params.text = this.dialogData.text;\r\n this.params.titleOnly = this.dialogData.titleOnly;\r\n this.params.number = this.dialogData.number;\r\n this.params.year = this.dialogData.year;\r\n this.params.fromDate = this.dialogData.fromDate;\r\n this.params.toDate = this.dialogData.toDate;\r\n this.interval = new DateInterval(this.params.fromDate, this.params.toDate);\r\n this.params.sectors = this.dialogData.sectors;\r\n break;\r\n case ClipperModule.ModificheAbrogazioniERinvii:\r\n this.params.changeReason = this.dialogData.changeReason;\r\n this.params.changedNumber = this.dialogData.changedNumber;\r\n this.params.changedYear = this.dialogData.changedYear;\r\n this.params.changedTitle = this.dialogData.changedTitle;\r\n this.params.modifierNumber = this.dialogData.modifierNumber;\r\n this.params.modifierYear = this.dialogData.modifierYear;\r\n this.params.modifierTitle = this.dialogData.modifierTitle;\r\n this.params.sectors = this.dialogData.sectors;\r\n break;\r\n default:\r\n this.params.text = this.dialogData.text;\r\n this.params.titleOnly = this.dialogData.titleOnly;\r\n this.params.year = this.dialogData.year;\r\n this.params.fromDate = this.dialogData.fromDate;\r\n this.params.toDate = this.dialogData.toDate;\r\n this.interval = new DateInterval(this.params.fromDate, this.params.toDate);\r\n break;\r\n }\r\n }\r\n\r\n }\r\n\r\n if (this.isLaws()) {\r\n if (!this.clipperService.loggedIn()) return;\r\n this.clipperService.getTopics()\r\n .subscribe(r => {\r\n if (r.success) {\r\n let name = '';\r\n r.value.forEach(n => {\r\n name = '';\r\n (n.value.match(/./g) || []).forEach(() => {\r\n name += ' ';\r\n });\r\n name += n.value + ' - ' + n.name;\r\n n.header = name;\r\n });\r\n this.topics.set(r.value);\r\n }\r\n });\r\n\r\n if (this.hasAuthorOrType()) {\r\n this.sectorsChanged();\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n\r\n /**\r\n * Updates other lists when sectors changes\r\n */\r\n sectorsChanged() {\r\n // Reset authors and types\r\n this.params.authors = [];\r\n this.params.type = null;\r\n if (this.hasAuthorOrType()) {\r\n let authors: NameValueItem<string>[] = [];\r\n ClipperAuthors.forEach(n => {\r\n if (n.sectorId === this.params.sectors[0].value) {\r\n authors.push(n);\r\n }\r\n }); \r\n let types: NameValueItem<string>[] = [];\r\n ClipperSectorTypes.forEach(n => {\r\n if (n.parentValue === this.params.sectors[0].value) {\r\n types.push(n);\r\n }\r\n });\r\n if (types.length == 0) {\r\n types = [...ClipperSectorTypes];\r\n }\r\n this.authors.set(authors);\r\n this.types.set(types);\r\n }\r\n }\r\n\r\n /**\r\n * Clear search\r\n */\r\n protected clear() {\r\n ClipperSearchUtils.clear(this.params);\r\n this.interval.clear();\r\n this.sourceInterval.clear();\r\n this.sectorsChanged();\r\n }\r\n\r\n\r\n /**\r\n * Show free text help\r\n */\r\n protected help() {\r\n this.dialogService.open(ClipperSearchFreeTextHelpComponent, {\r\n ariaLabel: 'informazioni ricerca',\r\n autoFocus: false,\r\n restoreFocus: true,\r\n disableClose: false,\r\n minWidth: '375px',\r\n maxWidth: '800px',\r\n width: '99%',\r\n });\r\n\r\n }\r\n /**\r\n * Compose a free text search query\r\n */\r\n protected compose() {\r\n const d = this.dialogService.open(ClipperSearchFreeTextQueryBuilderComponent, {\r\n ariaLabel: 'costruisci ricerca',\r\n autoFocus: false,\r\n restoreFocus: true,\r\n disableClose: false,\r\n minWidth: '375px',\r\n maxWidth: '600px',\r\n width: '99%'\r\n });\r\n d.componentInstance.done\r\n .subscribe((r: SearchFreeTextQueryParams) => {\r\n this.params.text = r.query;\r\n // Finished\r\n d.close();\r\n });\r\n }\r\n\r\n /**\r\n * Submit search\r\n */\r\n protected ok() {\r\n this.okButton.focus();\r\n if (this.params.text) {\r\n this.params.text = ClipperSearchUtils.normalizeTextQuery(this.params.text);\r\n }\r\n if (this.interval) {\r\n this.params.fromDate = this.interval.from;\r\n this.params.toDate = this.interval.to;\r\n }\r\n if (this.sourceInterval) {\r\n this.params.sourceFromDate = this.sourceInterval.from;\r\n this.params.sourceToDate = this.sourceInterval.to;\r\n }\r\n this.done.emit(this.params);\r\n }\r\n\r\n /**\r\n * Check if a block of expandable options has a filter on\r\n * @param block : the block id\r\n * @returns true if at least a value is set\r\n */\r\n hasFilter(block: 'source' | 'other' | 'modifier'): boolean {\r\n if (block === 'source') {\r\n return this.params.sourceNumber != null ||\r\n this.params.sourceYear != null ||\r\n this.params.source != null ||\r\n this.sourceInterval.from != null;\r\n } else if (block === 'other') {\r\n if (!this.isModule(ClipperModule.ModificheAbrogazioniERinvii)) {\r\n return this.params.sourceNumber != null ||\r\n this.params.author != null ||\r\n this.params.type != null ||\r\n this.params.topic != null;\r\n } else {\r\n return this.params.changeReason != null;\r\n }\r\n } else if (block === 'modifier') {\r\n return this.params.modifierNumber != null ||\r\n this.params.modifierYear != null ||\r\n this.params.modifierTitle != null;\r\n }\r\n return false;\r\n }\r\n\r\n}\r\n","<h2 mat-dialog-title>Ricerca</h2>\r\n<div mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <mat-accordion multi displayMode=\"flat\">\r\n @if(isLaws() || isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Settori\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Settori\"\r\n [options]=\"sectors\" (changed)=\"sectorsChanged()\" />\r\n @if(hasRegions())\r\n {\r\n <mat-divider style=\"padding-top: 8px; margin-top:8px\"></mat-divider>\r\n <chips-selector mode=\"collapsed\" [(ngModel)]=\"params.authors\" [multiple]=\"true\" name=\"authors\"\r\n label=\"Tutte le regioni\" [options]=\"regions\" />\r\n }\r\n </mat-expansion-panel>\r\n } @else if(isNews()) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Tipologia\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Tipologia\"\r\n [options]=\"sectors\" />\r\n </mat-expansion-panel>\r\n }\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if (isLaws() || isModule(modulesEnum.Giurisprudenza)) {\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input #filterByNumber=\"matInput\" matInput maxlength=\"10\" [(ngModel)]=\"params.number\" name=\"number\" />\r\n @if (params.number) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.number = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.year\" name=\"year\" />\r\n @if (params.year) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.year = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (isLaws() || !isModule(modulesEnum.ScadenzeESegnalazioni)) {\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Testo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.text\" name=\"text\" />\r\n @if (params.text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.text = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix matTooltip=\"Opzioni\" aria-label=\"Opzioni\"\r\n [matMenuTriggerFor]=\"textOptionsMenu\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-form-field>\r\n <div>\r\n <div>\r\n <mat-slide-toggle [(ngModel)]=\"params.titleOnly\" name=\"titleOnly\">Cerca solo nel\r\n titolo</mat-slide-toggle>\r\n </div>\r\n @if(isLaws()) {\r\n <div style=\"padding-top:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"params.showCommentedDocumentsOnly\" name=\"showCommentedDocumentsOnly\"> Mostra\r\n solo norme con commenti</mat-slide-toggle>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n @if(isLaws()) {\r\n <mat-expansion-panel [expanded]=\"hasFilter('source')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Fonte\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.sourceNumber\" name=\"sourceNumber\" />\r\n @if (params.sourceNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.sourceYear\"\r\n name=\"sourceYear\" />\r\n @if (params.sourceYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker2\">\r\n <input matStartDate [(ngModel)]=\"sourceInterval.from\" [dateIntervalChange]=\"sourceInterval\"\r\n #rangeFrom2=\"ngModel\" name=\"rangeFrom2\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"sourceInterval.to\" [dateIntervalChange]=\"sourceInterval\" [end]=\"true\"\r\n #rangeTo2=\"ngModel\" name=\"rangeTo2\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (sourceInterval.from || sourceInterval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"sourceInterval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker2></mat-date-range-picker>\r\n @if (rangeFrom2.invalid || rangeTo2.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.source\" name=\"source\">\r\n @for (s of sources; track $index) {\r\n <mat-option [value]=\"s.value\" [matTooltip]=\"s.name\">\r\n {{s.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if(isLaws()) {\r\n @if(!hasRegions()) {\r\n <mat-form-field>\r\n <mat-label>Autore</mat-label>\r\n <mat-select [(ngModel)]=\"params.author\" name=\"author\">\r\n @for (a of authors(); track $index) {\r\n <mat-option [value]=\"a.value\" [matTooltip]=\"a.name\">\r\n {{a.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Tipo documento</mat-label>\r\n <mat-select [(ngModel)]=\"params.type\" name=\"type\">\r\n @for (t of types(); track $index) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <mat-select [(ngModel)]=\"params.topic\" name=\"topic\">\r\n @for (t of topics(); track $index) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n </mat-expansion-panel>\r\n\r\n } @else if(isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificato\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.changedNumber\" name=\"changedNumber\"\r\n #filterByChangeNumber=\"matInput\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.changedYear\"\r\n name=\"changedYear\" />\r\n @if (params.changedYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.changedTitle\" name=\"changedTitle\" />\r\n @if (params.changedTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('modifier')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificante\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.modifierNumber\" name=\"modifierNumber\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.modifierYear\"\r\n name=\"modifierYear\" />\r\n @if (params.modifierYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.modifierTitle\" name=\"modifierTitle\" />\r\n @if (params.modifierTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <mat-form-field>\r\n <mat-label>Motivo</mat-label>\r\n <mat-select [(ngModel)]=\"params.changeReason\" name=\"changeReason\">\r\n <mat-option>Tutti</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n }\r\n </mat-accordion>\r\n </form>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">Pulisci</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" #okButton [disabled]=\"f.form.invalid\" (click)=\"ok()\">Trova</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">Chiudi</button>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-menu #textOptionsMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"compose()\">\r\n <mat-icon>build</mat-icon>Componi\r\n </button>\r\n <button mat-menu-item (click)=\"help()\">\r\n <mat-icon>help</mat-icon>Come usare la ricerca in testo libero\r\n </button>\r\n</mat-menu>","import { Breakpoints } from '@angular/cdk/layout';\r\nimport { NgClass } from '@angular/common';\r\nimport { AfterViewInit, ChangeDetectionStrategy, Component, OnDestroy, OnInit, ViewChild, inject } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER } from '@angular/material/datepicker';\r\nimport { MAT_DIALOG_DATA, MatDialogContent, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatDrawer, MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {\r\n ClipperAuthors,\r\n ClipperDocumentChangeReasons,\r\n ClipperMessages,\r\n ClipperModel,\r\n ClipperModels,\r\n ClipperSearchFacetsSnapshot,\r\n ClipperSearchParams,\r\n ClipperSearchResult,\r\n ClipperSearchUtils,\r\n ClipperSectorTypes,\r\n ClipperSectors,\r\n ClipperSelectionMode,\r\n ClipperSort,\r\n ClipperSources\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { SelectableModel, SystemUtils, ThemeType } from '@arsedizioni/ars-utils/core';\r\nimport { fromEvent } from 'rxjs';\r\nimport { debounceTime, takeUntil } from 'rxjs/operators';\r\nimport { ClipperDocumentsUtils } from '../../documents';\r\nimport { ClipperDocumentMenuComponent } from '../document-menu/document-menu.component';\r\nimport { ClipperSearchDialogComponent } from '../search-dialog/search-dialog.component';\r\nimport { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';\r\nimport { ClipperSearchFreeTextHelpComponent } from '../search-free-text-help/search-free-text-help.component';\r\nimport { ClipperSearchFreeTextQueryBuilderComponent, SearchFreeTextQueryParams } from '../search-free-text-query-builder/search-free-text-query-builder.component';\r\nimport { ClipperSearchResultItemComponent } from '../search-result-item/search-result-item.component';\r\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\n\r\nexport interface ClipperBrowserDialogData {\r\n selectionMode?: ClipperSelectionMode | null,\r\n selectableModels?: number[] | null,\r\n initialModel?: number | null,\r\n theme?: ThemeType | null\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './browser-dialog.component.html',\r\n styleUrls: ['./browser-dialog.component.scss'],\r\n providers: [\r\n MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n FlexLayoutModule,\r\n MatTooltipModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatBadgeModule,\r\n MatTabsModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n FormsModule,\r\n MatCheckboxModule,\r\n MatMenuModule,\r\n MatDividerModule,\r\n ClipperDocumentMenuComponent,\r\n MatDialogContent,\r\n MatSidenavModule,\r\n MatProgressBarModule,\r\n ClipperSearchFacetsComponent,\r\n NgClass,\r\n ClipperSearchResultItemComponent,\r\n MatPaginatorModule\r\n ],\r\n})\r\nexport class ClipperBrowserDialogComponent\r\n extends ClipperSearchResultManager\r\n implements OnInit, OnDestroy, AfterViewInit {\r\n @ViewChild('filterPane') filterPane!: MatDrawer;\r\n\r\n private dialogRef = inject(MatDialogRef<ClipperBrowserDialogComponent>);\r\n protected dialogData: ClipperBrowserDialogData = inject(MAT_DIALOG_DATA);\r\n protected title: string = 'Ricerca in Clipper';\r\n protected snapshot: ClipperSearchResult = {\r\n searchInfo: null,\r\n searchParams: new ClipperSearchParams()\r\n };\r\n\r\n protected currentModel: string = 'Tutto';\r\n protected currentSort: string = 'Rilevanza';\r\n\r\n\r\n ngOnInit(): void {\r\n // Use service snapshot\r\n this.snapshot = this.clipperService.snapshot();\r\n if (!this.snapshot)\r\n this.snapshot = {\r\n searchInfo: null,\r\n searchParams: null,\r\n };\r\n if (!this.filterParams) {\r\n this.filterParams = new ClipperSearchParams();\r\n // Store snapshot\r\n this.clipperService.snapshot.set(this.snapshot);\r\n }\r\n\r\n // Initialize selection\r\n this.selection = new SelectableModel<any, string>(true, 'documentId');\r\n\r\n // Update model\r\n if (this.dialogData.initialModel) {\r\n this.changeModel(this.dialogData.initialModel, false);\r\n }\r\n\r\n this.broadcastService.getMessage()\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(message => {\r\n if (message.id === ClipperMessages.DOCUMENT_SELECTED_INNER) {\r\n this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_SELECTED, message.data);\r\n this.changeDetector.markForCheck();\r\n this.close();\r\n }\r\n });\r\n\r\n // React to window size change\r\n fromEvent(window, 'resize')\r\n .pipe(takeUntil(this.unsubscribe), debounceTime(250))\r\n .subscribe(() => {\r\n this.resize();\r\n });\r\n\r\n this.clipperService.visible.set(true);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n this.clipperService.visible.set(false);\r\n }\r\n\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n // Handle filter pane \r\n this.handleFilterPaneVisibility();\r\n // Handle facets\r\n if (this.facets) {\r\n this.facets.changed\r\n .subscribe((value: ClipperSearchFacetsSnapshot) => {\r\n this.snapshot.facets = value;\r\n this.fetch(true);\r\n });\r\n }\r\n }, 0);\r\n this.resize();\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n /**\r\n * Resize \r\n */\r\n private resize() {\r\n setTimeout(() => {\r\n let elem = document.getElementById('clipper-browser-scrollable');\r\n if (elem) {\r\n const height = this.dialogService.getCurrentDialogScrollableHeight(\r\n ['clipper-browser-fixed'],\r\n window.innerHeight\r\n );\r\n if (height != elem.clientHeight) {\r\n elem.setAttribute('style', 'padding:0 0 0 0;height:' + height + 'px !important;max-height:' + height + 'px !important');\r\n }\r\n } else {\r\n this.resize();\r\n }\r\n }, 0);\r\n }\r\n\r\n\r\n /**\r\n* Show hide filter pane manually\r\n*/\r\n protected toggleFilterPane() {\r\n this.filterPaneClosed = !this.filterPaneClosed;\r\n this.filterPane?.toggle();\r\n }\r\n\r\n\r\n /**\r\n * Handle filter pane visibility\r\n */\r\n private handleFilterPaneVisibility() {\r\n if (this.filterPane) {\r\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Small) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Medium)) {\r\n if (this.filterPane.opened) {\r\n this.filterPane.close();\r\n }\r\n this.filterPane.mode = 'over';\r\n this.filterPane.disableClose = false;\r\n this.filterPaneHasBackdrop = true;\r\n } else {\r\n if (!this.hasFacets()) {\r\n this.filterPane.close();\r\n } else if (!this.filterPane.opened && !this.filterPaneClosed) {\r\n this.filterPane.open();\r\n } else if (this.filterPane.opened && this.filterPaneClosed) {\r\n this.filterPane.close();\r\n }\r\n this.filterPane.mode = 'side';\r\n this.filterPane.disableClose = true;\r\n this.filterPaneHasBackdrop = false;\r\n }\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Checks if documents can be selected and returned as message\r\n */\r\n canSelect(): boolean {\r\n let allow =\r\n this.selection &&\r\n ((this.dialogData.selectionMode === 1 &&\r\n this.selection?.current.selected.length === 1) ||\r\n (this.dialogData.selectionMode === 2 &&\r\n this.selection?.current.selected.length > 1) ||\r\n (this.dialogData.selectionMode === 3 &&\r\n this.selection?.current.selected.length > 0));\r\n if (allow && this.dialogData.selectableModels?.length > 0) {\r\n this.selection?.current.selected.forEach(n => {\r\n if (this.dialogData.selectableModels.indexOf(n.model) === -1) {\r\n allow = false;\r\n return;\r\n }\r\n });\r\n }\r\n return allow;\r\n\r\n }\r\n\r\n /**\r\n * Send a message with current selection and close dialog\r\n */\r\n select() {\r\n if (this.selection?.current.selected && this.selection?.current.selected.length > 0) {\r\n this.broadcastService.sendMessage(\r\n ClipperMessages.DOCUMENT_SELECTED,\r\n this.selection?.current.selected\r\n );\r\n this.changeDetector.markForCheck();\r\n this.close();\r\n }\r\n }\r\n\r\n /**\r\n * Close dialog\r\n * @param newRoute: the new route to navigate to\r\n */\r\n close(newRoute: any = null) {\r\n this.dialogRef.close(newRoute);\r\n }\r\n\r\n\r\n /**\r\n * Update sort\r\n */\r\n updateSortOptions() {\r\n switch (this.filterParams.sortMode) {\r\n case ClipperSort.DateAsc:\r\n this.currentSort = 'Data cre.';\r\n break;\r\n case ClipperSort.Popularity:\r\n this.currentSort = 'Popolarità';\r\n break;\r\n case ClipperSort.Relevance:\r\n this.currentSort = 'Rilevanza';\r\n break;\r\n default:\r\n this.filterParams.sortMode = ClipperSort.DateDesc;\r\n this.currentSort = 'Data decr.';\r\n break;\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Update current search info\r\n */\r\n private updateSearchInfo() {\r\n let si = [];\r\n if (\r\n this.filterParams.sector ||\r\n (this.facets && this.snapshot.facets?.sector)\r\n ) {\r\n const s = ClipperSectors.find(n => n.value ===\r\n (this.snapshot.facets && this.snapshot.facets?.sector\r\n ? this.snapshot.facets?.sector\r\n : this.filterParams.sector));\r\n if (s) {\r\n si.push({\r\n field: 'settore',\r\n value: s.name,\r\n sep: si.length > 0,\r\n });\r\n } else {\r\n const s = ClipperModels.find(n => n.value ===\r\n (this.snapshot.facets && this.snapshot.facets?.sector\r\n ? parseInt(this.snapshot.facets?.sector)\r\n : parseInt(this.filterParams.sector)));\r\n if (s) {\r\n si.push({\r\n field: 'sezione',\r\n value: s.name,\r\n sep: si.length > 0,\r\n });\r\n }\r\n }\r\n }\r\n if (\r\n this.filterParams.author ||\r\n (this.snapshot.facets && this.snapshot.facets?.author)\r\n ) {\r\n const a = ClipperAuthors.find(n => n.value ===\r\n (this.snapshot.facets && this.snapshot.facets?.author\r\n ? this.snapshot.facets?.author\r\n : this.filterParams.author));\r\n if (a) {\r\n si.push({\r\n field: 'autore',\r\n value: a.name,\r\n sep: si.length > 0,\r\n });\r\n }\r\n }\r\n if (this.filterParams.topic)\r\n si.push({\r\n field: 'argomento',\r\n value: this.filterParams.topic,\r\n sep: si.length > 0,\r\n });\r\n if (this.filterParams.taxonomy)\r\n si.push({\r\n field: 'argomento',\r\n value: this.filterParams.taxonomyNode,\r\n sep: si.length > 0,\r\n });\r\n if (this.filterParams.number)\r\n si.push({\r\n field: 'numero',\r\n value: this.filterParams.number,\r\n sep: si.length > 0,\r\n });\r\n if (\r\n !this.snapshot.interval &&\r\n (this.filterParams.fromDate ||\r\n (this.snapshot.facets &&\r\n this.snapshot.facets?.fromDate &&\r\n this.filterParams.model !==\r\n ClipperModel.AggiornamentoNormativo))\r\n ) {\r\n let d1 =\r\n this.snapshot.facets && this.snapshot.facets?.fromDate\r\n ? this.snapshot.facets?.fromDate\r\n : this.filterParams.fromDate;\r\n const d2 =\r\n this.snapshot.facets && this.snapshot.facets?.toDate\r\n ? this.snapshot.facets?.toDate\r\n : this.filterParams.toDate;\r\n si.push({\r\n field: !d2 ? 'in data' : 'da data',\r\n value: SystemUtils.formatDate(d1),\r\n sep: si.length > 0,\r\n });\r\n }\r\n if (!this.snapshot.interval &&\r\n (this.filterParams.toDate ||\r\n (this.snapshot.facets &&\r\n this.snapshot.facets?.toDate &&\r\n this.filterParams.model !==\r\n ClipperModel.AggiornamentoNormativo))\r\n ) {\r\n let d =\r\n this.snapshot.facets && this.snapshot.facets?.toDate\r\n ? this.snapshot.facets?.toDate\r\n : this.filterParams.toDate;\r\n si.push({\r\n field: 'a data',\r\n value: SystemUtils.formatDate(d),\r\n sep: si.length > 0,\r\n });\r\n }\r\n if (this.snapshot.interval)\r\n si.push({\r\n field: 'intervallo',\r\n value: this.snapshot.interval,\r\n sep: si.length > 0,\r\n });\r\n if (this.filterParams.source)\r\n si.push({\r\n field: 'fonte',\r\n value: SystemUtils.arrayGetValue(\r\n ClipperSources,\r\n this.filterParams.source\r\n ),\r\n sep: si.length > 0,\r\n });\r\n if (this.filterParams.sourceNumber)\r\n si.push({\r\n field: 'num. fonte',\r\n value: this.filterParams.sourceNumber,\r\n sep: si.length > 0,\r\n });\r\n if (\r\n this.filterParams.sourceFromDate ||\r\n (this.snapshot.facets &&\r\n this.snapshot.facets?.fromDate &&\r\n this.filterParams.model ===\r\n ClipperModel.AggiornamentoNormativo)\r\n ) {\r\n let d1 =\r\n this.snapshot.facets && this.snapshot.facets?.fromDate\r\n ? this.snapshot.facets?.fromDate\r\n : this.filterParams.sourceFromDate;\r\n const d2 =\r\n this.snapshot.facets && this.snapshot.facets?.toDate\r\n ? this.snapshot.facets?.toDate\r\n : this.filterParams.sourceToDate;\r\n si.push({\r\n field: !d2 ? 'in data fonte' : 'da data fonte',\r\n value: SystemUtils.formatDate(d1),\r\n sep: si.length > 0,\r\n });\r\n }\r\n if (\r\n this.filterParams.sourceToDate ||\r\n (this.snapshot.facets &&\r\n this.snapshot.facets?.toDate &&\r\n this.filterParams.model ===\r\n ClipperModel.AggiornamentoNormativo)\r\n ) {\r\n let d =\r\n this.snapshot.facets && this.snapshot.facets?.toDate\r\n ? this.snapshot.facets?.toDate\r\n : this.filterParams.sourceToDate;\r\n si.push({\r\n field: 'a data fonte',\r\n value: SystemUtils.formatDate(d),\r\n sep: si.length > 0,\r\n });\r\n }\r\n if (this.filterParams.text)\r\n si.push({\r\n field: 'testo',\r\n value: this.filterParams.text,\r\n sep: si.length > 0,\r\n });\r\n if (\r\n this.filterParams.type ||\r\n (this.snapshot.facets && this.snapshot.facets?.type)\r\n ) {\r\n const t = ClipperSectorTypes.find(n => n.value ===\r\n (this.snapshot.facets && this.snapshot.facets?.type\r\n ? this.snapshot.facets?.type\r\n : this.filterParams.type));\r\n if (t) {\r\n si.push({\r\n field: 'tipo',\r\n value: t.name,\r\n sep: si.length > 0,\r\n });\r\n }\r\n }\r\n if (this.filterParams.showUnreadDocumentsOnly)\r\n si.push({\r\n field: 'stato',\r\n value: 'non letti',\r\n sep: si.length > 0,\r\n });\r\n if (\r\n this.filterParams.changeReason ||\r\n (this.snapshot.facets && this.snapshot.facets?.reason)\r\n )\r\n si.push({\r\n field: 'tipo mod.',\r\n value: SystemUtils.arrayGetValue(\r\n ClipperDocumentChangeReasons,\r\n this.snapshot.facets && this.snapshot.facets?.reason\r\n ? this.snapshot.facets?.reason\r\n : this.filterParams.changeReason\r\n ),\r\n sep: si.length > 0,\r\n });\r\n if (this.filterParams.changedNumber)\r\n si.push({\r\n field: 'num. modificato',\r\n value: this.filterParams.changedNumber,\r\n sep: si.length > 0,\r\n });\r\n if (this.filterParams.changedYear)\r\n si.push({\r\n field: 'anno modificato',\r\n value: this.filterParams.changedYear,\r\n sep: si.length > 0,\r\n });\r\n if (this.filterParams.changedTitle)\r\n si.push({\r\n field: 'titolo modificato',\r\n value: this.filterParams.changedTitle,\r\n sep: si.length > 0,\r\n });\r\n if (this.filterParams.modifierNumber)\r\n si.push({\r\n field: 'num. modificante',\r\n value: this.filterParams.modifierNumber,\r\n sep: si.length > 0,\r\n });\r\n if (this.filterParams.modifierYear)\r\n si.push({\r\n field: 'anno modificante',\r\n value: this.filterParams.modifierYear,\r\n sep: si.length > 0,\r\n });\r\n if (this.filterParams.modifierTitle)\r\n si.push({\r\n field: 'titolo modificante',\r\n value: this.filterParams.modifierTitle,\r\n sep: si.length > 0,\r\n });\r\n\r\n this.snapshot.searchInfo = si;\r\n }\r\n\r\n /**\r\n * Change search model\r\n * @param model : the new document model \r\n * @param fetch : true if data must be fetched. Default is true\r\n */\r\n changeModel(model: number = null, fetch: boolean = true) {\r\n this.filterParams.model = model;\r\n switch (model) {\r\n case ClipperModel.AggiornamentoNormativo: this.currentModel = \"Gazzette e bollettini\"; break;\r\n case ClipperModel.NormativaVigente: this.currentModel = \"Normativa vigente\"; break;\r\n default:\r\n this.currentModel = \"Tutto\";\r\n break;\r\n }\r\n if (fetch)\r\n this.fetch(true);\r\n }\r\n\r\n /**\r\n * Apply a sort\r\n * @param mode : the sort mode\r\n */\r\n sortBy(mode: number) {\r\n this.filterParams.sortMode = mode;\r\n this.updateSortOptions();\r\n this.fetch(false);\r\n }\r\n\r\n /**\r\n * Get facets\r\n * @param params: the clipper search params\r\n */\r\n fetchFacets(params: ClipperSearchParams) {\r\n if (!this.clipperService.loggedIn()) return;\r\n this.filterBusy.set(true);\r\n this.clipperService.queryFacets(params)\r\n .subscribe({\r\n next: (r) => {\r\n if (r.success) {\r\n this.prepareResults(null, r.value);\r\n this.handleFilterPaneVisibility();\r\n }\r\n },\r\n complete: () => {\r\n this.filterBusy.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Hide facets\r\n */\r\n protected hideFacets() {\r\n this.hasFacets.set(false);\r\n this.facets?.reset();\r\n this.filterPane.close();\r\n this.filterPaneClosed = false;\r\n }\r\n\r\n /**\r\n * Prepare teh search params\r\n * @param newSearch : true if it is a new search\r\n * @return the new search params\r\n */\r\n private prepareFetch(newSearch: boolean = false): ClipperSearchParams {\r\n const newParams: ClipperSearchParams = SystemUtils.clone(this.filterParams);\r\n newParams.count = 15;\r\n if (newParams.year > 0) {\r\n newParams.fromDate = new Date(newParams.year, 0, 1, 2);\r\n newParams.toDate = new Date(newParams.year, 11, 31, 2);\r\n } else {\r\n newParams.year = null;\r\n }\r\n if (newParams.text) {\r\n newParams.text = ClipperSearchUtils.normalizeTextQuery(this.filterParams.text);\r\n }\r\n if (newSearch) {\r\n newParams.first = 0;\r\n if (newParams.text)\r\n newParams.sortMode = ClipperSort.Relevance;\r\n else if (!newParams.sortMode)\r\n newParams.sortMode = ClipperSort.DateDesc;\r\n this.updateSortOptions();\r\n }\r\n // Apply facets\r\n if (this.snapshot.facets?.fromDate) {\r\n newParams.fromDate = this.snapshot.facets?.fromDate;\r\n newParams.toDate = this.snapshot.facets?.toDate;\r\n newParams.year = this.snapshot.facets?.fromDate.getFullYear();\r\n } else if (this.snapshot.facets?.changedInterval) {\r\n newParams.year = null;\r\n newParams.fromDate = null;\r\n newParams.toDate = null;\r\n }\r\n if (this.snapshot.facets?.sector || this.snapshot.facets?.changedSector) {\r\n newParams.sector = this.snapshot.facets?.sector;\r\n }\r\n if (this.snapshot.facets?.type || this.snapshot.facets?.changedType) {\r\n newParams.type = this.snapshot.facets?.type;\r\n }\r\n if (this.snapshot.facets?.author || this.snapshot.facets?.changedAuthor) {\r\n newParams.author = this.snapshot.facets?.author;\r\n }\r\n return newParams;\r\n\r\n }\r\n\r\n\r\n /**\r\n * Perform a search using current params\r\n */\r\n protected fetch(newSearch: boolean = false) {\r\n this.dialogService.busy('Ricerca in corso...');\r\n const searchParams = this.prepareFetch(newSearch);\r\n this.clipperService.query(searchParams)\r\n .subscribe({\r\n next: r => {\r\n if (!r.success) this.dialogService.error(r.message);\r\n else {\r\n this.prepareResults(r.value);\r\n\r\n // Handle facets\r\n if (this.snapshot.total > 0) {\r\n if (newSearch) {\r\n // Update facets\r\n this.fetchFacets(searchParams);\r\n }\r\n } else {\r\n this.hideFacets();\r\n }\r\n\r\n if (newSearch) {\r\n if (this.paginator) this.paginator.pageIndex = 0;\r\n }\r\n\r\n this.scroll(0);\r\n\r\n // Update view\r\n this.updateSearchInfo();\r\n }\r\n },\r\n complete: () => {\r\n this.dialogService.clearBusy();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Show a new page result\r\n * @param e : the MatPaginator PageEvent data\r\n */\r\n fetchMore(e: PageEvent) {\r\n let first = e.pageIndex * this.filterParams.count;\r\n this.filterParams.first = first;\r\n this.fetch();\r\n }\r\n\r\n /**\r\n * Clear search\r\n */\r\n clearSearch() {\r\n this.currentModel = 'Normativa vigente';\r\n this.snapshot.items = null;\r\n this.snapshot.total = 0;\r\n this.snapshot.facets = null;\r\n this.facets.reset();\r\n this.filterParams = new ClipperSearchParams();\r\n this.filterPane.close();\r\n this.updateSearchInfo();\r\n }\r\n\r\n /**\r\n * Open an item\r\n * @param documentId : the document id\r\n * @param query: the current query or null\r\n * @param newWindow: true if the document must be open into a new window\r\n */\r\n override open(documentId: string, query: string | null | undefined = null, newWindow: boolean = false) {\r\n if (!newWindow) this.openDocument(documentId, query);\r\n }\r\n\r\n /**\r\n * Open a document\r\n * @param documentId : the document id\r\n * @param query: the current query or null\r\n */\r\n override openDocument(documentId: string, query: string | null | undefined = null) {\r\n if (!documentId) return;\r\n ClipperDocumentsUtils.openDocument(\r\n this.dialogService,\r\n this.clipperService,\r\n documentId,\r\n query ?? this.filterParams.text,\r\n this.dialogData.selectionMode,\r\n this.dialogData.theme\r\n );\r\n }\r\n\r\n /**\r\n * Compose a free text search query\r\n */\r\n composeSearch() {\r\n let d = this.dialogService.open(ClipperSearchFreeTextQueryBuilderComponent, {\r\n ariaLabel: 'costruisci ricerca',\r\n autoFocus: false,\r\n restoreFocus: true,\r\n disableClose: false,\r\n minWidth: '375px',\r\n maxWidth: '600px',\r\n width: '99%',\r\n });\r\n d.componentInstance.done\r\n .subscribe((r: SearchFreeTextQueryParams) => {\r\n this.filterParams.text = r.query;\r\n d.close();\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Perform search\r\n */\r\n search() {\r\n if (this.filterParams.sector === this.snapshot.facets?.sector)\r\n this.filterParams.sector = null;\r\n\r\n // Reset paginator\r\n if (this.paginator) this.paginator.pageIndex = 0;\r\n\r\n // Reset facets search\r\n this.facets.reset();\r\n\r\n // Do search\r\n this.fetch(true);\r\n }\r\n\r\n /**\r\n * Show advanced search\r\n */\r\n advancedSearch() {\r\n let d = this.dialogService.open(ClipperSearchDialogComponent, {\r\n ariaLabel: 'ricerca avanzata',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: false,\r\n data: {\r\n params: this.filterParams,\r\n enableRead: false,\r\n enableSector: true,\r\n enableType: true,\r\n enableAuthor: true,\r\n enableTopic: true,\r\n enableText: true,\r\n enableDocument: true,\r\n enableSource: true,\r\n },\r\n minWidth: '375px',\r\n maxWidth: '700px',\r\n width: '99%',\r\n });\r\n d.componentInstance.done\r\n .subscribe((r: ClipperSearchParams) => {\r\n // Update search params\r\n r.model = this.filterParams.model;\r\n this.filterParams = r;\r\n this.filterParams.first = 0;\r\n this.filterParams.count = 15;\r\n if (this.filterParams.sector === this.snapshot.facets?.sector)\r\n this.filterParams.sector = null;\r\n\r\n // Reset paginator\r\n if (this.paginator) this.paginator.pageIndex = 0;\r\n\r\n // Reset facets search\r\n this.facets.reset();\r\n\r\n // Do search\r\n this.fetch(true);\r\n\r\n // Finished\r\n d.close();\r\n\r\n });\r\n }\r\n\r\n /**\r\n * Show free text help\r\n */\r\n helpSearch() {\r\n this.dialogService.open(ClipperSearchFreeTextHelpComponent, {\r\n ariaLabel: 'informazioni ricerca',\r\n autoFocus: false,\r\n restoreFocus: true,\r\n disableClose: false,\r\n minWidth: '375px',\r\n maxWidth: '800px',\r\n width: '99%',\r\n });\r\n\r\n }\r\n\r\n\r\n}\r\n","<div class=\"clipper-browser-fixed\">\r\n <div class=\"dialog-header\">\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" class=\"dialog-title\">\r\n <a href=\"https://clipper.arsedizioni.it\" matTooltip=\"Apri Clipper in un nuovo tab\" target=\"_blank\">\r\n <div class=\"clipper-logo\"></div>\r\n </a>\r\n </div>\r\n @if (dialogData?.selectionMode > 0 && canSelect()) {\r\n <div fxFlex=\"170px\" fxFlex.lt-md=\"58px\">\r\n <button fxHide.lt-md fxFlexAlign=\"center\" type=\"button\" color=\"primary\" mat-flat-button (click)=\"select()\"\r\n class=\"clipper-selection-button\">\r\n <span class=\"small uppercase\">Usa selezione</span>\r\n </button>\r\n <button fxHide.gt-sm fxFlexAlign=\"center\" type=\"button\" color=\"primary\" mat-icon-button (click)=\"select()\"\r\n matTooltip=\"Usa selezione\" aria-label=\"'Usa la selezione'\" class=\"clipper-selection-icon-button\">\r\n <mat-icon>check</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n <div fxFlex=\"106px\" fxLayoutAlign=\"end\" class=\"dialog-close\">\r\n @if (clipperService.bag.length > 0) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Documenti di lavoro\" aria-label=\"'Documenti di lavoro'\"\r\n (click)=\"openBag()\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"clipperService.bag.length\"\r\n matBadgeColor=\"accent\">work_outline</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill style=\"padding: 10px 10px 10px 20px\">\r\n <div fxFlex=\"*\">\r\n <div fxLayout=\"row\" fxLayoutGap='10px' fxFill>\r\n <mat-form-field fxFlex=\"130px\" fxHide.xs subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Numero</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"filterParams.number\" #number=\"ngModel\" name=\"number\"\r\n maxlength=\"10\" (keyup.Enter)=\"fetch(true)\">\r\n @if (filterParams.number) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"filterParams.number = null;\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"130px\" fxHide.xs subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" matInput [(ngModel)]=\"filterParams.year\" #year=\"ngModel\" name=\"year\" min=\"0\"\r\n maxlength=\"4\" (keyup.Enter)=\"fetch(true)\" />\r\n @if (filterParams.year) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.year = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (year.invalid) {\r\n <mat-error>Non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"100\" subscriptSizing=\"dynamic\" appearance=\"outline\">\r\n <mat-label>Parole, frasi o concetti...</mat-label>\r\n <input matInput #searchInput=\"matInput\" type=\"text\" #text [(ngModel)]=\"filterParams.text\" maxlength=\"200\"\r\n (keyup.Enter)=\"search()\" autofocus />\r\n @if (filterParams.text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"filterParams.text = ''\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Componi\" matTooltip=\"Componi\"\r\n (click)=\"text.focus(); composeSearch()\">\r\n <mat-icon>build</mat-icon>\r\n </button>\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Informazioni\"\r\n matTooltip=\"Come effettuare la ricerca in testo libero\" (click)=\"text.focus(); helpSearch()\">\r\n <mat-icon>help_outline</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <button type=\"button\" mat-icon-button (click)=\"search()\" [attr.aria-label]=\"'Avvia la ricerca'\"\r\n matTooltip=\"Avvia ricerca\" [disabled]=\"!clipperService.loggedIn()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n <button type=\"button\" mat-icon-button (click)=\"advancedSearch()\" [attr.aria-label]=\"'Ricerca avanzata'\"\r\n matTooltip=\"Ricerca avanzata\" [disabled]=\"!clipperService.loggedIn()\">\r\n <mat-icon>settings</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n @if (snapshot.searchInfo && snapshot.searchInfo.length > 0) {\r\n <div fxHide.xs>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill class=\"small\"\r\n style=\"padding:0 10px 0 20px;\">\r\n <div fxFlex=\"*\">\r\n <b>RICERCA ATTIVA</b> \r\n @for (si of snapshot.searchInfo; track si) {\r\n <span>\r\n {{si.sep ? ' ' : ''}} {{si.field}}: <span class=\"accent lowercase\"><i>{{si.value}}</i></span>\r\n </span>\r\n }\r\n </div>\r\n <div fxFlexAlign=\"start\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azzera ricerca\" (click)=\"clearSearch()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <div>\r\n <div fxLayout=\"row wrap-reverse\" fxLayoutAlign=\"space-between center\" fxFill style=\"padding: 0 10px 0 15px;\">\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\">\r\n @if (snapshot.total > 0) {\r\n <div fxFlexAlign=\"center\">\r\n <mat-checkbox (change)=\"$event ? selectAll($event) : null\"\r\n [indeterminate]=\"selection?.hasValue() && !allSelected()\"\r\n [attr.aria-label]=\"'Seleziona/deseleziona tutto'\" matTooltip=\"Seleziona/deseleziona tutto\"\r\n [disabled]=\"!snapshot.items || snapshot.items.length == 0\">\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <div fxFlex=\"*\">\r\n @if (snapshot.total > 0) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button matTooltip=\"Ordina\"\r\n [attr.aria-label]=\"'Menu ordina'\" [matMenuTriggerFor]=\"menuSort\" [disabled]=\"!snapshot.total\">\r\n <span fxHide.lt-lg>Ordina per:</span>\r\n <mat-icon fxHide.gt-md>sort</mat-icon> {{currentSort}}\r\n </button>\r\n }\r\n <mat-menu #menuSort=\"matMenu\">\r\n <button mat-menu-item (click)=\"sortBy(3)\" [attr.aria-label]=\"'Ordina per data decrescente'\">\r\n Data decrescente\r\n </button>\r\n <button mat-menu-item (click)=\"sortBy(2)\" [attr.aria-label]=\"'Ordina per data crescente'\">\r\n Data crescente\r\n </button>\r\n @if (filterParams.text) {\r\n <button mat-menu-item (click)=\"sortBy(1)\" [attr.aria-label]=\"'Ordina per rilevanza'\">\r\n Rilevanza\r\n </button>\r\n }\r\n <button mat-menu-item (click)=\"sortBy(5)\" [attr.aria-label]=\"'Ordina per popolarità'\">\r\n Popolarità\r\n </button>\r\n </mat-menu>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [attr.aria-label]=\"'Menu modello'\"\r\n [matMenuTriggerFor]=\"menuModels\">\r\n <span fxHide.lt-lg>Mostra:</span>\r\n <mat-icon fxHide.gt-md>filter_list</mat-icon> {{currentModel}}\r\n </button>\r\n <mat-menu #menuModels=\"matMenu\">\r\n <button mat-menu-item (click)=\"changeModel(2)\" [attr.aria-label]=\"'Mostra aggiornamento normativo'\">\r\n Gazzette e bollettini\r\n </button>\r\n <button mat-menu-item (click)=\"changeModel(9)\" [attr.aria-label]=\"'Normativa vigente'\">\r\n Normativa vigente\r\n </button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"changeModel()\" [attr.aria-label]=\"'Mostra tutti i documenti'\">\r\n Tutto\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection?.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button\r\n matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\r\n [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection?.all.length\" matBadgeColor=\"accent\">checklist</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" selectionSource=\"selection\" [useSelections]=\"canSelect()\"\r\n [isReadable]=\"false\" [isLawInForce]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed)) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\"\r\n aria-label=\"'Affina ricerca'\" (click)=\"toggleFilterPane()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"clipper-browser-scrollable\">\r\n <mat-drawer-container class=\"fill\">\r\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small drawer-with-loader\" opened=\"false\">\r\n @if (filterBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (filterBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"56px\" class=\"title-container-with-loader\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlexAlign=\"center\" class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\">\r\n <clipper-search-facets #facets></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" [id]=\"scrollerId\" class=\"scroll-auto\" style=\"padding: 0 5px;\">\r\n @if (!snapshot.total) {\r\n <div class=\"message-container\">\r\n <p class=\"message\"><b>Nessun elemento da visualizzare.</b></p>\r\n </div>\r\n } @else {\r\n <div>\r\n @for (item of snapshot.items; track $index; let i = $index) {\r\n @if (item.group) {\r\n <div class=\"items-group-title\">\r\n <div [ngClass]=\"{'group-spaced': i > 0}\">{{item.group}}</div>\r\n </div>\r\n }\r\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\" [actions]=\"contextMenu\"\r\n [displayModelName]=\"true\"></clipper-search-result-item>\r\n }\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [useSelections]=\"canSelect()\" [isReadable]=\"false\"\r\n [isLawInForce]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n <!-- footer -->\r\n @if ((snapshot?.total ?? 0) > 0) {\r\n <div class=\"items-footer\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <mat-paginator #paginator class=\"paginator\" [hidePageSize]=\"true\" [length]=\"snapshot?.total ?? 0\"\r\n [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\" (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n</div>","/*\r\n * Public API Surface of ars-utils\r\n */\r\n\r\nexport * from './ui/browser-dialog/browser-dialog.component';\r\nexport * from './ui/search-dialog/search-dialog.component';\r\nexport * from './ui/search-facets/search-facets.component';\r\nexport * from './ui/search-free-text-help/search-free-text-help.component';\r\nexport * from './ui/search-free-text-query-builder/search-free-text-query-builder.component';\r\nexport * from './ui/search-result-item/search-result-item.component';\r\nexport * from './ui/search-calendar/search-calendar.component';\r\nexport * from './ui/search-result-manager/search-result-manager';\r\nexport * from './ui/references/references.component';\r\nexport * from './ui/document/document.component';\r\nexport * from './ui/document-index/document-index.component';\r\nexport * from './ui/document-menu/document-menu.component';\r\nexport * from './documents';\r\nexport * from './ui/document-manager/document-manager';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i3","i5","FlexModule","i4","i6","i1","takeUntil","i7","i8","i10","i11","i14","i9","i13","i15"],"mappings":"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"}
|