@ytsaurus/ui 1.14.2 → 1.15.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.
- package/build/cjs/@types/core.d.ts +3 -2
- package/build/cjs/server/configs/local.js +1 -0
- package/build/cjs/server/configs/local.js.map +1 -1
- package/build/cjs/shared/constants/yt-api-id.d.ts +139 -0
- package/build/cjs/shared/constants/yt-api-id.js +148 -0
- package/build/cjs/shared/constants/yt-api-id.js.map +1 -0
- package/build/cjs/shared/ui-settings.d.ts +1 -0
- package/build/cjs/shared/ui-settings.js.map +1 -1
- package/build/cjs/shared/utils/check-permission.d.ts +1 -14
- package/build/cjs/shared/utils/check-permission.js +6 -10
- package/build/cjs/shared/utils/check-permission.js.map +1 -1
- package/build/cjs/ui/UIFactory.d.ts +4 -1
- package/build/cjs/ui/UIFactory.js +9 -2
- package/build/cjs/ui/UIFactory.js.map +1 -1
- package/build/cjs/ui/components/Support/Support.js +6 -4
- package/build/cjs/ui/components/Support/Support.js.map +1 -1
- package/build/cjs/ui/containers/AppNavigation/AppNavigationComponent.js +50 -5
- package/build/cjs/ui/containers/AppNavigation/AppNavigationComponent.js.map +1 -1
- package/build/cjs/ui/containers/SettingsPanel/settings-description.js +1 -1
- package/build/cjs/ui/containers/SettingsPanel/settings-description.js.map +1 -1
- package/build/cjs/ui/containers/SupportComponent/SupportComponent.d.ts +5 -0
- package/build/cjs/ui/containers/SupportComponent/SupportComponent.js +24 -0
- package/build/cjs/ui/containers/SupportComponent/SupportComponent.js.map +1 -0
- package/build/cjs/ui/pages/operations/OperationDetail/tabs/details/Details/Details.css +6 -1
- package/build/cjs/ui/pages/operations/OperationDetail/tabs/details/Details/Details.css.map +1 -1
- package/build/cjs/ui/rum/rum-wrap-api.d.ts +3 -141
- package/build/cjs/ui/rum/rum-wrap-api.js +12 -145
- package/build/cjs/ui/rum/rum-wrap-api.js.map +1 -1
- package/build/cjs/ui/store/actions/cluster-params.js +22 -15
- package/build/cjs/ui/store/actions/cluster-params.js.map +1 -1
- package/build/cjs/ui/store/actions/scheduling/expanded-pools.js +1 -1
- package/build/cjs/ui/store/actions/scheduling/expanded-pools.js.map +1 -1
- package/build/cjs/ui/store/actions/system/masters.js +7 -3
- package/build/cjs/ui/store/actions/system/masters.js.map +1 -1
- package/build/cjs/ui/store/selectors/global/index.d.ts +1 -1
- package/build/cjs/ui/store/selectors/global/index.js +4 -4
- package/build/cjs/ui/store/selectors/global/index.js.map +1 -1
- package/build/cjs/ui/utils/scheduling/pool-child.js +1 -1
- package/build/cjs/ui/utils/scheduling/pool-child.js.map +1 -1
- package/build/esm/@types/core.d.ts +3 -2
- package/build/esm/server/configs/local.js +2 -1
- package/build/esm/server/configs/local.js.map +1 -1
- package/build/esm/shared/constants/yt-api-id.d.ts +139 -0
- package/build/esm/shared/constants/yt-api-id.js +141 -0
- package/build/esm/shared/constants/yt-api-id.js.map +1 -0
- package/build/esm/shared/ui-settings.d.ts +1 -0
- package/build/esm/shared/ui-settings.js.map +1 -1
- package/build/esm/shared/utils/check-permission.d.ts +1 -14
- package/build/esm/shared/utils/check-permission.js +8 -11
- package/build/esm/shared/utils/check-permission.js.map +1 -1
- package/build/esm/ui/UIFactory.d.ts +4 -1
- package/build/esm/ui/UIFactory.js +9 -2
- package/build/esm/ui/UIFactory.js.map +1 -1
- package/build/esm/ui/components/Support/Support.js +6 -4
- package/build/esm/ui/components/Support/Support.js.map +1 -1
- package/build/esm/ui/containers/AppNavigation/AppNavigationComponent.js +50 -5
- package/build/esm/ui/containers/AppNavigation/AppNavigationComponent.js.map +1 -1
- package/build/esm/ui/containers/SettingsPanel/settings-description.js +2 -2
- package/build/esm/ui/containers/SettingsPanel/settings-description.js.map +1 -1
- package/build/esm/ui/containers/SupportComponent/SupportComponent.d.ts +5 -0
- package/build/esm/ui/containers/SupportComponent/SupportComponent.js +18 -0
- package/build/esm/ui/containers/SupportComponent/SupportComponent.js.map +1 -0
- package/build/esm/ui/pages/operations/OperationDetail/tabs/details/Details/Details.css +6 -1
- package/build/esm/ui/pages/operations/OperationDetail/tabs/details/Details/Details.css.map +1 -1
- package/build/esm/ui/pages/operations/OperationDetail/tabs/details/Details/Details.scss +6 -1
- package/build/esm/ui/rum/rum-wrap-api.d.ts +3 -141
- package/build/esm/ui/rum/rum-wrap-api.js +3 -141
- package/build/esm/ui/rum/rum-wrap-api.js.map +1 -1
- package/build/esm/ui/store/actions/cluster-params.js +24 -17
- package/build/esm/ui/store/actions/cluster-params.js.map +1 -1
- package/build/esm/ui/store/actions/scheduling/expanded-pools.js +1 -1
- package/build/esm/ui/store/actions/scheduling/expanded-pools.js.map +1 -1
- package/build/esm/ui/store/actions/system/masters.js +7 -3
- package/build/esm/ui/store/actions/system/masters.js.map +1 -1
- package/build/esm/ui/store/selectors/global/index.d.ts +1 -1
- package/build/esm/ui/store/selectors/global/index.js +3 -3
- package/build/esm/ui/store/selectors/global/index.js.map +1 -1
- package/build/esm/ui/utils/scheduling/pool-child.js +1 -1
- package/build/esm/ui/utils/scheduling/pool-child.js.map +1 -1
- package/dist/public/build/assets-manifest.json +16 -16
- package/dist/public/build/css/{89.3546950a.chunk.css → 861.c5a67589.chunk.css} +1 -1
- package/dist/public/build/css/861.c5a67589.chunk.css.map +1 -0
- package/dist/public/build/css/{main.e919e247.css → main.675cb8c4.css} +2 -2
- package/dist/public/build/css/main.675cb8c4.css.map +1 -0
- package/dist/public/build/js/861.9703a31c.chunk.js +2 -0
- package/dist/public/build/js/861.9703a31c.chunk.js.map +1 -0
- package/dist/public/build/js/{943.f6342dd5.chunk.js → 943.40ff6440.chunk.js} +2 -2
- package/dist/public/build/js/{943.f6342dd5.chunk.js.map → 943.40ff6440.chunk.js.map} +1 -1
- package/dist/public/build/js/main.fb68ce2c.js +3 -0
- package/dist/public/build/js/{main.8e777909.js.map → main.fb68ce2c.js.map} +1 -1
- package/dist/public/build/js/runtime.ac9a4336.js +2 -0
- package/dist/public/build/js/{runtime.fd8cf219.js.map → runtime.ac9a4336.js.map} +1 -1
- package/dist/public/build/manifest.json +12 -12
- package/dist/server/configs/local.js +1 -0
- package/dist/shared/ui-settings.d.ts +1 -0
- package/package.json +4 -4
- package/dist/public/build/css/89.3546950a.chunk.css.map +0 -1
- package/dist/public/build/css/main.e919e247.css.map +0 -1
- package/dist/public/build/js/89.07445d46.chunk.js +0 -2
- package/dist/public/build/js/89.07445d46.chunk.js.map +0 -1
- package/dist/public/build/js/main.8e777909.js +0 -3
- package/dist/public/build/js/runtime.fd8cf219.js +0 -2
- /package/dist/public/build/js/{main.8e777909.js.LICENSE.txt → main.fb68ce2c.js.LICENSE.txt} +0 -0
@@ -1,12 +1,7 @@
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
1
2
|
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
2
|
-
import
|
3
|
+
import { YT_API_REQUEST_ID_HEADER } from '../constants';
|
3
4
|
var yt = require('@ytsaurus/javascript-wrapper')();
|
4
|
-
export function prepareCheckIsDeveloperRequests(login) {
|
5
|
-
var _prepareCheckUserPerm = prepareCheckUserPermissionByAclRequests('admins', login, ['write']),
|
6
|
-
_prepareCheckUserPerm2 = _slicedToArray(_prepareCheckUserPerm, 1),
|
7
|
-
first = _prepareCheckUserPerm2[0];
|
8
|
-
return [first];
|
9
|
-
}
|
10
5
|
function prepareCheckUserPermissionByAclRequests(groupName, user, permissionTypes) {
|
11
6
|
return permissionTypes.map(function (permission) {
|
12
7
|
return {
|
@@ -25,19 +20,21 @@ function prepareCheckUserPermissionByAclRequests(groupName, user, permissionType
|
|
25
20
|
}
|
26
21
|
function checkUserPermissionByAcl(groupName, user, permissionTypes) {
|
27
22
|
var setup = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined;
|
23
|
+
var ytApiId = arguments.length > 4 ? arguments[4] : undefined;
|
28
24
|
// $ yt --proxy cluster_proxy execute check_permission_by_acl \
|
29
25
|
// '{acl=[{permissions=[write]; subjects=[yt;admins]; action=allow}]; user=max42; permission=write}'
|
30
26
|
var requests = prepareCheckUserPermissionByAclRequests(groupName, user, permissionTypes);
|
31
27
|
return yt.v3.executeBatch({
|
32
|
-
setup: setup,
|
28
|
+
setup: _objectSpread(_objectSpread({}, setup), {}, {
|
29
|
+
requestHeaders: _defineProperty({}, YT_API_REQUEST_ID_HEADER, ytApiId)
|
30
|
+
}),
|
33
31
|
parameters: {
|
34
32
|
requests: requests
|
35
33
|
}
|
36
34
|
});
|
37
35
|
}
|
38
|
-
export function checkIsDeveloper(login) {
|
39
|
-
|
40
|
-
return checkUserPermissionByAcl('admins', login, ['write'], setup).then(function (d) {
|
36
|
+
export function checkIsDeveloper(login, setup, ytApiId) {
|
37
|
+
return checkUserPermissionByAcl('admins', login, ['write'], setup, ytApiId).then(function (d) {
|
41
38
|
var output = d[0].output;
|
42
39
|
return (output === null || output === void 0 ? void 0 : output.action) === 'allow';
|
43
40
|
})["catch"](function () {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["
|
1
|
+
{"version":3,"names":["YT_API_REQUEST_ID_HEADER","yt","require","prepareCheckUserPermissionByAclRequests","groupName","user","permissionTypes","map","permission","command","parameters","acl","permissions","subjects","action","checkUserPermissionByAcl","setup","arguments","length","undefined","ytApiId","requests","v3","executeBatch","_objectSpread","requestHeaders","_defineProperty","checkIsDeveloper","login","then","d","output","makeCheckPermissionBatchSubRequest","_ref","path","transaction_id","vital","result"],"sources":["check-permission.ts"],"sourcesContent":["import {YT_API_REQUEST_ID_HEADER} from '../constants';\nimport {FIX_MY_TYPE} from '../../@types/types';\nimport {BatchResultsItem, BatchSubRequest, YTPermissionType} from '../yt-types';\n\nconst yt = require('@ytsaurus/javascript-wrapper')();\n\nfunction prepareCheckUserPermissionByAclRequests(\n groupName: string,\n user: string,\n permissionTypes: Array<YTPermissionType>,\n) {\n return permissionTypes.map((permission) => {\n return {\n command: 'check_permission_by_acl' as const,\n parameters: {\n acl: [\n {\n permissions: [permission],\n subjects: [groupName],\n action: 'allow' as const,\n },\n ],\n user,\n permission,\n },\n };\n });\n}\n\nfunction checkUserPermissionByAcl(\n groupName: string,\n user: string,\n permissionTypes: Array<YTPermissionType>,\n setup: FIX_MY_TYPE = undefined,\n ytApiId: string,\n) {\n // $ yt --proxy cluster_proxy execute check_permission_by_acl \\\n // '{acl=[{permissions=[write]; subjects=[yt;admins]; action=allow}]; user=max42; permission=write}'\n const requests = prepareCheckUserPermissionByAclRequests(groupName, user, permissionTypes);\n\n return yt.v3.executeBatch({\n setup: {...setup, requestHeaders: {[YT_API_REQUEST_ID_HEADER]: ytApiId}},\n parameters: {requests},\n }) as Promise<Array<BatchResultsItem<CheckPermissionItemResult>>>;\n}\n\nexport function checkIsDeveloper(login: string, setup: unknown, ytApiId: string) {\n return checkUserPermissionByAcl('admins', login, ['write'], setup, ytApiId)\n .then((d) => {\n const {output} = d[0];\n return output?.action === 'allow';\n })\n .catch(() => {\n return false;\n });\n}\n\nexport type CheckPermissionItem = {\n user: string;\n path: string;\n permission: YTPermissionType;\n transaction_id?: string;\n vital?: boolean;\n};\n\nexport type CheckPermissionItemResult = {\n action: 'allow' | 'deny';\n};\n\nexport function makeCheckPermissionBatchSubRequest({\n path,\n user,\n permission,\n transaction_id,\n vital,\n}: CheckPermissionItem): BatchSubRequest {\n const result: BatchSubRequest = {\n command: 'check_permission' as const,\n parameters: {\n path,\n user,\n permission,\n ...(transaction_id ? {transaction_id} : {}),\n ...(vital ? {vital} : {}),\n },\n };\n return result;\n}\n"],"mappings":";;AAAA,SAAQA,wBAAwB,QAAO,cAAc;AAIrD,IAAMC,EAAE,GAAGC,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAC;AAEpD,SAASC,uCAAuCA,CAC5CC,SAAiB,EACjBC,IAAY,EACZC,eAAwC,EAC1C;EACE,OAAOA,eAAe,CAACC,GAAG,CAAC,UAACC,UAAU,EAAK;IACvC,OAAO;MACHC,OAAO,EAAE,yBAAkC;MAC3CC,UAAU,EAAE;QACRC,GAAG,EAAE,CACD;UACIC,WAAW,EAAE,CAACJ,UAAU,CAAC;UACzBK,QAAQ,EAAE,CAACT,SAAS,CAAC;UACrBU,MAAM,EAAE;QACZ,CAAC,CACJ;QACDT,IAAI,EAAJA,IAAI;QACJG,UAAU,EAAVA;MACJ;IACJ,CAAC;EACL,CAAC,CAAC;AACN;AAEA,SAASO,wBAAwBA,CAC7BX,SAAiB,EACjBC,IAAY,EACZC,eAAwC,EAG1C;EAAA,IAFEU,KAAkB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGE,SAAS;EAAA,IAC9BC,OAAe,GAAAH,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAAE,SAAA;EAEf;EACA;EACA,IAAME,QAAQ,GAAGlB,uCAAuC,CAACC,SAAS,EAAEC,IAAI,EAAEC,eAAe,CAAC;EAE1F,OAAOL,EAAE,CAACqB,EAAE,CAACC,YAAY,CAAC;IACtBP,KAAK,EAAAQ,aAAA,CAAAA,aAAA,KAAMR,KAAK;MAAES,cAAc,EAAAC,eAAA,KAAI1B,wBAAwB,EAAGoB,OAAO;IAAC,EAAC;IACxEV,UAAU,EAAE;MAACW,QAAQ,EAARA;IAAQ;EACzB,CAAC,CAAC;AACN;AAEA,OAAO,SAASM,gBAAgBA,CAACC,KAAa,EAAEZ,KAAc,EAAEI,OAAe,EAAE;EAC7E,OAAOL,wBAAwB,CAAC,QAAQ,EAAEa,KAAK,EAAE,CAAC,OAAO,CAAC,EAAEZ,KAAK,EAAEI,OAAO,CAAC,CACtES,IAAI,CAAC,UAACC,CAAC,EAAK;IACT,IAAOC,MAAM,GAAID,CAAC,CAAC,CAAC,CAAC,CAAdC,MAAM;IACb,OAAO,CAAAA,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEjB,MAAM,MAAK,OAAO;EACrC,CAAC,CAAC,SACI,CAAC,YAAM;IACT,OAAO,KAAK;EAChB,CAAC,CAAC;AACV;AAcA,OAAO,SAASkB,kCAAkCA,CAAAC,IAAA,EAMT;EAAA,IALrCC,IAAI,GAAAD,IAAA,CAAJC,IAAI;IACJ7B,IAAI,GAAA4B,IAAA,CAAJ5B,IAAI;IACJG,UAAU,GAAAyB,IAAA,CAAVzB,UAAU;IACV2B,cAAc,GAAAF,IAAA,CAAdE,cAAc;IACdC,KAAK,GAAAH,IAAA,CAALG,KAAK;EAEL,IAAMC,MAAuB,GAAG;IAC5B5B,OAAO,EAAE,kBAA2B;IACpCC,UAAU,EAAAc,aAAA,CAAAA,aAAA;MACNU,IAAI,EAAJA,IAAI;MACJ7B,IAAI,EAAJA,IAAI;MACJG,UAAU,EAAVA;IAAU,GACN2B,cAAc,GAAG;MAACA,cAAc,EAAdA;IAAc,CAAC,GAAG,CAAC,CAAC,GACtCC,KAAK,GAAG;MAACA,KAAK,EAALA;IAAK,CAAC,GAAG,CAAC,CAAC;EAEhC,CAAC;EACD,OAAOC,MAAM;AACjB"}
|
@@ -266,7 +266,10 @@ export interface UIFactory {
|
|
266
266
|
login: string;
|
267
267
|
cluster?: string;
|
268
268
|
buttonToWrap?: React.ReactNode;
|
269
|
-
}, makeContent: (
|
269
|
+
}, makeContent: (params: {
|
270
|
+
supportContent?: React.ReactNode;
|
271
|
+
onSupportClick: () => void;
|
272
|
+
}) => React.ReactNode): React.ReactNode;
|
270
273
|
getComponentForConsumerMetrics(): undefined | React.ComponentType<{
|
271
274
|
cluster: string;
|
272
275
|
path: string;
|
@@ -3,6 +3,7 @@ import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
3
3
|
import React from 'react';
|
4
4
|
import AppNavigationPageLayout from './containers/AppNavigation/AppNavigationPageLayout';
|
5
5
|
import { defaultAclApi } from './utils/acl/external-acl-api';
|
6
|
+
import { SupportComponent } from './containers/SupportComponent/SupportComponent';
|
6
7
|
import { YTUserSuggest } from './containers/UserSuggest/YTUserSuggest';
|
7
8
|
import { docsUrls } from './constants/docsUrls';
|
8
9
|
import { YTSubjectSuggest } from './components/ACL/SubjectsControl/YTSubjectSuggest';
|
@@ -180,8 +181,14 @@ var uiFactory = {
|
|
180
181
|
renderControlAbcService: function renderControlAbcService() {
|
181
182
|
return undefined;
|
182
183
|
},
|
183
|
-
makeSupportContent: function makeSupportContent() {
|
184
|
-
|
184
|
+
makeSupportContent: function makeSupportContent(_x, makeContent) {
|
185
|
+
var reportBugUrl = uiSettings.reportBugUrl;
|
186
|
+
if (!reportBugUrl) {
|
187
|
+
return undefined;
|
188
|
+
}
|
189
|
+
return /*#__PURE__*/_jsx(SupportComponent, {
|
190
|
+
makeContent: makeContent
|
191
|
+
});
|
185
192
|
},
|
186
193
|
getComponentForConsumerMetrics: function getComponentForConsumerMetrics() {
|
187
194
|
return undefined;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["React","AppNavigationPageLayout","defaultAclApi","YTUserSuggest","docsUrls","YTSubjectSuggest","RoleActions","OperationDetailMonitorLinks","PERMISSIONS_SETTINGS","uiSettings","YT","jsx","_jsx","experimentalPages","uiFactory","getClusterAppearance","cluster","_YT$clusters","clusters","urls","isWatchMen","makeUrlForUserName","_ref","login","concat","makeUrlForTransferTask","undefined","makeUrlForNodeIO","makeUrlForTabletCellBundleDashboard","makeUrlForMonitoringDescriptor","makeUrlForUserDashboard","getExtaClusterPages","getExtraRootPages","getExtraReducersAndUrlMapping","getSchedulingExtraTabs","_uiSettings$schedulin","schedulingMonitoring","urlTemplate","_uiSettings$schedulin2","_uiSettings$schedulin3","title","name","getMonitoringForAccounts","_uiSettings$accountsM","accountsMonitoring","_uiSettings$accountsM2","getMonitoringForBundle","_uiSettings$bundlesMo","bundlesMonitoring","_uiSettings$bundlesMo2","getMonitoringForOperation","params","_uiSettings$operation","_params$pools","operationsMonitoring","_uiSettings$operation2","hasPoolParameter","indexOf","pools","length","component","getMonitorComponentForJob","getMonitoringComponentForChyt","_uiSettings$chytMonit","_ref2","chytMonitoring","getStatisticsComponentForAccount","getStatisticsComponentForBundle","renderNavigationExtraActions","renderSchedulingLastDayMaximum","renderComponentsNodeCardTop","getExtraMetaTableItemsForComponentsNode","getExtraMetaTableItemsForPool","getExtraMetaTableItemsForBundle","getComponentsNodeDashboardUrl","renderTransferQuotaNoticeForPool","renderTransferQuotaNoticeForAccount","renderTopRowExtraControlsForAccount","renderTopRowExtraControlsForPool","renderTopRowExtraControlsForBundle","renderAccountsTableItemExtraControls","renderSchedulingTableItemExtraControls","renderBundlesTableItemExtraControls","renderControlAbcService","makeSupportContent","getComponentForConsumerMetrics","getComonentForQueueMetrics","renderTableCellBundleEditorNotice","getNodeDeployUrl","getNodeNannyUrl","renderAppNavigation","props","_objectSpread","createNotificationUrl","wrapApp","app","externalSchemaDescriptionSetup","load","_cluster","_path","Promise","resolve","getAclApi","renderAclSubjectsSuggestControl","renderRolesLink","getExternalSettings","renderUserSuggest","getExperimentalPages","getAllowedExperimentalPages","getComponentForAclRoleActions","getAclPermissionsSettings","onChytAliasSqlClick","configureUIFactoryItem","k","redefinition","configureUIFactory","overrides","_forEach","_v","key","Proxy","set","Error","isAbcAllowed","abc","onChange","value","id","slug","Boolean"],"sources":["UIFactory.tsx"],"sourcesContent":["import {SVGIconData} from '@gravity-ui/uikit/build/esm/components/Icon/types';\nimport {MetaTableItem} from './components/MetaTable/MetaTable';\nimport _ from 'lodash';\nimport React from 'react';\nimport {Reducer} from 'redux';\nimport {PathParameters} from './store/location';\nimport {TabletBundle} from './store/reducers/tablet_cell_bundles';\nimport {PoolInfo} from './store/selectors/scheduling/scheduling-pools';\nimport {ClusterConfig, ClusterUiConfig} from '../shared/yt-types';\nimport {ClusterAppearance} from './appearance';\nimport AppNavigationPageLayout, {\n AppNavigationProps,\n} from './containers/AppNavigation/AppNavigationPageLayout';\nimport {ExternalSchemaDescription} from './pages/navigation/tabs/Schema/ExternalDescription/ExternalDescription';\nimport {AclApi, defaultAclApi} from './utils/acl/external-acl-api';\nimport {SubjectsControlProps} from './components/ACL/SubjectsControl/SubjectsControl';\nimport {SettingsPage} from './containers/SettingsPanel/settings-description';\nimport {UserSuggestProps} from './containers/UserSuggest/UserSuggest';\nimport {YTUserSuggest} from './containers/UserSuggest/YTUserSuggest';\nimport {DocsUrls, docsUrls} from './constants/docsUrls';\nimport {YTSubjectSuggest} from './components/ACL/SubjectsControl/YTSubjectSuggest';\nimport RoleActions, {Props as RoleActionsProps} from './components/ACL/RoleActions';\nimport OperationDetailMonitorLinks from './pages/operations/OperationDetail/tabs/monitor/OperationDetailsMonitorLinks';\nimport {PERMISSIONS_SETTINGS} from './constants/acl';\nimport {uiSettings} from './config/ui-settings';\nimport YT from './config/yt-config';\n\ntype HeaderItemOrPage =\n | {\n href: string;\n\n pageId?: undefined;\n reactComponent?: undefined;\n reducers?: undefined;\n urlMapping?: undefined;\n }\n | {\n pageId?: string;\n reactComponent?: React.ComponentType<any>; // used as component for <Route ... component={reactComponent} />\n reducers?: Record<string, Reducer>;\n urlMapping?: Record<string, PathParameters>;\n\n href?: undefined;\n };\n\nexport type UIFactoryRootPageInfo = HeaderItemOrPage & {\n title: string;\n getVisible?: () => Promise<boolean>;\n};\n\nexport interface UIFactoryClusterPageInfo {\n title: string;\n pageId: string; // also used as urlMatch for <Route path={`/:cluster/${pageId}`} ... />\n svgIcon?: SVGIconData;\n reducers?: Record<string, Reducer>;\n reactComponent: React.ComponentType<any>; // used as component for <Route ... component={reactComponent} />\n topRowComponent?: React.ComponentType<any>; // used as component for <Route ... component={topRowComponent} />\n urlMapping?: Record<string, PathParameters>;\n}\n\nexport interface ExternalSchemaDescriptionResponse {\n url?: string;\n externalSchema?: Map<string, ExternalSchemaDescription>;\n}\n\nexport interface ReducersAndUrlMapping {\n reducers?: Record<string, Reducer>;\n urlMapping?: Record<string, PathParameters>;\n}\n\nexport interface SchedulingExtraTab {\n name: string;\n title?: string;\n component?: React.ComponentType<any>;\n /**\n * Allows to redefine link of corresponding tab\n * Example: https://grafana.mydomain.com?var-pool={ytPool}&var-tree={ytPoolTree}&var-cluster={ytCluster}\n */\n urlTemplate?: string;\n}\n\nexport interface OperationMonitoringTabProps {\n cluster: string;\n operation: {\n id: string;\n startTime?: string;\n finishTime?: string;\n pools?: Array<{pool: string; tree: string; slotIndex?: number}>;\n };\n}\n\nexport interface UIFactory {\n getClusterAppearance(cluster?: string): undefined | ClusterAppearance;\n\n isWatchMen(login: string): boolean;\n\n makeUrlForUserName({cluster, login}: {cluster: string; login: string}): string | undefined;\n makeUrlForTransferTask(operation: unknown): string | undefined;\n makeUrlForNodeIO(cluster: string, host?: string): string | undefined;\n makeUrlForTabletCellBundleDashboard(cluster: string, bundle: string): string | undefined;\n makeUrlForMonitoringDescriptor(\n cluster: string,\n timeRange: {from: string; to?: string},\n monitoring_descriptor?: string,\n ): string | undefined;\n makeUrlForUserDashboard(cluster: string, user: string): string | undefined;\n\n getExtaClusterPages(): Array<UIFactoryClusterPageInfo>;\n getExtraRootPages(): Array<UIFactoryRootPageInfo>;\n\n getExtraReducersAndUrlMapping(): undefined | ReducersAndUrlMapping;\n getSchedulingExtraTabs(params: {\n cluster: string;\n pool: string;\n tree: string;\n extraOptions: {\n isRoot?: boolean;\n isEphemeral?: boolean | undefined;\n };\n }): Array<SchedulingExtraTab>;\n\n getMonitoringForAccounts():\n | undefined\n | {\n component: React.ComponentType<{cluster: string; account: string}>;\n urlTemplate?: undefined;\n title?: undefined;\n }\n | {urlTemplate: string; title?: string; component?: undefined};\n getMonitoringForBundle():\n | undefined\n | {\n component: React.ComponentType<{\n cluster: string;\n tablet_cell_bundle: string;\n bundleData: any;\n }>;\n urlTemplate?: undefined;\n title?: undefined;\n }\n | {urlTemplate: string; title?: string; component?: undefined};\n getMonitoringForOperation(params: OperationMonitoringTabProps['operation']):\n | undefined\n | {\n component: React.ComponentType<OperationMonitoringTabProps>;\n urlTemplate?: undefined;\n title?: undefined;\n }\n | {urlTemplate: string; title?: string; component?: undefined};\n getMonitorComponentForJob():\n | undefined\n | React.ComponentType<{\n cluster: string;\n job_descriptor: string;\n from?: number;\n to?: number;\n }>;\n\n getMonitoringComponentForChyt():\n | undefined\n | {\n component?: React.ComponentType<{cluster: string; alias: string}>;\n urlTemplate?: string;\n title?: string;\n };\n\n getStatisticsComponentForAccount():\n | undefined\n | React.ComponentType<{\n cluster: string;\n account: string;\n accountSubtreeAllNames: Array<string>;\n theme: string;\n }>;\n\n getStatisticsComponentForBundle():\n | undefined\n | React.ComponentType<{cluster: string; bundle: string; theme: string}>;\n\n renderNavigationExtraActions(params: {\n className?: string;\n cluster: string;\n path: string;\n type: string;\n attributes: unknown;\n }): React.ReactNode;\n\n renderSchedulingLastDayMaximum(props: {\n className?: string;\n cluster: string;\n tree: string;\n title?: string;\n sensor: 'max_operation_count' | 'max_running_operation_count';\n format?(sensorValue?: number): string;\n current?: {value: string; title: string};\n showHint?: boolean;\n showAsLink?: boolean;\n }): React.ReactNode;\n\n renderComponentsNodeCardTop(props: {\n className?: string;\n clusterConfig: ClusterConfig;\n host: string;\n physicalHost: string;\n }): React.ReactNode;\n\n getComponentsNodeDashboardUrl(props: {cluster: string; host: string}): {\n url?: string;\n title?: string;\n };\n\n renderTransferQuotaNoticeForPool(props: {\n className?: string;\n pool?: PoolInfo;\n parentPool?: PoolInfo;\n clusterUiConfig?: ClusterUiConfig;\n isTopLevel?: boolean;\n }): React.ReactNode;\n\n renderTransferQuotaNoticeForAccount(props: {\n className?: string;\n isTopLevel?: boolean;\n accountAttributes?: unknown;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n renderTopRowExtraControlsForAccount(props: {\n className?: string;\n accountAttributes?: unknown;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n renderTopRowExtraControlsForPool(props: {\n itemClassName?: string;\n pool?: unknown;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n renderTopRowExtraControlsForBundle(props: {\n itemClassName?: string;\n bundle?: TabletBundle;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n getExtraMetaTableItemsForComponentsNode(props: {\n clusterConfig: ClusterConfig;\n host: string;\n physicalHost: string;\n }): undefined | Array<MetaTableItem>;\n\n getExtraMetaTableItemsForPool(props: {\n pool: PoolInfo;\n clusterUiConfig?: ClusterUiConfig;\n }): undefined | Array<MetaTableItem>;\n\n getExtraMetaTableItemsForBundle(props: {\n bundle: TabletBundle;\n clusterUiConfig: ClusterUiConfig;\n }): undefined | Array<MetaTableItem>;\n\n renderAccountsTableItemExtraControls(props: {\n itemClassName?: string;\n cluster: string;\n account: string;\n accountAttributes?: unknown;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n renderSchedulingTableItemExtraControls(props: {\n itemClassName?: string;\n cluster: string;\n pool: unknown;\n clusterUiConfig: ClusterUiConfig;\n }): React.ReactNode;\n\n renderBundlesTableItemExtraControls(props: {\n itemClassName?: string;\n bundle?: TabletBundle;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n renderControlAbcService<T extends {slug: string; id?: number}>(props: {\n className?: string;\n value?: T;\n onChange: (v?: T) => void;\n placeholder?: string;\n disabled?: boolean;\n }): React.ReactNode;\n\n makeSupportContent(\n params: {login: string; cluster?: string; buttonToWrap?: React.ReactNode},\n makeContent: (onSupportClick: () => void) => React.ReactNode,\n ): React.ReactNode;\n\n getComponentForConsumerMetrics():\n | undefined\n | React.ComponentType<{\n cluster: string;\n path: string;\n targetQueue?: string;\n }>;\n\n getComonentForQueueMetrics(): undefined | React.ComponentType<{cluster: string; path: string}>;\n\n renderTableCellBundleEditorNotice(props: {\n bundleData?: {$attributes: unknown};\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n getNodeDeployUrl(ypCluster?: string, podId?: string): string | undefined;\n getNodeNannyUrl(params: {\n pod_id?: string;\n nanny_service?: string;\n yp_cluster?: string;\n }): string | undefined;\n\n renderAppNavigation(props: AppNavigationProps): React.ReactElement;\n\n createNotificationUrl(clusterConfig?: ClusterConfig): string | undefined;\n\n wrapApp(app: React.ReactElement): React.ReactElement;\n\n externalSchemaDescriptionSetup: {\n columns?: Record<keyof ExternalSchemaDescription['glossaryEntity'], string>;\n load(cluster: string, path: string): Promise<ExternalSchemaDescriptionResponse>;\n };\n\n getAclApi(): AclApi;\n\n renderAclSubjectsSuggestControl(props: SubjectsControlProps): React.ReactNode;\n\n renderRolesLink(params: {cluster: string; login: string; className?: string}): React.ReactNode;\n\n getExternalSettings(params: {\n cluster: string;\n login: string;\n isAdmin: boolean;\n }): Array<SettingsPage>;\n\n renderUserSuggest(props: UserSuggestProps): React.ReactNode;\n\n yqlWidgetSetup?: {\n renderButton(props: {className?: string; isSplit?: string}): React.ReactNode;\n renderWidget(props: {cluster: string; path: string; attributes: unknown}): React.ReactNode;\n renderYqlOperationLink(yqlOperationId: string): React.ReactNode;\n };\n\n getExperimentalPages(): string[];\n getAllowedExperimentalPages(login: string): Promise<Array<string>>;\n\n docsUrls: DocsUrls;\n\n getComponentForAclRoleActions(): undefined | React.ComponentType<RoleActionsProps>;\n\n getAclPermissionsSettings(): typeof PERMISSIONS_SETTINGS;\n\n onChytAliasSqlClick(params: {alias: string; cluster: string}): void;\n}\n\nconst experimentalPages: string[] = [];\n\nconst uiFactory: UIFactory = {\n getClusterAppearance(cluster) {\n return YT.clusters[cluster!]?.urls;\n },\n isWatchMen() {\n return false;\n },\n makeUrlForUserName({cluster, login}: {cluster?: string; login: string}) {\n return `/${cluster}/users?filter=${login}`;\n },\n makeUrlForTransferTask() {\n return undefined;\n },\n makeUrlForNodeIO() {\n return undefined;\n },\n makeUrlForTabletCellBundleDashboard() {\n return undefined;\n },\n makeUrlForMonitoringDescriptor() {\n return undefined;\n },\n makeUrlForUserDashboard() {\n return undefined;\n },\n\n getExtaClusterPages() {\n return [];\n },\n getExtraRootPages() {\n return [];\n },\n\n getExtraReducersAndUrlMapping() {\n return undefined;\n },\n\n getSchedulingExtraTabs() {\n if (!uiSettings.schedulingMonitoring?.urlTemplate) {\n return [];\n }\n\n const {urlTemplate, title = 'Monitoring'} = uiSettings.schedulingMonitoring;\n\n return [\n {\n name: 'monitoring',\n title,\n urlTemplate,\n },\n ];\n },\n getMonitoringForAccounts() {\n if (!uiSettings?.accountsMonitoring?.urlTemplate) {\n return undefined;\n }\n\n const {urlTemplate, title} = uiSettings.accountsMonitoring;\n return {urlTemplate, title};\n },\n getMonitoringForBundle() {\n if (!uiSettings.bundlesMonitoring?.urlTemplate) {\n return undefined;\n }\n\n const {urlTemplate, title} = uiSettings.bundlesMonitoring;\n return {urlTemplate, title};\n },\n getMonitoringForOperation(params) {\n if (!uiSettings.operationsMonitoring?.urlTemplate) {\n return undefined;\n }\n\n const {urlTemplate, title} = uiSettings.operationsMonitoring;\n\n const hasPoolParameter =\n urlTemplate.indexOf('{ytPool}') !== -1 || urlTemplate.indexOf('{ytPoolTree}') !== -1;\n\n if (hasPoolParameter && params.pools?.length! > 1) {\n return {component: OperationDetailMonitorLinks};\n }\n\n return {urlTemplate, title};\n },\n getMonitorComponentForJob() {\n return undefined;\n },\n getMonitoringComponentForChyt() {\n const {urlTemplate, title} = uiSettings.chytMonitoring ?? {};\n if (!urlTemplate) {\n return undefined;\n }\n\n return {urlTemplate, title};\n },\n getStatisticsComponentForAccount() {\n return undefined;\n },\n getStatisticsComponentForBundle() {\n return undefined;\n },\n\n renderNavigationExtraActions() {\n return null;\n },\n\n renderSchedulingLastDayMaximum() {\n return undefined;\n },\n\n renderComponentsNodeCardTop() {\n return undefined;\n },\n\n getExtraMetaTableItemsForComponentsNode() {\n return undefined;\n },\n\n getExtraMetaTableItemsForPool() {\n return undefined;\n },\n\n getExtraMetaTableItemsForBundle() {\n return undefined;\n },\n\n getComponentsNodeDashboardUrl() {\n return {};\n },\n\n renderTransferQuotaNoticeForPool() {\n return undefined;\n },\n\n renderTransferQuotaNoticeForAccount() {\n return undefined;\n },\n\n renderTopRowExtraControlsForAccount() {\n return undefined;\n },\n\n renderTopRowExtraControlsForPool() {\n return undefined;\n },\n\n renderTopRowExtraControlsForBundle() {\n return undefined;\n },\n\n renderAccountsTableItemExtraControls() {\n return undefined;\n },\n\n renderSchedulingTableItemExtraControls() {\n return undefined;\n },\n\n renderBundlesTableItemExtraControls() {\n return undefined;\n },\n\n renderControlAbcService() {\n return undefined;\n },\n\n makeSupportContent() {\n return undefined;\n },\n\n getComponentForConsumerMetrics() {\n return undefined;\n },\n\n getComonentForQueueMetrics() {\n return undefined;\n },\n\n renderTableCellBundleEditorNotice() {\n return undefined;\n },\n\n getNodeDeployUrl() {\n return undefined;\n },\n\n getNodeNannyUrl() {\n return undefined;\n },\n\n renderAppNavigation(props) {\n return <AppNavigationPageLayout {...props} />;\n },\n\n createNotificationUrl() {\n return undefined;\n },\n\n wrapApp(app) {\n return app;\n },\n\n externalSchemaDescriptionSetup: {\n load(_cluster: string, _path: string) {\n return Promise.resolve({});\n },\n },\n\n getAclApi() {\n return defaultAclApi;\n },\n\n renderAclSubjectsSuggestControl(props) {\n return <YTSubjectSuggest {...props} />;\n },\n\n renderRolesLink() {\n return undefined;\n },\n\n getExternalSettings() {\n return [];\n },\n\n renderUserSuggest(props) {\n return <YTUserSuggest {...props} />;\n },\n\n getExperimentalPages() {\n return experimentalPages;\n },\n\n getAllowedExperimentalPages() {\n return Promise.resolve([]);\n },\n\n docsUrls: docsUrls,\n\n getComponentForAclRoleActions() {\n return RoleActions;\n },\n\n getAclPermissionsSettings() {\n return PERMISSIONS_SETTINGS;\n },\n\n onChytAliasSqlClick() {},\n};\n\nfunction configureUIFactoryItem<K extends keyof UIFactory>(k: K, redefinition: UIFactory[K]) {\n uiFactory[k] = redefinition;\n}\n\nexport function configureUIFactory(overrides: Partial<UIFactory>) {\n _.forEach(overrides, (_v, k) => {\n const key = k as keyof UIFactory;\n configureUIFactoryItem(key, overrides[key]!);\n });\n}\n\nexport default new Proxy(uiFactory, {\n set: () => {\n throw new Error('Use configureUIFactory(...) method instead of direct modifications');\n },\n});\n\nexport function isAbcAllowed() {\n const abc = uiFactory.renderControlAbcService({\n onChange: () => {},\n value: {id: 123, slug: '123'},\n });\n return Boolean(abc);\n}\n"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["React","AppNavigationPageLayout","defaultAclApi","SupportComponent","YTUserSuggest","docsUrls","YTSubjectSuggest","RoleActions","OperationDetailMonitorLinks","PERMISSIONS_SETTINGS","uiSettings","YT","jsx","_jsx","experimentalPages","uiFactory","getClusterAppearance","cluster","_YT$clusters","clusters","urls","isWatchMen","makeUrlForUserName","_ref","login","concat","makeUrlForTransferTask","undefined","makeUrlForNodeIO","makeUrlForTabletCellBundleDashboard","makeUrlForMonitoringDescriptor","makeUrlForUserDashboard","getExtaClusterPages","getExtraRootPages","getExtraReducersAndUrlMapping","getSchedulingExtraTabs","_uiSettings$schedulin","schedulingMonitoring","urlTemplate","_uiSettings$schedulin2","_uiSettings$schedulin3","title","name","getMonitoringForAccounts","_uiSettings$accountsM","accountsMonitoring","_uiSettings$accountsM2","getMonitoringForBundle","_uiSettings$bundlesMo","bundlesMonitoring","_uiSettings$bundlesMo2","getMonitoringForOperation","params","_uiSettings$operation","_params$pools","operationsMonitoring","_uiSettings$operation2","hasPoolParameter","indexOf","pools","length","component","getMonitorComponentForJob","getMonitoringComponentForChyt","_uiSettings$chytMonit","_ref2","chytMonitoring","getStatisticsComponentForAccount","getStatisticsComponentForBundle","renderNavigationExtraActions","renderSchedulingLastDayMaximum","renderComponentsNodeCardTop","getExtraMetaTableItemsForComponentsNode","getExtraMetaTableItemsForPool","getExtraMetaTableItemsForBundle","getComponentsNodeDashboardUrl","renderTransferQuotaNoticeForPool","renderTransferQuotaNoticeForAccount","renderTopRowExtraControlsForAccount","renderTopRowExtraControlsForPool","renderTopRowExtraControlsForBundle","renderAccountsTableItemExtraControls","renderSchedulingTableItemExtraControls","renderBundlesTableItemExtraControls","renderControlAbcService","makeSupportContent","_x","makeContent","reportBugUrl","getComponentForConsumerMetrics","getComonentForQueueMetrics","renderTableCellBundleEditorNotice","getNodeDeployUrl","getNodeNannyUrl","renderAppNavigation","props","_objectSpread","createNotificationUrl","wrapApp","app","externalSchemaDescriptionSetup","load","_cluster","_path","Promise","resolve","getAclApi","renderAclSubjectsSuggestControl","renderRolesLink","getExternalSettings","renderUserSuggest","getExperimentalPages","getAllowedExperimentalPages","getComponentForAclRoleActions","getAclPermissionsSettings","onChytAliasSqlClick","configureUIFactoryItem","k","redefinition","configureUIFactory","overrides","_forEach","_v","key","Proxy","set","Error","isAbcAllowed","abc","onChange","value","id","slug","Boolean"],"sources":["UIFactory.tsx"],"sourcesContent":["import {SVGIconData} from '@gravity-ui/uikit/build/esm/components/Icon/types';\nimport {MetaTableItem} from './components/MetaTable/MetaTable';\nimport _ from 'lodash';\nimport React from 'react';\nimport {Reducer} from 'redux';\nimport {PathParameters} from './store/location';\nimport {TabletBundle} from './store/reducers/tablet_cell_bundles';\nimport {PoolInfo} from './store/selectors/scheduling/scheduling-pools';\nimport {ClusterConfig, ClusterUiConfig} from '../shared/yt-types';\nimport {ClusterAppearance} from './appearance';\nimport AppNavigationPageLayout, {\n AppNavigationProps,\n} from './containers/AppNavigation/AppNavigationPageLayout';\nimport {ExternalSchemaDescription} from './pages/navigation/tabs/Schema/ExternalDescription/ExternalDescription';\nimport {AclApi, defaultAclApi} from './utils/acl/external-acl-api';\nimport {SubjectsControlProps} from './components/ACL/SubjectsControl/SubjectsControl';\nimport {SettingsPage} from './containers/SettingsPanel/settings-description';\nimport {SupportComponent} from './containers/SupportComponent/SupportComponent';\nimport {UserSuggestProps} from './containers/UserSuggest/UserSuggest';\nimport {YTUserSuggest} from './containers/UserSuggest/YTUserSuggest';\nimport {DocsUrls, docsUrls} from './constants/docsUrls';\nimport {YTSubjectSuggest} from './components/ACL/SubjectsControl/YTSubjectSuggest';\nimport RoleActions, {Props as RoleActionsProps} from './components/ACL/RoleActions';\nimport OperationDetailMonitorLinks from './pages/operations/OperationDetail/tabs/monitor/OperationDetailsMonitorLinks';\nimport {PERMISSIONS_SETTINGS} from './constants/acl';\nimport {uiSettings} from './config/ui-settings';\nimport YT from './config/yt-config';\n\ntype HeaderItemOrPage =\n | {\n href: string;\n\n pageId?: undefined;\n reactComponent?: undefined;\n reducers?: undefined;\n urlMapping?: undefined;\n }\n | {\n pageId?: string;\n reactComponent?: React.ComponentType<any>; // used as component for <Route ... component={reactComponent} />\n reducers?: Record<string, Reducer>;\n urlMapping?: Record<string, PathParameters>;\n\n href?: undefined;\n };\n\nexport type UIFactoryRootPageInfo = HeaderItemOrPage & {\n title: string;\n getVisible?: () => Promise<boolean>;\n};\n\nexport interface UIFactoryClusterPageInfo {\n title: string;\n pageId: string; // also used as urlMatch for <Route path={`/:cluster/${pageId}`} ... />\n svgIcon?: SVGIconData;\n reducers?: Record<string, Reducer>;\n reactComponent: React.ComponentType<any>; // used as component for <Route ... component={reactComponent} />\n topRowComponent?: React.ComponentType<any>; // used as component for <Route ... component={topRowComponent} />\n urlMapping?: Record<string, PathParameters>;\n}\n\nexport interface ExternalSchemaDescriptionResponse {\n url?: string;\n externalSchema?: Map<string, ExternalSchemaDescription>;\n}\n\nexport interface ReducersAndUrlMapping {\n reducers?: Record<string, Reducer>;\n urlMapping?: Record<string, PathParameters>;\n}\n\nexport interface SchedulingExtraTab {\n name: string;\n title?: string;\n component?: React.ComponentType<any>;\n /**\n * Allows to redefine link of corresponding tab\n * Example: https://grafana.mydomain.com?var-pool={ytPool}&var-tree={ytPoolTree}&var-cluster={ytCluster}\n */\n urlTemplate?: string;\n}\n\nexport interface OperationMonitoringTabProps {\n cluster: string;\n operation: {\n id: string;\n startTime?: string;\n finishTime?: string;\n pools?: Array<{pool: string; tree: string; slotIndex?: number}>;\n };\n}\n\nexport interface UIFactory {\n getClusterAppearance(cluster?: string): undefined | ClusterAppearance;\n\n isWatchMen(login: string): boolean;\n\n makeUrlForUserName({cluster, login}: {cluster: string; login: string}): string | undefined;\n makeUrlForTransferTask(operation: unknown): string | undefined;\n makeUrlForNodeIO(cluster: string, host?: string): string | undefined;\n makeUrlForTabletCellBundleDashboard(cluster: string, bundle: string): string | undefined;\n makeUrlForMonitoringDescriptor(\n cluster: string,\n timeRange: {from: string; to?: string},\n monitoring_descriptor?: string,\n ): string | undefined;\n makeUrlForUserDashboard(cluster: string, user: string): string | undefined;\n\n getExtaClusterPages(): Array<UIFactoryClusterPageInfo>;\n getExtraRootPages(): Array<UIFactoryRootPageInfo>;\n\n getExtraReducersAndUrlMapping(): undefined | ReducersAndUrlMapping;\n getSchedulingExtraTabs(params: {\n cluster: string;\n pool: string;\n tree: string;\n extraOptions: {\n isRoot?: boolean;\n isEphemeral?: boolean | undefined;\n };\n }): Array<SchedulingExtraTab>;\n\n getMonitoringForAccounts():\n | undefined\n | {\n component: React.ComponentType<{cluster: string; account: string}>;\n urlTemplate?: undefined;\n title?: undefined;\n }\n | {urlTemplate: string; title?: string; component?: undefined};\n getMonitoringForBundle():\n | undefined\n | {\n component: React.ComponentType<{\n cluster: string;\n tablet_cell_bundle: string;\n bundleData: any;\n }>;\n urlTemplate?: undefined;\n title?: undefined;\n }\n | {urlTemplate: string; title?: string; component?: undefined};\n getMonitoringForOperation(params: OperationMonitoringTabProps['operation']):\n | undefined\n | {\n component: React.ComponentType<OperationMonitoringTabProps>;\n urlTemplate?: undefined;\n title?: undefined;\n }\n | {urlTemplate: string; title?: string; component?: undefined};\n getMonitorComponentForJob():\n | undefined\n | React.ComponentType<{\n cluster: string;\n job_descriptor: string;\n from?: number;\n to?: number;\n }>;\n\n getMonitoringComponentForChyt():\n | undefined\n | {\n component?: React.ComponentType<{cluster: string; alias: string}>;\n urlTemplate?: string;\n title?: string;\n };\n\n getStatisticsComponentForAccount():\n | undefined\n | React.ComponentType<{\n cluster: string;\n account: string;\n accountSubtreeAllNames: Array<string>;\n theme: string;\n }>;\n\n getStatisticsComponentForBundle():\n | undefined\n | React.ComponentType<{cluster: string; bundle: string; theme: string}>;\n\n renderNavigationExtraActions(params: {\n className?: string;\n cluster: string;\n path: string;\n type: string;\n attributes: unknown;\n }): React.ReactNode;\n\n renderSchedulingLastDayMaximum(props: {\n className?: string;\n cluster: string;\n tree: string;\n title?: string;\n sensor: 'max_operation_count' | 'max_running_operation_count';\n format?(sensorValue?: number): string;\n current?: {value: string; title: string};\n showHint?: boolean;\n showAsLink?: boolean;\n }): React.ReactNode;\n\n renderComponentsNodeCardTop(props: {\n className?: string;\n clusterConfig: ClusterConfig;\n host: string;\n physicalHost: string;\n }): React.ReactNode;\n\n getComponentsNodeDashboardUrl(props: {cluster: string; host: string}): {\n url?: string;\n title?: string;\n };\n\n renderTransferQuotaNoticeForPool(props: {\n className?: string;\n pool?: PoolInfo;\n parentPool?: PoolInfo;\n clusterUiConfig?: ClusterUiConfig;\n isTopLevel?: boolean;\n }): React.ReactNode;\n\n renderTransferQuotaNoticeForAccount(props: {\n className?: string;\n isTopLevel?: boolean;\n accountAttributes?: unknown;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n renderTopRowExtraControlsForAccount(props: {\n className?: string;\n accountAttributes?: unknown;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n renderTopRowExtraControlsForPool(props: {\n itemClassName?: string;\n pool?: unknown;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n renderTopRowExtraControlsForBundle(props: {\n itemClassName?: string;\n bundle?: TabletBundle;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n getExtraMetaTableItemsForComponentsNode(props: {\n clusterConfig: ClusterConfig;\n host: string;\n physicalHost: string;\n }): undefined | Array<MetaTableItem>;\n\n getExtraMetaTableItemsForPool(props: {\n pool: PoolInfo;\n clusterUiConfig?: ClusterUiConfig;\n }): undefined | Array<MetaTableItem>;\n\n getExtraMetaTableItemsForBundle(props: {\n bundle: TabletBundle;\n clusterUiConfig: ClusterUiConfig;\n }): undefined | Array<MetaTableItem>;\n\n renderAccountsTableItemExtraControls(props: {\n itemClassName?: string;\n cluster: string;\n account: string;\n accountAttributes?: unknown;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n renderSchedulingTableItemExtraControls(props: {\n itemClassName?: string;\n cluster: string;\n pool: unknown;\n clusterUiConfig: ClusterUiConfig;\n }): React.ReactNode;\n\n renderBundlesTableItemExtraControls(props: {\n itemClassName?: string;\n bundle?: TabletBundle;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n renderControlAbcService<T extends {slug: string; id?: number}>(props: {\n className?: string;\n value?: T;\n onChange: (v?: T) => void;\n placeholder?: string;\n disabled?: boolean;\n }): React.ReactNode;\n\n makeSupportContent(\n params: {login: string; cluster?: string; buttonToWrap?: React.ReactNode},\n makeContent: (params: {\n supportContent?: React.ReactNode;\n onSupportClick: () => void;\n }) => React.ReactNode,\n ): React.ReactNode;\n\n getComponentForConsumerMetrics():\n | undefined\n | React.ComponentType<{\n cluster: string;\n path: string;\n targetQueue?: string;\n }>;\n\n getComonentForQueueMetrics(): undefined | React.ComponentType<{cluster: string; path: string}>;\n\n renderTableCellBundleEditorNotice(props: {\n bundleData?: {$attributes: unknown};\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n getNodeDeployUrl(ypCluster?: string, podId?: string): string | undefined;\n getNodeNannyUrl(params: {\n pod_id?: string;\n nanny_service?: string;\n yp_cluster?: string;\n }): string | undefined;\n\n renderAppNavigation(props: AppNavigationProps): React.ReactElement;\n\n createNotificationUrl(clusterConfig?: ClusterConfig): string | undefined;\n\n wrapApp(app: React.ReactElement): React.ReactElement;\n\n externalSchemaDescriptionSetup: {\n columns?: Record<keyof ExternalSchemaDescription['glossaryEntity'], string>;\n load(cluster: string, path: string): Promise<ExternalSchemaDescriptionResponse>;\n };\n\n getAclApi(): AclApi;\n\n renderAclSubjectsSuggestControl(props: SubjectsControlProps): React.ReactNode;\n\n renderRolesLink(params: {cluster: string; login: string; className?: string}): React.ReactNode;\n\n getExternalSettings(params: {\n cluster: string;\n login: string;\n isAdmin: boolean;\n }): Array<SettingsPage>;\n\n renderUserSuggest(props: UserSuggestProps): React.ReactNode;\n\n yqlWidgetSetup?: {\n renderButton(props: {className?: string; isSplit?: string}): React.ReactNode;\n renderWidget(props: {cluster: string; path: string; attributes: unknown}): React.ReactNode;\n renderYqlOperationLink(yqlOperationId: string): React.ReactNode;\n };\n\n getExperimentalPages(): string[];\n getAllowedExperimentalPages(login: string): Promise<Array<string>>;\n\n docsUrls: DocsUrls;\n\n getComponentForAclRoleActions(): undefined | React.ComponentType<RoleActionsProps>;\n\n getAclPermissionsSettings(): typeof PERMISSIONS_SETTINGS;\n\n onChytAliasSqlClick(params: {alias: string; cluster: string}): void;\n}\n\nconst experimentalPages: string[] = [];\n\nconst uiFactory: UIFactory = {\n getClusterAppearance(cluster) {\n return YT.clusters[cluster!]?.urls;\n },\n isWatchMen() {\n return false;\n },\n makeUrlForUserName({cluster, login}: {cluster?: string; login: string}) {\n return `/${cluster}/users?filter=${login}`;\n },\n makeUrlForTransferTask() {\n return undefined;\n },\n makeUrlForNodeIO() {\n return undefined;\n },\n makeUrlForTabletCellBundleDashboard() {\n return undefined;\n },\n makeUrlForMonitoringDescriptor() {\n return undefined;\n },\n makeUrlForUserDashboard() {\n return undefined;\n },\n\n getExtaClusterPages() {\n return [];\n },\n getExtraRootPages() {\n return [];\n },\n\n getExtraReducersAndUrlMapping() {\n return undefined;\n },\n\n getSchedulingExtraTabs() {\n if (!uiSettings.schedulingMonitoring?.urlTemplate) {\n return [];\n }\n\n const {urlTemplate, title = 'Monitoring'} = uiSettings.schedulingMonitoring;\n\n return [\n {\n name: 'monitoring',\n title,\n urlTemplate,\n },\n ];\n },\n getMonitoringForAccounts() {\n if (!uiSettings?.accountsMonitoring?.urlTemplate) {\n return undefined;\n }\n\n const {urlTemplate, title} = uiSettings.accountsMonitoring;\n return {urlTemplate, title};\n },\n getMonitoringForBundle() {\n if (!uiSettings.bundlesMonitoring?.urlTemplate) {\n return undefined;\n }\n\n const {urlTemplate, title} = uiSettings.bundlesMonitoring;\n return {urlTemplate, title};\n },\n getMonitoringForOperation(params) {\n if (!uiSettings.operationsMonitoring?.urlTemplate) {\n return undefined;\n }\n\n const {urlTemplate, title} = uiSettings.operationsMonitoring;\n\n const hasPoolParameter =\n urlTemplate.indexOf('{ytPool}') !== -1 || urlTemplate.indexOf('{ytPoolTree}') !== -1;\n\n if (hasPoolParameter && params.pools?.length! > 1) {\n return {component: OperationDetailMonitorLinks};\n }\n\n return {urlTemplate, title};\n },\n getMonitorComponentForJob() {\n return undefined;\n },\n getMonitoringComponentForChyt() {\n const {urlTemplate, title} = uiSettings.chytMonitoring ?? {};\n if (!urlTemplate) {\n return undefined;\n }\n\n return {urlTemplate, title};\n },\n getStatisticsComponentForAccount() {\n return undefined;\n },\n getStatisticsComponentForBundle() {\n return undefined;\n },\n\n renderNavigationExtraActions() {\n return null;\n },\n\n renderSchedulingLastDayMaximum() {\n return undefined;\n },\n\n renderComponentsNodeCardTop() {\n return undefined;\n },\n\n getExtraMetaTableItemsForComponentsNode() {\n return undefined;\n },\n\n getExtraMetaTableItemsForPool() {\n return undefined;\n },\n\n getExtraMetaTableItemsForBundle() {\n return undefined;\n },\n\n getComponentsNodeDashboardUrl() {\n return {};\n },\n\n renderTransferQuotaNoticeForPool() {\n return undefined;\n },\n\n renderTransferQuotaNoticeForAccount() {\n return undefined;\n },\n\n renderTopRowExtraControlsForAccount() {\n return undefined;\n },\n\n renderTopRowExtraControlsForPool() {\n return undefined;\n },\n\n renderTopRowExtraControlsForBundle() {\n return undefined;\n },\n\n renderAccountsTableItemExtraControls() {\n return undefined;\n },\n\n renderSchedulingTableItemExtraControls() {\n return undefined;\n },\n\n renderBundlesTableItemExtraControls() {\n return undefined;\n },\n\n renderControlAbcService() {\n return undefined;\n },\n\n makeSupportContent(_x, makeContent) {\n const {reportBugUrl} = uiSettings;\n if (!reportBugUrl) {\n return undefined;\n }\n\n return <SupportComponent makeContent={makeContent} />;\n },\n\n getComponentForConsumerMetrics() {\n return undefined;\n },\n\n getComonentForQueueMetrics() {\n return undefined;\n },\n\n renderTableCellBundleEditorNotice() {\n return undefined;\n },\n\n getNodeDeployUrl() {\n return undefined;\n },\n\n getNodeNannyUrl() {\n return undefined;\n },\n\n renderAppNavigation(props) {\n return <AppNavigationPageLayout {...props} />;\n },\n\n createNotificationUrl() {\n return undefined;\n },\n\n wrapApp(app) {\n return app;\n },\n\n externalSchemaDescriptionSetup: {\n load(_cluster: string, _path: string) {\n return Promise.resolve({});\n },\n },\n\n getAclApi() {\n return defaultAclApi;\n },\n\n renderAclSubjectsSuggestControl(props) {\n return <YTSubjectSuggest {...props} />;\n },\n\n renderRolesLink() {\n return undefined;\n },\n\n getExternalSettings() {\n return [];\n },\n\n renderUserSuggest(props) {\n return <YTUserSuggest {...props} />;\n },\n\n getExperimentalPages() {\n return experimentalPages;\n },\n\n getAllowedExperimentalPages() {\n return Promise.resolve([]);\n },\n\n docsUrls: docsUrls,\n\n getComponentForAclRoleActions() {\n return RoleActions;\n },\n\n getAclPermissionsSettings() {\n return PERMISSIONS_SETTINGS;\n },\n\n onChytAliasSqlClick() {},\n};\n\nfunction configureUIFactoryItem<K extends keyof UIFactory>(k: K, redefinition: UIFactory[K]) {\n uiFactory[k] = redefinition;\n}\n\nexport function configureUIFactory(overrides: Partial<UIFactory>) {\n _.forEach(overrides, (_v, k) => {\n const key = k as keyof UIFactory;\n configureUIFactoryItem(key, overrides[key]!);\n });\n}\n\nexport default new Proxy(uiFactory, {\n set: () => {\n throw new Error('Use configureUIFactory(...) method instead of direct modifications');\n },\n});\n\nexport function isAbcAllowed() {\n const abc = uiFactory.renderControlAbcService({\n onChange: () => {},\n value: {id: 123, slug: '123'},\n });\n return Boolean(abc);\n}\n"],"mappings":"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"}
|
@@ -11,11 +11,13 @@ export function Support(_ref) {
|
|
11
11
|
var children = _ref.children;
|
12
12
|
var login = useSelector(getCurrentUserName);
|
13
13
|
var cluster = useSelector(getCluster);
|
14
|
-
var makeContent = React.useCallback(function (
|
15
|
-
|
14
|
+
var makeContent = React.useCallback(function (_ref2) {
|
15
|
+
var supportContent = _ref2.supportContent,
|
16
|
+
onSupportClick = _ref2.onSupportClick;
|
17
|
+
return /*#__PURE__*/_jsxs("div", {
|
16
18
|
className: b(),
|
17
19
|
onClick: onSupportClick,
|
18
|
-
children: children || /*#__PURE__*/_jsxs("div", {
|
20
|
+
children: [supportContent, children || /*#__PURE__*/_jsxs("div", {
|
19
21
|
className: b('toggler'),
|
20
22
|
children: [/*#__PURE__*/_jsxs("svg", {
|
21
23
|
xmlns: "http://www.w3.org/2000/svg",
|
@@ -49,7 +51,7 @@ export function Support(_ref) {
|
|
49
51
|
}), /*#__PURE__*/_jsx("span", {
|
50
52
|
className: b('toggler-moo')
|
51
53
|
})]
|
52
|
-
})
|
54
|
+
})]
|
53
55
|
});
|
54
56
|
}, [children]);
|
55
57
|
return UIFactory.makeSupportContent({
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["React","cn","UIFactory","getCluster","getCurrentUserName","useSelector","jsx","_jsx","jsxs","_jsxs","b","Support","_ref","children","login","cluster","makeContent","useCallback","onSupportClick","className","onClick","xmlns","width","height","viewBox","id","x1","x2","y1","y2","offset","stopColor","d","fill","strokeWidth","stroke","makeSupportContent"],"sources":["Support.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'bem-cn-lite';\nimport _ from 'lodash';\n\nimport './Support.scss';\nimport UIFactory from '../../UIFactory';\nimport {getCluster, getCurrentUserName} from '../../store/selectors/global';\nimport {useSelector} from 'react-redux';\n\ninterface SupportProps {\n children?: React.ReactNode;\n}\n\nconst b = cn('support-form');\n\nexport function Support({children}: SupportProps) {\n const login = useSelector(getCurrentUserName);\n const cluster = useSelector(getCluster);\n\n const makeContent = React.useCallback(\n (onSupportClick: () => void) => (\n <div className={b()} onClick={onSupportClick}>\n {children || (\n <div className={b('toggler')}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"45\"\n height=\"32\"\n viewBox=\"0 0 45 32\"\n >\n <defs>\n <linearGradient id=\"moo_bg\" x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n <stop className=\"moo-bg__start\" offset=\"0%\" stopColor=\"#fff\" />\n <stop className=\"moo-bg__stop\" offset=\"100%\" stopColor=\"#eee\" />\n </linearGradient>\n </defs>\n <path\n className={b('toggler-back')}\n d=\"M-0.5 0h36l8 16l-8 16.5h-36z\"\n fill=\"url(#moo_bg)\"\n strokeWidth=\"1\"\n stroke=\"rgba(0,0,0,0.25)\"\n />\n </svg>\n <span className={b('toggler-moo')} />\n </div>\n )}\n </div>\n ),\n [children],\n );\n\n return UIFactory.makeSupportContent({login, cluster}, makeContent) || null;\n}\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,EAAE,MAAM,aAAa;AAG5B,OAAO,eAAgB;AACvB,OAAOC,SAAS,MAAM,iBAAiB;AACvC,SAAQC,UAAU,EAAEC,kBAAkB,QAAO,8BAA8B;AAC3E,SAAQC,WAAW,QAAO,aAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAMxC,IAAMC,CAAC,GAAGT,EAAE,CAAC,cAAc,CAAC;AAE5B,OAAO,SAASU,OAAOA,CAAAC,IAAA,EAA2B;EAAA,IAAzBC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;EAC7B,IAAMC,KAAK,GAAGT,WAAW,CAACD,kBAAkB,CAAC;EAC7C,IAAMW,OAAO,GAAGV,WAAW,CAACF,UAAU,CAAC;EAEvC,IAAMa,WAAW,GAAGhB,KAAK,CAACiB,WAAW,CACjC,
|
1
|
+
{"version":3,"names":["React","cn","UIFactory","getCluster","getCurrentUserName","useSelector","jsx","_jsx","jsxs","_jsxs","b","Support","_ref","children","login","cluster","makeContent","useCallback","_ref2","supportContent","onSupportClick","className","onClick","xmlns","width","height","viewBox","id","x1","x2","y1","y2","offset","stopColor","d","fill","strokeWidth","stroke","makeSupportContent"],"sources":["Support.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'bem-cn-lite';\nimport _ from 'lodash';\n\nimport './Support.scss';\nimport UIFactory from '../../UIFactory';\nimport {getCluster, getCurrentUserName} from '../../store/selectors/global';\nimport {useSelector} from 'react-redux';\n\ninterface SupportProps {\n children?: React.ReactNode;\n}\n\nconst b = cn('support-form');\n\nexport function Support({children}: SupportProps) {\n const login = useSelector(getCurrentUserName);\n const cluster = useSelector(getCluster);\n\n const makeContent = React.useCallback(\n ({\n supportContent,\n onSupportClick,\n }: {\n supportContent?: React.ReactNode;\n onSupportClick: () => void;\n }) => (\n <div className={b()} onClick={onSupportClick}>\n {supportContent}\n {children || (\n <div className={b('toggler')}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"45\"\n height=\"32\"\n viewBox=\"0 0 45 32\"\n >\n <defs>\n <linearGradient id=\"moo_bg\" x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n <stop className=\"moo-bg__start\" offset=\"0%\" stopColor=\"#fff\" />\n <stop className=\"moo-bg__stop\" offset=\"100%\" stopColor=\"#eee\" />\n </linearGradient>\n </defs>\n <path\n className={b('toggler-back')}\n d=\"M-0.5 0h36l8 16l-8 16.5h-36z\"\n fill=\"url(#moo_bg)\"\n strokeWidth=\"1\"\n stroke=\"rgba(0,0,0,0.25)\"\n />\n </svg>\n <span className={b('toggler-moo')} />\n </div>\n )}\n </div>\n ),\n [children],\n );\n\n return UIFactory.makeSupportContent({login, cluster}, makeContent) || null;\n}\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,EAAE,MAAM,aAAa;AAG5B,OAAO,eAAgB;AACvB,OAAOC,SAAS,MAAM,iBAAiB;AACvC,SAAQC,UAAU,EAAEC,kBAAkB,QAAO,8BAA8B;AAC3E,SAAQC,WAAW,QAAO,aAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAMxC,IAAMC,CAAC,GAAGT,EAAE,CAAC,cAAc,CAAC;AAE5B,OAAO,SAASU,OAAOA,CAAAC,IAAA,EAA2B;EAAA,IAAzBC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;EAC7B,IAAMC,KAAK,GAAGT,WAAW,CAACD,kBAAkB,CAAC;EAC7C,IAAMW,OAAO,GAAGV,WAAW,CAACF,UAAU,CAAC;EAEvC,IAAMa,WAAW,GAAGhB,KAAK,CAACiB,WAAW,CACjC,UAAAC,KAAA;IAAA,IACIC,cAAc,GAAAD,KAAA,CAAdC,cAAc;MACdC,cAAc,GAAAF,KAAA,CAAdE,cAAc;IAAA,oBAKdX,KAAA;MAAKY,SAAS,EAAEX,CAAC,CAAC,CAAE;MAACY,OAAO,EAAEF,cAAe;MAAAP,QAAA,GACxCM,cAAc,EACdN,QAAQ,iBACLJ,KAAA;QAAKY,SAAS,EAAEX,CAAC,CAAC,SAAS,CAAE;QAAAG,QAAA,gBACzBJ,KAAA;UACIc,KAAK,EAAC,4BAA4B;UAClCC,KAAK,EAAC,IAAI;UACVC,MAAM,EAAC,IAAI;UACXC,OAAO,EAAC,WAAW;UAAAb,QAAA,gBAEnBN,IAAA;YAAAM,QAAA,eACIJ,KAAA;cAAgBkB,EAAE,EAAC,QAAQ;cAACC,EAAE,EAAC,GAAG;cAACC,EAAE,EAAC,GAAG;cAACC,EAAE,EAAC,GAAG;cAACC,EAAE,EAAC,GAAG;cAAAlB,QAAA,gBACnDN,IAAA;gBAAMc,SAAS,EAAC,eAAe;gBAACW,MAAM,EAAC,IAAI;gBAACC,SAAS,EAAC;cAAM,CAAE,CAAC,eAC/D1B,IAAA;gBAAMc,SAAS,EAAC,cAAc;gBAACW,MAAM,EAAC,MAAM;gBAACC,SAAS,EAAC;cAAM,CAAE,CAAC;YAAA,CACpD;UAAC,CACf,CAAC,eACP1B,IAAA;YACIc,SAAS,EAAEX,CAAC,CAAC,cAAc,CAAE;YAC7BwB,CAAC,EAAC,8BAA8B;YAChCC,IAAI,EAAC,cAAc;YACnBC,WAAW,EAAC,GAAG;YACfC,MAAM,EAAC;UAAkB,CAC5B,CAAC;QAAA,CACD,CAAC,eACN9B,IAAA;UAAMc,SAAS,EAAEX,CAAC,CAAC,aAAa;QAAE,CAAE,CAAC;MAAA,CACpC,CACR;IAAA,CACA,CAAC;EAAA,CACT,EACD,CAACG,QAAQ,CACb,CAAC;EAED,OAAOX,SAAS,CAACoC,kBAAkB,CAAC;IAACxB,KAAK,EAALA,KAAK;IAAEC,OAAO,EAAPA;EAAO,CAAC,EAAEC,WAAW,CAAC,IAAI,IAAI;AAC9E"}
|
@@ -1,8 +1,10 @@
|
|
1
1
|
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
2
2
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
3
3
|
import React, { useState } from 'react';
|
4
|
+
import { useHistory } from 'react-router';
|
4
5
|
import cn from 'bem-cn-lite';
|
5
6
|
import { FooterItem, PageLayoutAside } from '@gravity-ui/navigation';
|
7
|
+
import { Menu } from '@gravity-ui/uikit';
|
6
8
|
import Logo from '../../../../img/svg/appLogo.svg';
|
7
9
|
var GearIcon = function GearIcon(props) {
|
8
10
|
return /*#__PURE__*/_jsxs("svg", _objectSpread(_objectSpread({}, props), {}, {
|
@@ -32,11 +34,38 @@ GearIcon.defaultProps = {
|
|
32
34
|
fill: "none",
|
33
35
|
viewBox: "0 0 16 16"
|
34
36
|
};
|
37
|
+
var BugIcon = function BugIcon(props) {
|
38
|
+
return /*#__PURE__*/_jsxs("svg", _objectSpread(_objectSpread({}, props), {}, {
|
39
|
+
children: [/*#__PURE__*/_jsx("g", {
|
40
|
+
clipPath: "url(#a)",
|
41
|
+
children: /*#__PURE__*/_jsx("path", {
|
42
|
+
fill: "currentColor",
|
43
|
+
fillRule: "evenodd",
|
44
|
+
d: "M5.865.031a.75.75 0 0 1 .918.53l.531 1.981a5.554 5.554 0 0 1 2.384.225 2.5 2.5 0 1 1 3.535 3.535 5.496 5.496 0 0 1 .225 2.384l1.98.53a.75.75 0 0 1-.388 1.45l-1.98-.53a5.49 5.49 0 0 1-.687 1.187l1.45 1.45a.75.75 0 0 1-1.06 1.06l-1.45-1.45a5.493 5.493 0 0 1-1.188.687l.53 1.98a.75.75 0 1 1-1.448.388l-.531-1.98a5.5 5.5 0 0 1-6.144-6.143l-1.98-.532A.75.75 0 0 1 .95 5.334l1.98.531c.18-.426.411-.824.687-1.188l-1.45-1.45a.75.75 0 1 1 1.06-1.06l1.45 1.45a5.494 5.494 0 0 1 1.188-.687L5.335.95a.75.75 0 0 1 .53-.919ZM8 12a4 4 0 1 0-3.309-1.752L8.42 6.52a.75.75 0 0 1 1.06 1.06l-3.728 3.73c.64.435 1.414.69 2.248.69Z",
|
45
|
+
clipRule: "evenodd"
|
46
|
+
})
|
47
|
+
}), /*#__PURE__*/_jsx("defs", {
|
48
|
+
children: /*#__PURE__*/_jsx("clipPath", {
|
49
|
+
id: "a",
|
50
|
+
children: /*#__PURE__*/_jsx("path", {
|
51
|
+
fill: "currentColor",
|
52
|
+
d: "M0 0h16v16H0z"
|
53
|
+
})
|
54
|
+
})
|
55
|
+
})]
|
56
|
+
}));
|
57
|
+
};
|
58
|
+
BugIcon.defaultProps = {
|
59
|
+
xmlns: "http://www.w3.org/2000/svg",
|
60
|
+
width: "16",
|
61
|
+
height: "16",
|
62
|
+
fill: "none",
|
63
|
+
viewBox: "0 0 16 16"
|
64
|
+
};
|
35
65
|
import Link from '../../components/Link/Link';
|
36
66
|
import unknown from '../../../../img/user-avatar.svg';
|
67
|
+
import UIFactory from '../../UIFactory';
|
37
68
|
import "./AppNavigationComponent.css";
|
38
|
-
import { Menu } from '@gravity-ui/uikit';
|
39
|
-
import { useHistory } from 'react-router';
|
40
69
|
import { jsx as _jsx } from "react/jsx-runtime";
|
41
70
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
42
71
|
import { Fragment as _Fragment } from "react/jsx-runtime";
|
@@ -98,7 +127,23 @@ function AppNavigationComponent(_ref) {
|
|
98
127
|
renderFooter: function renderFooter(_ref2) {
|
99
128
|
var compact = _ref2.compact;
|
100
129
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
101
|
-
children: [
|
130
|
+
children: [UIFactory.makeSupportContent({
|
131
|
+
login: currentUser
|
132
|
+
}, function (_ref3) {
|
133
|
+
var onSupportClick = _ref3.onSupportClick,
|
134
|
+
supportContent = _ref3.supportContent;
|
135
|
+
return /*#__PURE__*/_jsxs(React.Fragment, {
|
136
|
+
children: [/*#__PURE__*/_jsx(FooterItem, {
|
137
|
+
compact: compact,
|
138
|
+
item: {
|
139
|
+
id: 'support',
|
140
|
+
title: 'Report a bug',
|
141
|
+
icon: BugIcon,
|
142
|
+
onItemClick: onSupportClick
|
143
|
+
}
|
144
|
+
}), supportContent]
|
145
|
+
});
|
146
|
+
}), /*#__PURE__*/_jsx(FooterItem, {
|
102
147
|
compact: compact,
|
103
148
|
item: {
|
104
149
|
id: 'settings',
|
@@ -114,8 +159,8 @@ function AppNavigationComponent(_ref) {
|
|
114
159
|
onItemClick: function onItemClick() {
|
115
160
|
setPopupVisible(!popupVisible);
|
116
161
|
},
|
117
|
-
itemWrapper: function itemWrapper(
|
118
|
-
var title =
|
162
|
+
itemWrapper: function itemWrapper(_ref4, makeItem) {
|
163
|
+
var title = _ref4.title;
|
119
164
|
return makeItem({
|
120
165
|
title: title,
|
121
166
|
icon: /*#__PURE__*/_jsx("img", {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["React","useState","cn","FooterItem","PageLayoutAside","Logo","GearIcon","props","_jsxs","_objectSpread","children","_jsx","clipPath","fill","fillRule","d","clipRule","id","defaultProps","xmlns","width","height","viewBox","Link","unknown","Menu","useHistory","jsx","jsxs","Fragment","_Fragment","block","AppNavigationComponent","_ref","logoClassName","menuItems","currentUser","authWay","panelContent","panelVisible","panelClassName","onClosePanel","settingsVisible","settingsContent","toggleSettingsVisible","onChangeCompact","panelItems","useMemo","content","visible","className","_useState","_useState2","_slicedToArray","popupVisible","setPopupVisible","history","multipleTooltip","headerDecoration","logo","text","textSize","icon","iconSize","iconClassName","wrapper","node","url","theme","target","renderFooter","_ref2","compact","item","title","onItemClick","itemWrapper","_ref3","makeItem","src","enableTooltip","onClosePopup","renderPopupContent","Item","onClick","push","href","memo"],"sources":["AppNavigationComponent.tsx"],"sourcesContent":["import React, {useState} from 'react';\nimport cn from 'bem-cn-lite';\nimport {FooterItem, PageLayoutAside} from '@gravity-ui/navigation';\n\nimport Logo from '../../../../img/svg/appLogo.svg';\nimport GearIcon from '@gravity-ui/icons/svgs/gear.svg';\nimport Link from '../../components/Link/Link';\nimport unknown from '../../../../img/user-avatar.svg';\nimport {AppNavigationProps} from './AppNavigationPageLayout';\n\nimport './AppNavigationComponent.scss';\nimport {Menu} from '@gravity-ui/uikit';\nimport {useHistory} from 'react-router';\n\nconst block = cn('yt-app-navigation');\n\nfunction AppNavigationComponent({\n logoClassName,\n menuItems,\n currentUser,\n authWay,\n\n panelContent,\n panelVisible,\n panelClassName,\n onClosePanel,\n\n settingsVisible,\n settingsContent,\n toggleSettingsVisible,\n\n onChangeCompact,\n}: Omit<AppNavigationProps, 'compact' | 'rememberSize' | 'className'>) {\n const panelItems = React.useMemo(() => {\n return [\n {\n id: 'panel',\n content: panelContent,\n visible: panelVisible,\n className: panelClassName,\n },\n {\n id: 'settings',\n content: settingsContent,\n visible: settingsVisible,\n },\n ];\n }, [panelVisible, panelContent, settingsVisible, settingsContent]);\n\n const [popupVisible, setPopupVisible] = useState(false);\n const history = useHistory();\n\n return (\n <PageLayoutAside\n multipleTooltip\n panelItems={panelItems}\n onClosePanel={onClosePanel}\n menuItems={menuItems}\n headerDecoration\n logo={{\n text: () => 'YTsaurus',\n textSize: 22,\n icon: Logo,\n iconSize: 36,\n iconClassName: logoClassName,\n wrapper: (node) => {\n return (\n <Link url={'/'} theme={'primary'} target=\"_blank\">\n {node}\n </Link>\n );\n },\n }}\n onChangeCompact={onChangeCompact}\n renderFooter={({compact}) => {\n return (\n <>\n <FooterItem\n compact={compact}\n item={{\n id: 'settings',\n title: 'Settings',\n onItemClick: toggleSettingsVisible,\n icon: GearIcon,\n }}\n />\n <FooterItem\n compact={compact}\n item={{\n id: 'user',\n title: currentUser,\n onItemClick: () => {\n setPopupVisible(!popupVisible);\n },\n itemWrapper: ({title}: any, makeItem: any) => {\n return makeItem({\n title,\n icon: (\n <img\n className={block('user-icon')}\n width={40}\n height={40}\n src={unknown}\n />\n ),\n });\n },\n }}\n enableTooltip={!popupVisible}\n popupVisible={popupVisible}\n onClosePopup={() => setPopupVisible(false)}\n renderPopupContent={() => {\n return (\n <div className={block('settings-ul')}>\n <Menu>\n {authWay === 'passwd' && (\n <Menu.Item\n onClick={() => history.push('/change-password')}\n >\n Change password\n </Menu.Item>\n )}\n <Menu.Item href={'/api/yt/logout'}>Logout</Menu.Item>\n </Menu>\n </div>\n );\n }}\n />\n </>\n );\n }}\n />\n );\n}\n\nexport default React.memo(AppNavigationComponent);\n"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["React","useState","useHistory","cn","FooterItem","PageLayoutAside","Menu","Logo","GearIcon","props","_jsxs","_objectSpread","children","_jsx","clipPath","fill","fillRule","d","clipRule","id","defaultProps","xmlns","width","height","viewBox","BugIcon","Link","unknown","UIFactory","jsx","jsxs","Fragment","_Fragment","block","AppNavigationComponent","_ref","logoClassName","menuItems","currentUser","authWay","panelContent","panelVisible","panelClassName","onClosePanel","settingsVisible","settingsContent","toggleSettingsVisible","onChangeCompact","panelItems","useMemo","content","visible","className","_useState","_useState2","_slicedToArray","popupVisible","setPopupVisible","history","multipleTooltip","headerDecoration","logo","text","textSize","icon","iconSize","iconClassName","wrapper","node","url","theme","target","renderFooter","_ref2","compact","makeSupportContent","login","_ref3","onSupportClick","supportContent","item","title","onItemClick","itemWrapper","_ref4","makeItem","src","enableTooltip","onClosePopup","renderPopupContent","Item","onClick","push","href","memo"],"sources":["AppNavigationComponent.tsx"],"sourcesContent":["import React, {useState} from 'react';\nimport {useHistory} from 'react-router';\nimport cn from 'bem-cn-lite';\nimport {FooterItem, PageLayoutAside} from '@gravity-ui/navigation';\nimport {Menu} from '@gravity-ui/uikit';\n\nimport Logo from '../../../../img/svg/appLogo.svg';\nimport GearIcon from '@gravity-ui/icons/svgs/gear.svg';\nimport BugIcon from '@gravity-ui/icons/svgs/bug.svg';\nimport Link from '../../components/Link/Link';\nimport unknown from '../../../../img/user-avatar.svg';\nimport {AppNavigationProps} from './AppNavigationPageLayout';\nimport UIFactory from '../../UIFactory';\n\nimport './AppNavigationComponent.scss';\n\nconst block = cn('yt-app-navigation');\n\nfunction AppNavigationComponent({\n logoClassName,\n menuItems,\n currentUser,\n authWay,\n\n panelContent,\n panelVisible,\n panelClassName,\n onClosePanel,\n\n settingsVisible,\n settingsContent,\n toggleSettingsVisible,\n\n onChangeCompact,\n}: Omit<AppNavigationProps, 'compact' | 'rememberSize' | 'className'>) {\n const panelItems = React.useMemo(() => {\n return [\n {\n id: 'panel',\n content: panelContent,\n visible: panelVisible,\n className: panelClassName,\n },\n {\n id: 'settings',\n content: settingsContent,\n visible: settingsVisible,\n },\n ];\n }, [panelVisible, panelContent, settingsVisible, settingsContent]);\n\n const [popupVisible, setPopupVisible] = useState(false);\n const history = useHistory();\n\n return (\n <PageLayoutAside\n multipleTooltip\n panelItems={panelItems}\n onClosePanel={onClosePanel}\n menuItems={menuItems}\n headerDecoration\n logo={{\n text: () => 'YTsaurus',\n textSize: 22,\n icon: Logo,\n iconSize: 36,\n iconClassName: logoClassName,\n wrapper: (node) => {\n return (\n <Link url={'/'} theme={'primary'} target=\"_blank\">\n {node}\n </Link>\n );\n },\n }}\n onChangeCompact={onChangeCompact}\n renderFooter={({compact}) => {\n return (\n <>\n {UIFactory.makeSupportContent(\n {login: currentUser},\n ({onSupportClick, supportContent}) => (\n <React.Fragment>\n <FooterItem\n compact={compact}\n item={{\n id: 'support',\n title: 'Report a bug',\n icon: BugIcon,\n onItemClick: onSupportClick,\n }}\n />\n {supportContent}\n </React.Fragment>\n ),\n )}\n <FooterItem\n compact={compact}\n item={{\n id: 'settings',\n title: 'Settings',\n onItemClick: toggleSettingsVisible,\n icon: GearIcon,\n }}\n />\n <FooterItem\n compact={compact}\n item={{\n id: 'user',\n title: currentUser,\n onItemClick: () => {\n setPopupVisible(!popupVisible);\n },\n itemWrapper: ({title}: any, makeItem: any) => {\n return makeItem({\n title,\n icon: (\n <img\n className={block('user-icon')}\n width={40}\n height={40}\n src={unknown}\n />\n ),\n });\n },\n }}\n enableTooltip={!popupVisible}\n popupVisible={popupVisible}\n onClosePopup={() => setPopupVisible(false)}\n renderPopupContent={() => {\n return (\n <div className={block('settings-ul')}>\n <Menu>\n {authWay === 'passwd' && (\n <Menu.Item\n onClick={() => history.push('/change-password')}\n >\n Change password\n </Menu.Item>\n )}\n <Menu.Item href={'/api/yt/logout'}>Logout</Menu.Item>\n </Menu>\n </div>\n );\n }}\n />\n </>\n );\n }}\n />\n );\n}\n\nexport default React.memo(AppNavigationComponent);\n"],"mappings":"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"}
|
@@ -30,7 +30,7 @@ import { getRecentPagesInfo } from '../../store/selectors/slideoutMenu';
|
|
30
30
|
import SettingsMenuItem from '../../containers/SettingsMenu/SettingsMenuItem';
|
31
31
|
import SettingsMenuRadio from '../../containers/SettingsMenu/SettingsMenuRadio';
|
32
32
|
import SettingsMenuInput from '../SettingsMenu/SettingsMenuInput';
|
33
|
-
import { getCurrentClusterNS, getCurrentUserName, getGlobalMasterVersion, getGlobalSchedulerVersion, getHttpProxyVersion,
|
33
|
+
import { getCurrentClusterNS, getCurrentUserName, getGlobalMasterVersion, getGlobalSchedulerVersion, getHttpProxyVersion, isDeveloperOrWatchMen } from '../../store/selectors/global';
|
34
34
|
import { cellSizeRadioButtonItems, pageSizeRadioButtonItems } from '../../constants/navigation/content/table';
|
35
35
|
import YT from '../../config/yt-config';
|
36
36
|
import Link from '../../components/Link/Link';
|
@@ -254,7 +254,7 @@ export function makeItem(title, align, content) {
|
|
254
254
|
};
|
255
255
|
}
|
256
256
|
export function useSettingsDescription() {
|
257
|
-
var isAdmin = useSelector(
|
257
|
+
var isAdmin = useSelector(isDeveloperOrWatchMen) || true;
|
258
258
|
var cluster = useClusterFromLocation();
|
259
259
|
var login = useSelector(getCurrentUserName);
|
260
260
|
var settings = useSettings(cluster, isAdmin);
|