@mezzanine-ui/react 0.14.7 → 0.14.8

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/Table/Table.d.ts CHANGED
@@ -10,7 +10,7 @@ export interface TableBaseProps<T> extends Omit<NativeElementPropsWithoutKeyAndR
10
10
  /**
11
11
  * customized body row className
12
12
  */
13
- bodyRowClassName?: string | ((source: TableDataSource) => string);
13
+ bodyRowClassName?: string | ((source: T) => string);
14
14
  /**
15
15
  * Columns of table <br />
16
16
  * `column.render` allowed customizing the column body cell rendering. <br />
package/Table/Table.js CHANGED
@@ -27,11 +27,13 @@ const Table = forwardRef(function Table(props, ref) {
27
27
  selectedRowKey: rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.selectedRowKey,
28
28
  onChange: rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.onChange,
29
29
  dataSource: dataSourceProp,
30
+ disabledRowKeys: rowSelectionProp === null || rowSelectionProp === void 0 ? void 0 : rowSelectionProp.disabledRowKeys,
30
31
  });
31
32
  const rowSelection = useMemo(() => (rowSelectionProp ? {
32
33
  selectedRowKeys,
33
34
  onChange: setSelectedRowKey,
34
35
  actions: rowSelectionProp.actions,
36
+ disabledRowKeys: rowSelectionProp.disabledRowKeys,
35
37
  } : undefined), [
36
38
  rowSelectionProp,
37
39
  selectedRowKeys,
@@ -5,6 +5,7 @@ import { EmptyProps } from '../Empty';
5
5
  export interface RowSelectionContext extends Pick<TableRowSelection, 'actions'> {
6
6
  selectedRowKeys: string[];
7
7
  onChange(v: string): void;
8
+ disabledRowKeys?: string[];
8
9
  }
9
10
  /** typeof sorting */
