cdsa
This commit is contained in:
@@ -53,7 +53,6 @@ export class VoucherService {
|
|||||||
getFromBill(billId: Signal<string | null | undefined>): HttpResourceRef<Bill | undefined> {
|
getFromBill(billId: Signal<string | null | undefined>): HttpResourceRef<Bill | undefined> {
|
||||||
return httpResource<Bill>(() => {
|
return httpResource<Bill>(() => {
|
||||||
const id = billId();
|
const id = billId();
|
||||||
console.log(id);
|
|
||||||
return id ? `${url}/from-bill/${id}` : undefined;
|
return id ? `${url}/from-bill/${id}` : undefined;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,30 +1,25 @@
|
|||||||
import { HttpClient, httpResource, HttpResourceRef } from '@angular/common/http';
|
import { httpResource, HttpResourceRef } from '@angular/common/http';
|
||||||
import { Injectable, inject } from '@angular/core';
|
import { Injectable, inject, Injector } from '@angular/core';
|
||||||
import { Observable } from 'rxjs';
|
|
||||||
import { catchError } from 'rxjs/operators';
|
|
||||||
|
|
||||||
import { ErrorLoggerService } from '../../core/error-logger.service';
|
|
||||||
import { DiscountItem } from './discount-item';
|
import { DiscountItem } from './discount-item';
|
||||||
|
|
||||||
const url = '/api/customer-discounts';
|
const url = '/api/customer-discounts';
|
||||||
const serviceName = 'CustomerService';
|
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root',
|
providedIn: 'root',
|
||||||
})
|
})
|
||||||
export class CustomerDiscountsService {
|
export class CustomerDiscountsService {
|
||||||
private http = inject(HttpClient);
|
private injector = inject(Injector);
|
||||||
private log = inject(ErrorLoggerService);
|
|
||||||
|
|
||||||
list(id: string | undefined): HttpResourceRef<DiscountItem[] | undefined> {
|
list(id: string | undefined): HttpResourceRef<DiscountItem[] | undefined> {
|
||||||
return httpResource<DiscountItem[]>(() => (id === undefined ? url : `${url}/${id}`));
|
return httpResource<DiscountItem[]>(() => (id === undefined ? url : `${url}/${id}`), {
|
||||||
|
injector: this.injector,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
listForDiscount(): Observable<{ name: string; discount: number; discountLimit: number }[]> {
|
listForDiscount(): HttpResourceRef<{ name: string; discount: number; discountLimit: number }[] | undefined> {
|
||||||
return this.http
|
return httpResource<{ name: string; discount: number; discountLimit: number }[]>(() => `${url}/for-discount`, {
|
||||||
.get<{ name: string; discount: number; discountLimit: number }[]>(`${url}/for-discount`)
|
injector: this.injector,
|
||||||
.pipe(catchError(this.log.handleError(serviceName, 'list'))) as Observable<
|
});
|
||||||
{ name: string; discount: number; discountLimit: number }[]
|
|
||||||
>;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { CdkScrollableModule } from '@angular/cdk/scrolling';
|
import { CdkScrollableModule } from '@angular/cdk/scrolling';
|
||||||
import { PercentPipe } from '@angular/common';
|
import { PercentPipe } from '@angular/common';
|
||||||
import { Component, inject, signal, computed } from '@angular/core';
|
import { HttpResourceRef } from '@angular/common/http';
|
||||||
|
import { Component, inject, signal, computed, effect } from '@angular/core';
|
||||||
import { form, FormField } from '@angular/forms/signals';
|
import { form, FormField } from '@angular/forms/signals';
|
||||||
import { MatButtonModule } from '@angular/material/button';
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
import { MAT_DIALOG_DATA, MatDialogRef, MatDialogModule } from '@angular/material/dialog';
|
import { MAT_DIALOG_DATA, MatDialogRef, MatDialogModule } from '@angular/material/dialog';
|
||||||
@@ -8,7 +9,6 @@ import { MatFormFieldModule } from '@angular/material/form-field';
|
|||||||
import { MatInputModule } from '@angular/material/input';
|
import { MatInputModule } from '@angular/material/input';
|
||||||
import { MatTableModule } from '@angular/material/table';
|
import { MatTableModule } from '@angular/material/table';
|
||||||
import { round } from 'mathjs';
|
import { round } from 'mathjs';
|
||||||
import { Observable } from 'rxjs';
|
|
||||||
|
|
||||||
import { DiscountItem } from './discount-item';
|
import { DiscountItem } from './discount-item';
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ export interface DiscountFormData {
|
|||||||
})
|
})
|
||||||
export class DiscountComponent {
|
export class DiscountComponent {
|
||||||
dialogRef = inject<MatDialogRef<DiscountComponent>>(MatDialogRef);
|
dialogRef = inject<MatDialogRef<DiscountComponent>>(MatDialogRef);
|
||||||
data = inject<Observable<DiscountItem[]>>(MAT_DIALOG_DATA);
|
data = inject<HttpResourceRef<DiscountItem[] | undefined>>(MAT_DIALOG_DATA);
|
||||||
|
|
||||||
list = signal<DiscountItem[]>([]);
|
list = signal<DiscountItem[]>([]);
|
||||||
formModel = signal<DiscountFormData>({
|
formModel = signal<DiscountFormData>({
|
||||||
@@ -50,15 +50,18 @@ export class DiscountComponent {
|
|||||||
displayedColumns = ['name', 'discount'];
|
displayedColumns = ['name', 'discount'];
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.data.subscribe((list: DiscountItem[]) => {
|
effect(() => {
|
||||||
this.list.set(list);
|
const list = this.data.value();
|
||||||
this.formModel.update((f) => ({
|
if (list) {
|
||||||
...f,
|
this.list.set(list);
|
||||||
discounts: list.map((x) => ({
|
this.formModel.update((f) => ({
|
||||||
name: x.name,
|
...f,
|
||||||
discount: x.discount * 100,
|
discounts: list.map((x) => ({
|
||||||
})),
|
name: x.name,
|
||||||
}));
|
discount: x.discount * 100,
|
||||||
|
})),
|
||||||
|
}));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<h2 mat-dialog-title>Tables</h2>
|
<h2 mat-dialog-title>Tables</h2>
|
||||||
<mat-dialog-content>
|
<mat-dialog-content>
|
||||||
<div class="tables-grid">
|
<div class="tables-grid">
|
||||||
@for (table of list | async; track table) {
|
@for (table of list.value(); track table) {
|
||||||
<mat-card
|
<mat-card
|
||||||
class="flex-col square-button"
|
class="flex-col square-button"
|
||||||
matRipple
|
matRipple
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
import { CdkScrollableModule } from '@angular/cdk/scrolling';
|
import { CdkScrollableModule } from '@angular/cdk/scrolling';
|
||||||
import { CommonModule, CurrencyPipe } from '@angular/common';
|
import { CommonModule, CurrencyPipe } from '@angular/common';
|
||||||
|
import { HttpResourceRef } from '@angular/common/http';
|
||||||
import { Component, inject } from '@angular/core';
|
import { Component, inject } from '@angular/core';
|
||||||
import { MatButtonModule } from '@angular/material/button';
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
import { MatCardModule } from '@angular/material/card';
|
import { MatCardModule } from '@angular/material/card';
|
||||||
import { MatRippleModule } from '@angular/material/core';
|
import { MatRippleModule } from '@angular/material/core';
|
||||||
import { MAT_DIALOG_DATA, MatDialogRef, MatDialogModule } from '@angular/material/dialog';
|
import { MAT_DIALOG_DATA, MatDialogRef, MatDialogModule } from '@angular/material/dialog';
|
||||||
import { Observable } from 'rxjs';
|
|
||||||
|
|
||||||
import { Table } from '../../core/table';
|
import { Table } from '../../core/table';
|
||||||
|
|
||||||
@@ -26,11 +26,11 @@ import { Table } from '../../core/table';
|
|||||||
export class TablesDialogComponent {
|
export class TablesDialogComponent {
|
||||||
dialogRef = inject<MatDialogRef<TablesDialogComponent>>(MatDialogRef);
|
dialogRef = inject<MatDialogRef<TablesDialogComponent>>(MatDialogRef);
|
||||||
data = inject<{
|
data = inject<{
|
||||||
list: Observable<Table[]>;
|
list: HttpResourceRef<Table[] | undefined>;
|
||||||
canChooseRunning: boolean;
|
canChooseRunning: boolean;
|
||||||
}>(MAT_DIALOG_DATA);
|
}>(MAT_DIALOG_DATA);
|
||||||
|
|
||||||
list: Observable<Table[]>;
|
list: HttpResourceRef<Table[] | undefined>;
|
||||||
canChooseRunning: boolean;
|
canChooseRunning: boolean;
|
||||||
selected: Table | null;
|
selected: Table | null;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { HttpClient, HttpHeaders, httpResource, HttpResourceRef } from '@angular/common/http';
|
import { HttpClient, HttpHeaders, httpResource, HttpResourceRef } from '@angular/common/http';
|
||||||
import { Injectable, Signal, inject } from '@angular/core';
|
import { Injectable, Signal, inject, Injector } from '@angular/core';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { catchError } from 'rxjs/operators';
|
import { catchError } from 'rxjs/operators';
|
||||||
|
|
||||||
@@ -18,20 +18,24 @@ const serviceName = 'TableService';
|
|||||||
export class TableService {
|
export class TableService {
|
||||||
private http = inject(HttpClient);
|
private http = inject(HttpClient);
|
||||||
private log = inject(ErrorLoggerService);
|
private log = inject(ErrorLoggerService);
|
||||||
|
private injector = inject(Injector);
|
||||||
|
|
||||||
get(id: Signal<string | null> | string | null): HttpResourceRef<Table | undefined> {
|
get(id: Signal<string | null> | string | null): HttpResourceRef<Table | undefined> {
|
||||||
return httpResource<Table>(() => {
|
return httpResource<Table>(
|
||||||
const idVal = typeof id === 'function' ? id() : id;
|
() => {
|
||||||
return idVal === null || idVal === undefined ? url : `${url}/${idVal}`;
|
const idVal = typeof id === 'function' ? id() : id;
|
||||||
});
|
return idVal === null || idVal === undefined ? url : `${url}/${idVal}`;
|
||||||
|
},
|
||||||
|
{ injector: this.injector },
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
list(): HttpResourceRef<Table[] | undefined> {
|
list(): HttpResourceRef<Table[] | undefined> {
|
||||||
return httpResource<Table[]>(() => `${url}/list`);
|
return httpResource<Table[]>(() => `${url}/list`, { injector: this.injector });
|
||||||
}
|
}
|
||||||
|
|
||||||
running(): HttpResourceRef<Table[] | undefined> {
|
running(): HttpResourceRef<Table[] | undefined> {
|
||||||
return httpResource<Table[]>(() => `${url}/running`);
|
return httpResource<Table[]>(() => `${url}/running`, { injector: this.injector });
|
||||||
}
|
}
|
||||||
|
|
||||||
save(tables: Table): Observable<Table> {
|
save(tables: Table): Observable<Table> {
|
||||||
|
|||||||
Reference in New Issue
Block a user