beautiful-grid 1.0.11 → 1.0.13
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 +153 -117
- package/cjs/BGrid.js +193 -39
- package/cjs/components/Table.js +37 -2
- package/cjs/components/TableBodyCell.js +2 -1
- package/cjs/components/TableBodyRow.js +5 -1
- package/cjs/components/TreeCell.js +88 -0
- package/cjs/components/TreeContext.js +42 -0
- package/cjs/utils/exportCsv.js +129 -0
- package/cjs/utils/exportData.js +230 -0
- package/cjs/utils/exportExcel.js +317 -0
- package/cjs/utils/index.js +4 -0
- package/cjs/utils/treeData.js +205 -0
- package/esm/BGrid.js +221 -66
- package/esm/components/Table.js +36 -4
- package/esm/components/TableBodyCell.js +2 -1
- package/esm/components/TableBodyRow.js +5 -1
- package/esm/components/TreeCell.js +49 -0
- package/esm/components/TreeContext.js +5 -0
- package/esm/utils/exportCsv.js +97 -0
- package/esm/utils/exportData.js +154 -0
- package/esm/utils/exportExcel.js +246 -0
- package/esm/utils/index.js +4 -0
- package/esm/utils/treeData.js +174 -0
- package/package.json +1 -1
- package/style.css +125 -43
- package/types/BGrid.d.ts +1 -1
- package/types/components/Table.d.ts +3 -1
- package/types/components/TableBodyCell.d.ts +2 -2
- package/types/components/TreeCell.d.ts +9 -0
- package/types/components/TreeContext.d.ts +16 -0
- package/types/types.d.ts +121 -2
- package/types/utils/exportCsv.d.ts +5 -0
- package/types/utils/exportData.d.ts +16 -0
- package/types/utils/exportExcel.d.ts +5 -0
- package/types/utils/index.d.ts +4 -0
- package/types/utils/treeData.d.ts +22 -0
package/types/types.d.ts
CHANGED
|
@@ -148,6 +148,15 @@ export interface BGridSearchCellParams<T> {
|
|
|
148
148
|
values: T;
|
|
149
149
|
value: unknown;
|
|
150
150
|
}
|
|
151
|
+
export interface BGridCellExportValueParams<T> {
|
|
152
|
+
column: BGridColumn<T>;
|
|
153
|
+
columnId: string;
|
|
154
|
+
visibleIndex?: number;
|
|
155
|
+
sourceIndex: number;
|
|
156
|
+
item: BGridDataItem<T>;
|
|
157
|
+
values: T;
|
|
158
|
+
value: unknown;
|
|
159
|
+
}
|
|
151
160
|
export interface BGridColumn<T> {
|
|
152
161
|
id?: string;
|
|
153
162
|
key: string | string[];
|
|
@@ -184,6 +193,9 @@ export interface BGridColumn<T> {
|
|
|
184
193
|
aItem: BGridDataItem<T>;
|
|
185
194
|
bItem: BGridDataItem<T>;
|
|
186
195
|
}) => number;
|
|
196
|
+
exportable?: boolean;
|
|
197
|
+
exportHeader?: string | ((column: BGridColumn<T>) => string);
|
|
198
|
+
getExportValue?: (params: BGridCellExportValueParams<T>) => unknown;
|
|
187
199
|
}
|
|
188
200
|
export interface BGridColumnGroup {
|
|
189
201
|
label: ReactNode;
|
|
@@ -657,13 +669,72 @@ export interface BGridScrollToRowOptions {
|
|
|
657
669
|
/** Defaults to nearest: scroll only as far as needed to reveal the row. */
|
|
658
670
|
align?: 'start' | 'center' | 'end' | 'nearest';
|
|
659
671
|
}
|
|
660
|
-
export
|
|
672
|
+
export type BGridExportRowScope = 'displayed' | 'checked' | 'source';
|
|
673
|
+
export type BGridExportColumnScope = 'visible' | 'all' | readonly string[];
|
|
674
|
+
export interface BGridExportColumn<T> {
|
|
675
|
+
columnId: string;
|
|
676
|
+
header: string;
|
|
677
|
+
column: BGridColumn<T>;
|
|
678
|
+
columnIndex: number;
|
|
679
|
+
}
|
|
680
|
+
export interface BGridExportRow<T> {
|
|
681
|
+
visibleIndex?: number;
|
|
682
|
+
sourceIndex: number;
|
|
683
|
+
rowKey?: React.Key;
|
|
684
|
+
item: BGridDataItem<T>;
|
|
685
|
+
values: T;
|
|
686
|
+
cells: unknown[];
|
|
687
|
+
}
|
|
688
|
+
export interface BGridExportData<T> {
|
|
689
|
+
columns: BGridExportColumn<T>[];
|
|
690
|
+
rows: BGridExportRow<T>[];
|
|
691
|
+
}
|
|
692
|
+
export interface BGridExportDataOptions {
|
|
693
|
+
rows?: BGridExportRowScope;
|
|
694
|
+
columns?: BGridExportColumnScope;
|
|
695
|
+
}
|
|
696
|
+
export interface BGridCsvSerializeOptions {
|
|
697
|
+
delimiter?: string;
|
|
698
|
+
newline?: '\n' | '\r\n';
|
|
699
|
+
includeHeader?: boolean;
|
|
700
|
+
bom?: boolean;
|
|
701
|
+
preventFormulaInjection?: boolean;
|
|
702
|
+
}
|
|
703
|
+
export interface BGridCsvExportOptions extends BGridExportDataOptions {
|
|
704
|
+
fileName?: string;
|
|
705
|
+
delimiter?: string;
|
|
706
|
+
newline?: '\n' | '\r\n';
|
|
707
|
+
includeHeader?: boolean;
|
|
708
|
+
bom?: boolean;
|
|
709
|
+
preventFormulaInjection?: boolean;
|
|
710
|
+
}
|
|
711
|
+
export interface BGridExcelSerializeOptions {
|
|
712
|
+
sheetName?: string;
|
|
713
|
+
includeHeader?: boolean;
|
|
714
|
+
}
|
|
715
|
+
export interface BGridExcelExportOptions extends BGridExportDataOptions, BGridExcelSerializeOptions {
|
|
716
|
+
fileName?: string;
|
|
717
|
+
}
|
|
718
|
+
export interface BGridRef<T = any> {
|
|
661
719
|
/**
|
|
662
720
|
* Reveal a zero-based row in the displayed (sorted/filtered) data on the current page.
|
|
663
721
|
* Runs after pending data updates. Invalid indexes and frozen rows are ignored.
|
|
664
722
|
* Preserves horizontal scroll, cell focus and selection; does not load other pages.
|
|
665
723
|
*/
|
|
666
724
|
scrollToRow: (rowIndex: number, options?: BGridScrollToRowOptions) => void;
|
|
725
|
+
/**
|
|
726
|
+
* Extract logical grid data for export without touching the DOM.
|
|
727
|
+
* Supports displayed, checked, or source row scopes, and visible, all, or custom column scopes.
|
|
728
|
+
*/
|
|
729
|
+
getExportData: (options?: BGridExportDataOptions) => BGridExportData<T>;
|
|
730
|
+
/**
|
|
731
|
+
* Serialize grid data and trigger a browser CSV file download.
|
|
732
|
+
*/
|
|
733
|
+
exportCsv: (options?: BGridCsvExportOptions) => void;
|
|
734
|
+
/**
|
|
735
|
+
* Serialize grid data and trigger a browser Excel (.xlsx) file download.
|
|
736
|
+
*/
|
|
737
|
+
exportExcel: (options?: BGridExcelExportOptions) => void;
|
|
667
738
|
}
|
|
668
739
|
export interface BGridToolboxMessages {
|
|
669
740
|
sort?: string;
|
|
@@ -712,7 +783,7 @@ export interface BGridMessages {
|
|
|
712
783
|
toolbox?: BGridToolboxMessages;
|
|
713
784
|
}
|
|
714
785
|
export interface BGridProps<T> {
|
|
715
|
-
ref?: React.Ref<BGridRef
|
|
786
|
+
ref?: React.Ref<BGridRef<T>>;
|
|
716
787
|
width: number;
|
|
717
788
|
height: number;
|
|
718
789
|
headerHeight?: number;
|
|
@@ -840,6 +911,50 @@ export interface BGridProps<T> {
|
|
|
840
911
|
columnVisibility?: boolean | BGridColumnVisibilityOptions<T>;
|
|
841
912
|
searchOptions?: BGridSearchOptions<T>;
|
|
842
913
|
contextMenuOptions?: BGridContextMenuOptions<T>;
|
|
914
|
+
/** Enables hierarchical rows from flat data related by rowKey and parentRowKey. */
|
|
915
|
+
tree?: BGridTreeOptions<T>;
|
|
916
|
+
}
|
|
917
|
+
export interface BGridTreeIcons {
|
|
918
|
+
expanded?: React.ReactNode;
|
|
919
|
+
collapsed?: React.ReactNode;
|
|
920
|
+
leaf?: React.ReactNode;
|
|
921
|
+
}
|
|
922
|
+
export interface BGridTreeRowMeta {
|
|
923
|
+
rowKey: React.Key;
|
|
924
|
+
parentRowKey?: React.Key;
|
|
925
|
+
depth: number;
|
|
926
|
+
hasChildren: boolean;
|
|
927
|
+
expanded: boolean;
|
|
928
|
+
sourceIndex: number;
|
|
929
|
+
parentSourceIndex?: number;
|
|
930
|
+
siblingIndex: number;
|
|
931
|
+
siblingCount: number;
|
|
932
|
+
}
|
|
933
|
+
export interface BGridTreeOptions<T> {
|
|
934
|
+
enabled?: boolean;
|
|
935
|
+
/** Field containing the parent row's rowKey value. */
|
|
936
|
+
parentRowKey: React.Key | React.Key[];
|
|
937
|
+
/** Column ID that renders indentation and the folding control. Defaults to the first visible column. */
|
|
938
|
+
treeColumnId?: string;
|
|
939
|
+
expandedRowKeys?: readonly React.Key[];
|
|
940
|
+
defaultExpandedRowKeys?: readonly React.Key[];
|
|
941
|
+
onExpandedRowKeysChange?: (keys: React.Key[], event: {
|
|
942
|
+
rowKey: React.Key;
|
|
943
|
+
expanded: boolean;
|
|
944
|
+
item: BGridDataItem<T>;
|
|
945
|
+
sourceIndex: number;
|
|
946
|
+
}) => void;
|
|
947
|
+
indentSize?: number;
|
|
948
|
+
icons?: BGridTreeIcons;
|
|
949
|
+
expandAriaLabel?: string;
|
|
950
|
+
collapseAriaLabel?: string;
|
|
951
|
+
}
|
|
952
|
+
export interface BGridTreeChangeDataMeta {
|
|
953
|
+
rowKey: React.Key;
|
|
954
|
+
parentRowKey?: React.Key;
|
|
955
|
+
sourceIndex: number;
|
|
956
|
+
depth: number;
|
|
957
|
+
path: readonly React.Key[];
|
|
843
958
|
}
|
|
844
959
|
export type CheckedAll = true | false | 'indeterminate';
|
|
845
960
|
export interface BGridChangeDataMeta<T> {
|
|
@@ -852,6 +967,8 @@ export interface BGridChangeDataMeta<T> {
|
|
|
852
967
|
* item to preserve cell and value change state after synchronizing `data`.
|
|
853
968
|
*/
|
|
854
969
|
dataItem: BGridDataItem<T>;
|
|
970
|
+
/** Tree identity for the edited row. Undefined in flat mode. */
|
|
971
|
+
tree?: BGridTreeChangeDataMeta;
|
|
855
972
|
transaction: {
|
|
856
973
|
merged: boolean;
|
|
857
974
|
canonicalCell: BGridCellAddress;
|
|
@@ -863,6 +980,8 @@ export interface AppModelColumn<T> extends BGridColumn<T> {
|
|
|
863
980
|
columnId: string;
|
|
864
981
|
keyToken?: string;
|
|
865
982
|
left: number;
|
|
983
|
+
/** @internal Marks the single column that hosts tree indentation and folding controls. */
|
|
984
|
+
treeCell?: boolean;
|
|
866
985
|
}
|
|
867
986
|
export interface AppModel<T> extends BGridProps<T> {
|
|
868
987
|
initialized: boolean;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { BGridCsvSerializeOptions, BGridExportData } from '../types';
|
|
2
|
+
export declare function formatCsvCellValue(value: unknown, preventFormulaInjection?: boolean): string;
|
|
3
|
+
export declare function escapeCsvCell(cell: string, delimiter?: string): string;
|
|
4
|
+
export declare function serializeGridExportDataToCsv<T>(data: BGridExportData<T>, options?: BGridCsvSerializeOptions): string;
|
|
5
|
+
export declare function downloadCsv(csv: string, fileName?: string): void;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { BGridColumn, BGridDataItem, BGridExportColumn, BGridExportColumnScope, BGridExportData, BGridExportDataOptions, BGridExportRow } from '../types';
|
|
3
|
+
export declare function resolveExportColumns<T>(columns: readonly BGridColumn<T>[], sourceColumns?: readonly BGridColumn<T>[], scope?: BGridExportColumnScope): BGridExportColumn<T>[];
|
|
4
|
+
export interface CreateGridExportDataParams<T> {
|
|
5
|
+
options?: BGridExportDataOptions;
|
|
6
|
+
columns: readonly BGridColumn<T>[];
|
|
7
|
+
sourceColumns?: readonly BGridColumn<T>[];
|
|
8
|
+
data: readonly BGridDataItem<T>[];
|
|
9
|
+
sourceData?: readonly BGridDataItem<T>[];
|
|
10
|
+
sourceIndexByVisibleIndex?: readonly number[];
|
|
11
|
+
visibleIndexBySourceIndex?: ReadonlyMap<number, number>;
|
|
12
|
+
checkedIndexesMap?: ReadonlyMap<number, unknown>;
|
|
13
|
+
rowKey?: React.Key | React.Key[];
|
|
14
|
+
}
|
|
15
|
+
export declare function resolveExportRows<T>(exportColumns: readonly BGridExportColumn<T>[], params: CreateGridExportDataParams<T>): BGridExportRow<T>[];
|
|
16
|
+
export declare function createGridExportData<T>(params: CreateGridExportDataParams<T>): BGridExportData<T>;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { BGridExcelSerializeOptions, BGridExportData } from '../types';
|
|
2
|
+
export declare function escapeXml(value: string): string;
|
|
3
|
+
export declare function colIndexToExcelColumn(colIndex: number): string;
|
|
4
|
+
export declare function serializeGridExportDataToExcel<T>(data: BGridExportData<T>, options?: BGridExcelSerializeOptions): Uint8Array;
|
|
5
|
+
export declare function downloadExcel(blobOrBytes: Blob | Uint8Array, fileName?: string): void;
|
package/types/utils/index.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export * from './number';
|
|
|
16
16
|
export * from './buildHeaderMatrix';
|
|
17
17
|
export * from './getVisibleScrollableRowRange';
|
|
18
18
|
export * from './virtualScrollWindow';
|
|
19
|
+
export * from './treeData';
|
|
19
20
|
export * from './rowHeightMetrics';
|
|
20
21
|
export * from './cellEditState';
|
|
21
22
|
export * from './getCellSelectionAxisState';
|
|
@@ -26,3 +27,6 @@ export * from './rowReorder';
|
|
|
26
27
|
export * from './checkboxEditor';
|
|
27
28
|
export * from './columnVisibility';
|
|
28
29
|
export * from './checkedIndexes';
|
|
30
|
+
export * from './exportData';
|
|
31
|
+
export * from './exportCsv';
|
|
32
|
+
export * from './exportExcel';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Key } from 'react';
|
|
2
|
+
import type { BGridDataItem, BGridTreeRowMeta } from '../types';
|
|
3
|
+
export type BGridTreeDiagnostic = 'missingRowKey' | 'duplicateRowKey' | 'cycle';
|
|
4
|
+
export interface BGridTreeProjection<T> {
|
|
5
|
+
valid: boolean;
|
|
6
|
+
data: BGridDataItem<T>[];
|
|
7
|
+
sourceIndexByVisibleIndex: number[];
|
|
8
|
+
visibleIndexBySourceIndex: Map<number, number>;
|
|
9
|
+
metaByRowKey: Map<Key, BGridTreeRowMeta>;
|
|
10
|
+
metaBySourceIndex: Map<number, BGridTreeRowMeta>;
|
|
11
|
+
diagnostics: BGridTreeDiagnostic[];
|
|
12
|
+
}
|
|
13
|
+
/** Projects flat parent-key data into visible pre-order rows without mutating the input. */
|
|
14
|
+
export declare function projectTreeData<T>(params: {
|
|
15
|
+
data: BGridDataItem<T>[];
|
|
16
|
+
rowKey: Key | Key[];
|
|
17
|
+
parentRowKey: Key | Key[];
|
|
18
|
+
expandedRowKeys: readonly Key[];
|
|
19
|
+
includedSourceIndexes?: readonly number[];
|
|
20
|
+
orderedSourceIndexes?: readonly number[];
|
|
21
|
+
}): BGridTreeProjection<T>;
|
|
22
|
+
export declare function getTreeRowPath(metaBySourceIndex: ReadonlyMap<number, BGridTreeRowMeta>, sourceIndex: number): Key[];
|