api ulandi

This commit is contained in:
Samandar Turgunboyev
2025-10-25 18:42:01 +05:00
parent 1a08775451
commit 05b752daf2
84 changed files with 11179 additions and 3724 deletions

View File

@@ -0,0 +1,307 @@
"use client";
import type {
Badge,
HotelFeatures,
HotelFeaturesType,
Tarif,
Transport,
Type,
} from "@/pages/tours/lib/type";
import { Button } from "@/shared/ui/button";
import { type ColumnDef } from "@tanstack/react-table";
import type { Dispatch, SetStateAction } from "react";
import { useTranslation } from "react-i18next";
export const BadgesColumns = (
onEdit: (id: number) => void,
onDelete: (id: number) => void,
t: (key: string) => string,
): ColumnDef<Badge>[] => [
{
accessorKey: "id",
header: "ID",
cell: ({ row }) => <span>{row.original.id}</span>,
},
{
accessorKey: "name",
header: t("Nomi"),
cell: ({ row }) => <span>{row.original.name}</span>,
},
{
accessorKey: "color",
header: t("Rang"),
cell: ({ row }) => (
<div className="flex items-center gap-2">
<span
className="w-5 h-5 rounded-full border border-gray-600"
style={{ backgroundColor: row.original.color }}
></span>
<span>{row.original.color}</span>
</div>
),
},
{
id: "actions",
header: () => <div className="text-right">{t("Harakatlar")}</div>,
cell: ({ row }) => {
const { t } = useTranslation();
return (
<div className="flex justify-end gap-2">
{" "}
{/* ongga tekislangan tugmalar */}
<Button
size="sm"
variant="outline"
onClick={() => onEdit(row.original.id)}
>
{t("Tahrirlash")}
</Button>
<Button
size="sm"
variant="destructive"
onClick={() => onDelete(row.original.id)}
>
{t("O'chirish")}
</Button>
</div>
);
},
},
];
export const TarifColumns = (
onEdit: (id: number) => void,
onDelete: (id: number) => void,
t: (key: string) => string,
): ColumnDef<Tarif>[] => [
{
accessorKey: "id",
header: "ID",
cell: ({ row }) => <span>{row.original.id}</span>,
},
{
accessorKey: "name",
header: t("Nomi"),
cell: ({ row }) => <span>{row.original.name}</span>,
},
{
id: "actions",
header: () => <div className="text-right">{t("Harakatlar")}</div>,
cell: ({ row }) => {
const { t } = useTranslation();
return (
<div className="flex justify-end gap-2">
<Button
size="sm"
variant="outline"
disabled
onClick={() => onEdit(row.original.id)}
>
{t("Tahrirlash")}
</Button>
<Button
size="sm"
disabled
variant="destructive"
onClick={() => onDelete(row.original.id)}
>
{t("O'chirish")}
</Button>
</div>
);
},
},
];
export const TranportColumns = (
onEdit: (id: number) => void,
onDelete: (id: number) => void,
t: (key: string) => string,
): ColumnDef<Transport>[] => [
{
accessorKey: "id",
header: "ID",
cell: ({ row }) => <span>{row.original.id}</span>,
},
{
accessorKey: "name",
header: t("Nomi"),
cell: ({ row }) => <span>{row.original.name}</span>,
},
{
id: "actions",
header: () => <div className="text-right">{t("Harakatlar")}</div>,
cell: ({ row }) => {
const { t } = useTranslation();
return (
<div className="flex justify-end gap-2">
<Button
size="sm"
variant="outline"
onClick={() => onEdit(row.original.id)}
>
{t("Tahrirlash")}
</Button>
<Button
size="sm"
variant="destructive"
onClick={() => onDelete(row.original.id)}
>
{t("O'chirish")}
</Button>
</div>
);
},
},
];
export const TypeColumns = (
onEdit: (id: number) => void,
onDelete: (id: number) => void,
t: (key: string) => string,
): ColumnDef<Type>[] => [
{
accessorKey: "id",
header: "ID",
cell: ({ row }) => <span>{row.original.id}</span>,
},
{
accessorKey: "name",
header: t("Nomi"),
cell: ({ row }) => <span>{row.original.name}</span>,
},
{
id: "actions",
header: () => <div className="text-right">{t("Harakatlar")}</div>,
cell: ({ row }) => {
const { t } = useTranslation();
return (
<div className="flex justify-end gap-2">
<Button
size="sm"
variant="outline"
onClick={() => onEdit(row.original.id)}
>
{t("Tahrirlash")}
</Button>
<Button
size="sm"
variant="destructive"
onClick={() => onDelete(row.original.id)}
>
{t("O'chirish")}
</Button>
</div>
);
},
},
];
export const FeatureColumns = (
onEdit: (id: number) => void,
onDelete: (id: number) => void,
t: (key: string) => string,
setActiveTab: Dispatch<SetStateAction<string>>,
setFeatureId: Dispatch<SetStateAction<number | null>>,
): ColumnDef<HotelFeatures>[] => [
{
accessorKey: "id",
header: "ID",
cell: ({ row }) => <span>{row.original.id}</span>,
},
{
accessorKey: "name",
header: t("Nomi"),
cell: ({ row }) => <span>{row.original.hotel_feature_type_name}</span>,
},
{
accessorKey: "name",
header: () => <div>{t("Kategoriya nomi")} (ru)</div>,
cell: ({ row }) => <span>{row.original.hotel_feature_type_name_ru}</span>,
},
{
id: "actions",
header: () => <div className="text-right">{t("Harakatlar")}</div>,
cell: ({ row }) => {
const { t } = useTranslation();
return (
<div className="flex justify-end gap-2">
<Button
size="sm"
variant="outline"
onClick={() => {
setActiveTab("feature_type");
setFeatureId(row.original.id);
}}
>
{t("Ko'rish")}
</Button>
<Button
size="sm"
variant="outline"
onClick={() => onEdit(row.original.id)}
>
{t("Tahrirlash")}
</Button>
<Button
size="sm"
variant="destructive"
onClick={() => onDelete(row.original.id)}
>
{t("O'chirish")}
</Button>
</div>
);
},
},
];
export const FeatureTypeColumns = (
onEdit: (id: number) => void,
onDelete: (id: number) => void,
t: (key: string) => string,
): ColumnDef<HotelFeaturesType>[] => [
{
accessorKey: "id",
header: "ID",
cell: ({ row }) => <span>{row.original.id}</span>,
},
{
accessorKey: "name",
header: t("Nomi"),
cell: ({ row }) => <span>{row.original.feature_name}</span>,
},
{
accessorKey: "name",
header: () => <div>{t("Kategoriya nomi")}</div>,
cell: ({ row }) => (
<span>{row.original.feature_type.hotel_feature_type_name}</span>
),
},
{
id: "actions",
header: () => <div className="text-right">{t("Harakatlar")}</div>,
cell: ({ row }) => {
const { t } = useTranslation();
return (
<div className="flex justify-end gap-2">
<Button
size="sm"
variant="outline"
onClick={() => onEdit(row.original.id)}
>
{t("Tahrirlash")}
</Button>
<Button
size="sm"
variant="destructive"
onClick={() => onDelete(row.original.id)}
>
{t("O'chirish")}
</Button>
</div>
);
},
},
];