@skysoftware-co/bayan-hr-widgets-ui 2.0.20 → 2.0.22

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.
Files changed (104) hide show
  1. package/fesm2022/skysoftware-co-bayan-hr-widgets-ui.mjs +4808 -0
  2. package/fesm2022/skysoftware-co-bayan-hr-widgets-ui.mjs.map +1 -0
  3. package/package.json +15 -3
  4. package/types/skysoftware-co-bayan-hr-widgets-ui.d.ts +1308 -0
  5. package/ng-package.json +0 -9
  6. package/src/assets/i18n/ar.json +0 -166
  7. package/src/assets/i18n/en.json +0 -166
  8. package/src/assets/i18n/fr.json +0 -166
  9. package/src/lib/my-calendar-widget/my-calendar-widget.component.html +0 -25
  10. package/src/lib/my-calendar-widget/my-calendar-widget.component.ts +0 -220
  11. package/src/lib/my-main-details-widget/my-main-details-widget.component.html +0 -157
  12. package/src/lib/my-main-details-widget/my-main-details-widget.component.ts +0 -179
  13. package/src/lib/my-next-week-vacation-insights-widget/components/next-week-vacation-insights-popup/next-week-vacation-insights-popup.component.html +0 -131
  14. package/src/lib/my-next-week-vacation-insights-widget/components/next-week-vacation-insights-popup/next-week-vacation-insights-popup.component.ts +0 -119
  15. package/src/lib/my-next-week-vacation-insights-widget/my-next-week-vacation-insights-widget.component.html +0 -35
  16. package/src/lib/my-next-week-vacation-insights-widget/my-next-week-vacation-insights-widget.component.ts +0 -110
  17. package/src/lib/my-profile/address-widget/my-profile-address-widget.component.html +0 -57
  18. package/src/lib/my-profile/address-widget/my-profile-address-widget.component.ts +0 -70
  19. package/src/lib/my-profile/bank-info-widget/my-profile-bank-info-widget.component.html +0 -101
  20. package/src/lib/my-profile/bank-info-widget/my-profile-bank-info-widget.component.ts +0 -89
  21. package/src/lib/my-profile/contact-widget/my-profile-contact-widget.component.html +0 -89
  22. package/src/lib/my-profile/contact-widget/my-profile-contact-widget.component.ts +0 -78
  23. package/src/lib/my-profile/contract-widget/my-profile-contract-widget.component.html +0 -63
  24. package/src/lib/my-profile/contract-widget/my-profile-contract-widget.component.ts +0 -73
  25. package/src/lib/my-profile/degrees-widget/my-profile-degrees-widget-component.html +0 -86
  26. package/src/lib/my-profile/degrees-widget/my-profile-degrees-widget-component.ts +0 -98
  27. package/src/lib/my-profile/dependents-documents-widget/my-profile-dependents-documents-widget.html +0 -83
  28. package/src/lib/my-profile/dependents-documents-widget/my-profile-dependents-documents-widget.ts +0 -126
  29. package/src/lib/my-profile/documents-widgets/components/document-card/document-card.component.html +0 -53
  30. package/src/lib/my-profile/documents-widgets/components/document-card/document-card.component.ts +0 -50
  31. package/src/lib/my-profile/documents-widgets/components/document-row/document-row.component.html +0 -48
  32. package/src/lib/my-profile/documents-widgets/components/document-row/document-row.component.ts +0 -44
  33. package/src/lib/my-profile/documents-widgets/components/document-tablet-card/document-tablet-card.component.html +0 -46
  34. package/src/lib/my-profile/documents-widgets/components/document-tablet-card/document-tablet-card.component.ts +0 -47
  35. package/src/lib/my-profile/employee-dependents-widget/my-profile-employee-dependents-component.html +0 -50
  36. package/src/lib/my-profile/employee-dependents-widget/my-profile-employee-dependents-component.ts +0 -63
  37. package/src/lib/my-profile/entitlements-others-widget/my-profile-entitlements-others-widget.component.html +0 -26
  38. package/src/lib/my-profile/entitlements-others-widget/my-profile-entitlements-others-widget.component.ts +0 -66
  39. package/src/lib/my-profile/experiences-widget/my-profile-experiences-widget-component.html +0 -93
  40. package/src/lib/my-profile/experiences-widget/my-profile-experiences-widget-component.ts +0 -102
  41. package/src/lib/my-profile/indemnity-widget/my-profile-indemnity-widget.component.html +0 -49
  42. package/src/lib/my-profile/indemnity-widget/my-profile-indemnity-widget.component.ts +0 -79
  43. package/src/lib/my-profile/job-info-widget/my-profile-job-info-widget.component.html +0 -71
  44. package/src/lib/my-profile/job-info-widget/my-profile-job-info-widget.component.ts +0 -73
  45. package/src/lib/my-profile/languages-widget/my-profile-languages-widget.component.html +0 -23
  46. package/src/lib/my-profile/languages-widget/my-profile-languages-widget.component.ts +0 -70
  47. package/src/lib/my-profile/medical-insurance-widget/components/medical-insurance-card/medical-insurance-card.component.html +0 -18
  48. package/src/lib/my-profile/medical-insurance-widget/components/medical-insurance-card/medical-insurance-card.component.ts +0 -29
  49. package/src/lib/my-profile/medical-insurance-widget/my-profile-medical-insurance-widget.component.html +0 -52
  50. package/src/lib/my-profile/medical-insurance-widget/my-profile-medical-insurance-widget.component.ts +0 -103
  51. package/src/lib/my-profile/official-documents-widget/my-profile-official-documents-widget.html +0 -82
  52. package/src/lib/my-profile/official-documents-widget/my-profile-official-documents-widget.ts +0 -119
  53. package/src/lib/my-profile/other-nationalities-widget/my-profile-other-nationalities-widget.component.html +0 -23
  54. package/src/lib/my-profile/other-nationalities-widget/my-profile-other-nationalities-widget.component.ts +0 -70
  55. package/src/lib/my-profile/personal-info-main-widget/my-profile-personal-info-main-widget.component.html +0 -115
  56. package/src/lib/my-profile/personal-info-main-widget/my-profile-personal-info-main-widget.component.ts +0 -75
  57. package/src/lib/my-profile/salary-widget/my-profile-salary-widget.component.html +0 -37
  58. package/src/lib/my-profile/salary-widget/my-profile-salary-widget.component.ts +0 -85
  59. package/src/lib/my-profile/service-charge-widget/my-profile-service-charge-widget.component.html +0 -16
  60. package/src/lib/my-profile/service-charge-widget/my-profile-service-charge-widget.component.ts +0 -101
  61. package/src/lib/my-profile/ticket-widget/components/ticket-card/ticket-card.component.html +0 -23
  62. package/src/lib/my-profile/ticket-widget/components/ticket-card/ticket-card.component.ts +0 -26
  63. package/src/lib/my-profile/ticket-widget/my-profile-ticket-widget.component.html +0 -68
  64. package/src/lib/my-profile/ticket-widget/my-profile-ticket-widget.component.ts +0 -93
  65. package/src/lib/my-profile/vacations-widget/my-profile-vacations-widget.component.html +0 -34
  66. package/src/lib/my-profile/vacations-widget/my-profile-vacations-widget.component.ts +0 -66
  67. package/src/lib/my-team-subordinates-popup-widget/components/employee-main-info-card/employee-information-card.component.ts +0 -65
  68. package/src/lib/my-team-subordinates-popup-widget/components/employee-main-info-card/employee-main-info-card.component.html +0 -57
  69. package/src/lib/my-team-subordinates-popup-widget/components/my-team-subordinates-popup/my-team-popup.component.html +0 -109
  70. package/src/lib/my-team-subordinates-popup-widget/components/my-team-subordinates-popup/my-team-popup.component.ts +0 -297
  71. package/src/lib/my-upcoming-events-widget/components/event-item/event-item.component.html +0 -53
  72. package/src/lib/my-upcoming-events-widget/components/event-item/event-item.component.ts +0 -42
  73. package/src/lib/my-upcoming-events-widget/components/event-tab-bar/event-tab-bar.component.html +0 -21
  74. package/src/lib/my-upcoming-events-widget/components/event-tab-bar/event-tab-bar.component.ts +0 -44
  75. package/src/lib/my-upcoming-events-widget/components/events-popup/events-popup.component.html +0 -67
  76. package/src/lib/my-upcoming-events-widget/components/events-popup/events-popup.component.ts +0 -74
  77. package/src/lib/my-upcoming-events-widget/my-upcoming-events-widget.component.html +0 -74
  78. package/src/lib/my-upcoming-events-widget/my-upcoming-events-widget.component.ts +0 -199
  79. package/src/lib/services/hr-self-widgets.service.ts +0 -624
  80. package/src/lib/shared/components/card-header/card-header.component.html +0 -4
  81. package/src/lib/shared/components/card-header/card-header.component.ts +0 -18
  82. package/src/lib/shared/components/hr-employee-calendar/hr-employee-calendar.component.html +0 -47
  83. package/src/lib/shared/components/hr-employee-calendar/hr-employee-calendar.component.ts +0 -193
  84. package/src/lib/shared/components/info-field/info-field.component.html +0 -2
  85. package/src/lib/shared/components/info-field/info-field.component.ts +0 -20
  86. package/src/lib/shared/components/widget-card/widget-card-component.html +0 -3
  87. package/src/lib/shared/components/widget-card/widget-card-component.ts +0 -17
  88. package/src/lib/shared/pipes/translate.pipe.ts +0 -34
  89. package/src/lib/shared/services/bank-information-cache.service.ts +0 -29
  90. package/src/lib/shared/services/common-methods.service.ts +0 -33
  91. package/src/lib/shared/services/constants.service.ts +0 -12
  92. package/src/lib/shared/services/entitlements-cache.service.ts +0 -94
  93. package/src/lib/shared/services/job-information-cache.service.ts +0 -72
  94. package/src/lib/shared/services/my-team-popup.service.ts +0 -34
  95. package/src/lib/shared/services/personal-information-cache.service.ts +0 -77
  96. package/src/lib/shared/services/profile-documents-cache-service.ts +0 -44
  97. package/src/lib/shared/services/profile-employee-dependents-cach.ts +0 -37
  98. package/src/lib/shared/services/qualifications-cache.service.ts +0 -45
  99. package/src/lib/shared/services/translate.service.ts +0 -35
  100. package/src/lib/shared/types/common.ts +0 -359
  101. package/src/public-api.ts +0 -35
  102. package/tsconfig.lib.json +0 -11
  103. package/tsconfig.lib.prod.json +0 -9
  104. package/tsconfig.spec.json +0 -8
