Compare commits

..

No commits in common. "main" and "prod@2025-11-26.a" have entirely different histories.

3 changed files with 324 additions and 237 deletions

View File

@ -1,108 +1,139 @@
@let vm = (model$ | async)!; @let vm = (model$ | async)!;
<div class="bg-surface-0 dark:bg-surface-950 p-6 md:p-12 lg:p-15 flex flex-col gap-8"> <div
<div class="flex flex-col md:flex-row justify-between items-center md:items-end gap-4 md:gap-6"> class="bg-surface-0 dark:bg-surface-950 p-6 md:p-12 lg:p-15 flex flex-col gap-8"
>
<div
class="flex flex-col md:flex-row justify-between items-center md:items-end gap-4 md:gap-6"
>
<div> <div>
<img src="assets/images/MUSA/logo.png" <img
alt="logo-consorzio-musa" src="assets/images/MUSA/logo.png"
class="block mx-auto" alt="logo-consorzio-musa"
style="height: 50px" /> class="block mx-auto"
style="height: 50px"
/>
</div> </div>
<div class="flex-1 flex flex-col text-center md:text-left"> <div class="flex-1 flex flex-col text-center md:text-left">
<h1 class="text-surface-900 dark:text-surface-0 text-2xl font-semibold leading-tight"> <h1
class="text-surface-900 dark:text-surface-0 text-2xl font-semibold leading-tight"
>
Consorzio Mu.Sa. Consorzio Mu.Sa.
</h1> </h1>
<h2 class="text-surface-500 dark:text-surface-200 text-xl font-normal leading-tight"> <h2
class="text-surface-500 dark:text-surface-200 text-xl font-normal leading-tight"
>
Cerca strutture convenzionate Cerca strutture convenzionate
</h2> </h2>
</div> </div>
</div> </div>
<p-divider class="w-full my-0!"></p-divider> <p-divider class="w-full my-0!"></p-divider>
<form [formGroup]="cercaStruttureForm" <form [formGroup]="cercaStruttureForm" (ngSubmit)="getStrutture()">
(ngSubmit)="getStrutture()">
<div class="flex flex-wrap gap-8 md:gap-6 items-start"> <div class="flex flex-wrap gap-8 md:gap-6 items-start">
<div <div
class="flex-3 bg-surface-0 dark:bg-surface-950 flex flex-col justify-start items-start gap-8 md:gap-12 w-full"> class="flex-3 bg-surface-0 dark:bg-surface-950 flex flex-col justify-start items-start gap-8 md:gap-12 w-full"
>
<div class="self-stretch flex flex-col justify-start items-start gap-6"> <div class="self-stretch flex flex-col justify-start items-start gap-6">
<div class="self-stretch flex flex-col justify-start items-start gap-6"> <div
class="self-stretch flex flex-col justify-start items-start gap-6"
>
<div <div
class="self-stretch justify-start text-surface-900 dark:text-surface-0 text-lg md:text-xl font-semibold leading-tight"> class="self-stretch justify-start text-surface-900 dark:text-surface-0 text-lg md:text-xl font-semibold leading-tight"
>
Strutture Convenzionate Strutture Convenzionate
</div> </div>
<div class="self-stretch flex flex-col justify-start items-start gap-4"> <div
<div class="self-stretch flex flex-col justify-start items-start gap-2"> class="self-stretch flex flex-col justify-start items-start gap-4"
<div id="tipoStruttura" >
class="self-stretch justify-start text-surface-900 dark:text-surface-0 text-base font-normal leading-tight"> <div
class="self-stretch flex flex-col justify-start items-start gap-2"
>
<div
id="tipoStruttura"
class="self-stretch justify-start text-surface-900 dark:text-surface-0 text-base font-normal leading-tight"
>
Tipologia struttura Tipologia struttura
</div> </div>
<p-select [options]="vm.tipologieStrutture" <p-select
class="flex-auto lg:flex-1 lg:mt-0 w-full mr-0 lg:mr-1 text-surface-900 dark:text-surface-0" [options]="vm.tipologieStrutture"
name="tiplogiaStruttura" class="flex-auto lg:flex-1 lg:mt-0 w-full mr-0 lg:mr-1 text-surface-900 dark:text-surface-0"
appendTo="body" name="tiplogiaStruttura"
formControlName="tipologiaStruttura" appendTo="body"
placeholder="Seleziona il tipo struttura" formControlName="tipologiaStruttura"
showClear="true" placeholder="Seleziona il tipo struttura"
optionLabel="descrizione" showClear="true"
optionValue="codice" optionLabel="descrizione"
ariaLabelledBy="tipoStruttura" optionValue="codice"
emptyFilterMessage="Nessuna tipologia struttura trovata" ariaLabelledBy="tipoStruttura"
emptyMessage="Nessuna tipologia struttura trovata" emptyFilterMessage="Nessuna tipologia struttura trovata"
[loading]="vm.tipologieStruttureAreLoading" emptyMessage="Nessuna tipologia struttura trovata"
[filter]="true"></p-select> [loading]="vm.tipologieStruttureAreLoading"
[filter]="true"
></p-select>
</div> </div>
</div> </div>
<div class="self-stretch flex flex-col md:flex-row justify-start items-start gap-4"> <div
<div class="flex-1 flex flex-col justify-start items-start gap-2 w-full hidden"> class="self-stretch flex flex-col md:flex-row justify-start items-start gap-4"
<div id="stato" >
class="self-stretch justify-start text-surface-900 dark:text-surface-0 text-base font-normal leading-tight"> <div
Stato<small class="text-red-600">* class="flex-1 flex flex-col justify-start items-start gap-2 w-full"
>
<div
id="stato"
class="self-stretch justify-start text-surface-900 dark:text-surface-0 text-base font-normal leading-tight"
>
Stato<small class="text-red-600"
>*
@if ( @if (
cercaStruttureForm.controls.stato.errors?.['required'] && cercaStruttureForm.controls.stato.errors?.['required'] &&
vm.cercaStruttureFormSubmitted vm.cercaStruttureFormSubmitted
) { ) {
Stato obbligatorio Stato obbligatorio
} }
</small> </small>
</div> </div>
<p-select [options]="vm.stati" <p-select
class="flex-auto lg:flex-1 lg:mt-0 w-full mr-0 lg:mr-1 text-surface-900 dark:text-surface-0" [options]="vm.stati"
[ngClass]="{ class="flex-auto lg:flex-1 lg:mt-0 w-full mr-0 lg:mr-1 text-surface-900 dark:text-surface-0"
[ngClass]="{
'ng-invalid ng-dirty': 'ng-invalid ng-dirty':
cercaStruttureForm.controls.stato.errors?.['required'] && cercaStruttureForm.controls.stato.errors?.['required'] &&
vm.cercaStruttureFormSubmitted, vm.cercaStruttureFormSubmitted,
}" }"
name="stato" name="stato"
appendTo="body" appendTo="body"
formControlName="stato" formControlName="stato"
placeholder="Seleziona lo stato" placeholder="Seleziona lo stato"
showClear="true" showClear="true"
optionLabel="stato" optionLabel="stato"
ariaLabelledBy="stato" ariaLabelledBy="stato"
emptyFilterMessage="Nessuno Stato trovato" emptyFilterMessage="Nessuno Stato trovato"
emptyMessage="Nessuno Stato trovato" emptyMessage="Nessuno Stato trovato"
[loading]="vm.statiAreLoading" [loading]="vm.statiAreLoading"
[filter]="true"> [filter]="true"
<ng-template #selectedItem >
let-selectedOption> <ng-template #selectedItem let-selectedOption>
<div class="flex items-center gap-2" <div class="flex items-center gap-2" *ngIf="selectedOption">
*ngIf="selectedOption"> <img
<img src="./assets/images/flags/{{ src="./assets/images/flags/{{
selectedOption.codiceStato | lowercase selectedOption.codiceStato | lowercase
}}.png" }}.png"
style="width: 18px; vertical-align: middle" style="width: 18px; vertical-align: middle"
onerror="this.style.display='none'" /> onerror="this.style.display='none'"
/>
<div>{{ selectedOption.stato }}</div> <div>{{ selectedOption.stato }}</div>
</div> </div>
</ng-template> </ng-template>
<ng-template let-stato <ng-template let-stato #item>
#item>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<img src="./assets/images/flags/{{ <img
src="./assets/images/flags/{{
stato.codiceStato | lowercase stato.codiceStato | lowercase
}}.png" }}.png"
style="width: 18px; vertical-align: middle" style="width: 18px; vertical-align: middle"
onerror="this.style.display='none'" /> onerror="this.style.display='none'"
/>
<div>{{ stato.stato }}</div> <div>{{ stato.stato }}</div>
</div> </div>
</ng-template> </ng-template>
@ -200,100 +231,127 @@
</ng-template> </ng-template>
</p-autoComplete> --> </p-autoComplete> -->
</div> </div>
<div *ngIf=" <div
*ngIf="
cercaStruttureForm.controls.stato.value && cercaStruttureForm.controls.stato.value &&
cercaStruttureForm.controls.stato.value.codiceStato === 'ITA' cercaStruttureForm.controls.stato.value.codiceStato === 'ITA'
" "
class="flex-1 flex flex-col justify-start items-start gap-2 w-full"> class="flex-1 flex flex-col justify-start items-start gap-2 w-full"
<div id="regione" >
class="self-stretch justify-start text-surface-900 dark:text-surface-0 text-base font-normal leading-tight"> <div
Regione<small class="text-red-600">* id="regione"
class="self-stretch justify-start text-surface-900 dark:text-surface-0 text-base font-normal leading-tight"
>
Regione<small class="text-red-600"
>*
@if ( @if (
cercaStruttureForm.controls.regione.errors?.[ cercaStruttureForm.controls.regione.errors?.[
'required' 'required'
] && vm.cercaStruttureFormSubmitted ] && vm.cercaStruttureFormSubmitted
) { ) {
Regione obbligatorio Regione obbligatorio
} }
</small> </small>
</div> </div>
<p-select [options]="vm.regioni" <p-select
class="flex-auto lg:flex-1 lg:mt-0 w-full mr-0 lg:mr-1 text-surface-900 dark:text-surface-0" [options]="vm.regioni"
[ngClass]="{ class="flex-auto lg:flex-1 lg:mt-0 w-full mr-0 lg:mr-1 text-surface-900 dark:text-surface-0"
[ngClass]="{
'ng-dirty ng-invalid': 'ng-dirty ng-invalid':
cercaStruttureForm.controls.regione.errors?.[ cercaStruttureForm.controls.regione.errors?.[
'required' 'required'
] && vm.cercaStruttureFormSubmitted, ] && vm.cercaStruttureFormSubmitted,
}" }"
name="regione" name="regione"
appendTo="body" appendTo="body"
formControlName="regione" formControlName="regione"
placeholder="Seleziona la regione" placeholder="Seleziona la regione"
showClear="true" showClear="true"
optionLabel="regione" optionLabel="regione"
ariaLabelledBy="regione" ariaLabelledBy="regione"
emptyFilterMessage="Nessuna Regione trovata" emptyFilterMessage="Nessuna Regione trovata"
emptyMessage="Nessuna Regione trovata" emptyMessage="Nessuna Regione trovata"
[loading]="vm.regioniAreLoading" [loading]="vm.regioniAreLoading"
[filter]="true" /> [filter]="true"
/>
</div> </div>
<div *ngIf="cercaStruttureForm.controls.regione.value" <div
class="flex-1 flex flex-col justify-start items-start gap-2 w-full"> *ngIf="cercaStruttureForm.controls.regione.value"
<div id="provincia" class="flex-1 flex flex-col justify-start items-start gap-2 w-full"
class="self-stretch justify-start text-surface-900 dark:text-surface-0 text-base font-normal leading-tight"> >
<div
id="provincia"
class="self-stretch justify-start text-surface-900 dark:text-surface-0 text-base font-normal leading-tight"
>
Provincia Provincia
</div> </div>
<p-select [options]="vm.province" <p-select
class="flex-auto lg:flex-1 lg:mt-0 w-full mr-0 lg:mr-1 text-surface-900 dark:text-surface-0" [options]="vm.province"
name="provincia" class="flex-auto lg:flex-1 lg:mt-0 w-full mr-0 lg:mr-1 text-surface-900 dark:text-surface-0"
appendTo="body" name="provincia"
formControlName="provincia" appendTo="body"
placeholder="Seleziona la provincia" formControlName="provincia"
showClear="true" placeholder="Seleziona la provincia"
optionLabel="provincia" showClear="true"
ariaLabelledBy="provincia" optionLabel="provincia"
emptyFilterMessage="Nessuna Provincia trovata" ariaLabelledBy="provincia"
emptyMessage="Nessuna Provincia trovata" emptyFilterMessage="Nessuna Provincia trovata"
[loading]="vm.provinceAreLoading" emptyMessage="Nessuna Provincia trovata"
[filter]="true"> [loading]="vm.provinceAreLoading"
[filter]="true"
>
</p-select> </p-select>
</div> </div>
<div *ngIf="cercaStruttureForm.controls.provincia.value" <div
class="flex-1 flex flex-col justify-start items-start gap-2 w-full"> *ngIf="cercaStruttureForm.controls.provincia.value"
<div id="citta" class="flex-1 flex flex-col justify-start items-start gap-2 w-full"
class="self-stretch justify-start text-surface-900 dark:text-surface-0 text-base font-normal leading-tight"> >
<div
id="citta"
class="self-stretch justify-start text-surface-900 dark:text-surface-0 text-base font-normal leading-tight"
>
Città Città
</div> </div>
<p-select [options]="vm.citta" <p-select
class="flex-auto lg:flex-1 lg:mt-0 w-full mr-0 lg:mr-1 text-surface-900 dark:text-surface-0" [options]="vm.citta"
name="citta" class="flex-auto lg:flex-1 lg:mt-0 w-full mr-0 lg:mr-1 text-surface-900 dark:text-surface-0"
appendTo="body" name="citta"
formControlName="citta" appendTo="body"
placeholder="Seleziona la città" formControlName="citta"
showClear="true" placeholder="Seleziona la città"
optionLabel="comune" showClear="true"
ariaLabelledBy="citta" optionLabel="comune"
emptyFilterMessage="Nessuna Città trovata" ariaLabelledBy="citta"
emptyMessage="Nessuna Città trovata" emptyFilterMessage="Nessuna Città trovata"
[loading]="vm.cittaAreLoading" emptyMessage="Nessuna Città trovata"
[filter]="true"> [loading]="vm.cittaAreLoading"
[filter]="true"
>
</p-select> </p-select>
</div> </div>
</div> </div>
</div> </div>
<div class="self-stretch flex flex-col justify-start items-start gap-6"> <div
<div class="flex-1 flex flex-col justify-start items-start gap-2 w-full"> class="self-stretch flex flex-col justify-start items-start gap-6"
<div id="indirizzo" >
class="self-stretch justify-start text-surface-900 dark:text-surface-0 text-base font-normal leading-tight"> <div
class="flex-1 flex flex-col justify-start items-start gap-2 w-full"
>
<div
id="indirizzo"
class="self-stretch justify-start text-surface-900 dark:text-surface-0 text-base font-normal leading-tight"
>
Indirizzo Indirizzo
</div> </div>
<input type="text" <input
class="flex-auto lg:flex-1 lg:mt-0 w-full mr-0 lg:mr-1 text-surface-900 dark:text-surface-0" type="text"
formControlName="indirizzo" class="flex-auto lg:flex-1 lg:mt-0 w-full mr-0 lg:mr-1 text-surface-900 dark:text-surface-0"
pInputText formControlName="indirizzo"
aria-labelledby="indirizzo" pInputText
placeholder="Inserisci l'indirizzo" /> aria-labelledby="indirizzo"
placeholder="Inserisci l'indirizzo"
/>
</div> </div>
</div> </div>
<!-- <div class="self-stretch flex flex-col md:flex-row justify-end items-center gap-4"> <!-- <div class="self-stretch flex flex-col md:flex-row justify-end items-center gap-4">
@ -394,124 +452,140 @@
</div> </div>
</div> --> </div> -->
<div class="self-stretch flex flex-col md:flex-row justify-end items-center gap-4"> <div
<button pButton class="self-stretch flex flex-col md:flex-row justify-end items-center gap-4"
severity="secondary" >
class="w-full md:w-auto" <button
(click)="cercaStruttureForm.reset()" pButton
[outlined]="true"> severity="secondary"
class="w-full md:w-auto"
(click)="cercaStruttureForm.reset()"
[outlined]="true"
>
<span pButtonLabel>Annulla filtri</span> <span pButtonLabel>Annulla filtri</span>
</button> </button>
<button pButton <button
type="submit" pButton
[disabled]="vm.isSearching" type="submit"
[loading]="vm.isSearching" [disabled]="vm.isSearching"
icon="pi pi-search" [loading]="vm.isSearching"
[label]=" icon="pi pi-search"
[label]="
vm.isSearching ? 'Ricerca in corso...' : 'Cerca strutture' vm.isSearching ? 'Ricerca in corso...' : 'Cerca strutture'
" "
severity="primary" severity="primary"
class="w-full md:w-auto"></button> class="w-full md:w-auto"
></button>
</div> </div>
</div> </div>
</div> </div>
<div <div
class="flex-auto lg:flex-2 bg-surface-50 dark:bg-surface-900 rounded-2xl border-2 border-dashed border-surface-200 dark:border-surface-700 h-[343px] w-full lg:1/2"> class="flex-auto lg:flex-2 bg-surface-50 dark:bg-surface-900 rounded-2xl border-2 border-dashed border-surface-200 dark:border-surface-700 h-[343px] w-full lg:1/2"
<google-map #gmap >
height="100%" <google-map #gmap height="100%" width="100%" [options]="options">
width="100%" <map-marker
[options]="options"> #marker="mapMarker"
<map-marker #marker="mapMarker" *ngFor="let markerOption of markerOptions; let i = index"
*ngFor="let markerOption of markerOptions; let i = index" [options]="markerOption"
[options]="markerOption" (mapClick)="openInfoWindow(marker, i)"
(mapClick)="openInfoWindow(marker, i)"></map-marker> ></map-marker>
<map-info-window></map-info-window> <map-info-window></map-info-window>
</google-map> </google-map>
</div> </div>
</div> </div>
</form> </form>
<p-table #struttureTable <p-table
*ngIf="vm.strutture !== undefined" #struttureTable
[totalRecords]="vm.strutture.length" *ngIf="vm.strutture !== undefined"
dataKey="id" [totalRecords]="vm.strutture.length"
[loading]="vm.struttureAreLoading" dataKey="id"
[value]="vm.strutture" [loading]="vm.struttureAreLoading"
[columns]="cols" [value]="vm.strutture"
[showCurrentPageReport]="!vm.struttureAreLoading" [columns]="cols"
responsiveLayout="scroll" [showCurrentPageReport]="!vm.struttureAreLoading"
currentPageReportTemplate="Strutture {first} - {last} di {totalRecords}" responsiveLayout="scroll"
[paginator]="true" currentPageReportTemplate="Strutture {first} - {last} di {totalRecords}"
[rows]="10" [paginator]="true"
[autoLayout]="false" [rows]="10"
responsiveLayout="stack" [autoLayout]="false"
scrollHeight="400px" responsiveLayout="stack"
[rowsPerPageOptions]="[10, 50, 100]" scrollHeight="400px"
[globalFilterFields]="[ [rowsPerPageOptions]="[10, 50, 100]"
[globalFilterFields]="[
'struttura.nome', 'struttura.nome',
'struttura.struttureTipiStrutture', 'struttura.struttureTipiStrutture',
]"> ]"
>
<ng-template #caption> <ng-template #caption>
<div class="flex"> <div class="flex">
<p-iconfield iconPosition="left" <p-iconfield iconPosition="left" class="ml-auto">
class="ml-auto">
<p-inputicon> <p-inputicon>
<i class="pi pi-search"></i> <i class="pi pi-search"></i>
</p-inputicon> </p-inputicon>
<input pInputText <input
type="text" pInputText
aria-label="Filtra strutture" type="text"
(input)="applyFilterGlobal($event, 'contains')" aria-label="Filtra strutture"
placeholder="Filtra strutture" /> (input)="applyFilterGlobal($event, 'contains')"
placeholder="Filtra strutture"
/>
</p-iconfield> </p-iconfield>
</div> </div>
</ng-template> </ng-template>
<ng-template pTemplate="header" <ng-template pTemplate="header" let-columns>
let-columns>
<tr> <tr>
<th *ngFor="let col of cols" <th
pResizableColumn *ngFor="let col of cols"
[pSortableColumn]="col.sortField ?? ''" pResizableColumn
class="p-table-scrollable-header"> [pSortableColumn]="col.sortField ?? ''"
class="p-table-scrollable-header"
>
<div style="display: flex; align-items: center; text-wrap: nowrap"> <div style="display: flex; align-items: center; text-wrap: nowrap">
<div> <div>
{{ col.header }} {{ col.header }}
<p-sortIcon *ngIf="col.sortField" <p-sortIcon
[field]="col.sortField"></p-sortIcon> *ngIf="col.sortField"
[field]="col.sortField"
></p-sortIcon>
</div> </div>
</div> </div>
</th> </th>
</tr> </tr>
</ng-template> </ng-template>
<ng-template pTemplate="body" <ng-template pTemplate="body" let-row let-rowIndex="rowIndex">
let-row
let-rowIndex="rowIndex">
<tr> <tr>
<ng-container *ngFor="let col of cols" <ng-container *ngFor="let col of cols" [ngSwitch]="col.field">
[ngSwitch]="col.field">
<td *ngSwitchCase="'struttura.struttureTipiStrutture'"> <td *ngSwitchCase="'struttura.struttureTipiStrutture'">
<div> <div>
<ng-container *ngFor=" <ng-container
*ngFor="
let item of row.struttura.struttureTipiStrutture.split(',') let item of row.struttura.struttureTipiStrutture.split(',')
"> "
<span class="font-light">{{ item.trim() }}</span><br /> >
<span class="font-light">{{ item.trim() }}</span
><br />
</ng-container> </ng-container>
</div> </div>
</td> </td>
<td *ngSwitchCase="'struttura.nome'"> <td *ngSwitchCase="'struttura.nome'">
<div> <div>
<p-rating *ngIf="row.struttura.stelline.length" <p-rating
[(ngModel)]="row.struttura.stelline.length" *ngIf="row.struttura.stelline.length"
[readonly]="true" /> [(ngModel)]="row.struttura.stelline.length"
[readonly]="true"
/>
<p> <p>
<b>{{ row.struttura.nome }}</b> <b>{{ row.struttura.nome }}</b>
</p> </p>
</div> </div>
<div *ngIf="row.struttura.sitoWeb" <div *ngIf="row.struttura.sitoWeb" class="mt-4 ont-light">
class="mt-4 ont-light"> <a
<a class="cursor-pointer hover:underline text-primary-700" class="cursor-pointer hover:underline text-primary-700"
(click)="externalLink(row.struttura.sitoWeb)">Sito Web</a> (click)="externalLink(row.struttura.sitoWeb)"
>Sito Web</a
>
</div> </div>
</td> </td>
<td *ngSwitchCase="'indirizzo'"> <td *ngSwitchCase="'indirizzo'">
@ -519,46 +593,56 @@
<p> <p>
{{ row.struttura.indirizzo {{ row.struttura.indirizzo
}}{{ }}{{
row.struttura.numeroCivico row.struttura.numeroCivico
? ', ' + row.struttura.numeroCivico ? ', ' + row.struttura.numeroCivico
: '' : ''
}} }}
</p> </p>
<p> <p>
{{ row.struttura.cap }} {{ row.struttura.cap }}
{{ {{
row.struttura.codiceLuogo row.struttura.codiceLuogo
? row.struttura.codiceLuogo.comune + ? row.struttura.codiceLuogo.comune +
' (' + ' (' +
row.struttura.codiceLuogo.siglaProvincia + row.struttura.codiceLuogo.siglaProvincia +
')' ')'
: '' : ''
}} }}
</p> </p>
<div class="text-sm" <div class="text-sm" *ngIf="row.struttura.cupPubblico">
*ngIf="row.struttura.cupPubblico">
CUP Pubblico: CUP Pubblico:
<a class="cursor-pointer hover:underline text-primary-700" <a
href="tel:{{ row.struttura.cupPubblico }}">{{ row.struttura.cupPubblico }}</a> class="cursor-pointer hover:underline text-primary-700"
href="tel:{{ row.struttura.cupPubblico }}"
>{{ row.struttura.cupPubblico }}</a
>
</div> </div>
<div *ngIf="row.struttura.cupPrivato" <div *ngIf="row.struttura.cupPrivato" class="text-sm">
class="text-sm">
CUP Privato: CUP Privato:
<a class="cursor-pointer hover:underline text-primary-700" <a
href="tel:{{ row.struttura.cupPrivato }}">{{ row.struttura.cupPrivato }}</a> class="cursor-pointer hover:underline text-primary-700"
href="tel:{{ row.struttura.cupPrivato }}"
>{{ row.struttura.cupPrivato }}</a
>
</div> </div>
<ng-container *ngIf="!row.struttura.cupPubblico && !row.struttura.cupPrivato"> <ng-container
<div *ngIf="row.struttura.telefono1" *ngIf="!row.struttura.cupPubblico && !row.struttura.cupPrivato"
class="text-sm"> >
<div *ngIf="row.struttura.telefono1" class="text-sm">
tel: tel:
<a class="cursor-pointer hover:underline text-primary-700" <a
href="tel:{{ row.struttura.telefono1 }}">{{ row.struttura.telefono1 }}</a> class="cursor-pointer hover:underline text-primary-700"
href="tel:{{ row.struttura.telefono1 }}"
>{{ row.struttura.telefono1 }}</a
>
</div> </div>
<div *ngIf="row.struttura.telefono2" <div *ngIf="row.struttura.telefono2" class="text-sm">
class="text-sm">
tel: tel:
<a class="cursor-pointer hover:underline text-primary-700" <a
href="tel:{{ row.struttura.telefono2 }}">{{ row.struttura.telefono2 }}</a> class="cursor-pointer hover:underline text-primary-700"
href="tel:{{ row.struttura.telefono2 }}"
>{{ row.struttura.telefono2 }}</a
>
</div> </div>
</ng-container> </ng-container>
</span> </span>
@ -566,12 +650,14 @@
<td *ngSwitchCase="'posizione'"> <td *ngSwitchCase="'posizione'">
<div class="flex align-items-center"> <div class="flex align-items-center">
<p-button icon="pi pi-map-marker" <p-button
label="Apri in Google Maps" icon="pi pi-map-marker"
[rounded]="true" label="Apri in Google Maps"
styleClass="hover:underline text-primary-700" [rounded]="true"
(onClick)="calculateMapsLink(row)" styleClass="hover:underline text-primary-700"
[text]="true" /> (onClick)="calculateMapsLink(row)"
[text]="true"
/>
</div> </div>
</td> </td>
</ng-container> </ng-container>

