@stackframe/stack-ui 2.6.23 → 2.6.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -5,14 +5,16 @@ export declare function TableView<TData, TValue>(props: {
|
|
|
5
5
|
columns: ColumnDef<TData, TValue>[];
|
|
6
6
|
toolbarRender?: (table: TableType<TData>) => React.ReactNode;
|
|
7
7
|
showDefaultToolbar?: boolean;
|
|
8
|
+
defaultColumnFilters: ColumnFiltersState;
|
|
9
|
+
defaultSorting: SortingState;
|
|
8
10
|
}): import("react/jsx-runtime").JSX.Element;
|
|
9
11
|
type DataTableProps<TData, TValue> = {
|
|
10
12
|
columns: ColumnDef<TData, TValue>[];
|
|
11
13
|
data: TData[];
|
|
12
14
|
toolbarRender?: (table: TableType<TData>) => React.ReactNode;
|
|
13
15
|
defaultVisibility?: VisibilityState;
|
|
14
|
-
defaultColumnFilters
|
|
15
|
-
defaultSorting
|
|
16
|
+
defaultColumnFilters: ColumnFiltersState;
|
|
17
|
+
defaultSorting: SortingState;
|
|
16
18
|
showDefaultToolbar?: boolean;
|
|
17
19
|
};
|
|
18
20
|
export declare function DataTable<TData, TValue>({ columns, data, toolbarRender, defaultVisibility, defaultColumnFilters, defaultSorting, showDefaultToolbar, }: DataTableProps<TData, TValue>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -6,27 +6,27 @@ import React from "react";
|
|
|
6
6
|
import { DataTablePagination } from "./pagination";
|
|
7
7
|
import { DataTableToolbar } from "./toolbar";
|
|
8
8
|
export function TableView(props) {
|
|
9
|
-
return (_jsxs("div", { className: "space-y-4", children: [_jsx(DataTableToolbar, { table: props.table, toolbarRender: props.toolbarRender, showDefaultToolbar: props.showDefaultToolbar }), _jsx("div", { className: "rounded-md border", children: _jsxs(Table, { children: [_jsx(TableHeader, { children: props.table.getHeaderGroups().map((headerGroup) => (_jsx(TableRow, { children: headerGroup.headers.map((header) => {
|
|
9
|
+
return (_jsxs("div", { className: "space-y-4", children: [_jsx(DataTableToolbar, { table: props.table, toolbarRender: props.toolbarRender, showDefaultToolbar: props.showDefaultToolbar, defaultColumnFilters: props.defaultColumnFilters, defaultSorting: props.defaultSorting }), _jsx("div", { className: "rounded-md border", children: _jsxs(Table, { children: [_jsx(TableHeader, { children: props.table.getHeaderGroups().map((headerGroup) => (_jsx(TableRow, { children: headerGroup.headers.map((header) => {
|
|
10
10
|
return (_jsx(TableHead, { colSpan: header.colSpan, children: header.isPlaceholder
|
|
11
11
|
? null
|
|
12
12
|
: flexRender(header.column.columnDef.header, header.getContext()) }, header.id));
|
|
13
13
|
}) }, headerGroup.id))) }), _jsx(TableBody, { children: props.table.getRowModel().rows.length ? (props.table.getRowModel().rows.map((row) => (_jsx(TableRow, { "data-state": row.getIsSelected() && "selected", children: row.getVisibleCells().map((cell) => (_jsx(TableCell, { children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id))) }, row.id)))) : (_jsx(TableRow, { children: _jsx(TableCell, { colSpan: props.columns.length, className: "h-24 text-center", children: "No results." }) })) })] }) }), _jsx(DataTablePagination, { table: props.table })] }));
|
|
14
14
|
}
|
|
15
15
|
export function DataTable({ columns, data, toolbarRender, defaultVisibility, defaultColumnFilters, defaultSorting, showDefaultToolbar = true, }) {
|
|
16
|
-
const [sorting, setSorting] = React.useState(defaultSorting
|
|
17
|
-
const [columnFilters, setColumnFilters] = React.useState(defaultColumnFilters
|
|
16
|
+
const [sorting, setSorting] = React.useState(defaultSorting);
|
|
17
|
+
const [columnFilters, setColumnFilters] = React.useState(defaultColumnFilters);
|
|
18
18
|
const [pagination, setPagination] = React.useState({
|
|
19
19
|
pageIndex: 0,
|
|
20
20
|
pageSize: 10,
|
|
21
21
|
});
|
|
22
22
|
const [globalFilter, setGlobalFilter] = React.useState();
|
|
23
|
-
return _jsx(DataTableBase, { columns: columns, data: data, toolbarRender: toolbarRender, defaultVisibility: defaultVisibility, sorting: sorting, setSorting: setSorting, columnFilters: columnFilters, setColumnFilters: setColumnFilters, manualPagination: false, manualFiltering: false, pagination: pagination, setPagination: setPagination, globalFilter: globalFilter, setGlobalFilter: setGlobalFilter, showDefaultToolbar: showDefaultToolbar });
|
|
23
|
+
return _jsx(DataTableBase, { columns: columns, data: data, toolbarRender: toolbarRender, defaultVisibility: defaultVisibility, sorting: sorting, setSorting: setSorting, defaultSorting: defaultSorting, columnFilters: columnFilters, setColumnFilters: setColumnFilters, defaultColumnFilters: defaultColumnFilters, manualPagination: false, manualFiltering: false, pagination: pagination, setPagination: setPagination, globalFilter: globalFilter, setGlobalFilter: setGlobalFilter, showDefaultToolbar: showDefaultToolbar });
|
|
24
24
|
}
|
|
25
25
|
export function DataTableManualPagination({ columns, data, toolbarRender, defaultVisibility, defaultColumnFilters, defaultSorting, onUpdate, showDefaultToolbar = true, }) {
|
|
26
|
-
const [sorting, setSorting] = React.useState(defaultSorting
|
|
26
|
+
const [sorting, setSorting] = React.useState(defaultSorting);
|
|
27
27
|
const [pagination, setPagination] = React.useState({ pageIndex: 0, pageSize: 10 });
|
|
28
28
|
const [cursors, setCursors] = React.useState({});
|
|
29
|
-
const [columnFilters, setColumnFilters] = React.useState(defaultColumnFilters
|
|
29
|
+
const [columnFilters, setColumnFilters] = React.useState(defaultColumnFilters);
|
|
30
30
|
const [globalFilter, setGlobalFilter] = React.useState();
|
|
31
31
|
const [refreshCounter, setRefreshCounter] = React.useState(0);
|
|
32
32
|
React.useEffect(() => {
|
|
@@ -54,7 +54,7 @@ export function DataTableManualPagination({ columns, data, toolbarRender, defaul
|
|
|
54
54
|
}, [globalFilter]);
|
|
55
55
|
return _jsx(DataTableBase, { columns: columns, data: data, toolbarRender: toolbarRender, sorting: sorting, setSorting: setSorting, pagination: pagination, setPagination: setPagination, columnFilters: columnFilters, setColumnFilters: setColumnFilters, rowCount: pagination.pageSize * Object.keys(cursors).length + (cursors[pagination.pageIndex + 1] ? 1 : 0), globalFilter: globalFilter, setGlobalFilter: setGlobalFilter, defaultColumnFilters: defaultColumnFilters, defaultSorting: defaultSorting, defaultVisibility: defaultVisibility, showDefaultToolbar: showDefaultToolbar });
|
|
56
56
|
}
|
|
57
|
-
function DataTableBase({ columns, data, toolbarRender, defaultVisibility, sorting, setSorting, pagination, setPagination, rowCount, columnFilters, setColumnFilters, globalFilter, setGlobalFilter, manualPagination = true, manualFiltering = true, showDefaultToolbar = true, }) {
|
|
57
|
+
function DataTableBase({ columns, data, toolbarRender, defaultVisibility, sorting, setSorting, defaultColumnFilters, defaultSorting, pagination, setPagination, rowCount, columnFilters, setColumnFilters, globalFilter, setGlobalFilter, manualPagination = true, manualFiltering = true, showDefaultToolbar = true, }) {
|
|
58
58
|
const [rowSelection, setRowSelection] = React.useState({});
|
|
59
59
|
const [columnVisibility, setColumnVisibility] = React.useState(defaultVisibility || {});
|
|
60
60
|
const table = useReactTable({
|
|
@@ -87,5 +87,5 @@ function DataTableBase({ columns, data, toolbarRender, defaultVisibility, sortin
|
|
|
87
87
|
manualFiltering,
|
|
88
88
|
rowCount,
|
|
89
89
|
});
|
|
90
|
-
return _jsx(TableView, { table: table, columns: columns, toolbarRender: toolbarRender, showDefaultToolbar: showDefaultToolbar });
|
|
90
|
+
return _jsx(TableView, { table: table, columns: columns, toolbarRender: toolbarRender, showDefaultToolbar: showDefaultToolbar, defaultColumnFilters: defaultColumnFilters, defaultSorting: defaultSorting });
|
|
91
91
|
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import { Table } from "@tanstack/react-table";
|
|
2
|
+
import { ColumnFiltersState, SortingState, Table } from "@tanstack/react-table";
|
|
3
3
|
interface DataTableToolbarProps<TData> {
|
|
4
4
|
table: Table<TData>;
|
|
5
5
|
toolbarRender?: (table: Table<TData>) => React.ReactNode;
|
|
6
6
|
showDefaultToolbar?: boolean;
|
|
7
|
+
defaultColumnFilters: ColumnFiltersState;
|
|
8
|
+
defaultSorting: SortingState;
|
|
7
9
|
}
|
|
8
|
-
export declare function DataTableToolbar<TData>({ table, toolbarRender, showDefaultToolbar }: DataTableToolbarProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export declare function DataTableToolbar<TData>({ table, toolbarRender, showDefaultToolbar, defaultColumnFilters, defaultSorting, }: DataTableToolbarProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
9
11
|
export {};
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import { Cross2Icon } from "@radix-ui/react-icons";
|
|
4
|
+
import { deepPlainEquals } from "@stackframe/stack-shared/dist/utils/objects";
|
|
4
5
|
import { Button } from "@stackframe/stack-ui";
|
|
5
|
-
import {
|
|
6
|
+
import { download, generateCsv, mkConfig } from 'export-to-csv';
|
|
6
7
|
import { DownloadIcon } from "lucide-react";
|
|
7
|
-
import {
|
|
8
|
-
export function DataTableToolbar({ table, toolbarRender, showDefaultToolbar }) {
|
|
9
|
-
const isFiltered = table.getState().columnFilters
|
|
10
|
-
const isSorted = table.getState().sorting
|
|
8
|
+
import { DataTableViewOptions } from "./view-options";
|
|
9
|
+
export function DataTableToolbar({ table, toolbarRender, showDefaultToolbar, defaultColumnFilters, defaultSorting, }) {
|
|
10
|
+
const isFiltered = !deepPlainEquals(table.getState().columnFilters, defaultColumnFilters);
|
|
11
|
+
const isSorted = !deepPlainEquals(table.getState().sorting, defaultSorting);
|
|
11
12
|
return (_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2 flex-wrap flex-1", children: [toolbarRender?.(table), (isFiltered || isSorted) && (_jsxs(Button, { variant: "ghost", onClick: () => {
|
|
12
|
-
table.
|
|
13
|
-
table.
|
|
14
|
-
}, className: "h-8 px-2 lg:px-3", children: ["Reset", _jsx(Cross2Icon, { className: "ml-2 h-4 w-4" })] }))] }), showDefaultToolbar && (_jsx(_Fragment, { children: _jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [_jsx(DataTableViewOptions, { table: table }), _jsxs(Button, { variant: "outline", size: "sm", className: "ml-auto hidden h-8 lg:flex", onClick: () => {
|
|
13
|
+
table.setColumnFilters(defaultColumnFilters);
|
|
14
|
+
table.setSorting(defaultSorting);
|
|
15
|
+
}, className: "h-8 px-2 lg:px-3", children: ["Reset filters", _jsx(Cross2Icon, { className: "ml-2 h-4 w-4" })] }))] }), showDefaultToolbar && (_jsx(_Fragment, { children: _jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [_jsx(DataTableViewOptions, { table: table }), _jsxs(Button, { variant: "outline", size: "sm", className: "ml-auto hidden h-8 lg:flex", onClick: () => {
|
|
15
16
|
const csvConfig = mkConfig({
|
|
16
17
|
fieldSeparator: ',',
|
|
17
18
|
filename: 'data',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stackframe/stack-ui",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.24",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"files": [
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
"react-hook-form": "^7.53.1",
|
|
77
77
|
"react-resizable-panels": "^2.1.6",
|
|
78
78
|
"tailwind-merge": "^2.5.4",
|
|
79
|
-
"@stackframe/stack-shared": "2.6.
|
|
79
|
+
"@stackframe/stack-shared": "2.6.24"
|
|
80
80
|
},
|
|
81
81
|
"devDependencies": {
|
|
82
82
|
"rimraf": "^5.0.10",
|