@ytsaurus/ui 3.3.1 → 3.4.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 (55) hide show
  1. package/dist/public/build/assets-manifest.json +34 -34
  2. package/dist/public/build/css/3132.43311d48.chunk.css +2 -0
  3. package/dist/public/build/css/3132.43311d48.chunk.css.map +1 -0
  4. package/dist/public/build/css/590.6f40b178.chunk.css +2 -0
  5. package/dist/public/build/css/590.6f40b178.chunk.css.map +1 -0
  6. package/dist/public/build/css/scheduling.8b8a192b.chunk.css +2 -0
  7. package/dist/public/build/css/scheduling.8b8a192b.chunk.css.map +1 -0
  8. package/dist/public/build/js/2563.bbb74274.chunk.js +2 -0
  9. package/dist/public/build/js/2563.bbb74274.chunk.js.map +1 -0
  10. package/dist/public/build/js/4237.57c56e6b.chunk.js +3 -0
  11. package/dist/public/build/js/4237.57c56e6b.chunk.js.map +1 -0
  12. package/dist/public/build/js/887.d8e107dc.chunk.js +2 -0
  13. package/dist/public/build/js/887.d8e107dc.chunk.js.map +1 -0
  14. package/dist/public/build/js/{app-navigation-page-layout.27364587.chunk.js → app-navigation-page-layout.afb1c1ba.chunk.js} +2 -2
  15. package/dist/public/build/js/app-navigation-page-layout.afb1c1ba.chunk.js.map +1 -0
  16. package/dist/public/build/js/{app-navigation.b86557c0.chunk.js → app-navigation.38835895.chunk.js} +2 -2
  17. package/dist/public/build/js/{app-navigation.b86557c0.chunk.js.map → app-navigation.38835895.chunk.js.map} +1 -1
  18. package/dist/public/build/js/{cluster-page-wrapper.98d8905c.chunk.js → cluster-page-wrapper.84f72ceb.chunk.js} +2 -2
  19. package/dist/public/build/js/{cluster-page-wrapper.98d8905c.chunk.js.map → cluster-page-wrapper.84f72ceb.chunk.js.map} +1 -1
  20. package/dist/public/build/js/{code-assistant-chat.4275144c.chunk.js → code-assistant-chat.a7927638.chunk.js} +2 -2
  21. package/dist/public/build/js/{code-assistant-chat.4275144c.chunk.js.map → code-assistant-chat.a7927638.chunk.js.map} +1 -1
  22. package/dist/public/build/js/main.d91d7090.js +3 -0
  23. package/dist/public/build/js/main.d91d7090.js.map +1 -0
  24. package/dist/public/build/js/{navigation.c35bb543.chunk.js → navigation.9b4e0429.chunk.js} +2 -2
  25. package/dist/public/build/js/navigation.9b4e0429.chunk.js.map +1 -0
  26. package/dist/public/build/js/{query-tracker.17cb6d4e.chunk.js → query-tracker.1b6d537a.chunk.js} +2 -2
  27. package/dist/public/build/js/{query-tracker.17cb6d4e.chunk.js.map → query-tracker.1b6d537a.chunk.js.map} +1 -1
  28. package/dist/public/build/js/{runtime.6000b37f.js → runtime.93a1fc00.js} +2 -2
  29. package/dist/public/build/js/{runtime.6000b37f.js.map → runtime.93a1fc00.js.map} +1 -1
  30. package/dist/public/build/js/scheduling.943b1602.chunk.js +2 -0
  31. package/dist/public/build/js/scheduling.943b1602.chunk.js.map +1 -0
  32. package/dist/public/build/manifest.json +30 -30
  33. package/dist/server/controllers/ai-chat.js +2 -1
  34. package/dist/server/types/ai-chat.d.ts +3 -0
  35. package/package.json +5 -5
  36. package/dist/public/build/css/3132.62cd9c06.chunk.css +0 -2
  37. package/dist/public/build/css/3132.62cd9c06.chunk.css.map +0 -1
  38. package/dist/public/build/css/590.1d7b27ca.chunk.css +0 -2
  39. package/dist/public/build/css/590.1d7b27ca.chunk.css.map +0 -1
  40. package/dist/public/build/css/scheduling.f5b832cf.chunk.css +0 -2
  41. package/dist/public/build/css/scheduling.f5b832cf.chunk.css.map +0 -1
  42. package/dist/public/build/js/3205.87c8575d.chunk.js +0 -2
  43. package/dist/public/build/js/3205.87c8575d.chunk.js.map +0 -1
  44. package/dist/public/build/js/4237.a6d263f6.chunk.js +0 -3
  45. package/dist/public/build/js/4237.a6d263f6.chunk.js.map +0 -1
  46. package/dist/public/build/js/887.7bbb21d6.chunk.js +0 -2
  47. package/dist/public/build/js/887.7bbb21d6.chunk.js.map +0 -1
  48. package/dist/public/build/js/app-navigation-page-layout.27364587.chunk.js.map +0 -1
  49. package/dist/public/build/js/main.39129d1a.js +0 -3
  50. package/dist/public/build/js/main.39129d1a.js.map +0 -1
  51. package/dist/public/build/js/navigation.c35bb543.chunk.js.map +0 -1
  52. package/dist/public/build/js/scheduling.3fff0b4f.chunk.js +0 -2
  53. package/dist/public/build/js/scheduling.3fff0b4f.chunk.js.map +0 -1
  54. /package/dist/public/build/js/{4237.a6d263f6.chunk.js.LICENSE.txt → 4237.57c56e6b.chunk.js.LICENSE.txt} +0 -0
  55. /package/dist/public/build/js/{main.39129d1a.js.LICENSE.txt → main.d91d7090.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"js/scheduling.3fff0b4f.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevrons-right.svg","webpack://@ytsaurus/ui/./src/ui/components/ExpandButton/ExpandButton.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/acl-filters.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/Gear.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/scheduling/create-pool-dialog.ts","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/PoolAcl/PoolAcl.tsx","webpack://@ytsaurus/ui/./src/ui/components/ChargeLevel/ChargeLevel.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/scheduling/scheduling-ts.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/SchedulingMeta.tsx","webpack://@ytsaurus/ui/./src/ui/utils/batch.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/scheduling/expanded-pools.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/scheduling/scheduling-ts.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/scheduling/scheduling.ts","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/PoolsSuggest/PoolsSuggest.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/SchedulingToolbar.tsx","webpack://@ytsaurus/ui/./src/ui/components/DataTableGravity/ExpandableCell.tsx","webpack://@ytsaurus/ui/./src/ui/components/DataTableGravity/DataTableGravity.tsx","webpack://@ytsaurus/ui/./src/ui/components/FormatNumber/FormatNumber.tsx","webpack://@ytsaurus/ui/./src/ui/hooks/settings/use-settings-column-sizes.ts","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/controls/ShareUsageBar.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/scheduling/overview-columns.ts","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/SchedulingTable/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/SchedulingTable/PoolTags.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/SchedulingTable/NameCell.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/SchedulingTable/PoolAbc.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/SchedulingTable/SchedulingTable.tsx","webpack://@ytsaurus/ui/./src/ui/hooks/settings/use-settings-column-visibility.ts","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/Overview.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/SchedulingExpandedPoolsUpdater.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/PoolAttributes/PoolAttributes.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/Content.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/scheduling/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/SchedulingResources.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Scheduling/PoolEditorDialog/PoolEditorDialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Scheduling/Scheduling.tsx","webpack://@ytsaurus/ui/./src/ui/utils/scheduling/index.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/scheduling/create-pool-dialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Instruments/CreatePoolDialog/CreatePoolDialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Scheduling/SchedulingTopRowContent.tsx","webpack://@ytsaurus/ui/./src/ui/components/NumberInput/NumberInput.tsx","webpack://@ytsaurus/ui/./src/ui/components/Dialog/DialogError.tsx","webpack://@ytsaurus/ui/./src/ui/components/Dialog/index.tsx","webpack://@ytsaurus/ui/./src/ui/hocs/withDelayedMount.tsx","webpack://@ytsaurus/ui/./src/ui/utils/parse/parse-bytes.ts","webpack://@ytsaurus/ui/./src/ui/utils/cypress-attributes.ts","webpack://@ytsaurus/ui/./src/ui/pages/components/Placeholder.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevron-right.svg","webpack://@ytsaurus/ui/./src/ui/rum/rum-app-measures.ts","webpack://@ytsaurus/ui/./src/ui/components/SortIcon/SortIcon.tsx","webpack://@ytsaurus/ui/./src/ui/components/EditableBreadcrumbs/EditableBreadcrumbs.tsx","webpack://@ytsaurus/ui/./src/ui/components/Dialog/controls/RoleListControl/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/components/Dialog/controls/RoleListControl/utils.ts","webpack://@ytsaurus/ui/./src/ui/components/EditableAsText/EditableAsText.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Switch/Switch.tsx","webpack://@ytsaurus/ui/./src/ui/components/TimeDuration/TimeDuration.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/acl.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Progress/constants.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Progress/ProgressInnerText.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Progress/ProgressStackItem.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Progress/utils.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Progress/ProgressWithStack.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Progress/ProgressWithValue.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Progress/types.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Progress/Progress.tsx","webpack://@ytsaurus/ui/./src/ui/components/Suggest/Suggest.tsx","webpack://@ytsaurus/ui/./src/ui/components/OperationType/OperationType.tsx","webpack://@ytsaurus/ui/./src/ui/components/ColorCircle/ColorCircle.tsx","webpack://@ytsaurus/ui/./src/ui/components/CollapsibleSection/CollapsibleSection.tsx"],"sourcesContent":["const SvgChevronsRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M3.47 10.97a.75.75 0 1 0 1.06 1.06l3.5-3.5a.75.75 0 0 0 0-1.06l-3.5-3.5a.75.75 0 0 0-1.06 1.06L6.44 8zm5 0a.75.75 0 1 0 1.06 1.06l3.5-3.5a.75.75 0 0 0 0-1.06l-3.5-3.5a.75.75 0 0 0-1.06 1.06L11.44 8z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronsRight;","import React, {FC} from 'react';\nimport {Button, ButtonProps, Icon} from '@gravity-ui/uikit';\nimport shevronRightSvg from '@gravity-ui/icons/svgs/chevron-right.svg';\nimport doubleShevronRightSvg from '@gravity-ui/icons/svgs/chevrons-right.svg';\nimport cn from 'bem-cn-lite';\nimport './ExpandButton.scss';\n\nconst block = cn('yt-expanded-button');\n\ntype Props = {\n className?: string;\n expanded: boolean;\n toggleExpanded: () => void;\n inline?: boolean;\n all?: boolean;\n showText?: boolean;\n qa?: ButtonProps['qa'];\n};\n\nexport const ExpandButton: FC<Props> = ({\n className,\n expanded,\n inline,\n toggleExpanded,\n all,\n showText,\n qa,\n}) => {\n const titleExpanded = all ? 'Collapse All' : 'Collapse';\n const titleCollapsed = all ? 'Expand All' : 'Expand';\n return (\n <Button\n className={block({inline}, className)}\n view=\"flat-secondary\"\n title={expanded ? titleExpanded : titleCollapsed}\n onClick={toggleExpanded}\n qa={qa}\n >\n {showText && (expanded ? titleExpanded : titleCollapsed) + ' '}\n <Icon\n className={block('expand', {expanded})}\n data={all ? doubleShevronRightSvg : shevronRightSvg}\n size={16}\n />\n </Button>\n );\n};\n","import {RootState} from '../reducers';\n\nexport function getExecuteBatchState(state: RootState) {\n return state.executeBatch;\n}\n\nexport const getApproversSubjectFilter = (state: RootState) => state.aclFilters.approversSubject;\nexport const getObjectSubjectFilter = (state: RootState) => state.aclFilters.objectSubject;\nexport const getObjectPermissionsFilter = (state: RootState) => state.aclFilters.objectPermissions;\nexport const getAclFilterColumns = (state: RootState) => state.aclFilters.columnsFilter;\nexport const getAclFilterColumnGroupName = (state: RootState) =>\n state.aclFilters.columnGroupNameFilter;\nexport const getAclFilterExpandedSubjects = (state: RootState) => state.aclFilters.expandedSubjects;\nexport const getAclCurrentTab = (state: RootState) => state.aclFilters.aclCurrentTab;\n","import * as React from 'react';\nconst Gear = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M7.199 2H8.8a.2.2 0 0 1 .2.2c0 1.808 1.958 2.939 3.524 2.034a.2.2 0 0 1 .271.073l.802 1.388a.2.2 0 0 1-.073.272c-1.566.904-1.566 3.164 0 4.069a.2.2 0 0 1 .073.271l-.802 1.388a.2.2 0 0 1-.271.073C10.958 10.863 9 11.993 9 13.8a.2.2 0 0 1-.199.2H7.2a.2.2 0 0 1-.2-.2c0-1.808-1.958-2.938-3.524-2.034a.2.2 0 0 1-.272-.073l-.8-1.388a.2.2 0 0 1 .072-.271c1.566-.905 1.566-3.165 0-4.07a.2.2 0 0 1-.073-.27l.801-1.389a.2.2 0 0 1 .272-.072C5.042 5.138 7 4.007 7 2.199c0-.11.089-.199.199-.199M5.5 2.2c0-.94.76-1.7 1.699-1.7H8.8c.94 0 1.7.76 1.7 1.7a.85.85 0 0 0 1.274.735 1.7 1.7 0 0 1 2.32.622l.802 1.388c.469.813.19 1.851-.622 2.32a.85.85 0 0 0 0 1.472 1.7 1.7 0 0 1 .622 2.32l-.802 1.388a1.7 1.7 0 0 1-2.32.622.85.85 0 0 0-1.274.735c0 .939-.76 1.7-1.699 1.7H7.2a1.7 1.7 0 0 1-1.699-1.7.85.85 0 0 0-1.274-.735 1.7 1.7 0 0 1-2.32-.622l-.802-1.388a1.7 1.7 0 0 1 .622-2.32.85.85 0 0 0 0-1.471 1.7 1.7 0 0 1-.622-2.32l.801-1.389a1.7 1.7 0 0 1 2.32-.622A.85.85 0 0 0 5.5 2.2m4 5.8a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0M11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0\", clipRule: \"evenodd\" })));\nexport default Gear;\n","import forEach_ from 'lodash/forEach';\n\nimport {RootState} from '../../reducers';\nimport {createSelector} from 'reselect';\n\nexport const getCreatePoolDialogCurrentTree = (state: RootState) =>\n state.scheduling.createPoolDialog.currentTree;\nexport const getCreatePoolDialogTreeItems = (state: RootState) =>\n state.scheduling.createPoolDialog.treeItems;\nexport const getCreatePoolDialogError = (state: RootState) =>\n state.scheduling.createPoolDialog.error;\n\nexport const getCreatePoolDialogFlatTreeItems = createSelector(\n [getCreatePoolDialogTreeItems, getCreatePoolDialogCurrentTree],\n (tree, treeName) => {\n return {\n sortedFlatTree: collectTreeKeys([], tree).sort(),\n treeName,\n };\n },\n);\n\nfunction collectTreeKeys(\n dst: Array<string>,\n tree: ReturnType<typeof getCreatePoolDialogTreeItems>,\n): Array<string> {\n forEach_(tree, (value: typeof tree, key: string) => {\n dst.push(key);\n collectTreeKeys(dst, value);\n });\n return dst;\n}\n","import React from 'react';\nimport {connect} from 'react-redux';\nimport {useSelector} from '../../../../../store/redux-hooks';\n\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport {NoContent} from '../../../../../components/NoContent/NoContent';\nimport {RootState} from '../../../../../store/reducers';\nimport {\n getIsRoot,\n getPool,\n getPools,\n getTree,\n} from '../../../../../store/selectors/scheduling/scheduling';\nimport {PoolAclPanel} from '../../../../../containers/ACL';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {isFinalLoadingStatus} from '../../../../../utils/utils';\nimport {getAclLoadState} from '../../../../../store/selectors/acl';\nimport {LoadingStatus} from '../../../../../constants';\nimport {IdmObjectType} from '../../../../../constants/acl';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\n\nfunction PoolAcl() {\n const isRoot = useSelector(getIsRoot);\n\n const pool = useSelector(getPool);\n const tree = useSelector(getTree);\n const pools = useSelector(getPools);\n\n if (isRoot) {\n return (\n <NoContent\n warning=\"Visualization is not supported for <Root>.\"\n hint=\" Please select a specific pool.\"\n />\n );\n }\n\n return isEmpty_(pools) ? null : (\n <ErrorBoundary>\n <PoolAclPanel key={`${tree}_${pool}`} path={pool} poolTree={tree} />\n </ErrorBoundary>\n );\n}\n\nfunction PoolAclWithRum({loadState}: {loadState: LoadingStatus}) {\n useAppRumMeasureStart({\n type: RumMeasureTypes.SCHEDULING_ACL,\n additionalStartType: RumMeasureTypes.SCHEDULING,\n startDeps: [loadState],\n allowStart: ([loadState]) => !isFinalLoadingStatus(loadState),\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.SCHEDULING_ACL,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <PoolAcl />;\n}\n\nconst mapStateToProps = (state: RootState) => {\n return {\n loadState: getAclLoadState(state, IdmObjectType.POOL),\n };\n};\n\nexport default connect(mapStateToProps)(PoolAclWithRum);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {Progress} from '@gravity-ui/uikit';\n\nimport format from '../../common/hammer/format';\nimport {addProgressStackSpacers} from '../../utils/progress';\n\nimport './ChargeLevel.scss';\n\nconst block = cn('yt-charge-level');\n\nexport function ChargeLevel({className, value = 0}: {value?: number; className?: string}) {\n const {stack, effectiveValue} = React.useMemo(() => {\n const v = Math.max(0, Math.min(100, value));\n\n const res: Array<{value: number; theme: 'misc'}> = [];\n for (let sum = v; sum > 0; sum -= 10) {\n res.push({value: sum >= 10 ? 10 : sum, theme: 'misc'});\n }\n\n return {stack: res, effectiveValue: v};\n }, [value]);\n\n return (\n <Progress\n className={block(null, className)}\n stack={addProgressStackSpacers(stack, {\n spaceSize: 490 / 242,\n startSpace: true,\n endSpace: true,\n })}\n text={`${format.NumberSmart(effectiveValue)}%`}\n />\n );\n}\n","import filter_ from 'lodash/filter';\nimport find_ from 'lodash/find';\nimport reduce_ from 'lodash/reduce';\n\nimport {createSelector} from 'reselect';\nimport {getCurrentPool, getIsRoot, getPool, getTree, getTreeResources} from './scheduling';\n\nimport ypath from '../../../common/thor/ypath';\nimport {ROOT_POOL_NAME} from '../../../constants/scheduling';\nimport {getCluster} from '../global';\nimport {getPools} from './scheduling-pools';\n\nexport const getSchedulingBreadcrumbItems = createSelector(\n [getPool, getPools],\n (pool: string, pools) => {\n let current: string | undefined = pool;\n const path = [];\n while (current) {\n path.push(current);\n const tmp: string = current;\n const {parent} = find_(pools, ({name}) => name === tmp) || {};\n current = parent;\n }\n return path.reverse();\n },\n);\n\nexport interface PoolStaticConfigurationItem {\n name: string;\n cpu?: number;\n cpuLabel?: string;\n gpu?: number;\n memory?: number;\n user_slots?: number;\n network?: number;\n}\n\nfunction makeStaticConfigurationItem(name: string, attrs: object): PoolStaticConfigurationItem {\n return {\n name,\n cpu: ypath.getValue(attrs, '/cpu'),\n gpu: ypath.getValue(attrs, '/gpu'),\n memory: ypath.getValue(attrs, '/user_memory'),\n user_slots: ypath.getValue(attrs, '/user_slots'),\n network: ypath.getValue(attrs, '/network'),\n };\n}\n\nexport const getCurrentPoolGuarantees = createSelector(\n [getIsRoot, getCurrentPool],\n (isRoot, data) => {\n if (isRoot || !data?.attributes) {\n return {};\n }\n\n const burst_guarantee_resources = ypath.getValue(\n data.attributes,\n '/specified_burst_guarantee_resources',\n );\n const resource_flow = ypath.getValue(data.attributes, '/specified_resource_flow');\n\n return {\n strong: makeStaticConfigurationItem(\n 'Strong guarantee',\n ypath.getValue(data.attributes, '/strong_guarantee_resources'),\n ),\n burst: burst_guarantee_resources\n ? makeStaticConfigurationItem('Burst', burst_guarantee_resources)\n : undefined,\n flow: resource_flow ? makeStaticConfigurationItem('Flow', resource_flow) : undefined,\n };\n },\n);\n\nexport const getCurrentPoolStaticConfiguration = createSelector(\n [getCurrentPoolGuarantees],\n ({strong, burst, flow}): Array<PoolStaticConfigurationItem> => {\n return [strong, burst, flow].filter(Boolean) as Array<PoolStaticConfigurationItem>;\n },\n);\n\ninterface PoolTreeStaticConfigurationItem {\n name: string;\n total?: number;\n\n used?: number;\n usedTitle?: string;\n\n free?: number;\n format: 'Bytes' | 'Number';\n level?: number;\n\n lastDayMaxValueSensor?: 'max_operation_count' | 'max_running_operation_count';\n lastDayMaxValueTitle?: string;\n}\n\nfunction calcTreeStaticConfiguration(totals: any, undistributed: any, resourceType: any) {\n const total = ypath.getNumber(totals, '/' + resourceType, 0);\n const free = ypath.getNumber(undistributed, '/' + resourceType, 0);\n return {\n total,\n used: total - free,\n free,\n };\n}\n\nfunction calcTreeStaticConfigurationByDistributed(\n distributed: any,\n undistributed: any,\n resourceType: any,\n) {\n const used = ypath.getNumber(distributed, '/' + resourceType, 0);\n const free = ypath.getNumber(undistributed, '/' + resourceType, 0);\n return {\n total: used + free,\n used,\n free,\n };\n}\n\nexport const getPoolsTopLevel = createSelector([getPools], (pools) => {\n return filter_(pools, ({parent}) => parent === ROOT_POOL_NAME);\n});\n\nconst getPoolsAllocatedOperationsCount = createSelector([getPoolsTopLevel], (topPools) => {\n return reduce_(\n topPools,\n (acc, item) => {\n acc.maxOperationCount += item.maxOperationCount || 0;\n acc.maxRunningOperationCount += item.maxRunningOperationCount || 0;\n return acc;\n },\n {maxOperationCount: 0, maxRunningOperationCount: 0},\n );\n});\n\nexport const getCurrentTreeGpuLimit = createSelector([getTreeResources], (resources): number => {\n return ypath.getNumber(resources, '/resource_limits/gpu', 0);\n});\n\nexport const getOperationsStaticConfiguration = createSelector(\n [getTreeResources, getPoolsAllocatedOperationsCount, getCluster, getTree],\n ({config}, allocated): Array<PoolTreeStaticConfigurationItem> => {\n const operationCount = ypath.getNumber(config, '/max_operation_count', 0);\n const runningOperationCount = ypath.getNumber(config, '/max_running_operation_count', 0);\n\n return [\n {\n name: 'Operations',\n format: 'Number',\n },\n {\n level: 1,\n name: 'Total',\n format: 'Number',\n total: operationCount,\n used: allocated.maxOperationCount,\n usedTitle: 'Max operation count',\n free: operationCount - allocated.maxOperationCount,\n\n lastDayMaxValueSensor: 'max_operation_count',\n lastDayMaxValueTitle: 'Last day max operations',\n },\n {\n level: 1,\n name: 'Running',\n format: 'Number',\n total: runningOperationCount,\n used: allocated.maxRunningOperationCount,\n usedTitle: 'Max running operation count',\n\n free: runningOperationCount - allocated.maxRunningOperationCount,\n\n lastDayMaxValueSensor: 'max_running_operation_count',\n lastDayMaxValueTitle: 'Last day max running operations',\n },\n ];\n },\n);\n\nexport const getCurrentPoolTreeStaticConfiguration = createSelector(\n [getTreeResources, getOperationsStaticConfiguration],\n (treeResources = {}, operationRows): Array<PoolTreeStaticConfigurationItem> => {\n const {resource_distribution_info, resource_limits} = treeResources;\n\n if (!resource_distribution_info) {\n return [];\n }\n\n const {\n undistributed_resources,\n distributed_burst_guarantee_resources: burst,\n undistributed_burst_guarantee_resources: unburst,\n distributed_resource_flow: flow,\n undistributed_resource_flow: unflow,\n } = resource_distribution_info;\n\n const cpuRow: PoolTreeStaticConfigurationItem = {\n level: 0,\n name: 'CPU',\n format: 'Number',\n ...calcTreeStaticConfiguration(resource_limits, undistributed_resources, 'cpu'),\n };\n\n const burstRow: PoolTreeStaticConfigurationItem = {\n level: 1,\n name: 'Burst',\n format: 'Number',\n ...calcTreeStaticConfigurationByDistributed(burst, unburst, 'cpu'),\n total: undefined,\n free: undefined,\n };\n\n const flowRow: PoolTreeStaticConfigurationItem = {\n level: 1,\n name: 'Flow',\n format: 'Number',\n ...calcTreeStaticConfigurationByDistributed(flow, unflow, 'cpu'),\n total: undefined,\n };\n\n flowRow.free = burstRow.used! - flowRow.used!;\n\n const strong: PoolTreeStaticConfigurationItem = {\n level: 1,\n name: 'Strong',\n format: 'Number',\n used:\n cpuRow.used! -\n Math.max(...[0, burstRow.used!, flowRow.used!].filter((v) => !isNaN(v))),\n };\n\n return [\n cpuRow,\n strong,\n burstRow,\n flowRow,\n {\n name: 'Memory',\n format: 'Bytes',\n ...calcTreeStaticConfiguration(\n resource_limits,\n undistributed_resources,\n 'user_memory',\n ),\n },\n {\n name: 'GPU',\n format: 'Number',\n ...calcTreeStaticConfiguration(resource_limits, undistributed_resources, 'gpu'),\n },\n ...operationRows,\n ];\n },\n);\n","import {addI18Keysets} from '../../../../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:scheduling', {en, ru});\n","import cn from 'bem-cn-lite';\nimport React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport {Progress} from '@gravity-ui/uikit';\n\nimport format from '../../../../../common/hammer/format';\n\nimport {ChargeLevel} from '../../../../../components/ChargeLevel/ChargeLevel';\nimport CollapsibleSection from '../../../../../components/CollapsibleSection/CollapsibleSection';\nimport {ColorCircle} from '../../../../../components/ColorCircle/ColorCircle';\nimport MetaTable, {MetaTableItem} from '../../../../../components/MetaTable/MetaTable';\nimport {Tooltip} from '../../../../../components/Tooltip/Tooltip';\nimport {ROOT_POOL_NAME} from '../../../../../constants/scheduling';\nimport {\n getCurrentPool,\n getSchedulingTreeMainResource,\n} from '../../../../../store/selectors/scheduling/scheduling';\nimport {\n PoolStaticConfigurationItem,\n getCurrentPoolGuarantees,\n} from '../../../../../store/selectors/scheduling/scheduling-ts';\nimport {addProgressStackSpacers} from '../../../../../utils/progress';\nimport {PoolData} from '../../../../../utils/scheduling/pool-child';\nimport {calcProgressProps} from '../../../../../utils/utils';\n\nimport i18n from './i18n';\nimport './SchedulingMeta.scss';\n\nconst block = cn('yt-scheduling-meta');\n\nexport function SchedulingMeta() {\n const pool = useSelector(getCurrentPool);\n\n const guarantees = useSelector(getCurrentPoolGuarantees);\n const mainResource = useSelector(getSchedulingTreeMainResource);\n\n // eslint-disable-next-line complexity\n const {items, subTitles} = React.useMemo(() => {\n const {mode, resources, integralType, flowCPU = 0, flowGPU = 0, weight} = pool ?? {};\n const {cpu, gpu, user_memory} = resources ?? {};\n\n const hasIntegralType =\n (integralType && integralType !== 'none') || flowCPU > 0 || flowGPU > 0;\n\n const guaranteeType = hasIntegralType ? format.ReadableField(integralType) : '';\n\n const burstUnit = formatUnits(guarantees.burst);\n const flowUnit = formatUnits(guarantees.flow);\n\n const res = {\n items: [\n [\n {key: i18n('mode'), value: format.ReadableField(mode)},\n {key: i18n('weight'), value: format.Number(weight)},\n {\n key: i18n('operations-running'),\n value: renderOperationsProgress(pool, 'running'),\n },\n {\n key: i18n('operations'),\n value: renderOperationsProgress(pool, 'total'),\n },\n ],\n [\n {\n key: 'GPU',\n value: renderProgress(gpu?.usage, gpu?.min),\n visible: Boolean(gpu?.usage || gpu?.min),\n },\n {key: 'CPU', value: renderProgress(cpu?.usage, cpu?.min)},\n {\n key: 'RAM',\n value: renderProgress(user_memory?.usage, user_memory?.min, 'Bytes'),\n },\n ],\n ] as Array<Array<MetaTableItem>>,\n subTitles: [i18n('general'), i18n('strong-guarantees')],\n };\n\n const type = mainResource === 'memory' ? 'user_memory' : (mainResource ?? 'cpu');\n const {accumulated_resource_volume, integral_pool_capacity} = pool?.attributes ?? {};\n const {[type]: capacity = NaN} = integral_pool_capacity ?? {};\n\n if (capacity >= 0 || burstUnit.length || flowUnit.length) {\n const {[type]: accumulated = NaN} = accumulated_resource_volume ?? {};\n\n const formatFn = (v: number) => {\n switch (type) {\n case 'user_memory':\n return format.Bytes(v) + '*hours';\n case 'cpu':\n case 'gpu':\n return format.NumberSmart(v) + ' CPU*hours';\n case 'user_slots':\n return format.NumberSmart(v) + ' Slot*hours';\n }\n };\n\n res.items.push([\n {key: i18n('guarantee-type'), value: guaranteeType},\n {\n key: i18n('capacity'),\n value: (\n <Tooltip\n content={\n <MetaTable\n items={[\n {\n key: 'accumulated_resource_volume',\n value: formatFn(accumulated / 3600),\n },\n {\n key: 'integral_pool_capacity',\n value: formatFn(capacity / 3600),\n },\n ]}\n />\n }\n >\n <ChargeLevel value={(accumulated / capacity) * 100} />\n </Tooltip>\n ),\n visible: capacity >= 0,\n },\n {key: i18n('burst'), value: burstUnit, visible: burstUnit.length > 0},\n {key: i18n('flow'), value: flowUnit, visible: flowUnit.length > 0},\n ]);\n res.subTitles.push(i18n('integral-guarantees'));\n }\n return res;\n }, [pool, guarantees, mainResource]);\n\n if (!pool?.name || pool?.name === ROOT_POOL_NAME) {\n return null;\n }\n\n return (\n <CollapsibleSection className={block()} name={pool.name}>\n <MetaTable items={items} subTitles={subTitles} />\n </CollapsibleSection>\n );\n}\n\nfunction renderProgress(usage?: number, limit?: number, format?: 'Bytes') {\n return (\n <Progress\n className={block('progress')}\n {...Object.assign(calcProgressProps(usage, limit, format))}\n theme=\"success\"\n />\n );\n}\n\nfunction renderOperationsProgress(\n pool: PoolData<'pool'> | undefined,\n progressType: 'running' | 'total',\n) {\n if (!pool) {\n return null;\n }\n\n const {\n operationCount: count = NaN,\n maxOperationCount: maxCount = NaN,\n runningOperationCount: running = NaN,\n maxRunningOperationCount: maxRunning = NaN,\n lightweightRunningOperationCount: lightweightRunning = NaN,\n } = pool;\n\n const pending = count - running - lightweightRunning;\n\n const runningStr = format.Number(running);\n const pendingStr = format.Number(pending);\n const maxRunningStr = format.Number(maxRunning);\n const maxCountStr = format.Number(maxCount);\n const lightweightStr = format.Number(lightweightRunning);\n\n const runningText = `${runningStr} / ${maxRunningStr}`;\n const totalText = `${runningStr} + ${lightweightStr} + ${pendingStr} / ${maxCountStr}`;\n\n return (\n <Tooltip\n className={block('progress', {operation: true})}\n content={\n <MetaTable\n items={\n progressType === 'running'\n ? [\n {\n key: i18n('operations-running-max'),\n value: maxRunningStr,\n },\n {\n key: 'operations-running',\n label: (\n <span className={block('progress-meta-subitem')}>\n <ColorCircle\n marginRight\n color=\"var(--success-color)\"\n />\n {i18n('operations-running')}\n </span>\n ),\n value: runningStr,\n },\n ]\n : [\n {\n key: i18n('operation-count-max'),\n value: maxCountStr,\n },\n {\n key: 'operations-running',\n label: (\n <span className={block('progress-meta-subitem')}>\n <ColorCircle\n marginRight\n color=\"var(--success-color)\"\n />\n {i18n('operations-running')}\n </span>\n ),\n value: runningStr,\n },\n {\n key: 'lightweigh',\n label: (\n <span className={block('progress-meta-subitem')}>\n <ColorCircle\n marginRight\n color=\"var(--default-color)\"\n />\n {i18n('operations-running-lightweigh')}\n </span>\n ),\n value: lightweightStr,\n },\n {\n key: 'pending',\n label: (\n <span className={block('progress-meta-subitem')}>\n <ColorCircle marginRight color=\"var(--info-color)\" />\n {i18n('operations-pending')}\n </span>\n ),\n value: pendingStr,\n },\n ]\n }\n />\n }\n >\n {progressType === 'running' ? (\n <Progress\n className={block('progress-control', {left: true})}\n stack={addProgressStackSpacers([\n {\n value: (running / maxRunning) * 100,\n theme: 'success',\n },\n ])}\n text={runningText}\n />\n ) : (\n <Progress\n className={block('progress-control', {right: true})}\n stack={addProgressStackSpacers([\n {\n value: (running / maxCount) * 100,\n theme: 'success',\n },\n {\n value: (lightweightRunning / maxCount) * 100,\n theme: 'default',\n },\n {\n value: (pending / maxCount) * 100,\n theme: 'info',\n },\n ])}\n text={totalText}\n />\n )}\n </Tooltip>\n );\n}\n\nfunction formatUnits(item?: PoolStaticConfigurationItem) {\n const {gpu, cpu, memory} = item ?? {};\n return [\n gpu! > 0 && `${format.Number(gpu)} GPU`,\n cpu! > 0 && `${format.Number(cpu)} CPU`,\n memory! > 0 && `${format.Bytes(memory)} RAM`,\n ]\n .filter(Boolean)\n .join(', ');\n}\n","import {USE_CACHE, USE_MAX_SIZE} from '../../shared/constants/yt-api';\nimport {BatchSubRequest} from '../../shared/yt-types';\n\nexport function makeGet(\n path: string,\n parameters?: Omit<(BatchSubRequest & {command: 'get'})['parameters'], 'path'>,\n) {\n return {\n command: 'get' as const,\n parameters: {\n path,\n ...parameters,\n ...USE_CACHE,\n },\n };\n}\n\nexport function makeList(\n path: string,\n parameters?: Omit<(BatchSubRequest & {command: 'list'})['parameters'], 'path'>,\n) {\n return {\n command: 'list' as const,\n parameters: {\n path,\n ...parameters,\n ...USE_CACHE,\n ...USE_MAX_SIZE,\n },\n };\n}\n","import {ThunkAction} from 'redux-thunk';\nimport {RootState} from '../../reducers';\n\nimport forEach_ from 'lodash/forEach';\nimport reduce_ from 'lodash/reduce';\n\nimport {\n ExpandedPoolInfo,\n ExpandedPoolsAction,\n PoolCypressData,\n} from '../../reducers/scheduling/expanded-pools';\n\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {USE_IGNORE_NODE_DOES_NOT_EXIST, splitBatchResults} from '../../../utils/utils';\nimport {makeGet, makeList} from '../../../utils/batch';\nimport {\n CHANGE_POOL,\n ROOT_POOL_NAME,\n SCHEDULING_EXPANDED_POOLS_FAILURE,\n SCHEDULING_EXPANDED_POOLS_PARTITION,\n SCHEDULING_EXPANDED_POOLS_REQUEST,\n SCHEDULING_EXPANDED_POOLS_SUCCESS,\n} from '../../../constants/scheduling';\nimport {calculatePoolPath, getPool, getPools, getTree} from '../../selectors/scheduling/scheduling';\nimport {\n getExpandedPoolsLoadAll,\n getSchedulingOperationsExpandedPools,\n} from '../../selectors/scheduling/expanded-pools';\nimport {EMPTY_OBJECT} from '../../../constants/empty';\nimport {PoolInfo, getSchedulingPoolsMapByName} from '../../selectors/scheduling/scheduling-pools';\nimport {BatchSubRequest} from '../../../../shared/yt-types';\nimport {SchedulingAction} from '../../../store/reducers/scheduling/scheduling';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {flattenAttributes} from '../../../utils/scheduling/scheduling';\nimport {UIBatchError} from '../../../utils/errors/ui-error';\nimport {PoolTreeNode} from '../../../utils/scheduling/pool-child';\nimport {toaster} from '../../../utils/toaster';\n\ntype ExpandedPoolsThunkAction = ThunkAction<\n any,\n RootState,\n any,\n ExpandedPoolsAction | SchedulingAction\n>;\n\nconst cancelHelper = new CancelHelper();\n\nconst POOL_FIELDS_TO_LOAD = [\n 'accumulated_resource_ratio_volume',\n 'accumulated_resource_volume',\n 'demand_ratio',\n 'detailed_fair_share',\n 'dominant_resource',\n 'effective_lightweight_operations_enabled',\n 'estimated_burst_usage_duration_sec',\n 'fair_share_ratio',\n 'fifo_index',\n 'fifo_sort_parameters',\n 'integral_guarantee_type',\n 'integral_pool_capacity',\n 'is_ephemeral',\n 'max_operation_count',\n 'max_running_operation_count',\n 'lightweight_running_operation_count',\n 'max_share_ratio',\n 'min_share_ratio',\n 'mode',\n 'operation_count',\n 'parent',\n 'pool_operation_count',\n 'child_pool_count',\n 'resource_demand',\n 'resource_limits',\n 'specified_resource_limits',\n 'resource_usage',\n 'estimated_guarantee_resources',\n 'effective_strong_guarantee_resources',\n 'running_operation_count',\n 'specified_burst_guarantee_resources',\n 'specified_resource_flow',\n 'starvation_status',\n 'starving',\n 'strong_guarantee_resources',\n 'usage_ratio',\n 'weight',\n 'abc',\n];\n\nconst POOL_TREE_GET_ATTRS = [\n 'integral_guarantees',\n 'weight',\n 'max_operation_count',\n 'max_running_operation_count',\n 'strong_guarantee_resources',\n 'resource_limits',\n 'specified_resource_limits',\n 'forbid_immediate_operations',\n 'create_ephemeral_subpools',\n 'fifo_sort_parameters',\n 'config',\n 'folder_id',\n];\n\nclass EmptyFullPath extends Error {}\n\nexport function loadExpandedPools(tree: string): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const pool = getPool(getState());\n\n if (!tree) {\n return undefined;\n }\n\n if (pool === ROOT_POOL_NAME) {\n return dispatch(loadExpandedOperationsAndPools(tree));\n } else {\n return ytApiV3Id\n .executeBatch<{full_path: string; is_ephemeral?: boolean}>(\n YTApiId.schedulingPoolFullPath,\n {\n requests: [\n {\n command: 'get' as const,\n parameters: {\n path: `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools/${pool}`,\n fields: ['is_ephemeral', 'full_path'],\n },\n },\n ],\n },\n )\n .then(([{output}]) => {\n const {full_path, is_ephemeral} = output ?? {};\n if (!full_path) {\n throw new EmptyFullPath();\n } else {\n dispatch(addFullPathToExpandedPoolsNoLoad(tree, full_path, is_ephemeral));\n dispatch(loadExpandedOperationsAndPools(tree));\n }\n })\n .catch((e) => {\n if (e instanceof EmptyFullPath) {\n dispatch({type: CHANGE_POOL, data: {pool: ROOT_POOL_NAME}});\n /**\n * We don't need to call `dispatch(loadExpandedOperationsAndPools(tree))` after `CHANGE_POOL`.\n * The call will be triggered by SchedulingExpandedPoolsUpdater.\n */\n // dispatch(loadExpandedOperationsAndPools(tree));\n } else {\n toaster.add({\n name: 'schedulingPoolFullPath',\n theme: 'danger',\n title: '',\n });\n }\n });\n }\n };\n}\n\nfunction loadExpandedOperationsAndPools(tree: string): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n\n const loadAll = getExpandedPoolsLoadAll(state);\n const expandedPools: Map<string, ExpandedPoolInfo> = loadAll\n ? new Map()\n : (getSchedulingOperationsExpandedPools(state)[tree] ?? new Map());\n const expandedPoolNames: Array<string> = [...expandedPools.keys()];\n\n const operationsExpandedPools: Array<string> = [...expandedPoolNames];\n\n const operationsRequests: Array<BatchSubRequest> = [];\n if (loadAll) {\n operationsRequests.push(\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/operations`),\n );\n } else {\n const prefix = `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/operations_by_pool`;\n operationsExpandedPools.forEach((item) => {\n operationsRequests.push(makeGet(`${prefix}/${item}`));\n });\n }\n\n const loadAllPools = loadAll;\n const poolsRequests: Array<BatchSubRequest> = [];\n const poolsChildrenRequests: Array<BatchSubRequest> = [];\n const poolsCypressDataRequests: Array<BatchSubRequest> = [];\n\n const poolsExpandedPools: Array<string> = [ROOT_POOL_NAME, ...expandedPoolNames];\n\n if (loadAllPools) {\n poolsRequests.push(\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools`, {\n fields: POOL_FIELDS_TO_LOAD,\n }),\n );\n poolsCypressDataRequests.push(\n makeGet(`//sys/pool_trees/${tree}`, {attributes: POOL_TREE_GET_ATTRS}),\n );\n } else {\n poolsExpandedPools.forEach((pool) => {\n poolsRequests.push(\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools/${pool}`, {\n fields: POOL_FIELDS_TO_LOAD,\n }),\n );\n poolsChildrenRequests.push(\n makeGet(\n `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/child_pools_by_pool/${pool}`,\n {\n fields: POOL_FIELDS_TO_LOAD,\n },\n ),\n );\n const {parentPoolPath, isEphemeral} = expandedPools.get(pool) ?? {};\n const cypressDataPath = parentPoolPath\n ? `//sys/pool_trees/${tree}/${parentPoolPath}/${pool}`\n : `//sys/pool_trees/${tree}/${pool}`;\n if (pool === ROOT_POOL_NAME || !isEphemeral) {\n poolsCypressDataRequests.push(\n makeList(\n pool === ROOT_POOL_NAME ? `//sys/pool_trees/${tree}` : cypressDataPath,\n {\n attributes: POOL_TREE_GET_ATTRS,\n },\n ),\n );\n }\n });\n }\n\n cancelHelper.removeAllRequests();\n\n dispatch({type: SCHEDULING_EXPANDED_POOLS_REQUEST});\n return Promise.all([\n operationsRequests.length\n ? ytApiV3Id.executeBatch(YTApiId.schedulingLoadOperationsPerPool, {\n parameters: {requests: operationsRequests},\n cancellation: cancelHelper.saveCancelToken,\n })\n : Promise.resolve([]),\n\n ytApiV3Id.executeBatch(\n loadAllPools ? YTApiId.schedulingLoadPoolsAll : YTApiId.schedulingLoadPoolsPerPool,\n {\n parameters: {requests: poolsRequests},\n cancellation: cancelHelper.saveCancelToken,\n },\n ),\n loadAllPools\n ? Promise.resolve([])\n : ytApiV3Id.executeBatch(YTApiId.schedulingLoadChildrenPerPool, {\n parameters: {requests: poolsChildrenRequests},\n cancellation: cancelHelper.saveCancelToken,\n }),\n !poolsCypressDataRequests.length\n ? Promise.resolve([])\n : ytApiV3Id.executeBatch(YTApiId.schedulingLoadCypressDataPerPool, {\n parameters: {requests: poolsCypressDataRequests},\n cancellation: cancelHelper.saveCancelToken,\n }),\n ])\n .then(([operationsResults, poolsResults, poolsChildrenResults, poolsCypressData]) => {\n const error = new UIBatchError('Failed to load expanded pools');\n const {results: operations, errorIgnoredIndices} = splitBatchResults(\n operationsResults,\n error,\n USE_IGNORE_NODE_DOES_NOT_EXIST,\n );\n const rawOperations = reduce_(\n operations,\n (acc, data) => {\n return Object.assign(acc, data);\n },\n {},\n );\n\n const poolsToCollapse: Record<string, false> = {};\n forEach_(errorIgnoredIndices, (pos) => {\n poolsToCollapse[operationsExpandedPools[pos]] = false;\n });\n\n const rawPools: Record<string, PoolInfo> = {};\n const cypressData: Record<string, PoolCypressData> = {};\n\n if (loadAllPools) {\n const {results: pools} = splitBatchResults<Record<string, PoolInfo>>(\n poolsResults,\n error,\n );\n const [value = {}] = pools ?? [];\n Object.assign(rawPools, value);\n\n const {\n results: [data],\n } = splitBatchResults(poolsCypressData, error);\n Object.assign(cypressData, flattenAttributes(data));\n } else {\n const {\n results: pools,\n resultIndices,\n errorIgnoredIndices: poolsReqeustsIgnored,\n } = splitBatchResults<PoolInfo>(\n poolsResults,\n error,\n USE_IGNORE_NODE_DOES_NOT_EXIST,\n );\n pools.forEach((poolInfo, index) => {\n const name = poolsExpandedPools[resultIndices[index]];\n rawPools[name] = poolInfo;\n });\n\n const {\n results: poolChildren,\n errorIgnoredIndices: poolsChildrenRequestsIgnored,\n } = splitBatchResults<Record<string, PoolInfo>>(\n poolsChildrenResults,\n error,\n USE_IGNORE_NODE_DOES_NOT_EXIST,\n );\n poolChildren.forEach((children) => {\n Object.assign(rawPools, children);\n });\n\n const {\n results: cypressDataChildrenPerPool,\n errorIgnoredIndices: poolsCypressDataRequestsIgnored,\n } = splitBatchResults<Array<PoolCypressData>>(\n poolsCypressData,\n error,\n USE_IGNORE_NODE_DOES_NOT_EXIST,\n );\n cypressDataChildrenPerPool.forEach((poolChildrenCypressData) => {\n poolChildrenCypressData.forEach((item) => {\n cypressData[item.$value] = item;\n });\n });\n\n forEach_(\n [\n ...poolsReqeustsIgnored,\n ...poolsChildrenRequestsIgnored,\n ...poolsCypressDataRequestsIgnored,\n ],\n (position) => {\n const poolName = poolsExpandedPools[position];\n poolsToCollapse[poolName] = false;\n },\n );\n setExpandedPools(poolsToCollapse);\n }\n\n const poolNames = Object.keys(rawPools).sort();\n\n dispatch({\n type: SCHEDULING_EXPANDED_POOLS_SUCCESS,\n data: {\n expandedPoolsTree: tree,\n rawOperations: Object.keys(rawOperations).length\n ? rawOperations\n : EMPTY_OBJECT,\n rawPools: poolNames.length\n ? poolNames.reduce(\n (acc, key) => {\n acc[key] = rawPools[key];\n return acc;\n },\n {} as typeof rawPools,\n )\n : EMPTY_OBJECT,\n flattenCypressData: Object.keys(cypressData).length\n ? cypressData\n : EMPTY_OBJECT,\n },\n });\n\n if (error.inner_errors?.length) {\n throw error;\n }\n })\n .catch((error) => {\n if (!isCancelled(error)) {\n dispatch({\n type: SCHEDULING_EXPANDED_POOLS_FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nexport function setExpandedPools(changes: Record<string, boolean>): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const tree = getTree(getState());\n const expandedPools = getSchedulingOperationsExpandedPools(state);\n\n const poolsByName = getSchedulingPoolsMapByName(state);\n\n const treeExpandedPools = new Map(expandedPools[tree]);\n forEach_(changes, (expanded, poolName) => {\n if (expanded) {\n const expandedPoolInfo = calcExpandedPoolInfo(poolName, poolsByName);\n treeExpandedPools.set(poolName, expandedPoolInfo);\n } else {\n treeExpandedPools.delete(poolName);\n }\n });\n\n dispatch(updateExpandedPoolNoLoad(tree, treeExpandedPools));\n dispatch(loadExpandedPools(tree));\n };\n}\n\nfunction addFullPathToExpandedPoolsNoLoad(\n tree: string,\n /**\n * elements of the array should have the same format as `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools/${pool}/full_path`\n */\n fullPath: string,\n isEphemeral?: boolean,\n): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const oldExpandedPools = getSchedulingOperationsExpandedPools(state);\n const treeExpandedPools = new Map(oldExpandedPools[tree]);\n\n /**\n * `fullPath` value starts from `/`, example: `/mypool/child/subchild`\n * so we have to use `.slice(1)` to remove first empty string\n */\n const parts = fullPath.split('/').slice(1);\n\n for (let i = 0; i < parts.length; ++i) {\n const poolName = parts[i];\n const parentPoolPath = parts.slice(0, i).join('/');\n treeExpandedPools.set(poolName, {parentPoolPath, isEphemeral});\n }\n\n dispatch(updateExpandedPoolNoLoad(tree, treeExpandedPools));\n };\n}\n\nfunction updateExpandedPoolNoLoad(\n tree: string,\n treeExpandedPools: Map<string, ExpandedPoolInfo>,\n): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const oldExpandedPools = getSchedulingOperationsExpandedPools(getState());\n\n const expandedPools = {\n ...oldExpandedPools,\n [tree]: treeExpandedPools,\n };\n\n dispatch({\n type: SCHEDULING_EXPANDED_POOLS_PARTITION,\n data: {expandedPools},\n });\n };\n}\n\nexport function resetExpandedPools(tree: string): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n if (!tree) {\n return;\n }\n\n const state = getState();\n const {[tree]: old, ...rest} = getSchedulingOperationsExpandedPools(state);\n\n if (old?.size) {\n dispatch({\n type: SCHEDULING_EXPANDED_POOLS_PARTITION,\n data: {\n expandedPools: {\n ...rest,\n [tree]: new Map<string, ExpandedPoolInfo>(),\n },\n },\n });\n }\n };\n}\n\nexport function getSchedulingOperationsCount(): ThunkAction<number, RootState, any, any> {\n return (_dispatch, getState) => {\n const state = getState();\n\n const tree = getSchedulingPoolsMapByName(state);\n const root = tree[ROOT_POOL_NAME];\n return root?.operationCount || 0;\n };\n}\n\nexport function getPoolPathsByName(\n poolName: string,\n): ThunkAction<{fullPath: string; orchidPath: string}, RootState, unknown, any> {\n return (_dispatch, getState) => {\n const state = getState();\n const pools = getPools(state);\n const tree = getTree(state);\n\n return {\n fullPath: calculatePoolPath(poolName, pools, tree),\n orchidPath: `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools/${poolName}`,\n };\n };\n}\n\nexport function setLoadAllOperations(loadAll: boolean): ExpandedPoolsThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n dispatch({\n type: SCHEDULING_EXPANDED_POOLS_PARTITION,\n data: {loadAll},\n });\n\n const tree = getTree(state);\n dispatch(loadExpandedPools(tree));\n };\n}\n\nfunction calcExpandedPoolInfo(\n poolName: string,\n poolsByName: Record<string, PoolTreeNode>,\n): ExpandedPoolInfo {\n let data = poolsByName[poolName];\n const isEphemeral = data?.isEphemeral;\n let res = '';\n while (data?.parent && data.parent !== ROOT_POOL_NAME) {\n res = res ? `${data.parent}/${res}` : data.parent;\n data = poolsByName[data.parent];\n }\n return {parentPoolPath: res, isEphemeral};\n}\n","import forEach_ from 'lodash/forEach';\nimport isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\nimport update_ from 'lodash/update';\n\nimport {\n INTEGRAL_GUARANTEES_PREFIX,\n InitialPoolResourceInfo,\n POOL_RESOURCE_TYPE_TO_ATTRIBUTE,\n PoolResourceType,\n computePoolPath,\n prepareCurrentTree,\n prepareTrees,\n} from '../../../utils/scheduling/scheduling';\nimport {\n extractBatchV4Values,\n getBatchError,\n splitBatchResults,\n wrapApiPromiseByToaster,\n} from '../../../utils/utils';\nimport {makeGet, makeList} from '../../../utils/batch';\nimport {updateNodeAttributes} from '../../../utils/cypress-attributes';\n\nimport {ThunkAction} from 'redux-thunk';\n\n// @ts-expect-error\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {\n getPools,\n getSchedulingIsInitialLoading,\n getTree,\n} from '../../../store/selectors/scheduling/scheduling';\n\nimport {\n POOL_TOGGLE_DELETE_VISIBILITY,\n SCHEDULING_DATA_FAILURE,\n SCHEDULING_DATA_PARTITION,\n SCHEDULING_DATA_REQUEST,\n SCHEDULING_DATA_SUCCESS,\n SCHEDULING_DELETE_POOL_FAILURE,\n SCHEDULING_DELETE_POOL_REQUEST,\n SCHEDULING_DELETE_POOL_SUCCESS,\n} from '../../../constants/scheduling';\nimport {loadExpandedPools} from './expanded-pools';\nimport {RumWrapper, YTApiId, ytApiV3Id, ytApiV4Id} from '../../../rum/rum-wrap-api';\nimport {getCluster} from '../../../store/selectors/global';\nimport {RumMeasureTypes} from '../../../rum/rum-measure-types';\nimport type {RootState} from '../../../store/reducers';\nimport type {SchedulingAction} from '../../../store/reducers/scheduling/scheduling';\nimport {\n getSchedulingAttributesToFilterParams,\n schedulingOverviewHasFilter,\n} from '../../../store/selectors/scheduling/attributes-to-filter';\nimport {USE_CACHE} from '../../../../shared/constants/yt-api';\nimport {toaster} from '../../../utils/toaster';\n\nimport {PoolTreeNode} from '../../../utils/scheduling/pool-child';\n\ntype SchedulingThunkAction<T = unknown> = ThunkAction<T, RootState, unknown, SchedulingAction>;\n\nexport function loadSchedulingData(): SchedulingThunkAction {\n return (dispatch, getState) => {\n dispatch({type: SCHEDULING_DATA_REQUEST});\n\n const state = getState();\n const isInitialLoading = getSchedulingIsInitialLoading(state);\n\n const cluster = getCluster(state);\n const rumId = new RumWrapper(cluster, RumMeasureTypes.SCHEDULING);\n return rumId\n .fetch(\n YTApiId.schedulingData,\n ytApiV3Id.executeBatch(YTApiId.schedulingData, {\n requests: [\n makeGet('//sys/scheduler/@alerts'),\n makeList('//sys/scheduler/orchid/scheduler/pool_trees'),\n makeGet('//sys/scheduler/orchid/scheduler/default_pool_tree'),\n ],\n ...USE_CACHE,\n }),\n )\n .then((data) => {\n const {\n error,\n results: [schedulerAlerts, rawTrees, defaultTree],\n } = splitBatchResults(data, 'Failed to fetch scheduling data');\n\n if (error) {\n return Promise.reject(error);\n }\n\n const state = getState();\n\n const trees = prepareTrees(rawTrees);\n const tree = prepareCurrentTree(\n defaultTree,\n trees,\n state.scheduling.scheduling.tree,\n );\n\n if (isInitialLoading) {\n dispatch(schedulingLoadFilterAttributes(tree, {checkFilters: true}));\n }\n\n dispatch({\n type: SCHEDULING_DATA_PARTITION,\n data: {schedulerAlerts, trees, tree},\n });\n\n const treeRequests = [\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/resource_usage`),\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/resource_limits`),\n makeGet(`//sys/scheduler/orchid/scheduler/pool_trees/${tree}/config`),\n makeGet(\n `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/resource_distribution_info`,\n ),\n ];\n\n if (isInitialLoading) {\n /**\n * We don't need to call `dispatch(loadExpandedPools(tree))` for this branch of code,\n * the call should be triggered by SchedulingExpandedPoolsUpdater\n */\n //dispatch(loadExpandedPools(tree));\n } else {\n dispatch(loadExpandedPools(tree));\n }\n\n return rumId\n .fetch(\n YTApiId.schedulingLoadTree,\n ytApiV4Id.executeBatch(YTApiId.schedulingLoadTree, {\n requests: treeRequests,\n ...USE_CACHE,\n }),\n )\n .then((treeData) => {\n const extracted = extractBatchV4Values(treeData, treeRequests);\n const {error, results} = splitBatchResults(\n extracted.results,\n 'Failed to fetch tree details',\n );\n if (error) {\n throw error;\n }\n return results;\n });\n })\n .then(([resource_usage, resource_limits, config, resource_distribution_info]) => {\n const treeResources = {\n resource_usage,\n resource_limits,\n config,\n resource_distribution_info,\n };\n\n dispatch({\n type: SCHEDULING_DATA_SUCCESS,\n data: {\n treeResources,\n },\n });\n })\n .catch((error) => {\n if (error.code !== yt.codes.CANCELLED) {\n dispatch({\n type: SCHEDULING_DATA_FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nexport function deletePool(item?: {name: string; parent?: string}): SchedulingThunkAction {\n return (dispatch, getState) => {\n if (!item) {\n return;\n }\n\n const state = getState();\n\n const tree = getTree(state);\n const pools = getPools(state);\n const path = computePoolPath(item, pools);\n\n dispatch({type: SCHEDULING_DELETE_POOL_REQUEST});\n\n return yt.v3\n .remove({\n path: `//sys/pool_trees/${tree}/${path}`,\n })\n .then(() => {\n toaster.add({\n name: 'delete pool',\n autoHiding: 10000,\n theme: 'success',\n title: `Successfully deleted ${item.name}. Please wait.`,\n });\n\n dispatch({type: SCHEDULING_DELETE_POOL_SUCCESS});\n dispatch(closePoolDeleteModal());\n setTimeout(() => dispatch(loadSchedulingData()), 3000);\n })\n .catch((error: any) => {\n if (error.code !== yt.codes.CANCELLED) {\n dispatch({\n type: SCHEDULING_DELETE_POOL_FAILURE,\n data: {error},\n });\n\n return Promise.reject(error);\n }\n return null;\n });\n };\n}\n\nexport function openPoolDeleteModal(item: PoolTreeNode): SchedulingAction {\n return {\n type: POOL_TOGGLE_DELETE_VISIBILITY,\n data: {\n visibility: true,\n item,\n },\n };\n}\n\nexport function closePoolDeleteModal(): SchedulingAction {\n return {\n type: POOL_TOGGLE_DELETE_VISIBILITY,\n data: {\n visibility: false,\n item: undefined,\n },\n };\n}\n\ntype PoolResources = Partial<\n Record<Exclude<PoolResourceType, 'guaranteeType'>, InitialPoolResourceInfo>\n>;\n\ninterface SetResourceGuaranteeParams {\n poolPath: string;\n values: PoolResources & {guaranteeType?: string};\n initials: PoolResources;\n tree: string;\n}\n\nexport function setPoolAttributes(params: SetResourceGuaranteeParams) {\n const {poolPath, values, initials, tree} = params;\n if (isEmpty_(values)) {\n return Promise.resolve();\n }\n\n const transferData: Array<{diff: number; source: string; path: string}> = [];\n const toModify: Array<{attr: string; value: any}> = [];\n\n const {guaranteeType, ...restValues} = values;\n\n forEach_(restValues, (v, k) => {\n const {limit, source} = v || {};\n const key = k as keyof typeof restValues;\n\n const attr = POOL_RESOURCE_TYPE_TO_ATTRIBUTE[key];\n if (!source || limit === undefined) {\n toModify.push({attr, value: limit});\n } else {\n const prevLimit = initials[key]?.limit || 0;\n const diff = (limit || 0) - prevLimit;\n if (diff) {\n transferData.push({diff, source, path: attr});\n }\n }\n });\n\n if (Object.hasOwnProperty.call(values, 'guaranteeType')) {\n toModify.push({\n attr: POOL_RESOURCE_TYPE_TO_ATTRIBUTE['guaranteeType'],\n value: guaranteeType,\n });\n }\n\n return updateNodeAttributes(poolPath, toModify).then(() => {\n return transferPoolQuota({poolPath, transferData, tree});\n });\n}\n\ninterface TransferPoolQuotaParams {\n poolPath: string;\n transferData: Array<{diff: number; source: string; path: string}>;\n tree: string;\n}\n\nfunction transferPoolQuota({poolPath, transferData, tree}: TransferPoolQuotaParams) {\n if (isEmpty_(transferData)) {\n return Promise.resolve();\n }\n const tmp = poolPath.split('/');\n const dstPool = tmp[tmp.length - 1];\n\n const requests = map_(transferData, (v) => {\n const {diff, source, path} = v;\n const transferPath = path.startsWith(INTEGRAL_GUARANTEES_PREFIX)\n ? path.substr(INTEGRAL_GUARANTEES_PREFIX.length)\n : path;\n const dotPath = transferPath.replace(/\\//g, '.');\n\n const delta = update_({}, dotPath, () => Math.abs(diff));\n\n return {\n command: 'transfer_pool_resources' as const,\n parameters: {\n source_pool: diff > 0 ? source : dstPool,\n destination_pool: diff > 0 ? dstPool : source,\n pool_tree: tree,\n resource_delta: delta,\n },\n };\n });\n\n return ytApiV4Id\n .executeBatch(YTApiId.schedulingTransferPoolQuota, {requests})\n .then((res: any) => {\n const err = getBatchError(res.results, 'Failed to transfer pool quota');\n if (err) {\n return Promise.reject(err);\n }\n return res;\n });\n}\n\nexport function schedulingLoadFilterAttributes(\n tree: string,\n {checkFilters}: {checkFilters?: boolean} = {},\n): SchedulingThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n\n if (checkFilters && !schedulingOverviewHasFilter(state)) {\n return undefined;\n }\n\n const {lastTime, lastTree} = getSchedulingAttributesToFilterParams(state);\n if (tree === lastTree && Date.now() - lastTime < 120000) {\n return undefined;\n }\n\n return wrapApiPromiseByToaster(\n ytApiV3Id.get(YTApiId.schedulingFilterAttributes, {\n path: `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools`,\n fields: ['parent', 'abc'],\n ...USE_CACHE,\n }),\n {\n skipSuccessToast: true,\n toasterName: 'schedulingLoadFilterAttributes',\n errorContent: 'Failed to load attributes required for filtering',\n },\n ).then((attributesToFilter) => {\n dispatch({\n type: SCHEDULING_DATA_PARTITION,\n data: {\n attributesToFilter,\n attributesToFilterParams: {lastTime: Date.now(), lastTree: tree},\n },\n });\n });\n };\n}\n\nexport function schedulingSetAbcFilter(abcService?: {\n id?: number;\n slug?: string;\n}): SchedulingThunkAction {\n return (dispatch, getState) => {\n const {id, slug} = abcService ?? {};\n dispatch(schedulingLoadFilterAttributes(getTree(getState())));\n dispatch({\n type: SCHEDULING_DATA_PARTITION,\n data: {abcServiceFilter: {id, slug}},\n });\n };\n}\n","import {ThunkAction} from 'redux-thunk';\n\nimport isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\nimport mapKeys_ from 'lodash/mapKeys';\nimport mapValues_ from 'lodash/mapValues';\nimport omit_ from 'lodash/omit';\nimport pick_ from 'lodash/pick';\nimport pickBy_ from 'lodash/pickBy';\n\nimport {BatchSubRequest} from '../../../../shared/yt-types';\n\nimport {RootState} from '../../../store/reducers';\nimport {getSchedulingNS} from '../../../store/selectors/settings';\nimport {toggleFavourite} from '../../../store/actions/favourites';\nimport {\n SchedulingContentMode,\n getPools,\n getTree,\n} from '../../../store/selectors/scheduling/scheduling';\nimport {SchedulingAction, SchedulingState} from '../../../store/reducers/scheduling/scheduling';\nimport {\n POOL_GENERAL_TYPE_TO_ATTRIBUTE,\n PoolEditorFormValues,\n computePoolPath,\n} from '../../../utils/scheduling/scheduling';\n\nimport {\n CHANGE_CONTENT_MODE,\n CHANGE_POOL,\n CHANGE_POOL_CHILDREN_FILTER,\n CHANGE_TABLE_TREE_STATE,\n CHANGE_TREE,\n SCHEDULING_DATA_PARTITION,\n SCHEDULING_EDIT_POOL_CANCELLED,\n SCHEDULING_EDIT_POOL_FAILURE,\n SCHEDULING_EDIT_POOL_REQUEST,\n SCHEDULING_EDIT_POOL_SUCCESS,\n TOGGLE_EDIT_VISIBILITY,\n} from '../../../constants/scheduling';\nimport {loadSchedulingData, setPoolAttributes} from './scheduling-ts';\nimport {splitBatchResults} from '../../../utils/utils';\n\nimport {YTApiId, ytApiV3, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {YTErrors} from '../../../rum/constants';\nimport {PoolTreeNode} from '../../../utils/scheduling/pool-child';\nimport {SortState} from '../../../types';\n\nimport {toaster} from '../../../utils/toaster';\n\nconst setName = (path: string, newName?: string, prevName?: string) => {\n if (prevName === newName) {\n return Promise.resolve();\n }\n\n return ytApiV3.set({path: `${path}/@name`}, newName);\n};\n\nconst makeOtherAttributesCommands = (\n path: string,\n values: PoolEditorFormValues['otherSettings'],\n initialValues: PoolEditorFormValues['otherSettings'],\n) => {\n const initialSortParamsString = initialValues.fifoSortParams.join('|');\n const newSortParamsString = values.fifoSortParams.join('|');\n\n const commands: Array<BatchSubRequest> = [];\n\n if (initialValues.forbidImmediateOperations !== values.forbidImmediateOperations) {\n commands.push({\n command: 'set',\n parameters: {\n path: `${path}/@forbid_immediate_operations`,\n },\n input: values.forbidImmediateOperations,\n });\n }\n\n if (initialValues.createEphemeralSubpools !== values.createEphemeralSubpools) {\n commands.push({\n command: 'set',\n parameters: {\n path: `${path}/@create_ephemeral_subpools`,\n },\n input: values.createEphemeralSubpools,\n });\n }\n\n if (initialSortParamsString !== newSortParamsString) {\n commands.push({\n command: 'set',\n parameters: {\n path: `${path}/@fifo_sort_parameters`,\n },\n input: values.fifoSortParams,\n });\n }\n\n return commands;\n};\n\ntype ResourceLimits = PoolEditorFormValues['resourceLimits'];\n\nconst setResourceAttributes = (\n path: string,\n values: Partial<Record<keyof ResourceLimits, number>>,\n omittedValues: Partial<ResourceLimits>,\n attribute: 'resource_limits',\n) => {\n if (isEmpty_(values) && isEmpty_(omittedValues)) {\n return Promise.resolve();\n }\n\n const keyMapper: Record<string, string> = {userSlots: 'user_slots'};\n const omittedValuesList = map_(omittedValues, (_value, key) => keyMapper[key] || key);\n const preparedValues = mapKeys_(values, (_value, key) => keyMapper[key] || key);\n\n return ytApiV3Id\n .get(YTApiId.schedulingGetAttrsBeforeEdit, {path: `${path}/@${attribute}`})\n .then((resources) => {\n const result = {...resources, ...preparedValues};\n const input = omit_(result, omittedValuesList);\n\n return ytApiV3.set({path: `${path}/@${attribute}`}, input);\n })\n .catch((error) => {\n if (error.code === 500) {\n // attribute not found\n return ytApiV3.set({path: `${path}/@${attribute}`}, preparedValues);\n }\n\n return Promise.reject(error);\n });\n};\n\ntype GeneralValues = PoolEditorFormValues['general'];\n\nconst makeGeneralCommands = (\n path: string,\n values: Partial<GeneralValues>,\n initialValues: GeneralValues,\n) => {\n const isInitial = (value: unknown, initialValue: unknown) => value === initialValue;\n const isOmitted = (value: string, omittedValues: unknown) =>\n Object.prototype.hasOwnProperty.call(omittedValues, value);\n\n const omittedValues = pickBy_(\n values,\n (value: string) => value === '' || value === undefined || value === null,\n );\n\n const commands: Array<BatchSubRequest> = [];\n\n if (!isInitial(values.mode, initialValues.mode)) {\n commands.push({\n command: 'set' as const,\n parameters: {\n path: `${path}/@mode`,\n },\n input: values.mode,\n });\n }\n\n if (!isInitial(values.weight?.value, initialValues.weight?.value)) {\n if (isOmitted('weight', omittedValues)) {\n commands.push({\n command: 'remove',\n parameters: {\n path: `${path}/@weight`,\n },\n });\n } else if (!isInitial(values.weight, initialValues.weight)) {\n commands.push({\n command: 'set',\n parameters: {\n path: `${path}/@weight`,\n },\n input: Number(values.weight?.value),\n });\n }\n }\n\n return commands;\n};\n\nfunction isInvalidNumber(value: number | string) {\n return value === '' || isNaN(Number(value));\n}\n\nfunction isValidNumber(value: number | string) {\n return !isInvalidNumber(value);\n}\n\ntype SchedulingThunk<T> = ThunkAction<T, RootState, unknown, SchedulingAction>;\n\nexport function editPool(\n pool: PoolTreeNode,\n values: PoolEditorFormValues,\n initialValues: PoolEditorFormValues,\n): SchedulingThunk<Promise<void>> {\n return (dispatch, getState) => {\n const state = getState();\n\n const tree = getTree(state);\n const pools = getPools(state);\n const poolPath = computePoolPath(pool, pools);\n const path = `//sys/pool_trees/${tree}/${poolPath}`;\n\n const filteredResourceLimitsValues: Partial<(typeof values)['resourceLimits']> = pickBy_(\n values.resourceLimits,\n isValidNumber,\n );\n const omittedResourceLimitsValues: Partial<(typeof values)['resourceLimits']> = pickBy_(\n values.resourceLimits,\n isInvalidNumber,\n );\n const resourceLimitsValues = mapValues_(filteredResourceLimitsValues, (value) =>\n Number(value),\n );\n\n dispatch({type: SCHEDULING_EDIT_POOL_REQUEST});\n\n const requests = [\n ...makeGeneralCommands(path, values.general, initialValues.general),\n ...makeOtherAttributesCommands(path, values.otherSettings, initialValues.otherSettings),\n ];\n\n return Promise.all([\n ytApiV3Id.executeBatch(YTApiId.schedulingEditPool, {requests}).then((data) => {\n const {error} = splitBatchResults(data, 'Failed to fetch pool details');\n if (error) {\n return Promise.reject(error);\n }\n return undefined;\n }),\n setPoolAttributes({\n poolPath: path,\n values: {\n ...values.resourceGuarantee,\n ...values.integralGuarantee,\n ...pick_(values.general, Object.keys(POOL_GENERAL_TYPE_TO_ATTRIBUTE)),\n },\n initials: {\n ...initialValues.resourceGuarantee,\n ...initialValues.integralGuarantee,\n ...pick_(initialValues.general, Object.keys(POOL_GENERAL_TYPE_TO_ATTRIBUTE)),\n },\n tree,\n }),\n setResourceAttributes(\n path,\n resourceLimitsValues,\n omittedResourceLimitsValues,\n 'resource_limits',\n ),\n setName(path, values.general.name, initialValues.general.name),\n ])\n .then(() => {\n toaster.add({\n name: 'edit pool',\n autoHiding: 10000,\n theme: 'success',\n title: `Successfully edited ${pool.name}. Please wait.`,\n });\n\n dispatch({type: SCHEDULING_EDIT_POOL_SUCCESS});\n dispatch(closeEditModal());\n setTimeout(() => dispatch(loadSchedulingData()), 3000);\n })\n .catch((error) => {\n if (error.code !== YTErrors.CANCELLED) {\n dispatch({\n type: SCHEDULING_EDIT_POOL_FAILURE,\n data: {error},\n });\n\n return Promise.reject(error);\n }\n return undefined;\n });\n };\n}\n\nexport function openEditModal(item: PoolTreeNode) {\n return {\n type: TOGGLE_EDIT_VISIBILITY,\n data: {\n visibility: true,\n item,\n },\n };\n}\n\nexport function closeEditModal({cancelled}: {cancelled?: boolean} = {}): SchedulingThunk<void> {\n return (dispatch) => {\n dispatch({\n type: TOGGLE_EDIT_VISIBILITY,\n data: {\n visibility: false,\n item: undefined,\n },\n });\n\n if (cancelled) {\n dispatch({type: SCHEDULING_EDIT_POOL_CANCELLED});\n }\n };\n}\n\nexport function changeTree(tree: string): SchedulingThunk<void> {\n return (dispatch) => {\n dispatch({\n type: CHANGE_TREE,\n data: {tree},\n });\n\n dispatch(loadSchedulingData());\n };\n}\n\nexport function changeTableTreeState(treeState: SchedulingState['treeState']): SchedulingAction {\n return {\n type: CHANGE_TABLE_TREE_STATE,\n data: {treeState},\n };\n}\n\nexport function changePool(pool: string): SchedulingAction {\n return {\n type: CHANGE_POOL,\n data: {pool},\n };\n}\n\nexport function schedulingChangeContentMode(contentMode: SchedulingContentMode): SchedulingAction {\n return {type: CHANGE_CONTENT_MODE, data: {contentMode}};\n}\n\nexport function changePoolChildrenFilter(poolChildrenFilter: string) {\n return {\n type: CHANGE_POOL_CHILDREN_FILTER,\n data: {poolChildrenFilter},\n };\n}\n\nexport function togglePoolFavourites(pool: string, tree: string): SchedulingThunk<void> {\n return (dispatch, getState) => {\n const value = `${pool}[${tree}]`;\n const parentNS = getSchedulingNS(getState());\n return dispatch(toggleFavourite(value, parentNS));\n };\n}\n\nexport function schedulingSetSortState(sortState: Array<SortState>): SchedulingAction {\n return {\n type: SCHEDULING_DATA_PARTITION,\n data: {sortState},\n };\n}\n\nexport function schedulingSetShowAbsResources(showAbsResources: boolean): SchedulingAction {\n return {\n type: SCHEDULING_DATA_PARTITION,\n data: {showAbsResources},\n };\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from '../../../store/redux-hooks';\nimport cn from 'bem-cn-lite';\n\nimport forEach_ from 'lodash/forEach';\n\nimport {getPoolsNames, getTree} from '../../../store/selectors/scheduling/scheduling';\nimport {changePool} from '../../../store/actions/scheduling/scheduling';\nimport {schedulingLoadFilterAttributes} from '../../../store/actions/scheduling/scheduling-ts';\n\nimport {ROOT_POOL_NAME} from '../../../constants/scheduling';\nimport Suggest from '../../../components/Suggest/Suggest';\n\nimport './PoolsSuggest.scss';\n\nconst block = cn('yt-pools-suggest');\n\nexport function PoolsSuggest({\n onCancelEdit = () => {},\n className,\n autoFocus,\n}: {\n onCancelEdit?: () => void;\n className?: string;\n autoFocus?: boolean;\n}) {\n const poolNames = useSelector(getPoolsNames);\n const tree = useSelector(getTree);\n const dispatch = useDispatch();\n\n const getSuggestItems = React.useCallback(\n (_items: any, filter?: string) => {\n if (!filter) {\n return poolNames;\n }\n\n const match: Array<string> = [];\n const startsWith: Array<string> = [];\n const filtered: Array<string> = [];\n\n const lcFilter = filter?.toLowerCase();\n\n forEach_(poolNames, (poolName) => {\n const lcPoolName = poolName.toLowerCase();\n if (lcFilter === lcPoolName) {\n match.push(poolName);\n } else if (lcPoolName.startsWith(lcFilter)) {\n startsWith.push(poolName);\n } else if (poolName !== ROOT_POOL_NAME && -1 !== lcPoolName.indexOf(lcFilter)) {\n filtered.push(poolName);\n }\n });\n return match.concat(startsWith, filtered);\n },\n [poolNames],\n );\n\n const handleCancelEdit = React.useCallback(() => {\n setTimeout(onCancelEdit, 500);\n }, [onCancelEdit]);\n\n const onItemClick = React.useCallback(\n (pool: string) => {\n dispatch(changePool(pool));\n onCancelEdit();\n },\n [dispatch, onCancelEdit],\n );\n\n const onFocus = React.useCallback(() => {\n dispatch(schedulingLoadFilterAttributes(tree));\n }, [dispatch, tree]);\n\n return (\n <Suggest\n className={block(null, className)}\n popupClassName={block('popup')}\n autoFocus={autoFocus}\n filter={getSuggestItems}\n onBlur={handleCancelEdit}\n onFocus={onFocus}\n placeholder=\"Select pool...\"\n onItemClick={(item) => onItemClick('string' === typeof item ? item : item.value)}\n items={poolNames}\n />\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {SegmentedRadioGroup, Switch} from '@gravity-ui/uikit';\n\nimport format from '../../../../../common/hammer/format';\n\nimport {DialogWrapper} from '../../../../../components/DialogWrapper/DialogWrapper';\nimport {ExpandButton} from '../../../../../components/ExpandButton';\nimport {Toolbar} from '../../../../../components/WithStickyToolbar/Toolbar/Toolbar';\nimport {setLoadAllOperations} from '../../../../../store/actions/scheduling/expanded-pools';\nimport {\n schedulingChangeContentMode,\n schedulingSetShowAbsResources,\n} from '../../../../../store/actions/scheduling/scheduling';\nimport {schedulingSetAbcFilter} from '../../../../../store/actions/scheduling/scheduling-ts';\nimport {\n SCHEDULING_CONTENT_MODES,\n getSchedulingContentMode,\n getSchedulingShowAbsResources,\n} from '../../../../../store/selectors/scheduling/scheduling';\nimport {getSchedulingAbcFilter} from '../../../../../store/selectors/scheduling/attributes-to-filter';\nimport {getExpandedPoolsLoadAll} from '../../../../../store/selectors/scheduling/expanded-pools';\nimport {useDispatch, useSelector} from '../../../../../store/redux-hooks';\n\nimport {PoolsSuggest} from '../../../../../pages/scheduling/PoolsSuggest/PoolsSuggest';\nimport UIFactory from '../../../../../UIFactory';\n\nimport './SchedulingToolbar.scss';\n\nconst block = cn('yt-scheduling-toolbar');\n\nexport function SchedulingToolbar() {\n const mode = useSelector(getSchedulingContentMode);\n\n return (\n <Toolbar\n className={block()}\n itemsToWrap={[\n {node: <SchedulingContentMode />},\n {\n node: <PoolsSuggest className={block('filter')} />,\n width: 200,\n },\n {node: <SchedulingAbc />},\n ...(mode === 'summary' || mode === 'custom'\n ? [{node: <SchedulingShowAbsResources />}]\n : []),\n ]}\n />\n );\n}\n\nfunction SchedulingContentMode() {\n const dispatch = useDispatch();\n const mode = useSelector(getSchedulingContentMode);\n\n return (\n <SegmentedRadioGroup\n size=\"m\"\n qa=\"scheduling:conftent:mode\"\n value={mode}\n onUpdate={(v) => dispatch(schedulingChangeContentMode(v))}\n name=\"navigation-tablets-mode\"\n options={SCHEDULING_CONTENT_MODES.map((value) => {\n return {value, content: format.ReadableField(value)};\n })}\n />\n );\n}\n\nfunction SchedulingAbc() {\n const dispatch = useDispatch();\n const {slug} = useSelector(getSchedulingAbcFilter) ?? {};\n\n return UIFactory.renderControlAbcService({\n className: block('abc-filter'),\n value: slug ? {slug} : undefined,\n onChange: (abcService) => {\n dispatch(schedulingSetAbcFilter(abcService));\n },\n });\n}\n\nexport function SchedulingExpandAll() {\n const [showConfirmation, setShowConfirmation] = React.useState(false);\n\n const dispatch = useDispatch();\n const loadAll = useSelector(getExpandedPoolsLoadAll);\n\n const confirmation = showConfirmation ? (\n <DialogWrapper open={true} onClose={() => {}}>\n <DialogWrapper.Header caption={'Confirmation of \"Expand all\"'} />\n <DialogWrapper.Body>\n To display the expanded tree it is required to load all running operations, it might\n be a reason of less responsiveness UI.\n <div>Are you sure you want to load all running operations?</div>\n </DialogWrapper.Body>\n <DialogWrapper.Footer\n onClickButtonApply={() => {\n setShowConfirmation(false);\n dispatch(setLoadAllOperations(!loadAll));\n }}\n onClickButtonCancel={() => setShowConfirmation(false)}\n textButtonCancel={'No'}\n textButtonApply={'Yes, please expand'}\n />\n </DialogWrapper>\n ) : null;\n\n return (\n <>\n <ExpandButton\n all\n expanded={loadAll}\n toggleExpanded={() => {\n const newValue = !loadAll;\n if (newValue) {\n setShowConfirmation(true);\n } else {\n dispatch(setLoadAllOperations(newValue));\n }\n }}\n />\n {confirmation}\n </>\n );\n}\n\nfunction SchedulingShowAbsResources() {\n const dispatch = useDispatch();\n const value = useSelector(getSchedulingShowAbsResources);\n\n return (\n <Switch\n checked={value}\n onUpdate={(v) => {\n dispatch(schedulingSetShowAbsResources(v));\n }}\n >\n Show abs. resources\n </Switch>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {Flex} from '@gravity-ui/uikit';\n\nimport {ExpandButton} from '../../components/ExpandButton';\n\nimport './ExpandableCell.scss';\n\nconst block = cn('yt-expandable-cell');\n\ntype ExpandedCellProps = {\n level?: number;\n expanded?: boolean;\n onExpand?: (v: boolean) => void;\n\n children: React.ReactNode;\n};\n\nexport function ExpandableCell({level = 0, expanded, onExpand, children}: ExpandedCellProps) {\n return (\n <Flex\n alignItems=\"center\"\n className={block({child: level > 0})}\n overflow=\"hidden\"\n shrink={1}\n grow={1}\n >\n <LeftPadding level={level} />\n <ExpandButton\n className={block('expand', {hidden: !onExpand})}\n expanded={Boolean(expanded)}\n toggleExpanded={() => onExpand?.(!expanded)}\n />\n {children}\n </Flex>\n );\n}\n\nfunction LeftPadding({level}: {level: number}) {\n return level > 0 ? (\n <Flex>\n {[...Array(level).keys()].map((key) => {\n return <div key={key} className={block('splitter')} />;\n })}\n </Flex>\n ) : null;\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {Flex, FlexProps} from '@gravity-ui/uikit';\nimport {Table, TableProps, useWindowRowVirtualizer} from '@gravity-ui/table';\nimport {Cell, Header} from '@gravity-ui/table/tanstack';\n\nimport './DataTableGravity.scss';\n\nconst block = cn('yt-gravity-table');\n\nexport type VirtuallizerProps =\n | {virtualized: never; rowHeight: never}\n | {virtualized: true; rowHeight: number};\n\nexport const getCellStyles = <TData, TValue = unknown>(\n cell?: Cell<TData, TValue> | Header<TData, TValue>,\n style?: React.CSSProperties,\n): React.CSSProperties | undefined => {\n if (!cell) {\n return style;\n }\n\n const isPinned = cell.column.getIsPinned();\n\n return {\n width: cell.column.getSize(),\n minWidth: cell.column.columnDef.minSize,\n maxWidth: cell.column.columnDef.maxSize,\n left: isPinned === 'left' ? `${cell.column.getStart('left')}px` : undefined,\n right: isPinned === 'right' ? `${cell.column.getAfter('right')}px` : undefined,\n ...style,\n };\n};\n\nexport function DataTableGravity<TData, TScrollElement extends Element | Window>({\n className,\n virtualized,\n rowHeight,\n scrollToIndex,\n rowClassName,\n isHighlightedRow,\n ...props\n}: TableProps<TData, TScrollElement> & {\n style?: React.CSSProperties;\n scrollToIndex?: number;\n isHighlightedRow?: (row?: TData) => boolean;\n} & VirtuallizerProps) {\n const containerRef = React.useRef<HTMLTableSectionElement>(null);\n\n const rowVirtualizer = useWindowRowVirtualizer({\n count: props.table.getRowModel().rows.length,\n estimateSize: () => rowHeight,\n overscan: 5,\n });\n\n const virtualizerProps = virtualized ? {rowVirtualizer} : ({} as {});\n\n React.useEffect(() => {\n let timerId: ReturnType<typeof setTimeout>;\n if (scrollToIndex !== undefined && scrollToIndex >= 0) {\n timerId = setTimeout(\n () => rowVirtualizer.scrollToIndex(scrollToIndex, {align: 'center'}),\n 500,\n );\n }\n return () => clearTimeout(timerId);\n }, [rowVirtualizer, scrollToIndex]);\n\n const rowClassNameFn = React.useCallback<Exclude<typeof rowClassName, undefined | string>>(\n (row) => {\n const highlighted = isHighlightedRow ? isHighlightedRow(row?.original) : undefined;\n return block(\n 'row',\n {highlighted},\n typeof rowClassName === 'string' ? rowClassName : rowClassName?.(row),\n );\n },\n [rowClassName, isHighlightedRow],\n );\n\n const {cellAttributes: cellAttrs, headerCellAttributes: headerCellAttrs} = props;\n\n const cellAttributes = React.useCallback<\n Exclude<typeof props.cellAttributes & Function, undefined>\n >(\n (cell) => {\n const res = typeof cellAttrs === 'function' ? cellAttrs(cell) : cellAttrs;\n\n const style = {...getCellStyles(cell)};\n if (style.left !== undefined) {\n Object.assign(style, {\n left: `calc(${style.left} + var(--gn-aside-header-size))`,\n });\n }\n\n return {\n ...res,\n style: {\n ...res?.style,\n ...style,\n },\n };\n },\n [cellAttrs],\n );\n\n const headerCellAttributes = React.useCallback<\n Exclude<typeof props.headerCellAttributes & Function, undefined>\n >(\n (header) => {\n const res =\n typeof headerCellAttrs === 'function' ? headerCellAttrs(header) : headerCellAttrs;\n\n const style = {...getCellStyles(header)};\n if (style.left !== undefined) {\n Object.assign(style, {left: `calc(${style.left} + var(--gn-aside-header-size))`});\n }\n\n return {\n ...res,\n style: {\n ...res?.style,\n ...style,\n },\n };\n },\n [headerCellAttrs],\n );\n\n return (\n <div className={block({virtualized}, className)} ref={containerRef}>\n <Table\n className={block('table')}\n stickyHeader\n rowClassName={rowClassNameFn}\n {...virtualizerProps}\n {...props}\n cellAttributes={cellAttributes}\n headerCellAttributes={headerCellAttributes}\n />\n </div>\n );\n}\n\nexport function TableCell({\n children,\n ...rest\n}: {children: React.ReactNode} & Pick<Omit<FlexProps, 'style'>, 'justifyContent'>) {\n return (\n <Flex\n {...rest}\n style={{height: '100%', width: '100%', overflow: 'hidden'}}\n alignItems=\"center\"\n wrap=\"nowrap\"\n >\n {children}\n </Flex>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport format from '../../common/hammer/format';\n\nimport ClipboardButton from '../../components/ClipboardButton/ClipboardButton';\nimport {YTText} from '../../components/Text/Text';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\nimport {parseBytes} from '../../utils/parse/parse-bytes';\n\nconst block = cn('yt-format-number');\n\nexport type FormatNumberProps = FormatSettings & {\n className?: string;\n\n value?: number;\n tooltip?: string;\n\n hideApproximateChar?: boolean;\n};\n\nexport type FormatSettings =\n | {\n type: 'Number';\n settings?: {digits?: number; digitsOnlyForFloat?: boolean};\n }\n | {\n type: 'NumberSmart';\n settings?: {significantDigits?: number};\n }\n | {\n type: 'Bytes';\n settings?: {digits?: number};\n };\n\nexport function FormatNumber({className, tooltip, ...rest}: FormatNumberProps) {\n const {content, title, prefix} = getFormattedValue(rest);\n\n const tooltipContent = tooltip ? <YTText color=\"secondary\">{tooltip}</YTText> : null;\n\n return (\n <Tooltip\n className={block(null, className)}\n content={\n <>\n {tooltipContent} <span>{title} </span>\n <ClipboardButton view=\"clear\" text={title} inlineMargins />\n </>\n }\n >\n {prefix}\n {content}\n </Tooltip>\n );\n}\n\nexport const APROXIMATEDLY_EQUAL_TO = '\\u2248';\n\nfunction getFormattedValue({value, hideApproximateChar, ...params}: FormatNumberProps): {\n content: string;\n title?: string;\n prefix?: string;\n} {\n if (isNaN(value!)) {\n return {content: format.NO_VALUE};\n }\n\n const content: string = format[params.type](value, params.settings);\n const fullValue = String(value);\n\n const parsed =\n params.type === 'Bytes' ? parseBytes(content) : Number(content.replaceAll(' ', ''));\n\n return {\n content,\n title: fullValue,\n prefix: !hideApproximateChar && value !== parsed ? APROXIMATEDLY_EQUAL_TO : undefined,\n };\n}\n","import React from 'react';\nimport isEqual_ from 'lodash/isEqual';\n\nimport {KeysByType} from '../../../@types/types';\nimport {DescribedSettings} from '../../../shared/constants/settings-types';\n\nimport {getSettingsData} from '../../store/selectors/settings/settings-base';\nimport {setSettingByKey} from '../../store/actions/settings';\nimport {RootState} from '../../store/reducers';\nimport {useDispatch, useSelector} from '../../store/redux-hooks';\n\nconst DOUBLE_CLICK_TIMEOUT = 500;\n\ntype ColumnSizes = Record<string, number>;\n\nexport function useSettingsColumnSizes<\n K extends KeysByType<DescribedSettings, Record<string, number>>,\n>(key: K, {minWidth = 50, maxWidth = 800}: {minWidth?: number; maxWidth?: number} = {}) {\n const dispatch = useDispatch();\n const columnSizes = useSelector(getSettingsData)[key] ?? {};\n\n type UpdateFn = ColumnSizes | ((oldState: ColumnSizes) => ColumnSizes);\n\n const lastRef = React.useRef<{changes?: ColumnSizes; time: number}>({time: 0});\n\n return {\n columnSizes,\n setColumnSizes: (updateFn: UpdateFn) => {\n dispatch((_dispatch: unknown, getState: () => RootState) => {\n const prevColumnSizes = getSettingsData(getState())[key] ?? {};\n const changes = 'function' === typeof updateFn ? updateFn({}) : updateFn;\n const newValue = {\n ...prevColumnSizes,\n ...changes,\n };\n\n const time = Date.now();\n if (\n time - lastRef.current.time < DOUBLE_CLICK_TIMEOUT &&\n isEqual_(lastRef.current.changes, changes)\n ) {\n Object.keys(changes).forEach((k) => {\n delete newValue[k];\n });\n }\n\n Object.assign(lastRef.current, {time, changes});\n\n if (!isEqual_(prevColumnSizes, newValue)) {\n dispatch(\n setSettingByKey(\n key,\n Object.entries(newValue).reduce(\n (acc, [k, value]) => {\n acc[k] = Math.max(minWidth, Math.min(maxWidth, value));\n return acc;\n },\n {} as Record<string, number>,\n ),\n ),\n );\n }\n });\n },\n };\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../../../common/hammer/format';\nimport {calcProgressProps} from '../../../../utils/utils';\nimport {Progress, ProgressProps} from '@gravity-ui/uikit';\nimport {Tooltip} from '../../../../components/Tooltip/Tooltip';\n\nimport './ShareUsageBar.scss';\n\nconst block = cn('share-usage-bar');\n\ninterface Props {\n className?: string;\n shareValue?: number;\n shareTitle?: string;\n usageValue?: number;\n usageTitle?: string;\n forceTheme?: ProgressProps['theme'];\n title?: React.ReactNode;\n}\n\nfunction ShareUsageBar(props: Props) {\n const {className, shareValue, usageValue, shareTitle, usageTitle, forceTheme, title} = props;\n\n const x = Number(usageValue) / Number(shareValue);\n\n if (isNaN(shareValue!) || isNaN(usageValue!) || isNaN(x)) {\n return (\n <Tooltip\n content={\n <React.Fragment>\n <div>\n {shareTitle}: {shareValue}\n </div>\n <div>\n {usageTitle}: {usageValue}\n </div>\n </React.Fragment>\n }\n >\n {format.NO_VALUE}\n </Tooltip>\n );\n }\n\n const {value, theme} = calcProgressProps(usageValue, Number(shareValue) * 2);\n\n return (\n <Tooltip\n className={block(null, className)}\n content={\n <React.Fragment>\n {title}\n <div>\n {usageTitle} / {shareTitle} = {format.Number(x, {digits: 3})}\n </div>\n </React.Fragment>\n }\n >\n <Progress\n className={block('progress')}\n size={'s'}\n value={Number(value)}\n theme={forceTheme || theme}\n />\n <div className={block('tick')} />\n </Tooltip>\n );\n}\n\nexport default React.memo(ShareUsageBar);\n","import {createSelector} from 'reselect';\nimport uniq_ from 'lodash/uniq';\nimport compact_ from 'lodash/compact';\n\nimport {getSettingsData} from '../../../store/selectors/settings/settings-base';\nimport {SchedulingColumn, isSchedulingColumnName} from '../../../utils/scheduling/detailsTable';\n\nconst DEFAULT_COLUMNS: Array<SchedulingColumn> = [\n 'name',\n 'FI',\n 'weight',\n 'fair_share_usage',\n 'fair_share',\n 'usage',\n 'demand',\n 'min_share',\n 'operation_overview',\n 'dominant_resource',\n 'actions',\n];\n\nexport const getSchedulingOverivewColumns = createSelector([getSettingsData], (data) => {\n const columns = data['global::scheduling::overviewColumns'];\n if (!columns) {\n return [...DEFAULT_COLUMNS];\n }\n\n const resColumns: Array<SchedulingColumn> = compact_([\n 'name' as const,\n ...columns.map((item) => {\n return isSchedulingColumnName(item) ? item : undefined;\n }),\n 'actions' as const,\n ]);\n return uniq_(resColumns);\n});\n","import {addI18Keysets} from '../../../../../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:scheduling-table', {en, ru});\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport capitalize_ from 'lodash/capitalize';\n\nimport Label from '../../../../../../components/Label/Label';\nimport type {PoolLeafNode, PoolTreeNode} from '../../../../../../utils/scheduling/pool-child';\n\nimport './PoolTags.scss';\n\nconst block = cn('scheduling-pool-tags');\n\nfunction PoolTags({pool}: {pool: PoolTreeNode | PoolLeafNode}) {\n const {integralType} = pool;\n\n if (integralType === 'burst' || integralType === 'relaxed') {\n return (\n <Label\n key={'guarantee-type'}\n className={block('tag')}\n text={capitalize_(integralType)}\n theme={'complementary'}\n />\n );\n }\n\n return null;\n}\n\nexport default React.memo(PoolTags);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {Flex, Text} from '@gravity-ui/uikit';\n\nimport {setExpandedPools} from '../../../../../../store/actions/scheduling/expanded-pools';\nimport {\n getCurrentPool,\n getCurrentTreeExpandedPools,\n} from '../../../../../../store/selectors/scheduling/scheduling';\n\nimport {ExpandableCell} from '../../../../../../components/DataTableGravity/ExpandableCell';\nimport Link from '../../../../../../components/Link/Link';\nimport {OperationPool} from '../../../../../../components/OperationPool/OperationPool';\nimport {Tooltip} from '../../../../../../components/Tooltip/Tooltip';\nimport {getCluster} from '../../../../../../store/selectors/global/cluster';\nimport {getTree} from '../../../../../../store/selectors/scheduling/scheduling-pools';\n\nimport {PoolLeafNode} from '../../../../../../utils/scheduling/pool-child';\nimport {useDispatch, useSelector} from '../../../../../../store/redux-hooks';\n\nimport type {RowData} from './SchedulingTable';\nimport './NameCell.scss';\nimport PoolTags from './PoolTags';\n\nconst block = cn('yt-scheduling-name-cell');\n\nexport function NameCell({row}: {row: RowData}) {\n const cluster = useSelector(getCluster);\n const tree = useSelector(getTree);\n const currentPool = useSelector(getCurrentPool);\n\n const dispatch = useDispatch();\n const expandedPools = useSelector(getCurrentTreeExpandedPools);\n\n const handlePoolExpand = React.useCallback(\n (poolName: string, value: boolean) => {\n dispatch(setExpandedPools({[poolName]: value}));\n },\n [dispatch],\n );\n\n const {name, type, level = 0, incomplete} = row;\n const isCurrentPool = currentPool?.name === name;\n const {child_pool_count = 0, pool_operation_count = 0} = row.attributes;\n const allowExpand = child_pool_count > 0 || pool_operation_count > 0;\n\n const expanded = type === 'pool' ? Boolean(expandedPools?.get(name)) : undefined;\n\n return (\n <ExpandableCell\n level={level}\n expanded={expanded}\n onExpand={\n !isCurrentPool && allowExpand ? () => handlePoolExpand(name, !expanded) : undefined\n }\n >\n {row.type === 'pool' ? (\n <>\n <OperationPool\n hideTree\n routed\n className={block('pool')}\n cluster={cluster}\n pool={{\n pool: incomplete ? '' : row.name,\n tree,\n isLightweight: row.isEffectiveLightweight,\n isEphemeral: row.isEphemeral,\n }}\n theme=\"primary\"\n />\n <span style={{flex: '1 1 0px'}} />\n <PoolTags pool={row} />\n </>\n ) : (\n renderOperationName({cluster, row})\n )}\n </ExpandableCell>\n );\n}\n\nfunction renderOperationName({cluster, row}: {cluster: string; row: PoolLeafNode}) {\n const {\n id,\n attributes: {title},\n fifoIndex,\n } = row;\n const url = `/${cluster}/operations/${id}`;\n\n const fifoIndexNode =\n fifoIndex !== undefined ? (\n <Tooltip content={`Fifo index: ${fifoIndex}`}>#{fifoIndex}&nbsp;</Tooltip>\n ) : null;\n\n const hasTitle = 0 > title?.length!;\n\n return (\n <Flex direction=\"column\" style={{margin: '-4px 0'}} overflow=\"hidden\">\n <Text variant=\"inherit\" ellipsis>\n {fifoIndexNode}\n <Link url={url}>{title ?? id}</Link>\n </Text>\n {!hasTitle && (\n <Text variant=\"code-inline-1\" color=\"secondary\" ellipsis>\n {id}\n </Text>\n )}\n </Flex>\n );\n}\n","import {useSelector} from 'react-redux';\n\nimport UIFactory from '../../../../../../UIFactory';\nimport {getClusterUiConfig} from '../../../../../../store/selectors/global/cluster';\nimport type {PoolTreeNode} from '../../../../../../utils/scheduling/pool-child';\n\nexport function PoolAbc({pool}: {pool: PoolTreeNode}) {\n const clusterUiConfig = useSelector(getClusterUiConfig);\n\n return UIFactory.renderSchedulingTableItemExtraControls({\n pool,\n clusterUiConfig,\n });\n}\n","import cn from 'bem-cn-lite';\nimport moment from 'moment';\nimport React from 'react';\n\nimport {DropdownMenu, Flex, Progress, Text} from '@gravity-ui/uikit';\n\nimport format from '../../../../../../common/hammer/format';\n\nimport ColumnHeader, {\n ColumnHeaderProps,\n} from '../../../../../../components/ColumnHeader/ColumnHeader';\nimport {\n DataTableGravity,\n TableCell,\n TableSettings,\n tanstack,\n useTable,\n} from '../../../../../../components/DataTableGravity';\nimport {\n FormatNumber,\n FormatNumberProps,\n} from '../../../../../../components/FormatNumber/FormatNumber';\nimport Label from '../../../../../../components/Label/Label';\nimport MetaTable from '../../../../../../components/MetaTable/MetaTable';\nimport {OperationType} from '../../../../../../components/OperationType/OperationType';\nimport {SubjectCard} from '../../../../../../components/SubjectLink/SubjectLink';\nimport {Tooltip} from '../../../../../../components/Tooltip/Tooltip';\nimport {getSchedulingOperationsLoading} from '../../../../../../store/selectors/scheduling/expanded-pools';\nimport {\n getSchedulingContentMode,\n getSchedulingLoading,\n getSchedulingOverviewTableItems,\n getSchedulingShowAbsResources,\n getSchedulingSortState,\n getSchedulingTreeMainResource,\n} from '../../../../../../store/selectors/scheduling/scheduling';\n\nimport {KeysByType} from '../../../../../../../@types/types';\nimport {formatTimeDuration} from '../../../../../../components/TimeDuration/TimeDuration';\nimport {useSettingsColumnSizes} from '../../../../../../hooks/settings/use-settings-column-sizes';\nimport {useSettingsVisibleColumns} from '../../../../../../hooks/settings/use-settings-column-visibility';\nimport ShareUsageBar from '../../../../../../pages/scheduling/Content/controls/ShareUsageBar';\nimport {openAttributesModal} from '../../../../../../store/actions/modals/attributes-modal';\nimport {getPoolPathsByName} from '../../../../../../store/actions/scheduling/expanded-pools';\nimport {\n openEditModal,\n schedulingSetSortState,\n} from '../../../../../../store/actions/scheduling/scheduling';\nimport {openPoolDeleteModal} from '../../../../../../store/actions/scheduling/scheduling-ts';\nimport {useDispatch, useSelector} from '../../../../../../store/redux-hooks';\nimport {getSchedulingOperationRefId} from '../../../../../../store/selectors/scheduling/attributes-to-filter';\nimport {getSchedulingOverivewColumns} from '../../../../../../store/selectors/scheduling/overview-columns';\nimport {getProgressTheme} from '../../../../../../utils/progress';\nimport {SchedulingColumn, childTableItems} from '../../../../../../utils/scheduling/detailsTable';\nimport i18n from './i18n';\nimport {NameCell} from './NameCell';\nimport {PoolAbc} from './PoolAbc';\nimport './SchedulingTable.scss';\n\nconst block = cn('yt-scheduling-table');\n\nexport type RowData = ReturnType<typeof getSchedulingOverviewTableItems>[number];\n\nexport function SchedulingTable() {\n const {columnSizes, setColumnSizes} = useSettingsColumnSizes(\n 'global::scheduling::overviewColumnSizes',\n {minWidth: 80},\n );\n\n const {onColumnVisibilityChange, onColumnOrderChange} = useSettingsVisibleColumns(\n 'global::scheduling::overviewColumns',\n );\n\n const {columns, columnVisibility, columnOrder} = useSchedulingTableColumns();\n const items = useSelector(getSchedulingOverviewTableItems);\n\n const operationRefId = useSelector(getSchedulingOperationRefId);\n\n const table = useTable({\n columns,\n data: items,\n enableColumnPinning: true,\n enableColumnResizing: true,\n state: {\n columnPinning: {\n left: ['name'],\n right: ['actions'],\n },\n columnSizing: columnSizes,\n columnVisibility,\n columnOrder,\n },\n onColumnSizingChange: setColumnSizes,\n onColumnVisibilityChange,\n onColumnOrderChange,\n });\n\n const {scrollToIndex, isHighlightedRow} = React.useMemo(() => {\n if (!operationRefId) {\n return {};\n }\n\n return {\n scrollToIndex: items.findIndex(({id}) => operationRefId === id),\n isHighlightedRow: (item?: (typeof items)[number]) => {\n return item?.id === operationRefId;\n },\n };\n }, [operationRefId, items]);\n\n return (\n <DataTableGravity\n className={block()}\n table={table}\n virtualized\n rowHeight={49}\n scrollToIndex={scrollToIndex}\n isHighlightedRow={isHighlightedRow}\n />\n );\n}\n\ntype SchedulintTableMode = ReturnType<typeof getSchedulingContentMode>;\n\nconst COLUMNS_BY_MODE: Record<SchedulintTableMode, Array<SchedulingColumn>> = {\n summary: [\n 'weight',\n 'view_mode',\n 'owner',\n 'dominant_resource',\n 'fair_share_usage',\n 'usage',\n 'demand',\n 'guaranteed',\n 'operation_overview',\n 'duration',\n ],\n cpu: [\n 'weight',\n 'min_resources_cpu',\n 'abs_guaranteed_cpu',\n 'abs_demand_cpu',\n 'resource_detailed_cpu',\n 'abs_usage_cpu',\n 'resource_limit_cpu',\n ],\n memory: [\n 'weight',\n 'min_resources_memory',\n 'abs_guaranteed_memory',\n 'abs_demand_memory',\n 'resource_detailed_memory',\n 'abs_usage_memory',\n 'resource_limit_memory',\n ],\n\n gpu: [\n 'weight',\n 'min_resources_gpu',\n 'abs_guaranteed_gpu',\n 'abs_demand_gpu',\n 'resource_detailed_gpu',\n 'abs_usage_gpu',\n 'resource_limit_gpu',\n ],\n\n user_slots: [\n 'weight',\n 'min_resources_user_slots',\n 'abs_guaranteed_user_slots',\n 'abs_demand_user_slots',\n 'resource_detailed_user_slots',\n 'abs_usage_user_slots',\n 'resource_limit_user_slots',\n ],\n\n operations: [\n 'running_operation_count',\n 'max_running_operation_count',\n 'running_operation_progress',\n 'operation_count',\n 'max_operation_count',\n 'operation_progress',\n ],\n\n integral_guarantees: [\n 'integral_type',\n 'burst_cpu',\n 'children_burst_cpu',\n 'flow_cpu',\n 'children_flow_cpu',\n 'accumulated',\n 'burst_duration',\n ],\n custom: [],\n};\n\nfunction useSchedulingVisibleColumns() {\n const mode = useSelector(getSchedulingContentMode);\n const customColumns = useSelector(getSchedulingOverivewColumns);\n\n return mode === 'custom' ? customColumns : (COLUMNS_BY_MODE[mode] ?? []);\n}\n\ntype KeyByGetterReturnType<T> =\n | KeysByType<typeof childTableItems, {sort: (...args: any) => T}>\n | KeysByType<typeof childTableItems, {get: (...args: any) => T}>;\n\nfunction makeNumberColumn(\n id: KeyByGetterReturnType<number | undefined>,\n {\n type = 'NumberSmart',\n ...rest\n }: Partial<Pick<FormatNumberProps, 'type' | 'hideApproximateChar'>> = {},\n) {\n const info = childTableItems[id];\n const {caption} = {caption: undefined, ...info};\n return {\n id,\n header: () => <SchedulingColumnHeader column={id} title={caption} />,\n cell: ({row: {original: item}}: tanstack.CellContext<RowData, unknown>) => {\n let value: number | undefined;\n if ('sort' in info && 'function' === typeof info.sort) {\n value = info.sort(item);\n } else if ('get' in info && 'function' === typeof info.get) {\n value = info.get(item);\n }\n\n return (\n <TableCell>\n <FormatNumber value={value} type={type} {...rest} />\n </TableCell>\n );\n },\n };\n}\n\nfunction makeReadableFieldColumn(\n id: KeyByGetterReturnType<string | undefined>,\n options?: {size?: number},\n) {\n const info = childTableItems[id];\n const {caption} = {caption: undefined, ...info};\n return {\n id,\n header: () => <SchedulingColumnHeader column={id} title={caption} />,\n cell: ({row: {original: item}}: tanstack.CellContext<RowData, unknown>) => {\n let value: string | undefined;\n if ('sort' in info && 'function' === typeof info.sort) {\n value = info.sort(item);\n } else if ('get' in info && 'function' === typeof info.get) {\n value = info.get(item);\n }\n\n return (\n <TableCell>\n {value === undefined ? format.NO_VALUE : format.ReadableField(value)}\n </TableCell>\n );\n },\n ...options,\n };\n}\n\ntype SchedulingColumnDef = Omit<tanstack.ColumnDef<RowData>, 'id'> & {id: SchedulingColumn};\n\nconst DurationMemo = React.memo(Duration);\n\nfunction useSchedulingTableColumns() {\n const visibleColumns = useSchedulingVisibleColumns();\n\n const columns = React.useMemo(() => {\n const availableColumns: Array<SchedulingColumnDef> = [\n {\n id: 'name',\n header: () => <NameHeader />,\n size: 400,\n cell: ({row: {original: item}}) => {\n return (\n <TableCell>\n <NameCell row={item} />\n </TableCell>\n );\n },\n enableColumnFilter: false,\n enableHiding: false,\n },\n {\n id: 'weight',\n header: () => <SchedulingColumnHeader column={'weight'} allowUnordered />,\n cell: ({row: {original: item}}) => {\n const {weightEdited = NaN, type, weight} = item;\n return (\n <TableCell>\n {type === 'pool' ? (\n <EditedNumber\n value={weight}\n edited={weightEdited}\n type=\"NumberSmart\"\n />\n ) : (\n <FormatNumber value={weight} type=\"NumberSmart\" />\n )}\n </TableCell>\n );\n },\n size: 100,\n },\n {\n id: 'view_mode',\n header: () => (\n <SchedulingColumnHeader column={'view_mode'} title=\"Mode\" allowUnordered />\n ),\n cell: ({row: {original: item}}) => {\n const {type, mode} = item;\n return (\n <TableCell>\n {type === 'pool' ? (\n <Text variant=\"inherit\" color=\"secondary\">\n {format.ReadableField(mode)}\n </Text>\n ) : (\n <OperationType value={item.operationType} />\n )}\n </TableCell>\n );\n },\n size: 100,\n },\n {\n id: 'owner',\n header: () => (\n <SchedulingColumnHeader column=\"owner\" title=\"Owner\" allowUnordered />\n ),\n cell: ({row: {original: item}}) => {\n const {user} = item;\n\n const content =\n item.type === 'operation' ? (\n user ? (\n <SubjectCard name={user} type=\"user\" />\n ) : (\n format.NO_VALUE\n )\n ) : (\n <PoolAbc pool={item} />\n );\n\n return <TableCell>{content}</TableCell>;\n },\n },\n makeReadableFieldColumn('dominant_resource', {size: 100}),\n {\n id: 'fair_share_usage',\n header: () => (\n <SchedulingColumnHeader\n column=\"fair_share_usage\"\n title=\"Usage / Fair share\"\n allowUnordered\n />\n ),\n cell: ({row: {original: item}}) => {\n return (\n <TableCell justifyContent=\"center\">\n <FairShareUsage item={item} />\n </TableCell>\n );\n },\n },\n {\n id: 'usage',\n header: () => (\n <SchedulingColumnHeader\n column=\"abs_usage_cpu\"\n title=\"Usage\"\n options={[\n {column: 'abs_usage_cpu' as const, title: 'CPU', allowUnordered: true},\n {column: 'abs_usage_gpu' as const, title: 'GPU', allowUnordered: true},\n {\n column: 'abs_usage_memory' as const,\n title: 'RAM',\n allowUnordered: true,\n },\n {column: 'fair_share' as const, title: 'Ratio', allowUnordered: true},\n ]}\n />\n ),\n cell: ({row: {original: item}}) => {\n return (\n <TableCell>\n <ResourceSummary item={item} type=\"usage\" />\n </TableCell>\n );\n },\n size: 100,\n },\n {\n id: 'demand',\n header: () => (\n <SchedulingColumnHeader\n column=\"abs_demand_cpu\"\n title=\"Demand\"\n options={[\n {column: 'abs_demand_cpu' as const, title: 'CPU', allowUnordered: true},\n {column: 'abs_demand_gpu' as const, title: 'GPU', allowUnordered: true},\n {\n column: 'abs_demand_memory' as const,\n title: 'RAM',\n allowUnordered: true,\n },\n {column: 'fair_share' as const, title: 'Ratio', allowUnordered: true},\n ]}\n />\n ),\n cell: ({row: {original: item}}) => {\n return (\n <TableCell>\n <ResourceSummary item={item} type=\"demand\" />\n </TableCell>\n );\n },\n size: 100,\n },\n {\n id: 'guaranteed',\n header: () => (\n <SchedulingColumnHeader\n column=\"abs_effective_guaranteed_cpu\"\n title=\"Guarantee\"\n options={[\n {\n column: 'abs_effective_guaranteed_cpu' as const,\n title: 'CPU',\n allowUnordered: true,\n },\n {\n column: 'abs_effective_guaranteed_gpu' as const,\n title: 'GPU',\n allowUnordered: true,\n },\n {\n column: 'abs_effective_guaranteed_memory' as const,\n title: 'RAM',\n allowUnordered: true,\n },\n {\n column: 'fair_share' as const,\n title: 'Ratio',\n allowUnordered: true,\n },\n ]}\n />\n ),\n cell: ({row: {original: item}}) => {\n return (\n <TableCell>\n <ResourceSummary item={item} type=\"effectiveGuaranteed\" />\n </TableCell>\n );\n },\n size: 100,\n },\n {\n id: 'operation_overview',\n header: () => (\n <SchedulingColumnHeader\n column=\"running_operation_count\"\n title=\"Operations\"\n options={[\n {\n column: 'running_operation_count' as const,\n title: 'Running',\n allowUnordered: true,\n },\n {\n column: 'max_operation_count' as const,\n title: 'Max count',\n allowUnordered: true,\n },\n ]}\n />\n ),\n cell: ({row: {original: item}}) => {\n const {\n maxOperationCount,\n maxOperationCountEdited,\n runningOperationCount,\n type,\n } = item;\n\n if (type === 'operation') {\n return <TableCell>{format.NO_VALUE}</TableCell>;\n }\n\n return (\n <TableCell>\n <Text variant=\"inherit\" ellipsis>\n <FormatNumber value={runningOperationCount} type=\"NumberSmart\" />\n &nbsp;/&nbsp;\n <EditedNumber\n value={maxOperationCount}\n edited={maxOperationCountEdited}\n type=\"NumberSmart\"\n />\n </Text>\n </TableCell>\n );\n },\n size: 120,\n },\n {\n id: 'duration',\n header: () => <SchedulingColumnHeader column=\"duration\" />,\n cell: ({row: {original: item}}) => {\n const {startTime} = item;\n return (\n <TableCell>\n <DurationMemo start={startTime} />\n </TableCell>\n );\n },\n },\n {\n id: 'FI',\n header: () => <SchedulingColumnHeader column=\"FI\" />,\n cell: ({row: {original: item}}) => {\n if (item.fifoIndex === undefined || item.type !== 'operation') {\n return '';\n } else {\n return item.fifoIndex;\n }\n },\n size: 50,\n },\n {\n id: 'operation_progress',\n header: () => (\n <SchedulingColumnHeader\n column=\"operation_count\"\n title={childTableItems.operation_progress.caption}\n options={[\n {column: 'operation_progress', title: 'Progress', allowUnordered: true},\n {column: 'operation_count', title: 'Count', allowUnordered: true},\n {\n column: 'max_operation_count',\n title: 'Max count',\n allowUnordered: true,\n },\n ]}\n />\n ),\n cell: ({row: {original: item}}) => {\n const info = childTableItems.operation_progress;\n const value = info.get(item);\n const theme = getProgressTheme(value);\n const text = info.text(item);\n return isNaN(value) ? (\n format.NO_VALUE\n ) : (\n <Progress value={value * 100} theme={theme} text={text} />\n );\n },\n },\n {\n id: 'running_operation_progress',\n header: () => (\n <SchedulingColumnHeader\n column=\"running_operation_progress\"\n title={childTableItems.running_operation_progress.caption}\n options={[\n {\n column: 'running_operation_progress',\n title: 'Progress',\n allowUnordered: true,\n },\n {\n column: 'running_operation_count',\n title: 'Count',\n allowUnordered: true,\n },\n {\n column: 'max_running_operation_count',\n title: 'Max running',\n allowUnordered: true,\n },\n ]}\n />\n ),\n cell: ({row: {original: item}}) => {\n const info = childTableItems.running_operation_progress;\n const value = info.get(item);\n const theme = getProgressTheme(value);\n const text = info.text(item);\n return isNaN(value) ? (\n format.NO_VALUE\n ) : (\n <Progress value={value * 100} theme={theme} text={text} />\n );\n },\n },\n makeNumberColumn('abs_demand_cpu', {hideApproximateChar: true}),\n makeNumberColumn('abs_demand_gpu', {hideApproximateChar: true}),\n makeNumberColumn('abs_demand_memory', {type: 'Bytes', hideApproximateChar: true}),\n makeNumberColumn('abs_demand_user_slots'),\n makeNumberColumn('abs_guaranteed_cpu', {hideApproximateChar: true}),\n makeNumberColumn('abs_guaranteed_gpu', {hideApproximateChar: true}),\n makeNumberColumn('abs_guaranteed_memory', {type: 'Bytes', hideApproximateChar: true}),\n makeNumberColumn('abs_guaranteed_user_slots'),\n makeNumberColumn('abs_usage_cpu', {hideApproximateChar: true}),\n makeNumberColumn('abs_usage_gpu', {hideApproximateChar: true}),\n makeNumberColumn('abs_usage_memory', {type: 'Bytes', hideApproximateChar: true}),\n makeNumberColumn('abs_usage_user_slots'),\n makeNumberColumn('accumulated'),\n makeNumberColumn('burst_cpu'),\n makeNumberColumn('burst_duration'),\n makeNumberColumn('children_burst_cpu'),\n makeNumberColumn('children_flow_cpu'),\n makeNumberColumn('flow_cpu'),\n makeReadableFieldColumn('integral_type'),\n makeNumberColumn('max_operation_count'),\n makeNumberColumn('max_running_operation_count'),\n makeNumberColumn('min_resources_cpu', {hideApproximateChar: true}),\n makeNumberColumn('min_resources_gpu', {hideApproximateChar: true}),\n makeNumberColumn('min_resources_memory', {type: 'Bytes', hideApproximateChar: true}),\n makeNumberColumn('min_resources_user_slots'),\n makeNumberColumn('operation_count'),\n makeNumberColumn('resource_detailed_cpu', {hideApproximateChar: true}),\n makeNumberColumn('resource_detailed_gpu', {hideApproximateChar: true}),\n makeNumberColumn('resource_detailed_memory', {\n type: 'Bytes',\n hideApproximateChar: true,\n }),\n makeNumberColumn('resource_detailed_user_slots'),\n makeNumberColumn('resource_limit_cpu'),\n makeNumberColumn('resource_limit_gpu'),\n makeNumberColumn('resource_limit_memory', {type: 'Bytes', hideApproximateChar: true}),\n makeNumberColumn('resource_limit_user_slots'),\n makeNumberColumn('running_operation_count'),\n {\n id: 'actions',\n header: (ctx) => {\n return <SchedulingTableSettings table={ctx.table} />;\n },\n size: 50,\n cell: ({row: {original: item}}) => {\n return <RowActions item={item} />;\n },\n enableColumnFilter: false,\n enableHiding: false,\n enableResizing: false,\n },\n ];\n\n return availableColumns;\n }, []);\n\n const {columnVisibility, columnOrder} = React.useMemo(() => {\n const visible = new Set(visibleColumns);\n const columnVisibility = columns.reduce(\n (acc, {id}) => {\n acc[id] = id === 'name' || id === 'actions' || visible.has(id);\n return acc;\n },\n {} as Record<SchedulingColumn, boolean>,\n );\n const columnOrder = [\n ...visibleColumns.filter((col) => columnVisibility[col]),\n ...Object.keys(columnVisibility).filter(\n (col) => !columnVisibility[col as SchedulingColumn],\n ),\n ];\n return {columnVisibility, columnOrder};\n }, [visibleColumns, columns]);\n\n return {columns, columnVisibility, columnOrder};\n}\n\nfunction NameHeader() {\n const expandedeLoading = useSelector(getSchedulingOperationsLoading);\n const loading = useSelector(getSchedulingLoading);\n return (\n <SchedulingColumnHeader\n title={i18n('pool-operation')}\n column=\"name\"\n loading={loading || expandedeLoading}\n allowUnordered\n />\n );\n}\n\ntype ResourceSummaryProps = {\n item: RowData;\n type: 'usage' | 'demand' | 'effectiveGuaranteed';\n};\n\nfunction ResourceSummary({item, type}: ResourceSummaryProps) {\n const showAbsResources = useSelector(getSchedulingShowAbsResources);\n const dominantResource = useSelector(getSchedulingTreeMainResource) ?? 'CPU';\n\n const {fairShareRatio} = item;\n\n if (!showAbsResources && !fairShareRatio) {\n return <TableCell>{format.Number(undefined)}</TableCell>;\n }\n\n if (!showAbsResources) {\n return (\n <TableCell>\n <FormatNumber value={fairShareRatio} type=\"NumberSmart\" />\n </TableCell>\n );\n }\n\n const {resources} = item ?? {};\n const cpu = resources?.cpu?.[type];\n const gpu = resources?.gpu?.[type];\n const user_memory = resources?.user_memory?.[type];\n\n if (showAbsResources && !cpu && !gpu && !user_memory) {\n return <TableCell>{format.Number(undefined)}</TableCell>;\n }\n\n const cpuContent = format.NumberSmart(cpu) + ' CPU';\n const gpuContent = format.NumberSmart(gpu) + ' GPU';\n const memContent = format.Bytes(user_memory) + ' RAM';\n\n const l1 = dominantResource === 'cpu' ? cpuContent : gpuContent;\n const l2 =\n dominantResource === 'cpu'\n ? [gpu && gpuContent, memContent].filter(Boolean).join(', ')\n : [cpu && cpuContent, memContent].filter(Boolean).join(', ');\n\n return (\n <Flex direction=\"column\" style={{margin: '-8px 0'}} overflow=\"hidden\">\n <Text variant=\"subheader-1\" style={{fontWeight: 'var(--yt-font-weight-bold)'}} ellipsis>\n {l1}\n </Text>\n <Text variant=\"caption-2\" color=\"secondary\" ellipsis>\n {l2}\n </Text>\n </Flex>\n );\n}\n\ntype EditedNumberProps = {\n value?: number;\n edited?: number;\n\n type: FormatNumberProps['type'];\n};\n\nfunction EditedNumber({value, edited, type}: EditedNumberProps) {\n const autocalculated = isNaN(edited!);\n const content = autocalculated ? 'Automatically calculated' : 'Explicitly defined';\n\n return (\n <FormatNumber\n className={block('edited-number', {autocalculated})}\n tooltip={content}\n value={value}\n type={type}\n />\n );\n}\n\nfunction Duration({start}: {start?: string}) {\n const [now, setNow] = React.useState(Date.now());\n\n React.useEffect(() => {\n const id = setInterval(() => setNow(Date.now()), 1000);\n return () => clearInterval(id);\n }, []);\n\n if (!start) {\n return null;\n }\n\n const from = moment(start).valueOf();\n return (\n <Tooltip\n className={block('duration')}\n ellipsis\n content={\n <MetaTable\n items={[\n {\n key: 'start time',\n value: format.DateTime(from / 1000),\n },\n ]}\n />\n }\n >\n {formatTimeDuration(Math.round((now - from) / 1000) * 1000)}\n </Tooltip>\n );\n}\n\nfunction RowActions({item}: {item: RowData}) {\n const dispatch = useDispatch();\n\n const {type, isEphemeral} = item;\n const editable = !isEphemeral && type === 'pool';\n\n return (\n editable && (\n <DropdownMenu\n switcherWrapperClassName={block('actions')}\n items={[\n {\n text: 'Attributes',\n action: () => {\n const exactPath = dispatch(getPoolPathsByName(item.name))?.orchidPath;\n if (type === 'pool') {\n dispatch(openAttributesModal({title: item.name, exactPath}));\n }\n },\n },\n {\n action: () => dispatch(openEditModal(item)),\n text: 'Edit',\n },\n {\n action: () => dispatch(openPoolDeleteModal(item)),\n text: 'Delete',\n theme: 'danger' as const,\n },\n ]}\n />\n )\n );\n}\n\nfunction FairShareUsage({item}: {item: RowData}) {\n const {starvation_status, fairShareRatio, usageRatio} = item;\n\n const forceTheme = (\n {\n starving: 'warning',\n aggressively_starving: 'danger',\n } as Record<string, 'warning' | 'danger' | undefined>\n )[starvation_status!];\n\n const title = !forceTheme ? null : (\n <div className={block('starvation-status')}>\n <Label theme={forceTheme} text={format.Readable(starvation_status)} />\n </div>\n );\n\n return (\n <ShareUsageBar\n className={block('share-usage')}\n shareValue={fairShareRatio}\n shareTitle={'Fair share'}\n usageValue={usageRatio}\n usageTitle={'Usage'}\n forceTheme={forceTheme}\n title={title}\n />\n );\n}\n\nfunction SchedulingColumnHeader(props: ColumnHeaderProps<SchedulingColumn>) {\n const dispatch = useDispatch();\n\n const [sortState] = useSelector(getSchedulingSortState);\n\n const order = props.column === sortState?.column ? sortState.order : undefined;\n\n const lastColumnRef = React.useRef(props.column);\n\n const byOptions: Pick<typeof props, 'column' | 'order'> = {column: lastColumnRef.current};\n\n if (sortState?.column && props.options) {\n const item = props.options.find((x) => x.column === sortState.column);\n if (item) {\n Object.assign(byOptions, {column: item.column, order: sortState.order});\n }\n }\n\n return (\n <ColumnHeader\n {...props}\n order={order}\n {...byOptions}\n onSort={(column, order, {currentOrder}) => {\n dispatch(\n schedulingSetSortState(\n column && order\n ? [\n {\n column: currentOrder\n ? column\n : (lastColumnRef.current ?? column),\n order,\n },\n ]\n : [],\n ),\n );\n if (column) {\n lastColumnRef.current = column;\n }\n }}\n />\n );\n}\n\nfunction SchedulingTableSettings<T extends tanstack.Table<any>>({table}: {table: T}) {\n const mode = useSelector(getSchedulingContentMode);\n\n return mode === 'custom' ? <TableSettings table={table} /> : null;\n}\n","import isEqual_ from 'lodash/isEqual';\n\nimport {KeysByType} from '../../../@types/types';\nimport {DescribedSettings} from '../../../shared/constants/settings-types';\n\nimport {getSettingsData} from '../../store/selectors/settings/settings-base';\nimport {setSettingByKey} from '../../store/actions/settings';\nimport {RootState} from '../../store/reducers';\nimport {useDispatch, useSelector} from '../../store/redux-hooks';\n\ntype ColumnVisibility = Record<string, boolean>;\n\ntype ColumnOrder = Array<string>;\n\nexport function useSettingsVisibleColumns<K extends KeysByType<DescribedSettings, Array<string>>>(\n key: K,\n) {\n const dispatch = useDispatch();\n const visibleColumns = useSelector(getSettingsData)[key] ?? [];\n\n return {\n visibleColumns,\n onColumnVisibilityChange: (\n updateFn: ColumnVisibility | ((oldState: ColumnVisibility) => ColumnVisibility),\n ) => {\n dispatch((_dispatch: unknown, getState: () => RootState) => {\n const prevVisibleColumns = getSettingsData(getState())[key] ?? [];\n const newVisibility = 'function' === typeof updateFn ? updateFn({}) : updateFn;\n\n const newVisibleColumns: DescribedSettings[K] = [\n ...prevVisibleColumns,\n ] as typeof prevVisibleColumns;\n Object.keys(newVisibility).forEach((k) => {\n const kIndex = newVisibleColumns.indexOf(k as any);\n const visible = newVisibility[k];\n if (visible) {\n if (-1 === kIndex) {\n newVisibleColumns.push(k as any);\n }\n } else {\n if (-1 !== kIndex) {\n newVisibleColumns.splice(kIndex, 1);\n }\n }\n });\n\n if (!isEqual_(prevVisibleColumns, newVisibleColumns)) {\n dispatch(setSettingByKey(key, newVisibleColumns));\n }\n });\n },\n onColumnOrderChange: (\n updateFn: ColumnOrder | ((prevOrder: ColumnOrder) => ColumnOrder),\n ) => {\n dispatch((_dispatch: unknown, getState: () => RootState) => {\n const prevVisibleColumns = getSettingsData(getState())[key] ?? [];\n const visible = new Set<string>(prevVisibleColumns);\n\n const newOrder = 'function' === typeof updateFn ? updateFn([]) : updateFn;\n\n const newValue = newOrder.filter((item) => {\n return visible.has(item);\n }) as typeof prevVisibleColumns;\n\n if (!isEqual_(prevVisibleColumns, newValue)) {\n dispatch(setSettingByKey(key, newValue));\n }\n });\n },\n };\n}\n","import React from 'react';\n\nimport WithStickyToolbar from '../../../../../components/WithStickyToolbar/WithStickyToolbar';\n\nimport {SchedulingMeta} from './SchedulingMeta';\nimport {SchedulingToolbar} from './SchedulingToolbar';\nimport {SchedulingTable} from './SchedulingTable/SchedulingTable';\n\nexport function Overview() {\n return (\n <div>\n <SchedulingMeta />\n <WithStickyToolbar\n toolbar={<SchedulingToolbar />}\n content={<SchedulingTable />}\n topMargin=\"none\"\n />\n </div>\n );\n}\n","import React from 'react';\nimport {getPool, getTree} from '../../../store/selectors/scheduling/scheduling';\nimport {useDispatch, useSelector} from '../../../store/redux-hooks';\nimport {loadExpandedPools} from '../../../store/actions/scheduling/expanded-pools';\n\nfunction SchedulingExpandedPoolsUpdater() {\n const tree = useSelector(getTree);\n const name = useSelector(getPool);\n\n const dispatch = useDispatch();\n\n React.useEffect(() => {\n dispatch(loadExpandedPools(tree));\n }, [dispatch, tree, name]);\n\n return null;\n}\n\nexport default React.memo(SchedulingExpandedPoolsUpdater);\n","import React from 'react';\n\nimport {YTErrorBlock} from '../../../../../components/Block/Block';\nimport Loader from '../../../../../components/Loader/Loader';\nimport Yson from '../../../../../components/Yson/Yson';\nimport {YTApiId} from '../../../../../rum/rum-wrap-api';\nimport {getPoolPathsByName} from '../../../../../store/actions/scheduling/expanded-pools';\nimport {useFetchBatchQuery} from '../../../../../store/api/yt';\nimport {getCurrentPool} from '../../../../../store/selectors/scheduling/scheduling';\nimport {useDispatch, useSelector} from '../../../../../store/redux-hooks';\nimport {PoolTreeNode} from '../../../../../utils/scheduling/pool-child';\n\nexport function PoolAttributes({className}: {className: string}) {\n const pool = useSelector(getCurrentPool);\n\n if (!pool) {\n return null;\n }\n\n return <PoolAttributesFetched className={className} pool={pool} />;\n}\n\nfunction PoolAttributesFetched({className, pool}: {className?: string; pool: PoolTreeNode}) {\n const dispatch = useDispatch();\n const res = React.useMemo(() => {\n return dispatch(getPoolPathsByName(pool.name));\n }, [dispatch, pool.name]);\n\n const {data, error, isLoading} = useFetchBatchQuery<unknown>({\n id: YTApiId.schedulingPoolAttributes,\n errorTitle: 'Failed to load pool attributes',\n parameters: {\n requests: [{command: 'get', parameters: {path: res.orchidPath}}],\n },\n });\n\n return (\n <div className={className}>\n {isLoading && <Loader />}\n {Boolean(error) && <YTErrorBlock error={error} />}\n <Yson folding virtualized value={data?.[0]?.output ?? null} />\n </div>\n );\n}\n","import cn from 'bem-cn-lite';\nimport React from 'react';\nimport {useSelector} from '../../../store/redux-hooks';\nimport {Redirect, Route, Switch, withRouter} from 'react-router';\n\nimport reduce_ from 'lodash/reduce';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\n\nimport Tabs from '../../../components/Tabs/Tabs';\nimport Placeholder from '../../../pages/components/Placeholder';\n\nimport {DEFAULT_TAB, SCHEDULING_ALLOWED_ROOT_TABS, Tab} from '../../../constants/scheduling';\nimport PoolAcl from '../../../pages/scheduling/Content/tabs/PoolAcl/PoolAcl';\nimport {\n getIsRoot,\n getPool,\n getPoolIsEphemeral,\n getTree,\n isPoolAclAllowed,\n} from '../../../store/selectors/scheduling/scheduling';\nimport {TabSettings, makeTabProps} from '../../../utils';\nimport {formatByParams} from '../../../utils/format';\n\nimport {UI_TAB_SIZE} from '../../../constants/global';\nimport {Overview} from '../../../pages/scheduling/Content/tabs/Overview/Overview';\nimport {getCluster} from '../../../store/selectors/global';\nimport UIFactory from '../../../UIFactory';\nimport SchedulingExpandedPoolsUpdater from './SchedulingExpandedPoolsUpdater';\nimport {PoolAttributes} from './tabs/PoolAttributes/PoolAttributes';\n\nimport './Content.scss';\n\nconst block = cn('scheduling-content');\n\ntype ContentProps = {\n className?: string;\n match: {path: string; url: string};\n location: {search: string};\n};\n\nfunction Content({match, location}: ContentProps) {\n const cluster = useSelector(getCluster);\n const pool = useSelector(getPool);\n const tree = useSelector(getTree);\n const isEphemeral = useSelector(getPoolIsEphemeral);\n const isRoot = useSelector(getIsRoot);\n const allowAcl = useSelector(isPoolAclAllowed);\n\n const localTab: Record<string, string> = {...Tab};\n\n const showSettings = reduce_(\n Tab,\n (acc, tab) => {\n acc[tab] = {show: SCHEDULING_ALLOWED_ROOT_TABS[tab] || !isRoot};\n return acc;\n },\n {} as Record<string, TabSettings>,\n );\n\n const titleDict: Record<string, string> = {};\n\n const aclTab = showSettings[Tab.ACL];\n aclTab.show = aclTab.show && allowAcl;\n\n const extraTabs = UIFactory.getSchedulingExtraTabs({\n cluster,\n pool,\n tree,\n extraOptions: {isRoot, isEphemeral},\n });\n\n const extraRoutes: Array<React.ReactElement> = [];\n\n extraTabs.forEach((tab) => {\n const {name, title, component, urlTemplate, hidden} = tab;\n\n const tabSettings: TabSettings = {show: !hidden};\n\n showSettings[name] = tabSettings;\n\n if (urlTemplate) {\n tabSettings.routed = false;\n tabSettings.external = true;\n tabSettings.url = formatByParams(urlTemplate, {\n ytCluster: cluster,\n ytPool: pool,\n ytPoolTree: tree,\n });\n }\n\n localTab[name] = name;\n if (title) {\n titleDict[name] = title;\n }\n if (component) {\n const route = <Route key={name} path={`${match.path}/${name}`} component={component} />;\n extraRoutes.push(route);\n }\n });\n\n delete localTab.ACL;\n localTab[Tab.ACL] = Tab.ACL;\n\n const props = makeTabProps(match.url, localTab, showSettings, {pool, tree}, titleDict);\n\n return (\n <ErrorBoundary>\n <SchedulingExpandedPoolsUpdater />\n <Tabs\n {...props}\n active={DEFAULT_TAB}\n className={block('tabs')}\n routed\n size={UI_TAB_SIZE}\n />\n <Switch>\n <Route path={`${match.path}/${Tab.OVERVIEW}`} component={Overview} />\n <Route\n path={`${match.path}/${Tab.ATTRIBUTES}`}\n render={() => <PoolAttributes className={block('attributes')} />}\n />\n {extraRoutes}\n {aclTab.show && <Route path={`${match.path}/${Tab.ACL}`} component={PoolAcl} />}\n <Route path={`${match.path}/:tab`} component={Placeholder} />\n <Redirect\n from={match.url}\n to={{pathname: `${match.url}/${DEFAULT_TAB}`, search: location.search}}\n />\n </Switch>\n </ErrorBoundary>\n );\n}\n\nexport default withRouter(Content);\n","import {RootState} from '../../../store/reducers';\nimport {calculateLoadingStatus, isFinalLoadingStatus} from '../../../utils/utils';\nimport {createSelector} from 'reselect';\n\nexport const getSchedulingIsFinalLoadingState = createSelector(\n [\n (store: RootState) => store.scheduling.scheduling.loading,\n (store: RootState) => store.scheduling.scheduling.loaded,\n (store: RootState) => store.scheduling.scheduling.error,\n ],\n (loading, loaded, error) => {\n const status = calculateLoadingStatus(loading, loaded, error);\n return isFinalLoadingStatus(status);\n },\n);\n","import React from 'react';\nimport {useSelector} from '../../../store/redux-hooks';\nimport cn from 'bem-cn-lite';\nimport map_ from 'lodash/map';\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport hammer from '../../../common/hammer';\nimport {getIsRoot, getResources} from '../../../store/selectors/scheduling/scheduling';\nimport {Progress} from '@gravity-ui/uikit';\n\nimport './SchedulingResources.scss';\n\nconst block = cn('scheduling-resources');\nconst headingBlock = cn('elements-heading');\n\nfunction SchedulingResources() {\n const isRoot = useSelector(getIsRoot);\n const resources = useSelector(getResources) as any;\n\n return !isRoot || isEmpty_(resources) ? null : (\n <div className={block()}>\n {map_(resources, (resource) => (\n <div className={block('resources-item')} key={resource.type}>\n <div className={headingBlock({size: 's'})}>\n {hammer.format['ReadableField'](resource.type)}\n </div>\n <Progress {...resource.progress} />\n </div>\n ))}\n </div>\n );\n}\n\nexport default React.memo(SchedulingResources);\n","import React, {useCallback, useMemo} from 'react';\nimport {useDispatch, useSelector} from '../../../../store/redux-hooks';\nimport cn from 'bem-cn-lite';\n\nimport isEmpty_ from 'lodash/isEmpty';\nimport pick_ from 'lodash/pick';\nimport pickBy_ from 'lodash/pickBy';\n\nimport {DialogField, FormApi, YTDFDialog} from '../../../../components/Dialog';\nimport {YTErrorBlock} from '../../../../components/Error/Error';\n\nimport {\n calculatePoolPath,\n getPools,\n getPoolsSelectItems,\n getSchedulingEditItem,\n getSchedulingSourcesOfEditItem,\n getTree,\n} from '../../../../store/selectors/scheduling/scheduling';\nimport {\n POOL_GENERAL_TYPE_TO_ATTRIBUTE,\n POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR,\n POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE,\n PoolEditorFormValues,\n getInitialValues,\n} from '../../../../utils/scheduling/scheduling';\nimport {isAbcPoolName, isTopLevelPool} from '../../../../utils/scheduling/pool';\nimport {closeEditModal, editPool} from '../../../../store/actions/scheduling/scheduling';\n\nimport {checkUserPermissionsUI} from '../../../../utils/acl/acl-api';\nimport {getCluster, getCurrentUserName} from '../../../../store/selectors/global';\nimport {getCurrentTreeGpuLimit} from '../../../../store/selectors/scheduling/scheduling-ts';\n\nimport {RootState} from '../../../../store/reducers';\nimport {getSchedulingPoolsMapByName} from '../../../../store/selectors/scheduling/scheduling-pools';\nimport Link from '../../../../components/Link/Link';\n\nimport './PoolEditorDialog.scss';\nimport UIFactory from '../../../../UIFactory';\nimport {createQuotaReqTicketUrl} from '../../../../config';\nimport {PoolTreeNode} from '../../../../utils/scheduling/pool-child';\n\nconst block = cn('pool-editor-dialog');\n\nfunction makePermissionWarning(visible: boolean) {\n return !visible ? null : (\n <div className={block('permissions-warning')}>\n You do not have sufficient permissions to modify pool settings. In order to be able to\n modify pool settings <span className={block('flag')}>inherit_acl</span> flag should be\n enabled for current pool and you should be responsible for the parent pool.\n </div>\n );\n}\n\nfunction makeError(error: any) {\n return isEmpty_(error) ? null : <YTErrorBlock className={block('error')} error={error} />;\n}\n\nexport function PoolEditorDialog() {\n const dispatch = useDispatch();\n\n const editItem = useSelector(getSchedulingEditItem);\n const {poolErrorData, editVisibility} = useSelector(\n (state: RootState) => state.scheduling.scheduling,\n );\n\n const treGpuLimit = useSelector(getCurrentTreeGpuLimit);\n\n const allowedSources = useSelector(getSchedulingSourcesOfEditItem);\n\n const poolsItems = useSelector(getPoolsSelectItems);\n const pools = useSelector(getPools);\n const tree = useSelector(getTree);\n const modeItems = [\n {key: 'fair_share', value: 'fair_share', title: 'fair_share'},\n {key: 'fifo', value: 'fifo', title: 'fifo'},\n ];\n const initialFormValues = useMemo(() => {\n const data = getInitialValues(editItem, allowedSources);\n const formData: PoolEditorFormValues = {\n ...data,\n general: {\n ...data.general,\n weight: {\n value: data.general.weight,\n },\n },\n };\n return formData;\n }, [editItem, allowedSources]); // don't pass pools into memo's array\n\n const editCloseHandler = useCallback(() => {\n dispatch(closeEditModal({cancelled: true}));\n }, [dispatch]);\n const editConfirmHandler = useCallback(\n async (form: FormApi<PoolEditorFormValues>) => {\n const {values} = form.getState();\n const {general, resourceGuarantee, integralGuarantee, resourceLimits, otherSettings} =\n values;\n const data = {\n general: {\n ...pick_(general, ['name', 'mode']),\n weight: general.weight,\n ...pickBy_(\n pick_(general, Object.keys(POOL_GENERAL_TYPE_TO_ATTRIBUTE)),\n (item: {limit: number}, k) => {\n if (!item) {\n return false;\n }\n const key = k as keyof typeof POOL_GENERAL_TYPE_TO_ATTRIBUTE;\n const initialValue = initialFormValues.general[key]?.limit;\n return item.limit !== initialValue;\n },\n ),\n },\n resourceGuarantee: pickBy_(\n pick_(resourceGuarantee, Object.keys(POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE)),\n (item: {limit: number}, k) => {\n if (!item) {\n return false;\n }\n const key = k as keyof typeof resourceGuarantee;\n const initialValue = initialFormValues.resourceGuarantee[key]?.limit;\n return item.limit !== initialValue;\n },\n ),\n integralGuarantee: pickBy_(\n pick_(integralGuarantee, Object.keys(POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR)),\n (item, k) => {\n if (!item) {\n return false;\n }\n const key = k as keyof typeof integralGuarantee;\n const initialValue = initialFormValues.integralGuarantee[key];\n if (typeof item === 'object' && typeof initialValue === 'object') {\n return item.limit !== initialValue.limit;\n } else {\n return item !== initialValue;\n }\n },\n ),\n resourceLimits: pick_(resourceLimits, ['cpu', 'gpu', 'memory', 'userSlots']),\n otherSettings: pick_(otherSettings, [\n 'forbidImmediateOperations',\n 'fifoSortParams',\n 'createEphemeralSubpools',\n ]),\n };\n await dispatch(editPool(editItem!, data, initialFormValues));\n },\n [editItem, initialFormValues, dispatch],\n );\n\n const user = useSelector(getCurrentUserName);\n const [hasWarning, setHasWarning] = React.useState(false);\n const [checkPermError, setCheckPermError] = React.useState(null);\n\n React.useEffect(() => {\n setCheckPermError(null);\n if (!editItem?.name) {\n return;\n }\n const pathToCheck = calculatePoolPath(editItem.name, pools, tree);\n checkUserPermissionsUI(pathToCheck, user, ['write'])\n .then(([{action}]) => {\n const newHasWarning = action !== 'allow';\n if (newHasWarning !== hasWarning) {\n setHasWarning(newHasWarning);\n }\n })\n .catch((error) => {\n setCheckPermError(error);\n });\n }, [pools, tree, editItem?.name, hasWarning, setHasWarning, setCheckPermError]);\n\n const warningField: DialogField = {\n type: 'block',\n name: 'perm-warning',\n extras: {\n children: makePermissionWarning(hasWarning),\n },\n };\n\n const checkPermErrorField: DialogField = {\n type: 'block',\n name: 'check-perm-error',\n extras: {\n children: makeError(checkPermError),\n },\n };\n\n const poolErrorDataField: DialogField = {\n type: 'block',\n name: 'pool-error-data',\n extras: {\n children: makeError(poolErrorData),\n },\n };\n\n const transferNotice = useTransferNotice(editItem);\n\n const integralTypeNotice = useChangeIntegralTypeNotice(editItem, pools, tree);\n\n return (\n <YTDFDialog<PoolEditorFormValues>\n size=\"l\"\n key={editItem?.name + '/' + editVisibility}\n className={block()}\n visible={editVisibility}\n onClose={editCloseHandler}\n headerProps={{\n title: editItem?.name,\n }}\n onAdd={editConfirmHandler}\n initialValues={initialFormValues}\n fields={[\n {\n type: 'tab-vertical',\n name: 'general',\n title: 'General',\n fields: [\n ...transferNotice,\n {\n name: 'name',\n type: 'text',\n caption: 'Pool name',\n required: true,\n extras: {\n placeholder: 'Enter pool name...',\n },\n },\n {\n name: 'parent',\n type: 'yt-select-single',\n caption: 'Parent',\n tooltip:\n 'Select parent pool, defining a place in pool_tree to place a new pool.',\n required: true,\n extras: {\n disabled: true,\n items: poolsItems,\n placeholder: 'Select pool tree...',\n width: 'max',\n },\n },\n {\n name: 'separator',\n type: 'block',\n extras: {\n children: <div className={block('separator')} />,\n },\n },\n {\n name: 'mode',\n type: 'yt-select-single',\n caption: 'Mode',\n required: true,\n extras: {\n items: modeItems,\n placeholder: 'Select mode...',\n width: 'max',\n hideFilter: true,\n },\n },\n {\n name: 'weight',\n type: 'number',\n caption: 'Weight',\n extras: {\n min: Number.MIN_VALUE,\n hidePrettyValue: true,\n formatFn: (value) => (value === undefined ? '' : String(value)),\n },\n },\n {\n name: 'maxOperationCount',\n type: 'pool-quota-editor',\n caption: 'Max operation count',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'maxOperationCount',\n initialLimit: initialFormValues.general.maxOperationCount?.limit,\n min: 0,\n max: Infinity,\n sourcesSkipParent: true,\n limitInputTitle: 'Limit',\n },\n },\n {\n name: 'maxRunningOperationCount',\n type: 'pool-quota-editor',\n caption: 'Max running operation count',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'maxRunningOperationCount',\n initialLimit:\n initialFormValues.general.maxRunningOperationCount?.limit,\n min: 0,\n max: Infinity,\n sourcesSkipParent: true,\n limitInputTitle: 'Limit',\n },\n },\n warningField,\n poolErrorDataField,\n checkPermErrorField,\n ],\n },\n {\n type: 'tab-vertical',\n name: 'resourceGuarantee',\n title: 'Strong Guarantee',\n fields: [\n ...transferNotice,\n {\n name: 'cpuStrong',\n type: 'pool-quota-editor',\n caption: 'CPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'cpuStrong',\n initialLimit: initialFormValues.resourceGuarantee.cpuStrong?.limit,\n decimalPlaces: 2,\n },\n },\n ...(treGpuLimit > 0\n ? [\n {\n name: 'gpuStrong',\n type: 'pool-quota-editor' as const,\n caption: 'GPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'gpuStrong' as const,\n initialLimit:\n initialFormValues.resourceGuarantee.gpuStrong?.limit,\n },\n },\n ]\n : []),\n {\n name: 'memoryStrong',\n type: 'pool-quota-editor' as const,\n caption: 'Memory',\n extras: {\n format: 'Bytes',\n pool: editItem?.name || '',\n resourceType: 'memoryStrong' as const,\n initialLimit:\n initialFormValues.resourceGuarantee.memoryStrong?.limit,\n },\n },\n warningField,\n poolErrorDataField,\n checkPermErrorField,\n ],\n },\n {\n type: 'tab-vertical',\n name: 'integralGuarantee',\n title: 'Integral Guarantee',\n fields: [\n ...transferNotice,\n ...integralTypeNotice,\n {\n name: 'guaranteeType',\n type: 'yt-select-single',\n caption: 'Guarantee',\n extras: {\n placeholder: 'Integral guarantee type...',\n items: [\n {\n value: 'none',\n text: 'Descendants only',\n },\n {value: 'burst', text: 'Burst'},\n {value: 'relaxed', text: 'Relaxed'},\n ],\n width: 'max',\n },\n },\n {\n name: 'burstCpu',\n type: 'pool-quota-editor',\n caption: 'Burst CPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'burstCpu',\n initialLimit: initialFormValues.integralGuarantee.burstCpu?.limit,\n decimalPlaces: 2,\n },\n },\n ...(treGpuLimit > 0\n ? [\n {\n name: 'burstGpu',\n type: 'pool-quota-editor' as const,\n caption: 'Burst GPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'burstGpu' as const,\n initialLimit:\n initialFormValues.integralGuarantee.burstGpu?.limit,\n },\n },\n ]\n : []),\n {\n name: 'flowCpu',\n type: 'pool-quota-editor',\n caption: 'Flow CPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'flowCpu',\n initialLimit: initialFormValues.integralGuarantee.flowCpu?.limit,\n decimalPlaces: 2,\n },\n },\n ...(treGpuLimit > 0\n ? [\n {\n name: 'flowGpu',\n type: 'pool-quota-editor' as const,\n caption: 'Flow GPU',\n extras: {\n pool: editItem?.name || '',\n resourceType: 'flowGpu' as const,\n initialLimit:\n initialFormValues.integralGuarantee.flowGpu?.limit,\n },\n },\n ]\n : []),\n warningField,\n poolErrorDataField,\n checkPermErrorField,\n ],\n },\n {\n type: 'tab-vertical',\n name: 'resourceLimits',\n title: 'Resource Limits',\n fields: [\n {\n name: 'cpu',\n type: 'text',\n caption: 'CPU',\n },\n {\n name: 'gpu',\n type: 'text',\n caption: 'GPU',\n },\n {\n name: 'memory',\n type: 'bytes',\n caption: 'Memory',\n validator(value?: number) {\n if (typeof value !== 'undefined' && isNaN(value)) {\n return 'Incorrect value';\n }\n return undefined;\n },\n },\n {\n name: 'userSlots',\n type: 'text',\n caption: 'User slots',\n },\n warningField,\n poolErrorDataField,\n checkPermErrorField,\n ],\n },\n {\n type: 'tab-vertical',\n name: 'otherSettings',\n title: 'Other settings',\n fields: [\n {\n name: 'forbidImmediateOperations',\n type: 'tumbler',\n caption: 'Forbid immediate operations',\n },\n {\n name: 'fifoSortParams',\n type: 'sortable-list',\n caption: 'Fifo sort parameters',\n extras: {\n axis: 'x',\n },\n },\n {\n name: 'createEphemeralSubpools',\n type: 'tumbler',\n caption: 'Create ephemeral subpools',\n },\n warningField,\n poolErrorDataField,\n checkPermErrorField,\n ],\n },\n ]}\n />\n );\n}\n\nfunction useTransferNotice(editItem?: PoolTreeNode): [DialogField<PoolEditorFormValues>] | [] {\n const {parent} = editItem || {};\n // const abcInfo = abcInfoFromAttributes(cypressAttributes);\n const poolsByName = useSelector(getSchedulingPoolsMapByName);\n const parentPool = poolsByName[parent!];\n\n const children = UIFactory.renderTransferQuotaNoticeForPool({\n pool: editItem,\n parentPool,\n isTopLevel: isTopLevelPool(editItem),\n });\n\n return !children\n ? []\n : [\n {\n type: 'block' as const,\n name: 'transferQuotaNotice',\n extras: {\n children,\n },\n },\n ];\n}\n\nfunction useChangeIntegralTypeNotice(\n editItem: {name: string; parent?: string} | undefined,\n pools: Array<{name: string; parent?: string}>,\n tree: string,\n): [DialogField<PoolEditorFormValues>] | [] {\n const {name, parent} = editItem || {};\n\n const cluster = useSelector(getCluster);\n\n if (isAbcPoolName(name) || (!isAbcPoolName(parent) && !isTopLevelPool(editItem))) {\n return [];\n }\n\n const poolPath = name ? calculatePoolPath(name, pools, tree) : undefined;\n const path = `${poolPath}/@integral_guarantees/guarantee_type`;\n const summary = `[${cluster}]: Change-request of ${path}`;\n\n const {url, queue} = createQuotaReqTicketUrl({summary});\n\n return [\n {\n type: 'block' as const,\n name: 'integralTypeNotice',\n extras: {\n children: (\n <div className={block('changeTypeNotice')}>\n To change the guarantee type of the pool you have to create a request to{' '}\n {url ? <Link url={url}>{queue}</Link> : \"the cluster's support team\"}\n </div>\n ),\n },\n },\n ];\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from '../../../store/redux-hooks';\nimport cn from 'bem-cn-lite';\n\nimport keys_ from 'lodash/keys';\n\nimport {DialogWrapper as DeleteDialog} from '../../../components/DialogWrapper/DialogWrapper';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport {YTErrorBlock} from '../../../components/Error/Error';\n\nimport Content from '../Content/Content';\n\nimport {SCHEDULING_CREATE_POOL_CANCELLED} from '../../../constants/scheduling';\nimport {useUpdater} from '../../../hooks/use-updater';\n\nimport {\n closePoolDeleteModal as closeDeleteModal,\n deletePool,\n loadSchedulingData,\n} from '../../../store/actions/scheduling/scheduling-ts';\n\nimport './Scheduling.scss';\nimport {useAppRumMeasureStart} from '../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../rum/rum-measure-types';\nimport {getSchedulingIsFinalLoadingState} from '../../../store/selectors/scheduling';\nimport SchedulingResources from '../Content/SchedulingResources';\nimport {PoolEditorDialog} from './PoolEditorDialog/PoolEditorDialog';\nimport {RootState} from '../../../store/reducers';\n\nconst block = cn('scheduling');\n\nconst SchedulingDialogsMemo = React.memo(SchedulingDialogs);\n\nfunction Scheduling() {\n const error = useSelector((state: RootState) => {\n const {error: hasError, errorData} = state.scheduling.scheduling;\n return hasError ? errorData : undefined;\n });\n const dispatch = useDispatch();\n\n const updateFn = React.useCallback(() => {\n dispatch(loadSchedulingData());\n }, [dispatch]);\n\n useUpdater(updateFn);\n\n return (\n <div className={block(null, 'elements-main-section')}>\n <ErrorBoundary>\n {error && <YTErrorBlock error={error} />}\n <div className={block('wrapper')}>\n <SchedulingResources />\n <Content {...{className: block('content')}} />\n </div>\n <SchedulingDialogsMemo />\n </ErrorBoundary>\n </div>\n );\n}\n\nconst SchedulingMemo = React.memo(Scheduling);\n\nexport default function SchedulingWithRum() {\n const isFinalState = useSelector(getSchedulingIsFinalLoadingState);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.SCHEDULING,\n startDeps: [isFinalState],\n allowStart: ([isFinal]) => {\n return !isFinal;\n },\n });\n\n return <SchedulingMemo />;\n}\n\nfunction SchedulingDialogs() {\n const dispatch = useDispatch();\n\n const {deleteVisibility, deleteItem, poolErrorData} = useSelector(\n (state: RootState) => state.scheduling.scheduling,\n );\n\n const deleteConfirmHandler = React.useCallback(\n () => dispatch(deletePool(deleteItem)),\n [deleteItem, dispatch],\n );\n const deleteCloseHandler = React.useCallback(() => {\n dispatch({type: SCHEDULING_CREATE_POOL_CANCELLED});\n dispatch(closeDeleteModal());\n }, [dispatch]);\n\n return (\n <React.Fragment>\n {deleteVisibility && (\n <DeleteDialog\n size=\"m\"\n className={block('delete-dialog')}\n open={deleteVisibility}\n onClose={deleteCloseHandler}\n hasCloseButton\n >\n <DeleteDialog.Header caption=\"Delete\" />\n <DeleteDialog.Body>\n Are you sure you want to delete the <b>{deleteItem?.name}</b> pool?\n {keys_(poolErrorData).length > 0 ? (\n <YTErrorBlock message=\"Delete pool failure\" error={poolErrorData} />\n ) : null}\n </DeleteDialog.Body>\n <DeleteDialog.Footer\n onClickButtonApply={deleteConfirmHandler}\n onClickButtonCancel={deleteCloseHandler}\n propsButtonApply={{view: 'flat-danger'}}\n textButtonCancel=\"Cancel\"\n textButtonApply=\"Delete\"\n />\n </DeleteDialog>\n )}\n <PoolEditorDialog />\n </React.Fragment>\n );\n}\n","export function prepareAbcService(abcService?: {\n value?: string;\n title: string;\n id: string | number;\n}) {\n if (!abcService || !abcService.value) {\n return {};\n }\n const slug = abcService.value.startsWith('svc_')\n ? abcService.value.slice(4) // remove 'svc_' prefix;\n : abcService.value;\n const name = abcService.title;\n\n return {slug, name, id: Number(abcService.id)};\n}\n","import React from 'react';\nimport {ThunkAction} from 'redux-thunk';\nimport {RootState} from '../../reducers';\nimport {\n CreatePoolDialogAction,\n CreatePoolDialogState,\n} from '../../reducers/scheduling/create-pool-dialog';\nimport {\n CREATE_POOL_DIALOG_TREE_CREATE_FAILURE,\n CREATE_POOL_DIALOG_TREE_ITEMS_SUCCESS,\n} from '../../../constants/scheduling';\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport {prepareAbcService} from '../../../utils/scheduling';\nimport {wrapApiPromiseByToaster} from '../../../utils/utils';\nimport {loadSchedulingData} from './scheduling-ts';\nimport {FIX_MY_TYPE} from '../../../types';\nimport {getCluster} from '../../selectors/global';\nimport {updateAcl} from '../../../utils/acl/acl-api';\nimport {IdmObjectType} from '../../../constants/acl';\nimport Link from '../../../components/Link/Link';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {createAdminReqTicketUrl} from '../../../config';\n\ntype CreatePoolDialogThunkAction<R = any> = ThunkAction<\n R,\n RootState,\n unknown,\n CreatePoolDialogAction\n>;\n\nexport function fetchCreatePoolDialogTreeItems(currentTree: string): CreatePoolDialogThunkAction {\n return (dispatch) => {\n return ytApiV3Id\n .get(YTApiId.getPoolTrees, {path: `//sys/pool_trees/${currentTree}`})\n .then((treeItems: CreatePoolDialogState['treeItems']) => {\n dispatch({\n type: CREATE_POOL_DIALOG_TREE_ITEMS_SUCCESS,\n data: {currentTree, treeItems},\n });\n });\n };\n}\n\nexport function createPool(values: FIX_MY_TYPE): CreatePoolDialogThunkAction {\n return (dispatch, getState) => {\n const {abcService} = values;\n const cluster = getCluster(getState()) as string;\n\n return wrapApiPromiseByToaster(\n yt.v3.create({\n type: 'scheduler_pool',\n attributes: Object.assign(\n {\n name: values.name,\n parent_name: values.parent || undefined,\n pool_tree: values.tree,\n },\n !abcService || !abcService.value\n ? {}\n : {\n abc: prepareAbcService(abcService),\n },\n ),\n }),\n {\n toasterName: `create_${values.name}`,\n successContent: `Successfully created ${values.name}. Please wait.`,\n errorContent: `'${values.name}' pool creation failed`,\n timeout: 10000,\n },\n )\n .then(() => {\n updateAcl(cluster, values.name, {\n idmKind: IdmObjectType.POOL,\n poolTree: values.tree,\n responsible: values.responsible,\n });\n\n return waitWhilePoolIsReady(values).then(() => {\n dispatch(loadSchedulingData());\n });\n })\n .catch((error) => {\n if (error?.code === yt.codes.CANCELLED) {\n return;\n }\n\n dispatch({\n type: CREATE_POOL_DIALOG_TREE_CREATE_FAILURE,\n data: error,\n });\n\n return Promise.reject(error);\n });\n };\n}\n\nconst {url: createUrl, queue} = createAdminReqTicketUrl();\n\nconst CHECK_REDINESS_TIMEOUT = 1500;\nconst MAX_POOL_REDINESS_TIMEOUT = 10 * 1000; // the value is provided by @renadeen\nconst TIMEOUT_ERROR = {\n message: (\n <div>\n The pool was not appeared in orchidea in 10 seconds.\n {createUrl ? (\n <>\n Please fill a ticket for <Link url={createUrl}>{queue}</Link>\n </>\n ) : (\n \"Please report it to the cluster's support team.\"\n )}\n .\n </div>\n ),\n};\n\nfunction waitWhilePoolIsReady({name, tree}: {name: string; tree: string}, startedAt = 0) {\n const startedTime = startedAt || Date.now();\n const diff = Date.now() - startedTime;\n if (diff > MAX_POOL_REDINESS_TIMEOUT) {\n return Promise.resolve();\n }\n\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n yt.v3\n .exists({\n path: `//sys/scheduler/orchid/scheduler/pool_trees/${tree}/pools/${name}`,\n })\n .then((res: boolean) => {\n if (res) {\n return resolve(true);\n } else {\n return resolve(waitWhilePoolIsReady({name, tree}, startedTime));\n }\n })\n .catch((error: unknown) => {\n if (error !== TIMEOUT_ERROR) {\n return resolve(waitWhilePoolIsReady({name, tree}, startedTime));\n }\n\n return reject(error);\n });\n }, CHECK_REDINESS_TIMEOUT);\n });\n}\n","import React, {useCallback, useMemo, useState} from 'react';\nimport {useDispatch, useSelector} from '../../../../store/redux-hooks';\n\nimport sortedIndexOf_ from 'lodash/sortedIndexOf';\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport Link from '../../../../components/Link/Link';\nimport {YTErrorBlock} from '../../../../components/Error/Error';\nimport {FormApi, YTDFDialog} from '../../../../components/Dialog';\nimport Button from '../../../../components/Button/Button';\n\nimport {getCurrentUserName} from '../../../../store/selectors/global';\nimport {\n getIsRoot,\n getPool,\n getTree,\n getTreesSelectItems,\n} from '../../../../store/selectors/scheduling/scheduling';\n\nimport {\n createPool,\n fetchCreatePoolDialogTreeItems,\n} from '../../../../store/actions/scheduling/create-pool-dialog';\nimport {\n getCreatePoolDialogError,\n getCreatePoolDialogFlatTreeItems,\n} from '../../../../store/selectors/scheduling/create-pool-dialog';\nimport {FIX_MY_TYPE} from '../../../../types';\nimport {SCHEDULING_CREATE_POOL_CANCELLED} from '../../../../constants/scheduling';\nimport {docsUrl, isIdmAclAvailable} from '../../../../config';\nimport UIFactory from '../../../../UIFactory';\nimport {uiSettings} from '../../../../config/ui-settings';\n\nconst allowRoot = !uiSettings.schedulingDenyRootAsParent;\n\nexport default function CreatePoolButton() {\n const dispatch = useDispatch();\n\n const isRoot = useSelector(getIsRoot);\n\n const [visible, changeVisibility] = useState(false);\n const handleShow = useCallback(() => changeVisibility(true), [changeVisibility]);\n const handleClose = useCallback(() => {\n changeVisibility(false);\n dispatch({type: SCHEDULING_CREATE_POOL_CANCELLED});\n }, [dispatch, changeVisibility]);\n\n return (\n <React.Fragment>\n <Button view=\"action\" disabled={!allowRoot && isRoot} onClick={handleShow}>\n Create pool\n </Button>\n {visible && <CreatePoolDialog onClose={handleClose} />}\n </React.Fragment>\n );\n}\n\ninterface FormValues {\n name: string;\n tree: string;\n parent: string;\n responsible: {value: string; id: string | number; title: string};\n}\n\nfunction CreatePoolDialog(props: {onClose: () => void}) {\n const dispatch = useDispatch();\n const treeStored: string = useSelector(getTree);\n const [tree, setTree] = React.useState(treeStored);\n const handleTreeChange = React.useCallback(\n (newTree: string | undefined) => {\n setTree(newTree!);\n dispatch(fetchCreatePoolDialogTreeItems(newTree!));\n },\n [dispatch],\n );\n React.useEffect(() => {\n dispatch(fetchCreatePoolDialogTreeItems(tree));\n }, [dispatch]);\n\n const error = useSelector(getCreatePoolDialogError);\n\n const login = useSelector(getCurrentUserName);\n const treeItems = useSelector(getTreesSelectItems);\n const pool = useSelector(getPool);\n\n const handleCreateConfirm = useCallback(\n (form: FormApi) => {\n const {values} = form.getState();\n return dispatch(createPool(values));\n },\n [dispatch],\n );\n const initialValues = useMemo(() => {\n // const slug = ypath.getValue(poolData, '/abc/slug');\n return {\n // abcService: slug ? {\n // key: slug,\n // value: slug,\n // id: ypath.getValue(poolData, '/abc/id'),\n // title: ypath.getValue(poolData, '/abc/name'),\n // } : undefined,\n tree,\n parent: pool,\n responsible: [\n {\n value: login,\n type: 'users',\n },\n ],\n };\n }, [tree, pool, login]);\n\n const [name, setName] = React.useState('');\n const handleNameChange = React.useCallback(\n (newName: string) => {\n setName(newName);\n },\n [setName],\n );\n\n const {sortedFlatTree} = useSelector(getCreatePoolDialogFlatTreeItems);\n\n const validateForm = React.useCallback(\n (values: FormValues): null | {name?: string} => {\n const {name} = values;\n const res: Partial<Record<keyof FormValues, string>> = {};\n if (-1 !== sortedIndexOf_(sortedFlatTree, name)) {\n res.name = 'the value must be unique';\n }\n return isEmpty_(res) ? null : res;\n },\n [sortedFlatTree],\n );\n\n const isApplyDisabled = React.useMemo(\n () => (form: {values: FormValues}) => {\n const errors = validateForm(form.values);\n return Boolean(errors);\n },\n [validateForm],\n );\n\n return (\n <YTDFDialog\n visible={true}\n onClose={props.onClose}\n headerProps={{\n title: 'Create pool',\n }}\n onAdd={handleCreateConfirm as FIX_MY_TYPE}\n initialValues={{\n ...initialValues,\n name,\n }}\n validate={validateForm as FIX_MY_TYPE}\n isApplyDisabled={isApplyDisabled}\n pristineSubmittable={true}\n fields={[\n {\n name: 'name',\n type: 'text',\n caption: 'Name',\n required: true,\n extras: {\n placeholder: 'Enter pool name...',\n },\n onChange: handleNameChange,\n touched: Boolean(name),\n },\n {\n name: 'tree',\n type: 'yt-select-single',\n caption: 'Pool tree',\n tooltip: (\n <span>\n Select pool tree where to create new pool.{' '}\n {docsUrl(\n <>\n See{' '}\n <Link url={UIFactory.docsUrls['scheduler:scheduler_and_pools']}>\n Documentations\n </Link>{' '}\n for more details.\n </>,\n )}\n </span>\n ),\n required: true,\n extras: {\n hideFilter: true,\n items: treeItems,\n placeholder: 'Select pool tree...',\n width: 'max',\n },\n onChange: (value: string | Array<string> | undefined) => {\n handleTreeChange(value as string);\n },\n },\n {\n name: 'parent',\n type: 'create-pool-parent',\n caption: 'Parent',\n tooltip:\n 'Select parent pool, defining a place in pool_tree to place a new pool.',\n required: !allowRoot,\n extras: {\n placeholder: 'Select parent...',\n },\n },\n ...(!isIdmAclAvailable()\n ? []\n : [\n {\n name: 'responsible',\n type: 'acl-subjects' as const,\n caption: 'Responsible users',\n tooltip:\n 'Choose responsible users who will manage permissions and pool settings.',\n required: true,\n extras: {\n placeholder: 'Select responsible users...',\n },\n },\n ]),\n {\n name: 'error-block',\n type: 'block',\n extras: {\n children: error && <YTErrorBlock error={error} />,\n },\n },\n ]}\n />\n );\n}\n","import React from 'react';\nimport {useHistory} from 'react-router';\nimport {useDispatch, useSelector} from '../../../store/redux-hooks';\nimport cn from 'bem-cn-lite';\nimport {Breadcrumbs, Flex, Key, Select} from '@gravity-ui/uikit';\nimport some_ from 'lodash/some';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport {RowWithName} from '../../../containers/AppNavigation/TopRowContent/SectionName';\nimport Favourites from '../../../components/Favourites/Favourites';\nimport {PoolsSuggest} from '../PoolsSuggest/PoolsSuggest';\nimport {\n getCurrentPool,\n getCurrentPoolPath,\n getPool,\n getTree,\n getTreesSelectItems,\n} from '../../../store/selectors/scheduling/scheduling';\nimport {getFavouritePools, isActivePoolInFavourites} from '../../../store/selectors/favourites';\nimport {\n changePool,\n changeTree,\n togglePoolFavourites,\n} from '../../../store/actions/scheduling/scheduling';\n\nimport {ROOT_POOL_NAME, SCHEDULING_ALLOWED_ROOT_TABS, Tab} from '../../../constants/scheduling';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport {getSchedulingBreadcrumbItems} from '../../../store/selectors/scheduling/scheduling-ts';\nimport {Page} from '../../../constants';\nimport {EditableBreadcrumbs} from '../../../components/EditableBreadcrumbs/EditableBreadcrumbs';\nimport CreatePoolButton from '../Instruments/CreatePoolDialog/CreatePoolDialog';\n\nimport {getCluster, getClusterUiConfig} from '../../../store/selectors/global';\nimport {makeRoutedURL} from '../../../store/location';\nimport UIFactory from '../../../UIFactory';\n\nimport './SchedulingTopRowContent.scss';\n\nconst block = cn('scheduling-top-row-content');\n\nfunction SchedulingTopRowContent() {\n const pool = useSelector(getCurrentPool);\n const clusterUiConfig = useSelector(getClusterUiConfig);\n\n return (\n <RowWithName page={Page.SCHEDULING} className={block()} urlParams={{pool: ''}}>\n <SchedulingFavourites />\n <SchedulingPhysicalTree />\n <Flex grow={1} shrink={1} justifyContent={'space-between'} alignItems={'center'}>\n <SchedulingBreadcrumbs />\n <span className={block('actions')}>\n {UIFactory.renderTopRowExtraControlsForPool({\n itemClassName: block('extra-control'),\n pool,\n clusterUiConfig,\n })}\n <CreatePoolButton />\n </span>\n </Flex>\n </RowWithName>\n );\n}\n\nfunction SchedulingFavourites() {\n const tree = useSelector(getTree);\n const dispatch = useDispatch();\n const pool = useSelector(getPool);\n const favouritesPools = useSelector(getFavouritePools);\n const isActivePool = useSelector(isActivePoolInFavourites);\n\n const onFavouriteClick = React.useCallback(\n ({path}: {path: string}) => {\n const [, pool, tree] = path.match(/(.+)\\[(.+)]/)!;\n dispatch(changePool(pool));\n dispatch(changeTree(tree));\n },\n [dispatch],\n );\n const onFavouriteToggle = React.useCallback(\n () => dispatch(togglePoolFavourites(pool, tree)),\n [dispatch, pool, tree],\n );\n\n const currentPool = useSelector(getPool);\n\n return (\n <Favourites\n className={block('favourites')}\n theme={'clear'}\n items={favouritesPools || []}\n isActive={isActivePool}\n onToggle={onFavouriteToggle}\n onItemClick={onFavouriteClick}\n toggleDisabled={ROOT_POOL_NAME === currentPool}\n />\n );\n}\n\nfunction CurrentPoolToClipboardButton() {\n const currentPool = useSelector(getPool);\n const currentPoolPath = useSelector(getCurrentPoolPath);\n\n return (\n <ClipboardButton\n className={block('clipboard')}\n text={currentPool}\n shiftText={currentPoolPath}\n hoverContent={'Hold SHIFT-key to copy full path'}\n />\n );\n}\n\nfunction SchedulingBreadcrumbs() {\n const bcItems = useSelector(getSchedulingBreadcrumbItems);\n const dispatch = useDispatch();\n const history = useHistory();\n const tree = useSelector(getTree);\n const cluster = useSelector(getCluster);\n const handleChangePool = (name: string | number) => {\n setTimeout(() => {\n dispatch(changePool(name.toString()));\n const pathname = calcPathname(window.location.pathname, cluster, name.toString());\n history.push(makeRoutedURL(pathname, {tree, filter: ''}));\n }, 0);\n };\n\n const items = React.useMemo(() => {\n return ['<Root>', ...bcItems.slice(1)].map((text, index) => {\n const pathname = calcPathname(window.location.pathname, cluster, text);\n return (\n <Breadcrumbs.Item\n href={makeRoutedURL(pathname, {tree, text, filter: ''})}\n key={`${JSON.stringify({text, index})}`}\n onClick={(e) => e.preventDefault()}\n >\n {text}\n </Breadcrumbs.Item>\n );\n });\n }, [bcItems, cluster, tree]);\n\n return (\n <EditableBreadcrumbs\n view={'top-row'}\n onAction={(key: Key) => {\n const {text: keyText} = JSON.parse(key as string);\n handleChangePool(keyText);\n }}\n className={block('breadcrumbs')}\n showRoot\n afterEditorContent={<CurrentPoolToClipboardButton />}\n renderEditor={(props) => (\n <PoolsSuggest\n autoFocus\n onCancelEdit={props.onBlur}\n className={block('pool-suggest')}\n />\n )}\n >\n {items}\n </EditableBreadcrumbs>\n );\n}\n\nfunction calcPathname(pathname: string, cluster: string, pool?: string) {\n // it is not allowed to stay on ACL and Monitor tabs for <Root> link\n if (pool === '<Root>') {\n const isAllowedTab = some_(SCHEDULING_ALLOWED_ROOT_TABS, (_v, tab) =>\n pathname.endsWith('/' + tab),\n );\n return isAllowedTab ? pathname : `/${cluster}/${Page.SCHEDULING}/${Tab.OVERVIEW}`;\n }\n\n return pathname;\n}\n\nfunction SchedulingPhysicalTree() {\n const tree = useSelector(getTree);\n const treeItems = useSelector(getTreesSelectItems);\n const dispatch = useDispatch();\n\n const onChange = React.useCallback((tree: string) => dispatch(changeTree(tree)), [dispatch]);\n\n return (\n <div className={block('tree')}>\n <Select\n value={[tree]}\n filterable={treeItems?.length >= 5}\n options={treeItems}\n onUpdate={(vals) => onChange(vals[0])}\n className={block('path-tree')}\n placeholder=\"Select tree...\"\n width=\"max\"\n />\n </div>\n );\n}\n\nconst SchedulingTopRowContentMemo = React.memo(SchedulingTopRowContent);\n\nexport default function SchedulingTopRowContentWithError() {\n return (\n <ErrorBoundary compact>\n <SchedulingTopRowContentMemo />\n </ErrorBoundary>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {TextInput, TextInputProps} from '@gravity-ui/uikit';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\n\nimport hammer from '../../common/hammer';\n\nimport {parseBytes} from '../../utils/parse/parse-bytes';\nimport {KeyCode} from '../../constants';\nimport './NumberInput.scss';\n\nconst block = cn('yt-number-input');\n\nexport function parseValue(rawValue: string, format: NumberInputProps['format']) {\n if (rawValue === '') {\n return undefined;\n }\n const skipSpaces = rawValue.replace(/\\s/g, '');\n return format === 'Bytes' ? parseBytes(skipSpaces) : Number(skipSpaces);\n}\n\nexport function formatValue(\n value: NumberInputProps['value'],\n format?: NumberInputProps['format'],\n settings?: object,\n) {\n if (value === undefined) {\n return '';\n }\n\n const res =\n format === 'Bytes'\n ? hammer.format['Bytes'](value, settings)\n : hammer.format['Number'](value, settings);\n return res === hammer.format.NO_VALUE ? '' : res;\n}\n\nfunction toRawValue(value: NumberInputProps['value']) {\n return value === undefined ? '' : value;\n}\n\nexport interface NumberInputWithErrorProps\n extends Omit<TextInputProps, 'value' | 'onChange' | 'theme' | 'error' | 'defaultValue'> {\n className?: string;\n\n format?: 'Number' | 'Bytes'; // 'Number' by default\n\n formatFn?: (v: NumberInputProps['value']) => string;\n parseFn?: (v: string) => NumberInputWithErrorProps['value'];\n\n decimalPlaces?: number;\n value?: {\n value: number | undefined;\n error?: string;\n };\n\n showDefaultValue?: boolean;\n defaultValue?: number;\n defaultValueClassName?: string;\n\n onChange: (v: NumberInputWithErrorProps['value']) => void;\n onEnterKeyDown?: () => void;\n\n validator?: (v?: number) => string | undefined;\n min?: number;\n max?: number;\n integerOnly?: boolean;\n\n showHint?: boolean;\n\n hidePrettyValue?: boolean;\n preciseInitialRawValue?: boolean;\n\n bottomLineVisibility?: 'visible' | 'hidden' | 'focused';\n\n disabled?: boolean;\n}\n\ninterface State {\n parsedValue?: number;\n parsedError?: string;\n rawValue?: string;\n formattedValue?: string;\n focused?: boolean;\n}\n\nexport class NumberInputWithError extends React.Component<NumberInputWithErrorProps, State> {\n static defaultProps = {\n size: 'm',\n view: 'normal',\n hasClear: true,\n bottomLineVisibility: 'visible',\n };\n\n static getDerivedStateFromProps(\n props: NumberInputWithErrorProps,\n state: State,\n ): Partial<State> | null {\n const {value, format, preciseInitialRawValue, decimalPlaces, formatFn} = props;\n if (state.rawValue === undefined) {\n const formatted = formatFn\n ? formatFn(value?.value)\n : formatValue(value?.value, format, {\n digits: decimalPlaces,\n });\n return {\n parsedValue: value?.value,\n parsedError: NumberInputWithError.errorFromValue(value, props),\n rawValue: preciseInitialRawValue ? toRawValue(value?.value) : formatted,\n formattedValue: formatted,\n };\n }\n\n return null;\n }\n\n static errorFromValue(v: NumberInputWithErrorProps['value'], props: NumberInputWithErrorProps) {\n const {validator = () => undefined, min, max, integerOnly} = props;\n const {value, error} = v || {};\n\n if (error) {\n return error;\n }\n\n if (value === undefined || value === null) {\n return undefined;\n }\n\n try {\n if (isNaN(value)) {\n return 'wrong format';\n }\n\n const error = validator(value);\n if (error) {\n return error;\n }\n } catch (error) {\n return String(error);\n }\n\n if (integerOnly && value % 1 !== 0) {\n return `The value must be an integer`;\n }\n\n if (min !== undefined && value < min) {\n return `The value must be \\u2265 ${min}`;\n }\n\n if (max !== undefined && value > max) {\n return `The value must be \\u2264 ${max}`;\n }\n\n return undefined;\n }\n\n state: State = {parsedValue: NaN};\n\n // eslint-disable-next-line react/sort-comp\n parseValue(rawValue: string): NumberInputWithErrorProps['value'] {\n if (this.props.parseFn) {\n return this.props.parseFn(rawValue);\n }\n return {value: parseValue(rawValue, this.props.format)};\n }\n\n format(value: NumberInputProps['value']) {\n const {format, decimalPlaces, formatFn} = this.props;\n if (formatFn) {\n return formatFn(value);\n }\n return formatValue(value, format, {digits: decimalPlaces});\n }\n\n onChange = (rawValue: string) => {\n const parsedValue = this.parseValue(rawValue);\n const error = NumberInputWithError.errorFromValue(parsedValue, this.props);\n const formattedValue = this.format(parsedValue?.value);\n this.setState({\n parsedValue: parsedValue?.value,\n parsedError: error,\n rawValue,\n formattedValue,\n });\n\n const {onChange} = this.props;\n onChange({value: parsedValue?.value, error});\n };\n\n onBlur = () => {\n this.setState({focused: false});\n };\n\n onFocus = () => {\n this.setState({focused: true});\n };\n\n getRestProps() {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {value, onChange, min, max, validator, format, defaultValue, ...rest} = this.props;\n return rest;\n }\n\n onKeyDown = (e: React.KeyboardEvent) => {\n if (e.keyCode === KeyCode.ENTER && this.props.onEnterKeyDown) {\n this.props.onEnterKeyDown();\n }\n };\n\n renderMinMaxHint() {\n const {min, max, showHint, size} = this.props;\n const showMin = !isNaN(min!);\n const showMax = !isNaN(max!);\n if (!showHint || (!showMin && !showMax)) {\n return null;\n }\n return (\n <div className={block('hint', {size})}>\n {showMin && (\n <Tooltip content={String(min)} placement={'bottom'}>\n min: <b>{this.format(min)}</b>\n </Tooltip>\n )}\n {showMin && <> &nbsp; </>}\n {showMax && (\n <Tooltip content={String(max)} placement={'bottom'}>\n max: <b>{this.format(max)}</b>\n </Tooltip>\n )}\n </div>\n );\n }\n\n renderPrettyValue() {\n const {size, hidePrettyValue} = this.props;\n const {formattedValue} = this.state;\n\n if (hidePrettyValue) {\n return null;\n }\n\n return <div className={block('pretty-value', {size})}>{formattedValue}&nbsp;</div>;\n }\n\n renderDefaultValue() {\n const {defaultValue, defaultValueClassName} = this.props;\n\n return (\n <TextInput\n disabled\n className={defaultValueClassName}\n value={this.format(defaultValue)}\n pin={'clear-round'}\n />\n );\n }\n\n isBottomLineVisible() {\n const {bottomLineVisibility} = this.props;\n const {focused} = this.state;\n\n return (\n bottomLineVisibility === 'visible' || (focused && bottomLineVisibility === 'focused')\n );\n }\n\n render() {\n const {\n value: propsValue,\n className,\n showHint,\n hidePrettyValue,\n showDefaultValue,\n } = this.props;\n const {parsedError, rawValue, formattedValue, focused} = this.state;\n const rest = this.getRestProps();\n const {size, view, hasClear} = rest;\n\n const {error} = propsValue ?? {};\n\n const err = error || parsedError;\n\n const text = focused ? rawValue : formattedValue;\n\n return (\n <div className={block(null, className)}>\n <div className={block('top')}>\n <TextInput\n {...rest}\n error={err as any}\n autoComplete={false}\n onUpdate={this.onChange}\n onKeyDown={this.onKeyDown}\n hasClear={hasClear}\n value={text}\n size={size}\n view={view}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n pin={showDefaultValue ? 'round-brick' : undefined}\n />\n {showDefaultValue && this.renderDefaultValue()}\n </div>\n {!err && this.isBottomLineVisible() && (\n <React.Fragment>\n {showHint && (!focused || hidePrettyValue)\n ? this.renderMinMaxHint()\n : this.renderPrettyValue()}\n </React.Fragment>\n )}\n </div>\n );\n }\n}\n\nexport interface NumberInputProps extends Omit<NumberInputWithErrorProps, 'value' | 'onChange'> {\n value: number | undefined;\n onChange: (value: NumberInputProps['value']) => void;\n\n error?: string;\n}\n\nexport default class NumberInput extends React.Component<NumberInputProps> {\n static format(\n value: NumberInputProps['value'],\n format?: NumberInputWithErrorProps['format'],\n settings?: object,\n ) {\n return formatValue(value, format, settings);\n }\n\n render() {\n const {\n value,\n error,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onChange,\n ...rest\n } = this.props;\n\n return <NumberInputWithError {...rest} onChange={this.onChange} value={{value, error}} />;\n }\n\n onChange: NumberInputWithErrorProps['onChange'] = (v) => {\n this.props.onChange(v?.value);\n };\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport type {FORM_ERROR as FormErrorType} from './index';\n\nimport {FIX_MY_TYPE, YTError} from '../../types';\nimport {YTErrorBlock} from '../../components/Block/Block';\n\nimport compact_ from 'lodash/compact';\nimport map_ from 'lodash/map';\n\nconst block = cn('yt-dialog-error');\n\nexport function DialogError(props: FIX_MY_TYPE) {\n return <YTErrorBlock {...props} className={block()} />;\n}\n\nexport function makeErrorFields(errors: Array<YTError | Error | undefined>) {\n return compact_(\n map_(errors, (error, index) => {\n return error\n ? {\n name: `error_${index}`,\n type: 'block' as const,\n extras: {\n children: <DialogError error={error} />,\n },\n }\n : undefined;\n }),\n );\n}\n\nconst FORM_ERROR: typeof FormErrorType = 'FINAL_FORM/form-error';\n\nexport function makeFormSubmitError(error: YTError) {\n return {\n validationErrors: {\n [FORM_ERROR]: <DialogError error={error} />,\n },\n };\n}\n","import React from 'react';\nimport withLazyLoading from '../../hocs/withLazyLoading';\nimport {withDelayedMount} from '../../hocs/withDelayedMount';\n\nimport type {\n registerDialogControl as RegisterDialogControlFn,\n registerDialogTabControl as RegisterDialogTabControlFn,\n YTDialogType,\n} from './Dialog';\n\nexport type * from './Dialog';\nexport * from './DialogError';\nexport * from './controls/RoleListControl/utils';\n\nexport function importYTDFDialog() {\n return import(/* webpackChunkName: \"yt-df-dialog\" */ './Dialog');\n}\n\nexport const YTDFDialog = withDelayedMount(\n withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).YTDialog};\n }),\n '',\n ),\n) as YTDialogType;\n\nexport function useControlRegistration(\n fn: (params: {\n registerDialogControl: typeof RegisterDialogControlFn;\n registerDialogTabControl: typeof RegisterDialogTabControlFn;\n }) => void,\n) {\n importYTDFDialog().then(({registerDialogControl, registerDialogTabControl}) => {\n fn({registerDialogControl, registerDialogTabControl});\n });\n}\n\nexport type {RoleListControlProps} from './controls/RoleListControl/RoleListControl';\nexport const RoleListControl = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).RoleListControl};\n }),\n '',\n);\n\nexport const EditableList = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).EditableList};\n }),\n '',\n);\n\nexport const TabFieldVertical = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).TabFieldVertical};\n }),\n '',\n);\n","import React from 'react';\n\n/**\n * The hoc allows to delay mounting until `props.visible == true`.\n * The hoc might be useful to wrap components wrapped by React.lazy\n * @param Component\n * @returns\n */\nexport function withDelayedMount<P extends {visible?: boolean}>(Component: React.ComponentType<P>) {\n return function MountOnFirstVisible(props: P) {\n const [mounted, setMounted] = React.useState(false);\n React.useEffect(() => {\n if (!mounted && props.visible) {\n setMounted(true);\n }\n }, [props.visible, mounted]);\n return !mounted ? null : <Component {...props} />;\n };\n}\n","import findIndex_ from 'lodash/findIndex';\n\nexport function parseBytes(input: string): number {\n const names = ['B', 'K', 'M', 'G', 'T', 'P', 'E'];\n const formatRegex = new RegExp('^((\\\\d*[.])?\\\\d+)( *[' + names.join('') + '])(iB)?(/s)?$', 'i');\n\n if (formatRegex.test(input)) {\n const match = input.match(formatRegex)!;\n const value = match[1];\n const dimension = match[3].trim();\n const dimensionIndex = findIndex_(\n names,\n (name) => name.toUpperCase() === dimension.toUpperCase(),\n );\n\n return Math.floor(Number(value) * Math.pow(2, 10 * dimensionIndex));\n } else {\n return Math.floor(Number(input));\n }\n}\n","import cloneDeep_ from 'lodash/cloneDeep';\nimport forEach_ from 'lodash/forEach';\nimport isEqual_ from 'lodash/isEqual';\nimport isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\nimport partition_ from 'lodash/partition';\n\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {SELECT_EMPTY_VALUE} from '../constants/navigation/modals/create-table';\nimport {SelectWithSubItemsProps} from '../components/Dialog/controls/SelectWithSubItems/SelectWithSubItems';\nimport {wrapBatchPromise} from './utils';\nimport {YTApiId, ytApiV3Id} from '../rum/rum-wrap-api';\nimport {BatchSubRequest, GetParams} from '../../shared/yt-types';\nimport {ValueOf} from '../../@types/types';\n\nexport interface WithAttrs<T> {\n $attributes: T;\n}\n\nexport const compressionExtras: Pick<SelectWithSubItemsProps, 'labels' | 'items' | 'subItemsMap'> =\n {\n labels: ['codec:', 'level:'],\n items: [\n ...[\n 'none',\n 'snappy',\n 'zlib_',\n 'lz4',\n 'lz4_high_compression',\n 'quick_lz',\n 'zstd_',\n 'brotli_',\n 'lzma_',\n 'bzip2_',\n ].map((value) => ({value, content: value})),\n ],\n subItemsMap: {\n zlib_: genComperessionLevelItems(1, 9),\n zstd_: genComperessionLevelItems(1, 21),\n brotli_: genComperessionLevelItems(1, 11),\n lzma_: genComperessionLevelItems(0, 9),\n bzip2_: genComperessionLevelItems(1, 9),\n },\n };\n\nfunction genComperessionLevelItems(from: number, to: number) {\n const res = [];\n for (let i = from; i <= to; ++i) {\n res.push({value: String(i), content: String(i)});\n }\n return res;\n}\n\nexport function compressionCodecValueFromString(value: string) {\n if (!value) {\n return [SELECT_EMPTY_VALUE];\n }\n\n for (const k in compressionExtras.subItemsMap) {\n if (value.startsWith(k)) {\n return [k, value.substr(k.length)];\n }\n }\n return [value];\n}\n\nexport function compressionCodecValueToString(value: Array<string>) {\n if (isEqual_(value, [SELECT_EMPTY_VALUE])) {\n return '';\n }\n return value?.join('');\n}\n\ntype StorageOptionsType = 'replication' | 'erasure';\n\nexport const StorageOptions = {\n REPLICATION: 'replication' as StorageOptionsType,\n ERASURE: 'erasure' as StorageOptionsType,\n};\n\nexport const ERASURE_CODECS = [\n {value: 'lrc_12_2_2', title: 'lrc_12_2_2 (recommended)'},\n {value: 'reed_solomon_6_3', title: 'reed_solomon_6_3'},\n];\n\nexport function storageOptionFromErasureCodec(codec: string) {\n return !codec || codec === 'none' ? StorageOptions.REPLICATION : StorageOptions.ERASURE;\n}\n\nexport function normalizeErasureCodec(erasureCodec: string) {\n return !erasureCodec || erasureCodec === 'none' ? ERASURE_CODECS[0].value : erasureCodec;\n}\n\nexport function erasureCodecFromStorageOption(type?: StorageOptionsType, erasureCodec?: string) {\n if (type === StorageOptions.REPLICATION) {\n return 'none';\n }\n return erasureCodec || ERASURE_CODECS[0].value;\n}\n\nexport type InMemoryModeType = ValueOf<typeof InMemoryMode>;\n\nexport const InMemoryMode = {\n NONE: 'none',\n COMPRESSED: 'compressed',\n UNCOMPRESSED: 'uncompressed',\n} as const;\n\nexport function makeUiMarker(ui_marker: string) {\n return {ui_marker};\n}\n\nexport function prepareSetCommandForBatch(path: string, value: any, additionalParameters?: object) {\n if (value === undefined || value === null) {\n return {\n command: 'remove' as const,\n parameters: {\n path,\n ...additionalParameters,\n },\n };\n }\n\n return {\n command: 'set' as const,\n parameters: {\n path,\n ...additionalParameters,\n force: true,\n },\n input: value,\n };\n}\n\nexport const CypressNodeTypes = {\n REPLICATED_TABLE: 'replicated_table',\n REPLICATION_LOG_TABLE: 'replication_log_table',\n CHAOS_REPLICATED_TABLE: 'chaos_replicated_table',\n MAP_NODE: 'map_node',\n TABLE: 'table',\n // TODO: add more types\n};\n\nexport async function createParentsBeforeSet(nodePath: string, attributesToSet: Array<string>) {\n if (!attributesToSet.length) {\n return Promise.resolve();\n }\n\n const parentPaths: Record<string, boolean> = {};\n forEach_(attributesToSet, (attr) => {\n const parents = attr.split('/');\n for (let i = 1; i < parents.length; ++i) {\n const key = parents.slice(0, i).join('/');\n if (key) {\n parentPaths[key] = true;\n }\n }\n });\n const toCreate = Object.keys(parentPaths).sort();\n\n for (const attr of toCreate) {\n const path = nodePath + '/@' + attr;\n await yt.v3.exists({path}).then((isCreated: boolean) => {\n if (!isCreated) {\n return yt.v3.set({path}, {});\n }\n });\n }\n}\n\nexport function updateNodeAttributes(\n nodePath: string,\n changes: Array<{attr: string; value: any}>,\n): Promise<unknown> {\n if (isEmpty_(changes)) {\n return Promise.resolve();\n }\n\n const requests: Array<BatchSubRequest> = [];\n\n const oneLevelDiffsParents: Array<string> = [];\n const oneLevelDiffs: Record<string, Record<string, unknown>> = {};\n forEach_(changes, ({attr, value}) => {\n const attrPath = attr.split('/');\n if (attrPath.length === 1) {\n const path = nodePath + '/@' + attrPath.join('/');\n requests.push(prepareSetCommandForBatch(path, value));\n } else {\n const [last] = attrPath.splice(attrPath.length - 1, 1);\n const parentPath = attrPath.join('/');\n oneLevelDiffsParents.push(parentPath);\n const path = nodePath + '/@' + parentPath;\n const diff = (oneLevelDiffs[path] = oneLevelDiffs[path] || {});\n diff[last] = value;\n }\n });\n\n return Promise.all([\n ...(requests.length\n ? [\n wrapBatchPromise(\n ytApiV3Id.executeBatch(YTApiId.updateNodeAttributes, {requests}),\n 'Failed to update node attributes',\n ),\n ]\n : []),\n createParentsBeforeSet(nodePath, oneLevelDiffsParents).then(() => {\n if (isEmpty_(oneLevelDiffs)) {\n return Promise.resolve([]);\n }\n\n const promises: Array<Promise<unknown>> = map_(oneLevelDiffs, async (diff, path) => {\n const p = updateAttributes(path, diff);\n await p;\n return p;\n });\n\n return Promise.all(promises);\n }),\n ]);\n}\n\nfunction updateAttributes(path: string, oneLevelDiff: Record<'string', unknown>) {\n if (isEmpty_(oneLevelDiff)) {\n return Promise.resolve();\n }\n\n const modifyGuarantee = (data: any = {}) => {\n const res = cloneDeep_(data);\n forEach_(oneLevelDiff, (value, key) => {\n if (value === undefined) {\n delete res[key];\n } else {\n res[key] = value;\n }\n });\n if (isEqual_(data, res)) {\n return Promise.resolve();\n }\n return yt.v3.set({path}, res);\n };\n\n return yt.v3.exists({path}).then((isExists: boolean) => {\n if (isExists) {\n return ytApiV3Id.get(YTApiId.updateAttributes, {path}).then(modifyGuarantee);\n }\n return modifyGuarantee({});\n });\n}\n\nexport function makeBatchSubRequest<T extends BatchSubRequest>(\n command: T['command'],\n parameters: T['parameters'],\n setup?: T['setup'],\n) {\n return {\n command,\n parameters,\n setup,\n } as BatchSubRequest;\n}\n\nexport function prepareAttributes(attributes: readonly string[]): GetParams['attributes'] {\n const [keys, paths] = partition_(attributes, (k) => -1 === k.indexOf('/'));\n\n if (!paths.length) {\n return keys;\n }\n\n return {keys, paths};\n}\n","import React from 'react';\nimport block from 'bem-cn-lite';\nimport {useRouteMatch} from 'react-router';\n\nimport hammer from '../../common/hammer';\n\nconst b = block('elements-message');\n\ninterface MatchParams {\n tab: string;\n}\n\nexport default function Placeholder() {\n const match = useRouteMatch<MatchParams>();\n const {tab} = match.params;\n\n return (\n <div className={b({theme: 'warning'})}>\n <p className={b('paragraph')}>\n {tab\n ? `Viewer for tab \"${hammer.format['ReadableField'](tab)}\" is not implemented.`\n : 'Viewer for this tab is not implemented.'}\n </p>\n </div>\n );\n}\n","const SvgChevronRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M5.47 13.03a.75.75 0 0 1 0-1.06L9.44 8 5.47 4.03a.75.75 0 0 1 1.06-1.06l4.5 4.5a.75.75 0 0 1 0 1.06l-4.5 4.5a.75.75 0 0 1-1.06 0\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronRight;","import {RumMeasureStartProps, useRumMeasureStart} from './RumUiContext';\nimport {useSelector} from 'react-redux';\nimport {getCluster} from '../store/selectors/global';\n\nexport function useAppRumMeasureStart<T extends Array<any>>(params: RumMeasureStartProps<T>) {\n const cluster = useSelector(getCluster);\n\n useRumMeasureStart({\n ...params,\n subPage: params.subPage || `ui.${cluster}`,\n });\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../common/hammer/format';\nimport Icon from '../../components/Icon/Icon';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\nimport {OrderType, nextSortOrderValue} from '../../utils/sort-helpers';\n\nimport './SortIcon.scss';\n\nconst block = cn('sort-icon');\n\nconst ICON_BY_TYPE = {\n ['']: 'sort',\n asc: 'sort-up',\n desc: 'sort-down',\n 'asc-undefined': 'arrow-to-bottom',\n 'desc-undefined': 'arrow-from-bottom',\n 'undefined-asc': 'arrow-from-top',\n 'undefined-desc': 'arrow-to-top',\n} as const;\n\ninterface Props {\n className?: string;\n label?: string;\n onChange?: (nextOrder: OrderType) => void;\n order?: OrderType;\n hidden?: boolean;\n allowUnordered?: boolean;\n withUndefined?: boolean;\n}\n\nexport default class SortIcon extends React.Component<Props> {\n onClick = () => {\n const {order, onChange, allowUnordered, withUndefined} = this.props;\n if (!onChange) {\n return;\n }\n\n const nextOrder = nextSortOrderValue(order, allowUnordered, withUndefined);\n onChange(nextOrder);\n };\n\n render() {\n const {className, label, order, hidden} = this.props;\n const icon = ICON_BY_TYPE[order || ''];\n\n return (\n <span className={block({hidden}, className)} onClick={this.onClick}>\n {label && <span className={block('label')}>{label}</span>}\n <Tooltip\n className={block('icon')}\n content={order ? format.ReadableField(order) : 'Unordered'}\n >\n <Icon awesome={icon} face=\"solid\" />\n </Tooltip>\n </span>\n );\n }\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport {Box, Breadcrumbs, BreadcrumbsProps} from '@gravity-ui/uikit';\n\nimport {EditableAsText, EditableAsTextProps} from '../EditableAsText/EditableAsText';\n\nimport './EditableBreadcrumbs.scss';\n\nconst block = cn('yt-editable-breadcrumbs');\n\ninterface Props extends BreadcrumbsProps, Omit<EditableAsTextProps, 'onChange'> {\n view?: 'top-row';\n onChange?: (value?: string) => void;\n children: React.ReactNode;\n beforeEditorContent?: React.ReactNode;\n afterEditorContent?: React.ReactNode;\n}\n\nexport function EditableBreadcrumbs(props: Props) {\n const {\n className,\n text,\n disableEdit,\n withControls,\n cancelOnClose,\n openOnClick,\n size,\n saveButtonView,\n cancelButtonView,\n renderEditor,\n onModeChange,\n children,\n beforeEditorContent,\n afterEditorContent,\n view,\n ...breadcrumbsProps\n } = props;\n\n return (\n <EditableAsText\n className={block(null, className)}\n text={text}\n onChange={() => {}}\n disableEdit={disableEdit}\n withControls={withControls}\n cancelOnClose={cancelOnClose}\n openOnClick={openOnClick}\n size={size}\n saveButtonView={saveButtonView}\n cancelButtonView={cancelButtonView}\n renderEditor={renderEditor}\n onModeChange={onModeChange}\n renderContent={(contentProps) => (\n <Box\n className={block(\n {view: view},\n `${block('breadcrumbs-container')} ${contentProps.className}`,\n )}\n >\n <Breadcrumbs\n {...breadcrumbsProps}\n showRoot\n endContent={\n <>\n {beforeEditorContent ? (\n <div style={{marginLeft: '8px'}}>{beforeEditorContent}</div>\n ) : null}\n {contentProps.renderEditButton()}\n {afterEditorContent ? (\n <div style={{marginRight: '8px'}}>{afterEditorContent}</div>\n ) : null}\n </>\n }\n >\n {children}\n </Breadcrumbs>\n </Box>\n )}\n >\n <></>\n </EditableAsText>\n );\n}\n","import {addI18Keysets} from '../../../../../i18n/index';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:dialog-role-list', {en, ru});\n","import cn from 'bem-cn-lite';\n\nimport filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\n\nimport type {EditableManyListsItemType} from '../../../../components/Dialog';\nimport type {ResponsibleType, RoleConverted, Subject} from '../../../../utils/acl/acl-types';\nimport type {PreparedRole} from '../../../../utils/acl';\nimport {RoleListControlProps} from './RoleListControl';\n\nimport i18n from './i18n';\n\nexport const block = cn('role-list-control');\n\nexport function prepareRoleListValue(roles: Array<PreparedRole>, otherMembers: Array<string> = []) {\n const current: typeof roles = [];\n const toAdd: typeof roles = [];\n const toRemove: typeof roles = [];\n const unrecognized: typeof roles = [];\n forEach_(roles, (item) => {\n const {isUnrecognized, isRequested, isApproved, isDepriving} = item;\n if (isUnrecognized) {\n unrecognized.push(item);\n } else if (isDepriving) {\n toRemove.push(item);\n } else if (isApproved || isRequested) {\n toAdd.push(item);\n } else {\n current.push(item);\n }\n });\n\n const currentArr = current.map((item) => prepareItemOfCurrent(item));\n const otherArr = otherMembers.map((item) => ({\n title: item,\n data: {},\n frozen: true,\n }));\n\n return {\n newItems: [],\n current: {title: i18n('title_current'), data: currentArr.concat(otherArr)},\n toAdd: {\n title: i18n('title_will-be-added'),\n itemClassName: block('item-to-add'),\n data: toAdd.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n toRemove: {\n title: i18n('title_will-be-removed'),\n itemClassName: block('item-to-remove'),\n data: toRemove.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n unrecognized: {\n title: i18n('title_unrecognized'),\n itemClassName: block('item-unrecognized'),\n data: unrecognized.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n };\n}\n\nfunction prepareItemOfCurrent(role: PreparedRole, extraProps: any = {}) {\n return {\n title: role.text || role.value,\n data: role,\n ...extraProps,\n };\n}\n\nexport function roleListValueToSubjectList(\n value: RoleListControlProps['value'],\n): Array<ResponsibleType> {\n const {current, newItems, toAdd} = value;\n return [\n ...newItems,\n ...manyListDataItemToSubjectList(current),\n ...manyListDataItemToSubjectList(toAdd),\n ];\n}\n\nfunction manyListDataItemToSubjectList(\n manyListDataItem: EditableManyListsItemType<RoleConverted>,\n): Array<ResponsibleType> {\n const {data} = manyListDataItem || {};\n return map_(\n filter_(data, ({removed}) => !removed),\n ({data}) => {\n const {type, value} = data || {};\n return {type: type!, value: value!};\n },\n );\n}\n\nexport function extractChangedSubjects(value: {\n current: EditableManyListsItemType<RoleConverted>;\n newItems: Array<ResponsibleType>;\n}): {\n added: Subject[];\n removed: Subject[];\n} {\n const {current, newItems} = value;\n const added = newItems || [];\n const removed = ((current && current.data) || []).filter(({removed}) => removed);\n return {\n added: added.map(({type, value}) => {\n return type === 'users' ? {user: value} : {group: value};\n }),\n removed: removed.map(({data}) => {\n const {value, type} = data || {};\n return type === 'users' ? {user: value!} : {group: value!};\n }),\n };\n}\n","import React, {useCallback, useEffect} from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {TextInput} from '@gravity-ui/uikit';\nimport Icon from '../Icon/Icon';\n\nimport './EditableAsText.scss';\nimport Button, {ButtonProps} from '../Button/Button';\nconst block = cn('editable-as-text');\n\nexport interface EditableAsTextProps {\n className?: string;\n editorClassName?: string;\n\n text?: string;\n children: React.ReactNode;\n onChange: (v?: string) => void;\n disableEdit?: boolean;\n withControls?: boolean;\n cancelOnClose?: boolean;\n openOnClick?: boolean;\n size?: 's' | 'm' | 'l' | 'xl';\n saveButtonView?: ButtonProps['view'];\n cancelButtonView?: ButtonProps['view'];\n\n renderEditor?: (props: {\n value?: string;\n onBlur: () => void;\n onChange: (value?: string) => void;\n className?: string;\n onApply: (value?: string) => void;\n }) => React.ReactNode;\n renderContent?: (props: {\n renderEditButton: () => React.ReactNode;\n className?: string;\n }) => React.ReactNode;\n onModeChange?: (isEdit: boolean) => void;\n}\n\nexport function EditableAsText(props: EditableAsTextProps) {\n const {\n children,\n onChange,\n text,\n className,\n withControls,\n size,\n disableEdit,\n cancelOnClose,\n renderEditor,\n renderContent,\n onModeChange,\n saveButtonView = 'normal',\n cancelButtonView = 'normal',\n } = props;\n const [editMode, setEditMode] = React.useState(false);\n const [input, setInput] = React.useState(text || '');\n\n useEffect(() => {\n setInput(text || '');\n }, [text]);\n\n const handleChangeMode = useCallback(\n (isEdit: boolean) => {\n if (onModeChange) onModeChange(isEdit);\n setEditMode(isEdit);\n },\n [onModeChange],\n );\n\n const closeEditMode = React.useCallback(() => {\n handleChangeMode(false);\n if (cancelOnClose) setInput(text || '');\n }, [cancelOnClose, handleChangeMode, text]);\n\n const startTextEdit = useCallback(() => {\n handleChangeMode(true);\n }, [handleChangeMode]);\n\n const handleChange = React.useCallback((val?: string) => setInput(val ?? ''), [setInput]);\n\n const applyValue = useCallback(() => {\n handleChangeMode(false);\n onChange(input);\n }, [onChange, handleChangeMode, input]);\n\n const closeAndResetValue = useCallback(() => {\n handleChangeMode(false);\n setInput(text || '');\n }, [handleChangeMode, text]);\n\n const onApply = useCallback(\n (value?: string) => {\n handleChangeMode(false);\n onChange(value);\n },\n [handleChangeMode, onChange],\n );\n\n const handleKeyDown = React.useCallback(\n (evt: React.KeyboardEvent<HTMLElement>) => {\n if (evt.key === 'Enter') {\n applyValue();\n }\n if (evt.key === 'Escape') {\n closeAndResetValue();\n }\n },\n [applyValue, closeAndResetValue],\n );\n\n const controlSize = size ? size : 'm';\n\n return (\n <>\n {editMode ? (\n <div\n className={block(\n {edit: !disableEdit, controls: Boolean(withControls)},\n className,\n )}\n >\n {renderEditor ? (\n renderEditor({\n value: input,\n onChange: handleChange,\n className: block('control'),\n onBlur: closeEditMode,\n onApply,\n })\n ) : (\n <TextInput\n className={block('control')}\n autoFocus\n size={controlSize}\n value={input}\n onUpdate={handleChange}\n onKeyDown={handleKeyDown}\n onBlur={closeEditMode}\n />\n )}\n {withControls && (\n <>\n <Button\n className={block('control')}\n view={saveButtonView}\n extraProps={{onMouseDown: applyValue}}\n size={controlSize}\n >\n <Icon awesome={'check'} size={controlSize} />\n </Button>\n <Button\n className={block('control')}\n view={cancelButtonView}\n extraProps={{onMouseDown: closeAndResetValue}}\n size={controlSize}\n >\n <Icon awesome={'times'} size={controlSize} />\n </Button>\n </>\n )}\n </div>\n ) : renderContent ? (\n renderContent({\n renderEditButton: () => (\n <>\n {!disableEdit && (\n <Button\n className={block('control', {type: 'edit'})}\n view=\"outlined\"\n onClick={startTextEdit}\n size={controlSize}\n qa=\"edit-text-button\"\n >\n <Icon awesome={'pencil'} size={controlSize} />\n </Button>\n )}\n </>\n ),\n className: block(null, className),\n })\n ) : (\n <div className={block(null, className)}>\n {children}\n {!disableEdit && (\n <Button\n className={block('control', {type: 'edit'})}\n view=\"outlined\"\n onClick={startTextEdit}\n size={controlSize}\n qa=\"edit-text-button\"\n >\n <Icon awesome={'pencil'} size={controlSize} />\n </Button>\n )}\n </div>\n )}\n </>\n );\n}\n","'use client';\n\nimport * as React from 'react';\n\nimport {useCheckbox} from '../../hooks/private';\nimport {ControlLabel} from '../ControlLabel';\nimport type {ControlLabelSize} from '../ControlLabel';\nimport type {ControlProps, DOMProps, QAProps} from '../types';\nimport {block} from '../utils/cn';\n\nimport './Switch.scss';\n\nconst b = block('switch');\n\nexport type SwitchSize = ControlLabelSize;\n\nexport interface SwitchProps extends ControlProps, DOMProps, QAProps {\n size?: SwitchSize;\n content?: React.ReactNode;\n children?: React.ReactNode;\n title?: string;\n}\n\nexport const Switch = React.forwardRef<HTMLLabelElement, SwitchProps>(function Switch(props, ref) {\n const {size = 'm', disabled = false, content, children, title, style, className, qa} = props;\n const {checked, inputProps} = useCheckbox({\n ...props,\n controlProps: {...props.controlProps, role: 'switch'},\n });\n const text = content || children;\n\n const control = (\n <span className={b('indicator')}>\n <input {...inputProps} className={b('control')} />\n <span className={b('outline')} />\n <span className={b('slider')} />\n </span>\n );\n\n return (\n <ControlLabel\n ref={ref}\n title={title}\n style={style}\n size={size}\n disabled={disabled}\n className={b(\n {\n size,\n disabled,\n checked,\n },\n className,\n )}\n labelClassName={b('text')}\n qa={qa}\n control={control}\n >\n {text}\n </ControlLabel>\n );\n});\n","import React from 'react';\nimport moment from 'moment';\nimport cn from 'bem-cn-lite';\n\nimport {\n NumberInputWithError,\n NumberInputWithErrorProps,\n} from '../../components/NumberInput/NumberInput';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\nimport MetaTable from '../../components/MetaTable/MetaTable';\nimport Icon from '../../components/Icon/Icon';\n\nimport './TimeDuration.scss';\n\nconst block = cn('yt-time-duration');\n\nexport type TimeDurationProps = {\n className?: string;\n\n value: NumberInputWithErrorProps['value'];\n error?: string;\n onChange: (value: TimeDurationProps['value']) => void;\n};\n\nexport function TimeDuration({value, onChange, error}: TimeDurationProps) {\n return (\n <div className={block()}>\n <NumberInputWithError\n className={block('input')}\n value={{...value, value: value?.value, error: value?.error ?? error}}\n onChange={onChange}\n formatFn={formatTimeDuration}\n parseFn={parseTimeDuration}\n />\n <Tooltip\n content={\n <div>\n <MetaTable\n items={[\n makeItems({\n y: 'years',\n w: 'weeks',\n M: 'months',\n d: 'days',\n }),\n makeItems({\n h: 'hours',\n m: 'minutes',\n s: 'seconds',\n ms: 'milliseconds',\n }),\n ]}\n />\n 1M=30d\n <br />\n <br />\n Examles: 1M2d3h, 4h15m\n </div>\n }\n >\n <Icon className={block('info')} awesome={'question-circle'} />\n </Tooltip>\n </div>\n );\n}\n\nTimeDuration.hasErrorRenderer = true;\n\nTimeDuration.getDefaultValue = (): TimeDurationProps['value'] => {\n return {value: undefined};\n};\n\nTimeDuration.isEmpty = (v: TimeDurationProps['value']) => {\n return !v;\n};\n\nTimeDuration.validator = (v: TimeDurationProps['value']) => {\n return v?.error;\n};\n\nexport function formatTimeDuration(value?: number) {\n if (!value && value !== 0) {\n return '';\n }\n\n let rest = value;\n let res = '';\n\n const h = 3600 * 1000;\n const d = 24 * h;\n const M = 30 * d;\n const y = 365 * d;\n\n const parts = {\n y,\n M,\n d,\n h,\n m: 60 * 1000,\n s: 1000,\n ms: 1,\n };\n\n Object.keys(parts).forEach((k) => {\n const p: number = parts[k as keyof typeof parts];\n const count = Math.floor(rest / p);\n if (count > 0) {\n res += `${count}${k} `;\n rest -= count * p;\n }\n });\n\n return res;\n}\n\nexport function parseTimeDuration(rawValue: string) {\n if (!rawValue) {\n return {value: undefined};\n }\n\n if (!/^[\\d\\sa-zA-Z]*$/.test(rawValue)) {\n return {value: undefined, error: 'only digits and latin characters are allowed'};\n }\n\n const skipSpaces = rawValue.replace(/\\s+/g, '');\n const res = [...skipSpaces.matchAll(/\\d+[a-zA-Z]*/g)];\n if (!res.length || res[0].index !== 0) {\n return {value: undefined, error: 'wrong format'};\n }\n\n let value = 0;\n for (const match of res) {\n const {[0]: digits, input} = match[0].match(/\\d+/) || {};\n if (!digits) {\n return {value: undefined, error: 'wring fromat 1'};\n }\n\n const type = input?.substring(digits.length) ?? '';\n const d = Number(digits);\n const toAdd = moment.duration(d, type as any).valueOf() as number;\n if (toAdd === 0 && d !== 0) {\n return {value: undefined, error: `wrong format of ${input}`};\n }\n\n value += toAdd;\n }\n return {value};\n}\n\nfunction makeItems(data: Record<string, string>) {\n return Object.keys(data).map((key) => ({key: key, label: key, value: data[key]}));\n}\n","import {createSelector} from 'reselect';\n\nimport compact_ from 'lodash/compact';\nimport filter_ from 'lodash/filter';\nimport flatten_ from 'lodash/flatten';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\nimport sortBy_ from 'lodash/sortBy';\nimport uniq_ from 'lodash/uniq';\nimport partition_ from 'lodash/partition';\nimport isEqual_ from 'lodash/isEqual';\nimport some_ from 'lodash/some';\n\nimport {calculateLoadingStatus} from '../../utils/utils';\nimport {concatByAnd} from '../../common/hammer/predicate';\nimport {\n getAclFilterColumnGroupName,\n getAclFilterColumns,\n getAclFilterExpandedSubjects,\n getApproversSubjectFilter,\n getObjectPermissionsFilter,\n getObjectSubjectFilter,\n} from './acl-filters';\nimport UIFactory from '../../UIFactory';\nimport {RootState} from '../../store/reducers';\nimport {IdmKindType, PreparedAclSubject} from '../../utils/acl/acl-types';\nimport {YTPermissionTypeUI} from '../../utils/acl/acl-api';\nimport {PreparedRole} from '../../utils/acl';\n\nexport type PreparedAclSubjectColumn = Omit<PreparedAclSubject, 'type'> & {type: 'columns'};\n\nfunction prepareColumnsNames(columnsPermissions: Array<{columns?: Array<string>}>) {\n const columns = map_(columnsPermissions, (permission) => permission.columns);\n\n return compact_(uniq_(flatten_(columns))).sort();\n}\n\nfunction prepareApprovers(\n approvers: Array<PreparedRole> | undefined,\n type: 'read_approver' | 'responsible' | 'auditor',\n) {\n return map_(approvers, (subject) => {\n const extra = {\n type,\n subjects: [subject.value],\n subjectType: subject.type === 'users' ? ('user' as const) : ('group' as const),\n groupInfo:\n subject.type === 'groups'\n ? {name: subject.group_name, url: subject.url, group: undefined}\n : undefined,\n action: undefined,\n };\n return {\n ...subject,\n ...extra,\n };\n });\n}\n\nexport type PreparedApprover = ReturnType<typeof prepareApprovers>[number];\n\nexport const getAllUserPermissions = (state: RootState, idmKind: IdmKindType) =>\n state.acl[idmKind].userPermissions;\nconst getAllObjectPermissions = (state: RootState, idmKind: IdmKindType) =>\n state.acl[idmKind].objectPermissions;\n\nconst getAllObjectPermissionsWithSplittedSubjects = createSelector(\n [getAllObjectPermissions],\n splitSubjects,\n);\n\nexport const getObjectPermissionsTypesList = (idmKind: IdmKindType) => {\n return createSelector(\n [\n getObjectPermissionsFilter,\n (state) => getAllObjectPermissionsWithSplittedSubjects(state, idmKind),\n ],\n (permissionsFilter, items) => {\n const uniquePermisions = new Set<YTPermissionTypeUI>();\n const {permissionTypes} = UIFactory.getAclPermissionsSettings()[idmKind] || {};\n [...permissionTypes, ...permissionsFilter].forEach((permission) =>\n uniquePermisions.add(permission),\n );\n items.forEach((item) => {\n const {permissions} = item;\n permissions?.forEach((permission) => uniquePermisions.add(permission));\n });\n return sortBy_([...uniquePermisions], (permission) => permission);\n },\n );\n};\n\ntype HasSplitted = {\n isSplitted?: boolean;\n subjectIndex?: number;\n};\n\nfunction splitSubjects<T extends {subjects: Array<unknown>}>(items: Array<T>) {\n const res: Array<T & HasSplitted> = [];\n forEach_(items, (item) => {\n const {subjects} = item;\n if (subjects && subjects.length > 1) {\n forEach_(subjects, (subject, index) => {\n res.push({...item, subjects: [subject], isSplitted: true, subjectIndex: index});\n });\n } else {\n res.push(item);\n }\n });\n return res;\n}\n\nfunction subjectFilterPredicate<\n T extends {subjectType?: unknown; groupInfo?: unknown; subjects: Array<unknown>},\n>(item: T, filter: string) {\n const {subjectType, groupInfo} = item;\n if (subjectType === 'group') {\n return some_(Object.entries(groupInfo ?? {}), ([key, value]) => {\n let str: string | undefined = String(value);\n if (key === 'url') {\n if (str[str.length - 1] === '/') str = str.slice(0, -1);\n str = str.split('/').pop();\n }\n return -1 !== str?.toLowerCase().indexOf(filter);\n });\n }\n const value = String(item.subjects[0] ?? '');\n return -1 !== value.toLowerCase().indexOf(filter);\n}\n\nfunction FilterBySubject<\n T extends {subjectType?: unknown; groupInfo?: unknown; subjects: Array<unknown>},\n>(items: Array<T>, subjectFilter?: string) {\n if (!subjectFilter) return items;\n const lowerNameFilter = subjectFilter.toLowerCase();\n return filter_(items, (item) => subjectFilterPredicate(item, lowerNameFilter));\n}\n\nconst permissionsFilterPredicate = (item: PreparedAclSubject, filter: Set<YTPermissionTypeUI>) => {\n const {permissions} = item;\n let foundCount = 0;\n return permissions?.some((p) => {\n if (filter.has(p)) {\n foundCount++;\n }\n return foundCount >= filter.size;\n });\n};\n\ntype ObjectPermissionsRow = PreparedAclSubject & HasSplitted;\n\nexport const getAllObjectPermissionsFiltered = createSelector(\n [\n getAllObjectPermissionsWithSplittedSubjects,\n getObjectSubjectFilter,\n getObjectPermissionsFilter,\n getAclFilterColumns,\n ],\n (items, subjectFilter, permissionsFilter, columns) => {\n const [mainPermissions, columnPermissions] = partition_(\n items,\n (item) => !item.columns?.length,\n );\n\n const withColumns = columnPermissions.map((item) => {\n return {...item, columns: sortBy_(item.columns)};\n });\n\n const lowerNameFilter = subjectFilter?.toLocaleLowerCase();\n const filterBySubject = lowerNameFilter\n ? (item: ObjectPermissionsRow) => subjectFilterPredicate(item, lowerNameFilter)\n : undefined;\n\n const permissionsFilterSet = new Set<YTPermissionTypeUI>(permissionsFilter);\n const filterByPermissions = permissionsFilterSet.size\n ? (item: ObjectPermissionsRow) =>\n permissionsFilterPredicate(item, permissionsFilterSet) ?? false\n : undefined;\n\n const visibleColumns = new Set(columns);\n const filterByColumns = visibleColumns.size\n ? ({columns}: ObjectPermissionsRow) => {\n return columns?.some((colName) => visibleColumns.has(colName)) ?? false;\n }\n : undefined;\n\n const mainPredicates = compact_([filterBySubject, filterByPermissions]);\n const columnsPredicates = compact_([filterBySubject, filterByColumns]);\n return {\n mainPermissions: mainPredicates.length\n ? mainPermissions.filter(concatByAnd(...mainPredicates))\n : mainPermissions,\n columnsPermissions: columnsPredicates.length\n ? withColumns.filter(concatByAnd(...columnsPredicates))\n : withColumns,\n };\n },\n);\n\nexport const getObjectPermissionsAggregated = createSelector(\n [getAllObjectPermissionsFiltered, getAclFilterExpandedSubjects],\n ({mainPermissions, columnsPermissions}, expandedSubjects) => {\n return {\n mainPermissions: {\n ...aggregateBySubject(mainPermissions, expandedSubjects),\n count: mainPermissions.length,\n },\n columnsPermissions: {\n ...aggregateBySubject(columnsPermissions, expandedSubjects),\n count: columnsPermissions.length,\n },\n };\n },\n);\n\nclass AggregateBySubject {\n aggrKey: string;\n subject: ObjectPermissionsRow['subjects'][number];\n inherited: boolean;\n\n allPermissions = new Set<YTPermissionTypeUI>();\n columns = new Set<string>();\n first: ObjectPermissionsRow;\n children = new Array<ObjectPermissionsRow & {expanded?: boolean; level?: number}>();\n\n constructor(first: AggregateBySubject['first']) {\n if (first.subjects.length > 1) {\n throw new Error(\n `Unexpected behavior: more than one subject occured: ${first.subjects.join(',')}`,\n );\n }\n\n this.aggrKey = aggregationKey(first);\n this.inherited = Boolean(first.inherited);\n this.subject = first.subjects[0];\n this.first = {...first};\n this.add(first);\n }\n\n add(item: ObjectPermissionsRow) {\n const aggrKey = aggregationKey(item);\n if (this.aggrKey !== aggrKey) {\n throw new Error(\n `Unexpected behavior: aggregation keys are not queal: ${this.aggrKey} !== ${aggrKey}`,\n );\n }\n\n if (item.subjects.length !== 1) {\n throw new Error(\n `Unexpected behavior: item.subjects.length !== 1: ${JSON.stringify(item)}`,\n );\n }\n\n const child = {...item, permissions: [...(item.permissions ?? [])]};\n this.children.push(child);\n\n child.permissions?.sort();\n child.permissions?.forEach((p) => {\n this.allPermissions.add(p);\n });\n item.columns?.forEach((column) => this.columns.add(column));\n\n this.first.isMissing ||= Boolean(item.isMissing);\n this.first.isUnrecognized ||= Boolean(item.isUnrecognized);\n this.first.isApproved ||= Boolean(item.isApproved);\n this.first.isRequested ||= Boolean(item.isRequested);\n }\n\n getItems(expanded: boolean): {\n items: AggregateBySubject['children'];\n hasExpandable?: boolean;\n hasDenyAction?: boolean;\n hasInherited?: boolean;\n } {\n const hasInherited = this.inherited;\n if (this.children.length === 1) {\n return {items: this.children, hasInherited};\n }\n\n const first: typeof this.first & {level?: number; expanded?: boolean} = {\n ...this.first,\n level: 0,\n expanded,\n };\n first.permissions = [...this.allPermissions].sort();\n first.columns = [...this.columns].sort();\n\n let hasDenyAction = false;\n const items = !expanded\n ? [first]\n : [\n first,\n ...sortBy_(this.children, ['inheritance_mode', 'permissions']).map((i) => {\n hasDenyAction ||= i.action === 'deny';\n return {...i, level: 1};\n }),\n ];\n\n this.children.forEach((i) => {\n if (i.inheritance_mode !== first.inheritance_mode) {\n first.inheritance_mode = undefined;\n }\n if (!isEqual_(this.first.inheritedFrom, i.inheritedFrom)) {\n first.inheritedFrom = undefined;\n }\n });\n\n return {items, hasExpandable: true, hasDenyAction, hasInherited};\n }\n}\n\nexport type ObjectPermissionRowWithExpand = AggregateBySubject['children'][number];\n\nfunction aggregationKey(item: ObjectPermissionsRow) {\n const {\n inherited,\n subjects: [subject],\n } = item;\n return `subject:${subject}_inherited:${Boolean(inherited)}`;\n}\n\nfunction aggregateBySubject(\n objPermissions: Array<ObjectPermissionsRow>,\n expandedSubjects: Set<string | number>,\n) {\n const aggregated: Record<string, AggregateBySubject> = {};\n\n objPermissions.forEach((item) => {\n const aggKey = aggregationKey(item);\n const dst = aggregated[aggKey];\n if (!dst) {\n aggregated[aggKey] = new AggregateBySubject(item);\n } else {\n dst.add(item);\n }\n });\n\n const res = Object.values(aggregated).reduce(\n (acc, item) => {\n const {items, hasExpandable, hasInherited} = item.getItems(\n expandedSubjects.has(item.subject),\n );\n acc.items = acc.items.concat(items);\n acc.hasExpandable ||= hasExpandable;\n acc.hasInherited ||= hasInherited;\n return acc;\n },\n {items: []} as ReturnType<AggregateBySubject['getItems']>,\n );\n\n const [inherited, other] = partition_(res.items, (item) => item.inherited);\n\n return {\n ...res,\n items: [...inherited, ...other],\n };\n}\n\nexport const getAllObjectPermissionsOrderedByStatus = createSelector(\n [getAllObjectPermissions],\n OrderByRoleStatus,\n);\nexport const getAllColumnGroups = (state: RootState, idmKind: IdmKindType) =>\n state.acl[idmKind].columnGroups;\nexport const getAllColumnGroupsActual = createSelector(\n [getAllColumnGroups, getAclFilterColumns, getAclFilterColumnGroupName],\n (items, columnsFilter, nameFilter) => {\n const visibleColumns = new Set(columnsFilter);\n type ItemType = (typeof items)[number];\n const nameFilterLower = nameFilter?.toLowerCase();\n const predicates = compact_([\n (item: ItemType) => {\n return !item.removed;\n },\n visibleColumns.size > 0\n ? (item: ItemType) => {\n return item.columns?.some((name) => visibleColumns.has(name)) ?? false;\n }\n : undefined,\n nameFilterLower?.length\n ? (item: ItemType) =>\n -1 !== (item.name?.toLowerCase()?.indexOf(nameFilterLower) ?? -1)\n : undefined,\n ]);\n const filtered = filter_(items, concatByAnd(...predicates)).map((item) => {\n return {...item, columns: sortBy_(item.columns)};\n });\n return sortBy_(filtered, ['name']);\n },\n);\n\nfunction OrderByRoleStatus<\n T extends {\n isDepriving?: boolean;\n isRequested?: boolean;\n isUnrecognized?: boolean;\n isApproved?: boolean;\n },\n>(items: Array<T>) {\n const unrecognized: typeof items = [];\n const requested: typeof items = [];\n const depriving: typeof items = [];\n const rest: typeof items = [];\n forEach_(items, (item) => {\n const {isDepriving, isRequested, isUnrecognized, isApproved} = item;\n if (isUnrecognized) {\n unrecognized.push(item);\n } else if (isDepriving) {\n depriving.push(item);\n } else if (isRequested || isApproved) {\n requested.push(item);\n } else {\n rest.push(item);\n }\n });\n return [...requested, ...depriving, ...unrecognized, ...rest];\n}\n\nfunction OrderByInheritanceAndSubject<T extends {inherited?: boolean; subjects: Array<unknown>}>(\n items: Array<T>,\n) {\n const res = sortBy_(items, [\n (item) => !item.inherited,\n (item) => (item.subjects && item.subjects[0]) || true,\n ]);\n return res;\n}\n\nconst getReadApprovers = (state: RootState, idmKind: IdmKindType) =>\n state.acl[idmKind].readApprovers;\nconst getResponsibles = (state: RootState, idmKind: IdmKindType) => state.acl[idmKind].responsible;\nconst getAuditors = (state: RootState, idmKind: IdmKindType) => state.acl[idmKind].auditors;\n\nexport const getNotInheritedReadApprovers = createSelector([getReadApprovers], (readApprovers) =>\n filter_(readApprovers, (readApprover) => !readApprover.inherited),\n);\nexport const getNotInheritedResponsibles = createSelector([getResponsibles], (responsibles) =>\n filter_(responsibles, (responsible) => !responsible.inherited),\n);\nexport const getNotInheritedAuditors = createSelector([getAuditors], (auditros) =>\n filter_(auditros, (auditro) => !auditro.inherited),\n);\n\nconst getAllApprovers = createSelector(\n [getReadApprovers, getResponsibles, getAuditors],\n (readApprovers, responsibles, auditros) => {\n return [\n ...prepareApprovers(readApprovers, 'read_approver'),\n ...prepareApprovers(responsibles, 'responsible'),\n ...prepareApprovers(auditros, 'auditor'),\n ];\n },\n);\n\nexport const getHasApprovers = createSelector([getAllApprovers], (items) => items.length > 0);\n\nexport const getApproversFiltered = createSelector(\n [getAllApprovers, getApproversSubjectFilter],\n FilterBySubject,\n);\n\nexport const getApproversFilteredAndOrdered = createSelector(\n [getApproversFiltered],\n OrderByInheritanceAndSubject,\n);\n\nexport const getApprovers = createSelector([getAllApprovers], OrderByRoleStatus);\n\nexport const getAllAccessColumnsPermissions = createSelector(\n [getAllObjectPermissions],\n (objectPermissions) => {\n const filteredPermissions = filter_(\n objectPermissions,\n (permission) => permission.action === 'allow' && permission.columns?.length! > 0,\n );\n\n return map_(filteredPermissions, (item) => {\n const tmp: typeof item = {...item};\n tmp.type = 'columns';\n return tmp;\n });\n },\n);\n\nconst getAllDenyColumnsPermissions = createSelector(\n [getAllObjectPermissions],\n (objectPermissions) => {\n const filteredPermissions = filter_(\n objectPermissions,\n (permission) => permission.action === 'deny' && permission.columns?.length! > 0,\n );\n\n return map_(\n filteredPermissions,\n (permission) =>\n ({\n ...permission,\n type: 'columns',\n }) as PreparedAclSubjectColumn,\n );\n },\n);\n\nexport const getAllAccessColumnsNames = createSelector(\n [getAllAccessColumnsPermissions],\n prepareColumnsNames,\n);\n\nexport const getAllDenyColumnsNames = createSelector(\n [getAllDenyColumnsPermissions],\n prepareColumnsNames,\n);\n\nexport const getDenyColumnsItems = createSelector([getAllDenyColumnsNames], (names) =>\n map_(names, (name) => ({key: name, value: name, title: name})),\n);\n\nexport const isPermissionDeleted = (state: RootState, idmKind: IdmKindType) =>\n state.acl[idmKind].isPermissionDeleted;\nexport const permissionDeletionError = (state: RootState, idmKind: IdmKindType) =>\n state.acl[idmKind].deletionError;\nexport const getLastDeletedPermissionKey = (state: RootState, idmKind: IdmKindType) =>\n state.acl[idmKind].deletedItemKey;\nexport const getIdmPermissionsRequestError = (state: RootState, idmKind: IdmKindType) =>\n state.acl[idmKind].idmPermissionsRequestError;\nexport const getIdmManageAclRequestError = (state: RootState, idmKind: IdmKindType) =>\n state.acl[idmKind].idmManageAclRequestError;\nexport const getIdmPathVersion = (state: RootState, idmKind: IdmKindType) =>\n state.acl[idmKind].version;\n\nconst getAclLoading = (state: RootState, idmKind: IdmKindType) => state.acl[idmKind].loading;\nconst getAclLoaded = (state: RootState, idmKind: IdmKindType) => state.acl[idmKind].loaded;\nconst getAclError = (state: RootState, idmKind: IdmKindType) => state.acl[idmKind].error;\n\nexport const getAclLoadState = createSelector(\n [getAclLoading, getAclLoaded, getAclError],\n (loading, loaded, error) => {\n return calculateLoadingStatus(loading, loaded, error);\n },\n);\n","import {block} from '../utils/cn';\n\nexport const progressBlock = block('progress');\n","import type * as React from 'react';\n\nimport {progressBlock} from './constants';\n\nexport interface ProgressInnerTextProps {\n text?: React.ReactNode;\n offset?: number;\n}\n\nexport function ProgressInnerText(props: ProgressInnerTextProps) {\n const {text, offset = 0} = props;\n\n if (!text) {\n return null;\n }\n\n return (\n <div\n className={progressBlock('text-inner')}\n style={{transform: `translateX(calc(var(--g-flow-direction) * ${-offset}%))`}}\n >\n {text}\n </div>\n );\n}\n","import type {CnMods} from '../utils/cn';\n\nimport {progressBlock} from './constants';\nimport type {Stack} from './types';\n\nexport interface ProgressStackItemProps {\n item: Stack;\n}\n\nexport function ProgressStackItem({item}: ProgressStackItemProps) {\n const {value, color, className, theme, title, content, loading} = item;\n const modifiers: CnMods = {\n loading,\n };\n\n if (typeof color === 'undefined') {\n modifiers.theme = theme || 'default';\n }\n\n if (Number.isFinite(value)) {\n return (\n <div\n className={progressBlock('item', modifiers, className)}\n style={{width: `${value}%`, backgroundColor: color}}\n title={title}\n >\n {content}\n </div>\n );\n }\n\n return null;\n}\n","import type {ProgressTheme, ProgressWithValueProps, Stack} from './types';\n\nexport function getOffset(value: number): number {\n return value < 100 ? value - 100 : 0;\n}\n\nexport function getValueFromStack(stack: Stack[]): number {\n return stack.reduce((sum, {value}) => sum + value, 0);\n}\n\nexport function getTheme(props: ProgressWithValueProps): ProgressTheme {\n const {theme, colorStops, colorStopsValue, value} = props;\n\n if (colorStops) {\n const matchingColorStopItem = colorStops.find((item, index) => {\n const currentValue = typeof colorStopsValue === 'number' ? colorStopsValue : value;\n const minValue = index > 1 ? colorStops[index - 1].stop : 0;\n const maxValue = index < colorStops.length - 1 ? item.stop : 100;\n\n return currentValue >= minValue && currentValue <= maxValue;\n });\n\n return matchingColorStopItem ? matchingColorStopItem.theme : (theme as ProgressTheme);\n }\n\n return theme as ProgressTheme;\n}\n","import {ProgressInnerText} from './ProgressInnerText';\nimport {ProgressStackItem} from './ProgressStackItem';\nimport {progressBlock} from './constants';\nimport type {ProgressWithStackProps} from './types';\nimport {getOffset, getValueFromStack} from './utils';\n\nexport function ProgressWithStack(props: ProgressWithStackProps) {\n const {stack, stackClassName, value, text} = props;\n const offset = getOffset(value || getValueFromStack(stack));\n\n return (\n <div\n className={progressBlock('stack', stackClassName)}\n style={{transform: `translateX(calc(var(--g-flow-direction) * ${offset}%))`}}\n >\n <div className={progressBlock('item')} style={{width: `${-offset}%`}} />\n {stack.map((item, index) => (\n <ProgressStackItem key={index} item={item} />\n ))}\n <ProgressInnerText offset={offset} text={text} />\n </div>\n );\n}\n","import {ProgressInnerText} from './ProgressInnerText';\nimport {progressBlock} from './constants';\nimport type {ProgressWithValueProps} from './types';\nimport {getOffset, getTheme} from './utils';\n\nexport function ProgressWithValue(props: ProgressWithValueProps) {\n const {value, loading, text} = props;\n const offset = getOffset(value);\n\n if (!Number.isFinite(value)) {\n return null;\n }\n\n return (\n <div\n className={progressBlock('item', {theme: getTheme(props), loading})}\n style={{transform: `translateX(calc(var(--g-flow-direction) * ${offset}%))`}}\n >\n <ProgressInnerText offset={offset} text={text} />\n </div>\n );\n}\n","import type * as React from 'react';\n\nimport type {QAProps} from '../types';\n\nexport type ProgressTheme = 'default' | 'success' | 'warning' | 'danger' | 'info' | 'misc';\nexport type ProgressSize = 'xs' | 's' | 'm';\nexport type ProgressValue = number;\n\nexport interface Stack {\n value: ProgressValue;\n color?: string;\n title?: string;\n theme?: ProgressTheme;\n loading?: boolean;\n className?: string;\n content?: React.ReactNode;\n}\n\nexport interface ProgressColorStops {\n theme: ProgressTheme;\n stop: number;\n}\n\ninterface ProgressGeneralProps extends QAProps {\n /** ClassName of element */\n className?: string;\n}\n\nexport interface ProgressDefaultProps {\n /** Text inside progress bar */\n text: React.ReactNode;\n /** Theme */\n theme: ProgressTheme;\n /** Size. Text of progress bar is displayed in `m` size only. */\n size: ProgressSize;\n /** Loading. Аdds loading animation */\n loading?: boolean;\n}\n\nexport interface ProgressWithValueProps\n extends ProgressGeneralProps,\n Partial<ProgressDefaultProps> {\n /** Current progress value. Available range is from 0 to 100. If `stack` property is passed `value` is not required and behaves as maxValue. */\n value: ProgressValue;\n /** ProgressTheme breakpoints. [Details](#colorstops) */\n colorStops?: ProgressColorStops[];\n /** Alternative value of `colorStops`. Available range is from 0 to 100. */\n colorStopsValue?: ProgressValue;\n}\n\nexport interface ProgressWithStackProps\n extends ProgressGeneralProps,\n Partial<ProgressDefaultProps> {\n /** Configuration of composite progress bar. Not required if a `value` property is passed. [Details](#stack) */\n stack: Stack[];\n value?: ProgressValue;\n /** ClassName of stack element */\n stackClassName?: string;\n}\n\nexport type ProgressProps = ProgressWithStackProps | ProgressWithValueProps;\n\nexport function isProgressWithStack(props: ProgressProps): props is ProgressWithStackProps {\n return (props as ProgressWithStackProps).stack !== undefined;\n}\n","import * as React from 'react';\n\nimport {ProgressWithStack} from './ProgressWithStack';\nimport {ProgressWithValue} from './ProgressWithValue';\nimport {progressBlock} from './constants';\nimport type {ProgressProps} from './types';\nimport {isProgressWithStack} from './types';\n\nimport './Progress.scss';\n\nexport const Progress = React.forwardRef<HTMLDivElement, ProgressProps>(\n function Progress(props, ref) {\n const {text = '', theme = 'default', size = 'm', loading = false, className, qa} = props;\n const resolvedProps: ProgressProps = {...props, text, theme, size, loading};\n\n return (\n <div ref={ref} className={progressBlock({size}, className)} data-qa={qa}>\n <div className={progressBlock('text')}>{text}</div>\n {isProgressWithStack(resolvedProps) ? (\n <ProgressWithStack {...resolvedProps} />\n ) : (\n <ProgressWithValue {...resolvedProps} />\n )}\n </div>\n );\n },\n);\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport ReactList from 'react-list';\nimport block from 'bem-cn-lite';\n\nimport isNumber_ from 'lodash/isNumber';\nimport isObject_ from 'lodash/isObject';\nimport partition_ from 'lodash/partition';\n\nimport {Popup, PopupProps, TextInput, TextInputProps} from '@gravity-ui/uikit';\n\nimport templates from '../../components/templates/utils';\n\nimport './Suggest.scss';\n\nconst b = block('suggest');\n\n// TODO add is scrolled into view logic\n// TODO support custom item height\n\nexport const itemsProps = PropTypes.arrayOf(\n PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.shape({\n value: PropTypes.string,\n text: PropTypes.string,\n counter: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n }),\n ]),\n);\n\ninterface Item {\n value: string;\n text: string;\n counter?: string | number;\n}\n\nconst ESCAPE = 27;\nconst ENTER = 13;\nconst ARROW_UP = 38;\nconst ARROW_DOWN = 40;\n\n/*const TAB = 9;\nconst CTRL = 16;\nconst ALT = 17;\nconst ARROW_LEFT = 37;\nconst ARROW_RIGHT = 39;\nconst COMMAND = 91;*/\n\nexport interface SuggestProps {\n className?: string;\n\n filter: (items: SuggestProps['items'], text?: string) => SuggestProps['items'];\n apply?: (value: SuggestItem) => void;\n onTextUpdate?: (text: string) => void;\n onItemClick?: (item: SuggestItem) => void;\n clear?: () => void;\n placeholder?: string;\n autoFocus?: boolean;\n text?: string;\n defaultText?: string;\n disabled?: boolean;\n template?: {\n key: string;\n };\n items: Array<SuggestItem>;\n maxItems?: number | {totalAmount: number; groupPredicate: () => void};\n\n zIndexGroupLevel?: number;\n onBlur?: () => void;\n onFocus?: () => void;\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n pin?: TextInputProps['pin'];\n onOpenChange?: (p: {open: boolean}) => void;\n popupClassName?: string;\n popupPlacement?: PopupProps['placement'];\n\n renderItem?: (item: SuggestItem) => React.ReactNode;\n}\n\nexport type SuggestItem = string | Item;\n\ninterface State {\n text?: string;\n items: SuggestProps['items'];\n selectedIndex: number;\n popupVisible: boolean;\n\n prevItems: SuggestProps['items'];\n\n focused?: boolean;\n}\n\nexport default class Suggest extends Component<SuggestProps, State> {\n static defaultProps = {\n disable: false,\n text: '',\n autoFocus: false,\n items: [],\n zIndexGroupLevel: 1,\n onBlur: () => {},\n focused: false,\n };\n\n private input = React.createRef<HTMLInputElement>();\n private isClearClicked = false; // the flag for the correct render text-input view after clear button click\n private isUnmounting = false;\n private skipApplyForNextBlur = false;\n\n constructor(props: SuggestProps) {\n super(props);\n\n this.state = {\n text: 'text' in props ? props.text : props.defaultText,\n items: props.items,\n selectedIndex: 0,\n popupVisible: false,\n prevItems: [],\n };\n\n this.onFocus = this.onFocus.bind(this);\n this.onBlur = this.onBlur.bind(this);\n this.onKeyDown = this.onKeyDown.bind(this);\n this.hideSuggestions = this.hideSuggestions.bind(this);\n this.clearSuggestions = this.clearSuggestions.bind(this);\n }\n\n // eslint-disable-next-line @typescript-eslint/member-ordering\n static getDerivedStateFromProps(props: SuggestProps, prevState: State) {\n const text = !prevState.focused && 'text' in props ? props.text : prevState.text;\n\n if (props.items === prevState.prevItems && text === prevState.text) {\n return null;\n }\n\n const items = props.filter(props.items, text);\n const res = {items, prevItems: props.items, text};\n\n return res;\n }\n\n componentDidMount() {\n this.isClearClicked = false;\n }\n\n componentWillUnmount() {\n this.isUnmounting = true;\n }\n\n // eslint-disable-next-line react/sort-comp\n onTextUpdate = (text: string) => {\n const {clear, onTextUpdate} = this.props;\n\n this.setState({text});\n this.loadSuggestions(text);\n\n if (!text.length) {\n clear?.();\n }\n\n onTextUpdate?.(text);\n };\n\n onFocus() {\n // make sure that suggestions popup is visible only if onFocus() invocation was not followed\n // by onClearClick() invocation (which sets the flag to true afterwards), since onFocus event\n // always happen first when any action is made within text input\n this.setState({focused: true});\n\n this.isClearClicked = false;\n this.loadSuggestions(this.state.text);\n this.skipApplyForNextBlur = false;\n this.props.onFocus?.();\n }\n\n onBlur() {\n this.hideSuggestions();\n if (!this.isClearClicked) {\n this.props.onBlur?.();\n }\n if (!this.skipApplyForNextBlur) {\n this.applySuggestion(this.state.text ?? '');\n }\n this.setState({focused: false});\n }\n\n onKeyDown(evt: React.KeyboardEvent<HTMLElement>) {\n const key = evt.keyCode;\n\n if (key === ARROW_DOWN) {\n evt.preventDefault();\n this.selectNextSuggestion();\n } else if (key === ARROW_UP) {\n evt.preventDefault();\n this.selectPrevSuggestion();\n } else if (key === ENTER) {\n this.applyOrClearSuggestion();\n } else if (key === ESCAPE) {\n this.input.current?.blur();\n }\n }\n\n hideSuggestions() {\n this.setState({items: [], popupVisible: false, selectedIndex: 0});\n this.props.onOpenChange?.({open: false});\n }\n\n showSuggestions = (items: SuggestProps['items']) => {\n if (!this.isUnmounting) {\n this.setState({\n items,\n popupVisible: true,\n selectedIndex: 0,\n });\n this.props.onOpenChange?.({open: true});\n }\n };\n\n loadSuggestions(text?: string) {\n const {filter, items} = this.props;\n\n Promise.resolve(filter(items, text)).then(this.showSuggestions);\n }\n\n clearSuggestions() {\n const {clear} = this.props;\n\n clear?.();\n // update flag value not to show suggestions after function clear() have change input value for ''\n // and on input change event listener will call popup render\n this.isClearClicked = true;\n\n this.input.current?.blur();\n }\n\n applySuggestion(text: string) {\n const {apply} = this.props;\n this.setState({text});\n apply?.(text);\n this.input.current?.blur();\n }\n\n getItemIndex(selectedIndex: number) {\n return selectedIndex - 1;\n }\n\n getSelectedIndex(itemIndex: number) {\n return itemIndex + 1;\n }\n\n getItemValue(item: string | Item) {\n return typeof item === 'string' ? item : item.value;\n }\n\n applyOrClearSuggestion() {\n const {selectedIndex, items} = this.state;\n\n let item: SuggestItem | undefined;\n\n if (selectedIndex === 0) {\n if (items.length > 0) {\n item = items[0];\n }\n } else {\n item = items[this.getItemIndex(selectedIndex)];\n }\n\n if (item) {\n const value = this.getItemValue(item);\n this.applySuggestion(value);\n const {onItemClick} = this.props;\n onItemClick?.(item);\n }\n }\n\n selectPrevSuggestion() {\n const {selectedIndex, items} = this.state;\n const prevIndex =\n selectedIndex === 0 ? this.getSelectedIndex(items.length - 1) : selectedIndex - 1;\n this.setState({selectedIndex: prevIndex});\n }\n\n selectNextSuggestion() {\n const {selectedIndex, items} = this.state;\n const nextIndex =\n selectedIndex === this.getSelectedIndex(items.length - 1) ? 0 : selectedIndex + 1;\n this.setState({selectedIndex: nextIndex});\n }\n\n renderInput() {\n const {text} = this.state;\n const {placeholder, autoFocus, disabled, pin} = this.props;\n\n return (\n <TextInput\n hasClear\n value={text}\n className={b('control')}\n placeholder={placeholder}\n disabled={disabled}\n onUpdate={this.onTextUpdate}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n autoFocus={autoFocus}\n controlRef={this.input}\n pin={pin}\n onKeyDown={this.onKeyDown}\n />\n );\n }\n\n renderCounter(item: Item) {\n const counter = item.counter;\n\n return (\n typeof counter !== 'undefined' && <span className={b('item-counter')}>{counter}</span>\n );\n }\n\n renderSimpleItem(item: string | Item) {\n const text = typeof item === 'string' ? item : item.text;\n\n return (\n <span>\n {'string' !== typeof item && this.renderCounter(item)}\n {text}\n </span>\n );\n }\n\n renderItem(\n item: string | Item,\n index: number,\n key: number | string,\n className?: string,\n ): React.ReactElement {\n const {selectedIndex} = this.state;\n const itemClassName = b(\n 'item',\n {\n selected: selectedIndex === this.getSelectedIndex(index) ? 'yes' : undefined,\n },\n className,\n );\n\n const value = this.getItemValue(item);\n\n const {template, renderItem, onItemClick} = this.props;\n\n const renderer =\n renderItem ??\n (typeof template !== 'undefined'\n ? templates.get(template.key).__default__\n : this.renderSimpleItem.bind(this));\n\n return (\n <li\n key={key}\n title={value}\n className={itemClassName}\n onMouseDown={() => {\n this.skipApplyForNextBlur = true;\n onItemClick?.(item);\n this.applySuggestion(value);\n }}\n >\n {renderer(item)}\n </li>\n );\n }\n\n getInputWidth() {\n // Is there a way to avoid using private _control property?\n return this.input.current ? this.input.current.offsetWidth - 2 : 0;\n }\n\n restrictItems(items: Array<string | Item>) {\n const {maxItems} = this.props;\n\n if (isNumber_(maxItems)) {\n return items.slice(0, maxItems || items.length);\n } else if (isObject_(maxItems)) {\n const {totalAmount, groupPredicate} = maxItems;\n const [positiveGroup, negativeGroup] = partition_(items, groupPredicate);\n if (positiveGroup.length && negativeGroup.length) {\n // NOTE: we don't want to one group to be omitted in case there is a large\n // bias towards another group - hence minimum value of 1\n const positiveGroupMaxItems = Math.round(\n Math.max((positiveGroup.length / items.length) * totalAmount, 1),\n );\n return positiveGroup\n .slice(0, positiveGroupMaxItems)\n .concat(negativeGroup.slice(0, totalAmount - positiveGroupMaxItems));\n } else {\n // one group is empty - same case as no groups\n return items.slice(0, totalAmount || items.length);\n }\n } else {\n return items;\n }\n }\n\n renderSuggestions(items: Array<SuggestItem>) {\n const className = b('wrapper');\n const listClassName = b('items');\n\n const itemRenderer = (index: number, key: number | string): JSX.Element =>\n this.renderItem(items[index], index, key);\n\n const showNoItemsMsg = items.length === 0 && this.state.text;\n return (\n items && (\n <div className={className}>\n {showNoItemsMsg && this.renderItem('No items', -1, 'no_items', b('no-items'))}\n <ul className={listClassName} style={{minWidth: this.getInputWidth()}}>\n <ReactList\n itemRenderer={itemRenderer}\n length={items.length}\n type=\"uniform\"\n />\n </ul>\n </div>\n )\n );\n }\n\n renderPopup() {\n const {popupClassName, popupPlacement} = this.props;\n const {popupVisible} = this.state;\n\n const items = this.restrictItems(this.state.items);\n return (\n <Popup\n className={popupClassName}\n placement={popupPlacement ?? 'bottom'}\n anchorElement={this.input.current}\n // don't show popup with suggestions after clear button click\n open={!this.isClearClicked && popupVisible && items.length > 0}\n onOpenChange={(open) => {\n if (!open) {\n this.hideSuggestions();\n }\n }}\n >\n {this.renderSuggestions(items)}\n </Popup>\n );\n }\n\n render() {\n const {className} = this.props;\n return (\n <div className={b(null, className)}>\n {this.renderInput()}\n {this.renderPopup()}\n </div>\n );\n }\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../common/hammer/format';\n\nimport './OperationType.scss';\n\nconst block = cn('yt-operation-type');\n\nexport function OperationType({value}: {value?: string}) {\n const text = React.useMemo(() => {\n return format.ReadableField(value);\n }, [value]);\n\n return <span className={block()}>{text}</span>;\n}\n","import React from 'react';\n\nimport cn from 'bem-cn-lite';\n\nimport './ColorCircle.scss';\n\nconst block = cn('yt-color-circle');\n\nexport function ColorCircle({color, marginRight = true}: {color: string; marginRight?: boolean}) {\n return (\n <div className={block({'margin-right': marginRight})} style={{backgroundColor: color}} />\n );\n}\n","import React, {Component} from 'react';\nimport block from 'bem-cn-lite';\n\nimport ErrorBoundary from '../../components/ErrorBoundary/ErrorBoundary';\n\nimport './CollapsibleSection.scss';\nimport Icon from '../../components/Icon/Icon';\n\nconst b = block('collapsible-section');\nconst headingCN = block('elements-heading');\n\ntype PropsStateLess = CollapsibleSectionProps & {\n onToggle: Required<CollapsibleSectionProps>['onToggle'];\n};\n\nexport class CollapsibleSectionStateLess extends Component<PropsStateLess> {\n static defaultProps = {\n size: 'm',\n collapsed: false,\n marginDirection: 'top',\n };\n\n toggle = () => {\n const {onToggle} = this.props;\n\n onToggle(!this.props.collapsed);\n };\n\n render() {\n const {\n name,\n children,\n size,\n overview,\n className,\n headingClassName,\n collapsed,\n marginDirection,\n togglerRightPadding,\n } = this.props;\n\n return (\n <ErrorBoundary>\n <div className={b({margin: marginDirection}, className)}>\n <div className={headingCN({size, overview: 'yes'}, headingClassName)}>\n <span\n className={headingCN(\n 'heading',\n {\n clickable: 'yes',\n },\n b('title'),\n )}\n onClick={this.toggle}\n >\n {name}\n <a>\n <Icon\n className={b('toggler', {'right-padding': togglerRightPadding})}\n awesome={collapsed ? 'angle-down' : 'angle-up'}\n />\n </a>\n </span>\n {overview}\n </div>\n\n {!collapsed && <ErrorBoundary>{children}</ErrorBoundary>}\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nexport interface CollapsibleSectionProps {\n className?: string;\n headingClassName?: string;\n name: React.ReactNode;\n collapsed?: boolean;\n onToggle?: (value: boolean) => void;\n\n size?: 'unset' | 'xs' | 's' | 'ss' | 'ns' | 'n' | 'm' | 'l';\n children?: React.ReactNode;\n overview?: React.ReactNode;\n\n marginDirection?: 'top' | 'bottom';\n\n togglerRightPadding?: 'small';\n}\n\nexport default function CollapsibleSection(props: CollapsibleSectionProps) {\n const {onToggle} = props;\n const [collapsed, setCollapsed] = React.useState(props.collapsed);\n\n const onChange = React.useCallback(\n (value: boolean) => {\n setCollapsed(value);\n if (onToggle) {\n onToggle(value);\n }\n },\n [setCollapsed, onToggle],\n );\n\n return <CollapsibleSectionStateLess {...props} onToggle={onChange} collapsed={collapsed} />;\n}\n"],"names":["props","_jsx","_objectSpread","xmlns","fill","viewBox","children","fillRule","d","clipRule","block","cn","ExpandButton","_ref","className","expanded","inline","toggleExpanded","all","showText","qa","titleExpanded","titleCollapsed","_jsxs","Button","view","title","onClick","Icon","data","doubleShevronRightSvg","shevronRightSvg","size","getApproversSubjectFilter","state","aclFilters","approversSubject","getObjectSubjectFilter","objectSubject","getObjectPermissionsFilter","objectPermissions","getAclFilterColumns","columnsFilter","getAclFilterColumnGroupName","columnGroupNameFilter","getAclFilterExpandedSubjects","expandedSubjects","getAclCurrentTab","aclCurrentTab","Object","assign","width","height","getCreatePoolDialogError","scheduling","createPoolDialog","error","getCreatePoolDialogFlatTreeItems","createSelector","treeItems","currentTree","tree","treeName","sortedFlatTree","collectTreeKeys","sort","dst","forEach_","value","key","push","PoolAcl","isRoot","useSelector","getIsRoot","pool","getPool","getTree","pools","getPools","NoContent","warning","hint","isEmpty_","ErrorBoundary","PoolAclPanel","path","poolTree","concat","connect","loadState","getAclLoadState","IdmObjectType","POOL","useAppRumMeasureStart","type","RumMeasureTypes","SCHEDULING_ACL","additionalStartType","SCHEDULING","startDeps","allowStart","_ref2","_slicedToArray","isFinalLoadingStatus","useRumMeasureStop","stopDeps","allowStop","_ref4","ChargeLevel","_ref$value","_React$useMemo","React","v","Math","max","min","res","sum","theme","stack","effectiveValue","Progress","addProgressStackSpacers","spaceSize","startSpace","endSpace","text","format","NumberSmart","getSchedulingBreadcrumbItems","current","_loop","tmp","parent","find_","name","reverse","makeStaticConfigurationItem","attrs","cpu","ypath","getValue","gpu","memory","user_slots","network","getCurrentPoolGuarantees","getCurrentPool","attributes","burst_guarantee_resources","resource_flow","strong","burst","undefined","flow","calcTreeStaticConfiguration","totals","undistributed","resourceType","total","getNumber","free","used","calcTreeStaticConfigurationByDistributed","distributed","_ref3","filter","Boolean","getPoolsTopLevel","filter_","ROOT_POOL_NAME","getPoolsAllocatedOperationsCount","topPools","reduce_","acc","item","maxOperationCount","maxRunningOperationCount","getCurrentTreeGpuLimit","getTreeResources","resources","getOperationsStaticConfiguration","getCluster","_ref5","allocated","config","operationCount","runningOperationCount","level","usedTitle","lastDayMaxValueSensor","lastDayMaxValueTitle","treeResources","arguments","length","operationRows","resource_distribution_info","resource_limits","undistributed_resources","distributed_burst_guarantee_resources","unburst","undistributed_burst_guarantee_resources","distributed_resource_flow","unflow","undistributed_resource_flow","cpuRow","burstRow","flowRow","apply","_toConsumableArray","isNaN","addI18Keysets","en","ru","SchedulingMeta","guarantees","mainResource","getSchedulingTreeMainResource","_pool$attributes","mode","integralType","_ref$flowCPU","flowCPU","_ref$flowGPU","flowGPU","weight","user_memory","guaranteeType","ReadableField","burstUnit","formatUnits","flowUnit","items","i18n","Number","renderOperationsProgress","renderProgress","usage","visible","subTitles","accumulated_resource_volume","integral_pool_capacity","_ref4$type","capacity","NaN","_ref5$type","accumulated","formatFn","Bytes","Tooltip","content","MetaTable","CollapsibleSection","limit","calcProgressProps","progressType","_pool$operationCount","count","_pool$maxOperationCou","maxCount","_pool$runningOperatio","running","_pool$maxRunningOpera","maxRunning","_pool$lightweightRunn","lightweightRunningOperationCount","lightweightRunning","pending","runningStr","pendingStr","maxRunningStr","maxCountStr","lightweightStr","runningText","totalText","operation","label","ColorCircle","marginRight","color","left","right","_ref6","join","makeGet","parameters","command","USE_CACHE","makeList","USE_MAX_SIZE","cancelHelper","CancelHelper","POOL_FIELDS_TO_LOAD","POOL_TREE_GET_ATTRS","EmptyFullPath","_Error","_classCallCheck","_callSuper","_inherits","_createClass","_wrapNativeSuper","Error","loadExpandedPools","dispatch","getState","loadExpandedOperationsAndPools","ytApiV3Id","executeBatch","YTApiId","schedulingPoolFullPath","requests","fields","then","output","full_path","is_ephemeral","fullPath","isEphemeral","oldExpandedPools","getSchedulingOperationsExpandedPools","treeExpandedPools","Map","parts","split","slice","i","poolName","parentPoolPath","set","updateExpandedPoolNoLoad","addFullPathToExpandedPoolsNoLoad","e","CHANGE_POOL","toaster","add","_getSchedulingOperati","loadAll","getExpandedPoolsLoadAll","expandedPools","expandedPoolNames","keys","operationsExpandedPools","operationsRequests","prefix","forEach","loadAllPools","poolsRequests","poolsChildrenRequests","poolsCypressDataRequests","poolsExpandedPools","_expandedPools$get","get","cypressDataPath","removeAllRequests","SCHEDULING_EXPANDED_POOLS_REQUEST","Promise","schedulingLoadOperationsPerPool","cancellation","saveCancelToken","resolve","schedulingLoadPoolsAll","schedulingLoadPoolsPerPool","schedulingLoadChildrenPerPool","schedulingLoadCypressDataPerPool","_error$inner_errors","operationsResults","poolsResults","poolsChildrenResults","poolsCypressData","UIBatchError","_splitBatchResults","splitBatchResults","USE_IGNORE_NODE_DOES_NOT_EXIST","operations","results","errorIgnoredIndices","rawOperations","poolsToCollapse","pos","rawPools","cypressData","_ref7","_ref8$","_splitBatchResults3","flattenAttributes","_splitBatchResults4","resultIndices","poolsReqeustsIgnored","poolInfo","index","_splitBatchResults5","poolChildren","poolsChildrenRequestsIgnored","_splitBatchResults6","cypressDataChildrenPerPool","poolsCypressDataRequestsIgnored","poolChildrenCypressData","$value","position","setExpandedPools","poolNames","SCHEDULING_EXPANDED_POOLS_SUCCESS","expandedPoolsTree","EMPTY_OBJECT","reduce","flattenCypressData","inner_errors","isCancelled","SCHEDULING_EXPANDED_POOLS_FAILURE","changes","poolsByName","getSchedulingPoolsMapByName","expandedPoolInfo","_data","_data2","calcExpandedPoolInfo","_defineProperty","SCHEDULING_EXPANDED_POOLS_PARTITION","getPoolPathsByName","_dispatch","calculatePoolPath","orchidPath","loadSchedulingData","SCHEDULING_DATA_REQUEST","isInitialLoading","getSchedulingIsInitialLoading","cluster","rumId","RumWrapper","fetch","schedulingData","_splitBatchResults$re","schedulerAlerts","rawTrees","defaultTree","reject","trees","prepareTrees","prepareCurrentTree","schedulingLoadFilterAttributes","checkFilters","SCHEDULING_DATA_PARTITION","treeRequests","schedulingLoadTree","ytApiV4Id","treeData","extracted","extractBatchV4Values","_splitBatchResults2","resource_usage","SCHEDULING_DATA_SUCCESS","code","yt","CANCELLED","SCHEDULING_DATA_FAILURE","closePoolDeleteModal","POOL_TOGGLE_DELETE_VISIBILITY","visibility","setPoolAttributes","params","poolPath","values","initials","transferData","toModify","restValues","_objectWithoutProperties","_excluded","k","source","attr","POOL_RESOURCE_TYPE_TO_ATTRIBUTE","_initials$key","diff","hasOwnProperty","call","updateNodeAttributes","dstPool","map_","dotPath","startsWith","INTEGRAL_GUARANTEES_PREFIX","substr","replace","delta","update_","abs","source_pool","destination_pool","pool_tree","resource_delta","schedulingTransferPoolQuota","err","getBatchError","transferPoolQuota","schedulingOverviewHasFilter","_getSchedulingAttribu","getSchedulingAttributesToFilterParams","lastTime","lastTree","Date","now","wrapApiPromiseByToaster","schedulingFilterAttributes","skipSuccessToast","toasterName","errorContent","attributesToFilter","attributesToFilterParams","setName","newName","prevName","ytApiV3","makeOtherAttributesCommands","initialValues","initialSortParamsString","fifoSortParams","newSortParamsString","commands","forbidImmediateOperations","input","createEphemeralSubpools","setResourceAttributes","omittedValues","attribute","keyMapper","userSlots","omittedValuesList","_value","preparedValues","mapKeys_","schedulingGetAttrsBeforeEdit","result","omit_","makeGeneralCommands","_values$weight","_initialValues$weight","isInitial","initialValue","pickBy_","prototype","isOmitted","_values$weight2","isInvalidNumber","isValidNumber","editPool","computePoolPath","filteredResourceLimitsValues","resourceLimits","omittedResourceLimitsValues","resourceLimitsValues","mapValues_","SCHEDULING_EDIT_POOL_REQUEST","general","otherSettings","schedulingEditPool","resourceGuarantee","integralGuarantee","pick_","POOL_GENERAL_TYPE_TO_ATTRIBUTE","autoHiding","SCHEDULING_EDIT_POOL_SUCCESS","closeEditModal","setTimeout","YTErrors","SCHEDULING_EDIT_POOL_FAILURE","cancelled","TOGGLE_EDIT_VISIBILITY","SCHEDULING_EDIT_POOL_CANCELLED","changeTree","CHANGE_TREE","changePool","PoolsSuggest","_ref$onCancelEdit","onCancelEdit","autoFocus","getPoolsNames","useDispatch","getSuggestItems","_items","match","filtered","lcFilter","toLowerCase","lcPoolName","indexOf","handleCancelEdit","onItemClick","onFocus","Suggest","popupClassName","onBlur","placeholder","SchedulingToolbar","getSchedulingContentMode","Toolbar","itemsToWrap","node","SchedulingContentMode","SchedulingAbc","SchedulingShowAbsResources","SegmentedRadioGroup","onUpdate","contentMode","CHANGE_CONTENT_MODE","options","SCHEDULING_CONTENT_MODES","map","_useSelector","slug","getSchedulingAbcFilter","UIFactory","renderControlAbcService","onChange","abcService","id","abcServiceFilter","schedulingSetAbcFilter","getSchedulingShowAbsResources","Switch","checked","showAbsResources","ExpandableCell","_ref$level","onExpand","Flex","alignItems","child","overflow","shrink","grow","LeftPadding","hidden","Array","getCellStyles","cell","style","isPinned","column","getIsPinned","getSize","minWidth","columnDef","minSize","maxWidth","maxSize","getStart","getAfter","DataTableGravity","virtualized","rowHeight","scrollToIndex","rowClassName","isHighlightedRow","containerRef","rowVirtualizer","useWindowRowVirtualizer","table","getRowModel","rows","estimateSize","overscan","virtualizerProps","timerId","align","clearTimeout","rowClassNameFn","row","highlighted","original","cellAttrs","cellAttributes","headerCellAttrs","headerCellAttributes","header","ref","Table","stickyHeader","TableCell","rest","_excluded2","wrap","FormatNumber","tooltip","_getFormattedValue","hideApproximateChar","NO_VALUE","settings","fullValue","String","parsed","parseBytes","replaceAll","APROXIMATEDLY_EQUAL_TO","getFormattedValue","tooltipContent","YTText","_Fragment","ClipboardButton","inlineMargins","DOUBLE_CLICK_TIMEOUT","ShareUsageBar","shareValue","usageValue","shareTitle","usageTitle","forceTheme","x","_calcProgressProps","digits","DEFAULT_COLUMNS","getSchedulingOverivewColumns","getSettingsData","columns","resColumns","compact_","isSchedulingColumnName","uniq_","PoolTags","Label","capitalize_","NameCell","currentPool","getCurrentTreeExpandedPools","handlePoolExpand","_row$level","incomplete","isCurrentPool","_row$attributes","_row$attributes$child","child_pool_count","_row$attributes$pool_","pool_operation_count","allowExpand","OperationPool","hideTree","routed","isLightweight","isEffectiveLightweight","flex","renderOperationName","fifoIndex","url","fifoIndexNode","hasTitle","direction","margin","Text","variant","ellipsis","Link","PoolAbc","clusterUiConfig","getClusterUiConfig","renderSchedulingTableItemExtraControls","SchedulingTable","_useSelector$key","_useSettingsColumnSiz","_ref$minWidth","_ref$maxWidth","columnSizes","lastRef","time","setColumnSizes","updateFn","_getSettingsData$key","prevColumnSizes","newValue","isEqual_","setSettingByKey","entries","useSettingsColumnSizes","_useSettingsVisibleCo","visibleColumns","onColumnVisibilityChange","prevVisibleColumns","newVisibility","newVisibleColumns","kIndex","splice","onColumnOrderChange","_getSettingsData$key2","Set","has","_useSchedulingTableCo","_COLUMNS_BY_MODE$mode","customColumns","COLUMNS_BY_MODE","availableColumns","NameHeader","enableColumnFilter","enableHiding","SchedulingColumnHeader","allowUnordered","_item$weightEdited","weightEdited","EditedNumber","edited","OperationType","operationType","_ref8","user","SubjectCard","makeReadableFieldColumn","_ref9","justifyContent","FairShareUsage","_ref0","ResourceSummary","_ref1","_ref10","_ref11","maxOperationCountEdited","_ref12","startTime","DurationMemo","start","_ref13","childTableItems","operation_progress","caption","_ref14","info","getProgressTheme","running_operation_progress","_ref15","makeNumberColumn","ctx","SchedulingTableSettings","_ref16","RowActions","enableResizing","_React$useMemo2","columnVisibility","_ref17","columnOrder","col","useSchedulingTableColumns","getSchedulingOverviewTableItems","operationRefId","getSchedulingOperationRefId","useTable","enableColumnPinning","enableColumnResizing","columnPinning","columnSizing","onColumnSizingChange","findIndex","summary","integral_guarantees","custom","_ref2$type","Duration","expandedeLoading","getSchedulingOperationsLoading","loading","getSchedulingLoading","_ref18","_resources$cpu","_resources$gpu","_resources$user_memor","dominantResource","fairShareRatio","cpuContent","gpuContent","memContent","l1","l2","fontWeight","_ref20","autocalculated","_ref21","_React$useState","_React$useState2","setNow","setInterval","clearInterval","from","moment","valueOf","DateTime","formatTimeDuration","round","_ref22","DropdownMenu","switcherWrapperClassName","action","exactPath","openAttributesModal","openEditModal","openPoolDeleteModal","_ref23","starvation_status","usageRatio","starving","aggressively_starving","Readable","_useSelector2","getSchedulingSortState","sortState","order","lastColumnRef","byOptions","find","ColumnHeader","onSort","_ref24","_lastColumnRef$curren","currentOrder","schedulingSetSortState","_ref25","TableSettings","Overview","WithStickyToolbar","toolbar","topMargin","SchedulingExpandedPoolsUpdater","PoolAttributes","PoolAttributesFetched","_data$0$output","_data$","_useFetchBatchQuery","useFetchBatchQuery","schedulingPoolAttributes","errorTitle","isLoading","Loader","YTErrorBlock","Yson","folding","withRouter","location","getPoolIsEphemeral","allowAcl","isPoolAclAllowed","localTab","Tab","showSettings","tab","show","SCHEDULING_ALLOWED_ROOT_TABS","titleDict","aclTab","ACL","extraTabs","getSchedulingExtraTabs","extraOptions","extraRoutes","component","urlTemplate","tabSettings","external","formatByParams","ytCluster","ytPool","ytPoolTree","route","Route","makeTabProps","Tabs","active","DEFAULT_TAB","UI_TAB_SIZE","OVERVIEW","ATTRIBUTES","render","Placeholder","Redirect","to","pathname","search","getSchedulingIsFinalLoadingState","store","loaded","status","calculateLoadingStatus","headingBlock","SchedulingResources","getResources","resource","hammer","progress","makeError","PoolEditorDialog","_initialFormValues$ge2","_initialFormValues$ge3","_initialFormValues$re2","_initialFormValues$re3","_initialFormValues$re4","_initialFormValues$in","_initialFormValues$in2","_initialFormValues$in3","_initialFormValues$in4","editItem","getSchedulingEditItem","poolErrorData","editVisibility","treGpuLimit","allowedSources","getSchedulingSourcesOfEditItem","poolsItems","getPoolsSelectItems","initialFormValues","useMemo","getInitialValues","editCloseHandler","useCallback","editConfirmHandler","_asyncToGenerator","_regeneratorRuntime","mark","_callee","form","_form$getState","_context","prev","next","_initialFormValues$ge","POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE","_initialFormValues$re","POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR","_typeof","stop","_x","getCurrentUserName","hasWarning","setHasWarning","_React$useState3","_React$useState4","checkPermError","setCheckPermError","pathToCheck","checkUserPermissionsUI","newHasWarning","warningField","extras","checkPermErrorField","poolErrorDataField","transferNotice","parentPool","renderTransferQuotaNoticeForPool","isTopLevel","isTopLevelPool","useTransferNotice","integralTypeNotice","isAbcPoolName","_createQuotaReqTicket","createQuotaReqTicketUrl","queue","useChangeIntegralTypeNotice","YTDFDialog","onClose","headerProps","onAdd","required","disabled","hideFilter","MIN_VALUE","hidePrettyValue","initialLimit","Infinity","sourcesSkipParent","limitInputTitle","cpuStrong","decimalPlaces","gpuStrong","memoryStrong","burstCpu","burstGpu","flowCpu","flowGpu","validator","axis","SchedulingDialogsMemo","SchedulingDialogs","Scheduling","_state$scheduling$sch","hasError","errorData","useUpdater","Content","SchedulingMemo","SchedulingWithRum","isFinalState","deleteVisibility","deleteItem","deleteConfirmHandler","SCHEDULING_DELETE_POOL_REQUEST","remove","SCHEDULING_DELETE_POOL_SUCCESS","SCHEDULING_DELETE_POOL_FAILURE","deleteCloseHandler","SCHEDULING_CREATE_POOL_CANCELLED","closeDeleteModal","DeleteDialog","open","hasCloseButton","Header","Body","keys_","message","Footer","onClickButtonApply","onClickButtonCancel","propsButtonApply","textButtonCancel","textButtonApply","prepareAbcService","fetchCreatePoolDialogTreeItems","getPoolTrees","CREATE_POOL_DIALOG_TREE_ITEMS_SUCCESS","createPool","create","parent_name","abc","successContent","timeout","updateAcl","idmKind","responsible","waitWhilePoolIsReady","CREATE_POOL_DIALOG_TREE_CREATE_FAILURE","_createAdminReqTicket","createAdminReqTicketUrl","createUrl","CHECK_REDINESS_TIMEOUT","MAX_POOL_REDINESS_TIMEOUT","TIMEOUT_ERROR","startedTime","exists","allowRoot","uiSettings","schedulingDenyRootAsParent","CreatePoolButton","_useState","useState","_useState2","changeVisibility","handleShow","handleClose","CreatePoolDialog","treeStored","setTree","handleTreeChange","newTree","login","getTreesSelectItems","handleCreateConfirm","handleNameChange","validateForm","sortedIndexOf_","isApplyDisabled","errors","validate","pristineSubmittable","touched","docsUrl","docsUrls","isIdmAclAvailable","SchedulingTopRowContent","RowWithName","page","Page","urlParams","SchedulingFavourites","SchedulingPhysicalTree","SchedulingBreadcrumbs","renderTopRowExtraControlsForPool","itemClassName","favouritesPools","getFavouritePools","isActivePool","isActivePoolInFavourites","onFavouriteClick","onFavouriteToggle","parentNS","getSchedulingNS","toggleFavourite","togglePoolFavourites","Favourites","isActive","onToggle","toggleDisabled","CurrentPoolToClipboardButton","currentPoolPath","getCurrentPoolPath","shiftText","hoverContent","bcItems","history","useHistory","calcPathname","window","Breadcrumbs","Item","href","makeRoutedURL","preventDefault","JSON","stringify","EditableBreadcrumbs","onAction","keyText","parse","toString","showRoot","afterEditorContent","renderEditor","some_","_v","endsWith","Select","filterable","vals","SchedulingTopRowContentMemo","SchedulingTopRowContentWithError","compact","parseValue","rawValue","skipSpaces","formatValue","toRawValue","NumberInputWithError","_React$Component","_this","_len","args","_key","parsedValue","errorFromValue","formattedValue","setState","parsedError","focused","onKeyDown","keyCode","KeyCode","ENTER","onEnterKeyDown","this","parseFn","_this$props","_this$props2","defaultValue","_this$props3","showHint","showMin","showMax","placement","_this$props4","_this$props5","defaultValueClassName","TextInput","pin","bottomLineVisibility","_this$props6","propsValue","showDefaultValue","_this$state","getRestProps","hasClear","autoComplete","renderDefaultValue","isBottomLineVisible","renderPrettyValue","renderMinMaxHint","preciseInitialRawValue","formatted","_props$validator","integerOnly","defaultProps","NumberInput","_React$Component2","_this2","_len2","_key2","_this$props7","DialogError","makeErrorFields","FORM_ERROR","makeFormSubmitError","validationErrors","importYTDFDialog","Component","withLazyLoading","t0","sent","YTDialog","abrupt","mounted","setMounted","_callee2","_context2","RoleListControl","EditableList","_callee3","_context3","TabFieldVertical","_callee4","_context4","names","formatRegex","RegExp","test","dimension","trim","dimensionIndex","findIndex_","toUpperCase","floor","pow","compressionExtras","labels","subItemsMap","zlib_","genComperessionLevelItems","zstd_","brotli_","lzma_","bzip2_","compressionCodecValueFromString","SELECT_EMPTY_VALUE","compressionCodecValueToString","StorageOptions","REPLICATION","ERASURE","ERASURE_CODECS","storageOptionFromErasureCodec","codec","normalizeErasureCodec","erasureCodec","erasureCodecFromStorageOption","InMemoryMode","NONE","COMPRESSED","UNCOMPRESSED","makeUiMarker","ui_marker","prepareSetCommandForBatch","additionalParameters","force","CypressNodeTypes","REPLICATED_TABLE","REPLICATION_LOG_TABLE","CHAOS_REPLICATED_TABLE","MAP_NODE","TABLE","createParentsBeforeSet","_x2","_createParentsBeforeSet","nodePath","attributesToSet","parentPaths","toCreate","_iterator","_step","parents","_createForOfIteratorHelper","isCreated","s","n","done","delegateYield","t1","f","finish","oneLevelDiffsParents","oneLevelDiffs","attrPath","_attrPath$splice","last","parentPath","wrapBatchPromise","promises","p","updateAttributes","_x3","_x4","oneLevelDiff","modifyGuarantee","cloneDeep_","isExists","makeBatchSubRequest","setup","prepareAttributes","_partition_","partition_","_partition_2","paths","b","useRouteMatch","useRumMeasureStart","subPage","ICON_BY_TYPE","SortIcon","withUndefined","nextSortOrderValue","icon","awesome","face","disableEdit","withControls","cancelOnClose","openOnClick","saveButtonView","cancelButtonView","onModeChange","beforeEditorContent","breadcrumbsProps","EditableAsText","renderContent","contentProps","Box","endContent","marginLeft","renderEditButton","prepareRoleListValue","roles","otherMembers","toAdd","toRemove","unrecognized","isUnrecognized","isRequested","isApproved","isDepriving","currentArr","prepareItemOfCurrent","otherArr","frozen","newItems","role","extraProps","roleListValueToSubjectList","manyListDataItemToSubjectList","manyListDataItem","removed","extractChangedSubjects","added","group","_props$saveButtonView","_props$cancelButtonVi","editMode","setEditMode","setInput","useEffect","handleChangeMode","isEdit","closeEditMode","startTextEdit","handleChange","val","applyValue","closeAndResetValue","onApply","handleKeyDown","evt","controlSize","edit","controls","onMouseDown","inputProps","useCheckbox","controlProps","control","ControlLabel","labelClassName","TimeDuration","_value$error","parseTimeDuration","makeItems","y","w","M","h","m","ms","matchAll","_input$substring","substring","hasErrorRenderer","getDefaultValue","isEmpty","prepareColumnsNames","columnsPermissions","permission","flatten_","prepareApprovers","approvers","subject","extra","subjects","subjectType","groupInfo","group_name","getAllUserPermissions","acl","userPermissions","getAllObjectPermissions","getAllObjectPermissionsWithSplittedSubjects","isSplitted","subjectIndex","getObjectPermissionsTypesList","permissionsFilter","uniquePermisions","permissionTypes","getAclPermissionsSettings","permissions","sortBy_","subjectFilterPredicate","_item$subjects$","_str","str","pop","getAllObjectPermissionsFiltered","subjectFilter","_item$columns","mainPermissions","withColumns","lowerNameFilter","toLocaleLowerCase","filterBySubject","permissionsFilterSet","filterByPermissions","_permissionsFilterPre","foundCount","some","permissionsFilterPredicate","filterByColumns","_columns$some","colName","mainPredicates","columnsPredicates","concatByAnd","getObjectPermissionsAggregated","aggregateBySubject","AggregateBySubject","first","aggrKey","inherited","allPermissions","aggregationKey","_item$permissions","_child$permissions","_child$permissions2","_item$columns2","_this$first","_this$first2","_this$first3","_this$first4","isMissing","hasInherited","hasDenyAction","inheritance_mode","inheritedFrom","hasExpandable","objPermissions","aggregated","aggKey","_item$getItems","getItems","_partition_3","_partition_4","other","OrderByRoleStatus","getAllColumnGroupsActual","columnGroups","nameFilter","nameFilterLower","predicates","_item$columns$some","_item$columns3","_item$name$toLowerCas","_item$name","requested","depriving","getReadApprovers","readApprovers","getResponsibles","getAuditors","auditors","getNotInheritedReadApprovers","readApprover","getNotInheritedResponsibles","responsibles","getNotInheritedAuditors","auditros","auditro","getAllApprovers","getHasApprovers","getApproversFiltered","getApproversFilteredAndOrdered","getAllAccessColumnsPermissions","filteredPermissions","_permission$columns","getAllDenyColumnsPermissions","_permission$columns2","getAllAccessColumnsNames","getAllDenyColumnsNames","getDenyColumnsItems","isPermissionDeleted","permissionDeletionError","deletionError","getLastDeletedPermissionKey","deletedItemKey","getIdmPermissionsRequestError","idmPermissionsRequestError","getIdmManageAclRequestError","idmManageAclRequestError","getIdmPathVersion","version","progressBlock","ProgressInnerText","offset","transform","ProgressStackItem","modifiers","isFinite","backgroundColor","getOffset","getTheme","colorStops","colorStopsValue","matchingColorStopItem","currentValue","minValue","maxValue","ProgressWithStack","stackClassName","getValueFromStack","ProgressWithValue","isProgressWithStack","resolvedProps","PropTypes","counter","_Component","isClearClicked","isUnmounting","skipApplyForNextBlur","onTextUpdate","clear","loadSuggestions","showSuggestions","_this$props$onOpenCha","popupVisible","selectedIndex","onOpenChange","defaultText","prevItems","bind","hideSuggestions","clearSuggestions","_this$props$onFocus","_this$props$onBlur","_this$state$text","applySuggestion","selectNextSuggestion","selectPrevSuggestion","applyOrClearSuggestion","_this$input$current","blur","_this$props$onOpenCha2","_this$input$current2","_this$input$current3","itemIndex","getItemIndex","getItemValue","_this$state2","prevIndex","getSelectedIndex","_this$state3","nextIndex","controlRef","renderCounter","selected","_this$props8","template","renderItem","renderer","templates","__default__","renderSimpleItem","offsetWidth","maxItems","isNumber_","isObject_","totalAmount","groupPredicate","positiveGroup","negativeGroup","positiveGroupMaxItems","_this3","listClassName","showNoItemsMsg","getInputWidth","ReactList","itemRenderer","_this4","_this$props9","popupPlacement","restrictItems","Popup","anchorElement","renderSuggestions","renderInput","renderPopup","prevState","disable","zIndexGroupLevel","_ref$marginRight","headingCN","CollapsibleSectionStateLess","toggle","collapsed","overview","headingClassName","marginDirection","togglerRightPadding","clickable","setCollapsed"],"sourceRoot":""}