View File

@ -398,6 +398,7 @@ export class StrutturePubblicheComponent {
comune: _form.citta?.comune, comune: _form.citta?.comune,
}; };
this.calcolaIndirizzoDa = _form.indirizzo; this.calcolaIndirizzoDa = _form.indirizzo;
console.log('params', params);
const strutture$ = this.strutturePubblicheService.getStrutture(params).pipe( const strutture$ = this.strutturePubblicheService.getStrutture(params).pipe(
catchError((err) => { catchError((err) => {
@ -588,7 +589,7 @@ export class StrutturePubblicheComponent {
? ', ' + struttura.struttura.numeroCivico ? ', ' + struttura.struttura.numeroCivico
: '' : ''
}`; }`;
address += ` ${struttura.struttura.cap} ${struttura.struttura.codiceLuogo.comune}(${struttura.struttura.codiceLuogo.siglaProvincia})`; address += `${struttura.struttura.cap} ${struttura.struttura.codiceLuogo.comune}(${struttura.struttura.codiceLuogo.siglaProvincia})`;
// address += `${struttura.struttura.codiceLuogo.provincia ? '(' + struttura.struttura.codiceLuogo.siglaProvincia + ')' : ''}`; // address += `${struttura.struttura.codiceLuogo.provincia ? '(' + struttura.struttura.codiceLuogo.siglaProvincia + ')' : ''}`;
const destination = encodeURIComponent( const destination = encodeURIComponent(