@ytsaurus/ui 1.25.0 → 1.26.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 (69) hide show
  1. package/build/cjs/server/configs/e2e/local.js +8 -0
  2. package/build/cjs/server/configs/e2e/local.js.map +1 -1
  3. package/build/cjs/shared/ui-settings.d.ts +19 -1
  4. package/build/cjs/shared/ui-settings.js.map +1 -1
  5. package/build/cjs/ui/UIFactory.d.ts +11 -2
  6. package/build/cjs/ui/UIFactory.js +8 -0
  7. package/build/cjs/ui/UIFactory.js.map +1 -1
  8. package/build/cjs/ui/components/Tabs/Tabs.d.ts +1 -1
  9. package/build/cjs/ui/components/Tabs/Tabs.js.map +1 -1
  10. package/build/cjs/ui/constants/system/tabs.d.ts +4 -0
  11. package/build/cjs/ui/constants/system/tabs.js +11 -0
  12. package/build/cjs/ui/constants/system/tabs.js.map +1 -0
  13. package/build/cjs/ui/containers/ClusterPage/ClusterPage.js +2 -2
  14. package/build/cjs/ui/containers/ClusterPage/ClusterPage.js.map +1 -1
  15. package/build/cjs/ui/pages/components/tabs/Versions/VersionSummary.css +10 -3
  16. package/build/cjs/ui/pages/components/tabs/Versions/VersionSummary.css.map +1 -1
  17. package/build/cjs/ui/pages/components/tabs/Versions/VersionSummary.d.ts +3 -1
  18. package/build/cjs/ui/pages/components/tabs/Versions/VersionSummary.js +24 -6
  19. package/build/cjs/ui/pages/components/tabs/Versions/VersionSummary.js.map +1 -1
  20. package/build/cjs/ui/pages/system/System/System.d.ts +10 -8
  21. package/build/cjs/ui/pages/system/System/System.js +56 -52
  22. package/build/cjs/ui/pages/system/System/System.js.map +1 -1
  23. package/build/cjs/ui/pages/system/System/SystemGeneralTab.d.ts +2 -0
  24. package/build/cjs/ui/pages/system/System/SystemGeneralTab.js +22 -0
  25. package/build/cjs/ui/pages/system/System/SystemGeneralTab.js.map +1 -0
  26. package/build/cjs/ui/pages/system/System/helpers/getSystemTabItems.d.ts +9 -0
  27. package/build/cjs/ui/pages/system/System/helpers/getSystemTabItems.js +41 -0
  28. package/build/cjs/ui/pages/system/System/helpers/getSystemTabItems.js.map +1 -0
  29. package/build/esm/server/configs/e2e/local.js +8 -0
  30. package/build/esm/server/configs/e2e/local.js.map +1 -1
  31. package/build/esm/shared/ui-settings.d.ts +19 -1
  32. package/build/esm/shared/ui-settings.js.map +1 -1
  33. package/build/esm/ui/UIFactory.d.ts +11 -2
  34. package/build/esm/ui/UIFactory.js +8 -0
  35. package/build/esm/ui/UIFactory.js.map +1 -1
  36. package/build/esm/ui/components/Tabs/Tabs.d.ts +1 -1
  37. package/build/esm/ui/components/Tabs/Tabs.js.map +1 -1
  38. package/build/esm/ui/constants/system/tabs.d.ts +4 -0
  39. package/build/esm/ui/constants/system/tabs.js +5 -0
  40. package/build/esm/ui/constants/system/tabs.js.map +1 -0
  41. package/build/esm/ui/containers/ClusterPage/ClusterPage.js +1 -1
  42. package/build/esm/ui/containers/ClusterPage/ClusterPage.js.map +1 -1
  43. package/build/esm/ui/pages/components/tabs/Versions/VersionSummary.css +10 -3
  44. package/build/esm/ui/pages/components/tabs/Versions/VersionSummary.css.map +1 -1
  45. package/build/esm/ui/pages/components/tabs/Versions/VersionSummary.d.ts +3 -1
  46. package/build/esm/ui/pages/components/tabs/Versions/VersionSummary.js +24 -6
  47. package/build/esm/ui/pages/components/tabs/Versions/VersionSummary.js.map +1 -1
  48. package/build/esm/ui/pages/components/tabs/Versions/VersionSummary.scss +15 -6
  49. package/build/esm/ui/pages/system/System/System.d.ts +10 -8
  50. package/build/esm/ui/pages/system/System/System.js +55 -52
  51. package/build/esm/ui/pages/system/System/System.js.map +1 -1
  52. package/build/esm/ui/pages/system/System/SystemGeneralTab.d.ts +2 -0
  53. package/build/esm/ui/pages/system/System/SystemGeneralTab.js +17 -0
  54. package/build/esm/ui/pages/system/System/SystemGeneralTab.js.map +1 -0
  55. package/build/esm/ui/pages/system/System/helpers/getSystemTabItems.d.ts +9 -0
  56. package/build/esm/ui/pages/system/System/helpers/getSystemTabItems.js +35 -0
  57. package/build/esm/ui/pages/system/System/helpers/getSystemTabItems.js.map +1 -0
  58. package/dist/public/build/assets-manifest.json +7 -7
  59. package/dist/public/build/css/{main.6f740a3e.css → main.2d05e225.css} +2 -2
  60. package/dist/public/build/css/main.2d05e225.css.map +1 -0
  61. package/dist/public/build/js/main.c18a9d22.js +3 -0
  62. package/dist/public/build/js/{main.ccbdcdf6.js.map → main.c18a9d22.js.map} +1 -1
  63. package/dist/public/build/manifest.json +4 -4
  64. package/dist/server/configs/e2e/local.js +8 -0
  65. package/dist/shared/ui-settings.d.ts +19 -1
  66. package/package.json +2 -2
  67. package/dist/public/build/css/main.6f740a3e.css.map +0 -1
  68. package/dist/public/build/js/main.ccbdcdf6.js +0 -3
  69. /package/dist/public/build/js/{main.ccbdcdf6.js.LICENSE.txt → main.c18a9d22.js.LICENSE.txt} +0 -0
@@ -28,6 +28,14 @@ const e2eConfig = {
28
28
  title: 'My monitoring',
29
29
  urlTemplate: 'https://my.monitoring.service/operations?cluster={ytCluster}&id={ytOperationId}&pool={ytPool}&tree={ytPoolTree}&from={fromTimeMs}&to={toTimeMs}',
30
30
  },
31
+ systemMonitoring: {
32
+ title: 'My monitoring',
33
+ urlTemplate: 'https://my.monitoring.service/system?cluster={ytCluster}',
34
+ },
35
+ componentVersionsMonitoring: {
36
+ title: 'My monitoring',
37
+ urlTemplate: 'https://my.monitoring.service/component-versions?cluster={ytCluster}',
38
+ },
31
39
  reShortNameFromAddress: '(?<shortname>^(loca)).*(?<suffix>:\\d\\d\\d)',
32
40
  reShortNameFromTabletNodeAddress: '(?<shortname>^(local))[^:]+(?<suffix>:\\d\\d)',
33
41
  reUnipikaAllowTaggedSources: ['^https://yastatic\\.net/'],
