diff --git a/resources/vue/components/SearchWidget.vue b/resources/vue/components/SearchWidget.vue index b583d834242786100bda06da5d7fe58df36cbc1c..4b17820b0bb55299799140af747e237b340c7bbd 100644 --- a/resources/vue/components/SearchWidget.vue +++ b/resources/vue/components/SearchWidget.vue @@ -5,7 +5,7 @@ <ul class="needles"> <li> <div class="input-group files-search"> - <input type="text" id="searchterm" name="searchterm" v-model.trim="searchterm" + <input type="text" id="searchterm" name="searchterm" v-model="searchterm" :placeholder="$gettext('Veranstaltung suchen')" :aria-label="$gettext('Veranstaltung suchen')"> <a v-if="isActive" @click.prevent="cancelSearch" class="reset-search"> @@ -13,10 +13,7 @@ </a> <button type="submit" class="submit-search" :title="$gettext('Suchen')" @click.prevent="doSearch"> - <studip-icon shape="search" - :role="maySearch ? 'clickable' : 'inactive'" - :size="20" - ></studip-icon> + <studip-icon shape="search" :size="20"></studip-icon> </button> </div> </li> @@ -36,34 +33,17 @@ export default { StudipIcon, SidebarWidget }, - props: { - minLength: { - type: Number, - default: 0, - } - }, data() { return { searchterm: '', isActive: false }; }, - computed: { - maySearch() { - return this.searchterm.length >= this.minLength; - } - }, methods: { doSearch() { - if (!this.maySearch) { - return; - } - if (this.searchterm !== '') { this.isActive = true; STUDIP.eventBus.emit('do-search', this.searchterm); - } else { - this.cancelSearch(); } }, cancelSearch() { diff --git a/resources/vue/components/tree/StudipTree.vue b/resources/vue/components/tree/StudipTree.vue index be57f16ddf116cbeaeded0c6def14d8d666ba1f8..ff493739f9823a121fc00fd54550fab639070c5c 100644 --- a/resources/vue/components/tree/StudipTree.vue +++ b/resources/vue/components/tree/StudipTree.vue @@ -31,7 +31,7 @@ <tree-search-result :search-config="searchConfig"></tree-search-result> </div> <MountingPortal v-if="withSearch" mountTo="#search-widget" name="sidebar-search"> - <search-widget :min-length="3"></search-widget> + <search-widget></search-widget> </MountingPortal> </div> </template> @@ -199,12 +199,9 @@ export default { axios.interceptors.request.eject(loadingIndicator); this.globalOn('do-search', searchterm => { - this.searchConfig = { - searchterm, - semester: this.semester, - classname: this.startNode.attributes.classname, - startId: this.currentNode.id, - }; + this.searchConfig.searchterm = searchterm; + this.searchConfig.semester = this.semester; + this.searchConfig.classname = this.startNode.attributes.classname; this.isSearching = true; }); diff --git a/resources/vue/components/tree/StudipTreeList.vue b/resources/vue/components/tree/StudipTreeList.vue index b607e02197a1bff868fe4a3ce73a0866055b7e56..0ba4b550224feaf1673af9140d6c890a2c2b4eb6 100644 --- a/resources/vue/components/tree/StudipTreeList.vue +++ b/resources/vue/components/tree/StudipTreeList.vue @@ -99,7 +99,7 @@ </tr> </tbody> </table> - <MountingPortal v-if="showExport" mountTo="#export-widget" name="sidebar-export"> + <MountingPortal v-if="withExport" mountTo="#export-widget" name="sidebar-export"> <tree-export-widget v-if="courses.length > 0" :title="$gettext('Veranstaltungen exportieren')" :url="exportUrl()" :export-data="courses"></tree-export-widget> @@ -202,11 +202,6 @@ export default { showingAllCourses: false } }, - computed: { - showExport() { - return this.withExport && document.getElementById('export-widget'); - } - }, methods: { openNode(node, pushState = true) { this.currentNode = node; diff --git a/resources/vue/components/tree/StudipTreeTable.vue b/resources/vue/components/tree/StudipTreeTable.vue index 585acd426046c1cda90ac862d5354bf105c36a96..0bfc244fb7554d8b48fdec1d034795a1d32a6226 100644 --- a/resources/vue/components/tree/StudipTreeTable.vue +++ b/resources/vue/components/tree/StudipTreeTable.vue @@ -115,7 +115,7 @@ </tr> </draggable> </table> - <MountingPortal v-if="showExport" mountTo="#export-widget" name="sidebar-export"> + <MountingPortal v-if="withExport" mountTo="#export-widget" name="sidebar-export"> <tree-export-widget v-if="courses.length > 0" :title="$gettext('Download des Ergebnisses')" :url="exportUrl()" :export-data="courses"></tree-export-widget> </MountingPortal> @@ -218,11 +218,6 @@ export default { showingAllCourses: false } }, - computed: { - showExport() { - return this.withExport && document.getElementById('export-widget'); - } - }, methods: { openNode(node, pushState = true) { this.currentNode = node; diff --git a/resources/vue/components/tree/TreeSearchResult.vue b/resources/vue/components/tree/TreeSearchResult.vue index c4e0f4155020220e1c1b86feebdd4f31d8855628..19bc6b927a4c56e57d76f6b6a0c59add4642bbab 100644 --- a/resources/vue/components/tree/TreeSearchResult.vue +++ b/resources/vue/components/tree/TreeSearchResult.vue @@ -1,8 +1,6 @@ <template> <div v-if="isLoading"> - <studip-progress-indicator v-if="showLoadingAnimation" - :description="searchDescription" - ></studip-progress-indicator> + <studip-progress-indicator></studip-progress-indicator> </div> <article v-else class="studip-tree-table"> <table v-if="courses.length > 0" class="default studip-tree-table"> @@ -47,10 +45,6 @@ </tr> </tbody> </table> - <studip-message-box v-else type="info"> - {{ $gettextInterpolate($gettext('Es wurden keine Ergebnisse zu Ihrem Suchbegriff "%{term}" gefunden.'), - { term: searchConfig.searchterm }) }} - </studip-message-box> </article> </template> @@ -60,11 +54,10 @@ import StudipProgressIndicator from '../StudipProgressIndicator.vue'; import StudipIcon from '../StudipIcon.vue'; import TreeNodeCoursePath from './TreeNodeCoursePath.vue'; import TreeCourseDetails from './TreeCourseDetails.vue'; -import StudipMessageBox from "../StudipMessageBox.vue"; export default { name: 'TreeSearchResult', - components: {StudipMessageBox, StudipIcon, StudipProgressIndicator, TreeNodeCoursePath, TreeCourseDetails }, + components: { StudipIcon, StudipProgressIndicator, TreeNodeCoursePath, TreeCourseDetails }, mixins: [ TreeMixin ], props: { searchConfig: { @@ -74,47 +67,19 @@ export default { }, data() { return { - courses: [], - isLoading: true, node: null, - showLoadingAnimation: false, - timeout: null, + isLoading: false, + isLoaded: false, + courses: [] } }, - computed: { - searchDescription() { - return this.$gettextInterpolate( - this.$gettext('Suche nach dem Begriff "%{ term }"'), - {term: this.searchConfig.searchterm} - ); - } - }, - watch: { - searchConfig: { - handler(current, previous) { - if (current.searchterm !== previous?.searchterm) { - this.isLoading = true; - - this.timeout = setTimeout( - () => this.showLoadingAnimation = true, - this.showProgressIndicatorTimeout - ); - - this.getNode(this.searchConfig.startId).then(response => { - return this.getNodeCourses(response.data.data, this.searchConfig.semester, 0, this.searchConfig.searchterm, true); - }).then(courses => { - this.courses = courses.data.data; - - clearTimeout(this.timeout); - - this.isLoading = false; - this.showLoadingAnimation = false; - }); - } - }, - immediate: true, - deep: true - } + mounted() { + this.getNode(this.searchConfig.classname + '_root').then(response => { + this.getNodeCourses(response.data.data, this.searchConfig.semester,0, this.searchConfig.searchterm, true) + .then(courses => { + this.courses = courses.data.data; + }); + }); } } </script> diff --git a/resources/vue/mixins/TreeMixin.js b/resources/vue/mixins/TreeMixin.js index 9c4c859d7b092aba832c53186e52bb669b4c6a7b..1e72bbedfbc6815671b4f642873b36db2bf37d8f 100644 --- a/resources/vue/mixins/TreeMixin.js +++ b/resources/vue/mixins/TreeMixin.js @@ -37,7 +37,7 @@ export const TreeMixin = { parameters['filter[semclass]'] = semClass; } - if (node.attributes['has-children'] && recursive) { + if (recursive) { parameters['filter[recursive]'] = true; }