@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
@@ -1 +1 @@
1
- {"version":3,"names":["React","AppNavigationPageLayout","defaultAclApi","YTUserSuggest","docsUrls","YTSubjectSuggest","RoleActions","OperationDetailMonitorLinks","PERMISSIONS_SETTINGS","uiSettings","YT","jsx","_jsx","experimentalPages","uiFactory","getClusterAppearance","cluster","_YT$clusters","clusters","urls","isWatchMen","makeUrlForUserName","_ref","login","concat","makeUrlForTransferTask","undefined","makeUrlForNodeIO","makeUrlForTabletCellBundleDashboard","makeUrlForMonitoringDescriptor","makeUrlForUserDashboard","getExtaClusterPages","getExtraRootPages","getExtraReducersAndUrlMapping","getSchedulingExtraTabs","_uiSettings$schedulin","schedulingMonitoring","urlTemplate","_uiSettings$schedulin2","_uiSettings$schedulin3","title","name","getMonitoringForAccounts","_uiSettings$accountsM","accountsMonitoring","_uiSettings$accountsM2","getMonitoringForBundle","_uiSettings$bundlesMo","bundlesMonitoring","_uiSettings$bundlesMo2","getMonitoringForOperation","params","_uiSettings$operation","_params$pools","operationsMonitoring","_uiSettings$operation2","hasPoolParameter","indexOf","pools","length","component","getMonitorComponentForJob","getMonitoringComponentForChyt","_uiSettings$chytMonit","_ref2","chytMonitoring","getStatisticsComponentForAccount","getStatisticsComponentForBundle","renderNavigationExtraActions","renderSchedulingLastDayMaximum","renderComponentsNodeCardTop","getExtraMetaTableItemsForComponentsNode","getExtraMetaTableItemsForPool","getExtraMetaTableItemsForBundle","getComponentsNodeDashboardUrl","renderTransferQuotaNoticeForPool","renderTransferQuotaNoticeForAccount","renderTopRowExtraControlsForAccount","renderTopRowExtraControlsForPool","renderTopRowExtraControlsForBundle","renderAccountsTableItemExtraControls","renderSchedulingTableItemExtraControls","renderBundlesTableItemExtraControls","renderControlAbcService","makeSupportContent","getComponentForConsumerMetrics","getComonentForQueueMetrics","renderTableCellBundleEditorNotice","getNodeDeployUrl","getNodeNannyUrl","renderAppNavigation","props","_objectSpread","createNotificationUrl","wrapApp","app","externalSchemaDescriptionSetup","load","_cluster","_path","Promise","resolve","getAclApi","renderAclSubjectsSuggestControl","renderRolesLink","getExternalSettings","renderUserSuggest","getExperimentalPages","getAllowedExperimentalPages","getComponentForAclRoleActions","getAclPermissionsSettings","onChytAliasSqlClick","configureUIFactoryItem","k","redefinition","configureUIFactory","overrides","_forEach","_v","key","Proxy","set","Error","isAbcAllowed","abc","onChange","value","id","slug","Boolean"],"sources":["UIFactory.tsx"],"sourcesContent":["import {SVGIconData} from '@gravity-ui/uikit/build/esm/components/Icon/types';\nimport {MetaTableItem} from './components/MetaTable/MetaTable';\nimport _ from 'lodash';\nimport React from 'react';\nimport {Reducer} from 'redux';\nimport {PathParameters} from './store/location';\nimport {TabletBundle} from './store/reducers/tablet_cell_bundles';\nimport {PoolInfo} from './store/selectors/scheduling/scheduling-pools';\nimport {ClusterConfig, ClusterUiConfig} from '../shared/yt-types';\nimport {ClusterAppearance} from './appearance';\nimport AppNavigationPageLayout, {\n AppNavigationProps,\n} from './containers/AppNavigation/AppNavigationPageLayout';\nimport {ExternalSchemaDescription} from './pages/navigation/tabs/Schema/ExternalDescription/ExternalDescription';\nimport {AclApi, defaultAclApi} from './utils/acl/external-acl-api';\nimport {SubjectsControlProps} from './components/ACL/SubjectsControl/SubjectsControl';\nimport {SettingsPage} from './containers/SettingsPanel/settings-description';\nimport {UserSuggestProps} from './containers/UserSuggest/UserSuggest';\nimport {YTUserSuggest} from './containers/UserSuggest/YTUserSuggest';\nimport {DocsUrls, docsUrls} from './constants/docsUrls';\nimport {YTSubjectSuggest} from './components/ACL/SubjectsControl/YTSubjectSuggest';\nimport RoleActions, {Props as RoleActionsProps} from './components/ACL/RoleActions';\nimport OperationDetailMonitorLinks from './pages/operations/OperationDetail/tabs/monitor/OperationDetailsMonitorLinks';\nimport {PERMISSIONS_SETTINGS} from './constants/acl';\nimport {uiSettings} from './config/ui-settings';\nimport YT from './config/yt-config';\n\ntype HeaderItemOrPage =\n | {\n href: string;\n\n pageId?: undefined;\n reactComponent?: undefined;\n reducers?: undefined;\n urlMapping?: undefined;\n }\n | {\n pageId?: string;\n reactComponent?: React.ComponentType<any>; // used as component for <Route ... component={reactComponent} />\n reducers?: Record<string, Reducer>;\n urlMapping?: Record<string, PathParameters>;\n\n href?: undefined;\n };\n\nexport type UIFactoryRootPageInfo = HeaderItemOrPage & {\n title: string;\n getVisible?: () => Promise<boolean>;\n};\n\nexport interface UIFactoryClusterPageInfo {\n title: string;\n pageId: string; // also used as urlMatch for <Route path={`/:cluster/${pageId}`} ... />\n svgIcon?: SVGIconData;\n reducers?: Record<string, Reducer>;\n reactComponent: React.ComponentType<any>; // used as component for <Route ... component={reactComponent} />\n topRowComponent?: React.ComponentType<any>; // used as component for <Route ... component={topRowComponent} />\n urlMapping?: Record<string, PathParameters>;\n}\n\nexport interface ExternalSchemaDescriptionResponse {\n url?: string;\n externalSchema?: Map<string, ExternalSchemaDescription>;\n}\n\nexport interface ReducersAndUrlMapping {\n reducers?: Record<string, Reducer>;\n urlMapping?: Record<string, PathParameters>;\n}\n\nexport interface SchedulingExtraTab {\n name: string;\n title?: string;\n component?: React.ComponentType<any>;\n /**\n * Allows to redefine link of corresponding tab\n * Example: https://grafana.mydomain.com?var-pool={ytPool}&var-tree={ytPoolTree}&var-cluster={ytCluster}\n */\n urlTemplate?: string;\n}\n\nexport interface OperationMonitoringTabProps {\n cluster: string;\n operation: {\n id: string;\n startTime?: string;\n finishTime?: string;\n pools?: Array<{pool: string; tree: string; slotIndex?: number}>;\n };\n}\n\nexport interface UIFactory {\n getClusterAppearance(cluster?: string): undefined | ClusterAppearance;\n\n isWatchMen(login: string): boolean;\n\n makeUrlForUserName({cluster, login}: {cluster: string; login: string}): string | undefined;\n makeUrlForTransferTask(operation: unknown): string | undefined;\n makeUrlForNodeIO(cluster: string, host?: string): string | undefined;\n makeUrlForTabletCellBundleDashboard(cluster: string, bundle: string): string | undefined;\n makeUrlForMonitoringDescriptor(\n cluster: string,\n timeRange: {from: string; to?: string},\n monitoring_descriptor?: string,\n ): string | undefined;\n makeUrlForUserDashboard(cluster: string, user: string): string | undefined;\n\n getExtaClusterPages(): Array<UIFactoryClusterPageInfo>;\n getExtraRootPages(): Array<UIFactoryRootPageInfo>;\n\n getExtraReducersAndUrlMapping(): undefined | ReducersAndUrlMapping;\n getSchedulingExtraTabs(params: {\n cluster: string;\n pool: string;\n tree: string;\n extraOptions: {\n isRoot?: boolean;\n isEphemeral?: boolean | undefined;\n };\n }): Array<SchedulingExtraTab>;\n\n getMonitoringForAccounts():\n | undefined\n | {\n component: React.ComponentType<{cluster: string; account: string}>;\n urlTemplate?: undefined;\n title?: undefined;\n }\n | {urlTemplate: string; title?: string; component?: undefined};\n getMonitoringForBundle():\n | undefined\n | {\n component: React.ComponentType<{\n cluster: string;\n tablet_cell_bundle: string;\n bundleData: any;\n }>;\n urlTemplate?: undefined;\n title?: undefined;\n }\n | {urlTemplate: string; title?: string; component?: undefined};\n getMonitoringForOperation(params: OperationMonitoringTabProps['operation']):\n | undefined\n | {\n component: React.ComponentType<OperationMonitoringTabProps>;\n urlTemplate?: undefined;\n title?: undefined;\n }\n | {urlTemplate: string; title?: string; component?: undefined};\n getMonitorComponentForJob():\n | undefined\n | React.ComponentType<{\n cluster: string;\n job_descriptor: string;\n from?: number;\n to?: number;\n }>;\n\n getMonitoringComponentForChyt():\n | undefined\n | {\n component?: React.ComponentType<{cluster: string; alias: string}>;\n urlTemplate?: string;\n title?: string;\n };\n\n getStatisticsComponentForAccount():\n | undefined\n | React.ComponentType<{\n cluster: string;\n account: string;\n accountSubtreeAllNames: Array<string>;\n theme: string;\n }>;\n\n getStatisticsComponentForBundle():\n | undefined\n | React.ComponentType<{cluster: string; bundle: string; theme: string}>;\n\n renderNavigationExtraActions(params: {\n className?: string;\n cluster: string;\n path: string;\n type: string;\n attributes: unknown;\n }): React.ReactNode;\n\n renderSchedulingLastDayMaximum(props: {\n className?: string;\n cluster: string;\n tree: string;\n title?: string;\n sensor: 'max_operation_count' | 'max_running_operation_count';\n format?(sensorValue?: number): string;\n current?: {value: string; title: string};\n showHint?: boolean;\n showAsLink?: boolean;\n }): React.ReactNode;\n\n renderComponentsNodeCardTop(props: {\n className?: string;\n clusterConfig: ClusterConfig;\n host: string;\n physicalHost: string;\n }): React.ReactNode;\n\n getComponentsNodeDashboardUrl(props: {cluster: string; host: string}): {\n url?: string;\n title?: string;\n };\n\n renderTransferQuotaNoticeForPool(props: {\n className?: string;\n pool?: PoolInfo;\n parentPool?: PoolInfo;\n clusterUiConfig?: ClusterUiConfig;\n isTopLevel?: boolean;\n }): React.ReactNode;\n\n renderTransferQuotaNoticeForAccount(props: {\n className?: string;\n isTopLevel?: boolean;\n accountAttributes?: unknown;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n renderTopRowExtraControlsForAccount(props: {\n className?: string;\n accountAttributes?: unknown;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n renderTopRowExtraControlsForPool(props: {\n itemClassName?: string;\n pool?: unknown;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n renderTopRowExtraControlsForBundle(props: {\n itemClassName?: string;\n bundle?: TabletBundle;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n getExtraMetaTableItemsForComponentsNode(props: {\n clusterConfig: ClusterConfig;\n host: string;\n physicalHost: string;\n }): undefined | Array<MetaTableItem>;\n\n getExtraMetaTableItemsForPool(props: {\n pool: PoolInfo;\n clusterUiConfig?: ClusterUiConfig;\n }): undefined | Array<MetaTableItem>;\n\n getExtraMetaTableItemsForBundle(props: {\n bundle: TabletBundle;\n clusterUiConfig: ClusterUiConfig;\n }): undefined | Array<MetaTableItem>;\n\n renderAccountsTableItemExtraControls(props: {\n itemClassName?: string;\n cluster: string;\n account: string;\n accountAttributes?: unknown;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n renderSchedulingTableItemExtraControls(props: {\n itemClassName?: string;\n cluster: string;\n pool: unknown;\n clusterUiConfig: ClusterUiConfig;\n }): React.ReactNode;\n\n renderBundlesTableItemExtraControls(props: {\n itemClassName?: string;\n bundle?: TabletBundle;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n renderControlAbcService<T extends {slug: string; id?: number}>(props: {\n className?: string;\n value?: T;\n onChange: (v?: T) => void;\n placeholder?: string;\n disabled?: boolean;\n }): React.ReactNode;\n\n makeSupportContent(\n params: {login: string; cluster?: string; buttonToWrap?: React.ReactNode},\n makeContent: (onSupportClick: () => void) => React.ReactNode,\n ): React.ReactNode;\n\n getComponentForConsumerMetrics():\n | undefined\n | React.ComponentType<{\n cluster: string;\n path: string;\n targetQueue?: string;\n }>;\n\n getComonentForQueueMetrics(): undefined | React.ComponentType<{cluster: string; path: string}>;\n\n renderTableCellBundleEditorNotice(props: {\n bundleData?: {$attributes: unknown};\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n getNodeDeployUrl(ypCluster?: string, podId?: string): string | undefined;\n getNodeNannyUrl(params: {\n pod_id?: string;\n nanny_service?: string;\n yp_cluster?: string;\n }): string | undefined;\n\n renderAppNavigation(props: AppNavigationProps): React.ReactElement;\n\n createNotificationUrl(clusterConfig?: ClusterConfig): string | undefined;\n\n wrapApp(app: React.ReactElement): React.ReactElement;\n\n externalSchemaDescriptionSetup: {\n columns?: Record<keyof ExternalSchemaDescription['glossaryEntity'], string>;\n load(cluster: string, path: string): Promise<ExternalSchemaDescriptionResponse>;\n };\n\n getAclApi(): AclApi;\n\n renderAclSubjectsSuggestControl(props: SubjectsControlProps): React.ReactNode;\n\n renderRolesLink(params: {cluster: string; login: string; className?: string}): React.ReactNode;\n\n getExternalSettings(params: {\n cluster: string;\n login: string;\n isAdmin: boolean;\n }): Array<SettingsPage>;\n\n renderUserSuggest(props: UserSuggestProps): React.ReactNode;\n\n yqlWidgetSetup?: {\n renderButton(props: {className?: string; isSplit?: string}): React.ReactNode;\n renderWidget(props: {cluster: string; path: string; attributes: unknown}): React.ReactNode;\n renderYqlOperationLink(yqlOperationId: string): React.ReactNode;\n };\n\n getExperimentalPages(): string[];\n getAllowedExperimentalPages(login: string): Promise<Array<string>>;\n\n docsUrls: DocsUrls;\n\n getComponentForAclRoleActions(): undefined | React.ComponentType<RoleActionsProps>;\n\n getAclPermissionsSettings(): typeof PERMISSIONS_SETTINGS;\n\n onChytAliasSqlClick(params: {alias: string; cluster: string}): void;\n}\n\nconst experimentalPages: string[] = [];\n\nconst uiFactory: UIFactory = {\n getClusterAppearance(cluster) {\n return YT.clusters[cluster!]?.urls;\n },\n isWatchMen() {\n return false;\n },\n makeUrlForUserName({cluster, login}: {cluster?: string; login: string}) {\n return `/${cluster}/users?filter=${login}`;\n },\n makeUrlForTransferTask() {\n return undefined;\n },\n makeUrlForNodeIO() {\n return undefined;\n },\n makeUrlForTabletCellBundleDashboard() {\n return undefined;\n },\n makeUrlForMonitoringDescriptor() {\n return undefined;\n },\n makeUrlForUserDashboard() {\n return undefined;\n },\n\n getExtaClusterPages() {\n return [];\n },\n getExtraRootPages() {\n return [];\n },\n\n getExtraReducersAndUrlMapping() {\n return undefined;\n },\n\n getSchedulingExtraTabs() {\n if (!uiSettings.schedulingMonitoring?.urlTemplate) {\n return [];\n }\n\n const {urlTemplate, title = 'Monitoring'} = uiSettings.schedulingMonitoring;\n\n return [\n {\n name: 'monitoring',\n title,\n urlTemplate,\n },\n ];\n },\n getMonitoringForAccounts() {\n if (!uiSettings?.accountsMonitoring?.urlTemplate) {\n return undefined;\n }\n\n const {urlTemplate, title} = uiSettings.accountsMonitoring;\n return {urlTemplate, title};\n },\n getMonitoringForBundle() {\n if (!uiSettings.bundlesMonitoring?.urlTemplate) {\n return undefined;\n }\n\n const {urlTemplate, title} = uiSettings.bundlesMonitoring;\n return {urlTemplate, title};\n },\n getMonitoringForOperation(params) {\n if (!uiSettings.operationsMonitoring?.urlTemplate) {\n return undefined;\n }\n\n const {urlTemplate, title} = uiSettings.operationsMonitoring;\n\n const hasPoolParameter =\n urlTemplate.indexOf('{ytPool}') !== -1 || urlTemplate.indexOf('{ytPoolTree}') !== -1;\n\n if (hasPoolParameter && params.pools?.length! > 1) {\n return {component: OperationDetailMonitorLinks};\n }\n\n return {urlTemplate, title};\n },\n getMonitorComponentForJob() {\n return undefined;\n },\n getMonitoringComponentForChyt() {\n const {urlTemplate, title} = uiSettings.chytMonitoring ?? {};\n if (!urlTemplate) {\n return undefined;\n }\n\n return {urlTemplate, title};\n },\n getStatisticsComponentForAccount() {\n return undefined;\n },\n getStatisticsComponentForBundle() {\n return undefined;\n },\n\n renderNavigationExtraActions() {\n return null;\n },\n\n renderSchedulingLastDayMaximum() {\n return undefined;\n },\n\n renderComponentsNodeCardTop() {\n return undefined;\n },\n\n getExtraMetaTableItemsForComponentsNode() {\n return undefined;\n },\n\n getExtraMetaTableItemsForPool() {\n return undefined;\n },\n\n getExtraMetaTableItemsForBundle() {\n return undefined;\n },\n\n getComponentsNodeDashboardUrl() {\n return {};\n },\n\n renderTransferQuotaNoticeForPool() {\n return undefined;\n },\n\n renderTransferQuotaNoticeForAccount() {\n return undefined;\n },\n\n renderTopRowExtraControlsForAccount() {\n return undefined;\n },\n\n renderTopRowExtraControlsForPool() {\n return undefined;\n },\n\n renderTopRowExtraControlsForBundle() {\n return undefined;\n },\n\n renderAccountsTableItemExtraControls() {\n return undefined;\n },\n\n renderSchedulingTableItemExtraControls() {\n return undefined;\n },\n\n renderBundlesTableItemExtraControls() {\n return undefined;\n },\n\n renderControlAbcService() {\n return undefined;\n },\n\n makeSupportContent() {\n return undefined;\n },\n\n getComponentForConsumerMetrics() {\n return undefined;\n },\n\n getComonentForQueueMetrics() {\n return undefined;\n },\n\n renderTableCellBundleEditorNotice() {\n return undefined;\n },\n\n getNodeDeployUrl() {\n return undefined;\n },\n\n getNodeNannyUrl() {\n return undefined;\n },\n\n renderAppNavigation(props) {\n return <AppNavigationPageLayout {...props} />;\n },\n\n createNotificationUrl() {\n return undefined;\n },\n\n wrapApp(app) {\n return app;\n },\n\n externalSchemaDescriptionSetup: {\n load(_cluster: string, _path: string) {\n return Promise.resolve({});\n },\n },\n\n getAclApi() {\n return defaultAclApi;\n },\n\n renderAclSubjectsSuggestControl(props) {\n return <YTSubjectSuggest {...props} />;\n },\n\n renderRolesLink() {\n return undefined;\n },\n\n getExternalSettings() {\n return [];\n },\n\n renderUserSuggest(props) {\n return <YTUserSuggest {...props} />;\n },\n\n getExperimentalPages() {\n return experimentalPages;\n },\n\n getAllowedExperimentalPages() {\n return Promise.resolve([]);\n },\n\n docsUrls: docsUrls,\n\n getComponentForAclRoleActions() {\n return RoleActions;\n },\n\n getAclPermissionsSettings() {\n return PERMISSIONS_SETTINGS;\n },\n\n onChytAliasSqlClick() {},\n};\n\nfunction configureUIFactoryItem<K extends keyof UIFactory>(k: K, redefinition: UIFactory[K]) {\n uiFactory[k] = redefinition;\n}\n\nexport function configureUIFactory(overrides: Partial<UIFactory>) {\n _.forEach(overrides, (_v, k) => {\n const key = k as keyof UIFactory;\n configureUIFactoryItem(key, overrides[key]!);\n });\n}\n\nexport default new Proxy(uiFactory, {\n set: () => {\n throw new Error('Use configureUIFactory(...) method instead of direct modifications');\n },\n});\n\nexport function isAbcAllowed() {\n const abc = uiFactory.renderControlAbcService({\n onChange: () => {},\n value: {id: 123, slug: '123'},\n });\n return Boolean(abc);\n}\n"],"mappings":";;AAGA,OAAOA,KAAK,MAAM,OAAO;AAOzB,OAAOC,uBAAuB,MAEvB,oDAAoD;AAE3D,SAAgBC,aAAa,QAAO,8BAA8B;AAIlE,SAAQC,aAAa,QAAO,wCAAwC;AACpE,SAAkBC,QAAQ,QAAO,sBAAsB;AACvD,SAAQC,gBAAgB,QAAO,mDAAmD;AAClF,OAAOC,WAAW,MAAmC,8BAA8B;AACnF,OAAOC,2BAA2B,MAAM,8EAA8E;AACtH,SAAQC,oBAAoB,QAAO,iBAAiB;AACpD,SAAQC,UAAU,QAAO,sBAAsB;AAC/C,OAAOC,EAAE,MAAM,oBAAoB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AA8UpC,IAAMC,iBAA2B,GAAG,EAAE;AAEtC,IAAMC,SAAoB,GAAG;EACzBC,oBAAoB,WAAAA,qBAACC,OAAO,EAAE;IAAA,IAAAC,YAAA;IAC1B,QAAAA,YAAA,GAAOP,EAAE,CAACQ,QAAQ,CAACF,OAAO,CAAE,cAAAC,YAAA,uBAArBA,YAAA,CAAuBE,IAAI;EACtC,CAAC;EACDC,UAAU,WAAAA,WAAA,EAAG;IACT,OAAO,KAAK;EAChB,CAAC;EACDC,kBAAkB,WAAAA,mBAAAC,IAAA,EAAsD;IAAA,IAApDN,OAAO,GAAAM,IAAA,CAAPN,OAAO;MAAEO,KAAK,GAAAD,IAAA,CAALC,KAAK;IAC9B,WAAAC,MAAA,CAAWR,OAAO,oBAAAQ,MAAA,CAAiBD,KAAK;EAC5C,CAAC;EACDE,sBAAsB,WAAAA,uBAAA,EAAG;IACrB,OAAOC,SAAS;EACpB,CAAC;EACDC,gBAAgB,WAAAA,iBAAA,EAAG;IACf,OAAOD,SAAS;EACpB,CAAC;EACDE,mCAAmC,WAAAA,oCAAA,EAAG;IAClC,OAAOF,SAAS;EACpB,CAAC;EACDG,8BAA8B,WAAAA,+BAAA,EAAG;IAC7B,OAAOH,SAAS;EACpB,CAAC;EACDI,uBAAuB,WAAAA,wBAAA,EAAG;IACtB,OAAOJ,SAAS;EACpB,CAAC;EAEDK,mBAAmB,WAAAA,oBAAA,EAAG;IAClB,OAAO,EAAE;EACb,CAAC;EACDC,iBAAiB,WAAAA,kBAAA,EAAG;IAChB,OAAO,EAAE;EACb,CAAC;EAEDC,6BAA6B,WAAAA,8BAAA,EAAG;IAC5B,OAAOP,SAAS;EACpB,CAAC;EAEDQ,sBAAsB,WAAAA,uBAAA,EAAG;IAAA,IAAAC,qBAAA;IACrB,IAAI,GAAAA,qBAAA,GAAC1B,UAAU,CAAC2B,oBAAoB,cAAAD,qBAAA,eAA/BA,qBAAA,CAAiCE,WAAW,GAAE;MAC/C,OAAO,EAAE;IACb;IAEA,IAAAC,sBAAA,GAA4C7B,UAAU,CAAC2B,oBAAoB;MAApEC,WAAW,GAAAC,sBAAA,CAAXD,WAAW;MAAAE,sBAAA,GAAAD,sBAAA,CAAEE,KAAK;MAALA,KAAK,GAAAD,sBAAA,cAAG,YAAY,GAAAA,sBAAA;IAExC,OAAO,CACH;MACIE,IAAI,EAAE,YAAY;MAClBD,KAAK,EAALA,KAAK;MACLH,WAAW,EAAXA;IACJ,CAAC,CACJ;EACL,CAAC;EACDK,wBAAwB,WAAAA,yBAAA,EAAG;IAAA,IAAAC,qBAAA;IACvB,IAAI,EAAClC,UAAU,aAAVA,UAAU,gBAAAkC,qBAAA,GAAVlC,UAAU,CAAEmC,kBAAkB,cAAAD,qBAAA,eAA9BA,qBAAA,CAAgCN,WAAW,GAAE;MAC9C,OAAOX,SAAS;IACpB;IAEA,IAAAmB,sBAAA,GAA6BpC,UAAU,CAACmC,kBAAkB;MAAnDP,WAAW,GAAAQ,sBAAA,CAAXR,WAAW;MAAEG,KAAK,GAAAK,sBAAA,CAALL,KAAK;IACzB,OAAO;MAACH,WAAW,EAAXA,WAAW;MAAEG,KAAK,EAALA;IAAK,CAAC;EAC/B,CAAC;EACDM,sBAAsB,WAAAA,uBAAA,EAAG;IAAA,IAAAC,qBAAA;IACrB,IAAI,GAAAA,qBAAA,GAACtC,UAAU,CAACuC,iBAAiB,cAAAD,qBAAA,eAA5BA,qBAAA,CAA8BV,WAAW,GAAE;MAC5C,OAAOX,SAAS;IACpB;IAEA,IAAAuB,sBAAA,GAA6BxC,UAAU,CAACuC,iBAAiB;MAAlDX,WAAW,GAAAY,sBAAA,CAAXZ,WAAW;MAAEG,KAAK,GAAAS,sBAAA,CAALT,KAAK;IACzB,OAAO;MAACH,WAAW,EAAXA,WAAW;MAAEG,KAAK,EAALA;IAAK,CAAC;EAC/B,CAAC;EACDU,yBAAyB,WAAAA,0BAACC,MAAM,EAAE;IAAA,IAAAC,qBAAA,EAAAC,aAAA;IAC9B,IAAI,GAAAD,qBAAA,GAAC3C,UAAU,CAAC6C,oBAAoB,cAAAF,qBAAA,eAA/BA,qBAAA,CAAiCf,WAAW,GAAE;MAC/C,OAAOX,SAAS;IACpB;IAEA,IAAA6B,sBAAA,GAA6B9C,UAAU,CAAC6C,oBAAoB;MAArDjB,WAAW,GAAAkB,sBAAA,CAAXlB,WAAW;MAAEG,KAAK,GAAAe,sBAAA,CAALf,KAAK;IAEzB,IAAMgB,gBAAgB,GAClBnB,WAAW,CAACoB,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAIpB,WAAW,CAACoB,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAExF,IAAID,gBAAgB,IAAI,EAAAH,aAAA,GAAAF,MAAM,CAACO,KAAK,cAAAL,aAAA,uBAAZA,aAAA,CAAcM,MAAM,IAAI,CAAC,EAAE;MAC/C,OAAO;QAACC,SAAS,EAAErD;MAA2B,CAAC;IACnD;IAEA,OAAO;MAAC8B,WAAW,EAAXA,WAAW;MAAEG,KAAK,EAALA;IAAK,CAAC;EAC/B,CAAC;EACDqB,yBAAyB,WAAAA,0BAAA,EAAG;IACxB,OAAOnC,SAAS;EACpB,CAAC;EACDoC,6BAA6B,WAAAA,8BAAA,EAAG;IAAA,IAAAC,qBAAA;IAC5B,IAAAC,KAAA,IAAAD,qBAAA,GAA6BtD,UAAU,CAACwD,cAAc,cAAAF,qBAAA,cAAAA,qBAAA,GAAI,CAAC,CAAC;MAArD1B,WAAW,GAAA2B,KAAA,CAAX3B,WAAW;MAAEG,KAAK,GAAAwB,KAAA,CAALxB,KAAK;IACzB,IAAI,CAACH,WAAW,EAAE;MACd,OAAOX,SAAS;IACpB;IAEA,OAAO;MAACW,WAAW,EAAXA,WAAW;MAAEG,KAAK,EAALA;IAAK,CAAC;EAC/B,CAAC;EACD0B,gCAAgC,WAAAA,iCAAA,EAAG;IAC/B,OAAOxC,SAAS;EACpB,CAAC;EACDyC,+BAA+B,WAAAA,gCAAA,EAAG;IAC9B,OAAOzC,SAAS;EACpB,CAAC;EAED0C,4BAA4B,WAAAA,6BAAA,EAAG;IAC3B,OAAO,IAAI;EACf,CAAC;EAEDC,8BAA8B,WAAAA,+BAAA,EAAG;IAC7B,OAAO3C,SAAS;EACpB,CAAC;EAED4C,2BAA2B,WAAAA,4BAAA,EAAG;IAC1B,OAAO5C,SAAS;EACpB,CAAC;EAED6C,uCAAuC,WAAAA,wCAAA,EAAG;IACtC,OAAO7C,SAAS;EACpB,CAAC;EAED8C,6BAA6B,WAAAA,8BAAA,EAAG;IAC5B,OAAO9C,SAAS;EACpB,CAAC;EAED+C,+BAA+B,WAAAA,gCAAA,EAAG;IAC9B,OAAO/C,SAAS;EACpB,CAAC;EAEDgD,6BAA6B,WAAAA,8BAAA,EAAG;IAC5B,OAAO,CAAC,CAAC;EACb,CAAC;EAEDC,gCAAgC,WAAAA,iCAAA,EAAG;IAC/B,OAAOjD,SAAS;EACpB,CAAC;EAEDkD,mCAAmC,WAAAA,oCAAA,EAAG;IAClC,OAAOlD,SAAS;EACpB,CAAC;EAEDmD,mCAAmC,WAAAA,oCAAA,EAAG;IAClC,OAAOnD,SAAS;EACpB,CAAC;EAEDoD,gCAAgC,WAAAA,iCAAA,EAAG;IAC/B,OAAOpD,SAAS;EACpB,CAAC;EAEDqD,kCAAkC,WAAAA,mCAAA,EAAG;IACjC,OAAOrD,SAAS;EACpB,CAAC;EAEDsD,oCAAoC,WAAAA,qCAAA,EAAG;IACnC,OAAOtD,SAAS;EACpB,CAAC;EAEDuD,sCAAsC,WAAAA,uCAAA,EAAG;IACrC,OAAOvD,SAAS;EACpB,CAAC;EAEDwD,mCAAmC,WAAAA,oCAAA,EAAG;IAClC,OAAOxD,SAAS;EACpB,CAAC;EAEDyD,uBAAuB,WAAAA,wBAAA,EAAG;IACtB,OAAOzD,SAAS;EACpB,CAAC;EAED0D,kBAAkB,WAAAA,mBAAA,EAAG;IACjB,OAAO1D,SAAS;EACpB,CAAC;EAED2D,8BAA8B,WAAAA,+BAAA,EAAG;IAC7B,OAAO3D,SAAS;EACpB,CAAC;EAED4D,0BAA0B,WAAAA,2BAAA,EAAG;IACzB,OAAO5D,SAAS;EACpB,CAAC;EAED6D,iCAAiC,WAAAA,kCAAA,EAAG;IAChC,OAAO7D,SAAS;EACpB,CAAC;EAED8D,gBAAgB,WAAAA,iBAAA,EAAG;IACf,OAAO9D,SAAS;EACpB,CAAC;EAED+D,eAAe,WAAAA,gBAAA,EAAG;IACd,OAAO/D,SAAS;EACpB,CAAC;EAEDgE,mBAAmB,WAAAA,oBAACC,KAAK,EAAE;IACvB,oBAAO/E,IAAA,CAACX,uBAAuB,EAAA2F,aAAA,KAAKD,KAAK,CAAG,CAAC;EACjD,CAAC;EAEDE,qBAAqB,WAAAA,sBAAA,EAAG;IACpB,OAAOnE,SAAS;EACpB,CAAC;EAEDoE,OAAO,WAAAA,QAACC,GAAG,EAAE;IACT,OAAOA,GAAG;EACd,CAAC;EAEDC,8BAA8B,EAAE;IAC5BC,IAAI,WAAAA,KAACC,QAAgB,EAAEC,KAAa,EAAE;MAClC,OAAOC,OAAO,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9B;EACJ,CAAC;EAEDC,SAAS,WAAAA,UAAA,EAAG;IACR,OAAOpG,aAAa;EACxB,CAAC;EAEDqG,+BAA+B,WAAAA,gCAACZ,KAAK,EAAE;IACnC,oBAAO/E,IAAA,CAACP,gBAAgB,EAAAuF,aAAA,KAAKD,KAAK,CAAG,CAAC;EAC1C,CAAC;EAEDa,eAAe,WAAAA,gBAAA,EAAG;IACd,OAAO9E,SAAS;EACpB,CAAC;EAED+E,mBAAmB,WAAAA,oBAAA,EAAG;IAClB,OAAO,EAAE;EACb,CAAC;EAEDC,iBAAiB,WAAAA,kBAACf,KAAK,EAAE;IACrB,oBAAO/E,IAAA,CAACT,aAAa,EAAAyF,aAAA,KAAKD,KAAK,CAAG,CAAC;EACvC,CAAC;EAEDgB,oBAAoB,WAAAA,qBAAA,EAAG;IACnB,OAAO9F,iBAAiB;EAC5B,CAAC;EAED+F,2BAA2B,WAAAA,4BAAA,EAAG;IAC1B,OAAOR,OAAO,CAACC,OAAO,CAAC,EAAE,CAAC;EAC9B,CAAC;EAEDjG,QAAQ,EAAEA,QAAQ;EAElByG,6BAA6B,WAAAA,8BAAA,EAAG;IAC5B,OAAOvG,WAAW;EACtB,CAAC;EAEDwG,yBAAyB,WAAAA,0BAAA,EAAG;IACxB,OAAOtG,oBAAoB;EAC/B,CAAC;EAEDuG,mBAAmB,WAAAA,oBAAA,EAAG,CAAC;AAC3B,CAAC;AAED,SAASC,sBAAsBA,CAA4BC,CAAI,EAAEC,YAA0B,EAAE;EACzFpG,SAAS,CAACmG,CAAC,CAAC,GAAGC,YAAY;AAC/B;AAEA,OAAO,SAASC,kBAAkBA,CAACC,SAA6B,EAAE;EAC9DC,QAAA,CAAUD,SAAS,EAAE,UAACE,EAAE,EAAEL,CAAC,EAAK;IAC5B,IAAMM,GAAG,GAAGN,CAAoB;IAChCD,sBAAsB,CAACO,GAAG,EAAEH,SAAS,CAACG,GAAG,CAAE,CAAC;EAChD,CAAC,CAAC;AACN;AAEA,eAAe,IAAIC,KAAK,CAAC1G,SAAS,EAAE;EAChC2G,GAAG,EAAE,SAAAA,IAAA,EAAM;IACP,MAAM,IAAIC,KAAK,CAAC,oEAAoE,CAAC;EACzF;AACJ,CAAC,CAAC;AAEF,OAAO,SAASC,YAAYA,CAAA,EAAG;EAC3B,IAAMC,GAAG,GAAG9G,SAAS,CAACqE,uBAAuB,CAAC;IAC1C0C,QAAQ,EAAE,SAAAA,SAAA,EAAM,CAAC,CAAC;IAClBC,KAAK,EAAE;MAACC,EAAE,EAAE,GAAG;MAAEC,IAAI,EAAE;IAAK;EAChC,CAAC,CAAC;EACF,OAAOC,OAAO,CAACL,GAAG,CAAC;AACvB"}
1
+ {"version":3,"names":["React","AppNavigationPageLayout","defaultAclApi","SupportComponent","YTUserSuggest","docsUrls","YTSubjectSuggest","RoleActions","OperationDetailMonitorLinks","PERMISSIONS_SETTINGS","uiSettings","YT","jsx","_jsx","experimentalPages","uiFactory","getClusterAppearance","cluster","_YT$clusters","clusters","urls","isWatchMen","makeUrlForUserName","_ref","login","concat","makeUrlForTransferTask","undefined","makeUrlForNodeIO","makeUrlForTabletCellBundleDashboard","makeUrlForMonitoringDescriptor","makeUrlForUserDashboard","getExtaClusterPages","getExtraRootPages","getExtraReducersAndUrlMapping","getSchedulingExtraTabs","_uiSettings$schedulin","schedulingMonitoring","urlTemplate","_uiSettings$schedulin2","_uiSettings$schedulin3","title","name","getMonitoringForAccounts","_uiSettings$accountsM","accountsMonitoring","_uiSettings$accountsM2","getMonitoringForBundle","_uiSettings$bundlesMo","bundlesMonitoring","_uiSettings$bundlesMo2","getMonitoringForOperation","params","_uiSettings$operation","_params$pools","operationsMonitoring","_uiSettings$operation2","hasPoolParameter","indexOf","pools","length","component","getMonitorComponentForJob","getMonitoringComponentForChyt","_uiSettings$chytMonit","_ref2","chytMonitoring","getStatisticsComponentForAccount","getStatisticsComponentForBundle","renderNavigationExtraActions","renderSchedulingLastDayMaximum","renderComponentsNodeCardTop","getExtraMetaTableItemsForComponentsNode","getExtraMetaTableItemsForPool","getExtraMetaTableItemsForBundle","getComponentsNodeDashboardUrl","renderTransferQuotaNoticeForPool","renderTransferQuotaNoticeForAccount","renderTopRowExtraControlsForAccount","renderTopRowExtraControlsForPool","renderTopRowExtraControlsForBundle","renderAccountsTableItemExtraControls","renderSchedulingTableItemExtraControls","renderBundlesTableItemExtraControls","renderControlAbcService","makeSupportContent","_x","makeContent","reportBugUrl","getComponentForConsumerMetrics","getComonentForQueueMetrics","renderTableCellBundleEditorNotice","getNodeDeployUrl","getNodeNannyUrl","renderAppNavigation","props","_objectSpread","createNotificationUrl","wrapApp","app","externalSchemaDescriptionSetup","load","_cluster","_path","Promise","resolve","getAclApi","renderAclSubjectsSuggestControl","renderRolesLink","getExternalSettings","renderUserSuggest","getExperimentalPages","getAllowedExperimentalPages","getComponentForAclRoleActions","getAclPermissionsSettings","onChytAliasSqlClick","configureUIFactoryItem","k","redefinition","configureUIFactory","overrides","_forEach","_v","key","Proxy","set","Error","isAbcAllowed","abc","onChange","value","id","slug","Boolean"],"sources":["UIFactory.tsx"],"sourcesContent":["import {SVGIconData} from '@gravity-ui/uikit/build/esm/components/Icon/types';\nimport {MetaTableItem} from './components/MetaTable/MetaTable';\nimport _ from 'lodash';\nimport React from 'react';\nimport {Reducer} from 'redux';\nimport {PathParameters} from './store/location';\nimport {TabletBundle} from './store/reducers/tablet_cell_bundles';\nimport {PoolInfo} from './store/selectors/scheduling/scheduling-pools';\nimport {ClusterConfig, ClusterUiConfig} from '../shared/yt-types';\nimport {ClusterAppearance} from './appearance';\nimport AppNavigationPageLayout, {\n AppNavigationProps,\n} from './containers/AppNavigation/AppNavigationPageLayout';\nimport {ExternalSchemaDescription} from './pages/navigation/tabs/Schema/ExternalDescription/ExternalDescription';\nimport {AclApi, defaultAclApi} from './utils/acl/external-acl-api';\nimport {SubjectsControlProps} from './components/ACL/SubjectsControl/SubjectsControl';\nimport {SettingsPage} from './containers/SettingsPanel/settings-description';\nimport {SupportComponent} from './containers/SupportComponent/SupportComponent';\nimport {UserSuggestProps} from './containers/UserSuggest/UserSuggest';\nimport {YTUserSuggest} from './containers/UserSuggest/YTUserSuggest';\nimport {DocsUrls, docsUrls} from './constants/docsUrls';\nimport {YTSubjectSuggest} from './components/ACL/SubjectsControl/YTSubjectSuggest';\nimport RoleActions, {Props as RoleActionsProps} from './components/ACL/RoleActions';\nimport OperationDetailMonitorLinks from './pages/operations/OperationDetail/tabs/monitor/OperationDetailsMonitorLinks';\nimport {PERMISSIONS_SETTINGS} from './constants/acl';\nimport {uiSettings} from './config/ui-settings';\nimport YT from './config/yt-config';\n\ntype HeaderItemOrPage =\n | {\n href: string;\n\n pageId?: undefined;\n reactComponent?: undefined;\n reducers?: undefined;\n urlMapping?: undefined;\n }\n | {\n pageId?: string;\n reactComponent?: React.ComponentType<any>; // used as component for <Route ... component={reactComponent} />\n reducers?: Record<string, Reducer>;\n urlMapping?: Record<string, PathParameters>;\n\n href?: undefined;\n };\n\nexport type UIFactoryRootPageInfo = HeaderItemOrPage & {\n title: string;\n getVisible?: () => Promise<boolean>;\n};\n\nexport interface UIFactoryClusterPageInfo {\n title: string;\n pageId: string; // also used as urlMatch for <Route path={`/:cluster/${pageId}`} ... />\n svgIcon?: SVGIconData;\n reducers?: Record<string, Reducer>;\n reactComponent: React.ComponentType<any>; // used as component for <Route ... component={reactComponent} />\n topRowComponent?: React.ComponentType<any>; // used as component for <Route ... component={topRowComponent} />\n urlMapping?: Record<string, PathParameters>;\n}\n\nexport interface ExternalSchemaDescriptionResponse {\n url?: string;\n externalSchema?: Map<string, ExternalSchemaDescription>;\n}\n\nexport interface ReducersAndUrlMapping {\n reducers?: Record<string, Reducer>;\n urlMapping?: Record<string, PathParameters>;\n}\n\nexport interface SchedulingExtraTab {\n name: string;\n title?: string;\n component?: React.ComponentType<any>;\n /**\n * Allows to redefine link of corresponding tab\n * Example: https://grafana.mydomain.com?var-pool={ytPool}&var-tree={ytPoolTree}&var-cluster={ytCluster}\n */\n urlTemplate?: string;\n}\n\nexport interface OperationMonitoringTabProps {\n cluster: string;\n operation: {\n id: string;\n startTime?: string;\n finishTime?: string;\n pools?: Array<{pool: string; tree: string; slotIndex?: number}>;\n };\n}\n\nexport interface UIFactory {\n getClusterAppearance(cluster?: string): undefined | ClusterAppearance;\n\n isWatchMen(login: string): boolean;\n\n makeUrlForUserName({cluster, login}: {cluster: string; login: string}): string | undefined;\n makeUrlForTransferTask(operation: unknown): string | undefined;\n makeUrlForNodeIO(cluster: string, host?: string): string | undefined;\n makeUrlForTabletCellBundleDashboard(cluster: string, bundle: string): string | undefined;\n makeUrlForMonitoringDescriptor(\n cluster: string,\n timeRange: {from: string; to?: string},\n monitoring_descriptor?: string,\n ): string | undefined;\n makeUrlForUserDashboard(cluster: string, user: string): string | undefined;\n\n getExtaClusterPages(): Array<UIFactoryClusterPageInfo>;\n getExtraRootPages(): Array<UIFactoryRootPageInfo>;\n\n getExtraReducersAndUrlMapping(): undefined | ReducersAndUrlMapping;\n getSchedulingExtraTabs(params: {\n cluster: string;\n pool: string;\n tree: string;\n extraOptions: {\n isRoot?: boolean;\n isEphemeral?: boolean | undefined;\n };\n }): Array<SchedulingExtraTab>;\n\n getMonitoringForAccounts():\n | undefined\n | {\n component: React.ComponentType<{cluster: string; account: string}>;\n urlTemplate?: undefined;\n title?: undefined;\n }\n | {urlTemplate: string; title?: string; component?: undefined};\n getMonitoringForBundle():\n | undefined\n | {\n component: React.ComponentType<{\n cluster: string;\n tablet_cell_bundle: string;\n bundleData: any;\n }>;\n urlTemplate?: undefined;\n title?: undefined;\n }\n | {urlTemplate: string; title?: string; component?: undefined};\n getMonitoringForOperation(params: OperationMonitoringTabProps['operation']):\n | undefined\n | {\n component: React.ComponentType<OperationMonitoringTabProps>;\n urlTemplate?: undefined;\n title?: undefined;\n }\n | {urlTemplate: string; title?: string; component?: undefined};\n getMonitorComponentForJob():\n | undefined\n | React.ComponentType<{\n cluster: string;\n job_descriptor: string;\n from?: number;\n to?: number;\n }>;\n\n getMonitoringComponentForChyt():\n | undefined\n | {\n component?: React.ComponentType<{cluster: string; alias: string}>;\n urlTemplate?: string;\n title?: string;\n };\n\n getStatisticsComponentForAccount():\n | undefined\n | React.ComponentType<{\n cluster: string;\n account: string;\n accountSubtreeAllNames: Array<string>;\n theme: string;\n }>;\n\n getStatisticsComponentForBundle():\n | undefined\n | React.ComponentType<{cluster: string; bundle: string; theme: string}>;\n\n renderNavigationExtraActions(params: {\n className?: string;\n cluster: string;\n path: string;\n type: string;\n attributes: unknown;\n }): React.ReactNode;\n\n renderSchedulingLastDayMaximum(props: {\n className?: string;\n cluster: string;\n tree: string;\n title?: string;\n sensor: 'max_operation_count' | 'max_running_operation_count';\n format?(sensorValue?: number): string;\n current?: {value: string; title: string};\n showHint?: boolean;\n showAsLink?: boolean;\n }): React.ReactNode;\n\n renderComponentsNodeCardTop(props: {\n className?: string;\n clusterConfig: ClusterConfig;\n host: string;\n physicalHost: string;\n }): React.ReactNode;\n\n getComponentsNodeDashboardUrl(props: {cluster: string; host: string}): {\n url?: string;\n title?: string;\n };\n\n renderTransferQuotaNoticeForPool(props: {\n className?: string;\n pool?: PoolInfo;\n parentPool?: PoolInfo;\n clusterUiConfig?: ClusterUiConfig;\n isTopLevel?: boolean;\n }): React.ReactNode;\n\n renderTransferQuotaNoticeForAccount(props: {\n className?: string;\n isTopLevel?: boolean;\n accountAttributes?: unknown;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n renderTopRowExtraControlsForAccount(props: {\n className?: string;\n accountAttributes?: unknown;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n renderTopRowExtraControlsForPool(props: {\n itemClassName?: string;\n pool?: unknown;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n renderTopRowExtraControlsForBundle(props: {\n itemClassName?: string;\n bundle?: TabletBundle;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n getExtraMetaTableItemsForComponentsNode(props: {\n clusterConfig: ClusterConfig;\n host: string;\n physicalHost: string;\n }): undefined | Array<MetaTableItem>;\n\n getExtraMetaTableItemsForPool(props: {\n pool: PoolInfo;\n clusterUiConfig?: ClusterUiConfig;\n }): undefined | Array<MetaTableItem>;\n\n getExtraMetaTableItemsForBundle(props: {\n bundle: TabletBundle;\n clusterUiConfig: ClusterUiConfig;\n }): undefined | Array<MetaTableItem>;\n\n renderAccountsTableItemExtraControls(props: {\n itemClassName?: string;\n cluster: string;\n account: string;\n accountAttributes?: unknown;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n renderSchedulingTableItemExtraControls(props: {\n itemClassName?: string;\n cluster: string;\n pool: unknown;\n clusterUiConfig: ClusterUiConfig;\n }): React.ReactNode;\n\n renderBundlesTableItemExtraControls(props: {\n itemClassName?: string;\n bundle?: TabletBundle;\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n renderControlAbcService<T extends {slug: string; id?: number}>(props: {\n className?: string;\n value?: T;\n onChange: (v?: T) => void;\n placeholder?: string;\n disabled?: boolean;\n }): React.ReactNode;\n\n makeSupportContent(\n params: {login: string; cluster?: string; buttonToWrap?: React.ReactNode},\n makeContent: (params: {\n supportContent?: React.ReactNode;\n onSupportClick: () => void;\n }) => React.ReactNode,\n ): React.ReactNode;\n\n getComponentForConsumerMetrics():\n | undefined\n | React.ComponentType<{\n cluster: string;\n path: string;\n targetQueue?: string;\n }>;\n\n getComonentForQueueMetrics(): undefined | React.ComponentType<{cluster: string; path: string}>;\n\n renderTableCellBundleEditorNotice(props: {\n bundleData?: {$attributes: unknown};\n clusterUiConfig?: ClusterUiConfig;\n }): React.ReactNode;\n\n getNodeDeployUrl(ypCluster?: string, podId?: string): string | undefined;\n getNodeNannyUrl(params: {\n pod_id?: string;\n nanny_service?: string;\n yp_cluster?: string;\n }): string | undefined;\n\n renderAppNavigation(props: AppNavigationProps): React.ReactElement;\n\n createNotificationUrl(clusterConfig?: ClusterConfig): string | undefined;\n\n wrapApp(app: React.ReactElement): React.ReactElement;\n\n externalSchemaDescriptionSetup: {\n columns?: Record<keyof ExternalSchemaDescription['glossaryEntity'], string>;\n load(cluster: string, path: string): Promise<ExternalSchemaDescriptionResponse>;\n };\n\n getAclApi(): AclApi;\n\n renderAclSubjectsSuggestControl(props: SubjectsControlProps): React.ReactNode;\n\n renderRolesLink(params: {cluster: string; login: string; className?: string}): React.ReactNode;\n\n getExternalSettings(params: {\n cluster: string;\n login: string;\n isAdmin: boolean;\n }): Array<SettingsPage>;\n\n renderUserSuggest(props: UserSuggestProps): React.ReactNode;\n\n yqlWidgetSetup?: {\n renderButton(props: {className?: string; isSplit?: string}): React.ReactNode;\n renderWidget(props: {cluster: string; path: string; attributes: unknown}): React.ReactNode;\n renderYqlOperationLink(yqlOperationId: string): React.ReactNode;\n };\n\n getExperimentalPages(): string[];\n getAllowedExperimentalPages(login: string): Promise<Array<string>>;\n\n docsUrls: DocsUrls;\n\n getComponentForAclRoleActions(): undefined | React.ComponentType<RoleActionsProps>;\n\n getAclPermissionsSettings(): typeof PERMISSIONS_SETTINGS;\n\n onChytAliasSqlClick(params: {alias: string; cluster: string}): void;\n}\n\nconst experimentalPages: string[] = [];\n\nconst uiFactory: UIFactory = {\n getClusterAppearance(cluster) {\n return YT.clusters[cluster!]?.urls;\n },\n isWatchMen() {\n return false;\n },\n makeUrlForUserName({cluster, login}: {cluster?: string; login: string}) {\n return `/${cluster}/users?filter=${login}`;\n },\n makeUrlForTransferTask() {\n return undefined;\n },\n makeUrlForNodeIO() {\n return undefined;\n },\n makeUrlForTabletCellBundleDashboard() {\n return undefined;\n },\n makeUrlForMonitoringDescriptor() {\n return undefined;\n },\n makeUrlForUserDashboard() {\n return undefined;\n },\n\n getExtaClusterPages() {\n return [];\n },\n getExtraRootPages() {\n return [];\n },\n\n getExtraReducersAndUrlMapping() {\n return undefined;\n },\n\n getSchedulingExtraTabs() {\n if (!uiSettings.schedulingMonitoring?.urlTemplate) {\n return [];\n }\n\n const {urlTemplate, title = 'Monitoring'} = uiSettings.schedulingMonitoring;\n\n return [\n {\n name: 'monitoring',\n title,\n urlTemplate,\n },\n ];\n },\n getMonitoringForAccounts() {\n if (!uiSettings?.accountsMonitoring?.urlTemplate) {\n return undefined;\n }\n\n const {urlTemplate, title} = uiSettings.accountsMonitoring;\n return {urlTemplate, title};\n },\n getMonitoringForBundle() {\n if (!uiSettings.bundlesMonitoring?.urlTemplate) {\n return undefined;\n }\n\n const {urlTemplate, title} = uiSettings.bundlesMonitoring;\n return {urlTemplate, title};\n },\n getMonitoringForOperation(params) {\n if (!uiSettings.operationsMonitoring?.urlTemplate) {\n return undefined;\n }\n\n const {urlTemplate, title} = uiSettings.operationsMonitoring;\n\n const hasPoolParameter =\n urlTemplate.indexOf('{ytPool}') !== -1 || urlTemplate.indexOf('{ytPoolTree}') !== -1;\n\n if (hasPoolParameter && params.pools?.length! > 1) {\n return {component: OperationDetailMonitorLinks};\n }\n\n return {urlTemplate, title};\n },\n getMonitorComponentForJob() {\n return undefined;\n },\n getMonitoringComponentForChyt() {\n const {urlTemplate, title} = uiSettings.chytMonitoring ?? {};\n if (!urlTemplate) {\n return undefined;\n }\n\n return {urlTemplate, title};\n },\n getStatisticsComponentForAccount() {\n return undefined;\n },\n getStatisticsComponentForBundle() {\n return undefined;\n },\n\n renderNavigationExtraActions() {\n return null;\n },\n\n renderSchedulingLastDayMaximum() {\n return undefined;\n },\n\n renderComponentsNodeCardTop() {\n return undefined;\n },\n\n getExtraMetaTableItemsForComponentsNode() {\n return undefined;\n },\n\n getExtraMetaTableItemsForPool() {\n return undefined;\n },\n\n getExtraMetaTableItemsForBundle() {\n return undefined;\n },\n\n getComponentsNodeDashboardUrl() {\n return {};\n },\n\n renderTransferQuotaNoticeForPool() {\n return undefined;\n },\n\n renderTransferQuotaNoticeForAccount() {\n return undefined;\n },\n\n renderTopRowExtraControlsForAccount() {\n return undefined;\n },\n\n renderTopRowExtraControlsForPool() {\n return undefined;\n },\n\n renderTopRowExtraControlsForBundle() {\n return undefined;\n },\n\n renderAccountsTableItemExtraControls() {\n return undefined;\n },\n\n renderSchedulingTableItemExtraControls() {\n return undefined;\n },\n\n renderBundlesTableItemExtraControls() {\n return undefined;\n },\n\n renderControlAbcService() {\n return undefined;\n },\n\n makeSupportContent(_x, makeContent) {\n const {reportBugUrl} = uiSettings;\n if (!reportBugUrl) {\n return undefined;\n }\n\n return <SupportComponent makeContent={makeContent} />;\n },\n\n getComponentForConsumerMetrics() {\n return undefined;\n },\n\n getComonentForQueueMetrics() {\n return undefined;\n },\n\n renderTableCellBundleEditorNotice() {\n return undefined;\n },\n\n getNodeDeployUrl() {\n return undefined;\n },\n\n getNodeNannyUrl() {\n return undefined;\n },\n\n renderAppNavigation(props) {\n return <AppNavigationPageLayout {...props} />;\n },\n\n createNotificationUrl() {\n return undefined;\n },\n\n wrapApp(app) {\n return app;\n },\n\n externalSchemaDescriptionSetup: {\n load(_cluster: string, _path: string) {\n return Promise.resolve({});\n },\n },\n\n getAclApi() {\n return defaultAclApi;\n },\n\n renderAclSubjectsSuggestControl(props) {\n return <YTSubjectSuggest {...props} />;\n },\n\n renderRolesLink() {\n return undefined;\n },\n\n getExternalSettings() {\n return [];\n },\n\n renderUserSuggest(props) {\n return <YTUserSuggest {...props} />;\n },\n\n getExperimentalPages() {\n return experimentalPages;\n },\n\n getAllowedExperimentalPages() {\n return Promise.resolve([]);\n },\n\n docsUrls: docsUrls,\n\n getComponentForAclRoleActions() {\n return RoleActions;\n },\n\n getAclPermissionsSettings() {\n return PERMISSIONS_SETTINGS;\n },\n\n onChytAliasSqlClick() {},\n};\n\nfunction configureUIFactoryItem<K extends keyof UIFactory>(k: K, redefinition: UIFactory[K]) {\n uiFactory[k] = redefinition;\n}\n\nexport function configureUIFactory(overrides: Partial<UIFactory>) {\n _.forEach(overrides, (_v, k) => {\n const key = k as keyof UIFactory;\n configureUIFactoryItem(key, overrides[key]!);\n });\n}\n\nexport default new Proxy(uiFactory, {\n set: () => {\n throw new Error('Use configureUIFactory(...) method instead of direct modifications');\n },\n});\n\nexport function isAbcAllowed() {\n const abc = uiFactory.renderControlAbcService({\n onChange: () => {},\n value: {id: 123, slug: '123'},\n });\n return Boolean(abc);\n}\n"],"mappings":"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"}
@@ -22,7 +22,7 @@ var provider = {
22
22
  settings[path] = hammer.storage.read(entry);
23
23
  }
