X Enterprises
Composables

useColumns

Derives reactive table column definitions from a schema descriptor, with support for visibility toggling and ordering.

useColumns

Generates a reactive, user-configurable column definition list from a declarative schema object. Each column tracks its visibility and order, and the composable exposes helpers to toggle, reorder, and reset columns — powering the column-picker UI in XATableColumns and XADataTable.

Usage

const { columns, visibleColumns, toggle, reorder, reset } = useColumns({
  name: { label: "Name", visible: true },
  email: { label: "Email", visible: true },
  role: { label: "Role", visible: false },
  createdAt: { label: "Created", visible: true },
})

Returns

KeyTypeDescription
columnsRef<ColumnDef[]>Full ordered column definition list (visible and hidden).
visibleColumnsComputedRef<ColumnDef[]>Subset of columns where visible is true.
toggle(key: string) => voidToggles the visibility of the column with the given key.
reorder(from: number, to: number) => voidMoves a column by array index.
reset() => voidRestores all columns to their original schema defaults.

Example

const { visibleColumns, toggle, reset } = useColumns({
  id: { label: "ID", visible: false },
  name: { label: "Full Name", visible: true },
  status: { label: "Status", visible: true },
  updatedAt: { label: "Last Updated", visible: true },
})

// Pass to table
// <XATable :columns="visibleColumns" :rows="rows" />

AI Context

composable: useColumns
package: "@xenterprises/nuxt-x-app"
use-when: >
  Tables where users should be able to show, hide, or reorder columns via a
  column-picker popover. Define the schema once; the composable manages state
  and persistence so the table always renders only the selected columns.
pairs-with: XATableColumns, XADataTable, XATable, useDataTable
Copyright © 2026