@ytsaurus/ui 1.56.1 → 1.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/public/build/assets-manifest.json +15 -15
  2. package/dist/public/build/css/vcs.ca6825ac.chunk.css +2 -0
  3. package/dist/public/build/css/vcs.ca6825ac.chunk.css.map +1 -0
  4. package/dist/public/build/js/{1059.dbab7a54.chunk.js → 1059.68590ad9.chunk.js} +2 -2
  5. package/dist/public/build/js/{1059.dbab7a54.chunk.js.map → 1059.68590ad9.chunk.js.map} +1 -1
  6. package/dist/public/build/js/{main.7c1e6782.js → main.bfc510a2.js} +3 -3
  7. package/dist/public/build/js/{main.7c1e6782.js.map → main.bfc510a2.js.map} +1 -1
  8. package/dist/public/build/js/query-navigation.5f2d5062.chunk.js +2 -0
  9. package/dist/public/build/js/query-navigation.5f2d5062.chunk.js.map +1 -0
  10. package/dist/public/build/js/{runtime.ced6e0e1.js → runtime.7a55c14e.js} +2 -2
  11. package/dist/public/build/js/{runtime.ced6e0e1.js.map → runtime.7a55c14e.js.map} +1 -1
  12. package/dist/public/build/js/vcs.8add27e4.chunk.js +2 -0
  13. package/dist/public/build/js/vcs.8add27e4.chunk.js.map +1 -0
  14. package/dist/public/build/manifest.json +12 -12
  15. package/dist/server/ServerFactory.d.ts +3 -0
  16. package/dist/server/ServerFactory.js +3 -0
  17. package/dist/server/components/vcs/GithubApi.d.ts +21 -10
  18. package/dist/server/components/vcs/GithubApi.js +32 -9
  19. package/dist/server/components/vcs/GitlabApi.d.ts +21 -10
  20. package/dist/server/components/vcs/GitlabApi.js +31 -9
  21. package/dist/server/components/vcs/index.d.ts +1 -16
  22. package/dist/server/components/vcs/index.js +17 -5
  23. package/dist/server/controllers/vcs.d.ts +1 -1
  24. package/dist/server/controllers/vcs.js +43 -25
  25. package/dist/server/routes.js +1 -1
  26. package/dist/shared/constants/vcs.d.ts +1 -0
  27. package/dist/shared/constants/vcs.js +4 -0
  28. package/dist/shared/ui-settings.d.ts +30 -6
  29. package/dist/shared/vcs.d.ts +38 -7
  30. package/package.json +2 -2
  31. package/dist/public/build/css/vcs.9409b0df.chunk.css +0 -2
  32. package/dist/public/build/css/vcs.9409b0df.chunk.css.map +0 -1
  33. package/dist/public/build/js/query-navigation.4b0b6e64.chunk.js +0 -2
  34. package/dist/public/build/js/query-navigation.4b0b6e64.chunk.js.map +0 -1
  35. package/dist/public/build/js/vcs.d737e61e.chunk.js +0 -2
  36. package/dist/public/build/js/vcs.d737e61e.chunk.js.map +0 -1
  37. /package/dist/public/build/js/{main.7c1e6782.js.LICENSE.txt → main.bfc510a2.js.LICENSE.txt} +0 -0
