@rolatech/angular-payment 20.2.2-beta.3 → 20.2.3

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.
@@ -1,13 +1,13 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, viewChild, Component, Inject } from '@angular/core';
2
+ import { inject, viewChild, Component, Inject, signal } from '@angular/core';
3
3
  import { MatPaginator } from '@angular/material/paginator';
4
4
  import * as i1 from '@angular/material/table';
5
5
  import { MatTableDataSource, MatTableModule } from '@angular/material/table';
6
- import { BaseComponent, ToolbarComponent } from '@rolatech/angular-components';
7
- import { OrderPayoutService, OrderService } from '@rolatech/angular-services';
6
+ import { BaseComponent, ToolbarComponent, AbstractLoading, Skeleton, ContainerComponent, TabsComponent, TabComponent } from '@rolatech/angular-components';
7
+ import { OrderPayoutService, OrderService, PaymentService } from '@rolatech/angular-services';
8
8
  import { RouterLink } from '@angular/router';
9
9
  import { AuthService, AuthUserService } from '@rolatech/angular-auth';
10
- import { OrderPayoutStatus } from '@rolatech/angular-order';
10
+ import { OrderPayoutStatus, PaymentStatus, PaymentType } from '@rolatech/angular-order';
11
11
  import * as i1$1 from '@angular/material/dialog';
12
12
  import { MAT_DIALOG_DATA, MatDialogClose } from '@angular/material/dialog';
13
13
  import * as i8 from '@angular/material/button';
@@ -25,7 +25,10 @@ import * as i3 from '@angular/material/divider';
25
25
  import { MatDividerModule } from '@angular/material/divider';
26
26
  import * as i2 from '@angular/material/icon';
27
27
  import { MatIconModule } from '@angular/material/icon';
28
- import { CommonModule } from '@angular/common';
28
+ import * as i1$2 from '@angular/common';
29
+ import { CommonModule, NgClass } from '@angular/common';
30
+ import { map, distinctUntilChanged, switchMap, finalize } from 'rxjs';
31
+ import { PricePipe } from '@rolatech/angular-common';
29
32
 
30
33
  var PayoutStatus;
