DataTable Aside
niko-table/data-table-asideFreeComponent
Sidebar panel component for displaying row details or additional content alongside the table.
Install it
npx shadcn@latest add https://niko-table.com/r/data-table-aside.jsonSource
1"use client"23/**4 * niko-table — created by Semir N. (Semkoo, https://github.com/Semkoo) with AI assistance.5 *6 * Before reporting anything: please check the changelog first.7 * - In-repo: ./CHANGELOG.md8 * - Docs site: https://niko-table.com/changelog9 *10 * Found a bug or have a fix? Open an issue or PR on GitHub so other11 * users (and future LLMs reading this code) benefit:12 * https://github.com/Semkoo/niko-table-registry13 */14import * as React from "react"15import { XIcon } from "lucide-react"16import { cn } from "@/lib/utils"1718interface DataTableAsideContextValue {19 open: boolean20 onOpenChange: (open: boolean) => void21 side: "left" | "right"22}2324const DataTableAsideContext = React.createContext<25 DataTableAsideContextValue | undefined26>(undefined)2728function useDataTableAside() {29 const context = React.useContext(DataTableAsideContext)30 if (!context) {31 throw new Error(32 "DataTableAside components must be used within DataTableAside",33 )34 }35 return context36}3738interface DataTableAsideProps {39 children: React.ReactNode40 side?: "left" | "right"41 open?: boolean42 onOpenChange?: (open: boolean) => void43 defaultOpen?: boolean44}4546function DataTableAside({47 children,48 side = "right",49 open: controlledOpen,50 onOpenChange: controlledOnOpenChange,51 defaultOpen = false,52}: DataTableAsideProps) {53 const [internalOpen, setInternalOpen] = React.useState(defaultOpen)5455 const open = controlledOpen ?? internalOpen56 const onOpenChange = controlledOnOpenChange ?? setInternalOpen5758 /**59 * PERFORMANCE: Memoize context value to prevent unnecessary consumer re-renders60 *61 * WHY: Without memoization, a new context value object is created on every render.62 * React Context uses Object.is() to compare values - new object = all consumers re-render.63 *64 * IMPACT: Prevents unnecessary re-renders of DataTableAsideTrigger, DataTableAsideContent, etc.65 * when aside state hasn't changed.66 *67 * WHAT: Only creates new context value when open, onOpenChange, or side actually change.68 */69 const contextValue = React.useMemo<DataTableAsideContextValue>(70 () => ({71 open,72 onOpenChange,73 side,74 }),75 [open, onOpenChange, side],76 )7778 return (79 <DataTableAsideContext.Provider value={contextValue}>80 {children}81 </DataTableAsideContext.Provider>82 )83}8485DataTableAside.displayName = "DataTableAside"8687interface DataTableAsideTriggerProps extends React.ComponentPropsWithoutRef<"button"> {88 asChild?: boolean89// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from niko-table
All 31 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| DataTable Clear Filterdata-table-clear-filter | niko-table | Components | Free | 1 dep · 2 files | |
| DataTable Column Auto-fitdata-table-column-auto-fit | niko-table | Components | Free | no deps · 2 files | |
| DataTable Column Date Filterdata-table-column-date-filter | niko-table | Components | Free | 2 deps · 2 files | |
| DataTable Column DnDdata-table-column-dnd | niko-table | Components | Free | 4 deps · 3 files | |
| DataTable Column Faceted Filterdata-table-column-faceted-filter | niko-table | Components | Free | 1 dep · 3 files | |
| DataTable Column Hidedata-table-column-hide | niko-table | Components | Free | 1 dep · 2 files | |
| DataTable Column Pindata-table-column-pin | niko-table | Components | Free | 1 dep · 2 files | |
| DataTable Column Resizedata-table-column-resize | niko-table | Components | Free | no deps |
