type AdditiveSimple = {
name: string
amountPerItem: 'single' | 'many'
price: number
}
type AdditiveSelect = {
name: string
required: boolean
options: AdditiveSimple[]
}
type Additive = AdditiveSimple | AdditiveSelect
type Dish = {
name: string
description: string
price: number
additives: Additive[]
}
type Restaraunt = {
name: string
category: string[]
dishes: Dish[]
}
amountPerItem: single означает, что каждая добавка может быть максимум в одном экземпляре
amountPerItem: many означает что можно выбрать сколько угодно
required: true означает, что это блюдо может быть приготовлено только с использованием одного из вариантов (например выбор между типами хлеба в тостах)
type AdditiveOrder = {
additive: string | [additive: string, choice: string]
amount: number
totalPrice: number
}
type DishOrder = {
dish: string
additives: AdditiveOrder[]
totalPrice: number
}
type Order = {
restaraunt: string
dishes: DishOrder[]
totalPrice: number
}
Перечень сущностей
Для простоты опустим запрос данных к серверу за начальными данными
const $restaraunts = createStore<Restaraunt[]>([])
const DishHead = ({name, description, price}: Dish) => (
<div class="p-4">
<h1 class="text-2xl font-bold">{name}</h1>
<p class="text-lg text-gray-500 mt-2">{price}₸</p>
<p class="text-sm text-gray-400 mt-2">{description}</p>
</div>
)