Add timer to reduce fetch.
This commit is contained in:
		
							parent
							
								
									fa75292e22
								
							
						
					
					
						commit
						22b8b212e5
					
				| 
						 | 
				
			
			@ -1,33 +1,45 @@
 | 
			
		|||
var typingTimer;
 | 
			
		||||
var doneTypingInterval = 500;
 | 
			
		||||
 | 
			
		||||
var app = new Vue({
 | 
			
		||||
  el: '#app',
 | 
			
		||||
  data: {
 | 
			
		||||
    searchTerms: '',
 | 
			
		||||
    hits: [],
 | 
			
		||||
    new_depicts: [],
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    remove(index) {
 | 
			
		||||
        this.$delete(this.new_depicts, index);
 | 
			
		||||
    el: '#app',
 | 
			
		||||
    data: {
 | 
			
		||||
        prevTerms: '',
 | 
			
		||||
        searchTerms: '',
 | 
			
		||||
        hits: [],
 | 
			
		||||
        new_depicts: [],
 | 
			
		||||
    },
 | 
			
		||||
    add_depicts(hit) {
 | 
			
		||||
      this.new_depicts.push(hit);
 | 
			
		||||
      this.hits = [];
 | 
			
		||||
      this.searchTerms = '';
 | 
			
		||||
    methods: {
 | 
			
		||||
        remove(index) {
 | 
			
		||||
                this.$delete(this.new_depicts, index);
 | 
			
		||||
        },
 | 
			
		||||
        add_depicts(hit) {
 | 
			
		||||
            this.new_depicts.push(hit);
 | 
			
		||||
            this.hits = [];
 | 
			
		||||
            this.searchTerms = '';
 | 
			
		||||
        },
 | 
			
		||||
        run_search() {
 | 
			
		||||
            var terms = this.searchTerms;
 | 
			
		||||
            if (terms == this.prevTerms) {
 | 
			
		||||
                return;  // no change
 | 
			
		||||
            }
 | 
			
		||||
            this.prevTerms = terms;
 | 
			
		||||
            if (terms.length < 3) {
 | 
			
		||||
                this.hits = [];
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var vm = this;
 | 
			
		||||
 | 
			
		||||
            fetch(lookup_url + '?terms=' + encodeURI(terms))
 | 
			
		||||
                .then((res) => res.json())
 | 
			
		||||
                .then((data) => {
 | 
			
		||||
                    vm.hits = data.hits;
 | 
			
		||||
                })
 | 
			
		||||
        },
 | 
			
		||||
        search(event) {
 | 
			
		||||
            clearTimeout(typingTimer);
 | 
			
		||||
            typingTimer = setTimeout(this.run_search, doneTypingInterval);
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    search(event) {
 | 
			
		||||
      var terms = this.searchTerms;
 | 
			
		||||
      if (terms.length < 3) {
 | 
			
		||||
        this.hits = [];
 | 
			
		||||
        return;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      var vm = this;
 | 
			
		||||
 | 
			
		||||
      fetch(lookup_url + '?terms=' + encodeURI(terms))
 | 
			
		||||
        .then((res) => res.json())
 | 
			
		||||
        .then((data) => {
 | 
			
		||||
          vm.hits = data.hits;
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue