1 | <mat-card class="package-list-container" *ngIf="salesPackages$ | async as salesPackages else loading">
|
2 | <mat-list>
|
3 | <div class="package-list" *ngFor="let package of salesPackages; let packageIndex = index">
|
4 | <mat-list-item class="package-list-item">
|
5 | <va-icon mat-list-avatar [name]="package.name" [iconUrl]="package.icon" [diameter]="40">
|
6 | </va-icon>
|
7 | <h3 mat-line>{{package.name}}</h3>
|
8 | <p class="package-dropdown-font" mat-line>{{package.formattedPrices}}</p>
|
9 | <span *ngIf="!package.activationStatus" class="package-dropdown-layout">
|
10 | <p class="package-dropdown-font package-notice">
|
11 | <span *ngIf="(package.products?.length > 0) || (package.totalAddons > 0)">Contains </span>
|
12 | <span *ngIf="package.products?.length > 0">
|
13 | {{package.products.length}} {{package.products.length === 1 ? "Product" : "Products"}}
|
14 | </span>
|
15 | <span *ngIf="(package.products?.length > 0) && (package.totalAddons > 0)"> & </span>
|
16 | <span *ngIf="package.totalAddons > 0">
|
17 | {{package.totalAddons}} {{package.totalAddons === 1 ? "Addon" : "Addons"}}
|
18 | </span>
|
19 | <span *ngIf="(package.products?.length === 0) && (package.totalAddons === 0)">
|
20 | No Items in Package
|
21 | </span>
|
22 | </p>
|
23 | <button *ngIf="package.products?.length > 0 || package.addonsWithNoParent?.length > 0" mat-icon-button type="button" (click)="toggleProducts(packageIndex)">
|
24 | <mat-icon mat-list-icon
|
25 | class="dropdown-icon"
|
26 | [ngClass]="{'dropdown-icon-rotate-up': !dropdownToggles[packageIndex], 'dropdown-icon-rotate-down': dropdownToggles[packageIndex]}">
|
27 | keyboard_arrow_down
|
28 | </mat-icon>
|
29 | </button>
|
30 | </span>
|
31 | <span *ngIf="package.activationStatus" class="package-dropdown-layout package-dropdown-status">
|
32 | <div [ngClass]="{
|
33 | 'activated': isActivatedStatus(package.activationStatus.status),
|
34 | 'warning': isWarningStatus(package.activationStatus.status),
|
35 | 'error': isErrorStatus(package.activationStatus.status)}">
|
36 | <mat-icon>{{package.activationStatus.icon}}</mat-icon>
|
37 | </div>
|
38 | <p class="package-notice"
|
39 | [ngClass]="{
|
40 | 'activated': isActivatedStatus(package.activationStatus.status),
|
41 | 'warning': isWarningStatus(package.activationStatus.status),
|
42 | 'error': isErrorStatus(package.activationStatus.status)}">
|
43 | {{package.activationStatus.text}}
|
44 | </p>
|
45 | <button *ngIf="package.products?.length > 0 || package.addonsWithNoParent?.length > 0" mat-icon-button type="button" (click)="toggleProducts(packageIndex)">
|
46 | <mat-icon mat-list-icon
|
47 | class="dropdown-icon"
|
48 | [ngClass]="{'dropdown-icon-rotate-up': !dropdownToggles[packageIndex], 'dropdown-icon-rotate-down': dropdownToggles[packageIndex]}">
|
49 | keyboard_arrow_down
|
50 | </mat-icon>
|
51 | </button>
|
52 | </span>
|
53 | </mat-list-item>
|
54 | <mat-list class="product-or-addon-list package-dropdown-font" *ngIf="dropdownToggles[packageIndex]" [@listAnimationStart]>
|
55 | <div *ngFor="let product of package.products">
|
56 | <mat-list-item class="product-or-addon-item">
|
57 | <va-icon mat-list-avatar [name]="product.name" [iconUrl]="product.icon" [diameter]="40"></va-icon>
|
58 | <h3 mat-line>{{product.name}}</h3>
|
59 | <p class="package-dropdown-font" mat-line>
|
60 | <span>{{product.tagline}}</span>
|
61 | </p>
|
62 | <div *ngIf="product.activationStatus" class="package-dropdown-status" >
|
63 | <div [ngClass]="{
|
64 | 'activated': isActivatedStatus(product.activationStatus.status),
|
65 | 'warning': isWarningStatus(product.activationStatus.status),
|
66 | 'error': isErrorStatus(product.activationStatus.status)}">
|
67 | <mat-icon>{{product.activationStatus.icon}}</mat-icon>
|
68 | </div>
|
69 | <p [ngClass]="{
|
70 | 'activated': isActivatedStatus(product.activationStatus.status),
|
71 | 'warning': isWarningStatus(product.activationStatus.status),
|
72 | 'error': isErrorStatus(product.activationStatus.status)}">
|
73 | {{product.activationStatus.text}}
|
74 | </p>
|
75 | </div>
|
76 | </mat-list-item>
|
77 | <mat-list-item *ngFor="let addon of product.addons" class="product-or-addon-item addon-with-product">
|
78 | <va-icon mat-list-avatar [name]="addon.name" [iconUrl]="addon.icon" [diameter]="40"></va-icon>
|
79 | <h3 mat-line>{{addon.name}}</h3>
|
80 | <p class="package-dropdown-font" mat-line>{{addon.tagline}}</p>
|
81 | <div *ngIf="addon.activationStatus" class="package-dropdown-status">
|
82 | <div [ngClass]="{
|
83 | 'activated': isActivatedStatus(addon.activationStatus.status),
|
84 | 'warning': isWarningStatus(addon.activationStatus.status),
|
85 | 'error': isErrorStatus(addon.activationStatus.status)}">
|
86 | <mat-icon>{{addon.activationStatus.icon}}</mat-icon>
|
87 | </div>
|
88 | <p [ngClass]="{
|
89 | 'activated': isActivatedStatus(addon.activationStatus.status),
|
90 | 'warning': isWarningStatus(addon.activationStatus.status),
|
91 | 'error': isErrorStatus(addon.activationStatus.status)}">
|
92 | {{addon.activationStatus.text}}
|
93 | </p>
|
94 | </div>
|
95 | </mat-list-item>
|
96 | </div>
|
97 |
|
98 | <mat-list-item *ngFor="let addon of package.addonsWithNoParent" class="product-or-addon-item">
|
99 | <div class="icon-area">
|
100 | <va-icon mat-list-avatar [iconUrl]="addon.icon" [name]="addon.name" [diameter]="40"></va-icon>
|
101 | <va-icon mat-list-avatar class="addon-indicator" [iconUrl]="addon.parentIcon" [diameter]="20" [name]="addon.parentName"></va-icon>
|
102 | </div>
|
103 | <h3 mat-line >{{addon.name}} <span class="required-product">(Requires {{addon.parentName || ''}})</span></h3>
|
104 | <p class="package-dropdown-font" mat-line>
|
105 | <span>{{addon.tagline}}</span>
|
106 | </p>
|
107 | <div *ngIf="addon.activationStatus" class="package-dropdown-status">
|
108 | <div [ngClass]="{
|
109 | 'activated': isActivatedStatus(addon.activationStatus.status),
|
110 | 'warning': isWarningStatus(addon.activationStatus.status),
|
111 | 'error': isErrorStatus(addon.activationStatus.status)}">
|
112 | <mat-icon>{{addon.activationStatus.icon}}</mat-icon>
|
113 | </div>
|
114 | <p [ngClass]="{
|
115 | 'activated': isActivatedStatus(addon.activationStatus.status),
|
116 | 'warning': isWarningStatus(addon.activationStatus.status),
|
117 | 'error': isErrorStatus(addon.activationStatus.status)}">
|
118 | {{addon.activationStatus.text}}
|
119 | </p>
|
120 | </div>
|
121 | </mat-list-item>
|
122 | </mat-list>
|
123 | </div>
|
124 | </mat-list>
|
125 | </mat-card>
|
126 | <ng-template #loading>
|
127 | <mat-card>
|
128 | <div class="package-dropdown-stencil-display">
|
129 | <va-icon [iconUrl]=""></va-icon>
|
130 | <div class="stencil-text">
|
131 | <h1 class="stencil-title stencil-shimmer"></h1>
|
132 | <span class="stencil-tagline stencil-shimmer"></span>
|
133 | </div>
|
134 | </div>
|
135 | </mat-card>
|
136 | </ng-template>
|