📑
【NextJs14】NextJs14 と 便利なライブラリ【#18Shadcn-ui DataTable Row Actions 】
【#18Shadcn-ui DataTable Row Actions 】
YouTube: https://youtu.be/pyEGq8DNzRk
今回はテーブルにアクション用のメニューを追加します。
app/(main)/data/_components/columns.tsx
"use client";
import { ColumnDef } from "@tanstack/react-table";
import { MoreHorizontal } from "lucide-react";
import { Button } from "@/components/ui/button";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
import { toast } from "sonner";
export type User = {
id: number;
name: string;
username: string;
email: string;
address?: {
street: string;
suite: string;
city: string;
zipcode: string;
geo: {
lat: string;
lng: string;
};
};
phone?: string;
website?: string;
company?: {
name: string;
catchPhrase: string;
bs: string;
};
};
export const columns: ColumnDef<User>[] = [
{
accessorKey: "id",
header: "ID",
},
{
accessorKey: "email",
header: "Email",
},
{
accessorKey: "username",
header: "Username",
},
{
accessorKey: "name",
header: "Name",
},
{
id: "actions",
cell: ({ row }) => {
const user = row.original;
const onClickCopy = () => {
navigator.clipboard.writeText(user.email);
toast.success(`Copy: ${user.email}`);
};
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button
variant="ghost"
className="h-8 w-8 p-0 focus-visible:ring-0 focus-visible:ring-offset-0"
>
<span className="sr-only">Open menu</span>
<MoreHorizontal className="h-4 w-4" />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end">
<DropdownMenuLabel>Actions</DropdownMenuLabel>
<DropdownMenuItem onClick={onClickCopy}>
Copy Email
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
);
},
},
];
Discussion