@ytsaurus/ui 1.14.3 → 1.15.1

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 (79) hide show
  1. package/build/cjs/@types/core.d.ts +3 -2
  2. package/build/cjs/server/configs/local.js +1 -0
  3. package/build/cjs/server/configs/local.js.map +1 -1
  4. package/build/cjs/shared/ui-settings.d.ts +1 -0
  5. package/build/cjs/shared/ui-settings.js.map +1 -1
  6. package/build/cjs/ui/UIFactory.d.ts +4 -1
  7. package/build/cjs/ui/UIFactory.js +9 -2
  8. package/build/cjs/ui/UIFactory.js.map +1 -1
  9. package/build/cjs/ui/common/utils/settings-local-provider.js +1 -1
  10. package/build/cjs/ui/common/utils/settings-local-provider.js.map +1 -1
  11. package/build/cjs/ui/common/utils/settings-remote-provider.d.ts +2 -1
  12. package/build/cjs/ui/common/utils/settings-remote-provider.js.map +1 -1
  13. package/build/cjs/ui/components/Support/Support.js +6 -4
  14. package/build/cjs/ui/components/Support/Support.js.map +1 -1
  15. package/build/cjs/ui/containers/AppNavigation/AppNavigationComponent.js +50 -5
  16. package/build/cjs/ui/containers/AppNavigation/AppNavigationComponent.js.map +1 -1
  17. package/build/cjs/ui/containers/SupportComponent/SupportComponent.d.ts +5 -0
  18. package/build/cjs/ui/containers/SupportComponent/SupportComponent.js +24 -0
  19. package/build/cjs/ui/containers/SupportComponent/SupportComponent.js.map +1 -0
  20. package/build/cjs/ui/pages/operations/OperationDetail/tabs/details/Details/Details.css +6 -1
  21. package/build/cjs/ui/pages/operations/OperationDetail/tabs/details/Details/Details.css.map +1 -1
  22. package/build/cjs/ui/store/actions/scheduling/expanded-pools.js +1 -1
  23. package/build/cjs/ui/store/actions/scheduling/expanded-pools.js.map +1 -1
  24. package/build/cjs/ui/store/actions/settings/index.js +22 -11
  25. package/build/cjs/ui/store/actions/settings/index.js.map +1 -1
  26. package/build/cjs/ui/utils/scheduling/pool-child.js +1 -1
  27. package/build/cjs/ui/utils/scheduling/pool-child.js.map +1 -1
  28. package/build/esm/@types/core.d.ts +3 -2
  29. package/build/esm/server/configs/local.js +2 -1
  30. package/build/esm/server/configs/local.js.map +1 -1
  31. package/build/esm/shared/ui-settings.d.ts +1 -0
  32. package/build/esm/shared/ui-settings.js.map +1 -1
  33. package/build/esm/ui/UIFactory.d.ts +4 -1
  34. package/build/esm/ui/UIFactory.js +9 -2
  35. package/build/esm/ui/UIFactory.js.map +1 -1
  36. package/build/esm/ui/common/utils/settings-local-provider.js +1 -1
  37. package/build/esm/ui/common/utils/settings-local-provider.js.map +1 -1
  38. package/build/esm/ui/common/utils/settings-remote-provider.d.ts +2 -1
  39. package/build/esm/ui/common/utils/settings-remote-provider.js.map +1 -1
  40. package/build/esm/ui/components/Support/Support.js +6 -4
  41. package/build/esm/ui/components/Support/Support.js.map +1 -1
  42. package/build/esm/ui/containers/AppNavigation/AppNavigationComponent.js +50 -5
  43. package/build/esm/ui/containers/AppNavigation/AppNavigationComponent.js.map +1 -1
  44. package/build/esm/ui/containers/SupportComponent/SupportComponent.d.ts +5 -0
  45. package/build/esm/ui/containers/SupportComponent/SupportComponent.js +18 -0
  46. package/build/esm/ui/containers/SupportComponent/SupportComponent.js.map +1 -0
  47. package/build/esm/ui/pages/operations/OperationDetail/tabs/details/Details/Details.css +6 -1
  48. package/build/esm/ui/pages/operations/OperationDetail/tabs/details/Details/Details.css.map +1 -1
  49. package/build/esm/ui/pages/operations/OperationDetail/tabs/details/Details/Details.scss +6 -1
  50. package/build/esm/ui/store/actions/scheduling/expanded-pools.js +1 -1
  51. package/build/esm/ui/store/actions/scheduling/expanded-pools.js.map +1 -1
  52. package/build/esm/ui/store/actions/settings/index.js +22 -11
  53. package/build/esm/ui/store/actions/settings/index.js.map +1 -1
  54. package/build/esm/ui/utils/scheduling/pool-child.js +1 -1
  55. package/build/esm/ui/utils/scheduling/pool-child.js.map +1 -1
  56. package/dist/public/build/assets-manifest.json +16 -16
  57. package/dist/public/build/css/{89.3546950a.chunk.css → 861.c5a67589.chunk.css} +1 -1
  58. package/dist/public/build/css/861.c5a67589.chunk.css.map +1 -0
  59. package/dist/public/build/css/{main.e919e247.css → main.675cb8c4.css} +2 -2
  60. package/dist/public/build/css/main.675cb8c4.css.map +1 -0
  61. package/dist/public/build/js/861.9703a31c.chunk.js +2 -0
  62. package/dist/public/build/js/861.9703a31c.chunk.js.map +1 -0
  63. package/dist/public/build/js/{943.f6342dd5.chunk.js → 943.40ff6440.chunk.js} +2 -2
  64. package/dist/public/build/js/{943.f6342dd5.chunk.js.map → 943.40ff6440.chunk.js.map} +1 -1
  65. package/dist/public/build/js/main.768ba513.js +3 -0
  66. package/dist/public/build/js/{main.b8adf234.js.map → main.768ba513.js.map} +1 -1
  67. package/dist/public/build/js/runtime.ac9a4336.js +2 -0
  68. package/dist/public/build/js/{runtime.fd8cf219.js.map → runtime.ac9a4336.js.map} +1 -1
  69. package/dist/public/build/manifest.json +12 -12
  70. package/dist/server/configs/local.js +1 -0
  71. package/dist/shared/ui-settings.d.ts +1 -0
  72. package/package.json +2 -2
  73. package/dist/public/build/css/89.3546950a.chunk.css.map +0 -1
  74. package/dist/public/build/css/main.e919e247.css.map +0 -1
  75. package/dist/public/build/js/89.07445d46.chunk.js +0 -2
  76. package/dist/public/build/js/89.07445d46.chunk.js.map +0 -1
  77. package/dist/public/build/js/main.b8adf234.js +0 -3
  78. package/dist/public/build/js/runtime.fd8cf219.js +0 -2
  79. /package/dist/public/build/js/{main.b8adf234.js.LICENSE.txt → main.768ba513.js.LICENSE.txt} +0 -0
@@ -2,12 +2,13 @@ import {AppConfig, AppContext} from '@gravity-ui/nodekit';
2
2
  // eslint-disable-next-line @typescript-eslint/no-redeclare
3
3
  import {Request, Response} from '@gravity-ui/expresskit';
4
4
  import {MetrikaCounter} from '@gravity-ui/app-layout';
5
- import {UISettings} from 'shared/ui-settings';
6
- import {Settings} from '../shared/constants/settings-types';
7
5
  import type {NodeKit} from '@gravity-ui/nodekit';
8
6
 
9
7
  import {ClusterConfig} from '@ytsaurus/ui/build/cjs/shared/yt-types';
10
8
 
