diff --git a/web_src/js/components/DiscussionTree.vue b/web_src/js/components/DiscussionTree.vue index 835d16137d4de..33678a07963e1 100644 --- a/web_src/js/components/DiscussionTree.vue +++ b/web_src/js/components/DiscussionTree.vue @@ -2,12 +2,14 @@ import DiscussionTreeItem from './DiscussionTreeItem.vue'; import {discussionTreeStore} from '../modules/stores.js'; import {setFileFolding} from '../features/file-fold.js'; +import {debounce} from 'lodash'; export default { components: {DiscussionTreeItem}, data: () => { return { - store: discussionTreeStore() + localSearchInput: '', + store: discussionTreeStore(), }; }, computed: { @@ -15,6 +17,9 @@ export default { const result = []; for (const file of this.store.files) { // Split file into directories + const filterEnabled = this.store.searchInput.length !== 0; + + if (filterEnabled && !file.Name.includes(this.store.searchInput)) continue; const names = file.Name.split('/'); let index = 0; let parent = null; @@ -99,13 +104,19 @@ export default { } }, }, + watch: { + localSearchInput: debounce(function (value) { + this.store.searchInput = value; + }, 33); + } }; @@ -116,4 +127,16 @@ export default { gap: 1px; margin-right: .5rem; } + +.search-input { + border: 1px solid #d0d7de; + border-radius: 5px; + width: 100%; + padding: 5px; + margin-bottom: 6px; +} + +.search-input::placeholder { + font-size: 12px; +} diff --git a/web_src/js/components/DiscussionTreeItem.vue b/web_src/js/components/DiscussionTreeItem.vue index 3be24f0aeaa65..75934aaae050b 100644 --- a/web_src/js/components/DiscussionTreeItem.vue +++ b/web_src/js/components/DiscussionTreeItem.vue @@ -29,9 +29,9 @@ export default {
- {{ item.name }} +
@@ -52,10 +52,6 @@ a, a:hover { border-left: 1px solid var(--color-secondary); } -.sub-items .item-file { - padding-left: 18px; -} - .item-file.selected { color: var(--color-text); background: var(--color-active); diff --git a/web_src/js/modules/stores.js b/web_src/js/modules/stores.js index 51c2e675d17bd..ba1bef9c8456f 100644 --- a/web_src/js/modules/stores.js +++ b/web_src/js/modules/stores.js @@ -117,6 +117,7 @@ export function discussionTreeStore() { selectedItem: null, contents: [], checkedItems: [], + searchInput: '' }); window.config.pageData.discussionTreeInfo = discussionTreeStoreReactive; }