@skysoftware-co/bayan-hr-widgets-ui 2.0.20 → 2.0.21
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.
- package/fesm2022/skysoftware-co-bayan-hr-widgets-ui.mjs +4783 -0
- package/fesm2022/skysoftware-co-bayan-hr-widgets-ui.mjs.map +1 -0
- package/package.json +15 -3
- package/types/skysoftware-co-bayan-hr-widgets-ui.d.ts +1304 -0
- package/ng-package.json +0 -9
- package/src/assets/i18n/ar.json +0 -166
- package/src/assets/i18n/en.json +0 -166
- package/src/assets/i18n/fr.json +0 -166
- package/src/lib/my-calendar-widget/my-calendar-widget.component.html +0 -25
- package/src/lib/my-calendar-widget/my-calendar-widget.component.ts +0 -220
- package/src/lib/my-main-details-widget/my-main-details-widget.component.html +0 -157
- package/src/lib/my-main-details-widget/my-main-details-widget.component.ts +0 -179
- package/src/lib/my-next-week-vacation-insights-widget/components/next-week-vacation-insights-popup/next-week-vacation-insights-popup.component.html +0 -131
- package/src/lib/my-next-week-vacation-insights-widget/components/next-week-vacation-insights-popup/next-week-vacation-insights-popup.component.ts +0 -119
- package/src/lib/my-next-week-vacation-insights-widget/my-next-week-vacation-insights-widget.component.html +0 -35
- package/src/lib/my-next-week-vacation-insights-widget/my-next-week-vacation-insights-widget.component.ts +0 -110
- package/src/lib/my-profile/address-widget/my-profile-address-widget.component.html +0 -57
- package/src/lib/my-profile/address-widget/my-profile-address-widget.component.ts +0 -70
- package/src/lib/my-profile/bank-info-widget/my-profile-bank-info-widget.component.html +0 -101
- package/src/lib/my-profile/bank-info-widget/my-profile-bank-info-widget.component.ts +0 -89
- package/src/lib/my-profile/contact-widget/my-profile-contact-widget.component.html +0 -89
- package/src/lib/my-profile/contact-widget/my-profile-contact-widget.component.ts +0 -78
- package/src/lib/my-profile/contract-widget/my-profile-contract-widget.component.html +0 -63
- package/src/lib/my-profile/contract-widget/my-profile-contract-widget.component.ts +0 -73
- package/src/lib/my-profile/degrees-widget/my-profile-degrees-widget-component.html +0 -86
- package/src/lib/my-profile/degrees-widget/my-profile-degrees-widget-component.ts +0 -98
- package/src/lib/my-profile/dependents-documents-widget/my-profile-dependents-documents-widget.html +0 -83
- package/src/lib/my-profile/dependents-documents-widget/my-profile-dependents-documents-widget.ts +0 -126
- package/src/lib/my-profile/documents-widgets/components/document-card/document-card.component.html +0 -53
- package/src/lib/my-profile/documents-widgets/components/document-card/document-card.component.ts +0 -50
- package/src/lib/my-profile/documents-widgets/components/document-row/document-row.component.html +0 -48
- package/src/lib/my-profile/documents-widgets/components/document-row/document-row.component.ts +0 -44
- package/src/lib/my-profile/documents-widgets/components/document-tablet-card/document-tablet-card.component.html +0 -46
- package/src/lib/my-profile/documents-widgets/components/document-tablet-card/document-tablet-card.component.ts +0 -47
- package/src/lib/my-profile/employee-dependents-widget/my-profile-employee-dependents-component.html +0 -50
- package/src/lib/my-profile/employee-dependents-widget/my-profile-employee-dependents-component.ts +0 -63
- package/src/lib/my-profile/entitlements-others-widget/my-profile-entitlements-others-widget.component.html +0 -26
- package/src/lib/my-profile/entitlements-others-widget/my-profile-entitlements-others-widget.component.ts +0 -66
- package/src/lib/my-profile/experiences-widget/my-profile-experiences-widget-component.html +0 -93
- package/src/lib/my-profile/experiences-widget/my-profile-experiences-widget-component.ts +0 -102
- package/src/lib/my-profile/indemnity-widget/my-profile-indemnity-widget.component.html +0 -49
- package/src/lib/my-profile/indemnity-widget/my-profile-indemnity-widget.component.ts +0 -79
- package/src/lib/my-profile/job-info-widget/my-profile-job-info-widget.component.html +0 -71
- package/src/lib/my-profile/job-info-widget/my-profile-job-info-widget.component.ts +0 -73
- package/src/lib/my-profile/languages-widget/my-profile-languages-widget.component.html +0 -23
- package/src/lib/my-profile/languages-widget/my-profile-languages-widget.component.ts +0 -70
- package/src/lib/my-profile/medical-insurance-widget/components/medical-insurance-card/medical-insurance-card.component.html +0 -18
- package/src/lib/my-profile/medical-insurance-widget/components/medical-insurance-card/medical-insurance-card.component.ts +0 -29
- package/src/lib/my-profile/medical-insurance-widget/my-profile-medical-insurance-widget.component.html +0 -52
- package/src/lib/my-profile/medical-insurance-widget/my-profile-medical-insurance-widget.component.ts +0 -103
- package/src/lib/my-profile/official-documents-widget/my-profile-official-documents-widget.html +0 -82
- package/src/lib/my-profile/official-documents-widget/my-profile-official-documents-widget.ts +0 -119
- package/src/lib/my-profile/other-nationalities-widget/my-profile-other-nationalities-widget.component.html +0 -23
- package/src/lib/my-profile/other-nationalities-widget/my-profile-other-nationalities-widget.component.ts +0 -70
- package/src/lib/my-profile/personal-info-main-widget/my-profile-personal-info-main-widget.component.html +0 -115
- package/src/lib/my-profile/personal-info-main-widget/my-profile-personal-info-main-widget.component.ts +0 -75
- package/src/lib/my-profile/salary-widget/my-profile-salary-widget.component.html +0 -37
- package/src/lib/my-profile/salary-widget/my-profile-salary-widget.component.ts +0 -85
- package/src/lib/my-profile/service-charge-widget/my-profile-service-charge-widget.component.html +0 -16
- package/src/lib/my-profile/service-charge-widget/my-profile-service-charge-widget.component.ts +0 -101
- package/src/lib/my-profile/ticket-widget/components/ticket-card/ticket-card.component.html +0 -23
- package/src/lib/my-profile/ticket-widget/components/ticket-card/ticket-card.component.ts +0 -26
- package/src/lib/my-profile/ticket-widget/my-profile-ticket-widget.component.html +0 -68
- package/src/lib/my-profile/ticket-widget/my-profile-ticket-widget.component.ts +0 -93
- package/src/lib/my-profile/vacations-widget/my-profile-vacations-widget.component.html +0 -34
- package/src/lib/my-profile/vacations-widget/my-profile-vacations-widget.component.ts +0 -66
- package/src/lib/my-team-subordinates-popup-widget/components/employee-main-info-card/employee-information-card.component.ts +0 -65
- package/src/lib/my-team-subordinates-popup-widget/components/employee-main-info-card/employee-main-info-card.component.html +0 -57
- package/src/lib/my-team-subordinates-popup-widget/components/my-team-subordinates-popup/my-team-popup.component.html +0 -109
- package/src/lib/my-team-subordinates-popup-widget/components/my-team-subordinates-popup/my-team-popup.component.ts +0 -297
- package/src/lib/my-upcoming-events-widget/components/event-item/event-item.component.html +0 -53
- package/src/lib/my-upcoming-events-widget/components/event-item/event-item.component.ts +0 -42
- package/src/lib/my-upcoming-events-widget/components/event-tab-bar/event-tab-bar.component.html +0 -21
- package/src/lib/my-upcoming-events-widget/components/event-tab-bar/event-tab-bar.component.ts +0 -44
- package/src/lib/my-upcoming-events-widget/components/events-popup/events-popup.component.html +0 -67
- package/src/lib/my-upcoming-events-widget/components/events-popup/events-popup.component.ts +0 -74
- package/src/lib/my-upcoming-events-widget/my-upcoming-events-widget.component.html +0 -74
- package/src/lib/my-upcoming-events-widget/my-upcoming-events-widget.component.ts +0 -199
- package/src/lib/services/hr-self-widgets.service.ts +0 -624
- package/src/lib/shared/components/card-header/card-header.component.html +0 -4
- package/src/lib/shared/components/card-header/card-header.component.ts +0 -18
- package/src/lib/shared/components/hr-employee-calendar/hr-employee-calendar.component.html +0 -47
- package/src/lib/shared/components/hr-employee-calendar/hr-employee-calendar.component.ts +0 -193
- package/src/lib/shared/components/info-field/info-field.component.html +0 -2
- package/src/lib/shared/components/info-field/info-field.component.ts +0 -20
- package/src/lib/shared/components/widget-card/widget-card-component.html +0 -3
- package/src/lib/shared/components/widget-card/widget-card-component.ts +0 -17
- package/src/lib/shared/pipes/translate.pipe.ts +0 -34
- package/src/lib/shared/services/bank-information-cache.service.ts +0 -29
- package/src/lib/shared/services/common-methods.service.ts +0 -33
- package/src/lib/shared/services/constants.service.ts +0 -12
- package/src/lib/shared/services/entitlements-cache.service.ts +0 -94
- package/src/lib/shared/services/job-information-cache.service.ts +0 -72
- package/src/lib/shared/services/my-team-popup.service.ts +0 -34
- package/src/lib/shared/services/personal-information-cache.service.ts +0 -77
- package/src/lib/shared/services/profile-documents-cache-service.ts +0 -44
- package/src/lib/shared/services/profile-employee-dependents-cach.ts +0 -37
- package/src/lib/shared/services/qualifications-cache.service.ts +0 -45
- package/src/lib/shared/services/translate.service.ts +0 -35
- package/src/lib/shared/types/common.ts +0 -359
- package/src/public-api.ts +0 -35
- package/tsconfig.lib.json +0 -11
- package/tsconfig.lib.prod.json +0 -9
- package/tsconfig.spec.json +0 -8
|
@@ -1,297 +0,0 @@
|
|
|
1
|
-
import { NgTemplateOutlet } from '@angular/common';
|
|
2
|
-
import { ChangeDetectionStrategy, Component, inject, input, output, signal, ViewChild } from '@angular/core';
|
|
3
|
-
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
|
|
4
|
-
import {
|
|
5
|
-
DxScrollViewComponent,
|
|
6
|
-
DxTextBoxModule,
|
|
7
|
-
DxPopupModule,
|
|
8
|
-
DxScrollViewModule,
|
|
9
|
-
DxLoadIndicatorModule,
|
|
10
|
-
} from 'devextreme-angular';
|
|
11
|
-
import { firstValueFrom } from 'rxjs';
|
|
12
|
-
import { HighlightPipe } from '@skysoftware-co/sky-components-ui';
|
|
13
|
-
import { SubordinateDTO, EmployeeMainInfo } from '../../../shared/types/common';
|
|
14
|
-
import { EmployeeMainInfoCardComponent } from '../employee-main-info-card/employee-information-card.component';
|
|
15
|
-
import { HRTranslatePipe } from '../../../shared/pipes/translate.pipe';
|
|
16
|
-
import { faEnvelope, faPhone } from '@fortawesome/pro-solid-svg-icons';
|
|
17
|
-
import { MyTeamWidgetsService } from '../../../shared/services/my-team-popup.service';
|
|
18
|
-
|
|
19
|
-
export const myTeamSubordinatesVisible = signal(false);
|
|
20
|
-
|
|
21
|
-
export function openMyTeamSubordinatesPopup(): void {
|
|
22
|
-
myTeamSubordinatesVisible.set(true);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
@Component({
|
|
26
|
-
selector: 'hr-my-team-popup',
|
|
27
|
-
standalone: true,
|
|
28
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
29
|
-
imports: [
|
|
30
|
-
FontAwesomeModule,
|
|
31
|
-
DxPopupModule,
|
|
32
|
-
DxTextBoxModule,
|
|
33
|
-
DxScrollViewModule,
|
|
34
|
-
DxLoadIndicatorModule,
|
|
35
|
-
EmployeeMainInfoCardComponent,
|
|
36
|
-
NgTemplateOutlet,
|
|
37
|
-
HighlightPipe,
|
|
38
|
-
HRTranslatePipe,
|
|
39
|
-
],
|
|
40
|
-
templateUrl: './my-team-popup.component.html',
|
|
41
|
-
})
|
|
42
|
-
export class MyTeamPopupComponent {
|
|
43
|
-
private readonly myTeamWidgetsService = inject(MyTeamWidgetsService);
|
|
44
|
-
@ViewChild('dataScrollView') dataScrollView?: DxScrollViewComponent;
|
|
45
|
-
|
|
46
|
-
readonly baseUrl = input.required<string>();
|
|
47
|
-
|
|
48
|
-
readonly isLoadingChanged = output<boolean>();
|
|
49
|
-
readonly errorOccurred = output<string>();
|
|
50
|
-
readonly showGrade = input<boolean>(false);
|
|
51
|
-
readonly showPropertySymbol = input<boolean>(true);
|
|
52
|
-
|
|
53
|
-
readonly isPopupVisible = myTeamSubordinatesVisible;
|
|
54
|
-
readonly showAllSubordinates = signal(false);
|
|
55
|
-
readonly searchValue = signal('');
|
|
56
|
-
readonly items = signal<{ adminUnitName: string; employees: SubordinateDTO[] }[]>([]);
|
|
57
|
-
readonly isDataLoading = signal(false);
|
|
58
|
-
readonly hasMoreData = signal(true);
|
|
59
|
-
|
|
60
|
-
readonly phoneIcon = input(faPhone);
|
|
61
|
-
readonly emailIcon = input(faEnvelope);
|
|
62
|
-
readonly headerRowClass = input('d-flex justify-content-between align-items-center mb-2 pe-2');
|
|
63
|
-
readonly switchContainerClass = input('form-check form-switch d-flex align-items-center custom-switch-dark ps-0');
|
|
64
|
-
readonly switchInputClass = input('form-check-input text-dark ms-0');
|
|
65
|
-
readonly switchLabelClass = input('form-check-label mx-2 fs-13');
|
|
66
|
-
readonly scrollViewClass = input('position-relative');
|
|
67
|
-
readonly emptyStateClass = input(
|
|
68
|
-
'position-absolute top-50 start-50 translate-middle w-100 text-center text-dark-gray fs-14',
|
|
69
|
-
);
|
|
70
|
-
readonly groupHeaderClass = input('fs-13 text-dark pt-2 pb-1');
|
|
71
|
-
readonly employeeCardClass = input(
|
|
72
|
-
'bg-light-gray rounded p-2 mb-2 d-flex align-items-center justify-content-between border-start border-4 border-start-primary',
|
|
73
|
-
);
|
|
74
|
-
readonly employeeCardHeight = input<string>('100px');
|
|
75
|
-
readonly contactContainerClass = input('d-flex flex-column gap-1 border-start border-2 ps-3 w-100');
|
|
76
|
-
readonly contactTitleClass = input('fs-10 fw-medium mb-1 text-dark');
|
|
77
|
-
readonly contactRowClass = input('d-flex align-items-center gap-2 fs-12 fw-normal lh-21 text-dark');
|
|
78
|
-
readonly contactIconClass = input('fs-10 text-light-gray d-inline-flex align-items-center lh-1');
|
|
79
|
-
readonly emailTextClass = input(
|
|
80
|
-
'd-inline-block w-100 text-truncate lh-1 link-dark hover-primary text-decoration-none link-underline link-underline-opacity-0 link-underline-opacity-100-hover',
|
|
81
|
-
);
|
|
82
|
-
readonly emailPlaceholderClass = input('d-inline-block w-100 lh-1');
|
|
83
|
-
readonly groupedListClass = input('d-flex flex-column gap-2 pb-2');
|
|
84
|
-
readonly loadingContainerClass = input('d-flex justify-content-center py-2');
|
|
85
|
-
readonly loadingIndicatorClass = input('w-30 h-30');
|
|
86
|
-
readonly employeeRowClass = input('row g-0 w-100 align-items-center flex-nowrap');
|
|
87
|
-
readonly employeeInfoColumnClass = input('col-8 overflow-hidden pe-2');
|
|
88
|
-
readonly contactColumnClass = input('col-4 d-flex justify-content-end');
|
|
89
|
-
|
|
90
|
-
readonly pageSize = input(100);
|
|
91
|
-
|
|
92
|
-
private pageIndex = 0;
|
|
93
|
-
private totalCount = 0;
|
|
94
|
-
private loadedCount = 0;
|
|
95
|
-
|
|
96
|
-
toEmployeeMainInfo(emp: SubordinateDTO): EmployeeMainInfo {
|
|
97
|
-
return {
|
|
98
|
-
EmployeeNumber: emp.EmployeeNumber,
|
|
99
|
-
EmployeeName: emp.EmployeeName,
|
|
100
|
-
PhotoKey: emp.PhotoPath,
|
|
101
|
-
PositionName: emp.PositionName,
|
|
102
|
-
AdminUnitName: emp.AdminUnitName ?? '-',
|
|
103
|
-
GradeName: emp.GradeName ?? null,
|
|
104
|
-
PropertyName: emp.PropertyName ?? '-',
|
|
105
|
-
PropertySymbol: emp.PropertySymbol ?? '-',
|
|
106
|
-
EmployeeNameInitials: emp.EmployeeNameInitials,
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
closePopup(): void {
|
|
111
|
-
myTeamSubordinatesVisible.set(false);
|
|
112
|
-
this.showAllSubordinates.set(false);
|
|
113
|
-
this.searchValue.set('');
|
|
114
|
-
this.resetState();
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
private normalizeContactValue(value: string | null | undefined): string {
|
|
118
|
-
const normalizedValue = value?.trim() ?? '';
|
|
119
|
-
return normalizedValue && normalizedValue !== '-' ? normalizedValue : '';
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
private getEmployeeEmail(employee: SubordinateDTO): string {
|
|
123
|
-
return this.normalizeContactValue(employee.BusinessEmail) || this.normalizeContactValue(employee.PersonalEmail);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
private getEmployeePhone(employee: SubordinateDTO): string {
|
|
127
|
-
return this.normalizeContactValue(employee.MobileNumber);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
getEmployeeEmailDisplay(employee: SubordinateDTO): string {
|
|
131
|
-
return this.getEmployeeEmail(employee) || '-';
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
getEmployeePhoneDisplay(employee: SubordinateDTO): string {
|
|
135
|
-
return this.getEmployeePhone(employee) || '-';
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
hasEmployeeEmail(employee: SubordinateDTO): boolean {
|
|
139
|
-
return !!this.getEmployeeEmail(employee);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
hasEmployeePhone(employee: SubordinateDTO): boolean {
|
|
143
|
-
return !!this.getEmployeePhone(employee);
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
hasAnyContactInfo(employee: SubordinateDTO): boolean {
|
|
147
|
-
return this.hasEmployeeEmail(employee) || this.hasEmployeePhone(employee);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
onSearchChanged(value: string): void {
|
|
151
|
-
const nextSearchValue = (value ?? '').trim();
|
|
152
|
-
if (nextSearchValue === this.searchValue()) {
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
this.searchValue.set(nextSearchValue);
|
|
156
|
-
this.loadPage(true);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
onToggleChange(event: Event): void {
|
|
160
|
-
const checked = (event.target as HTMLInputElement).checked;
|
|
161
|
-
this.showAllSubordinates.set(checked);
|
|
162
|
-
this.searchValue.set('');
|
|
163
|
-
this.loadPage(true);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
onReachBottom(event: any): void {
|
|
167
|
-
if (!this.hasMoreData()) {
|
|
168
|
-
event?.component?.release?.();
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
this.loadPage(false).finally(() => {
|
|
173
|
-
event?.component?.release?.();
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
private isScrollContentScrollable(): boolean {
|
|
178
|
-
const scrollableElement = this.dataScrollView?.instance?.element?.() as HTMLElement | undefined;
|
|
179
|
-
const scrollableContainer = scrollableElement?.querySelector?.('.dx-scrollable-container') as
|
|
180
|
-
| HTMLElement
|
|
181
|
-
| undefined;
|
|
182
|
-
const scrollableContent = scrollableElement?.querySelector?.('.dx-scrollable-content') as HTMLElement | undefined;
|
|
183
|
-
|
|
184
|
-
if (!scrollableContainer || !scrollableContent) {
|
|
185
|
-
return true;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
return scrollableContent.scrollHeight > scrollableContainer.clientHeight;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
private async loadRemainingPagesIfNeeded(): Promise<void> {
|
|
192
|
-
while (this.hasMoreData() && !this.isScrollContentScrollable()) {
|
|
193
|
-
await this.loadPage(false);
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
private resetState(): void {
|
|
198
|
-
this.items.set([]);
|
|
199
|
-
this.hasMoreData.set(true);
|
|
200
|
-
this.pageIndex = 0;
|
|
201
|
-
this.totalCount = 0;
|
|
202
|
-
this.loadedCount = 0;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
private resetScrollPosition(): void {
|
|
206
|
-
this.dataScrollView?.instance?.scrollTo({ top: 0, left: 0 });
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
private appendEmployees(pageData: SubordinateDTO[]): void {
|
|
210
|
-
if (!this.showAllSubordinates()) {
|
|
211
|
-
const existingEmployees = this.items().length > 0 ? this.items()[0].employees : [];
|
|
212
|
-
const employees = [...existingEmployees, ...pageData];
|
|
213
|
-
|
|
214
|
-
if (employees.length === 0) {
|
|
215
|
-
this.items.set([]);
|
|
216
|
-
return;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
this.items.set([
|
|
220
|
-
{
|
|
221
|
-
adminUnitName: '',
|
|
222
|
-
employees,
|
|
223
|
-
},
|
|
224
|
-
]);
|
|
225
|
-
|
|
226
|
-
return;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
const groupedMap = new Map(this.items().map(group => [group.adminUnitName, [...group.employees]]));
|
|
230
|
-
|
|
231
|
-
for (const employee of pageData) {
|
|
232
|
-
const key = employee.AdminUnitName!;
|
|
233
|
-
const employees = groupedMap.get(key) ?? [];
|
|
234
|
-
employees.push(employee);
|
|
235
|
-
groupedMap.set(key, employees);
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
const groups = Array.from(groupedMap.entries()).map(([adminUnitName, employees]) => ({
|
|
239
|
-
adminUnitName,
|
|
240
|
-
employees,
|
|
241
|
-
}));
|
|
242
|
-
|
|
243
|
-
this.items.set(groups);
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
async loadPage(reset: boolean): Promise<void> {
|
|
247
|
-
if (this.isDataLoading() || (!reset && !this.hasMoreData())) {
|
|
248
|
-
return;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
if (reset) {
|
|
252
|
-
this.resetState();
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
this.isDataLoading.set(true);
|
|
256
|
-
if (reset) {
|
|
257
|
-
this.isLoadingChanged.emit(true);
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
try {
|
|
261
|
-
const response = await firstValueFrom(
|
|
262
|
-
this.myTeamWidgetsService.getSubordinates(this.baseUrl(), {
|
|
263
|
-
showDirectSubordinatesOnly: !this.showAllSubordinates(),
|
|
264
|
-
pageIndex: this.pageIndex,
|
|
265
|
-
pageSize: this.pageSize(),
|
|
266
|
-
searchValue: this.searchValue(),
|
|
267
|
-
}),
|
|
268
|
-
);
|
|
269
|
-
|
|
270
|
-
this.totalCount = response.ResponseData.Pagination.TotalCount;
|
|
271
|
-
const pageData = response.ResponseData.Data;
|
|
272
|
-
|
|
273
|
-
if (reset) {
|
|
274
|
-
this.resetScrollPosition();
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
this.appendEmployees(pageData);
|
|
278
|
-
this.loadedCount += pageData.length;
|
|
279
|
-
this.pageIndex += 1;
|
|
280
|
-
this.dataScrollView?.instance?.update();
|
|
281
|
-
|
|
282
|
-
const hasMore = this.loadedCount < this.totalCount && pageData.length > 0;
|
|
283
|
-
this.hasMoreData.set(hasMore);
|
|
284
|
-
} catch (err: any) {
|
|
285
|
-
this.errorOccurred.emit(err?.error?.ResponseData?.Errors?.[0]?.Message);
|
|
286
|
-
} finally {
|
|
287
|
-
this.isDataLoading.set(false);
|
|
288
|
-
if (reset) {
|
|
289
|
-
this.isLoadingChanged.emit(false);
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
if (!reset) {
|
|
293
|
-
await this.loadRemainingPagesIfNeeded();
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
@if (events().length > 0) {
|
|
2
|
-
<div>
|
|
3
|
-
@for (event of events(); track event) {
|
|
4
|
-
<div [class]="'d-flex lh-base ' + (showDates() ? 'my-3' : 'my-1')">
|
|
5
|
-
<fa-icon
|
|
6
|
-
[icon]="isBirthday(event) ? cakeCandles : treePalm"
|
|
7
|
-
[class]="eventIconClass()"
|
|
8
|
-
[title]="isBirthday(event) ? ('Birthday' | translate) : ('PublicHoliday' | translate)"
|
|
9
|
-
></fa-icon>
|
|
10
|
-
|
|
11
|
-
<div>
|
|
12
|
-
@if (isBirthday(event)) {
|
|
13
|
-
@if (hasPropertyBadge(event)) {
|
|
14
|
-
<span [class]="propertyBadgeClass()" [title]="event.PropertyName!">{{ event.PropertySymbol }}</span>
|
|
15
|
-
}
|
|
16
|
-
@if (isArabic()) {
|
|
17
|
-
<span>{{ 'Birthday' | translate }}</span>
|
|
18
|
-
<span [class]="eventNameBoldClass()">{{ ' ' + event.Name + ' ' }}</span>
|
|
19
|
-
@if (event.IsIn2Days) {
|
|
20
|
-
<span>{{ 'During' | translate }}</span>
|
|
21
|
-
}
|
|
22
|
-
} @else {
|
|
23
|
-
<span [class]="eventNameBoldClass()">{{ event.Name }}'s</span>
|
|
24
|
-
<span>
|
|
25
|
-
{{ ('Birthday' | translate) + ' ' + ((event.IsIn2Days ? ('isIn' | translate) : ('is' | translate)) | lowercase) }}
|
|
26
|
-
</span>
|
|
27
|
-
}
|
|
28
|
-
} @else {
|
|
29
|
-
@if (isArabic()) {
|
|
30
|
-
<span [class]="eventNameBoldClass()">{{ event.Name }}</span>
|
|
31
|
-
<span>{{ ('In' | translate) + ' ' }}</span>
|
|
32
|
-
} @else {
|
|
33
|
-
<span [class]="eventNameBoldClass()">{{ event.Name }}</span>
|
|
34
|
-
<span>{{ ' ' + ('is' | translate | lowercase) }}</span>
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
<span [class]="eventDescriptionClass()">{{ event.Description | translate }}</span>
|
|
39
|
-
|
|
40
|
-
@if (!isBirthday(event) && showDates() && event.StartDate && event.EndDate) {
|
|
41
|
-
<span>{{ ' (' + (event.StartDate | date: dateFormat()) + ' - ' + (event.EndDate | date: dateFormat()) + ')' }}</span>
|
|
42
|
-
}
|
|
43
|
-
</div>
|
|
44
|
-
</div>
|
|
45
|
-
}
|
|
46
|
-
</div>
|
|
47
|
-
} @else {
|
|
48
|
-
@if (weekendWarningDescription()) {
|
|
49
|
-
<div [class]="warningTextClass() + (showDates() ? ' pt-5 my-5' : '')">{{ (weekendWarningDescription() ?? undefined) | translate }}</div>
|
|
50
|
-
} @else {
|
|
51
|
-
<div [class]="noEventsTextClass() + (showDates() ? ' pt-5 my-5' : '')">{{ 'NoEvents' | translate }}</div>
|
|
52
|
-
}
|
|
53
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
|
|
2
|
-
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
|
|
3
|
-
import { faCakeCandles, faTreePalm } from '@fortawesome/pro-light-svg-icons';
|
|
4
|
-
import { DatePipe, LowerCasePipe } from '@angular/common';
|
|
5
|
-
import { EventTypeEnum, FilteredUpcomingEvent } from '../../../shared/types/common';
|
|
6
|
-
import { HRTranslatePipe } from '../../../shared/pipes/translate.pipe';
|
|
7
|
-
|
|
8
|
-
@Component({
|
|
9
|
-
selector: 'hr-event-item',
|
|
10
|
-
standalone: true,
|
|
11
|
-
imports: [FontAwesomeModule, DatePipe, LowerCasePipe, HRTranslatePipe],
|
|
12
|
-
templateUrl: './event-item.component.html',
|
|
13
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
14
|
-
})
|
|
15
|
-
export class HREventItemComponent {
|
|
16
|
-
readonly events = input<FilteredUpcomingEvent[]>([]);
|
|
17
|
-
readonly showDates = input<boolean>(false);
|
|
18
|
-
readonly showProperty = input<boolean>(true);
|
|
19
|
-
readonly selectedLanguage = input<string>('en');
|
|
20
|
-
readonly selectedEventType = input<EventTypeEnum | null>(null);
|
|
21
|
-
readonly weekendWarningDescription = input<string | null>(null);
|
|
22
|
-
readonly eventIconClass = input<string>('fs-6 text-primary pe-2');
|
|
23
|
-
readonly eventNameBoldClass = input<string>('fw-medium');
|
|
24
|
-
readonly eventDescriptionClass = input<string>('text-primary fw-medium');
|
|
25
|
-
readonly propertyBadgeClass = input<string>('property-badge cursor-pointer me-1');
|
|
26
|
-
readonly noEventsTextClass = input<string>('text-center my-4 text-light-gray');
|
|
27
|
-
readonly warningTextClass = input<string>('text-center my-2 text-light-gray');
|
|
28
|
-
readonly dateFormat = input<string>('dd/MM/yyyy');
|
|
29
|
-
|
|
30
|
-
eventTypeEnum = EventTypeEnum;
|
|
31
|
-
cakeCandles = faCakeCandles;
|
|
32
|
-
treePalm = faTreePalm;
|
|
33
|
-
|
|
34
|
-
readonly isArabic = computed(() => this.selectedLanguage() === 'ar');
|
|
35
|
-
|
|
36
|
-
isBirthday(event: FilteredUpcomingEvent): boolean {
|
|
37
|
-
return event.EventType === EventTypeEnum.Birthdays;
|
|
38
|
-
}
|
|
39
|
-
hasPropertyBadge(event: FilteredUpcomingEvent): boolean {
|
|
40
|
-
return this.showProperty() && !!event.PropertySymbol;
|
|
41
|
-
}
|
|
42
|
-
}
|
package/src/lib/my-upcoming-events-widget/components/event-tab-bar/event-tab-bar.component.html
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
<div [class]="containerClass()">
|
|
2
|
-
@for (tab of tabList; track tab) {
|
|
3
|
-
<div
|
|
4
|
-
[class]="tabItemClass() + ' ' + (selectedType() == tab.id ? tabSelectedClass() : tabNotSelectedClass())"
|
|
5
|
-
[ngClass]="{ 'w-25': selectedLanguage() == 'fr' && !tab?.icon }"
|
|
6
|
-
(click)="tabSelected.emit(tab.id)"
|
|
7
|
-
>
|
|
8
|
-
@if (!tab?.icon) {
|
|
9
|
-
<span [class]="tabTextClass() + ' ' + (selectedType() == tab.id ? tabTextSelectedClass() : tabTextNotSelectedClass())">
|
|
10
|
-
{{ getTabText(tab) }}
|
|
11
|
-
</span>
|
|
12
|
-
} @else {
|
|
13
|
-
<fa-icon
|
|
14
|
-
[icon]="tab.icon!"
|
|
15
|
-
[class]="tabIconClass() + ' ' + (selectedType() == tab.id ? tabTextSelectedClass() : tabTextNotSelectedClass())"
|
|
16
|
-
[title]="getTabText(tab)"
|
|
17
|
-
></fa-icon>
|
|
18
|
-
}
|
|
19
|
-
</div>
|
|
20
|
-
}
|
|
21
|
-
</div>
|
package/src/lib/my-upcoming-events-widget/components/event-tab-bar/event-tab-bar.component.ts
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, inject, input, output } from '@angular/core';
|
|
2
|
-
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
|
|
3
|
-
import { NgClass } from '@angular/common';
|
|
4
|
-
import { EventTypeEnum } from '../../../shared/types/common';
|
|
5
|
-
import { faCakeCandles, faTreePalm } from '@fortawesome/pro-light-svg-icons';
|
|
6
|
-
import { HRTranslatePipe } from '../../../shared/pipes/translate.pipe';
|
|
7
|
-
|
|
8
|
-
@Component({
|
|
9
|
-
selector: 'hr-event-tab-bar',
|
|
10
|
-
standalone: true,
|
|
11
|
-
imports: [FontAwesomeModule, NgClass],
|
|
12
|
-
providers: [HRTranslatePipe],
|
|
13
|
-
templateUrl: './event-tab-bar.component.html',
|
|
14
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
15
|
-
})
|
|
16
|
-
export class HREventTabBarComponent {
|
|
17
|
-
readonly selectedType = input<EventTypeEnum | null>(null);
|
|
18
|
-
readonly selectedLanguage = input<string>('en');
|
|
19
|
-
readonly tabSelectedClass = input<string>('selected-event-option');
|
|
20
|
-
readonly tabNotSelectedClass = input<string>('not-selected-event-option');
|
|
21
|
-
readonly tabTextSelectedClass = input<string>('text-white');
|
|
22
|
-
readonly tabTextNotSelectedClass = input<string>('text-primary');
|
|
23
|
-
readonly containerClass = input<string>('d-flex gap-2 mb-3');
|
|
24
|
-
readonly tabItemClass = input<string>(
|
|
25
|
-
'col-1 align-items-center rounded rounded-3 cursor-pointer text-center d-flex justify-content-center py-2 px-3',
|
|
26
|
-
);
|
|
27
|
-
readonly tabTextClass = input<string>('fs-16');
|
|
28
|
-
readonly tabIconClass = input<string>('fs-6');
|
|
29
|
-
readonly tabSelected = output<EventTypeEnum | null>();
|
|
30
|
-
|
|
31
|
-
private readonly translatePipe = inject(HRTranslatePipe);
|
|
32
|
-
|
|
33
|
-
tabList = [
|
|
34
|
-
{ id: null, icon: null },
|
|
35
|
-
{ id: EventTypeEnum.Birthdays, icon: faCakeCandles },
|
|
36
|
-
{ id: EventTypeEnum.PublicHolidays, icon: faTreePalm },
|
|
37
|
-
];
|
|
38
|
-
|
|
39
|
-
getTabText(tab: { id: EventTypeEnum | null }): string {
|
|
40
|
-
if (tab.id === null) return this.translatePipe.transform('All');
|
|
41
|
-
if (tab.id === EventTypeEnum.Birthdays) return this.translatePipe.transform('Birthday');
|
|
42
|
-
return this.translatePipe.transform('PublicHoliday');
|
|
43
|
-
}
|
|
44
|
-
}
|
package/src/lib/my-upcoming-events-widget/components/events-popup/events-popup.component.html
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
<dx-popup
|
|
2
|
-
id="popup"
|
|
3
|
-
[visible]="popupVisible()"
|
|
4
|
-
[height]="'400'"
|
|
5
|
-
[maxHeight]="400"
|
|
6
|
-
[width]="'650'"
|
|
7
|
-
shadingColor="rgba(0,0,0,0.4)"
|
|
8
|
-
contentTemplate="popup-content"
|
|
9
|
-
[showCloseButton]="true"
|
|
10
|
-
[title]="popupTitle()"
|
|
11
|
-
(onHiding)="onPopupClose()"
|
|
12
|
-
(visibleChange)="onPopupVisibleChanged($event)"
|
|
13
|
-
>
|
|
14
|
-
<div class="text-dark" *dxTemplate="let data of 'popup-content'">
|
|
15
|
-
<dx-scroll-view
|
|
16
|
-
#upcomingEventsScrollView
|
|
17
|
-
id="upcomingEventsScrollView"
|
|
18
|
-
[scrollByContent]="true"
|
|
19
|
-
[scrollByThumb]="true"
|
|
20
|
-
[showScrollbar]="'onScroll'"
|
|
21
|
-
[bounceEnabled]="false"
|
|
22
|
-
>
|
|
23
|
-
@if (hasBirthdays() || hasHolidays()) {
|
|
24
|
-
<hr-event-tab-bar
|
|
25
|
-
[selectedType]="selectedEventType()"
|
|
26
|
-
[selectedLanguage]="selectedLanguage()"
|
|
27
|
-
[tabSelectedClass]="tabSelectedClass()"
|
|
28
|
-
[tabNotSelectedClass]="tabNotSelectedClass()"
|
|
29
|
-
[tabTextSelectedClass]="tabTextSelectedClass()"
|
|
30
|
-
[tabTextNotSelectedClass]="tabTextNotSelectedClass()"
|
|
31
|
-
[containerClass]="tabContainerClass()"
|
|
32
|
-
[tabItemClass]="tabItemClass()"
|
|
33
|
-
[tabTextClass]="tabTextClass()"
|
|
34
|
-
[tabIconClass]="tabIconClass()"
|
|
35
|
-
(tabSelected)="onTabSelected($event)"
|
|
36
|
-
></hr-event-tab-bar>
|
|
37
|
-
|
|
38
|
-
<hr-event-item
|
|
39
|
-
[events]="events()"
|
|
40
|
-
[showDates]="true"
|
|
41
|
-
[showProperty]="showProperty()"
|
|
42
|
-
[selectedLanguage]="selectedLanguage()"
|
|
43
|
-
[selectedEventType]="selectedEventType()"
|
|
44
|
-
[weekendWarningDescription]="weekendWarningDescription()"
|
|
45
|
-
[eventIconClass]="eventIconClass()"
|
|
46
|
-
[eventNameBoldClass]="eventNameBoldClass()"
|
|
47
|
-
[eventDescriptionClass]="eventDescriptionClass()"
|
|
48
|
-
[propertyBadgeClass]="propertyBadgeClass()"
|
|
49
|
-
[noEventsTextClass]="noEventsTextClass()"
|
|
50
|
-
[warningTextClass]="warningTextClass()"
|
|
51
|
-
[dateFormat]="dateFormat()"
|
|
52
|
-
></hr-event-item>
|
|
53
|
-
} @else {
|
|
54
|
-
<div [class]="noEventsTextClass()">{{ 'NoEvents' | translate }}</div>
|
|
55
|
-
}
|
|
56
|
-
</dx-scroll-view>
|
|
57
|
-
</div>
|
|
58
|
-
</dx-popup>
|
|
59
|
-
|
|
60
|
-
<dx-load-panel
|
|
61
|
-
shadingColor="rgba(0,0,0,0.4)"
|
|
62
|
-
[visible]="isLoading()"
|
|
63
|
-
[showIndicator]="true"
|
|
64
|
-
[showPane]="true"
|
|
65
|
-
[shading]="true"
|
|
66
|
-
[hideOnOutsideClick]="false"
|
|
67
|
-
></dx-load-panel>
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, effect, input, output, signal } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { DxLoadPanelModule, DxPopupModule, DxScrollViewModule } from 'devextreme-angular';
|
|
4
|
-
import { EventTypeEnum, FilteredUpcomingEvent } from '../../../shared/types/common';
|
|
5
|
-
import { HRTranslatePipe } from '../../../shared/pipes/translate.pipe';
|
|
6
|
-
import { HREventItemComponent } from '../event-item/event-item.component';
|
|
7
|
-
import { HREventTabBarComponent } from '../event-tab-bar/event-tab-bar.component';
|
|
8
|
-
|
|
9
|
-
@Component({
|
|
10
|
-
selector: 'hr-upcoming-events-popup',
|
|
11
|
-
standalone: true,
|
|
12
|
-
imports: [
|
|
13
|
-
CommonModule,
|
|
14
|
-
DxPopupModule,
|
|
15
|
-
DxScrollViewModule,
|
|
16
|
-
DxLoadPanelModule,
|
|
17
|
-
HREventItemComponent,
|
|
18
|
-
HREventTabBarComponent,
|
|
19
|
-
HRTranslatePipe,
|
|
20
|
-
],
|
|
21
|
-
templateUrl: './events-popup.component.html',
|
|
22
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
23
|
-
})
|
|
24
|
-
export class HREventsPopupComponent {
|
|
25
|
-
readonly visible = input<boolean>(false);
|
|
26
|
-
readonly events = input<FilteredUpcomingEvent[]>([]);
|
|
27
|
-
readonly hasBirthdays = input<boolean>(false);
|
|
28
|
-
readonly hasHolidays = input<boolean>(false);
|
|
29
|
-
readonly isLoading = input<boolean>(false);
|
|
30
|
-
readonly selectedLanguage = input<string>('en');
|
|
31
|
-
readonly showProperty = input<boolean>(true);
|
|
32
|
-
readonly weekendWarningDescription = input<string | null>(null);
|
|
33
|
-
readonly popupTitle = input<string>('');
|
|
34
|
-
readonly selectedEventType = input<EventTypeEnum | null>(null);
|
|
35
|
-
readonly tabSelectedClass = input<string>('selected-event-option');
|
|
36
|
-
readonly tabNotSelectedClass = input<string>('not-selected-event-option');
|
|
37
|
-
readonly tabTextSelectedClass = input<string>('text-white');
|
|
38
|
-
readonly tabTextNotSelectedClass = input<string>('text-primary');
|
|
39
|
-
readonly tabContainerClass = input<string>('d-flex gap-2 mb-3');
|
|
40
|
-
readonly tabItemClass = input<string>(
|
|
41
|
-
'col-1 align-items-center rounded rounded-3 cursor-pointer text-center d-flex justify-content-center py-2 px-3',
|
|
42
|
-
);
|
|
43
|
-
readonly tabTextClass = input<string>('fs-16');
|
|
44
|
-
readonly tabIconClass = input<string>('fs-6');
|
|
45
|
-
readonly eventIconClass = input<string>('fs-6 text-primary pe-2');
|
|
46
|
-
readonly eventNameBoldClass = input<string>('fw-medium');
|
|
47
|
-
readonly eventDescriptionClass = input<string>('text-primary fw-medium');
|
|
48
|
-
readonly propertyBadgeClass = input<string>('property-badge cursor-pointer me-1');
|
|
49
|
-
readonly noEventsTextClass = input<string>('text-center my-4 text-light-gray');
|
|
50
|
-
readonly warningTextClass = input<string>('text-center my-2 text-light-gray');
|
|
51
|
-
readonly dateFormat = input<string>('dd/MM/yyyy');
|
|
52
|
-
|
|
53
|
-
readonly visibleChange = output<boolean>();
|
|
54
|
-
readonly tabSelected = output<EventTypeEnum | null>();
|
|
55
|
-
readonly closed = output<void>();
|
|
56
|
-
readonly popupVisible = signal<boolean>(false);
|
|
57
|
-
|
|
58
|
-
private readonly syncVisibleEffect = effect(() => {
|
|
59
|
-
this.popupVisible.set(this.visible());
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
onTabSelected(eventType: EventTypeEnum | null) {
|
|
63
|
-
this.tabSelected.emit(eventType);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
onPopupVisibleChanged(visible: boolean): void {
|
|
67
|
-
this.popupVisible.set(visible);
|
|
68
|
-
this.visibleChange.emit(visible);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
onPopupClose() {
|
|
72
|
-
this.closed.emit();
|
|
73
|
-
}
|
|
74
|
-
}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
<!-- Card View -->
|
|
2
|
-
<div [class]="cardClass()">
|
|
3
|
-
<hr-card-header [icon]="calendarStar" [title]="'UpcomingEvents' | translate"></hr-card-header>
|
|
4
|
-
|
|
5
|
-
@if (birthdays().length > 0 || holidays().length > 0) {
|
|
6
|
-
<hr-event-tab-bar
|
|
7
|
-
[selectedType]="selectedEventType()"
|
|
8
|
-
[selectedLanguage]="selectedLanguage()"
|
|
9
|
-
[tabSelectedClass]="tabSelectedClass()"
|
|
10
|
-
[tabNotSelectedClass]="tabNotSelectedClass()"
|
|
11
|
-
[tabTextSelectedClass]="tabTextSelectedClass()"
|
|
12
|
-
[tabTextNotSelectedClass]="tabTextNotSelectedClass()"
|
|
13
|
-
[containerClass]="tabContainerClass()"
|
|
14
|
-
[tabItemClass]="tabItemClass()"
|
|
15
|
-
[tabTextClass]="tabTextClass()"
|
|
16
|
-
[tabIconClass]="tabIconClass()"
|
|
17
|
-
(tabSelected)="onTabClick($event)"
|
|
18
|
-
></hr-event-tab-bar>
|
|
19
|
-
|
|
20
|
-
<hr-event-item
|
|
21
|
-
[events]="filteredEvents()"
|
|
22
|
-
[showDates]="false"
|
|
23
|
-
[showProperty]="showProperty()"
|
|
24
|
-
[selectedLanguage]="selectedLanguage()"
|
|
25
|
-
[selectedEventType]="selectedEventType()"
|
|
26
|
-
[weekendWarningDescription]="weekendWarning()"
|
|
27
|
-
[eventIconClass]="eventIconClass()"
|
|
28
|
-
[eventNameBoldClass]="eventNameBoldClass()"
|
|
29
|
-
[eventDescriptionClass]="eventDescriptionClass()"
|
|
30
|
-
[propertyBadgeClass]="propertyBadgeClass()"
|
|
31
|
-
[noEventsTextClass]="noEventsTextClass()"
|
|
32
|
-
[warningTextClass]="warningTextClass()"
|
|
33
|
-
[dateFormat]="dateFormat()"
|
|
34
|
-
></hr-event-item>
|
|
35
|
-
|
|
36
|
-
<div [class]="viewAllContainerClass()">
|
|
37
|
-
<a [class]="viewAllLinkClass()" (click)="showPopup()">{{ 'ViewAll' | translate }}</a>
|
|
38
|
-
</div>
|
|
39
|
-
} @else {
|
|
40
|
-
<div [class]="noEventsTextClass()">{{ 'NoEvents' | translate }}</div>
|
|
41
|
-
}
|
|
42
|
-
</div>
|
|
43
|
-
|
|
44
|
-
<!-- Popup -->
|
|
45
|
-
<hr-upcoming-events-popup
|
|
46
|
-
[visible]="popupVisible()"
|
|
47
|
-
[events]="popupEvents()"
|
|
48
|
-
[hasBirthdays]="birthdays().length > 0"
|
|
49
|
-
[hasHolidays]="holidays().length > 0"
|
|
50
|
-
[isLoading]="false"
|
|
51
|
-
[selectedLanguage]="selectedLanguage()"
|
|
52
|
-
[showProperty]="showProperty()"
|
|
53
|
-
[weekendWarningDescription]="weekendWarning()"
|
|
54
|
-
[popupTitle]="'UpcomingEvents' | translate"
|
|
55
|
-
[selectedEventType]="selectedPopupEventType()"
|
|
56
|
-
[tabSelectedClass]="tabSelectedClass()"
|
|
57
|
-
[tabNotSelectedClass]="tabNotSelectedClass()"
|
|
58
|
-
[tabTextSelectedClass]="tabTextSelectedClass()"
|
|
59
|
-
[tabTextNotSelectedClass]="tabTextNotSelectedClass()"
|
|
60
|
-
[tabContainerClass]="tabContainerClass()"
|
|
61
|
-
[tabItemClass]="tabItemClass()"
|
|
62
|
-
[tabTextClass]="tabTextClass()"
|
|
63
|
-
[tabIconClass]="tabIconClass()"
|
|
64
|
-
[eventIconClass]="eventIconClass()"
|
|
65
|
-
[eventNameBoldClass]="eventNameBoldClass()"
|
|
66
|
-
[eventDescriptionClass]="eventDescriptionClass()"
|
|
67
|
-
[propertyBadgeClass]="propertyBadgeClass()"
|
|
68
|
-
[noEventsTextClass]="noEventsTextClass()"
|
|
69
|
-
[warningTextClass]="warningTextClass()"
|
|
70
|
-
[dateFormat]="dateFormat()"
|
|
71
|
-
(visibleChange)="onPopupVisibleChange($event)"
|
|
72
|
-
(tabSelected)="onPopupTabClick($event)"
|
|
73
|
-
(closed)="onPopupClose()"
|
|
74
|
-
></hr-upcoming-events-popup>
|