Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 2 additions & 9 deletions tensorboard/webapp/routes/dashboard_deeplink_provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,7 @@ import {map} from 'rxjs/operators';
import {DeepLinkProvider} from '../app_routing/deep_link_provider';
import {SerializableQueryParams} from '../app_routing/types';
import {State} from '../app_state';
import {
FeatureFlagMetadata,
FeatureFlagMetadataMap,
FeatureFlagType,
} from '../feature_flag/store/feature_flag_metadata';
import {FeatureFlagMetadataMap} from '../feature_flag/store/feature_flag_metadata';
import {getOverriddenFeatureFlags} from '../feature_flag/store/feature_flag_selectors';
import {
isPluginType,
Expand Down Expand Up @@ -102,10 +98,7 @@ export class DashboardDeepLinkProvider extends DeepLinkProvider {
map((featureFlags) => {
return featureFlagsToSerializableQueryParams(
featureFlags,
FeatureFlagMetadataMap as Record<
string,
FeatureFlagMetadata<FeatureFlagType>
>
FeatureFlagMetadataMap
);
})
),
Expand Down
6 changes: 2 additions & 4 deletions tensorboard/webapp/routes/feature_flag_serializer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,9 @@ import {
} from '../feature_flag/store/feature_flag_metadata';
import {FeatureFlags} from '../feature_flag/types';

export function featureFlagsToSerializableQueryParams<
T extends FeatureFlagType
>(
export function featureFlagsToSerializableQueryParams<T extends FeatureFlags>(
overriddenFeatureFlags: Partial<FeatureFlags>,
featureFlagMetadataMap: Record<string, FeatureFlagMetadata<T>>
featureFlagMetadataMap: FeatureFlagMetadataMapType<T>
): SerializableQueryParams {
return Object.entries(overriddenFeatureFlags)
.map(([featureFlag, featureValue]) => {
Expand Down
19 changes: 11 additions & 8 deletions tensorboard/webapp/routes/feature_flag_serializer_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,19 @@ import {
getOverriddenFeatureFlagValuesFromSearchParams,
} from './feature_flag_serializer';

const FEATURE_A_NAME = 'featureA';
const FEATURE_B_NAME = 'featureB';

describe('feature flag serializer', () => {
let featureFlagsMetadata: Record<string, FeatureFlagMetadata<any>> = {};
let featureFlagsMetadata: FeatureFlagMetadataMapType<any> = {};
beforeEach(() => {
featureFlagsMetadata = {
featureA: {
[FEATURE_A_NAME]: {
defaultValue: 'feature_a_123',
queryParamOverride: 'feature_a',
parseValue: (s: string) => s,
},
featureB: {
[FEATURE_B_NAME]: {
defaultValue: 'feature_b_456',
queryParamOverride: 'feature_b',
isArray: true,
Expand Down Expand Up @@ -109,7 +112,7 @@ describe('feature flag serializer', () => {
describe('getFeatureFlagValueFromSearchParams', () => {
it('returns null when provided feature flag not present in search params', () => {
const value = getFeatureFlagValueFromSearchParams(
featureFlagsMetadata.featureA,
featureFlagsMetadata[FEATURE_A_NAME],
new URLSearchParams('')
);
expect(value).toBeNull();
Expand All @@ -128,15 +131,15 @@ describe('feature flag serializer', () => {

it('returns first value when feature flag is not an array', () => {
const value = getFeatureFlagValueFromSearchParams(
featureFlagsMetadata.featureA,
featureFlagsMetadata[FEATURE_A_NAME],
new URLSearchParams('?feature_a=foo&feature_a=bar')
);
expect(value).toEqual('foo');
});

it('returns array of values when feature flag is an array', () => {
const value = getFeatureFlagValueFromSearchParams(
featureFlagsMetadata.featureB,
featureFlagsMetadata[FEATURE_B_NAME],
new URLSearchParams('?feature_b=foo&feature_b=bar')
);
expect(value).toEqual(['foo', 'bar']);
Expand All @@ -154,15 +157,15 @@ describe('feature flag serializer', () => {

it('returns empty object when url search params are empty', () => {
const featureFlags = getOverriddenFeatureFlagValuesFromSearchParams(
featureFlagsMetadata as FeatureFlagMetadataMapType<any>,
featureFlagsMetadata,
new URLSearchParams('')
);
expect(featureFlags).toEqual({});
});

it('parses flag values correctly', () => {
const featureFlags = getOverriddenFeatureFlagValuesFromSearchParams(
featureFlagsMetadata as FeatureFlagMetadataMapType<any>,
featureFlagsMetadata,
new URLSearchParams('?feature_a=foo&feature_b=bar')
);
expect(featureFlags).toEqual({
Expand Down