Skip to content

Commit 85ebd9b

Browse files
committed
Merge branch 'master' of https://github.com/siddharth-vaghasia/sp-dev-fx-controls-react into siddharth-vaghasia-master
2 parents 1e26ffb + 581ac01 commit 85ebd9b

File tree

5 files changed

+106
-10
lines changed

5 files changed

+106
-10
lines changed

docs/documentation/docs/controls/TreeView.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ import { TreeView, ITreeItem } from "@pnp/spfx-controls-react/lib/TreeView";
3737
selectChildrenIfParentSelected={true}
3838
showCheckboxes={true}
3939
treeItemActionsDisplayMode={TreeItemActionsDisplayMode.ContextualMenu}
40-
defaultSelectedKeys=['key1', 'key2'],
40+
defaultSelectedKeys={['key1', 'key2']},
41+
expandToSelected={true}
4142
onSelect={this.onTreeItemSelect}
4243
onExpandCollapse={this.onTreeItemExpandCollapse}
4344
onRenderItem={this.renderCustomTreeItem} />
@@ -93,6 +94,7 @@ The `TreeView` control can be configured with the following properties:
9394
| showCheckboxes | boolean | yes | Specify if the checkboxes should be displayed for selection. |
9495
| treeItemActionsDisplayMode | TreeItemActionsDisplayMode | no | Specify the display mode of the tree item actions. |
9596
| defaultSelectedKeys | string[] | no | Specify keys of items to be selected by default. |
97+
| expandToSelected | boolean | no | Specify if you want expand the parent nodes to see defaultSelectedKeys on render. |
9698
| onExpandCollapse | function | no | Defines a onExpandCollapse function to raise when the tree item has expanded or collapsed. |
9799
| onSelect | function | no | Captures the event of when the tree item selection has changed. |
98100
| onRenderItem | function | no | Optional callback to provide custom rendering of the item (default is simple text of item label and a checkbox for selection). |

src/controls/treeView/ITreeViewProps.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ export interface ITreeViewProps {
4646
*/
4747
defaultSelectedKeys?: string[];
4848

49+
/**
50+
* Specify if you want expand the parent nodes to see defaultSelectedKeys on render.
51+
*/
52+
expandToSelected?:boolean;
53+
4954
/**
5055
* Callback function called after a item is expanded / collapsed.
5156
* @argument item The expanded / collapsed item.

src/controls/treeView/TreeItem.tsx

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,12 @@ export interface ITreeItemProps {
5959
* Customize how item is rendered.
6060
*/
6161
onRenderItem?: (item: ITreeItem) => JSX.Element;
62+
63+
tobeExpandedParents:any[];
6264
}
6365

66+
67+
6468
/**
6569
* TreeItem state interface
6670
*/
@@ -97,9 +101,16 @@ export default class TreeItem extends React.Component<ITreeItemProps, ITreeItemS
97101
// Check if current item is selected
98102
let active = this.props.activeItems.filter(item => item.key === this.props.treeItem.key);
99103

104+
var expanded = this.props.defaultExpanded;
105+
if(this.props.tobeExpandedParents.indexOf(this.props.treeItem.key) != -1)
106+
{
107+
expanded = true;
108+
}
109+
100110
this.state = {
101111
selected: active.length > 0,
102-
expanded: this.props.defaultExpanded
112+
// expanded: this.props.defaultExpanded
113+
expanded: expanded
103114
};
104115

105116
// Bind control events
@@ -214,7 +225,7 @@ export default class TreeItem extends React.Component<ITreeItemProps, ITreeItemS
214225
return (
215226
<TreeItem
216227
treeItem={item}
217-
defaultExpanded={treeItem.key === item.key ? this.state.expanded : false}
228+
defaultExpanded={this.state.expanded}
218229
leftOffset={paddingLeft}
219230
selectionMode={selectionMode}
220231
activeItems={activeItems}
@@ -224,6 +235,7 @@ export default class TreeItem extends React.Component<ITreeItemProps, ITreeItemS
224235
onRenderItem={onRenderItem}
225236
showCheckboxes={showCheckboxes}
226237
treeItemActionsDisplayMode={treeItemActionsDisplayMode}
238+
tobeExpandedParents = {this.props.tobeExpandedParents}
227239
/>
228240
);
229241
});