31
34
  (function (PayoutStatus) {
@@ -236,9 +239,364 @@ const payoutsRoutes = [
236
239
  { path: ':id', component: PayoutDetailComponent },
237
240
  ];
238
241
 
242
+ class PaymentIndex extends AbstractLoading {
243
+ paymentService = inject(PaymentService);
244
+ payments = signal([], ...(ngDevMode ? [{ debugName: "payments" }] : []));
245
+ status = PaymentStatus;
246
+ types = PaymentType;
247
+ pageIndex = signal(0, ...(ngDevMode ? [{ debugName: "pageIndex" }] : []));
248
+ pageSize = signal(15, ...(ngDevMode ? [{ debugName: "pageSize" }] : []));
249
+ pageSizeOptions = [5, 10, 15, 25];
250
+ skeletonRows = Array.from({ length: 6 }, (_, index) => index);
251
+ meta;
252
+ links = [
253
+ {
254
+ name: 'All',
255
+ icon: 'dashboard',
256
+ },
257
+ {
258
+ name: 'Pending',
259
+ icon: 'category',
260
+ status: 'PENDING',
261
+ },
262
+ {
263
+ name: 'Succeeded',
264
+ icon: 'category',
265
+ status: 'SUCCEEDED',
266
+ },
267
+ {
268
+ name: 'Refunded',
269
+ icon: 'category',
270
+ status: 'REFUNDED',
271
+ },
272
+ {
273
+ name: 'Failed',
274
+ icon: 'category',
275
+ status: 'FAILED',
276
+ },
277
+ ];
278
+ select = 0;
279
+ length = 100;
280
+ statusBadgeMap = {
281
+ PENDING: 'bg-yellow-100 text-yellow-800',
282
+ COMPLETED: 'bg-green-100 text-green-700',
283
+ REFUNDED: 'bg-blue-100 text-blue-700',
284
+ FAILED: 'bg-rose-100 text-rose-700',
285
+ };
286
+ ngOnInit() {
287
+ const sub = this.route.queryParamMap
288
+ .pipe(map((p) => {
289
+ const page = p.get('page') ? Number(p.get('page')) : 1;
290
+ this.pageIndex.set(Math.max(page - 1, 0));
291
+ const status = p.get('status') || undefined;
292
+ let filter = '';
293
+ if (status) {
294
+ this.select = this.links.findIndex((item) => item.status === status);
295
+ filter = `status:${status?.toUpperCase()}`;
296
+ }
297
+ return {
298
+ page,
299
+ filter,
300
+ limit: p.get('limit') ? Number(p.get('limit')) : 15,
301
+ sort: p.get('sort') || undefined,
302
+ };
303
+ }),
304
+ // Cheap deep compare via JSON to avoid spam calls when nothing changed
305
+ map((o) => JSON.stringify(o)), distinctUntilChanged(), map((s) => JSON.parse(s)), switchMap((params) => {
306
+ this.loading = true;
307
+ params['sort'] = 'updatedAt desc';
308
+ return this.paymentService.me(params).pipe(finalize(() => (this.loading = false)));
309
+ }))
310
+ .subscribe({
311
+ next: (res) => {
312
+ this.payments.set(res.data);
313
+ this.meta = res.meta;
314
+ this.length = res.meta.pagination.count;
315
+ },
316
+ error: (error) => {
317
+ this.payments.set([]);
318
+ this.length = 0;
319
+ this.snackBarService.open(error.message || 'Unable to load payments');
320
+ },
321
+ });
322
+ // // auto-unsubscribe on destroy
323
+ this.destroyRef.onDestroy(() => sub.unsubscribe());
324
+ }
325
+ find() {
326
+ this.loading.set(true);
327
+ const options = {
328
+ page: this.pageIndex() + 1,
329
+ limit: this.pageSize(),
330
+ sort: 'createdAt desc',
331
+ };
332
+ this.paymentService.find(options).subscribe({
333
+ next: (res) => {
334
+ const payments = res?.data ?? [];
335
+ this.payments.set(payments);
336
+ const count = res?.meta?.pagination?.count;
337
+ this.loading.set(false);
338
+ },
339
+ error: (error) => {
340
+ this.loading.set(false);
341
+ this.snackBarService.open(error?.message || 'Unable to load payments');
342
+ },
343
+ });
344
+ }
345
+ statusBadgeClass(status) {
346
+ return this.statusBadgeMap[status] ?? 'bg-slate-100 text-slate-600';
347
+ }
348
+ onPage(e) {
349
+ this.router.navigate([], {
350
+ queryParams: { page: e.pageIndex + 1, limit: e.pageSize },
351
+ queryParamsHandling: 'merge',
352
+ replaceUrl: true, // optional: avoid stacking history on every page click
353
+ });
354
+ }
355
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: PaymentIndex, deps: null, target: i0.ɵɵFactoryTarget.Component });
356
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: PaymentIndex, isStandalone: true, selector: "rolatech-payment-index", usesInheritance: true, ngImport: i0, template: "<rolatech-container>\n <rolatech-toolbar title=\"Payments\"></rolatech-toolbar>\n <rolatech-tabs [select]=\"select\">\n @for (item of links; track item) { @if (item.status) {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\" [queryParams]=\"{ status: item.status }\"></rolatech-tab>\n } @else {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\"></rolatech-tab>\n } }\n </rolatech-tabs>\n <div class=\"space-y-4 mt-3\">\n <div class=\"overflow-hidden\">\n <div class=\"overflow-x-auto\">\n <table class=\"min-w-full divide-y divide-[--rt-raised-background] text-sm\">\n <thead\n class=\"bg-[--rt-raised-background] text-left text-xs font-semibold uppercase tracking-wide text-[--rt-primary-text]\"\n >\n <tr>\n <th class=\"px-2 py-3\">Invoice #</th>\n <th class=\"px-6 py-3\">Status</th>\n <th class=\"px-6 py-3\">Type</th>\n <th class=\"px-6 py-3\">Amount</th>\n <th class=\"px-6 py-3 text-right\">Created</th>\n </tr>\n </thead>\n <tbody class=\"divide-y divide-[--rt-raised-background]\">\n @if (loading()) { @for (row of skeletonRows; track row) {\n <tr>\n <td class=\"py-4\" colspan=\"5\">\n <rolatech-skeleton class=\"h-6 w-full\"></rolatech-skeleton>\n </td>\n </tr>\n } } @else { @if (payments().length) { @for (payment of payments(); track payment.id) {\n <tr class=\"transition hover:bg-[--rt-raised-background] hover:cursor-pointer\" routerLink=\"./{{ payment.id }}\">\n <td class=\"px-2 py-4 text-[--rt-primary-text]\">{{ payment.invoiceId }}</td>\n <td class=\"px-4 py-4\">\n <span\n class=\"inline-flex items-center rounded-full px-3 py-2 text-xs font-semibold\"\n [ngClass]=\"statusBadgeClass(payment.status)\"\n >\n {{ status[payment.status] || payment.status }}\n </span>\n </td>\n <td class=\"px-6 py-4 text-[--rt-primary-text]\">{{ types[payment.type] || payment.type }}</td>\n <td class=\"px-6 py-4 font-semibold text-[--rt-primary-text]\">{{ payment.amount | price }}</td>\n <td class=\"px-6 py-4 text-[--rt-primary-text] text-right\">\n {{ payment.createdAt | date:'dd/MM/yyyy':'Europe/London'}}\n </td>\n </tr>\n } } @else {\n <tr>\n <td class=\"px-6 py-6 text-center text-sm text-[--rt-primary-text]\" colspan=\"5\">No payment records</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n <mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageIndex]=\"pageIndex()\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\"\n hidePageSize\n showFirstLastButtons\n >\n </mat-paginator>\n </div>\n</rolatech-container>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: Skeleton, selector: "rolatech-skeleton" }, { kind: "component", type: ContainerComponent, selector: "rolatech-container" }, { kind: "component", type: MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: TabsComponent, selector: "rolatech-tabs", inputs: ["select", "loading"], outputs: ["selectChange"] }, { kind: "component", type: TabComponent, selector: "rolatech-tab", inputs: ["label"] }, { kind: "pipe", type: i1$2.DatePipe, name: "date" }, { kind: "pipe", type: PricePipe, name: "price" }] });
357
+ }
358
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: PaymentIndex, decorators: [{
359
+ type: Component,
360
+ args: [{ selector: 'rolatech-payment-index', imports: [
361
+ CommonModule,
362
+ ToolbarComponent,
363
+ RouterLink,
364
+ Skeleton,
365
+ PricePipe,
366
+ ContainerComponent,
367
+ MatPaginator,
368
+ TabsComponent,
369
+ TabComponent,
370
+ ], template: "<rolatech-container>\n <rolatech-toolbar title=\"Payments\"></rolatech-toolbar>\n <rolatech-tabs [select]=\"select\">\n @for (item of links; track item) { @if (item.status) {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\" [queryParams]=\"{ status: item.status }\"></rolatech-tab>\n } @else {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\"></rolatech-tab>\n } }\n </rolatech-tabs>\n <div class=\"space-y-4 mt-3\">\n <div class=\"overflow-hidden\">\n <div class=\"overflow-x-auto\">\n <table class=\"min-w-full divide-y divide-[--rt-raised-background] text-sm\">\n <thead\n class=\"bg-[--rt-raised-background] text-left text-xs font-semibold uppercase tracking-wide text-[--rt-primary-text]\"\n >\n <tr>\n <th class=\"px-2 py-3\">Invoice #</th>\n <th class=\"px-6 py-3\">Status</th>\n <th class=\"px-6 py-3\">Type</th>\n <th class=\"px-6 py-3\">Amount</th>\n <th class=\"px-6 py-3 text-right\">Created</th>\n </tr>\n </thead>\n <tbody class=\"divide-y divide-[--rt-raised-background]\">\n @if (loading()) { @for (row of skeletonRows; track row) {\n <tr>\n <td class=\"py-4\" colspan=\"5\">\n <rolatech-skeleton class=\"h-6 w-full\"></rolatech-skeleton>\n </td>\n </tr>\n } } @else { @if (payments().length) { @for (payment of payments(); track payment.id) {\n <tr class=\"transition hover:bg-[--rt-raised-background] hover:cursor-pointer\" routerLink=\"./{{ payment.id }}\">\n <td class=\"px-2 py-4 text-[--rt-primary-text]\">{{ payment.invoiceId }}</td>\n <td class=\"px-4 py-4\">\n <span\n class=\"inline-flex items-center rounded-full px-3 py-2 text-xs font-semibold\"\n [ngClass]=\"statusBadgeClass(payment.status)\"\n >\n {{ status[payment.status] || payment.status }}\n </span>\n </td>\n <td class=\"px-6 py-4 text-[--rt-primary-text]\">{{ types[payment.type] || payment.type }}</td>\n <td class=\"px-6 py-4 font-semibold text-[--rt-primary-text]\">{{ payment.amount | price }}</td>\n <td class=\"px-6 py-4 text-[--rt-primary-text] text-right\">\n {{ payment.createdAt | date:'dd/MM/yyyy':'Europe/London'}}\n </td>\n </tr>\n } } @else {\n <tr>\n <td class=\"px-6 py-6 text-center text-sm text-[--rt-primary-text]\" colspan=\"5\">No payment records</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n <mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageIndex]=\"pageIndex()\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\"\n hidePageSize\n showFirstLastButtons\n >\n </mat-paginator>\n </div>\n</rolatech-container>\n", styles: [":host{display:block}\n"] }]
371
+ }] });
372
+
373
+ class PaymentDetail extends AbstractLoading {
374
+ paymentService = inject(PaymentService);
375
+ payment = signal(null, ...(ngDevMode ? [{ debugName: "payment" }] : []));
376
+ status = PaymentStatus;
377
+ types = PaymentType;
378
+ ngOnInit() {
379
+ const id = this.route.snapshot.paramMap.get('id');
380
+ if (id) {
381
+ this.get(id);
382
+ }
383
+ else {
384
+ this.loading.set(false);
385
+ }
386
+ }
387
+ get(id) {
388
+ this.loading.set(true);
389
+ this.paymentService.get(id).subscribe({
390
+ next: (res) => {
391
+ this.payment.set(res?.data ?? null);
392
+ this.loading.set(false);
393
+ },
394
+ error: (error) => {
395
+ this.loading.set(false);
396
+ this.snackBarService.open(error?.message || 'Unable to load payment detail');
397
+ },
398
+ });
399
+ }
400
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: PaymentDetail, deps: null, target: i0.ɵɵFactoryTarget.Component });
401
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: PaymentDetail, isStandalone: true, selector: "rolatech-payment-detail", usesInheritance: true, ngImport: i0, template: "<rolatech-container>\n <rolatech-toolbar title=\"Payment Detail\" link=\"../\"></rolatech-toolbar>\n @if (loading()) {\n <section class=\"detail-card space-y-4\">\n <rolatech-skeleton class=\"h-6 w-32\"></rolatech-skeleton>\n <div class=\"space-y-3\">\n @for (_ of [1, 2, 3, 4, 5, 6]; track idx; let idx = $index) {\n <div class=\"flex items-center gap-4\">\n <rolatech-skeleton class=\"h-4 w-24\"></rolatech-skeleton>\n <rolatech-skeleton class=\"h-4 flex-1\"></rolatech-skeleton>\n </div>\n }\n </div>\n </section>\n } @else { @if (payment(); as detail) {\n <section class=\"detail-card\">\n <div class=\"detail-row\">\n <span>Status</span>\n <strong>{{ status[detail.status] || detail.status }}</strong>\n </div>\n <div class=\"detail-row\">\n <span>Type</span>\n <span>{{ types[detail.type] || detail.type }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Amount</span>\n <span>{{ detail.amount | price }}</span>\n </div>\n @if (detail.deposit) {\n <div class=\"detail-row\">\n <span>Deposit</span>\n <span>{{ detail.deposit| price }}</span>\n </div>\n }\n <div class=\"detail-row\">\n <span>Payment ID</span>\n <span>{{ detail.id }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Order #</span>\n <span>{{ detail.invoiceId }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Product ID</span>\n <span>{{ detail.productId || '-' }}</span>\n </div>\n <div class=\"detail-row\">\n <span>User</span>\n <span>{{ detail.userId || '-' }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Created</span>\n <span>{{ detail.createdAt | date:'dd/MM/yyyy':'Europe/London' }}</span>\n </div>\n </section>\n @if (detail.description) {\n <section class=\"detail-card\">\n <div class=\"detail-title\">Memo</div>\n <p class=\"detail-description\">{{ detail.description }}</p>\n </section>\n } } @else {\n <div class=\"detail-state\">Payment not found</div>\n } }\n</rolatech-container>\n", styles: [".detail-card{background:var(--rt-raised-background, #fff);border-radius:.5rem;padding:1.5rem;margin-bottom:1rem;box-shadow:0 1px 2px #0000000a}.detail-row{display:flex;justify-content:space-between;gap:1rem;padding:.75rem 0;border-bottom:1px solid var(--rt-border-color, rgba(0, 0, 0, .06));font-size:.95rem}.detail-row:last-child{border-bottom:none}.detail-row span:first-child{color:var(--rt-text-secondary, #666)}.detail-title{font-weight:600;margin-bottom:.5rem}.detail-description{margin:0;white-space:pre-wrap;line-height:1.5;color:var(--rt-text-secondary, #666)}.detail-state{padding:2rem 0;text-align:center;color:var(--rt-text-secondary, #666)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "component", type: ContainerComponent, selector: "rolatech-container" }, { kind: "component", type: Skeleton, selector: "rolatech-skeleton" }, { kind: "pipe", type: i1$2.DatePipe, name: "date" }, { kind: "pipe", type: PricePipe, name: "price" }] });
402
+ }
403
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: PaymentDetail, decorators: [{
404
+ type: Component,
405
+ args: [{ selector: 'rolatech-payment-detail', imports: [CommonModule, ToolbarComponent, ContainerComponent, Skeleton, PricePipe], template: "<rolatech-container>\n <rolatech-toolbar title=\"Payment Detail\" link=\"../\"></rolatech-toolbar>\n @if (loading()) {\n <section class=\"detail-card space-y-4\">\n <rolatech-skeleton class=\"h-6 w-32\"></rolatech-skeleton>\n <div class=\"space-y-3\">\n @for (_ of [1, 2, 3, 4, 5, 6]; track idx; let idx = $index) {\n <div class=\"flex items-center gap-4\">\n <rolatech-skeleton class=\"h-4 w-24\"></rolatech-skeleton>\n <rolatech-skeleton class=\"h-4 flex-1\"></rolatech-skeleton>\n </div>\n }\n </div>\n </section>\n } @else { @if (payment(); as detail) {\n <section class=\"detail-card\">\n <div class=\"detail-row\">\n <span>Status</span>\n <strong>{{ status[detail.status] || detail.status }}</strong>\n </div>\n <div class=\"detail-row\">\n <span>Type</span>\n <span>{{ types[detail.type] || detail.type }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Amount</span>\n <span>{{ detail.amount | price }}</span>\n </div>\n @if (detail.deposit) {\n <div class=\"detail-row\">\n <span>Deposit</span>\n <span>{{ detail.deposit| price }}</span>\n </div>\n }\n <div class=\"detail-row\">\n <span>Payment ID</span>\n <span>{{ detail.id }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Order #</span>\n <span>{{ detail.invoiceId }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Product ID</span>\n <span>{{ detail.productId || '-' }}</span>\n </div>\n <div class=\"detail-row\">\n <span>User</span>\n <span>{{ detail.userId || '-' }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Created</span>\n <span>{{ detail.createdAt | date:'dd/MM/yyyy':'Europe/London' }}</span>\n </div>\n </section>\n @if (detail.description) {\n <section class=\"detail-card\">\n <div class=\"detail-title\">Memo</div>\n <p class=\"detail-description\">{{ detail.description }}</p>\n </section>\n } } @else {\n <div class=\"detail-state\">Payment not found</div>\n } }\n</rolatech-container>\n", styles: [".detail-card{background:var(--rt-raised-background, #fff);border-radius:.5rem;padding:1.5rem;margin-bottom:1rem;box-shadow:0 1px 2px #0000000a}.detail-row{display:flex;justify-content:space-between;gap:1rem;padding:.75rem 0;border-bottom:1px solid var(--rt-border-color, rgba(0, 0, 0, .06));font-size:.95rem}.detail-row:last-child{border-bottom:none}.detail-row span:first-child{color:var(--rt-text-secondary, #666)}.detail-title{font-weight:600;margin-bottom:.5rem}.detail-description{margin:0;white-space:pre-wrap;line-height:1.5;color:var(--rt-text-secondary, #666)}.detail-state{padding:2rem 0;text-align:center;color:var(--rt-text-secondary, #666)}\n"] }]
406
+ }] });
407
+
408
+ const paymentsRoutes = [
409
+ { path: '', component: PaymentIndex },
410
+ { path: ':id', component: PaymentDetail },
411
+ ];
412
+
413
+ class PaymentManageIndex extends AbstractLoading {
414
+ paymentService = inject(PaymentService);
415
+ select = 0;
416
+ payments = signal([], ...(ngDevMode ? [{ debugName: "payments" }] : []));
417
+ status = PaymentStatus;
418
+ types = PaymentType;
419
+ length = 0;
420
+ meta;
421
+ pageIndex = signal(0, ...(ngDevMode ? [{ debugName: "pageIndex" }] : []));
422
+ pageSize = signal(15, ...(ngDevMode ? [{ debugName: "pageSize" }] : []));
423
+ pageSizeOptions = [5, 15, 25, 50];
424
+ skeletonRows = Array.from({ length: 6 }, (_, index) => index);
425
+ links = [
426
+ {
427
+ name: 'All',
428
+ icon: 'dashboard',
429
+ },
430
+ {
431
+ name: 'Pending',
432
+ icon: 'category',
433
+ status: 'PENDING',
434
+ },
435
+ {
436
+ name: 'Succeeded',
437
+ icon: 'category',
438
+ status: 'SUCCEEDED',
439
+ },
440
+ {
441
+ name: 'Refunded',
442
+ icon: 'category',
443
+ status: 'REFUNDED',
444
+ },
445
+ {
446
+ name: 'Failed',
447
+ icon: 'category',
448
+ status: 'FAILED',
449
+ },
450
+ ];
451
+ activeStatus = signal(null, ...(ngDevMode ? [{ debugName: "activeStatus" }] : []));
452
+ statusBadgeMap = {
453
+ PENDING: 'bg-yellow-100 text-yellow-800',
454
+ COMPLETED: 'bg-green-100 text-green-700',
455
+ REFUNDED: 'bg-blue-100 text-blue-700',
456
+ FAILED: 'bg-rose-100 text-rose-700',
457
+ };
458
+ ngOnInit() {
459
+ const sub = this.route.queryParamMap
460
+ .pipe(map((p) => {
461
+ const page = p.get('page') ? Number(p.get('page')) : 1;
462
+ this.pageIndex.set(Math.max(page - 1, 0));
463
+ const status = p.get('status') || undefined;
464
+ let filter = '';
465
+ if (status) {
466
+ this.select = this.links.findIndex((item) => item.status === status);
467
+ filter = `status:${status?.toUpperCase()}`;
468
+ }
469
+ return {
470
+ page,
471
+ filter,
472
+ limit: p.get('limit') ? Number(p.get('limit')) : 15,
473
+ sort: p.get('sort') || undefined,
474
+ };
475
+ }),
476
+ // Cheap deep compare via JSON to avoid spam calls when nothing changed
477
+ map((o) => JSON.stringify(o)), distinctUntilChanged(), map((s) => JSON.parse(s)), switchMap((params) => {
478
+ this.loading = true;
479
+ params['sort'] = 'updatedAt desc';
480
+ return this.paymentService.find(params).pipe(finalize(() => (this.loading = false)));
481
+ }))
482
+ .subscribe({
483
+ next: (res) => {
484
+ this.payments.set(res.data);
485
+ this.meta = res.meta;
486
+ this.length = res.meta.pagination.count;
487
+ },
488
+ error: () => {
489
+ this.payments.set([]);
490
+ this.length = 0;
491
+ },
492
+ });
493
+ // // auto-unsubscribe on destroy
494
+ this.destroyRef.onDestroy(() => sub.unsubscribe());
495
+ }
496
+ statusBadgeClass(status) {
497
+ return this.statusBadgeMap[status] ?? 'bg-slate-100 text-slate-600';
498
+ }
499
+ setStatus(status) {
500
+ if (this.activeStatus() === status) {
501
+ return;
502
+ }
503
+ this.activeStatus.set(status);
504
+ this.pageIndex.set(0);
505
+ this.find();
506
+ }
507
+ find() {
508
+ this.loading.set(true);
509
+ const options = {
510
+ page: this.pageIndex() + 1,
511
+ limit: this.pageSize(),
512
+ sort: 'updatedAt desc',
513
+ };
514
+ const status = this.activeStatus();
515
+ if (status) {
516
+ options['filter'] = `status:${status}`;
517
+ }
518
+ this.paymentService.find(options).subscribe({
519
+ next: (res) => {
520
+ const payments = res?.data ?? [];
521
+ this.payments.set(payments);
522
+ const count = res?.meta?.pagination?.count;
523
+ this.length = count;
524
+ this.loading.set(false);
525
+ },
526
+ error: (error) => {
527
+ this.loading.set(false);
528
+ this.snackBarService.open(error?.message || 'Unable to load payments');
529
+ },
530
+ });
531
+ }
532
+ onPage(e) {
533
+ this.router.navigate([], {
534
+ queryParams: { page: e.pageIndex + 1, limit: e.pageSize },
535
+ queryParamsHandling: 'merge',
536
+ replaceUrl: true, // optional: avoid stacking history on every page click
537
+ });
538
+ }
539
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: PaymentManageIndex, deps: null, target: i0.ɵɵFactoryTarget.Component });
540
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: PaymentManageIndex, isStandalone: true, selector: "rolatech-payment-manage-index", usesInheritance: true, ngImport: i0, template: "<rolatech-toolbar title=\"Payments\"></rolatech-toolbar>\n<div class=\"px-3\">\n <rolatech-tabs [select]=\"select\">\n @for (item of links; track item) { @if (item.status) {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\" [queryParams]=\"{ status: item.status }\"></rolatech-tab>\n } @else {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\"></rolatech-tab>\n } }\n </rolatech-tabs>\n <div class=\"space-y-4 mt-3\">\n <div class=\"overflow-hidden bg-[--rt-base-background]\">\n <div class=\"overflow-x-auto\">\n <table class=\"min-w-full divide-y divide-[--rt-border-color]text-sm\">\n <thead\n class=\"bg-[--rt-raised-background] text-left text-xs font-semibold uppercase tracking-wide text-[--rt-primary-text]\"\n >\n <tr>\n <th class=\"px-2 py-3\">Invoice #</th>\n <th class=\"px-6 py-3\">Status</th>\n <th class=\"px-6 py-3\">Type</th>\n <th class=\"px-6 py-3\">Amount</th>\n <th class=\"px-6 py-3\">Customer</th>\n <th class=\"px-6 py-3 text-right\">Created</th>\n </tr>\n </thead>\n <tbody class=\"divide-y divide-[--rt-raised-background]\">\n @if (loading()) { @for (row of skeletonRows; track row) {\n <tr>\n <td class=\"py-4\" colspan=\"6\">\n <rolatech-skeleton class=\"h-6 w-full\"></rolatech-skeleton>\n </td>\n </tr>\n } } @else { @if (payments().length) { @for (payment of payments(); track payment.id) {\n <tr class=\"transition hover:bg-[--rt-raised-background] hover:cursor-pointer\" routerLink=\"./{{ payment.id }}\">\n <td class=\"px-2 py-4 text-[--rt-primary-text]\">{{ payment.invoiceId}}</td>\n <td class=\"px-4 py-4\">\n <span\n class=\"inline-flex items-center rounded-full px-3 py-2 text-xs font-semibold\"\n [ngClass]=\"statusBadgeClass(payment.status)\"\n >\n {{ status[payment.status] || payment.status }}\n </span>\n </td>\n <td class=\"px-6 py-4 text-[--rt-primary-text]\">{{ types[payment.type] || payment.type }}</td>\n <td class=\"px-6 py-4 font-semibold text-[--rt-primary-text]\">{{ payment.amount | price }}</td>\n <td class=\"px-6 py-4 text-[--rt-primary-text]\">{{ payment.customerId || '-' }}</td>\n <td class=\"px-6 py-4 text-[--rt-primary-text] text-right\">\n {{ payment.createdAt | date:'dd/MM/yyyy':'Europe/London' }}\n </td>\n </tr>\n } } @else {\n <tr>\n <td class=\"px-6 py-6 text-center text-sm text-[--rt-primary-text]\" colspan=\"6\">No payments found</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n <mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageIndex]=\"pageIndex()\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\"\n hidePageSize\n showFirstLastButtons\n >\n </mat-paginator>\n </div>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: Skeleton, selector: "rolatech-skeleton" }, { kind: "component", type: TabsComponent, selector: "rolatech-tabs", inputs: ["select", "loading"], outputs: ["selectChange"] }, { kind: "component", type: TabComponent, selector: "rolatech-tab", inputs: ["label"] }, { kind: "component", type: MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "pipe", type: i1$2.DatePipe, name: "date" }, { kind: "pipe", type: PricePipe, name: "price" }] });
541
+ }
542
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: PaymentManageIndex, decorators: [{
543
+ type: Component,
544
+ args: [{ selector: 'rolatech-payment-manage-index', imports: [
545
+ CommonModule,
546
+ ToolbarComponent,
547
+ RouterLink,
548
+ Skeleton,
549
+ NgClass,
550
+ PricePipe,
551
+ TabsComponent,
552
+ TabComponent,
553
+ MatPaginator,
554
+ ], template: "<rolatech-toolbar title=\"Payments\"></rolatech-toolbar>\n<div class=\"px-3\">\n <rolatech-tabs [select]=\"select\">\n @for (item of links; track item) { @if (item.status) {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\" [queryParams]=\"{ status: item.status }\"></rolatech-tab>\n } @else {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\"></rolatech-tab>\n } }\n </rolatech-tabs>\n <div class=\"space-y-4 mt-3\">\n <div class=\"overflow-hidden bg-[--rt-base-background]\">\n <div class=\"overflow-x-auto\">\n <table class=\"min-w-full divide-y divide-[--rt-border-color]text-sm\">\n <thead\n class=\"bg-[--rt-raised-background] text-left text-xs font-semibold uppercase tracking-wide text-[--rt-primary-text]\"\n >\n <tr>\n <th class=\"px-2 py-3\">Invoice #</th>\n <th class=\"px-6 py-3\">Status</th>\n <th class=\"px-6 py-3\">Type</th>\n <th class=\"px-6 py-3\">Amount</th>\n <th class=\"px-6 py-3\">Customer</th>\n <th class=\"px-6 py-3 text-right\">Created</th>\n </tr>\n </thead>\n <tbody class=\"divide-y divide-[--rt-raised-background]\">\n @if (loading()) { @for (row of skeletonRows; track row) {\n <tr>\n <td class=\"py-4\" colspan=\"6\">\n <rolatech-skeleton class=\"h-6 w-full\"></rolatech-skeleton>\n </td>\n </tr>\n } } @else { @if (payments().length) { @for (payment of payments(); track payment.id) {\n <tr class=\"transition hover:bg-[--rt-raised-background] hover:cursor-pointer\" routerLink=\"./{{ payment.id }}\">\n <td class=\"px-2 py-4 text-[--rt-primary-text]\">{{ payment.invoiceId}}</td>\n <td class=\"px-4 py-4\">\n <span\n class=\"inline-flex items-center rounded-full px-3 py-2 text-xs font-semibold\"\n [ngClass]=\"statusBadgeClass(payment.status)\"\n >\n {{ status[payment.status] || payment.status }}\n </span>\n </td>\n <td class=\"px-6 py-4 text-[--rt-primary-text]\">{{ types[payment.type] || payment.type }}</td>\n <td class=\"px-6 py-4 font-semibold text-[--rt-primary-text]\">{{ payment.amount | price }}</td>\n <td class=\"px-6 py-4 text-[--rt-primary-text]\">{{ payment.customerId || '-' }}</td>\n <td class=\"px-6 py-4 text-[--rt-primary-text] text-right\">\n {{ payment.createdAt | date:'dd/MM/yyyy':'Europe/London' }}\n </td>\n </tr>\n } } @else {\n <tr>\n <td class=\"px-6 py-6 text-center text-sm text-[--rt-primary-text]\" colspan=\"6\">No payments found</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n <mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageIndex]=\"pageIndex()\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\"\n hidePageSize\n showFirstLastButtons\n >\n </mat-paginator>\n </div>\n</div>\n", styles: [":host{display:block}\n"] }]
555
+ }] });
556
+
557
+ class PaymentManageDetail extends AbstractLoading {
558
+ paymentService = inject(PaymentService);
559
+ payment = signal(null, ...(ngDevMode ? [{ debugName: "payment" }] : []));
560
+ status = PaymentStatus;
561
+ types = PaymentType;
562
+ ngOnInit() {
563
+ const id = this.route.snapshot.paramMap.get('id');
564
+ if (id) {
565
+ this.get(id);
566
+ }
567
+ else {
568
+ this.loading.set(false);
569
+ }
570
+ }
571
+ get(id) {
572
+ this.loading.set(true);
573
+ this.paymentService.get(id).subscribe({
574
+ next: (res) => {
575
+ this.payment.set(res?.data ?? null);
576
+ this.loading.set(false);
577
+ },
578
+ error: (error) => {
579
+ this.loading.set(false);
580
+ this.snackBarService.open(error?.message || 'Unable to load payment detail');
581
+ },
582
+ });
583
+ }
584
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: PaymentManageDetail, deps: null, target: i0.ɵɵFactoryTarget.Component });
585
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: PaymentManageDetail, isStandalone: true, selector: "rolatech-payment-manage-detail", usesInheritance: true, ngImport: i0, template: "<rolatech-toolbar title=\"Payment Detail\" link=\"../\"></rolatech-toolbar>\n<div class=\"px-4\">\n @if (loading()) {\n <section class=\"detail-card space-y-4\">\n <rolatech-skeleton class=\"h-6 w-32\"></rolatech-skeleton>\n <div class=\"space-y-3\">\n @for (_ of [1, 2, 3, 4, 5, 6]; track idx; let idx = $index) {\n <div class=\"flex items-center gap-4\">\n <rolatech-skeleton class=\"h-4 w-24\"></rolatech-skeleton>\n <rolatech-skeleton class=\"h-4 flex-1\"></rolatech-skeleton>\n </div>\n }\n </div>\n </section>\n } @else { @if (payment(); as detail) {\n <section class=\"detail-card\">\n <div class=\"detail-row\">\n <span>Status</span>\n <strong>{{ status[detail.status] || detail.status }}</strong>\n </div>\n <div class=\"detail-row\">\n <span>Type</span>\n <span>{{ types[detail.type] || detail.type }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Amount</span>\n <span>{{ detail.amount | price }}</span>\n </div>\n @if (detail.deposit) {\n <div class=\"detail-row\">\n <span>Deposit</span>\n <span>{{ detail.deposit| price }}</span>\n </div>\n }\n <div class=\"detail-row\">\n <span>Payment ID</span>\n <span>{{ detail.id }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Invoice #</span>\n <span>{{ detail.invoiceId }}</span>\n </div>\n <div class=\"detail-row\">\n <span>User</span>\n <span>{{ detail.userId || '-' }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Product ID</span>\n <span>{{ detail.productId || '-' }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Created</span>\n <span>{{ detail.createdAt | date:'dd/MM/yyyy':'Europe/London' }}</span>\n </div>\n </section>\n @if (detail.description) {\n <section class=\"detail-card\">\n <div class=\"detail-title\">Memo</div>\n <p class=\"detail-description\">{{ detail.description }}</p>\n </section>\n } } @else {\n <div class=\"detail-state\">Payment not found</div>\n } }\n</div>\n", styles: [".detail-card{background:var(--rt-raised-background, #fff);border-radius:.5rem;padding:1.5rem;margin-bottom:1rem;box-shadow:0 1px 2px #0000000a}.detail-row{display:flex;justify-content:space-between;gap:1rem;padding:.75rem 0;border-bottom:1px solid var(--rt-border-color, rgba(0, 0, 0, .06));font-size:.95rem}.detail-row:last-child{border-bottom:none}.detail-row span:first-child{color:var(--rt-text-secondary, #6b7280)}.detail-row strong{font-weight:600}.detail-title{font-weight:600;margin-bottom:.5rem}.detail-description{margin:0;line-height:1.5;color:var(--rt-text-secondary, #6b7280)}.detail-state{padding:2rem 0;text-align:center;color:var(--rt-text-secondary, #6b7280)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ToolbarComponent, selector: "rolatech-toolbar", inputs: ["title", "subtitle", "back", "link", "large", "divider"] }, { kind: "component", type: Skeleton, selector: "rolatech-skeleton" }, { kind: "pipe", type: i1$2.DatePipe, name: "date" }, { kind: "pipe", type: PricePipe, name: "price" }] });
586
+ }
587
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: PaymentManageDetail, decorators: [{
588
+ type: Component,
589
+ args: [{ selector: 'rolatech-payment-manage-detail', imports: [CommonModule, ToolbarComponent, Skeleton, PricePipe], template: "<rolatech-toolbar title=\"Payment Detail\" link=\"../\"></rolatech-toolbar>\n<div class=\"px-4\">\n @if (loading()) {\n <section class=\"detail-card space-y-4\">\n <rolatech-skeleton class=\"h-6 w-32\"></rolatech-skeleton>\n <div class=\"space-y-3\">\n @for (_ of [1, 2, 3, 4, 5, 6]; track idx; let idx = $index) {\n <div class=\"flex items-center gap-4\">\n <rolatech-skeleton class=\"h-4 w-24\"></rolatech-skeleton>\n <rolatech-skeleton class=\"h-4 flex-1\"></rolatech-skeleton>\n </div>\n }\n </div>\n </section>\n } @else { @if (payment(); as detail) {\n <section class=\"detail-card\">\n <div class=\"detail-row\">\n <span>Status</span>\n <strong>{{ status[detail.status] || detail.status }}</strong>\n </div>\n <div class=\"detail-row\">\n <span>Type</span>\n <span>{{ types[detail.type] || detail.type }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Amount</span>\n <span>{{ detail.amount | price }}</span>\n </div>\n @if (detail.deposit) {\n <div class=\"detail-row\">\n <span>Deposit</span>\n <span>{{ detail.deposit| price }}</span>\n </div>\n }\n <div class=\"detail-row\">\n <span>Payment ID</span>\n <span>{{ detail.id }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Invoice #</span>\n <span>{{ detail.invoiceId }}</span>\n </div>\n <div class=\"detail-row\">\n <span>User</span>\n <span>{{ detail.userId || '-' }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Product ID</span>\n <span>{{ detail.productId || '-' }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Created</span>\n <span>{{ detail.createdAt | date:'dd/MM/yyyy':'Europe/London' }}</span>\n </div>\n </section>\n @if (detail.description) {\n <section class=\"detail-card\">\n <div class=\"detail-title\">Memo</div>\n <p class=\"detail-description\">{{ detail.description }}</p>\n </section>\n } } @else {\n <div class=\"detail-state\">Payment not found</div>\n } }\n</div>\n", styles: [".detail-card{background:var(--rt-raised-background, #fff);border-radius:.5rem;padding:1.5rem;margin-bottom:1rem;box-shadow:0 1px 2px #0000000a}.detail-row{display:flex;justify-content:space-between;gap:1rem;padding:.75rem 0;border-bottom:1px solid var(--rt-border-color, rgba(0, 0, 0, .06));font-size:.95rem}.detail-row:last-child{border-bottom:none}.detail-row span:first-child{color:var(--rt-text-secondary, #6b7280)}.detail-row strong{font-weight:600}.detail-title{font-weight:600;margin-bottom:.5rem}.detail-description{margin:0;line-height:1.5;color:var(--rt-text-secondary, #6b7280)}.detail-state{padding:2rem 0;text-align:center;color:var(--rt-text-secondary, #6b7280)}\n"] }]
590
+ }] });
591
+
592
+ const paymentManageRoutes = [
593
+ { path: '', component: PaymentManageIndex },
594
+ { path: ':id', component: PaymentManageDetail },
595
+ ];
596
+
239
597
  /**
240
598
  * Generated bundle index. Do not edit.
241
599
  */
