mirror of
https://github.com/ae-utbm/sith.git
synced 2024-12-23 00:01:16 +00:00
Split counter-click-index.ts
This commit is contained in:
parent
eed434aeb2
commit
b8430adc50
25
counter/static/bundled/counter/basket.ts
Normal file
25
counter/static/bundled/counter/basket.ts
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import type { Product } from "#counter:counter/types";
|
||||||
|
|
||||||
|
export class BasketItem {
|
||||||
|
quantity: number;
|
||||||
|
product: Product;
|
||||||
|
quantityForTrayPrice: number;
|
||||||
|
errors: string[];
|
||||||
|
|
||||||
|
constructor(product: Product, quantity: number) {
|
||||||
|
this.quantity = quantity;
|
||||||
|
this.product = product;
|
||||||
|
this.errors = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
getBonusQuantity(): number {
|
||||||
|
if (!this.product.hasTrayPrice) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return Math.floor(this.quantity / this.product.quantityForTrayPrice);
|
||||||
|
}
|
||||||
|
|
||||||
|
sum(): number {
|
||||||
|
return (this.quantity - this.getBonusQuantity()) * this.product.price;
|
||||||
|
}
|
||||||
|
}
|
@ -1,52 +1,6 @@
|
|||||||
import { exportToHtml } from "#core:utils/globals";
|
import { exportToHtml } from "#core:utils/globals";
|
||||||
|
import { BasketItem } from "#counter:counter/basket";
|
||||||
interface InitialFormData {
|
import type { CounterConfig } from "#counter:counter/types";
|
||||||
/* Used to refill the form when the backend raises an error */
|
|
||||||
id?: Pick<Product, "id">;
|
|
||||||
quantity?: number;
|
|
||||||
errors?: string[];
|
|
||||||
}
|
|
||||||
|
|
||||||
interface CounterConfig {
|
|
||||||
customerBalance: number;
|
|
||||||
customerId: number;
|
|
||||||
products: Record<string, Product>;
|
|
||||||
formInitial: InitialFormData[];
|
|
||||||
cancelUrl: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Product {
|
|
||||||
id: string;
|
|
||||||
code: string;
|
|
||||||
name: string;
|
|
||||||
price: number;
|
|
||||||
hasTrayPrice: boolean;
|
|
||||||
quantityForTrayPrice: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
class BasketItem {
|
|
||||||
quantity: number;
|
|
||||||
product: Product;
|
|
||||||
quantityForTrayPrice: number;
|
|
||||||
errors: string[];
|
|
||||||
|
|
||||||
constructor(product: Product, quantity: number) {
|
|
||||||
this.quantity = quantity;
|
|
||||||
this.product = product;
|
|
||||||
this.errors = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
getBonusQuantity(): number {
|
|
||||||
if (!this.product.hasTrayPrice) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return Math.floor(this.quantity / this.product.quantityForTrayPrice);
|
|
||||||
}
|
|
||||||
|
|
||||||
sum(): number {
|
|
||||||
return (this.quantity - this.getBonusQuantity()) * this.product.price;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
exportToHtml("loadCounter", (config: CounterConfig) => {
|
exportToHtml("loadCounter", (config: CounterConfig) => {
|
||||||
document.addEventListener("alpine:init", () => {
|
document.addEventListener("alpine:init", () => {
|
||||||
|
23
counter/static/bundled/counter/types.d.ts
vendored
Normal file
23
counter/static/bundled/counter/types.d.ts
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
export interface InitialFormData {
|
||||||
|
/* Used to refill the form when the backend raises an error */
|
||||||
|
id?: keyof Record<string, Product>;
|
||||||
|
quantity?: number;
|
||||||
|
errors?: string[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CounterConfig {
|
||||||
|
customerBalance: number;
|
||||||
|
customerId: number;
|
||||||
|
products: Record<string, Product>;
|
||||||
|
formInitial: InitialFormData[];
|
||||||
|
cancelUrl: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Product {
|
||||||
|
id: string;
|
||||||
|
code: string;
|
||||||
|
name: string;
|
||||||
|
price: number;
|
||||||
|
hasTrayPrice: boolean;
|
||||||
|
quantityForTrayPrice: number;
|
||||||
|
}
|
@ -18,7 +18,8 @@
|
|||||||
"imports": {
|
"imports": {
|
||||||
"#openapi": "./staticfiles/generated/openapi/index.ts",
|
"#openapi": "./staticfiles/generated/openapi/index.ts",
|
||||||
"#core:*": "./core/static/bundled/*",
|
"#core:*": "./core/static/bundled/*",
|
||||||
"#pedagogy:*": "./pedagogy/static/bundled/*"
|
"#pedagogy:*": "./pedagogy/static/bundled/*",
|
||||||
|
"#counter:*": "./counter/static/bundled/*"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.25.2",
|
"@babel/core": "^7.25.2",
|
||||||
|
@ -15,7 +15,8 @@
|
|||||||
"paths": {
|
"paths": {
|
||||||
"#openapi": ["./staticfiles/generated/openapi/index.ts"],
|
"#openapi": ["./staticfiles/generated/openapi/index.ts"],
|
||||||
"#core:*": ["./core/static/bundled/*"],
|
"#core:*": ["./core/static/bundled/*"],
|
||||||
"#pedagogy:*": ["./pedagogy/static/bundled/*"]
|
"#pedagogy:*": ["./pedagogy/static/bundled/*"],
|
||||||
|
"#counter:*": ["./counter/static/bundled/*"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user