diff --git a/backend/packages/Upgrade/test/integration/FeatureFlags/FeatureFlagInclusionExclusion.ts b/backend/packages/Upgrade/test/integration/FeatureFlags/FeatureFlagInclusionExclusion.ts index 914a97cc4b..535cdf9c0f 100644 --- a/backend/packages/Upgrade/test/integration/FeatureFlags/FeatureFlagInclusionExclusion.ts +++ b/backend/packages/Upgrade/test/integration/FeatureFlags/FeatureFlagInclusionExclusion.ts @@ -23,7 +23,7 @@ export default async function FeatureFlagInclusionExclusionLogic(): Promise { - // in non-prod build, all env vars can be provided on .environment.ts, - // so skip fetch - if (!environment.production || (environment.apiBaseUrl && environment.googleClientId)) { - return () => Promise.resolve(); - } - - // in a prod build, we currently need to fetch environment.json at runtime - // to provide apiBaseUr, googleClientId, featureFlagNavToggle, segmentsRefreshToggle and withinSubjectExperimentSupportToggle - return () => - http - .get('/environment.json') - .toPromise() - .then((config: RuntimeEnvironmentConfig) => { - env.apiBaseUrl = config.endpointApi || config.apiBaseUrl; - env.googleClientId = config.gapiClientId || config.googleClientId; - env.featureFlagNavToggle = config.featureFlagNavToggle ?? env.featureFlagNavToggle ?? false; - env.segmentsRefreshToggle = config.segmentsRefreshToggle ?? env.segmentsRefreshToggle ?? false; - env.withinSubjectExperimentSupportToggle = - config.withinSubjectExperimentSupportToggle ?? env.withinSubjectExperimentSupportToggle ?? false; - env.errorLogsToggle = config.errorLogsToggle ?? env.errorLogsToggle ?? false; - env.metricAnalyticsExperimentDisplayToggle = - config.metricAnalyticsExperimentDisplayToggle ?? env.metricAnalyticsExperimentDisplayToggle ?? false; - }) - .catch((error) => { - console.log({ error }); - }); -}; - @NgModule({ declarations: [AppComponent], bootstrap: [AppComponent], @@ -69,10 +40,6 @@ export const getEnvironmentConfig = (http: HttpClient, env: Environment) => { ], providers: [ { provide: ENV, useValue: environment }, - provideAppInitializer(() => { - const initializerFn = getEnvironmentConfig(inject(HttpClient), inject(ENV)); - return initializerFn(); - }), provideHttpClient(withInterceptorsFromDi()), ...provideImportServiceTypeAdapters(), ], diff --git a/frontend/projects/upgrade/src/app/features/dashboard/dashboard-root/dashboard-root.component.ts b/frontend/projects/upgrade/src/app/features/dashboard/dashboard-root/dashboard-root.component.ts index 9e5e89e8b4..4038e33357 100644 --- a/frontend/projects/upgrade/src/app/features/dashboard/dashboard-root/dashboard-root.component.ts +++ b/frontend/projects/upgrade/src/app/features/dashboard/dashboard-root/dashboard-root.component.ts @@ -19,6 +19,11 @@ export class DashboardRootComponent implements OnInit { text: 'global.experiment.title', iconType: 'assignment', }, + { + path: ['/featureflags'], + text: 'feature-flags.title.text', + iconType: 'toggle_on', + }, { path: ['/participants'], text: 'global.experiment-user.title', @@ -36,15 +41,7 @@ export class DashboardRootComponent implements OnInit { }, ]; - constructor( - @Inject(ENV) private environment: Environment, - private authService: AuthService, - private versionService: VersionService - ) { - if (this.environment.featureFlagNavToggle) { - this.addFeatureFlagsLink(); - } - } + constructor(private authService: AuthService, private versionService: VersionService) {} logout() { this.authService.setRedirectionUrl('/home'); @@ -54,12 +51,4 @@ export class DashboardRootComponent implements OnInit { async ngOnInit() { this.serverVersion = 'v' + (await this.versionService.getVersion()); } - - addFeatureFlagsLink() { - this.routeLinks.splice(1, 0, { - path: ['/featureflags'], - text: 'feature-flags.title.text', - iconType: 'toggle_on', - }); - } } diff --git a/frontend/projects/upgrade/src/app/features/dashboard/feature-flags-legacy/feature-flags-root/feature-flags-root.component.ts b/frontend/projects/upgrade/src/app/features/dashboard/feature-flags-legacy/feature-flags-root/feature-flags-root.component.ts deleted file mode 100644 index b85d51e50d..0000000000 --- a/frontend/projects/upgrade/src/app/features/dashboard/feature-flags-legacy/feature-flags-root/feature-flags-root.component.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core'; -import { FeatureFlagsService } from '../../../../core/feature-flags/feature-flags.service'; -import { MatDialog } from '@angular/material/dialog'; -import { NewFlagComponent } from '../components/modal/new-flag/new-flag.component'; -import { UserPermission } from '../../../../core/auth/store/auth.models'; -import { Observable } from 'rxjs'; -import { AuthService } from '../../../../core/auth/auth.service'; - -@Component({ - selector: 'app-feature-flags-root', - templateUrl: './feature-flags-root.component.html', - styleUrls: ['./feature-flags-root.component.scss'], - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class FeatureFlagsRootComponent implements OnInit { - permissions$: Observable; - isLoadingFeatureFlags$ = this.featureFlagsService.isInitialFeatureFlagsLoading$; - featureFlags$ = this.featureFlagsService.allFeatureFlags$; - constructor( - private featureFlagsService: FeatureFlagsService, - private dialog: MatDialog, - private authService: AuthService - ) {} - - ngOnInit() { - this.permissions$ = this.authService.userPermissions$; - this.featureFlagsService.fetchFeatureFlags(true); - } - - openNewFlagDialog() { - this.dialog.open(NewFlagComponent, { - panelClass: 'new-flag-modal', - }); - } -} diff --git a/frontend/projects/upgrade/src/app/shared/shared.module.ts b/frontend/projects/upgrade/src/app/shared/shared.module.ts index ed272621d8..ae72779a8f 100755 --- a/frontend/projects/upgrade/src/app/shared/shared.module.ts +++ b/frontend/projects/upgrade/src/app/shared/shared.module.ts @@ -29,8 +29,6 @@ import { MatDialogModule } from '@angular/material/dialog'; import { MatStepperModule } from '@angular/material/stepper'; import { MatRadioModule } from '@angular/material/radio'; import { MatExpansionModule } from '@angular/material/expansion'; -import { DevToolsModule } from '../../dev-tools/dev-tools.module'; - import { SharedIconsComponent } from './components/shared-icons/shared-icons.component'; import { TruncatePipe } from './pipes/truncate.pipe'; import { ExperimentStatePipe } from './pipes/experiment-state.pipe'; @@ -42,8 +40,6 @@ import { QueryResultComponent } from './components/query-result/query-result.com import { DeleteComponent } from './components/delete/delete.component'; import { MatConfirmDialogComponent } from './components/mat-confirm-dialog/mat-confirm-dialog.component'; -import { environment } from '../../environments/environment'; - @NgModule({ imports: [ CommonModule, @@ -74,7 +70,6 @@ import { environment } from '../../environments/environment'; MatProgressSpinnerModule, MatAutocompleteModule, MatTreeModule, - environment.production ? [] : DevToolsModule, ], declarations: [ SharedIconsComponent, @@ -128,7 +123,6 @@ import { environment } from '../../environments/environment'; DeleteComponent, SegmentStatusPipe, MatConfirmDialogComponent, - environment.production ? [] : DevToolsModule, ], }) export class SharedModule {} diff --git a/frontend/projects/upgrade/src/dev-tools/dev-tools.module.ts b/frontend/projects/upgrade/src/dev-tools/dev-tools.module.ts deleted file mode 100644 index adaa2d4a64..0000000000 --- a/frontend/projects/upgrade/src/dev-tools/dev-tools.module.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { KeyValueBubbleComponent } from './key-value-bubble/key-value-bubble.component'; -import { DragDropModule } from '@angular/cdk/drag-drop'; - -@NgModule({ - declarations: [KeyValueBubbleComponent], - imports: [CommonModule, DragDropModule], - exports: [KeyValueBubbleComponent, DragDropModule], -}) -export class DevToolsModule {} diff --git a/frontend/projects/upgrade/src/dev-tools/key-value-bubble/README.md b/frontend/projects/upgrade/src/dev-tools/key-value-bubble/README.md deleted file mode 100644 index eb9b59463f..0000000000 --- a/frontend/projects/upgrade/src/dev-tools/key-value-bubble/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# Key Value Bubble Debugger Tool - -When in non-production mode, you can use this custom tool to do a little console.log for values right on the screen. - -It will show up when component (or service or whatever) is created, get live data updates, and get destroyed when component is removed. - -You can drag it to where you like. (WIP: saving position in localstorage so it will stay there after reloading. Stay tuned!) - -Copy and paste this snippet into a `.ts` file and log out class values in little moveable bubbles on the UI: - -```html - - - diff --git a/frontend/projects/upgrade/src/dev-tools/key-value-bubble/key-value-bubble.component.html b/frontend/projects/upgrade/src/dev-tools/key-value-bubble/key-value-bubble.component.html deleted file mode 100644 index e84f55257b..0000000000 --- a/frontend/projects/upgrade/src/dev-tools/key-value-bubble/key-value-bubble.component.html +++ /dev/null @@ -1,14 +0,0 @@ -
-
{{ key }}
-
{{ value | json }}
-
diff --git a/frontend/projects/upgrade/src/dev-tools/key-value-bubble/key-value-bubble.component.scss b/frontend/projects/upgrade/src/dev-tools/key-value-bubble/key-value-bubble.component.scss deleted file mode 100644 index cdd4d77717..0000000000 --- a/frontend/projects/upgrade/src/dev-tools/key-value-bubble/key-value-bubble.component.scss +++ /dev/null @@ -1,18 +0,0 @@ -.key-value-bubble { - position: fixed; - // left: 10px; - // top: 10px; - // background-color: #B68F40; - z-index: 1000; - padding: 10px; - border: 5px #545454 dashed; - font-size: 12px; - cursor: grab; - border-radius: 10px; - - .key { - font-weight: bold; - font-family: 'Courier New', Courier, monospace; - font-size: 14px; - } -} diff --git a/frontend/projects/upgrade/src/dev-tools/key-value-bubble/key-value-bubble.component.ts b/frontend/projects/upgrade/src/dev-tools/key-value-bubble/key-value-bubble.component.ts deleted file mode 100644 index 784c8d79cc..0000000000 --- a/frontend/projects/upgrade/src/dev-tools/key-value-bubble/key-value-bubble.component.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { CdkDragEnd, CdkDragStart } from '@angular/cdk/drag-drop'; -import { Component, OnInit, ChangeDetectionStrategy, Input } from '@angular/core'; -import { IKeyValueBubbleStyles } from './key-value-bubble.model'; -import { KeyValueBubbleService } from './key-value-bubble.service'; - -@Component({ - selector: 'app-key-value-bubble', - templateUrl: './key-value-bubble.component.html', - styleUrls: ['./key-value-bubble.component.scss'], - changeDetection: ChangeDetectionStrategy.OnPush, - standalone: false, -}) -export class KeyValueBubbleComponent implements OnInit { - @Input() value: any; - @Input() key: string; - styles: IKeyValueBubbleStyles; - position = { - x: 0, - y: 0, - }; - - constructor(private jsonViewerService: KeyValueBubbleService) {} - - ngOnInit(): void { - if (this.value === undefined) { - this.value = 'value is undefined'; - } - this.styles = this.jsonViewerService.registerViewerInstance(this.key); - this.position = { - y: this.styles.top, - x: this.styles.left, - }; - } - - dragEnd($event: CdkDragEnd) { - console.log($event.source.getFreeDragPosition()); - } - - dragStart($event: CdkDragStart) { - console.log($event.source.element.nativeElement); - console.log($event.source.getFreeDragPosition()); - } -} diff --git a/frontend/projects/upgrade/src/dev-tools/key-value-bubble/key-value-bubble.model.ts b/frontend/projects/upgrade/src/dev-tools/key-value-bubble/key-value-bubble.model.ts deleted file mode 100644 index f694602176..0000000000 --- a/frontend/projects/upgrade/src/dev-tools/key-value-bubble/key-value-bubble.model.ts +++ /dev/null @@ -1,57 +0,0 @@ -export interface IKeyValueBubbleStyles { - backgroundColor: string; - borderColor: string; - top: number; - left: number; -} - -export const KEY_VALUE_BUBBLE_STYLE_PRESETS: IKeyValueBubbleStyles[] = [ - { - backgroundColor: '#B68F40', - borderColor: '#545454', - top: 10, - left: 10, - }, - { - backgroundColor: '#D1B490', - borderColor: '#EE7B30', - top: 10, - left: 210, - }, - { - backgroundColor: '#8AA8A1', - borderColor: '#885A89', - top: 10, - left: 410, - }, - { - backgroundColor: '#FCDDBC', - borderColor: '#69585F', - top: 10, - left: 610, - }, - { - backgroundColor: '#EFA48B', - borderColor: '#fcc8b2', - top: 10, - left: 810, - }, - { - backgroundColor: '#70161E', - borderColor: '#C3D898', - top: 10, - left: 1010, - }, - { - backgroundColor: '#FA9F42', - borderColor: '#2B4162', - top: 410, - left: 10, - }, - { - backgroundColor: '#FCB9B2', - borderColor: '#B23A48', - top: 410, - left: 210, - }, -]; diff --git a/frontend/projects/upgrade/src/dev-tools/key-value-bubble/key-value-bubble.service.ts b/frontend/projects/upgrade/src/dev-tools/key-value-bubble/key-value-bubble.service.ts deleted file mode 100644 index 4b60a06cb8..0000000000 --- a/frontend/projects/upgrade/src/dev-tools/key-value-bubble/key-value-bubble.service.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { Injectable } from '@angular/core'; -import { IKeyValueBubbleStyles, KEY_VALUE_BUBBLE_STYLE_PRESETS } from './key-value-bubble.model'; - -@Injectable({ - providedIn: 'root', -}) -export class KeyValueBubbleService { - instancesOpen = []; - - public registerViewerInstance(key: string): IKeyValueBubbleStyles { - const formattedkey = this.formatNameForKeyCache(key); - this.instancesOpen.push(formattedkey); - const cachedStyles = this.getFromCache(formattedkey); - if (cachedStyles) { - return cachedStyles; - } else { - const styles = KEY_VALUE_BUBBLE_STYLE_PRESETS[this.instancesOpen.length - 1]; - - console.log(`added ${key} to tracked bubble list`); - this.setToCache(formattedkey, styles); - return styles; - } - } - - private formatNameForKeyCache(key: string) { - return key - .replace(/[.,/#!$%^&*;:{}=\-_`~()]/g, '') - .toLowerCase() - .trim() - .replace(/\s{2,}/g, ' '); - } - - public getFromCache(key: string) { - const formattedkey = this.formatNameForKeyCache(key); - console.log(`get key ${key}`); - const fetchedData = localStorage.getItem(formattedkey); - if (fetchedData) { - const deserializedValue = JSON.parse(fetchedData); - console.log(`found ${deserializedValue} at key ${formattedkey}`); - return deserializedValue; - } else { - console.log(`no date found at key ${formattedkey}`); - - return undefined; - } - } - - public setToCache(key: string, value: IKeyValueBubbleStyles) { - const formattedkey = this.formatNameForKeyCache(key); - const serializedValue = JSON.stringify(value); - console.log(`save ${serializedValue} to key ${formattedkey}`); - localStorage.setItem(formattedkey, serializedValue); - } -} diff --git a/frontend/projects/upgrade/src/environments/environment-types.ts b/frontend/projects/upgrade/src/environments/environment-types.ts index dac820664c..81a77534ea 100644 --- a/frontend/projects/upgrade/src/environments/environment-types.ts +++ b/frontend/projects/upgrade/src/environments/environment-types.ts @@ -75,7 +75,6 @@ export interface Environment { pollingInterval: number; pollingLimit: number; api: APIEndpoints; - featureFlagNavToggle: boolean; segmentsRefreshToggle: boolean; errorLogsToggle: boolean; withinSubjectExperimentSupportToggle: boolean; @@ -88,7 +87,6 @@ export interface RuntimeEnvironmentConfig { googleClientId?: string; endpointApi?: string; apiBaseUrl?: string; - featureFlagNavToggle?: boolean; segmentsRefreshToggle?: boolean; withinSubjectExperimentSupportToggle?: boolean; errorLogsToggle?: boolean; diff --git a/frontend/projects/upgrade/src/environments/environment.bsnl.ts b/frontend/projects/upgrade/src/environments/environment.bsnl.ts index dd78eea55b..3df2d78524 100644 --- a/frontend/projects/upgrade/src/environments/environment.bsnl.ts +++ b/frontend/projects/upgrade/src/environments/environment.bsnl.ts @@ -13,7 +13,6 @@ export const environment: Environment = { pollingEnabled: false, pollingInterval: 10 * 1000, pollingLimit: 600, - featureFlagNavToggle: false, segmentsRefreshToggle: false, withinSubjectExperimentSupportToggle: false, errorLogsToggle: false, diff --git a/frontend/projects/upgrade/src/environments/environment.demo.prod.ts b/frontend/projects/upgrade/src/environments/environment.demo.prod.ts index af3555e85e..48b719d4a3 100755 --- a/frontend/projects/upgrade/src/environments/environment.demo.prod.ts +++ b/frontend/projects/upgrade/src/environments/environment.demo.prod.ts @@ -13,7 +13,6 @@ export const environment: Environment = { pollingEnabled: true, pollingInterval: 10 * 1000, pollingLimit: 600, - featureFlagNavToggle: false, segmentsRefreshToggle: false, withinSubjectExperimentSupportToggle: false, errorLogsToggle: false, diff --git a/frontend/projects/upgrade/src/environments/environment.local.example.ts b/frontend/projects/upgrade/src/environments/environment.local.example.ts index 4bdc3a4e9b..8e67071c40 100755 --- a/frontend/projects/upgrade/src/environments/environment.local.example.ts +++ b/frontend/projects/upgrade/src/environments/environment.local.example.ts @@ -18,7 +18,6 @@ export const environment: Environment = { pollingEnabled: false, pollingInterval: 10 * 1000, pollingLimit: 600, - featureFlagNavToggle: true, segmentsRefreshToggle: false, withinSubjectExperimentSupportToggle: false, errorLogsToggle: false, diff --git a/frontend/projects/upgrade/src/environments/environment.prod.ts b/frontend/projects/upgrade/src/environments/environment.prod.ts index 2dd40b9d8e..0b2584755b 100755 --- a/frontend/projects/upgrade/src/environments/environment.prod.ts +++ b/frontend/projects/upgrade/src/environments/environment.prod.ts @@ -13,7 +13,6 @@ export const environment: Environment = { pollingEnabled: true, pollingInterval: 10 * 1000, pollingLimit: 600, - featureFlagNavToggle: true, segmentsRefreshToggle: false, withinSubjectExperimentSupportToggle: false, errorLogsToggle: false, diff --git a/frontend/projects/upgrade/src/environments/environment.qa.ts b/frontend/projects/upgrade/src/environments/environment.qa.ts index f107c7483c..a76ce2c370 100644 --- a/frontend/projects/upgrade/src/environments/environment.qa.ts +++ b/frontend/projects/upgrade/src/environments/environment.qa.ts @@ -13,7 +13,6 @@ export const environment: Environment = { pollingEnabled: true, pollingInterval: 10 * 1000, pollingLimit: 600, - featureFlagNavToggle: true, segmentsRefreshToggle: false, withinSubjectExperimentSupportToggle: true, errorLogsToggle: false, diff --git a/frontend/projects/upgrade/src/environments/environment.staging.ts b/frontend/projects/upgrade/src/environments/environment.staging.ts index 5549faae13..ea7bea66b0 100644 --- a/frontend/projects/upgrade/src/environments/environment.staging.ts +++ b/frontend/projects/upgrade/src/environments/environment.staging.ts @@ -13,7 +13,6 @@ export const environment: Environment = { pollingEnabled: true, pollingInterval: 10 * 1000, pollingLimit: 600, - featureFlagNavToggle: true, segmentsRefreshToggle: false, withinSubjectExperimentSupportToggle: false, errorLogsToggle: false, diff --git a/frontend/projects/upgrade/src/environments/environment.ts b/frontend/projects/upgrade/src/environments/environment.ts index 5fad43409f..c8fdd4c6ff 100755 --- a/frontend/projects/upgrade/src/environments/environment.ts +++ b/frontend/projects/upgrade/src/environments/environment.ts @@ -18,7 +18,6 @@ export const environment = { pollingEnabled: false, pollingInterval: 10 * 1000, pollingLimit: 600, - featureFlagNavToggle: true, segmentsRefreshToggle: false, withinSubjectExperimentSupportToggle: false, errorLogsToggle: false,