added pagination params page
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user