tickera-angular-components 0.0.1-dev.188 → 0.0.1-dev.190
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.
|
@@ -547,6 +547,8 @@ const PERFORMANCES_API_ROUTES = {
|
|
|
547
547
|
seatEventsTicketAdmin: (id) => `/performances/${id}/seat-events/ticket/admin`,
|
|
548
548
|
seatEvents: (id) => `/performances/${id}/seat-events`,
|
|
549
549
|
myQrToken: (ticketUuid) => `/performances/tickets/${ticketUuid}/my-qr-token`,
|
|
550
|
+
ticketPdf: (ticketUuid) => `/performances/tickets/${ticketUuid}/pdf`,
|
|
551
|
+
myTicketPdf: (ticketUuid) => `/performances/tickets/${ticketUuid}/my-pdf`,
|
|
550
552
|
};
|
|
551
553
|
|
|
552
554
|
const PRICE_ZONES_API_ROUTES = {
|
|
@@ -2657,6 +2659,12 @@ class ApiService {
|
|
|
2657
2659
|
.get(`${this.apiUrl}${path}`, { headers })
|
|
2658
2660
|
.pipe(catchError(this.handleError.bind(this)));
|
|
2659
2661
|
}
|
|
2662
|
+
getBlob(path) {
|
|
2663
|
+
const headers = this.getHeaders(undefined);
|
|
2664
|
+
return this.http
|
|
2665
|
+
.get(`${this.apiUrl}${path}`, { headers, responseType: 'blob' })
|
|
2666
|
+
.pipe(catchError(this.handleError.bind(this)));
|
|
2667
|
+
}
|
|
2660
2668
|
post(path, body) {
|
|
2661
2669
|
const headers = this.getHeaders(this.validateContentType(body));
|
|
2662
2670
|
return this.http
|
|
@@ -4843,6 +4851,12 @@ class TicketQrService {
|
|
|
4843
4851
|
fetchMyQrToken(ticketUuid) {
|
|
4844
4852
|
return this.apiService.get(PERFORMANCES_API_ROUTES.myQrToken(ticketUuid));
|
|
4845
4853
|
}
|
|
4854
|
+
downloadTicketPdf(ticketUuid) {
|
|
4855
|
+
return this.apiService.getBlob(PERFORMANCES_API_ROUTES.ticketPdf(ticketUuid));
|
|
4856
|
+
}
|
|
4857
|
+
downloadMyTicketPdf(ticketUuid) {
|
|
4858
|
+
return this.apiService.getBlob(PERFORMANCES_API_ROUTES.myTicketPdf(ticketUuid));
|
|
4859
|
+
}
|
|
4846
4860
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketQrService, deps: [{ token: ApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
4847
4861
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketQrService, providedIn: 'root' });
|
|
4848
4862
|
}
|
|
@@ -10501,6 +10515,7 @@ class TicketQrComponent {
|
|
|
10501
10515
|
error = signal(false, ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
10502
10516
|
refreshing = signal(false, ...(ngDevMode ? [{ debugName: "refreshing" }] : []));
|
|
10503
10517
|
countdown = signal(0, ...(ngDevMode ? [{ debugName: "countdown" }] : []));
|
|
10518
|
+
downloading = signal(false, ...(ngDevMode ? [{ debugName: "downloading" }] : []));
|
|
10504
10519
|
destroy$ = new Subject();
|
|
10505
10520
|
refreshTimeout = null;
|
|
10506
10521
|
countdownInterval = null;
|
|
@@ -10545,6 +10560,28 @@ class TicketQrComponent {
|
|
|
10545
10560
|
this.clearTimers();
|
|
10546
10561
|
this.fetchAndRender();
|
|
10547
10562
|
}
|
|
10563
|
+
downloadPdf() {
|
|
10564
|
+
if (!isPlatformBrowser(this.platformId) || this.downloading())
|
|
10565
|
+
return;
|
|
10566
|
+
this.downloading.set(true);
|
|
10567
|
+
const request = this.isCustomer
|
|
10568
|
+
? this.ticketQrService.downloadMyTicketPdf(this.ticketUuid)
|
|
10569
|
+
: this.ticketQrService.downloadTicketPdf(this.ticketUuid);
|
|
10570
|
+
request.pipe(takeUntil$1(this.destroy$)).subscribe({
|
|
10571
|
+
next: (blob) => {
|
|
10572
|
+
this.downloading.set(false);
|
|
10573
|
+
const url = URL.createObjectURL(blob);
|
|
10574
|
+
const anchor = document.createElement('a');
|
|
10575
|
+
anchor.href = url;
|
|
10576
|
+
anchor.download = `boleta-${this.ticketUuid}.pdf`;
|
|
10577
|
+
document.body.appendChild(anchor);
|
|
10578
|
+
anchor.click();
|
|
10579
|
+
anchor.remove();
|
|
10580
|
+
URL.revokeObjectURL(url);
|
|
10581
|
+
},
|
|
10582
|
+
error: () => this.downloading.set(false),
|
|
10583
|
+
});
|
|
10584
|
+
}
|
|
10548
10585
|
clearTimers() {
|
|
10549
10586
|
if (this.refreshTimeout) {
|
|
10550
10587
|
clearTimeout(this.refreshTimeout);
|
|
@@ -10623,11 +10660,11 @@ class TicketQrComponent {
|
|
|
10623
10660
|
});
|
|
10624
10661
|
}
|
|
10625
10662
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketQrComponent, deps: [{ token: TicketQrService }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component });
|
|
10626
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TicketQrComponent, isStandalone: true, selector: "performance-ticket-qr", inputs: { ticketUuid: "ticketUuid", isCustomer: "isCustomer" }, viewQueries: [{ propertyName: "qrCanvas", first: true, predicate: ["qrCanvas"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"ticket-qr\">\n @if (loading()) {\n <div class=\"ticket-qr__loader\">\n <span class=\"ticket-qr__loader-text\">Cargando QR...</span>\n </div>\n }\n\n @if (error()) {\n <div class=\"ticket-qr__container\">\n <app-alert text=\"Error al cargar el c\u00F3digo QR\" type=\"error\" />\n <app-button text=\"Reintentar\" (clicked)=\"retry()\" [disabled]=\"loading()\" />\n </div>\n }\n\n <div [class.hidden]=\"loading() || error()\" class=\"ticket-qr__container\">\n <div class=\"transition-opacity duration-300\" [class.opacity-50]=\"refreshing()\">\n <canvas #qrCanvas class=\"ticket-qr__canvas\" width=\"256\" height=\"256\"></canvas>\n </div>\n <span class=\"ticket-qr__updating-text\">\n {{ countdown() > 0 ? `Actualizando en ${countdown()}` : '0s' }}\n </span>\n </div>\n</div>\n", styles: [".ticket-qr{align-items:center;display:flex;flex-flow:column nowrap;gap:.75rem;height:auto;padding:1rem;width:100%}.ticket-qr__loader{align-items:center;background-color:#f3f4f6;border-radius:.5rem;display:flex;flex-flow:column nowrap;height:16rem;justify-content:center;width:16rem}.ticket-qr__loader-text{color:#9ca3af;font-size:.875rem}.ticket-qr__container{align-items:center;display:flex;flex-flow:column nowrap;gap:.75rem;width:100%}.ticket-qr__container.hidden{display:none}.ticket-qr__canvas{box-shadow:0 0 10px #0003;border-radius:.5rem}.ticket-qr__updating-text{color:#9ca3af;font-size:.875rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "component", type: AppAlertComponent, selector: "app-alert", inputs: ["type", "text", "closeable", "size"] }] });
|
|
10663
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TicketQrComponent, isStandalone: true, selector: "performance-ticket-qr", inputs: { ticketUuid: "ticketUuid", isCustomer: "isCustomer" }, viewQueries: [{ propertyName: "qrCanvas", first: true, predicate: ["qrCanvas"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"ticket-qr\">\n @if (loading()) {\n <div class=\"ticket-qr__loader\">\n <span class=\"ticket-qr__loader-text\">Cargando QR...</span>\n </div>\n }\n\n @if (error()) {\n <div class=\"ticket-qr__container\">\n <app-alert text=\"Error al cargar el c\u00F3digo QR\" type=\"error\" />\n <app-button text=\"Reintentar\" (clicked)=\"retry()\" [disabled]=\"loading()\" />\n </div>\n }\n\n <div [class.hidden]=\"loading() || error()\" class=\"ticket-qr__container\">\n <div class=\"transition-opacity duration-300\" [class.opacity-50]=\"refreshing()\">\n <canvas #qrCanvas class=\"ticket-qr__canvas\" width=\"256\" height=\"256\"></canvas>\n </div>\n <span class=\"ticket-qr__updating-text\">\n {{ countdown() > 0 ? `Actualizando en ${countdown()}` : '0s' }}\n </span>\n <app-button\n text=\"Descargar QR en PDF\"\n [disabled]=\"loading() || downloading()\"\n (clicked)=\"downloadPdf()\"\n />\n </div>\n</div>\n", styles: [".ticket-qr{align-items:center;display:flex;flex-flow:column nowrap;gap:.75rem;height:auto;padding:1rem;width:100%}.ticket-qr__loader{align-items:center;background-color:#f3f4f6;border-radius:.5rem;display:flex;flex-flow:column nowrap;height:16rem;justify-content:center;width:16rem}.ticket-qr__loader-text{color:#9ca3af;font-size:.875rem}.ticket-qr__container{align-items:center;display:flex;flex-flow:column nowrap;gap:.75rem;width:100%}.ticket-qr__container.hidden{display:none}.ticket-qr__canvas{box-shadow:0 0 10px #0003;border-radius:.5rem}.ticket-qr__updating-text{color:#9ca3af;font-size:.875rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AppButtonComponent, selector: "app-button", inputs: ["disabled", "loading", "type", "variant", "text", "size", "loadingText", "icon", "tooltip"], outputs: ["clicked"] }, { kind: "component", type: AppAlertComponent, selector: "app-alert", inputs: ["type", "text", "closeable", "size"] }] });
|
|
10627
10664
|
}
|
|
10628
10665
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TicketQrComponent, decorators: [{
|
|
10629
10666
|
type: Component,
|
|
10630
|
-
args: [{ selector: 'performance-ticket-qr', standalone: true, imports: [CommonModule, AppButtonComponent, AppAlertComponent], template: "<div class=\"ticket-qr\">\n @if (loading()) {\n <div class=\"ticket-qr__loader\">\n <span class=\"ticket-qr__loader-text\">Cargando QR...</span>\n </div>\n }\n\n @if (error()) {\n <div class=\"ticket-qr__container\">\n <app-alert text=\"Error al cargar el c\u00F3digo QR\" type=\"error\" />\n <app-button text=\"Reintentar\" (clicked)=\"retry()\" [disabled]=\"loading()\" />\n </div>\n }\n\n <div [class.hidden]=\"loading() || error()\" class=\"ticket-qr__container\">\n <div class=\"transition-opacity duration-300\" [class.opacity-50]=\"refreshing()\">\n <canvas #qrCanvas class=\"ticket-qr__canvas\" width=\"256\" height=\"256\"></canvas>\n </div>\n <span class=\"ticket-qr__updating-text\">\n {{ countdown() > 0 ? `Actualizando en ${countdown()}` : '0s' }}\n </span>\n </div>\n</div>\n", styles: [".ticket-qr{align-items:center;display:flex;flex-flow:column nowrap;gap:.75rem;height:auto;padding:1rem;width:100%}.ticket-qr__loader{align-items:center;background-color:#f3f4f6;border-radius:.5rem;display:flex;flex-flow:column nowrap;height:16rem;justify-content:center;width:16rem}.ticket-qr__loader-text{color:#9ca3af;font-size:.875rem}.ticket-qr__container{align-items:center;display:flex;flex-flow:column nowrap;gap:.75rem;width:100%}.ticket-qr__container.hidden{display:none}.ticket-qr__canvas{box-shadow:0 0 10px #0003;border-radius:.5rem}.ticket-qr__updating-text{color:#9ca3af;font-size:.875rem}\n"] }]
|
|
10667
|
+
args: [{ selector: 'performance-ticket-qr', standalone: true, imports: [CommonModule, AppButtonComponent, AppAlertComponent], template: "<div class=\"ticket-qr\">\n @if (loading()) {\n <div class=\"ticket-qr__loader\">\n <span class=\"ticket-qr__loader-text\">Cargando QR...</span>\n </div>\n }\n\n @if (error()) {\n <div class=\"ticket-qr__container\">\n <app-alert text=\"Error al cargar el c\u00F3digo QR\" type=\"error\" />\n <app-button text=\"Reintentar\" (clicked)=\"retry()\" [disabled]=\"loading()\" />\n </div>\n }\n\n <div [class.hidden]=\"loading() || error()\" class=\"ticket-qr__container\">\n <div class=\"transition-opacity duration-300\" [class.opacity-50]=\"refreshing()\">\n <canvas #qrCanvas class=\"ticket-qr__canvas\" width=\"256\" height=\"256\"></canvas>\n </div>\n <span class=\"ticket-qr__updating-text\">\n {{ countdown() > 0 ? `Actualizando en ${countdown()}` : '0s' }}\n </span>\n <app-button\n text=\"Descargar QR en PDF\"\n [disabled]=\"loading() || downloading()\"\n (clicked)=\"downloadPdf()\"\n />\n </div>\n</div>\n", styles: [".ticket-qr{align-items:center;display:flex;flex-flow:column nowrap;gap:.75rem;height:auto;padding:1rem;width:100%}.ticket-qr__loader{align-items:center;background-color:#f3f4f6;border-radius:.5rem;display:flex;flex-flow:column nowrap;height:16rem;justify-content:center;width:16rem}.ticket-qr__loader-text{color:#9ca3af;font-size:.875rem}.ticket-qr__container{align-items:center;display:flex;flex-flow:column nowrap;gap:.75rem;width:100%}.ticket-qr__container.hidden{display:none}.ticket-qr__canvas{box-shadow:0 0 10px #0003;border-radius:.5rem}.ticket-qr__updating-text{color:#9ca3af;font-size:.875rem}\n"] }]
|
|
10631
10668
|
}], ctorParameters: () => [{ type: TicketQrService }, { type: Object, decorators: [{
|
|
10632
10669
|
type: Inject,
|
|
10633
10670
|
args: [PLATFORM_ID]
|