@arsedizioni/ars-utils 19.0.66 → 19.0.68
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/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/search-facets/search-facets.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-facets/search-facets.component.html","../../../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/search-calendar/search-calendar.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-calendar/search-calendar.component.html","../../../projects/ars-utils/clipper.ui/ui/document-manager/document-manager.ts","../../../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/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-result-manager/search-result-manager.ts","../../../projects/ars-utils/clipper.ui/public_api.ts","../../../projects/ars-utils/clipper.ui/arsedizioni-ars-utils-clipper.ui.ts"],"sourcesContent":["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<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</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" fxFill >\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" color=\"primary\">Chiudi</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>\r\n","import { ChangeDetectionStrategy, Component, inject, output } 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 readonly done = output<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<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</mat-dialog-content>\r\n<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-stroked-button [mat-dialog-close]=\"true\" color=\"primary\">Annulla</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, inject, signal, output, viewChild } 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 readonly okButton = viewChild.required<HTMLButtonElement>('okButton');\r\n readonly done = output<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: '100%',\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: '100%'\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<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\" [collapseAt]=\"599\" (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 [collapseAt]=\"599\" [(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</mat-dialog-content>\r\n<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-stroked-button [mat-dialog-close]=\"true\" color=\"primary\">Chiudi</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>\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 { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, output } 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 readonly changed = output<ClipperSearchFacetsSnapshot>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n\r\n protected snapshot: ClipperSearchFacetsSnapshot = new ClipperSearchFacetsSnapshot();\r\n\r\n public hasFacets = (): boolean => this.snapshot.hasFacets;\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 ?? ''\" matTooltipPosition=\"above\">\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 { 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, ClipperUtils } 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 Stripe = 3\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 readonly contextMenuTrigger = viewChild.required<MatMenuTrigger>('contextMenuTrigger');\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n protected screenService = inject(ScreenService);\r\n protected broadcastService = inject(BroadcastService);\r\n private changeDetector = inject(ChangeDetectorRef);\r\n readonly parent = input.required<ClipperSearchResultManager>();\r\n readonly item = input.required<ClipperDocumentInfo>();\r\n readonly actions = input.required<MatMenu>();\r\n readonly tileNoPictureUrl = input<string>();\r\n readonly tilePictureUrl = input<string>();\r\n readonly isSelectable = input<boolean>(true);\r\n readonly isReadable = input<boolean>(true); \r\n readonly isReadableModel = input<ClipperModel | null>(null);\r\n readonly displayModifiedTitle = input<boolean>(false);\r\n readonly displayModelName = input<boolean>(false);\r\n readonly 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());\r\n }\r\n } else if (message.id === ClipperMessages.DOCUMENT_READ) {\r\n if (this.isReadable() && this.item().documentId === message.data.document.documentId) {\r\n this.item().isRead = message.data.value;\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 const contextMenuTrigger = this.contextMenuTrigger();\r\n contextMenuTrigger.menuData = { item: item };\r\n 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 read\r\n * @returns true if current item is read\r\n */\r\n protected isRead(): boolean {\r\n return this.isReadable() && ClipperUtils.isClipperModelReadable(\r\n this.isReadableModel() ?? this.item().model) && this.item().isRead === true;\r\n };\r\n\r\n /**\r\n * Checks if current item can be read\r\n * @returns true if current item can be read\r\n */\r\n protected canBeRead(): boolean {\r\n return this.isReadable() && ClipperUtils.isClipperModelReadable(\r\n this.isReadableModel() ?? this.item().model) && this.item().isRead !== true;\r\n };\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' : '16px'\" 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 if(item().model === modelsEnum.NormativaVigente ||\r\n item().model === modelsEnum.AggiornamentoNormativo ||\r\n item().model === modelsEnum.GiurisprudenzaRecente ||\r\n item().model === modelsEnum.Juris) {\r\n @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 }@else if (item().date) {\r\n <div class=\"info-1\">{{item().date | format:'D':'d MMM yyyy'}}</div>\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 item().model !== modelsEnum.Scadenze &&\r\n item().model !== modelsEnum.Segnalazioni ) {\r\n <div class=\"info-1\">\r\n {{item().originDescription}} \r\n @if (item().model === modelsEnum.Coordinamento ) {\r\n @if (item().validFromDate) {\r\n in vigore da: <span class=\"bold\">{{item().validFromDate | format:'D':'d MMMM yyyy'}}</span>\r\n }\r\n @if (item().applicableFromDate) {\r\n applicabile da: <span class=\"bold\">{{item().applicableFromDate | format:'D':'d MMMM yyyy'}}</span>\r\n }\r\n }\r\n </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 ||\r\n item().model === modelsEnum.Articoli ||\r\n item().model === 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().title1 && displayModifiedTitle()) {\r\n <div class=\"details\">\r\n <div>TITOLO DOCUMENTO MODIFICATO</div>\r\n <div class=\"links\">\r\n <div>{{item().title1}}</div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n @if (item().model === modelsEnum.Scadenze || item().model === modelsEnum.Segnalazioni) {\r\n @if (item().expiringDescription) {\r\n <div class=\"details\">\r\n <div>PROSSIMA SCADENZA</div>\r\n <div class=\"links\">\r\n <div>{{item().expiringDescription}}</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) {\r\n @if (canBeRead())\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 if (displayMode() === displayModesEnum.Tile ) {\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 (canBeRead() || isSelectable()) {\r\n <div class=\"buttons\">\r\n @if (canBeRead() && 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 } @else if (displayMode() === displayModesEnum.Stripe ) {\r\n <div class=\"stripe\" (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 fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\r\n <div>\r\n <div fxLayout=\"row\">\r\n <div class=\"image-mark\" [ngClass]=\"{'image-mark-unread': !isRead()}\"></div>\r\n <div fxHide.xs class=\"image\">\r\n @if (canBeRead() || isSelectable()) {\r\n <div class=\"buttons\">\r\n @if (canBeRead() && 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 @if (item().pictureId && tilePictureUrl()) {\r\n <img decoding=\"async\" loading=\"lazy\" [src]=\"tilePictureUrl() + '?id=' + item().pictureId\"\r\n [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>\r\n </div>\r\n <div fxFlex=\"*\" 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 fxLayout=\"row\" fxLayoutGap=\"10px\">\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 </div>\r\n </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 { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, input, signal, output, viewChild } 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, subDays } 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 readonly calendar = viewChild.required<MatCalendar<any>>('calendar');\r\n readonly changed = output<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 if (cellDate < startOfToday()) return 'special-date-expired';\r\n else if (subDays(cellDate, 15) <= startOfToday()) return 'special-date-expiring';\r\n else return 'special-date';\r\n }\r\n return '';\r\n };\r\n protected calendarDateFilter = (cellDate: Date): boolean => {\r\n return this.canFilter() && this.calendarSpecialDays != null && this.calendarSpecialDays[cellDate.getDate() - 1] > 0;\r\n }\r\n readonly canFilter = input<boolean>(false);\r\n\r\n\r\n /**\r\n * Update calendar\r\n * @param month : the month snapshot\r\n * @param months : the months snapshot\r\n * @param date : the new current date\r\n */\r\n update(month: ClipperSearchCalendarSnapshotResult | null = null,\r\n months: ClipperSearchCalendarSnapshotResult | null = null,\r\n date: Date) {\r\n if (months?.months) {\r\n this.months.set(months.months);\r\n }\r\n if (month && month.months && month.months.length > 0) {\r\n this.calendarSpecialDays = month.months[0].days;\r\n }\r\n const calendar = this.calendar();\r\n if (calendar) {\r\n calendar.activeDate = date;\r\n calendar.selected = date;\r\n calendar.updateTodaysDate();\r\n }\r\n this.calendarDate = date;\r\n this.changeDetector.markForCheck();\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 this.calendarDate = 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 newDate = new Date(monthInfo.year, monthInfo.month - 1, 1);\r\n this.changed.emit(\r\n new DateInterval(\r\n endOfDay(startOfMonth(newDate)),\r\n endOfMonth(newDate)));\r\n this.calendarSpecialDays = monthInfo.days;\r\n const calendar = this.calendar();\r\n calendar.activeDate = newDate;\r\n calendar.updateTodaysDate();\r\n this.calendarDate = newDate;\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 $index) {\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-stroked-button color=\"primary\" (click)=\"filterByDate('month')\">Tutto il\r\n mese</button>\r\n </div>\r\n }\r\n </div>\r\n</div>","import { Clipboard } from '@angular/cdk/clipboard';\r\nimport { ChangeDetectionStrategy, 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\nimport { finalize } from 'rxjs';\r\n\r\n\r\n@Component({\r\n template: '<div></div>',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush\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((data: DialogResult) => {\r\n if (data.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 .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(r => {\r\n saveAs(r, (item.title1 ? item.title1 : id) + '.pdf');\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Export 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 * @param format: the export format: 1) list 2) deadlines\r\n */\r\n exportItems(\r\n documentIds: string[] | null | undefined,\r\n searchParams: ClipperSearchParams | null | undefined = null,\r\n format: number = 1) {\r\n if (!this.clipperService.loggedIn()) return;\r\n let model: ClipperExportDocumentsParams = { ids: documentIds ?? [], query: null, format: format };\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 .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(r => {\r\n if (r.type === 'application/json') {\r\n r.text().then(json => this.dialogService.error(JSON.parse(json).message));\r\n } else {\r\n if (format === 1) {\r\n saveAs(r, 'elenco.csv');\r\n } else {\r\n saveAs(r, 'scadenze.ics');\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Export a single deadline\r\n * @param item : the document to export\r\n */\r\n exportDeadline(item: ClipperDocumentInfo) {\r\n this.exportItems([item.documentId], null, 2);\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: '100%',\r\n });\r\n d.componentInstance.done\r\n .subscribe((data: ClipperSendDocumentsByEmailParams) => {\r\n data.ids = items?.map(n => n.documentId ?? n.id) ?? [];\r\n this.dialogService.busy('Invio in corso...');\r\n this.clipperService.sendTo(data)\r\n .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(r => {\r\n if (!r.success) {\r\n this.dialogService.error(r.message);\r\n } else {\r\n this.dialogService.toast('Invio completato con successo.');\r\n d.close();\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 .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(r => {\r\n saveAs(r, (title ? title : documentId) + '.html');\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: '1200px',\r\n width: '100%',\r\n height: '100%',\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: SelectableItem[] = [];\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 multipleSelection: false,\r\n mustSelect: false,\r\n okCaption: 'SELEZIONA',\r\n items: items,\r\n total: items?.length ?? 0,\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 ////\r\n // AI Assistant\r\n ////\r\n /**\r\n * AI: concern me service\r\n * @param document: the document\r\n */\r\n AI_concernMe(document: ClipperDocumentInfo | null) {\r\n if (!document) return;\r\n this.broadcastService.sendMessage(ClipperMessages.AI_CONCERN_ME, document);\r\n }\r\n\r\n /**\r\n * AI: explain service\r\n * @param document: the document\r\n */\r\n AI_explain(document: ClipperDocumentInfo | null) {\r\n if (!document) return;\r\n this.broadcastService.sendMessage(ClipperMessages.AI_EXPLAIN, document);\r\n }\r\n\r\n\r\n ////\r\n // Registro e scadenzario\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[] | null) {\r\n if (!this.clipperService.supportsRS() || !documents) 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 | null) {\r\n if (!this.clipperService.supportsRS() || !document) 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 | null) {\r\n if (!this.clipperService.supportsRS() || !document) 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, OnDestroy, OnInit, Renderer2, Signal, inject, input, viewChild } 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, MatMenuTrigger } from '@angular/material/menu';\r\nimport { FlexModule } from '@ngbracket/ngx-layout';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { ClipperDocumentInfo, ClipperModel, ClipperService, ClipperUtils } from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\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 implements OnInit, OnDestroy {\r\n\r\n private rsMenuTrigger: Signal<MatMenuTrigger | undefined> = viewChild<MatMenuTrigger>('rsMenuTrigger');\r\n private aiAssistantMenuTrigger: Signal<MatMenuTrigger | undefined> = viewChild<MatMenuTrigger>('aiAssistantMenuTrigger');\r\n private linksMenuTrigger: Signal<MatMenuTrigger | undefined> = viewChild<MatMenuTrigger>('linksMenuTrigger');\r\n private allMenuTriggers: Signal<MatMenuTrigger | undefined>[] = [\r\n this.linksMenuTrigger,\r\n this.rsMenuTrigger,\r\n this.aiAssistantMenuTrigger\r\n ]\r\n private renderer2 = inject(Renderer2);\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private clipperService = inject(ClipperService);\r\n readonly useSelections = input<boolean>(false);\r\n readonly selectionSource = input<'bag' | 'selection' | 'none' | null>('selection');\r\n protected selection = (): ClipperDocumentInfo[] => {\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 readonly parent = input.required<ClipperSearchResultManager>();\r\n readonly item = input<ClipperDocumentInfo>();\r\n readonly isReference = input<boolean>(false);\r\n readonly isReadable = input<boolean>(true);\r\n readonly isReadableModel = input<ClipperModel | null>(null);\r\n readonly isLawInForce = input<boolean>(false);\r\n readonly canPrint = input<boolean>(false);\r\n readonly canFind = input<boolean>(false);\r\n readonly canUseCalendar = input<boolean>(false);\r\n readonly canUseArchive = input<boolean>(false);\r\n readonly canUseAIAssistant = input<boolean>(false);\r\n protected canDeselectAll = (): boolean => this.selectionSource() === 'selection' && this.selection().length > 0;\r\n protected canManageBag = (): boolean => this.selectionSource() === 'bag';\r\n protected canOpen = (): boolean => (this.getSingleSelection()?.documentId?.length ?? 0) > 0;\r\n protected canAddToWorkingDocuments = (): boolean => this.selectionSource() !== 'bag' && this.getMultipleSelection().length > 0;\r\n protected canSendByEmail = (): boolean => this.getMultipleSelection().length > 0;\r\n protected canAddToArchive = (): boolean => this.canUseArchive() && this.canSendByEmail();\r\n protected canAddToCalendar = (): boolean => {\r\n let canAdd = true;\r\n this.getMultipleSelection()?.forEach(n => {\r\n if (n.model !== 10 && n.model !== 20) {\r\n canAdd = false;\r\n return;\r\n }\r\n });\r\n return canAdd && this.canUseCalendar() && !this.isReference();\r\n }\r\n protected canExportCalendar = (): boolean => {\r\n let canExport = true;\r\n this.getMultipleSelection()?.forEach(n => {\r\n if (n.model !== 10 && n.model !== 20) {\r\n canExport = false;\r\n return;\r\n }\r\n });\r\n return canExport && this.canUseCalendar() && !this.isReference();\r\n }\r\n protected canSaveAsPdf = (): boolean => {\r\n const item = this.getSingleSelection();\r\n return item !== null && item?.model !== ClipperModel.Coordinamento;\r\n }\r\n protected canSetAsRead = (): boolean => {\r\n const items = this.getMultipleSelection();\r\n return this.isReadable() && (items.length > 1 || (items.length === 1 && items[0].isRead !== true &&\r\n ClipperUtils.isClipperModelReadable(this.isReadableModel() ?? items[0].model)));\r\n };\r\n protected canSetAsUnread = (): boolean => {\r\n const items = this.getMultipleSelection();\r\n return this.isReadable() && (items.length > 1 || (items.length === 1 && items[0].isRead === true &&\r\n ClipperUtils.isClipperModelReadable(this.isReadableModel() ?? items[0].model)));\r\n };\r\n protected canAccessRS = (): boolean => {\r\n const items = this.getMultipleSelection();\r\n return this.clipperService.supportsRS() && this.parent()?.RS_enabled(items) === true;\r\n };\r\n\r\n ngOnInit(): void {\r\n if (this.selectionSource() === \"selection\") {\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 }\r\n\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 * Get a single selection\r\n * @returns the single selection or null\r\n */\r\n protected getSingleSelection(): ClipperDocumentInfo | null | undefined {\r\n if (this.item()) {\r\n return this.item();\r\n } else if (this.selection().length === 1) {\r\n return this.selection()[0];\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Get multiple selection\r\n * @returns : the multiple selection or array empty\r\n */\r\n protected getMultipleSelection(): ClipperDocumentInfo[] {\r\n if (this.item()) {\r\n const item = this.item();\r\n if (item) {\r\n return [item];\r\n }\r\n } else if (this.selection().length > 0) {\r\n return this.selection();\r\n }\r\n return [];\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 protected hasSingleSelection(): boolean {\r\n return this.item() !== null || this.selection().length === 1;\r\n }\r\n\r\n /** \r\n * Show and hide sub menus\r\n * @param trigger: the trigger to use or null to deselect\r\n */\r\n protected showSubMenu(trigger: MatMenuTrigger | null = null) {\r\n this.allMenuTriggers.forEach(menuTrigger => {\r\n const menu = menuTrigger();\r\n if (menu) {\r\n if (menu.menuOpen) {\r\n menu.closeMenu();\r\n this.resetSubMenu(menu);\r\n }\r\n }\r\n });\r\n trigger?.openMenu();\r\n }\r\n\r\n /**\r\n * Reset sub menu\r\n * @param trigger: the trigger to use\r\n */\r\n protected resetSubMenu(trigger: MatMenuTrigger) {\r\n this.renderer2.removeClass(trigger['_element'].nativeElement, 'cdk-focused');\r\n this.renderer2.removeClass(trigger['_element'].nativeElement, 'cdk-program-focused');\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 protected 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 protected setRead(value: boolean) {\r\n this.parent()?.setRead(value, this.item());\r\n }\r\n\r\n /**\r\n * Open a document\r\n * @param item : the item \r\n */\r\n protected open(item: ClipperDocumentInfo) {\r\n if (item.documentId) {\r\n this.parent()?.open(item.documentId);\r\n }\r\n }\r\n\r\n /**\r\n * Open document references\r\n * @param item : the item \r\n * @param mode: the mode\r\n */\r\n protected openReferences(item: ClipperDocumentInfo, mode: number) {\r\n if (item.documentId) {\r\n this.parent()?.openReferences(item.documentId, mode);\r\n }\r\n }\r\n\r\n}\r\n","@if (canDeselectAll()) {\r\n<button mat-menu-item (click)=\"parent().selection?.clear()\" [attr.aria-label]=\"'Deseleziona tutti'\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n} @else if (canManageBag()) {\r\n<button mat-menu-item (click)=\"parent().openBag()\" [attr.aria-label]=\"'Gestisci documenti di lavoro'\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n@if (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\" (mouseenter)=\"showSubMenu()\"\r\n (click)=\"open(getSingleSelection())\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n@if (canAddToWorkingDocuments()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"parent().addItemsToBag(getMultipleSelection())\" (mouseenter)=\"showSubMenu()\">\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'\" (mouseenter)=\"showSubMenu()\">\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'\" (mouseenter)=\"showSubMenu()\">\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 (canSendByEmail()) {\r\n<button mat-menu-item (click)=\"parent().sendItemsTo(getMultipleSelection())\"\r\n [attr.aria-label]=\"'Invia documento per email'\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (canAddToArchive()) {\r\n<button mat-menu-item (click)=\"parent().addToArchive(getMultipleSelection())\" [attr.aria-label]=\"'Archivia'\">\r\n <mat-icon>account_tree</mat-icon>Archivia\r\n</button>\r\n}\r\n@if (canSaveAsPdf()) {\r\n<button mat-menu-item (click)=\"parent().exportPdf(getSingleSelection())\" (mouseenter)=\"showSubMenu()\"\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 (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"parent().showLink(getSingleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n}\r\n@if (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Copia metadati negli appunti'\"\r\n (click)=\"parent().copyMetadataToClipboard(getSingleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>content_copy</mat-icon>Copia metadati\r\n</button>\r\n}\r\n@if (!isReference() && canOpen()) {\r\n<button mat-menu-item [matMenuTriggerFor]=\"linksMenu\" #linksMenuTrigger=\"matMenuTrigger\"\r\n (mouseenter)=\"showSubMenu(linksMenuTrigger)\" (mouseleave)=\"resetSubMenu(linksMenuTrigger)\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"openReferences(getSingleSelection(), 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if (!isReference() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"openReferences(getSingleSelection(), 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra giurisprudenza'\" (click)=\"openReferences(getSingleSelection(), 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra modifiche normative'\"\r\n (click)=\"openReferences(getSingleSelection(), 3)\">\r\n Modifiche\r\n </button>\r\n }\r\n</mat-menu>\r\n}\r\n@if (canAddToCalendar()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi al calendario'\"\r\n (click)=\"parent().addToCalendar(getSingleSelection())\">\r\n <mat-icon>alarm</mat-icon> Crea scadenza\r\n</button>\r\n}\r\n@if (canExportCalendar()) {\r\n@if(useSelections()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Importa in Oultook (iCalandar)'\" (click)=\"parent().exportResults(2)\">\r\n <mat-icon>mail_outline</mat-icon>Importa in Outlook (iCalendar)\r\n</button>\r\n} @else if (item()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Importa in Oultook (iCalandar)'\"\r\n (click)=\"parent().exportItems([item().documentId], null, 2)\">\r\n <mat-icon>mail_outline</mat-icon>Importa in Outlook (iCalendar)\r\n</button>\r\n}\r\n}\r\n@if (canSetAsUnread()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"setRead(false)\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n</button>\r\n}\r\n@if (canSetAsRead()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come già letto'\" (click)=\"setRead(true)\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>flag</mat-icon>Segna come già letto\r\n</button>\r\n}\r\n\r\n\r\n@if (isLawInForce() && canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Mostra report'\" (click)=\"parent().report(getSingleSelection())\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n\r\n@if (canUseAIAssistant() && hasSingleSelection()) {\r\n<mat-divider></mat-divider>\r\n<button mat-menu-item matTooltip=\"Assistente IA\" [attr.aria-label]=\"'Assistente IA'\"\r\n [matMenuTriggerFor]=\"aiAssistantMenu\" #aiAssistantMenuTrigger=\"matMenuTrigger\"\r\n (mouseenter)=\"showSubMenu(aiAssistantMenuTrigger)\" (mouseleave)=\"resetSubMenu(aiAssistantMenuTrigger)\">\r\n <mat-icon>borg</mat-icon>\r\n Assistente IA\r\n</button>\r\n<mat-menu #aiAssistantMenu=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Mi riguarda?'\" (click)=\"parent().AI_concernMe(getSingleSelection())\">\r\n Mi riguarda?\r\n </button>\r\n <button mat-menu-item [attr.aria-label]=\"'Di che si tratta?'\" (click)=\"parent().AI_explain(getSingleSelection())\">\r\n Di che si tratta?\r\n </button>\r\n</mat-menu>\r\n}\r\n\r\n@if (canAccessRS()) {\r\n<mat-divider></mat-divider>\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\" [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\"\r\n [matMenuTriggerFor]=\"rsMenu\" #rsMenuTrigger=\"matMenuTrigger\" (mouseenter)=\"showSubMenu(rsMenuTrigger)\"\r\n (mouseleave)=\"resetSubMenu(rsMenuTrigger)\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n</button>\r\n<mat-menu #rsMenu=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"parent().RS_newLaw(getMultipleSelection())\">\r\n Nuova legge\r\n </button>\r\n @if (canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova attività'\" (click)=\"parent().RS_newActivity(getSingleSelection())\">\r\n Nuova attività\r\n </button>\r\n }\r\n @if (canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\"\r\n (click)=\"parent().RS_usageReport(getSingleSelection())\">\r\n Report utilizzo norma\r\n </button>\r\n }\r\n</mat-menu>\r\n}","import { Breakpoints } from '@angular/cdk/layout';\r\nimport { AfterViewInit, ChangeDetectionStrategy, Component, OnDestroy, OnInit, inject, viewChild } 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, ClipperReferencesSearchParams, ClipperSearchFacetsResult, ClipperSearchFacetsSnapshot,\r\n ClipperSearchParams,\r\n ClipperUserInfo\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ApiResult, SelectableModel, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { finalize, takeUntil } from 'rxjs/operators';\r\nimport { ClipperDocumentManager } from '../document-manager/document-manager';\r\nimport { ClipperDocumentMenuComponent } from '../document-menu/document-menu.component';\r\nimport { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';\r\nimport { ClipperSearchResultItemComponent } from '../search-result-item/search-result-item.component';\r\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\r\n\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 ClipperDocumentManager,\r\n ClipperDocumentMenuComponent,\r\n ClipperSearchFacetsComponent,\r\n ClipperSearchResultManager,\r\n ClipperSearchResultItemComponent\r\n\r\n ],\r\n})\r\nexport class ClipperReferencesComponent extends ClipperSearchResultManager\r\n implements OnInit, OnDestroy, AfterViewInit {\r\n readonly filterPane = viewChild.required<MatDrawer>('filterPane');\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 protected user: ClipperUserInfo | null = this.clipperService.loginInfo?.context ?? 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<ClipperDocumentInfo, 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: any) => {\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 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 const facets = this.facets();\r\n if (facets) {\r\n 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.changeDetector.detectChanges();\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 /**\r\n * Handle filter pane visibility\r\n */\r\n private handleFilterPaneVisibility() {\r\n const filterPane = this.filterPane();\r\n if (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 (filterPane.opened) {\r\n filterPane.close();\r\n }\r\n filterPane.mode = 'over';\r\n filterPane.disableClose = false;\r\n this.filterPaneHasBackdrop = true;\r\n } else {\r\n if (!this.hasFacets()) {\r\n filterPane.close();\r\n } else if (!filterPane.opened && !this.filterPaneClosed) {\r\n filterPane.open();\r\n } else if (filterPane.opened && this.filterPaneClosed) {\r\n filterPane.close();\r\n }\r\n filterPane.mode = 'side';\r\n 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\r\n\r\n /**\r\n * Prepare the 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 = SystemUtils.clone(this.filterParams) as ClipperSearchParams;\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 * Get e refrences search params form clipper search params\r\n * @param params : the clipper search params\r\n * @returns : the references search params\r\n */\r\n private toReferencesSearchParams(params: ClipperSearchParams): ClipperReferencesSearchParams {\r\n return {\r\n documentId: params.id,\r\n year: params.year,\r\n sector: params.sector,\r\n author: params.author,\r\n anchor: params.anchor,\r\n model: params.model?.toString() ?? null,\r\n mode: params.mode,\r\n excludeTextReferences: params.excludeTextReferences,\r\n excludeNotesReferences: params.excludeNotesReferences,\r\n returnModifierInfo: params.returnModifierInfo,\r\n useModifierInfo: params.useModifierInfo,\r\n count: 15,\r\n first: 0\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 if (searchParams) {\r\n this.clipperService.references(this.toReferencesSearchParams(searchParams))\r\n .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(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 const paginator = this.paginator();\r\n if (paginator) paginator.pageIndex = 0;\r\n }\r\n\r\n this.scroll(0);\r\n }\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() || !params) return;\r\n if (!this.snapshot.facets || this.snapshot.facets?.hasMoreFacets) {\r\n this.filterBusy.set(true);\r\n this.clipperService.referencesFacets(this.toReferencesSearchParams(params))\r\n .subscribe({\r\n next: (r: ApiResult<ClipperSearchFacetsResult>) => {\r\n if (r.success) {\r\n let hasFacets = (r.value.facets?.length ?? 0) > 0;\r\n if (r.value.facets) {\r\n const facets = this.facets();\r\n facets?.update(r.value.facets, r.value.interval);\r\n if (facets && this.snapshot) {\r\n hasFacets = facets.hasFacets();\r\n this.snapshot.facets = facets.save();\r\n this.snapshot.facets.hasTooManyResults = (this.snapshot?.total ?? 0) >= 1000;\r\n }\r\n }\r\n this.hasFacets.set(hasFacets);\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 /**\r\n* Return item state css class\r\n* @param item : the item to evaluate\r\n*/\r\n override getItemStateCssClass(item: ClipperDocumentInfo): string | null {\r\n if (item.isExpired) return 'expired-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 override getItemStateTooltip(item: ClipperDocumentInfo): string {\r\n if (item.isExpired) return 'Non più vigente';\r\n return '';\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 5px 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\" [matBadge]=\"selection?.all.length\" >\r\n <mat-icon>checklist</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" selectionSource=\"selection\" [useSelections]=\"true\" [isReadable]=\"false\"\r\n [isReference]=\"true\" [canUseAIAssistant]=\"user?.hasAIAssistant ?? false\" >\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>right_panel_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<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\" fxLayoutAlign=\"start center\" fxFill>\r\n <div class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>right_panel_close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\" style=\"padding: 0 5px;\">\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\" [isReadable]=\"false\"\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\" [canUseAIAssistant]=\"user?.hasAIAssistant ?? false\">\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 wrap\" fxLayoutGap=\"10px\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <!-- legend -->\r\n <div fxFlex.lt-md=\"100\" class=\"legend-container\">\r\n <div class=\"legend expired-bg \"></div>\r\n non più vigente\r\n </div>\r\n <div fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\" [ngClass]=\"{'wide': filterPane?.opened}\">\r\n <div fxLayout=\"row\">\r\n <mat-paginator fxFlexAlign=\"center\" #paginator class=\"paginator\" [hidePageSize]=\"true\"\r\n [length]=\"snapshot?.total ?? 0\" [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\"\r\n (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n</mat-dialog-content>","import { NgStyle } from '@angular/common';\r\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnInit,\n inject,\n signal,\n output,\n viewChild\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\nimport { finalize } from 'rxjs';\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 readonly selection = viewChild.required<MatSelectionList>('selection');\r\n readonly done = output<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 .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(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 });\r\n }\r\n\r\n /**\r\n * Handle selection/deselection of an item\r\n */\r\n protected select() {\r\n const selection = this.selection();\n this.okDisabled.set(\r\n !selection || 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<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 [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</mat-dialog-content>\r\n<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-stroked-button [mat-dialog-close]=\"true\" color=\"primary\">Chiudi</button>\r\n </div>\r\n</mat-dialog-actions>","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n OnDestroy,\r\n OnInit,\r\n Renderer2,\r\n inject,\r\n signal,\r\n output,\r\n viewChild\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 ClipperUserInfo\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 } 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 readonly relevantsPane = viewChild.required<MatDrawer>('relevantsPane');\r\n readonly closing = output();\r\n readonly opening = output<string>();\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 lastAugmentedQuery?: string[] | 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 protected user: ClipperUserInfo | null = this.clipperService.loginInfo?.context ?? 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 \"&theme=\" +\r\n this.dialogData.theme +\r\n \"&id=\" +\r\n this.dialogData.id\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 }\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\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 * 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 const relevantsPane = this.relevantsPane();\r\n if (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 (relevantsPane.opened) {\r\n relevantsPane.close();\r\n }\r\n relevantsPane.mode = 'over';\r\n relevantsPane.disableClose = false;\r\n this.relevantsPaneHasBackdrop = true;\r\n } else {\r\n if (!relevantsPane.opened && !this.relevantsPaneClosed && this.hasRelevants()) {\r\n relevantsPane.open();\r\n } else if (relevantsPane.opened && this.relevantsPaneClosed) {\r\n relevantsPane.close();\r\n }\r\n relevantsPane.mode = 'side';\r\n 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 query = decodeURIComponent(encodeURIComponent(query));\r\n } catch { \r\n }\r\n \r\n const queryParts = query.split('__TERM__');\r\n if (queryParts.length > 0) {\r\n this.lastQuery = queryParts[0];\r\n if (queryParts.length > 1) {\r\n this.lastAugmentedQuery = [];\r\n for(var i = 1; i < queryParts.length; i++) {\r\n this.lastAugmentedQuery.push(queryParts[i]);\r\n }\r\n }\r\n }\r\n\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 this.clipperService.preRender().subscribe(() => {\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 /**\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 this.changeDetector.markForCheck();\r\n }\r\n });\r\n\r\n // Notify navigation has completed\r\n this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_NAVIGATED, {\r\n document: SystemUtils.clone(this.lastDocument),\r\n });\r\n\r\n this.busy.set(false);\r\n\r\n this.changeDetector.markForCheck();\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/?theme=\" + this.dialogData.theme + \"&id=\" + item.documentId,\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 const query = this.lastAugmentedQuery.length > 0 \r\n ? this.lastAugmentedQuery.join(\"__TERM__\")\r\n : this.lastQuery;\r\n if ( \r\n !query ||\r\n query.length === 0 ||\r\n query === ' ') {\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 = query;\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 this.changeDetector.markForCheck();\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: '100%',\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: '100%',\r\n height: '100%'\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\n r.value.replace(/\\n/g, '<br>\\r\\n'),\r\n \"Commento\",\r\n \"Chiudi\",\r\n 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(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.baseService,\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: '1200px',\r\n width: '100%',\r\n height: '100%',\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=\"title 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\" [canUseAIAssistant]=\"user?.hasAIAssistant ?? false\">\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>right_panel_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<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\" 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>right_panel_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 @if((lastAugmentedQuery?.length ?? 0) > 0) {\r\n + <span class='word-hit-ai' [matTooltip]=\"'Assistente IA ha considerato anche: ' + lastAugmentedQuery?.join(', ')\"><mat-icon style=\"width:14px; height:14px; font-size:16px\">borg</mat-icon> Assistente IA</span>\r\n }\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</mat-dialog-content>","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: '100%',\r\n height: '100%'\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 { BreakpointObserver } from '@angular/cdk/layout';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component, OnDestroy, inject,\r\n signal,\r\n viewChild\r\n} from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { ClipperDocumentInfo, ClipperMessages, ClipperModel, 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 readonly paginator = viewChild<MatPaginator>('paginator');\r\n readonly facets = viewChild<ClipperSearchFacetsComponent>('facets');\r\n readonly calendar = viewChild<ClipperSearchCalendarComponent>('calendar');\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<ClipperDocumentInfo, 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<ClipperSort>[] = [];\r\n protected sortMode: NameValueItem<ClipperSort> | null = null;\r\n protected scrollPos: number = 0;\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 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) {\r\n n.expiringDescription = parts[2];\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 } 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.GiurisprudenzaRecente &&\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 }\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, 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 result list to prepare\r\n */\r\n prepareResults(data: ClipperSearchResult) {\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 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 * @param format: the export format: 1) list, 2) deadlines\r\n */\r\n exportResults(format: number = 1) {\r\n if (this.snapshot?.total > 0 || this.hasAnySelection()) {\r\n this.exportItems(this.getSeletectIds(), this.filterParams, format);\r\n }\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 /**\r\n * Set read flag\r\n * @param value: the flag value\r\n * @param item: the item to set or null to use current selection\r\n */\r\n setRead(value: boolean, item: ClipperDocumentInfo | null = 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 let changed = 0;\r\n if (item) {\r\n if (item.isRead !== value) {\r\n item.isRead = value;\r\n this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_READ, { document: item, value: value });\r\n changed++;\r\n }\r\n } else if (this.hasAnySelection()) {\r\n this.selection?.all?.forEach(n => {\r\n if (n.isRead !== value) {\r\n n.isRead = value;\r\n this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_READ, { document: n, value: value });\r\n changed++;\r\n }\r\n })\r\n }\r\n\r\n // Update dashboard\r\n if (changed > 0) {\r\n this.clipperService.updateUnreadItems(\r\n ClipperUtils.getClipperModuleFromModel(item),\r\n item.model,\r\n value ? -1 : 1);\r\n this.changeDetector.markForCheck();\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) 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.baseService,\r\n this.clipperService,\r\n documentId,\r\n query ?? this.filterParams.expandTextQueryUsingAI\r\n ? (this.filterParams.augmentedText ?? this.filterParams.text)\r\n : 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 storage : the storage to use. Default si session storage.\r\n */\r\n save(id: string, storage: Storage = sessionStorage) {\r\n storage.setItem(\r\n id,\r\n JSON.stringify({\r\n paginator: {\r\n index: 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: this.scrollPos,\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 * @param storage : the storage to use. Default si session storage.\r\n */\r\n restore(id: string, storage: Storage = sessionStorage) {\r\n const value = storage.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 const modules = SystemUtils.clone(this.filterParams.modules);\r\n const sectors = SystemUtils.clone(this.filterParams.sectors);\r\n const authors = SystemUtils.clone(this.filterParams.authors);\r\n const tags = SystemUtils.clone(this.filterParams.tags);\r\n const topics = SystemUtils.clone(this.filterParams.topics);\r\n this.filterParams.modules = modules;\r\n this.filterParams.sectors = null;\r\n this.filterParams.authors = null;\r\n this.filterParams.tags = null;\r\n this.filterParams.topics = null;\r\n this.snapshot = data.data;\r\n this.sortMode = data.sort.mode;\r\n this.sortOptions = data.sort.options;\r\n setTimeout(() => {\r\n this.filterParams.sectors = sectors;\r\n this.filterParams.authors = authors;\r\n this.filterParams.tags = tags;\r\n this.filterParams.topics = topics;\r\n const facets = this.facets();\r\n if (facets && data.facets) {\r\n facets.restore(data.facets);\r\n this.hasFacets.set(data.facets.hasFacets === true ? true : false);\r\n }\r\n const paginator = this.paginator();\r\n if (paginator && data.paginator) {\r\n paginator.pageIndex = data.paginator.index;\r\n paginator.pageSize = data.paginator.size;\r\n paginator.length = data.paginator.total;\r\n }\r\n this.scroll(data.scroll ?? 0);\r\n this.broadcastService.sendMessage(ClipperMessages.COMMAND_SEARCH_RESTORED, data.filterParams)\r\n this.changeDetector.detectChanges();\r\n }, 750);\r\n\r\n }\r\n }\r\n }\r\n}\r\n","/*\r\n * Public API Surface of ars-utils\r\n */\r\n\r\n//export * 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","i6","i4","i8","i10","i11","i1","FlexModule","takeUntil","finalize","i7"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"arsedizioni-ars-utils-clipper.ui.mjs","sources":["../../../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/search-facets/search-facets.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-facets/search-facets.component.html","../../../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/search-calendar/search-calendar.component.ts","../../../projects/ars-utils/clipper.ui/ui/search-calendar/search-calendar.component.html","../../../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/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-manager/document-manager.ts","../../../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-result-manager/search-result-manager.ts","../../../projects/ars-utils/clipper.ui/public_api.ts","../../../projects/ars-utils/clipper.ui/arsedizioni-ars-utils-clipper.ui.ts"],"sourcesContent":["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<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</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" fxFill >\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" color=\"primary\">Chiudi</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>\r\n","import { ChangeDetectionStrategy, Component, inject, output } 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 readonly done = output<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<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</mat-dialog-content>\r\n<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-stroked-button [mat-dialog-close]=\"true\" color=\"primary\">Annulla</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, inject, signal, output, viewChild } 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 readonly okButton = viewChild.required<HTMLButtonElement>('okButton');\r\n readonly done = output<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: '100%',\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: '100%'\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<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\" [collapseAt]=\"599\" (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 [collapseAt]=\"599\" [(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</mat-dialog-content>\r\n<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-stroked-button [mat-dialog-close]=\"true\" color=\"primary\">Chiudi</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>\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 { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, output } 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 readonly changed = output<ClipperSearchFacetsSnapshot>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n\r\n protected snapshot: ClipperSearchFacetsSnapshot = new ClipperSearchFacetsSnapshot();\r\n\r\n public hasFacets = (): boolean => this.snapshot.hasFacets;\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 ?? ''\" matTooltipPosition=\"above\">\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 { 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, ClipperUtils } 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 Stripe = 3\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 readonly contextMenuTrigger = viewChild.required<MatMenuTrigger>('contextMenuTrigger');\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n protected screenService = inject(ScreenService);\r\n protected broadcastService = inject(BroadcastService);\r\n private changeDetector = inject(ChangeDetectorRef);\r\n readonly parent = input.required<ClipperSearchResultManager>();\r\n readonly item = input.required<ClipperDocumentInfo>();\r\n readonly actions = input.required<MatMenu>();\r\n readonly tileNoPictureUrl = input<string>();\r\n readonly tilePictureUrl = input<string>();\r\n readonly isSelectable = input<boolean>(true);\r\n readonly isReadable = input<boolean>(true); \r\n readonly isReadableModel = input<ClipperModel | null>(null);\r\n readonly displayModifiedTitle = input<boolean>(false);\r\n readonly displayModelName = input<boolean>(false);\r\n readonly 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());\r\n }\r\n } else if (message.id === ClipperMessages.DOCUMENT_READ) {\r\n if (this.isReadable() && this.item().documentId === message.data.document.documentId) {\r\n this.item().isRead = message.data.value;\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 const contextMenuTrigger = this.contextMenuTrigger();\r\n contextMenuTrigger.menuData = { item: item };\r\n 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 read\r\n * @returns true if current item is read\r\n */\r\n protected isRead(): boolean {\r\n return this.isReadable() && ClipperUtils.isClipperModelReadable(\r\n this.isReadableModel() ?? this.item().model) && this.item().isRead === true;\r\n };\r\n\r\n /**\r\n * Checks if current item can be read\r\n * @returns true if current item can be read\r\n */\r\n protected canBeRead(): boolean {\r\n return this.isReadable() && ClipperUtils.isClipperModelReadable(\r\n this.isReadableModel() ?? this.item().model) && this.item().isRead !== true;\r\n };\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' : '16px'\" 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 if(item().model === modelsEnum.NormativaVigente ||\r\n item().model === modelsEnum.AggiornamentoNormativo ||\r\n item().model === modelsEnum.GiurisprudenzaRecente ||\r\n item().model === modelsEnum.Juris) {\r\n @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 }@else if (item().date) {\r\n <div class=\"info-1\">{{item().date | format:'D':'d MMM yyyy'}}</div>\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 item().model !== modelsEnum.Scadenze &&\r\n item().model !== modelsEnum.Segnalazioni ) {\r\n <div class=\"info-1\">\r\n {{item().originDescription}} \r\n @if (item().model === modelsEnum.Coordinamento ) {\r\n @if (item().validFromDate) {\r\n in vigore da: <span class=\"bold\">{{item().validFromDate | format:'D':'d MMMM yyyy'}}</span>\r\n }\r\n @if (item().applicableFromDate) {\r\n applicabile da: <span class=\"bold\">{{item().applicableFromDate | format:'D':'d MMMM yyyy'}}</span>\r\n }\r\n }\r\n </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 ||\r\n item().model === modelsEnum.Articoli ||\r\n item().model === 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().title1 && displayModifiedTitle()) {\r\n <div class=\"details\">\r\n <div>TITOLO DOCUMENTO MODIFICATO</div>\r\n <div class=\"links\">\r\n <div>{{item().title1}}</div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n @if (item().model === modelsEnum.Scadenze || item().model === modelsEnum.Segnalazioni) {\r\n @if (item().expiringDescription) {\r\n <div class=\"details\">\r\n <div>PROSSIMA SCADENZA</div>\r\n <div class=\"links\">\r\n <div>{{item().expiringDescription}}</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) {\r\n @if (canBeRead())\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 if (displayMode() === displayModesEnum.Tile ) {\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 (canBeRead() || isSelectable()) {\r\n <div class=\"buttons\">\r\n @if (canBeRead() && 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 } @else if (displayMode() === displayModesEnum.Stripe ) {\r\n <div class=\"stripe\" (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 fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\r\n <div>\r\n <div fxLayout=\"row\">\r\n <div class=\"image-mark\" [ngClass]=\"{'image-mark-unread': !isRead()}\"></div>\r\n <div fxHide.xs class=\"image\">\r\n @if (canBeRead() || isSelectable()) {\r\n <div class=\"buttons\">\r\n @if (canBeRead() && 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 @if (item().pictureId && tilePictureUrl()) {\r\n <img decoding=\"async\" loading=\"lazy\" [src]=\"tilePictureUrl() + '?id=' + item().pictureId\"\r\n [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>\r\n </div>\r\n <div fxFlex=\"*\" 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 fxLayout=\"row\" fxLayoutGap=\"10px\">\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 </div>\r\n </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 { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, input, signal, output, viewChild } 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, subDays } 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 readonly calendar = viewChild.required<MatCalendar<any>>('calendar');\r\n readonly changed = output<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 if (cellDate < startOfToday()) return 'special-date-expired';\r\n else if (subDays(cellDate, 15) <= startOfToday()) return 'special-date-expiring';\r\n else return 'special-date';\r\n }\r\n return '';\r\n };\r\n protected calendarDateFilter = (cellDate: Date): boolean => {\r\n return this.canFilter() && this.calendarSpecialDays != null && this.calendarSpecialDays[cellDate.getDate() - 1] > 0;\r\n }\r\n readonly canFilter = input<boolean>(false);\r\n\r\n\r\n /**\r\n * Update calendar\r\n * @param month : the month snapshot\r\n * @param months : the months snapshot\r\n * @param date : the new current date\r\n */\r\n update(month: ClipperSearchCalendarSnapshotResult | null = null,\r\n months: ClipperSearchCalendarSnapshotResult | null = null,\r\n date: Date) {\r\n if (months?.months) {\r\n this.months.set(months.months);\r\n }\r\n if (month && month.months && month.months.length > 0) {\r\n this.calendarSpecialDays = month.months[0].days;\r\n }\r\n const calendar = this.calendar();\r\n if (calendar) {\r\n calendar.activeDate = date;\r\n calendar.selected = date;\r\n calendar.updateTodaysDate();\r\n }\r\n this.calendarDate = date;\r\n this.changeDetector.markForCheck();\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 this.calendarDate = 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 newDate = new Date(monthInfo.year, monthInfo.month - 1, 1);\r\n this.changed.emit(\r\n new DateInterval(\r\n endOfDay(startOfMonth(newDate)),\r\n endOfMonth(newDate)));\r\n this.calendarSpecialDays = monthInfo.days;\r\n const calendar = this.calendar();\r\n calendar.activeDate = newDate;\r\n calendar.updateTodaysDate();\r\n this.calendarDate = newDate;\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 $index) {\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-stroked-button color=\"primary\" (click)=\"filterByDate('month')\">Tutto il\r\n mese</button>\r\n </div>\r\n }\r\n </div>\r\n</div>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, Renderer2, Signal, inject, input, viewChild } 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, MatMenuTrigger } from '@angular/material/menu';\r\nimport { FlexModule } from '@ngbracket/ngx-layout';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { ClipperDocumentInfo, ClipperModel, ClipperService, ClipperUtils } from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\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 implements OnInit, OnDestroy {\r\n\r\n private rsMenuTrigger: Signal<MatMenuTrigger | undefined> = viewChild<MatMenuTrigger>('rsMenuTrigger');\r\n private aiAssistantMenuTrigger: Signal<MatMenuTrigger | undefined> = viewChild<MatMenuTrigger>('aiAssistantMenuTrigger');\r\n private linksMenuTrigger: Signal<MatMenuTrigger | undefined> = viewChild<MatMenuTrigger>('linksMenuTrigger');\r\n private allMenuTriggers: Signal<MatMenuTrigger | undefined>[] = [\r\n this.linksMenuTrigger,\r\n this.rsMenuTrigger,\r\n this.aiAssistantMenuTrigger\r\n ]\r\n private renderer2 = inject(Renderer2);\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private clipperService = inject(ClipperService);\r\n readonly useSelections = input<boolean>(false);\r\n readonly selectionSource = input<'bag' | 'selection' | 'none' | null>('selection');\r\n protected selection = (): ClipperDocumentInfo[] => {\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 readonly parent = input.required<ClipperSearchResultManager>();\r\n readonly item = input<ClipperDocumentInfo>();\r\n readonly isReference = input<boolean>(false);\r\n readonly isReadable = input<boolean>(true);\r\n readonly isReadableModel = input<ClipperModel | null>(null);\r\n readonly isLawInForce = input<boolean>(false);\r\n readonly canPrint = input<boolean>(false);\r\n readonly canFind = input<boolean>(false);\r\n readonly canUseCalendar = input<boolean>(false);\r\n readonly canUseArchive = input<boolean>(false);\r\n readonly canUseAIAssistant = input<boolean>(false);\r\n protected canDeselectAll = (): boolean => this.selectionSource() === 'selection' && this.selection().length > 0;\r\n protected canManageBag = (): boolean => this.selectionSource() === 'bag';\r\n protected canOpen = (): boolean => (this.getSingleSelection()?.documentId?.length ?? 0) > 0;\r\n protected canAddToWorkingDocuments = (): boolean => this.selectionSource() !== 'bag' && this.getMultipleSelection().length > 0;\r\n protected canSendByEmail = (): boolean => this.getMultipleSelection().length > 0;\r\n protected canAddToArchive = (): boolean => this.canUseArchive() && this.canSendByEmail();\r\n protected canAddToCalendar = (): boolean => {\r\n let canAdd = true;\r\n this.getMultipleSelection()?.forEach(n => {\r\n if (n.model !== 10 && n.model !== 20) {\r\n canAdd = false;\r\n return;\r\n }\r\n });\r\n return canAdd && this.canUseCalendar() && !this.isReference();\r\n }\r\n protected canExportCalendar = (): boolean => {\r\n let canExport = true;\r\n this.getMultipleSelection()?.forEach(n => {\r\n if (n.model !== 10 && n.model !== 20) {\r\n canExport = false;\r\n return;\r\n }\r\n });\r\n return canExport && this.canUseCalendar() && !this.isReference();\r\n }\r\n protected canSaveAsPdf = (): boolean => {\r\n const item = this.getSingleSelection();\r\n return item !== null && item?.model !== ClipperModel.Coordinamento;\r\n }\r\n protected canSetAsRead = (): boolean => {\r\n const items = this.getMultipleSelection();\r\n return this.isReadable() && (items.length > 1 || (items.length === 1 && items[0].isRead !== true &&\r\n ClipperUtils.isClipperModelReadable(this.isReadableModel() ?? items[0].model)));\r\n };\r\n protected canSetAsUnread = (): boolean => {\r\n const items = this.getMultipleSelection();\r\n return this.isReadable() && (items.length > 1 || (items.length === 1 && items[0].isRead === true &&\r\n ClipperUtils.isClipperModelReadable(this.isReadableModel() ?? items[0].model)));\r\n };\r\n protected canAccessRS = (): boolean => {\r\n const items = this.getMultipleSelection();\r\n return this.clipperService.supportsRS() && this.parent()?.RS_enabled(items) === true;\r\n };\r\n\r\n ngOnInit(): void {\r\n if (this.selectionSource() === \"selection\") {\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 }\r\n\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 * Get a single selection\r\n * @returns the single selection or null\r\n */\r\n protected getSingleSelection(): ClipperDocumentInfo | null | undefined {\r\n if (this.item()) {\r\n return this.item();\r\n } else if (this.selection().length === 1) {\r\n return this.selection()[0];\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Get multiple selection\r\n * @returns : the multiple selection or array empty\r\n */\r\n protected getMultipleSelection(): ClipperDocumentInfo[] {\r\n if (this.item()) {\r\n const item = this.item();\r\n if (item) {\r\n return [item];\r\n }\r\n } else if (this.selection().length > 0) {\r\n return this.selection();\r\n }\r\n return [];\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 protected hasSingleSelection(): boolean {\r\n return this.item() !== null || this.selection().length === 1;\r\n }\r\n\r\n /** \r\n * Show and hide sub menus\r\n * @param trigger: the trigger to use or null to deselect\r\n */\r\n protected showSubMenu(trigger: MatMenuTrigger | null = null) {\r\n this.allMenuTriggers.forEach(menuTrigger => {\r\n const menu = menuTrigger();\r\n if (menu) {\r\n if (menu.menuOpen) {\r\n menu.closeMenu();\r\n this.resetSubMenu(menu);\r\n }\r\n }\r\n });\r\n trigger?.openMenu();\r\n }\r\n\r\n /**\r\n * Reset sub menu\r\n * @param trigger: the trigger to use\r\n */\r\n protected resetSubMenu(trigger: MatMenuTrigger) {\r\n this.renderer2.removeClass(trigger['_element'].nativeElement, 'cdk-focused');\r\n this.renderer2.removeClass(trigger['_element'].nativeElement, 'cdk-program-focused');\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 protected 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 protected setRead(value: boolean) {\r\n this.parent()?.setRead(value, this.item());\r\n }\r\n\r\n /**\r\n * Open a document\r\n * @param item : the item \r\n */\r\n protected open(item: ClipperDocumentInfo) {\r\n if (item.documentId) {\r\n this.parent()?.open(item.documentId);\r\n }\r\n }\r\n\r\n /**\r\n * Open document references\r\n * @param item : the item \r\n * @param mode: the mode\r\n */\r\n protected openReferences(item: ClipperDocumentInfo, mode: number) {\r\n if (item.documentId) {\r\n this.parent()?.openReferences(item.documentId, mode);\r\n }\r\n }\r\n\r\n}\r\n","@if (canDeselectAll()) {\r\n<button mat-menu-item (click)=\"parent().selection?.clear()\" [attr.aria-label]=\"'Deseleziona tutti'\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n} @else if (canManageBag()) {\r\n<button mat-menu-item (click)=\"parent().openBag()\" [attr.aria-label]=\"'Gestisci documenti di lavoro'\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n@if (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\" (mouseenter)=\"showSubMenu()\"\r\n (click)=\"open(getSingleSelection())\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n@if (canAddToWorkingDocuments()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"parent().addItemsToBag(getMultipleSelection())\" (mouseenter)=\"showSubMenu()\">\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'\" (mouseenter)=\"showSubMenu()\">\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'\" (mouseenter)=\"showSubMenu()\">\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 (canSendByEmail()) {\r\n<button mat-menu-item (click)=\"parent().sendItemsTo(getMultipleSelection())\"\r\n [attr.aria-label]=\"'Invia documento per email'\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (canAddToArchive()) {\r\n<button mat-menu-item (click)=\"parent().addToArchive(getMultipleSelection())\" [attr.aria-label]=\"'Archivia'\">\r\n <mat-icon>account_tree</mat-icon>Archivia\r\n</button>\r\n}\r\n@if (canSaveAsPdf()) {\r\n<button mat-menu-item (click)=\"parent().exportPdf(getSingleSelection())\" (mouseenter)=\"showSubMenu()\"\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 (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"parent().showLink(getSingleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n}\r\n@if (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Copia metadati negli appunti'\"\r\n (click)=\"parent().copyMetadataToClipboard(getSingleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>content_copy</mat-icon>Copia metadati\r\n</button>\r\n}\r\n@if (!isReference() && canOpen()) {\r\n<button mat-menu-item [matMenuTriggerFor]=\"linksMenu\" #linksMenuTrigger=\"matMenuTrigger\"\r\n (mouseenter)=\"showSubMenu(linksMenuTrigger)\" (mouseleave)=\"resetSubMenu(linksMenuTrigger)\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"openReferences(getSingleSelection(), 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if (!isReference() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"openReferences(getSingleSelection(), 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra giurisprudenza'\" (click)=\"openReferences(getSingleSelection(), 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra modifiche normative'\"\r\n (click)=\"openReferences(getSingleSelection(), 3)\">\r\n Modifiche\r\n </button>\r\n }\r\n</mat-menu>\r\n}\r\n@if (canAddToCalendar()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi al calendario'\"\r\n (click)=\"parent().addToCalendar(getSingleSelection())\">\r\n <mat-icon>alarm</mat-icon> Crea scadenza\r\n</button>\r\n}\r\n@if (canExportCalendar()) {\r\n@if(useSelections()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Importa in Oultook (iCalandar)'\" (click)=\"parent().exportResults(2)\">\r\n <mat-icon>mail_outline</mat-icon>Importa in Outlook (iCalendar)\r\n</button>\r\n} @else if (item()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Importa in Oultook (iCalandar)'\"\r\n (click)=\"parent().exportItems([item().documentId], null, 2)\">\r\n <mat-icon>mail_outline</mat-icon>Importa in Outlook (iCalendar)\r\n</button>\r\n}\r\n}\r\n@if (canSetAsUnread()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"setRead(false)\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n</button>\r\n}\r\n@if (canSetAsRead()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come già letto'\" (click)=\"setRead(true)\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>flag</mat-icon>Segna come già letto\r\n</button>\r\n}\r\n\r\n\r\n@if (isLawInForce() && canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Mostra report'\" (click)=\"parent().report(getSingleSelection())\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n\r\n@if (canUseAIAssistant() && hasSingleSelection()) {\r\n<mat-divider></mat-divider>\r\n<button mat-menu-item matTooltip=\"Assistente IA\" [attr.aria-label]=\"'Assistente IA'\"\r\n [matMenuTriggerFor]=\"aiAssistantMenu\" #aiAssistantMenuTrigger=\"matMenuTrigger\"\r\n (mouseenter)=\"showSubMenu(aiAssistantMenuTrigger)\" (mouseleave)=\"resetSubMenu(aiAssistantMenuTrigger)\">\r\n <mat-icon>borg</mat-icon>\r\n Assistente IA\r\n</button>\r\n<mat-menu #aiAssistantMenu=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Mi riguarda?'\" (click)=\"parent().AI_concernMe(getSingleSelection())\">\r\n Mi riguarda?\r\n </button>\r\n <button mat-menu-item [attr.aria-label]=\"'Di che si tratta?'\" (click)=\"parent().AI_explain(getSingleSelection())\">\r\n Di che si tratta?\r\n </button>\r\n</mat-menu>\r\n}\r\n\r\n@if (canAccessRS()) {\r\n<mat-divider></mat-divider>\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\" [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\"\r\n [matMenuTriggerFor]=\"rsMenu\" #rsMenuTrigger=\"matMenuTrigger\" (mouseenter)=\"showSubMenu(rsMenuTrigger)\"\r\n (mouseleave)=\"resetSubMenu(rsMenuTrigger)\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n</button>\r\n<mat-menu #rsMenu=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"parent().RS_newLaw(getMultipleSelection())\">\r\n Nuova legge\r\n </button>\r\n @if (canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova attività'\" (click)=\"parent().RS_newActivity(getSingleSelection())\">\r\n Nuova attività\r\n </button>\r\n }\r\n @if (canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\"\r\n (click)=\"parent().RS_usageReport(getSingleSelection())\">\r\n Report utilizzo norma\r\n </button>\r\n }\r\n</mat-menu>\r\n}","import { Breakpoints } from '@angular/cdk/layout';\r\nimport { AfterViewInit, ChangeDetectionStrategy, Component, OnDestroy, OnInit, inject, viewChild } 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, ClipperReferencesSearchParams, ClipperSearchFacetsResult, ClipperSearchFacetsSnapshot,\r\n ClipperSearchParams,\r\n ClipperUserInfo\r\n} from '@arsedizioni/ars-utils/clipper.common';\r\nimport { ApiResult, SelectableModel, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { finalize, takeUntil } from 'rxjs/operators';\r\nimport { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';\r\nimport { ClipperDocumentMenuComponent } from '../document-menu/document-menu.component';\r\nimport { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';\r\nimport { ClipperSearchResultItemComponent } from '../search-result-item/search-result-item.component';\r\n\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 readonly filterPane = viewChild.required<MatDrawer>('filterPane');\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 protected user: ClipperUserInfo | null = this.clipperService.loginInfo?.context ?? 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<ClipperDocumentInfo, 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: any) => {\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 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 const facets = this.facets();\r\n if (facets) {\r\n 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.changeDetector.detectChanges();\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 /**\r\n * Handle filter pane visibility\r\n */\r\n private handleFilterPaneVisibility() {\r\n const filterPane = this.filterPane();\r\n if (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 (filterPane.opened) {\r\n filterPane.close();\r\n }\r\n filterPane.mode = 'over';\r\n filterPane.disableClose = false;\r\n this.filterPaneHasBackdrop = true;\r\n } else {\r\n if (!this.hasFacets()) {\r\n filterPane.close();\r\n } else if (!filterPane.opened && !this.filterPaneClosed) {\r\n filterPane.open();\r\n } else if (filterPane.opened && this.filterPaneClosed) {\r\n filterPane.close();\r\n }\r\n filterPane.mode = 'side';\r\n 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\r\n\r\n /**\r\n * Prepare the 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 = SystemUtils.clone(this.filterParams) as ClipperSearchParams;\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 * Get e refrences search params form clipper search params\r\n * @param params : the clipper search params\r\n * @returns : the references search params\r\n */\r\n private toReferencesSearchParams(params: ClipperSearchParams): ClipperReferencesSearchParams {\r\n return {\r\n documentId: params.id,\r\n year: params.year,\r\n sector: params.sector,\r\n author: params.author,\r\n anchor: params.anchor,\r\n model: params.model?.toString() ?? null,\r\n mode: params.mode,\r\n excludeTextReferences: params.excludeTextReferences,\r\n excludeNotesReferences: params.excludeNotesReferences,\r\n returnModifierInfo: params.returnModifierInfo,\r\n useModifierInfo: params.useModifierInfo,\r\n count: 15,\r\n first: 0\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 if (searchParams) {\r\n this.clipperService.references(this.toReferencesSearchParams(searchParams))\r\n .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(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 const paginator = this.paginator();\r\n if (paginator) paginator.pageIndex = 0;\r\n }\r\n\r\n this.scroll(0);\r\n }\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() || !params) return;\r\n if (!this.snapshot.facets || this.snapshot.facets?.hasMoreFacets) {\r\n this.filterBusy.set(true);\r\n this.clipperService.referencesFacets(this.toReferencesSearchParams(params))\r\n .subscribe({\r\n next: (r: ApiResult<ClipperSearchFacetsResult>) => {\r\n if (r.success) {\r\n let hasFacets = (r.value.facets?.length ?? 0) > 0;\r\n if (r.value.facets) {\r\n const facets = this.facets();\r\n facets?.update(r.value.facets, r.value.interval);\r\n if (facets && this.snapshot) {\r\n hasFacets = facets.hasFacets();\r\n this.snapshot.facets = facets.save();\r\n this.snapshot.facets.hasTooManyResults = (this.snapshot?.total ?? 0) >= 1000;\r\n }\r\n }\r\n this.hasFacets.set(hasFacets);\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 /**\r\n* Return item state css class\r\n* @param item : the item to evaluate\r\n*/\r\n override getItemStateCssClass(item: ClipperDocumentInfo): string | null {\r\n if (item.isExpired) return 'expired-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 override getItemStateTooltip(item: ClipperDocumentInfo): string {\r\n if (item.isExpired) return 'Non più vigente';\r\n return '';\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 5px 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\" [matBadge]=\"selection?.all.length\" >\r\n <mat-icon>checklist</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" selectionSource=\"selection\" [useSelections]=\"true\" [isReadable]=\"false\"\r\n [isReference]=\"true\" [canUseAIAssistant]=\"user?.hasAIAssistant ?? false\" >\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>right_panel_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<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\" fxLayoutAlign=\"start center\" fxFill>\r\n <div class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>right_panel_close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\" style=\"padding: 0 5px;\">\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\" [isReadable]=\"false\"\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\" [canUseAIAssistant]=\"user?.hasAIAssistant ?? false\">\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 wrap\" fxLayoutGap=\"10px\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <!-- legend -->\r\n <div fxFlex.lt-md=\"100\" class=\"legend-container\">\r\n <div class=\"legend expired-bg \"></div>\r\n non più vigente\r\n </div>\r\n <div fxFlex.lt-md=\"100\" fxLayoutAlign=\"end\" [ngClass]=\"{'wide': filterPane?.opened}\">\r\n <div fxLayout=\"row\">\r\n <mat-paginator fxFlexAlign=\"center\" #paginator class=\"paginator\" [hidePageSize]=\"true\"\r\n [length]=\"snapshot?.total ?? 0\" [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\"\r\n (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n</mat-dialog-content>","import { NgStyle } from '@angular/common';\r\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnInit,\n inject,\n signal,\n output,\n viewChild\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\nimport { finalize } from 'rxjs';\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 readonly selection = viewChild.required<MatSelectionList>('selection');\r\n readonly done = output<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 .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(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 });\r\n }\r\n\r\n /**\r\n * Handle selection/deselection of an item\r\n */\r\n protected select() {\r\n const selection = this.selection();\n this.okDisabled.set(\r\n !selection || 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<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 [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</mat-dialog-content>\r\n<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-stroked-button [mat-dialog-close]=\"true\" color=\"primary\">Chiudi</button>\r\n </div>\r\n</mat-dialog-actions>","import { Clipboard } from '@angular/cdk/clipboard';\r\nimport { ChangeDetectionStrategy, 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\nimport { finalize } from 'rxjs';\r\n\r\n\r\n@Component({\r\n template: '<div></div>',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush\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((data: DialogResult) => {\r\n if (data.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 .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(r => {\r\n saveAs(r, (item.title1 ? item.title1 : id) + '.pdf');\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Export 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 * @param format: the export format: 1) list 2) deadlines\r\n */\r\n exportItems(\r\n documentIds: string[] | null | undefined,\r\n searchParams: ClipperSearchParams | null | undefined = null,\r\n format: number = 1) {\r\n if (!this.clipperService.loggedIn()) return;\r\n let model: ClipperExportDocumentsParams = { ids: documentIds ?? [], query: null, format: format };\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 .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(r => {\r\n if (r.type === 'application/json') {\r\n r.text().then(json => this.dialogService.error(JSON.parse(json).message));\r\n } else {\r\n if (format === 1) {\r\n saveAs(r, 'elenco.csv');\r\n } else {\r\n saveAs(r, 'scadenze.ics');\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Export a single deadline\r\n * @param item : the document to export\r\n */\r\n exportDeadline(item: ClipperDocumentInfo) {\r\n this.exportItems([item.documentId], null, 2);\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: '100%',\r\n });\r\n d.componentInstance.done\r\n .subscribe((data: ClipperSendDocumentsByEmailParams) => {\r\n data.ids = items?.map(n => n.documentId ?? n.id) ?? [];\r\n this.dialogService.busy('Invio in corso...');\r\n this.clipperService.sendTo(data)\r\n .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(r => {\r\n if (!r.success) {\r\n this.dialogService.error(r.message);\r\n } else {\r\n this.dialogService.toast('Invio completato con successo.');\r\n d.close();\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 .pipe(finalize(() => this.dialogService.clearBusy()))\r\n .subscribe(r => {\r\n saveAs(r, (title ? title : documentId) + '.html');\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: '1200px',\r\n width: '100%',\r\n height: '100%',\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: SelectableItem[] = [];\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 multipleSelection: false,\r\n mustSelect: false,\r\n okCaption: 'SELEZIONA',\r\n items: items,\r\n total: items?.length ?? 0,\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 ////\r\n // AI Assistant\r\n ////\r\n /**\r\n * AI: concern me service\r\n * @param document: the document\r\n */\r\n AI_concernMe(document: ClipperDocumentInfo | null) {\r\n if (!document) return;\r\n this.broadcastService.sendMessage(ClipperMessages.AI_CONCERN_ME, document);\r\n }\r\n\r\n /**\r\n * AI: explain service\r\n * @param document: the document\r\n */\r\n AI_explain(document: ClipperDocumentInfo | null) {\r\n if (!document) return;\r\n this.broadcastService.sendMessage(ClipperMessages.AI_EXPLAIN, document);\r\n }\r\n\r\n\r\n ////\r\n // Registro e scadenzario\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[] | null) {\r\n if (!this.clipperService.supportsRS() || !documents) 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 | null) {\r\n if (!this.clipperService.supportsRS() || !document) 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 | null) {\r\n if (!this.clipperService.supportsRS() || !document) return;\r\n this.broadcastService.sendMessage(ClipperMessages.INTEROP_RS_USAGE_REPORT, document);\r\n }\r\n\r\n\r\n}\r\n","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n OnDestroy,\r\n OnInit,\r\n Renderer2,\r\n inject,\r\n signal,\r\n output,\r\n viewChild\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 ClipperUserInfo\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 } 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 readonly relevantsPane = viewChild.required<MatDrawer>('relevantsPane');\r\n readonly closing = output();\r\n readonly opening = output<string>();\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 lastAugmentedQuery?: string[] | 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 protected user: ClipperUserInfo | null = this.clipperService.loginInfo?.context ?? null;\r\n\r\n constructor() {\r\n super();\r\n }\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 \"&theme=\" +\r\n this.dialogData.theme +\r\n \"&id=\" +\r\n this.dialogData.id\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 }\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\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 * 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 const relevantsPane = this.relevantsPane();\r\n if (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 (relevantsPane.opened) {\r\n relevantsPane.close();\r\n }\r\n relevantsPane.mode = 'over';\r\n relevantsPane.disableClose = false;\r\n this.relevantsPaneHasBackdrop = true;\r\n } else {\r\n if (!relevantsPane.opened && !this.relevantsPaneClosed && this.hasRelevants()) {\r\n relevantsPane.open();\r\n } else if (relevantsPane.opened && this.relevantsPaneClosed) {\r\n relevantsPane.close();\r\n }\r\n relevantsPane.mode = 'side';\r\n 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 query = decodeURIComponent(encodeURIComponent(query));\r\n } catch {\r\n }\r\n\r\n const queryParts = query.split('__TERM__');\r\n if (queryParts.length > 0) {\r\n this.lastQuery = queryParts[0];\r\n if (queryParts.length > 1) {\r\n this.lastAugmentedQuery = [];\r\n for (var i = 1; i < queryParts.length; i++) {\r\n this.lastAugmentedQuery.push(queryParts[i]);\r\n }\r\n }\r\n }\r\n\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 this.clipperService.preRender().subscribe(() => {\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 /**\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 this.changeDetector.markForCheck();\r\n }\r\n });\r\n\r\n // Notify navigation has completed\r\n this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_NAVIGATED, {\r\n document: SystemUtils.clone(this.lastDocument),\r\n });\r\n\r\n this.busy.set(false);\r\n\r\n this.changeDetector.markForCheck();\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/?theme=\" + this.dialogData.theme + \"&id=\" + item.documentId,\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 const query = this.lastAugmentedQuery.length > 0\r\n ? this.lastAugmentedQuery.join(\"__TERM__\")\r\n : this.lastQuery;\r\n if (\r\n !query ||\r\n query.length === 0 ||\r\n query === ' ') {\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 = query;\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 this.changeDetector.markForCheck();\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: '100%',\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: '100%',\r\n height: '100%'\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\n r.value.replace(/\\n/g, '<br>\\r\\n'),\r\n \"Commento\",\r\n \"Chiudi\",\r\n 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(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.baseService,\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: '1200px',\r\n width: '100%',\r\n height: '100%',\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=\"title 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\" [canUseAIAssistant]=\"user?.hasAIAssistant ?? false\">\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>right_panel_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<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\" 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>right_panel_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 @if((lastAugmentedQuery?.length ?? 0) > 0) {\r\n + <span class='word-hit-ai' [matTooltip]=\"'Assistente IA ha considerato anche: ' + lastAugmentedQuery?.join(', ')\"><mat-icon style=\"width:14px; height:14px; font-size:16px\">borg</mat-icon> Assistente IA</span>\r\n }\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</mat-dialog-content>","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: '100%',\r\n height: '100%'\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 { BreakpointObserver } from '@angular/cdk/layout';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component, OnDestroy, inject,\r\n signal,\r\n viewChild\r\n} from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { ClipperDocumentInfo, ClipperMessages, ClipperModel, 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 readonly paginator = viewChild<MatPaginator>('paginator');\r\n readonly facets = viewChild<ClipperSearchFacetsComponent>('facets');\r\n readonly calendar = viewChild<ClipperSearchCalendarComponent>('calendar');\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<ClipperDocumentInfo, 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<ClipperSort>[] = [];\r\n protected sortMode: NameValueItem<ClipperSort> | null = null;\r\n protected scrollPos: number = 0;\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 hasRegions = (): boolean => {\r\n return (this.filterParams.sectors?.filter(n => n.value === 'LR').length ?? 0) > 0;\r\n };\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) {\r\n n.expiringDescription = parts[2];\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 } 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.GiurisprudenzaRecente &&\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 }\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, 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 result list to prepare\r\n */\r\n prepareResults(data: ClipperSearchResult) {\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 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 * @param format: the export format: 1) list, 2) deadlines\r\n */\r\n exportResults(format: number = 1) {\r\n if (this.snapshot?.total > 0 || this.hasAnySelection()) {\r\n this.exportItems(this.getSeletectIds(), this.filterParams, format);\r\n }\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 /**\r\n * Set read flag\r\n * @param value: the flag value\r\n * @param item: the item to set or null to use current selection\r\n */\r\n setRead(value: boolean, item: ClipperDocumentInfo | null = 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 let changed = 0;\r\n if (item) {\r\n if (item.isRead !== value) {\r\n item.isRead = value;\r\n this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_READ, { document: item, value: value });\r\n changed++;\r\n }\r\n } else if (this.hasAnySelection()) {\r\n this.selection?.all?.forEach(n => {\r\n if (n.isRead !== value) {\r\n n.isRead = value;\r\n this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_READ, { document: n, value: value });\r\n changed++;\r\n }\r\n })\r\n }\r\n\r\n // Update dashboard\r\n if (changed > 0) {\r\n this.clipperService.updateUnreadItems(\r\n ClipperUtils.getClipperModuleFromModel(item),\r\n item.model,\r\n value ? -1 : 1);\r\n this.changeDetector.markForCheck();\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) 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.baseService,\r\n this.clipperService,\r\n documentId,\r\n query ?? this.filterParams.expandTextQueryUsingAI\r\n ? (this.filterParams.augmentedText ?? this.filterParams.text)\r\n : 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 storage : the storage to use. Default si session storage.\r\n */\r\n save(id: string, storage: Storage = sessionStorage) {\r\n storage.setItem(\r\n id,\r\n JSON.stringify({\r\n paginator: {\r\n index: 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: this.scrollPos,\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 * @param storage : the storage to use. Default si session storage.\r\n */\r\n restore(id: string, storage: Storage = sessionStorage) {\r\n const value = storage.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 const modules = SystemUtils.clone(this.filterParams.modules);\r\n const sectors = SystemUtils.clone(this.filterParams.sectors);\r\n const authors = SystemUtils.clone(this.filterParams.authors);\r\n const tags = SystemUtils.clone(this.filterParams.tags);\r\n const topics = SystemUtils.clone(this.filterParams.topics);\r\n this.filterParams.modules = modules;\r\n this.filterParams.sectors = null;\r\n this.filterParams.authors = null;\r\n this.filterParams.tags = null;\r\n this.filterParams.topics = null;\r\n this.snapshot = data.data;\r\n this.sortMode = data.sort.mode;\r\n this.sortOptions = data.sort.options;\r\n setTimeout(() => {\r\n this.filterParams.sectors = sectors;\r\n this.filterParams.authors = authors;\r\n this.filterParams.tags = tags;\r\n this.filterParams.topics = topics;\r\n const facets = this.facets();\r\n if (facets && data.facets) {\r\n facets.restore(data.facets);\r\n this.hasFacets.set(data.facets.hasFacets === true ? true : false);\r\n }\r\n const paginator = this.paginator();\r\n if (paginator && data.paginator) {\r\n paginator.pageIndex = data.paginator.index;\r\n paginator.pageSize = data.paginator.size;\r\n paginator.length = data.paginator.total;\r\n }\r\n this.scroll(data.scroll ?? 0);\r\n this.broadcastService.sendMessage(ClipperMessages.COMMAND_SEARCH_RESTORED, data.filterParams)\r\n this.changeDetector.detectChanges();\r\n }, 750);\r\n\r\n }\r\n }\r\n }\r\n}\r\n","/*\r\n * Public API Surface of ars-utils\r\n */\r\n\r\n//export * 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","i6","i4","i8","i10","i11","i1","FlexModule","takeUntil","i7","finalize"],"mappings":"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"}
|