src/controls/treeView/TreeView.tsx

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import * as telemetry from '../../common/telemetry';
1212
*/
1313
export class TreeView extends React.Component<ITreeViewProps, ITreeViewState> {
1414

15+
private tobeExpandedParents = [];
1516
/**
1617
* Constructor method
1718
* @param props properties interface
@@ -29,8 +30,36 @@ export class TreeView extends React.Component<ITreeViewProps, ITreeViewState> {
2930
// Bind control events
3031
this.handleTreeExpandCollapse = this.handleTreeExpandCollapse.bind(this);
3132
this.handleOnSelect = this.handleOnSelect.bind(this);
33+
34+
if(this.props.expandToSelected){
35+
this.props.defaultSelectedKeys.forEach(element => {
36+
this.pathTo(this.props.items, element)
37+
});
38+
console.log("tobeExpandedParents",this.tobeExpandedParents);
39+
}
40+
41+
3242
}
3343

44+
45+
private pathTo = (array, target) => {
46+
var result;
47+
array.some(({ key, children = [] }) => {
48+
if (key === target)
49+
{
50+
this.tobeExpandedParents.push(key);
51+
return result = key;
52+
}
53+
var temp = this.pathTo(children, target)
54+
if (temp)
55+
{
56+
this.tobeExpandedParents.push(key);
57+
return result = key + '.' + temp;
58+
}
59+
});
60+
return result;
61+
};
62+
3463
private getSelectedItems(treeItems: ITreeItem[], selectedKeys: string[], selectedChildren: boolean): ITreeItem[] {
3564
let selectedItems: ITreeItem[] = [];
3665

@@ -176,7 +205,8 @@ export class TreeView extends React.Component<ITreeViewProps, ITreeViewState> {
176205
selectionMode,
177206
onRenderItem,
178207
showCheckboxes,
179-
treeItemActionsDisplayMode
208+
treeItemActionsDisplayMode,
209+
defaultExpanded
180210
} = this.props;
181211

182212
return (
@@ -187,14 +217,15 @@ export class TreeView extends React.Component<ITreeViewProps, ITreeViewState> {
187217
treeItem={treeNodeItem}
188218
leftOffset={20}
189219
isFirstRender={true}
190-
defaultExpanded={true}
220+
defaultExpanded={defaultExpanded}
191221
selectionMode={selectionMode}
192222
activeItems={this.state.activeItems}
193223
parentCallbackExpandCollapse={this.handleTreeExpandCollapse}
194224
parentCallbackOnSelect={this.handleOnSelect}
195225
onRenderItem={onRenderItem}
196226
showCheckboxes={showCheckboxes}
197227
treeItemActionsDisplayMode={treeItemActionsDisplayMode}
228+
tobeExpandedParents = {this.tobeExpandedParents}
198229
/>
199230
))
200231
}

src/webparts/controlsTest/components/ControlsTest.tsx

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,47 @@ export default class ControlsTest extends React.Component<IControlsTestProps, IC
204204
{
205205
key: "8",
206206
label: "Parent 5"
207+
},
208+
{
209+
key: "9",
210+
label: "Parent 6"
211+
212+
},
213+
{
214+
key: "10",
215+
label: "Parent 7"
216+
},
217+
{
218+
key: "11",
219+
label: "Parent 8"
220+
}
221+
]
222+
},
223+
{
224+
key: "R3",
225+
label: "Root 3",
226+
children: [
227+
{
228+
key: "12",
229+
label: "Parent 9"
230+
},
231+
{
232+
key: "13",
233+
label: "Parent 10",
234+
children: [
235+
{
236+
key: "gc3",
237+
label: "Child of Parent 10"
238+
},
239+
]
240+
},
241+
{
242+
key: "14",
243+
label: "Parent 11"
244+
},
245+
{
246+
key: "15",
247+
label: "Parent 12"
207248
}
208249
]
209250
}
@@ -1071,12 +1112,13 @@ export default class ControlsTest extends React.Component<IControlsTestProps, IC
10711112
selectionMode={TreeViewSelectionMode.Multiple}
10721113
showCheckboxes={true}
10731114
treeItemActionsDisplayMode={TreeItemActionsDisplayMode.ContextualMenu}
1074-
defaultSelectedKeys={['R2', '6']}
1115+
defaultSelectedKeys={['gc1', 'gc3']}
10751116
onExpandCollapse={this.onExpandCollapseTree}
10761117
onSelect={this.onItemSelected}
1077-
// onRenderItem={this.renderCustomTreeItem}
1078-
/>
1079-
1118+
expandToSelected={true}
1119+
// onRenderItem={this.renderCustomTreeItem}
1120+
/>
1121+
10801122
</div>
10811123

10821124
<div>
@@ -1114,7 +1156,11 @@ export default class ControlsTest extends React.Component<IControlsTestProps, IC
11141156
);
11151157
}
11161158

1117-
private _getPage(page: number) {
1159+
private _getPage(page: number){
11181160
console.log('Page:', page);
11191161
}
1162+
1163+
// private _onFolderSelect = (folder: IFolder): void => {
1164+
// console.log('selected folder', folder);
1165+
// }
11201166
}

0 commit comments

Comments
 (0)