Fix column ordering/saving
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import { ArrowUpDown, GripVertical } from "lucide-react";
|
import { ArrowUpDown, GripVertical } from "lucide-react";
|
||||||
import { Button } from "@/components/ui/button";
|
|
||||||
import { Badge } from "@/components/ui/badge";
|
import { Badge } from "@/components/ui/badge";
|
||||||
import {
|
import {
|
||||||
Table,
|
Table,
|
||||||
@@ -10,12 +9,10 @@ import {
|
|||||||
TableHeader,
|
TableHeader,
|
||||||
TableRow,
|
TableRow,
|
||||||
} from "@/components/ui/table";
|
} from "@/components/ui/table";
|
||||||
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
|
|
||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
import {
|
import {
|
||||||
DndContext,
|
DndContext,
|
||||||
DragEndEvent,
|
DragEndEvent,
|
||||||
DragOverlay,
|
|
||||||
DragStartEvent,
|
DragStartEvent,
|
||||||
MouseSensor,
|
MouseSensor,
|
||||||
TouchSensor,
|
TouchSensor,
|
||||||
@@ -94,9 +91,10 @@ interface ProductTableProps {
|
|||||||
onSort: (column: keyof Product) => void;
|
onSort: (column: keyof Product) => void;
|
||||||
sortColumn: keyof Product;
|
sortColumn: keyof Product;
|
||||||
sortDirection: 'asc' | 'desc';
|
sortDirection: 'asc' | 'desc';
|
||||||
visibleColumns: Set<keyof Product>;
|
visibleColumns: Set<keyof Product | 'image'>;
|
||||||
columnDefs: ColumnDef[];
|
columnDefs: ColumnDef[];
|
||||||
onColumnOrderChange?: (columns: (keyof Product)[]) => void;
|
columnOrder: (keyof Product | 'image')[];
|
||||||
|
onColumnOrderChange?: (columns: (keyof Product | 'image')[]) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface SortableHeaderProps {
|
interface SortableHeaderProps {
|
||||||
@@ -161,9 +159,10 @@ export function ProductTable({
|
|||||||
sortDirection,
|
sortDirection,
|
||||||
visibleColumns,
|
visibleColumns,
|
||||||
columnDefs,
|
columnDefs,
|
||||||
|
columnOrder,
|
||||||
onColumnOrderChange,
|
onColumnOrderChange,
|
||||||
}: ProductTableProps) {
|
}: ProductTableProps) {
|
||||||
const [activeId, setActiveId] = React.useState<keyof Product | null>(null);
|
const [, setActiveId] = React.useState<keyof Product | null>(null);
|
||||||
const sensors = useSensors(
|
const sensors = useSensors(
|
||||||
useSensor(MouseSensor, {
|
useSensor(MouseSensor, {
|
||||||
activationConstraint: {
|
activationConstraint: {
|
||||||
@@ -180,8 +179,8 @@ export function ProductTable({
|
|||||||
|
|
||||||
// Get ordered visible columns
|
// Get ordered visible columns
|
||||||
const orderedColumns = React.useMemo(() => {
|
const orderedColumns = React.useMemo(() => {
|
||||||
return Array.from(visibleColumns);
|
return columnOrder.filter(col => visibleColumns.has(col));
|
||||||
}, [visibleColumns]);
|
}, [columnOrder, visibleColumns]);
|
||||||
|
|
||||||
const handleDragStart = (event: DragStartEvent) => {
|
const handleDragStart = (event: DragStartEvent) => {
|
||||||
setActiveId(event.active.id as keyof Product);
|
setActiveId(event.active.id as keyof Product);
|
||||||
@@ -200,14 +199,6 @@ export function ProductTable({
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const getSortIcon = (column: keyof Product) => {
|
|
||||||
if (sortColumn !== column) return <ArrowUpDown className="ml-2 h-4 w-4" />;
|
|
||||||
return (
|
|
||||||
<ArrowUpDown
|
|
||||||
className={`ml-2 h-4 w-4 ${sortDirection === 'asc' ? 'rotate-180' : ''}`}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const getStockStatus = (status: string | undefined) => {
|
const getStockStatus = (status: string | undefined) => {
|
||||||
if (!status) return null;
|
if (!status) return null;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { useState, useEffect, useRef } from 'react';
|
import { useState, useEffect } from 'react';
|
||||||
import { useQuery, useQueryClient, keepPreviousData } from '@tanstack/react-query';
|
import { useQuery, useQueryClient, keepPreviousData } from '@tanstack/react-query';
|
||||||
import { ProductFilters } from '@/components/products/ProductFilters';
|
import { ProductFilters } from '@/components/products/ProductFilters';
|
||||||
import { ProductTable } from '@/components/products/ProductTable';
|
import { ProductTable } from '@/components/products/ProductTable';
|
||||||
@@ -433,6 +433,7 @@ export function Products() {
|
|||||||
sortColumn={sortColumn}
|
sortColumn={sortColumn}
|
||||||
sortDirection={sortDirection}
|
sortDirection={sortDirection}
|
||||||
columnDefs={AVAILABLE_COLUMNS}
|
columnDefs={AVAILABLE_COLUMNS}
|
||||||
|
columnOrder={columnOrder}
|
||||||
onSort={handleSort}
|
onSort={handleSort}
|
||||||
onColumnOrderChange={handleColumnOrderChange}
|
onColumnOrderChange={handleColumnOrderChange}
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user