Skip to content

Commit e5ba3e3

Browse files
authored
feat: 🎸 manual width prop (#56)
1 parent fa7af12 commit e5ba3e3

File tree

4 files changed

+30
-29
lines changed

4 files changed

+30
-29
lines changed

index.d.ts

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import * as React from 'react';
66
interface BasicNode {
77
id: number | string;
88
name: string;
9-
state?: { [stateKey: string]: any };
9+
state?: {[stateKey: string]: any};
1010
}
1111

1212
export interface Node extends BasicNode {
@@ -20,35 +20,36 @@ export interface FlattenedNode extends Node {
2020

2121
interface NodeAction {
2222
type: string;
23-
node: FlattenedNode
23+
node: FlattenedNode;
2424
}
2525

2626
type onChange = (updateParams: NodeAction) => void;
2727

2828
export interface Extensions {
29-
updateTypeHandlers: { [type: number]: onChange }
29+
updateTypeHandlers: {[type: number]: onChange};
3030
}
3131

3232
export interface TreeProps {
3333
extensions: Extensions;
3434
nodes: Node[];
3535
onChange: (nodes: Node[]) => void;
36-
children: (props: RendererProps) => JSX.Element
36+
children: (props: RendererProps) => JSX.Element;
3737
nodeMarginLeft?: number;
38+
width?: number;
3839
scrollToId?: number;
3940
}
4041

4142
export default class Tree extends React.Component<TreeProps> {}
4243

4344
export interface RendererProps {
4445
measure: () => void;
45-
onChange: onChange,
46-
node: FlattenedNode
46+
onChange: onChange;
47+
node: FlattenedNode;
4748
}
4849

4950
declare const Deletable: React.SFC<RendererProps>;
5051
declare const Expandable: React.SFC<RendererProps>;
51-
declare const Favorite: React.SFC<RendererProps>
52+
declare const Favorite: React.SFC<RendererProps>;
5253

5354
interface Renderers {
5455
Deletable: React.SFC<RendererProps>;
@@ -60,19 +61,19 @@ export const renderers: Renderers;
6061

6162
export interface Group {
6263
filter: (node: Node) => boolean;
63-
name: string
64+
name: string;
6465
}
6566

6667
interface GroupRendererProps {
6768
onChange: (c: string) => void;
68-
groups: { [g: string]: Group };
69+
groups: {[g: string]: Group};
6970
selectedGroup: string;
7071
}
7172

7273
export interface FilteringContainerProps {
7374
children: (nodes: Node[]) => JSX.Element;
7475
debouncer: (func: (...p: any[]) => any, timeout: number) => void;
75-
groups: { [g: string]: Group };
76+
groups: {[g: string]: Group};
7677
selectedGroup: string;
7778
groupRenderer: React.StatelessComponent<GroupRendererProps> | React.Component<GroupRendererProps>;
7879
onSelectedGroupChange: (c: string) => void;
@@ -83,14 +84,14 @@ export class FilteringContainer extends React.Component<FilteringContainerProps>
8384
export enum UPDATE_TYPE {
8485
ADD = 0,
8586
DELETE = 1,
86-
UPDATE = 2
87+
UPDATE = 2,
8788
}
8889

8990
interface Constants {
90-
UPDATE_TYPE: UPDATE_TYPE
91+
UPDATE_TYPE: UPDATE_TYPE;
9192
}
9293

93-
export const constants: Constants
94+
export const constants: Constants;
9495

9596
interface NodeRenderOptions {
9697
hasChildren: boolean;
@@ -101,16 +102,16 @@ interface NodeRenderOptions {
101102

102103
export enum NODE_CHANGE_OPERATIONS {
103104
CHANGE_NODE = 'CHANGE_NODE',
104-
DELETE_NODE = 'DELETE_NODE'
105+
DELETE_NODE = 'DELETE_NODE',
105106
}
106107

107108
interface Selectors {
108-
getNodeRenderOptions: (node: FlattenedNode) => NodeRenderOptions,
109-
replaceNodeFromTree: (nodes: Node[], updatedNode: FlattenedNode, operation?: NODE_CHANGE_OPERATIONS) => Node[],
110-
deleteNodeFromTree: (nodes: Node[], nodeToDelete: FlattenedNode) => Node[],
111-
deleteNode: (node: FlattenedNode[]) => NodeAction,
112-
addNode: (node: FlattenedNode[]) => NodeAction,
113-
updateNode: (node: FlattenedNode, state: { [stateKey: string]: any }) => NodeAction
109+
getNodeRenderOptions: (node: FlattenedNode) => NodeRenderOptions;
110+
replaceNodeFromTree: (nodes: Node[], updatedNode: FlattenedNode, operation?: NODE_CHANGE_OPERATIONS) => Node[];
111+
deleteNodeFromTree: (nodes: Node[], nodeToDelete: FlattenedNode) => Node[];
112+
deleteNode: (node: FlattenedNode[]) => NodeAction;
113+
addNode: (node: FlattenedNode[]) => NodeAction;
114+
updateNode: (node: FlattenedNode, state: {[stateKey: string]: any}) => NodeAction;
114115
}
115116

116117
export const selectors: Selectors;

src/Tree.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,19 @@ export default class Tree extends React.Component {
3232
};
3333

3434
render() {
35-
const {nodes, scrollToIndex} = this.props;
35+
const {nodes, width, scrollToIndex} = this.props;
3636

3737
return (
38-
<AutoSizer>
39-
{({height, width}) => (
38+
<AutoSizer disableWidth={Boolean(width)}>
39+
{({height, width: autoWidth}) => (
4040
<List
4141
deferredMeasurementCache={this._cache}
4242
ref={r => (this._list = r)}
4343
height={height}
4444
rowCount={nodes.length}
4545
rowHeight={this._cache.rowHeight}
4646
rowRenderer={this.measureRowRenderer(nodes)}
47-
width={width}
47+
width={width || autoWidth}
4848
scrollToIndex={scrollToIndex}
4949
/>
5050
)}
@@ -58,4 +58,5 @@ Tree.propTypes = {
5858
NodeRenderer: PropTypes.func.isRequired,
5959
onChange: PropTypes.func.isRequired,
6060
nodeMarginLeft: PropTypes.number,
61+
width: PropTypes.number,
6162
};

src/TreeContainer.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,8 @@ export default class TreeContainer extends React.Component {
4242
this.props.onChange(updatedNodes);
4343
};
4444

45-
4645
render() {
47-
const flattenedTree = getFlattenedTree(this.props.nodes)
46+
const flattenedTree = getFlattenedTree(this.props.nodes);
4847
const rowIndex = getRowIndexFromId(flattenedTree, this.props.scrollToId);
4948
return (
5049
<Tree
@@ -66,6 +65,7 @@ TreeContainer.propTypes = {
6665
onChange: PropTypes.func,
6766
children: PropTypes.func.isRequired,
6867
nodeMarginLeft: PropTypes.number,
68+
width: PropTypes.number,
6969
scrollToId: PropTypes.number,
7070
};
7171

src/selectors/nodes.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import omit from 'lodash.omit';
33

44
import {UPDATE_TYPE} from '../contants';
55

6-
export { getFlattenedTree } from './getFlattenedTree';
6+
export {getFlattenedTree} from './getFlattenedTree';
77

88
export const getNodeRenderOptions = createSelector(
99
node => (node.state || {}).expanded,
@@ -89,5 +89,4 @@ export const addNode = node => ({
8989
type: UPDATE_TYPE.ADD,
9090
});
9191

92-
export const getRowIndexFromId = (flattenedTree, id) =>
93-
flattenedTree.findIndex((node) => node.id === id);
92+
export const getRowIndexFromId = (flattenedTree, id) => flattenedTree.findIndex(node => node.id === id);

0 commit comments

Comments
 (0)