diff --git a/tensorboard/webapp/routes/BUILD b/tensorboard/webapp/routes/BUILD index 63912b20964..73f87dc72e1 100644 --- a/tensorboard/webapp/routes/BUILD +++ b/tensorboard/webapp/routes/BUILD @@ -94,12 +94,12 @@ tf_ts_library( ":dashboard_deeplink_provider", ":feature_flag_serializer", ":testing", - "//tensorboard/webapp/app_routing:location", "//tensorboard/webapp:app_state", "//tensorboard/webapp:selectors", "//tensorboard/webapp/angular:expect_angular_core_testing", "//tensorboard/webapp/angular:expect_ngrx_store_testing", "//tensorboard/webapp/app_routing:deep_link_provider", + "//tensorboard/webapp/app_routing:location", "//tensorboard/webapp/app_routing:types", "//tensorboard/webapp/metrics:test_lib", "//tensorboard/webapp/metrics:types", diff --git a/tensorboard/webapp/routes/feature_flag_serializer.ts b/tensorboard/webapp/routes/feature_flag_serializer.ts index 1366bbc99ac..b88a7282419 100644 --- a/tensorboard/webapp/routes/feature_flag_serializer.ts +++ b/tensorboard/webapp/routes/feature_flag_serializer.ts @@ -21,37 +21,43 @@ import {SerializableQueryParams} from '../app_routing/types'; import {State} from '../app_state'; import * as selectors from '../selectors'; import {EXPERIMENTAL_PLUGIN_QUERY_PARAM_KEY} from '../webapp_data_source/tb_feature_flag_data_source_types'; -import {FeatureFlagMetadata, FeatureFlagQueryParameters,} from '../webapp_data_source/tb_feature_flag_query_parameters'; - -export function getFeatureFlagStates(store: Store): - Observable { - return store.select(selectors.getEnabledExperimentalPlugins) - .pipe(map((experimentalPlugins) => { - const queryParams = experimentalPlugins.map((pluginId) => { - return {key: EXPERIMENTAL_PLUGIN_QUERY_PARAM_KEY, value: pluginId}; - }); - - const currentQueryParams = Object.fromEntries( - serializableQueryParamsToEntries(new Location().getSearch() || [])); - - Object.values(FeatureFlagQueryParameters) - .forEach((overriddenFeatureFlag: FeatureFlagMetadata) => { - const queryParamOverride = - overriddenFeatureFlag.queryParamOverride; - if (queryParamOverride && - queryParamOverride in currentQueryParams) { - queryParams.push({ - key: queryParamOverride, - value: currentQueryParams[queryParamOverride], - }); - } +import { + FeatureFlagMetadata, + FeatureFlagQueryParameters, +} from '../webapp_data_source/tb_feature_flag_query_parameters'; + +export function getFeatureFlagStates( + store: Store +): Observable { + return store.select(selectors.getEnabledExperimentalPlugins).pipe( + map((experimentalPlugins) => { + const queryParams = experimentalPlugins.map((pluginId) => { + return {key: EXPERIMENTAL_PLUGIN_QUERY_PARAM_KEY, value: pluginId}; + }); + + const currentQueryParams = Object.fromEntries( + serializableQueryParamsToEntries(new Location().getSearch() || []) + ); + + Object.values(FeatureFlagQueryParameters).forEach( + (overriddenFeatureFlag: FeatureFlagMetadata) => { + const queryParamOverride = overriddenFeatureFlag.queryParamOverride; + if (queryParamOverride && queryParamOverride in currentQueryParams) { + queryParams.push({ + key: queryParamOverride, + value: currentQueryParams[queryParamOverride], }); + } + } + ); - return queryParams; + return queryParams; - function serializableQueryParamsToEntries( - params: SerializableQueryParams): [string, string][] { - return params.map(({key, value}) => [key, value]); - } - })); + function serializableQueryParamsToEntries( + params: SerializableQueryParams + ): [string, string][] { + return params.map(({key, value}) => [key, value]); + } + }) + ); } diff --git a/tensorboard/webapp/routes/feature_flag_serializer_test.ts b/tensorboard/webapp/routes/feature_flag_serializer_test.ts index 80cbb409080..20c2671d7c4 100644 --- a/tensorboard/webapp/routes/feature_flag_serializer_test.ts +++ b/tensorboard/webapp/routes/feature_flag_serializer_test.ts @@ -30,17 +30,15 @@ describe('feature flag serializer', () => { let getSearchSpy: jasmine.Spy; beforeEach(async () => { - await TestBed - .configureTestingModule({ - providers: [ - provideMockStore({ - initialState: { - ...appStateFromMetricsState(buildMetricsState()), - }, - }), - ], - }) - .compileComponents(); + await TestBed.configureTestingModule({ + providers: [ + provideMockStore({ + initialState: { + ...appStateFromMetricsState(buildMetricsState()), + }, + }), + ], + }).compileComponents(); store = TestBed.inject>(Store) as MockStore; store.overrideSelector(selectors.getEnabledExperimentalPlugins, []); @@ -73,13 +71,14 @@ describe('feature flag serializer', () => { }); }); -function promiseGetFeatureFlagStates(store: Store): - Promise { +function promiseGetFeatureFlagStates( + store: Store +): Promise { return new Promise((resolve) => { getFeatureFlagStates(store) - .subscribe((queryParams) => { - resolve(queryParams); - }) - .unsubscribe(); + .subscribe((queryParams) => { + resolve(queryParams); + }) + .unsubscribe(); }); }