10
11
  export interface SortingContext {
package/Table/index.d.ts CHANGED
@@ -3,4 +3,5 @@ export { TableRefreshProps, default as TableRefresh, } from './refresh/TableRefr
3
3
  export { TableCellProps, default as TableCell, } from './TableCell';
4
4
  export { EditableBodyCellProps, } from './editable/TableEditRenderWrapper';
5
5
  export { useTableDraggable, } from './draggable/useTableDraggable';
6
+ export { useTableRowSelection, SELECTED_ALL_KEY, } from './rowSelection/useTableRowSelection';
6
7
  export { default as useTableScroll, } from './useTableScroll';
package/Table/index.js CHANGED
@@ -2,4 +2,5 @@ export { default } from './Table.js';
2
2
  export { default as TableRefresh } from './refresh/TableRefresh.js';
3
3
  export { default as TableCell } from './TableCell.js';
4
4
  export { useTableDraggable } from './draggable/useTableDraggable.js';
5
+ export { SELECTED_ALL_KEY, useTableRowSelection } from './rowSelection/useTableRowSelection.js';
5
6
  export { default as useTableScroll } from './useTableScroll.js';
@@ -1,6 +1,7 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { forwardRef, useContext, useCallback, useMemo, useEffect, useState } from 'react';
3
3
  import { tableClasses } from '@mezzanine-ui/core/table';
4
+ import xor from 'lodash/xor';
4
5
  import { MoreVerticalIcon } from '@mezzanine-ui/icons';
5
6
  import { TableContext, TableDataContext } from '../TableContext.js';
6
7
  import { SELECTED_ALL_KEY } from './useTableRowSelection.js';
@@ -12,7 +13,7 @@ import Icon from '../../Icon/Icon.js';
12
13
  import cx from 'clsx';
13
14
 
14
15
  const TableRowSelection = forwardRef(function TableRowSelection(props, ref) {
15
- var _a, _b;
16
+ var _a, _b, _c;
16
17
  const { rowKey, setChecked, showDropdownIcon, ...rest } = props;
17
18
  const { rowSelection, expanding, } = useContext(TableContext) || {};
18
19
  const { dataSource = [], } = useContext(TableDataContext) || {};
@@ -21,14 +22,15 @@ const TableRowSelection = forwardRef(function TableRowSelection(props, ref) {
21
22
  rowSelection === null || rowSelection === void 0 ? void 0 : rowSelection.onChange(rowKey);
22
23
  }, [rowSelection, rowKey]);
23
24
  const checkboxStatus = useMemo(() => {
24
- var _a;
25
+ var _a, _b;
25
26
  const selectedRowKeys = (_a = rowSelection === null || rowSelection === void 0 ? void 0 : rowSelection.selectedRowKeys) !== null && _a !== void 0 ? _a : [];
26
27
  if (!selectedRowKeys.length)
27
28
  return 'none';
28
- if (selectedRowKeys.length === dataSource.length)
29
+ const validDataSource = xor((_b = rowSelection === null || rowSelection === void 0 ? void 0 : rowSelection.disabledRowKeys) !== null && _b !== void 0 ? _b : [], dataSource.map((d) => (d.id || d.key)));
30
+ if (selectedRowKeys.length === validDataSource.length)
29
31
  return 'all';
30
32
  return 'indeterminate';
31
- }, [rowSelection === null || rowSelection === void 0 ? void 0 : rowSelection.selectedRowKeys, dataSource.length]);
33
+ }, [rowSelection === null || rowSelection === void 0 ? void 0 : rowSelection.selectedRowKeys, rowSelection === null || rowSelection === void 0 ? void 0 : rowSelection.disabledRowKeys, dataSource]);
32
34
  const selfChecked = useMemo(() => {
33
35
  var _a;
34
36
  return (((_a = rowSelection === null || rowSelection === void 0 ? void 0 : rowSelection.selectedRowKeys) !== null && _a !== void 0 ? _a : []).some((key) => key === rowKey));
@@ -70,9 +72,11 @@ const TableRowSelection = forwardRef(function TableRowSelection(props, ref) {
70
72
  toggleOpen(false);
71
73
  };
72
74
  const actionMenu = (jsx(Menu, { size: "medium", children: ((_a = rowSelection === null || rowSelection === void 0 ? void 0 : rowSelection.actions) !== null && _a !== void 0 ? _a : []).map(((action) => (jsx(MenuItem, { className: action.className, onClick: (evt) => onMenuItemClicked(evt, action), children: action.text }, action.key)))) }));
73
- return (jsxs("div", { ref: ref, ...rest, className: tableClasses.selections, style: hiddenIconWithExpandableStyle.host, children: [jsx(Checkbox, { checked: checked, disabled: false, indeterminate: indeterminate, inputProps: {
75
+ return (jsxs("div", { ref: ref, ...rest, className: tableClasses.selections, style: hiddenIconWithExpandableStyle.host, children: [jsx(Checkbox, { checked: checked, disabled: ((_b = rowSelection === null || rowSelection === void 0 ? void 0 : rowSelection.disabledRowKeys) === null || _b === void 0 ? void 0 : _b.length)
76
+ ? rowSelection.disabledRowKeys.includes(rowKey)
77
+ : false, indeterminate: indeterminate, inputProps: {
74
78
  name,
75
- }, onChange: onSelected, size: "medium" }), ((_b = rowSelection === null || rowSelection === void 0 ? void 0 : rowSelection.actions) === null || _b === void 0 ? void 0 : _b.length) ? (jsx("div", { className: tableClasses.icon, style: hiddenIconWithExpandableStyle.icon, children: showDropdownIcon ? (jsx(Dropdown, { menu: actionMenu, onClose: () => toggleOpen(false), popperProps: {
79
+ }, onChange: onSelected, size: "medium" }), ((_c = rowSelection === null || rowSelection === void 0 ? void 0 : rowSelection.actions) === null || _c === void 0 ? void 0 : _c.length) ? (jsx("div", { className: tableClasses.icon, style: hiddenIconWithExpandableStyle.icon, children: showDropdownIcon ? (jsx(Dropdown, { menu: actionMenu, onClose: () => toggleOpen(false), popperProps: {
76
80
  open,
77
81
  options: {
78
82
  placement: 'bottom-start',
@@ -1,3 +1,4 @@
1
+ import xor from 'lodash/xor';
1
2
  import { useControlValueState } from '../../Form/useControlValueState.js';
2
3
  import { useLastCallback } from '../../hooks/useLastCallback.js';
3
4
 
@@ -8,7 +9,7 @@ const equalityFn = (a, b) => {
8
9
  };
9
10
  const SELECTED_ALL_KEY = 'MZN-TABLE-ROW-SELECTION-ALL';
10
11
  function useTableRowSelection(props) {
11
- const { selectedRowKey: selectedRowKeyProp, onChange: onChangeProp, dataSource, } = props;
12
+ const { selectedRowKey: selectedRowKeyProp, onChange: onChangeProp, disabledRowKeys = [], dataSource, } = props;
12
13
  const [selectedRowKey, setSelectedRowKey] = useControlValueState({
13
14
  defaultValue: [],
14
15
  equalityFn,
@@ -18,13 +19,14 @@ function useTableRowSelection(props) {
18
19
  if (!dataSource.length)
19
20
  return;
20
21
  const allSourceKeys = dataSource.map((source) => (source.key || source.id));
22
+ const validSourceKeys = xor(disabledRowKeys, allSourceKeys);
21
23
  let nextSelectedRowKey = selectedRowKey;
22
24
  if (rowKey === SELECTED_ALL_KEY) {
23
- if (equalityFn(selectedRowKey, allSourceKeys)) {
25
+ if (equalityFn(selectedRowKey, validSourceKeys)) {
24
26
  nextSelectedRowKey = [];
25
27
  }
26
28
  else {
27
- nextSelectedRowKey = allSourceKeys;
29
+ nextSelectedRowKey = validSourceKeys;
28
30
  }
29
31
  }
30
32
  else {
package/index.d.ts CHANGED
@@ -52,7 +52,7 @@ export { AccordionProps, AccordionSummaryProps, AccordionSummary, AccordionDetai
52
52
  export { BadgeContainerProps, BadgeContainer, BadgeProps, default as Badge, } from './Badge';
53
53
  export { CardProps, CardActionsProps, CardActions, default as Card, } from './Card';
54
54
  export { EmptyProps, default as Empty, } from './Empty';
55
- export { TableProps, TableRefreshProps, TableRefresh, useTableDraggable, useTableScroll, default as Table, } from './Table';
55
+ export { TableProps, TableRefreshProps, TableRefresh, useTableDraggable, useTableScroll, useTableRowSelection, SELECTED_ALL_KEY, default as Table, } from './Table';
56
56
  export { TagSize, TagProps, default as Tag, } from './Tag';
57
57
  export { usePagination, PaginationItemProps, PaginationItemType, PaginationItem, PaginationJumperProps, PaginationJumper, PaginationPageSizeProps, PaginationPageSize, PaginationProps, default as Pagination, } from './Pagination';
58
58
  export { TreeNodeProp, TreeNodeData, TreeNodeEntity, TreeNodeEntities, TreeNodeRefsShape, TreeNodeRefs, TreeExpandControl, uniqueArray, toggleValue, toggleValueWithStatusControl, traverseTree, UseTreeExpandedValueProps, useTreeExpandedValue, GetTreeNodeEntitiesProps, getTreeNodeEntities, TreeNodeElementProps, TreeNodeProps, TreeNode, TreeNodeListElementProps, TreeNodeListProps, TreeNodeList, TreeProps, default as Tree, } from './Tree';
package/index.js CHANGED
@@ -60,6 +60,7 @@ export { default as Card } from './Card/Card.js';
60
60
  export { default as Empty } from './Empty/Empty.js';
61
61
  export { default as TableRefresh } from './Table/refresh/TableRefresh.js';
62
62
  export { useTableDraggable } from './Table/draggable/useTableDraggable.js';
63
+ export { SELECTED_ALL_KEY, useTableRowSelection } from './Table/rowSelection/useTableRowSelection.js';
63
64
  export { default as Table } from './Table/Table.js';
64
65
  export { default as Tag } from './Tag/Tag.js';
65
66
  export { usePagination } from './Pagination/usePagination.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mezzanine-ui/react",
3
- "version": "0.14.7",
3
+ "version": "0.14.8",
4
4
  "description": "React components for mezzanine-ui",
5
5
  "author": "Mezzanine",
6
6
  "repository": {
@@ -28,9 +28,9 @@
28
28
  "react-dom": "^18.2.0"
29
29
  },
30
30
  "dependencies": {
31
- "@mezzanine-ui/core": "^0.14.7",
32
- "@mezzanine-ui/icons": "^0.14.7",
33
- "@mezzanine-ui/system": "^0.14.7",
31
+ "@mezzanine-ui/core": "^0.14.8",
32
+ "@mezzanine-ui/icons": "^0.14.8",
33
+ "@mezzanine-ui/system": "^0.14.8",
34
34
  "@popperjs/core": "^2.11.6",
35
35
  "@types/react-transition-group": "^4.4.8",
36
36
  "clsx": "^2.0.0",