@sellmate/design-system-react 1.0.62 → 1.0.63
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/README.md +1 -1
- package/dist/components/components.d.ts +55 -13
- package/dist/components/components.js +97 -19
- package/dist/components/components.server.d.ts +55 -13
- package/dist/components/components.server.js +131 -18
- package/dist/hooks/useSdTableVirtualScroll.d.ts +11 -0
- package/dist/hooks/useSdTableVirtualScroll.js +56 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.js +2 -1
- package/dist/sdModal.d.ts +2 -1
- package/dist/sdModal.js +4 -6
- package/lib/components/components.server.ts +207 -72
- package/lib/components/components.ts +147 -28
- package/lib/hooks/useSdTableVirtualScroll.ts +82 -0
- package/lib/index.ts +4 -3
- package/lib/sdModal.ts +6 -9
- package/package.json +2 -2
- package/dist/SdTable.d.ts +0 -40
- package/dist/SdTable.js +0 -74
- package/lib/SdTable.tsx +0 -185
package/lib/SdTable.tsx
DELETED
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import React, { useEffect, useState } from 'react';
|
|
4
|
-
import type { Row as SdTableRow, SdTableColumn } from '@sellmate/design-system';
|
|
5
|
-
import { SdTable as SdTableElement, defineCustomElement as defineSdTable } from '@sellmate/design-system/dist/components/sd-table.js';
|
|
6
|
-
import { createComponent, type EventName } from '@stencil/react-output-target/runtime';
|
|
7
|
-
|
|
8
|
-
type TablePagination = {
|
|
9
|
-
page: number;
|
|
10
|
-
rowsPerPage: number;
|
|
11
|
-
lastPage?: number;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
type HeaderRenderContext = {
|
|
15
|
-
column: SdTableColumn;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
type CellRenderContext<RowType extends SdTableRow> = {
|
|
19
|
-
column: SdTableColumn;
|
|
20
|
-
row: RowType;
|
|
21
|
-
rowIndex: number;
|
|
22
|
-
value: any;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
type HeaderRendererMap = Partial<Record<string, (context: HeaderRenderContext) => React.ReactNode>>;
|
|
26
|
-
type CellRendererMap<RowType extends SdTableRow> = Partial<
|
|
27
|
-
Record<string, (context: CellRenderContext<RowType>) => React.ReactNode>
|
|
28
|
-
>;
|
|
29
|
-
|
|
30
|
-
const SLOT_WRAPPER_STYLE: React.CSSProperties = {
|
|
31
|
-
display: 'contents',
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
type SdTableBaseEvents = {
|
|
35
|
-
onSdSelectChange: EventName<CustomEvent<SdTableRow[]>>;
|
|
36
|
-
onSdPageChange: EventName<CustomEvent<number>>;
|
|
37
|
-
onSdRowsPerPageChange: EventName<CustomEvent<number>>;
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
const SdTableBase = /* @__PURE__ */ createComponent<SdTableElement, SdTableBaseEvents>({
|
|
41
|
-
tagName: 'sd-table',
|
|
42
|
-
elementClass: SdTableElement,
|
|
43
|
-
react: React,
|
|
44
|
-
events: {
|
|
45
|
-
onSdSelectChange: 'sdSelectChange',
|
|
46
|
-
onSdPageChange: 'sdPageChange',
|
|
47
|
-
onSdRowsPerPageChange: 'sdRowsPerPageChange',
|
|
48
|
-
} as SdTableBaseEvents,
|
|
49
|
-
defineCustomElement: defineSdTable,
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
const getCellValue = (column: SdTableColumn, row: SdTableRow) => {
|
|
53
|
-
const { field, format, name } = column;
|
|
54
|
-
const value = typeof field === 'function' ? field(row) : field ? row[field] : row[name];
|
|
55
|
-
return format ? format(value, row) : value;
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
export type SdTableProps<RowType extends SdTableRow = SdTableRow> = Omit<
|
|
59
|
-
React.ComponentProps<typeof SdTableBase>,
|
|
60
|
-
'columns' | 'rows' | 'selected' | 'children'
|
|
61
|
-
> & {
|
|
62
|
-
columns: SdTableColumn[];
|
|
63
|
-
rows?: RowType[] | null;
|
|
64
|
-
selected?: RowType[];
|
|
65
|
-
pagination?: TablePagination;
|
|
66
|
-
useInternalPagination?: boolean;
|
|
67
|
-
headerRenderers?: HeaderRendererMap;
|
|
68
|
-
cellRenderers?: CellRendererMap<RowType>;
|
|
69
|
-
renderHeader?: (context: HeaderRenderContext) => React.ReactNode;
|
|
70
|
-
renderCell?: (context: CellRenderContext<RowType>) => React.ReactNode;
|
|
71
|
-
noDataContent?: React.ReactNode;
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
export function SdTable<RowType extends SdTableRow = SdTableRow>({
|
|
75
|
-
columns,
|
|
76
|
-
rows,
|
|
77
|
-
selected,
|
|
78
|
-
pagination,
|
|
79
|
-
useInternalPagination = false,
|
|
80
|
-
headerRenderers,
|
|
81
|
-
cellRenderers,
|
|
82
|
-
renderHeader,
|
|
83
|
-
renderCell,
|
|
84
|
-
noDataContent,
|
|
85
|
-
onSdPageChange,
|
|
86
|
-
onSdRowsPerPageChange,
|
|
87
|
-
...props
|
|
88
|
-
}: SdTableProps<RowType>) {
|
|
89
|
-
const normalizedRows = rows ?? [];
|
|
90
|
-
const [currentPage, setCurrentPage] = useState(pagination?.page || 1);
|
|
91
|
-
const [currentRowsPerPage, setCurrentRowsPerPage] = useState(
|
|
92
|
-
pagination?.rowsPerPage || normalizedRows.length || 0,
|
|
93
|
-
);
|
|
94
|
-
|
|
95
|
-
useEffect(() => {
|
|
96
|
-
setCurrentPage(pagination?.page || 1);
|
|
97
|
-
setCurrentRowsPerPage(pagination?.rowsPerPage || normalizedRows.length || 0);
|
|
98
|
-
}, [pagination?.page, pagination?.rowsPerPage, normalizedRows.length]);
|
|
99
|
-
|
|
100
|
-
const renderedRows =
|
|
101
|
-
useInternalPagination && currentRowsPerPage
|
|
102
|
-
? normalizedRows.slice(
|
|
103
|
-
(currentPage - 1) * currentRowsPerPage,
|
|
104
|
-
currentPage * currentRowsPerPage,
|
|
105
|
-
)
|
|
106
|
-
: normalizedRows;
|
|
107
|
-
|
|
108
|
-
const slotChildren: React.ReactNode[] = [];
|
|
109
|
-
|
|
110
|
-
if (noDataContent !== undefined) {
|
|
111
|
-
slotChildren.push(
|
|
112
|
-
<span key="no-data" slot="no-data" style={SLOT_WRAPPER_STYLE}>
|
|
113
|
-
{noDataContent}
|
|
114
|
-
</span>,
|
|
115
|
-
);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
columns.forEach(column => {
|
|
119
|
-
const renderer = headerRenderers?.[column.name] || renderHeader;
|
|
120
|
-
if (!renderer) return;
|
|
121
|
-
|
|
122
|
-
const rendered = renderer({ column });
|
|
123
|
-
if (rendered == null) return;
|
|
124
|
-
|
|
125
|
-
slotChildren.push(
|
|
126
|
-
<span
|
|
127
|
-
key={`header-${column.name}`}
|
|
128
|
-
slot={`header-cell-${column.name}`}
|
|
129
|
-
style={SLOT_WRAPPER_STYLE}
|
|
130
|
-
>
|
|
131
|
-
{rendered}
|
|
132
|
-
</span>,
|
|
133
|
-
);
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
renderedRows.forEach((row, rowIndex) => {
|
|
137
|
-
columns.forEach(column => {
|
|
138
|
-
const renderer = cellRenderers?.[column.name] || renderCell;
|
|
139
|
-
if (!renderer) return;
|
|
140
|
-
|
|
141
|
-
const rendered = renderer({
|
|
142
|
-
column,
|
|
143
|
-
row,
|
|
144
|
-
rowIndex,
|
|
145
|
-
value: getCellValue(column, row),
|
|
146
|
-
});
|
|
147
|
-
if (rendered == null) return;
|
|
148
|
-
|
|
149
|
-
slotChildren.push(
|
|
150
|
-
<span
|
|
151
|
-
key={`cell-${column.name}-${rowIndex}`}
|
|
152
|
-
slot={`body-cell-${column.name}-${rowIndex}`}
|
|
153
|
-
style={SLOT_WRAPPER_STYLE}
|
|
154
|
-
>
|
|
155
|
-
{rendered}
|
|
156
|
-
</span>,
|
|
157
|
-
);
|
|
158
|
-
});
|
|
159
|
-
});
|
|
160
|
-
|
|
161
|
-
return (
|
|
162
|
-
<SdTableBase
|
|
163
|
-
{...props}
|
|
164
|
-
columns={columns}
|
|
165
|
-
rows={normalizedRows}
|
|
166
|
-
selected={selected}
|
|
167
|
-
pagination={pagination}
|
|
168
|
-
useInternalPagination={useInternalPagination}
|
|
169
|
-
onSdPageChange={event => {
|
|
170
|
-
setCurrentPage(event.detail);
|
|
171
|
-
onSdPageChange?.(event);
|
|
172
|
-
}}
|
|
173
|
-
onSdRowsPerPageChange={event => {
|
|
174
|
-
setCurrentRowsPerPage(event.detail);
|
|
175
|
-
const lastPage = Math.max(1, Math.ceil(normalizedRows.length / event.detail));
|
|
176
|
-
setCurrentPage(previousPage => Math.min(previousPage, lastPage));
|
|
177
|
-
onSdRowsPerPageChange?.(event);
|
|
178
|
-
}}
|
|
179
|
-
>
|
|
180
|
-
{slotChildren}
|
|
181
|
-
</SdTableBase>
|
|
182
|
-
);
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
export default SdTable;
|