Commit 10812270 authored by Sonia Zorba's avatar Sonia Zorba
Browse files

Generic search improvements: added checkboxes for filtering on users or groups

parent d245dfa9
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -325,7 +325,9 @@ export default {
  },
  },
  search(input) {
  search(input) {
    let url = BASE_API_URL + 'search?query=' + input.genericSearch.filter +
    let url = BASE_API_URL + 'search?query=' + input.genericSearch.filter +
      '&page=' + input.genericSearch.paginatorPage + '&pageSize=' + input.genericSearch.paginatorPageSize;
      '&paginatorPage=' + input.genericSearch.paginatorPage +
      '&paginatorPageSize=' + input.genericSearch.paginatorPageSize +
      '&users=' + input.genericSearch.users + "&groups=" + input.genericSearch.groups;


    return apiRequest({
    return apiRequest({
      method: 'GET',
      method: 'GET',
+11 −2
Original line number Original line Diff line number Diff line
<template>
<template>
<div class="mt-sm-3">
<div class="mt-sm-3">
  <b-form inline>
    Includes:
    <b-form-checkbox class="ml-4" v-model="input.genericSearch.users" @input="updateTypeFilter">users</b-form-checkbox>
    <b-form-checkbox class="ml-4" v-model="input.genericSearch.groups" @input="updateTypeFilter">groups</b-form-checkbox>
  </b-form>
  <div>
  <div>
    <div v-if="model.genericSearchResults.items && model.genericSearchResults.items.length > 0">
    <div v-if="model.genericSearchResults.items && model.genericSearchResults.items.length > 0">
      <p>Search results:</p>
      <p>Search results:</p>
@@ -40,7 +45,7 @@ export default {
    '$route': 'updateSearchResults'
    '$route': 'updateSearchResults'
  },
  },
  methods: {
  methods: {
    openSearchResult: function(result) {
    openSearchResult(result) {
      switch (result.type) {
      switch (result.type) {
        case 'GROUP':
        case 'GROUP':
          this.$store.dispatch('openGroup', result.id);
          this.$store.dispatch('openGroup', result.id);
@@ -50,7 +55,11 @@ export default {
          break;
          break;
      }
      }
    },
    },
    updateSearchResults: function() {
    updateTypeFilter() {
      this.input.genericSearch.paginatorPage = 1;
      this.updateSearchResults();
    },
    updateSearchResults() {
      this.$store.dispatch('search', this.$route.query.q);
      this.$store.dispatch('search', this.$route.query.q);
    }
    }
  }
  }
+2 −4
Original line number Original line Diff line number Diff line
@@ -12,7 +12,7 @@
        <b-nav-item href="help/index.html" target="blank_" class="mr-4">Help</b-nav-item>
        <b-nav-item href="help/index.html" target="blank_" class="mr-4">Help</b-nav-item>
        <b-nav-form>
        <b-nav-form>
          <b-form-input size="sm" class="mr-sm-2" placeholder="Search" v-model.trim="input.genericSearch.filter" @keydown.native.enter.prevent="genericSearch"></b-form-input>
          <b-form-input size="sm" class="mr-sm-2" placeholder="Search" v-model.trim="input.genericSearch.filter" @keydown.native.enter.prevent="genericSearch"></b-form-input>
          <b-button size="sm" class="my-2 my-sm-0" type="button" v-on:click="genericSearch()">Search</b-button>
          <b-button size="sm" type="button" v-on:click="genericSearch()">Search</b-button>
        </b-nav-form>
        </b-nav-form>
        <b-nav-item-dropdown :text="user" right v-if="user">
        <b-nav-item-dropdown :text="user" right v-if="user">
          <b-dropdown-item href="logout">Logout</b-dropdown-item>
          <b-dropdown-item href="logout">Logout</b-dropdown-item>
@@ -39,10 +39,8 @@ export default {
      this.$router.push('/', () => {});
      this.$router.push('/', () => {});
    },
    },
    genericSearch() {
    genericSearch() {
      this.input.genericSearch.page = 1;
      this.input.genericSearch.pageSize = 20;
      this.$router.push({ path: '/search', query: { q: this.input.genericSearch.filter } }, () => {});
      this.$router.push({ path: '/search', query: { q: this.input.genericSearch.filter } }, () => {});
      this.$store.dispatch('search', this.input.genericSearch.filter);
      this.$store.commit('setGenericSearchFilter', this.input.genericSearch.filter);
    }
    }
  }
  }
}
}
+10 −2
Original line number Original line Diff line number Diff line
@@ -36,7 +36,9 @@ export default new Vuex.Store({
      genericSearch: {
      genericSearch: {
        filter: '',
        filter: '',
        paginatorPage: 1,
        paginatorPage: 1,
        paginatorPageSize: 20
        paginatorPageSize: 20,
        users: true,
        groups: true
      }
      }
    },
    },
    loading: false
    loading: false
@@ -97,6 +99,10 @@ export default new Vuex.Store({
    },
    },
    setGenericSearchFilter(state, filter) {
    setGenericSearchFilter(state, filter) {
      state.input.genericSearch.filter = filter;
      state.input.genericSearch.filter = filter;
      state.input.genericSearch.paginatorPage = 1;
      state.input.genericSearch.paginatorPageSize = 20;
      state.input.genericSearch.users = true;
      state.input.genericSearch.groups = true;
    },
    },
    removeInvitedRegistration(state, regId) {
    removeInvitedRegistration(state, regId) {
      let index = -1;
      let index = -1;
@@ -117,7 +123,9 @@ export default new Vuex.Store({
        .then(model => commit('updateHomePageModel', model));
        .then(model => commit('updateHomePageModel', model));
    },
    },
    search({ commit, state }, filter) {
    search({ commit, state }, filter) {
      if (state.input.genericSearch.filter !== filter) {
        commit('setGenericSearchFilter', filter);
        commit('setGenericSearchFilter', filter);
      }
      client.search(state.input)
      client.search(state.input)
        .then(results => commit('displaySearchResults', results));
        .then(results => commit('displaySearchResults', results));
    },
    },
+4 −5
Original line number Original line Diff line number Diff line
package it.inaf.ia2.gms.controller;
package it.inaf.ia2.gms.controller;


import it.inaf.ia2.gms.model.request.GenericSearchRequest;
import it.inaf.ia2.gms.model.response.PaginatedData;
import it.inaf.ia2.gms.model.response.PaginatedData;
import it.inaf.ia2.gms.model.response.SearchResponseItem;
import it.inaf.ia2.gms.model.response.SearchResponseItem;
import it.inaf.ia2.gms.model.response.UserSearchResponse;
import it.inaf.ia2.gms.model.response.UserSearchResponse;
import it.inaf.ia2.gms.service.SearchService;
import it.inaf.ia2.gms.service.SearchService;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RestController
@@ -23,10 +24,8 @@ public class SearchController {
    private SearchService searchService;
    private SearchService searchService;


    @GetMapping(value = "/search", produces = MediaType.APPLICATION_JSON_VALUE)
    @GetMapping(value = "/search", produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<PaginatedData<SearchResponseItem>> getSearchResults(@RequestParam("query") String query,
    public ResponseEntity<PaginatedData<SearchResponseItem>> getSearchResults(@Valid GenericSearchRequest searchRequest) {
            @RequestParam("page") int page, @RequestParam("pageSize") int pageSize) {
        PaginatedData<SearchResponseItem> response = searchService.search(searchRequest, servletRequest.getUserPrincipal().getName());

        PaginatedData<SearchResponseItem> response = searchService.search(query, servletRequest.getUserPrincipal().getName(), page, pageSize);
        return ResponseEntity.ok(response);
        return ResponseEntity.ok(response);
    }
    }


Loading