Skip to content

Commit dd126b0

Browse files
vovaspaceValeraS
andauthored
feat: add binary data in plain text display (#739)
Co-authored-by: Valerii Sidorenko <[email protected]>
1 parent 8e0446a commit dd126b0

File tree

10 files changed

+54
-37
lines changed

10 files changed

+54
-37
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import {ReactNode} from 'react';
2+
import {useTypedSelector} from '../../lib';
3+
4+
export interface ClusterModeGuardProps {
5+
children: ReactNode;
6+
mode: 'single' | 'multi';
7+
}
8+
9+
export function ClusterModeGuard({children, mode}: ClusterModeGuardProps) {
10+
const shouldRender = useTypedSelector((state) =>
11+
mode === 'single' ? state.singleClusterMode : !state.singleClusterMode,
12+
);
13+
14+
return shouldRender ? <>{children}</> : null;
15+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './ClusterModeGuard';

src/containers/UserSettings/Setting.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export type SettingsElementType = 'switch' | 'radio';
1414
export interface SettingProps {
1515
type?: SettingsElementType;
1616
title: string;
17+
description?: ReactNode;
1718
settingKey: string;
1819
helpPopoverContent?: ReactNode;
1920
options?: {value: string; content: string}[];
@@ -25,6 +26,7 @@ export const Setting = ({
2526
type = 'switch',
2627
settingKey,
2728
title,
29+
description,
2830
helpPopoverContent,
2931
options,
3032
defaultValue,
@@ -85,6 +87,7 @@ export const Setting = ({
8587
<Settings.Item
8688
title={title}
8789
highlightedTitle={title}
90+
description={description}
8891
renderTitleComponent={renderTitleComponent}
8992
>
9093
{getSettingsElement(type)}

src/containers/UserSettings/i18n/en.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
"settings.language.option-russian": "Russian",
1515
"settings.language.option-english": "English",
1616

17+
"settings.binaryDataInPlainTextDisplay.title": "Display binary data in plain text",
18+
"settings.binaryDataInPlainTextDisplay.description": "Available starting from version 24.1",
19+
1720
"settings.invertedDisks.title": "Inverted disks space indicators",
1821

1922
"settings.useNodesEndpoint.title": "Break the Nodes tab in Diagnostics",
Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
1-
import {i18n, Lang} from '../../../utils/i18n';
1+
import {registerKeysets} from '../../../utils/i18n';
22

33
import en from './en.json';
4-
import ru from './ru.json';
54

6-
const COMPONENT = 'ydb-user-settings';
7-
8-
i18n.registerKeyset(Lang.En, COMPONENT, en);
9-
i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
10-
11-
export default i18n.keyset(COMPONENT);
5+
export default registerKeysets('ydb-user-settings', {en});

src/containers/UserSettings/i18n/ru.json

Lines changed: 0 additions & 27 deletions
This file was deleted.

src/containers/UserSettings/settings.ts renamed to src/containers/UserSettings/settings.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@ import {
1010
USE_BACKEND_PARAMS_FOR_TABLES_KEY,
1111
USE_NODES_ENDPOINT_IN_DIAGNOSTICS_KEY,
1212
QUERY_USE_MULTI_SCHEMA_KEY,
13+
BINARY_DATA_IN_PLAIN_TEXT_DISPLAY,
1314
} from '../../utils/constants';
1415
import {Lang, defaultLang} from '../../utils/i18n';
1516

1617
import type {SettingProps} from './Setting';
1718
import i18n from './i18n';
19+
import {ClusterModeGuard} from '../ClusterModeGuard';
1820

1921
export interface SettingsSection {
2022
id: string;
@@ -75,6 +77,16 @@ export const languageSetting: SettingProps = {
7577
},
7678
};
7779

80+
export const binaryDataInPlainTextDisplay: SettingProps = {
81+
settingKey: BINARY_DATA_IN_PLAIN_TEXT_DISPLAY,
82+
title: i18n('settings.binaryDataInPlainTextDisplay.title'),
83+
description: (
84+
<ClusterModeGuard mode="multi">
85+
{i18n('settings.binaryDataInPlainTextDisplay.description')}
86+
</ClusterModeGuard>
87+
),
88+
};
89+
7890
export const invertedDisksSetting: SettingProps = {
7991
settingKey: INVERTED_DISKS_KEY,
8092
title: i18n('settings.invertedDisks.title'),
@@ -98,7 +110,7 @@ export const queryUseMultiSchemaSetting: SettingProps = {
98110
export const appearanceSection: SettingsSection = {
99111
id: 'appearanceSection',
100112
title: i18n('section.appearance'),
101-
settings: [themeSetting, invertedDisksSetting],
113+
settings: [themeSetting, invertedDisksSetting, binaryDataInPlainTextDisplay],
102114
};
103115
export const experimentsSection: SettingsSection = {
104116
id: 'experimentsSection',

src/services/api.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,10 @@ import type {JsonHotKeysResponse} from '../types/api/hotkeys';
3838

3939
import {backend as BACKEND, metaBackend as META_BACKEND} from '../store';
4040
import {prepareSortValue} from '../utils/filters';
41+
import {BINARY_DATA_IN_PLAIN_TEXT_DISPLAY} from '../utils/constants';
4142
import {parseMetaCluster} from './parsers/parseMetaCluster';
4243
import {parseMetaTenants} from './parsers/parseMetaTenants';
44+
import {settingsManager} from './settings';
4345

4446
type AxiosOptions = {
4547
concurrentId?: string;
@@ -305,9 +307,20 @@ export class YdbEmbeddedAPI extends AxiosWrapper {
305307
const uiTimeout = 9 * 60 * 1000;
306308
const backendTimeout = 10 * 60 * 1000;
307309

310+
/**
311+
* Return strings using base64 encoding.
312+
* @link https://github.com/ydb-platform/ydb/pull/647
313+
*/
314+
const base64 = !settingsManager.readUserSettingsValue(
315+
BINARY_DATA_IN_PLAIN_TEXT_DISPLAY,
316+
true,
317+
);
318+
308319
return this.post<QueryAPIResponse<Action, Schema>>(
309320
this.getPath(
310-
`/viewer/json/query?timeout=${backendTimeout}${schema ? `&schema=${schema}` : ''}`,
321+
`/viewer/json/query?timeout=${backendTimeout}&base64=${base64}${
322+
schema ? `&schema=${schema}` : ''
323+
}`,
311324
),
312325
params,
313326
{},

src/services/settings.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
USE_BACKEND_PARAMS_FOR_TABLES_KEY,
1515
USE_NODES_ENDPOINT_IN_DIAGNOSTICS_KEY,
1616
USE_CLUSTER_BALANCER_AS_BACKEND_KEY,
17+
BINARY_DATA_IN_PLAIN_TEXT_DISPLAY,
1718
} from '../utils/constants';
1819
import {QUERY_ACTIONS, QUERY_MODES} from '../utils/query';
1920
import {parseJson} from '../utils/utils';
@@ -27,6 +28,7 @@ export const DEFAULT_USER_SETTINGS: SettingsObject = {
2728
[INVERTED_DISKS_KEY]: false,
2829
[USE_NODES_ENDPOINT_IN_DIAGNOSTICS_KEY]: false,
2930
[QUERY_USE_MULTI_SCHEMA_KEY]: false,
31+
[BINARY_DATA_IN_PLAIN_TEXT_DISPLAY]: true,
3032
[SAVED_QUERIES_KEY]: [],
3133
[TENANT_INITIAL_PAGE_KEY]: TENANT_PAGES_IDS.query,
3234
[QUERY_INITIAL_MODE_KEY]: QUERY_MODES.script,

src/utils/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ export const SAVED_QUERIES_KEY = 'saved_queries';
8787
export const ASIDE_HEADER_COMPACT_KEY = 'asideHeaderCompact';
8888
export const QUERIES_HISTORY_KEY = 'queries_history';
8989
export const DATA_QA_TUNE_COLUMNS_POPUP = 'tune-columns-popup';
90+
export const BINARY_DATA_IN_PLAIN_TEXT_DISPLAY = 'binaryDataInPlainTextDisplay';
9091

9192
export const DEFAULT_SIZE_RESULT_PANE_KEY = 'default-size-result-pane';
9293
export const DEFAULT_SIZE_TENANT_SUMMARY_KEY = 'default-size-tenant-summary-pane';

0 commit comments

Comments
 (0)