@@ -1 +1 @@
1
- {"version":3,"names":["_common","_interopRequireDefault","require","obj","__esModule","default","e2eConfig","uiSettings","newTableReplicasCount","uploadTableMaxSize","uploadTableUseLocalmode","queryTrackerStage","directDownload","docsBaseUrl","process","env","YT_DOCS_BASE_URL","schedulingMonitoring","title","urlTemplate","accountsMonitoring","bundlesMonitoring","operationsMonitoring","reShortNameFromAddress","reShortNameFromTabletNodeAddress","reUnipikaAllowTaggedSources","hideReferrerUrl","defaultUserSettingsOverrides","_objectSpread","common","_objectSpread2","_defineProperty","localmodeClusterConfig","urls","icon","icon2x","iconbig","externalProxy","_default","exports"],"sources":["local.ts"],"sourcesContent":["import {AppConfig} from '@gravity-ui/nodekit';\nimport common from '../common';\n\nconst e2eConfig: Partial<AppConfig> = {\n uiSettings: {\n newTableReplicasCount: 1,\n uploadTableMaxSize: 50 * 1024 * 1024,\n uploadTableUseLocalmode: true,\n queryTrackerStage: 'testing',\n directDownload: false,\n docsBaseUrl: process.env.YT_DOCS_BASE_URL || 'https://ytsaurus.tech/docs/en',\n schedulingMonitoring: {\n title: 'My monitoring',\n urlTemplate:\n 'https://monitoring-service.my-domain.com/d/DB-id?var-pool={ytPool}&var-cluster={ytCluster}&var-tree={ytPoolTree}',\n },\n accountsMonitoring: {\n title: 'My monitoring',\n urlTemplate:\n 'https://my.monitoring.service/accounts?cluster={ytCluster}&account={ytAccount}',\n },\n bundlesMonitoring: {\n title: 'My monitoring',\n urlTemplate:\n 'https://my.monitoring.service/bundles?cluster={ytCluster}&bundle={ytTabletCellBundle}',\n },\n operationsMonitoring: {\n title: 'My monitoring',\n urlTemplate:\n 'https://my.monitoring.service/operations?cluster={ytCluster}&id={ytOperationId}&pool={ytPool}&tree={ytPoolTree}&from={fromTimeMs}&to={toTimeMs}',\n },\n\n reShortNameFromAddress: '(?<shortname>^(loca)).*(?<suffix>:\\\\d\\\\d\\\\d)',\n reShortNameFromTabletNodeAddress: '(?<shortname>^(local))[^:]+(?<suffix>:\\\\d\\\\d)',\n\n reUnipikaAllowTaggedSources: ['^https://yastatic\\\\.net/'],\n hideReferrerUrl: 'https://h.yandex-team.ru/',\n },\n\n defaultUserSettingsOverrides: {\n ...common.defaultUserSettingsOverrides,\n ['global::navigation::useSmartSort']: false,\n ['global::development::yqlTypes']: true,\n },\n\n localmodeClusterConfig: {\n urls: {\n icon: 'https://yastatic.net/s3/cloud/yt/static/freeze/assets/images/ui.bab31938.jpg',\n icon2x: 'https://yastatic.net/s3/cloud/yt/static/freeze/assets/images/ui-2x.38d49f78.jpg',\n iconbig:\n 'https://yastatic.net/s3/cloud/yt/static/freeze/assets/images/ui-big.44e3fa56.jpg',\n },\n externalProxy: 'external.proxy.my',\n },\n};\n\nexport default e2eConfig;\n"],"mappings":";;;;;;;;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA8B,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;;AAE9B,IAAMG,SAA6B,GAAG;EAClCC,UAAU,EAAE;IACRC,qBAAqB,EAAE,CAAC;IACxBC,kBAAkB,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;IACpCC,uBAAuB,EAAE,IAAI;IAC7BC,iBAAiB,EAAE,SAAS;IAC5BC,cAAc,EAAE,KAAK;IACrBC,WAAW,EAAEC,OAAO,CAACC,GAAG,CAACC,gBAAgB,IAAI,+BAA+B;IAC5EC,oBAAoB,EAAE;MAClBC,KAAK,EAAE,eAAe;MACtBC,WAAW,EACP;IACR,CAAC;IACDC,kBAAkB,EAAE;MAChBF,KAAK,EAAE,eAAe;MACtBC,WAAW,EACP;IACR,CAAC;IACDE,iBAAiB,EAAE;MACfH,KAAK,EAAE,eAAe;MACtBC,WAAW,EACP;IACR,CAAC;IACDG,oBAAoB,EAAE;MAClBJ,KAAK,EAAE,eAAe;MACtBC,WAAW,EACP;IACR,CAAC;IAEDI,sBAAsB,EAAE,8CAA8C;IACtEC,gCAAgC,EAAE,+CAA+C;IAEjFC,2BAA2B,EAAE,CAAC,0BAA0B,CAAC;IACzDC,eAAe,EAAE;EACrB,CAAC;EAEDC,4BAA4B,MAAAC,sBAAA,MAAAA,sBAAA,MACrBC,eAAM,CAACF,4BAA4B,QAAAG,cAAA,WAAAC,wBAAA,EAAAD,cAAA,EACrC,kCAAkC,EAAG,KAAK,OAAAC,wBAAA,EAAAD,cAAA,EAC1C,+BAA+B,EAAG,IAAI,GAAAA,cAAA,EAC1C;EAEDE,sBAAsB,EAAE;IACpBC,IAAI,EAAE;MACFC,IAAI,EAAE,8EAA8E;MACpFC,MAAM,EAAE,iFAAiF;MACzFC,OAAO,EACH;IACR,CAAC;IACDC,aAAa,EAAE;EACnB;AACJ,CAAC;AAAA,IAAAC,QAAA,GAAAC,OAAA,CAAAlC,OAAA,GAEcC,SAAS"}
1
+ {"version":3,"names":["_common","_interopRequireDefault","require","obj","__esModule","default","e2eConfig","uiSettings","newTableReplicasCount","uploadTableMaxSize","uploadTableUseLocalmode","queryTrackerStage","directDownload","docsBaseUrl","process","env","YT_DOCS_BASE_URL","schedulingMonitoring","title","urlTemplate","accountsMonitoring","bundlesMonitoring","operationsMonitoring","systemMonitoring","componentVersionsMonitoring","reShortNameFromAddress","reShortNameFromTabletNodeAddress","reUnipikaAllowTaggedSources","hideReferrerUrl","defaultUserSettingsOverrides","_objectSpread","common","_objectSpread2","_defineProperty","localmodeClusterConfig","urls","icon","icon2x","iconbig","externalProxy","_default","exports"],"sources":["local.ts"],"sourcesContent":["import {AppConfig} from '@gravity-ui/nodekit';\nimport common from '../common';\n\nconst e2eConfig: Partial<AppConfig> = {\n uiSettings: {\n newTableReplicasCount: 1,\n uploadTableMaxSize: 50 * 1024 * 1024,\n uploadTableUseLocalmode: true,\n queryTrackerStage: 'testing',\n directDownload: false,\n docsBaseUrl: process.env.YT_DOCS_BASE_URL || 'https://ytsaurus.tech/docs/en',\n schedulingMonitoring: {\n title: 'My monitoring',\n urlTemplate:\n 'https://monitoring-service.my-domain.com/d/DB-id?var-pool={ytPool}&var-cluster={ytCluster}&var-tree={ytPoolTree}',\n },\n accountsMonitoring: {\n title: 'My monitoring',\n urlTemplate:\n 'https://my.monitoring.service/accounts?cluster={ytCluster}&account={ytAccount}',\n },\n bundlesMonitoring: {\n title: 'My monitoring',\n urlTemplate:\n 'https://my.monitoring.service/bundles?cluster={ytCluster}&bundle={ytTabletCellBundle}',\n },\n operationsMonitoring: {\n title: 'My monitoring',\n urlTemplate:\n 'https://my.monitoring.service/operations?cluster={ytCluster}&id={ytOperationId}&pool={ytPool}&tree={ytPoolTree}&from={fromTimeMs}&to={toTimeMs}',\n },\n systemMonitoring: {\n title: 'My monitoring',\n urlTemplate: 'https://my.monitoring.service/system?cluster={ytCluster}',\n },\n componentVersionsMonitoring: {\n title: 'My monitoring',\n urlTemplate: 'https://my.monitoring.service/component-versions?cluster={ytCluster}',\n },\n\n reShortNameFromAddress: '(?<shortname>^(loca)).*(?<suffix>:\\\\d\\\\d\\\\d)',\n reShortNameFromTabletNodeAddress: '(?<shortname>^(local))[^:]+(?<suffix>:\\\\d\\\\d)',\n\n reUnipikaAllowTaggedSources: ['^https://yastatic\\\\.net/'],\n hideReferrerUrl: 'https://h.yandex-team.ru/',\n },\n\n defaultUserSettingsOverrides: {\n ...common.defaultUserSettingsOverrides,\n ['global::navigation::useSmartSort']: false,\n ['global::development::yqlTypes']: true,\n },\n\n localmodeClusterConfig: {\n urls: {\n icon: 'https://yastatic.net/s3/cloud/yt/static/freeze/assets/images/ui.bab31938.jpg',\n icon2x: 'https://yastatic.net/s3/cloud/yt/static/freeze/assets/images/ui-2x.38d49f78.jpg',\n iconbig:\n 'https://yastatic.net/s3/cloud/yt/static/freeze/assets/images/ui-big.44e3fa56.jpg',\n },\n externalProxy: 'external.proxy.my',\n },\n};\n\nexport default e2eConfig;\n"],"mappings":";;;;;;;;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA8B,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;;AAE9B,IAAMG,SAA6B,GAAG;EAClCC,UAAU,EAAE;IACRC,qBAAqB,EAAE,CAAC;IACxBC,kBAAkB,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;IACpCC,uBAAuB,EAAE,IAAI;IAC7BC,iBAAiB,EAAE,SAAS;IAC5BC,cAAc,EAAE,KAAK;IACrBC,WAAW,EAAEC,OAAO,CAACC,GAAG,CAACC,gBAAgB,IAAI,+BAA+B;IAC5EC,oBAAoB,EAAE;MAClBC,KAAK,EAAE,eAAe;MACtBC,WAAW,EACP;IACR,CAAC;IACDC,kBAAkB,EAAE;MAChBF,KAAK,EAAE,eAAe;MACtBC,WAAW,EACP;IACR,CAAC;IACDE,iBAAiB,EAAE;MACfH,KAAK,EAAE,eAAe;MACtBC,WAAW,EACP;IACR,CAAC;IACDG,oBAAoB,EAAE;MAClBJ,KAAK,EAAE,eAAe;MACtBC,WAAW,EACP;IACR,CAAC;IACDI,gBAAgB,EAAE;MACdL,KAAK,EAAE,eAAe;MACtBC,WAAW,EAAE;IACjB,CAAC;IACDK,2BAA2B,EAAE;MACzBN,KAAK,EAAE,eAAe;MACtBC,WAAW,EAAE;IACjB,CAAC;IAEDM,sBAAsB,EAAE,8CAA8C;IACtEC,gCAAgC,EAAE,+CAA+C;IAEjFC,2BAA2B,EAAE,CAAC,0BAA0B,CAAC;IACzDC,eAAe,EAAE;EACrB,CAAC;EAEDC,4BAA4B,MAAAC,sBAAA,MAAAA,sBAAA,MACrBC,eAAM,CAACF,4BAA4B,QAAAG,cAAA,WAAAC,wBAAA,EAAAD,cAAA,EACrC,kCAAkC,EAAG,KAAK,OAAAC,wBAAA,EAAAD,cAAA,EAC1C,+BAA+B,EAAG,IAAI,GAAAA,cAAA,EAC1C;EAEDE,sBAAsB,EAAE;IACpBC,IAAI,EAAE;MACFC,IAAI,EAAE,8EAA8E;MACpFC,MAAM,EAAE,iFAAiF;MACzFC,OAAO,EACH;IACR,CAAC;IACDC,aAAa,EAAE;EACnB;AACJ,CAAC;AAAA,IAAAC,QAAA,GAAAC,OAAA,CAAApC,OAAA,GAEcC,SAAS"}
@@ -61,12 +61,30 @@ export interface UISettings {
61
61
  * chytMonitoring.urlTemplate supports following parameters:
62
62
  * - {ytCluster}
63
63
  * - {chytAlias}
64
- * All the parameters are optional and the are replaced with corresponding values
64
+ * All the parameters are optional and they are replaced with corresponding values
65
65
  * @example {
66
66
  * urlTemplate: `https://my.monitoring.service/chyt?cluster={ytCluster}&alias={chytAlias}`
67
67
  * }
68
68
  */
69
69
  chytMonitoring?: UISettingsMonitoring;
70
+ /**
71
+ * systemMonitoring.urlTemplate supports following parameters:
72
+ * - {ytCluster}
73
+ * All the parameters are optional and they are replaced with corresponding values
74
+ * @example {
75
+ * urlTemplate: 'https://my.monitoring.service/system?cluster={ytCluster}'
76
+ * }
77
+ */
78
+ systemMonitoring?: UISettingsMonitoring;
79
+ /**
80
+ * componentVersionsMonitoring.urlTemplate supports following parameters:
81
+ * - {ytCluster}
82
+ * All the parameters are optional and they are replaced with corresponding values
83
+ * @example {
84
+ * urlTemplate: 'https://my.monitoring.service/component-versions?cluster={ytCluster}'
85
+ * }
86
+ */
87
+ componentVersionsMonitoring?: UISettingsMonitoring;
70
88
  /**
71
89
  * Allows to define regular expression to extract hash-part from version of node by named group 'hash'
72
90
  * @example reHashFromNodeVersion: '[^~]+(?<hash>[^+]+)'
@@ -1 +1 @@
1
- {"version":3,"names":["uiSettingFromEnv","exports","uploadTableExcelBaseUrl","process","env","YTFRONT_UPLOAD_EXCEL_BASE_URL","exportTableBaseUrl","YTFRONT_EXPORT_EXCEL_BASE_URL","jupyterBasePath","YTFRONT_JUPYTER_BASE_URL"],"sources":["ui-settings.ts"],"sourcesContent":["export interface UISettings {\n accessLogBasePath?: string;\n accountsUsageBasePath?: string;\n docsBaseUrl?: string;\n jupyterBasePath?: string;\n\n newTableReplicasCount: number;\n\n uploadTableMaxSize: number;\n uploadTableUseLocalmode?: boolean;\n\n uploadTableExcelBaseUrl?: string;\n exportTableBaseUrl?: string;\n\n directDownload?: boolean;\n\n trackerBaseUrl?: string;\n trackerQuoteRequestQueue?: string;\n trackerAdminRequestQueue?: string;\n\n reportBugUrl?: string;\n\n datalensBaseUrl?: string;\n datalensAllowedCluster?: Array<string>;\n\n announcesMailListUrl?: string;\n\n sslCertFixUrl?: string;\n queryTrackerStage?: string;\n queryTrackerCluster?: string;\n\n oauthTokenUrl?: string;\n\n defaultFontType?: keyof Required<UISettings>['fontTypes'];\n\n fontTypes?: Record<string, {regular: string; monospace: string}>;\n\n /**\n * The option denies to create pools with `<Root>` parent from UI.\n */\n schedulingDenyRootAsParent?: boolean;\n\n /**\n * schedulingMonitoring.urlTemplate supports following parameters: {ytCluster}, {ytPool}, {ytPoolTree}.\n * All the parameters are optional and they are replaced with corresponding values.\n * @example {urlTemplate: 'https://my.monitoring.service/scheduling?cluster={ytCluster}&pool={ytPool}&poolTree={ytPoolTree}'}\n */\n schedulingMonitoring?: UISettingsMonitoring;\n\n /**\n * accountsMonitoring.urlTemplate supports following parameters: {ytCluster}, {ytAccount}\n * All the parameters are optional and they are replaced with corresponding values.\n * @example {urlTemplate: 'https://my.monitoring.service/accounts?cluster={ytCluster}&account={ytAccount}'}\n */\n accountsMonitoring?: UISettingsMonitoring;\n\n /**\n * bundlesMonitoring.urlTemplate supports following parameters: {ytCluster}, {ytTabletCellBundle}\n * All the parameters are optional and they are replaced with corresponding values.\n * @example {urlTemplate: 'https://my.monitoring.service/bundles?cluster={ytCluster}&account={ytTabletCellBundle}'}\n */\n bundlesMonitoring?: UISettingsMonitoring;\n\n /**\n * operationsMonitoring.urlTemplate supports following parameters:\n * {ytCluster}, {ytOperationId}, {ytPool}, {ytPoolTree}, {ytSlotIndex}, {fromTimeMs}, {toTimeMs}\n * All the parameters are optional and they are replaced with corresponding values.\n * @example {\n * urlTemplate:\n * 'https://my.monitoring.service/operations?cluster={ytCluster}&operationId={ytOperationId}&pool={ytPool}&tree={ytPoolTree}&slot={ytSlotIndex}&from={fromTimeMs}&to={toTimeMs}'\n * }\n */\n operationsMonitoring?: UISettingsMonitoring;\n\n /**\n * chytMonitoring.urlTemplate supports following parameters:\n * - {ytCluster}\n * - {chytAlias}\n * All the parameters are optional and the are replaced with corresponding values\n * @example {\n * urlTemplate: `https://my.monitoring.service/chyt?cluster={ytCluster}&alias={chytAlias}`\n * }\n */\n chytMonitoring?: UISettingsMonitoring;\n\n /**\n * Allows to define regular expression to extract hash-part from version of node by named group 'hash'\n * @example reHashFromNodeVersion: '[^~]+(?<hash>[^+]+)'\n */\n reHashFromNodeVersion?: string;\n\n /**\n * Allows to define regular expression to extract short-name from full address of host by named group 'shortname'.\n * Also it supports optional named group 'suffix' that will pe appended to shortname as is.\n * @example reShortNameFromAddress: '(?<shortname>.*)((\\\\.msk\\\\.my-domain\\\\.ru)|(\\\\.vla\\\\.my-domain\\\\.net))'\n * @example reShortNameFromAddress: '(?<shortname>.*)((\\\\.msk\\\\.my-domain\\\\.ru)|(\\\\.vla\\\\.my-domain\\\\.net))'\n */\n reShortNameFromAddress?: string;\n\n /**\n * Allows to override behavior of `reShortNameFromAddress` for tablet/bundles/cells specific parts of UI.\n * @example reShortNameFromTabletNodeAddress: '(?<shortname>[^-]+-[^-]+).*'\n */\n reShortNameFromTabletNodeAddress?: string;\n\n /**\n * Allows to define array of regexps for allowed urls of TaggedType of unipika to display media-content (audio/video/images).\n * If there are no matched items in the array the TaggedType-item will be displayed as a json-object.\n * @expamle\n * reUnipikaAllowTaggedSources: [\n * \"https:\\\\/\\\\/image\\\\.bank\\\\.my\\\\/fruits\\\\/\",\n * \"https:\\\\/\\\\/image\\\\.bank\\\\.my\\\\/vegetables\\\\/\"\n * ]\n */\n reUnipikaAllowTaggedSources: Array<string>;\n\n /**\n * Allows to define service for removing 'Referer' header for url-s on a page.\n *\n * See `@gravity-ui/unipika v3.0.0` details in [CHANGELOG.md](https://github.com/gravity-ui/unipika/blob/main/CHANGELOG.md).\n */\n hideReferrerUrl?: string;\n}\n\nexport interface UISettingsMonitoring {\n urlTemplate: string;\n title?: string;\n}\n\nexport const uiSettingFromEnv: Partial<UISettings> = {\n uploadTableExcelBaseUrl: process.env.YTFRONT_UPLOAD_EXCEL_BASE_URL,\n exportTableBaseUrl: process.env.YTFRONT_EXPORT_EXCEL_BASE_URL,\n jupyterBasePath: process.env.YTFRONT_JUPYTER_BASE_URL,\n};\n"],"mappings":";;;;;;AAiIO,IAAMA,gBAAqC,GAAAC,OAAA,CAAAD,gBAAA,GAAG;EACjDE,uBAAuB,EAAEC,OAAO,CAACC,GAAG,CAACC,6BAA6B;EAClEC,kBAAkB,EAAEH,OAAO,CAACC,GAAG,CAACG,6BAA6B;EAC7DC,eAAe,EAAEL,OAAO,CAACC,GAAG,CAACK;AACjC,CAAC"}
1
+ {"version":3,"names":["uiSettingFromEnv","exports","uploadTableExcelBaseUrl","process","env","YTFRONT_UPLOAD_EXCEL_BASE_URL","exportTableBaseUrl","YTFRONT_EXPORT_EXCEL_BASE_URL","jupyterBasePath","YTFRONT_JUPYTER_BASE_URL"],"sources":["ui-settings.ts"],"sourcesContent":["export interface UISettings {\n accessLogBasePath?: string;\n accountsUsageBasePath?: string;\n docsBaseUrl?: string;\n jupyterBasePath?: string;\n\n newTableReplicasCount: number;\n\n uploadTableMaxSize: number;\n uploadTableUseLocalmode?: boolean;\n\n uploadTableExcelBaseUrl?: string;\n exportTableBaseUrl?: string;\n\n directDownload?: boolean;\n\n trackerBaseUrl?: string;\n trackerQuoteRequestQueue?: string;\n trackerAdminRequestQueue?: string;\n\n reportBugUrl?: string;\n\n datalensBaseUrl?: string;\n datalensAllowedCluster?: Array<string>;\n\n announcesMailListUrl?: string;\n\n sslCertFixUrl?: string;\n queryTrackerStage?: string;\n queryTrackerCluster?: string;\n\n oauthTokenUrl?: string;\n\n defaultFontType?: keyof Required<UISettings>['fontTypes'];\n\n fontTypes?: Record<string, {regular: string; monospace: string}>;\n\n /**\n * The option denies to create pools with `<Root>` parent from UI.\n */\n schedulingDenyRootAsParent?: boolean;\n\n /**\n * schedulingMonitoring.urlTemplate supports following parameters: {ytCluster}, {ytPool}, {ytPoolTree}.\n * All the parameters are optional and they are replaced with corresponding values.\n * @example {urlTemplate: 'https://my.monitoring.service/scheduling?cluster={ytCluster}&pool={ytPool}&poolTree={ytPoolTree}'}\n */\n schedulingMonitoring?: UISettingsMonitoring;\n\n /**\n * accountsMonitoring.urlTemplate supports following parameters: {ytCluster}, {ytAccount}\n * All the parameters are optional and they are replaced with corresponding values.\n * @example {urlTemplate: 'https://my.monitoring.service/accounts?cluster={ytCluster}&account={ytAccount}'}\n */\n accountsMonitoring?: UISettingsMonitoring;\n\n /**\n * bundlesMonitoring.urlTemplate supports following parameters: {ytCluster}, {ytTabletCellBundle}\n * All the parameters are optional and they are replaced with corresponding values.\n * @example {urlTemplate: 'https://my.monitoring.service/bundles?cluster={ytCluster}&account={ytTabletCellBundle}'}\n */\n bundlesMonitoring?: UISettingsMonitoring;\n\n /**\n * operationsMonitoring.urlTemplate supports following parameters:\n * {ytCluster}, {ytOperationId}, {ytPool}, {ytPoolTree}, {ytSlotIndex}, {fromTimeMs}, {toTimeMs}\n * All the parameters are optional and they are replaced with corresponding values.\n * @example {\n * urlTemplate:\n * 'https://my.monitoring.service/operations?cluster={ytCluster}&operationId={ytOperationId}&pool={ytPool}&tree={ytPoolTree}&slot={ytSlotIndex}&from={fromTimeMs}&to={toTimeMs}'\n * }\n */\n operationsMonitoring?: UISettingsMonitoring;\n\n /**\n * chytMonitoring.urlTemplate supports following parameters:\n * - {ytCluster}\n * - {chytAlias}\n * All the parameters are optional and they are replaced with corresponding values\n * @example {\n * urlTemplate: `https://my.monitoring.service/chyt?cluster={ytCluster}&alias={chytAlias}`\n * }\n */\n chytMonitoring?: UISettingsMonitoring;\n\n /**\n * systemMonitoring.urlTemplate supports following parameters:\n * - {ytCluster}\n * All the parameters are optional and they are replaced with corresponding values\n * @example {\n * urlTemplate: 'https://my.monitoring.service/system?cluster={ytCluster}'\n * }\n */\n systemMonitoring?: UISettingsMonitoring;\n\n /**\n * componentVersionsMonitoring.urlTemplate supports following parameters:\n * - {ytCluster}\n * All the parameters are optional and they are replaced with corresponding values\n * @example {\n * urlTemplate: 'https://my.monitoring.service/component-versions?cluster={ytCluster}'\n * }\n */\n componentVersionsMonitoring?: UISettingsMonitoring;\n\n /**\n * Allows to define regular expression to extract hash-part from version of node by named group 'hash'\n * @example reHashFromNodeVersion: '[^~]+(?<hash>[^+]+)'\n */\n reHashFromNodeVersion?: string;\n\n /**\n * Allows to define regular expression to extract short-name from full address of host by named group 'shortname'.\n * Also it supports optional named group 'suffix' that will pe appended to shortname as is.\n * @example reShortNameFromAddress: '(?<shortname>.*)((\\\\.msk\\\\.my-domain\\\\.ru)|(\\\\.vla\\\\.my-domain\\\\.net))'\n * @example reShortNameFromAddress: '(?<shortname>.*)((\\\\.msk\\\\.my-domain\\\\.ru)|(\\\\.vla\\\\.my-domain\\\\.net))'\n */\n reShortNameFromAddress?: string;\n\n /**\n * Allows to override behavior of `reShortNameFromAddress` for tablet/bundles/cells specific parts of UI.\n * @example reShortNameFromTabletNodeAddress: '(?<shortname>[^-]+-[^-]+).*'\n */\n reShortNameFromTabletNodeAddress?: string;\n\n /**\n * Allows to define array of regexps for allowed urls of TaggedType of unipika to display media-content (audio/video/images).\n * If there are no matched items in the array the TaggedType-item will be displayed as a json-object.\n * @expamle\n * reUnipikaAllowTaggedSources: [\n * \"https:\\\\/\\\\/image\\\\.bank\\\\.my\\\\/fruits\\\\/\",\n * \"https:\\\\/\\\\/image\\\\.bank\\\\.my\\\\/vegetables\\\\/\"\n * ]\n */\n reUnipikaAllowTaggedSources: Array<string>;\n\n /**\n * Allows to define service for removing 'Referer' header for url-s on a page.\n *\n * See `@gravity-ui/unipika v3.0.0` details in [CHANGELOG.md](https://github.com/gravity-ui/unipika/blob/main/CHANGELOG.md).\n */\n hideReferrerUrl?: string;\n}\n\nexport interface UISettingsMonitoring {\n urlTemplate: string;\n title?: string;\n}\n\nexport const uiSettingFromEnv: Partial<UISettings> = {\n uploadTableExcelBaseUrl: process.env.YTFRONT_UPLOAD_EXCEL_BASE_URL,\n exportTableBaseUrl: process.env.YTFRONT_EXPORT_EXCEL_BASE_URL,\n jupyterBasePath: process.env.YTFRONT_JUPYTER_BASE_URL,\n};\n"],"mappings":";;;;;;AAqJO,IAAMA,gBAAqC,GAAAC,OAAA,CAAAD,gBAAA,GAAG;EACjDE,uBAAuB,EAAEC,OAAO,CAACC,GAAG,CAACC,6BAA6B;EAClEC,kBAAkB,EAAEH,OAAO,CAACC,GAAG,CAACG,6BAA6B;EAC7DC,eAAe,EAAEL,OAAO,CAACC,GAAG,CAACK;AACjC,CAAC"}
@@ -18,6 +18,7 @@ import { Props as RoleActionsProps } from './containers/ACL/RoleActions';
18
18
  import { PERMISSIONS_SETTINGS } from './constants/acl';