@@ -1,49 +0,0 @@
1
- <sky-section-divider
2
- [fontAwesomeIcon]="indemnityIcon()"
3
- [text]="sectionTitle() | translate | uppercase"
4
- [iconClass]="headerIconClass()"
5
- [textClass]="headerTextClass()"
6
- [dividerClass]="headerDividerClass()"
7
- ></sky-section-divider>
8
-
9
- @if (indemnityDetails()) {
10
- <div [class]="rowClass()">
11
- <div [class]="columnClass()">
12
- <hr-info-field
13
- labelKey="IndemnityEligibility"
14
- [value]="(indemnityDetails()!.IsEligibleForIndemnity ? 'Eligible' : 'NotEligible') | translate"
15
- [labelClass]="labelClass()"
16
- [valueClass]="valueClass()"
17
- ></hr-info-field>
18
- </div>
19
- <div [class]="columnClass()">
20
- <hr-info-field
21
- labelKey="ServiceYears"
22
- [value]="'' + (indemnityDetails()!.IndemnityServiceYears ?? '')"
23
- [labelClass]="labelClass()"
24
- [valueClass]="valueClass()"
25
- ></hr-info-field>
26
- </div>
27
-
28
- <div [class]="topSpacingColumnClass()">
29
- <hr-info-field
30
- labelKey="StartDate"
31
- [value]="indemnityDetails()!.IndemnityStartDate | date: dateFormat()"
32
- [labelClass]="labelClass()"
33
- [valueClass]="valueClass()"
34
- ></hr-info-field>
35
- </div>
36
- </div>
37
- } @else {
38
- <sky-empty-design-card
39
- [containerClass]="emptyStateContainerClass()"
40
- [cardBodyClass]="''"
41
- [cardBodyContainerClass]="''"
42
- [visibleIcon]="false"
43
- [visibleQuickAction]="false"
44
- [emptyTextClass]="emptyStateTextClass()"
45
- [emptyText]="
46
- isLoading() ? (sectionTitle() | translate) + ' ' + ('IsLoading' | translate) : ('There\'sNoInformationInThisSectionYet' | translate)
47
- "
48
- ></sky-empty-design-card>
49
- }
@@ -1,79 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, OnInit, inject, input, output, signal } from '@angular/core';
3
- import { HRTranslatePipe } from '../../shared/pipes/translate.pipe';
4
- import { faFileSignature } from '@fortawesome/pro-light-svg-icons';
5
- import { SkyEmptyDesignCardComponent, SkySectionDividerComponent } from '@skysoftware-co/sky-components-ui';
6
- import { HRSelfWidgetsService } from '../../services/hr-self-widgets.service';
7
- import { HRInfoFieldComponent } from '../../shared/components/info-field/info-field.component';
8
- import { EntitlementsIndemnity } from '../../shared/types/common';
9
-
10
- @Component({
11
- selector: 'hr-my-profile-indemnity-widget',
12
- standalone: true,
13
- imports: [
14
- CommonModule,
15
- HRTranslatePipe,
16
- SkySectionDividerComponent,
17
- SkyEmptyDesignCardComponent,
18
- HRInfoFieldComponent,
19
- ],
20
- templateUrl: './my-profile-indemnity-widget.component.html',
21
- changeDetection: ChangeDetectionStrategy.OnPush,
22
- })
23
- export class MyProfileIndemnityWidgetComponent implements OnInit {
24
- readonly baseUrl = input.required<string>();
25
- readonly currencyCode = input<string>('');
26
- readonly currencyDecimals = input<number>(0);
27
- readonly sectionTitle = input<string>('Indemnity');
28
- readonly indemnityIcon = input(faFileSignature);
29
-
30
- readonly headerIconClass = input<string>('primary-icon-xl');
31
- readonly headerTextClass = input<string>('mt-2 field-secondary-label-lg');
32
- readonly headerDividerClass = input<string>('flex-grow-1 ms-2');
33
- readonly rowClass = input<string>('row mt-4');
34
- readonly columnClass = input<string>('col-6');
35
- readonly topSpacingColumnClass = input<string>('col-6 mt-4');
36
- readonly labelClass = input<string>('field-secondary-label-sm');
37
- readonly valueClass = input<string>('fs-14 fw-meduim');
38
- readonly dateFormat = input<string>('dd/MM/yyyy');
39
- readonly emptyStateContainerClass = input<string>(
40
- 'd-flex flex-column justify-content-center align-items-center my-5',
41
- );
42
- readonly emptyStateTextClass = input<string>('field-secondary-label-md');
43
-
44
- readonly isLoadingChanged = output<boolean>();
45
- readonly errorOccurred = output<string>();
46
- readonly hasDataChanged = output<boolean>();
47
-
48
- readonly indemnityDetails = signal<EntitlementsIndemnity | null>(null);
49
- readonly isLoading = signal(true);
50
-
51
- private readonly selfWidgetsService = inject(HRSelfWidgetsService);
52
-
53
- ngOnInit(): void {
54
- if (!this.baseUrl()) {
55
- this.isLoading.set(false);
56
- return;
57
- }
58
- this.loadData();
59
- }
60
-
61
- private loadData(): void {
62
- this.isLoadingChanged.emit(true);
63
- this.selfWidgetsService.getEntitlementsIndemnity(this.baseUrl()).subscribe({
64
- next: data => {
65
- this.indemnityDetails.set(data);
66
- this.isLoading.set(false);
67
- this.hasDataChanged.emit(!!this.indemnityDetails());
68
- this.isLoadingChanged.emit(false);
69
- },
70
- error: error => {
71
- this.indemnityDetails.set(null);
72
- this.isLoading.set(false);
73
- this.hasDataChanged.emit(false);
74
- this.errorOccurred.emit(error?.error?.ResponseData?.Errors?.[0]?.Message);
75
- this.isLoadingChanged.emit(false);
76
- },
77
- });
78
- }
79
- }
@@ -1,71 +0,0 @@
1
- <sky-section-divider
2
- [fontAwesomeIcon]="mainIcon()"
3
- [text]="sectionTitle() | translate | uppercase"
4
- [iconClass]="headerIconClass()"
5
- [textClass]="headerTextClass()"
6
- [dividerClass]="headerDividerClass()"
7
- ></sky-section-divider>
8
-
9
- @if (jobInformationMain()) {
10
- <div [ngClass]="rowClass()">
11
- <div [ngClass]="columnClass()">
12
- <hr-info-field
13
- [labelKey]="'AdminUnit'"
14
- [value]="jobInformationMain()!.AdminUnitName"
15
- [labelClass]="labelClass()"
16
- [valueClass]="valueClass()"
17
- ></hr-info-field>
18
- </div>
19
- <div [ngClass]="columnClass()">
20
- <hr-info-field
21
- [labelKey]="'Position'"
22
- [value]="jobInformationMain()!.PositionName"
23
- [labelClass]="labelClass()"
24
- [valueClass]="valueClass()"
25
- ></hr-info-field>
26
- </div>
27
- <div [ngClass]="responsiveTopSpacingColumnClass()">
28
- <hr-info-field
29
- [labelKey]="'Grade'"
30
- [value]="jobInformationMain()!.GradeName"
31
- [labelClass]="labelClass()"
32
- [valueClass]="valueClass()"
33
- ></hr-info-field>
34
- </div>
35
-
36
- <div [ngClass]="topSpacingBottomMdSpacingColumnClass()">
37
- <hr-info-field
38
- [labelKey]="'JoiningDate'"
39
- [value]="jobInformationMain()!.JoiningDate ? (jobInformationMain()!.JoiningDate | date: 'dd/MM/yyyy') : null"
40
- [labelClass]="labelClass()"
41
- [valueClass]="valueClass()"
42
- ></hr-info-field>
43
- </div>
44
- <div [ngClass]="topSpacingBottomMdSpacingColumnClass()">
45
- <hr-info-field
46
- [labelKey]="'CorporateJoiningDate'"
47
- [value]="jobInformationMain()!.CorporateJoiningDate ? (jobInformationMain()!.CorporateJoiningDate | date: 'dd/MM/yyyy') : null"
48
- [labelClass]="labelClass()"
49
- [valueClass]="valueClass()"
50
- ></hr-info-field>
51
- </div>
52
- <div [ngClass]="topSpacingBottomSpacingColumnClass()">
53
- <hr-info-field
54
- [labelKey]="'Sponsor'"
55
- [value]="jobInformationMain()!.SponsorName"
56
- [labelClass]="labelClass()"
57
- [valueClass]="valueClass()"
58
- ></hr-info-field>
59
- </div>
60
- </div>
61
- } @else {
62
- <sky-empty-design-card
63
- [visibleIcon]="false"
64
- [visibleQuickAction]="false"
65
- [containerClass]="emptyStateContainerClass()"
66
- [cardBodyClass]="''"
67
- [cardBodyContainerClass]="''"
68
- [emptyTextClass]="emptyStateTextClass()"
69
- [emptyText]="isLoading() ? (sectionTitle() | translate) + ' ' + ('IsLoading' | translate) : ('ThereIsNoJobMainYet' | translate)"
70
- ></sky-empty-design-card>
71
- }
@@ -1,73 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, OnInit, inject, input, output, signal } from '@angular/core';
3
- import { faFileSignature } from '@fortawesome/pro-light-svg-icons';
4
- import { SkyEmptyDesignCardComponent, SkySectionDividerComponent } from '@skysoftware-co/sky-components-ui';
5
- import { HRSelfWidgetsService } from '../../services/hr-self-widgets.service';
6
- import { HRTranslatePipe } from '../../shared/pipes/translate.pipe';
7
- import { JobInformationMain } from '../../shared/types/common';
8
- import { HRInfoFieldComponent } from '../../shared/components/info-field/info-field.component';
9
-
10
- @Component({
11
- selector: 'hr-my-profile-job-info-widget',
12
- standalone: true,
13
- imports: [
14
- CommonModule,
15
- HRTranslatePipe,
16
- SkySectionDividerComponent,
17
- SkyEmptyDesignCardComponent,
18
- HRInfoFieldComponent,
19
- ],
20
- templateUrl: './my-profile-job-info-widget.component.html',
21
- changeDetection: ChangeDetectionStrategy.OnPush,
22
- })
23
- export class MyProfileJobInfoWidgetComponent implements OnInit {
24
- readonly jobInformationMain = signal<JobInformationMain | null>(null);
25
- readonly isLoading = signal(true);
26
-
27
- readonly baseUrl = input.required<string>();
28
- readonly headerIconClass = input<string>('primary-icon-xl');
29
- readonly headerTextClass = input<string>('mt-2 field-secondary-label-lg');
30
- readonly headerDividerClass = input<string>('flex-grow-1 ms-2');
31
- readonly rowClass = input<string>('row mt-4');
32
- readonly columnClass = input<string>('col-md-4 col-6');
33
- readonly responsiveTopSpacingColumnClass = input<string>('col-md-4 col-6 mt-md-0 mt-4');
34
- readonly topSpacingBottomMdSpacingColumnClass = input<string>('col-md-4 col-6 mt-4 mb-md-5');
35
- readonly topSpacingBottomSpacingColumnClass = input<string>('col-md-4 col-6 mt-4 mb-5');
36
- readonly labelClass = input<string>('field-secondary-label-sm');
37
- readonly valueClass = input<string>('fs-14 fw-medium text-ellipsis-one-line');
38
- readonly emptyStateContainerClass = input<string>(
39
- 'd-flex flex-column justify-content-center align-items-center my-5',
40
- );
41
- readonly emptyStateTextClass = input<string>('field-secondary-label-md');
42
-
43
- readonly mainIcon = input(faFileSignature);
44
- readonly sectionTitle = input('JobInformation');
45
-
46
- readonly isLoadingChanged = output<boolean>();
47
- readonly errorOccurred = output<string>();
48
-
49
- private readonly hrSelfWidgetsService = inject(HRSelfWidgetsService);
50
-
51
- ngOnInit(): void {
52
- if (!this.baseUrl()) {
53
- this.isLoading.set(false);
54
- return;
55
- }
56
-
57
- this.isLoadingChanged.emit(true);
58
-
59
- this.hrSelfWidgetsService.getJobInformationMain(this.baseUrl()).subscribe({
60
- next: response => {
61
- this.isLoading.set(false);
62
- this.jobInformationMain.set(response);
63
- this.isLoadingChanged.emit(false);
64
- },
65
- error: error => {
66
- this.isLoading.set(false);
67
- this.jobInformationMain.set(null);
68
- this.isLoadingChanged.emit(false);
69
- this.errorOccurred.emit(error.error.ResponseData.Errors[0].Message);
70
- },
71
- });
72
- }
73
- }
@@ -1,23 +0,0 @@
1
- <sky-section-divider
2
- [fontAwesomeIcon]="languagesIcon()"
3
- [text]="sectionTitle() | translate | uppercase"
4
- [iconClass]="headerIconClass()"
5
- [textClass]="headerTextClass()"
6
- [dividerClass]="headerDividerClass()"
7
- ></sky-section-divider>
8
-
9
- @if ((languages()?.length ?? 0) > 0) {
10
- <div [ngClass]="contentTextClass()">
11
- {{ getLanguages() }}
12
- </div>
13
- } @else {
14
- <sky-empty-design-card
15
- [visibleIcon]="false"
16
- [visibleQuickAction]="false"
17
- [containerClass]="emptyStateContainerClass()"
18
- [cardBodyClass]="''"
19
- [cardBodyContainerClass]="''"
20
- [emptyTextClass]="emptyStateTextClass()"
21
- [emptyText]="isLoading() ? (sectionTitle() | translate) + ' ' + ('IsLoading' | translate) : ('ThereIsNoLanguagesYet' | translate)"
22
- ></sky-empty-design-card>
23
- }
@@ -1,70 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, OnInit, inject, input, output, signal } from '@angular/core';
3
- import { faLanguage } from '@fortawesome/pro-light-svg-icons';
4
- import { HRTranslatePipe } from '../../shared/pipes/translate.pipe';
5
- import { SkyEmptyDesignCardComponent, SkySectionDividerComponent } from '@skysoftware-co/sky-components-ui';
6
- import { HRSelfWidgetsService } from '../../services/hr-self-widgets.service';
7
-
8
- @Component({
9
- selector: 'hr-my-profile-languages-widget',
10
- standalone: true,
11
- imports: [CommonModule, HRTranslatePipe, SkySectionDividerComponent, SkyEmptyDesignCardComponent],
12
- templateUrl: './my-profile-languages-widget.component.html',
13
- changeDetection: ChangeDetectionStrategy.OnPush,
14
- })
15
- export class MyProfileLanguagesWidgetComponent implements OnInit {
16
- readonly languages = signal<string[] | null>(null);
17
- readonly isLoading = signal(true);
18
- readonly baseUrl = input<string>('');
19
- readonly headerIconClass = input<string>('primary-icon-xl');
20
- readonly headerTextClass = input<string>('fs-16 mt-2 text-secondary');
21
- readonly headerDividerClass = input<string>('flex-grow-1 ms-2');
22
- readonly contentTextClass = input<string>('text-dark-gray fs-14 fw-medium mt-4');
23
- readonly emptyStateContainerClass = input<string>(
24
- 'd-flex flex-column justify-content-center align-items-center my-5',
25
- );
26
- readonly emptyStateTextClass = input<string>('field-secondary-label-md');
27
- readonly hasDataChange = output<boolean>();
28
-
29
- readonly languagesIcon = input(faLanguage);
30
- readonly sectionTitle = input('languages');
31
-
32
- readonly isLoadingChanged = output<boolean>();
33
- readonly errorOccurred = output<string>();
34
-
35
- private readonly hrSelfWidgetsService = inject(HRSelfWidgetsService);
36
-
37
- ngOnInit(): void {
38
- if (!this.baseUrl()) {
39
- this.isLoading.set(false);
40
- this.emitHasData();
41
- return;
42
- }
43
-
44
- this.isLoadingChanged.emit(true);
45
-
46
- this.hrSelfWidgetsService.getPersonalInfoLanguages(this.baseUrl()).subscribe({
47
- next: response => {
48
- this.isLoading.set(false);
49
- this.isLoadingChanged.emit(false);
50
- this.languages.set(response ?? []);
51
- this.emitHasData();
52
- },
53
- error: error => {
54
- this.isLoading.set(false);
55
- this.languages.set([]);
56
- this.emitHasData();
57
- this.isLoadingChanged.emit(false);
58
- this.errorOccurred.emit(error.error.ResponseData.Errors[0].Message);
59
- },
60
- });
61
- }
62
-
63
- private emitHasData(): void {
64
- this.hasDataChange.emit((this.languages()?.length ?? 0) > 0);
65
- }
66
-
67
- getLanguages(): string {
68
- return this.languages()?.join(', ') || '-';
69
- }
70
- }
@@ -1,18 +0,0 @@
1
- <hr-widget-card [cardClass]="cardClass" [height]="cardHeight" [contentTemplate]="cardContent"></hr-widget-card>
2
-
3
- <ng-template #cardContent>
4
- <p [class]="nameClass" [ngClass]="isDependent ? 'd-flex' : ''">
5
- @if (isDependent) {
6
- <span class="text-ellipsis-one-line cursor-pointer" [title]="name">{{ name }}</span>
7
- <span class="mx-1">({{ typeName }})</span>
8
- } @else {
9
- {{ name }} ({{ 'Me' | translate }})
10
- }
11
- </p>
12
- @for (field of fields; track field.labelKey; let last = $last) {
13
- <p [class.mb-2]="!last">
14
- <span [class]="labelClass">{{ field.labelKey | translate }}:</span>
15
- <span [class]="valueClass">{{ field.value || (field.fallbackValue ?? '—') }}</span>
16
- </p>
17
- }
18
- </ng-template>
@@ -1,29 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component, Input } from '@angular/core';
3
- import { HRTranslatePipe } from '../../../../shared/pipes/translate.pipe';
4
- import { WidgetCardComponent } from '../../../../shared/components/widget-card/widget-card-component';
5
-
6
- export interface MedicalInsuranceField {
7
- labelKey: string;
8
- value: any;
9
- fallbackValue?: string;
10
- }
11
-
12
- @Component({
13
- selector: 'hr-medical-insurance-card',
14
- standalone: true,
15
- imports: [CommonModule, HRTranslatePipe, WidgetCardComponent],
16
- templateUrl: './medical-insurance-card.component.html',
17
- })
18
- export class HRMedicalInsuranceCardComponent {
19
- @Input({ required: true }) name: string | null = '';
20
- @Input() typeName: string | null = '';
21
- @Input() isDependent: boolean = false;
22
- @Input() fields: MedicalInsuranceField[] = [];
23
-
24
- @Input() cardClass: string = 'p-3 card-shadow h-100 border border-1 rounded rounded-2';
25
- @Input() cardHeight: number = 185;
26
- @Input() nameClass: string = 'text-dark fs-16 mb-2';
27
- @Input() labelClass: string = 'field-secondary-label-sm';
28
- @Input() valueClass: string = 'text-dark-gray mx-1';
29
- }
@@ -1,52 +0,0 @@
1
- <sky-section-divider
2
- [fontAwesomeIcon]="medicalInsuranceIcon()"
3
- [text]="sectionTitle() | translate | uppercase"
4
- [iconClass]="headerIconClass()"
5
- [textClass]="headerTextClass()"
6
- [dividerClass]="headerDividerClass()"
7
- ></sky-section-divider>
8
-
9
- @if (medicalInsuranceDetails()) {
10
- <div class="row mb-5">
11
- @if (medicalInsuranceDetails()!.EmployeeMedicalInsurance) {
12
- <div [class]="columnClass()" [style.height.px]="cardHeight()">
13
- <hr-medical-insurance-card
14
- [name]="medicalInsuranceDetails()?.EmployeeMedicalInsurance?.EmployeeFirstName || ''"
15
- [fields]="employeeFields()"
16
- [cardClass]="cardClass()"
17
- [cardHeight]="cardHeight()"
18
- [nameClass]="nameClass()"
19
- [labelClass]="labelClass()"
20
- [valueClass]="valueClass()"
21
- ></hr-medical-insurance-card>
22
- </div>
23
- }
24
- @for (dependent of medicalInsuranceDetails()!.DependentsMedicalInsurance; track dependent) {
25
- <div [class]="columnClass()" [style.height.px]="cardHeight()">
26
- <hr-medical-insurance-card
27
- [name]="dependent.DependentName"
28
- [typeName]="dependent.DependentTypeName"
29
- [isDependent]="true"
30
- [fields]="getDependentFields(dependent)"
31
- [cardClass]="cardClass()"
32
- [cardHeight]="cardHeight()"
33
- [nameClass]="nameClass()"
34
- [labelClass]="labelClass()"
35
- [valueClass]="valueClass()"
36
- ></hr-medical-insurance-card>
37
- </div>
38
- }
39
- </div>
40
- } @else {
41
- <sky-empty-design-card
42
- [containerClass]="emptyStateContainerClass()"
43
- [cardBodyClass]="''"
44
- [cardBodyContainerClass]="''"
45
- [visibleIcon]="false"
46
- [visibleQuickAction]="false"
47
- [emptyTextClass]="emptyStateTextClass()"
48
- [emptyText]="
49
- isLoading() ? (sectionTitle() | translate) + ' ' + ('IsLoading' | translate) : ('NotCoveredByMedicalInsurance' | translate)
50
- "
51
- ></sky-empty-design-card>
52
- }
@@ -1,103 +0,0 @@
1
- import { CommonModule, DatePipe } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, OnInit, inject, input, output, signal } from '@angular/core';
3
- import { HRTranslatePipe } from '../../shared/pipes/translate.pipe';
4
- import { faNotesMedical } from '@fortawesome/pro-light-svg-icons';
5
- import { SkyEmptyDesignCardComponent, SkySectionDividerComponent } from '@skysoftware-co/sky-components-ui';
6
- import { HRSelfWidgetsService } from '../../services/hr-self-widgets.service';
7
- import {
8
- HRMedicalInsuranceCardComponent,
9
- MedicalInsuranceField,
10
- } from './components/medical-insurance-card/medical-insurance-card.component';
11
- import { EntitlementsMedicalInsurance, DependentsMedicalInsurance } from '../../shared/types/common';
12
-
13
- @Component({
14
- selector: 'hr-my-profile-medical-insurance-widget',
15
- standalone: true,
16
- imports: [
17
- CommonModule,
18
- HRTranslatePipe,
19
- SkySectionDividerComponent,
20
- SkyEmptyDesignCardComponent,
21
- HRMedicalInsuranceCardComponent,
22
- ],
23
- templateUrl: './my-profile-medical-insurance-widget.component.html',
24
- changeDetection: ChangeDetectionStrategy.OnPush,
25
- })
26
- export class MyProfileMedicalInsuranceWidgetComponent implements OnInit {
27
- readonly baseUrl = input.required<string>();
28
- readonly sectionTitle = input<string>('MedicalInsurance');
29
- readonly medicalInsuranceIcon = input(faNotesMedical);
30
-
31
- readonly headerIconClass = input<string>('primary-icon-xl');
32
- readonly headerTextClass = input<string>('mt-2 field-secondary-label-lg');
33
- readonly headerDividerClass = input<string>('flex-grow-1 ms-2');
34
- readonly labelClass = input<string>('field-secondary-label-sm');
35
- readonly valueClass = input<string>('text-dark-gray mx-1');
36
- readonly columnClass = input<string>('col-lg-4 col-6 mt-4');
37
- readonly cardHeight = input<number>(185);
38
- readonly cardClass = input<string>('p-3 card-shadow h-100 border border-1 rounded rounded-2');
39
- readonly nameClass = input<string>('text-dark fs-16 mb-2');
40
- readonly dateFormat = input<string>('dd/MM/yyyy');
41
- readonly emptyStateContainerClass = input<string>(
42
- 'd-flex flex-column justify-content-center align-items-center my-5',
43
- );
44
- readonly emptyStateTextClass = input<string>('field-secondary-label-md');
45
-
46
- readonly isLoadingChanged = output<boolean>();
47
- readonly errorOccurred = output<string>();
48
-
49
- readonly medicalInsuranceDetails = signal<EntitlementsMedicalInsurance | null>(null);
50
- readonly isLoading = signal(true);
51
- readonly employeeFields = signal<MedicalInsuranceField[]>([]);
52
-
53
- private datePipe = new DatePipe('en-US');
54
-
55
- private readonly selfWidgetsService = inject(HRSelfWidgetsService);
56
-
57
- ngOnInit(): void {
58
- if (!this.baseUrl()) {
59
- this.isLoading.set(false);
60
- return;
61
- }
62
- this.loadData();
63
- }
64
-
65
- private loadData(): void {
66
- this.isLoadingChanged.emit(true);
67
- this.selfWidgetsService.getEntitlementsMedicalInsurance(this.baseUrl()).subscribe({
68
- next: data => {
69
- this.medicalInsuranceDetails.set(data);
70
- this.buildEmployeeFields();
71
- this.isLoading.set(false);
72
- this.isLoadingChanged.emit(false);
73
- },
74
- error: error => {
75
- this.medicalInsuranceDetails.set(null);
76
- this.isLoading.set(false);
77
- this.errorOccurred.emit(error?.error?.ResponseData?.Errors?.[0]?.Message);
78
- this.isLoadingChanged.emit(false);
79
- },
80
- });
81
- }
82
-
83
- private buildEmployeeFields(): void {
84
- const details = this.medicalInsuranceDetails();
85
- if (!details?.EmployeeMedicalInsurance) return;
86
- const emp = details.EmployeeMedicalInsurance;
87
- this.employeeFields.set([
88
- { labelKey: 'Class', value: emp.MedicalInsuranceClassName },
89
- { labelKey: 'Number', value: emp.MedicalInsuranceNumber },
90
- { labelKey: 'CoverageDate', value: this.datePipe.transform(emp.CoverageDate, this.dateFormat()) },
91
- { labelKey: 'TotalEmployeeShare', value: details.TotalEmployeeShare },
92
- { labelKey: 'TotalEmployerShare', value: details.TotalEmployerShare },
93
- ]);
94
- }
95
-
96
- getDependentFields(dependent: DependentsMedicalInsurance): MedicalInsuranceField[] {
97
- return [
98
- { labelKey: 'Class', value: dependent.MedicalInsuranceClassName },
99
- { labelKey: 'Number', value: dependent.MedicalInsuranceNumber },
100
- { labelKey: 'CoverageDate', value: this.datePipe.transform(dependent.CoverageDate, this.dateFormat()) },
101
- ];
102
- }
103
- }
@@ -1,82 +0,0 @@
1
- <sky-section-divider
2
- [fontAwesomeIcon]="icon()"
3
- [text]="sectionTitle() | translate | uppercase"
4
- [iconClass]="headerIconClass()"
5
- [textClass]="headerTextClass()"
6
- [dividerClass]="headerDividerClass()"
7
- ></sky-section-divider>
8
-
9
- <div class="mt-4">
10
- @if (documents().length) {
11
- <div [class]="!(isTablet() || isMobile()) ? cardClass() : ''">
12
- @if (!(isTablet() || isMobile())) {
13
- <hr-document-card
14
- [title]="employeeName() + ' (' + ('Me' | translate) + ')'"
15
- [documents]="documents()"
16
- [valueClass]="valueClass()"
17
- [viewIcon]="viewIcon()"
18
- [downloadIcon]="downloadIcon()"
19
- [viewIconClass]="viewIconClass()"
20
- [downloadIconClass]="downloadIconClass()"
21
- [titleContainerClass]="titleContainerClass()"
22
- [titleClass]="titleClass()"
23
- [labelClass]="labelClass()"
24
- [rowClass]="rowClass()"
25
- [dataColClass]="dataColClass()"
26
- [dataColSpacingClass]="dataColSpacingClass()"
27
- [dataRowClass]="dataRowClass()"
28
- [typeColClass]="typeColClass()"
29
- [numberColClass]="numberColClass()"
30
- [issueDateColClass]="issueDateColClass()"
31
- [expiryDateColClass]="expiryDateColClass()"
32
- [actionsColClass]="actionsColClass()"
33
- [actionsWrapperClass]="actionsWrapperClass()"
34
- [downloadContainerClass]="downloadContainerClass()"
35
- (attachmentView)="onAttachmentView($event)"
36
- (download)="onDownload($event)"
37
- ></hr-document-card>
38
- } @else {
39
- <div [class]="titleContainerClass()">
40
- <p [class]="titleClass()">{{ employeeName() }} ({{ 'Me' | translate }})</p>
41
- </div>
42
-
43
- <div class="row mx-1">
44
- @for (doc of documents(); track doc; let odd = $odd) {
45
- <div class="col-6 mb-2">
46
- <hr-document-tablet-card
47
- [doc]="doc"
48
- [isOdd]="odd"
49
- [viewIcon]="viewIcon()"
50
- [downloadIcon]="downloadIcon()"
51
- [labelClass]="labelClass()"
52
- [valueClass]="valueClass()"
53
- [downloadIconClass]="downloadIconClass()"
54
- [downloadContainerClass]="downloadContainerClass()"
55
- [downloadCountClass]="tabletDownloadCountClass()"
56
- [tabletContainerClass]="tabletContainerClass()"
57
- [tabletCardClass]="tabletCardClass()"
58
- [cardHeight]="tabletCardHeight()"
59
- [tabletColWithAttachmentClass]="tabletColWithAttachmentClass()"
60
- [tabletColWithoutAttachmentClass]="tabletColWithoutAttachmentClass()"
61
- [tabletActionsColClass]="tabletActionsColClass()"
62
- [tabletBottomRowSpacingClass]="tabletBottomRowSpacingClass()"
63
- (view)="onAttachmentView(doc)"
64
- (download)="onDownload(doc)"
65
- ></hr-document-tablet-card>
66
- </div>
67
- }
68
- </div>
69
- }
70
- </div>
71
- } @else {
72
- <sky-empty-design-card
73
- [visibleIcon]="false"
74
- [visibleQuickAction]="false"
75
- [containerClass]="emptyStateContainerClass()"
76
- [emptyTextClass]="emptyStateTextClass()"
77
- [emptyText]="
78
- isLoading() ? (sectionTitle() | translate) + ' ' + ('IsLoading' | translate) : ('ThereAreNoEmployeeDocumentsYet' | translate)
79
- "
80
- ></sky-empty-design-card>
81
- }
82
- </div>