Skip to content

Commit fb48f49

Browse files
fix(YdbEmbeddedAPI): require all params to be passed (#2808)
1 parent 3427206 commit fb48f49

File tree

5 files changed

+38
-25
lines changed

5 files changed

+38
-25
lines changed

src/services/api/base.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,19 @@ export type AxiosOptions = {
1616
};
1717

1818
export interface BaseAPIParams {
19-
singleClusterMode?: boolean;
20-
proxyMeta?: boolean;
19+
singleClusterMode: undefined | boolean;
20+
proxyMeta: undefined | boolean;
2121
}
2222

2323
export class BaseYdbAPI extends AxiosWrapper {
2424
DEFAULT_RETRIES_COUNT = 0;
2525

26-
singleClusterMode?: boolean;
26+
singleClusterMode: BaseAPIParams['singleClusterMode'];
2727

28-
constructor(axiosOptions?: AxiosWrapperOptions, {singleClusterMode}: BaseAPIParams = {}) {
28+
constructor(axiosOptions: AxiosWrapperOptions, baseApiParams: BaseAPIParams) {
2929
super(axiosOptions);
3030

31-
this.singleClusterMode = singleClusterMode;
31+
this.singleClusterMode = baseApiParams.singleClusterMode;
3232

3333
axiosRetry(this._axios, {
3434
retries: this.DEFAULT_RETRIES_COUNT,

src/services/api/index.ts

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,18 @@ import {TabletsAPI} from './tablets';
1515
import {VDiskAPI} from './vdisk';
1616
import {ViewerAPI} from './viewer';
1717

18+
// Require all fields to be explicitly passed
19+
// It is needed to prevent forgotten params in installations
20+
// Where ydb-embedded-ui is used as a package
21+
interface YdbEmbeddedAPIProps {
22+
webVersion: undefined | boolean;
23+
withCredentials: undefined | boolean;
24+
singleClusterMode: undefined | boolean;
25+
proxyMeta: undefined | boolean;
26+
csrfTokenGetter: undefined | (() => string | undefined);
27+
defaults: undefined | AxiosRequestConfig;
28+
}
29+
1830
export class YdbEmbeddedAPI {
1931
auth: AuthAPI;
2032
operation: OperationAPI;
@@ -25,24 +37,18 @@ export class YdbEmbeddedAPI {
2537
tablets: TabletsAPI;
2638
vdisk: VDiskAPI;
2739
viewer: ViewerAPI;
40+
2841
meta?: MetaAPI;
2942
codeAssist?: CodeAssistAPI;
3043

3144
constructor({
3245
webVersion = false,
3346
withCredentials = false,
34-
singleClusterMode,
47+
singleClusterMode = true,
48+
proxyMeta = false,
3549
csrfTokenGetter = () => undefined,
3650
defaults = {},
37-
proxyMeta = false,
38-
}: {
39-
webVersion?: boolean;
40-
withCredentials?: boolean;
41-
singleClusterMode?: boolean;
42-
csrfTokenGetter?: () => string | undefined;
43-
defaults?: AxiosRequestConfig;
44-
proxyMeta?: boolean;
45-
} = {}) {
51+
}: YdbEmbeddedAPIProps) {
4652
const axiosParams: AxiosWrapperOptions = {config: {withCredentials, ...defaults}};
4753
const baseApiParams = {singleClusterMode, proxyMeta};
4854

src/services/api/meta.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@ import type {AxiosOptions, BaseAPIParams} from './base';
1414
import {BaseYdbAPI} from './base';
1515

1616
export class MetaAPI extends BaseYdbAPI {
17-
proxyMeta?: boolean;
18-
constructor(axiosOptions?: AxiosWrapperOptions, {proxyMeta}: BaseAPIParams = {}) {
19-
super(axiosOptions);
17+
proxyMeta: BaseAPIParams['proxyMeta'];
2018

21-
this.proxyMeta = proxyMeta;
19+
constructor(axiosOptions: AxiosWrapperOptions, baseApiParams: BaseAPIParams) {
20+
super(axiosOptions, baseApiParams);
21+
22+
this.proxyMeta = baseApiParams.proxyMeta;
2223
}
2324
getPath(path: string, clusterName?: string) {
2425
if (this.proxyMeta && clusterName) {

src/store/configureStore.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ export function configureStore({
6161
webVersion,
6262
singleClusterMode: isSingleClusterMode,
6363
withCredentials: !customBackend,
64+
proxyMeta: false,
65+
csrfTokenGetter: undefined,
66+
defaults: undefined,
6467
}),
6568
} = {}) {
6669
const params = getUrlData({singleClusterMode, customBackend});

src/uiFactory/types.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,8 @@ export interface UIFactory<H extends string = CommonIssueType> {
3232
getDatabaseLinks?: GetDatabaseLinks;
3333
getClusterLinks?: GetClusterLinks;
3434

35-
renderBackups?: (props: {
36-
database: string;
37-
scrollContainerRef: React.RefObject<HTMLDivElement>;
38-
}) => React.ReactNode;
39-
40-
renderEvents?: () => React.ReactNode;
35+
renderBackups?: RenderBackups;
36+
renderEvents?: RenderEvents;
4137

4238
healthcheck: {
4339
getHealthckechViewTitles: GetHealthcheckViewTitles<H>;
@@ -73,3 +69,10 @@ export type GetDatabaseLinks = (params: {
7369
}) => DatabaseLink[];
7470

7571
export type GetClusterLinks = (params: {clusterInfo: ClusterInfo}) => ClusterLink[];
72+
73+
export type RenderBackups = (props: {
74+
database: string;
75+
scrollContainerRef: React.RefObject<HTMLDivElement>;
76+
}) => React.ReactNode;
77+
78+
export type RenderEvents = () => React.ReactNode;

0 commit comments

Comments
 (0)