From 0a6f13a56a6a6f24ca1df4152a08318fe0dc406c Mon Sep 17 00:00:00 2001 From: Chris Veilleux Date: Mon, 22 Oct 2018 21:48:50 -0500 Subject: [PATCH] minor refactoring and moved install logic to new install service --- .../src/app/skills/skills.service.ts | 92 ++++++++++++++----- 1 file changed, 69 insertions(+), 23 deletions(-) diff --git a/market/frontend/v1/market-ui/src/app/skills/skills.service.ts b/market/frontend/v1/market-ui/src/app/skills/skills.service.ts index ac84b35c..0a9d57a4 100644 --- a/market/frontend/v1/market-ui/src/app/skills/skills.service.ts +++ b/market/frontend/v1/market-ui/src/app/skills/skills.service.ts @@ -3,48 +3,94 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { Subject } from "rxjs/internal/Subject"; +import { tap } from "rxjs/operators"; -export class Skill { - id: number; - credits: Object; +export interface AvailableSkill { + icon: Object; + iconImage: string; + isMycroftMade: boolean; + isSystemSkill: boolean; + marketCategory: string; + name: string; + summary: string; + title: string; + trigger: string; +} + +export interface SkillCredits { + name: string; + github_id: string; +} + +export interface SkillDetail { categories: string[]; + credits: SkillCredits[]; description: string; icon: Object; - icon_image: string; - installed: boolean; - title: string; + iconImage: string; + isSystemSkill: boolean; + name: string; + platforms: string[]; + repositoryUrl: string; summary: string; - repository_url: string; + title: string; triggers: string; } +const availableSkillsUrl = '/api/skill/available'; +const skillUrl = '/api/skill/detail/'; +const searchQuery = '?search='; + @Injectable() export class SkillsService { - private installUrl = '/api/install'; - private skillUrl = '/api/skill/'; - private skillsUrl = '/api/skills'; - private searchQuery = '?search='; + public availableSkills: AvailableSkill[]; public isFiltered = new Subject(); constructor(private http: HttpClient) { } - getAllSkills(): Observable { - return this.http.get(this.skillsUrl) + getAvailableSkills(): Observable { + return this.http.get(availableSkillsUrl).pipe( + tap((skills) => {this.availableSkills = skills;}) + ) } - getSkillById(id: string): Observable { - return this.http.get(this.skillUrl + id) + getSkillCategories(): string[] { + let orderedSkillCategories: string[] = [], + skillCategories: string[] = [], + systemCategoryFound: boolean = false; + this.availableSkills.forEach( + (skill) => { + if (!skillCategories.includes(skill.marketCategory)) { + skillCategories.push(skill.marketCategory);} + } + ); + skillCategories.sort(); + + // Make the "System" category display last, if it exists + skillCategories.forEach( + category => { + if (category === 'System') { + systemCategoryFound = true; + } else { + orderedSkillCategories.push(category) + } + } + ); + if (systemCategoryFound) { + orderedSkillCategories.push('System') + } + + return orderedSkillCategories; } - searchSkills(searchTerm: string): Observable { + getSkillById(skillName: string): Observable { + return this.http.get(skillUrl + skillName) + } + + searchSkills(searchTerm: string): Observable { this.isFiltered.next(!!searchTerm); - return this.http.get(this.skillsUrl + this.searchQuery + searchTerm) - } - - installSkill(skill: Skill): Observable { - return this.http.put( - this.installUrl, - {skill_url: skill.repository_url} + return this.http.get( + availableSkillsUrl + searchQuery + searchTerm ) } }