19
19
  import { PreparedAclSubject } from './utils/acl/acl-types';
20
20
  import { PreparedRole } from './utils/acl';
21
+ import { UISettingsMonitoring } from '../shared/ui-settings';
21
22
  type HeaderItemOrPage = {
22
23
  href: string;
23
24
  pageId?: undefined;
@@ -39,7 +40,7 @@ export interface UIFactoryClusterPageInfo {
39
40
  title: string;
40
41
  pageId: string;
41
42
  svgIcon?: SVGIconData;
42
- reducers?: Record<string, Reducer>;
43
+ reducers?: Record<string, Reducer<any, any>>;
43
44
  reactComponent: React.ComponentType<any>;
44
45
  topRowComponent?: React.ComponentType<any>;
45
46
  urlMapping?: Record<string, PathParameters>;
@@ -49,7 +50,7 @@ export interface ExternalSchemaDescriptionResponse {
49
50
  externalSchema?: Map<string, ExternalSchemaDescription>;
50
51
  }
51
52
  export interface ReducersAndUrlMapping {
52
- reducers?: Record<string, Reducer>;
53
+ reducers?: Record<string, Reducer<any, any>>;
53
54
  urlMapping?: Record<string, PathParameters>;
54
55
  }
55
56
  export interface SchedulingExtraTab {
@@ -105,6 +106,14 @@ export interface UIFactory {
105
106
  isEphemeral?: boolean | undefined;
106
107
  };
107
108
  }): Array<SchedulingExtraTab>;
109
+ getSystemMonitoringTab(): {
110
+ title?: string;
111
+ urlTemplate: string;
112
+ } | {
113
+ title?: string;
114
+ component: React.ComponentType<any>;
115
+ } | undefined;
116
+ getVersionMonitoringLink(cluster: string): UISettingsMonitoring | undefined;
108
117
  getMonitoringForAccounts(): undefined | {
109
118
  component: React.ComponentType<{
110
119
  cluster: string;
@@ -75,6 +75,14 @@ var uiFactory = {
75
75
  urlTemplate: urlTemplate
76
76
  }];
77
77
  },
78
+ getSystemMonitoringTab: function getSystemMonitoringTab() {
79
+ if (!(_uiSettings.uiSettings !== null && _uiSettings.uiSettings !== void 0 && _uiSettings.uiSettings.systemMonitoring)) return undefined;
80
+ return _uiSettings.uiSettings.systemMonitoring;
81
+ },
82
+ getVersionMonitoringLink: function getVersionMonitoringLink() {
83
+ if (!(_uiSettings.uiSettings !== null && _uiSettings.uiSettings !== void 0 && _uiSettings.uiSettings.componentVersionsMonitoring)) return undefined;
84
+ return _uiSettings.uiSettings.componentVersionsMonitoring;
85
+ },
78
86
  getMonitoringForAccounts: function getMonitoringForAccounts() {
79
87
  var _uiSettings$accountsM;
80
88
  if (!(_uiSettings.uiSettings !== null && _uiSettings.uiSettings !== void 0 && (_uiSettings$accountsM = _uiSettings.uiSettings.accountsMonitoring) !== null && _uiSettings$accountsM !== void 0 && _uiSettings$accountsM.urlTemplate)) {
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_AppNavigationPageLayout","_externalAclApi","_SupportComponent","_YTUserSuggest","_docsUrls","_YTSubjectSuggest","_RoleActions","_OperationDetailsMonitorLinks","_acl","_uiSettings","_ytConfig","_jsxRuntime","obj","__esModule","default","experimentalPages","uiFactory","getClusterAppearance","cluster","_YT$clusters","YT","clusters","urls","isWatchMen","makeUrlForUserName","_ref","login","concat","makeUrlForTransferTask","undefined","makeUrlForNodeIO","makeUrlForTabletCellBundleDashboard","makeUrlForMonitoringDescriptor","makeUrlForUserDashboard","getExtaClusterPages","getExtraRootPages","getExtraReducersAndUrlMapping","getSchedulingExtraTabs","_uiSettings$schedulin","uiSettings","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","OperationDetailMonitorLinks","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","_jsx","SupportComponent","getComponentForConsumerMetrics","getComonentForQueueMetrics","renderTableCellBundleEditorNotice","getNodeDeployUrl","getNodeNannyUrl","renderAppNavigation","props","AppNavigationPageLayout","_objectSpread","createNotificationUrl","wrapApp","app","externalSchemaDescriptionSetup","load","_cluster","_path","Promise","resolve","getAclApi","defaultAclApi","renderAclSubjectsSuggestControl","YTSubjectSuggest","renderRolesLink","getExternalSettings","renderUserSuggest","YTUserSuggest","getExperimentalPages","getAllowedExperimentalPages","docsUrls","getComponentForAclRoleActions","RoleActions","getAclPermissionsSettings","PERMISSIONS_SETTINGS","onChytAliasSqlClick","configureUIFactoryItem","k","redefinition","configureUIFactory","overrides","_forEach","_v","key","_default","exports","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 './containers/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 './containers/ACL/SubjectsControl/YTSubjectSuggest';\nimport RoleActions, {Props as RoleActionsProps} from './containers/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';\nimport {PreparedAclSubject} from './utils/acl/acl-types';\nimport {PreparedRole} from './utils/acl';\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 type AclRoleActionsType = Partial<Omit<PreparedAclSubject | PreparedRole, 'type'>> & {\n type?: string;\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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"}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_AppNavigationPageLayout","_externalAclApi","_SupportComponent","_YTUserSuggest","_docsUrls","_YTSubjectSuggest","_RoleActions","_OperationDetailsMonitorLinks","_acl","_uiSettings","_ytConfig","_jsxRuntime","obj","__esModule","default","experimentalPages","uiFactory","getClusterAppearance","cluster","_YT$clusters","YT","clusters","urls","isWatchMen","makeUrlForUserName","_ref","login","concat","makeUrlForTransferTask","undefined","makeUrlForNodeIO","makeUrlForTabletCellBundleDashboard","makeUrlForMonitoringDescriptor","makeUrlForUserDashboard","getExtaClusterPages","getExtraRootPages","getExtraReducersAndUrlMapping","getSchedulingExtraTabs","_uiSettings$schedulin","uiSettings","schedulingMonitoring","urlTemplate","_uiSettings$schedulin2","_uiSettings$schedulin3","title","name","getSystemMonitoringTab","systemMonitoring","getVersionMonitoringLink","componentVersionsMonitoring","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","OperationDetailMonitorLinks","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","_jsx","SupportComponent","getComponentForConsumerMetrics","getComonentForQueueMetrics","renderTableCellBundleEditorNotice","getNodeDeployUrl","getNodeNannyUrl","renderAppNavigation","props","AppNavigationPageLayout","_objectSpread","createNotificationUrl","wrapApp","app","externalSchemaDescriptionSetup","load","_cluster","_path","Promise","resolve","getAclApi","defaultAclApi","renderAclSubjectsSuggestControl","YTSubjectSuggest","renderRolesLink","getExternalSettings","renderUserSuggest","YTUserSuggest","getExperimentalPages","getAllowedExperimentalPages","docsUrls","getComponentForAclRoleActions","RoleActions","getAclPermissionsSettings","PERMISSIONS_SETTINGS","onChytAliasSqlClick","configureUIFactoryItem","k","redefinition","configureUIFactory","overrides","_forEach","_v","key","_default","exports","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 './containers/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 './containers/ACL/SubjectsControl/YTSubjectSuggest';\nimport RoleActions, {Props as RoleActionsProps} from './containers/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';\nimport {PreparedAclSubject} from './utils/acl/acl-types';\nimport {PreparedRole} from './utils/acl';\nimport {UISettingsMonitoring} from '../shared/ui-settings';\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<any, any>>;\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<any, any>>;\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 type AclRoleActionsType = Partial<Omit<PreparedAclSubject | PreparedRole, 'type'>> & {\n type?: string;\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 getSystemMonitoringTab():\n | {\n title?: string;\n urlTemplate: string;\n }\n | {\n title?: string;\n component: React.ComponentType<any>;\n }\n | undefined;\n getVersionMonitoringLink(cluster: string): UISettingsMonitoring | undefined;\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 getSystemMonitoringTab() {\n if (!uiSettings?.systemMonitoring) return undefined;\n return uiSettings.systemMonitoring;\n },\n getVersionMonitoringLink() {\n if (!uiSettings?.componentVersionsMonitoring) return undefined;\n return uiSettings.componentVersionsMonitoring;\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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"}
@@ -13,7 +13,7 @@ interface Props<ValueT extends string = string> {
13
13
  routedPreserveLocation?: boolean;
14
14
  exactNavLink?: boolean;
15
15
  }
16
- interface TabItem<ValueT extends string = string> {
16
+ export interface TabItem<ValueT extends string = string> {
17
17
  value: ValueT;
18
18
  text?: React.ReactNode;
19
19
  counter?: number;
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactRouterDom","_bemCnLite","_partition","_Hotkey","_Link","_Icon","_action","_location","_jsxRuntime","obj","__esModule","default","b","block","Tabs","_React$Component","_inherits","_super","_createSuper","_classCallCheck","apply","arguments","_createClass","key","value","render","className","props","_jsxs","children","renderList","renderUnderline","renderCounter","item","size","counter","_jsx","renderHotkey","hotkey","Hotkey","settings","renderNavLink","to","routedPreserveLocation","url","makeRoutedURL","NavLink","exact","exactNavLink","text","renderLink","_this$props","active","onTabChange","onTabClick","evt","clickHandler","action","makeEntryClickHandler","show","Link","theme","onClick","external","Icon","awesome","renderTab","_item$routed","_this$props2","routed","useRoutedLink","title","_this","_this$props3","items","layout","_partition_","partition_","_partition_2","_slicedToArray","regularItems","externalItems","map","_this$props4","underline","React","Component","defaultProps","TabsHorizontal","_objectSpread","_default","exports"],"sources":["Tabs.tsx"],"sourcesContent":["import React from 'react';\nimport {NavLink} from 'react-router-dom';\nimport block from 'bem-cn-lite';\nimport partition_ from 'lodash/partition';\n\nimport Hotkey, {HotkeyProps} from '../Hotkey/Hotkey';\nimport Link from '../Link/Link';\nimport Icon from '../Icon/Icon';\n\nimport action from '../action/action';\nimport {makeRoutedURL} from '../../store/location';\n\nimport './Tabs.scss';\n\nconst b = block('tabs');\n\ninterface Props<ValueT extends string = string> {\n className?: string;\n\n items: Array<TabItem<ValueT>>;\n active?: ValueT;\n onTabChange: (value: ValueT) => void;\n layout?: 'horizontal' | 'vertical';\n size?: 's' | 'm' | 'l';\n underline?: boolean;\n routed?: boolean;\n routedPreserveLocation?: boolean;\n exactNavLink?: boolean;\n}\n\ninterface TabItem<ValueT extends string = string> {\n value: ValueT;\n\n text?: React.ReactNode;\n counter?: number;\n show?: boolean;\n title?: string;\n url?: string;\n routed?: boolean;\n external?: boolean;\n\n hotkey?: HotkeyProps['settings'];\n}\n\nclass Tabs<ValueT extends string = string> extends React.Component<Props<ValueT>> {\n static defaultProps: Partial<Props> = {\n underline: false,\n routed: false,\n layout: 'horizontal',\n };\n\n render() {\n const {className} = this.props;\n\n return (\n <div className={b(null, className)}>\n {this.renderList()}\n {this.renderUnderline()}\n </div>\n );\n }\n\n renderCounter(item: TabItem<ValueT>) {\n const {size} = this.props;\n const className = b('tab-counter', {size});\n return (\n typeof item.counter !== 'undefined' && <span className={className}>{item.counter}</span>\n );\n }\n\n renderHotkey(item: TabItem<ValueT>) {\n return item.hotkey && <Hotkey settings={item.hotkey} />;\n }\n\n renderNavLink(item: TabItem<ValueT>) {\n const to = !this.props.routedPreserveLocation\n ? item.url\n : () => {\n return makeRoutedURL(item.url!);\n };\n\n return (\n <NavLink to={to!} exact={this.props.exactNavLink}>\n {item.text}\n </NavLink>\n );\n }\n\n renderLink(item: TabItem<ValueT>) {\n const {active, onTabChange} = this.props;\n const onTabClick = (evt: React.MouseEvent<Element, MouseEvent>) => {\n const clickHandler = action.makeEntryClickHandler(evt, onTabChange);\n clickHandler(item.value);\n };\n\n return (\n item.show && (\n <Link\n theme={item.value === active ? 'primary' : 'secondary'}\n onClick={onTabClick}\n url={item.url}\n >\n {item.text}\n {item.external && (\n <Icon className={b('external-icon')} awesome=\"external-link\" />\n )}\n </Link>\n )\n );\n }\n\n renderTab(item: TabItem<ValueT>) {\n const {size, active, routed} = this.props;\n\n const className = b('tab', {\n size,\n active: !routed && item.value === active && 'yes',\n });\n\n const useRoutedLink = item.routed ?? routed;\n\n return (\n item.show && (\n <li key={item.value} title={item.title} className={className}>\n {useRoutedLink ? this.renderNavLink(item) : this.renderLink(item)}\n {this.renderCounter(item)}\n {this.renderHotkey(item)}\n </li>\n )\n );\n }\n\n renderList() {\n const {items, layout} = this.props;\n\n const className = b('list', {layout});\n\n const [regularItems, externalItems] = partition_(items, (item) => !item.external);\n\n return (\n <ul className={className}>\n {regularItems.map((item) => {\n return this.renderTab(item);\n })}\n {externalItems.map((item) => {\n return this.renderTab(item);\n })}\n </ul>\n );\n }\n\n renderUnderline() {\n const className = b('underline');\n\n const {underline, layout} = this.props;\n\n return underline && layout === 'horizontal' && <div className={className} />;\n }\n}\n\nexport function TabsHorizontal<ValueT extends string = string>(props: Props<ValueT>) {\n return <Tabs {...props} layout={'horizontal'} />;\n}\n\nexport default Tabs;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactRouterDom","_bemCnLite","_partition","_Hotkey","_Link","_Icon","_action","_location","_jsxRuntime","obj","__esModule","default","b","block","Tabs","_React$Component","_inherits","_super","_createSuper","_classCallCheck","apply","arguments","_createClass","key","value","render","className","props","_jsxs","children","renderList","renderUnderline","renderCounter","item","size","counter","_jsx","renderHotkey","hotkey","Hotkey","settings","renderNavLink","to","routedPreserveLocation","url","makeRoutedURL","NavLink","exact","exactNavLink","text","renderLink","_this$props","active","onTabChange","onTabClick","evt","clickHandler","action","makeEntryClickHandler","show","Link","theme","onClick","external","Icon","awesome","renderTab","_item$routed","_this$props2","routed","useRoutedLink","title","_this","_this$props3","items","layout","_partition_","partition_","_partition_2","_slicedToArray","regularItems","externalItems","map","_this$props4","underline","React","Component","defaultProps","TabsHorizontal","_objectSpread","_default","exports"],"sources":["Tabs.tsx"],"sourcesContent":["import React from 'react';\nimport {NavLink} from 'react-router-dom';\nimport block from 'bem-cn-lite';\nimport partition_ from 'lodash/partition';\n\nimport Hotkey, {HotkeyProps} from '../Hotkey/Hotkey';\nimport Link from '../Link/Link';\nimport Icon from '../Icon/Icon';\n\nimport action from '../action/action';\nimport {makeRoutedURL} from '../../store/location';\n\nimport './Tabs.scss';\n\nconst b = block('tabs');\n\ninterface Props<ValueT extends string = string> {\n className?: string;\n\n items: Array<TabItem<ValueT>>;\n active?: ValueT;\n onTabChange: (value: ValueT) => void;\n layout?: 'horizontal' | 'vertical';\n size?: 's' | 'm' | 'l';\n underline?: boolean;\n routed?: boolean;\n routedPreserveLocation?: boolean;\n exactNavLink?: boolean;\n}\n\nexport interface TabItem<ValueT extends string = string> {\n value: ValueT;\n\n text?: React.ReactNode;\n counter?: number;\n show?: boolean;\n title?: string;\n url?: string;\n routed?: boolean;\n external?: boolean;\n\n hotkey?: HotkeyProps['settings'];\n}\n\nclass Tabs<ValueT extends string = string> extends React.Component<Props<ValueT>> {\n static defaultProps: Partial<Props> = {\n underline: false,\n routed: false,\n layout: 'horizontal',\n };\n\n render() {\n const {className} = this.props;\n\n return (\n <div className={b(null, className)}>\n {this.renderList()}\n {this.renderUnderline()}\n </div>\n );\n }\n\n renderCounter(item: TabItem<ValueT>) {\n const {size} = this.props;\n const className = b('tab-counter', {size});\n return (\n typeof item.counter !== 'undefined' && <span className={className}>{item.counter}</span>\n );\n }\n\n renderHotkey(item: TabItem<ValueT>) {\n return item.hotkey && <Hotkey settings={item.hotkey} />;\n }\n\n renderNavLink(item: TabItem<ValueT>) {\n const to = !this.props.routedPreserveLocation\n ? item.url\n : () => {\n return makeRoutedURL(item.url!);\n };\n\n return (\n <NavLink to={to!} exact={this.props.exactNavLink}>\n {item.text}\n </NavLink>\n );\n }\n\n renderLink(item: TabItem<ValueT>) {\n const {active, onTabChange} = this.props;\n const onTabClick = (evt: React.MouseEvent<Element, MouseEvent>) => {\n const clickHandler = action.makeEntryClickHandler(evt, onTabChange);\n clickHandler(item.value);\n };\n\n return (\n item.show && (\n <Link\n theme={item.value === active ? 'primary' : 'secondary'}\n onClick={onTabClick}\n url={item.url}\n >\n {item.text}\n {item.external && (\n <Icon className={b('external-icon')} awesome=\"external-link\" />\n )}\n </Link>\n )\n );\n }\n\n renderTab(item: TabItem<ValueT>) {\n const {size, active, routed} = this.props;\n\n const className = b('tab', {\n size,\n active: !routed && item.value === active && 'yes',\n });\n\n const useRoutedLink = item.routed ?? routed;\n\n return (\n item.show && (\n <li key={item.value} title={item.title} className={className}>\n {useRoutedLink ? this.renderNavLink(item) : this.renderLink(item)}\n {this.renderCounter(item)}\n {this.renderHotkey(item)}\n </li>\n )\n );\n }\n\n renderList() {\n const {items, layout} = this.props;\n\n const className = b('list', {layout});\n\n const [regularItems, externalItems] = partition_(items, (item) => !item.external);\n\n return (\n <ul className={className}>\n {regularItems.map((item) => {\n return this.renderTab(item);\n })}\n {externalItems.map((item) => {\n return this.renderTab(item);\n })}\n </ul>\n );\n }\n\n renderUnderline() {\n const className = b('underline');\n\n const {underline, layout} = this.props;\n\n return underline && layout === 'horizontal' && <div className={className} />;\n }\n}\n\nexport function TabsHorizontal<ValueT extends string = string>(props: Props<ValueT>) {\n return <Tabs {...props} layout={'horizontal'} />;\n}\n\nexport default Tabs;\n"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const SystemTabs: {
2
+ GENERAL: string;
3
+ MONITORING: string;
4
+ };
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SystemTabs = void 0;
7
+ var SystemTabs = exports.SystemTabs = {
8
+ GENERAL: 'general',
9
+ MONITORING: 'monitoring'
10
+ };
11
+ // #sourceMappingURL=tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SystemTabs","exports","GENERAL","MONITORING"],"sources":["tabs.ts"],"sourcesContent":["export const SystemTabs = {\n GENERAL: 'general',\n MONITORING: 'monitoring',\n};\n"],"mappings":";;;;;;AAAO,IAAMA,UAAU,GAAAC,OAAA,CAAAD,UAAA,GAAG;EACtBE,OAAO,EAAE,SAAS;EAClBC,UAAU,EAAE;AAChB,CAAC"}
@@ -20,7 +20,7 @@ var _Components = _interopRequireDefault(require("../../pages/components/Compone
20
20
  var _Operations = _interopRequireDefault(require("../../pages/operations/Operations/Operations"));
21
21
  var _Accounts = _interopRequireDefault(require("../../pages/accounts/Accounts/Accounts"));
22
22
  var _Dashboard = _interopRequireDefault(require("../../pages/dashboard/Dashboard/Dashboard"));
23
- var _System = _interopRequireDefault(require("../../pages/system/System/System"));
23
+ var _System = require("../../pages/system/System/System");
24
24
  var _Navigation = _interopRequireDefault(require("../../pages/navigation/Navigation/Navigation"));
25
25
  var _PathViewer = _interopRequireDefault(require("../../pages/path-viewer/PathViewer"));
26
26
  var _Tablet = _interopRequireDefault(require("../../pages/tablet/Tablet"));
@@ -265,7 +265,7 @@ var ClusterPage = /*#__PURE__*/function (_Component) {
265
265
  component: _Dashboard.default
266
266
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouter.Route, {
267
267
  path: "/:cluster/".concat(_index.Page.SYSTEM),
268
- component: _System.default
268
+ component: _System.System
269
269
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouter.Route, {
270
270
  path: "/:cluster/".concat(_index.Page.ACCOUNTS),
271
271
  component: _Accounts.default