Skip to content

Commit 020b2c2

Browse files
authored
Merge branch 'main' into astandrik.1821
2 parents 86b2454 + ac5f23a commit 020b2c2

File tree

20 files changed

+111
-244
lines changed

20 files changed

+111
-244
lines changed

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ on:
22
push:
33
branches:
44
- main
5-
- hotfix/v[0-9]+.[0-9]+.[0-9]+ # match branches in format hotfix/v6.20.10
5+
- hotfix/v[0-9]+.[0-9]+.[0-9]+* # match branches in format hotfix/v6.20.10 and hotfix/v6.20.10-hotfix.1
66

77
name: Release
88

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "9.6.3"
2+
".": "9.7.0"
33
}

CHANGELOG.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,24 @@
11
# Changelog
22

3+
## [9.7.0](https://github.com/ydb-platform/ydb-embedded-ui/compare/v9.6.3...v9.7.0) (2025-06-20)
4+
5+
6+
### Features
7+
8+
* add backups page with custom render ([#2442](https://github.com/ydb-platform/ydb-embedded-ui/issues/2442)) ([b66e8d5](https://github.com/ydb-platform/ydb-embedded-ui/commit/b66e8d50bdf23044f103850310bdec55a400ee54))
9+
* manage schema object permissions ([#2398](https://github.com/ydb-platform/ydb-embedded-ui/issues/2398)) ([0c89baa](https://github.com/ydb-platform/ydb-embedded-ui/commit/0c89baa3d9f33ae8cc9b67a101815bdcbf5a890d))
10+
11+
12+
### Bug Fixes
13+
14+
* **HealthcheckPreview:** use only one query ([#2427](https://github.com/ydb-platform/ydb-embedded-ui/issues/2427)) ([74ca103](https://github.com/ydb-platform/ydb-embedded-ui/commit/74ca10362e45a062fccdd8b4a7691abb7bcc8a4d))
15+
* **healthcheck:** show groups ids in separate rows ([#2423](https://github.com/ydb-platform/ydb-embedded-ui/issues/2423)) ([eaa789b](https://github.com/ydb-platform/ydb-embedded-ui/commit/eaa789bcdb320ebec137aace2c1e055ef999bd2c))
16+
* **Network:** require ConnectStatus for host column ([#2429](https://github.com/ydb-platform/ydb-embedded-ui/issues/2429)) ([eccba69](https://github.com/ydb-platform/ydb-embedded-ui/commit/eccba6912daecf540d435b3df2eb3e186ab815ff))
17+
* **Nodes:** request tablets only if required ([#2433](https://github.com/ydb-platform/ydb-embedded-ui/issues/2433)) ([e1499e9](https://github.com/ydb-platform/ydb-embedded-ui/commit/e1499e9912692e3714708e574f87c77c3d507940))
18+
* support name param for database ([#2426](https://github.com/ydb-platform/ydb-embedded-ui/issues/2426)) ([ce1fb66](https://github.com/ydb-platform/ydb-embedded-ui/commit/ce1fb6639030e608bab6628f4c45cfd10e9512a5))
19+
* tests ([#2439](https://github.com/ydb-platform/ydb-embedded-ui/issues/2439)) ([6001e22](https://github.com/ydb-platform/ydb-embedded-ui/commit/6001e22d0b24abf1ff07b8548f9208c494b0afe7))
20+
* unskip tests ([#2436](https://github.com/ydb-platform/ydb-embedded-ui/issues/2436)) ([76b37bb](https://github.com/ydb-platform/ydb-embedded-ui/commit/76b37bbe8ec36bb91481fbf636bd6d038c5eb726))
21+
322
## [9.6.3](https://github.com/ydb-platform/ydb-embedded-ui/compare/v9.6.2...v9.6.3) (2025-06-17)
423

524

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ydb-embedded-ui",
3-
"version": "9.6.3",
3+
"version": "9.7.0",
44
"files": [
55
"dist"
66
],

src/containers/Clusters/columns.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ function getTitleColumn({isEditClusterAvailable, isDeleteClusterAvailable}: Clus
8888
<DropdownMenu
8989
items={menuItems}
9090
defaultSwitcherProps={{view: 'flat-secondary'}}
91+
size="s"
9192
menuProps={{size: 'l'}}
9293
/>
9394
);
@@ -199,7 +200,10 @@ const CLUSTERS_COLUMNS: Column<PreparedCluster>[] = [
199200
sortable: false,
200201
render: ({row}) => {
201202
const dc = (row.cluster && row.cluster.DataCenters) || [];
202-
return <div className={b('cluster-dc')}>{dc.join(', ') || EMPTY_CELL}</div>;
203+
return (
204+
// For some reason DC list could contain empty strings
205+
<div className={b('cluster-dc')}>{dc.filter(Boolean).join(', ') || EMPTY_CELL}</div>
206+
);
203207
},
204208
},
205209
{

src/containers/Tenant/Diagnostics/Diagnostics.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
import {TENANT_DIAGNOSTICS_TABS_IDS} from '../../../store/reducers/tenant/constants';
1414
import {setDiagnosticsTab} from '../../../store/reducers/tenant/tenant';
1515
import type {AdditionalNodesProps, AdditionalTenantsProps} from '../../../types/additionalProps';
16+
import {uiFactory} from '../../../uiFactory/uiFactory';
1617
import {cn} from '../../../utils/cn';
1718
import {useTypedDispatch, useTypedSelector} from '../../../utils/hooks';
1819
import {Heatmap} from '../../Heatmap';
@@ -49,7 +50,6 @@ const b = cn('kv-tenant-diagnostics');
4950
function Diagnostics(props: DiagnosticsProps) {
5051
const {path, database, type, subType} = useCurrentSchema();
5152
const containerRef = React.useRef<HTMLDivElement>(null);
52-
5353
const dispatch = useTypedDispatch();
5454
const {diagnosticsTab = TENANT_DIAGNOSTICS_TABS_IDS.overview} = useTypedSelector(
5555
(state) => state.tenant,
@@ -65,6 +65,7 @@ function Diagnostics(props: DiagnosticsProps) {
6565
hasFeatureFlags,
6666
hasTopicData,
6767
isTopLevel: path === database,
68+
hasBackups: typeof uiFactory.renderBackups === 'function',
6869
});
6970
let activeTab = pages.find((el) => el.id === diagnosticsTab);
7071
if (!activeTab) {
@@ -77,6 +78,7 @@ function Diagnostics(props: DiagnosticsProps) {
7778
}
7879
}, [activeTab, diagnosticsTab, dispatch]);
7980

81+
// eslint-disable-next-line complexity
8082
const renderTabContent = () => {
8183
switch (activeTab?.id) {
8284
case TENANT_DIAGNOSTICS_TABS_IDS.overview: {
@@ -161,6 +163,12 @@ function Diagnostics(props: DiagnosticsProps) {
161163
case TENANT_DIAGNOSTICS_TABS_IDS.operations: {
162164
return <Operations database={tenantName} scrollContainerRef={containerRef} />;
163165
}
166+
case TENANT_DIAGNOSTICS_TABS_IDS.backups: {
167+
return uiFactory.renderBackups?.({
168+
database: tenantName,
169+
scrollContainerRef: containerRef,
170+
});
171+
}
164172
default: {
165173
return <div>No data...</div>;
166174
}

src/containers/Tenant/Diagnostics/DiagnosticsPages.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ const access = {
3737
id: TENANT_DIAGNOSTICS_TABS_IDS.access,
3838
title: 'Access',
3939
};
40+
const backups = {
41+
id: TENANT_DIAGNOSTICS_TABS_IDS.backups,
42+
title: 'Backups',
43+
};
4044

4145
const nodes = {
4246
id: TENANT_DIAGNOSTICS_TABS_IDS.nodes,
@@ -111,6 +115,7 @@ const DATABASE_PAGES = [
111115
configs,
112116
access,
113117
operations,
118+
backups,
114119
];
115120

116121
const TABLE_PAGES = [overview, schema, topShards, nodes, graph, tablets, hotKeys, describe, access];
@@ -166,7 +171,12 @@ const pathSubTypeToPages: Record<EPathSubType, Page[] | undefined> = {
166171
export const getPagesByType = (
167172
type?: EPathType,
168173
subType?: EPathSubType,
169-
options?: {hasFeatureFlags?: boolean; hasTopicData?: boolean; isTopLevel?: boolean},
174+
options?: {
175+
hasFeatureFlags?: boolean;
176+
hasTopicData?: boolean;
177+
isTopLevel?: boolean;
178+
hasBackups?: boolean;
179+
},
170180
) => {
171181
const subTypePages = subType ? pathSubTypeToPages[subType] : undefined;
172182
const typePages = type ? pathTypeToPages[type] : undefined;
@@ -181,6 +191,9 @@ export const getPagesByType = (
181191
return pages.filter((item) => item.id !== TENANT_DIAGNOSTICS_TABS_IDS.configs);
182192
}
183193
}
194+
if (!options?.hasBackups) {
195+
return pages.filter((item) => item.id !== TENANT_DIAGNOSTICS_TABS_IDS.backups);
196+
}
184197
return pages;
185198
};
186199

src/containers/Tenant/Query/QueryEditor/QueryEditor.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import {
3939
useTypedSelector,
4040
} from '../../../../utils/hooks';
4141
import {useChangedQuerySettings} from '../../../../utils/hooks/useChangedQuerySettings';
42+
import {useDisableOidcStreaming} from '../../../../utils/hooks/useDisableOidcStreaming';
4243
import {useLastQueryExecutionSettings} from '../../../../utils/hooks/useLastQueryExecutionSettings';
4344
import {DEFAULT_QUERY_SETTINGS, QUERY_ACTIONS, QUERY_MODES} from '../../../../utils/query';
4445
import {useCurrentSchema} from '../../TenantContext';
@@ -94,10 +95,14 @@ export default function QueryEditor(props: QueryEditorProps) {
9495
const [lastExecutedQueryText, setLastExecutedQueryText] = React.useState<string>('');
9596
const [isQueryStreamingEnabled] = useSetting<boolean>(ENABLE_QUERY_STREAMING);
9697

98+
// Temporary check: disable streaming if backend parameter contains "oidc"
99+
const isOidcBackend = useDisableOidcStreaming();
100+
97101
const isStreamingEnabled =
98102
useStreamingAvailable() &&
99103
isQueryStreamingEnabled &&
100-
querySettings.queryMode === QUERY_MODES.query;
104+
querySettings.queryMode === QUERY_MODES.query &&
105+
!isOidcBackend;
101106

102107
const [sendQuery] = queryApi.useUseSendQueryMutation();
103108
const [streamQuery] = queryApi.useUseStreamQueryMutation();

src/containers/Tenant/Query/QuerySettingsDialog/TimeoutLabel.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {HelpMark, Switch} from '@gravity-ui/uikit';
33
import {cn} from '../../../../utils/cn';
44
import {ENABLE_QUERY_STREAMING} from '../../../../utils/constants';
55
import {useSetting} from '../../../../utils/hooks';
6+
import {useDisableOidcStreaming} from '../../../../utils/hooks/useDisableOidcStreaming';
67

78
import {QUERY_SETTINGS_FIELD_SETTINGS} from './constants';
89
import i18n from './i18n';
@@ -20,7 +21,12 @@ interface TimeoutLabelProps {
2021
export function TimeoutLabel({isDisabled, isChecked, onToggle}: TimeoutLabelProps) {
2122
const [isQueryStreamingEnabled] = useSetting<boolean>(ENABLE_QUERY_STREAMING);
2223

23-
if (isQueryStreamingEnabled) {
24+
// Temporary check: disable streaming UI if backend parameter contains "oidc"
25+
const isOidcBackend = useDisableOidcStreaming();
26+
27+
const shouldShowStreamingUI = isQueryStreamingEnabled && !isOidcBackend;
28+
29+
if (shouldShowStreamingUI) {
2430
return (
2531
<div className={b('switch-title')}>
2632
<Switch

0 commit comments

Comments
 (0)