This is the codeAbility Sharing Platform! Learn more about the codeAbility Sharing Platform.

Skip to content
Snippets Groups Projects
mock-search.component.ts 2.53 KiB
Newer Older
import { Component, OnInit } from '@angular/core';
import { Exercise } from 'app/shared/model/exercise.model';
import { SearchInput } from 'app/shared/model/search/search-input.model';
import { SearchService } from 'app/search/service/search-service';
import { SearchResultsDTO } from 'app/shared/model/search/search-results-dto.model';
import { SearchResultDTO } from 'app/shared/model/search/search-result-dto.model';

@Component({
  selector: 'jhi-mock-search',
  templateUrl: './mock-search.component.html',
  styleUrls: ['./mock-search.scss'],
})
export class MockSearchComponent implements OnInit {
  results: Exercise[] = [];
  selectedResult?: Exercise;
  hitCount = 0;

  private searchInput: SearchInput = new SearchInput();
  constructor(protected searchService: SearchService) {}
  selectExercise(exercise: Exercise): void {
    this.selectedResult = exercise;
  }
  updateSearchInput(searchInput: SearchInput): void {
    searchInput.page = 0;
    this.searchInput = searchInput;
    this.results = [];
    this.hitCount = 0;
  private search(): void {
    if (this.searchInput.fulltextQuery) {
      this.searchService.searchPageDetails(this.searchInput).subscribe(
        (data: SearchResultsDTO) => {
          const searchResults = this.parseSearchResultsDTO(data);
          this.results = this.results.concat(searchResults);
          ++this.searchInput.page;
        },
        () => alert('Search failed')
      );
    }
  }

  private parseSearchResultsDTO(searchResultsDTO: SearchResultsDTO): Exercise[] {
    this.hitCount += searchResultsDTO.hitCount;
    return searchResultsDTO.searchResult.map(this.searchResultToExercise);
  private searchResultToExercise(searchResult: SearchResultDTO): Exercise {
    return {
      title: searchResult.title,
      license: searchResult.license,
      description: searchResult.description,
      programmingLanguages: searchResult.programmingLanguage,
      languages: searchResult.language,
      creators: searchResult.creator,
      imageURL: searchResult.image,
      rating: 5,
      lastUpdate: '2021-01-01',
      timeRequired: searchResult.timeRequired,
      requires: searchResult.requires,
      deprecated: searchResult.deprecated,
      difficulty: searchResult.difficulty,
      educationLevel: searchResult.educationLevel,
      format: searchResult.format,
      keyword: searchResult.keyword,
      status: searchResult.status,
      type: searchResult.type,
      version: searchResult.version,

  onScroll(): void {
    this.search();
  }