242
600
 
243
- export { PayoutApproveDialogComponent, PayoutStatus, PayoutType, WithdrawDialogComponent, payoutsRoutes };
601
+ export { PayoutApproveDialogComponent, PayoutStatus, PayoutType, WithdrawDialogComponent, paymentManageRoutes, paymentsRoutes, payoutsRoutes };
244
602
  //# sourceMappingURL=rolatech-angular-payment.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"rolatech-angular-payment.mjs","sources":["../../../../packages/angular-payment/src/lib/interfaces/payout.ts","../../../../packages/angular-payment/src/lib/pages/payout-index/payout-index.component.ts","../../../../packages/angular-payment/src/lib/pages/payout-index/payout-index.component.html","../../../../packages/angular-payment/src/lib/components/withdraw-dialog/withdraw-dialog.component.ts","../../../../packages/angular-payment/src/lib/components/withdraw-dialog/withdraw-dialog.component.html","../../../../packages/angular-payment/src/lib/components/payout-approve-dialog/payout-approve-dialog.component.ts","../../../../packages/angular-payment/src/lib/components/payout-approve-dialog/payout-approve-dialog.component.html","../../../../packages/angular-payment/src/lib/pages/payout-detail/payout-detail.component.ts","../../../../packages/angular-payment/src/lib/pages/payout-detail/payout-detail.component.html","../../../../packages/angular-payment/src/lib/pages/payout.routes.ts","../../../../packages/angular-payment/src/rolatech-angular-payment.ts"],"sourcesContent":["export interface Payout {\n id: string;\n amount: number;\n status: PayoutStatus | string;\n type: PayoutType;\n fee: number;\n total: number;\n orderId: string;\n bookingId: string;\n description: string;\n createdAt: string;\n}\n\nexport enum PayoutStatus {\n CREATED = <any>'创建',\n PENDING = <any>'处理中',\n PAID = <any>'已支付',\n CANCELED = <any>'已取消',\n FAILED = <any>'失败',\n}\nexport enum PayoutType {\n BANK = <any>'银行转账',\n CARD = <any>'银行卡',\n WECHAT = <any>'微信零钱',\n}\n","import { Component, OnInit, inject, viewChild } from '@angular/core';\nimport { PageEvent, MatPaginator } from '@angular/material/paginator';\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\nimport { BaseComponent, ToolbarComponent } from '@rolatech/angular-components';\nimport { OrderPayoutService } from '@rolatech/angular-services';\nimport { Payout, PayoutStatus } from '../../interfaces/payout';\nimport { RouterLink } from '@angular/router';\n\n@Component({\n selector: 'rolatech-payout-index',\n templateUrl: './payout-index.component.html',\n styleUrls: ['./payout-index.component.scss'],\n imports: [ToolbarComponent, MatTableModule, MatPaginator, RouterLink],\n})\nexport class PayoutIndexComponent extends BaseComponent implements OnInit {\n payoutService = inject(OrderPayoutService);\n\n isLoading = false;\n isSearch = false;\n pageEvent!: PageEvent;\n length = 100;\n pageSize = 15;\n pageSizeOptions: number[] = [5, 10, 25, 100];\n dataSource = new MatTableDataSource<Payout>();\n payouts: Payout[] = [];\n status: any = PayoutStatus;\n displayedColumns: string[] = ['status', 'total', 'createdAt'];\n paginator = viewChild(MatPaginator);\n\n orderOptions = [\n {\n key: 'createdAt',\n value: '创建时间',\n icon: 'arrow_upward',\n sort: 'asc',\n },\n {\n key: 'createdAt',\n value: '创建时间',\n icon: 'arrow_downward',\n sort: 'desc',\n },\n {\n key: 'status',\n value: '状态',\n icon: 'arrow_upward',\n sort: 'asc',\n },\n {\n key: 'status',\n value: '状态',\n icon: 'arrow_downward',\n sort: 'desc',\n },\n ];\n orderString = 'createdAt desc';\n ngOnInit(): void {\n this.find(null);\n }\n find(event?: PageEvent | null): any {\n this.isLoading = true;\n const page = event ? event.pageIndex + 1 : 1;\n const limit = event ? event.pageSize : 15;\n const sort = this.orderString;\n const options = {\n page,\n limit,\n sort,\n };\n this.payoutService.find(options).subscribe({\n next: (res: any) => {\n this.payouts = res.data;\n this.dataSource.data = this.payouts;\n this.length = res.meta.pagination.count;\n this.isLoading = false;\n },\n error: (e) => {\n this.isLoading = false;\n this.snackBarService.open(e.message);\n },\n });\n }\n}\n","<rolatech-toolbar title=\"支出记录\"> </rolatech-toolbar>\n<div>\n <table mat-table [dataSource]=\"dataSource\">\n <!-- status Column -->\n <ng-container matColumnDef=\"status\">\n <th mat-header-cell *matHeaderCellDef>状态</th>\n <td mat-cell *matCellDef=\"let item\">{{ status[item.status] }}</td>\n </ng-container>\n\n <!-- amount Column -->\n <ng-container matColumnDef=\"total\">\n <th mat-header-cell *matHeaderCellDef>金额(元)</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.amount / 100 }}</td>\n </ng-container>\n\n <!-- createdAt Column -->\n <ng-container matColumnDef=\"createdAt\">\n <th mat-header-cell *matHeaderCellDef>交易日期</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.createdAt }}</td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: displayedColumns\"\n routerLink=\"./{{ row.id }}\"\n class=\"hover:bg-[--rt-raised-background] cursor-pointer\"\n ></tr>\n </table>\n <mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"pageEvent = find($event)\"\n hidePageSize\n showFirstLastButtons\n >\n </mat-paginator>\n</div>\n","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogClose } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatOptionModule } from '@angular/material/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\n\n@Component({\n selector: 'rolatech-withdraw-dialog',\n templateUrl: './withdraw-dialog.component.html',\n styleUrls: ['./withdraw-dialog.component.scss'],\n imports: [\n MatIconModule,\n MatDividerModule,\n MatFormFieldModule,\n MatSelectModule,\n FormsModule,\n MatOptionModule,\n MatInputModule,\n MatButtonModule,\n MatDialogClose,\n ],\n})\nexport class WithdrawDialogComponent {\n total!: number;\n type = [\n {\n key: 'balance',\n value: '微信零钱',\n },\n ];\n constructor(\n private dialogRef: MatDialogRef<WithdrawDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n ) {}\n compareFn(o1: any, o2: any) {\n return o1.id === o2.id;\n }\n close() {\n this.dialogRef.close();\n }\n}\n","<div class=\"flex flex-col h-full\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n <div class=\"text-md font-medium\" i18n>Withdraw</div>\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"flex-1 mt-3 overflow-y-auto max-h-[55vh]\">\n <div class=\"p-3\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Withdraw to</mat-label>\n <mat-select name=\"type\" [(ngModel)]=\"type\" [compareWith]=\"compareFn\">\n @for (item of type; track item) {\n <mat-option [value]=\"item.key\">\n {{ item.value }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Total </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"total\" name=\"name\" required type=\"number\" />\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"h-16 flex justify-end items-center px-5\">\n <button mat-button [mat-dialog-close]=\"total\" cdkFocusInitial i18n>Ok</button>\n </div>\n</div>\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'rolatech-payout-approve-dialog',\n imports: [CommonModule],\n templateUrl: './payout-approve-dialog.component.html',\n styleUrl: './payout-approve-dialog.component.scss',\n})\nexport class PayoutApproveDialogComponent {}\n","<p>payout-approve-dialog works!</p>\n","import { Component, OnInit, inject } from '@angular/core';\nimport { AuthService, AuthUserService } from '@rolatech/angular-auth';\nimport { BaseComponent, ToolbarComponent } from '@rolatech/angular-components';\nimport { Order, OrderPayout, OrderPayoutStatus } from '@rolatech/angular-order';\nimport { PayoutApproveDialogComponent } from '../../components';\nimport { OrderPayoutService, OrderService } from '@rolatech/angular-services';\n\n@Component({\n selector: 'rolatech-payout-detail',\n templateUrl: './payout-detail.component.html',\n styleUrls: ['./payout-detail.component.scss'],\n imports: [ToolbarComponent],\n})\nexport class PayoutDetailComponent extends BaseComponent implements OnInit {\n payout!: OrderPayout;\n order!: Order;\n instructor: any;\n status: any = OrderPayoutStatus;\n authService = inject(AuthService);\n authUserService = inject(AuthUserService);\n orderPayoutService = inject(OrderPayoutService);\n orderService = inject(OrderService);\n ngOnInit(): void {\n this.getPayout();\n }\n getPayout() {\n this.orderPayoutService.get(this.id).subscribe({\n next: (res: any) => {\n this.payout = res.data;\n this.getOrder(this.payout.orderId);\n },\n });\n }\n getOrder(orderId: string) {\n this.orderService.get(orderId).subscribe({\n next: (res: any) => {\n this.order = res.data;\n this.findInstructorInfo(this.order.merchantId);\n },\n });\n }\n findInstructorInfo(instructorId: string) {\n this.authUserService.getPublicUserInfo(instructorId).subscribe({\n next: (res) => {\n this.instructor = res;\n },\n });\n }\n approve() {\n const dialogRef = this.dialog.open(PayoutApproveDialogComponent, {\n width: '400px',\n data: {\n title: '支付分账',\n message: `分账批准, 支付创作者${this.payout.amount / 100}元`,\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.orderPayoutService.approve(this.id).subscribe({\n next: (res) => {\n this.payout.status = 'PENDING';\n this.snackBarService.open('已通过');\n },\n error: (e) => {\n this.snackBarService.open(e.message);\n },\n });\n }\n });\n }\n}\n","<rolatech-toolbar title=\"分账审核详情\">\n @if (payout && payout.status === 'CREATED') {\n <button mat-button (click)=\"approve()\">通过</button>\n }\n</rolatech-toolbar>\n\n<div class=\"py-3 px-5\">\n @if (payout) {\n <div class=\"flex justify-between\">\n <div class=\"flex flex-col\">\n <div class=\"text-2xl font-medium mb-3\">\n {{ status[payout.status] }}\n </div>\n <div>\n <span>分账金额: </span> <span> ¥{{ payout.amount / 100 }}</span>\n </div>\n <div>\n <span>订单总计: </span> <span>¥{{ payout.total / 100 }}</span>\n </div>\n @if (order) {\n <div class=\"mt-3\">\n <div class=\"text-lg font-medium\" i18n>Order info</div>\n <div>\n <div><span>订单号: </span>{{ order.orderNo }}</div>\n <div><span>下单日期: </span>{{ order.createdAt }}</div>\n <div><span>应付金额: </span>¥{{ (order.total / 100).toFixed(2) }}</div>\n </div>\n </div>\n }\n @if (instructor) {\n <div class=\"mt-3\">\n <div class=\"text-lg font-medium\">创作者信息</div>\n <div>\n <div><span>姓名: </span>{{ instructor?.name }}</div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n</div>\n","import { Routes } from '@angular/router';\nimport { PayoutIndexComponent } from './payout-index/payout-index.component';\nimport { PayoutDetailComponent } from './payout-detail/payout-detail.component';\n\nexport const payoutsRoutes: Routes = [\n { path: '', component: PayoutIndexComponent },\n { path: ':id', component: PayoutDetailComponent },\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rolatech-angular-payment.mjs","sources":["../../../../packages/angular-payment/src/lib/interfaces/payout.ts","../../../../packages/angular-payment/src/lib/pages/payout-index/payout-index.component.ts","../../../../packages/angular-payment/src/lib/pages/payout-index/payout-index.component.html","../../../../packages/angular-payment/src/lib/components/withdraw-dialog/withdraw-dialog.component.ts","../../../../packages/angular-payment/src/lib/components/withdraw-dialog/withdraw-dialog.component.html","../../../../packages/angular-payment/src/lib/components/payout-approve-dialog/payout-approve-dialog.component.ts","../../../../packages/angular-payment/src/lib/components/payout-approve-dialog/payout-approve-dialog.component.html","../../../../packages/angular-payment/src/lib/pages/payout-detail/payout-detail.component.ts","../../../../packages/angular-payment/src/lib/pages/payout-detail/payout-detail.component.html","../../../../packages/angular-payment/src/lib/pages/payout.routes.ts","../../../../packages/angular-payment/src/lib/pages/payment/payment-index/payment-index.ts","../../../../packages/angular-payment/src/lib/pages/payment/payment-index/payment-index.html","../../../../packages/angular-payment/src/lib/pages/payment/payment-detail/payment-detail.ts","../../../../packages/angular-payment/src/lib/pages/payment/payment-detail/payment-detail.html","../../../../packages/angular-payment/src/lib/pages/payment/payment.routes.ts","../../../../packages/angular-payment/src/lib/pages/payment-manage/payment-manage-index/payment-manage-index.ts","../../../../packages/angular-payment/src/lib/pages/payment-manage/payment-manage-index/payment-manage-index.html","../../../../packages/angular-payment/src/lib/pages/payment-manage/payment-manage-detail/payment-manage-detail.ts","../../../../packages/angular-payment/src/lib/pages/payment-manage/payment-manage-detail/payment-manage-detail.html","../../../../packages/angular-payment/src/lib/pages/payment-manage/payment-manage.routes.ts","../../../../packages/angular-payment/src/rolatech-angular-payment.ts"],"sourcesContent":["export interface Payout {\n id: string;\n amount: number;\n status: PayoutStatus | string;\n type: PayoutType;\n fee: number;\n total: number;\n orderId: string;\n bookingId: string;\n description: string;\n createdAt: string;\n}\n\nexport enum PayoutStatus {\n CREATED = <any>'创建',\n PENDING = <any>'处理中',\n PAID = <any>'已支付',\n CANCELED = <any>'已取消',\n FAILED = <any>'失败',\n}\nexport enum PayoutType {\n BANK = <any>'银行转账',\n CARD = <any>'银行卡',\n WECHAT = <any>'微信零钱',\n}\n","import { Component, OnInit, inject, viewChild } from '@angular/core';\nimport { PageEvent, MatPaginator } from '@angular/material/paginator';\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\nimport { BaseComponent, ToolbarComponent } from '@rolatech/angular-components';\nimport { OrderPayoutService } from '@rolatech/angular-services';\nimport { Payout, PayoutStatus } from '../../interfaces/payout';\nimport { RouterLink } from '@angular/router';\n\n@Component({\n selector: 'rolatech-payout-index',\n templateUrl: './payout-index.component.html',\n styleUrls: ['./payout-index.component.scss'],\n imports: [ToolbarComponent, MatTableModule, MatPaginator, RouterLink],\n})\nexport class PayoutIndexComponent extends BaseComponent implements OnInit {\n payoutService = inject(OrderPayoutService);\n\n isLoading = false;\n isSearch = false;\n pageEvent!: PageEvent;\n length = 100;\n pageSize = 15;\n pageSizeOptions: number[] = [5, 10, 25, 100];\n dataSource = new MatTableDataSource<Payout>();\n payouts: Payout[] = [];\n status: any = PayoutStatus;\n displayedColumns: string[] = ['status', 'total', 'createdAt'];\n paginator = viewChild(MatPaginator);\n\n orderOptions = [\n {\n key: 'createdAt',\n value: '创建时间',\n icon: 'arrow_upward',\n sort: 'asc',\n },\n {\n key: 'createdAt',\n value: '创建时间',\n icon: 'arrow_downward',\n sort: 'desc',\n },\n {\n key: 'status',\n value: '状态',\n icon: 'arrow_upward',\n sort: 'asc',\n },\n {\n key: 'status',\n value: '状态',\n icon: 'arrow_downward',\n sort: 'desc',\n },\n ];\n orderString = 'createdAt desc';\n ngOnInit(): void {\n this.find(null);\n }\n find(event?: PageEvent | null): any {\n this.isLoading = true;\n const page = event ? event.pageIndex + 1 : 1;\n const limit = event ? event.pageSize : 15;\n const sort = this.orderString;\n const options = {\n page,\n limit,\n sort,\n };\n this.payoutService.find(options).subscribe({\n next: (res: any) => {\n this.payouts = res.data;\n this.dataSource.data = this.payouts;\n this.length = res.meta.pagination.count;\n this.isLoading = false;\n },\n error: (e) => {\n this.isLoading = false;\n this.snackBarService.open(e.message);\n },\n });\n }\n}\n","<rolatech-toolbar title=\"支出记录\"> </rolatech-toolbar>\n<div>\n <table mat-table [dataSource]=\"dataSource\">\n <!-- status Column -->\n <ng-container matColumnDef=\"status\">\n <th mat-header-cell *matHeaderCellDef>状态</th>\n <td mat-cell *matCellDef=\"let item\">{{ status[item.status] }}</td>\n </ng-container>\n\n <!-- amount Column -->\n <ng-container matColumnDef=\"total\">\n <th mat-header-cell *matHeaderCellDef>金额(元)</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.amount / 100 }}</td>\n </ng-container>\n\n <!-- createdAt Column -->\n <ng-container matColumnDef=\"createdAt\">\n <th mat-header-cell *matHeaderCellDef>交易日期</th>\n <td mat-cell *matCellDef=\"let item\">{{ item.createdAt }}</td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: displayedColumns\"\n routerLink=\"./{{ row.id }}\"\n class=\"hover:bg-[--rt-raised-background] cursor-pointer\"\n ></tr>\n </table>\n <mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"pageEvent = find($event)\"\n hidePageSize\n showFirstLastButtons\n >\n </mat-paginator>\n</div>\n","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogClose } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatOptionModule } from '@angular/material/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\n\n@Component({\n selector: 'rolatech-withdraw-dialog',\n templateUrl: './withdraw-dialog.component.html',\n styleUrls: ['./withdraw-dialog.component.scss'],\n imports: [\n MatIconModule,\n MatDividerModule,\n MatFormFieldModule,\n MatSelectModule,\n FormsModule,\n MatOptionModule,\n MatInputModule,\n MatButtonModule,\n MatDialogClose,\n ],\n})\nexport class WithdrawDialogComponent {\n total!: number;\n type = [\n {\n key: 'balance',\n value: '微信零钱',\n },\n ];\n constructor(\n private dialogRef: MatDialogRef<WithdrawDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n ) {}\n compareFn(o1: any, o2: any) {\n return o1.id === o2.id;\n }\n close() {\n this.dialogRef.close();\n }\n}\n","<div class=\"flex flex-col h-full\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n <div class=\"text-md font-medium\" i18n>Withdraw</div>\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"flex-1 mt-3 overflow-y-auto max-h-[55vh]\">\n <div class=\"p-3\">\n <mat-form-field appearance=\"fill\">\n <mat-label i18n>Withdraw to</mat-label>\n <mat-select name=\"type\" [(ngModel)]=\"type\" [compareWith]=\"compareFn\">\n @for (item of type; track item) {\n <mat-option [value]=\"item.key\">\n {{ item.value }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"fill\">\n <mat-label i18n> Total </mat-label>\n <input matInput type=\"text\" [(ngModel)]=\"total\" name=\"name\" required type=\"number\" />\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"h-16 flex justify-end items-center px-5\">\n <button mat-button [mat-dialog-close]=\"total\" cdkFocusInitial i18n>Ok</button>\n </div>\n</div>\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'rolatech-payout-approve-dialog',\n imports: [CommonModule],\n templateUrl: './payout-approve-dialog.component.html',\n styleUrl: './payout-approve-dialog.component.scss',\n})\nexport class PayoutApproveDialogComponent {}\n","<p>payout-approve-dialog works!</p>\n","import { Component, OnInit, inject } from '@angular/core';\nimport { AuthService, AuthUserService } from '@rolatech/angular-auth';\nimport { BaseComponent, ToolbarComponent } from '@rolatech/angular-components';\nimport { Order, OrderPayout, OrderPayoutStatus } from '@rolatech/angular-order';\nimport { PayoutApproveDialogComponent } from '../../components';\nimport { OrderPayoutService, OrderService } from '@rolatech/angular-services';\n\n@Component({\n selector: 'rolatech-payout-detail',\n templateUrl: './payout-detail.component.html',\n styleUrls: ['./payout-detail.component.scss'],\n imports: [ToolbarComponent],\n})\nexport class PayoutDetailComponent extends BaseComponent implements OnInit {\n payout!: OrderPayout;\n order!: Order;\n instructor: any;\n status: any = OrderPayoutStatus;\n authService = inject(AuthService);\n authUserService = inject(AuthUserService);\n orderPayoutService = inject(OrderPayoutService);\n orderService = inject(OrderService);\n ngOnInit(): void {\n this.getPayout();\n }\n getPayout() {\n this.orderPayoutService.get(this.id).subscribe({\n next: (res: any) => {\n this.payout = res.data;\n this.getOrder(this.payout.orderId);\n },\n });\n }\n getOrder(orderId: string) {\n this.orderService.get(orderId).subscribe({\n next: (res: any) => {\n this.order = res.data;\n this.findInstructorInfo(this.order.merchantId);\n },\n });\n }\n findInstructorInfo(instructorId: string) {\n this.authUserService.getPublicUserInfo(instructorId).subscribe({\n next: (res) => {\n this.instructor = res;\n },\n });\n }\n approve() {\n const dialogRef = this.dialog.open(PayoutApproveDialogComponent, {\n width: '400px',\n data: {\n title: '支付分账',\n message: `分账批准, 支付创作者${this.payout.amount / 100}元`,\n },\n });\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.orderPayoutService.approve(this.id).subscribe({\n next: (res) => {\n this.payout.status = 'PENDING';\n this.snackBarService.open('已通过');\n },\n error: (e) => {\n this.snackBarService.open(e.message);\n },\n });\n }\n });\n }\n}\n","<rolatech-toolbar title=\"分账审核详情\">\n @if (payout && payout.status === 'CREATED') {\n <button mat-button (click)=\"approve()\">通过</button>\n }\n</rolatech-toolbar>\n\n<div class=\"py-3 px-5\">\n @if (payout) {\n <div class=\"flex justify-between\">\n <div class=\"flex flex-col\">\n <div class=\"text-2xl font-medium mb-3\">\n {{ status[payout.status] }}\n </div>\n <div>\n <span>分账金额: </span> <span> ¥{{ payout.amount / 100 }}</span>\n </div>\n <div>\n <span>订单总计: </span> <span>¥{{ payout.total / 100 }}</span>\n </div>\n @if (order) {\n <div class=\"mt-3\">\n <div class=\"text-lg font-medium\" i18n>Order info</div>\n <div>\n <div><span>订单号: </span>{{ order.orderNo }}</div>\n <div><span>下单日期: </span>{{ order.createdAt }}</div>\n <div><span>应付金额: </span>¥{{ (order.total / 100).toFixed(2) }}</div>\n </div>\n </div>\n }\n @if (instructor) {\n <div class=\"mt-3\">\n <div class=\"text-lg font-medium\">创作者信息</div>\n <div>\n <div><span>姓名: </span>{{ instructor?.name }}</div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n</div>\n","import { Routes } from '@angular/router';\nimport { PayoutIndexComponent } from './payout-index/payout-index.component';\nimport { PayoutDetailComponent } from './payout-detail/payout-detail.component';\n\nexport const payoutsRoutes: Routes = [\n { path: '', component: PayoutIndexComponent },\n { path: ':id', component: PayoutDetailComponent },\n];\n","import { Component, OnInit, inject, signal } from '@angular/core';\nimport { CommonModule, DecimalPipe } from '@angular/common';\nimport { RouterLink } from '@angular/router';\nimport {\n AbstractLoading,\n Skeleton,\n ToolbarComponent,\n ContainerComponent,\n TabsComponent,\n TabComponent,\n} from '@rolatech/angular-components';\nimport { PaymentService } from '@rolatech/angular-services';\nimport { Payment, PaymentStatus, PaymentType } from '@rolatech/angular-order';\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\nimport { map, distinctUntilChanged, switchMap, finalize } from 'rxjs';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-payment-index',\n imports: [\n CommonModule,\n ToolbarComponent,\n RouterLink,\n Skeleton,\n PricePipe,\n ContainerComponent,\n MatPaginator,\n TabsComponent,\n TabComponent,\n ],\n templateUrl: './payment-index.html',\n styleUrl: './payment-index.scss',\n})\nexport class PaymentIndex extends AbstractLoading implements OnInit {\n private paymentService = inject(PaymentService);\n\n payments = signal<Payment[]>([]);\n status = PaymentStatus;\n types = PaymentType;\n pageIndex = signal(0);\n pageSize = signal(15);\n pageSizeOptions: number[] = [5, 10, 15, 25];\n skeletonRows = Array.from({ length: 6 }, (_, index) => index);\n meta: any;\n\n links = [\n {\n name: 'All',\n icon: 'dashboard',\n },\n {\n name: 'Pending',\n icon: 'category',\n status: 'PENDING',\n },\n {\n name: 'Succeeded',\n icon: 'category',\n status: 'SUCCEEDED',\n },\n {\n name: 'Refunded',\n icon: 'category',\n status: 'REFUNDED',\n },\n {\n name: 'Failed',\n icon: 'category',\n status: 'FAILED',\n },\n ];\n select = 0;\n length = 100;\n private readonly statusBadgeMap: Record<string, string> = {\n PENDING: 'bg-yellow-100 text-yellow-800',\n COMPLETED: 'bg-green-100 text-green-700',\n REFUNDED: 'bg-blue-100 text-blue-700',\n FAILED: 'bg-rose-100 text-rose-700',\n };\n\n ngOnInit(): void {\n const sub = this.route.queryParamMap\n .pipe(\n map((p) => {\n const page = p.get('page') ? Number(p.get('page')) : 1;\n this.pageIndex.set(Math.max(page - 1, 0));\n const status = p.get('status') || undefined;\n\n let filter = '';\n if (status) {\n this.select = this.links.findIndex((item) => item.status === status);\n filter = `status:${status?.toUpperCase()}`;\n }\n return {\n page,\n filter,\n limit: p.get('limit') ? Number(p.get('limit')) : 15,\n sort: p.get('sort') || undefined,\n };\n }),\n // Cheap deep compare via JSON to avoid spam calls when nothing changed\n map((o) => JSON.stringify(o)),\n distinctUntilChanged(),\n map((s) => JSON.parse(s)),\n switchMap((params) => {\n this.loading = true;\n params['sort'] = 'updatedAt desc';\n return this.paymentService.me(params).pipe(finalize(() => (this.loading = false)));\n }),\n )\n .subscribe({\n next: (res: any) => {\n this.payments.set(res.data);\n this.meta = res.meta;\n this.length = res.meta.pagination.count;\n },\n error: (error) => {\n this.payments.set([]);\n this.length = 0;\n this.snackBarService.open(error.message || 'Unable to load payments');\n },\n });\n\n // // auto-unsubscribe on destroy\n this.destroyRef.onDestroy(() => sub.unsubscribe());\n }\n\n find(): void {\n this.loading.set(true);\n const options = {\n page: this.pageIndex() + 1,\n limit: this.pageSize(),\n sort: 'createdAt desc',\n };\n this.paymentService.find(options).subscribe({\n next: (res: any) => {\n const payments: Payment[] = res?.data ?? [];\n this.payments.set(payments);\n const count = res?.meta?.pagination?.count;\n this.loading.set(false);\n },\n error: (error) => {\n this.loading.set(false);\n this.snackBarService.open(error?.message || 'Unable to load payments');\n },\n });\n }\n statusBadgeClass(status: PaymentStatus | string): string {\n return this.statusBadgeMap[status as string] ?? 'bg-slate-100 text-slate-600';\n }\n onPage(e: PageEvent) {\n this.router.navigate([], {\n queryParams: { page: e.pageIndex + 1, limit: e.pageSize },\n queryParamsHandling: 'merge',\n replaceUrl: true, // optional: avoid stacking history on every page click\n });\n }\n}\n","<rolatech-container>\n <rolatech-toolbar title=\"Payments\"></rolatech-toolbar>\n <rolatech-tabs [select]=\"select\">\n @for (item of links; track item) { @if (item.status) {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\" [queryParams]=\"{ status: item.status }\"></rolatech-tab>\n } @else {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\"></rolatech-tab>\n } }\n </rolatech-tabs>\n <div class=\"space-y-4 mt-3\">\n <div class=\"overflow-hidden\">\n <div class=\"overflow-x-auto\">\n <table class=\"min-w-full divide-y divide-[--rt-raised-background] text-sm\">\n <thead\n class=\"bg-[--rt-raised-background] text-left text-xs font-semibold uppercase tracking-wide text-[--rt-primary-text]\"\n >\n <tr>\n <th class=\"px-2 py-3\">Invoice #</th>\n <th class=\"px-6 py-3\">Status</th>\n <th class=\"px-6 py-3\">Type</th>\n <th class=\"px-6 py-3\">Amount</th>\n <th class=\"px-6 py-3 text-right\">Created</th>\n </tr>\n </thead>\n <tbody class=\"divide-y divide-[--rt-raised-background]\">\n @if (loading()) { @for (row of skeletonRows; track row) {\n <tr>\n <td class=\"py-4\" colspan=\"5\">\n <rolatech-skeleton class=\"h-6 w-full\"></rolatech-skeleton>\n </td>\n </tr>\n } } @else { @if (payments().length) { @for (payment of payments(); track payment.id) {\n <tr class=\"transition hover:bg-[--rt-raised-background] hover:cursor-pointer\" routerLink=\"./{{ payment.id }}\">\n <td class=\"px-2 py-4 text-[--rt-primary-text]\">{{ payment.invoiceId }}</td>\n <td class=\"px-4 py-4\">\n <span\n class=\"inline-flex items-center rounded-full px-3 py-2 text-xs font-semibold\"\n [ngClass]=\"statusBadgeClass(payment.status)\"\n >\n {{ status[payment.status] || payment.status }}\n </span>\n </td>\n <td class=\"px-6 py-4 text-[--rt-primary-text]\">{{ types[payment.type] || payment.type }}</td>\n <td class=\"px-6 py-4 font-semibold text-[--rt-primary-text]\">{{ payment.amount | price }}</td>\n <td class=\"px-6 py-4 text-[--rt-primary-text] text-right\">\n {{ payment.createdAt | date:'dd/MM/yyyy':'Europe/London'}}\n </td>\n </tr>\n } } @else {\n <tr>\n <td class=\"px-6 py-6 text-center text-sm text-[--rt-primary-text]\" colspan=\"5\">No payment records</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n <mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageIndex]=\"pageIndex()\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\"\n hidePageSize\n showFirstLastButtons\n >\n </mat-paginator>\n </div>\n</rolatech-container>\n","import { Component, OnInit, inject, signal } from '@angular/core';\nimport { ToolbarComponent, ContainerComponent, AbstractLoading, Skeleton } from '@rolatech/angular-components';\nimport { CommonModule } from '@angular/common';\nimport { PaymentService } from '@rolatech/angular-services';\nimport { Payment, PaymentStatus, PaymentType } from '@rolatech/angular-order';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-payment-detail',\n imports: [CommonModule, ToolbarComponent, ContainerComponent, Skeleton, PricePipe],\n templateUrl: './payment-detail.html',\n styleUrl: './payment-detail.scss',\n})\nexport class PaymentDetail extends AbstractLoading implements OnInit {\n private paymentService = inject(PaymentService);\n\n payment = signal<Payment | null>(null);\n status = PaymentStatus;\n types = PaymentType;\n\n ngOnInit(): void {\n const id = this.route.snapshot.paramMap.get('id');\n if (id) {\n this.get(id);\n } else {\n this.loading.set(false);\n }\n }\n\n private get(id: string): void {\n this.loading.set(true);\n this.paymentService.get(id).subscribe({\n next: (res: any) => {\n this.payment.set(res?.data ?? null);\n this.loading.set(false);\n },\n error: (error) => {\n this.loading.set(false);\n this.snackBarService.open(error?.message || 'Unable to load payment detail');\n },\n });\n }\n}\n","<rolatech-container>\n <rolatech-toolbar title=\"Payment Detail\" link=\"../\"></rolatech-toolbar>\n @if (loading()) {\n <section class=\"detail-card space-y-4\">\n <rolatech-skeleton class=\"h-6 w-32\"></rolatech-skeleton>\n <div class=\"space-y-3\">\n @for (_ of [1, 2, 3, 4, 5, 6]; track idx; let idx = $index) {\n <div class=\"flex items-center gap-4\">\n <rolatech-skeleton class=\"h-4 w-24\"></rolatech-skeleton>\n <rolatech-skeleton class=\"h-4 flex-1\"></rolatech-skeleton>\n </div>\n }\n </div>\n </section>\n } @else { @if (payment(); as detail) {\n <section class=\"detail-card\">\n <div class=\"detail-row\">\n <span>Status</span>\n <strong>{{ status[detail.status] || detail.status }}</strong>\n </div>\n <div class=\"detail-row\">\n <span>Type</span>\n <span>{{ types[detail.type] || detail.type }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Amount</span>\n <span>{{ detail.amount | price }}</span>\n </div>\n @if (detail.deposit) {\n <div class=\"detail-row\">\n <span>Deposit</span>\n <span>{{ detail.deposit| price }}</span>\n </div>\n }\n <div class=\"detail-row\">\n <span>Payment ID</span>\n <span>{{ detail.id }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Order #</span>\n <span>{{ detail.invoiceId }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Product ID</span>\n <span>{{ detail.productId || '-' }}</span>\n </div>\n <div class=\"detail-row\">\n <span>User</span>\n <span>{{ detail.userId || '-' }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Created</span>\n <span>{{ detail.createdAt | date:'dd/MM/yyyy':'Europe/London' }}</span>\n </div>\n </section>\n @if (detail.description) {\n <section class=\"detail-card\">\n <div class=\"detail-title\">Memo</div>\n <p class=\"detail-description\">{{ detail.description }}</p>\n </section>\n } } @else {\n <div class=\"detail-state\">Payment not found</div>\n } }\n</rolatech-container>\n","import { Routes } from '@angular/router';\nimport { PaymentIndex } from './payment-index/payment-index';\nimport { PaymentDetail } from './payment-detail/payment-detail';\n\nexport const paymentsRoutes: Routes = [\n { path: '', component: PaymentIndex },\n { path: ':id', component: PaymentDetail },\n];\n","import { Component, OnInit, computed, inject, signal } from '@angular/core';\nimport { CommonModule, DecimalPipe, NgClass } from '@angular/common';\nimport { RouterLink } from '@angular/router';\nimport { AbstractLoading, Skeleton, ToolbarComponent, TabsComponent, TabComponent } from '@rolatech/angular-components';\nimport { PaymentService, SnackBarService } from '@rolatech/angular-services';\nimport { Payment, PaymentStatus, PaymentType } from '@rolatech/angular-order';\nimport { map, distinctUntilChanged, switchMap, finalize } from 'rxjs';\nimport { PageEvent, MatPaginator } from '@angular/material/paginator';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-payment-manage-index',\n imports: [\n CommonModule,\n ToolbarComponent,\n RouterLink,\n Skeleton,\n NgClass,\n PricePipe,\n TabsComponent,\n TabComponent,\n MatPaginator,\n ],\n templateUrl: './payment-manage-index.html',\n styleUrl: './payment-manage-index.scss',\n})\nexport class PaymentManageIndex extends AbstractLoading implements OnInit {\n private paymentService = inject(PaymentService);\n select = 0;\n payments = signal<Payment[]>([]);\n status = PaymentStatus;\n types = PaymentType;\n length = 0;\n meta: any;\n pageIndex = signal(0);\n pageSize = signal(15);\n pageSizeOptions: number[] = [5, 15, 25, 50];\n skeletonRows = Array.from({ length: 6 }, (_, index) => index);\n links = [\n {\n name: 'All',\n icon: 'dashboard',\n },\n {\n name: 'Pending',\n icon: 'category',\n status: 'PENDING',\n },\n {\n name: 'Succeeded',\n icon: 'category',\n status: 'SUCCEEDED',\n },\n {\n name: 'Refunded',\n icon: 'category',\n status: 'REFUNDED',\n },\n {\n name: 'Failed',\n icon: 'category',\n status: 'FAILED',\n },\n ];\n activeStatus = signal<string | null>(null);\n private readonly statusBadgeMap: Record<string, string> = {\n PENDING: 'bg-yellow-100 text-yellow-800',\n COMPLETED: 'bg-green-100 text-green-700',\n REFUNDED: 'bg-blue-100 text-blue-700',\n FAILED: 'bg-rose-100 text-rose-700',\n };\n\n ngOnInit(): void {\n const sub = this.route.queryParamMap\n .pipe(\n map((p) => {\n const page = p.get('page') ? Number(p.get('page')) : 1;\n this.pageIndex.set(Math.max(page - 1, 0));\n const status = p.get('status') || undefined;\n\n let filter = '';\n if (status) {\n this.select = this.links.findIndex((item) => item.status === status);\n filter = `status:${status?.toUpperCase()}`;\n }\n return {\n page,\n filter,\n limit: p.get('limit') ? Number(p.get('limit')) : 15,\n sort: p.get('sort') || undefined,\n };\n }),\n // Cheap deep compare via JSON to avoid spam calls when nothing changed\n map((o) => JSON.stringify(o)),\n distinctUntilChanged(),\n map((s) => JSON.parse(s)),\n switchMap((params) => {\n this.loading = true;\n params['sort'] = 'updatedAt desc';\n return this.paymentService.find(params).pipe(finalize(() => (this.loading = false)));\n }),\n )\n .subscribe({\n next: (res: any) => {\n this.payments.set(res.data);\n this.meta = res.meta;\n this.length = res.meta.pagination.count;\n },\n error: () => {\n this.payments.set([]);\n this.length = 0;\n },\n });\n\n // // auto-unsubscribe on destroy\n this.destroyRef.onDestroy(() => sub.unsubscribe());\n }\n\n statusBadgeClass(status: PaymentStatus | string): string {\n return this.statusBadgeMap[status as string] ?? 'bg-slate-100 text-slate-600';\n }\n\n setStatus(status: string | null): void {\n if (this.activeStatus() === status) {\n return;\n }\n this.activeStatus.set(status);\n this.pageIndex.set(0);\n this.find();\n }\n\n find(): void {\n this.loading.set(true);\n const options: Record<string, any> = {\n page: this.pageIndex() + 1,\n limit: this.pageSize(),\n sort: 'updatedAt desc',\n };\n const status = this.activeStatus();\n if (status) {\n options['filter'] = `status:${status}`;\n }\n\n this.paymentService.find(options).subscribe({\n next: (res: any) => {\n const payments: Payment[] = res?.data ?? [];\n this.payments.set(payments);\n const count = res?.meta?.pagination?.count;\n this.length = count;\n this.loading.set(false);\n },\n error: (error) => {\n this.loading.set(false);\n this.snackBarService.open(error?.message || 'Unable to load payments');\n },\n });\n }\n onPage(e: PageEvent) {\n this.router.navigate([], {\n queryParams: { page: e.pageIndex + 1, limit: e.pageSize },\n queryParamsHandling: 'merge',\n replaceUrl: true, // optional: avoid stacking history on every page click\n });\n }\n}\n","<rolatech-toolbar title=\"Payments\"></rolatech-toolbar>\n<div class=\"px-3\">\n <rolatech-tabs [select]=\"select\">\n @for (item of links; track item) { @if (item.status) {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\" [queryParams]=\"{ status: item.status }\"></rolatech-tab>\n } @else {\n <rolatech-tab [label]=\"item.name\" routerLink=\"./\"></rolatech-tab>\n } }\n </rolatech-tabs>\n <div class=\"space-y-4 mt-3\">\n <div class=\"overflow-hidden bg-[--rt-base-background]\">\n <div class=\"overflow-x-auto\">\n <table class=\"min-w-full divide-y divide-[--rt-border-color]text-sm\">\n <thead\n class=\"bg-[--rt-raised-background] text-left text-xs font-semibold uppercase tracking-wide text-[--rt-primary-text]\"\n >\n <tr>\n <th class=\"px-2 py-3\">Invoice #</th>\n <th class=\"px-6 py-3\">Status</th>\n <th class=\"px-6 py-3\">Type</th>\n <th class=\"px-6 py-3\">Amount</th>\n <th class=\"px-6 py-3\">Customer</th>\n <th class=\"px-6 py-3 text-right\">Created</th>\n </tr>\n </thead>\n <tbody class=\"divide-y divide-[--rt-raised-background]\">\n @if (loading()) { @for (row of skeletonRows; track row) {\n <tr>\n <td class=\"py-4\" colspan=\"6\">\n <rolatech-skeleton class=\"h-6 w-full\"></rolatech-skeleton>\n </td>\n </tr>\n } } @else { @if (payments().length) { @for (payment of payments(); track payment.id) {\n <tr class=\"transition hover:bg-[--rt-raised-background] hover:cursor-pointer\" routerLink=\"./{{ payment.id }}\">\n <td class=\"px-2 py-4 text-[--rt-primary-text]\">{{ payment.invoiceId}}</td>\n <td class=\"px-4 py-4\">\n <span\n class=\"inline-flex items-center rounded-full px-3 py-2 text-xs font-semibold\"\n [ngClass]=\"statusBadgeClass(payment.status)\"\n >\n {{ status[payment.status] || payment.status }}\n </span>\n </td>\n <td class=\"px-6 py-4 text-[--rt-primary-text]\">{{ types[payment.type] || payment.type }}</td>\n <td class=\"px-6 py-4 font-semibold text-[--rt-primary-text]\">{{ payment.amount | price }}</td>\n <td class=\"px-6 py-4 text-[--rt-primary-text]\">{{ payment.customerId || '-' }}</td>\n <td class=\"px-6 py-4 text-[--rt-primary-text] text-right\">\n {{ payment.createdAt | date:'dd/MM/yyyy':'Europe/London' }}\n </td>\n </tr>\n } } @else {\n <tr>\n <td class=\"px-6 py-6 text-center text-sm text-[--rt-primary-text]\" colspan=\"6\">No payments found</td>\n </tr>\n } }\n </tbody>\n </table>\n </div>\n </div>\n <mat-paginator\n #paginator\n [length]=\"length\"\n [pageSize]=\"pageSize\"\n [pageIndex]=\"pageIndex()\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\"\n hidePageSize\n showFirstLastButtons\n >\n </mat-paginator>\n </div>\n</div>\n","import { Component, OnInit, inject, signal } from '@angular/core';\nimport { ToolbarComponent, AbstractLoading, Skeleton } from '@rolatech/angular-components';\nimport { CommonModule } from '@angular/common';\nimport { PaymentService } from '@rolatech/angular-services';\nimport { Payment, PaymentStatus, PaymentType } from '@rolatech/angular-order';\nimport { PricePipe } from '@rolatech/angular-common';\n\n@Component({\n selector: 'rolatech-payment-manage-detail',\n imports: [CommonModule, ToolbarComponent, Skeleton, PricePipe],\n templateUrl: './payment-manage-detail.html',\n styleUrl: './payment-manage-detail.scss',\n})\nexport class PaymentManageDetail extends AbstractLoading implements OnInit {\n private paymentService = inject(PaymentService);\n payment = signal<Payment | null>(null);\n status = PaymentStatus;\n types = PaymentType;\n\n ngOnInit(): void {\n const id = this.route.snapshot.paramMap.get('id');\n if (id) {\n this.get(id);\n } else {\n this.loading.set(false);\n }\n }\n\n private get(id: string): void {\n this.loading.set(true);\n this.paymentService.get(id).subscribe({\n next: (res: any) => {\n this.payment.set(res?.data ?? null);\n this.loading.set(false);\n },\n error: (error) => {\n this.loading.set(false);\n this.snackBarService.open(error?.message || 'Unable to load payment detail');\n },\n });\n }\n}\n","<rolatech-toolbar title=\"Payment Detail\" link=\"../\"></rolatech-toolbar>\n<div class=\"px-4\">\n @if (loading()) {\n <section class=\"detail-card space-y-4\">\n <rolatech-skeleton class=\"h-6 w-32\"></rolatech-skeleton>\n <div class=\"space-y-3\">\n @for (_ of [1, 2, 3, 4, 5, 6]; track idx; let idx = $index) {\n <div class=\"flex items-center gap-4\">\n <rolatech-skeleton class=\"h-4 w-24\"></rolatech-skeleton>\n <rolatech-skeleton class=\"h-4 flex-1\"></rolatech-skeleton>\n </div>\n }\n </div>\n </section>\n } @else { @if (payment(); as detail) {\n <section class=\"detail-card\">\n <div class=\"detail-row\">\n <span>Status</span>\n <strong>{{ status[detail.status] || detail.status }}</strong>\n </div>\n <div class=\"detail-row\">\n <span>Type</span>\n <span>{{ types[detail.type] || detail.type }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Amount</span>\n <span>{{ detail.amount | price }}</span>\n </div>\n @if (detail.deposit) {\n <div class=\"detail-row\">\n <span>Deposit</span>\n <span>{{ detail.deposit| price }}</span>\n </div>\n }\n <div class=\"detail-row\">\n <span>Payment ID</span>\n <span>{{ detail.id }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Invoice #</span>\n <span>{{ detail.invoiceId }}</span>\n </div>\n <div class=\"detail-row\">\n <span>User</span>\n <span>{{ detail.userId || '-' }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Product ID</span>\n <span>{{ detail.productId || '-' }}</span>\n </div>\n <div class=\"detail-row\">\n <span>Created</span>\n <span>{{ detail.createdAt | date:'dd/MM/yyyy':'Europe/London' }}</span>\n </div>\n </section>\n @if (detail.description) {\n <section class=\"detail-card\">\n <div class=\"detail-title\">Memo</div>\n <p class=\"detail-description\">{{ detail.description }}</p>\n </section>\n } } @else {\n <div class=\"detail-state\">Payment not found</div>\n } }\n</div>\n","import { Routes } from '@angular/router';\nimport { PaymentManageIndex } from './payment-manage-index/payment-manage-index';\nimport { PaymentManageDetail } from './payment-manage-detail/payment-manage-detail';\n\nexport const paymentManageRoutes: Routes = [\n { path: '', component: PaymentManageIndex },\n { path: ':id', component: PaymentManageDetail },\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rolatech/angular-payment",
