import { MwHttpService } from 'projects/core/src//http'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { environment } from 'projects/core/src//environment'; import { catchError, map } from 'rxjs/operators'; import { CompanySettingsApiModel } from '../models/company.model'; import { UserPreferenceViewModel, MwCorePreferenceModel, } from '../models/preference.model'; import { FeatureFlagViewModel } from '../models/feature-flag.model'; import { MwCorePreferenceService } from './preference.service'; @Injectable() export class MwCompanyApiService { constructor( private http: MwHttpService, private preferenceService: MwCorePreferenceService ) {} hasLogo(companyId: number): Observable { return this.http.authGet( `/integration/v1/companies/${companyId}/hasLogo` ); } getSettings(companyId: number): Observable { return this.http.authGet( `/integration/v1/companies/${companyId}/settings` ); } hasFeatureFlag(key: string, companyId: number): Observable { return this.http .authGet( `/integration/v1/companies/${companyId}/featureFlags/has/${key}`, { ignoreNotifyStatusCodes: [404], } ) .pipe( catchError(() => this.getFeatureFlag(key, companyId).pipe( map((t) => t.featureFlagId > 0) ) ) ); } getFeatureFlag( key: string, companyId: number ): Observable { const endpoint = companyId > 0 ? `/integration/v1/companies/${companyId}/featureFlags` : '/integration/v1/featureFlags'; const query = `?$select=FeatureFlagId&$filter=Key eq '${key}'`; return this.http .authGet(endpoint + query) .pipe(map((featureFlags) => featureFlags[0])); } savePreference(data: any): Observable { const key = environment.preferenceKey.general; if (typeof data !== 'string') { data = JSON.stringify(data); } const preference: UserPreferenceViewModel = { key, data, }; return this.http.authPost( `/integration/v1/Companies/{companyId}/Users/preference`, { body: preference } ); } getPreferences(companyId: number): Observable { const filter = `$filter=` + `(Key eq '${environment.preferenceKey.general}')`; return this.loadFilteredPreference(companyId, filter).pipe( map((t) => t[0] && this.parseJson(t[0].data)), map((t) => this.preferenceService.map(t)) ); } clearAllPreference(): Observable { return this.http.authDelete( `/integration/v1/Companies/{companyId}/Users/preference` ); } private loadFilteredPreference( companyId: number, oDataFilter: string ): Observable { return this.http.authGet( `/integration/v1/Companies/${companyId}/Users/preference?${oDataFilter}` ); } private parseJson(value: string): any { if (value) { try { return JSON.parse(value); } catch {} } return {}; } }