-
Notifications
You must be signed in to change notification settings - Fork 61
Expand file tree
/
Copy pathlist.js
More file actions
115 lines (106 loc) · 2.79 KB
/
list.js
File metadata and controls
115 lines (106 loc) · 2.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import React, { PureComponent } from "react";
import PropTypes from "prop-types";
import { List } from "react-virtualized/dist/commonjs/List";
import styles from "./list.scss";
import Item from "../items/item";
import NoItems from "../items/no_items";
class InnerList extends PureComponent {
static propTypes = {
renderer: PropTypes.any,
listRenderer: PropTypes.any,
noItemsRenderer: PropTypes.any,
itemHeight: PropTypes.number,
height: PropTypes.number,
offset: PropTypes.number,
onClick: PropTypes.func,
selectedIds: PropTypes.arrayOf(PropTypes.number),
items: PropTypes.array,
disabled: PropTypes.bool,
disabledItemsTooltip: PropTypes.string
};
static defaultProps = {
renderer: Item,
listRenderer: List,
noItemsRenderer: NoItems,
itemHeight: 40,
height: 400,
offset: 0,
selectedIds: [],
items: [],
disabled: false
};
constructor(props) {
super(props);
this.rowRenderer = this.rowRenderer.bind(this);
this.noRowsRenderer = this.noRowsRenderer.bind(this);
this.onClick = this.onClick.bind(this);
}
onClick(event, id, disabled) {
const { onClick, selectedIds } = this.props;
const checked = selectedIds.includes(id);
if ((disabled && checked) || !disabled) {
onClick(event, id);
}
}
rowRenderer({ index, key, style }) {
const {
renderer,
itemHeight,
items,
selectedIds,
disabledItemsTooltip
} = this.props;
const Renderer = renderer;
const item = items[index];
const checked = selectedIds.includes(item.id);
const disabled = this.props.disabled || item.disabled;
return (
<div
key={key}
style={style}
className={styles.list_item}
onClick={event => this.onClick(event, item.id, disabled)}
title={disabled ? disabledItemsTooltip : undefined}
>
<Renderer
item={item}
group={item.isGroup}
height={itemHeight}
checked={checked}
disabled={disabled && !checked}
/>
</div>
);
}
noRowsRenderer() {
const { noItemsMessage, noItemsRenderer } = this.props;
const NoItemsRenderer = noItemsRenderer;
return <NoItemsRenderer noItemsMessage={noItemsMessage} />;
}
render() {
const {
height,
itemHeight,
items,
offset,
width,
getlistRef,
listRenderer
} = this.props;
const ListRenderer = listRenderer;
return (
<ListRenderer
ref={getlistRef}
className={styles.list}
rowRenderer={this.rowRenderer}
noRowsRenderer={this.noRowsRenderer}
width={width - offset}
rowHeight={itemHeight}
height={height}
items={items}
rowCount={items.length}
/>
);
}
}
export default InnerList;