Skip to content

Commit 31d9758

Browse files
committed
add search tree feature
1 parent bcee943 commit 31d9758

File tree

2 files changed

+38
-2
lines changed

2 files changed

+38
-2
lines changed

src/widgets/TreeInput.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class TreeInput extends InputWidget
1717
public $selectText;
1818

1919
public $clickToOpen = true;
20+
public $search = false;
2021

2122
public function init()
2223
{
@@ -61,7 +62,12 @@ public function run()
6162

6263
if ($this->multiple) {
6364
$this->treeConfig['plugins'][] = 'checkbox';
64-
65+
}
66+
if ($this->search) {
67+
$this->treeConfig['plugins'][] = 'search';
68+
$this->treeConfig['options']['search'] = [
69+
'show_only_matches' => true,
70+
];
6571
}
6672

6773
return $this->render(
@@ -74,6 +80,7 @@ public function run()
7480
'selectText' => $this->selectText,
7581
'input' => $input,
7682
'clickToOpen' => $this->clickToOpen,
83+
'search' => $this->search,
7784
]
7885
);
7986
}

src/widgets/views/tree-input.php

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@
22
/** @var yii\web\View $this */
33
use devgroup\JsTreeWidget\widgets\TreeInputAssetBundle;
44
use devgroup\JsTreeWidget\widgets\TreeWidget;
5+
use yii\helpers\Html;
56

67
/**
78
* @var string $input
89
* @var string $id
910
* @var string $selectIcon
1011
* @var string $selectText
1112
* @var bool $multiple
13+
* @var bool $search
1214
* @var bool $clickToOpen
1315
* @var array $treeConfig
1416
*/
@@ -35,6 +37,17 @@
3537
<?= Yii::t('jstw', 'Double click needed tree node to select it') ?>
3638
</div>
3739
<?php endif;?>
40+
41+
<?php if ($search): ?>
42+
<div class="input-group">
43+
<input type="text" class="form-control tree-input__search" placeholder="<?= Html::encode(Yii::t('jstw', 'Type to search'))?>">
44+
<a href="#" class="btn btn-default input-group-addon tree-input__search-clear">
45+
<i class="fa fa-times fa-fw"></i>
46+
<?= Yii::t('jstw', 'Clear') ?>
47+
</a>
48+
</div>
49+
<?php endif; ?>
50+
3851
<?=
3952
TreeWidget::widget($treeConfig)
4053
?>
@@ -51,10 +64,26 @@
5164
<?php
5265
$clickToOpenJson = $clickToOpen ? 'true' : 'false';
5366
$js = <<<js
54-
$('#{$id}__tree').jstree('open_all');
5567
var treeInput = $('#{$id}').parent();
5668
var jstree = $('#{$id}__tree');
5769
var treeContainer = treeInput.find('.tree-input__tree-container');
70+
var search = treeContainer.find('.tree-input__search');
71+
if (search.length) {
72+
var to = false;
73+
search.keyup(function() {
74+
if(to) { clearTimeout(to); }
75+
to = setTimeout(function () {
76+
var v = search.val();
77+
jstree.jstree(true).search(v);
78+
}, 250);
79+
});
80+
81+
treeContainer.find('.tree-input__search-clear').click(function(){
82+
search.val('');
83+
jstree.jstree('clear_search');
84+
return false;
85+
});
86+
}
5887
var clickToOpen = $clickToOpenJson;
5988
if (clickToOpen) {
6089
var buttonArrow = treeInput.find('.tree-input__arrow');

0 commit comments

Comments
 (0)