"use client" import * as React from "react" import { type Table } from "@tanstack/react-table" import { MoveLeft, MoveRight, Slash, ChevronsUpDown, } from "lucide-react" import { cn, toSentenceCase } from "@/lib/utils" import { Button } from "@/components/ui/button" import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, } from "@/components/ui/command" import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover" /** * Button that opens a popover with a list of columns. * Each column can be pinned left, pinned right, or unpinned. */ export function DataTablePinList({ table }: { table: Table }) { const [open, setOpen] = React.useState(false) return ( No columns found. {table .getAllLeafColumns() .filter((col) => col.getCanPin?.()) // Only show columns that can be pinned .map((column) => { const pinned = column.getIsPinned?.() // 'left' | 'right' | false return ( { column.pin?.(newPin === "none" ? false : newPin) }} /> ) })} ) } /** * Renders a single column row (CommandItem) with sub-options: * Left, Right, or Unpin */ function PinColumnItem({ column, pinned, onPinnedChange, }: { column: any pinned: "left" | "right" | false onPinnedChange: (newPin: "left" | "right" | "none") => void }) { const [subOpen, setSubOpen] = React.useState(false) const colId = column.id const handleMainSelect = () => { // Toggle subOpen to show sub-options setSubOpen((prev) => !prev) } return ( <> {toSentenceCase(colId)} {pinned === "left" && ( )} {pinned === "right" && ( )} {pinned === false && ( )} {subOpen && (
{ onPinnedChange("left") setSubOpen(false) }} > Pin Left { onPinnedChange("right") setSubOpen(false) }} > Pin Right { onPinnedChange("none") setSubOpen(false) }} > No Pin
)} ) }