tas-uell-sdk 0.3.1 → 0.3.2

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.
@@ -20,6 +20,7 @@ export declare class TasButtonComponent implements OnInit, OnDestroy {
20
20
  isStatusError: boolean;
21
21
  statusErrorMessage: string;
22
22
  isJoinable: boolean;
23
+ isWaitingRoomAvailable: boolean;
23
24
  shouldShowButton: boolean;
24
25
  private subscriptions;
25
26
  private currentModalRef;
@@ -36,6 +36,7 @@ export declare class TasVideocallComponent implements OnInit, OnDestroy, AfterVi
36
36
  waitingRoomUsers: WaitingRoomUser[];
37
37
  ownerHasJoined: boolean;
38
38
  hasVideoStream: boolean;
39
+ hasSubscriberConnected: boolean;
39
40
  dismissedUsers: number[];
40
41
  showLocationPanel: boolean;
41
42
  userHasLocation: boolean;
@@ -49,6 +50,7 @@ export declare class TasVideocallComponent implements OnInit, OnDestroy, AfterVi
49
50
  devModeEnabled: boolean;
50
51
  private geoPanelDismissed;
51
52
  private feedbackShown;
53
+ private previousAllGeoGranted;
52
54
  private subscriptions;
53
55
  constructor(activeModal: NgbActiveModal, tasService: TasService, geolocationService: GeolocationService, sanitizer: DomSanitizer, modalService: NgbModal);
54
56
  ngOnInit(): void;
@@ -77,7 +79,13 @@ export declare class TasVideocallComponent implements OnInit, OnDestroy, AfterVi
77
79
  get shouldShowLocationPanel(): boolean;
78
80
  /** Check if any user has denied geo */
79
81
  get hasAnyDenied(): boolean;
80
- /** Show user geo panel for owners when not hidden */
82
+ /** Show user geo panel for owners when:
83
+ * - User can admit (is owner/backoffice)
84
+ * - Panel was not manually dismissed by owner
85
+ * - Panel is not in hidden state
86
+ * - Another user has actually connected their video stream
87
+ * - Not all geo is granted
88
+ */
81
89
  get shouldShowUserGeoPanel(): boolean;
82
90
  /** Set user geo view state (for dev controls or close button) */
83
91
  setUserGeoViewState(state: UserGeoViewState): void;
@@ -6,11 +6,10 @@ import * as i2 from "./components/tas-videocall/tas-videocall.component";
6
6
  import * as i3 from "./components/tas-floating-call/tas-floating-call.component";
7
7
  import * as i4 from "./components/tas-waiting-room/tas-waiting-room.component";
8
8
  import * as i5 from "./components/tas-avatar/tas-avatar.component";
9
- import * as i6 from "./components/tas-incoming-appointment/tas-incoming-appointment.component";
10
- import * as i7 from "./components/tas-feedback-modal/tas-feedback-modal.component";
11
- import * as i8 from "@angular/common";
12
- import * as i9 from "@angular/forms";
13
- import * as i10 from "@ng-bootstrap/ng-bootstrap";
9
+ import * as i6 from "./components/tas-feedback-modal/tas-feedback-modal.component";
10
+ import * as i7 from "@angular/common";
11
+ import * as i8 from "@angular/forms";
12
+ import * as i9 from "@ng-bootstrap/ng-bootstrap";
14
13
  export declare class TasUellSdkModule {
15
14
  /**
16
15
  * Use forRoot() to configure the TAS SDK module with required dependencies.
@@ -46,6 +45,6 @@ export declare class TasUellSdkModule {
46
45
  httpClient: new (...args: any[]) => TasHttpClient;
47
46
  }): ModuleWithProviders<TasUellSdkModule>;
48
47
  static ɵfac: i0.ɵɵFactoryDeclaration<TasUellSdkModule, never>;
49
- static ɵmod: i0.ɵɵNgModuleDeclaration<TasUellSdkModule, [typeof i1.TasButtonComponent, typeof i2.TasVideocallComponent, typeof i3.TasFloatingCallComponent, typeof i4.TasWaitingRoomComponent, typeof i5.TasAvatarComponent, typeof i6.TasIncomingAppointmentComponent, typeof i7.TasFeedbackModalComponent], [typeof i8.CommonModule, typeof i9.FormsModule, typeof i10.NgbTooltipModule], [typeof i1.TasButtonComponent, typeof i2.TasVideocallComponent, typeof i3.TasFloatingCallComponent, typeof i4.TasWaitingRoomComponent, typeof i5.TasAvatarComponent, typeof i6.TasIncomingAppointmentComponent, typeof i7.TasFeedbackModalComponent]>;
48
+ static ɵmod: i0.ɵɵNgModuleDeclaration<TasUellSdkModule, [typeof i1.TasButtonComponent, typeof i2.TasVideocallComponent, typeof i3.TasFloatingCallComponent, typeof i4.TasWaitingRoomComponent, typeof i5.TasAvatarComponent, typeof i6.TasFeedbackModalComponent], [typeof i7.CommonModule, typeof i8.FormsModule, typeof i9.NgbTooltipModule], [typeof i1.TasButtonComponent, typeof i2.TasVideocallComponent, typeof i3.TasFloatingCallComponent, typeof i4.TasWaitingRoomComponent, typeof i5.TasAvatarComponent, typeof i6.TasFeedbackModalComponent]>;
50
49
  static ɵinj: i0.ɵɵInjectorDeclaration<TasUellSdkModule>;
51
50
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tas-uell-sdk",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "TAS (Telemedicine Assistance Service) SDK for Angular applications - Video call functionality using TokBox/Vonage",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0",
package/public-api.d.ts CHANGED
@@ -8,6 +8,5 @@ export * from './lib/components/tas-waiting-room/tas-waiting-room.component';
8
8
  export * from './lib/components/tas-videocall/tas-videocall.component';
9
9
  export * from './lib/components/tas-floating-call/tas-floating-call.component';
10
10
  export * from './lib/components/tas-avatar/tas-avatar.component';
11
- export * from './lib/components/tas-incoming-appointment/tas-incoming-appointment.component';
12
11
  export * from './lib/components/tas-feedback-modal/tas-feedback-modal.component';
13
12
  export * from './lib/tas-uell-sdk.module';
@@ -1,160 +0,0 @@
1
- import { Component, Input, Output, EventEmitter, } from '@angular/core';
2
- import { Subscription } from 'rxjs';
3
- import { AppointmentStatus, TasRoomType, TasBusinessRole, } from '../../interfaces/tas.interfaces';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "../../services/tas.service";
6
- import * as i2 from "../tas-avatar/tas-avatar.component";
7
- import * as i3 from "../tas-btn/tas-btn.component";
8
- import * as i4 from "@angular/common";
9
- export class TasIncomingAppointmentComponent {
10
- constructor(tasService) {
11
- this.tasService = tasService;
12
- // Passthrough inputs for tas-btn
13
- this.roomType = TasRoomType.TAS;
14
- this.businessRole = TasBusinessRole.USER;
15
- this.enterCall = new EventEmitter();
16
- this.appointments = [];
17
- this.isLoading = true;
18
- this.hasError = false;
19
- // The appointmentId from status API - only this appointment shows tas-btn
20
- this.activeAppointmentId = null;
21
- this.subscriptions = new Subscription();
22
- }
23
- ngOnInit() {
24
- this.loadAppointments();
25
- this.checkStatus();
26
- }
27
- ngOnDestroy() {
28
- this.subscriptions.unsubscribe();
29
- }
30
- loadAppointments() {
31
- this.subscriptions.add(this.tasService
32
- .getAppointments({
33
- fromDate: this.fromDate,
34
- toDate: this.toDate,
35
- entityId: this.entityId
36
- })
37
- .subscribe({
38
- next: (response) => {
39
- // Handle both array response and wrapped response (e.g., { content: [...] })
40
- const appointments = Array.isArray(response)
41
- ? response
42
- : response?.content || [];
43
- // Deduplicate by id and sort by date and startTime ascending (earliest first)
44
- const uniqueAppointments = appointments.filter((appt, index, self) => index === self.findIndex((a) => a.id === appt.id));
45
- this.appointments = uniqueAppointments.sort((a, b) => {
46
- const dateTimeA = `${a.date}T${a.startTime}`;
47
- const dateTimeB = `${b.date}T${b.startTime}`;
48
- return dateTimeB.localeCompare(dateTimeA);
49
- });
50
- this.isLoading = false;
51
- },
52
- error: () => {
53
- this.hasError = true;
54
- this.isLoading = false;
55
- },
56
- }));
57
- }
58
- /**
59
- * Check status endpoint to get the active appointmentId
60
- */
61
- checkStatus() {
62
- if (!this.tenant || !this.entityId) {
63
- return;
64
- }
65
- this.subscriptions.add(this.tasService
66
- .getProxyVideoStatus({
67
- roomType: this.roomType,
68
- entityId: this.entityId,
69
- tenant: this.tenant,
70
- businessRole: this.businessRole,
71
- })
72
- .subscribe({
73
- next: (response) => {
74
- // Store the appointmentId from status - tas-btn only shows for this one
75
- this.activeAppointmentId = response?.content?.appointmentId ?? null;
76
- },
77
- error: () => {
78
- this.activeAppointmentId = null;
79
- },
80
- }));
81
- }
82
- onEnterCall(appointment) {
83
- this.enterCall.emit(appointment);
84
- }
85
- /**
86
- * Check if tas-btn should be shown for an appointment.
87
- * Only shows when appointment.id matches the activeAppointmentId from status API.
88
- * tas-btn handles its own polling for joinable state.
89
- */
90
- shouldShowTasBtn(appointment) {
91
- const hasValidStatus = appointment.status === AppointmentStatus.CONFIRMED ||
92
- appointment.status === AppointmentStatus.ACTIVE;
93
- // Only show for the appointment that matches status API response
94
- return hasValidStatus && appointment.id === this.activeAppointmentId;
95
- }
96
- /**
97
- * TrackBy function for ngFor
98
- */
99
- trackByAppointmentId(index, appointment) {
100
- return appointment.id;
101
- }
102
- /**
103
- * Format date to Spanish format: "Lunes 8 de diciembre"
104
- */
105
- formatAppointmentDate(appointment) {
106
- const [year, month, day] = appointment.date.split('-').map(Number);
107
- const date = new Date(year, month - 1, day);
108
- const dayNames = [
109
- 'Domingo', 'Lunes', 'Martes', 'Miércoles',
110
- 'Jueves', 'Viernes', 'Sábado'
111
- ];
112
- const monthNames = [
113
- 'enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio',
114
- 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'
115
- ];
116
- const dayName = dayNames[date.getDay()];
117
- const dayNum = date.getDate();
118
- const monthName = monthNames[date.getMonth()];
119
- return `${dayName} ${dayNum} de ${monthName}`;
120
- }
121
- /**
122
- * Format time range: "9:00 - 9:30"
123
- */
124
- formatTimeRange(appointment) {
125
- return `${appointment.startTime} - ${appointment.endTime}`;
126
- }
127
- /**
128
- * Get the other participant in the call (not the current user)
129
- */
130
- getOtherParticipant(appointment) {
131
- if (!appointment.participants || appointment.participants.length === 0) {
132
- return appointment.title;
133
- }
134
- const otherParticipant = appointment.participants.find(p => p.userId !== this.currentUser?.id);
135
- return otherParticipant?.name || appointment.title;
136
- }
137
- }
138
- TasIncomingAppointmentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TasIncomingAppointmentComponent, deps: [{ token: i1.TasService }], target: i0.ɵɵFactoryTarget.Component });
139
- TasIncomingAppointmentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: TasIncomingAppointmentComponent, selector: "tas-incoming-appointment", inputs: { roomType: "roomType", entityId: "entityId", tenant: "tenant", businessRole: "businessRole", currentUser: "currentUser", fromDate: "fromDate", toDate: "toDate" }, outputs: { enterCall: "enterCall" }, ngImport: i0, template: "<div class=\"incoming-appointment-card\">\n <h3 class=\"card-title\">Pr\u00F3ximo turno</h3>\n\n <!-- Loading state -->\n <div class=\"card-content\" *ngIf=\"isLoading\">\n <div class=\"loading-spinner\"></div>\n </div>\n\n <!-- Empty state -->\n <div class=\"card-content empty-state\" *ngIf=\"!isLoading && appointments.length === 0\">\n <div class=\"icon-container\">\n <div class=\"icon-circle\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </div>\n <span class=\"sparkle sparkle-1\">\u2726</span>\n <span class=\"sparkle sparkle-2\">\u2726</span>\n <span class=\"sparkle sparkle-3\">\u2726</span>\n <span class=\"sparkle sparkle-4\">\u2726</span>\n </div>\n <h4 class=\"empty-title\">Todav\u00EDa no ten\u00E9s turnos agendados</h4>\n <p class=\"empty-subtitle\">\n En caso de que Medicina Laboral requiera una consulta, lo ver\u00E1s en esta secci\u00F3n.\n </p>\n </div>\n\n <!-- Appointments list -->\n <div class=\"card-content appointment-state\" *ngIf=\"!isLoading && appointments.length > 0\">\n <div class=\"appointment-card\" [ngClass]=\"{ 'cancelled': appt.status === 'CANCELLED' || appt.status === 'RESCHEDULED' }\" *ngFor=\"let appt of appointments; trackBy: trackByAppointmentId\">\n <div class=\"appointment-header\">\n <tas-avatar [name]=\"getOtherParticipant(appt)\" [size]=\"48\"></tas-avatar>\n <span class=\"doctor-name\">{{ getOtherParticipant(appt) }}</span>\n </div>\n <div class=\"appointment-details\">\n <div class=\"date-time\" [ngClass]=\"{ 'compact': !shouldShowTasBtn(appt), 'cancelled': appt.status === 'CANCELLED' || appt.status === 'RESCHEDULED' }\">\n <span class=\"date\">{{ formatAppointmentDate(appt) }}</span>\n <span class=\"time\">{{ formatTimeRange(appt) }}</span>\n </div>\n <tas-btn\n *ngIf=\"shouldShowTasBtn(appt)\"\n variant=\"teal\"\n buttonLabel=\"Ingresar\"\n [roomType]=\"appt.roomType\"\n [entityId]=\"appt.entityId\"\n [tenant]=\"tenant\"\n [businessRole]=\"businessRole\"\n [currentUser]=\"currentUser\"\n ></tas-btn>\n </div>\n </div>\n </div>\n</div>\n\n", styles: ["@charset \"UTF-8\";:host{display:block}.incoming-appointment-card{background:#ffffff;border-radius:12px;box-shadow:0 2px 8px #00000014;padding:24px;min-width:360px}.card-title{font-size:16px;font-weight:400;color:#6b7280;margin:0 0 24px}.card-content{display:flex;flex-direction:column;align-items:center}.loading-spinner{width:40px;height:40px;border:3px solid #e0f7fa;border-top-color:#0097a7;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.empty-state{text-align:center;padding:20px 0}.icon-container{position:relative;width:120px;height:120px;margin-bottom:24px}.icon-circle{width:100%;height:100%;background:#e0f7fa;border-radius:50%;display:flex;align-items:center;justify-content:center}.icon-circle i{font-size:40px;color:#0097a7}.sparkle{position:absolute;color:#0097a7;font-size:12px}.sparkle-1{top:10px;right:5px}.sparkle-2{top:0;right:30px}.sparkle-3{top:25px;left:0}.sparkle-4{bottom:20px;right:0}.empty-title{font-size:18px;font-weight:600;color:#1f2937;margin:0 0 12px}.empty-subtitle{font-size:14px;color:#6b7280;margin:0;max-width:320px;line-height:1.5}.appointment-state{align-items:stretch;gap:16px}.appointment-card{border-radius:12px;border:1px solid var(--Primary-White-Uell50, #8ED1D8);background:#F1FAFA;padding:1.5rem}.appointment-header{display:flex;align-items:center;gap:12px;margin-bottom:16px}.doctor-name{overflow:hidden;color:var(--Neutral-GreyDark, #383E52);text-overflow:ellipsis;font-size:16px;font-style:normal;font-weight:600;line-height:24px;letter-spacing:.016px}.appointment-details{display:flex;justify-content:space-between;align-items:flex-end}.date-time{display:flex;flex-direction:column;gap:4px}.date{color:var(--Neutral-GreyDark, #383E52);font-size:12px;font-style:normal;font-weight:600;line-height:16px;letter-spacing:.06px}.time{font-size:14px;color:var(--Neutral-GreyDark, #383E52);font-family:Inter;font-size:10px;font-style:normal;font-weight:400;line-height:14px;letter-spacing:.04px}.date-time.compact{flex-direction:row;align-items:center;gap:8px}.date-time.compact .date:after{content:\"\\b7\";margin-left:8px}.date-time.cancelled{color:#8a95ab}.date-time.cancelled .date{color:#8a95ab;text-decoration:line-through;font-size:14px}.date-time.cancelled .time{color:#8a95ab;text-decoration:line-through;font-size:12px}.appointment-card.cancelled{background:#f3f4f6;border:none}.appointment-card.cancelled .doctor-name{color:#8a95ab;text-decoration:line-through}.appointment-card.cancelled tas-avatar ::ng-deep .avatar{box-shadow:none}\n"], components: [{ type: i2.TasAvatarComponent, selector: "tas-avatar", inputs: ["name", "size"] }, { type: i3.TasButtonComponent, selector: "tas-btn", inputs: ["roomType", "entityId", "tenant", "businessRole", "currentUser", "variant", "buttonLabel"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
140
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TasIncomingAppointmentComponent, decorators: [{
141
- type: Component,
142
- args: [{ selector: 'tas-incoming-appointment', template: "<div class=\"incoming-appointment-card\">\n <h3 class=\"card-title\">Pr\u00F3ximo turno</h3>\n\n <!-- Loading state -->\n <div class=\"card-content\" *ngIf=\"isLoading\">\n <div class=\"loading-spinner\"></div>\n </div>\n\n <!-- Empty state -->\n <div class=\"card-content empty-state\" *ngIf=\"!isLoading && appointments.length === 0\">\n <div class=\"icon-container\">\n <div class=\"icon-circle\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </div>\n <span class=\"sparkle sparkle-1\">\u2726</span>\n <span class=\"sparkle sparkle-2\">\u2726</span>\n <span class=\"sparkle sparkle-3\">\u2726</span>\n <span class=\"sparkle sparkle-4\">\u2726</span>\n </div>\n <h4 class=\"empty-title\">Todav\u00EDa no ten\u00E9s turnos agendados</h4>\n <p class=\"empty-subtitle\">\n En caso de que Medicina Laboral requiera una consulta, lo ver\u00E1s en esta secci\u00F3n.\n </p>\n </div>\n\n <!-- Appointments list -->\n <div class=\"card-content appointment-state\" *ngIf=\"!isLoading && appointments.length > 0\">\n <div class=\"appointment-card\" [ngClass]=\"{ 'cancelled': appt.status === 'CANCELLED' || appt.status === 'RESCHEDULED' }\" *ngFor=\"let appt of appointments; trackBy: trackByAppointmentId\">\n <div class=\"appointment-header\">\n <tas-avatar [name]=\"getOtherParticipant(appt)\" [size]=\"48\"></tas-avatar>\n <span class=\"doctor-name\">{{ getOtherParticipant(appt) }}</span>\n </div>\n <div class=\"appointment-details\">\n <div class=\"date-time\" [ngClass]=\"{ 'compact': !shouldShowTasBtn(appt), 'cancelled': appt.status === 'CANCELLED' || appt.status === 'RESCHEDULED' }\">\n <span class=\"date\">{{ formatAppointmentDate(appt) }}</span>\n <span class=\"time\">{{ formatTimeRange(appt) }}</span>\n </div>\n <tas-btn\n *ngIf=\"shouldShowTasBtn(appt)\"\n variant=\"teal\"\n buttonLabel=\"Ingresar\"\n [roomType]=\"appt.roomType\"\n [entityId]=\"appt.entityId\"\n [tenant]=\"tenant\"\n [businessRole]=\"businessRole\"\n [currentUser]=\"currentUser\"\n ></tas-btn>\n </div>\n </div>\n </div>\n</div>\n\n", styles: ["@charset \"UTF-8\";:host{display:block}.incoming-appointment-card{background:#ffffff;border-radius:12px;box-shadow:0 2px 8px #00000014;padding:24px;min-width:360px}.card-title{font-size:16px;font-weight:400;color:#6b7280;margin:0 0 24px}.card-content{display:flex;flex-direction:column;align-items:center}.loading-spinner{width:40px;height:40px;border:3px solid #e0f7fa;border-top-color:#0097a7;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.empty-state{text-align:center;padding:20px 0}.icon-container{position:relative;width:120px;height:120px;margin-bottom:24px}.icon-circle{width:100%;height:100%;background:#e0f7fa;border-radius:50%;display:flex;align-items:center;justify-content:center}.icon-circle i{font-size:40px;color:#0097a7}.sparkle{position:absolute;color:#0097a7;font-size:12px}.sparkle-1{top:10px;right:5px}.sparkle-2{top:0;right:30px}.sparkle-3{top:25px;left:0}.sparkle-4{bottom:20px;right:0}.empty-title{font-size:18px;font-weight:600;color:#1f2937;margin:0 0 12px}.empty-subtitle{font-size:14px;color:#6b7280;margin:0;max-width:320px;line-height:1.5}.appointment-state{align-items:stretch;gap:16px}.appointment-card{border-radius:12px;border:1px solid var(--Primary-White-Uell50, #8ED1D8);background:#F1FAFA;padding:1.5rem}.appointment-header{display:flex;align-items:center;gap:12px;margin-bottom:16px}.doctor-name{overflow:hidden;color:var(--Neutral-GreyDark, #383E52);text-overflow:ellipsis;font-size:16px;font-style:normal;font-weight:600;line-height:24px;letter-spacing:.016px}.appointment-details{display:flex;justify-content:space-between;align-items:flex-end}.date-time{display:flex;flex-direction:column;gap:4px}.date{color:var(--Neutral-GreyDark, #383E52);font-size:12px;font-style:normal;font-weight:600;line-height:16px;letter-spacing:.06px}.time{font-size:14px;color:var(--Neutral-GreyDark, #383E52);font-family:Inter;font-size:10px;font-style:normal;font-weight:400;line-height:14px;letter-spacing:.04px}.date-time.compact{flex-direction:row;align-items:center;gap:8px}.date-time.compact .date:after{content:\"\\b7\";margin-left:8px}.date-time.cancelled{color:#8a95ab}.date-time.cancelled .date{color:#8a95ab;text-decoration:line-through;font-size:14px}.date-time.cancelled .time{color:#8a95ab;text-decoration:line-through;font-size:12px}.appointment-card.cancelled{background:#f3f4f6;border:none}.appointment-card.cancelled .doctor-name{color:#8a95ab;text-decoration:line-through}.appointment-card.cancelled tas-avatar ::ng-deep .avatar{box-shadow:none}\n"] }]
143
- }], ctorParameters: function () { return [{ type: i1.TasService }]; }, propDecorators: { roomType: [{
144
- type: Input
145
- }], entityId: [{
146
- type: Input
147
- }], tenant: [{
148
- type: Input
149
- }], businessRole: [{
150
- type: Input
151
- }], currentUser: [{
152
- type: Input
153
- }], fromDate: [{
154
- type: Input
155
- }], toDate: [{
156
- type: Input
157
- }], enterCall: [{
158
- type: Output
159
- }] } });
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLWluY29taW5nLWFwcG9pbnRtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rhcy11ZWxsLXNkay9zcmMvbGliL2NvbXBvbmVudHMvdGFzLWluY29taW5nLWFwcG9pbnRtZW50L3Rhcy1pbmNvbWluZy1hcHBvaW50bWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy1pbmNvbWluZy1hcHBvaW50bWVudC90YXMtaW5jb21pbmctYXBwb2ludG1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFHVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsV0FBVyxFQUNYLGVBQWUsR0FFaEIsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7O0FBT3pDLE1BQU0sT0FBTywrQkFBK0I7SUF1QjFDLFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUF0QjFDLGlDQUFpQztRQUN4QixhQUFRLEdBQWdCLFdBQVcsQ0FBQyxHQUFHLENBQUM7UUFHeEMsaUJBQVksR0FBb0IsZUFBZSxDQUFDLElBQUksQ0FBQztRQU9wRCxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFFbEQsaUJBQVksR0FBcUIsRUFBRSxDQUFDO1FBQ3BDLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUV4QiwwRUFBMEU7UUFDbkUsd0JBQW1CLEdBQWtCLElBQUksQ0FBQztRQUV6QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFFRSxDQUFDO0lBRTlDLFFBQVE7UUFDTixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3BCLElBQUksQ0FBQyxVQUFVO2FBQ1osZUFBZSxDQUFDO1lBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDeEIsQ0FBQzthQUNELFNBQVMsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUN0Qiw2RUFBNkU7Z0JBQzdFLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO29CQUMxQyxDQUFDLENBQUMsUUFBUTtvQkFDVixDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7Z0JBRTVCLDhFQUE4RTtnQkFDOUUsTUFBTSxrQkFBa0IsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUM1QyxDQUFDLElBQW9CLEVBQUUsS0FBYSxFQUFFLElBQXNCLEVBQUUsRUFBRSxDQUM5RCxLQUFLLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUNwRSxDQUFDO2dCQUNGLElBQUksQ0FBQyxZQUFZLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBaUIsRUFBRSxDQUFpQixFQUFFLEVBQUU7b0JBQ25GLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQzdDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQzdDLE9BQU8sU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDNUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDekIsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLENBQUM7U0FDRixDQUFDLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNLLFdBQVc7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xDLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsVUFBVTthQUNaLG1CQUFtQixDQUFDO1lBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtTQUNoQyxDQUFDO2FBQ0QsU0FBUyxDQUFDO1lBQ1QsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ2pCLHdFQUF3RTtnQkFDeEUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFFBQVEsRUFBRSxPQUFPLEVBQUUsYUFBYSxJQUFJLElBQUksQ0FBQztZQUN0RSxDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1lBQ2xDLENBQUM7U0FDRixDQUFDLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFTSxXQUFXLENBQUMsV0FBMkI7UUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxnQkFBZ0IsQ0FBQyxXQUEyQjtRQUNqRCxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsTUFBTSxLQUFLLGlCQUFpQixDQUFDLFNBQVM7WUFDbkQsV0FBVyxDQUFDLE1BQU0sS0FBSyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7UUFFdEUsaUVBQWlFO1FBQ2pFLE9BQU8sY0FBYyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ3ZFLENBQUM7SUFFRDs7T0FFRztJQUNJLG9CQUFvQixDQUFDLEtBQWEsRUFBRSxXQUEyQjtRQUNwRSxPQUFPLFdBQVcsQ0FBQyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0kscUJBQXFCLENBQUMsV0FBMkI7UUFDdEQsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25FLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRTVDLE1BQU0sUUFBUSxHQUFHO1lBQ2YsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVztZQUN6QyxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVE7U0FDOUIsQ0FBQztRQUNGLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTztZQUNyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVc7U0FDckUsQ0FBQztRQUVGLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN4QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDOUIsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRTlDLE9BQU8sR0FBRyxPQUFPLElBQUksTUFBTSxPQUFPLFNBQVMsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWUsQ0FBQyxXQUEyQjtRQUNoRCxPQUFPLEdBQUcsV0FBVyxDQUFDLFNBQVMsTUFBTSxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksbUJBQW1CLENBQUMsV0FBMkI7UUFDcEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLElBQUksV0FBVyxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3RFLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQztTQUMxQjtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FDdkMsQ0FBQztRQUVGLE9BQU8sZ0JBQWdCLEVBQUUsSUFBSSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUM7SUFDckQsQ0FBQzs7NkhBcEtVLCtCQUErQjtpSEFBL0IsK0JBQStCLGlSQ3ZCNUMsaXRFQW9EQTs0RkQ3QmEsK0JBQStCO2tCQUwzQyxTQUFTOytCQUNFLDBCQUEwQjtpR0FNM0IsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUksU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRhc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90YXMuc2VydmljZSc7XG5pbXBvcnQge1xuICBUYXNBcHBvaW50bWVudCxcbiAgQXBwb2ludG1lbnRTdGF0dXMsXG4gIFRhc1Jvb21UeXBlLFxuICBUYXNCdXNpbmVzc1JvbGUsXG4gIFRhc0N1cnJlbnRVc2VyLFxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3Rhcy5pbnRlcmZhY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGFzLWluY29taW5nLWFwcG9pbnRtZW50JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rhcy1pbmNvbWluZy1hcHBvaW50bWVudC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Rhcy1pbmNvbWluZy1hcHBvaW50bWVudC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBUYXNJbmNvbWluZ0FwcG9pbnRtZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvLyBQYXNzdGhyb3VnaCBpbnB1dHMgZm9yIHRhcy1idG5cbiAgQElucHV0KCkgcm9vbVR5cGU6IFRhc1Jvb21UeXBlID0gVGFzUm9vbVR5cGUuVEFTO1xuICBASW5wdXQoKSBlbnRpdHlJZCE6IG51bWJlcjtcbiAgQElucHV0KCkgdGVuYW50ITogc3RyaW5nO1xuICBASW5wdXQoKSBidXNpbmVzc1JvbGU6IFRhc0J1c2luZXNzUm9sZSA9IFRhc0J1c2luZXNzUm9sZS5VU0VSO1xuICBASW5wdXQoKSBjdXJyZW50VXNlciE6IFRhc0N1cnJlbnRVc2VyO1xuICBcbiAgLy8gRGF0ZSByYW5nZSBpbnB1dHMgZm9yIGZldGNoaW5nIGFwcG9pbnRtZW50c1xuICBASW5wdXQoKSBmcm9tRGF0ZSE6IHN0cmluZzsgLy8gWVlZWS1NTS1ERCBmb3JtYXRcbiAgQElucHV0KCkgdG9EYXRlITogc3RyaW5nOyAgIC8vIFlZWVktTU0tREQgZm9ybWF0XG5cbiAgQE91dHB1dCgpIGVudGVyQ2FsbCA9IG5ldyBFdmVudEVtaXR0ZXI8VGFzQXBwb2ludG1lbnQ+KCk7XG5cbiAgcHVibGljIGFwcG9pbnRtZW50czogVGFzQXBwb2ludG1lbnRbXSA9IFtdO1xuICBwdWJsaWMgaXNMb2FkaW5nID0gdHJ1ZTtcbiAgcHVibGljIGhhc0Vycm9yID0gZmFsc2U7XG5cbiAgLy8gVGhlIGFwcG9pbnRtZW50SWQgZnJvbSBzdGF0dXMgQVBJIC0gb25seSB0aGlzIGFwcG9pbnRtZW50IHNob3dzIHRhcy1idG5cbiAgcHVibGljIGFjdGl2ZUFwcG9pbnRtZW50SWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRhc1NlcnZpY2U6IFRhc1NlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkQXBwb2ludG1lbnRzKCk7XG4gICAgdGhpcy5jaGVja1N0YXR1cygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRBcHBvaW50bWVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudGFzU2VydmljZVxuICAgICAgICAuZ2V0QXBwb2ludG1lbnRzKHsgXG4gICAgICAgICAgZnJvbURhdGU6IHRoaXMuZnJvbURhdGUsIFxuICAgICAgICAgIHRvRGF0ZTogdGhpcy50b0RhdGUsIFxuICAgICAgICAgIGVudGl0eUlkOiB0aGlzLmVudGl0eUlkIFxuICAgICAgICB9KVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gSGFuZGxlIGJvdGggYXJyYXkgcmVzcG9uc2UgYW5kIHdyYXBwZWQgcmVzcG9uc2UgKGUuZy4sIHsgY29udGVudDogWy4uLl0gfSlcbiAgICAgICAgICAgIGNvbnN0IGFwcG9pbnRtZW50cyA9IEFycmF5LmlzQXJyYXkocmVzcG9uc2UpXG4gICAgICAgICAgICAgID8gcmVzcG9uc2VcbiAgICAgICAgICAgICAgOiByZXNwb25zZT8uY29udGVudCB8fCBbXTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gRGVkdXBsaWNhdGUgYnkgaWQgYW5kIHNvcnQgYnkgZGF0ZSBhbmQgc3RhcnRUaW1lIGFzY2VuZGluZyAoZWFybGllc3QgZmlyc3QpXG4gICAgICAgICAgICBjb25zdCB1bmlxdWVBcHBvaW50bWVudHMgPSBhcHBvaW50bWVudHMuZmlsdGVyKFxuICAgICAgICAgICAgICAoYXBwdDogVGFzQXBwb2ludG1lbnQsIGluZGV4OiBudW1iZXIsIHNlbGY6IFRhc0FwcG9pbnRtZW50W10pID0+XG4gICAgICAgICAgICAgICAgaW5kZXggPT09IHNlbGYuZmluZEluZGV4KChhOiBUYXNBcHBvaW50bWVudCkgPT4gYS5pZCA9PT0gYXBwdC5pZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmFwcG9pbnRtZW50cyA9IHVuaXF1ZUFwcG9pbnRtZW50cy5zb3J0KChhOiBUYXNBcHBvaW50bWVudCwgYjogVGFzQXBwb2ludG1lbnQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZGF0ZVRpbWVBID0gYCR7YS5kYXRlfVQke2Euc3RhcnRUaW1lfWA7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGVUaW1lQiA9IGAke2IuZGF0ZX1UJHtiLnN0YXJ0VGltZX1gO1xuICAgICAgICAgICAgICByZXR1cm4gZGF0ZVRpbWVCLmxvY2FsZUNvbXBhcmUoZGF0ZVRpbWVBKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHN0YXR1cyBlbmRwb2ludCB0byBnZXQgdGhlIGFjdGl2ZSBhcHBvaW50bWVudElkXG4gICAqL1xuICBwcml2YXRlIGNoZWNrU3RhdHVzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50ZW5hbnQgfHwgIXRoaXMuZW50aXR5SWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50YXNTZXJ2aWNlXG4gICAgICAgIC5nZXRQcm94eVZpZGVvU3RhdHVzKHtcbiAgICAgICAgICByb29tVHlwZTogdGhpcy5yb29tVHlwZSxcbiAgICAgICAgICBlbnRpdHlJZDogdGhpcy5lbnRpdHlJZCxcbiAgICAgICAgICB0ZW5hbnQ6IHRoaXMudGVuYW50LFxuICAgICAgICAgIGJ1c2luZXNzUm9sZTogdGhpcy5idXNpbmVzc1JvbGUsXG4gICAgICAgIH0pXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgLy8gU3RvcmUgdGhlIGFwcG9pbnRtZW50SWQgZnJvbSBzdGF0dXMgLSB0YXMtYnRuIG9ubHkgc2hvd3MgZm9yIHRoaXMgb25lXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUFwcG9pbnRtZW50SWQgPSByZXNwb25zZT8uY29udGVudD8uYXBwb2ludG1lbnRJZCA/PyBudWxsO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQXBwb2ludG1lbnRJZCA9IG51bGw7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uRW50ZXJDYWxsKGFwcG9pbnRtZW50OiBUYXNBcHBvaW50bWVudCk6IHZvaWQge1xuICAgIHRoaXMuZW50ZXJDYWxsLmVtaXQoYXBwb2ludG1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRhcy1idG4gc2hvdWxkIGJlIHNob3duIGZvciBhbiBhcHBvaW50bWVudC5cbiAgICogT25seSBzaG93cyB3aGVuIGFwcG9pbnRtZW50LmlkIG1hdGNoZXMgdGhlIGFjdGl2ZUFwcG9pbnRtZW50SWQgZnJvbSBzdGF0dXMgQVBJLlxuICAgKiB0YXMtYnRuIGhhbmRsZXMgaXRzIG93biBwb2xsaW5nIGZvciBqb2luYWJsZSBzdGF0ZS5cbiAgICovXG4gIHB1YmxpYyBzaG91bGRTaG93VGFzQnRuKGFwcG9pbnRtZW50OiBUYXNBcHBvaW50bWVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhhc1ZhbGlkU3RhdHVzID0gYXBwb2ludG1lbnQuc3RhdHVzID09PSBBcHBvaW50bWVudFN0YXR1cy5DT05GSVJNRUQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwb2ludG1lbnQuc3RhdHVzID09PSBBcHBvaW50bWVudFN0YXR1cy5BQ1RJVkU7XG4gICAgXG4gICAgLy8gT25seSBzaG93IGZvciB0aGUgYXBwb2ludG1lbnQgdGhhdCBtYXRjaGVzIHN0YXR1cyBBUEkgcmVzcG9uc2VcbiAgICByZXR1cm4gaGFzVmFsaWRTdGF0dXMgJiYgYXBwb2ludG1lbnQuaWQgPT09IHRoaXMuYWN0aXZlQXBwb2ludG1lbnRJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFja0J5IGZ1bmN0aW9uIGZvciBuZ0ZvclxuICAgKi9cbiAgcHVibGljIHRyYWNrQnlBcHBvaW50bWVudElkKGluZGV4OiBudW1iZXIsIGFwcG9pbnRtZW50OiBUYXNBcHBvaW50bWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGFwcG9pbnRtZW50LmlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBkYXRlIHRvIFNwYW5pc2ggZm9ybWF0OiBcIkx1bmVzIDggZGUgZGljaWVtYnJlXCJcbiAgICovXG4gIHB1YmxpYyBmb3JtYXRBcHBvaW50bWVudERhdGUoYXBwb2ludG1lbnQ6IFRhc0FwcG9pbnRtZW50KTogc3RyaW5nIHtcbiAgICBjb25zdCBbeWVhciwgbW9udGgsIGRheV0gPSBhcHBvaW50bWVudC5kYXRlLnNwbGl0KCctJykubWFwKE51bWJlcik7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcblxuICAgIGNvbnN0IGRheU5hbWVzID0gW1xuICAgICAgJ0RvbWluZ28nLCAnTHVuZXMnLCAnTWFydGVzJywgJ01pw6lyY29sZXMnLFxuICAgICAgJ0p1ZXZlcycsICdWaWVybmVzJywgJ1PDoWJhZG8nXG4gICAgXTtcbiAgICBjb25zdCBtb250aE5hbWVzID0gW1xuICAgICAgJ2VuZXJvJywgJ2ZlYnJlcm8nLCAnbWFyem8nLCAnYWJyaWwnLCAnbWF5bycsICdqdW5pbycsXG4gICAgICAnanVsaW8nLCAnYWdvc3RvJywgJ3NlcHRpZW1icmUnLCAnb2N0dWJyZScsICdub3ZpZW1icmUnLCAnZGljaWVtYnJlJ1xuICAgIF07XG5cbiAgICBjb25zdCBkYXlOYW1lID0gZGF5TmFtZXNbZGF0ZS5nZXREYXkoKV07XG4gICAgY29uc3QgZGF5TnVtID0gZGF0ZS5nZXREYXRlKCk7XG4gICAgY29uc3QgbW9udGhOYW1lID0gbW9udGhOYW1lc1tkYXRlLmdldE1vbnRoKCldO1xuXG4gICAgcmV0dXJuIGAke2RheU5hbWV9ICR7ZGF5TnVtfSBkZSAke21vbnRoTmFtZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCB0aW1lIHJhbmdlOiBcIjk6MDAgLSA5OjMwXCJcbiAgICovXG4gIHB1YmxpYyBmb3JtYXRUaW1lUmFuZ2UoYXBwb2ludG1lbnQ6IFRhc0FwcG9pbnRtZW50KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7YXBwb2ludG1lbnQuc3RhcnRUaW1lfSAtICR7YXBwb2ludG1lbnQuZW5kVGltZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgb3RoZXIgcGFydGljaXBhbnQgaW4gdGhlIGNhbGwgKG5vdCB0aGUgY3VycmVudCB1c2VyKVxuICAgKi9cbiAgcHVibGljIGdldE90aGVyUGFydGljaXBhbnQoYXBwb2ludG1lbnQ6IFRhc0FwcG9pbnRtZW50KTogc3RyaW5nIHtcbiAgICBpZiAoIWFwcG9pbnRtZW50LnBhcnRpY2lwYW50cyB8fCBhcHBvaW50bWVudC5wYXJ0aWNpcGFudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYXBwb2ludG1lbnQudGl0bGU7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG90aGVyUGFydGljaXBhbnQgPSBhcHBvaW50bWVudC5wYXJ0aWNpcGFudHMuZmluZChcbiAgICAgIHAgPT4gcC51c2VySWQgIT09IHRoaXMuY3VycmVudFVzZXI/LmlkXG4gICAgKTtcbiAgICBcbiAgICByZXR1cm4gb3RoZXJQYXJ0aWNpcGFudD8ubmFtZSB8fCBhcHBvaW50bWVudC50aXRsZTtcbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiaW5jb21pbmctYXBwb2ludG1lbnQtY2FyZFwiPlxuICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlXCI+UHLDs3hpbW8gdHVybm88L2gzPlxuXG4gIDwhLS0gTG9hZGluZyBzdGF0ZSAtLT5cbiAgPGRpdiBjbGFzcz1cImNhcmQtY29udGVudFwiICpuZ0lmPVwiaXNMb2FkaW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiPjwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEVtcHR5IHN0YXRlIC0tPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1jb250ZW50IGVtcHR5LXN0YXRlXCIgKm5nSWY9XCIhaXNMb2FkaW5nICYmIGFwcG9pbnRtZW50cy5sZW5ndGggPT09IDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWNpcmNsZVwiPlxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgPC9kaXY+XG4gICAgICA8c3BhbiBjbGFzcz1cInNwYXJrbGUgc3BhcmtsZS0xXCI+4pymPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJzcGFya2xlIHNwYXJrbGUtMlwiPuKcpjwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwic3BhcmtsZSBzcGFya2xlLTNcIj7inKY8L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cInNwYXJrbGUgc3BhcmtsZS00XCI+4pymPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxoNCBjbGFzcz1cImVtcHR5LXRpdGxlXCI+VG9kYXbDrWEgbm8gdGVuw6lzIHR1cm5vcyBhZ2VuZGFkb3M8L2g0PlxuICAgIDxwIGNsYXNzPVwiZW1wdHktc3VidGl0bGVcIj5cbiAgICAgIEVuIGNhc28gZGUgcXVlIE1lZGljaW5hIExhYm9yYWwgcmVxdWllcmEgdW5hIGNvbnN1bHRhLCBsbyB2ZXLDoXMgZW4gZXN0YSBzZWNjacOzbi5cbiAgICA8L3A+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQXBwb2ludG1lbnRzIGxpc3QgLS0+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWNvbnRlbnQgYXBwb2ludG1lbnQtc3RhdGVcIiAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgYXBwb2ludG1lbnRzLmxlbmd0aCA+IDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYXBwb2ludG1lbnQtY2FyZFwiIFtuZ0NsYXNzXT1cInsgJ2NhbmNlbGxlZCc6IGFwcHQuc3RhdHVzID09PSAnQ0FOQ0VMTEVEJyB8fCBhcHB0LnN0YXR1cyA9PT0gJ1JFU0NIRURVTEVEJyB9XCIgKm5nRm9yPVwibGV0IGFwcHQgb2YgYXBwb2ludG1lbnRzOyB0cmFja0J5OiB0cmFja0J5QXBwb2ludG1lbnRJZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImFwcG9pbnRtZW50LWhlYWRlclwiPlxuICAgICAgICA8dGFzLWF2YXRhciBbbmFtZV09XCJnZXRPdGhlclBhcnRpY2lwYW50KGFwcHQpXCIgW3NpemVdPVwiNDhcIj48L3Rhcy1hdmF0YXI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZG9jdG9yLW5hbWVcIj57eyBnZXRPdGhlclBhcnRpY2lwYW50KGFwcHQpIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXBwb2ludG1lbnQtZGV0YWlsc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS10aW1lXCIgW25nQ2xhc3NdPVwieyAnY29tcGFjdCc6ICFzaG91bGRTaG93VGFzQnRuKGFwcHQpLCAnY2FuY2VsbGVkJzogYXBwdC5zdGF0dXMgPT09ICdDQU5DRUxMRUQnIHx8IGFwcHQuc3RhdHVzID09PSAnUkVTQ0hFRFVMRUQnIH1cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImRhdGVcIj57eyBmb3JtYXRBcHBvaW50bWVudERhdGUoYXBwdCkgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lXCI+e3sgZm9ybWF0VGltZVJhbmdlKGFwcHQpIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHRhcy1idG5cbiAgICAgICAgICAqbmdJZj1cInNob3VsZFNob3dUYXNCdG4oYXBwdClcIlxuICAgICAgICAgIHZhcmlhbnQ9XCJ0ZWFsXCJcbiAgICAgICAgICBidXR0b25MYWJlbD1cIkluZ3Jlc2FyXCJcbiAgICAgICAgICBbcm9vbVR5cGVdPVwiYXBwdC5yb29tVHlwZVwiXG4gICAgICAgICAgW2VudGl0eUlkXT1cImFwcHQuZW50aXR5SWRcIlxuICAgICAgICAgIFt0ZW5hbnRdPVwidGVuYW50XCJcbiAgICAgICAgICBbYnVzaW5lc3NSb2xlXT1cImJ1c2luZXNzUm9sZVwiXG4gICAgICAgICAgW2N1cnJlbnRVc2VyXT1cImN1cnJlbnRVc2VyXCJcbiAgICAgICAgPjwvdGFzLWJ0bj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
@@ -1,53 +0,0 @@
1
- import { OnInit, OnDestroy, EventEmitter } from '@angular/core';
2
- import { TasService } from '../../services/tas.service';
3
- import { TasAppointment, TasRoomType, TasBusinessRole, TasCurrentUser } from '../../interfaces/tas.interfaces';
4
- import * as i0 from "@angular/core";
5
- export declare class TasIncomingAppointmentComponent implements OnInit, OnDestroy {
6
- private tasService;
7
- roomType: TasRoomType;
8
- entityId: number;
9
- tenant: string;
10
- businessRole: TasBusinessRole;
11
- currentUser: TasCurrentUser;
12
- fromDate: string;
13
- toDate: string;
14
- enterCall: EventEmitter<TasAppointment>;
15
- appointments: TasAppointment[];
16
- isLoading: boolean;
17
- hasError: boolean;
18
- activeAppointmentId: number | null;
19
- private subscriptions;
20
- constructor(tasService: TasService);
21
- ngOnInit(): void;
22
- ngOnDestroy(): void;
23
- private loadAppointments;
24
- /**
25
- * Check status endpoint to get the active appointmentId
26
- */
27
- private checkStatus;
28
- onEnterCall(appointment: TasAppointment): void;
29
- /**
30
- * Check if tas-btn should be shown for an appointment.
31
- * Only shows when appointment.id matches the activeAppointmentId from status API.
32
- * tas-btn handles its own polling for joinable state.
33
- */
34
- shouldShowTasBtn(appointment: TasAppointment): boolean;
35
- /**
36
- * TrackBy function for ngFor
37
- */
38
- trackByAppointmentId(index: number, appointment: TasAppointment): number;
39
- /**
40
- * Format date to Spanish format: "Lunes 8 de diciembre"
41
- */
42
- formatAppointmentDate(appointment: TasAppointment): string;
43
- /**
44
- * Format time range: "9:00 - 9:30"
45
- */
46
- formatTimeRange(appointment: TasAppointment): string;
47
- /**
48
- * Get the other participant in the call (not the current user)
49
- */
50
- getOtherParticipant(appointment: TasAppointment): string;
51
- static ɵfac: i0.ɵɵFactoryDeclaration<TasIncomingAppointmentComponent, never>;
52
- static ɵcmp: i0.ɵɵComponentDeclaration<TasIncomingAppointmentComponent, "tas-incoming-appointment", never, { "roomType": "roomType"; "entityId": "entityId"; "tenant": "tenant"; "businessRole": "businessRole"; "currentUser": "currentUser"; "fromDate": "fromDate"; "toDate": "toDate"; }, { "enterCall": "enterCall"; }, never, never>;
53
- }