@@ -1,6 +1,4 @@
1
- import { AxiosResponse } from 'axios';
2
- import { GitlabRepository } from '../../../shared/vcs';
3
- import { VcsApi } from './index';
1
+ import { GitlabRepository, VcsApi, VcsRepository } from '../../../shared/vcs';
4
2
  export type GitlabNode = {
5
3
  id: string;
6
4
  mode: string;
@@ -10,22 +8,35 @@ export type GitlabNode = {
10
8
  };
11
9
  export declare class GitlabApi implements VcsApi {
12
10
  token: string;
13
- api: string;
11
+ baseUrl: string;
14
12
  vcsId: string;
15
- constructor({ token, api, vcsId }: {
16
- token: string;
17
- api: string;
13
+ maxFileSize: number;
14
+ constructor({ token, baseUrl, vcsId, maxFileSize, }: {
15
+ token?: string;
16
+ baseUrl: string;
18
17
  vcsId: string;
18
+ maxFileSize: number;
19
19
  });
20
+ getProjectId(repository: VcsRepository): string;
20
21
  getRequestHeaders(): {
21
22
  Authorization: string;
22
23
  };
23
24
  getRepositories(): Promise<Record<string, GitlabRepository>>;
24
- getBranches(projectId: string): Promise<string[]>;
25
- getRepositoryContent(projectId: string, branch: string, path?: string): Promise<{
25
+ getBranches({ repository }: {
26
+ repository: VcsRepository;
27
+ }): Promise<string[]>;
28
+ getRepositoryContent({ repository, branch, path, }: {
29
+ repository: VcsRepository;
30
+ branch: string;
31
+ path?: string;
32
+ }): Promise<{
26
33
  name: string;
27
34
  type: 'tree' | 'blob';
28
35
  url: string;
29
36
  }[]>;
30
- getFileContent(projectId: string, branch: string, path: string): Promise<AxiosResponse<NodeJS.ReadableStream>>;
37
+ getFileContent({ repository, branch, path, }: {
38
+ repository: VcsRepository;
39
+ branch: string;
40
+ path: string;
41
+ }): Promise<string>;
31
42
  }
@@ -5,11 +5,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.GitlabApi = void 0;
7
7
  const axios_1 = __importDefault(require("axios"));
8
+ const utils_1 = require("../../utils");
8
9
  class GitlabApi {
9
- constructor({ token, api, vcsId }) {
10
+ constructor({ token, baseUrl, vcsId, maxFileSize, }) {
11
+ if (!token)
12
+ throw new utils_1.ErrorWithCode(400, 'Token is required');
10
13
  this.token = token;
11
- this.api = api;
14
+ this.baseUrl = baseUrl;
12
15
  this.vcsId = vcsId;
16
+ this.maxFileSize = maxFileSize;
17
+ }
18
+ getProjectId(repository) {
19
+ return repository.projectId;
13
20
  }
14
21
  getRequestHeaders() {
15
22
  return {
@@ -18,7 +25,7 @@ class GitlabApi {
18
25
  }
19
26
  getRepositories() {
20
27
  return axios_1.default
21
- .get(this.api, {
28
+ .get(this.baseUrl, {
22
29
  headers: this.getRequestHeaders(),
23
30
  params: {
24
31
  owned: true,
@@ -37,18 +44,18 @@ class GitlabApi {
37
44
  }, {});
38
45
  });
39
46
  }
40
- getBranches(projectId) {
47
+ getBranches({ repository }) {
41
48
  return axios_1.default
42
- .get(`${this.api}/${projectId}/repository/branches`, {
49
+ .get(`${this.baseUrl}/${this.getProjectId(repository)}/repository/branches`, {
43
50
  headers: this.getRequestHeaders(),
44
51
  })
45
52
  .then((response) => {
46
53
  return response.data.map((i) => i.name);
47
54
  });
48
55
  }
49
- getRepositoryContent(projectId, branch, path = '') {
56
+ getRepositoryContent({ repository, branch, path = '', }) {
50
57
  return axios_1.default
51
- .get(`${this.api}/${projectId}/repository/tree?path=${path}`, {
58
+ .get(`${this.baseUrl}/${this.getProjectId(repository)}/repository/tree?path=${path}`, {
52
59
  headers: this.getRequestHeaders(),
53
60
  params: {
54
61
  ref_name: branch,
@@ -64,14 +71,29 @@ class GitlabApi {
64
71
  });
65
72
  });
66
73
  }
67
- getFileContent(projectId, branch, path) {
68
- return axios_1.default.get(`${this.api}/${projectId}/repository/files/${path}/raw`, {
74
+ async getFileContent({ repository, branch, path, }) {
75
+ const response = await axios_1.default.get(`${this.baseUrl}/${this.getProjectId(repository)}/repository/files/${path}/raw`, {
69
76
  headers: this.getRequestHeaders(),
70
77
  params: {
71
78
  ref_name: branch,
72
79
  },
73
80
  responseType: 'stream',
74
81
  });
82
+ const fileStream = response.data;
83
+ return await new Promise((resolve, reject) => {
84
+ let temp = '';
85
+ fileStream.on('data', (chunk) => {
86
+ temp += chunk.toString();
87
+ if (Buffer.byteLength(temp) > this.maxFileSize)
88
+ reject(new Error(`File is too big. Max size ${this.maxFileSize}Mb`));
89
+ });
90
+ fileStream.on('end', () => {
91
+ resolve(temp);
92
+ });
93
+ fileStream.on('error', (err) => {
94
+ reject(err);
95
+ });
96
+ });
75
97
  }
76
98
  }
77
99
  exports.GitlabApi = GitlabApi;
@@ -1,22 +1,7 @@
1
1
  import { VCSSettings } from '../../../shared/ui-settings';
2
- import { GithubApi } from './GithubApi';
3
- import { GitlabApi } from './GitlabApi';
4
- import { AxiosResponse } from 'axios';
5
2
  import { Request } from '@gravity-ui/expresskit';
6
- export interface VcsApi {
7
- token: string;
8
- api: string;
9
- vcsId: string;
10
- getRequestHeaders(): {
11
- Authorization: string;
12
- };
13
- getRepositories(): Promise<unknown>;
14
- getBranches(projectId: string): Promise<string[]>;
15
- getRepositoryContent(projectId: string, branch: string, path: string): Promise<unknown[]>;
16
- getFileContent(projectId: string, branch: string, path: string): Promise<AxiosResponse<NodeJS.ReadableStream>>;
17
- }
18
3
  export declare class VcsFactory {
19
- static createVcs(vcs: VCSSettings, token?: string): GithubApi | GitlabApi;
4
+ static createVcs(vcs: VCSSettings, token?: string): import("../../../shared/vcs").VcsApi;
20
5
  static getVcsSettings(req: Request): VCSSettings[];
21
6
  static getVcsSettingById(req: Request, vcsId?: string): VCSSettings;
22
7
  }
@@ -1,21 +1,33 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.VcsFactory = void 0;
4
7
  const GithubApi_1 = require("./GithubApi");
5
8
  const GitlabApi_1 = require("./GitlabApi");
6
9
  const utils_1 = require("../../utils");
10
+ const ServerFactory_1 = __importDefault(require("../../ServerFactory"));
11
+ const vcs_1 = require("../../../shared/constants/vcs");
7
12
  class VcsFactory {
8
13
  static createVcs(vcs, token) {
9
- if (!token)
10
- throw new utils_1.ErrorWithCode(400, 'Token is required');
11
- const apiConfig = { token, api: vcs.api, vcsId: vcs.id };
14
+ const apiConfig = {
15
+ token,
16
+ baseUrl: vcs.baseUrl,
17
+ vcsId: vcs.id,
18
+ maxFileSize: vcs.maxFileSize || vcs_1.VCS_DEFAULT_MAX_FILE_SIZE,
19
+ };
12
20
  switch (vcs.type) {
13
21
  case 'github':
14
22
  return new GithubApi_1.GithubApi(apiConfig);
15
23
  case 'gitlab':
16
24
  return new GitlabApi_1.GitlabApi(apiConfig);
17
- default:
18
- throw new utils_1.ErrorWithCode(415, `Unsupported VCS type: ${vcs.type}`);
25
+ default: {
26
+ const vcsApi = ServerFactory_1.default.createCustomVcsApi(vcs.type, vcs, token);
27
+ if (!vcsApi)
28
+ throw new utils_1.ErrorWithCode(400, `Unsupported VCS type`);
29
+ return vcsApi;
30
+ }
19
31
  }
20
32
  }
21
33
  static getVcsSettings(req) {
@@ -1,5 +1,5 @@
1
1
  import { AppRouteHandler } from '@gravity-ui/expresskit';
2
- export declare const getVcsConfig: AppRouteHandler;
2
+ export declare const getVcsTokensAvailability: AppRouteHandler;
3
3
  export declare const createToken: AppRouteHandler;
4
4
  export declare const removeToken: AppRouteHandler;
5
5
  export declare const getRepositories: AppRouteHandler;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getFileContent = exports.getDirectoryContent = exports.getBranches = exports.getRepositories = exports.removeToken = exports.createToken = exports.getVcsConfig = void 0;
6
+ exports.getFileContent = exports.getDirectoryContent = exports.getBranches = exports.getRepositories = exports.removeToken = exports.createToken = exports.getVcsTokensAvailability = void 0;
7
7
  const axios_1 = __importDefault(require("axios"));
8
8
  const utils_1 = require("../utils");
9
9
  const vcs_1 = require("../components/vcs");
@@ -18,15 +18,17 @@ const ERROR_MESSAGE = {
18
18
  VCS_ID_REQUIRED: 'vcsId is required',
19
19
  VCS_NOT_SUPPORTED: 'The current vcsId is missing from the vcsSettings setting in UISettings',
20
20
  TOKEN_REQUIRED: 'Token is required',
21
+ TOKENS_ERROR: 'Error getting vcs tokens availability',
21
22
  PATH_REQUIRED: 'Path is required',
22
23
  BRANCH_REQUIRED: 'Branch is required',
23
24
  REPOSITORY_REQUIRED: 'Repository is required',
24
25
  UNAUTHORIZED: 'The service cannot authorize you. Check the token. You can add new token in the section Settings -> VCS',
25
26
  };
27
+ const VCS_COOKIE_PREFIX = 'vcs_token_';
26
28
  const cookieNameByVcsId = (vcsId) => {
27
29
  if (!vcsId)
28
30
  throw new utils_1.ErrorWithCode(400, ERROR_MESSAGE.VCS_ID_REQUIRED);
29
- return `vcs_${vcsId}`;
31
+ return VCS_COOKIE_PREFIX + vcsId;
30
32
  };
31
33
  const sendApiError = (res, error) => {
32
34
  var _a, _b;
@@ -49,21 +51,27 @@ const sendApiError = (res, error) => {
49
51
  }
50
52
  (0, utils_1.sendError)(res, message, status || 500);
51
53
  };
52
- const getVcsConfig = (req, res) => {
53
- const cookies = req.cookies;
54
+ const getVcsTokensAvailability = (req, res) => {
55
+ const { cookies } = req;
54
56
  try {
55
57
  const config = vcs_1.VcsFactory.getVcsSettings(req);
56
- if (!config.length)
57
- throw new utils_1.ErrorWithCode(404, ERROR_MESSAGE.VCS_CONFIG_NOT_FOUND);
58
- const response = config.map((item) => (Object.assign(Object.assign({}, item), { hasToken: cookieNameByVcsId(item.id) in cookies })));
59
- res.status(200).json(response);
58
+ if (!config)
59
+ throw new utils_1.ErrorWithCode(404, ERROR_MESSAGE.TOKENS_ERROR);
60
+ const vcsTokenKeys = Object.keys(cookies).filter((name) => name.startsWith(VCS_COOKIE_PREFIX));
61
+ const ids = config.reduce((acc, { id }) => {
62
+ if (vcsTokenKeys.includes(VCS_COOKIE_PREFIX + id)) {
63
+ acc.push(id);
64
+ }
65
+ return acc;
66
+ }, []);
67
+ res.status(200).json({ ids });
60
68
  }
61
69
  catch (e) {
62
- req.ctx.logError('Error getting vcs configuration', e);
70
+ req.ctx.logError(ERROR_MESSAGE.TOKENS_ERROR, e);
63
71
  sendApiError(res, e);
64
72
  }
65
73
  };
66
- exports.getVcsConfig = getVcsConfig;
74
+ exports.getVcsTokensAvailability = getVcsTokensAvailability;
67
75
  const createToken = (req, res) => {
68
76
  const { vcsId, token } = req.body;
69
77
  try {
@@ -91,11 +99,6 @@ const removeToken = (req, res) => {
91
99
  }
92
100
  };
93
101
  exports.removeToken = removeToken;
94
- const getProjectIdByRepository = (repository) => {
95
- return 'projectId' in repository
96
- ? repository.projectId
97
- : `${repository.owner}/${repository.name}`;
98
- };
99
102
  const getRepositories = async (req, res) => {
100
103
  const cookies = req.cookies;
101
104
  const vcsId = req.query.vcsId;
@@ -103,7 +106,7 @@ const getRepositories = async (req, res) => {
103
106
  const token = cookies[cookieNameByVcsId(vcsId)];
104
107
  const vcs = vcs_1.VcsFactory.getVcsSettingById(req, vcsId);
105
108
  const api = vcs_1.VcsFactory.createVcs(vcs, token);
106
- const response = await api.getRepositories();
109
+ const response = await api.getRepositories({ req, res });
107
110
  res.status(200).json(response);
108
111
  }
109
112
  catch (e) {
@@ -121,7 +124,10 @@ const getBranches = async (req, res) => {
121
124
  const token = cookies[cookieNameByVcsId(repository.vcsId)];
122
125
  const vcs = vcs_1.VcsFactory.getVcsSettingById(req, repository.vcsId);
123
126
  const api = vcs_1.VcsFactory.createVcs(vcs, token);
124
- const response = await api.getBranches(getProjectIdByRepository(repository));
127
+ const response = await api.getBranches({
128
+ repository,
129
+ requests: { req, res },
130
+ });
125
131
  res.status(200).json(response);
126
132
  }
127
133
  catch (e) {
@@ -145,7 +151,15 @@ const getDirectoryContent = async (req, res) => {
145
151
  const token = cookies[cookieNameByVcsId(repository.vcsId)];
146
152
  const vcs = vcs_1.VcsFactory.getVcsSettingById(req, repository.vcsId);
147
153
  const api = vcs_1.VcsFactory.createVcs(vcs, token);
148
- const response = await api.getRepositoryContent(getProjectIdByRepository(repository), branch, path);
154
+ const response = await api.getRepositoryContent({
155
+ repository,
156
+ branch,
157
+ path,
158
+ requests: {
159
+ req,
160
+ res,
161
+ },
162
+ });
149
163
  response.sort((a, b) => a.type.localeCompare(b.type));
150
164
  res.status(200).json(response);
151
165
  }
@@ -170,14 +184,18 @@ const getFileContent = async (req, res) => {
170
184
  const token = cookies[cookieNameByVcsId(repository.vcsId)];
171
185
  const vcs = vcs_1.VcsFactory.getVcsSettingById(req, repository.vcsId);
172
186
  const api = vcs_1.VcsFactory.createVcs(vcs, token);
173
- const response = await api.getFileContent(getProjectIdByRepository(repository), branch, path);
174
- res.set('content-type', 'text/json');
175
- res.set({
176
- 'Content-Type': response.headers['content-type'],
177
- 'Content-Length': response.headers['content-length'],
178
- 'Content-Disposition': `attachment; filename=${path}`,
187
+ const file = await api.getFileContent({
188
+ repository,
189
+ branch,
190
+ path,
191
+ requests: {
192
+ req,
193
+ res,
194
+ },
179
195
  });
180
- response.data.pipe(res);
196
+ res.set('content-type', 'text/json');
197
+ res.set('Content-Disposition', `attachment; filename=${path}`);
198
+ res.status(200).send({ file });
181
199
  }
182
200
  catch (e) {
183
201
  req.ctx.logError('Error getting file content', e);
@@ -41,7 +41,7 @@ const routes = {
41
41
  'GET /api/vcs/file': { handler: vcs_1.getFileContent },
42
42
  'GET /api/vcs/repositories': { handler: vcs_1.getRepositories },
43
43
  'GET /api/vcs/branches': { handler: vcs_1.getBranches },
44
- 'GET /api/vcs/config': { handler: vcs_1.getVcsConfig },
44
+ 'GET /api/vcs/tokens-availability': { handler: vcs_1.getVcsTokensAvailability },
45
45
  'POST /api/yt/:ytAuthCluster/change-password': { handler: login_1.handleChangePassword, ui: true },
46
46
  'POST /api/remote-copy': { handler: remote_copy_1.handleRemoteCopy },
47
47
  'POST /api/markdown-to-html': { handler: markdown_to_html_1.markdownToHtmlHandler },
@@ -0,0 +1 @@
1
+ export declare const VCS_DEFAULT_MAX_FILE_SIZE: number;
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VCS_DEFAULT_MAX_FILE_SIZE = void 0;
4
+ exports.VCS_DEFAULT_MAX_FILE_SIZE = 10 * 1024 * 1024; // 10Mb
@@ -133,22 +133,43 @@ export interface UISettings {
133
133
  * Allows to customize VCS navigation on the query page
134
134
  * id - unique identifier of VCS
135
135
  * name - name of VCS. The name is displayed in the selector
136
- * api - URL to you VCS api
137
- * type - 'gitlab' | 'github'
136
+ * baseUrl - URL to you VCS api
137
+ * auth - 'token' | 'none'
138
+ * maxFileSize - max file size in bytes. 10Mb by default
139
+ * type - 'gitlab' | 'github' | `custom_vsc_type_${string}`
138
140
  *
139
141
  * @example
140
142
  * vcsSettings: [
141
143
  * {
142
144
  * id: 'vcs1',
143
145
  * name: 'Github',
144
- * api: 'https://api.github.com',
146
+ * auth: 'token',
147
+ * baseUrl: 'https://api.github.com',
145
148
  * type: 'github',
149
+ * maxFileSize: 10485760,
146
150
  * },
147
151
  * {
148
152
  * id: 'vcs2',
149
153
  * name: 'Gitlab',
150
- * api: 'https://gitlab.com/api/v4/projects',
154
+ * auth: 'token',
155
+ * baseUrl: 'https://gitlab.com/api/v4/projects',
151
156
  * type: 'gitlab',
157
+ * maxFileSize: 10485760,
158
+ * },
159
+ * {
160
+ * id: 'My VCS realization 1',
161
+ * name: 'MyVCS',
162
+ * auth: 'token',
163
+ * baseUrl: 'https://my_vcs_url',
164
+ * type: 'custom_vsc_type_my-vcs',
165
+ * maxFileSize: 10485760,
166
+ * },
167
+ * {
168
+ * id: 'My VCS realization 2',
169
+ * name: 'MyVCS',
170
+ * baseUrl: 'https://my_vcs_url',
171
+ * type: 'custom_vsc_type_my-vcs',
172
+ * maxFileSize: 10485760,
152
173
  * },
153
174
  * ],
154
175
  */
@@ -159,11 +180,14 @@ export interface UISettings {
159
180
  */
160
181
  reUseEffectiveAclForPath?: string;
161
182
  }
183
+ export type CustomVCSType = `custom_vsc_type_${string}`;
162
184
  export interface VCSSettings {
163
185
  id: string;
164
186
  name: string;
165
- api: string;
166
- type: 'github' | 'gitlab';
187
+ baseUrl: string;
188
+ auth: 'token' | 'none';
189
+ type: 'github' | 'gitlab' | CustomVCSType;
190
+ maxFileSize: number;
167
191
  }
168
192
  export interface UISettingsMonitoring {
169
193
  urlTemplate: string;
@@ -1,18 +1,49 @@
1
+ import { Request, Response } from '@gravity-ui/expresskit';
1
2
  import { VCSSettings } from './ui-settings';
2
- export type GithubRepository = {
3
+ type Requests = {
4
+ req: Request;
5
+ res: Response;
6
+ };
7
+ export interface VcsApi {
8
+ getRepositories(requests?: Requests): Promise<unknown>;
9
+ getBranches(params: {
10
+ repository: VcsRepository;
11
+ requests?: Requests;
12
+ }): Promise<{
13
+ value: string;
14
+ text: string;
15
+ }[] | string[]>;
16
+ getRepositoryContent(params: {
17
+ repository: VcsRepository;
18
+ branch: string;
19
+ path: string;
20
+ requests?: Requests;
21
+ }): Promise<{
22
+ name: string;
23
+ type: string;
24
+ url: string;
25
+ }[]>;
26
+ getFileContent(params: {
27
+ repository: VcsRepository;
28
+ branch: string;
29
+ path: string;
30
+ requests?: Requests;
31
+ }): Promise<string>;
32
+ }
33
+ export type Repository = {
3
34
  name: string;
4
- owner: string;
5
35
  defaultBranch: string;
6
36
  vcsId: string;
7
37
  };
8
- export type GitlabRepository = {
9
- name: string;
38
+ export type GithubRepository = Repository & {
39
+ owner: string;
40
+ };
41
+ export type GitlabRepository = Repository & {
10
42
  webUrl: string;
11
43
  projectId: string;
12
- defaultBranch: string;
13
- vcsId: string;
14
44
  };
15
- export type VcsRepository = GithubRepository | GitlabRepository;
45
+ export type VcsRepository = Repository | GithubRepository | GitlabRepository;
16
46
  export type VcsConfig = VCSSettings & {
17
47
  hasToken: boolean;
18
48
  };
49
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ytsaurus/ui",
3
- "version": "1.56.1",
3
+ "version": "1.57.0",
4
4
  "repository": {
5
5
  "type": "github",
6
6
  "url": "https://github.com/ytsaurus/ytsaurus-ui/tree/main/packages/ui"
@@ -180,7 +180,7 @@
180
180
  "engines": {
181
181
  "node": ">=18"
182
182
  },
183
- "gitHead": "224a3f876be10f14461ed67eb8be33000bf21484",
183
+ "gitHead": "524bfd2e7d9fb62a60c9a2919b7dc2a61b91488a",
184
184
  "overrides": {
185
185
  "axios": "$axios",
186
186
  "react-split-pane": {
@@ -1,2 +0,0 @@
1
- .vcs-header{display:flex;flex-direction:column;gap:12px;padding:12px}.vcs-header__top-menu{grid-gap:12px 8px;display:grid;gap:12px 8px;grid-template-columns:repeat(2,calc(50% - 4px))}.vcs-items-list{padding:0 12px 12px}.vcs-list-folder{align-items:center;border-bottom:1px solid var(--g-color-line-generic);cursor:pointer;display:flex;gap:0 8px;overflow:hidden;padding:10px 0}.vcs-list-folder__icon{flex-shrink:0}.vcs-list-file{align-items:center;border-bottom:1px solid var(--g-color-line-generic);display:flex;justify-content:space-between;padding:5px 0}.vcs-list-file__link{align-items:center;display:flex;gap:0 8px;overflow:hidden}.vcs-list-file__linkIcon{flex-shrink:0}.vcs-list-file__side{align-items:center;display:flex;gap:0 4px}.vcs-list-preview{display:flex;flex-direction:column;height:100%}.vcs-list-preview__editor{height:100%}.vcs-list-preview__header{align-items:center;display:flex;justify-content:space-between;padding:5px 12px 12px}.vcs-list-preview__header-block{align-items:center;display:flex;gap:0 8px}.vsc{display:flex;flex-direction:column;height:100%}
2
- /*# sourceMappingURL=vcs.9409b0df.chunk.css.map*/
@@ -1 +0,0 @@
1
- {"version":3,"file":"css/vcs.9409b0df.chunk.css","mappings":"AAAA,YACI,aACA,sBACA,SACA,aAEA,sBAGI,kBAFA,aAEA,aADA,+CACA,CCTR,gBACI,oBCDJ,iBAEI,mBAGA,oDACA,eALA,aAEA,UAIA,gBAHA,cAGA,CAEA,uBACI,cCVR,eAEI,mBAGA,oDAJA,aAEA,8BACA,aACA,CAEA,qBAEI,mBADA,aAEA,UACA,gBAGJ,yBACI,cAGJ,qBAEI,mBADA,aAEA,UCrBR,kBACI,aACA,sBACA,YAEA,0BACI,YAGJ,0BAEI,mBADA,aAEA,8BACA,sBAGJ,gCAEI,mBADA,aAEA,UCnBR,KAEI,aACA,sBAFA,WAEA","sources":["webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/Vcs/VcsHeader/VcsHeader.scss","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/Vcs/VcsItemsList/VcsItemsList.scss","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/Vcs/VcsItemsList/VcsListFolder.scss","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/Vcs/VcsItemsList/VcsListFile.scss","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/Vcs/VcsItemsList/VcsListPreview.scss","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/Vcs/Vcs.scss"],"sourcesContent":[".vcs-header {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n\n &__top-menu {\n display: grid;\n grid-template-columns: repeat(2, calc(50% - 4px));\n gap: 12px 8px;\n }\n}\n",".vcs-items-list {\n padding: 0 12px 12px;\n}\n",".vcs-list-folder {\n display: flex;\n align-items: center;\n gap: 0 8px;\n padding: 10px 0;\n border-bottom: 1px solid var(--g-color-line-generic);\n cursor: pointer;\n overflow: hidden;\n\n &__icon {\n flex-shrink: 0;\n }\n}\n",".vcs-list-file {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 5px 0;\n border-bottom: 1px solid var(--g-color-line-generic);\n\n &__link {\n display: flex;\n align-items: center;\n gap: 0 8px;\n overflow: hidden;\n }\n\n &__linkIcon {\n flex-shrink: 0;\n }\n\n &__side {\n display: flex;\n align-items: center;\n gap: 0 4px;\n }\n}\n",".vcs-list-preview {\n display: flex;\n flex-direction: column;\n height: 100%;\n\n &__editor {\n height: 100%;\n }\n\n &__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 5px 12px 12px;\n }\n\n &__header-block{\n display: flex;\n align-items: center;\n gap: 0 8px;\n }\n}\n",".vsc {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n"],"names":[],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_ytsaurus_ui=self.webpackChunk_ytsaurus_ui||[]).push([[1040],{63669:(e,t,n)=>{n.r(t),n.d(t,{Navigation:()=>lt});var r=n(77810),a=n(28407),i=n(70232),o=n.n(i),s=n(76872),c=n(13322),u=n(92423),l=n(72679),d=n(65315),p=n(40319),m=n(64922);const h=function(e){return(0,m.jsx)("svg",(0,p.A)((0,p.A)({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 16 16"},e),{},{children:(0,m.jsx)("path",{fill:"currentColor",fillRule:"evenodd",d:"M7.5 13.5v-3A.5.5 0 0 1 8 10h.672a.5.5 0 0 1 .353.146l.414.415.44.439H13a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-.5.5H8a.5.5 0 0 1-.5-.5M6 13H4.5a3 3 0 0 1-3-3V1.25a.75.75 0 0 1 1.5 0V2a1.5 1.5 0 0 0 1.5 1.5H6v-1a2 2 0 0 1 2-2h.672a2 2 0 0 1 1.414.586l.414.414H13a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V5H4.5A3 3 0 0 1 3 4.599V10a1.5 1.5 0 0 0 1.5 1.5H6v-1a2 2 0 0 1 2-2h.672a2 2 0 0 1 1.414.586l.414.414H13a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2zm1.5-8.75V5.5A.5.5 0 0 0 8 6h5a.5.5 0 0 0 .5-.5v-2A.5.5 0 0 0 13 3H9.879l-.44-.44-.414-.414A.5.5 0 0 0 8.672 2H8a.5.5 0 0 0-.5.5z",clipRule:"evenodd"})}))};var f=function(e){var t=e.item,n=e.isCurrent,r=e.onClick;return(0,m.jsx)("div",{onClick:function(e){e.preventDefault(),t.href&&!n&&r(t.href)},children:t.text})},v=function(e){var t=e.path,n=e.cluster,a=e.onClusterChangeClick,i=e.onItemClick,o=(0,r.useCallback)((function(e){i(e)}),[i]),s=(0,r.useMemo)((function(){var e="/";if(!n)return[];var r=[{text:n,action:function(){i("/")}}],a=t.split("/").reduce((function(t,n){return n&&(e+="/"+n,t.push({text:n,href:e,action:function(){}})),t}),[]);return[].concat(r,(0,c.A)(a))}),[n,t,i]);return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(u.$,{size:"s",view:"flat",onClick:a,children:(0,m.jsx)(l.I,{data:h,size:16})}),(0,m.jsx)(d.BI,{items:s,renderItemContent:function(e,t){return(0,m.jsx)(f,{item:e,isCurrent:t,onClick:o})},firstDisplayedItemsCount:d.t9[t?"Zero":"One"],lastDisplayedItemsCount:d.hR.One})]})};const g=function(e){return(0,m.jsx)("svg",(0,p.A)((0,p.A)({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 16 16"},e),{},{children:(0,m.jsx)("path",{fill:"currentColor",fillRule:"evenodd",d:"m9.194 5 .351.873.94.064 3.197.217-2.46 2.055-.722.603.23.914.782 3.108-2.714-1.704L8 10.629l-.798.5-2.714 1.705.782-3.108.23-.914-.723-.603-2.46-2.055 3.198-.217.94-.064.35-.874L8 2.025zm-7.723-.292 3.943-.268L6.886.773C7.29-.231 8.71-.231 9.114.773l1.472 3.667 3.943.268c1.08.073 1.518 1.424.688 2.118L12.185 9.36l.964 3.832c.264 1.05-.886 1.884-1.802 1.31L8 12.4l-3.347 2.101c-.916.575-2.066-.26-1.802-1.309l.964-3.832L.783 6.826c-.83-.694-.391-2.045.688-2.118",clipRule:"evenodd"})}))},x=function(e){return(0,m.jsx)("svg",(0,p.A)((0,p.A)({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 16 16"},e),{},{children:(0,m.jsx)("path",{fill:"currentColor",d:"M6.886.773C7.29-.231 8.71-.231 9.114.773l1.472 3.667 3.943.268c1.08.073 1.518 1.424.688 2.118L12.185 9.36l.964 3.832c.264 1.05-.886 1.884-1.802 1.31L8 12.4l-3.347 2.101c-.916.575-2.066-.26-1.802-1.309l.964-3.832L.783 6.826c-.83-.694-.391-2.045.688-2.118l3.943-.268z"})}))},w=function(e){return(0,m.jsx)("svg",(0,p.A)((0,p.A)({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 16 16"},e),{},{children:(0,m.jsx)("path",{fill:"currentColor",fillRule:"evenodd",d:"M13.25 2H2.75a.75.75 0 0 0 0 1.5h10.5a.75.75 0 0 0 0-1.5m0 3.5h-5.5a.75.75 0 0 0 0 1.5h5.5a.75.75 0 0 0 0-1.5m0 3.5h-5.5a.75.75 0 0 0 0 1.5h5.5a.75.75 0 0 0 0-1.5m-10.5 3.5h10.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5m.49-7a.74.74 0 0 1 .463.162l1.906 1.526a1.04 1.04 0 0 1 0 1.624l-1.906 1.526A.74.74 0 0 1 2.5 9.76V6.24a.74.74 0 0 1 .74-.74",clipRule:"evenodd"})}))},C=function(e){return(0,m.jsx)("svg",(0,p.A)((0,p.A)({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 16 16"},e),{},{children:(0,m.jsx)("path",{fill:"currentColor",fillRule:"evenodd",d:"M12 2.5H8A1.5 1.5 0 0 0 6.5 4v1H8a3 3 0 0 1 3 3v1.5h1A1.5 1.5 0 0 0 13.5 8V4A1.5 1.5 0 0 0 12 2.5M11 11h1a3 3 0 0 0 3-3V4a3 3 0 0 0-3-3H8a3 3 0 0 0-3 3v1H4a3 3 0 0 0-3 3v4a3 3 0 0 0 3 3h4a3 3 0 0 0 3-3zM4 6.5h4A1.5 1.5 0 0 1 9.5 8v4A1.5 1.5 0 0 1 8 13.5H4A1.5 1.5 0 0 1 2.5 12V8A1.5 1.5 0 0 1 4 6.5",clipRule:"evenodd"})}))};var y=(0,s.A)("navigation-header-actions"),A=function(e){var t=e.isFavorite,n=e.showCopyBtn,r=e.onFavoriteToggle,a=e.onPathCopy,i=e.onPastePath;return(0,m.jsxs)("div",{className:y(),children:[(0,m.jsx)(u.$,{view:"flat",onClick:r,children:(0,m.jsx)(l.I,{data:t?x:g,size:16})}),(0,m.jsx)(u.$,{view:"flat",onClick:i,children:(0,m.jsx)(l.I,{data:w,size:16})}),n&&(0,m.jsx)(u.$,{view:"flat",onClick:a,children:(0,m.jsx)(l.I,{data:C,size:16})})]})},b=n(65692),j=n(15647),k=n(50875),S=n(45045),N=n(48971),T=n(78259),_=n(20194),E=n(64714),I=n(44639),R=n(78894),L=n(68175),P=n(3659),V=n(2796),q=n(66030),H=n(55956),D=n(52797),z=n(88187),O=function(){var e=(0,a.A)(o().mark((function e(t){var n,r,a,i,s,c,u,l,d,m,h,f,v,g,x,w,C,y,A,b;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.clusterConfig,r=t.path,a=t.login,i=t.schema,s=t.keyColumns,c=t.limit,u=t.output_format,l=i.map((function(e){return e.name})),e.next=4,(0,N.fI)(E.Qq.checkPermission(E.Vu.dynTableCheckPerm,{setup:{proxy:(0,D.v9)(n)},parameters:{columns:l,permission:"read",user:a,path:r}}),{skipSuccessToast:!0,toasterName:"query_navigation_node_permissions",errorTitle:"Navigation node get attributes failure"});case 4:if(d=e.sent,Array.isArray(d.columns)){e.next=7;break}return e.abrupt("return",Promise.reject(new Error("Dynamic table columns is not array")));case 7:if(m=d.columns.reduce((function(e,t,n){return"allow"===t.action?e.availableColumns.push(l[n]):(e.omittedColumns.push(l[n]),s.includes(l[n])&&e.deniedKeyColumns.push((0,L.A)({},l[n],t.action))),e}),{availableColumns:[],omittedColumns:[],deniedKeyColumns:[]}),h=m.availableColumns,f=m.omittedColumns,0===m.deniedKeyColumns.length){e.next=10;break}return e.abrupt("return",Promise.reject(new Error("Dynamic table has denied key columns")));case 10:return v=h.map(P.A.decode),g={query:V.A.prepareQuery({aColumns:v,path:r,keyColumns:s,offset:0,limit:c}),output_format:u,dump_error_into_response:!0},x=(0,p.A)({proxy:(0,D.v9)(n),transformResponse:function(e){var t=e.parsedData,n=e.rawResponse;return{data:t,headers:null==n?void 0:n.headers}}},H.oj),e.next=15,(0,N.fI)((0,z.S)({setup:x,parameters:g}),{skipSuccessToast:!0,toasterName:"query_navigation_node",errorTitle:"Navigation node get rows failure"});case 15:return w=e.sent,C=w.columns,y=w.rows,A=w.yqlTypes,b=i.map((function(e){return e.name})),e.abrupt("return",{columns:(0,q._)(C,f,b),rows:y,yqlTypes:A});case 21:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),M=n(96500),B=function(){var e=(0,a.A)(o().mark((function e(t){var n,r,a,i,s,c,u,l,d,m,h,f,v;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.path,r=t.clusterConfig,a=t.schema,i=t.limit,s=t.output_format,c=(0,p.A)({proxy:(0,D.v9)(r),transformResponse:function(e){var t=e.parsedData,n=e.rawResponse;return{data:t,headers:null==n?void 0:n.headers}}},H.oj),u={path:n+"[#0:#"+i+"]",output_format:s,dump_error_into_response:!0,omit_inaccessible_columns:!0,table_reader:{workload_descriptor:{category:"user_interactive"}}},e.next=5,(0,N.fI)((0,M.B)({setup:c,parameters:u}),{skipSuccessToast:!0,toasterName:"query_navigation_node",errorTitle:"Navigation node get rows failure"});case 5:return l=e.sent,d=l.columns,m=l.omittedColumns,h=l.rows,f=l.yqlTypes,v=a.map((function(e){return e.name})),e.abrupt("return",{columns:(0,q._)(d,m,v),rows:h,yqlTypes:f});case 12:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),F=n(13724),Q=n(21594),$=n(19314),Y=function(e){return!!e&&["table","tablet_cell","replicated_table"].includes(e)},U=function(e){return!!e&&["map_node","scheduler_pool_tree_map","topmost_transaction_map","transaction_map","link","rootstock","portal_entrance"].includes(e)},K=function(e,t){return(0,N.fI)(E.Qq.get(E.Vu.navigationAttributes,{setup:(0,p.A)({proxy:(0,D.v9)(t)},H.oj),parameters:{path:"".concat(e,"/@")}}),{skipSuccessToast:!0,toasterName:"query_navigation_node_attributes",errorTitle:"Navigation node get attributes failure"})},Z=n(21347),W=n(63192),G=function(e){var t=e.path,n=e.cluster,r=e.engine;if(!t||"/"===t)return n;switch(r){case Z.d.YQL:return n+".`"+t+"`";case Z.d.YT_QL:case Z.d.CHYT:return"`"+t+"`";default:return"yt.`ytTable:"+t+"`"}},X=function(){var e=(0,a.A)(o().mark((function e(t){var n,r,a,i,s,c;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.clusterConfig,r=t.path,a=t.engine,i=t.limit,e.next=3,K(r,n);case 3:return s=e.sent,c=T.A.getValue(s.schema),e.abrupt("return","SELECT\n".concat(c.map((function(e){return" `"+e.name+"`"})).join(",\r\n"),"\nFROM ").concat(G({path:r,cluster:n.id,engine:a}),"\nLIMIT ").concat(i));case 6:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),J=n(77720),ee=function(e,t){if(t){var n=t.getPosition(),r={range:n?new J.Q6(n.lineNumber,n.column,n.lineNumber,n.column):new J.Q6(0,0,0,0),text:e};t.executeEdits("Insert text",[r])}},te=n(66853),ne=n(6640),re=n(29730),ae=n(54744),ie=n(43359),oe=new R.I,se=function(e){return function(t,n){var r=n(),a=(0,k.rS)(r),i=(0,k.mk)(r);if(a){var o=(0,Q.HL)(a,$.dK.LOCAL);t((0,F.Mb)(e,o));var s=i.map((function(t){return t.path===e?(0,p.A)((0,p.A)({},t),{},{isFavorite:!t.isFavorite}):t}));t((0,S.CU)(s))}}},ce=function(e){return function(){var t=(0,a.A)(o().mark((function t(n,r){var a,i,s,c,u;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(a=r(),i=(0,k.$D)(a),s=(0,k.WS)(a),i){t.next=5;break}return t.abrupt("return");case 5:return t.next=7,(0,N.fI)(E.Qq.list(E.Vu.navigationListNodes,{setup:(0,p.A)({proxy:(0,D.v9)(i)},H.oj),parameters:{path:e,attributes:["type","broken","dynamic"]}}),{skipSuccessToast:!0,toasterName:"query_navigation_node",errorTitle:"Navigation node open failure"});case 7:c=t.sent,u=c.map((function(t){var n=T.A.getValue(t),r=e+"/"+n,a=T.A.getAttributes(t);return(0,p.A)((0,p.A)({name:n},a),{},{path:r,isFavorite:s.includes(r)})})).sort((function(e,t){return e.name.localeCompare(t.name)})),n((0,S.R6)("")),n((0,S.SO)(e)),n((0,S.VR)(S.Dh.Tree)),n((0,S.CU)(u));case 13:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}()},ue=function(e){return function(){var t=(0,a.A)(o().mark((function t(n,r){var a,i,s,c,u,l,d,p,m,h,f,v,g,x,w,C,y;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(a=r(),i=(0,k.$D)(a),s=(0,ie.GN)(),c=s.cellSize,u=s.pageSize,l=(0,re.fN)(a),d=(0,ae.t5)(a),p=(0,D.ID)(a),i){t.next=8;break}return t.abrupt("return");case 8:return t.next=10,K(e,i);case 10:return m=t.sent,h=T.A.getValue(m.schema),f=(0,ne.m3)(h.map((function(e){return e.name})),c,p,l,d),v=m.dynamic?O:B,t.prev=14,t.next=17,v({login:a.global.login,path:e,clusterConfig:i,schema:h,keyColumns:m.key_columns,limit:u,output_format:f});case 17:g=t.sent,x=g.columns,w=g.rows,C=g.yqlTypes,y={name:m.key,meta:(0,_.UQ)({cluster:i.id,attributes:m,tableType:(0,I.H)(m.dynamic,m),isDynamic:m.dynamic}),rows:w,schema:h,columns:x,yqlTypes:C},n((0,S.SO)(e)),n((0,S.tQ)(y)),n((0,S.VR)(S.Dh.Table)),t.next=30;break;case 27:t.prev=27,t.t0=t.catch(14),oe.add({theme:"danger",autoHiding:!1,name:"Load table data error",title:t.t0?t.t0.message:"Can't load table data"});case 30:case"end":return t.stop()}}),t,null,[[14,27]])})));return function(e,n){return t.apply(this,arguments)}}()},le=function(e){return function(){var t=(0,a.A)(o().mark((function t(n,r){var a;return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(a=r(),(0,k.rS)(a)){t.next=4;break}return t.abrupt("return");case 4:return t.prev=4,t.next=7,navigator.clipboard.writeText(e);case 7:oe.add({theme:"success",name:"copy_navigation_path",title:"Path copied"}),t.next=13;break;case 10:t.prev=10,t.t0=t.catch(4),oe.add({theme:"danger",name:"copy_navigation_path",title:"Can't copy path",content:t.t0.message,autoHiding:!1});case 13:case"end":return t.stop()}}),t,null,[[4,10]])})));return function(e,n){return t.apply(this,arguments)}}()},de=n(19904),pe=(0,s.A)("navigation-header"),me=function(){var e=(0,j.wA)(),t=(0,j.d4)(k.WS),n=(0,j.d4)(k.fV),i=(0,j.d4)(k.I7),s=(0,j.d4)(te.ln),c=(0,j.d4)(k.rS),u=(0,j.d4)(k.Rv),l=(0,de.d)().getEditor,d=u!==S.Dh.Table,p=function(){var t=(0,a.A)(o().mark((function t(){return o().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e(le(i));case 1:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),h=(0,r.useCallback)((function(){if(c){var e=l("queryEditor"),t=G({cluster:c,path:i,engine:s});ee(t,e)}}),[c,s,l,i]);return(0,m.jsxs)("div",{className:pe(),children:[(0,m.jsxs)("div",{className:pe("path-wrap"),children:[(0,m.jsx)(v,{path:i,cluster:c,onClusterChangeClick:function(){e((0,S.VR)(S.Dh.Cluster)),e((0,S.l5)(void 0)),e((0,S.SO)(""))},onItemClick:function(t){e(ce(t))}}),c&&(0,m.jsx)(A,{isFavorite:t.includes(i),onFavoriteToggle:function(){e(se(i))},onPathCopy:p,onPastePath:h,showCopyBtn:Boolean(c)})]}),d&&(0,m.jsx)(b.k,{value:n,placeholder:"Filter by name",onUpdate:function(t){e((0,S.R6)(t))},hasClear:!0})]})},he=n(85137),fe=(0,s.A)("navigation-empty"),ve=function(){return(0,m.jsx)("div",{className:fe(),children:(0,m.jsx)(he.E,{variant:"subheader-2",children:"This directory is empty"})})},ge=n(84910),xe=n(56911),we=n(81214),Ce=n.n(we),ye=n(61894),Ae=n.n(ye),be=n(3564),je=n(21086),ke=n(50823),Se=n(40619);const Ne=e=>r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16"},e),r.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M8 14.75a.75.75 0 0 1-.75-.75V3.81L4.53 6.53a.75.75 0 0 1-1.06-1.06l4-4a.75.75 0 0 1 1.06 0l4 4a.75.75 0 0 1-1.06 1.06L8.75 3.81V14a.75.75 0 0 1-.75.75Z",clipRule:"evenodd"})),Te=e=>r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16"},e),r.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M8 1.25a.75.75 0 0 1 .75.75v10.19l2.72-2.72a.75.75 0 1 1 1.06 1.06l-4 4a.75.75 0 0 1-1.06 0l-4-4a.75.75 0 1 1 1.06-1.06l2.72 2.72V2A.75.75 0 0 1 8 1.25Z",clipRule:"evenodd"})),_e=e=>r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16"},e),r.createElement("path",{fill:"currentColor",fillRule:"evenodd",d:"M3.72 2.22a.75.75 0 0 1 1.06 0l3 3a.75.75 0 0 1-1.06 1.06L5 4.56v8.69a.75.75 0 0 1-1.5 0V4.56L1.78 6.28A.75.75 0 0 1 .72 5.22l3-3ZM11.75 14a.75.75 0 0 1-.53-.22l-3-3a.75.75 0 1 1 1.06-1.06L11 11.44V2.75a.75.75 0 0 1 1.5 0v8.69l1.72-1.72a.75.75 0 1 1 1.06 1.06l-3 3a.75.75 0 0 1-.53.22Z",clipRule:"evenodd"})),Ee=(0,je.om)("sort-indicator");function Ie({order:e}){let t;switch(e){case"asc":t=Ne;break;case"desc":t=Te;break;default:t=_e}return r.createElement("div",{className:Ee()},r.createElement(l.I,{data:t,size:14,className:Ee("icon")}))}const Re=(0,je.om)("table");var Le=function(e){var t;const n=`withTableSorting(${(0,ke.x)(e)})`;function a(e,t,n){return Ce()(e,n)===Ce()(t,n)?0:Ce()(e,n)>Ce()(t,n)?1:-1}return t=class extends r.Component{constructor(){var e;super(...arguments),this.state={sort:null!==(e=this.props.defaultSortState)&&void 0!==e?e:[]},this.enhanceColumns=Ae()((e=>e.map((e=>{const t=e.meta;return t&&t.sort?Object.assign(Object.assign({},e),{meta:Object.assign(Object.assign({},e.meta),{_originalName:e.name}),name:()=>{const t=this.getSortState();let n;if(t.length>0){const r=t.find((t=>t.column===e.id));r&&(n=r.order)}const a=Se.X.getHeadCellContent(e),i=[r.createElement("div",{key:"content",className:Re("sort-content")},a),r.createElement("div",{key:"indicator",className:Re("sort-indicator")},r.createElement(Ie,{order:n}))];"right"!==e.align&&"end"!==e.align||i.reverse();const o=this.handleColumnSortClick.bind(this,e),s=(0,be.h)(o);return r.createElement("div",{role:"button",tabIndex:0,className:Re("sort",{active:Boolean(n)}),onClick:o,onKeyDown:s},i)}}):e})))),this.handleColumnSortClick=(e,t)=>{const n=this.getSortState(),r=n.findIndex((t=>t.column===e.id)),a=n[r],i=this.getNextSortForColumn(e,a);t.shiftKey?a?this.handleSortStateChange([...n.slice(0,r),...n.slice(r+1),...i]):this.handleSortStateChange([...n,...i]):this.handleSortStateChange(i)}}render(){const t=this.props,{columns:n}=t,a=(0,xe.Tt)(t,["columns"]);return r.createElement(e,Object.assign({},a,{data:this.getSortedData(),columns:this.enhanceColumns(n)}))}getSortedData(){const{data:e,columns:t,disableDataSorting:n=this.isControlledState()}=this.props,r=this.getSortState();return n||0===r.length?e:e.slice().sort(((e,n)=>{var i;let o=0;for(;o<r.length;){const s=r[o++],c=t.find((e=>e.id===s.column)),u=null===(i=null==c?void 0:c.meta)||void 0===i?void 0:i.sort;if(!u)continue;const l="function"==typeof u?u(e,n):a(e,n,s.column);if(0!==l)return"asc"===s.order?l:-l}return 0}))}getSortState(){const{sortState:e}=this.props,{sort:t}=this.state;return this.isControlledState()?e:t}handleSortStateChange(e){const{onSortStateChange:t}=this.props;this.isControlledState()||this.setState({sort:e}),t&&t(e)}isControlledState(){const{sortState:e,onSortStateChange:t}=this.props;return Boolean(e&&t)}getColumnDefaultSortOrder(e){var t;return(null===(t=e.meta)||void 0===t?void 0:t.defaultSortOrder)||"asc"}getNextSortForColumn(e,t){const n="desc"===this.getColumnDefaultSortOrder(e)?["desc","asc",void 0]:["asc","desc",void 0],r=n.indexOf(null==t?void 0:t.order),a=n[(r+1)%n.length];return a?[{column:e.id,order:a}]:[]}},t.displayName=n,t}(Se.X),Pe=(0,s.A)("table-with-sorting"),Ve=function(e){return(0,m.jsx)(Le,(0,p.A)((0,p.A)({},e),{},{className:Pe(null,e.className)}))},qe=(0,s.A)("navigation-cluster-list"),He=function(){var e=(0,j.wA)(),t=(0,j.d4)(k.n7);return(0,m.jsx)("div",{className:qe(),children:(0,m.jsx)(Ve,{data:t,columns:[{className:qe("row"),id:"name",name:"Name",template:function(e){var t=e.id,n=e.name,r=e.environment;return(0,m.jsx)(ge._,{id:t,name:n,environment:r,className:qe("table-row")},t)},meta:{sort:function(e,t){return e.name.localeCompare(t.name)}}}],onRowClick:function(t){var n;e((n=t.id,function(e){e((0,S.l5)(n)),e((0,S.SO)("/")),e(ce("/"))}))}})})},De=n(9736),ze=n(36554),Oe=n(60620),Me=n(55695),Be=n(41347),Fe=n(75299),Qe=(0,s.A)("navigation-node-list-row"),$e=function(e){var t=e.node,n=t.type,r=t.broken,a=t.dynamic,i=t.name,o=t.path,s=t.isFavorite,c=e.onClick,d=e.onFavoriteToggle,h=e.onClipboardCopy,f=e.onEditorInsert,v=e.onNewQuery,C=e.onNewWindowOpen,y=(0,Fe.A)(!1),A=(0,De.A)(y,2),b=A[0],j=A[1],k=(0,Fe.A)(!1),S=(0,De.A)(k,2),N=S[0],T=S[1],_="table"===n&&a?"table_dynamic":n,E=(0,ze.c5)(_,r),I=U(n)||Y(n),R=I&&"..."!==i,L=function(e){e.stopPropagation()};return(0,m.jsxs)("div",{className:Qe({unsupported:!I,active:N||b}),onClick:function(){c(o,n)},children:[(0,m.jsxs)("div",{className:Qe("icon-wrap"),children:[(0,m.jsx)(Oe.A,{awesome:E,size:16}),s&&(0,m.jsx)(l.I,{data:x,className:Qe("favorite-icon"),size:10})]}),(0,m.jsx)(he.E,{ellipsis:!0,children:i}),R&&(0,m.jsxs)("div",{className:Qe("actions"),children:[(0,m.jsx)(u.$,{view:"flat",onClick:function(e){L(e),d(o)},children:(0,m.jsx)(l.I,{data:s?x:g,size:16})}),Y(n)?(0,m.jsx)(Me.r,{open:b,onOpenToggle:j,renderSwitcher:function(e){return(0,m.jsx)(u.$,(0,p.A)((0,p.A)({view:"flat"},e),{},{children:(0,m.jsx)(l.I,{data:w,size:16})}))},items:[{text:"Copy to clipboard",items:[{text:"Path",action:function(e){e.stopPropagation(),h(o,"path")}}]},{text:"Insert into editor",items:[{text:"Path",action:function(e){e.stopPropagation(),f(o,"path")}},{text:"SELECT",action:function(e){e.stopPropagation(),f(o,"select")}}]},{text:"Create new query",items:[{text:"SELECT (YT QL)",action:function(e){e.stopPropagation(),v(o,Z.d.YT_QL)}},{text:"SELECT (YQL)",action:function(e){e.stopPropagation(),v(o,Z.d.YQL)}},{text:"SELECT (CHYT)",action:function(e){e.stopPropagation(),v(o,Z.d.CHYT)}},{text:"SELECT (SPYT)",action:function(e){e.stopPropagation(),v(o,Z.d.SPYT)}}]}],onSwitcherClick:L}):(0,m.jsx)(u.$,{view:"flat",onClick:function(e){L(e),f(o,"path")},children:(0,m.jsx)(l.I,{data:w,size:16})}),(0,m.jsx)(Me.r,{open:N,onOpenToggle:T,items:[{action:function(e){e.stopPropagation(),h(o,"url")},text:"Copy link"},{action:function(){C(o)},text:"Open in cluster",iconEnd:(0,m.jsx)(l.I,{data:Be.A})}],onSwitcherClick:L})]})]})},Ye=n(5166),Ue=n(73502),Ke=(0,s.A)("navigation-node-list"),Ze=function(){var e=(0,j.wA)(),t=(0,Fe.A)(!1),n=(0,De.A)(t,2),i=n[0],s=n[1],c=(0,r.useRef)(null),u=(0,j.d4)(k.$D),l=(0,j.d4)(k.mV),d=(0,j.d4)(te.ln),h=(0,ie.GN)().pageSize,f=(0,j.d4)(te.Py),v=(0,de.d)().getEditor,g=l.length<=1,x=function(t,n){U(n)?e(ce(t)):Y(n)&&e(ue(t))},w=(0,r.useCallback)((function(t){e(se(t))}),[e]),C=(0,r.useCallback)(function(){var e=(0,a.A)(o().mark((function e(t,n){var r,a;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(u&&u.id){e.next=2;break}return e.abrupt("return");case 2:if(r=v("queryEditor"),a="","path"!==n){e.next=8;break}a=G({cluster:u.id,path:t,engine:d}),e.next=11;break;case 8:return e.next=10,X({clusterConfig:u,path:t,engine:d,limit:h});case 10:a=e.sent;case 11:ee(a,r);case 12:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),[u,d,v,h]),y=(0,r.useCallback)((function(t,n){if(u&&u.id){var r="path"===n?G({cluster:u.id,path:t,engine:d}):function(e,t){var n=new URL(location.origin+location.pathname);return n.searchParams.append("listMode","navigation"),n.searchParams.append("navCluster",e),t&&"/"!==t&&n.searchParams.append("navPath",t),n.toString()}(u.id,t);e(le(r))}}),[u,e,d]),A=(0,r.useCallback)((function(e){if(u&&u.id){var t=new URL(location.origin+"/".concat(u.id,"/navigation"));t.searchParams.append("path",e),window.open(t)}}),[u]),b=(0,r.useCallback)((function(){var t=v("queryEditor"),n=c.current;t&&n&&(e(function(e,t,n){return function(){var r=(0,a.A)(o().mark((function r(a,i){var s,c,u,l,d,m,h,f;return o().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(s=i(),c=(0,ie.GN)(),u=c.pageSize,l=(0,k.$D)(s),d=(0,te.sh)(s),m=d.settings,l){r.next=6;break}return r.abrupt("return");case 6:return r.next=8,a((0,W.cQ)());case 8:return(h=m?(0,p.A)({},m):{}).cluster=l.id,t===Z.d.CHYT&&a((0,W.TI)(t,l.id)),a((0,W.Bn)({engine:t,settings:h})),r.next=14,X({clusterConfig:l,path:e,engine:t,limit:u});case 14:f=r.sent,ee(f,n);case 16:case"end":return r.stop()}}),r)})));return function(e,t){return r.apply(this,arguments)}}()}(n.path,n.engine,t)),s())}),[e,v,s]),S=(0,r.useCallback)((function(){c.current=null,s()}),[s]),N=(0,r.useCallback)(function(){var e=(0,a.A)(o().mark((function e(t,n){return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!f){e.next=4;break}return s(),c.current={path:t,engine:n},e.abrupt("return");case 4:c.current={path:t,engine:n},b();case 6:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),[f,b,s]);return(0,m.jsxs)("div",{className:Ke(),children:[(0,m.jsx)(Ve,{data:l,columns:[{className:Ke("row"),id:"name",name:"Name",template:function(e){return(0,m.jsx)($e,{node:e,onClick:x,onFavoriteToggle:w,onEditorInsert:C,onClipboardCopy:y,onNewWindowOpen:A,onNewQuery:N})},meta:{sort:function(e,t){return e.name.localeCompare(t.name)}}}]}),g&&(0,m.jsx)("div",{className:Ke("empty-wrap"),children:(0,m.jsx)(Ue.R,{className:Ke("empty-icon"),warning:"This directory is empty"})}),(0,m.jsx)(Ye.J,{confirm:b,cancel:S,visible:i})]})},We=n(79726),Ge=n(77318),Xe=[{name:"name",header:"Name",render:function(e){var t=e.row;return(0,m.jsxs)(m.Fragment,{children:[Boolean(t.sort_order)&&(0,m.jsx)(Oe.A,{awesome:"descending"===t.sort_order?"sort-amount-up":"sort-amount-down-alt",size:16})," ",t.name]})}},{name:"type",header:"Type v3",render:function(e){var t=e.row;return(0,m.jsxs)(m.Fragment,{children:[t.type," ",!t.required&&(0,m.jsx)(he.E,{variant:"caption-1",children:"optional"})]})}}],Je=function(e){var t=e.schema,n=(0,j.wA)(),r=(0,j.d4)(k.fV);return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(b.k,{value:r,placeholder:"Filter by name",onUpdate:function(e){n((0,S.R6)(e))},hasClear:!0}),(0,m.jsx)(Ge.Ay,{data:t,columns:Xe,useThemeYT:!0})]})},et=n(35074),tt=n(46619),nt=(0,s.A)("navigation-preview-tab"),rt=function(e){var t=e.table,n=e.ysonSettings,a=e.onEditorInsert,i=(0,r.useMemo)((function(){return(0,tt.X)({columns:t.columns.map((function(e){return{name:e}})),keyColumns:[],yqlTypes:t.yqlTypes,ysonSettings:n,useRawStrings:void 0,schemaByName:t.schema.reduce((function(e,t){return e[t.name]=t,e}),{})})}),[t,n]);return(0,m.jsxs)("div",{children:[(0,m.jsxs)(u.$,{onClick:a,children:[(0,m.jsx)(l.I,{data:Be.A,size:16}),"insert SELECT"]}),(0,m.jsx)(Ge.Ay,{className:nt(),columns:i,data:t.rows,useThemeYT:!0})]})},at=n(34694),it=n(4386),ot=(0,s.A)("navigation-table"),st=function(){var e=(0,r.useState)("schema"),t=(0,De.A)(e,2),n=t[0],i=t[1],s=(0,j.d4)(k.$D),c=(0,j.d4)(k.PR),u=(0,j.d4)(te.ln),l=(0,j.d4)(at.XL),d=(0,j.d4)(k.I7),p=(0,j.d4)(it.Dn),h=(0,de.d)().getEditor,f=function(){var e=(0,a.A)(o().mark((function e(){var t,n;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(s){e.next=2;break}return e.abrupt("return");case 2:return t=h("queryEditor"),e.next=5,X({clusterConfig:s,path:d,engine:u,limit:l});case 5:n=e.sent,ee(n,t);case 7:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();return c?(0,m.jsxs)("div",{className:ot(),children:[(0,m.jsx)(We.a,{defaultValue:n,onUpdate:function(e){i(e)},options:[{value:"schema",content:"Schema"},{value:"preview",content:"Preview"},{value:"meta",content:"Meta"}]}),(0,m.jsxs)("div",{className:ot("content"),children:["schema"===n&&(0,m.jsx)(Je,{schema:c.schema}),"preview"===n&&(0,m.jsx)(rt,{table:c,onEditorInsert:f,ysonSettings:p}),"meta"===n&&(0,m.jsx)(et.Ay,{items:c.meta})]})]}):(0,m.jsx)("div",{children:"Empty data"})},ct=function(){switch((0,j.d4)(k.Rv)){case S.Dh.Tree:return(0,m.jsx)(Ze,{});case S.Dh.Table:return(0,m.jsx)(st,{});case S.Dh.Cluster:return(0,m.jsx)(He,{});default:return(0,m.jsx)(ve,{})}},ut=(0,s.A)("query-navigation"),lt=function(){var e=(0,j.wA)();return(0,r.useEffect)((function(){e(function(){var e=(0,a.A)(o().mark((function e(t,n){var r,a,i,s;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=n(),a=(0,k.$D)(r),i=(0,k.I7)(r),a){e.next=5;break}return e.abrupt("return");case 5:return e.next=7,(0,N.fI)(E.Qq.get(E.Vu.navigationGetType,{setup:(0,p.A)({proxy:(0,D.v9)(a)},H.oj),parameters:{path:"".concat(i,"/@type")}}),{skipSuccessToast:!0,toasterName:"query_navigation_get_node_type",errorTitle:"Navigation get node type failure"});case 7:if(s=e.sent,!Y(s)){e.next=12;break}return e.next=11,t(ue(i));case 11:return e.abrupt("return");case 12:if(!U(s)){e.next=16;break}return e.next=15,t(ce(i));case 15:return e.abrupt("return");case 16:t(ce("/"));case 17:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}())}),[e]),(0,m.jsxs)("div",{className:ut(),children:[(0,m.jsx)(me,{}),(0,m.jsx)(ct,{})]})}},5166:(e,t,n)=>{n.d(t,{J:()=>h,f:()=>f});var r=n(9736),a=n(77810),i=n(15647),o=n(92423),s=n(72679),c=n(11960),u=n(66853),l=n(1701),d=n(19314),p=n(52797),m=n(64922),h=function(e){return(0,m.jsx)(c.A,{title:"New query",content:"All the changes will be lost. Are you sure you want to reset query?",onCancel:e.cancel,onConfirm:e.confirm,onOutsideClick:e.cancel,visible:e.visible})},f=function(e){var t=e.onClick,n=(0,i.d4)(u.Py),c=(0,a.useState)(!1),f=(0,r.A)(c,2),v=f[0],g=f[1],x=(0,i.d4)(p.dB);return(0,m.jsxs)(a.Fragment,{children:[(0,m.jsxs)(o.$,{qa:"new-query-btn",view:"action",size:"l",title:"New query",href:"/".concat(x,"/").concat(d.YW.QUERIES),onClick:function(e){e.preventDefault(),n?g(!0):t()},children:[(0,m.jsx)(s.I,{data:l.A,size:16}),"New"]}),(0,m.jsx)(h,{confirm:function(){t(),g(!1)},cancel:function(){g(!1)},visible:v})]})}},84910:(e,t,n)=>{n.d(t,{_:()=>l}),n(77810);var r=n(76872),a=n(85137),i=n(477),o=n(3844),s=n(64922),c=(0,r.A)("query-cluster-item"),u=(0,r.A)("query-cluster-icon"),l=function(e){var t=e.id,n=e.name,r=e.environment,l=e.className,d=(0,o.O)(t);return(0,s.jsxs)("div",{className:c(null,l),children:[(0,s.jsx)(i.A,{name:n,className:u(null,d)}),(0,s.jsxs)("div",{className:c("info"),children:[n,(0,s.jsx)(a.E,{color:"secondary",className:c("environment"),children:r})]})]})}},41347:(e,t,n)=>{n.d(t,{A:()=>i});var r=n(40319),a=n(64922);const i=function(e){return(0,a.jsx)("svg",(0,r.A)((0,r.A)({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 16 16"},e),{},{children:(0,a.jsx)("path",{fill:"currentColor",fillRule:"evenodd",d:"M10 1.5A.75.75 0 0 0 10 3h1.94L6.97 7.97a.75.75 0 0 0 1.06 1.06L13 4.06V6a.75.75 0 0 0 1.5 0V2.25a.75.75 0 0 0-.75-.75zM7.5 3.25a.75.75 0 0 0-.75-.75H4.5a3 3 0 0 0-3 3v6a3 3 0 0 0 3 3h6a3 3 0 0 0 3-3V9.25a.75.75 0 0 0-1.5 0v2.25a1.5 1.5 0 0 1-1.5 1.5h-6A1.5 1.5 0 0 1 3 11.5v-6A1.5 1.5 0 0 1 4.5 4h2.25a.75.75 0 0 0 .75-.75",clipRule:"evenodd"})}))}},1701:(e,t,n)=>{n.d(t,{A:()=>i});var r=n(40319),a=n(64922);const i=function(e){return(0,a.jsx)("svg",(0,r.A)((0,r.A)({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 16 16"},e),{},{children:(0,a.jsx)("path",{fill:"currentColor",fillRule:"evenodd",d:"M12.5 12a1.5 1.5 0 0 1-1.5 1.5H5A1.5 1.5 0 0 1 3.5 12V4A1.5 1.5 0 0 1 5 2.5h2.757a1.5 1.5 0 0 1 1.061.44l3.243 3.242a1.5 1.5 0 0 1 .439 1.06zm.621-6.879A3 3 0 0 1 14 7.243V12a3 3 0 0 1-3 3H5a3 3 0 0 1-3-3V4a3 3 0 0 1 3-3h2.757a3 3 0 0 1 2.122.879L13.12 5.12ZM8.75 6.75a.75.75 0 0 0-1.5 0v1.5h-1.5a.75.75 0 0 0 0 1.5h1.5v1.5a.75.75 0 0 0 1.5 0v-1.5h1.5a.75.75 0 0 0 0-1.5h-1.5z",clipRule:"evenodd"})}))}}}]);
2
- //# sourceMappingURL=query-navigation.4b0b6e64.chunk.js.map