3
- "version": "20.2.2-beta.3",
3
+ "version": "20.2.3",
4
4
  "private": false,
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^20.0.0",
@@ -12,10 +12,10 @@
12
12
  },
13
13
  "sideEffects": false,
14
14
  "dependencies": {
15
- "@rolatech/angular-components": "20.2.2-beta.3",
16
- "@rolatech/angular-services": "20.2.2-beta.3",
17
- "@rolatech/angular-auth": "20.2.2-beta.3",
18
- "@rolatech/angular-order": "20.2.2-beta.3",
15
+ "@rolatech/angular-components": "20.2.3",
16
+ "@rolatech/angular-services": "20.2.3",
17
+ "@rolatech/angular-auth": "20.2.3",
18
+ "@rolatech/angular-order": "20.2.3",
19
19
  "tslib": "^2.3.0"
20
20
  },
21
21
  "repository": {
@@ -4,6 +4,10 @@ import * as i0 from '@angular/core';
4
4
 
5
5
  declare const payoutsRoutes: Routes;
6
6
 
7
+ declare const paymentsRoutes: Routes;
8
+
9
+ declare const paymentManageRoutes: Routes;
10
+
7
11
  declare class WithdrawDialogComponent {
8
12
  private dialogRef;
9
13
  data: any;
@@ -49,5 +53,5 @@ declare enum PayoutType {
49
53
  WECHAT
50
54
  }
51
55
 
52
- export { PayoutApproveDialogComponent, PayoutStatus, PayoutType, WithdrawDialogComponent, payoutsRoutes };
56
+ export { PayoutApproveDialogComponent, PayoutStatus, PayoutType, WithdrawDialogComponent, paymentManageRoutes, paymentsRoutes, payoutsRoutes };
53
57
  export type { Payout };