Skip to content

Commit d1fd058

Browse files
authored
feat: add setting to enable actions with directories from UI (#997)
1 parent 2ee3e79 commit d1fd058

File tree

6 files changed

+30
-7
lines changed

6 files changed

+30
-7
lines changed

src/containers/Tenant/Schema/SchemaTree/SchemaTree.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@ import React from 'react';
55

66
import {NavigationTree} from 'ydb-ui-components';
77

8+
import {USE_DIRECTORY_OPERATIONS} from '../../../../lib';
89
import {schemaApi} from '../../../../store/reducers/schema/schema';
910
import type {EPathType} from '../../../../types/api/schema';
10-
import {useQueryModes, useTypedDispatch} from '../../../../utils/hooks';
11+
import {useQueryModes, useSetting, useTypedDispatch} from '../../../../utils/hooks';
1112
import {isChildlessPathType, mapPathTypeToNavigationTreeType} from '../../utils/schema';
1213
import {getActions} from '../../utils/schemaActions';
1314
import {getControls} from '../../utils/schemaControls';
@@ -22,6 +23,7 @@ interface SchemaTreeProps {
2223
}
2324

2425
export function SchemaTree(props: SchemaTreeProps) {
26+
const [useDirectoryActions] = useSetting<boolean>(USE_DIRECTORY_OPERATIONS);
2527
const {rootPath, rootName, rootType, currentPath, onActivePathUpdate} = props;
2628
const dispatch = useTypedDispatch();
2729

@@ -96,7 +98,9 @@ export function SchemaTree(props: SchemaTreeProps) {
9698
getActions={getActions(dispatch, {
9799
setActivePath: onActivePathUpdate,
98100
setQueryMode,
99-
showCreateDirectoryDialog: handleOpenCreateDirectoryDialog,
101+
showCreateDirectoryDialog: useDirectoryActions
102+
? handleOpenCreateDirectoryDialog
103+
: undefined,
100104
})}
101105
renderAdditionalNodeElements={getControls(dispatch, {
102106
setActivePath: onActivePathUpdate,

src/containers/Tenant/utils/schemaActions.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import {
2929
interface ActionsAdditionalEffects {
3030
setQueryMode: (mode: QueryMode) => void;
3131
setActivePath: (path: string) => void;
32-
showCreateDirectoryDialog: (path: string) => void;
32+
showCreateDirectoryDialog?: (path: string) => void;
3333
}
3434

3535
const bindActions = (
@@ -51,9 +51,11 @@ const bindActions = (
5151
};
5252

5353
return {
54-
createDirectory: () => {
55-
showCreateDirectoryDialog(path);
56-
},
54+
createDirectory: showCreateDirectoryDialog
55+
? () => {
56+
showCreateDirectoryDialog(path);
57+
}
58+
: undefined,
5759
createTable: inputQuery(createTableTemplate, 'script'),
5860
createColumnTable: inputQuery(createColumnTableTemplate, 'script'),
5961
createAsyncReplication: inputQuery(createAsyncReplicationTemplate, 'script'),
@@ -99,7 +101,6 @@ export const getActions =
99101

100102
const DIR_SET: ActionsSet = [
101103
[copyItem],
102-
[{text: i18n('actions.createDirectory'), action: actions.createDirectory}],
103104
[
104105
{text: i18n('actions.createTable'), action: actions.createTable},
105106
{text: i18n('actions.createColumnTable'), action: actions.createColumnTable},
@@ -111,6 +112,11 @@ export const getActions =
111112
{text: i18n('actions.createView'), action: actions.createView},
112113
],
113114
];
115+
if (actions.createDirectory) {
116+
DIR_SET.splice(1, 0, [
117+
{text: i18n('actions.createDirectory'), action: actions.createDirectory},
118+
]);
119+
}
114120
const TABLE_SET: ActionsSet = [
115121
[copyItem],
116122
[

src/containers/UserSettings/i18n/en.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@
4343
"settings.useSeparateDisksPages.title": "Use separate PDisk and VDisk pages",
4444
"settings.useSeparateDisksPages.description": "Use separate pages instead of node structure tab",
4545

46+
"settings.useDirectoryOperations.title": "Enable operations with directories",
47+
4648
"settings.useClusterBalancerAsBackend.title": "Use cluster balancer as backend",
4749
"settings.useClusterBalancerAsBackend.description": "By default random cluster node is used as backend. It causes saved links to become invalid after some time, when node is restarted. Using balancer as backend fixes it",
4850

src/containers/UserSettings/settings.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
QUERY_USE_MULTI_SCHEMA_KEY,
1212
THEME_KEY,
1313
USE_CLUSTER_BALANCER_AS_BACKEND_KEY,
14+
USE_DIRECTORY_OPERATIONS,
1415
USE_NODES_ENDPOINT_IN_DIAGNOSTICS_KEY,
1516
USE_PAGINATED_TABLES_KEY,
1617
USE_SEPARATE_DISKS_PAGES_KEY,
@@ -118,6 +119,11 @@ export const useSeparateDisksPagesSetting: SettingProps = {
118119
description: i18n('settings.useSeparateDisksPages.description'),
119120
};
120121

122+
export const useDirectoryActionsSetting: SettingProps = {
123+
settingKey: USE_DIRECTORY_OPERATIONS,
124+
title: i18n('settings.useDirectoryOperations.title'),
125+
};
126+
121127
export const useClusterBalancerAsBackendSetting: SettingProps = {
122128
settingKey: USE_CLUSTER_BALANCER_AS_BACKEND_KEY,
123129
title: i18n('settings.useClusterBalancerAsBackend.title'),
@@ -155,6 +161,7 @@ export const experimentsSection: SettingsSection = {
155161
usePaginatedTables,
156162
queryUseMultiSchemaSetting,
157163
useSeparateDisksPagesSetting,
164+
useDirectoryActionsSetting,
158165
],
159166
};
160167
export const devSettingsSection: SettingsSection = {

src/services/settings.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
TENANT_INITIAL_PAGE_KEY,
1717
THEME_KEY,
1818
USE_CLUSTER_BALANCER_AS_BACKEND_KEY,
19+
USE_DIRECTORY_OPERATIONS,
1920
USE_NODES_ENDPOINT_IN_DIAGNOSTICS_KEY,
2021
USE_PAGINATED_TABLES_KEY,
2122
USE_SEPARATE_DISKS_PAGES_KEY,
@@ -46,6 +47,7 @@ export const DEFAULT_USER_SETTINGS = {
4647
[AUTOCOMPLETE_ON_ENTER]: true,
4748
[IS_HOTKEYS_HELP_HIDDEN_KEY]: false,
4849
[AUTO_REFRESH_INTERVAL]: 0,
50+
[USE_DIRECTORY_OPERATIONS]: false,
4951
} as const satisfies SettingsObject;
5052

5153
class SettingsManager {

src/utils/constants.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,5 @@ export const AUTOCOMPLETE_ON_ENTER = 'autocompleteOnEnter';
142142
export const IS_HOTKEYS_HELP_HIDDEN_KEY = 'isHotKeysHelpHidden';
143143

144144
export const USE_SEPARATE_DISKS_PAGES_KEY = 'useSeparateDisksPages';
145+
146+
export const USE_DIRECTORY_OPERATIONS = 'useDirectoryOperations';

0 commit comments

Comments
 (0)