tgd-frontend/src/app/admin/components/featureflags/featureflags.component.ts

50 lines
1.7 KiB
TypeScript

import {Component, OnDestroy, OnInit} from '@angular/core';
import {ApiService, FeatureFlagStateDto} from "../../../services/api.service";
import {FeatureFlagList} from "../../../shared/featureflags";
import {takeUntil} from "rxjs/operators";
import {Subject} from "rxjs";
import {EventService} from "../../../services/event.service";
@Component({
selector: 'app-featureflags',
templateUrl: './featureflags.component.html',
styleUrls: ['./featureflags.component.scss']
})
export class FeatureflagsComponent implements OnInit, OnDestroy {
destroyed$ = new Subject<void>();
public features: FeatureFlagStateDto[] = [];
constructor(private apiService: ApiService, private eventService: EventService) {
}
ngOnDestroy(): void {
this.destroyed$.complete();
}
ngOnInit(): void {
this.eventService.featureFlagChanged.pipe(takeUntil(this.destroyed$)).subscribe(result => this.loadFeatureFlags());
this.loadFeatureFlags();
}
private loadFeatureFlags() {
FeatureFlagList.FeatureFlags.map((featureFlag) => {
this.apiService.getFeatureFlagState(featureFlag).pipe(takeUntil(this.destroyed$)).subscribe((result) => {
if(!this.features.find((x) => x.name === result.name)) {
this.features.push(result);
} else {
const index = this.features.findIndex((x) => x.name === result.name);
this.features[index] = result;
}
});
})
}
setFeatureFlag(name: string) {
const ff = this.features.find((featureFlag) => featureFlag.name === name);
let newState = false;
if(ff) {
newState = !ff.state;
}
this.apiService.setFeatureFlagState(name, newState).pipe(takeUntil(this.destroyed$)).subscribe((result) => {
this.loadFeatureFlags();
});
}
}