feat: Implement price info card component and product categories with grid view

- Added `price-info-card.component` to display total amount, tax, and payable amount.
- Integrated price masking directive for formatted price display.
- Created `categories.component` to list product categories with loading skeletons.
- Implemented `grid-view.component` for displaying products in a grid layout.
- Enhanced `products.component` to manage category selection and product display.
- Introduced new models for product categories and stock responses.
- Updated `main.service.ts` to fetch product categories and stock data.
- Refactored `POSStore` to manage state for products, categories, and order items.
- Added utility functions for price formatting and number normalization.
- Included placeholder images for product and logo.
This commit is contained in:
2025-12-14 20:34:15 +03:30
parent 35be7e0298
commit 17fa65407c
43 changed files with 894 additions and 132 deletions
@@ -0,0 +1,34 @@
import { IPaginatedResponse } from '@/core/models/service.model';
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { POS_API_ROUTES } from '../constants';
import {
IPosInfoRawResponse,
IPosInfoResponse,
IPosProductCategoriesRawResponse,
IPosProductCategoriesResponse,
IPosStockRawResponse,
IPosStockResponse,
} from '../models';
@Injectable({ providedIn: 'root' })
export class PosService {
constructor(private http: HttpClient) {}
private apiRoutes = POS_API_ROUTES;
getInfo(): Observable<IPosInfoResponse> {
return this.http.get<IPosInfoRawResponse>(this.apiRoutes.info());
}
getStock(): Observable<IPaginatedResponse<IPosStockResponse>> {
return this.http.get<IPaginatedResponse<IPosStockRawResponse>>(this.apiRoutes.stock());
}
getCategories(): Observable<IPaginatedResponse<IPosProductCategoriesResponse>> {
return this.http.get<IPaginatedResponse<IPosProductCategoriesRawResponse>>(
this.apiRoutes.productCategories(),
);
}
}