"use client";
import {
countryList,
getAllAmenities,
hotelBadge,
hotelFeature,
hotelFeatureType,
hotelMealList,
hotelTarif,
hotelTransport,
hotelType,
regionList,
} from "@/pages/tours/lib/api";
import Amenities from "@/pages/tours/ui/Amenities";
import BadgeTable from "@/pages/tours/ui/BadgeTable";
import CountryTable from "@/pages/tours/ui/CountryTable";
import FeaturesTable from "@/pages/tours/ui/FeaturesTable";
import FeaturesTableType from "@/pages/tours/ui/FeaturesTableType";
import HotelType from "@/pages/tours/ui/HotelType";
import MealTable from "@/pages/tours/ui/MealTable";
import RegionTable from "@/pages/tours/ui/RegionTable";
import TarifTable from "@/pages/tours/ui/TarifTable";
import TransportTable from "@/pages/tours/ui/TransportTable";
import { Button } from "@/shared/ui/button";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/shared/ui/tabs";
import { useQuery } from "@tanstack/react-query";
import { AlertTriangle, Loader2 } from "lucide-react";
import React, { useState } from "react";
import { useTranslation } from "react-i18next";
import { useNavigate, useSearchParams } from "react-router-dom";
// Error Component
const ErrorDisplay: React.FC<{ message: string; onRetry: () => void }> = ({
message,
onRetry,
}) => {
const { t } = useTranslation();
return (
{message}
);
};
// Loading Component
const LoadingDisplay: React.FC<{ message?: string }> = ({ message }) => {
const { t } = useTranslation();
return (
{message || t("Ma'lumotlar yuklanmoqda...")}
);
};
const ToursSetting: React.FC = () => {
const { t } = useTranslation();
const [searchParams] = useSearchParams();
const [activeTab, setActiveTab] = useState("badge");
const [featureId, setFeatureId] = useState(null);
const [countryId, setCountryId] = useState(null);
const navigate = useNavigate();
const page = parseInt(searchParams.get("page") || "1", 10);
const pageSize = parseInt(searchParams.get("pageSize") || "10", 10);
const { data, isLoading, isError, refetch } = useQuery({
queryKey: ["all_badge", page, pageSize],
queryFn: () => hotelBadge({ page, page_size: pageSize }),
select: (res) => res.data.data,
});
const pageTarif = parseInt(searchParams.get("pageTarif") || "1", 10);
const pageSizeTarif = parseInt(searchParams.get("pageTarifSize") || "10", 10);
const {
data: tarifData,
isLoading: tarifLoad,
isError: tarifError,
refetch: tarifRef,
} = useQuery({
queryKey: ["all_tarif", pageTarif, pageSizeTarif],
queryFn: () => hotelTarif({ page: pageTarif, page_size: pageSizeTarif }),
select: (res) => res.data.data,
});
const pageTransport = parseInt(searchParams.get("pageTransport") || "1", 10);
const pageSizeTransport = parseInt(
searchParams.get("pageTransportSize") || "10",
10,
);
const {
data: transportData,
isLoading: transportLoad,
isError: transportError,
refetch: transportRef,
} = useQuery({
queryKey: ["all_transport", pageTransport, pageSizeTransport],
queryFn: () =>
hotelTransport({ page: pageTransport, page_size: pageSizeTransport }),
select: (res) => res.data.data,
});
const pageType = parseInt(searchParams.get("pageType") || "1", 10);
const pageSizeType = parseInt(searchParams.get("pageTypeSize") || "10", 10);
const {
data: typeData,
isLoading: typeLoad,
isError: typeError,
refetch: typeRef,
} = useQuery({
queryKey: ["all_type", pageType, pageSizeType],
queryFn: () => hotelType({ page: pageType, page_size: pageSizeType }),
select: (res) => res.data.data,
});
const pageCountry = parseInt(searchParams.get("pageCountry") || "1", 10);
const pageSizeCountry = parseInt(
searchParams.get("pageSizeCountry") || "10",
10,
);
const {
data: countryData,
isLoading: countryLoad,
isError: countryError,
refetch: countryRef,
} = useQuery({
queryKey: ["all_country", pageCountry, pageSizeCountry],
queryFn: () =>
countryList({ page: pageCountry, page_size: pageSizeCountry }),
select: (res) => res.data.data,
});
const pageRegion = parseInt(searchParams.get("pageRegion") || "1", 10);
const pageSizeRegion = parseInt(
searchParams.get("pageSizeRegion") || "10",
10,
);
const {
data: regionData,
isLoading: regionLoad,
isError: regionError,
refetch: regionRef,
} = useQuery({
queryKey: ["all_region", pageRegion, pageSizeRegion, countryId],
queryFn: () =>
regionList({
page: pageRegion,
page_size: pageSizeRegion,
country: countryId!,
}),
select: (res) => res.data.data,
enabled: !!countryId,
});
const pageFeature = parseInt(searchParams.get("pageFeature") || "1", 10);
const pageSizeFeature = parseInt(
searchParams.get("pageSizeFeature") || "10",
10,
);
const {
data: featureData,
isLoading: featureLoad,
isError: featureError,
refetch: featureRef,
} = useQuery({
queryKey: ["all_feature", pageFeature, pageSizeFeature],
queryFn: () =>
hotelFeature({ page: pageFeature, page_size: pageSizeFeature }),
select: (res) => res.data.data,
});
const {
data: featureTypeData,
isLoading: featureTypeLoad,
isError: featureTypeError,
refetch: featureTypeRef,
} = useQuery({
queryKey: ["all_feature_type", pageFeature, pageSizeFeature, featureId],
queryFn: () =>
hotelFeatureType({
page: pageFeature,
page_size: pageSizeFeature,
feature_type: featureId!,
}),
select: (res) => res.data.data,
enabled: !!featureId,
});
const pageAmenities = parseInt(searchParams.get("pageAmenities") || "1", 10);
const pageSizeAmenities = parseInt(
searchParams.get("pageSizeAmenities") || "10",
10,
);
const {
data: amenitiesData,
isLoading: amenitiesLoad,
isError: amenitiesError,
refetch: amenitiesRef,
} = useQuery({
queryKey: ["all_amenities", pageAmenities, pageSizeAmenities],
queryFn: () =>
getAllAmenities({ page: pageAmenities, page_size: pageSizeAmenities }),
select: (res) => res.data.data,
});
const pageMeal = parseInt(searchParams.get("pageMeal") || "1", 10);
const pageSizeMeal = parseInt(searchParams.get("pageSizeMeal") || "10", 10);
const {
data: mealData,
isLoading: mealLoad,
isError: mealError,
refetch: mealRef,
} = useQuery({
queryKey: ["all_meal", pageMeal, pageSizeMeal],
queryFn: () => hotelMealList({ page: pageMeal, page_size: pageSizeMeal }),
select: (res) => res.data.data,
});
const handleTabChange = (value: string) => {
setActiveTab(value);
navigate({
pathname: window.location.pathname,
search: "",
});
};
return (
{t("Belgilar (Badge)")}
{t("Ovqatlanish turlari")}
{t("Tariflar")}
{t("Transport")}
{t("Qulayliklar")}
{t("Otel turlari")}
{t("Otel sharoitlari")}
{t("Davlatlar")}
{isLoading ? (
) : isError ? (
) : (
)}
{tarifLoad ? (
) : tarifError ? (
) : (
)}
{transportLoad ? (
) : transportError ? (
) : (
)}
{amenitiesLoad ? (
) : amenitiesError ? (
) : (
)}
{typeLoad ? (
) : typeError ? (
) : (
)}
{mealLoad ? (
) : mealError ? (
) : (
)}
{featureLoad ? (
) : featureError ? (
) : (
)}
{featureTypeLoad ? (
) : featureTypeError ? (
) : (
)}
{countryLoad ? (
) : countryError ? (
) : (
)}
{regionLoad ? (
) : regionError ? (
) : (
)}
);
};
export default ToursSetting;