@codacy/ui-components 0.46.2 → 0.47.0
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/lib/Modal/Modal.js +7 -5
- package/lib/ScrollableContent/ScrollableContent.d.ts +3 -1
- package/lib/ScrollableContent/ScrollableContent.js +23 -8
- package/lib/ScrollableContent/ScrollableContent.types.d.ts +2 -2
- package/lib/ScrollableContent/useScrollContainer.d.ts +10 -2
- package/lib/ScrollableContent/useScrollContainer.js +38 -25
- package/lib/Table/Table.d.ts +9 -0
- package/lib/Table/Table.js +57 -17
- package/lib/Table/Table.types.d.ts +2 -1
- package/lib/hooks/index.d.ts +1 -0
- package/lib/hooks/index.js +2 -1
- package/lib/hooks/useInfiniteScroll.d.ts +2 -0
- package/lib/hooks/useInfiniteScroll.js +21 -0
- package/package.json +2 -1
package/lib/Modal/Modal.js
CHANGED
|
@@ -107,14 +107,16 @@ var ModalBody = function ModalBody(_ref3) {
|
|
|
107
107
|
props = _objectWithoutProperties(_ref3, ["children"]);
|
|
108
108
|
|
|
109
109
|
var _useScrollContainer = useScrollContainer(),
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
110
|
+
atTop = _useScrollContainer.atTop,
|
|
111
|
+
atBottom = _useScrollContainer.atBottom,
|
|
112
|
+
scroll = _useScrollContainer.scroll,
|
|
113
|
+
height = _useScrollContainer.height,
|
|
114
|
+
divProps = _objectWithoutProperties(_useScrollContainer, ["atTop", "atBottom", "scroll", "height"]);
|
|
113
115
|
|
|
114
116
|
return /*#__PURE__*/React.createElement(ModalBodyBox, Object.assign({
|
|
115
117
|
px: defaultModalPadding,
|
|
116
|
-
moreTop:
|
|
117
|
-
moreBottom:
|
|
118
|
+
moreTop: !atTop,
|
|
119
|
+
moreBottom: !atBottom
|
|
118
120
|
}, props, divProps), children);
|
|
119
121
|
};
|
|
120
122
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { ScrollableContentProps } from './ScrollableContent.types';
|
|
3
|
+
import { ScrollState } from './useScrollContainer';
|
|
4
|
+
export declare const ScrollableContentContext: React.Context<ScrollState>;
|
|
3
5
|
/**
|
|
4
|
-
*
|
|
6
|
+
* ScrollableContent
|
|
5
7
|
*/
|
|
6
8
|
export declare const ScrollableContent: React.ForwardRefExoticComponent<ScrollableContentProps & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -2,8 +2,14 @@ import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutPr
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { ScrollableContentWrapper } from './ScrollableContent.styles';
|
|
4
4
|
import { useScrollContainer } from './useScrollContainer';
|
|
5
|
+
export var ScrollableContentContext = React.createContext({
|
|
6
|
+
atTop: true,
|
|
7
|
+
atBottom: true,
|
|
8
|
+
scroll: 0,
|
|
9
|
+
height: 0
|
|
10
|
+
});
|
|
5
11
|
/**
|
|
6
|
-
*
|
|
12
|
+
* ScrollableContent
|
|
7
13
|
*/
|
|
8
14
|
|
|
9
15
|
export var ScrollableContent = React.forwardRef(function (_ref, ref) {
|
|
@@ -11,13 +17,22 @@ export var ScrollableContent = React.forwardRef(function (_ref, ref) {
|
|
|
11
17
|
props = _objectWithoutProperties(_ref, ["children"]);
|
|
12
18
|
|
|
13
19
|
var _useScrollContainer = useScrollContainer(),
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
20
|
+
atTop = _useScrollContainer.atTop,
|
|
21
|
+
atBottom = _useScrollContainer.atBottom,
|
|
22
|
+
scroll = _useScrollContainer.scroll,
|
|
23
|
+
height = _useScrollContainer.height,
|
|
24
|
+
divProps = _objectWithoutProperties(_useScrollContainer, ["atTop", "atBottom", "scroll", "height"]);
|
|
17
25
|
|
|
18
|
-
return /*#__PURE__*/React.createElement(
|
|
19
|
-
|
|
20
|
-
|
|
26
|
+
return /*#__PURE__*/React.createElement(ScrollableContentContext.Provider, {
|
|
27
|
+
value: {
|
|
28
|
+
atTop: atTop,
|
|
29
|
+
atBottom: atBottom,
|
|
30
|
+
scroll: scroll,
|
|
31
|
+
height: height
|
|
32
|
+
}
|
|
33
|
+
}, /*#__PURE__*/React.createElement(ScrollableContentWrapper, Object.assign({}, props, {
|
|
34
|
+
moreTop: !atTop,
|
|
35
|
+
moreBottom: !atBottom,
|
|
21
36
|
ref: ref
|
|
22
|
-
}), /*#__PURE__*/React.createElement("div", divProps, children));
|
|
37
|
+
}), /*#__PURE__*/React.createElement("div", divProps, children)));
|
|
23
38
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ContainerComponentProps } from '../types';
|
|
2
|
-
import { SpaceProps, LayoutProps } from '../system-props/types';
|
|
3
2
|
import { Color } from '../theme';
|
|
4
|
-
|
|
3
|
+
import { FlexProps } from '../Flexbox';
|
|
4
|
+
export interface ScrollableContentProps extends ContainerComponentProps, FlexProps {
|
|
5
5
|
background?: Color;
|
|
6
6
|
fadeHeight?: string;
|
|
7
7
|
}
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
export interface ScrollState {
|
|
3
|
+
atTop: boolean;
|
|
4
|
+
atBottom: boolean;
|
|
5
|
+
scroll: number;
|
|
6
|
+
height: number;
|
|
7
|
+
}
|
|
2
8
|
export declare const useScrollContainer: () => {
|
|
9
|
+
atTop: boolean;
|
|
10
|
+
atBottom: boolean;
|
|
11
|
+
scroll: number;
|
|
12
|
+
height: number;
|
|
3
13
|
onScroll: (event: React.UIEvent<HTMLDivElement, UIEvent>) => void;
|
|
4
14
|
ref: React.RefObject<HTMLDivElement>;
|
|
5
|
-
moreTop: boolean;
|
|
6
|
-
moreBottom: boolean;
|
|
7
15
|
};
|
|
@@ -1,30 +1,38 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
1
2
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
|
-
import { useState, useCallback, useEffect, useRef } from 'react';
|
|
3
|
+
import { useState, useCallback, useEffect, useRef, useMemo } from 'react';
|
|
3
4
|
import { throttle } from 'lodash';
|
|
4
5
|
export var useScrollContainer = function useScrollContainer() {
|
|
5
6
|
var ref = useRef(null);
|
|
6
7
|
|
|
7
|
-
var _useState = useState(
|
|
8
|
+
var _useState = useState({
|
|
9
|
+
atTop: true,
|
|
10
|
+
atBottom: true,
|
|
11
|
+
scroll: 0,
|
|
12
|
+
height: 0
|
|
13
|
+
}),
|
|
8
14
|
_useState2 = _slicedToArray(_useState, 2),
|
|
9
|
-
|
|
10
|
-
|
|
15
|
+
state = _useState2[0],
|
|
16
|
+
setState = _useState2[1];
|
|
11
17
|
|
|
12
|
-
var
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if (
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
18
|
+
var throttledHandler = useMemo(function () {
|
|
19
|
+
return throttle(function (scrollHeight, scrollTop, containerHeight) {
|
|
20
|
+
setState({
|
|
21
|
+
atTop: scrollHeight <= containerHeight || scrollTop <= 10,
|
|
22
|
+
atBottom: scrollHeight <= containerHeight || scrollTop >= scrollHeight - containerHeight - 10,
|
|
23
|
+
scroll: scrollTop,
|
|
24
|
+
height: containerHeight
|
|
25
|
+
});
|
|
26
|
+
}, 250);
|
|
27
|
+
}, []);
|
|
28
|
+
var resizeObserver = useMemo(function () {
|
|
29
|
+
return new ResizeObserver(function (entries) {
|
|
30
|
+
if (entries.length > 0) {
|
|
31
|
+
var div = entries[0].target;
|
|
32
|
+
throttledHandler(div.scrollHeight, div.scrollTop, div.offsetHeight);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}, [throttledHandler]);
|
|
28
36
|
var onScroll = useCallback(function (event) {
|
|
29
37
|
var e = event.currentTarget;
|
|
30
38
|
throttledHandler(e.scrollHeight, e.scrollTop, e.offsetHeight);
|
|
@@ -35,10 +43,15 @@ export var useScrollContainer = function useScrollContainer() {
|
|
|
35
43
|
throttledHandler(div.scrollHeight, div.scrollTop, div.offsetHeight);
|
|
36
44
|
}
|
|
37
45
|
}, [throttledHandler]);
|
|
38
|
-
|
|
46
|
+
useEffect(function () {
|
|
47
|
+
var containerDiv = ref.current;
|
|
48
|
+
if (containerDiv) resizeObserver.observe(containerDiv);
|
|
49
|
+
return function () {
|
|
50
|
+
if (containerDiv) resizeObserver.unobserve(containerDiv);
|
|
51
|
+
};
|
|
52
|
+
}, [resizeObserver]);
|
|
53
|
+
return _objectSpread({
|
|
39
54
|
onScroll: onScroll,
|
|
40
|
-
ref: ref
|
|
41
|
-
|
|
42
|
-
moreBottom: moreBottom
|
|
43
|
-
};
|
|
55
|
+
ref: ref
|
|
56
|
+
}, state);
|
|
44
57
|
};
|
package/lib/Table/Table.d.ts
CHANGED
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { TableProps, TableHeaderProps, TableHeaderCellProps, TableRowsProps, TableRowProps, TableCellProps } from './Table.types';
|
|
3
|
+
export interface TableContextType {
|
|
4
|
+
columnsCount: number;
|
|
5
|
+
setColumnsCount: (n: number) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const TableContext: React.Context<TableContextType>;
|
|
3
8
|
export declare const ColumnsGroup: React.FC<TableHeaderProps>;
|
|
4
9
|
export declare const Table: React.FC<TableProps> & {
|
|
5
10
|
Header: React.FC<TableHeaderProps>;
|
|
6
11
|
HeaderCell: React.FC<TableHeaderCellProps>;
|
|
7
12
|
Rows: React.FC<TableRowsProps>;
|
|
8
13
|
Row: React.FC<TableRowProps>;
|
|
14
|
+
VirtualRow: React.FC<TableRowProps & {
|
|
15
|
+
index: number;
|
|
16
|
+
height: number;
|
|
17
|
+
}>;
|
|
9
18
|
Cell: React.FC<TableCellProps>;
|
|
10
19
|
SelectableHeader: React.FC<import("./NewSelectableTable").SelectableHeaderProps>;
|
|
11
20
|
SelectableRow: React.FC<import("./NewSelectableTable").SelectableRowProps>;
|
package/lib/Table/Table.js
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
1
2
|
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
2
|
-
import React from 'react';
|
|
3
|
+
import React, { useContext, useState, useCallback } from 'react';
|
|
3
4
|
import { TableWrapper, StyledTableHeader, StyledTableHeaderCell, StyledTableBodyCell, StyledTableBody, StyledTableRow, StyledTable } from './Table.styles';
|
|
4
5
|
import { IconAndText } from '../IconAndText';
|
|
5
6
|
import { SortDown, SortUp } from '../Icons';
|
|
6
7
|
import { SelectableHeader, SelectableRow } from './NewSelectableTable';
|
|
7
|
-
import {
|
|
8
|
+
import { ScrollableContentContext } from '../ScrollableContent';
|
|
9
|
+
export var TableContext = React.createContext({
|
|
10
|
+
columnsCount: 0,
|
|
11
|
+
setColumnsCount: function setColumnsCount() {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
});
|
|
8
15
|
/**
|
|
9
16
|
* Styled table component
|
|
10
17
|
*/
|
|
@@ -13,11 +20,23 @@ var TableComponent = function TableComponent(_ref) {
|
|
|
13
20
|
var children = _ref.children,
|
|
14
21
|
props = _objectWithoutProperties(_ref, ["children"]);
|
|
15
22
|
|
|
16
|
-
|
|
23
|
+
var _useState = useState(0),
|
|
24
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
25
|
+
columnsCount = _useState2[0],
|
|
26
|
+
setColumnsCount = _useState2[1];
|
|
27
|
+
|
|
28
|
+
return /*#__PURE__*/React.createElement(TableContext.Provider, {
|
|
29
|
+
value: {
|
|
30
|
+
columnsCount: columnsCount,
|
|
31
|
+
setColumnsCount: setColumnsCount
|
|
32
|
+
}
|
|
33
|
+
}, /*#__PURE__*/React.createElement(TableWrapper, props, /*#__PURE__*/React.createElement(StyledTable, null, children)));
|
|
17
34
|
};
|
|
18
35
|
|
|
19
36
|
export var ColumnsGroup = function ColumnsGroup(_ref2) {
|
|
20
37
|
var children = _ref2.children;
|
|
38
|
+
var tableCtx = useContext(TableContext);
|
|
39
|
+
if (tableCtx) tableCtx.setColumnsCount(React.Children.count(children));
|
|
21
40
|
return /*#__PURE__*/React.createElement("colgroup", null, React.Children.map(children, function (child) {
|
|
22
41
|
if (React.isValidElement(child)) {
|
|
23
42
|
if (child.props.width) {
|
|
@@ -85,31 +104,51 @@ var HeaderCell = function HeaderCell(_ref4) {
|
|
|
85
104
|
}, props), content);
|
|
86
105
|
};
|
|
87
106
|
|
|
88
|
-
var
|
|
107
|
+
var Cell = function Cell(_ref5) {
|
|
89
108
|
var children = _ref5.children,
|
|
90
|
-
|
|
109
|
+
_ref5$align = _ref5.align,
|
|
110
|
+
align = _ref5$align === void 0 ? 'left' : _ref5$align,
|
|
111
|
+
span = _ref5.span,
|
|
112
|
+
props = _objectWithoutProperties(_ref5, ["children", "align", "span"]);
|
|
91
113
|
|
|
92
|
-
|
|
114
|
+
var tableCtx = useContext(TableContext);
|
|
115
|
+
return /*#__PURE__*/React.createElement(StyledTableBodyCell, Object.assign({
|
|
116
|
+
colSpan: span === 'auto' ? tableCtx === null || tableCtx === void 0 ? void 0 : tableCtx.columnsCount : span,
|
|
117
|
+
align: align
|
|
118
|
+
}, props), children);
|
|
93
119
|
};
|
|
94
120
|
|
|
95
|
-
var
|
|
121
|
+
var Rows = function Rows(_ref6) {
|
|
96
122
|
var children = _ref6.children,
|
|
97
123
|
props = _objectWithoutProperties(_ref6, ["children"]);
|
|
98
124
|
|
|
99
|
-
return /*#__PURE__*/React.createElement(
|
|
125
|
+
return /*#__PURE__*/React.createElement(StyledTableBody, props, children);
|
|
100
126
|
};
|
|
101
127
|
|
|
102
|
-
var
|
|
128
|
+
var Row = function Row(_ref7) {
|
|
103
129
|
var children = _ref7.children,
|
|
104
|
-
|
|
105
|
-
align = _ref7$align === void 0 ? 'left' : _ref7$align,
|
|
106
|
-
span = _ref7.span,
|
|
107
|
-
props = _objectWithoutProperties(_ref7, ["children", "align", "span"]);
|
|
130
|
+
props = _objectWithoutProperties(_ref7, ["children"]);
|
|
108
131
|
|
|
109
|
-
return /*#__PURE__*/React.createElement(
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
132
|
+
return /*#__PURE__*/React.createElement(StyledTableRow, props, children);
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
var VirtualRow = function VirtualRow(_ref8) {
|
|
136
|
+
var children = _ref8.children,
|
|
137
|
+
index = _ref8.index,
|
|
138
|
+
height = _ref8.height,
|
|
139
|
+
props = _objectWithoutProperties(_ref8, ["children", "index", "height"]);
|
|
140
|
+
|
|
141
|
+
var scrollCtx = useContext(ScrollableContentContext);
|
|
142
|
+
var top = (index + 1) *
|
|
143
|
+
/* +1 to acknowledge the header row */
|
|
144
|
+
height;
|
|
145
|
+
var threshold = height / 2;
|
|
146
|
+
var inViewport = top >= scrollCtx.scroll - threshold && top <= scrollCtx.scroll + scrollCtx.height + threshold;
|
|
147
|
+
return /*#__PURE__*/React.createElement(StyledTableRow, Object.assign({}, props, {
|
|
148
|
+
height: height
|
|
149
|
+
}), inViewport ? children : /*#__PURE__*/React.createElement(Cell, {
|
|
150
|
+
span: "auto"
|
|
151
|
+
}));
|
|
113
152
|
};
|
|
114
153
|
|
|
115
154
|
export var Table = Object.assign(TableComponent, {
|
|
@@ -117,6 +156,7 @@ export var Table = Object.assign(TableComponent, {
|
|
|
117
156
|
HeaderCell: HeaderCell,
|
|
118
157
|
Rows: Rows,
|
|
119
158
|
Row: Row,
|
|
159
|
+
VirtualRow: VirtualRow,
|
|
120
160
|
Cell: Cell,
|
|
121
161
|
SelectableHeader: SelectableHeader,
|
|
122
162
|
SelectableRow: SelectableRow
|
|
@@ -30,8 +30,9 @@ export interface TableRowsProps extends ContainerComponentProps {
|
|
|
30
30
|
}
|
|
31
31
|
export interface TableRowProps extends ContainerComponentProps, DetailedHTMLProps<HTMLAttributes<HTMLTableRowElement>, HTMLTableRowElement> {
|
|
32
32
|
background?: Color;
|
|
33
|
+
height?: number;
|
|
33
34
|
}
|
|
34
35
|
export interface TableCellProps extends BaseCellProps {
|
|
35
|
-
span?: number;
|
|
36
|
+
span?: number | 'auto';
|
|
36
37
|
}
|
|
37
38
|
export {};
|
package/lib/hooks/index.d.ts
CHANGED
package/lib/hooks/index.js
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef } from 'react';
|
|
2
|
+
export function useInfiniteScroll(ref, onLoadMore, containerRef) {
|
|
3
|
+
var observer = useRef();
|
|
4
|
+
var handleLoadMore = useCallback(function (entries, _) {
|
|
5
|
+
if (entries[0].isIntersecting && onLoadMore) {
|
|
6
|
+
onLoadMore();
|
|
7
|
+
}
|
|
8
|
+
}, [onLoadMore]);
|
|
9
|
+
useEffect(function () {
|
|
10
|
+
if (ref.current) {
|
|
11
|
+
observer.current = new IntersectionObserver(handleLoadMore, {
|
|
12
|
+
root: containerRef
|
|
13
|
+
});
|
|
14
|
+
observer.current.observe(ref.current);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return function () {
|
|
18
|
+
if (observer.current) observer.current.disconnect();
|
|
19
|
+
};
|
|
20
|
+
}, [ref, handleLoadMore, containerRef]);
|
|
21
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codacy/ui-components",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.47.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"author": "",
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
"@pathofdev/react-tag-input": "github:inesgomas/react-tag-input#9820d2ae045d9398fbd3ba9021f675b127003237",
|
|
34
34
|
"@popperjs/core": "^2.5.4",
|
|
35
35
|
"@styled-system/should-forward-prop": "^5.1.5",
|
|
36
|
+
"@types/resize-observer-browser": "^0.1.6",
|
|
36
37
|
"autosize": "^4.0.2",
|
|
37
38
|
"emotion-theming": "10.x",
|
|
38
39
|
"lodash": "^4.17.20",
|