coutry crud added

This commit is contained in:
Samandar Turgunboyev
2025-12-04 12:41:01 +05:00
parent 394d158947
commit da46b6cac1
19 changed files with 2193 additions and 163 deletions

View File

@@ -1,19 +1,25 @@
"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";
@@ -63,6 +69,7 @@ const ToursSetting: React.FC = () => {
const [searchParams] = useSearchParams();
const [activeTab, setActiveTab] = useState("badge");
const [featureId, setFeatureId] = useState<number | null>(null);
const [countryId, setCountryId] = useState<number | null>(null);
const navigate = useNavigate();
const page = parseInt(searchParams.get("page") || "1", 10);
@@ -120,6 +127,47 @@ const ToursSetting: React.FC = () => {
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",
@@ -173,6 +221,20 @@ const ToursSetting: React.FC = () => {
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({
@@ -191,6 +253,9 @@ const ToursSetting: React.FC = () => {
>
<TabsList className="w-full">
<TabsTrigger value="badge">{t("Belgilar (Badge)")}</TabsTrigger>
<TabsTrigger value="meal_plan">
{t("Ovqatlanish turlari")}
</TabsTrigger>
<TabsTrigger value="tarif">{t("Tariflar")}</TabsTrigger>
<TabsTrigger value="transport">{t("Transport")}</TabsTrigger>
<TabsTrigger value="meal">{t("Qulayliklar")}</TabsTrigger>
@@ -198,6 +263,7 @@ const ToursSetting: React.FC = () => {
<TabsTrigger value="hotel_features">
{t("Otel sharoitlari")}
</TabsTrigger>
<TabsTrigger value="country">{t("Davlatlar")}</TabsTrigger>
</TabsList>
<TabsContent value="badge" className="space-y-4">
@@ -273,7 +339,7 @@ const ToursSetting: React.FC = () => {
onRetry={typeRef}
/>
) : (
<MealTable
<HotelType
data={typeData}
page={pageType}
pageSize={pageSizeType}
@@ -281,6 +347,23 @@ const ToursSetting: React.FC = () => {
)}
</TabsContent>
<TabsContent value="meal_plan" className="space-y-4">
{mealLoad ? (
<LoadingDisplay />
) : mealError ? (
<ErrorDisplay
message={t("Otel turlarini yuklashda xatolik yuz berdi.")}
onRetry={mealRef}
/>
) : (
<MealTable
data={mealData}
page={pageMeal}
pageSize={pageSizeMeal}
/>
)}
</TabsContent>
<TabsContent value="hotel_features" className="space-y-4">
{featureLoad ? (
<LoadingDisplay />
@@ -317,6 +400,43 @@ const ToursSetting: React.FC = () => {
/>
)}
</TabsContent>
<TabsContent value="country" className="space-y-4">
{countryLoad ? (
<LoadingDisplay />
) : countryError ? (
<ErrorDisplay
message={t("Sharoit turlarini yuklashda xatolik yuz berdi.")}
onRetry={countryRef}
/>
) : (
<CountryTable
data={countryData}
page={pageCountry}
setActiveTab={setActiveTab}
setFeatureId={setCountryId}
pageSize={pageSizeCountry}
/>
)}
</TabsContent>
<TabsContent value="region" className="space-y-4">
{regionLoad ? (
<LoadingDisplay />
) : regionError ? (
<ErrorDisplay
message={t("Sharoit turlarini yuklashda xatolik yuz berdi.")}
onRetry={regionRef}
/>
) : (
<RegionTable
data={regionData}
page={pageRegion}
featureId={countryId}
pageSize={pageSizeRegion}
/>
)}
</TabsContent>
</Tabs>
</div>
</div>