@gobolt/genesis 0.4.17 → 0.4.19

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.
@@ -13,5 +13,5 @@ export interface OverflowMenuProps {
13
13
  style?: React.CSSProperties;
14
14
  onItemClick?: (item: OverflowMenuItemProps) => void;
15
15
  }
16
- declare const OverflowMenu: React.FC<OverflowMenuProps>;
16
+ declare const OverflowMenu: React.ForwardRefExoticComponent<OverflowMenuProps & React.RefAttributes<HTMLDivElement>>;
17
17
  export default OverflowMenu;
@@ -1,3 +1,3 @@
1
1
  import { InfiniteScrollTableProps } from './types';
2
- declare const InfiniteScrollTable: <T>({ columns: initialColumns, fetchService, scrollHeight, scrollWidth, onChange, }: InfiniteScrollTableProps<T>) => import("react/jsx-runtime").JSX.Element;
2
+ declare const InfiniteScrollTable: <T>({ columns: initialColumns, fetchService, scrollHeight, scrollWidth, onChange, rowSelection, onRowClick, onRowSelectionChange, onDataChange, }: InfiniteScrollTableProps<T>) => import("react/jsx-runtime").JSX.Element;
3
3
  export default InfiniteScrollTable;
@@ -43,6 +43,8 @@ export interface TableProps<T extends Record<string, any>> {
43
43
  };
44
44
  onRowClick?: (record: T, index: number, event: React.MouseEvent) => void;
45
45
  onChange?: (pagination: TablePaginationConfig, filters: Record<string, any>, sorter: SorterResult<T> | SorterResult<T>[], extra: any) => void;
46
+ onRowSelectionChange?: (setSelectedRowKeys: (keys: React.Key[]) => void) => void;
47
+ onDataChange?: (data: T[]) => void;
46
48
  loading?: boolean;
