/
tisit
/
FUXA_SCADA
Обзор
Документация
Войти
/
tisit
/
FUXA_SCADA
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
client/src/app/_services/plugin.service.ts
73 строки
3 KB
Umberto Nocelli
New Feature: Node-Red Integration for FUXA - by @MatthewReed303 (#1993)
27 окт 2025, 01:30
Не верифицирован
27 окт 2025, 01:30
9db0b3f
Код
Авторство
О чём код?
import { Injectable, Output, EventEmitter } from '@angular/core'; import { HttpClient, HttpHeaders } from '@angular/common/http'; import { map, Observable } from 'rxjs'; import { EndPointApi } from '../_helpers/endpointapi'; import { Plugin } from '../_models/plugin'; import { environment } from '../../environments/environment'; @Injectable({ providedIn: 'root' }) export class PluginService { @Output() onPluginsChanged: EventEmitter<any> = new EventEmitter(); private endPointConfig: string = EndPointApi.getURL(); constructor(private http: HttpClient) { } getPlugins() { return this.http.get<Plugin[]>(this.endPointConfig + '/api/plugins'); } installPlugin(plugin: Plugin) { return new Observable((observer) => { if (environment.serverEnabled) { let header = new HttpHeaders({ 'Content-Type': 'application/json' }); this.http.post<any>(this.endPointConfig + '/api/plugins', { headers: header, params: plugin }).subscribe(result => { observer.next(null); this.onPluginsChanged.emit(); }, err => { console.error(err); observer.error(err); }); } else { observer.next(null); } }); } removePlugin(plugin: Plugin) { return new Observable((observer) => { if (environment.serverEnabled) { let header = new HttpHeaders({ 'Content-Type': 'application/json' }); this.http.delete<any>(this.endPointConfig + '/api/plugins', { headers: header, params: { param: plugin.name } }).subscribe(result => { observer.next(null); this.onPluginsChanged.emit(); }, err => { console.error(err); observer.error(err); }); } else { observer.next(null); } }); } hasPlugin$(needle: string, requireEnabled = false): Observable<boolean> { const n = needle.toLowerCase(); return this.getPlugins().pipe( map(list => list.some(p => { const name = (p.name ?? '').toLowerCase(); const matches = name.includes(n); return requireEnabled ? (matches && p.current) : matches; })) ); } hasNodeRed$(requireEnabled = false): Observable<boolean> { return this.hasPlugin$('node-red', requireEnabled); } }