Skip to content

Commit ff9bfdb

Browse files
author
pkempenaers
committed
Add openFolderWhenInnerSelected
1 parent e1f564a commit ff9bfdb

File tree

4 files changed

+33
-3
lines changed

4 files changed

+33
-3
lines changed

src/app/component/dropdownTree.controller.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
],
5959
appendToElement: this.$element.children(),
6060
foldersOpen: true,
61+
openFolderWhenInnerSelected: false,
6162
};
6263

6364
this.settings = angular.extend({}, this.defaultSettings);

src/app/component/dropdownTree.service.js

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,16 @@ export default class DropdownTreeService {
1111
angular.isArray(option[settings.childrenProperty]);
1212
}
1313

14-
shouldFolderBeOpen(folder, settings) {
15-
return settings.foldersOpen;
14+
shouldFolderBeOpen(folder, settings, selection) {
15+
// always open when foldersOpen is true
16+
if (settings.foldersOpen) {
17+
return settings.foldersOpen;
18+
}
19+
// always closed when not open when innerselected
20+
if (!settings.openFolderWhenInnerSelected) {
21+
return false;
22+
}
23+
return this.hasInnerSelection(folder, settings, selection);
1624
}
1725

1826
getChildOptions(option, settings) {
@@ -36,6 +44,18 @@ export default class DropdownTreeService {
3644
return true;
3745
}
3846

47+
hasInnerSelection(option, settings, selection) {
48+
if (this.isFolder(option, settings)) {
49+
return this.getChildOptions(option, settings).some((childOption) => {
50+
if (selection.indexOf(childOption) >= 0) {
51+
return true;
52+
}
53+
return this.hasInnerSelection(childOption, settings, selection);
54+
});
55+
}
56+
return false;
57+
}
58+
3959
getSelection(options, settings, searchText) {
4060
let selection = [];
4161

src/app/component/option-row/option-row.controller.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66

77
this.dropdownTreeService = dropdownTreeService;
88
if (this.isFolder()) {
9-
this.isOpen = this.dropdownTreeService.shouldFolderBeOpen(this.option, this.settings);
9+
this.isOpen = this.dropdownTreeService
10+
.shouldFolderBeOpen(this.option, this.settings, this.selectedOptions);
1011
}
1112
}
1213

src/app/main/main.template.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,14 @@ <h3>Settings</h3>
269269
Defines if all folders should be open by default.
270270
</td>
271271
</tr>
272+
<tr>
273+
<td>openFolderWhenInnerSelected</td>
274+
<td>false</td>
275+
<td>boolean</td>
276+
<td>
277+
Only applicable when foldersOpen set to false. Will still open a folder when a child is selected.
278+
</td>
279+
</tr>
272280
</tbody>
273281
</table>
274282
</div>

0 commit comments

Comments
 (0)