9
+ import {UISettings} from '../../shared/ui-settings';
10
+ import {Settings} from '../shared/constants/settings-types';
11
+
11
12
  export interface YTCoreConfig {
12
13
  /**
13
14
  * Path to the file with OAuth-token of special-user ("the OAuthRobot" below) in format: {"oauthToken": "******"}
@@ -28,6 +28,7 @@ const localModeConfig = {
28
28
  uploadTableUseLocalmode: true,
29
29
  queryTrackerStage: 'testing',
30
30
  directDownload: false,
31
+ reportBugUrl: 'https://github.com/ytsaurus/ytsaurus-ui/issues/new',
31
32
  },
32
33
  userSettingsConfig: {
33
34
  cluster: constants_1.YT_LOCAL_CLUSTER_ID,
@@ -1 +1 @@
1
- {"version":3,"names":["_typeIs","_interopRequireDefault","require","_expresskit","_constants","obj","__esModule","default","localModeConfig","appAuthPolicy","AuthPolicy","disabled","ytInterfaceSecret","undefined","expressBodyParserJSONConfig","limit","type","req","_req$url","_req$url2","url","startsWith","Boolean","typeis","uiSettings","newTableReplicasCount","uploadTableMaxSize","uploadTableUseLocalmode","queryTrackerStage","directDownload","userSettingsConfig","cluster","YT_LOCAL_CLUSTER_ID","mapNodePath","_default","exports"],"sources":["local.ts"],"sourcesContent":["import typeis from 'type-is';\n\nimport {AuthPolicy} from '@gravity-ui/expresskit';\nimport {AppConfig} from '@gravity-ui/nodekit';\nimport {YT_LOCAL_CLUSTER_ID} from '../../shared/constants';\n\nconst localModeConfig: Partial<AppConfig> = {\n appAuthPolicy: AuthPolicy.disabled,\n ytInterfaceSecret: undefined,\n\n expressBodyParserJSONConfig: {\n limit: '51mb',\n type(req) {\n // Enable raw parser for all content-types on yt-api for piping requests\n if (req.url?.startsWith('/api/yt/')) return false;\n if (req.url?.startsWith('/localmode/api/yt/')) return false;\n\n // Simulate default logic given that 'type' option is 'application/json'\n return Boolean(typeis(req, 'application/json'));\n },\n },\n\n uiSettings: {\n newTableReplicasCount: 1,\n uploadTableMaxSize: 50 * 1024 * 1024,\n uploadTableUseLocalmode: true,\n queryTrackerStage: 'testing',\n\n directDownload: false,\n },\n\n userSettingsConfig: {\n cluster: YT_LOCAL_CLUSTER_ID,\n mapNodePath: '//tmp',\n },\n};\n\nexport default localModeConfig;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,WAAA,GAAAD,OAAA;AAEA,IAAAE,UAAA,GAAAF,OAAA;AAA0D,SAAAD,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE1D,IAAMG,eAAmC,GAAG;EACxCC,aAAa,EAAEC,sBAAU,CAACC,QAAQ;EAClCC,iBAAiB,EAAEC,SAAS;EAE5BC,2BAA2B,EAAE;IACzBC,KAAK,EAAE,MAAM;IACbC,IAAI,WAAAA,KAACC,GAAG,EAAE;MAAA,IAAAC,QAAA,EAAAC,SAAA;MACN;MACA,KAAAD,QAAA,GAAID,GAAG,CAACG,GAAG,cAAAF,QAAA,eAAPA,QAAA,CAASG,UAAU,CAAC,UAAU,CAAC,EAAE,OAAO,KAAK;MACjD,KAAAF,SAAA,GAAIF,GAAG,CAACG,GAAG,cAAAD,SAAA,eAAPA,SAAA,CAASE,UAAU,CAAC,oBAAoB,CAAC,EAAE,OAAO,KAAK;;MAE3D;MACA,OAAOC,OAAO,CAAC,IAAAC,eAAM,EAACN,GAAG,EAAE,kBAAkB,CAAC,CAAC;IACnD;EACJ,CAAC;EAEDO,UAAU,EAAE;IACRC,qBAAqB,EAAE,CAAC;IACxBC,kBAAkB,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;IACpCC,uBAAuB,EAAE,IAAI;IAC7BC,iBAAiB,EAAE,SAAS;IAE5BC,cAAc,EAAE;EACpB,CAAC;EAEDC,kBAAkB,EAAE;IAChBC,OAAO,EAAEC,8BAAmB;IAC5BC,WAAW,EAAE;EACjB;AACJ,CAAC;AAAA,IAAAC,QAAA,GAAAC,OAAA,CAAA5B,OAAA,GAEcC,eAAe"}
1
+ {"version":3,"names":["_typeIs","_interopRequireDefault","require","_expresskit","_constants","obj","__esModule","default","localModeConfig","appAuthPolicy","AuthPolicy","disabled","ytInterfaceSecret","undefined","expressBodyParserJSONConfig","limit","type","req","_req$url","_req$url2","url","startsWith","Boolean","typeis","uiSettings","newTableReplicasCount","uploadTableMaxSize","uploadTableUseLocalmode","queryTrackerStage","directDownload","reportBugUrl","userSettingsConfig","cluster","YT_LOCAL_CLUSTER_ID","mapNodePath","_default","exports"],"sources":["local.ts"],"sourcesContent":["import typeis from 'type-is';\n\nimport {AuthPolicy} from '@gravity-ui/expresskit';\nimport {AppConfig} from '@gravity-ui/nodekit';\nimport {YT_LOCAL_CLUSTER_ID} from '../../shared/constants';\n\nconst localModeConfig: Partial<AppConfig> = {\n appAuthPolicy: AuthPolicy.disabled,\n ytInterfaceSecret: undefined,\n\n expressBodyParserJSONConfig: {\n limit: '51mb',\n type(req) {\n // Enable raw parser for all content-types on yt-api for piping requests\n if (req.url?.startsWith('/api/yt/')) return false;\n if (req.url?.startsWith('/localmode/api/yt/')) return false;\n\n // Simulate default logic given that 'type' option is 'application/json'\n return Boolean(typeis(req, 'application/json'));\n },\n },\n\n uiSettings: {\n newTableReplicasCount: 1,\n uploadTableMaxSize: 50 * 1024 * 1024,\n uploadTableUseLocalmode: true,\n queryTrackerStage: 'testing',\n\n directDownload: false,\n\n reportBugUrl: 'https://github.com/ytsaurus/ytsaurus-ui/issues/new',\n },\n\n userSettingsConfig: {\n cluster: YT_LOCAL_CLUSTER_ID,\n mapNodePath: '//tmp',\n },\n};\n\nexport default localModeConfig;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,WAAA,GAAAD,OAAA;AAEA,IAAAE,UAAA,GAAAF,OAAA;AAA0D,SAAAD,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE1D,IAAMG,eAAmC,GAAG;EACxCC,aAAa,EAAEC,sBAAU,CAACC,QAAQ;EAClCC,iBAAiB,EAAEC,SAAS;EAE5BC,2BAA2B,EAAE;IACzBC,KAAK,EAAE,MAAM;IACbC,IAAI,WAAAA,KAACC,GAAG,EAAE;MAAA,IAAAC,QAAA,EAAAC,SAAA;MACN;MACA,KAAAD,QAAA,GAAID,GAAG,CAACG,GAAG,cAAAF,QAAA,eAAPA,QAAA,CAASG,UAAU,CAAC,UAAU,CAAC,EAAE,OAAO,KAAK;MACjD,KAAAF,SAAA,GAAIF,GAAG,CAACG,GAAG,cAAAD,SAAA,eAAPA,SAAA,CAASE,UAAU,CAAC,oBAAoB,CAAC,EAAE,OAAO,KAAK;;MAE3D;MACA,OAAOC,OAAO,CAAC,IAAAC,eAAM,EAACN,GAAG,EAAE,kBAAkB,CAAC,CAAC;IACnD;EACJ,CAAC;EAEDO,UAAU,EAAE;IACRC,qBAAqB,EAAE,CAAC;IACxBC,kBAAkB,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;IACpCC,uBAAuB,EAAE,IAAI;IAC7BC,iBAAiB,EAAE,SAAS;IAE5BC,cAAc,EAAE,KAAK;IAErBC,YAAY,EAAE;EAClB,CAAC;EAEDC,kBAAkB,EAAE;IAChBC,OAAO,EAAEC,8BAAmB;IAC5BC,WAAW,EAAE;EACjB;AACJ,CAAC;AAAA,IAAAC,QAAA,GAAAC,OAAA,CAAA7B,OAAA,GAEcC,eAAe"}
@@ -12,6 +12,7 @@ export interface UISettings {
12
12
  trackerBaseUrl?: string;
13
13
  trackerQuoteRequestQueue?: string;
14
14
  trackerAdminRequestQueue?: string;
15
+ reportBugUrl?: string;
15
16
  datalensBaseUrl?: string;
16
17
  datalensAllowedCluster?: Array<string>;
17
18
  announcesMailListUrl?: string;
@@ -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 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 * 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":";;;;;;AA0HO,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 * 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":";;;;;;AA4HO,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"}
@@ -266,7 +266,10 @@ export interface UIFactory {
266
266
  login: string;
267
267
  cluster?: string;
268
268
  buttonToWrap?: React.ReactNode;
269
- }, makeContent: (onSupportClick: () => void) => React.ReactNode): React.ReactNode;
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;
@@ -11,6 +11,7 @@ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/obje
11
11
  var _react = _interopRequireDefault(require("react"));
12
12
  var _AppNavigationPageLayout = _interopRequireDefault(require("./containers/AppNavigation/AppNavigationPageLayout"));
13
13
  var _externalAclApi = require("./utils/acl/external-acl-api");
14
+ var _SupportComponent = require("./containers/SupportComponent/SupportComponent");
14
15
  var _YTUserSuggest = require("./containers/UserSuggest/YTUserSuggest");
15
16
  var _docsUrls = require("./constants/docsUrls");
16
17
  var _YTSubjectSuggest = require("./components/ACL/SubjectsControl/YTSubjectSuggest");
@@ -189,8 +190,14 @@ var uiFactory = {
189
190
  renderControlAbcService: function renderControlAbcService() {
190
191
  return undefined;
191
192
  },
192
- makeSupportContent: function makeSupportContent() {
193
- return undefined;
193
+ makeSupportContent: function makeSupportContent(_x, makeContent) {
194
+ var reportBugUrl = _uiSettings.uiSettings.reportBugUrl;
195
+ if (!reportBugUrl) {
196
+ return undefined;
197
+ }
198
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_SupportComponent.SupportComponent, {
199
+ makeContent: makeContent
200
+ });
194
201
  },
195
202
  getComponentForConsumerMetrics: function getComponentForConsumerMetrics() {
196
203
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_AppNavigationPageLayout","_externalAclApi","_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","getComponentForConsumerMetrics","getComonentForQueueMetrics","renderTableCellBundleEditorNotice","getNodeDeployUrl","getNodeNannyUrl","renderAppNavigation","props","_jsx","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 './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","_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 './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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"}
@@ -29,7 +29,7 @@ var provider = {
29
29
  settings[path] = _hammer.default.storage.read(entry);
30
30
  }
31
31
  });
32
- return Promise.resolve(settings);
32
+ return settings;
33
33
  },
34
34
  create: function create() {
35
35
  return Promise.resolve();
@@ -1 +1 @@
1
- {"version":3,"names":["_hammer","_interopRequireDefault","require","obj","__esModule","default","LOCAL_PATH","provider","get","username","path","settingPath","Promise","resolve","hammer","storage","read","set","value","write","remove","getAll","settings","settingSubpath","keys","forEach","entry","indexOf","substring","length","create","_default","exports"],"sources":["settings-local-provider.ts"],"sourcesContent":["import hammer from '../hammer';\nimport {SettingsProvider} from './settings-remote-provider';\n\nconst LOCAL_PATH = 'interface-settings';\n\nconst provider: SettingsProvider = {\n get(username: string, path: string) {\n const settingPath = LOCAL_PATH + '/' + username + '/' + path;\n return Promise.resolve(hammer.storage.read(settingPath));\n },\n\n set<T>(username: string, path: string, value: T) {\n const settingPath = LOCAL_PATH + '/' + username + '/' + path;\n return Promise.resolve(hammer.storage.write(settingPath, value));\n },\n\n remove(username: string, path: string) {\n const settingPath = LOCAL_PATH + '/' + username + '/' + path;\n return Promise.resolve(hammer.storage.remove(settingPath));\n },\n\n getAll<T>(username: string) {\n const settings: any = {};\n const settingSubpath = LOCAL_PATH + '/' + username + '/';\n\n hammer.storage.keys().forEach(function (entry: string) {\n if (entry.indexOf(settingSubpath) === 0) {\n const path = entry.substring(settingSubpath.length);\n settings[path] = hammer.storage.read(entry);\n }\n });\n\n return Promise.resolve(settings as T);\n },\n create() {\n return Promise.resolve();\n },\n};\n\nexport default provider;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA8B,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAG9B,IAAMG,UAAU,GAAG,oBAAoB;AAEvC,IAAMC,QAA0B,GAAG;EAC/BC,GAAG,WAAAA,IAACC,QAAgB,EAAEC,IAAY,EAAE;IAChC,IAAMC,WAAW,GAAGL,UAAU,GAAG,GAAG,GAAGG,QAAQ,GAAG,GAAG,GAAGC,IAAI;IAC5D,OAAOE,OAAO,CAACC,OAAO,CAACC,eAAM,CAACC,OAAO,CAACC,IAAI,CAACL,WAAW,CAAC,CAAC;EAC5D,CAAC;EAEDM,GAAG,WAAAA,IAAIR,QAAgB,EAAEC,IAAY,EAAEQ,KAAQ,EAAE;IAC7C,IAAMP,WAAW,GAAGL,UAAU,GAAG,GAAG,GAAGG,QAAQ,GAAG,GAAG,GAAGC,IAAI;IAC5D,OAAOE,OAAO,CAACC,OAAO,CAACC,eAAM,CAACC,OAAO,CAACI,KAAK,CAACR,WAAW,EAAEO,KAAK,CAAC,CAAC;EACpE,CAAC;EAEDE,MAAM,WAAAA,OAACX,QAAgB,EAAEC,IAAY,EAAE;IACnC,IAAMC,WAAW,GAAGL,UAAU,GAAG,GAAG,GAAGG,QAAQ,GAAG,GAAG,GAAGC,IAAI;IAC5D,OAAOE,OAAO,CAACC,OAAO,CAACC,eAAM,CAACC,OAAO,CAACK,MAAM,CAACT,WAAW,CAAC,CAAC;EAC9D,CAAC;EAEDU,MAAM,WAAAA,OAAIZ,QAAgB,EAAE;IACxB,IAAMa,QAAa,GAAG,CAAC,CAAC;IACxB,IAAMC,cAAc,GAAGjB,UAAU,GAAG,GAAG,GAAGG,QAAQ,GAAG,GAAG;IAExDK,eAAM,CAACC,OAAO,CAACS,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,UAAUC,KAAa,EAAE;MACnD,IAAIA,KAAK,CAACC,OAAO,CAACJ,cAAc,CAAC,KAAK,CAAC,EAAE;QACrC,IAAMb,IAAI,GAAGgB,KAAK,CAACE,SAAS,CAACL,cAAc,CAACM,MAAM,CAAC;QACnDP,QAAQ,CAACZ,IAAI,CAAC,GAAGI,eAAM,CAACC,OAAO,CAACC,IAAI,CAACU,KAAK,CAAC;MAC/C;IACJ,CAAC,CAAC;IAEF,OAAOd,OAAO,CAACC,OAAO,CAACS,QAAa,CAAC;EACzC,CAAC;EACDQ,MAAM,WAAAA,OAAA,EAAG;IACL,OAAOlB,OAAO,CAACC,OAAO,CAAC,CAAC;EAC5B;AACJ,CAAC;AAAA,IAAAkB,QAAA,GAAAC,OAAA,CAAA3B,OAAA,GAEcE,QAAQ"}
1
+ {"version":3,"names":["_hammer","_interopRequireDefault","require","obj","__esModule","default","LOCAL_PATH","provider","get","username","path","settingPath","Promise","resolve","hammer","storage","read","set","value","write","remove","getAll","settings","settingSubpath","keys","forEach","entry","indexOf","substring","length","create","_default","exports"],"sources":["settings-local-provider.ts"],"sourcesContent":["import hammer from '../hammer';\nimport {SettingsProvider} from './settings-remote-provider';\n\nconst LOCAL_PATH = 'interface-settings';\n\nconst provider: SettingsProvider = {\n get(username: string, path: string) {\n const settingPath = LOCAL_PATH + '/' + username + '/' + path;\n return Promise.resolve(hammer.storage.read(settingPath));\n },\n\n set<T>(username: string, path: string, value: T) {\n const settingPath = LOCAL_PATH + '/' + username + '/' + path;\n return Promise.resolve(hammer.storage.write(settingPath, value));\n },\n\n remove(username: string, path: string) {\n const settingPath = LOCAL_PATH + '/' + username + '/' + path;\n return Promise.resolve(hammer.storage.remove(settingPath));\n },\n\n getAll<T>(username: string) {\n const settings: any = {};\n const settingSubpath = LOCAL_PATH + '/' + username + '/';\n\n hammer.storage.keys().forEach(function (entry: string) {\n if (entry.indexOf(settingSubpath) === 0) {\n const path = entry.substring(settingSubpath.length);\n settings[path] = hammer.storage.read(entry);\n }\n });\n\n return settings as T;\n },\n create() {\n return Promise.resolve();\n },\n};\n\nexport default provider;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA8B,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAG9B,IAAMG,UAAU,GAAG,oBAAoB;AAEvC,IAAMC,QAA0B,GAAG;EAC/BC,GAAG,WAAAA,IAACC,QAAgB,EAAEC,IAAY,EAAE;IAChC,IAAMC,WAAW,GAAGL,UAAU,GAAG,GAAG,GAAGG,QAAQ,GAAG,GAAG,GAAGC,IAAI;IAC5D,OAAOE,OAAO,CAACC,OAAO,CAACC,eAAM,CAACC,OAAO,CAACC,IAAI,CAACL,WAAW,CAAC,CAAC;EAC5D,CAAC;EAEDM,GAAG,WAAAA,IAAIR,QAAgB,EAAEC,IAAY,EAAEQ,KAAQ,EAAE;IAC7C,IAAMP,WAAW,GAAGL,UAAU,GAAG,GAAG,GAAGG,QAAQ,GAAG,GAAG,GAAGC,IAAI;IAC5D,OAAOE,OAAO,CAACC,OAAO,CAACC,eAAM,CAACC,OAAO,CAACI,KAAK,CAACR,WAAW,EAAEO,KAAK,CAAC,CAAC;EACpE,CAAC;EAEDE,MAAM,WAAAA,OAACX,QAAgB,EAAEC,IAAY,EAAE;IACnC,IAAMC,WAAW,GAAGL,UAAU,GAAG,GAAG,GAAGG,QAAQ,GAAG,GAAG,GAAGC,IAAI;IAC5D,OAAOE,OAAO,CAACC,OAAO,CAACC,eAAM,CAACC,OAAO,CAACK,MAAM,CAACT,WAAW,CAAC,CAAC;EAC9D,CAAC;EAEDU,MAAM,WAAAA,OAAIZ,QAAgB,EAAE;IACxB,IAAMa,QAAa,GAAG,CAAC,CAAC;IACxB,IAAMC,cAAc,GAAGjB,UAAU,GAAG,GAAG,GAAGG,QAAQ,GAAG,GAAG;IAExDK,eAAM,CAACC,OAAO,CAACS,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,UAAUC,KAAa,EAAE;MACnD,IAAIA,KAAK,CAACC,OAAO,CAACJ,cAAc,CAAC,KAAK,CAAC,EAAE;QACrC,IAAMb,IAAI,GAAGgB,KAAK,CAACE,SAAS,CAACL,cAAc,CAACM,MAAM,CAAC;QACnDP,QAAQ,CAACZ,IAAI,CAAC,GAAGI,eAAM,CAACC,OAAO,CAACC,IAAI,CAACU,KAAK,CAAC;MAC/C;IACJ,CAAC,CAAC;IAEF,OAAOJ,QAAQ;EACnB,CAAC;EACDQ,MAAM,WAAAA,OAAA,EAAG;IACL,OAAOlB,OAAO,CAACC,OAAO,CAAC,CAAC;EAC5B;AACJ,CAAC;AAAA,IAAAkB,QAAA,GAAAC,OAAA,CAAA3B,OAAA,GAEcE,QAAQ"}
@@ -1,9 +1,10 @@
1
+ import { PromiseOrValue } from '../../../@types/types';
1
2
  declare const provider: SettingsProvider;
2
3
  export interface SettingsProvider {
3
4
  get<T>(username: string, path: string): Promise<T | undefined>;
4
5
  set<T>(username: string, path: string, value: T): Promise<void>;
5
6
  remove(username: string, path: string): Promise<void>;
6
- getAll<Data extends object>(username: string): Promise<Data | undefined>;
7
+ getAll<Data extends object>(username: string): PromiseOrValue<Data | undefined>;
7
8
  create(username: string): Promise<void>;
8
9
  }
9
10
  export default provider;
@@ -1 +1 @@
1
- {"version":3,"names":["_axios","_interopRequireDefault","require","_yt","obj","__esModule","default","api","method","username","path","data","axios","request","url","headers","JSON","stringify","then","response","error","Promise","reject","code","message","yt","codes","NODE_DOES_NOT_EXIST","undefined","provider","get","set","value","remove","getAll","create","_default","exports"],"sources":["settings-remote-provider.ts"],"sourcesContent":["import axios from 'axios';\n\n// @ts-expect-error\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\ntype Method = 'get' | 'put' | 'post' | 'delete';\n\nfunction api<T>(method: Method, username: string, path: string, data?: unknown) {\n return axios\n .request<T | undefined>({\n method: method,\n url: '/api/settings/' + username + path,\n headers: {\n 'content-type': 'application/json',\n },\n data: JSON.stringify(data),\n })\n .then((response) => {\n return response.data;\n })\n .catch((error) => {\n if (!error.response) {\n return Promise.reject({\n code: 0,\n message: 'Network error',\n });\n }\n\n const {data} = error.response;\n if (data.code === yt.codes.NODE_DOES_NOT_EXIST) {\n return undefined;\n }\n\n return Promise.reject(data);\n });\n}\n\nconst provider: SettingsProvider = {\n get<T>(username: string, path: string) {\n return api<T>('get', username, '/' + path);\n },\n set<T>(username: string, path: string, value: T) {\n if (value === undefined) {\n /**\n * data-ui/core uses body-parser which interprets empty body of request as empty object {},\n * i.e. setItem from src/server/controllers/settings.js will receive req.body === {} if value === undefined,\n * so we have to remove it explicitly\n */\n return provider.remove(username, path);\n }\n return api('put', username, '/' + path, {value});\n },\n remove(username: string, path: string) {\n return api('delete', username, '/' + path);\n },\n getAll<T>(username: string) {\n return api<T>('get', username, '/');\n },\n create(username: string) {\n return api('post', username, '/');\n },\n};\n\nexport interface SettingsProvider {\n get<T>(username: string, path: string): Promise<T | undefined>;\n set<T>(username: string, path: string, value: T): Promise<void>;\n remove(username: string, path: string): Promise<void>;\n getAll<Data extends object>(username: string): Promise<Data | undefined>;\n create(username: string): Promise<void>;\n}\n\nexport default provider;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAGA,IAAAC,GAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAoD,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AADpD;;AAKA,SAASG,GAAGA,CAAIC,MAAc,EAAEC,QAAgB,EAAEC,IAAY,EAAEC,IAAc,EAAE;EAC5E,OAAOC,cAAK,CACPC,OAAO,CAAgB;IACpBL,MAAM,EAAEA,MAAM;IACdM,GAAG,EAAE,gBAAgB,GAAGL,QAAQ,GAAGC,IAAI;IACvCK,OAAO,EAAE;MACL,cAAc,EAAE;IACpB,CAAC;IACDJ,IAAI,EAAEK,IAAI,CAACC,SAAS,CAACN,IAAI;EAC7B,CAAC,CAAC,CACDO,IAAI,CAAC,UAACC,QAAQ,EAAK;IAChB,OAAOA,QAAQ,CAACR,IAAI;EACxB,CAAC,CAAC,SACI,CAAC,UAACS,KAAK,EAAK;IACd,IAAI,CAACA,KAAK,CAACD,QAAQ,EAAE;MACjB,OAAOE,OAAO,CAACC,MAAM,CAAC;QAClBC,IAAI,EAAE,CAAC;QACPC,OAAO,EAAE;MACb,CAAC,CAAC;IACN;IAEA,IAAOb,IAAI,GAAIS,KAAK,CAACD,QAAQ,CAAtBR,IAAI;IACX,IAAIA,IAAI,CAACY,IAAI,KAAKE,WAAE,CAACC,KAAK,CAACC,mBAAmB,EAAE;MAC5C,OAAOC,SAAS;IACpB;IAEA,OAAOP,OAAO,CAACC,MAAM,CAACX,IAAI,CAAC;EAC/B,CAAC,CAAC;AACV;AAEA,IAAMkB,QAA0B,GAAG;EAC/BC,GAAG,WAAAA,IAAIrB,QAAgB,EAAEC,IAAY,EAAE;IACnC,OAAOH,GAAG,CAAI,KAAK,EAAEE,QAAQ,EAAE,GAAG,GAAGC,IAAI,CAAC;EAC9C,CAAC;EACDqB,GAAG,WAAAA,IAAItB,QAAgB,EAAEC,IAAY,EAAEsB,KAAQ,EAAE;IAC7C,IAAIA,KAAK,KAAKJ,SAAS,EAAE;MACrB;AACZ;AACA;AACA;AACA;MACY,OAAOC,QAAQ,CAACI,MAAM,CAACxB,QAAQ,EAAEC,IAAI,CAAC;IAC1C;IACA,OAAOH,GAAG,CAAC,KAAK,EAAEE,QAAQ,EAAE,GAAG,GAAGC,IAAI,EAAE;MAACsB,KAAK,EAALA;IAAK,CAAC,CAAC;EACpD,CAAC;EACDC,MAAM,WAAAA,OAACxB,QAAgB,EAAEC,IAAY,EAAE;IACnC,OAAOH,GAAG,CAAC,QAAQ,EAAEE,QAAQ,EAAE,GAAG,GAAGC,IAAI,CAAC;EAC9C,CAAC;EACDwB,MAAM,WAAAA,OAAIzB,QAAgB,EAAE;IACxB,OAAOF,GAAG,CAAI,KAAK,EAAEE,QAAQ,EAAE,GAAG,CAAC;EACvC,CAAC;EACD0B,MAAM,WAAAA,OAAC1B,QAAgB,EAAE;IACrB,OAAOF,GAAG,CAAC,MAAM,EAAEE,QAAQ,EAAE,GAAG,CAAC;EACrC;AACJ,CAAC;AAAA,IAAA2B,QAAA,GAAAC,OAAA,CAAA/B,OAAA,GAUcuB,QAAQ"}
1
+ {"version":3,"names":["_axios","_interopRequireDefault","require","_yt","obj","__esModule","default","api","method","username","path","data","axios","request","url","headers","JSON","stringify","then","response","error","Promise","reject","code","message","yt","codes","NODE_DOES_NOT_EXIST","undefined","provider","get","set","value","remove","getAll","create","_default","exports"],"sources":["settings-remote-provider.ts"],"sourcesContent":["import axios from 'axios';\n\n// @ts-expect-error\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport {PromiseOrValue} from '../../../@types/types';\n\ntype Method = 'get' | 'put' | 'post' | 'delete';\n\nfunction api<T>(method: Method, username: string, path: string, data?: unknown) {\n return axios\n .request<T | undefined>({\n method: method,\n url: '/api/settings/' + username + path,\n headers: {\n 'content-type': 'application/json',\n },\n data: JSON.stringify(data),\n })\n .then((response) => {\n return response.data;\n })\n .catch((error) => {\n if (!error.response) {\n return Promise.reject({\n code: 0,\n message: 'Network error',\n });\n }\n\n const {data} = error.response;\n if (data.code === yt.codes.NODE_DOES_NOT_EXIST) {\n return undefined;\n }\n\n return Promise.reject(data);\n });\n}\n\nconst provider: SettingsProvider = {\n get<T>(username: string, path: string) {\n return api<T>('get', username, '/' + path);\n },\n set<T>(username: string, path: string, value: T) {\n if (value === undefined) {\n /**\n * data-ui/core uses body-parser which interprets empty body of request as empty object {},\n * i.e. setItem from src/server/controllers/settings.js will receive req.body === {} if value === undefined,\n * so we have to remove it explicitly\n */\n return provider.remove(username, path);\n }\n return api('put', username, '/' + path, {value});\n },\n remove(username: string, path: string) {\n return api('delete', username, '/' + path);\n },\n getAll<T>(username: string) {\n return api<T>('get', username, '/');\n },\n create(username: string) {\n return api('post', username, '/');\n },\n};\n\nexport interface SettingsProvider {\n get<T>(username: string, path: string): Promise<T | undefined>;\n set<T>(username: string, path: string, value: T): Promise<void>;\n remove(username: string, path: string): Promise<void>;\n getAll<Data extends object>(username: string): PromiseOrValue<Data | undefined>;\n create(username: string): Promise<void>;\n}\n\nexport default provider;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAGA,IAAAC,GAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAoD,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AADpD;;AAMA,SAASG,GAAGA,CAAIC,MAAc,EAAEC,QAAgB,EAAEC,IAAY,EAAEC,IAAc,EAAE;EAC5E,OAAOC,cAAK,CACPC,OAAO,CAAgB;IACpBL,MAAM,EAAEA,MAAM;IACdM,GAAG,EAAE,gBAAgB,GAAGL,QAAQ,GAAGC,IAAI;IACvCK,OAAO,EAAE;MACL,cAAc,EAAE;IACpB,CAAC;IACDJ,IAAI,EAAEK,IAAI,CAACC,SAAS,CAACN,IAAI;EAC7B,CAAC,CAAC,CACDO,IAAI,CAAC,UAACC,QAAQ,EAAK;IAChB,OAAOA,QAAQ,CAACR,IAAI;EACxB,CAAC,CAAC,SACI,CAAC,UAACS,KAAK,EAAK;IACd,IAAI,CAACA,KAAK,CAACD,QAAQ,EAAE;MACjB,OAAOE,OAAO,CAACC,MAAM,CAAC;QAClBC,IAAI,EAAE,CAAC;QACPC,OAAO,EAAE;MACb,CAAC,CAAC;IACN;IAEA,IAAOb,IAAI,GAAIS,KAAK,CAACD,QAAQ,CAAtBR,IAAI;IACX,IAAIA,IAAI,CAACY,IAAI,KAAKE,WAAE,CAACC,KAAK,CAACC,mBAAmB,EAAE;MAC5C,OAAOC,SAAS;IACpB;IAEA,OAAOP,OAAO,CAACC,MAAM,CAACX,IAAI,CAAC;EAC/B,CAAC,CAAC;AACV;AAEA,IAAMkB,QAA0B,GAAG;EAC/BC,GAAG,WAAAA,IAAIrB,QAAgB,EAAEC,IAAY,EAAE;IACnC,OAAOH,GAAG,CAAI,KAAK,EAAEE,QAAQ,EAAE,GAAG,GAAGC,IAAI,CAAC;EAC9C,CAAC;EACDqB,GAAG,WAAAA,IAAItB,QAAgB,EAAEC,IAAY,EAAEsB,KAAQ,EAAE;IAC7C,IAAIA,KAAK,KAAKJ,SAAS,EAAE;MACrB;AACZ;AACA;AACA;AACA;MACY,OAAOC,QAAQ,CAACI,MAAM,CAACxB,QAAQ,EAAEC,IAAI,CAAC;IAC1C;IACA,OAAOH,GAAG,CAAC,KAAK,EAAEE,QAAQ,EAAE,GAAG,GAAGC,IAAI,EAAE;MAACsB,KAAK,EAALA;IAAK,CAAC,CAAC;EACpD,CAAC;EACDC,MAAM,WAAAA,OAACxB,QAAgB,EAAEC,IAAY,EAAE;IACnC,OAAOH,GAAG,CAAC,QAAQ,EAAEE,QAAQ,EAAE,GAAG,GAAGC,IAAI,CAAC;EAC9C,CAAC;EACDwB,MAAM,WAAAA,OAAIzB,QAAgB,EAAE;IACxB,OAAOF,GAAG,CAAI,KAAK,EAAEE,QAAQ,EAAE,GAAG,CAAC;EACvC,CAAC;EACD0B,MAAM,WAAAA,OAAC1B,QAAgB,EAAE;IACrB,OAAOF,GAAG,CAAC,MAAM,EAAEE,QAAQ,EAAE,GAAG,CAAC;EACrC;AACJ,CAAC;AAAA,IAAA2B,QAAA,GAAAC,OAAA,CAAA/B,OAAA,GAUcuB,QAAQ"}
@@ -17,11 +17,13 @@ function Support(_ref) {
17
17
  var children = _ref.children;
18
18
  var login = (0, _reactRedux.useSelector)(_global.getCurrentUserName);
19
19
  var cluster = (0, _reactRedux.useSelector)(_global.getCluster);
20
- var makeContent = _react.default.useCallback(function (onSupportClick) {
21
- return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
20
+ var makeContent = _react.default.useCallback(function (_ref2) {
21
+ var supportContent = _ref2.supportContent,
22
+ onSupportClick = _ref2.onSupportClick;
23
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
22
24
  className: b(),
23
25
  onClick: onSupportClick,
24
- children: children || /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
26
+ children: [supportContent, children || /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
25
27
  className: b('toggler'),
26
28
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("svg", {
27
29
  xmlns: "http://www.w3.org/2000/svg",
@@ -55,7 +57,7 @@ function Support(_ref) {
55
57
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
56
58
  className: b('toggler-moo')
57
59
  })]
58
- })
60
+ })]
59
61
  });
60
62
  }, [children]);
61
63
  return _UIFactory.default.makeSupportContent({
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_bemCnLite","_UIFactory","_global","_reactRedux","_jsxRuntime","obj","__esModule","default","b","cn","Support","_ref","children","login","useSelector","getCurrentUserName","cluster","getCluster","makeContent","React","useCallback","onSupportClick","_jsx","className","onClick","_jsxs","xmlns","width","height","viewBox","id","x1","x2","y1","y2","offset","stopColor","d","fill","strokeWidth","stroke","UIFactory","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,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AAGAA,OAAA;AACA,IAAAE,UAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AAAwC,IAAAK,WAAA,GAAAL,OAAA;AAAA,SAAAD,uBAAAO,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAMxC,IAAMG,CAAC,GAAG,IAAAC,kBAAE,EAAC,cAAc,CAAC;AAErB,SAASC,OAAOA,CAAAC,IAAA,EAA2B;EAAA,IAAzBC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;EAC7B,IAAMC,KAAK,GAAG,IAAAC,uBAAW,EAACC,0BAAkB,CAAC;EAC7C,IAAMC,OAAO,GAAG,IAAAF,uBAAW,EAACG,kBAAU,CAAC;EAEvC,IAAMC,WAAW,GAAGC,cAAK,CAACC,WAAW,CACjC,UAACC,cAA0B;IAAA,oBACvB,IAAAC,eAAA;MAAKC,SAAS,EAAEf,CAAC,CAAC,CAAE;MAACgB,OAAO,EAAEH,cAAe;MAAAT,QAAA,EACxCA,QAAQ,iBACL,IAAAa,gBAAA;QAAKF,SAAS,EAAEf,CAAC,CAAC,SAAS,CAAE;QAAAI,QAAA,gBACzB,IAAAa,gBAAA;UACIC,KAAK,EAAC,4BAA4B;UAClCC,KAAK,EAAC,IAAI;UACVC,MAAM,EAAC,IAAI;UACXC,OAAO,EAAC,WAAW;UAAAjB,QAAA,gBAEnB,IAAAU,eAAA;YAAAV,QAAA,eACI,IAAAa,gBAAA;cAAgBK,EAAE,EAAC,QAAQ;cAACC,EAAE,EAAC,GAAG;cAACC,EAAE,EAAC,GAAG;cAACC,EAAE,EAAC,GAAG;cAACC,EAAE,EAAC,GAAG;cAAAtB,QAAA,gBACnD,IAAAU,eAAA;gBAAMC,SAAS,EAAC,eAAe;gBAACY,MAAM,EAAC,IAAI;gBAACC,SAAS,EAAC;cAAM,CAAE,CAAC,eAC/D,IAAAd,eAAA;gBAAMC,SAAS,EAAC,cAAc;gBAACY,MAAM,EAAC,MAAM;gBAACC,SAAS,EAAC;cAAM,CAAE,CAAC;YAAA,CACpD;UAAC,CACf,CAAC,eACP,IAAAd,eAAA;YACIC,SAAS,EAAEf,CAAC,CAAC,cAAc,CAAE;YAC7B6B,CAAC,EAAC,8BAA8B;YAChCC,IAAI,EAAC,cAAc;YACnBC,WAAW,EAAC,GAAG;YACfC,MAAM,EAAC;UAAkB,CAC5B,CAAC;QAAA,CACD,CAAC,eACN,IAAAlB,eAAA;UAAMC,SAAS,EAAEf,CAAC,CAAC,aAAa;QAAE,CAAE,CAAC;MAAA,CACpC;IACR,CACA,CAAC;EAAA,CACT,EACD,CAACI,QAAQ,CACb,CAAC;EAED,OAAO6B,kBAAS,CAACC,kBAAkB,CAAC;IAAC7B,KAAK,EAALA,KAAK;IAAEG,OAAO,EAAPA;EAAO,CAAC,EAAEE,WAAW,CAAC,IAAI,IAAI;AAC9E"}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_bemCnLite","_UIFactory","_global","_reactRedux","_jsxRuntime","obj","__esModule","default","b","cn","Support","_ref","children","login","useSelector","getCurrentUserName","cluster","getCluster","makeContent","React","useCallback","_ref2","supportContent","onSupportClick","_jsxs","className","onClick","xmlns","width","height","viewBox","_jsx","id","x1","x2","y1","y2","offset","stopColor","d","fill","strokeWidth","stroke","UIFactory","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,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AAGAA,OAAA;AACA,IAAAE,UAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AAAwC,IAAAK,WAAA,GAAAL,OAAA;AAAA,SAAAD,uBAAAO,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAMxC,IAAMG,CAAC,GAAG,IAAAC,kBAAE,EAAC,cAAc,CAAC;AAErB,SAASC,OAAOA,CAAAC,IAAA,EAA2B;EAAA,IAAzBC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;EAC7B,IAAMC,KAAK,GAAG,IAAAC,uBAAW,EAACC,0BAAkB,CAAC;EAC7C,IAAMC,OAAO,GAAG,IAAAF,uBAAW,EAACG,kBAAU,CAAC;EAEvC,IAAMC,WAAW,GAAGC,cAAK,CAACC,WAAW,CACjC,UAAAC,KAAA;IAAA,IACIC,cAAc,GAAAD,KAAA,CAAdC,cAAc;MACdC,cAAc,GAAAF,KAAA,CAAdE,cAAc;IAAA,oBAKd,IAAAC,gBAAA;MAAKC,SAAS,EAAEjB,CAAC,CAAC,CAAE;MAACkB,OAAO,EAAEH,cAAe;MAAAX,QAAA,GACxCU,cAAc,EACdV,QAAQ,iBACL,IAAAY,gBAAA;QAAKC,SAAS,EAAEjB,CAAC,CAAC,SAAS,CAAE;QAAAI,QAAA,gBACzB,IAAAY,gBAAA;UACIG,KAAK,EAAC,4BAA4B;UAClCC,KAAK,EAAC,IAAI;UACVC,MAAM,EAAC,IAAI;UACXC,OAAO,EAAC,WAAW;UAAAlB,QAAA,gBAEnB,IAAAmB,eAAA;YAAAnB,QAAA,eACI,IAAAY,gBAAA;cAAgBQ,EAAE,EAAC,QAAQ;cAACC,EAAE,EAAC,GAAG;cAACC,EAAE,EAAC,GAAG;cAACC,EAAE,EAAC,GAAG;cAACC,EAAE,EAAC,GAAG;cAAAxB,QAAA,gBACnD,IAAAmB,eAAA;gBAAMN,SAAS,EAAC,eAAe;gBAACY,MAAM,EAAC,IAAI;gBAACC,SAAS,EAAC;cAAM,CAAE,CAAC,eAC/D,IAAAP,eAAA;gBAAMN,SAAS,EAAC,cAAc;gBAACY,MAAM,EAAC,MAAM;gBAACC,SAAS,EAAC;cAAM,CAAE,CAAC;YAAA,CACpD;UAAC,CACf,CAAC,eACP,IAAAP,eAAA;YACIN,SAAS,EAAEjB,CAAC,CAAC,cAAc,CAAE;YAC7B+B,CAAC,EAAC,8BAA8B;YAChCC,IAAI,EAAC,cAAc;YACnBC,WAAW,EAAC,GAAG;YACfC,MAAM,EAAC;UAAkB,CAC5B,CAAC;QAAA,CACD,CAAC,eACN,IAAAX,eAAA;UAAMN,SAAS,EAAEjB,CAAC,CAAC,aAAa;QAAE,CAAE,CAAC;MAAA,CACpC,CACR;IAAA,CACA,CAAC;EAAA,CACT,EACD,CAACI,QAAQ,CACb,CAAC;EAED,OAAO+B,kBAAS,CAACC,kBAAkB,CAAC;IAAC/B,KAAK,EAALA,KAAK;IAAEG,OAAO,EAAPA;EAAO,CAAC,EAAEE,WAAW,CAAC,IAAI,IAAI;AAC9E"}
@@ -7,14 +7,15 @@ exports.default = void 0;
7
7
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
8
8
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
9
  var _react = _interopRequireWildcard(require("react"));
10
+ var _reactRouter = require("react-router");
10
11
  var _bemCnLite = _interopRequireDefault(require("bem-cn-lite"));
11
12
  var _navigation = require("@gravity-ui/navigation");
13
+ var _uikit = require("@gravity-ui/uikit");
12
14
  var _appLogo = _interopRequireDefault(require("../../../../img/svg/appLogo.svg"));
13
15
  var _Link = _interopRequireDefault(require("../../components/Link/Link"));
14
16
  var _userAvatar = _interopRequireDefault(require("../../../../img/user-avatar.svg"));
17
+ var _UIFactory = _interopRequireDefault(require("../../UIFactory"));
15
18
  require("./AppNavigationComponent.css");
16
- var _uikit = require("@gravity-ui/uikit");
17
- var _reactRouter = require("react-router");
18
19
  var _jsxRuntime = require("react/jsx-runtime");
19
20
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
20
21
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -47,6 +48,34 @@ GearIcon.defaultProps = {
47
48
  fill: "none",
48
49
  viewBox: "0 0 16 16"
49
50
  };
51
+ var BugIcon = function BugIcon(props) {
52
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("svg", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
53
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("g", {
54
+ clipPath: "url(#a)",
55
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {
56
+ fill: "currentColor",
57
+ fillRule: "evenodd",
58
+ 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",
59
+ clipRule: "evenodd"
60
+ })
61
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("defs", {
62
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("clipPath", {
63
+ id: "a",
64
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {
65
+ fill: "currentColor",
66
+ d: "M0 0h16v16H0z"
67
+ })
68
+ })
69
+ })]
70
+ }));
71
+ };
72
+ BugIcon.defaultProps = {
73
+ xmlns: "http://www.w3.org/2000/svg",
74
+ width: "16",
75
+ height: "16",
76
+ fill: "none",
77
+ viewBox: "0 0 16 16"
78
+ };
50
79
  var block = (0, _bemCnLite.default)('yt-app-navigation');
51
80
  function AppNavigationComponent(_ref) {
52
81
  var logoClassName = _ref.logoClassName,
@@ -105,7 +134,23 @@ function AppNavigationComponent(_ref) {
105
134
  renderFooter: function renderFooter(_ref2) {
106
135
  var compact = _ref2.compact;
107
136
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
108
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_navigation.FooterItem, {
137
+ children: [_UIFactory.default.makeSupportContent({
138
+ login: currentUser
139
+ }, function (_ref3) {
140
+ var onSupportClick = _ref3.onSupportClick,
141
+ supportContent = _ref3.supportContent;
142
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_react.default.Fragment, {
143
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_navigation.FooterItem, {
144
+ compact: compact,
145
+ item: {
146
+ id: 'support',
147
+ title: 'Report a bug',
148
+ icon: BugIcon,
149
+ onItemClick: onSupportClick
150
+ }
151
+ }), supportContent]
152
+ });
153
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_navigation.FooterItem, {
109
154
  compact: compact,
110
155
  item: {
111
156
  id: 'settings',
@@ -121,8 +166,8 @@ function AppNavigationComponent(_ref) {
121
166
  onItemClick: function onItemClick() {
122
167
  setPopupVisible(!popupVisible);
123
168
  },
124
- itemWrapper: function itemWrapper(_ref3, makeItem) {
125
- var title = _ref3.title;
169
+ itemWrapper: function itemWrapper(_ref4, makeItem) {
170
+ var title = _ref4.title;
126
171
  return makeItem({
127
172
  title: title,
128
173
  icon: /*#__PURE__*/(0, _jsxRuntime.jsx)("img", {
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_bemCnLite","_interopRequireDefault","_navigation","_appLogo","_Link","_userAvatar","_uikit","_reactRouter","_jsxRuntime","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","obj","GearIcon","props","_jsxs","_objectSpread","children","_jsx","clipPath","fill","fillRule","d","clipRule","id","defaultProps","xmlns","width","height","viewBox","block","cn","AppNavigationComponent","_ref","logoClassName","menuItems","currentUser","authWay","panelContent","panelVisible","panelClassName","onClosePanel","settingsVisible","settingsContent","toggleSettingsVisible","onChangeCompact","panelItems","React","useMemo","content","visible","className","_useState","useState","_useState2","_slicedToArray","popupVisible","setPopupVisible","history","useHistory","PageLayoutAside","multipleTooltip","headerDecoration","logo","text","textSize","icon","Logo","iconSize","iconClassName","wrapper","node","Link","url","theme","target","renderFooter","_ref2","compact","_Fragment","FooterItem","item","title","onItemClick","itemWrapper","_ref3","makeItem","src","unknown","enableTooltip","onClosePopup","renderPopupContent","Menu","Item","onClick","push","href","_default","exports","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","_interopRequireWildcard","require","_reactRouter","_bemCnLite","_interopRequireDefault","_navigation","_uikit","_appLogo","_Link","_userAvatar","_UIFactory","_jsxRuntime","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","obj","GearIcon","props","_jsxs","_objectSpread","children","_jsx","clipPath","fill","fillRule","d","clipRule","id","defaultProps","xmlns","width","height","viewBox","BugIcon","block","cn","AppNavigationComponent","_ref","logoClassName","menuItems","currentUser","authWay","panelContent","panelVisible","panelClassName","onClosePanel","settingsVisible","settingsContent","toggleSettingsVisible","onChangeCompact","panelItems","React","useMemo","content","visible","className","_useState","useState","_useState2","_slicedToArray","popupVisible","setPopupVisible","history","useHistory","PageLayoutAside","multipleTooltip","headerDecoration","logo","text","textSize","icon","Logo","iconSize","iconClassName","wrapper","node","Link","url","theme","target","renderFooter","_ref2","compact","_Fragment","UIFactory","makeSupportContent","login","_ref3","onSupportClick","supportContent","Fragment","FooterItem","item","title","onItemClick","itemWrapper","_ref4","makeItem","src","unknown","enableTooltip","onClosePopup","renderPopupContent","Menu","Item","onClick","push","href","_default","exports","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":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AACA,IAAAK,MAAA,GAAAL,OAAA;AAEA,IAAAM,QAAA,GAAAH,sBAAA,CAAAH,OAAA;AAGA,IAAAO,KAAA,GAAAJ,sBAAA,CAAAH,OAAA;AACA,IAAAQ,WAAA,GAAAL,sBAAA,CAAAH,OAAA;AAEA,IAAAS,UAAA,GAAAN,sBAAA,CAAAH,OAAA;AAEAA,OAAA;AAAuC,IAAAU,WAAA,GAAAV,OAAA;AAAA,SAAAW,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAb,wBAAAa,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAc,CAAA,SAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAgB,GAAA,CAAAnB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAAA,SAAAjB,uBAAA6B,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAhB,UAAA,GAAAgB,GAAA,KAAAf,OAAA,EAAAe,GAAA;AARY,IAC5CC,QAAQ,YAARA,QAAQA,CAAAC,KAAA;EAAA,wBAAAC,gBAAA,aAAAC,sBAAA,MAAAA,sBAAA,MAAAF,KAAA;IAAAG,QAAA,oBAAAC,eAAA;MAAAC,QAAA;MAAAF,QAAA,mBAAAC,eAAA;QAAAE,IAAA;QAAAC,QAAA;QAAAC,CAAA;QAAAC,QAAA;MAAA;IAAA,qBAAAL,eAAA;MAAAD,QAAA,mBAAAC,eAAA;QAAAM,EAAA;QAAAP,QAAA,mBAAAC,eAAA;UAAAE,IAAA;UAAAE,CAAA;QAAA;MAAA;IAAA;EAAA;AAAA;AAART,QAAQ,CAAAY,YAAA;EAAAC,KAAA;EAAAC,KAAA;EAAAC,MAAA;EAAAR,IAAA;EAAAS,OAAA;AAAA;AAAA,IACRC,OAAO,YAAPA,OAAOA,CAAAhB,KAAA;EAAA,wBAAAC,gBAAA,aAAAC,sBAAA,MAAAA,sBAAA,MAAAF,KAAA;IAAAG,QAAA,oBAAAC,eAAA;MAAAC,QAAA;MAAAF,QAAA,mBAAAC,eAAA;QAAAE,IAAA;QAAAC,QAAA;QAAAC,CAAA;QAAAC,QAAA;MAAA;IAAA,qBAAAL,eAAA;MAAAD,QAAA,mBAAAC,eAAA;QAAAM,EAAA;QAAAP,QAAA,mBAAAC,eAAA;UAAAE,IAAA;UAAAE,CAAA;QAAA;MAAA;IAAA;EAAA;AAAA;AAAPQ,OAAO,CAAAL,YAAA;EAAAC,KAAA;EAAAC,KAAA;EAAAC,MAAA;EAAAR,IAAA;EAAAS,OAAA;AAAA;AAQd,IAAME,KAAK,GAAG,IAAAC,kBAAE,EAAC,mBAAmB,CAAC;AAErC,SAASC,sBAAsBA,CAAAC,IAAA,EAgBwC;EAAA,IAfnEC,aAAa,GAAAD,IAAA,CAAbC,aAAa;IACbC,SAAS,GAAAF,IAAA,CAATE,SAAS;IACTC,WAAW,GAAAH,IAAA,CAAXG,WAAW;IACXC,OAAO,GAAAJ,IAAA,CAAPI,OAAO;IAEPC,YAAY,GAAAL,IAAA,CAAZK,YAAY;IACZC,YAAY,GAAAN,IAAA,CAAZM,YAAY;IACZC,cAAc,GAAAP,IAAA,CAAdO,cAAc;IACdC,YAAY,GAAAR,IAAA,CAAZQ,YAAY;IAEZC,eAAe,GAAAT,IAAA,CAAfS,eAAe;IACfC,eAAe,GAAAV,IAAA,CAAfU,eAAe;IACfC,qBAAqB,GAAAX,IAAA,CAArBW,qBAAqB;IAErBC,eAAe,GAAAZ,IAAA,CAAfY,eAAe;EAEf,IAAMC,UAAU,GAAGC,cAAK,CAACC,OAAO,CAAC,YAAM;IACnC,OAAO,CACH;MACIzB,EAAE,EAAE,OAAO;MACX0B,OAAO,EAAEX,YAAY;MACrBY,OAAO,EAAEX,YAAY;MACrBY,SAAS,EAAEX;IACf,CAAC,EACD;MACIjB,EAAE,EAAE,UAAU;MACd0B,OAAO,EAAEN,eAAe;MACxBO,OAAO,EAAER;IACb,CAAC,CACJ;EACL,CAAC,EAAE,CAACH,YAAY,EAAED,YAAY,EAAEI,eAAe,EAAEC,eAAe,CAAC,CAAC;EAElE,IAAAS,SAAA,GAAwC,IAAAC,eAAQ,EAAC,KAAK,CAAC;IAAAC,UAAA,OAAAC,uBAAA,EAAAH,SAAA;IAAhDI,YAAY,GAAAF,UAAA;IAAEG,eAAe,GAAAH,UAAA;EACpC,IAAMI,OAAO,GAAG,IAAAC,uBAAU,EAAC,CAAC;EAE5B,oBACI,IAAA1C,eAAA,EAAC2C,2BAAe;IACZC,eAAe;IACff,UAAU,EAAEA,UAAW;IACvBL,YAAY,EAAEA,YAAa;IAC3BN,SAAS,EAAEA,SAAU;IACrB2B,gBAAgB;IAChBC,IAAI,EAAE;MACFC,IAAI,EAAE,SAAAA,KAAA;QAAA,OAAM,UAAU;MAAA;MACtBC,QAAQ,EAAE,EAAE;MACZC,IAAI,EAAEC,gBAAI;MACVC,QAAQ,EAAE,EAAE;MACZC,aAAa,EAAEnC,aAAa;MAC5BoC,OAAO,EAAE,SAAAA,QAACC,IAAI,EAAK;QACf,oBACI,IAAAtD,eAAA,EAACuD,aAAI;UAACC,GAAG,EAAE,GAAI;UAACC,KAAK,EAAE,SAAU;UAACC,MAAM,EAAC,QAAQ;UAAA3D,QAAA,EAC5CuD;QAAI,CACH,CAAC;MAEf;IACJ,CAAE;IACF1B,eAAe,EAAEA,eAAgB;IACjC+B,YAAY,EAAE,SAAAA,aAAAC,KAAA,EAAe;MAAA,IAAbC,OAAO,GAAAD,KAAA,CAAPC,OAAO;MACnB,oBACI,IAAAhE,gBAAA,EAAAiE,oBAAA;QAAA/D,QAAA,GACKgE,kBAAS,CAACC,kBAAkB,CACzB;UAACC,KAAK,EAAE9C;QAAW,CAAC,EACpB,UAAA+C,KAAA;UAAA,IAAEC,cAAc,GAAAD,KAAA,CAAdC,cAAc;YAAEC,cAAc,GAAAF,KAAA,CAAdE,cAAc;UAAA,oBAC5B,IAAAvE,gBAAA,EAACiC,cAAK,CAACuC,QAAQ;YAAAtE,QAAA,gBACX,IAAAC,eAAA,EAACsE,sBAAU;cACPT,OAAO,EAAEA,OAAQ;cACjBU,IAAI,EAAE;gBACFjE,EAAE,EAAE,SAAS;gBACbkE,KAAK,EAAE,cAAc;gBACrBvB,IAAI,EAAErC,OAAO;gBACb6D,WAAW,EAAEN;cACjB;YAAE,CACL,CAAC,EACDC,cAAc;UAAA,CACH,CAAC;QAAA,CAEzB,CAAC,eACD,IAAApE,eAAA,EAACsE,sBAAU;UACPT,OAAO,EAAEA,OAAQ;UACjBU,IAAI,EAAE;YACFjE,EAAE,EAAE,UAAU;YACdkE,KAAK,EAAE,UAAU;YACjBC,WAAW,EAAE9C,qBAAqB;YAClCsB,IAAI,EAAEtD;UACV;QAAE,CACL,CAAC,eACF,IAAAK,eAAA,EAACsE,sBAAU;UACPT,OAAO,EAAEA,OAAQ;UACjBU,IAAI,EAAE;YACFjE,EAAE,EAAE,MAAM;YACVkE,KAAK,EAAErD,WAAW;YAClBsD,WAAW,EAAE,SAAAA,YAAA,EAAM;cACfjC,eAAe,CAAC,CAACD,YAAY,CAAC;YAClC,CAAC;YACDmC,WAAW,EAAE,SAAAA,YAAAC,KAAA,EAAeC,QAAa,EAAK;cAAA,IAA/BJ,KAAK,GAAAG,KAAA,CAALH,KAAK;cAChB,OAAOI,QAAQ,CAAC;gBACZJ,KAAK,EAALA,KAAK;gBACLvB,IAAI,eACA,IAAAjD,eAAA;kBACIkC,SAAS,EAAErB,KAAK,CAAC,WAAW,CAAE;kBAC9BJ,KAAK,EAAE,EAAG;kBACVC,MAAM,EAAE,EAAG;kBACXmE,GAAG,EAAEC;gBAAQ,CAChB;cAET,CAAC,CAAC;YACN;UACJ,CAAE;UACFC,aAAa,EAAE,CAACxC,YAAa;UAC7BA,YAAY,EAAEA,YAAa;UAC3ByC,YAAY,EAAE,SAAAA,aAAA;YAAA,OAAMxC,eAAe,CAAC,KAAK,CAAC;UAAA,CAAC;UAC3CyC,kBAAkB,EAAE,SAAAA,mBAAA,EAAM;YACtB,oBACI,IAAAjF,eAAA;cAAKkC,SAAS,EAAErB,KAAK,CAAC,aAAa,CAAE;cAAAd,QAAA,eACjC,IAAAF,gBAAA,EAACqF,WAAI;gBAAAnF,QAAA,GACAqB,OAAO,KAAK,QAAQ,iBACjB,IAAApB,eAAA,EAACkF,WAAI,CAACC,IAAI;kBACNC,OAAO,EAAE,SAAAA,QAAA;oBAAA,OAAM3C,OAAO,CAAC4C,IAAI,CAAC,kBAAkB,CAAC;kBAAA,CAAC;kBAAAtF,QAAA,EACnD;gBAED,CAAW,CACd,eACD,IAAAC,eAAA,EAACkF,WAAI,CAACC,IAAI;kBAACG,IAAI,EAAE,gBAAiB;kBAAAvF,QAAA,EAAC;gBAAM,CAAW,CAAC;cAAA,CACnD;YAAC,CACN,CAAC;UAEd;QAAE,CACL,CAAC;MAAA,CACJ,CAAC;IAEX;EAAE,CACL,CAAC;AAEV;AAAA,IAAAwF,QAAA,GAAAC,OAAA,CAAA7G,OAAA,GAEA,aAAemD,cAAK,CAAC2D,IAAI,CAAC1E,sBAAsB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import UIFactory from '../../UIFactory';
3
+ export declare function SupportComponent({ makeContent, }: {
4
+ makeContent: Parameters<typeof UIFactory.makeSupportContent>[1];
5
+ }): React.JSX.Element | null;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SupportComponent = SupportComponent;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _uiSettings = require("../../config/ui-settings");
9
+ var _utils = require("../../utils/utils");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ function SupportComponent(_ref) {
13
+ var makeContent = _ref.makeContent;
14
+ var reportBugUrl = _uiSettings.uiSettings.reportBugUrl;
15
+ var onSupportClick = _react.default.useCallback(function () {
16
+ if (reportBugUrl) (0, _utils.openInNewTab)(reportBugUrl);
17
+ }, [reportBugUrl]);
18
+ return reportBugUrl ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
19
+ children: makeContent({
20
+ onSupportClick: onSupportClick
21
+ })
22
+ }) : null;
23
+ }
24
+ // #sourceMappingURL=SupportComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_uiSettings","_utils","_jsxRuntime","obj","__esModule","default","SupportComponent","_ref","makeContent","reportBugUrl","uiSettings","onSupportClick","React","useCallback","openInNewTab","_jsx","_Fragment","children"],"sources":["SupportComponent.tsx"],"sourcesContent":["import React from 'react';\n\nimport UIFactory from '../../UIFactory';\nimport {uiSettings} from '../../config/ui-settings';\nimport {openInNewTab} from '../../utils/utils';\n\nexport function SupportComponent({\n makeContent,\n}: {\n makeContent: Parameters<typeof UIFactory.makeSupportContent>[1];\n}) {\n const {reportBugUrl} = uiSettings;\n const onSupportClick = React.useCallback(() => {\n if (reportBugUrl) openInNewTab(reportBugUrl);\n }, [reportBugUrl]);\n\n return reportBugUrl ? <>{makeContent({onSupportClick})}</> : null;\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAGA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAA+C,IAAAG,WAAA,GAAAH,OAAA;AAAA,SAAAD,uBAAAK,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAExC,SAASG,gBAAgBA,CAAAC,IAAA,EAI7B;EAAA,IAHCC,WAAW,GAAAD,IAAA,CAAXC,WAAW;EAIX,IAAOC,YAAY,GAAIC,sBAAU,CAA1BD,YAAY;EACnB,IAAME,cAAc,GAAGC,cAAK,CAACC,WAAW,CAAC,YAAM;IAC3C,IAAIJ,YAAY,EAAE,IAAAK,mBAAY,EAACL,YAAY,CAAC;EAChD,CAAC,EAAE,CAACA,YAAY,CAAC,CAAC;EAElB,OAAOA,YAAY,gBAAG,IAAAM,eAAA,EAAAC,oBAAA;IAAAC,QAAA,EAAGT,WAAW,CAAC;MAACG,cAAc,EAAdA;IAAc,CAAC;EAAC,CAAG,CAAC,GAAG,IAAI;AACrE"}