added pagination params page

This commit is contained in:
Samandar Turgunboyev
2025-11-17 13:09:24 +05:00
parent 41fe8725c7
commit 0f650ad15a
13 changed files with 544 additions and 346 deletions

View File

@@ -25,6 +25,39 @@ 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 (
<div className="flex flex-col items-center justify-center min-h-[300px] bg-slate-800/50 rounded-lg text-center text-white gap-4 p-6">
<AlertTriangle className="w-10 h-10 text-red-500" />
<p className="text-lg">{message}</p>
<Button
onClick={onRetry}
className="bg-gradient-to-r from-blue-600 to-cyan-600 text-white rounded-lg px-5 py-2 hover:opacity-90"
>
{t("Qayta urinish")}
</Button>
</div>
);
};
// Loading Component
const LoadingDisplay: React.FC<{ message?: string }> = ({ message }) => {
const { t } = useTranslation();
return (
<div className="flex flex-col items-center justify-center min-h-[300px] bg-slate-800/50 rounded-lg text-white gap-4">
<Loader2 className="w-10 h-10 animate-spin text-cyan-400" />
<p className="text-slate-400">
{message || t("Ma'lumotlar yuklanmoqda...")}
</p>
</div>
);
};
const ToursSetting: React.FC = () => {
const { t } = useTranslation();
const [searchParams] = useSearchParams();
@@ -134,61 +167,12 @@ const ToursSetting: React.FC = () => {
isError: amenitiesError,
refetch: amenitiesRef,
} = useQuery({
queryKey: ["all_amenities", page, pageSize],
queryFn: () => getAllAmenities({ page, page_size: pageSize }),
queryKey: ["all_amenities", pageAmenities, pageSizeAmenities],
queryFn: () =>
getAllAmenities({ page: pageAmenities, page_size: pageSizeAmenities }),
select: (res) => res.data.data,
});
if (
isLoading ||
tarifLoad ||
transportLoad ||
typeLoad ||
featureLoad ||
featureTypeLoad ||
amenitiesLoad
) {
return (
<div className="flex flex-col items-center justify-center min-h-screen bg-slate-900 text-white gap-4 w-full">
<Loader2 className="w-10 h-10 animate-spin text-cyan-400" />
<p className="text-slate-400">{t("Ma'lumotlar yuklanmoqda...")}</p>
</div>
);
}
if (
isError ||
tarifError ||
transportError ||
typeError ||
featureError ||
featureTypeError ||
amenitiesError
) {
return (
<div className="flex flex-col items-center justify-center min-h-screen bg-slate-900 w-full text-center text-white gap-4">
<AlertTriangle className="w-10 h-10 text-red-500" />
<p className="text-lg">
{t("Ma'lumotlarni yuklashda xatolik yuz berdi.")}
</p>
<Button
onClick={() => {
refetch();
tarifRef();
transportRef();
typeRef();
featureRef();
featureTypeRef();
amenitiesRef();
}}
className="bg-gradient-to-r from-blue-600 to-cyan-600 text-white rounded-lg px-5 py-2 hover:opacity-90"
>
{t("Qayta urinish")}
</Button>
</div>
);
}
const handleTabChange = (value: string) => {
setActiveTab(value);
navigate({
@@ -217,52 +201,121 @@ const ToursSetting: React.FC = () => {
</TabsList>
<TabsContent value="badge" className="space-y-4">
<BadgeTable data={data} page={page} pageSize={pageSize} />
{isLoading ? (
<LoadingDisplay />
) : isError ? (
<ErrorDisplay
message={t("Belgilarni yuklashda xatolik yuz berdi.")}
onRetry={refetch}
/>
) : (
<BadgeTable data={data} page={page} pageSize={pageSize} />
)}
</TabsContent>
<TabsContent value="tarif" className="space-y-4">
<TarifTable
data={tarifData}
page={pageTarif}
pageSize={pageSizeTarif}
/>
{tarifLoad ? (
<LoadingDisplay />
) : tarifError ? (
<ErrorDisplay
message={t("Tariflarni yuklashda xatolik yuz berdi.")}
onRetry={tarifRef}
/>
) : (
<TarifTable
data={tarifData}
page={pageTarif}
pageSize={pageSizeTarif}
/>
)}
</TabsContent>
<TabsContent value="transport" className="space-y-4">
<TransportTable
data={transportData}
page={pageTransport}
pageSize={pageSizeTransport}
/>
{transportLoad ? (
<LoadingDisplay />
) : transportError ? (
<ErrorDisplay
message={t("Transportlarni yuklashda xatolik yuz berdi.")}
onRetry={transportRef}
/>
) : (
<TransportTable
data={transportData}
page={pageTransport}
pageSize={pageSizeTransport}
/>
)}
</TabsContent>
<TabsContent value="meal" className="space-y-4">
<Amenities
data={amenitiesData}
page={pageAmenities}
pageSize={pageSizeAmenities}
/>
{amenitiesLoad ? (
<LoadingDisplay />
) : amenitiesError ? (
<ErrorDisplay
message={t("Qulayliklarni yuklashda xatolik yuz berdi.")}
onRetry={amenitiesRef}
/>
) : (
<Amenities
data={amenitiesData}
page={pageAmenities}
pageSize={pageSizeAmenities}
/>
)}
</TabsContent>
<TabsContent value="hotel_type" className="space-y-4">
<MealTable
data={typeData}
page={pageTransport}
pageSize={pageSizeTransport}
/>
{typeLoad ? (
<LoadingDisplay />
) : typeError ? (
<ErrorDisplay
message={t("Otel turlarini yuklashda xatolik yuz berdi.")}
onRetry={typeRef}
/>
) : (
<MealTable
data={typeData}
page={pageType}
pageSize={pageSizeType}
/>
)}
</TabsContent>
<TabsContent value="hotel_features" className="space-y-4">
<FeaturesTable
data={featureData}
page={pageFeature}
pageSize={pageSizeFeature}
setActiveTab={setActiveTab}
setFeatureId={setFeatureId}
/>
{featureLoad ? (
<LoadingDisplay />
) : featureError ? (
<ErrorDisplay
message={t("Otel sharoitlarini yuklashda xatolik yuz berdi.")}
onRetry={featureRef}
/>
) : (
<FeaturesTable
data={featureData}
page={pageFeature}
pageSize={pageSizeFeature}
setActiveTab={setActiveTab}
setFeatureId={setFeatureId}
/>
)}
</TabsContent>
<TabsContent value="feature_type" className="space-y-4">
<FeaturesTableType
data={featureTypeData}
page={pageFeature}
featureId={featureId}
pageSize={pageSizeFeature}
/>
{featureTypeLoad ? (
<LoadingDisplay />
) : featureTypeError ? (
<ErrorDisplay
message={t("Sharoit turlarini yuklashda xatolik yuz berdi.")}
onRetry={featureTypeRef}
/>
) : (
<FeaturesTableType
data={featureTypeData}
page={pageFeature}
featureId={featureId}
pageSize={pageSizeFeature}
/>
)}
</TabsContent>
</Tabs>
</div>