Skip to content

Commit 9ddcbbc

Browse files
committed
address pr comments
1 parent 6f6a14d commit 9ddcbbc

File tree

6 files changed

+62
-44
lines changed

6 files changed

+62
-44
lines changed

tensorboard/webapp/app_routing/location.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,6 @@ const utils = {
4848
getHref() {
4949
return window.location.href;
5050
},
51-
getSearch() {
52-
return window.location.search;
53-
},
5451
};
5552

5653
@Injectable()
@@ -60,7 +57,7 @@ export class Location implements LocationInterface {
6057
}
6158

6259
getSearch(): SerializableQueryParams {
63-
const searchParams = new URLSearchParams(utils.getSearch());
60+
const searchParams = new URLSearchParams(window.location.search);
6461
const serializableSearchParams: SerializableQueryParams = [];
6562

6663
// URLSearchParams is a Iterable but TypeScript does not know about that.

tensorboard/webapp/feature_flag/store/feature_flag_metadata.ts

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ export type BaseFeatureFlagType = boolean | number | string | null | undefined;
3030
export type FeatureFlagType = BaseFeatureFlagType | Array<BaseFeatureFlagType>;
3131

3232
export type FeatureFlagMetadata<T> = {
33-
displayName: string;
3433
defaultValue?: T;
3534
queryParamOverride?: string;
3635
parseValue: (str: string) => T;
@@ -52,71 +51,57 @@ export const FeatureFlagMetadataMap: {
5251
[FlagName in keyof FeatureFlags]: FeatureFlagMetadata<FeatureFlags[FlagName]>;
5352
} = {
5453
scalarsBatchSize: {
55-
displayName: 'scalarsBatchSize',
5654
queryParamOverride: SCALARS_BATCH_SIZE_PARAM_KEY,
5755
parseValue: parseInt,
5856
},
5957
enabledColorGroup: {
60-
displayName: 'enabledColorGroup',
6158
queryParamOverride: ENABLE_COLOR_GROUP_QUERY_PARAM_KEY,
6259
parseValue: parseBoolean,
6360
},
6461
enabledColorGroupByRegex: {
65-
displayName: 'enabledColorGroupByRegex',
6662
queryParamOverride: ENABLE_COLOR_GROUP_BY_REGEX_QUERY_PARAM_KEY,
6763
parseValue: parseBoolean,
6864
},
6965
enabledExperimentalPlugins: {
70-
displayName: 'enabledExperimentalPlugins',
7166
queryParamOverride: EXPERIMENTAL_PLUGIN_QUERY_PARAM_KEY,
7267
parseValue: (str: string) => [str],
7368
isArray: true,
7469
},
7570
enabledLinkedTime: {
76-
displayName: 'enabledLinkedTime',
7771
queryParamOverride: ENABLE_LINKED_TIME_PARAM_KEY,
7872
parseValue: parseBoolean,
7973
},
8074
enabledCardWidthSetting: {
81-
displayName: 'enabledCardWidthSetting',
8275
queryParamOverride: ENABLE_CARD_WIDTH_SETTING_PARAM_KEY,
8376
parseValue: parseBoolean,
8477
},
8578
enabledScalarDataTable: {
86-
displayName: 'enabledScalarDataTable',
8779
queryParamOverride: ENABLE_DATA_TABLE_PARAM_KEY,
8880
parseValue: parseBoolean,
8981
},
9082
forceSvg: {
91-
displayName: 'forceSvg',
9283
queryParamOverride: FORCE_SVG_RENDERER,
9384
parseValue: parseBoolean,
9485
},
9586
enableDarkModeOverride: {
96-
displayName: 'enableDarkModeOverride',
9787
parseValue: parseBooleanOrNull,
9888
},
9989
defaultEnableDarkMode: {
100-
displayName: 'defaultEnableDarkMode',
10190
queryParamOverride: ENABLE_DARK_MODE_QUERY_PARAM_KEY,
10291
parseValue: parseBoolean,
10392
},
10493
isAutoDarkModeAllowed: {
105-
displayName: 'isAutoDarkModeAllowed',
10694
parseValue: parseBoolean,
10795
},
10896
inColab: {
109-
displayName: 'inColab',
11097
defaultValue: false,
11198
queryParamOverride: 'tensorboardColab',
11299
parseValue: parseBoolean,
113100
},
114101
metricsImageSupportEnabled: {
115-
displayName: 'metricsImageSupportEnabled',
116102
parseValue: parseBoolean,
117103
},
118104
enableTimeSeriesPromotion: {
119-
displayName: 'enableTimeSeriesPromotion',
120105
parseValue: parseBoolean,
121106
},
122107
};

tensorboard/webapp/routes/dashboard_deeplink_provider.ts

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,7 @@ import {
2424
FeatureFlagMetadataMap,
2525
FeatureFlagType,
2626
} from '../feature_flag/store/feature_flag_metadata';
27-
import {
28-
getEnabledExperimentalPlugins,
29-
getOverriddenFeatureFlags,
30-
} from '../feature_flag/store/feature_flag_selectors';
27+
import {getOverriddenFeatureFlags} from '../feature_flag/store/feature_flag_selectors';
3128
import {
3229
isPluginType,
3330
isSampledPlugin,
@@ -101,15 +98,6 @@ export class DashboardDeepLinkProvider extends DeepLinkProvider {
10198
return [{key: TAG_FILTER_KEY, value: filterText}];
10299
})
103100
),
104-
store.select(getEnabledExperimentalPlugins).pipe(
105-
map((enabledExperimentalPlugins) => {
106-
return enabledExperimentalPlugins.map((pluginName) => ({
107-
key: FeatureFlagMetadataMap.enabledExperimentalPlugins
108-
.queryParamOverride!,
109-
value: pluginName,
110-
}));
111-
})
112-
),
113101
store.select(getOverriddenFeatureFlags).pipe(
114102
map((featureFlags) => {
115103
return featureFlagsToSerializableQueryParams(

tensorboard/webapp/routes/dashboard_deeplink_provider_test.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -347,13 +347,15 @@ describe('core deeplink provider', () => {
347347
});
348348
});
349349

350+
/**
351+
* These tests are intended to verify that feature flags are correctly serialized using
352+
* featureFlagsToSerializableQueryParams
353+
*/
350354
describe('feature flag', () => {
351355
it('serializes enabled experimental plugins', () => {
352-
store.overrideSelector(selectors.getEnabledExperimentalPlugins, [
353-
'foo',
354-
'bar',
355-
'baz',
356-
]);
356+
store.overrideSelector(selectors.getOverriddenFeatureFlags, {
357+
enabledExperimentalPlugins: ['foo', 'bar', 'baz'],
358+
});
357359
store.refreshState();
358360

359361
expect(queryParamsSerialized[queryParamsSerialized.length - 1]).toEqual([
@@ -378,9 +380,9 @@ describe('core deeplink provider', () => {
378380
});
379381
store.refreshState();
380382

381-
expect(queryParamsSerialized[queryParamsSerialized.length - 1]).toEqual(
382-
[]
383-
);
383+
expect(queryParamsSerialized[queryParamsSerialized.length - 1]).toEqual([
384+
{key: 'enableColorGroup', value: 'false'},
385+
]);
384386

385387
store.overrideSelector(selectors.getOverriddenFeatureFlags, {});
386388
store.refreshState();
@@ -405,9 +407,9 @@ describe('core deeplink provider', () => {
405407
});
406408
store.refreshState();
407409

408-
expect(queryParamsSerialized[queryParamsSerialized.length - 1]).toEqual(
409-
[]
410-
);
410+
expect(queryParamsSerialized[queryParamsSerialized.length - 1]).toEqual([
411+
{key: 'enableColorGroupByRegex', value: 'false'},
412+
]);
411413

412414
store.overrideSelector(selectors.getOverriddenFeatureFlags, {});
413415
store.refreshState();

tensorboard/webapp/routes/feature_flag_serializer.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1+
/* Copyright 2022 The TensorFlow Authors. All Rights Reserved.
2+
3+
Licensed under the Apache License, Version 2.0 (the "License");
4+
you may not use this file except in compliance with the License.
5+
You may obtain a copy of the License at
6+
7+
http://www.apache.org/licenses/LICENSE-2.0
8+
9+
Unless required by applicable law or agreed to in writing, software
10+
distributed under the License is distributed on an "AS IS" BASIS,
11+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
See the License for the specific language governing permissions and
13+
limitations under the License.
14+
==============================================================================*/
115
import {SerializableQueryParams} from '../app_routing/types';
216
import {FeatureFlagMetadata} from '../feature_flag/store/feature_flag_metadata';
317
import {FeatureFlags} from '../feature_flag/types';
@@ -11,7 +25,7 @@ export function featureFlagsToSerializableQueryParams<T>(
1125
const key =
1226
featureFlagMetadataMap[featureFlag as keyof FeatureFlags]
1327
?.queryParamOverride;
14-
if (!key || !featureValue) {
28+
if (!key || featureValue === undefined) {
1529
return [];
1630
}
1731
/**

tensorboard/webapp/routes/feature_flag_serializer_test.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1+
/* Copyright 2022 The TensorFlow Authors. All Rights Reserved.
2+
3+
Licensed under the Apache License, Version 2.0 (the "License");
4+
you may not use this file except in compliance with the License.
5+
You may obtain a copy of the License at
6+
7+
http://www.apache.org/licenses/LICENSE-2.0
8+
9+
Unless required by applicable law or agreed to in writing, software
10+
distributed under the License is distributed on an "AS IS" BASIS,
11+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
See the License for the specific language governing permissions and
13+
limitations under the License.
14+
==============================================================================*/
115
import {featureFlagsToSerializableQueryParams} from './feature_flag_serializer';
216

317
describe('feature flag serializer', () => {
@@ -18,6 +32,7 @@ describe('feature flag serializer', () => {
1832
},
1933
};
2034
});
35+
2136
it('should return empty list when no flags are overridden', () => {
2237
const serializableQueryParams = featureFlagsToSerializableQueryParams(
2338
{},
@@ -44,6 +59,23 @@ describe('feature flag serializer', () => {
4459
]);
4560
});
4661

62+
it('should serialize feature flags with falsy values', () => {
63+
const serializableQueryParams = featureFlagsToSerializableQueryParams(
64+
{featureB: false, featureA: ''} as any,
65+
featureFlagsMetadata
66+
);
67+
expect(serializableQueryParams).toEqual([
68+
{
69+
key: 'feature_b',
70+
value: 'false',
71+
},
72+
{
73+
key: 'feature_a',
74+
value: '',
75+
},
76+
]);
77+
});
78+
4779
it('should return multiple entries for features with array values', () => {
4880
const serializableQueryParams = featureFlagsToSerializableQueryParams(
4981
{featureA: 'a', featureB: ['foo', 'bar']} as any,

0 commit comments

Comments
 (0)