47
49
  pagination?: (TablePaginationConfig & {
48
50
  paginationStyle?: PaginationStyle;
@@ -79,5 +81,5 @@ export type SorterResult<T> = {
79
81
  field?: keyof T | string | React.Key | readonly React.Key[];
80
82
  columnKey?: React.Key;
81
83
  };
82
- declare function Table<T extends Record<string, any>>({ columns, dataSource, rowKey, size, onChange, rowSelection, onRowClick, pagination, isMainContentCell, isInfiniteScroll, infiniteScrollConfig, enableRowKeyValidation, onRowKeyError, ...rest }: TableProps<T>): import("react/jsx-runtime").JSX.Element;
84
+ declare function Table<T extends Record<string, any>>({ columns, dataSource, rowKey, size, onChange, rowSelection, onRowClick, onRowSelectionChange, onDataChange, pagination, isMainContentCell, isInfiniteScroll, infiniteScrollConfig, enableRowKeyValidation, onRowKeyError, ...rest }: TableProps<T>): import("react/jsx-runtime").JSX.Element;
83
85
  export default Table;
@@ -14,6 +14,8 @@ export interface TableWithControlsProps {
14
14
  infiniteScrollConfig?: InfiniteScrollConfig<Record<string, any>>;
15
15
  paginationStyle?: PaginationStyle;
16
16
  onRowClick?: (record: Record<string, any>, index: number, event: React.MouseEvent) => void;
17
+ onRowSelectionChange?: (setSelectedRowKeys: (keys: React.Key[]) => void) => void;
18
+ onDataChange?: (data: Record<string, any>[]) => void;
17
19
  }
18
- declare const TableWithControls: ({ tableData, tableControlsData, onChange, onRowClick, tableType, isInfiniteScroll, infiniteScrollConfig, paginationStyle, }: TableWithControlsProps) => import("react/jsx-runtime").JSX.Element;
20
+ declare const TableWithControls: ({ tableData, tableControlsData, onChange, onRowClick, onRowSelectionChange, onDataChange, tableType, isInfiniteScroll, infiniteScrollConfig, paginationStyle, }: TableWithControlsProps) => import("react/jsx-runtime").JSX.Element;
19
21
  export default TableWithControls;
package/dist/index.cjs CHANGED
@@ -80966,112 +80966,136 @@ const OverflowMenuItem = ({ children: children2, onClick }) => {
80966
80966
  const DefaultTrigger = () => {
80967
80967
  return /* @__PURE__ */ jsxRuntime.jsx(Button$1, { isIconButton: true, themeType: "secondary", size: "small", children: /* @__PURE__ */ jsxRuntime.jsx(HiDotsHorizontal, {}) });
80968
80968
  };
80969
- const OverflowMenu = ({
80970
- items,
80971
- children: children2,
80972
- trigger = /* @__PURE__ */ jsxRuntime.jsx(DefaultTrigger, {}),
80973
- isOpen: controlledIsOpen,
80974
- onOpenChange,
80975
- placement = "bottom",
80976
- alignment = "left",
80977
- offset: offset2 = 8,
80978
- className,
80979
- style: style2,
80980
- onItemClick
80981
- }) => {
80982
- const [internalIsOpen, setInternalIsOpen] = React.useState(false);
80983
- const [isAnimating, setIsAnimating] = React.useState(false);
80984
- const triggerRef = React.useRef(null);
80985
- const menuRef = React.useRef(null);
80986
- const { theme } = useGenesis();
80987
- const isOpen = controlledIsOpen === void 0 ? internalIsOpen : controlledIsOpen;
80988
- const handleOpenChange = React.useCallback(
80989
- (open) => {
80990
- if (onOpenChange) {
80991
- onOpenChange(open);
80992
- } else {
80993
- setInternalIsOpen(open);
80994
- }
80995
- },
80996
- [onOpenChange]
80997
- );
80998
- const handleTriggerClick = () => {
80999
- handleOpenChange(!isOpen);
81000
- };
81001
- const handleClickOutside = React.useCallback(
81002
- (event) => {
81003
- if (triggerRef.current && menuRef.current && !triggerRef.current.contains(event.target) && !menuRef.current.contains(event.target)) {
81004
- handleOpenChange(false);
81005
- }
81006
- },
81007
- [handleOpenChange]
81008
- );
81009
- React.useEffect(() => {
81010
- if (isOpen) {
81011
- const timer2 = setTimeout(() => {
81012
- setIsAnimating(true);
81013
- }, 10);
81014
- document.addEventListener("mousedown", handleClickOutside);
81015
- return () => {
81016
- clearTimeout(timer2);
81017
- document.removeEventListener("mousedown", handleClickOutside);
81018
- };
81019
- } else {
81020
- setIsAnimating(false);
81021
- document.removeEventListener("mousedown", handleClickOutside);
81022
- }
81023
- }, [isOpen, handleClickOutside]);
81024
- const getMenuStyle = React.useMemo(() => {
81025
- const baseStyle = {
81026
- position: "absolute",
81027
- zIndex: 1e3,
81028
- ...style2
80969
+ const OverflowMenu = React.forwardRef(
80970
+ ({
80971
+ items,
80972
+ children: children2,
80973
+ trigger = /* @__PURE__ */ jsxRuntime.jsx(DefaultTrigger, {}),
80974
+ isOpen: controlledIsOpen,
80975
+ onOpenChange,
80976
+ placement = "bottom",
80977
+ alignment = "left",
80978
+ offset: offset2 = 8,
80979
+ className,
80980
+ style: style2,
80981
+ onItemClick
80982
+ }, ref) => {
80983
+ const [internalIsOpen, setInternalIsOpen] = React.useState(false);
80984
+ const [isAnimating, setIsAnimating] = React.useState(false);
80985
+ const triggerRef = React.useRef(null);
80986
+ const menuRef = React.useRef(null);
80987
+ const { theme } = useGenesis();
80988
+ const isOpen = controlledIsOpen === void 0 ? internalIsOpen : controlledIsOpen;
80989
+ const handleOpenChange = React.useCallback(
80990
+ (open) => {
80991
+ if (onOpenChange) {
80992
+ onOpenChange(open);
80993
+ } else {
80994
+ setInternalIsOpen(open);
80995
+ }
80996
+ },
80997
+ [onOpenChange]
80998
+ );
80999
+ const handleTriggerClick = () => {
81000
+ handleOpenChange(!isOpen);
81029
81001
  };
81030
- switch (placement) {
81031
- case "bottom": {
81032
- return {
81033
- ...baseStyle,
81034
- top: `calc(100% + ${offset2}px)`,
81035
- ...alignment === "right" ? { right: 0 } : { left: 0 }
81036
- };
81037
- }
81038
- case "top": {
81039
- return {
81040
- ...baseStyle,
81041
- bottom: `calc(100% + ${offset2}px)`,
81042
- ...alignment === "right" ? { right: 0 } : { left: 0 }
81043
- };
81044
- }
81045
- case "left": {
81046
- return {
81047
- ...baseStyle,
81048
- top: 0,
81049
- right: `calc(100% + ${offset2}px)`,
81050
- ...alignment === "right" ? { bottom: 0 } : {}
81051
- };
81052
- }
81053
- case "right": {
81054
- return {
81055
- ...baseStyle,
81056
- top: 0,
81057
- left: `calc(100% + ${offset2}px)`,
81058
- ...alignment === "right" ? { bottom: 0 } : {}
81002
+ const handleClickOutside = React.useCallback(
81003
+ (event) => {
81004
+ if (triggerRef.current && menuRef.current && !triggerRef.current.contains(event.target) && !menuRef.current.contains(event.target)) {
81005
+ handleOpenChange(false);
81006
+ }
81007
+ },
81008
+ [handleOpenChange]
81009
+ );
81010
+ React.useEffect(() => {
81011
+ if (isOpen) {
81012
+ const timer2 = setTimeout(() => {
81013
+ setIsAnimating(true);
81014
+ }, 10);
81015
+ document.addEventListener("mousedown", handleClickOutside);
81016
+ return () => {
81017
+ clearTimeout(timer2);
81018
+ document.removeEventListener("mousedown", handleClickOutside);
81059
81019
  };
81020
+ } else {
81021
+ setIsAnimating(false);
81022
+ document.removeEventListener("mousedown", handleClickOutside);
81060
81023
  }
81061
- default: {
81062
- return baseStyle;
81024
+ }, [isOpen, handleClickOutside]);
81025
+ const getMenuStyle = React.useMemo(() => {
81026
+ const baseStyle = {
81027
+ position: "absolute",
81028
+ zIndex: 1e3,
81029
+ ...style2
81030
+ };
81031
+ switch (placement) {
81032
+ case "bottom": {
81033
+ return {
81034
+ ...baseStyle,
81035
+ top: `calc(100% + ${offset2}px)`,
81036
+ ...alignment === "right" ? { right: 0 } : { left: 0 }
81037
+ };
81038
+ }
81039
+ case "top": {
81040
+ return {
81041
+ ...baseStyle,
81042
+ bottom: `calc(100% + ${offset2}px)`,
81043
+ ...alignment === "right" ? { right: 0 } : { left: 0 }
81044
+ };
81045
+ }
81046
+ case "left": {
81047
+ return {
81048
+ ...baseStyle,
81049
+ top: 0,
81050
+ right: `calc(100% + ${offset2}px)`,
81051
+ ...alignment === "right" ? { bottom: 0 } : {}
81052
+ };
81053
+ }
81054
+ case "right": {
81055
+ return {
81056
+ ...baseStyle,
81057
+ top: 0,
81058
+ left: `calc(100% + ${offset2}px)`,
81059
+ ...alignment === "right" ? { bottom: 0 } : {}
81060
+ };
81061
+ }
81062
+ default: {
81063
+ return baseStyle;
81064
+ }
81063
81065
  }
81066
+ }, [placement, alignment, offset2, style2]);
81067
+ const handleItemClick = React.useCallback(
81068
+ (item) => {
81069
+ onItemClick?.(item);
81070
+ handleOpenChange(false);
81071
+ },
81072
+ [onItemClick, handleOpenChange]
81073
+ );
81074
+ if (items && items.length > 0) {
81075
+ return /* @__PURE__ */ jsxRuntime.jsxs(OverflowMenuWrapper, { ref, children: [
81076
+ /* @__PURE__ */ jsxRuntime.jsx("div", { ref: triggerRef, onClick: handleTriggerClick, children: trigger }),
81077
+ isOpen && /* @__PURE__ */ jsxRuntime.jsx(
81078
+ OverflowMenuContainer,
81079
+ {
81080
+ ref: menuRef,
81081
+ theme,
81082
+ className,
81083
+ style: getMenuStyle,
81084
+ $isAnimating: isAnimating,
81085
+ $placement: placement,
81086
+ children: items.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
81087
+ OverflowMenuItem,
81088
+ {
81089
+ ...item,
81090
+ onClick: () => handleItemClick(item)
81091
+ },
81092
+ item.id
81093
+ ))
81094
+ }
81095
+ )
81096
+ ] });
81064
81097
  }
81065
- }, [placement, alignment, offset2, style2]);
81066
- const handleItemClick = React.useCallback(
81067
- (item) => {
81068
- onItemClick?.(item);
81069
- handleOpenChange(false);
81070
- },
81071
- [onItemClick, handleOpenChange]
81072
- );
81073
- if (items && items.length > 0) {
81074
- return /* @__PURE__ */ jsxRuntime.jsxs(OverflowMenuWrapper, { children: [
81098
+ return /* @__PURE__ */ jsxRuntime.jsxs(OverflowMenuWrapper, { ref, children: [
81075
81099
  /* @__PURE__ */ jsxRuntime.jsx("div", { ref: triggerRef, onClick: handleTriggerClick, children: trigger }),
81076
81100
  isOpen && /* @__PURE__ */ jsxRuntime.jsx(
81077
81101
  OverflowMenuContainer,
@@ -81082,34 +81106,13 @@ const OverflowMenu = ({
81082
81106
  style: getMenuStyle,
81083
81107
  $isAnimating: isAnimating,
81084
81108
  $placement: placement,
81085
- children: items.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
81086
- OverflowMenuItem,
81087
- {
81088
- ...item,
81089
- onClick: () => handleItemClick(item)
81090
- },
81091
- item.id
81092
- ))
81109
+ children: children2
81093
81110
  }
81094
81111
  )
81095
81112
  ] });
81096
81113
  }
81097
- return /* @__PURE__ */ jsxRuntime.jsxs(OverflowMenuWrapper, { children: [
81098
- /* @__PURE__ */ jsxRuntime.jsx("div", { ref: triggerRef, onClick: handleTriggerClick, children: trigger }),
81099
- isOpen && /* @__PURE__ */ jsxRuntime.jsx(
81100
- OverflowMenuContainer,
81101
- {
81102
- ref: menuRef,
81103
- theme,
81104
- className,
81105
- style: getMenuStyle,
81106
- $isAnimating: isAnimating,
81107
- $placement: placement,
81108
- children: children2
81109
- }
81110
- )
81111
- ] });
81112
- };
81114
+ );
81115
+ OverflowMenu.displayName = "OverflowMenu";
81113
81116
  const getGenesisClass$6 = (theme) => ``;
81114
81117
  const Popover$1 = styled(Popconfirm)`
81115
81118
  ${({ theme }) => {
@@ -84482,12 +84485,37 @@ const InfiniteScrollTable = ({
84482
84485
  fetchService,
84483
84486
  scrollHeight = 600,
84484
84487
  scrollWidth = 1300,
84485
- onChange
84488
+ onChange,
84489
+ rowSelection,
84490
+ onRowClick,
84491
+ onRowSelectionChange,
84492
+ onDataChange
84486
84493
  }) => {
84487
84494
  const observer = React.useRef();
84488
84495
  const [scrollableNode, setScrollableNode] = React.useState(
84489
84496
  null
84490
84497
  );
84498
+ const [selectedRowKeys, setSelectedRowKeys] = React.useState([]);
84499
+ const [selectedRows, setSelectedRows] = React.useState([]);
84500
+ const handleRowSelection = React.useCallback(
84501
+ (newSelectedRowKeys, newSelectedRows) => {
84502
+ setSelectedRowKeys(newSelectedRowKeys);
84503
+ setSelectedRows(newSelectedRows);
84504
+ if (rowSelection?.onChange) {
84505
+ rowSelection.onChange(newSelectedRowKeys, newSelectedRows);
84506
+ }
84507
+ },
84508
+ [rowSelection]
84509
+ );
84510
+ const defaultRowSelection2 = {
84511
+ type: "checkbox",
84512
+ selectedRowKeys,
84513
+ onChange: handleRowSelection,
84514
+ getCheckboxProps: (record) => ({
84515
+ name: record.id || record.key || String(record)
84516
+ })
84517
+ };
84518
+ const finalRowSelection = rowSelection || defaultRowSelection2;
84491
84519
  const tableContainerRef = React.useCallback((node2) => {
84492
84520
  if (node2 !== null) {
84493
84521
  const scrollNode = node2.querySelector(".ant-table-body");
@@ -84541,16 +84569,40 @@ const InfiniteScrollTable = ({
84541
84569
  const dataSource = data?.pages.flatMap((page) => page.docs) ?? [];
84542
84570
  const totalDocs = data?.pages?.[0]?.totalDocs ?? 0;
84543
84571
  React.useEffect(() => {
84544
- if (onChange) {
84572
+ if (onRowSelectionChange) {
84573
+ const wrappedSetSelectedRowKeys = (keys2) => {
84574
+ setSelectedRowKeys(keys2);
84575
+ };
84576
+ onRowSelectionChange(wrappedSetSelectedRowKeys);
84577
+ }
84578
+ }, [onRowSelectionChange]);
84579
+ const dataSentRef = React.useRef(false);
84580
+ React.useEffect(() => {
84581
+ if (onDataChange && dataSource.length > 0 && !dataSentRef.current) {
84582
+ onDataChange(dataSource);
84583
+ dataSentRef.current = true;
84584
+ }
84585
+ }, [dataSource, onDataChange]);
84586
+ const prevValuesRef = React.useRef(null);
84587
+ const onChangeRef = React.useRef(onChange);
84588
+ React.useEffect(() => {
84589
+ onChangeRef.current = onChange;
84590
+ }, [onChange]);
84591
+ React.useEffect(() => {
84592
+ if (onChangeRef.current && data && dataSource.length > 0) {
84545
84593
  const dataChangeEvent = {
84546
- totalPages: data?.pages?.length ?? 0,
84547
- currentPage: data?.pages?.[0]?.page ?? 0,
84594
+ totalPages: data.pages?.length ?? 0,
84595
+ currentPage: data.pages?.[0]?.page ?? 0,
84548
84596
  resultsShown: dataSource.length,
84549
84597
  totalResults: totalDocs
84550
84598
  };
84551
- onChange(dataChangeEvent);
84599
+ const prevValues = prevValuesRef.current;
84600
+ if (!prevValues || prevValues.resultsShown !== dataChangeEvent.resultsShown || prevValues.totalResults !== dataChangeEvent.totalResults) {
84601
+ prevValuesRef.current = dataChangeEvent;
84602
+ onChangeRef.current(dataChangeEvent);
84603
+ }
84552
84604
  }
84553
- }, [data]);
84605
+ }, [data?.pages?.length, dataSource.length, totalDocs]);
84554
84606
  if (status === "pending") {
84555
84607
  return /* @__PURE__ */ jsxRuntime.jsx(
84556
84608
  "div",
@@ -84571,79 +84623,73 @@ const InfiniteScrollTable = ({
84571
84623
  }
84572
84624
  );
84573
84625
  }
84574
- return /* @__PURE__ */ jsxRuntime.jsxs(
84575
- "div",
84576
- {
84577
- style: {
84578
- backgroundColor: "white",
84579
- padding: "24px",
84580
- borderRadius: "8px",
84581
- boxShadow: "0 2px 8px rgba(0, 0, 0, 0.1)",
84582
- marginBottom: "24px"
84583
- },
84584
- ref: tableContainerRef,
84585
- children: [
84586
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { position: "relative" }, children: [
84587
- /* @__PURE__ */ jsxRuntime.jsx("style", { children: `
84626
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: tableContainerRef, children: [
84627
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { position: "relative" }, ref: tableContainerRef, children: [
84628
+ /* @__PURE__ */ jsxRuntime.jsx("style", { children: `
84588
84629
  .infinite-scroll-table .ant-pagination {
84589
84630
  display: none !important;
84590
84631
  }
84591
84632
  ` }),
84592
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "infinite-scroll-table", children: /* @__PURE__ */ jsxRuntime.jsx(
84593
- ForwardTable,
84594
- {
84595
- dataSource,
84596
- columns: resizableColumns,
84597
- components: { header: { cell: ResizableTitle } },
84598
- rowKey: "id",
84599
- pagination: false,
84600
- showSorterTooltip: false,
84601
- size: "small",
84602
- scroll: { y: scrollHeight, x: scrollWidth },
84603
- onChange: () => {
84604
- },
84605
- onRow: (record, index2) => {
84606
- if (index2 === dataSource.length - 1) {
84607
- return { ref: lastRowRef };
84608
- }
84609
- return {};
84610
- }
84633
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "infinite-scroll-table", children: /* @__PURE__ */ jsxRuntime.jsx(
84634
+ ForwardTable,
84635
+ {
84636
+ dataSource,
84637
+ columns: resizableColumns,
84638
+ components: { header: { cell: ResizableTitle } },
84639
+ rowKey: "id",
84640
+ pagination: false,
84641
+ showSorterTooltip: false,
84642
+ size: "small",
84643
+ scroll: { y: scrollHeight, x: scrollWidth },
84644
+ onChange: () => {
84645
+ },
84646
+ rowSelection: finalRowSelection,
84647
+ onRow: (record, index2) => {
84648
+ const rowProps = {};
84649
+ if (index2 === dataSource.length - 1) {
84650
+ rowProps.ref = lastRowRef;
84611
84651
  }
84612
- ) }),
84613
- isFetchingNextPage && /* @__PURE__ */ jsxRuntime.jsx(
84614
- "div",
84615
- {
84616
- style: {
84617
- position: "absolute",
84618
- bottom: 0,
84619
- left: 0,
84620
- width: "100%",
84621
- padding: "16px",
84622
- display: "flex",
84623
- justifyContent: "center",
84624
- alignItems: "center",
84625
- backgroundColor: "rgba(255, 255, 255, 0.7)",
84626
- backdropFilter: "blur(2px)",
84627
- zIndex: 10
84628
- },
84629
- children: /* @__PURE__ */ jsxRuntime.jsx(Spin, {})
84652
+ if (onRowClick && index2 !== void 0) {
84653
+ rowProps.onClick = (event) => {
84654
+ onRowClick(record, index2, event);
84655
+ };
84630
84656
  }
84631
- )
84632
- ] }),
84633
- !hasNextPage && /* @__PURE__ */ jsxRuntime.jsx(
84634
- "div",
84635
- {
84636
- style: {
84637
- textAlign: "center",
84638
- padding: "20px",
84639
- borderTop: "1px solid #f0f0f0"
84640
- },
84641
- children: /* @__PURE__ */ jsxRuntime.jsx(Typography$1.Text, { type: "secondary", children: "No more rows to load." })
84657
+ return rowProps;
84642
84658
  }
84643
- )
84644
- ]
84645
- }
84646
- );
84659
+ }
84660
+ ) }),
84661
+ isFetchingNextPage && /* @__PURE__ */ jsxRuntime.jsx(
84662
+ "div",
84663
+ {
84664
+ style: {
84665
+ position: "absolute",
84666
+ bottom: 0,
84667
+ left: 0,
84668
+ width: "100%",
84669
+ padding: "16px",
84670
+ display: "flex",
84671
+ justifyContent: "center",
84672
+ alignItems: "center",
84673
+ backgroundColor: "rgba(255, 255, 255, 0.7)",
84674
+ backdropFilter: "blur(2px)",
84675
+ zIndex: 10
84676
+ },
84677
+ children: /* @__PURE__ */ jsxRuntime.jsx(Spin, {})
84678
+ }
84679
+ )
84680
+ ] }),
84681
+ !hasNextPage && /* @__PURE__ */ jsxRuntime.jsx(
84682
+ "div",
84683
+ {
84684
+ style: {
84685
+ textAlign: "center",
84686
+ padding: "20px",
84687
+ borderTop: "1px solid #f0f0f0"
84688
+ },
84689
+ children: /* @__PURE__ */ jsxRuntime.jsx(Typography$1.Text, { type: "secondary", children: "No more rows to load." })
84690
+ }
84691
+ )
84692
+ ] });
84647
84693
  };
