162 lines
5.0 KiB
TypeScript
162 lines
5.0 KiB
TypeScript
import z from "zod";
|
|
|
|
export const TourformSchema = z.object({
|
|
title: z.string().min(2, {
|
|
message: "Sarlavha kamida 2 ta belgidan iborat bo'lishi kerak",
|
|
}),
|
|
title_ru: z.string().min(2, {
|
|
message: "Sarlavha kamida 2 ta belgidan iborat bo'lishi kerak",
|
|
}),
|
|
hotel_info: z.string().optional(),
|
|
hotel_info_ru: z.string().optional(),
|
|
hotel_meals_info: z.string().optional(),
|
|
hotel_meals_info_ru: z.string().optional(),
|
|
price: z.number().min(1000, {
|
|
message: "Narx kamida 1000 UZS bo'lishi kerak.",
|
|
}),
|
|
passenger_count: z.string().min(1, {
|
|
message: "Kamida 1 yo'lovchi bo'lishi kerak.",
|
|
}),
|
|
min_person: z.string().min(1, {
|
|
message: "Kamida 1 yo'lovchi bo'lishi kerak.",
|
|
}),
|
|
max_person: z.string().min(1, {
|
|
message: "Kamida 1 yo'lovchi bo'lishi kerak.",
|
|
}),
|
|
departure: z.string().min(1, {
|
|
message: "Ketish joyi eng kamida 1 ta belgidan iborat bo'lishi kerak.",
|
|
}),
|
|
// departure_ru: z.string().min(2, {
|
|
// message: "Ketish joyi eng kamida 2 ta belgidan iborat bo'lishi kerak.",
|
|
// }),
|
|
destination: z.string().min(1, {
|
|
message: "Borish joyi eng kamida 1 ta belgidan iborat bo'lishi kerak.",
|
|
}),
|
|
// destination_ru: z.string().min(2, {
|
|
// message: "Borish joyi eng kamida 2 ta belgidan iborat bo'lishi kerak.",
|
|
// }),
|
|
location_name: z.string().min(2, {
|
|
message: "Eng kamida 2 ta belgidan iborat bo'lishi kerak.",
|
|
}),
|
|
location_name_ru: z.string().min(2, {
|
|
message: "Eng kamida 2 ta belgidan iborat bo'lishi kerak.",
|
|
}),
|
|
visa_required: z
|
|
.enum(["no", "yes"], { message: "Iltimos, visa talabliligini tanlang" })
|
|
.refine((val) => val === "no" || val === "yes", {
|
|
message: "Iltimos, visa talabliligini tanlang",
|
|
}),
|
|
departureDateTime: z.object({
|
|
date: z.date({ message: "Jo'nash vaqti majburiy" }),
|
|
}),
|
|
travelDateTime: z.object({
|
|
date: z.date({ message: "Jo'nash vaqti majburiy" }),
|
|
}),
|
|
languages: z.string().optional(),
|
|
duration: z.string().min(1, { message: "Kamida 1 kun bo'lishi kerak" }),
|
|
badges: z.array(z.number()).optional(),
|
|
tarif: z
|
|
.array(
|
|
z.object({
|
|
tariff: z.number().min(1, { message: "Transport ID majburiy" }),
|
|
price: z
|
|
.number()
|
|
.min(0, { message: "Narx 0 dan kichik bo'lishi mumkin emas" }),
|
|
}),
|
|
)
|
|
.optional(),
|
|
transport: z
|
|
.array(
|
|
z.object({
|
|
transport: z.number().min(1, { message: "Transport ID majburiy" }),
|
|
price: z
|
|
.number()
|
|
.min(0, { message: "Narx 0 dan kichik bo'lishi mumkin emas" }),
|
|
}),
|
|
)
|
|
.min(1, { message: "Majburiy maydon" }),
|
|
banner: z.any().nullable(),
|
|
images: z
|
|
.array(
|
|
z.object({
|
|
id: z.number().optional(),
|
|
image: z.union([z.instanceof(File), z.string()]).nullable(),
|
|
}),
|
|
)
|
|
.min(1, { message: "Kamida bitta rasm kiriting." }),
|
|
amenities: z.array(z.number()).optional(),
|
|
|
|
hotel_services: z
|
|
.array(
|
|
z.object({
|
|
id: z.number().optional(),
|
|
image: z.any().nullable(),
|
|
title: z.string().min(1, "Xizmat nomi majburiy"),
|
|
title_ru: z.string().min(1, { message: "Majburiy maydon" }),
|
|
description: z.string().min(1, "Tavsif majburiy"),
|
|
desc_ru: z.string().min(1, { message: "Majburiy maydon" }),
|
|
}),
|
|
)
|
|
.optional(),
|
|
|
|
hotel_meals: z
|
|
.array(
|
|
z.object({
|
|
id: z.number().optional(),
|
|
image: z.any().nullable(),
|
|
title: z.string().min(1, "Xizmat nomi majburiy"),
|
|
title_ru: z.string().min(1, "Majburiy maydon"),
|
|
description: z.string().min(1, "Tavsif majburiy"),
|
|
desc_ru: z.string().min(1, "Majburiy maydon"),
|
|
}),
|
|
)
|
|
.optional(),
|
|
|
|
ticket_itinerary: z
|
|
.array(
|
|
z.object({
|
|
id: z.number().optional(), // Edit uchun
|
|
ticket_itinerary_image: z.array(
|
|
z.union([
|
|
z.object({
|
|
image: z.union([z.instanceof(File), z.string()]),
|
|
}),
|
|
z.instanceof(File),
|
|
z.string(),
|
|
]),
|
|
),
|
|
title: z.string().min(1, "Sarlavha majburiy"),
|
|
title_ru: z.string().min(1, "Sarlavha (RU) majburiy"),
|
|
duration: z.number().min(1, { message: "Kamida 1 kun bo'lishi kerak" }),
|
|
ticket_itinerary_destinations: z.array(
|
|
z.object({
|
|
name: z.string().min(1, { message: "Majburiy maydon" }),
|
|
name_ru: z.string().min(1, { message: "Majburiy maydon" }),
|
|
}),
|
|
),
|
|
}),
|
|
)
|
|
.optional(),
|
|
|
|
extra_service: z
|
|
.array(
|
|
z.object({
|
|
name: z.string().min(1, { message: "Xizmat nomi majburiy" }),
|
|
name_ru: z.string().min(1, { message: "Xizmat nomi (RU) majburiy" }),
|
|
}),
|
|
)
|
|
.optional(),
|
|
|
|
paid_extra_service: z
|
|
.array(
|
|
z.object({
|
|
name: z.string().min(1, { message: "Xizmat nomi majburiy" }),
|
|
name_ru: z.string().min(1, { message: "Xizmat nomi (RU) majburiy" }),
|
|
price: z
|
|
.number()
|
|
.min(0, { message: "Narx manfiy bo'lishi mumkin emas." }),
|
|
}),
|
|
)
|
|
.optional(),
|
|
});
|