minor refactoring and moved install logic to new install service
parent
31f9e04c25
commit
0a6f13a56a
|
@ -3,48 +3,94 @@ import { Injectable } from '@angular/core';
|
||||||
|
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { Subject } from "rxjs/internal/Subject";
|
import { Subject } from "rxjs/internal/Subject";
|
||||||
|
import { tap } from "rxjs/operators";
|
||||||
|
|
||||||
export class Skill {
|
export interface AvailableSkill {
|
||||||
id: number;
|
icon: Object;
|
||||||
credits: 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[];
|
categories: string[];
|
||||||
|
credits: SkillCredits[];
|
||||||
description: string;
|
description: string;
|
||||||
icon: Object;
|
icon: Object;
|
||||||
icon_image: string;
|
iconImage: string;
|
||||||
installed: boolean;
|
isSystemSkill: boolean;
|
||||||
title: string;
|
name: string;
|
||||||
|
platforms: string[];
|
||||||
|
repositoryUrl: string;
|
||||||
summary: string;
|
summary: string;
|
||||||
repository_url: string;
|
title: string;
|
||||||
triggers: string;
|
triggers: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const availableSkillsUrl = '/api/skill/available';
|
||||||
|
const skillUrl = '/api/skill/detail/';
|
||||||
|
const searchQuery = '?search=';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class SkillsService {
|
export class SkillsService {
|
||||||
private installUrl = '/api/install';
|
public availableSkills: AvailableSkill[];
|
||||||
private skillUrl = '/api/skill/';
|
|
||||||
private skillsUrl = '/api/skills';
|
|
||||||
private searchQuery = '?search=';
|
|
||||||
public isFiltered = new Subject<boolean>();
|
public isFiltered = new Subject<boolean>();
|
||||||
|
|
||||||
constructor(private http: HttpClient) { }
|
constructor(private http: HttpClient) { }
|
||||||
|
|
||||||
getAllSkills(): Observable<Skill[]> {
|
getAvailableSkills(): Observable<AvailableSkill[]> {
|
||||||
return this.http.get<Skill[]>(this.skillsUrl)
|
return this.http.get<AvailableSkill[]>(availableSkillsUrl).pipe(
|
||||||
|
tap((skills) => {this.availableSkills = skills;})
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
getSkillById(id: string): Observable<Skill> {
|
getSkillCategories(): string[] {
|
||||||
return this.http.get<Skill>(this.skillUrl + id)
|
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')
|
||||||
}
|
}
|
||||||
|
|
||||||
searchSkills(searchTerm: string): Observable<Skill[]> {
|
return orderedSkillCategories;
|
||||||
|
}
|
||||||
|
|
||||||
|
getSkillById(skillName: string): Observable<SkillDetail> {
|
||||||
|
return this.http.get<SkillDetail>(skillUrl + skillName)
|
||||||
|
}
|
||||||
|
|
||||||
|
searchSkills(searchTerm: string): Observable<AvailableSkill[]> {
|
||||||
this.isFiltered.next(!!searchTerm);
|
this.isFiltered.next(!!searchTerm);
|
||||||
return this.http.get<Skill[]>(this.skillsUrl + this.searchQuery + searchTerm)
|
return this.http.get<AvailableSkill[]>(
|
||||||
}
|
availableSkillsUrl + searchQuery + searchTerm
|
||||||
|
|
||||||
installSkill(skill: Skill): Observable<Object> {
|
|
||||||
return this.http.put<Object>(
|
|
||||||
this.installUrl,
|
|
||||||
{skill_url: skill.repository_url}
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue