MCPcopy
hub / github.com/msgbyte/tianji / DataTableColumnSelector

Function DataTableColumnSelector

src/client/components/DataTableColumnSelector.tsx:36–169  ·  view source on GitHub ↗
({
  columns,
  hiddenColumnIds,
  setHiddenColumnIds,
  columnOrder,
  setColumnOrder,
}: DataTableColumnSelectorProps<TData>)

Source from the content-addressed store, hash-verified

34}
35
36export function DataTableColumnSelector<TData>({
37 columns,
38 hiddenColumnIds,
39 setHiddenColumnIds,
40 columnOrder,
41 setColumnOrder,
42}: DataTableColumnSelectorProps<TData>) {
43 const { t } = useTranslation();
44
45 const orderedColumns = useMemo(() => {
46 if (!columnOrder || columnOrder.length === 0) {
47 return columns;
48 }
49 const orderMap = new Map(columnOrder.map((id, index) => [id, index]));
50 return [...columns].sort((a, b) => {
51 const aIndex = orderMap.get(a.id!) ?? Number.MAX_SAFE_INTEGER;
52 const bIndex = orderMap.get(b.id!) ?? Number.MAX_SAFE_INTEGER;
53 return aIndex - bIndex;
54 });
55 }, [columns, columnOrder]);
56
57 const toggleColumn = (columnId: string) => {
58 setHiddenColumnIds((prev = []) => {
59 if (prev.includes(columnId)) {
60 return prev.filter((id) => id !== columnId);
61 } else {
62 return [...prev, columnId];
63 }
64 });
65 };
66
67 const handleDragEnd = (result: DropResult) => {
68 if (!result.destination || !setColumnOrder) return;
69
70 const currentOrder =
71 columnOrder && columnOrder.length > 0
72 ? columnOrder
73 : columns.map((c) => c.id!);
74
75 const newOrder = reorder(
76 currentOrder,
77 result.source.index,
78 result.destination.index
79 );
80 setColumnOrder(newOrder);
81 };
82
83 const renderDraggableItem = (
84 col: ColumnDef<TData>,
85 dragProvided: DraggableProvided,
86 snapshot: DraggableStateSnapshot
87 ) => (
88 <div
89 ref={dragProvided.innerRef}
90 {...dragProvided.draggableProps}
91 className={`flex items-center gap-2 rounded-sm px-2 py-1.5 text-sm ${
92 snapshot.isDragging
93 ? 'bg-white shadow-lg ring-1 ring-zinc-200 dark:bg-zinc-900 dark:ring-zinc-700'

Callers

nothing calls this directly

Calls 2

renderDraggableItemFunction · 0.85
getMethod · 0.65

Tested by

no test coverage detected