24
24
  });
25
- return Promise.resolve(settings);
25
+ return settings;
26
26
  },
27
27
  create: function create() {
28
28
  return Promise.resolve();
@@ -1 +1 @@
1
- {"version":3,"names":["hammer","LOCAL_PATH","provider","get","username","path","settingPath","Promise","resolve","storage","read","set","value","write","remove","getAll","settings","settingSubpath","keys","forEach","entry","indexOf","substring","length","create"],"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,OAAOA,MAAM,MAAM,WAAW;AAG9B,IAAMC,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,CAACR,MAAM,CAACS,OAAO,CAACC,IAAI,CAACJ,WAAW,CAAC,CAAC;EAC5D,CAAC;EAEDK,GAAG,WAAAA,IAAIP,QAAgB,EAAEC,IAAY,EAAEO,KAAQ,EAAE;IAC7C,IAAMN,WAAW,GAAGL,UAAU,GAAG,GAAG,GAAGG,QAAQ,GAAG,GAAG,GAAGC,IAAI;IAC5D,OAAOE,OAAO,CAACC,OAAO,CAACR,MAAM,CAACS,OAAO,CAACI,KAAK,CAACP,WAAW,EAAEM,KAAK,CAAC,CAAC;EACpE,CAAC;EAEDE,MAAM,WAAAA,OAACV,QAAgB,EAAEC,IAAY,EAAE;IACnC,IAAMC,WAAW,GAAGL,UAAU,GAAG,GAAG,GAAGG,QAAQ,GAAG,GAAG,GAAGC,IAAI;IAC5D,OAAOE,OAAO,CAACC,OAAO,CAACR,MAAM,CAACS,OAAO,CAACK,MAAM,CAACR,WAAW,CAAC,CAAC;EAC9D,CAAC;EAEDS,MAAM,WAAAA,OAAIX,QAAgB,EAAE;IACxB,IAAMY,QAAa,GAAG,CAAC,CAAC;IACxB,IAAMC,cAAc,GAAGhB,UAAU,GAAG,GAAG,GAAGG,QAAQ,GAAG,GAAG;IAExDJ,MAAM,CAACS,OAAO,CAACS,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,UAAUC,KAAa,EAAE;MACnD,IAAIA,KAAK,CAACC,OAAO,CAACJ,cAAc,CAAC,KAAK,CAAC,EAAE;QACrC,IAAMZ,IAAI,GAAGe,KAAK,CAACE,SAAS,CAACL,cAAc,CAACM,MAAM,CAAC;QACnDP,QAAQ,CAACX,IAAI,CAAC,GAAGL,MAAM,CAACS,OAAO,CAACC,IAAI,CAACU,KAAK,CAAC;MAC/C;IACJ,CAAC,CAAC;IAEF,OAAOb,OAAO,CAACC,OAAO,CAACQ,QAAa,CAAC;EACzC,CAAC;EACDQ,MAAM,WAAAA,OAAA,EAAG;IACL,OAAOjB,OAAO,CAACC,OAAO,CAAC,CAAC;EAC5B;AACJ,CAAC;AAED,eAAeN,QAAQ"}
1
+ {"version":3,"names":["hammer","LOCAL_PATH","provider","get","username","path","settingPath","Promise","resolve","storage","read","set","value","write","remove","getAll","settings","settingSubpath","keys","forEach","entry","indexOf","substring","length","create"],"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,OAAOA,MAAM,MAAM,WAAW;AAG9B,IAAMC,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,CAACR,MAAM,CAACS,OAAO,CAACC,IAAI,CAACJ,WAAW,CAAC,CAAC;EAC5D,CAAC;EAEDK,GAAG,WAAAA,IAAIP,QAAgB,EAAEC,IAAY,EAAEO,KAAQ,EAAE;IAC7C,IAAMN,WAAW,GAAGL,UAAU,GAAG,GAAG,GAAGG,QAAQ,GAAG,GAAG,GAAGC,IAAI;IAC5D,OAAOE,OAAO,CAACC,OAAO,CAACR,MAAM,CAACS,OAAO,CAACI,KAAK,CAACP,WAAW,EAAEM,KAAK,CAAC,CAAC;EACpE,CAAC;EAEDE,MAAM,WAAAA,OAACV,QAAgB,EAAEC,IAAY,EAAE;IACnC,IAAMC,WAAW,GAAGL,UAAU,GAAG,GAAG,GAAGG,QAAQ,GAAG,GAAG,GAAGC,IAAI;IAC5D,OAAOE,OAAO,CAACC,OAAO,CAACR,MAAM,CAACS,OAAO,CAACK,MAAM,CAACR,WAAW,CAAC,CAAC;EAC9D,CAAC;EAEDS,MAAM,WAAAA,OAAIX,QAAgB,EAAE;IACxB,IAAMY,QAAa,GAAG,CAAC,CAAC;IACxB,IAAMC,cAAc,GAAGhB,UAAU,GAAG,GAAG,GAAGG,QAAQ,GAAG,GAAG;IAExDJ,MAAM,CAACS,OAAO,CAACS,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,UAAUC,KAAa,EAAE;MACnD,IAAIA,KAAK,CAACC,OAAO,CAACJ,cAAc,CAAC,KAAK,CAAC,EAAE;QACrC,IAAMZ,IAAI,GAAGe,KAAK,CAACE,SAAS,CAACL,cAAc,CAACM,MAAM,CAAC;QACnDP,QAAQ,CAACX,IAAI,CAAC,GAAGL,MAAM,CAACS,OAAO,CAACC,IAAI,CAACU,KAAK,CAAC;MAC/C;IACJ,CAAC,CAAC;IAEF,OAAOJ,QAAQ;EACnB,CAAC;EACDQ,MAAM,WAAAA,OAAA,EAAG;IACL,OAAOjB,OAAO,CAACC,OAAO,CAAC,CAAC;EAC5B;AACJ,CAAC;AAED,eAAeN,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","yt","api","method","username","path","data","request","url","headers","JSON","stringify","then","response","error","Promise","reject","code","message","codes","NODE_DOES_NOT_EXIST","undefined","provider","get","set","value","remove","getAll","create"],"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,OAAOA,KAAK,MAAM,OAAO;;AAEzB;AACA,OAAOC,EAAE,MAAM,qCAAqC;AAIpD,SAASC,GAAGA,CAAIC,MAAc,EAAEC,QAAgB,EAAEC,IAAY,EAAEC,IAAc,EAAE;EAC5E,OAAON,KAAK,CACPO,OAAO,CAAgB;IACpBJ,MAAM,EAAEA,MAAM;IACdK,GAAG,EAAE,gBAAgB,GAAGJ,QAAQ,GAAGC,IAAI;IACvCI,OAAO,EAAE;MACL,cAAc,EAAE;IACpB,CAAC;IACDH,IAAI,EAAEI,IAAI,CAACC,SAAS,CAACL,IAAI;EAC7B,CAAC,CAAC,CACDM,IAAI,CAAC,UAACC,QAAQ,EAAK;IAChB,OAAOA,QAAQ,CAACP,IAAI;EACxB,CAAC,CAAC,SACI,CAAC,UAACQ,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,IAAOZ,IAAI,GAAIQ,KAAK,CAACD,QAAQ,CAAtBP,IAAI;IACX,IAAIA,IAAI,CAACW,IAAI,KAAKhB,EAAE,CAACkB,KAAK,CAACC,mBAAmB,EAAE;MAC5C,OAAOC,SAAS;IACpB;IAEA,OAAON,OAAO,CAACC,MAAM,CAACV,IAAI,CAAC;EAC/B,CAAC,CAAC;AACV;AAEA,IAAMgB,QAA0B,GAAG;EAC/BC,GAAG,WAAAA,IAAInB,QAAgB,EAAEC,IAAY,EAAE;IACnC,OAAOH,GAAG,CAAI,KAAK,EAAEE,QAAQ,EAAE,GAAG,GAAGC,IAAI,CAAC;EAC9C,CAAC;EACDmB,GAAG,WAAAA,IAAIpB,QAAgB,EAAEC,IAAY,EAAEoB,KAAQ,EAAE;IAC7C,IAAIA,KAAK,KAAKJ,SAAS,EAAE;MACrB;AACZ;AACA;AACA;AACA;MACY,OAAOC,QAAQ,CAACI,MAAM,CAACtB,QAAQ,EAAEC,IAAI,CAAC;IAC1C;IACA,OAAOH,GAAG,CAAC,KAAK,EAAEE,QAAQ,EAAE,GAAG,GAAGC,IAAI,EAAE;MAACoB,KAAK,EAALA;IAAK,CAAC,CAAC;EACpD,CAAC;EACDC,MAAM,WAAAA,OAACtB,QAAgB,EAAEC,IAAY,EAAE;IACnC,OAAOH,GAAG,CAAC,QAAQ,EAAEE,QAAQ,EAAE,GAAG,GAAGC,IAAI,CAAC;EAC9C,CAAC;EACDsB,MAAM,WAAAA,OAAIvB,QAAgB,EAAE;IACxB,OAAOF,GAAG,CAAI,KAAK,EAAEE,QAAQ,EAAE,GAAG,CAAC;EACvC,CAAC;EACDwB,MAAM,WAAAA,OAACxB,QAAgB,EAAE;IACrB,OAAOF,GAAG,CAAC,MAAM,EAAEE,QAAQ,EAAE,GAAG,CAAC;EACrC;AACJ,CAAC;AAUD,eAAekB,QAAQ"}
1
+ {"version":3,"names":["axios","yt","api","method","username","path","data","request","url","headers","JSON","stringify","then","response","error","Promise","reject","code","message","codes","NODE_DOES_NOT_EXIST","undefined","provider","get","set","value","remove","getAll","create"],"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,OAAOA,KAAK,MAAM,OAAO;;AAEzB;AACA,OAAOC,EAAE,MAAM,qCAAqC;AAKpD,SAASC,GAAGA,CAAIC,MAAc,EAAEC,QAAgB,EAAEC,IAAY,EAAEC,IAAc,EAAE;EAC5E,OAAON,KAAK,CACPO,OAAO,CAAgB;IACpBJ,MAAM,EAAEA,MAAM;IACdK,GAAG,EAAE,gBAAgB,GAAGJ,QAAQ,GAAGC,IAAI;IACvCI,OAAO,EAAE;MACL,cAAc,EAAE;IACpB,CAAC;IACDH,IAAI,EAAEI,IAAI,CAACC,SAAS,CAACL,IAAI;EAC7B,CAAC,CAAC,CACDM,IAAI,CAAC,UAACC,QAAQ,EAAK;IAChB,OAAOA,QAAQ,CAACP,IAAI;EACxB,CAAC,CAAC,SACI,CAAC,UAACQ,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,IAAOZ,IAAI,GAAIQ,KAAK,CAACD,QAAQ,CAAtBP,IAAI;IACX,IAAIA,IAAI,CAACW,IAAI,KAAKhB,EAAE,CAACkB,KAAK,CAACC,mBAAmB,EAAE;MAC5C,OAAOC,SAAS;IACpB;IAEA,OAAON,OAAO,CAACC,MAAM,CAACV,IAAI,CAAC;EAC/B,CAAC,CAAC;AACV;AAEA,IAAMgB,QAA0B,GAAG;EAC/BC,GAAG,WAAAA,IAAInB,QAAgB,EAAEC,IAAY,EAAE;IACnC,OAAOH,GAAG,CAAI,KAAK,EAAEE,QAAQ,EAAE,GAAG,GAAGC,IAAI,CAAC;EAC9C,CAAC;EACDmB,GAAG,WAAAA,IAAIpB,QAAgB,EAAEC,IAAY,EAAEoB,KAAQ,EAAE;IAC7C,IAAIA,KAAK,KAAKJ,SAAS,EAAE;MACrB;AACZ;AACA;AACA;AACA;MACY,OAAOC,QAAQ,CAACI,MAAM,CAACtB,QAAQ,EAAEC,IAAI,CAAC;IAC1C;IACA,OAAOH,GAAG,CAAC,KAAK,EAAEE,QAAQ,EAAE,GAAG,GAAGC,IAAI,EAAE;MAACoB,KAAK,EAALA;IAAK,CAAC,CAAC;EACpD,CAAC;EACDC,MAAM,WAAAA,OAACtB,QAAgB,EAAEC,IAAY,EAAE;IACnC,OAAOH,GAAG,CAAC,QAAQ,EAAEE,QAAQ,EAAE,GAAG,GAAGC,IAAI,CAAC;EAC9C,CAAC;EACDsB,MAAM,WAAAA,OAAIvB,QAAgB,EAAE;IACxB,OAAOF,GAAG,CAAI,KAAK,EAAEE,QAAQ,EAAE,GAAG,CAAC;EACvC,CAAC;EACDwB,MAAM,WAAAA,OAACxB,QAAgB,EAAE;IACrB,OAAOF,GAAG,CAAC,MAAM,EAAEE,QAAQ,EAAE,GAAG,CAAC;EACrC;AACJ,CAAC;AAUD,eAAekB,QAAQ"}
@@ -11,11 +11,13 @@ export function Support(_ref) {
11
11
  var children = _ref.children;
12
12
  var login = useSelector(getCurrentUserName);
13
13
  var cluster = useSelector(getCluster);
14
- var makeContent = React.useCallback(function (onSupportClick) {
15
- return /*#__PURE__*/_jsx("div", {
14
+ var makeContent = React.useCallback(function (_ref2) {
15
+ var supportContent = _ref2.supportContent,
16
+ onSupportClick = _ref2.onSupportClick;
17
+ return /*#__PURE__*/_jsxs("div", {
16
18
  className: b(),
17
19
  onClick: onSupportClick,
18
- children: children || /*#__PURE__*/_jsxs("div", {
20
+ children: [supportContent, children || /*#__PURE__*/_jsxs("div", {
19
21
  className: b('toggler'),
20
22
  children: [/*#__PURE__*/_jsxs("svg", {
21
23
  xmlns: "http://www.w3.org/2000/svg",
@@ -49,7 +51,7 @@ export function Support(_ref) {
49
51
  }), /*#__PURE__*/_jsx("span", {
50
52
  className: b('toggler-moo')
51
53
  })]
52
- })
54
+ })]
53
55
  });
54
56
  }, [children]);
55
57
  return UIFactory.makeSupportContent({
@@ -1 +1 @@
1
- {"version":3,"names":["React","cn","UIFactory","getCluster","getCurrentUserName","useSelector","jsx","_jsx","jsxs","_jsxs","b","Support","_ref","children","login","cluster","makeContent","useCallback","onSupportClick","className","onClick","xmlns","width","height","viewBox","id","x1","x2","y1","y2","offset","stopColor","d","fill","strokeWidth","stroke","makeSupportContent"],"sources":["Support.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'bem-cn-lite';\nimport _ from 'lodash';\n\nimport './Support.scss';\nimport UIFactory from '../../UIFactory';\nimport {getCluster, getCurrentUserName} from '../../store/selectors/global';\nimport {useSelector} from 'react-redux';\n\ninterface SupportProps {\n children?: React.ReactNode;\n}\n\nconst b = cn('support-form');\n\nexport function Support({children}: SupportProps) {\n const login = useSelector(getCurrentUserName);\n const cluster = useSelector(getCluster);\n\n const makeContent = React.useCallback(\n (onSupportClick: () => void) => (\n <div className={b()} onClick={onSupportClick}>\n {children || (\n <div className={b('toggler')}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"45\"\n height=\"32\"\n viewBox=\"0 0 45 32\"\n >\n <defs>\n <linearGradient id=\"moo_bg\" x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n <stop className=\"moo-bg__start\" offset=\"0%\" stopColor=\"#fff\" />\n <stop className=\"moo-bg__stop\" offset=\"100%\" stopColor=\"#eee\" />\n </linearGradient>\n </defs>\n <path\n className={b('toggler-back')}\n d=\"M-0.5 0h36l8 16l-8 16.5h-36z\"\n fill=\"url(#moo_bg)\"\n strokeWidth=\"1\"\n stroke=\"rgba(0,0,0,0.25)\"\n />\n </svg>\n <span className={b('toggler-moo')} />\n </div>\n )}\n </div>\n ),\n [children],\n );\n\n return UIFactory.makeSupportContent({login, cluster}, makeContent) || null;\n}\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,EAAE,MAAM,aAAa;AAG5B,OAAO,eAAgB;AACvB,OAAOC,SAAS,MAAM,iBAAiB;AACvC,SAAQC,UAAU,EAAEC,kBAAkB,QAAO,8BAA8B;AAC3E,SAAQC,WAAW,QAAO,aAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAMxC,IAAMC,CAAC,GAAGT,EAAE,CAAC,cAAc,CAAC;AAE5B,OAAO,SAASU,OAAOA,CAAAC,IAAA,EAA2B;EAAA,IAAzBC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;EAC7B,IAAMC,KAAK,GAAGT,WAAW,CAACD,kBAAkB,CAAC;EAC7C,IAAMW,OAAO,GAAGV,WAAW,CAACF,UAAU,CAAC;EAEvC,IAAMa,WAAW,GAAGhB,KAAK,CAACiB,WAAW,CACjC,UAACC,cAA0B;IAAA,oBACvBX,IAAA;MAAKY,SAAS,EAAET,CAAC,CAAC,CAAE;MAACU,OAAO,EAAEF,cAAe;MAAAL,QAAA,EACxCA,QAAQ,iBACLJ,KAAA;QAAKU,SAAS,EAAET,CAAC,CAAC,SAAS,CAAE;QAAAG,QAAA,gBACzBJ,KAAA;UACIY,KAAK,EAAC,4BAA4B;UAClCC,KAAK,EAAC,IAAI;UACVC,MAAM,EAAC,IAAI;UACXC,OAAO,EAAC,WAAW;UAAAX,QAAA,gBAEnBN,IAAA;YAAAM,QAAA,eACIJ,KAAA;cAAgBgB,EAAE,EAAC,QAAQ;cAACC,EAAE,EAAC,GAAG;cAACC,EAAE,EAAC,GAAG;cAACC,EAAE,EAAC,GAAG;cAACC,EAAE,EAAC,GAAG;cAAAhB,QAAA,gBACnDN,IAAA;gBAAMY,SAAS,EAAC,eAAe;gBAACW,MAAM,EAAC,IAAI;gBAACC,SAAS,EAAC;cAAM,CAAE,CAAC,eAC/DxB,IAAA;gBAAMY,SAAS,EAAC,cAAc;gBAACW,MAAM,EAAC,MAAM;gBAACC,SAAS,EAAC;cAAM,CAAE,CAAC;YAAA,CACpD;UAAC,CACf,CAAC,eACPxB,IAAA;YACIY,SAAS,EAAET,CAAC,CAAC,cAAc,CAAE;YAC7BsB,CAAC,EAAC,8BAA8B;YAChCC,IAAI,EAAC,cAAc;YACnBC,WAAW,EAAC,GAAG;YACfC,MAAM,EAAC;UAAkB,CAC5B,CAAC;QAAA,CACD,CAAC,eACN5B,IAAA;UAAMY,SAAS,EAAET,CAAC,CAAC,aAAa;QAAE,CAAE,CAAC;MAAA,CACpC;IACR,CACA,CAAC;EAAA,CACT,EACD,CAACG,QAAQ,CACb,CAAC;EAED,OAAOX,SAAS,CAACkC,kBAAkB,CAAC;IAACtB,KAAK,EAALA,KAAK;IAAEC,OAAO,EAAPA;EAAO,CAAC,EAAEC,WAAW,CAAC,IAAI,IAAI;AAC9E"}
1
+ {"version":3,"names":["React","cn","UIFactory","getCluster","getCurrentUserName","useSelector","jsx","_jsx","jsxs","_jsxs","b","Support","_ref","children","login","cluster","makeContent","useCallback","_ref2","supportContent","onSupportClick","className","onClick","xmlns","width","height","viewBox","id","x1","x2","y1","y2","offset","stopColor","d","fill","strokeWidth","stroke","makeSupportContent"],"sources":["Support.tsx"],"sourcesContent":["import React from 'react';\nimport cn from 'bem-cn-lite';\nimport _ from 'lodash';\n\nimport './Support.scss';\nimport UIFactory from '../../UIFactory';\nimport {getCluster, getCurrentUserName} from '../../store/selectors/global';\nimport {useSelector} from 'react-redux';\n\ninterface SupportProps {\n children?: React.ReactNode;\n}\n\nconst b = cn('support-form');\n\nexport function Support({children}: SupportProps) {\n const login = useSelector(getCurrentUserName);\n const cluster = useSelector(getCluster);\n\n const makeContent = React.useCallback(\n ({\n supportContent,\n onSupportClick,\n }: {\n supportContent?: React.ReactNode;\n onSupportClick: () => void;\n }) => (\n <div className={b()} onClick={onSupportClick}>\n {supportContent}\n {children || (\n <div className={b('toggler')}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"45\"\n height=\"32\"\n viewBox=\"0 0 45 32\"\n >\n <defs>\n <linearGradient id=\"moo_bg\" x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n <stop className=\"moo-bg__start\" offset=\"0%\" stopColor=\"#fff\" />\n <stop className=\"moo-bg__stop\" offset=\"100%\" stopColor=\"#eee\" />\n </linearGradient>\n </defs>\n <path\n className={b('toggler-back')}\n d=\"M-0.5 0h36l8 16l-8 16.5h-36z\"\n fill=\"url(#moo_bg)\"\n strokeWidth=\"1\"\n stroke=\"rgba(0,0,0,0.25)\"\n />\n </svg>\n <span className={b('toggler-moo')} />\n </div>\n )}\n </div>\n ),\n [children],\n );\n\n return UIFactory.makeSupportContent({login, cluster}, makeContent) || null;\n}\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,EAAE,MAAM,aAAa;AAG5B,OAAO,eAAgB;AACvB,OAAOC,SAAS,MAAM,iBAAiB;AACvC,SAAQC,UAAU,EAAEC,kBAAkB,QAAO,8BAA8B;AAC3E,SAAQC,WAAW,QAAO,aAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAMxC,IAAMC,CAAC,GAAGT,EAAE,CAAC,cAAc,CAAC;AAE5B,OAAO,SAASU,OAAOA,CAAAC,IAAA,EAA2B;EAAA,IAAzBC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;EAC7B,IAAMC,KAAK,GAAGT,WAAW,CAACD,kBAAkB,CAAC;EAC7C,IAAMW,OAAO,GAAGV,WAAW,CAACF,UAAU,CAAC;EAEvC,IAAMa,WAAW,GAAGhB,KAAK,CAACiB,WAAW,CACjC,UAAAC,KAAA;IAAA,IACIC,cAAc,GAAAD,KAAA,CAAdC,cAAc;MACdC,cAAc,GAAAF,KAAA,CAAdE,cAAc;IAAA,oBAKdX,KAAA;MAAKY,SAAS,EAAEX,CAAC,CAAC,CAAE;MAACY,OAAO,EAAEF,cAAe;MAAAP,QAAA,GACxCM,cAAc,EACdN,QAAQ,iBACLJ,KAAA;QAAKY,SAAS,EAAEX,CAAC,CAAC,SAAS,CAAE;QAAAG,QAAA,gBACzBJ,KAAA;UACIc,KAAK,EAAC,4BAA4B;UAClCC,KAAK,EAAC,IAAI;UACVC,MAAM,EAAC,IAAI;UACXC,OAAO,EAAC,WAAW;UAAAb,QAAA,gBAEnBN,IAAA;YAAAM,QAAA,eACIJ,KAAA;cAAgBkB,EAAE,EAAC,QAAQ;cAACC,EAAE,EAAC,GAAG;cAACC,EAAE,EAAC,GAAG;cAACC,EAAE,EAAC,GAAG;cAACC,EAAE,EAAC,GAAG;cAAAlB,QAAA,gBACnDN,IAAA;gBAAMc,SAAS,EAAC,eAAe;gBAACW,MAAM,EAAC,IAAI;gBAACC,SAAS,EAAC;cAAM,CAAE,CAAC,eAC/D1B,IAAA;gBAAMc,SAAS,EAAC,cAAc;gBAACW,MAAM,EAAC,MAAM;gBAACC,SAAS,EAAC;cAAM,CAAE,CAAC;YAAA,CACpD;UAAC,CACf,CAAC,eACP1B,IAAA;YACIc,SAAS,EAAEX,CAAC,CAAC,cAAc,CAAE;YAC7BwB,CAAC,EAAC,8BAA8B;YAChCC,IAAI,EAAC,cAAc;YACnBC,WAAW,EAAC,GAAG;YACfC,MAAM,EAAC;UAAkB,CAC5B,CAAC;QAAA,CACD,CAAC,eACN9B,IAAA;UAAMc,SAAS,EAAEX,CAAC,CAAC,aAAa;QAAE,CAAE,CAAC;MAAA,CACpC,CACR;IAAA,CACA,CAAC;EAAA,CACT,EACD,CAACG,QAAQ,CACb,CAAC;EAED,OAAOX,SAAS,CAACoC,kBAAkB,CAAC;IAACxB,KAAK,EAALA,KAAK;IAAEC,OAAO,EAAPA;EAAO,CAAC,EAAEC,WAAW,CAAC,IAAI,IAAI;AAC9E"}
@@ -1,8 +1,10 @@
1
1
  import _objectSpread from "@babel/runtime/helpers/objectSpread2";
2
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
3
  import React, { useState } from 'react';
4
+ import { useHistory } from 'react-router';
4
5
  import cn from 'bem-cn-lite';
5
6
  import { FooterItem, PageLayoutAside } from '@gravity-ui/navigation';
7
+ import { Menu } from '@gravity-ui/uikit';
6
8
  import Logo from '../../../../img/svg/appLogo.svg';
7
9
  var GearIcon = function GearIcon(props) {
8
10
  return /*#__PURE__*/_jsxs("svg", _objectSpread(_objectSpread({}, props), {}, {
@@ -32,11 +34,38 @@ GearIcon.defaultProps = {
32
34
  fill: "none",
33
35
  viewBox: "0 0 16 16"
34
36
  };
37
+ var BugIcon = function BugIcon(props) {
38
+ return /*#__PURE__*/_jsxs("svg", _objectSpread(_objectSpread({}, props), {}, {
39
+ children: [/*#__PURE__*/_jsx("g", {
40
+ clipPath: "url(#a)",
41
+ children: /*#__PURE__*/_jsx("path", {
42
+ fill: "currentColor",
43
+ fillRule: "evenodd",
44
+ d: "M5.865.031a.75.75 0 0 1 .918.53l.531 1.981a5.554 5.554 0 0 1 2.384.225 2.5 2.5 0 1 1 3.535 3.535 5.496 5.496 0 0 1 .225 2.384l1.98.53a.75.75 0 0 1-.388 1.45l-1.98-.53a5.49 5.49 0 0 1-.687 1.187l1.45 1.45a.75.75 0 0 1-1.06 1.06l-1.45-1.45a5.493 5.493 0 0 1-1.188.687l.53 1.98a.75.75 0 1 1-1.448.388l-.531-1.98a5.5 5.5 0 0 1-6.144-6.143l-1.98-.532A.75.75 0 0 1 .95 5.334l1.98.531c.18-.426.411-.824.687-1.188l-1.45-1.45a.75.75 0 1 1 1.06-1.06l1.45 1.45a5.494 5.494 0 0 1 1.188-.687L5.335.95a.75.75 0 0 1 .53-.919ZM8 12a4 4 0 1 0-3.309-1.752L8.42 6.52a.75.75 0 0 1 1.06 1.06l-3.728 3.73c.64.435 1.414.69 2.248.69Z",
45
+ clipRule: "evenodd"
46
+ })
47
+ }), /*#__PURE__*/_jsx("defs", {
48
+ children: /*#__PURE__*/_jsx("clipPath", {
49
+ id: "a",
50
+ children: /*#__PURE__*/_jsx("path", {
51
+ fill: "currentColor",
52
+ d: "M0 0h16v16H0z"
53
+ })
54
+ })
55
+ })]
56
+ }));
57
+ };
58
+ BugIcon.defaultProps = {
59
+ xmlns: "http://www.w3.org/2000/svg",
60
+ width: "16",
61
+ height: "16",
62
+ fill: "none",
63
+ viewBox: "0 0 16 16"
64
+ };
35
65
  import Link from '../../components/Link/Link';
36
66
  import unknown from '../../../../img/user-avatar.svg';
67
+ import UIFactory from '../../UIFactory';
37
68
  import "./AppNavigationComponent.css";
38
- import { Menu } from '@gravity-ui/uikit';
39
- import { useHistory } from 'react-router';
40
69
  import { jsx as _jsx } from "react/jsx-runtime";
41
70
  import { jsxs as _jsxs } from "react/jsx-runtime";
42
71
  import { Fragment as _Fragment } from "react/jsx-runtime";
@@ -98,7 +127,23 @@ function AppNavigationComponent(_ref) {
98
127
  renderFooter: function renderFooter(_ref2) {
99
128
  var compact = _ref2.compact;
100
129
  return /*#__PURE__*/_jsxs(_Fragment, {
101
- children: [/*#__PURE__*/_jsx(FooterItem, {
130
+ children: [UIFactory.makeSupportContent({
131
+ login: currentUser
132
+ }, function (_ref3) {
133
+ var onSupportClick = _ref3.onSupportClick,
134
+ supportContent = _ref3.supportContent;
135
+ return /*#__PURE__*/_jsxs(React.Fragment, {
136
+ children: [/*#__PURE__*/_jsx(FooterItem, {
137
+ compact: compact,
138
+ item: {
139
+ id: 'support',
140
+ title: 'Report a bug',
141
+ icon: BugIcon,
142
+ onItemClick: onSupportClick
143
+ }
144
+ }), supportContent]
145
+ });
146
+ }), /*#__PURE__*/_jsx(FooterItem, {
102
147
  compact: compact,
103
148
  item: {
104
149
  id: 'settings',
@@ -114,8 +159,8 @@ function AppNavigationComponent(_ref) {
114
159
  onItemClick: function onItemClick() {
115
160
  setPopupVisible(!popupVisible);
116
161
  },
117
- itemWrapper: function itemWrapper(_ref3, makeItem) {
118
- var title = _ref3.title;
162
+ itemWrapper: function itemWrapper(_ref4, makeItem) {
163
+ var title = _ref4.title;
119
164
  return makeItem({
120
165
  title: title,
121
166
  icon: /*#__PURE__*/_jsx("img", {
@@ -1 +1 @@
1
- {"version":3,"names":["React","useState","cn","FooterItem","PageLayoutAside","Logo","GearIcon","props","_jsxs","_objectSpread","children","_jsx","clipPath","fill","fillRule","d","clipRule","id","defaultProps","xmlns","width","height","viewBox","Link","unknown","Menu","useHistory","jsx","jsxs","Fragment","_Fragment","block","AppNavigationComponent","_ref","logoClassName","menuItems","currentUser","authWay","panelContent","panelVisible","panelClassName","onClosePanel","settingsVisible","settingsContent","toggleSettingsVisible","onChangeCompact","panelItems","useMemo","content","visible","className","_useState","_useState2","_slicedToArray","popupVisible","setPopupVisible","history","multipleTooltip","headerDecoration","logo","text","textSize","icon","iconSize","iconClassName","wrapper","node","url","theme","target","renderFooter","_ref2","compact","item","title","onItemClick","itemWrapper","_ref3","makeItem","src","enableTooltip","onClosePopup","renderPopupContent","Item","onClick","push","href","memo"],"sources":["AppNavigationComponent.tsx"],"sourcesContent":["import React, {useState} from 'react';\nimport cn from 'bem-cn-lite';\nimport {FooterItem, PageLayoutAside} from '@gravity-ui/navigation';\n\nimport Logo from '../../../../img/svg/appLogo.svg';\nimport GearIcon from '@gravity-ui/icons/svgs/gear.svg';\nimport Link from '../../components/Link/Link';\nimport unknown from '../../../../img/user-avatar.svg';\nimport {AppNavigationProps} from './AppNavigationPageLayout';\n\nimport './AppNavigationComponent.scss';\nimport {Menu} from '@gravity-ui/uikit';\nimport {useHistory} from 'react-router';\n\nconst block = cn('yt-app-navigation');\n\nfunction AppNavigationComponent({\n logoClassName,\n menuItems,\n currentUser,\n authWay,\n\n panelContent,\n panelVisible,\n panelClassName,\n onClosePanel,\n\n settingsVisible,\n settingsContent,\n toggleSettingsVisible,\n\n onChangeCompact,\n}: Omit<AppNavigationProps, 'compact' | 'rememberSize' | 'className'>) {\n const panelItems = React.useMemo(() => {\n return [\n {\n id: 'panel',\n content: panelContent,\n visible: panelVisible,\n className: panelClassName,\n },\n {\n id: 'settings',\n content: settingsContent,\n visible: settingsVisible,\n },\n ];\n }, [panelVisible, panelContent, settingsVisible, settingsContent]);\n\n const [popupVisible, setPopupVisible] = useState(false);\n const history = useHistory();\n\n return (\n <PageLayoutAside\n multipleTooltip\n panelItems={panelItems}\n onClosePanel={onClosePanel}\n menuItems={menuItems}\n headerDecoration\n logo={{\n text: () => 'YTsaurus',\n textSize: 22,\n icon: Logo,\n iconSize: 36,\n iconClassName: logoClassName,\n wrapper: (node) => {\n return (\n <Link url={'/'} theme={'primary'} target=\"_blank\">\n {node}\n </Link>\n );\n },\n }}\n onChangeCompact={onChangeCompact}\n renderFooter={({compact}) => {\n return (\n <>\n <FooterItem\n compact={compact}\n item={{\n id: 'settings',\n title: 'Settings',\n onItemClick: toggleSettingsVisible,\n icon: GearIcon,\n }}\n />\n <FooterItem\n compact={compact}\n item={{\n id: 'user',\n title: currentUser,\n onItemClick: () => {\n setPopupVisible(!popupVisible);\n },\n itemWrapper: ({title}: any, makeItem: any) => {\n return makeItem({\n title,\n icon: (\n <img\n className={block('user-icon')}\n width={40}\n height={40}\n src={unknown}\n />\n ),\n });\n },\n }}\n enableTooltip={!popupVisible}\n popupVisible={popupVisible}\n onClosePopup={() => setPopupVisible(false)}\n renderPopupContent={() => {\n return (\n <div className={block('settings-ul')}>\n <Menu>\n {authWay === 'passwd' && (\n <Menu.Item\n onClick={() => history.push('/change-password')}\n >\n Change password\n </Menu.Item>\n )}\n <Menu.Item href={'/api/yt/logout'}>Logout</Menu.Item>\n </Menu>\n </div>\n );\n }}\n />\n </>\n );\n }}\n />\n );\n}\n\nexport default React.memo(AppNavigationComponent);\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useState","useHistory","cn","FooterItem","PageLayoutAside","Menu","Logo","GearIcon","props","_jsxs","_objectSpread","children","_jsx","clipPath","fill","fillRule","d","clipRule","id","defaultProps","xmlns","width","height","viewBox","BugIcon","Link","unknown","UIFactory","jsx","jsxs","Fragment","_Fragment","block","AppNavigationComponent","_ref","logoClassName","menuItems","currentUser","authWay","panelContent","panelVisible","panelClassName","onClosePanel","settingsVisible","settingsContent","toggleSettingsVisible","onChangeCompact","panelItems","useMemo","content","visible","className","_useState","_useState2","_slicedToArray","popupVisible","setPopupVisible","history","multipleTooltip","headerDecoration","logo","text","textSize","icon","iconSize","iconClassName","wrapper","node","url","theme","target","renderFooter","_ref2","compact","makeSupportContent","login","_ref3","onSupportClick","supportContent","item","title","onItemClick","itemWrapper","_ref4","makeItem","src","enableTooltip","onClosePopup","renderPopupContent","Item","onClick","push","href","memo"],"sources":["AppNavigationComponent.tsx"],"sourcesContent":["import React, {useState} from 'react';\nimport {useHistory} from 'react-router';\nimport cn from 'bem-cn-lite';\nimport {FooterItem, PageLayoutAside} from '@gravity-ui/navigation';\nimport {Menu} from '@gravity-ui/uikit';\n\nimport Logo from '../../../../img/svg/appLogo.svg';\nimport GearIcon from '@gravity-ui/icons/svgs/gear.svg';\nimport BugIcon from '@gravity-ui/icons/svgs/bug.svg';\nimport Link from '../../components/Link/Link';\nimport unknown from '../../../../img/user-avatar.svg';\nimport {AppNavigationProps} from './AppNavigationPageLayout';\nimport UIFactory from '../../UIFactory';\n\nimport './AppNavigationComponent.scss';\n\nconst block = cn('yt-app-navigation');\n\nfunction AppNavigationComponent({\n logoClassName,\n menuItems,\n currentUser,\n authWay,\n\n panelContent,\n panelVisible,\n panelClassName,\n onClosePanel,\n\n settingsVisible,\n settingsContent,\n toggleSettingsVisible,\n\n onChangeCompact,\n}: Omit<AppNavigationProps, 'compact' | 'rememberSize' | 'className'>) {\n const panelItems = React.useMemo(() => {\n return [\n {\n id: 'panel',\n content: panelContent,\n visible: panelVisible,\n className: panelClassName,\n },\n {\n id: 'settings',\n content: settingsContent,\n visible: settingsVisible,\n },\n ];\n }, [panelVisible, panelContent, settingsVisible, settingsContent]);\n\n const [popupVisible, setPopupVisible] = useState(false);\n const history = useHistory();\n\n return (\n <PageLayoutAside\n multipleTooltip\n panelItems={panelItems}\n onClosePanel={onClosePanel}\n menuItems={menuItems}\n headerDecoration\n logo={{\n text: () => 'YTsaurus',\n textSize: 22,\n icon: Logo,\n iconSize: 36,\n iconClassName: logoClassName,\n wrapper: (node) => {\n return (\n <Link url={'/'} theme={'primary'} target=\"_blank\">\n {node}\n </Link>\n );\n },\n }}\n onChangeCompact={onChangeCompact}\n renderFooter={({compact}) => {\n return (\n <>\n {UIFactory.makeSupportContent(\n {login: currentUser},\n ({onSupportClick, supportContent}) => (\n <React.Fragment>\n <FooterItem\n compact={compact}\n item={{\n id: 'support',\n title: 'Report a bug',\n icon: BugIcon,\n onItemClick: onSupportClick,\n }}\n />\n {supportContent}\n </React.Fragment>\n ),\n )}\n <FooterItem\n compact={compact}\n item={{\n id: 'settings',\n title: 'Settings',\n onItemClick: toggleSettingsVisible,\n icon: GearIcon,\n }}\n />\n <FooterItem\n compact={compact}\n item={{\n id: 'user',\n title: currentUser,\n onItemClick: () => {\n setPopupVisible(!popupVisible);\n },\n itemWrapper: ({title}: any, makeItem: any) => {\n return makeItem({\n title,\n icon: (\n <img\n className={block('user-icon')}\n width={40}\n height={40}\n src={unknown}\n />\n ),\n });\n },\n }}\n enableTooltip={!popupVisible}\n popupVisible={popupVisible}\n onClosePopup={() => setPopupVisible(false)}\n renderPopupContent={() => {\n return (\n <div className={block('settings-ul')}>\n <Menu>\n {authWay === 'passwd' && (\n <Menu.Item\n onClick={() => history.push('/change-password')}\n >\n Change password\n </Menu.Item>\n )}\n <Menu.Item href={'/api/yt/logout'}>Logout</Menu.Item>\n </Menu>\n </div>\n );\n }}\n />\n </>\n );\n }}\n />\n );\n}\n\nexport default React.memo(AppNavigationComponent);\n"],"mappings":"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"}
@@ -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,18 @@
1
+ import React from 'react';
2
+ import { uiSettings } from '../../config/ui-settings';
3
+ import { openInNewTab } from '../../utils/utils';
4
+ import { Fragment as _Fragment } from "react/jsx-runtime";
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ export function SupportComponent(_ref) {
7
+ var makeContent = _ref.makeContent;
8
+ var reportBugUrl = uiSettings.reportBugUrl;
9
+ var onSupportClick = React.useCallback(function () {
10
+ if (reportBugUrl) openInNewTab(reportBugUrl);
11
+ }, [reportBugUrl]);
12
+ return reportBugUrl ? /*#__PURE__*/_jsx(_Fragment, {
13
+ children: makeContent({
14
+ onSupportClick: onSupportClick
15
+ })
16
+ }) : null;
17
+ }
18
+ // #sourceMappingURL=SupportComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","uiSettings","openInNewTab","Fragment","_Fragment","jsx","_jsx","SupportComponent","_ref","makeContent","reportBugUrl","onSupportClick","useCallback","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,OAAOA,KAAK,MAAM,OAAO;AAGzB,SAAQC,UAAU,QAAO,0BAA0B;AACnD,SAAQC,YAAY,QAAO,mBAAmB;AAAC,SAAAC,QAAA,IAAAC,SAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAE/C,OAAO,SAASC,gBAAgBA,CAAAC,IAAA,EAI7B;EAAA,IAHCC,WAAW,GAAAD,IAAA,CAAXC,WAAW;EAIX,IAAOC,YAAY,GAAIT,UAAU,CAA1BS,YAAY;EACnB,IAAMC,cAAc,GAAGX,KAAK,CAACY,WAAW,CAAC,YAAM;IAC3C,IAAIF,YAAY,EAAER,YAAY,CAACQ,YAAY,CAAC;EAChD,CAAC,EAAE,CAACA,YAAY,CAAC,CAAC;EAElB,OAAOA,YAAY,gBAAGJ,IAAA,CAAAF,SAAA;IAAAS,QAAA,EAAGJ,WAAW,CAAC;MAACE,cAAc,EAAdA;IAAc,CAAC;EAAC,CAAG,CAAC,GAAG,IAAI;AACrE"}
@@ -1,8 +1,13 @@
1
1
  .operation-details {
2
2
  display: grid;
3
- grid-template-columns: repeat(auto-fill, minmax(600px, 1fr));
3
+ grid-template-columns: minmax(600px, 1fr);
4
4
  grid-column-gap: 30px;
5
5
  }
6
+ @media (min-width: 1300px) {
7
+ .operation-details {
8
+ grid-template-columns: minmax(600px, 1fr) minmax(600px, 1fr);
9
+ }
10
+ }
6
11
  .operation-details__alerts, .operation-details__result {
7
12
  margin-top: 20px;
8
13
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["Details.scss"],"names":[],"mappings":"AAAA;EACI,aAAA;EACA,4DAAA;EACA,qBAAA;AACJ;AACI;EAEI,gBAAA;AAAR;AAGI;EACI,iBAAA;AADR;AAII;EACI,cAAA;AAFR;AAKI;EACI,+CAAA;EACA,sCAAA;EACA,kBAAA;EACA,kBAAA;AAHR;AAKQ;EACI,gBAAA;AAHZ;AAOI;EACI,mBAAA;AALR","file":"Details.css","sourcesContent":[".operation-details {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(600px, 1fr));\n grid-column-gap: 30px;\n\n &__alerts,\n &__result {\n margin-top: 20px;\n }\n\n &__edit-button {\n margin-left: auto;\n }\n\n &__table {\n overflow: auto;\n }\n\n .collapsible-section {\n box-shadow: 0 2px 5px var(--default-background);\n border: 1px solid var(--light-divider);\n border-radius: 3px;\n padding: 24px 20px;\n\n .elements-heading_size_m:last-child {\n margin-bottom: 0;\n }\n }\n\n .elements-alert {\n margin-bottom: 20px;\n }\n}\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["Details.scss"],"names":[],"mappings":"AAAA;EACI,aAAA;EACA,yCAAA;EAMA,qBAAA;AAJJ;AAAI;EAJJ;IAKQ,4DAAA;EAGN;AACF;AACI;EAEI,gBAAA;AAAR;AAGI;EACI,iBAAA;AADR;AAII;EACI,cAAA;AAFR;AAKI;EACI,+CAAA;EACA,sCAAA;EACA,kBAAA;EACA,kBAAA;AAHR;AAKQ;EACI,gBAAA;AAHZ;AAOI;EACI,mBAAA;AALR","file":"Details.css","sourcesContent":[".operation-details {\n display: grid;\n grid-template-columns: minmax(600px, 1fr);\n\n @media (min-width: 1300px) {\n grid-template-columns: minmax(600px, 1fr) minmax(600px, 1fr);\n }\n\n grid-column-gap: 30px;\n\n &__alerts,\n &__result {\n margin-top: 20px;\n }\n\n &__edit-button {\n margin-left: auto;\n }\n\n &__table {\n overflow: auto;\n }\n\n .collapsible-section {\n box-shadow: 0 2px 5px var(--default-background);\n border: 1px solid var(--light-divider);\n border-radius: 3px;\n padding: 24px 20px;\n\n .elements-heading_size_m:last-child {\n margin-bottom: 0;\n }\n }\n\n .elements-alert {\n margin-bottom: 20px;\n }\n}\n"],"sourceRoot":""}
@@ -1,6 +1,11 @@
1
1
  .operation-details {
2
2
  display: grid;
3
- grid-template-columns: repeat(auto-fill, minmax(600px, 1fr));
3
+ grid-template-columns: minmax(600px, 1fr);
4
+
5
+ @media (min-width: 1300px) {
6
+ grid-template-columns: minmax(600px, 1fr) minmax(600px, 1fr);
7
+ }
8
+
4
9
  grid-column-gap: 30px;
5
10
 
6
11
  &__alerts,
@@ -24,7 +24,7 @@ import CancelHelper, { isCancelled } from '../../../utils/cancel-helper';
24
24
  import { flattenAttributes } from '../../../utils/scheduling/scheduling';
25
25
  import { UIBatchError } from '../../../utils/errors/ui-error';
26
26
  var cancelHelper = new CancelHelper();
27
- var POOL_FIELDS_TO_LOAD = ['accumulated_resource_ratio_volume', 'accumulated_resource_volume', 'demand_ratio', 'detailed_fair_share', 'dominant_resource', 'estimated_burst_usage_duration_sec', 'fair_share_ratio', 'fifo_index', 'integral_guarantee_type', 'is_ephemeral', 'max_operation_count', 'max_running_operation_count', 'max_share_ratio', 'min_share_ratio', 'mode', 'operation_count', 'parent', 'pool_operation_count', 'child_pool_count', 'resource_demand', 'resource_limits', 'resource_usage', 'promised_fair_share_resources', 'running_operation_count', 'specified_burst_guarantee_resources', 'specified_resource_flow', 'starvation_status', 'starving', 'strong_guarantee_resources', 'usage_ratio', 'weight', 'abc'];
27
+ var POOL_FIELDS_TO_LOAD = ['accumulated_resource_ratio_volume', 'accumulated_resource_volume', 'demand_ratio', 'detailed_fair_share', 'dominant_resource', 'estimated_burst_usage_duration_sec', 'fair_share_ratio', 'fifo_index', 'fifo_sort_parameters', 'integral_guarantee_type', 'is_ephemeral', 'max_operation_count', 'max_running_operation_count', 'max_share_ratio', 'min_share_ratio', 'mode', 'operation_count', 'parent', 'pool_operation_count', 'child_pool_count', 'resource_demand', 'resource_limits', 'resource_usage', 'promised_fair_share_resources', 'running_operation_count', 'specified_burst_guarantee_resources', 'specified_resource_flow', 'starvation_status', 'starving', 'strong_guarantee_resources', 'usage_ratio', 'weight', 'abc'];
28
28
  var POOL_TREE_GET_ATTRS = ['integral_guarantees', 'weight', 'max_operation_count', 'max_running_operation_count', 'strong_guarantee_resources', 'resource_limits', 'forbid_immediate_operations', 'create_ephemeral_subpools', 'fifo_sort_parameters', 'config', 'folder_id'];
29
29
  var EmptyFullPath = /*#__PURE__*/function (_Error) {
30
30
  _inherits(EmptyFullPath, _Error);