84648
84694
  const getRowKey = (record, rowKey, index2, enableValidation = true) => {
84649
84695
  try {
@@ -84695,6 +84741,8 @@ function Table({
84695
84741
  onChange,
84696
84742
  rowSelection,
84697
84743
  onRowClick,
84744
+ onRowSelectionChange,
84745
+ onDataChange,
84698
84746
  pagination,
84699
84747
  isMainContentCell = false,
84700
84748
  isInfiniteScroll = false,
@@ -84749,7 +84797,9 @@ function Table({
84749
84797
  fetchService: infiniteScrollConfig.fetchService,
84750
84798
  title: infiniteScrollConfig.title,
84751
84799
  scrollHeight: infiniteScrollConfig.scrollHeight,
84752
- scrollWidth: infiniteScrollConfig.scrollWidth
84800
+ scrollWidth: infiniteScrollConfig.scrollWidth,
84801
+ onRowSelectionChange,
84802
+ onDataChange
84753
84803
  }
84754
84804
  );
84755
84805
  }
@@ -85370,9 +85420,10 @@ const TableWithControls = ({
85370
85420
  tableControlsData: tableControlsData2,
85371
85421
  onChange,
85372
85422
  onRowClick,
85423
+ onRowSelectionChange,
85424
+ onDataChange,
85373
85425
  tableType = "table",
85374
85426
  isInfiniteScroll,
85375
- // Deprecated: use tableType instead
85376
85427
  infiniteScrollConfig,
85377
85428
  paginationStyle
85378
85429
  }) => {
@@ -85383,7 +85434,14 @@ const TableWithControls = ({
85383
85434
  totalResults: 0
85384
85435
  });
85385
85436
  const { primaryTableRowData, secondaryTableRowData } = tableControlsData2;
85386
- const { dataSource, columns, rowSelection, hasSettings, hasFilter } = tableData;
85437
+ const {
85438
+ dataSource,
85439
+ columns,
85440
+ rowSelection,
85441
+ hasSettings,
85442
+ hasFilter,
85443
+ onRowClick: tableOnRowClick
85444
+ } = tableData;
85387
85445
  const actualTableType = isInfiniteScroll ? "infiniteScroll" : tableType;
85388
85446
  const onTableControlsChange = (event) => {
85389
85447
  onChange(event);
@@ -85395,6 +85453,7 @@ const TableWithControls = ({
85395
85453
  });
85396
85454
  };
85397
85455
  const onInfiniteScrollTableChange = (event) => {
85456
+ setInfiniteScrollData(event);
85398
85457
  onChange({
85399
85458
  event: "infiniteScrollTableChange",
85400
85459
  payload: { value: "infiniteScrollTableChange", event }
@@ -85423,7 +85482,11 @@ const TableWithControls = ({
85423
85482
  title: infiniteScrollConfig.title,
85424
85483
  scrollHeight: infiniteScrollConfig.scrollHeight,
85425
85484
  scrollWidth: infiniteScrollConfig.scrollWidth,
85426
- onChange: onInfiniteScrollTableChange
85485
+ onChange: onInfiniteScrollTableChange,
85486
+ rowSelection,
85487
+ onRowClick: tableOnRowClick || onRowClick,
85488
+ onRowSelectionChange,
85489
+ onDataChange
85427
85490
  }
85428
85491
  );
85429
85492
  }
@@ -85449,18 +85512,25 @@ const TableWithControls = ({
85449
85512
  columns,
85450
85513
  rowSelection,
85451
85514
  onChange: onTableChange,
85452
- onRowClick
85515
+ onRowClick,
85516
+ onRowSelectionChange
85453
85517
  }
85454
85518
  );
85455
85519
  }
85456
85520
  }
85457
85521
  };
85522
+ const mergedSecondaryTableRowData = {
85523
+ ...secondaryTableRowData,
85524
+ groups: secondaryTableRowData?.groups || null,
85525
+ totalRecords: secondaryTableRowData?.totalRecords || null,
85526
+ infiniteScrollData: infiniteScrollData.resultsShown > 0 ? infiniteScrollData : secondaryTableRowData?.infiniteScrollData || infiniteScrollData
85527
+ };
85458
85528
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
85459
85529
  /* @__PURE__ */ jsxRuntime.jsx(
85460
85530
  TableControls,
85461
85531
  {
85462
85532
  primaryTableRowData,
85463
- secondaryTableRowData,
85533
+ secondaryTableRowData: mergedSecondaryTableRowData,
85464
85534
  onChange: onTableControlsChange
85465
85535
  }
85466
85536
  ),
package/dist/index.js CHANGED
@@ -80948,112 +80948,136 @@ const OverflowMenuItem = ({ children: children2, onClick }) => {
80948
80948
  const DefaultTrigger = () => {
80949
80949
  return /* @__PURE__ */ jsx(Button$1, { isIconButton: true, themeType: "secondary", size: "small", children: /* @__PURE__ */ jsx(HiDotsHorizontal, {}) });
80950
80950
  };
80951
- const OverflowMenu = ({
80952
- items,
80953
- children: children2,
80954
- trigger = /* @__PURE__ */ jsx(DefaultTrigger, {}),
80955
- isOpen: controlledIsOpen,
80956
- onOpenChange,
80957
- placement = "bottom",
80958
- alignment = "left",
80959
- offset: offset2 = 8,
80960
- className,
80961
- style: style2,
80962
- onItemClick
80963
- }) => {
80964
- const [internalIsOpen, setInternalIsOpen] = useState(false);
80965
- const [isAnimating, setIsAnimating] = useState(false);
80966
- const triggerRef = useRef(null);
80967
- const menuRef = useRef(null);
80968
- const { theme } = useGenesis();
80969
- const isOpen = controlledIsOpen === void 0 ? internalIsOpen : controlledIsOpen;
80970
- const handleOpenChange = useCallback(
80971
- (open) => {
80972
- if (onOpenChange) {
80973
- onOpenChange(open);
80974
- } else {
80975
- setInternalIsOpen(open);
80976
- }
80977
- },
80978
- [onOpenChange]
80979
- );
80980
- const handleTriggerClick = () => {
80981
- handleOpenChange(!isOpen);
80982
- };
80983
- const handleClickOutside = useCallback(
80984
- (event) => {
80985
- if (triggerRef.current && menuRef.current && !triggerRef.current.contains(event.target) && !menuRef.current.contains(event.target)) {
80986
- handleOpenChange(false);
80987
- }
80988
- },
80989
- [handleOpenChange]
80990
- );
80991
- useEffect(() => {
80992
- if (isOpen) {
80993
- const timer2 = setTimeout(() => {
80994
- setIsAnimating(true);
80995
- }, 10);
80996
- document.addEventListener("mousedown", handleClickOutside);
80997
- return () => {
80998
- clearTimeout(timer2);
80999
- document.removeEventListener("mousedown", handleClickOutside);
81000
- };
81001
- } else {
81002
- setIsAnimating(false);
81003
- document.removeEventListener("mousedown", handleClickOutside);
81004
- }
81005
- }, [isOpen, handleClickOutside]);
81006
- const getMenuStyle = useMemo$1(() => {
81007
- const baseStyle = {
81008
- position: "absolute",
81009
- zIndex: 1e3,
81010
- ...style2
80951
+ const OverflowMenu = forwardRef(
80952
+ ({
80953
+ items,
80954
+ children: children2,
80955
+ trigger = /* @__PURE__ */ jsx(DefaultTrigger, {}),
80956
+ isOpen: controlledIsOpen,
80957
+ onOpenChange,
80958
+ placement = "bottom",
80959
+ alignment = "left",
80960
+ offset: offset2 = 8,
80961
+ className,
80962
+ style: style2,
80963
+ onItemClick
80964
+ }, ref) => {
80965
+ const [internalIsOpen, setInternalIsOpen] = useState(false);
80966
+ const [isAnimating, setIsAnimating] = useState(false);
80967
+ const triggerRef = useRef(null);
80968
+ const menuRef = useRef(null);
80969
+ const { theme } = useGenesis();
80970
+ const isOpen = controlledIsOpen === void 0 ? internalIsOpen : controlledIsOpen;
80971
+ const handleOpenChange = useCallback(
80972
+ (open) => {
80973
+ if (onOpenChange) {
80974
+ onOpenChange(open);
80975
+ } else {
80976
+ setInternalIsOpen(open);
80977
+ }
80978
+ },
80979
+ [onOpenChange]
80980
+ );
80981
+ const handleTriggerClick = () => {
80982
+ handleOpenChange(!isOpen);
81011
80983
  };
81012
- switch (placement) {
81013
- case "bottom": {
81014
- return {
81015
- ...baseStyle,
81016
- top: `calc(100% + ${offset2}px)`,
81017
- ...alignment === "right" ? { right: 0 } : { left: 0 }
81018
- };
81019
- }
81020
- case "top": {
81021
- return {
81022
- ...baseStyle,
81023
- bottom: `calc(100% + ${offset2}px)`,
81024
- ...alignment === "right" ? { right: 0 } : { left: 0 }
81025
- };
81026
- }
81027
- case "left": {
81028
- return {
81029
- ...baseStyle,
81030
- top: 0,
81031
- right: `calc(100% + ${offset2}px)`,
81032
- ...alignment === "right" ? { bottom: 0 } : {}
81033
- };
81034
- }
81035
- case "right": {
81036
- return {
81037
- ...baseStyle,
81038
- top: 0,
81039
- left: `calc(100% + ${offset2}px)`,
81040
- ...alignment === "right" ? { bottom: 0 } : {}
80984
+ const handleClickOutside = useCallback(
80985
+ (event) => {
80986
+ if (triggerRef.current && menuRef.current && !triggerRef.current.contains(event.target) && !menuRef.current.contains(event.target)) {
80987
+ handleOpenChange(false);
80988
+ }
80989
+ },
80990
+ [handleOpenChange]
80991
+ );
80992
+ useEffect(() => {
80993
+ if (isOpen) {
80994
+ const timer2 = setTimeout(() => {
80995
+ setIsAnimating(true);
80996
+ }, 10);
80997
+ document.addEventListener("mousedown", handleClickOutside);
80998
+ return () => {
80999
+ clearTimeout(timer2);
81000
+ document.removeEventListener("mousedown", handleClickOutside);
81041
81001
  };
81002
+ } else {
81003
+ setIsAnimating(false);
81004
+ document.removeEventListener("mousedown", handleClickOutside);
81042
81005
  }
81043
- default: {
81044
- return baseStyle;
81006
+ }, [isOpen, handleClickOutside]);
81007
+ const getMenuStyle = useMemo$1(() => {
81008
+ const baseStyle = {
81009
+ position: "absolute",
81010
+ zIndex: 1e3,
81011
+ ...style2
81012
+ };
81013
+ switch (placement) {
81014
+ case "bottom": {
81015
+ return {
81016
+ ...baseStyle,
81017
+ top: `calc(100% + ${offset2}px)`,
81018
+ ...alignment === "right" ? { right: 0 } : { left: 0 }
81019
+ };
81020
+ }
81021
+ case "top": {
81022
+ return {
81023
+ ...baseStyle,
81024
+ bottom: `calc(100% + ${offset2}px)`,
81025
+ ...alignment === "right" ? { right: 0 } : { left: 0 }
81026
+ };
81027
+ }
81028
+ case "left": {
81029
+ return {
81030
+ ...baseStyle,
81031
+ top: 0,
81032
+ right: `calc(100% + ${offset2}px)`,
81033
+ ...alignment === "right" ? { bottom: 0 } : {}
81034
+ };
81035
+ }
81036
+ case "right": {
81037
+ return {
81038
+ ...baseStyle,
81039
+ top: 0,
81040
+ left: `calc(100% + ${offset2}px)`,
81041
+ ...alignment === "right" ? { bottom: 0 } : {}
81042
+ };
81043
+ }
81044
+ default: {
81045
+ return baseStyle;
81046
+ }
81045
81047
  }
81048
+ }, [placement, alignment, offset2, style2]);
81049
+ const handleItemClick = useCallback(
81050
+ (item) => {
81051
+ onItemClick?.(item);
81052
+ handleOpenChange(false);
81053
+ },
81054
+ [onItemClick, handleOpenChange]
81055
+ );
81056
+ if (items && items.length > 0) {
81057
+ return /* @__PURE__ */ jsxs(OverflowMenuWrapper, { ref, children: [
81058
+ /* @__PURE__ */ jsx("div", { ref: triggerRef, onClick: handleTriggerClick, children: trigger }),
81059
+ isOpen && /* @__PURE__ */ jsx(
81060
+ OverflowMenuContainer,
81061
+ {
81062
+ ref: menuRef,
81063
+ theme,
81064
+ className,
81065
+ style: getMenuStyle,
81066
+ $isAnimating: isAnimating,
81067
+ $placement: placement,
81068
+ children: items.map((item) => /* @__PURE__ */ jsx(
81069
+ OverflowMenuItem,
81070
+ {
81071
+ ...item,
81072
+ onClick: () => handleItemClick(item)
81073
+ },
81074
+ item.id
81075
+ ))
81076
+ }
81077
+ )
81078
+ ] });
81046
81079
  }
81047
- }, [placement, alignment, offset2, style2]);
81048
- const handleItemClick = useCallback(
81049
- (item) => {
81050
- onItemClick?.(item);
81051
- handleOpenChange(false);
81052
- },
81053
- [onItemClick, handleOpenChange]
81054
- );
81055
- if (items && items.length > 0) {
81056
- return /* @__PURE__ */ jsxs(OverflowMenuWrapper, { children: [
81080
+ return /* @__PURE__ */ jsxs(OverflowMenuWrapper, { ref, children: [
81057
81081
  /* @__PURE__ */ jsx("div", { ref: triggerRef, onClick: handleTriggerClick, children: trigger }),
81058
81082
  isOpen && /* @__PURE__ */ jsx(
81059
81083
  OverflowMenuContainer,
@@ -81064,34 +81088,13 @@ const OverflowMenu = ({
81064
81088
  style: getMenuStyle,
81065
81089
  $isAnimating: isAnimating,
81066
81090
  $placement: placement,
81067
- children: items.map((item) => /* @__PURE__ */ jsx(
81068
- OverflowMenuItem,
81069
- {
81070
- ...item,
81071
- onClick: () => handleItemClick(item)
81072
- },
81073
- item.id
81074
- ))
81091
+ children: children2
81075
81092
  }
81076
81093
  )
81077
81094
  ] });
81078
81095
  }
81079
- return /* @__PURE__ */ jsxs(OverflowMenuWrapper, { children: [
81080
- /* @__PURE__ */ jsx("div", { ref: triggerRef, onClick: handleTriggerClick, children: trigger }),
81081
- isOpen && /* @__PURE__ */ jsx(
81082
- OverflowMenuContainer,
81083
- {
81084
- ref: menuRef,
81085
- theme,
81086
- className,
81087
- style: getMenuStyle,
81088
- $isAnimating: isAnimating,
81089
- $placement: placement,
81090
- children: children2
81091
- }
81092
- )
81093
- ] });
81094
- };
81096
+ );
81097
+ OverflowMenu.displayName = "OverflowMenu";
81095
81098
  const getGenesisClass$6 = (theme) => ``;
81096
81099
  const Popover$1 = styled(Popconfirm)`
81097
81100
  ${({ theme }) => {
@@ -84464,12 +84467,37 @@ const InfiniteScrollTable = ({
84464
84467
  fetchService,
84465
84468
  scrollHeight = 600,
84466
84469
  scrollWidth = 1300,
84467
- onChange
84470
+ onChange,
84471
+ rowSelection,
84472
+ onRowClick,
84473
+ onRowSelectionChange,
84474
+ onDataChange
84468
84475
  }) => {
84469
84476
  const observer = useRef();
84470
84477
  const [scrollableNode, setScrollableNode] = useState(
84471
84478
  null
84472
84479
  );
84480
+ const [selectedRowKeys, setSelectedRowKeys] = useState([]);
84481
+ const [selectedRows, setSelectedRows] = useState([]);
84482
+ const handleRowSelection = useCallback(
84483
+ (newSelectedRowKeys, newSelectedRows) => {
84484
+ setSelectedRowKeys(newSelectedRowKeys);
84485
+ setSelectedRows(newSelectedRows);
84486
+ if (rowSelection?.onChange) {
84487
+ rowSelection.onChange(newSelectedRowKeys, newSelectedRows);
84488
+ }
84489
+ },
84490
+ [rowSelection]
84491
+ );
84492
+ const defaultRowSelection2 = {
84493
+ type: "checkbox",
84494
+ selectedRowKeys,
84495
+ onChange: handleRowSelection,
84496
+ getCheckboxProps: (record) => ({
84497
+ name: record.id || record.key || String(record)
84498
+ })
84499
+ };
84500
+ const finalRowSelection = rowSelection || defaultRowSelection2;
84473
84501
  const tableContainerRef = useCallback((node2) => {
84474
84502
  if (node2 !== null) {
84475
84503
  const scrollNode = node2.querySelector(".ant-table-body");
@@ -84523,16 +84551,40 @@ const InfiniteScrollTable = ({
84523
84551
  const dataSource = data?.pages.flatMap((page) => page.docs) ?? [];
84524
84552
  const totalDocs = data?.pages?.[0]?.totalDocs ?? 0;
84525
84553
  useEffect(() => {
84526
- if (onChange) {
84554
+ if (onRowSelectionChange) {
84555
+ const wrappedSetSelectedRowKeys = (keys2) => {
84556
+ setSelectedRowKeys(keys2);
84557
+ };
84558
+ onRowSelectionChange(wrappedSetSelectedRowKeys);
84559
+ }
84560
+ }, [onRowSelectionChange]);
84561
+ const dataSentRef = useRef(false);
84562
+ useEffect(() => {
84563
+ if (onDataChange && dataSource.length > 0 && !dataSentRef.current) {
84564
+ onDataChange(dataSource);
84565
+ dataSentRef.current = true;
84566
+ }
84567
+ }, [dataSource, onDataChange]);
84568
+ const prevValuesRef = useRef(null);
84569
+ const onChangeRef = useRef(onChange);
84570
+ useEffect(() => {
84571
+ onChangeRef.current = onChange;
84572
+ }, [onChange]);
84573
+ useEffect(() => {
84574
+ if (onChangeRef.current && data && dataSource.length > 0) {
84527
84575
  const dataChangeEvent = {
84528
- totalPages: data?.pages?.length ?? 0,
84529
- currentPage: data?.pages?.[0]?.page ?? 0,
84576
+ totalPages: data.pages?.length ?? 0,
84577
+ currentPage: data.pages?.[0]?.page ?? 0,
84530
84578
  resultsShown: dataSource.length,
84531
84579
  totalResults: totalDocs
84532
84580
  };
84533
- onChange(dataChangeEvent);
84581
+ const prevValues = prevValuesRef.current;
84582
+ if (!prevValues || prevValues.resultsShown !== dataChangeEvent.resultsShown || prevValues.totalResults !== dataChangeEvent.totalResults) {
84583
+ prevValuesRef.current = dataChangeEvent;
84584
+ onChangeRef.current(dataChangeEvent);
84585
+ }
84534
84586
  }
84535
- }, [data]);
84587
+ }, [data?.pages?.length, dataSource.length, totalDocs]);
84536
84588
  if (status === "pending") {
84537
84589
  return /* @__PURE__ */ jsx(
84538
84590
  "div",
@@ -84553,79 +84605,73 @@ const InfiniteScrollTable = ({
84553
84605
  }
84554
84606
  );
84555
84607
  }
84556
- return /* @__PURE__ */ jsxs(
84557
- "div",
84558
- {
84559
- style: {
84560
- backgroundColor: "white",
84561
- padding: "24px",
84562
- borderRadius: "8px",
84563
- boxShadow: "0 2px 8px rgba(0, 0, 0, 0.1)",
84564
- marginBottom: "24px"
84565
- },
84566
- ref: tableContainerRef,
84567
- children: [
84568
- /* @__PURE__ */ jsxs("div", { style: { position: "relative" }, children: [
84569
- /* @__PURE__ */ jsx("style", { children: `
84608
+ return /* @__PURE__ */ jsxs("div", { ref: tableContainerRef, children: [
84609
+ /* @__PURE__ */ jsxs("div", { style: { position: "relative" }, ref: tableContainerRef, children: [
84610
+ /* @__PURE__ */ jsx("style", { children: `
84570
84611
  .infinite-scroll-table .ant-pagination {
84571
84612
  display: none !important;
84572
84613
  }
84573
84614
  ` }),
84574
- /* @__PURE__ */ jsx("div", { className: "infinite-scroll-table", children: /* @__PURE__ */ jsx(
84575
- ForwardTable,
84576
- {
84577
- dataSource,
84578
- columns: resizableColumns,
84579
- components: { header: { cell: ResizableTitle } },
84580
- rowKey: "id",
84581
- pagination: false,
84582
- showSorterTooltip: false,
84583
- size: "small",
84584
- scroll: { y: scrollHeight, x: scrollWidth },
84585
- onChange: () => {
84586
- },
84587
- onRow: (record, index2) => {
84588
- if (index2 === dataSource.length - 1) {
84589
- return { ref: lastRowRef };
84590
- }
84591
- return {};
84592
- }
84615
+ /* @__PURE__ */ jsx("div", { className: "infinite-scroll-table", children: /* @__PURE__ */ jsx(
84616
+ ForwardTable,
84617
+ {
84618
+ dataSource,
84619
+ columns: resizableColumns,
84620
+ components: { header: { cell: ResizableTitle } },
84621
+ rowKey: "id",
84622
+ pagination: false,
84623
+ showSorterTooltip: false,
84624
+ size: "small",
84625
+ scroll: { y: scrollHeight, x: scrollWidth },
84626
+ onChange: () => {
84627
+ },
84628
+ rowSelection: finalRowSelection,
84629
+ onRow: (record, index2) => {
84630
+ const rowProps = {};
84631
+ if (index2 === dataSource.length - 1) {
84632
+ rowProps.ref = lastRowRef;
84593
84633
  }
84594
- ) }),
84595
- isFetchingNextPage && /* @__PURE__ */ jsx(
84596
- "div",
84597
- {
84598
- style: {
84599
- position: "absolute",
84600
- bottom: 0,
84601
- left: 0,
84602
- width: "100%",
84603
- padding: "16px",
84604
- display: "flex",
84605
- justifyContent: "center",
84606
- alignItems: "center",
84607
- backgroundColor: "rgba(255, 255, 255, 0.7)",
84608
- backdropFilter: "blur(2px)",
84609
- zIndex: 10
84610
- },
84611
- children: /* @__PURE__ */ jsx(Spin, {})
84634
+ if (onRowClick && index2 !== void 0) {
84635
+ rowProps.onClick = (event) => {
84636
+ onRowClick(record, index2, event);
84637
+ };
84612
84638
  }
84613
- )
84614
- ] }),
84615
- !hasNextPage && /* @__PURE__ */ jsx(
84616
- "div",
84617
- {
84618
- style: {
84619
- textAlign: "center",
84620
- padding: "20px",
84621
- borderTop: "1px solid #f0f0f0"
84622
- },
84623
- children: /* @__PURE__ */ jsx(Typography$1.Text, { type: "secondary", children: "No more rows to load." })
84639
+ return rowProps;
84624
84640
  }
84625
- )
84626
- ]
84627
- }
84628
- );
84641
+ }
84642
+ ) }),
84643
+ isFetchingNextPage && /* @__PURE__ */ jsx(
84644
+ "div",
84645
+ {
84646
+ style: {
84647
+ position: "absolute",
84648
+ bottom: 0,
84649
+ left: 0,
84650
+ width: "100%",
84651
+ padding: "16px",
84652
+ display: "flex",
84653
+ justifyContent: "center",
84654
+ alignItems: "center",
84655
+ backgroundColor: "rgba(255, 255, 255, 0.7)",
84656
+ backdropFilter: "blur(2px)",
84657
+ zIndex: 10
84658
+ },
84659
+ children: /* @__PURE__ */ jsx(Spin, {})
84660
+ }
84661
+ )
84662
+ ] }),
84663
+ !hasNextPage && /* @__PURE__ */ jsx(
84664
+ "div",
84665
+ {
84666
+ style: {
84667
+ textAlign: "center",
84668
+ padding: "20px",
84669
+ borderTop: "1px solid #f0f0f0"
84670
+ },
84671
+ children: /* @__PURE__ */ jsx(Typography$1.Text, { type: "secondary", children: "No more rows to load." })
84672
+ }
84673
+ )
84674
+ ] });
84629
84675
  };
84630
84676
  const getRowKey = (record, rowKey, index2, enableValidation = true) => {
84631
84677
  try {
@@ -84677,6 +84723,8 @@ function Table({
84677
84723
  onChange,
84678
84724
  rowSelection,
84679
84725
  onRowClick,
84726
+ onRowSelectionChange,
84727
+ onDataChange,
84680
84728
  pagination,
84681
84729
  isMainContentCell = false,
84682
84730
  isInfiniteScroll = false,
@@ -84731,7 +84779,9 @@ function Table({
84731
84779
  fetchService: infiniteScrollConfig.fetchService,
84732
84780
  title: infiniteScrollConfig.title,
84733
84781
  scrollHeight: infiniteScrollConfig.scrollHeight,
84734
- scrollWidth: infiniteScrollConfig.scrollWidth
84782
+ scrollWidth: infiniteScrollConfig.scrollWidth,
84783
+ onRowSelectionChange,
84784
+ onDataChange
84735
84785
  }
84736
84786
  );
84737
84787
  }
@@ -85352,9 +85402,10 @@ const TableWithControls = ({
85352
85402
  tableControlsData: tableControlsData2,
85353
85403
  onChange,
85354
85404
  onRowClick,
85405
+ onRowSelectionChange,
85406
+ onDataChange,
85355
85407
  tableType = "table",
85356
85408
  isInfiniteScroll,
85357
- // Deprecated: use tableType instead
85358
85409
  infiniteScrollConfig,
85359
85410
  paginationStyle
85360
85411
  }) => {
@@ -85365,7 +85416,14 @@ const TableWithControls = ({
85365
85416
  totalResults: 0
85366
85417
  });
85367
85418
  const { primaryTableRowData, secondaryTableRowData } = tableControlsData2;
85368
- const { dataSource, columns, rowSelection, hasSettings, hasFilter } = tableData;
85419
+ const {
85420
+ dataSource,
85421
+ columns,
85422
+ rowSelection,
85423
+ hasSettings,
85424
+ hasFilter,
85425
+ onRowClick: tableOnRowClick
85426
+ } = tableData;
85369
85427
  const actualTableType = isInfiniteScroll ? "infiniteScroll" : tableType;
85370
85428
  const onTableControlsChange = (event) => {
85371
85429
  onChange(event);
@@ -85377,6 +85435,7 @@ const TableWithControls = ({
85377
85435
  });
85378
85436
  };
85379
85437
  const onInfiniteScrollTableChange = (event) => {
85438
+ setInfiniteScrollData(event);
85380
85439
  onChange({
85381
85440
  event: "infiniteScrollTableChange",
85382
85441
  payload: { value: "infiniteScrollTableChange", event }
@@ -85405,7 +85464,11 @@ const TableWithControls = ({
85405
85464
  title: infiniteScrollConfig.title,
85406
85465
  scrollHeight: infiniteScrollConfig.scrollHeight,
85407
85466
  scrollWidth: infiniteScrollConfig.scrollWidth,
85408
- onChange: onInfiniteScrollTableChange
85467
+ onChange: onInfiniteScrollTableChange,
85468
+ rowSelection,
85469
+ onRowClick: tableOnRowClick || onRowClick,
85470
+ onRowSelectionChange,
85471
+ onDataChange
85409
85472
  }
85410
85473
  );
85411
85474
  }
@@ -85431,18 +85494,25 @@ const TableWithControls = ({
85431
85494
  columns,
85432
85495
  rowSelection,
85433
85496
  onChange: onTableChange,
85434
- onRowClick
85497
+ onRowClick,
85498
+ onRowSelectionChange
85435
85499
  }
85436
85500
  );
85437
85501
  }
85438
85502
  }
85439
85503
  };
85504
+ const mergedSecondaryTableRowData = {
85505
+ ...secondaryTableRowData,
85506
+ groups: secondaryTableRowData?.groups || null,
85507
+ totalRecords: secondaryTableRowData?.totalRecords || null,
85508
+ infiniteScrollData: infiniteScrollData.resultsShown > 0 ? infiniteScrollData : secondaryTableRowData?.infiniteScrollData || infiniteScrollData
85509
+ };
85440
85510
  return /* @__PURE__ */ jsxs(Fragment, { children: [
85441
85511
  /* @__PURE__ */ jsx(
85442
85512
  TableControls,
85443
85513
  {
85444
85514
  primaryTableRowData,
85445
- secondaryTableRowData,
85515
+ secondaryTableRowData: mergedSecondaryTableRowData,
85446
85516
  onChange: onTableControlsChange
85447
85517
  }
85448
85518
  ),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gobolt/genesis",
3
- "version": "0.4.17",
3
+ "version": "0.4.19",
4
4
  "description": "genesis design system",
5
5
  "author": "gobolt",
6
6
  "license": "MIT",