@ytsaurus/ui 1.75.1 → 1.77.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/public/build/assets-manifest.json +75 -75
- package/dist/public/build/css/{job.c7c99207.chunk.css → job.9757ff68.chunk.css} +2 -2
- package/dist/public/build/css/job.9757ff68.chunk.css.map +1 -0
- package/dist/public/build/css/main.0efa9da5.css +10 -0
- package/dist/public/build/css/main.0efa9da5.css.map +1 -0
- package/dist/public/build/css/navigation.c199c4f2.chunk.css +2 -0
- package/dist/public/build/css/navigation.c199c4f2.chunk.css.map +1 -0
- package/dist/public/build/js/{1260.534f3f75.chunk.js → 1260.a1e22005.chunk.js} +2 -2
- package/dist/public/build/js/{1260.534f3f75.chunk.js.map → 1260.a1e22005.chunk.js.map} +1 -1
- package/dist/public/build/js/{1879.23423388.chunk.js → 1879.3975650a.chunk.js} +3 -3
- package/dist/public/build/js/{1879.23423388.chunk.js.map → 1879.3975650a.chunk.js.map} +1 -1
- package/dist/public/build/js/{1983.666923be.chunk.js → 1983.64a2e22f.chunk.js} +2 -2
- package/dist/public/build/js/{1983.666923be.chunk.js.map → 1983.64a2e22f.chunk.js.map} +1 -1
- package/dist/public/build/js/{2447.b2877275.chunk.js → 2447.eb8fde89.chunk.js} +2 -2
- package/dist/public/build/js/{2447.b2877275.chunk.js.map → 2447.eb8fde89.chunk.js.map} +1 -1
- package/dist/public/build/js/3724.3e5848f0.chunk.js +2 -0
- package/dist/public/build/js/{3724.425d01ec.chunk.js.map → 3724.3e5848f0.chunk.js.map} +1 -1
- package/dist/public/build/js/6729.39d7cf60.chunk.js +2 -0
- package/dist/public/build/js/6729.39d7cf60.chunk.js.map +1 -0
- package/dist/public/build/js/{7959.95ebd185.chunk.js → 7959.faac2ff8.chunk.js} +2 -2
- package/dist/public/build/js/{7959.95ebd185.chunk.js.map → 7959.faac2ff8.chunk.js.map} +1 -1
- package/dist/public/build/js/{8390.83f4531a.chunk.js → 8390.c3d2de6a.chunk.js} +2 -2
- package/dist/public/build/js/{8390.83f4531a.chunk.js.map → 8390.c3d2de6a.chunk.js.map} +1 -1
- package/dist/public/build/js/{8460.2d4d237e.chunk.js → 8460.fc8e2238.chunk.js} +2 -2
- package/dist/public/build/js/{8460.2d4d237e.chunk.js.map → 8460.fc8e2238.chunk.js.map} +1 -1
- package/dist/public/build/js/{8778.e18e655b.chunk.js → 8778.f3ea089f.chunk.js} +2 -2
- package/dist/public/build/js/{8778.e18e655b.chunk.js.map → 8778.f3ea089f.chunk.js.map} +1 -1
- package/dist/public/build/js/{9558.a6ea64c9.chunk.js → 9558.6a4bf9a9.chunk.js} +2 -2
- package/dist/public/build/js/{9558.a6ea64c9.chunk.js.map → 9558.6a4bf9a9.chunk.js.map} +1 -1
- package/dist/public/build/js/9569.aac48f3b.chunk.js +2 -0
- package/dist/public/build/js/9569.aac48f3b.chunk.js.map +1 -0
- package/dist/public/build/js/{accounts.2ba221c2.chunk.js → accounts.aa7ed73f.chunk.js} +2 -2
- package/dist/public/build/js/accounts.aa7ed73f.chunk.js.map +1 -0
- package/dist/public/build/js/{acl.c948c339.chunk.js → acl.4cd54663.chunk.js} +2 -2
- package/dist/public/build/js/{acl.c948c339.chunk.js.map → acl.4cd54663.chunk.js.map} +1 -1
- package/dist/public/build/js/{app-navigation.b062662b.chunk.js → app-navigation.13c65573.chunk.js} +2 -2
- package/dist/public/build/js/app-navigation.13c65573.chunk.js.map +1 -0
- package/dist/public/build/js/chyt.0ee6bfa2.chunk.js +2 -0
- package/dist/public/build/js/chyt.0ee6bfa2.chunk.js.map +1 -0
- package/dist/public/build/js/cluster-page-wrapper.bdc8607f.chunk.js +2 -0
- package/dist/public/build/js/cluster-page-wrapper.bdc8607f.chunk.js.map +1 -0
- package/dist/public/build/js/{components.bbe331cb.chunk.js → components.b39828bc.chunk.js} +2 -2
- package/dist/public/build/js/components.b39828bc.chunk.js.map +1 -0
- package/dist/public/build/js/job.ea2ba82d.chunk.js +2 -0
- package/dist/public/build/js/job.ea2ba82d.chunk.js.map +1 -0
- package/dist/public/build/js/main.6375dbc6.js +3 -0
- package/dist/public/build/js/main.6375dbc6.js.map +1 -0
- package/dist/public/build/js/manage-tokens.e1e791fc.chunk.js +2 -0
- package/dist/public/build/js/manage-tokens.e1e791fc.chunk.js.map +1 -0
- package/dist/public/build/js/{navigation-flow.eeb01518.chunk.js → navigation-flow.6d67215a.chunk.js} +2 -2
- package/dist/public/build/js/{navigation-flow.eeb01518.chunk.js.map → navigation-flow.6d67215a.chunk.js.map} +1 -1
- package/dist/public/build/js/navigation.529208de.chunk.js +2 -0
- package/dist/public/build/js/navigation.529208de.chunk.js.map +1 -0
- package/dist/public/build/js/odin.c4c4ef6f.chunk.js +2 -0
- package/dist/public/build/js/odin.c4c4ef6f.chunk.js.map +1 -0
- package/dist/public/build/js/{path-viewer.b1b3328d.chunk.js → path-viewer.c091d9f4.chunk.js} +2 -2
- package/dist/public/build/js/{path-viewer.b1b3328d.chunk.js.map → path-viewer.c091d9f4.chunk.js.map} +1 -1
- package/dist/public/build/js/{query-navigation.9964bfcf.chunk.js → query-navigation.b1574290.chunk.js} +2 -2
- package/dist/public/build/js/{query-navigation.9964bfcf.chunk.js.map → query-navigation.b1574290.chunk.js.map} +1 -1
- package/dist/public/build/js/{query-results.733b1795.chunk.js → query-results.0a05cc41.chunk.js} +2 -2
- package/dist/public/build/js/{query-results.733b1795.chunk.js.map → query-results.0a05cc41.chunk.js.map} +1 -1
- package/dist/public/build/js/query-tracker.515069f6.chunk.js +2 -0
- package/dist/public/build/js/query-tracker.515069f6.chunk.js.map +1 -0
- package/dist/public/build/js/{runtime.481a6d3a.js → runtime.09217c31.js} +2 -2
- package/dist/public/build/js/{runtime.481a6d3a.js.map → runtime.09217c31.js.map} +1 -1
- package/dist/public/build/js/{scheduling.b70d4627.chunk.js → scheduling.6448eabd.chunk.js} +2 -2
- package/dist/public/build/js/{scheduling.b70d4627.chunk.js.map → scheduling.6448eabd.chunk.js.map} +1 -1
- package/dist/public/build/js/system.1114aa96.chunk.js +2 -0
- package/dist/public/build/js/system.1114aa96.chunk.js.map +1 -0
- package/dist/public/build/js/{yt-df-dialog.9ddda260.chunk.js → yt-df-dialog.4ad719bf.chunk.js} +2 -2
- package/dist/public/build/js/yt-df-dialog.4ad719bf.chunk.js.map +1 -0
- package/dist/public/build/manifest.json +70 -70
- package/dist/shared/constants/settings-types.d.ts +1 -0
- package/package.json +3 -2
- package/dist/public/build/css/job.c7c99207.chunk.css.map +0 -1
- package/dist/public/build/css/main.2d3cbfcd.css +0 -10
- package/dist/public/build/css/main.2d3cbfcd.css.map +0 -1
- package/dist/public/build/css/navigation.0a9042b3.chunk.css +0 -2
- package/dist/public/build/css/navigation.0a9042b3.chunk.css.map +0 -1
- package/dist/public/build/js/3724.425d01ec.chunk.js +0 -2
- package/dist/public/build/js/5177.b4cec253.chunk.js +0 -2
- package/dist/public/build/js/5177.b4cec253.chunk.js.map +0 -1
- package/dist/public/build/js/6729.da9aa02f.chunk.js +0 -2
- package/dist/public/build/js/6729.da9aa02f.chunk.js.map +0 -1
- package/dist/public/build/js/accounts.2ba221c2.chunk.js.map +0 -1
- package/dist/public/build/js/app-navigation.b062662b.chunk.js.map +0 -1
- package/dist/public/build/js/chyt.7f99f87d.chunk.js +0 -2
- package/dist/public/build/js/chyt.7f99f87d.chunk.js.map +0 -1
- package/dist/public/build/js/cluster-page-wrapper.894fbacc.chunk.js +0 -2
- package/dist/public/build/js/cluster-page-wrapper.894fbacc.chunk.js.map +0 -1
- package/dist/public/build/js/components.bbe331cb.chunk.js.map +0 -1
- package/dist/public/build/js/job.4fc50056.chunk.js +0 -2
- package/dist/public/build/js/job.4fc50056.chunk.js.map +0 -1
- package/dist/public/build/js/main.7981a440.js +0 -3
- package/dist/public/build/js/main.7981a440.js.map +0 -1
- package/dist/public/build/js/manage-tokens.286a4da9.chunk.js +0 -2
- package/dist/public/build/js/manage-tokens.286a4da9.chunk.js.map +0 -1
- package/dist/public/build/js/navigation.d891266d.chunk.js +0 -2
- package/dist/public/build/js/navigation.d891266d.chunk.js.map +0 -1
- package/dist/public/build/js/odin.df1cfe56.chunk.js +0 -2
- package/dist/public/build/js/odin.df1cfe56.chunk.js.map +0 -1
- package/dist/public/build/js/query-tracker.06cc4fdc.chunk.js +0 -2
- package/dist/public/build/js/query-tracker.06cc4fdc.chunk.js.map +0 -1
- package/dist/public/build/js/system.f759d3f0.chunk.js +0 -2
- package/dist/public/build/js/system.f759d3f0.chunk.js.map +0 -1
- package/dist/public/build/js/yt-df-dialog.9ddda260.chunk.js.map +0 -1
- /package/dist/public/build/js/{1879.23423388.chunk.js.LICENSE.txt → 1879.3975650a.chunk.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{main.7981a440.js.LICENSE.txt → main.6375dbc6.js.LICENSE.txt} +0 -0
package/dist/public/build/js/{scheduling.b70d4627.chunk.js.map → scheduling.6448eabd.chunk.js.map}
RENAMED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"js/scheduling.b70d4627.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/ClickableAttributesButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/CollapsibleSection/CollapsibleSection.tsx","webpack://@ytsaurus/ui/./src/ui/components/Dialog/controls/RoleListControl/utils.ts","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/components/EditableAsText/EditableAsText.tsx","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/ElementsTableFooter.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyFooter.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyHead.js","webpack://@ytsaurus/ui/./src/ui/components/Favourites/Favourites.tsx","webpack://@ytsaurus/ui/./src/ui/components/Text/Text.tsx","webpack://@ytsaurus/ui/./src/ui/pages/components/Placeholder.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.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/scheduling/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/controls/ShareUsageBar.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/scheduling/scheduling-ts.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/PoolMetaData.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/PoolStaticConfiguration/SchedulingStaticConfiguration.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/SchedulingOperationsError/SchedulingOperationsError.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/PoolsSuggest/PoolsSuggest.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/PoolTags.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/Overview.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/ElementsTableSticky.js","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Details/Details.js","webpack://@ytsaurus/ui/./src/ui/utils/scheduling/details.js","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/PoolAcl/PoolAcl.js","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/SchedulingExpandedPoolsUpdater.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/Content.js","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/rum/rum-app-measures.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/acl-filters.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/acl.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/chaos_cell_bundles/index.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/chyt/index.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/favourites.js","webpack://@ytsaurus/ui/./src/ui/utils/tablet_cell_bundles/index.ts"],"sourcesContent":["import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport AttributesButton, {AttributesButtonProps} from './AttributesButton';\n\nimport {openAttributesModal} from '../../store/actions/modals/attributes-modal';\nimport {ButtonProps} from '../Button/Button';\n\ninterface Props extends Omit<AttributesButtonProps, 'onClick' | 'title'> {\n title: React.ReactNode;\n\n // The function is called inside click handler, and overrides path and exactPath\n getPathProps?: () => Pick<Partial<Props>, 'path' | 'exactPath'>;\n path?: string;\n exactPath?: string;\n\n attribute?: string;\n attributes?: object;\n\n size?: ButtonProps['size'];\n view?: ButtonProps['view'];\n}\n\nfunction ClickableAttributesButton({\n title,\n getPathProps = () => {\n return {};\n },\n path,\n exactPath,\n attribute,\n attributes,\n openAttributesModal,\n withTooltip = true,\n tooltipProps = {placement: 'bottom-end', content: 'Show attributes'},\n ...rest\n}: Props & ConnectedProps<typeof connector>) {\n return (\n <AttributesButton\n {...rest}\n tooltipProps={tooltipProps}\n withTooltip={withTooltip}\n onClick={() => {\n const pathProps = {\n path,\n exactPath,\n ...getPathProps(),\n };\n\n openAttributesModal({\n title,\n ...pathProps,\n attribute,\n attributes,\n });\n }}\n />\n );\n}\n\nconst connector = connect(null, {openAttributesModal});\n\nexport default connector(ClickableAttributesButton);\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","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\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: 'Current', data: currentArr.concat(otherArr)},\n toAdd: {\n title: 'Will be added',\n itemClassName: block('item-to-add'),\n data: toAdd.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n toRemove: {\n title: 'Will be removed',\n itemClassName: block('item-to-remove'),\n data: toRemove.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n unrecognized: {\n 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 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 Block 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 <Block {...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 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\ninterface Props {\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 onModeChange?: (isEdit: boolean) => void;\n}\n\nexport function EditableAsText(props: Props) {\n const {\n children,\n onChange,\n text,\n className,\n withControls,\n size,\n disableEdit,\n cancelOnClose,\n openOnClick,\n renderEditor,\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 handleWrapClick = () => {\n if (!editMode && openOnClick) {\n startTextEdit();\n }\n };\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 <div\n className={block(null, [className || '', editMode ? 'edit' : ''])}\n onClick={handleWrapClick}\n >\n {editMode ? (\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 </>\n ) : (\n <React.Fragment>\n {children}\n {!disableEdit && (\n <Button\n className={block('control', {type: 'edit'})}\n view=\"outlined\"\n onClick={startTextEdit}\n size={controlSize}\n >\n <Icon awesome={'pencil'} size={controlSize} />\n </Button>\n )}\n </React.Fragment>\n )}\n </div>\n );\n}\n\nexport function EditButton({\n onClick,\n size = 'm',\n}: {\n onClick: () => void;\n size?: ButtonProps['size'];\n}) {\n return (\n <Button className={block('edit-btn')} onClick={onClick} size={size}>\n <Icon awesome={'pencil'} />\n </Button>\n );\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableRow from '../../components/ElementsTable/ElementsTableRow';\n\nimport {ELEMENTS_TABLE, TemplatesPropType, prepareColumnsData} from './utils';\n\nimport './ElementsTable.scss';\n\nexport default class ElementsTableFooter extends Component {\n static propTypes = {\n footer: PropTypes.object.isRequired,\n templates: TemplatesPropType.isRequired,\n cssHover: PropTypes.bool,\n };\n\n static defaultProps = {\n templates: {},\n cssHover: false,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {};\n }\n\n static getDerivedStateFromProps(props) {\n const {columns} = props;\n const {items, set} = prepareColumnsData(columns);\n\n return {\n columnItems: items,\n columnSet: set,\n };\n }\n\n renderRow(item, index, key = index) {\n const {css, itemHeight, templates, itemMods, selectedIndex, computeKey, cssHover} =\n this.props;\n const {columnSet, columnItems} = this.state;\n\n const selected = selectedIndex === index;\n const currentKey = typeof computeKey === 'function' ? computeKey(item) : key;\n\n return (\n <ElementsTableRow\n key={currentKey}\n columnSet={columnSet}\n columnItems={columnItems}\n item={item}\n itemHeight={itemHeight}\n css={css}\n templates={templates}\n selected={selected}\n index={index}\n itemMods={itemMods}\n cssHover={cssHover}\n />\n );\n }\n\n render() {\n const bFooter = block(ELEMENTS_TABLE)('footer');\n const {footer} = this.props;\n\n return <tfoot className={bFooter}>{this.renderRow(footer, 0)}</tfoot>;\n }\n}\n","import React from 'react';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableFooter from '../../../components/ElementsTable/ElementsTableFooter';\n\nimport {getDisplayName} from '../../../utils';\nimport {prepareTableClassName} from '../../../components/ElementsTable/utils';\n\nimport '../ElementsTable.scss';\n\nexport default (Component) => {\n return class WithStickyFooter extends React.Component {\n static displayName = `WithStickyFooter(${getDisplayName(Component)})`;\n\n static defaultProps = {\n size: 'm',\n };\n\n renderStickyFooter() {\n const bWrapper = block('elements-table-wrapper')({\n sticky: 'bottom',\n });\n const {footer} = this.props;\n\n return (\n <div className={bWrapper}>\n <table className={prepareTableClassName(this.props)}>\n <ElementsTableFooter {...this.props} footer={footer} />\n </table>\n </div>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n <Component {...this.props} />\n {this.props.footer && this.renderStickyFooter()}\n </React.Fragment>\n );\n }\n };\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\nimport {compose} from 'redux';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableHeader from '../../../components/ElementsTable/ElementsTableHeader';\n\nimport {toggleColumnSortOrder} from '../../../store/actions/tables';\nimport {getDisplayName} from '../../../utils';\nimport {prepareTableClassName} from '../../../components/ElementsTable/utils';\nimport {HEADER_HEIGHT} from '../../../constants/index';\n\nimport '../ElementsTable.scss';\n\nconst withStickyHead = (Component) => {\n return class WithStickyHead extends React.Component {\n static displayName = `WithStickyHead(${getDisplayName(Component)})`;\n\n static propTypes = {\n top: PropTypes.number,\n };\n\n static defaultProps = {\n templates: {},\n size: 'm',\n theme: 'bordered',\n padded: false,\n striped: true,\n top: HEADER_HEIGHT,\n };\n\n renderStickyHead() {\n const {top} = this.props;\n const bWrapper = block('elements-table-wrapper')({sticky: 'top'});\n\n return (\n <div className={bWrapper} style={{top}}>\n <table className={prepareTableClassName(this.props)}>\n <ElementsTableHeader {...this.props} />\n </table>\n </div>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n {this.renderStickyHead()}\n <Component {...this.props} />\n </React.Fragment>\n );\n }\n };\n};\n\nconst mapStateToProps = ({tables}) => {\n return {sortState: tables};\n};\n\nconst mapDispatchToProps = {\n toggleColumnSortOrder,\n};\n\nconst composedWithStickyHead = compose(\n connect(mapStateToProps, mapDispatchToProps),\n withStickyHead,\n);\n\nexport default composedWithStickyHead;\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {Button, ButtonProps, DropdownMenu} from '@gravity-ui/uikit';\n\nimport Icon from '../Icon/Icon';\nimport Hotkey from '../../components/Hotkey/Hotkey';\n\nimport './Favourites.scss';\n\nconst b = block('favourites');\n\ninterface Props {\n className?: string;\n isActive: boolean;\n items: Array<FavouritesItem>;\n onItemClick: (item: FavouritesItem) => void;\n toggleDisabled?: boolean;\n onToggle: () => void;\n theme?: 'clear';\n}\n\nexport interface FavouritesItem {\n path: string;\n}\n\ninterface State {\n isActive: boolean;\n}\n\nexport default class Favourites extends Component<Props, State> {\n static itemType = PropTypes.shape({\n path: PropTypes.string,\n });\n\n static propTypes = {\n isActive: PropTypes.bool.isRequired,\n items: PropTypes.arrayOf(Favourites.itemType),\n onItemClick: PropTypes.func,\n toggleDisabled: PropTypes.bool,\n onToggle: PropTypes.func,\n className: PropTypes.string,\n theme: PropTypes.string,\n };\n\n static getDerivedStateFromProps(props: Props, state: State) {\n if (props.isActive !== state.isActive) {\n return {isActive: props.isActive};\n }\n return null;\n }\n\n state = {\n isActive: this.props.isActive,\n };\n\n toggleActive = () => {\n const {onToggle} = this.props;\n\n this.setState((prevState) => ({isActive: !prevState.isActive}));\n onToggle();\n };\n\n onItemClick = (item: FavouritesItem) => {\n const {onItemClick} = this.props;\n onItemClick(item);\n };\n\n renderDropDownMenu() {\n const {items} = this.props;\n\n const dropItems = map_(items, (item) => {\n return {\n text: item.path,\n action: () => this.onItemClick(item),\n };\n });\n if (items.length === 0) {\n dropItems.push({\n action: () => {},\n text: 'No favourites',\n });\n }\n\n const switcher = this.renderButton({\n view: 'normal',\n size: 'm',\n pin: 'brick-round',\n title: 'View favourites',\n children: <Icon awesome=\"angle-down\" />,\n });\n\n return (\n <DropdownMenu\n popupProps={{\n className: b('popup', {empty: items.length === 0}),\n }}\n items={dropItems}\n switcher={switcher}\n />\n );\n }\n\n renderHotkey() {\n return <Hotkey settings={[{keys: 'f', handler: this.toggleActive, scope: 'all'}]} />;\n }\n\n renderButton(buttonProps: ButtonProps & {disabled?: boolean}) {\n const {theme} = this.props;\n const themeProps = !theme ? {} : {view: 'outlined' as const};\n return <Button {...buttonProps} {...themeProps} />;\n }\n\n render() {\n const {toggleDisabled, className, theme} = this.props;\n const {isActive} = this.state;\n\n return (\n <div className={b(null, className)}>\n <div className={b('star-btn', {clear: theme === 'clear'})}>\n {this.renderButton({\n view: 'outlined-info',\n selected: isActive,\n size: 'm',\n pin: theme === 'clear' ? 'round-brick' : 'round-clear',\n title: 'Add to favourites [F]',\n onClick: this.toggleActive,\n disabled: toggleDisabled,\n children: <Icon awesome={isActive ? 'star-alt' : 'star'} />,\n })}\n </div>\n {this.renderDropDownMenu()}\n {this.renderHotkey()}\n </div>\n );\n }\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport './Text.scss';\nimport unipika from '../../common/thor/unipika';\nimport {UNIPIKA_ESCAPED_SETTINGS} from '../../utils';\n\nconst block = cn('yt-text');\n\ninterface Props {\n className?: string;\n children: React.ReactNode;\n}\n\nexport function Secondary({children, disabled}: Props & {disabled?: boolean}) {\n return <span className={block('secondary', {disabled})}>{children}</span>;\n}\n\nexport function Bold({children}: Props) {\n return <span className={block('bold')}>{children}</span>;\n}\n\nexport function SecondaryBold({children}: Props) {\n return (\n <Secondary>\n <Bold>{children}</Bold>\n </Secondary>\n );\n}\n\nexport function Warning({children, className}: Props) {\n return <span className={block('warning', className)}>{children}</span>;\n}\n\nexport function WarningLight({children, className}: Props) {\n return <span className={block('warning-light', className)}>{children}</span>;\n}\n\nexport function NoWrap({children}: Props) {\n return <span className={block('no-wrap')}>{children}</span>;\n}\n\nexport function Escaped({text, onClick}: {text: string; onClick?: (e: React.MouseEvent) => void}) {\n const textNode = unipika.prettyprint(text, {\n ...UNIPIKA_ESCAPED_SETTINGS,\n asHTML: true,\n });\n return (\n <span\n onClick={onClick}\n className={block('escaped')}\n dangerouslySetInnerHTML={{__html: textNode}}\n />\n );\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","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 {Toaster} from '@gravity-ui/uikit';\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 {isSupportedSchedulingChildrenByPool} from '../../../store/selectors/thor/support';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {flattenAttributes} from '../../../utils/scheduling/scheduling';\nimport {UIBatchError} from '../../../utils/errors/ui-error';\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 'estimated_burst_usage_duration_sec',\n 'fair_share_ratio',\n 'fifo_index',\n 'fifo_sort_parameters',\n 'integral_guarantee_type',\n 'is_ephemeral',\n 'max_operation_count',\n 'max_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 'resource_usage',\n 'promised_fair_share_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 '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 new 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 || !isSupportedSchedulingChildrenByPool(state);\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 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: Object.keys(rawPools).length ? rawPools : 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, PoolInfo>,\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\nimport {Toaster} from '@gravity-ui/uikit';\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 type {PoolInfo} from '../../../store/selectors/scheduling/scheduling-pools';\nimport {\n getSchedulingAttributesToFilterParams,\n schedulingOverviewHasFilter,\n} from '../../../store/selectors/scheduling/attributes-to-filter';\nimport {USE_CACHE} from '../../../../shared/constants/yt-api';\n\nconst toaster = new Toaster();\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_fair_share_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?: PoolInfo): 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: PoolInfo): 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(abcServiceFilter: {\n id: number;\n slug: string;\n}): SchedulingThunkAction {\n return (dispatch, getState) => {\n dispatch(schedulingLoadFilterAttributes(getTree(getState())));\n dispatch({\n type: SCHEDULING_DATA_PARTITION,\n data: {abcServiceFilter},\n });\n };\n}\n","import 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 {Toaster} from '@gravity-ui/uikit';\n\n// @ts-expect-error\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {getSchedulingNS} from '../../../store/selectors/settings';\nimport {toggleFavourite} from '../../../store/actions/favourites';\nimport {getPools, getTree} from '../../../store/selectors/scheduling/scheduling';\nimport {\n POOL_GENERAL_TYPE_TO_ATTRIBUTE,\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_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';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\n\nconst toaster = new Toaster();\n\nconst setName = (path, newName, prevName) => {\n if (prevName === newName) {\n return Promise.resolve();\n }\n\n return yt.v3.set({path: `${path}/@name`}, newName);\n};\n\nconst makeOtherAttributesCommands = (path, values, initialValues) => {\n const initialSortParamsString = initialValues.fifoSortParams.join('|');\n const newSortParamsString = values.fifoSortParams.join('|');\n\n const commands = [];\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\nconst setResourceAttributes = (path, values, omittedValues, attribute) => {\n if (isEmpty_(values) && isEmpty_(omittedValues)) {\n return Promise.resolve();\n }\n\n const keyMapper = {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 yt.v3.set({path: `${path}/@${attribute}`}, input);\n })\n .catch((error) => {\n if (error.code === 500) {\n // attribute not found\n return yt.v3.set({path: `${path}/@${attribute}`}, preparedValues);\n }\n\n return Promise.reject(error);\n });\n};\n\nconst makeGeneralCommands = (path, values, initialValues) => {\n const isInitial = (value, initialValue) => value === initialValue;\n const isOmitted = (value, omittedValues) =>\n Object.prototype.hasOwnProperty.call(omittedValues, value);\n\n //const {name: abcServiceName, slug: abcServiceSlug, id} = prepareAbcService(values.abcService);\n const omittedValues = pickBy_(\n values,\n (value) => value === '' || value === undefined || value === null,\n );\n\n const commands = [];\n\n // if (!isInitial(abcServiceSlug, initialValues.abcService?.value)) {\n // commands.push({\n // command: abcServiceSlug ? 'set' : 'remove',\n // parameters: {\n // path: `${path}/@abc`,\n // },\n // input: !abcServiceSlug ? undefined : {\n // slug: abcServiceSlug,\n // name: abcServiceName,\n // id,\n // },\n // });\n // }\n\n if (!isInitial(values.mode, initialValues.mode)) {\n commands.push({\n command: 'set',\n parameters: {\n path: `${path}/@mode`,\n },\n input: values.mode,\n });\n }\n\n if (!isInitial(values.weight, initialValues.weight)) {\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),\n });\n }\n }\n\n return commands;\n};\n\nfunction isInvalidNumber(value) {\n return value === '' || isNaN(Number(value));\n}\n\nfunction isValidNumber(value) {\n return !isInvalidNumber(value);\n}\n\nexport function editPool(pool, values, initialValues) {\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 = pickBy_(values.resourceLimits, isValidNumber);\n const omittedResourceLimitsValues = pickBy_(values.resourceLimits, isInvalidNumber);\n const resourceLimitsValues = mapValues_(filteredResourceLimitsValues, (value) =>\n Number(value),\n );\n delete resourceLimitsValues['error-block'];\n delete omittedResourceLimitsValues['error-block'];\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 }),\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 ])\n .then(setName(path, values.general.name, initialValues.general.name))\n .then(() => {\n toaster.add({\n name: 'edit pool',\n timeout: 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 !== yt.codes.CANCELLED) {\n dispatch({\n type: SCHEDULING_EDIT_POOL_FAILURE,\n data: {error},\n });\n\n return Promise.reject(error);\n }\n });\n };\n}\n\nexport function openEditModal(item) {\n return {\n type: TOGGLE_EDIT_VISIBILITY,\n data: {\n visibility: true,\n item,\n },\n };\n}\n\nexport function closeEditModal({cancelled} = {}) {\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) {\n return (dispatch) => {\n dispatch({\n type: CHANGE_TREE,\n data: {tree},\n });\n\n dispatch(loadSchedulingData());\n };\n}\n\nexport function changeTableTreeState(treeState) {\n return {\n type: CHANGE_TABLE_TREE_STATE,\n data: {treeState},\n };\n}\n\nexport function changePool(pool) {\n return {\n type: CHANGE_POOL,\n data: {pool},\n };\n}\n\nexport function changeContentMode(evt) {\n return {\n type: CHANGE_CONTENT_MODE,\n data: {\n contentMode: evt.target.value,\n },\n };\n}\n\nexport function changePoolChildrenFilter(poolChildrenFilter) {\n return {\n type: CHANGE_POOL_CHILDREN_FILTER,\n data: {poolChildrenFilter},\n };\n}\n\nexport function togglePoolFavourites(pool, tree) {\n return (dispatch, getState) => {\n const value = `${pool}[${tree}]`;\n const parentNS = getSchedulingNS(getState());\n return dispatch(toggleFavourite(value, parentNS));\n };\n}\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 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 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 {PoolInfo, getPools} from './scheduling-pools';\n\nexport const getSchedulingBreadcrumbItems = createSelector(\n [getPool, getPools],\n (pool: string, pools: Array<PoolInfo>) => {\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\ninterface 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 getCurrentPoolStaticConfiguration = createSelector(\n [getIsRoot, getCurrentPool],\n (isRoot, data): Array<PoolStaticConfigurationItem> => {\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 makeStaticConfigurationItem(\n 'Strong guarantee',\n ypath.getValue(data.attributes, '/strong_guarantee_resources'),\n ),\n burst_guarantee_resources &&\n makeStaticConfigurationItem('Burst', burst_guarantee_resources),\n resource_flow && makeStaticConfigurationItem('Flow', resource_flow),\n ].filter(Boolean);\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 React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport capitalize_ from 'lodash/capitalize';\n\nimport format from '../../../common/hammer/format';\nimport ypath from '../../../common/thor/ypath';\n\nimport MetaTable from '../../../components/MetaTable/MetaTable';\nimport {useSelector} from 'react-redux';\nimport {getCurrentPool, getIsRoot} from '../../../store/selectors/scheduling/scheduling';\nimport UIFactory from '../../../UIFactory';\nimport {getClusterUiConfig} from '../../../store/selectors/global';\n\nconst block = cn('pool-meta-table');\n\ninterface Props {\n className?: string;\n}\n\nexport default function PoolMetaData({className}: Props) {\n const pool = useSelector(getCurrentPool);\n const isRoot = useSelector(getIsRoot);\n const clusterUiConfig = useSelector(getClusterUiConfig);\n\n if (!pool || isRoot) {\n return null;\n }\n\n const cpu = ypath.getNumber(pool, '/cypressAttributes/strong_guarantee_resources/cpu', 0);\n const gpu = ypath.getNumber(pool, '/cypressAttributes/strong_guarantee_resources/gpu', 0);\n const memory = ypath.getNumber(pool, '/cypressAttributes/strong_guarantee_resources/memory', 0);\n const hasStrong = cpu > 0 || gpu > 0 || memory > 0;\n\n const {integralType, mode} = pool;\n const hasIntegralType = integralType && integralType !== 'none';\n\n const guaranteeType = [hasStrong && 'Strong', hasIntegralType && capitalize_(integralType)]\n .filter(Boolean)\n .join(' + ');\n return (\n <div className={block(null, className)}>\n <MetaTable\n items={[\n {\n key: 'Guarantee type',\n value: guaranteeType || 'Strong',\n },\n {\n key: 'Mode',\n value: format.Readable(mode) || format.NO_VALUE,\n },\n ...(UIFactory.getExtraMetaTableItemsForPool({pool, clusterUiConfig}) || []),\n ]}\n />\n </div>\n );\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport {Column} from '@gravity-ui/react-data-table';\n\nimport CollapsibleSection from '../../../components/CollapsibleSection/CollapsibleSection';\nimport {getIsRoot, getTree} from '../../../store/selectors/scheduling/scheduling';\nimport {\n getCurrentPoolStaticConfiguration,\n getCurrentPoolTreeStaticConfiguration,\n} from '../../../store/selectors/scheduling/scheduling-ts';\n\nimport DataTableYT from '../../../components/DataTableYT/DataTableYT';\nimport format from '../../../common/hammer/format';\n\nimport './SchedulingStaticConfiguration.scss';\nimport {getSettingsSchedulingExpandStaticConfiguration} from '../../../store/selectors/settings-ts';\nimport {setSettingsSchedulingExpandStaticConfiguration} from '../../../store/actions/settings/settings';\nimport Label from '../../../components/Label/Label';\nimport UIFactory from '../../../UIFactory';\nimport PoolMetaData from '../Content/PoolMetaData';\nimport {getCluster} from '../../../store/selectors/global';\nimport {ArrayElement} from '../../../types';\n\nconst block = cn('scheduling-static-configuration');\n\ninterface Props {\n onToggleCollapsedState: (value: boolean) => void;\n}\n\nfunction SchedulingStaticConfiguration(props: Props) {\n const {onToggleCollapsedState} = props;\n const dispatch = useDispatch();\n const isRoot = useSelector(getIsRoot);\n\n const collapsed = useSelector(getSettingsSchedulingExpandStaticConfiguration);\n const onToggle = React.useCallback(\n (value: boolean) => {\n onToggleCollapsedState(value);\n dispatch(setSettingsSchedulingExpandStaticConfiguration(value));\n },\n [onToggleCollapsedState, dispatch],\n );\n\n return (\n <CollapsibleSection\n name={'Static configuration'}\n className={block()}\n onToggle={onToggle}\n collapsed={collapsed}\n >\n <div className={block('container')}>\n <PoolMetaData className={block('pool-meta')} />\n {isRoot ? <PoolTreeStaticConfiguration /> : <PoolStaticConfiguration />}\n </div>\n </CollapsibleSection>\n );\n}\n\nexport default React.memo(SchedulingStaticConfiguration);\n\nfunction PoolStaticConfiguration() {\n const staticConfigurationItems = useSelector(getCurrentPoolStaticConfiguration);\n\n const columns: Array<Column<ArrayElement<typeof staticConfigurationItems>>> = [\n {\n name: 'name',\n header: 'Guarantees',\n sortable: false,\n width: 200,\n },\n {\n name: 'cpu',\n header: 'CPU',\n sortable: false,\n width: 100,\n render: ({row}) => {\n const {cpu, cpuLabel} = row;\n if (cpuLabel) {\n return <Label capitalize text={cpuLabel} />;\n }\n return format['Number'](cpu);\n },\n align: 'right',\n },\n {\n name: 'gpu',\n header: 'GPU',\n sortable: false,\n width: 100,\n render: ({row}) => {\n return format['Number'](row.gpu);\n },\n align: 'right',\n },\n {\n name: 'memory',\n header: 'Memory',\n sortable: false,\n width: 120,\n render: ({row}) => {\n return format['Bytes'](row.memory);\n },\n align: 'right',\n },\n {\n name: 'user_slots',\n header: 'User slots',\n sortable: false,\n width: 100,\n render: ({row}) => {\n return format['Number'](row.user_slots);\n },\n align: 'right',\n },\n {\n name: 'network',\n header: 'Network',\n sortable: false,\n width: 100,\n render: ({row}) => {\n const res = format['Number'](row.network);\n return res === format.NO_VALUE ? res : res + ' %';\n },\n align: 'right',\n },\n ];\n\n return (\n <DataTableYT\n className={block('table')}\n columns={columns}\n data={staticConfigurationItems}\n useThemeYT={true}\n settings={{\n displayIndices: false,\n }}\n />\n );\n}\n\nfunction PoolTreeStaticConfiguration() {\n const items = useSelector(getCurrentPoolTreeStaticConfiguration);\n const poolTree = useSelector(getTree);\n const cluster = useSelector(getCluster);\n\n const columns: Array<Column<ArrayElement<typeof items>>> = [\n {\n name: 'name',\n header: '',\n sortable: false,\n width: 200,\n render: (row) => {\n const {name, level} = row?.row || {};\n return <span className={block('name', {level: level as any})}>{name}</span>;\n },\n },\n {\n name: 'total',\n header: 'Total',\n sortable: false,\n width: 100,\n render: ({row}) => {\n return format[row.format](row.total);\n },\n align: 'right',\n },\n {\n name: 'used',\n header: 'Distributed',\n sortable: false,\n width: 150,\n render({row}) {\n const {used, usedTitle, lastDayMaxValueSensor, lastDayMaxValueTitle} = row;\n const formatValue = format[row.format];\n\n const content = !lastDayMaxValueSensor\n ? null\n : UIFactory.renderSchedulingLastDayMaximum({\n cluster,\n tree: poolTree,\n title: lastDayMaxValueTitle,\n sensor: lastDayMaxValueSensor,\n format: formatValue,\n current: {\n value: formatValue(used),\n title: usedTitle!,\n },\n showHint: true,\n showAsLink: true,\n });\n\n return !content ? (\n formatValue(used)\n ) : (\n <span className={block('used-cell')}>\n {formatValue(used)} / {content}\n </span>\n );\n },\n align: 'right',\n },\n {\n name: 'free',\n header: 'Delta',\n sortable: false,\n width: 150,\n render({row}) {\n const formatFn = format[row.format];\n const {free, total, lastDayMaxValueSensor} = row;\n const freeValue = formatFn(free);\n\n const content = !lastDayMaxValueSensor\n ? null\n : UIFactory.renderSchedulingLastDayMaximum({\n cluster,\n tree: poolTree,\n title: 'Last day max operations',\n sensor: lastDayMaxValueSensor,\n format: (lastDayMaxValue?: number) => {\n const v =\n isNaN(total!) || isNaN(lastDayMaxValue!)\n ? undefined\n : total! - lastDayMaxValue!;\n return formatFn(v);\n },\n });\n\n return !content ? (\n freeValue\n ) : (\n <span>\n {freeValue} / {content}\n </span>\n );\n },\n align: 'right',\n },\n ];\n\n return (\n <DataTableYT\n className={block('table')}\n columns={columns}\n data={items}\n useThemeYT={true}\n settings={{\n displayIndices: false,\n }}\n rowClassName={(row) => {\n return !row?.level ? '' : block('row', {level: row.level as any});\n }}\n />\n );\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport ErrorBlock from '../../../../../components/Error/Error';\nimport {getSchedulingOperationsError} from '../../../../../store/selectors/scheduling/expanded-pools';\n\nfunction SchedulingOperationsError() {\n const error = useSelector(getSchedulingOperationsError);\n return !error ? null : <ErrorBlock error={error} topMargin={'none'} />;\n}\n\nexport default React.memo(SchedulingOperationsError);\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\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 {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport capitalize_ from 'lodash/capitalize';\n\nimport Label from '../../../../../components/Label/Label';\nimport UIFactory from '../../../../../UIFactory';\nimport {PoolInfo} from '../../../../../store/selectors/scheduling/scheduling-pools';\nimport {getCluster, getClusterUiConfig} from '../../../../../store/selectors/global';\n\nimport './PoolTags.scss';\n\nconst block = cn('scheduling-pool-tags');\n\nfunction PoolTags({pool}: {pool: PoolInfo}) {\n const cluster = useSelector(getCluster);\n const clusterUiConfig = useSelector(getClusterUiConfig);\n\n const {integralType} = pool;\n const showGuaranteeType = integralType === 'burst' || integralType === 'relaxed';\n const hasFlow = Number(pool.flowCPU) > 0 || Number(pool.flowGPU) > 0;\n return (\n <span className={block()}>\n {showGuaranteeType && (\n <Label\n className={block('tag')}\n text={capitalize_(integralType)}\n theme={'complementary'}\n />\n )}\n {!showGuaranteeType && hasFlow && (\n <Label className={block('tag')} text={'Integral'} theme={'complementary'} />\n )}\n {pool.mode === 'fifo' && (\n <Label className={block('tag')} text={'FIFO'} theme={'misc'} />\n )}\n {UIFactory.renderSchedulingTableItemExtraControls({\n cluster,\n pool,\n clusterUiConfig,\n })}\n </span>\n );\n}\n\nexport default React.memo(PoolTags);\n","import {Sticky, StickyContainer} from 'react-sticky';\nimport React, {Component, Fragment} from 'react';\nimport {connect, useDispatch, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport hammer from '../../../../../common/hammer';\nimport cn from 'bem-cn-lite';\nimport qs from 'qs';\n\nimport ElementsTable from '../../../../../components/ElementsTable/ElementsTable';\nimport {FormattedLink, FormattedText} from '../../../../../components/formatters';\n\nimport ClickableAttributesButton from '../../../../../components/AttributesButton/ClickableAttributesButton';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport Button from '../../../../../components/Button/Button';\nimport Label from '../../../../../components/Label/Label';\nimport Link from '../../../../../components/Link/Link';\nimport Icon from '../../../../../components/Icon/Icon';\n\nimport {\n changePool,\n changeTableTreeState,\n openEditModal,\n} from '../../../../../store/actions/scheduling/scheduling';\nimport {\n openPoolDeleteModal,\n schedulingSetAbcFilter,\n} from '../../../../../store/actions/scheduling/scheduling-ts';\nimport {\n getCurrentPool,\n getIsRoot,\n getSchedulingIsInitialLoading,\n getSchedulingOverviewMaxDepth,\n getSchedulingTreeState,\n getTableItems,\n getTree,\n} from '../../../../../store/selectors/scheduling/scheduling';\nimport {getSchedulingAbcFilter} from '../../../../../store/selectors/scheduling/attributes-to-filter';\nimport {SCHEDULING_POOL_TREE_TABLE_ID, Tab} from '../../../../../constants/scheduling';\nimport {poolsTableItems} from '../../../../../utils/scheduling/overviewTable';\nimport {HEADER_HEIGHT, Page} from '../../../../../constants/index';\nimport {getCluster} from '../../../../../store/selectors/global';\n\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {getSchedulingIsFinalLoadingState} from '../../../../../store/selectors/scheduling';\nimport ShareUsageBar from '../../controls/ShareUsageBar';\nimport SchedulingStaticConfiguration from '../../../PoolStaticConfiguration/SchedulingStaticConfiguration';\n\nimport './Overview.scss';\nimport {Dialog} from '@gravity-ui/uikit';\nimport {Tooltip} from '../../../../../components/Tooltip/Tooltip';\nimport SchedulingOperationsError from '../SchedulingOperationsError/SchedulingOperationsError';\nimport {\n getPoolPathsByName,\n getSchedulingOperationsCount,\n resetExpandedPools,\n setExpandedPools,\n setLoadAllOperations,\n} from '../../../../../store/actions/scheduling/expanded-pools';\nimport {PoolsSuggest} from '../../../../../pages/scheduling/PoolsSuggest/PoolsSuggest';\nimport PoolTags from './PoolTags';\nimport UIFactory from '../../../../../UIFactory';\n\nconst block = cn('scheduling-overview');\n\nconst STARVATION_STATUS_TO_THEME = {\n starving: 'warning',\n aggressively_starving: 'danger',\n};\n\nclass Overview extends Component {\n static resourcePropTypes = PropTypes.shape({\n type: PropTypes.string.isRequired,\n progress: PropTypes.object.isRequired,\n });\n\n static tableItemPropTypes = PropTypes.shape({\n abc: PropTypes.object,\n name: PropTypes.string.isRequired,\n fairShareRatio: PropTypes.number,\n usageRatio: PropTypes.number,\n weight: PropTypes.number,\n demandRatio: PropTypes.number,\n\n runningOperationCount: PropTypes.number,\n operationCount: PropTypes.number,\n children: PropTypes.array,\n level: PropTypes.number,\n type: PropTypes.string,\n mode: PropTypes.string,\n });\n\n static propTypes = {\n // from connect\n treeState: PropTypes.string.isRequired,\n cluster: PropTypes.string.isRequired,\n items: PropTypes.arrayOf(Overview.tableItemPropTypes).isRequired,\n currentPool: PropTypes.shape({\n name: PropTypes.string.isRequired,\n }),\n\n changePool: PropTypes.func.isRequired,\n openPoolDeleteModal: PropTypes.func.isRequired,\n schedulingSetFilter: PropTypes.func.isRequired,\n openEditModal: PropTypes.func.isRequired,\n changeTableTreeState: PropTypes.func.isRequired,\n schedulingSetAbcFilter: PropTypes.func.isRequired,\n\n isInitialLoading: PropTypes.bool,\n };\n\n static poolModeTheme = {\n fair_share: 'default',\n fifo: 'info',\n };\n\n static renderBars([share, usage] = [], {forceTheme = undefined, title = undefined}) {\n return (\n <ShareUsageBar\n className={block('bars')}\n shareValue={share?.value}\n shareTitle={share?.title}\n usageValue={usage?.value}\n usageTitle={usage?.title}\n forceTheme={forceTheme}\n title={title}\n />\n );\n }\n\n static renderRatio(data) {\n const EPSILON = 1e-6;\n\n if (data < EPSILON) {\n return 0;\n } else if (data === 1) {\n return 1;\n }\n\n return hammer.format['Number'](data, {digits: 6});\n }\n\n static renderMode(item) {\n if (item.mode) {\n const text = hammer.format['ReadableField'](item.mode);\n const theme = Overview.poolModeTheme[item.mode];\n\n return <Label text={text} theme={theme} />;\n }\n\n return hammer.format.NO_VALUE;\n }\n\n static renderWeight(item) {\n const {weightEdited} = item;\n const edited = !isNaN(weightEdited);\n return (\n <span className={block('weight-content', {edited})}>\n <Tooltip content={edited ? 'Explicitly defined' : 'Automatically calculated'}>\n {hammer.format['Number'](item.weight, {\n digits: 6,\n digitsOnlyForFloat: true,\n })}\n </Tooltip>\n </span>\n );\n }\n\n static renderColumnAsRatio(item, columnName) {\n const data = poolsTableItems[columnName].get(item);\n\n return Overview.renderRatio(data);\n }\n\n static renderFairShareUsage(item) {\n const barsData = [\n {\n value: item.fairShareRatio,\n title: 'Fair share',\n theme: 'success',\n },\n {\n value: item.usageRatio,\n title: 'Usage',\n theme: 'info',\n },\n ];\n\n const {starvation_status} = item;\n const forceTheme = STARVATION_STATUS_TO_THEME[starvation_status];\n\n return Overview.renderBars(barsData, {\n forceTheme,\n title: !forceTheme ? null : (\n <div className={block('starvation-status')}>\n <Label theme={forceTheme} text={hammer.format.Readable(starvation_status)} />\n </div>\n ),\n });\n }\n\n static renderOperationOverview(item) {\n const formatter = hammer.format['Number'];\n\n return formatter(item.runningOperationCount) + ' / ' + formatter(item.operationCount);\n }\n\n static renderAttributesButton(item, getPoolPaths) {\n const buttonProps = getPoolPaths\n ? {\n getPathProps: () => {\n return {\n exactPath: getPoolPaths(item.name).orchidPath,\n };\n },\n }\n : {\n attributes: item.attributes,\n };\n return <ClickableAttributesButton title={item.name} {...buttonProps} />;\n }\n\n static renderEditButton(item, onClick) {\n if (item.isEphemeral) {\n return null;\n }\n const title = `edit pool ${item?.name || ''}`;\n return (\n <Button title={title} size=\"s\" view=\"flat-secondary\" onClick={onClick}>\n <Icon awesome=\"pencil\" />\n </Button>\n );\n }\n\n static renderFifoIndex(item) {\n if (item.fifoIndex === undefined || item.type !== 'operation') {\n return '';\n } else {\n return item.fifoIndex;\n }\n }\n\n static renderDeleteButton(item, onClick) {\n if (item.isEphemeral) {\n return null;\n }\n return (\n <Button size=\"s\" view=\"flat-secondary\" onClick={onClick}>\n <Icon awesome=\"trash-bin\" />\n </Button>\n );\n }\n\n static renderType(item, columnName, toggleItemState, itemState, allowExpand = true) {\n const icon = {\n pool: 'tasks',\n operation: 'code',\n };\n\n const empty = allowExpand && itemState ? itemState.empty : true;\n const expanderClass = block('table-row-expander', {empty});\n const expanderClassIcon = block('table-row-expander-icon', {empty});\n\n const expanderIcon = itemState && (\n <Icon\n className={expanderClassIcon}\n awesome={itemState.collapsed ? 'angle-down' : 'angle-up'}\n />\n );\n\n return (\n <span onClick={empty ? undefined : toggleItemState} className={expanderClass}>\n {item.type !== 'operation' && expanderIcon}\n <span\n className={block('operation-icon', {\n type: item.type,\n })}\n title={item.type}\n >\n {icon[item.type] ? <Icon awesome={icon[item.type]} /> : null}\n </span>\n </span>\n );\n }\n\n static renderName(item, tab, cluster, currentPool) {\n const isCurrentPool = item.name === currentPool.name;\n const linkText = {\n pool: item.incomplete ? '' : item.name,\n operation: item.id,\n };\n\n if (item.type === 'pool') {\n if (isCurrentPool) {\n return <FormattedText text={linkText[item.type]} />;\n } else {\n const params = qs.parse(window.location.search.slice(1));\n const text = linkText[item.type];\n const state = {\n ...params,\n tab,\n cluster,\n pool: item.name,\n page: Page.SCHEDULING,\n };\n return <FormattedLink text={text} state={state} theme=\"primary\" routed />;\n }\n } else if (item.type === 'operation') {\n const url = `/${cluster}/operations/${item.id}`;\n return <Link url={url}>{linkText[item.type]}</Link>;\n } else {\n return <FormattedText text={item.name} />;\n }\n }\n\n static renderEphemeralIcon(item) {\n return (\n item.isEphemeral && (\n <Tooltip content=\"Ephemeral pool\" className={block('ephemeral-icon')}>\n <Icon awesome=\"ghost\" />\n </Tooltip>\n )\n );\n }\n\n static renderDominantResource(item) {\n return hammer.format['ReadableField'](item.dominantResource);\n }\n\n static renderMinShare(item) {\n return Overview.renderRatio(item.minShareRatio);\n }\n\n renderNameCell = (item, ...rest) => {\n const {cluster, currentPool, changePool, itemsMaxDepth} = this.props;\n const allowExpand = item.name !== currentPool.name;\n\n return (\n <span\n className={block('name-content', {\n level: item.level,\n 'max-depth': itemsMaxDepth,\n })}\n >\n {Overview.renderType(item, ...rest, allowExpand)}\n <span className={block('name-content-name')}>\n {Overview.renderName(item, Tab.OVERVIEW, cluster, currentPool, changePool)}\n </span>\n {Overview.renderEphemeralIcon(item)}\n <PoolTags pool={item} />\n </span>\n );\n };\n\n renderActions = (item) => {\n const {openEditModal, openPoolDeleteModal, getPoolPathsByName} = this.props;\n\n if (item.aggregation) {\n return;\n }\n\n if (item.type !== 'pool') {\n return Overview.renderAttributesButton(item);\n }\n\n const handleEditClick = () => openEditModal(item);\n const handleDeleteClick = () => openPoolDeleteModal(item);\n\n return (\n <Fragment>\n {Overview.renderAttributesButton(item, getPoolPathsByName)}\n \n {Overview.renderEditButton(item, handleEditClick)}\n \n {Overview.renderDeleteButton(item, handleDeleteClick)}\n </Fragment>\n );\n };\n\n get tableSettings() {\n const {treeState} = this.props;\n\n return {\n treeState,\n css: block(),\n theme: 'light',\n striped: false,\n tableId: SCHEDULING_POOL_TREE_TABLE_ID,\n tree: true,\n columns: {\n items: poolsTableItems,\n sets: {\n default: {\n items: [\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 },\n },\n mode: 'default',\n },\n templates: {\n name: this.renderNameCell,\n mode: Overview.renderMode,\n FI: Overview.renderFifoIndex,\n weight: Overview.renderWeight,\n fair_share: Overview.renderColumnAsRatio,\n usage: Overview.renderColumnAsRatio,\n demand: Overview.renderColumnAsRatio,\n min_share: Overview.renderMinShare,\n fair_share_usage: Overview.renderFairShareUsage,\n dominant_resource: Overview.renderDominantResource,\n operation_overview: Overview.renderOperationOverview,\n actions: this.renderActions,\n },\n computeKey(item) {\n return item.key;\n },\n };\n }\n\n renderToolbar() {\n return (\n <Sticky topOffset={-HEADER_HEIGHT}>\n {({isSticky}) => (\n <div className={block('toolbar', {sticky: isSticky})}>\n <SchedulingOverviewToolbar {...this.props} />\n </div>\n )}\n </Sticky>\n );\n }\n\n rowClassName = (item) => {\n const {currentPool} = this.props;\n return item.name !== currentPool?.name ? undefined : block('current-row');\n };\n\n render() {\n const {items, treeStateExpanded, isInitialLoading} = this.props;\n\n return (\n <ErrorBoundary>\n <div className={block(null, 'elements-section')}>\n <SchedulingStaticConfiguration onToggleCollapsedState={fireResizeEvent} />\n <StickyContainer>\n {this.renderToolbar()}\n <SchedulingOperationsError />\n <ResetExpandedPoolsOnTreeChange>\n <ElementsTable\n {...this.tableSettings}\n treeStateExpanded={treeStateExpanded}\n items={items}\n rowClassName={this.rowClassName}\n onItemToggleState={this.onItemToggleState}\n isLoading={isInitialLoading}\n />\n </ResetExpandedPoolsOnTreeChange>\n </StickyContainer>\n </div>\n </ErrorBoundary>\n );\n }\n\n onItemToggleState = (poolPath, collapsed) => {\n const {setExpandedPools} = this.props;\n const parts = poolPath.split('/');\n const poolName = parts[parts.length - 1];\n\n setExpandedPools({[poolName]: !collapsed});\n };\n}\n\nconst mapStateToProps = (state) => {\n const items = getTableItems(state);\n const itemsMaxDepth = getSchedulingOverviewMaxDepth(state);\n const cluster = getCluster(state);\n const currentPool = getCurrentPool(state);\n const treeState = getSchedulingTreeState(state);\n const isRoot = getIsRoot(state);\n\n const isInitialLoading = getSchedulingIsInitialLoading(state);\n\n return {\n cluster,\n items,\n itemsMaxDepth,\n currentPool,\n treeState,\n treeStateExpanded: isRoot || !items[0] ? undefined : [items[0].key],\n abcServiceFilter: getSchedulingAbcFilter(state),\n isInitialLoading,\n };\n};\n\nconst mapDispatchToProps = {\n changePool,\n openPoolDeleteModal,\n openEditModal,\n changeTableTreeState,\n schedulingSetAbcFilter,\n setExpandedPools,\n getSchedulingOperationsCount,\n setLoadAllOperations,\n getPoolPathsByName,\n};\n\nfunction fireResizeEvent() {\n setTimeout(() => window.dispatchEvent(new Event('resize')), 500);\n}\n\nconst OverviewConnected = connect(mapStateToProps, mapDispatchToProps)(Overview);\n\nexport default OverviewConnected;\n\nexport function OverviewWithRum() {\n const isFinalState = useSelector(getSchedulingIsFinalLoadingState);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.SCHEDULING_OVERVIEW,\n additionalStartType: RumMeasureTypes.SCHEDULING,\n startDeps: [isFinalState],\n allowStart: ([isFinal]) => {\n return !isFinal;\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.SCHEDULING_OVERVIEW,\n stopDeps: [isFinalState],\n allowStop: ([isFinal]) => {\n return isFinal;\n },\n });\n\n return <OverviewConnected />;\n}\n\nfunction ResetExpandedPoolsOnTreeChange({children}) {\n const dispatch = useDispatch();\n const tree = useSelector(getTree);\n /**\n * The component is required to reset inner state of ElementsTable by recreate it when tree is changed.\n * Also it resets state when the tab is changed back from 'Details'\n * These resets are required to sync store.getState().schedulingOperations.expandedPools and state of ElementsTable\n * to correctly calculate current max depth of items (see getSchedulingOverviewMaxDepth)\n */\n React.useEffect(() => {\n dispatch(resetExpandedPools(tree));\n }, [tree]);\n\n return <React.Fragment key={tree}>{children}</React.Fragment>;\n}\n\nclass SchedulingOverviewToolbar extends React.PureComponent {\n state = {\n confirmExpandDialogVisible: false,\n };\n\n handleExpand = () => {\n const opCount = this.props.getSchedulingOperationsCount();\n if (opCount <= 2000) {\n this.onConfirmExpand();\n } else {\n this.setConfirmDialogVisibility(true);\n }\n };\n onConfirmExpand = () => {\n const {setLoadAllOperations} = this.props;\n setLoadAllOperations(true);\n this.props.changeTableTreeState('expanded');\n };\n handleCollapse = () => {\n const {setLoadAllOperations} = this.props;\n setLoadAllOperations(true);\n this.props.changeTableTreeState('collapsed');\n };\n\n onAbcServiceFilter = (abcService) => {\n const {slug, id} = abcService || {};\n this.props.schedulingSetAbcFilter({id, slug});\n };\n\n setConfirmDialogVisibility = (confirmExpandDialogVisible) => {\n this.setState({confirmExpandDialogVisible});\n };\n\n renderConfirmExpandDialog() {\n const {confirmExpandDialogVisible} = this.state;\n return !confirmExpandDialogVisible ? null : (\n <Dialog open={true}>\n <Dialog.Header caption={'Confirmation of \"Expand all\"'} />\n <Dialog.Body>\n To display the expanded tree it is required to load all running operations, it\n might be a reason of less responsiveness UI.\n <div>Are you sure you want to load all running operations?</div>\n </Dialog.Body>\n <Dialog.Footer\n onClickButtonApply={() => {\n this.setConfirmDialogVisibility(false);\n this.onConfirmExpand();\n }}\n onClickButtonCancel={() => this.setConfirmDialogVisibility(false)}\n textButtonCancel={'No'}\n textButtonApply={'Yes, please expand'}\n />\n </Dialog>\n );\n }\n\n render() {\n const {\n abcServiceFilter: {slug},\n } = this.props;\n\n return (\n <React.Fragment>\n {this.renderConfirmExpandDialog()}\n <PoolsSuggest className={block('filter')} />\n\n {UIFactory.renderControlAbcService({\n className: block('abc-filter'),\n value: {slug},\n onChange: this.onAbcServiceFilter,\n })}\n\n <Button\n size=\"m\"\n className={block('toolbar-button')}\n theme=\"normal\"\n title=\"Expand All\"\n onClick={this.handleExpand}\n >\n <Icon awesome=\"arrow-to-bottom\" />\n </Button>\n\n <Button size=\"m\" theme=\"normal\" title=\"Collapse All\" onClick={this.handleCollapse}>\n <Icon awesome=\"arrow-to-top\" />\n </Button>\n </React.Fragment>\n );\n }\n}\n","import React from 'react';\nimport {compose} from 'redux';\n\nimport withStickyHead from '../../components/ElementsTable/hocs/withStickyHead';\nimport withStickyFooter from '../../components/ElementsTable/hocs/withStickyFooter';\nimport ElementsTableBase from '../../components/ElementsTable/ElementsTable';\n\nconst ElementsTable = compose(withStickyHead, withStickyFooter)(ElementsTableBase);\n\nfunction ElementsTableSticky(props) {\n return <ElementsTable {...props} />;\n}\n\nexport default ElementsTableSticky;\n","import React, {Component, Fragment} from 'react';\nimport {Sticky, StickyContainer} from 'react-sticky';\nimport {connect, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport hammer from '../../../../../common/hammer';\nimport cn from 'bem-cn-lite';\n\nimport {Progress} from '@gravity-ui/uikit';\n\nimport ElementsTableSticky from '../../../../../components/ElementsTable/ElementsTableSticky';\nimport Overview from '../../../../../pages/scheduling/Content/tabs/Overview/Overview';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport RadioButton from '../../../../../components/RadioButton/RadioButton';\nimport Filter from '../../../../../components/Filter/Filter';\n\nimport {\n changeContentMode,\n changePool,\n changePoolChildrenFilter,\n openEditModal,\n} from '../../../../../store/actions/scheduling/scheduling';\nimport {openPoolDeleteModal} from '../../../../../store/actions/scheduling/scheduling-ts';\nimport {SCHEDULING_POOL_CHILDREN_TABLE_ID, Tab} from '../../../../../constants/scheduling';\nimport {calculateTotalOverPools} from '../../../../../utils/scheduling/details';\nimport {childTableItems} from '../../../../../utils/scheduling/detailsTable';\nimport {HEADER_HEIGHT} from '../../../../../constants/index';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport {\n getContentMode,\n getCurrentPool,\n getPollChildrenTableItems,\n getPoolChildrenFilter,\n getSchedulingIsInitialLoading,\n getSortedPoolChildren,\n} from '../../../../../store/selectors/scheduling/scheduling';\n\nimport {getSchedulingIsFinalLoadingState} from '../../../../../store/selectors/scheduling';\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {getProgressTheme} from '../../../../../utils/progress';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\nimport {Tooltip} from '../../../../../components/Tooltip/Tooltip';\nimport {Bold, Secondary} from '../../../../../components/Text/Text';\n\nimport SchedulingOperationsError from '../SchedulingOperationsError/SchedulingOperationsError';\nimport {getPoolPathsByName} from '../../../../../store/actions/scheduling/expanded-pools';\n\nimport PoolTags from '../Overview/PoolTags';\n\nimport './Details.scss';\n\nconst block = cn('scheduling-details');\n\nclass Details extends Component {\n static renderDominantResource(item) {\n return hammer.format['ReadableField'](item.dominantResource);\n }\n\n static renderMinShare(item) {\n return Overview.renderRatio(item.minShareRatio);\n }\n\n static renderMaxShare(item) {\n return Overview.renderRatio(item.maxShareRatio);\n }\n\n static renderColumnAsRatio(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return Overview.renderRatio(data);\n }\n\n static renderColumnAsNumber(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return hammer.format['Number'](data);\n }\n\n static renderMaxOperationCount(item) {\n const {maxOperationCount, maxOperationCountEdited} = item;\n return Details.renderNumberWithEdited(maxOperationCount, maxOperationCountEdited);\n }\n\n static renderMaxRunningOperationCount(item) {\n const {maxRunningOperationCount, maxRunningOperationCountEdited} = item;\n return Details.renderNumberWithEdited(\n maxRunningOperationCount,\n maxRunningOperationCountEdited,\n );\n }\n\n static renderNumberWithEdited(value, editedValue) {\n const content = hammer.format.Number(value);\n\n const autoCalculated = isNaN(editedValue);\n return (\n <Tooltip content={autoCalculated ? 'Automatically calculated' : 'Explicitly defined'}>\n {autoCalculated ? <Secondary>{content}</Secondary> : <Bold>{content}</Bold>}\n </Tooltip>\n );\n }\n\n static renderColumnAsBytes(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return hammer.format['Bytes'](data);\n }\n\n static renderColumnAsFloatNumber(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return hammer.format['Number'](data, {\n digits: 2,\n digitsOnlyForFloat: true,\n });\n }\n\n static renderIntegralGuarantee(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n const {integralType} = item;\n const hasActiveGuarantee = integralType && integralType !== 'none';\n\n const value = hammer.format['Number'](data, {\n digits: 2,\n digitsOnlyForFloat: true,\n });\n\n return hasActiveGuarantee ? (\n value\n ) : (\n <Tooltip\n className={block('integral-guarantee', {\n inactive: !hasActiveGuarantee,\n })}\n content={'It is impossible to use the guarantee until \"Guarantee type\" is defined'}\n >\n {value}\n </Tooltip>\n );\n }\n\n static renderColumnAsReadable(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return hammer.format['ReadableField'](data);\n }\n\n static renderIntegralType(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return data === undefined\n ? hammer.format.NO_VALUE\n : Details.renderColumnAsReadable(item, columnName);\n }\n\n static renderAsProgress(item, columnName) {\n const value = childTableItems[columnName].get(item);\n const theme = getProgressTheme(value);\n const text = childTableItems[columnName].text(item);\n return isNaN(value) ? (\n hammer.format.NO_VALUE\n ) : (\n <Progress value={value * 100} theme={theme} text={text} />\n );\n }\n\n static childrenIntegrals(item, columnName) {\n const value = childTableItems[columnName].get(item);\n return !value\n ? hammer.format.NO_VALUE\n : hammer.format.Number(value, {\n digits: 2,\n digitsOnlyForFloat: true,\n });\n }\n\n static propTypes = {\n // from connect\n mode: PropTypes.string.isRequired,\n filter: PropTypes.string.isRequired,\n cluster: PropTypes.string.isRequired,\n currentPool: PropTypes.shape({\n name: PropTypes.string.isRequired,\n }),\n items: PropTypes.arrayOf(Overview.tableItemPropTypes).isRequired,\n children: PropTypes.arrayOf(Overview.tableItemPropTypes),\n\n changePoolChildrenFilter: PropTypes.func.isRequired,\n changeContentMode: PropTypes.func.isRequired,\n openEditModal: PropTypes.func.isRequired,\n openPoolDeleteModal: PropTypes.func.isRequired,\n changePool: PropTypes.func.isRequired,\n\n isInitialLoading: PropTypes.bool,\n };\n\n get columnsSets() {\n return {\n cpu: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'min_resources_cpu',\n 'abs_guaranteed_cpu',\n //'rel_guaranteed_cpu',\n 'abs_demand_cpu',\n 'resource_detailed_cpu',\n 'abs_usage_cpu',\n //'rel_usage_cpu',\n 'resource_limit_cpu',\n //'guaranteed_usage_cpu',\n 'actions',\n ],\n },\n memory: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'min_resources_memory',\n 'abs_guaranteed_memory',\n //'rel_guaranteed_memory',\n 'abs_demand_memory',\n 'resource_detailed_memory',\n 'abs_usage_memory',\n //'rel_usage_memory',\n 'resource_limit_memory',\n //'guaranteed_usage_memory',\n 'actions',\n ],\n },\n gpu: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'min_resources_gpu',\n 'abs_guaranteed_gpu',\n //'rel_guaranteed_gpu',\n 'abs_demand_gpu',\n 'resource_detailed_gpu',\n 'abs_usage_gpu',\n //'rel_usage_gpu',\n 'resource_limit_gpu',\n //'guaranteed_usage_gpu',\n 'actions',\n ],\n },\n user_slots: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'min_resources_user_slots',\n 'abs_guaranteed_user_slots',\n //'rel_guaranteed_user_slots',\n 'abs_demand_user_slots',\n 'resource_detailed_user_slots',\n 'abs_usage_user_slots',\n //'rel_usage_user_slots',\n 'resource_limit_user_slots',\n //'guaranteed_usage_user_slots',\n 'actions',\n ],\n },\n operations: {\n items: [\n 'name',\n 'FI',\n 'running_operation_count',\n 'max_running_operation_count',\n 'running_operation_progress',\n 'operation_count',\n 'max_operation_count',\n 'operation_progress',\n 'actions',\n ],\n },\n integral: {\n items: [\n 'name',\n 'FI',\n 'integral_type',\n 'burst_cpu',\n 'children_burst_cpu',\n 'flow_cpu',\n 'children_flow_cpu',\n 'accumulated',\n //'accumulated_cpu',\n 'burst_duration',\n 'actions',\n ],\n },\n };\n }\n\n get tableSettings() {\n const {mode, children} = this.props;\n const isCurrentPool = this.isCurrentPool;\n const totalRow = children?.length ? calculateTotalOverPools(children) : undefined;\n\n return {\n css: block(),\n theme: 'light',\n striped: false,\n tableId: SCHEDULING_POOL_CHILDREN_TABLE_ID,\n footer: totalRow,\n header: false,\n top: 99,\n columns: {\n items: childTableItems,\n sets: this.columnsSets,\n mode,\n },\n templates: {\n name: this.renderNameCell,\n mode: Overview.renderMode,\n FI: Overview.renderFifoIndex,\n weight: Overview.renderWeight,\n dominant_resource: Details.renderDominantResource,\n min_share: Details.renderMinShare,\n max_share: Details.renderMaxShare,\n operation_overview: Overview.renderOperationOverview,\n demand: Details.renderColumnAsRatio,\n fair_share: Details.renderColumnAsRatio,\n usage: Details.renderColumnAsRatio,\n fair_share_usage: Overview.renderFairShareUsage,\n\n resource_detailed_cpu: Details.renderColumnAsFloatNumber,\n resource_detailed_memory: Details.renderColumnAsBytes,\n resource_detailed_gpu: Details.renderColumnAsNumber,\n resource_detailed_user_slots: Details.renderColumnAsNumber,\n\n resource_limit_cpu: Details.renderColumnAsFloatNumber,\n resource_limit_memory: Details.renderColumnAsBytes,\n resource_limit_gpu: Details.renderColumnAsNumber,\n resource_limit_user_slots: Details.renderColumnAsNumber,\n\n min_resources_cpu: Details.renderColumnAsFloatNumber,\n min_resources_memory: Details.renderColumnAsBytes,\n min_resources_gpu: Details.renderColumnAsNumber,\n min_resources_user_slots: Details.renderColumnAsNumber,\n\n abs_guaranteed_cpu: Details.renderColumnAsFloatNumber,\n abs_guaranteed_memory: Details.renderColumnAsBytes,\n abs_guaranteed_gpu: Details.renderColumnAsFloatNumber,\n abs_guaranteed_user_slots: Details.renderColumnAsFloatNumber,\n\n abs_demand_cpu: Details.renderColumnAsNumber,\n abs_demand_memory: Details.renderColumnAsBytes,\n abs_demand_gpu: Details.renderColumnAsNumber,\n abs_demand_user_slots: Details.renderColumnAsNumber,\n\n abs_usage_cpu: Details.renderColumnAsNumber,\n abs_usage_memory: Details.renderColumnAsBytes,\n abs_usage_gpu: Details.renderColumnAsNumber,\n abs_usage_user_slots: Details.renderColumnAsNumber,\n\n rel_guaranteed_cpu: this.renderRelResource,\n rel_guaranteed_memory: this.renderRelResource,\n rel_guaranteed_gpu: this.renderRelResource,\n rel_guaranteed_user_slots: this.renderRelResource,\n\n rel_usage_cpu: this.renderRelResource,\n rel_usage_memory: this.renderRelResource,\n rel_usage_gpu: this.renderRelResource,\n rel_usage_user_slots: this.renderRelResource,\n\n guaranteed_usage_cpu: this.renderResourceBars,\n guaranteed_usage_memory: this.renderResourceBars,\n guaranteed_usage_gpu: this.renderResourceBars,\n guaranteed_usage_user_slots: this.renderResourceBars,\n\n running_operation_progress: Details.renderAsProgress,\n running_operation_count: Details.renderColumnAsNumber,\n operation_count: Details.renderColumnAsNumber,\n operation_progress: Details.renderAsProgress,\n max_running_operation_count: Details.renderMaxRunningOperationCount,\n max_operation_count: Details.renderMaxOperationCount,\n\n integral_type: Details.renderIntegralType,\n burst_cpu: Details.renderIntegralGuarantee,\n flow_cpu: Details.renderIntegralGuarantee,\n children_burst_cpu: Details.childrenIntegrals,\n children_flow_cpu: Details.childrenIntegrals,\n accumulated: Details.renderColumnAsRatio,\n accumulated_cpu: Details.renderColumnAsNumber,\n burst_duration: Details.renderColumnAsNumber,\n\n actions: this.renderActions,\n },\n computeKey(item) {\n return item.name;\n },\n itemMods(item) {\n return {\n current: isCurrentPool(item) ? 'yes' : '',\n aggregation: item.aggregation ? 'yes' : '',\n };\n },\n };\n }\n\n renderResourceBars = (item, columnName) => {\n const isCurrentPool = this.isCurrentPool(item);\n\n if (isCurrentPool) {\n return hammer.format.NO_VALUE;\n }\n\n const {currentPool} = this.props;\n const resourceData = childTableItems[columnName].get(item, currentPool);\n const barsData = [\n {\n value: resourceData.guaranteed,\n title: 'Guaranteed share',\n theme: 'success',\n },\n {\n value: resourceData.usage,\n title: 'Usage',\n theme: 'info',\n },\n ];\n\n return Overview.renderBars(barsData);\n };\n\n renderRelResource = (item, columnName) => {\n const isCurrentPool = this.isCurrentPool(item);\n\n if (isCurrentPool) {\n return hammer.format.NO_VALUE;\n }\n\n const {currentPool} = this.props;\n const data = childTableItems[columnName].get(item, currentPool);\n\n return Overview.renderRatio(data);\n };\n\n renderNameCell = (item, ...rest) => {\n const {cluster, currentPool, changePool} = this.props;\n\n return (\n <span className={block('name-cell', {child: item.isChildPool})}>\n {Overview.renderType(item, ...rest)}\n <span className={block('name-cell-text')}>\n {Overview.renderName(item, Tab.DETAILS, cluster, currentPool, changePool)}\n </span>\n {Overview.renderEphemeralIcon(item)}\n <PoolTags pool={item} />\n </span>\n );\n };\n\n renderActions = (item) => {\n const {openEditModal, openPoolDeleteModal, getPoolPathsByName} = this.props;\n\n if (item.aggregation) {\n return;\n }\n\n if (item.type !== 'pool') {\n return Overview.renderAttributesButton(item);\n }\n\n const handleEditClick = () => openEditModal(item);\n const handleDeleteClick = () => openPoolDeleteModal(item);\n\n return (\n <Fragment>\n {Overview.renderAttributesButton(item, getPoolPathsByName)}\n \n {Overview.renderEditButton(item, handleEditClick)}\n \n {Overview.renderDeleteButton(item, handleDeleteClick)}\n </Fragment>\n );\n };\n\n isCurrentPool = (item) => item.name === this.props.currentPool.name;\n\n renderToolbar() {\n const {filter, mode, changePoolChildrenFilter, changeContentMode, currentPool} = this.props;\n\n return (\n <Sticky topOffset={-HEADER_HEIGHT}>\n {({isSticky}) => (\n <div className={block('toolbar', {sticky: isSticky})}>\n <Filter\n key={currentPool?.name}\n size=\"m\"\n value={filter}\n placeholder=\"Filter...\"\n className={block('filter')}\n onChange={changePoolChildrenFilter}\n />\n\n <RadioButton\n size=\"m\"\n value={mode}\n onChange={changeContentMode}\n name=\"navigation-tablets-mode\"\n items={[\n {\n value: 'cpu',\n text: 'CPU',\n },\n {\n value: 'memory',\n text: 'Memory',\n },\n {\n value: 'gpu',\n text: 'GPU',\n },\n {\n value: 'user_slots',\n text: 'User slots',\n },\n {\n value: 'operations',\n text: 'Operations',\n },\n {\n value: 'integral',\n text: 'Integral guarantees',\n },\n ]}\n />\n </div>\n )}\n </Sticky>\n );\n }\n\n render() {\n const {items, mode, isInitialLoading} = this.props;\n\n return (\n <ErrorBoundary>\n <div className={block()}>\n <StickyContainer>\n {this.renderToolbar()}\n <SchedulingOperationsError />\n <ElementsTableSticky\n cssTableMods={{mode}}\n {...this.tableSettings}\n items={items}\n isLoading={isInitialLoading}\n />\n </StickyContainer>\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const currentPool = getCurrentPool(state);\n const items = getPollChildrenTableItems(state);\n const mode = getContentMode(state);\n const filter = getPoolChildrenFilter(state);\n const cluster = getCluster(state);\n const children = getSortedPoolChildren(state);\n\n const isInitialLoading = getSchedulingIsInitialLoading(state);\n\n return {currentPool, mode, filter, items, children, cluster, isInitialLoading};\n};\n\nconst mapDispatchToProps = {\n changePoolChildrenFilter,\n changeContentMode,\n openEditModal,\n openPoolDeleteModal,\n changePool,\n getPoolPathsByName,\n};\n\nconst DetailsConnected = connect(mapStateToProps, mapDispatchToProps)(Details);\n\nexport default function DetailsWithRum() {\n const isFinalState = useSelector(getSchedulingIsFinalLoadingState);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.SCHEDULING_DETAILS,\n additionalStartType: RumMeasureTypes.SCHEDULING,\n startDeps: [isFinalState],\n allowStart: ([isFinal]) => {\n return !isFinal;\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.SCHEDULING_DETAILS,\n stopDeps: [isFinalState],\n allowStop: ([isFinal]) => {\n return isFinal;\n },\n });\n\n return <DetailsConnected />;\n}\n","import hammer from '../../common/hammer';\n\nexport function calculateTotalOverPools(pools) {\n const summedProperties = [\n 'weight',\n 'minShareRatio',\n 'demandRatio',\n 'fairShareRatio',\n 'usageRatio',\n 'maxOperationCount',\n 'maxRunningOperationCount',\n 'runningOperationCount',\n 'operationCount',\n ].map((name) => ({name, type: 'sum'}));\n\n ['cpu', 'user_memory', 'gpu', 'user_slots'].forEach((resource) => {\n ['min', 'guaranteed', 'usage', 'demand'].forEach((metric) => {\n const name = ['resources', resource, metric].join('.');\n summedProperties.push({name, type: 'nested/sum'});\n });\n });\n\n // We can aggregate only pools with resources\n const items = pools.filter((pool) => Boolean(pool.resources));\n\n return Object.assign(hammer.aggregation.prepare(items, summedProperties)[0], {\n key: 'aggregation',\n name: 'Aggregation',\n type: 'aggregation',\n aggregation: true,\n });\n}\n","import React from 'react';\nimport {connect, useSelector} from 'react-redux';\n\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport {NoContent} from '../../../../../components/NoContent/NoContent';\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 {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}) {\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) => {\n return {\n loadState: getAclLoadState(state, IdmObjectType.POOL),\n };\n};\n\nexport default connect(mapStateToProps)(PoolAclWithRum);\n","import React from 'react';\nimport {getPool, getTree} from '../../../store/selectors/scheduling/scheduling';\nimport {useDispatch, useSelector} from 'react-redux';\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';\nimport PropTypes from 'prop-types';\nimport {useSelector} from 'react-redux';\nimport {Redirect, Route, Switch, withRouter} from 'react-router';\nimport cn from 'bem-cn-lite';\n\nimport reduce_ from 'lodash/reduce';\n\nimport Tabs from '../../../components/Tabs/Tabs';\nimport Placeholder from '../../../pages/components/Placeholder';\nimport {OverviewWithRum} from '../../../pages/scheduling/Content/tabs/Overview/Overview';\nimport Details from '../../../pages/scheduling/Content/tabs/Details/Details';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\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 {makeTabProps} from '../../../utils';\nimport {formatByParams} from '../../../utils/format';\n\nimport './Content.scss';\nimport {getCluster} from '../../../store/selectors/global';\nimport SchedulingExpandedPoolsUpdater from './SchedulingExpandedPoolsUpdater';\nimport UIFactory from '../../../UIFactory';\nimport {UI_TAB_SIZE} from '../../../constants/global';\n\nconst block = cn('scheduling-content');\n\nContent.propTypes = {\n // from parent\n className: PropTypes.string,\n // from react-router\n match: PropTypes.shape({\n path: PropTypes.string.isRequired,\n url: PropTypes.string.isRequired,\n }).isRequired,\n location: PropTypes.shape({\n search: PropTypes.string.isRequired,\n }).isRequired,\n};\n\nfunction Content({className, match, location}) {\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 = {...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 {},\n );\n\n const titleDict = {};\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 = [];\n\n extraTabs.forEach((tab) => {\n const {name, title, component, urlTemplate} = tab;\n const tabSettings = {show: true};\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 <div className={block(null, className)}>\n <Tabs\n {...props}\n active={DEFAULT_TAB}\n className={block('tabs')}\n routed\n size={UI_TAB_SIZE}\n />\n\n <Switch>\n <Route path={`${match.path}/${Tab.OVERVIEW}`} component={OverviewWithRum} />\n <Route path={`${match.path}/${Tab.DETAILS}`} component={Details} />\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 </div>\n </ErrorBoundary>\n );\n}\n\nexport default withRouter(Content);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\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 'react-redux';\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 Error 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 InitialPoolResourceInfo,\n POOL_GENERAL_TYPE_TO_ATTRIBUTE,\n POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR,\n POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE,\n PoolGeneralResourceType,\n PoolIntegralResourceType,\n PoolStrongResourceType,\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 {\n PoolInfo,\n getSchedulingPoolsMapByName,\n} from '../../../../store/selectors/scheduling/scheduling-pools';\nimport Link from '../../../../components/Link/Link';\n\nimport './PoolEditorDialog.scss';\nimport UIFactory from '../../../../UIFactory';\nimport {createQuotaReqTicketUrl} from '../../../../config';\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 : <Error className={block('error')} error={error} />;\n}\n\nexport interface PoolEditorFormValues {\n general: Record<PoolGeneralResourceType, InitialPoolResourceInfo> & {\n weight: {value?: number; error?: string};\n }; // TODO add description for another fields\n resourceGuarantee: Record<PoolStrongResourceType, InitialPoolResourceInfo>;\n integralGuarantee: Record<\n Exclude<PoolIntegralResourceType, 'guaranteeType'>,\n InitialPoolResourceInfo\n > & {guaranteeType?: 'none' | 'burst' | 'relaxed'};\n resourceLimits: {\n cpu: number | string;\n gpu: number | string;\n memory: number | string;\n userSlots: number | string;\n };\n otherSettings: {\n forbidImmediateOperations: boolean;\n fifoSortParams: Array<string>;\n createEphemeralSubpools: boolean;\n };\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 [initialValues, 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 [data, 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.value,\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 = initialValues.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 = initialValues.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 = initialValues.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, initialValues));\n },\n [editItem, initialValues, 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: initialValues.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: initialValues.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: initialValues.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 initialValues.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: initialValues.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: initialValues.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 initialValues.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: initialValues.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 initialValues.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?: PoolInfo): [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: PoolInfo | undefined,\n pools: Array<PoolInfo>,\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 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport keys_ from 'lodash/keys';\n\nimport {Dialog as DeleteDialog} from '@gravity-ui/uikit';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport Error 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 && <Error 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 <Error 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 'react-redux';\n\nimport sortedIndexOf_ from 'lodash/sortedIndexOf';\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport Link from '../../../../components/Link/Link';\nimport Error 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 && <Error error={error} />,\n },\n },\n ]}\n />\n );\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\nimport some_ from 'lodash/some';\n\nimport {Breadcrumbs, BreadcrumbsItem} from '../../../components/Breadcrumbs';\nimport {useHistory} from 'react-router';\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 {EditButton} from '../../../components/EditableAsText/EditableAsText';\nimport Select from '../../../components/Select/Select';\nimport CreatePoolButton from '../Instruments/CreatePoolDialog/CreatePoolDialog';\n\nimport {makeRoutedURL} from '../../../store/location';\nimport {getCluster, getClusterUiConfig} from '../../../store/selectors/global';\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 <EditableSchedulingBreadcrumbs />\n <span className={block('actions')}>\n {UIFactory.renderTopRowExtraControlsForPool({\n itemClassName: block('extra-control'),\n pool,\n clusterUiConfig,\n })}\n <CreatePoolButton />\n </span>\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 tree = useSelector(getTree);\n const cluster = useSelector(getCluster);\n const history = useHistory();\n\n const handleChangePool = (name: string | number) => {\n setTimeout(() => {\n dispatch(changePool(name.toString()));\n }, 0);\n };\n\n const items = React.useMemo(() => {\n return ['<Root>', ...bcItems.slice(1)].map((text) => {\n const pathname = text\n ? window.location.pathname\n : calcRootPathname(window.location.pathname, cluster);\n return (\n <BreadcrumbsItem\n key={text}\n href={makeRoutedURL(pathname, {tree, text, filter: ''})}\n >\n {text}\n </BreadcrumbsItem>\n );\n });\n }, [bcItems, cluster, tree]);\n\n return (\n <Breadcrumbs\n navigate={history.push}\n onAction={handleChangePool}\n className={block('breadcrumbs')}\n showRoot\n >\n {items}\n </Breadcrumbs>\n );\n}\n\nfunction calcRootPathname(pathname: string, cluster: string) {\n // it is not allowed to stay on ACL and Monitor tabs for <Root> link\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\nfunction EditableSchedulingBreadcrumbs() {\n const [editMode, setEditMode] = React.useState(false);\n const toggleEdit = React.useCallback(() => {\n setEditMode(!editMode);\n }, [editMode, setEditMode]);\n\n return (\n <div className={block('editable-breadcrumbs', {edit: editMode})}>\n {editMode ? (\n <PoolsSuggest autoFocus onCancelEdit={toggleEdit} />\n ) : (\n <React.Fragment>\n <SchedulingBreadcrumbs />\n <EditButton onClick={toggleEdit} />\n <div className={block('btn-spacer')} />\n <CurrentPoolToClipboardButton />\n </React.Fragment>\n )}\n </div>\n );\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: unknown) => dispatch(changeTree(tree)), [dispatch]);\n\n return (\n <div className={block('tree')}>\n <Select\n value={[tree]}\n hideFilter={treeItems?.length <= 5}\n items={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 {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 {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 {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) ?? false\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 filter_ from 'lodash/filter';\nimport find_ from 'lodash/find';\nimport map_ from 'lodash/map';\nimport uniq_ from 'lodash/uniq';\n\nimport {createSelector} from 'reselect';\n\nimport {concatByAnd} from '../../../common/hammer/predicate';\nimport type {RootState} from '../../../store/reducers';\nimport type {ChaosBundle, ChaosCell} from '../../../store/reducers/chaos_cell_bundles';\nimport {getCluster} from '../../../store/selectors/global';\nimport {\n aggregateTotal,\n tabletActiveChaosBundleLink,\n tabletChaosBundleRootLink,\n} from '../../../utils/components/tablet-cells';\nimport {prepareHost} from '../../../utils';\nimport {sortArrayBySortState} from '../../../utils/sort-helpers';\nimport {sortTableBundles} from '../../../utils/tablet_cell_bundles';\n\nexport const getChaosIsLoaded = (state: RootState) => state.chaos_cell_bundles.loaded;\nexport const getChaosIsLoading = (state: RootState) => state.chaos_cell_bundles.loading;\nexport const getChaosError = (state: RootState) => state.chaos_cell_bundles.error;\n\nexport const getChaosBundlesSortState = (state: RootState) => state.chaos_cell_bundles.bundlesSort;\n\nexport const getChaosBundlesNameFilter = (state: RootState) =>\n state.chaos_cell_bundles.bundlesNameFilter;\nexport const getChaosBundlesAccountFilter = (state: RootState) =>\n state.chaos_cell_bundles.bundlesAccountFilter;\nexport const getChaosBundlesTagNodeFilter = (state: RootState) =>\n state.chaos_cell_bundles.bundlesTagNodeFilter;\n\nexport const getChaosBundles = (state: RootState) => state.chaos_cell_bundles.bundles;\n\nexport const getChaosActiveBundle = (state: RootState) => state.chaos_cell_bundles.activeBundle;\n\nexport const getChaosBundlesTableMode = (state: RootState) =>\n state.chaos_cell_bundles.bundlesTableMode;\n\nexport const getChaosActiveBundleData = createSelector(\n [getChaosBundles, getChaosActiveBundle],\n (bundles, activeBundle) => {\n return find_(bundles, (item) => item.bundle === activeBundle);\n },\n);\n\nexport const getChaosBundlesTotal = createSelector(\n [getChaosBundles],\n (bundles): ChaosBundle => aggregateTotal(bundles),\n);\n\nconst COLUMNS_SORTABLE_AS_IS = new Set<keyof ChaosBundle>([\n 'bundle',\n 'health',\n 'tabletCells',\n 'tablets',\n 'uncompressed',\n 'compressed',\n 'enable_bundle_balancer',\n 'node_tag_filter',\n 'memory',\n 'tablet_count',\n 'tablet_count_limit',\n 'tablet_count_free',\n 'tablet_count_percentage',\n 'tablet_static_memory',\n 'tablet_static_memory_limit',\n 'tablet_static_memory_free',\n 'tablet_static_memory_percentage',\n]);\n\nexport const getChaosBundlesFiltered = createSelector(\n [\n getChaosBundles,\n getChaosBundlesNameFilter,\n getChaosBundlesAccountFilter,\n getChaosBundlesTagNodeFilter,\n ],\n (bundles, nameFilter, accountFilter, tagNodeFilter) => {\n const predicates: Array<(item: ChaosBundle) => boolean> = [];\n if (nameFilter) {\n const lowerNameFilter = nameFilter.toLowerCase();\n predicates.push((item) => {\n return -1 !== item.bundle.toLowerCase().indexOf(lowerNameFilter);\n });\n }\n\n if (accountFilter) {\n const lowerAccountFilter = accountFilter.toLowerCase();\n predicates.push((item) => {\n const {changelog_account, snapshot_account} = item;\n return (\n (Boolean(changelog_account) &&\n -1 !== changelog_account.toLowerCase().indexOf(lowerAccountFilter)) ||\n (Boolean(snapshot_account) &&\n -1 !== snapshot_account.toLowerCase().indexOf(lowerAccountFilter))\n );\n });\n }\n\n if (tagNodeFilter) {\n const lowerTagNodeFilter = tagNodeFilter.toLowerCase();\n predicates.push((item) => {\n const {node_tag_filter} = item;\n return (\n Boolean(node_tag_filter) &&\n -1 !== node_tag_filter.toLowerCase().indexOf(lowerTagNodeFilter)\n );\n });\n }\n\n return !predicates.length ? bundles : filter_(bundles, concatByAnd(...predicates));\n },\n);\n\nexport const getChaosBundlesSorted = createSelector(\n [getChaosBundlesFiltered, getChaosBundlesSortState],\n (bundles, {column, order}) => {\n if (!column || !order) {\n return bundles;\n }\n\n return sortTableBundles({bundles, column, order, columnsSortable: COLUMNS_SORTABLE_AS_IS});\n },\n);\n\nexport const getChaosCells = (state: RootState) => state.chaos_cell_bundles.cells;\nexport const getChaosCellsSortState = (state: RootState) => state.chaos_cell_bundles.cellsSort;\n\nexport const getChaosCellsIdFilter = (state: RootState) => state.chaos_cell_bundles.cellsIdFilter;\nexport const getChaosCellsBundleFilter = (state: RootState) =>\n state.chaos_cell_bundles.cellsBundleFilter;\nexport const getChaosCellsHostFilter = (state: RootState) =>\n state.chaos_cell_bundles.cellsHostFilter;\n\nexport const getChaosCellsOfActiveAccount = createSelector(\n [getChaosCells, getChaosActiveBundle],\n (cells, activeBundle) => {\n if (!activeBundle) {\n return cells;\n }\n\n return filter_(cells, (item) => {\n return Boolean(item.bundle) && activeBundle === item.bundle;\n });\n },\n);\n\nexport const getChaosCellsFiltered = createSelector(\n [\n getChaosCellsOfActiveAccount,\n getChaosCellsIdFilter,\n getChaosCellsBundleFilter,\n getChaosCellsHostFilter,\n getChaosActiveBundle,\n ],\n (cells, idFilter, bundleFilter, hostFilter) => {\n const predicates: Array<(item: ChaosCell) => boolean> = [];\n if (idFilter) {\n predicates.push((item) => {\n return -1 !== item.id.indexOf(idFilter);\n });\n }\n\n if (bundleFilter) {\n predicates.push((item) => {\n return Boolean(item.bundle) && -1 !== item.bundle.indexOf(bundleFilter);\n });\n }\n\n if (hostFilter) {\n predicates.push((item) => {\n return Boolean(item.peerAddress) && -1 !== item.peerAddress.indexOf(hostFilter);\n });\n }\n return !predicates.length ? cells : filter_(cells, concatByAnd(...predicates));\n },\n);\n\nexport function filterChaosCellsByBundle(bundle: string, cells: Array<ChaosCell>) {\n if (!bundle) {\n return [];\n }\n\n return filter_(cells, (item) => item.bundle === bundle);\n}\n\nexport const getChaosCellsSorted = createSelector(\n [getChaosCellsFiltered, getChaosCellsSortState],\n (cells, sortState) => {\n return sortArrayBySortState(cells, sortState);\n },\n);\n\nexport const getChaosCellsBundles = createSelector([getChaosCells], (cells) => {\n return uniq_(map_(cells, 'bundle')).sort();\n});\n\nexport const getChaosCellsHosts = createSelector([getChaosCellsOfActiveAccount], (cells) => {\n return uniq_(map_(cells, 'peerAddress')).sort();\n});\n\nexport const getChaosCellsHostsOfActiveBundle = createSelector(\n [getChaosActiveBundle, getChaosCellsFiltered],\n (activeBundle: string, cells: Array<ChaosCell>) => {\n if (!activeBundle) {\n return '';\n }\n return prepareHostsFromCells(cells);\n },\n);\n\nexport function prepareHostsFromCells(cells: Array<ChaosCell>) {\n return uniq_(map_(cells, ({peerAddress}) => prepareHost(peerAddress)).filter(Boolean))\n .sort()\n .join('|');\n}\n\nexport interface ChaosCellBundlesBreadcrumbsItem {\n text: string;\n href: string;\n title?: string;\n}\n\nexport const getChaosBreadcrumbItems = createSelector(\n [getCluster, getChaosActiveBundle],\n (cluster, activeBundle): Array<ChaosCellBundlesBreadcrumbsItem> => {\n const res: Array<ChaosCellBundlesBreadcrumbsItem> = [\n {\n text: '',\n href: tabletChaosBundleRootLink(cluster),\n title: '<bundles>',\n },\n ];\n\n if (activeBundle) {\n res.push({\n text: activeBundle,\n href: tabletActiveChaosBundleLink(cluster, activeBundle),\n });\n }\n\n return res;\n },\n);\n","import {createSelector} from 'reselect';\nimport uniq_ from 'lodash/uniq';\nimport compact_ from 'lodash/compact';\n\nimport {concatByAnd} from '../../../common/hammer/predicate';\n\nimport {RootState} from '../../../store/reducers';\nimport {ChytInfo} from '../../../store/reducers/chyt/list';\nimport {SortState} from '../../../types';\nimport {multiSortBySortStateArray} from '../../../utils/sort-helpers';\nimport {StrawberryListAttributes} from '../../../utils/strawberryControllerApi';\nimport {getSettingsData} from '../settings-base';\n\nexport const getChytListData = (state: RootState) => state.chyt.list.data;\n\nexport const getChytListAvailableCreators = createSelector([getChytListData], (data) => {\n const {items = []} = data;\n return uniq_(items.map((item) => item.creator!)).sort();\n});\n\nexport const getChytListAvailableHealths = createSelector([getChytListData], (data) => {\n const {items = []} = data;\n return compact_(uniq_(items.map((item) => item.health)).sort());\n});\n\nexport const getChytListAvailableStates = createSelector([getChytListData], (data) => {\n const {items = []} = data;\n return uniq_(items.map((item) => item.state!)).sort();\n});\n\nexport const getChytCurrentAlias = (state: RootState) => state.chyt.clique.currentClique;\n\nexport const getChytListFilterAlias = (state: RootState) => state.chyt.listFilters.name;\nexport const getChytListFilterHealth = (state: RootState) => state.chyt.listFilters.health;\nexport const getChytListFilterCreator = (state: RootState) => state.chyt.listFilters.creator;\nexport const getChytListFilterState = (state: RootState) => state.chyt.listFilters.state;\n\ntype ChytListColumns = Exclude<StrawberryListAttributes, 'yt_operation_id'>;\nconst CHYT_LIST_SELECTABLE_COLUMNS: Record<Exclude<ChytListColumns, 'health_reason'>, true> = {\n instance_count: true,\n total_cpu: true,\n total_memory: true,\n creation_time: true,\n stage: true,\n yt_operation_start_time: true,\n yt_operation_finish_time: true,\n speclet_modification_time: true,\n strawberry_state_modification_time: true,\n pool: true,\n health: true,\n creator: true,\n state: true,\n};\n\nexport type ChytSelectableColumn = keyof typeof CHYT_LIST_SELECTABLE_COLUMNS;\n\ntype ChytColumnItem = {checked: boolean; column: ChytListColumns};\n\nexport const getChytListColumnsFromSettings = (state: RootState) => {\n return (\n getSettingsData(state)['global::chyt::list_columns'] ??\n ([\n 'health',\n 'state',\n 'instance_count',\n 'total_cpu',\n 'total_memory',\n 'creator',\n 'creation_time',\n ] as const)\n );\n};\n\nexport const getChytListVisibleColumns = createSelector(\n [getChytListColumnsFromSettings],\n (columns): Array<ChytSelectableColumn> => {\n const userColumns = new Set(columns);\n return compact_(\n columns.map((k) => {\n return CHYT_LIST_SELECTABLE_COLUMNS[\n k as keyof typeof CHYT_LIST_SELECTABLE_COLUMNS\n ] && userColumns.has(k)\n ? (k as ChytSelectableColumn)\n : null;\n }),\n );\n },\n);\n\nexport const getChytListColumns = createSelector(\n [getChytListVisibleColumns],\n (columns): Array<ChytColumnItem> => {\n const userColumns = new Set(columns);\n const res = columns.map((column) => {\n return {checked: true, column};\n });\n\n Object.keys(CHYT_LIST_SELECTABLE_COLUMNS).forEach((k) => {\n const column = k as ChytSelectableColumn;\n if (!userColumns.has(column)) {\n res.push({checked: false, column});\n }\n });\n\n return res;\n },\n);\n\nexport const getChytListTableSortState = (state: RootState) => state.chyt.listFilters.sortState;\n\nexport const getChytListTableSortStateByName = createSelector(\n [getChytListTableSortState],\n (sortState) => {\n return sortState.reduce(\n (acc, item, index) => {\n if (item.column) {\n acc[item.column] = {\n ...item,\n multisortIndex: sortState.length > 1 ? index + 1 : undefined,\n };\n }\n return acc;\n },\n {} as Record<keyof ChytInfo, SortState<keyof ChytInfo> & {multisortIndex?: number}>,\n );\n },\n);\n\nconst getChytFilterPredicate = createSelector(\n [\n getChytListFilterAlias,\n getChytListFilterCreator,\n getChytListFilterState,\n getChytListFilterHealth,\n ],\n (alias, creator, state, health) => {\n const predicates = compact_([\n alias ? (item: ChytInfo) => -1 !== item.alias.indexOf(alias) : undefined,\n creator !== undefined ? (item: ChytInfo) => creator === item.creator : undefined,\n state ? (item: ChytInfo) => state === item.state : undefined,\n health ? (item: ChytInfo) => health === item.health : undefined,\n ]);\n\n return predicates.length ? concatByAnd(...predicates) : undefined;\n },\n);\n\nexport const getChytListTableItems = createSelector(\n [getChytListData, getChytListTableSortState, getChytFilterPredicate],\n (data, sortState, predicate) => {\n const {items = []} = data;\n\n const filteredItems = !predicate ? items : items.filter(predicate);\n\n const sortedItems = multiSortBySortStateArray(filteredItems, sortState);\n\n return sortedItems;\n },\n);\n","import find_ from 'lodash/find';\nimport sortBy_ from 'lodash/sortBy';\n\nimport {createSelector} from 'reselect';\n\nimport {\n getAccountsNS,\n getBundlesNS,\n getChaosBundlesNS,\n getChytNS,\n getClusterNS,\n getSchedulingNS,\n makeGetSetting,\n} from '../../store/selectors/settings';\nimport {SettingName} from '../../../shared/constants/settings';\nimport {getActiveAccount} from '../../store/selectors/accounts/accounts';\nimport {getPath} from '../../store/selectors/navigation';\nimport {getPool, getTree} from '../../store/selectors/scheduling/scheduling';\nimport {getTabletsActiveBundle} from './tablet_cell_bundles';\nimport {getChaosActiveBundle} from './chaos_cell_bundles';\nimport {getChytCurrentAlias} from './chyt';\n\n//************* Selectors for Accounts *****************\n\nexport const getFavouriteAccounts = createSelector(\n [makeGetSetting, getAccountsNS],\n prepareFavourites,\n);\n\nexport const getLastVisitedAccounts = createSelector(\n [makeGetSetting, getAccountsNS],\n prepareLastVisited,\n);\n\nexport const getPopularAccounts = createSelector([getLastVisitedAccounts], preparePopulars);\n\nexport const isActiveAcountInFavourites = createSelector(\n [getActiveAccount, getFavouriteAccounts],\n prepareIsInFavourites,\n);\n\nexport const getFavouriteChyt = createSelector([makeGetSetting, getChytNS], prepareFavourites);\n\nexport const getLastVisitedChyt = createSelector([makeGetSetting, getChytNS], prepareLastVisited);\n\nexport const getPopularChyt = createSelector([getLastVisitedChyt], preparePopulars);\n\nexport const isActiveCliqueInFavourites = createSelector(\n [getChytCurrentAlias, getFavouriteChyt],\n prepareIsInFavourites,\n);\n\n//************* Selectors for Navigation *****************\n\nexport const getFavouritePaths = createSelector([makeGetSetting, getClusterNS], prepareFavourites);\n\nexport const getLastVisitedPaths = createSelector(\n [makeGetSetting, getClusterNS],\n prepareLastVisited,\n);\n\nexport const getPopularPaths = createSelector([getLastVisitedPaths], preparePopulars);\n\nexport const isCurrentPathInFavourites = createSelector(\n [getPath, getFavouritePaths],\n prepareIsInFavourites,\n);\n\n//************* Selectors for Scheduling *****************\n\nexport const getFavouritePools = createSelector(\n [makeGetSetting, getSchedulingNS],\n prepareFavourites,\n);\n\nexport const isActivePoolInFavourites = createSelector(\n [getPool, getTree, getFavouritePools],\n prepareIsPoolInFavourites,\n);\n\n//************* Selectors for Bundles *****************\n\nexport const getFavouriteBundles = createSelector(\n [makeGetSetting, getBundlesNS],\n prepareFavourites,\n);\n\nexport const isActiveBundleInFavourites = createSelector(\n [getTabletsActiveBundle, getFavouriteBundles],\n prepareIsInFavourites,\n);\n\n// ************ Selectors for Chaos bundles ***********\n\nexport const getFavouriteChaosBundles = createSelector(\n [makeGetSetting, getChaosBundlesNS],\n prepareFavourites,\n);\n\nexport const isActiveChaosBundleInFavourites = createSelector(\n [getChaosActiveBundle, getFavouriteChaosBundles],\n prepareIsInFavourites,\n);\n\n//********************** Helpers *************************\n\nfunction prepareFavourites(getSetting, parentNS) {\n const items = getSetting(SettingName.LOCAL.FAVOURITES, parentNS);\n return sortBy_(items, 'path');\n}\n\nfunction prepareLastVisited(settingGetter, parentNS) {\n return settingGetter(SettingName.LOCAL.LAST_VISITED, parentNS) || [];\n}\n\nfunction preparePopulars(lastVisited) {\n return sortBy_(lastVisited, (entry) => -entry.count);\n}\n\nfunction prepareIsInFavourites(value, favourites) {\n return Boolean(find_(favourites, ({path}) => path === value));\n}\n\nfunction prepareIsPoolInFavourites(pool, tree, favourites) {\n return Boolean(find_(favourites, ({path}) => path === `${pool}[${tree}]`));\n}\n","import UIFactory from '../../UIFactory';\nimport {Page} from '../../constants';\nimport {TabletsTab} from '../../constants/tablets';\nimport {OrderType, multiSortWithUndefined, orderTypeToOrderK} from '../sort-helpers';\n\nexport function tabletCellBundleDashboardUrl(cluster: string, bundle: string) {\n return UIFactory.makeUrlForTabletCellBundleDashboard(cluster, bundle);\n}\n\nexport function genTabletCellBundlesCellUrl(cellId: string, cluster?: string) {\n const prefix = cluster ? `/${cluster}/` : '';\n return `${prefix}${Page.TABLET_CELL_BUNDLES}/${TabletsTab.TABLET_CELLS}?id=${cellId}`;\n}\n\nfunction compareBundlesByAccount<T extends Record<string, any>>(left: T, right: T) {\n if (\n left.changelog_account === right.changelog_account &&\n left.snapshot_account === right.snapshot_account\n ) {\n return 0;\n }\n\n return left.changelog_account < right.changelog_account\n ? -1\n : left.snapshot_account < right.snapshot_account\n ? -1\n : 1;\n}\n\nexport const sortTableBundles = <T extends Record<string, any>>({\n bundles,\n column,\n columnsSortable,\n order,\n}: {\n bundles: T[];\n column: keyof T;\n columnsSortable: Set<string>;\n order: OrderType;\n}) => {\n let sorted: T[] = [];\n\n const {orderK, undefinedOrderK} = orderTypeToOrderK(order);\n\n if (column === 'changelog_account') {\n sorted = [...bundles].sort(compareBundlesByAccount);\n } else if (column === 'nodes') {\n sorted = [...bundles].sort(({nodes: l = []}, {nodes: r = []}) => l.length - r.length);\n } else if (columnsSortable.has(column as string)) {\n return multiSortWithUndefined(bundles, [{key: column, orderK, undefinedOrderK}]);\n }\n\n return (order as string).includes('asc') ? sorted : sorted.reverse();\n};\n"],"names":["connect","openAttributesModal","_ref","title","_ref$getPathProps","getPathProps","path","exactPath","attribute","attributes","_ref$withTooltip","withTooltip","_ref$tooltipProps","tooltipProps","placement","content","rest","_objectWithoutProperties","_excluded","_jsx","AttributesButton","_objectSpread","onClick","pathProps","b","block","headingCN","CollapsibleSectionStateLess","_Component","_inherits","_super","_createSuper","_this","_classCallCheck","_len","arguments","length","args","Array","_key","call","apply","concat","toggle","onToggle","props","collapsed","_createClass","key","value","_this$props","this","name","children","size","overview","className","headingClassName","marginDirection","togglerRightPadding","ErrorBoundary","_jsxs","margin","clickable","Icon","awesome","Component","CollapsibleSection","_React$useState","React","_React$useState2","_slicedToArray","setCollapsed","onChange","defaultProps","cn","prepareRoleListValue","roles","otherMembers","undefined","current","toAdd","toRemove","unrecognized","forEach_","item","isUnrecognized","isRequested","isApproved","isDepriving","push","currentArr","map","prepareItemOfCurrent","otherArr","data","frozen","newItems","itemClassName","role","extraProps","text","roleListValueToSubjectList","_toConsumableArray","manyListDataItemToSubjectList","manyListDataItem","map_","filter_","_ref2","removed","_ref3","_ref4","type","extractChangedSubjects","added","filter","_ref5","_ref6","user","group","_ref7","_ref8","DialogError","Block","makeErrorFields","errors","compact_","error","index","extras","FORM_ERROR","makeFormSubmitError","validationErrors","_defineProperty","importYTDFDialog","YTDFDialog","withLazyLoading","_asyncToGenerator","_regeneratorRuntime","_callee","_context","prev","next","t0","sent","YTDialog","abrupt","stop","mounted","setMounted","visible","_callee2","_context2","RoleListControl","EditableList","_callee3","_context3","TabFieldVertical","_callee4","_context4","EditableAsText","withControls","disableEdit","cancelOnClose","openOnClick","renderEditor","onModeChange","_props$saveButtonView","saveButtonView","_props$cancelButtonVi","cancelButtonView","editMode","setEditMode","_React$useState3","_React$useState4","input","setInput","useEffect","handleChangeMode","useCallback","isEdit","closeEditMode","startTextEdit","handleChange","val","applyValue","closeAndResetValue","onApply","handleKeyDown","evt","controlSize","_Fragment","onBlur","TextInput","autoFocus","onUpdate","onKeyDown","Button","view","onMouseDown","EditButton","_ref$size","ElementsTableFooter","state","css","itemHeight","templates","itemMods","selectedIndex","computeKey","cssHover","_this$state","columnSet","columnItems","selected","currentKey","ElementsTableRow","bFooter","ELEMENTS_TABLE","footer","renderRow","columns","_prepareColumnsData","prepareColumnsData","items","set","_WithStickyFooter","_React$Component","WithStickyFooter","bWrapper","sticky","prepareTableClassName","renderStickyFooter","displayName","getDisplayName","mapDispatchToProps","toggleColumnSortOrder","compose","sortState","tables","_WithStickyHead","WithStickyHead","top","style","ElementsTableHeader","renderStickyHead","theme","padded","striped","HEADER_HEIGHT","Favourites","isActive","toggleActive","setState","prevState","onItemClick","_this2","dropItems","action","switcher","renderButton","pin","DropdownMenu","popupProps","empty","Hotkey","settings","keys","handler","scope","buttonProps","themeProps","toggleDisabled","clear","disabled","renderDropDownMenu","renderHotkey","itemType","PropTypes","Secondary","Bold","SecondaryBold","Warning","WarningLight","NoWrap","Escaped","textNode","unipika","prettyprint","UNIPIKA_ESCAPED_SETTINGS","asHTML","dangerouslySetInnerHTML","__html","Placeholder","tab","useRouteMatch","params","hammer","format","makeGet","parameters","command","USE_CACHE","makeList","USE_MAX_SIZE","cancelHelper","CancelHelper","POOL_FIELDS_TO_LOAD","POOL_TREE_GET_ATTRS","EmptyFullPath","_Error","_wrapNativeSuper","Error","loadExpandedPools","tree","dispatch","getState","pool","getPool","ROOT_POOL_NAME","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","join","updateExpandedPoolNoLoad","addFullPathToExpandedPoolsNoLoad","e","CHANGE_POOL","Toaster","add","_getSchedulingOperati","loadAll","getExpandedPoolsLoadAll","expandedPools","expandedPoolNames","operationsExpandedPools","operationsRequests","prefix","forEach","loadAllPools","isSupportedSchedulingChildrenByPool","poolsRequests","poolsChildrenRequests","poolsCypressDataRequests","poolsExpandedPools","_expandedPools$get","get","cypressDataPath","removeAllRequests","SCHEDULING_EXPANDED_POOLS_REQUEST","Promise","all","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","reduce_","acc","Object","assign","poolsToCollapse","pos","rawPools","cypressData","pools","_ref8$","_splitBatchResults3","flattenAttributes","_splitBatchResults4","resultIndices","poolsReqeustsIgnored","poolInfo","_splitBatchResults5","poolChildren","poolsChildrenRequestsIgnored","_splitBatchResults6","cypressDataChildrenPerPool","poolsCypressDataRequestsIgnored","poolChildrenCypressData","$value","position","setExpandedPools","SCHEDULING_EXPANDED_POOLS_SUCCESS","expandedPoolsTree","EMPTY_OBJECT","flattenCypressData","inner_errors","isCancelled","SCHEDULING_EXPANDED_POOLS_FAILURE","changes","getTree","poolsByName","getSchedulingPoolsMapByName","expanded","expandedPoolInfo","_data","res","_data2","parent","calcExpandedPoolInfo","SCHEDULING_EXPANDED_POOLS_PARTITION","getPoolPathsByName","_dispatch","getPools","calculatePoolPath","orchidPath","toaster","loadSchedulingData","SCHEDULING_DATA_REQUEST","isInitialLoading","getSchedulingIsInitialLoading","cluster","getCluster","rumId","RumWrapper","RumMeasureTypes","SCHEDULING","fetch","schedulingData","_splitBatchResults$re","schedulerAlerts","rawTrees","defaultTree","reject","trees","prepareTrees","prepareCurrentTree","scheduling","schedulingLoadFilterAttributes","checkFilters","SCHEDULING_DATA_PARTITION","treeRequests","schedulingLoadTree","ytApiV4Id","treeData","extracted","extractBatchV4Values","_splitBatchResults2","treeResources","resource_usage","resource_limits","config","resource_distribution_info","SCHEDULING_DATA_SUCCESS","code","yt","CANCELLED","SCHEDULING_DATA_FAILURE","openPoolDeleteModal","POOL_TOGGLE_DELETE_VISIBILITY","visibility","closePoolDeleteModal","setPoolAttributes","poolPath","values","initials","isEmpty_","transferData","toModify","guaranteeType","restValues","v","k","limit","source","attr","POOL_RESOURCE_TYPE_TO_ATTRIBUTE","_initials$key","diff","hasOwnProperty","updateNodeAttributes","tmp","dstPool","dotPath","startsWith","INTEGRAL_GUARANTEES_PREFIX","substr","replace","delta","update_","Math","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","makeOtherAttributesCommands","initialValues","initialSortParamsString","fifoSortParams","newSortParamsString","commands","forbidImmediateOperations","createEphemeralSubpools","setResourceAttributes","omittedValues","keyMapper","userSlots","omittedValuesList","preparedValues","mapKeys_","schedulingGetAttrsBeforeEdit","resources","result","omit_","makeGeneralCommands","isInitial","initialValue","pickBy_","mode","weight","prototype","isOmitted","Number","isInvalidNumber","isNaN","isValidNumber","editPool","computePoolPath","filteredResourceLimitsValues","resourceLimits","omittedResourceLimitsValues","resourceLimitsValues","mapValues_","SCHEDULING_EDIT_POOL_REQUEST","general","otherSettings","schedulingEditPool","resourceGuarantee","integralGuarantee","pick_","POOL_GENERAL_TYPE_TO_ATTRIBUTE","timeout","SCHEDULING_EDIT_POOL_SUCCESS","closeEditModal","setTimeout","SCHEDULING_EDIT_POOL_FAILURE","openEditModal","TOGGLE_EDIT_VISIBILITY","cancelled","SCHEDULING_EDIT_POOL_CANCELLED","changeTree","CHANGE_TREE","changePool","getSchedulingIsFinalLoadingState","createSelector","store","loading","loaded","status","calculateLoadingStatus","isFinalLoadingStatus","ShareUsageBar","shareValue","usageValue","shareTitle","usageTitle","forceTheme","x","Tooltip","NO_VALUE","_calcProgressProps","calcProgressProps","digits","Progress","getSchedulingBreadcrumbItems","_loop","find_","reverse","makeStaticConfigurationItem","attrs","cpu","ypath","getValue","gpu","memory","user_slots","network","getCurrentPoolStaticConfiguration","getIsRoot","getCurrentPool","isRoot","burst_guarantee_resources","resource_flow","Boolean","calcTreeStaticConfiguration","totals","undistributed","resourceType","total","free","used","calcTreeStaticConfigurationByDistributed","distributed","getPoolsTopLevel","getPoolsAllocatedOperationsCount","topPools","maxOperationCount","maxRunningOperationCount","getCurrentTreeGpuLimit","getTreeResources","getOperationsStaticConfiguration","allocated","operationCount","runningOperationCount","level","usedTitle","lastDayMaxValueSensor","lastDayMaxValueTitle","getCurrentPoolTreeStaticConfiguration","operationRows","undistributed_resources","burst","distributed_burst_guarantee_resources","unburst","undistributed_burst_guarantee_resources","flow","distributed_resource_flow","unflow","undistributed_resource_flow","cpuRow","burstRow","flowRow","max","PoolMetaData","useSelector","clusterUiConfig","getClusterUiConfig","hasStrong","integralType","capitalize_","MetaTable","Readable","UIFactory","getExtraMetaTableItemsForPool","SchedulingStaticConfiguration","onToggleCollapsedState","useDispatch","getSettingsSchedulingExpandStaticConfiguration","setSettingsSchedulingExpandStaticConfiguration","PoolTreeStaticConfiguration","PoolStaticConfiguration","staticConfigurationItems","header","sortable","width","render","row","cpuLabel","Label","capitalize","align","DataTableYT","useThemeYT","displayIndices","poolTree","formatValue","renderSchedulingLastDayMaximum","sensor","showHint","showAsLink","_ref9","formatFn","freeValue","lastDayMaxValue","rowClassName","SchedulingOperationsError","getSchedulingOperationsError","ErrorBlock","topMargin","PoolsSuggest","_ref$onCancelEdit","onCancelEdit","poolNames","getPoolsNames","getSuggestItems","_items","match","filtered","lcFilter","toLowerCase","lcPoolName","indexOf","handleCancelEdit","onFocus","Suggest","popupClassName","placeholder","PoolTags","showGuaranteeType","hasFlow","flowCPU","flowGPU","renderSchedulingTableItemExtraControls","STARVATION_STATUS_TO_THEME","starving","aggressively_starving","Overview","renderNameCell","currentPool","itemsMaxDepth","allowExpand","_len2","_key2","renderType","renderName","Tab","OVERVIEW","renderEphemeralIcon","renderActions","_this$props2","aggregation","renderAttributesButton","Fragment","renderEditButton","renderDeleteButton","onItemToggleState","treeState","tableId","SCHEDULING_POOL_TREE_TABLE_ID","poolsTableItems","sets","default","renderMode","FI","renderFifoIndex","renderWeight","fair_share","renderColumnAsRatio","usage","demand","min_share","renderMinShare","fair_share_usage","renderFairShareUsage","dominant_resource","renderDominantResource","operation_overview","renderOperationOverview","actions","Sticky","topOffset","isSticky","SchedulingOverviewToolbar","_this$props3","treeStateExpanded","fireResizeEvent","StickyContainer","renderToolbar","ResetExpandedPoolsOnTreeChange","ElementsTable","tableSettings","isLoading","share","_ref4$forceTheme","_ref4$title","poolModeTheme","weightEdited","edited","digitsOnlyForFloat","columnName","renderRatio","barsData","fairShareRatio","usageRatio","starvation_status","renderBars","formatter","getPoolPaths","ClickableAttributesButton","fifoIndex","toggleItemState","itemState","icon","operation","expanderClass","expanderClassIcon","expanderIcon","isCurrentPool","linkText","incomplete","id","FormattedText","qs","window","location","search","page","Page","FormattedLink","routed","url","Link","dominantResource","minShareRatio","resourcePropTypes","isRequired","progress","tableItemPropTypes","abc","demandRatio","fifo","changeTableTreeState","CHANGE_TABLE_TREE_STATE","schedulingSetAbcFilter","abcServiceFilter","getSchedulingOperationsCount","root","setLoadAllOperations","dispatchEvent","Event","OverviewConnected","getTableItems","getSchedulingOverviewMaxDepth","getSchedulingTreeState","getSchedulingAbcFilter","OverviewWithRum","isFinalState","useAppRumMeasureStart","SCHEDULING_OVERVIEW","additionalStartType","startDeps","allowStart","useRumMeasureStop","stopDeps","allowStop","_getSchedulingOperati2","old","_toPropertyKey","resetExpandedPools","_React$PureComponent","_super2","_this3","_len3","_key3","confirmExpandDialogVisible","handleExpand","onConfirmExpand","setConfirmDialogVisibility","handleCollapse","onAbcServiceFilter","abcService","_ref10","slug","_this4","Dialog","open","Header","caption","Body","Footer","onClickButtonApply","onClickButtonCancel","textButtonCancel","textButtonApply","renderConfirmExpandDialog","renderControlAbcService","withStickyHead","withStickyFooter","ElementsTableBase","Details","renderResourceBars","resourceData","childTableItems","guaranteed","renderRelResource","child","isChildPool","DETAILS","integral","totalRow","summedProperties","resource","metric","prepare","calculateTotalOverPools","SCHEDULING_POOL_CHILDREN_TABLE_ID","columnsSets","max_share","renderMaxShare","resource_detailed_cpu","renderColumnAsFloatNumber","resource_detailed_memory","renderColumnAsBytes","resource_detailed_gpu","renderColumnAsNumber","resource_detailed_user_slots","resource_limit_cpu","resource_limit_memory","resource_limit_gpu","resource_limit_user_slots","min_resources_cpu","min_resources_memory","min_resources_gpu","min_resources_user_slots","abs_guaranteed_cpu","abs_guaranteed_memory","abs_guaranteed_gpu","abs_guaranteed_user_slots","abs_demand_cpu","abs_demand_memory","abs_demand_gpu","abs_demand_user_slots","abs_usage_cpu","abs_usage_memory","abs_usage_gpu","abs_usage_user_slots","rel_guaranteed_cpu","rel_guaranteed_memory","rel_guaranteed_gpu","rel_guaranteed_user_slots","rel_usage_cpu","rel_usage_memory","rel_usage_gpu","rel_usage_user_slots","guaranteed_usage_cpu","guaranteed_usage_memory","guaranteed_usage_gpu","guaranteed_usage_user_slots","running_operation_progress","renderAsProgress","running_operation_count","operation_count","operation_progress","max_running_operation_count","renderMaxRunningOperationCount","max_operation_count","renderMaxOperationCount","integral_type","renderIntegralType","burst_cpu","renderIntegralGuarantee","flow_cpu","children_burst_cpu","childrenIntegrals","children_flow_cpu","accumulated","accumulated_cpu","burst_duration","_this$props4","changePoolChildrenFilter","changeContentMode","Filter","RadioButton","_this$props5","ElementsTableSticky","cssTableMods","maxShareRatio","maxOperationCountEdited","renderNumberWithEdited","maxRunningOperationCountEdited","editedValue","autoCalculated","hasActiveGuarantee","inactive","renderColumnAsReadable","getProgressTheme","poolChildrenFilter","CHANGE_POOL_CHILDREN_FILTER","CHANGE_CONTENT_MODE","contentMode","target","DetailsConnected","getPollChildrenTableItems","getContentMode","getPoolChildrenFilter","getSortedPoolChildren","DetailsWithRum","SCHEDULING_DETAILS","PoolAcl","NoContent","warning","hint","PoolAclPanel","loadState","getAclLoadState","IdmObjectType","POOL","SCHEDULING_ACL","SchedulingExpandedPoolsUpdater","withRouter","getPoolIsEphemeral","allowAcl","isPoolAclAllowed","localTab","showSettings","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","Switch","Redirect","from","to","pathname","headingBlock","SchedulingResources","getResources","makeError","PoolEditorDialog","editItem","getSchedulingEditItem","_useSelector","poolErrorData","editVisibility","treGpuLimit","allowedSources","getSchedulingSourcesOfEditItem","poolsItems","getPoolsSelectItems","_useMemo","useMemo","getInitialValues","_useMemo2","initialFormValues","editCloseHandler","editConfirmHandler","form","_form$getState","POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE","POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR","_typeof","_x","getCurrentUserName","hasWarning","setHasWarning","checkPermError","setCheckPermError","pathToCheck","checkUserPermissionsUI","newHasWarning","warningField","checkPermErrorField","poolErrorDataField","transferNotice","parentPool","renderTransferQuotaNoticeForPool","isTopLevel","isTopLevelPool","useTransferNotice","integralTypeNotice","isAbcPoolName","summary","_createQuotaReqTicket","createQuotaReqTicketUrl","queue","useChangeIntegralTypeNotice","onClose","headerProps","onAdd","required","tooltip","hideFilter","min","MIN_VALUE","hidePrettyValue","String","initialLimit","Infinity","sourcesSkipParent","limitInputTitle","cpuStrong","decimalPlaces","gpuStrong","memoryStrong","burstCpu","burstGpu","flowCpu","flowGpu","validator","axis","SchedulingDialogsMemo","SchedulingDialogs","Scheduling","_state$scheduling$sch","hasError","errorData","updateFn","useUpdater","Content","SchedulingMemo","SchedulingWithRum","deleteVisibility","deleteItem","deleteConfirmHandler","SCHEDULING_DELETE_POOL_REQUEST","remove","autoHiding","SCHEDULING_DELETE_POOL_SUCCESS","SCHEDULING_DELETE_POOL_FAILURE","deleteCloseHandler","SCHEDULING_CREATE_POOL_CANCELLED","closeDeleteModal","DeleteDialog","hasCloseButton","keys_","message","propsButtonApply","prepareAbcService","fetchCreatePoolDialogTreeItems","currentTree","getPoolTrees","treeItems","CREATE_POOL_DIALOG_TREE_ITEMS_SUCCESS","createPool","create","parent_name","successContent","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","getCreatePoolDialogError","login","getTreesSelectItems","handleCreateConfirm","handleNameChange","sortedFlatTree","getCreatePoolDialogFlatTreeItems","validateForm","sortedIndexOf_","isApplyDisabled","validate","pristineSubmittable","touched","docsUrl","docsUrls","isIdmAclAvailable","SchedulingTopRowContent","RowWithName","urlParams","SchedulingFavourites","SchedulingPhysicalTree","EditableSchedulingBreadcrumbs","renderTopRowExtraControlsForPool","favouritesPools","getFavouritePools","isActivePool","isActivePoolInFavourites","onFavouriteClick","onFavouriteToggle","parentNS","getSchedulingNS","toggleFavourite","togglePoolFavourites","CurrentPoolToClipboardButton","currentPoolPath","getCurrentPoolPath","ClipboardButton","shiftText","hoverContent","SchedulingBreadcrumbs","bcItems","history","useHistory","some_","_v","endsWith","calcRootPathname","BreadcrumbsItem","href","makeRoutedURL","Breadcrumbs","navigate","onAction","toString","showRoot","toggleEdit","edit","Select","vals","SchedulingTopRowContentMemo","SchedulingTopRowContentWithError","compact","useRumMeasureStart","subPage","getApproversSubjectFilter","aclFilters","approversSubject","getObjectSubjectFilter","objectSubject","getObjectPermissionsFilter","objectPermissions","getAclFilterColumns","columnsFilter","getAclFilterColumnGroupName","columnGroupNameFilter","getAclFilterExpandedSubjects","expandedSubjects","getAclCurrentTab","aclCurrentTab","prepareColumnsNames","columnsPermissions","permission","uniq_","flatten_","sort","prepareApprovers","approvers","subject","extra","subjects","subjectType","groupInfo","group_name","getAllUserPermissions","acl","userPermissions","getAllObjectPermissions","getAllObjectPermissionsWithSplittedSubjects","isSplitted","subjectIndex","getObjectPermissionsTypesList","permissionsFilter","uniquePermisions","Set","permissionTypes","getAclPermissionsSettings","permissions","sortBy_","subjectFilterPredicate","_item$subjects$","entries","_str","str","pop","getAllObjectPermissionsFiltered","subjectFilter","_partition_","partition_","_item$columns","_partition_2","mainPermissions","withColumns","lowerNameFilter","toLocaleLowerCase","filterBySubject","permissionsFilterSet","filterByPermissions","_permissionsFilterPre","foundCount","some","p","has","permissionsFilterPredicate","visibleColumns","filterByColumns","_columns$some","colName","mainPredicates","columnsPredicates","concatByAnd","getObjectPermissionsAggregated","aggregateBySubject","count","AggregateBySubject","first","aggrKey","inherited","allPermissions","aggregationKey","_item$permissions","_child$permissions","_child$permissions2","_item$columns2","_this$first","_this$first2","_this$first3","_this$first4","JSON","stringify","column","isMissing","hasInherited","hasDenyAction","inheritance_mode","isEqual_","inheritedFrom","hasExpandable","objPermissions","aggregated","aggKey","dst","reduce","_item$getItems","getItems","_partition_3","_partition_4","other","OrderByRoleStatus","getAllColumnGroupsActual","columnGroups","nameFilter","nameFilterLower","predicates","_item$columns$some","_item$columns3","_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","names","isPermissionDeleted","permissionDeletionError","deletionError","getLastDeletedPermissionKey","deletedItemKey","getIdmPermissionsRequestError","idmPermissionsRequestError","getIdmManageAclRequestError","idmManageAclRequestError","getIdmPathVersion","version","getChaosIsLoaded","chaos_cell_bundles","getChaosIsLoading","getChaosBundlesSortState","bundlesSort","getChaosBundlesNameFilter","bundlesNameFilter","getChaosBundlesAccountFilter","bundlesAccountFilter","getChaosBundlesTagNodeFilter","bundlesTagNodeFilter","getChaosBundles","bundles","getChaosActiveBundle","activeBundle","getChaosBundlesTableMode","bundlesTableMode","getChaosActiveBundleData","bundle","getChaosBundlesTotal","aggregateTotal","COLUMNS_SORTABLE_AS_IS","getChaosBundlesFiltered","accountFilter","tagNodeFilter","lowerAccountFilter","changelog_account","snapshot_account","lowerTagNodeFilter","node_tag_filter","getChaosBundlesSorted","order","sortTableBundles","columnsSortable","getChaosCells","cells","getChaosCellsSortState","cellsSort","getChaosCellsIdFilter","cellsIdFilter","getChaosCellsBundleFilter","cellsBundleFilter","getChaosCellsHostFilter","cellsHostFilter","getChaosCellsOfActiveAccount","getChaosCellsFiltered","idFilter","bundleFilter","hostFilter","peerAddress","filterChaosCellsByBundle","getChaosCellsSorted","sortArrayBySortState","getChaosCellsBundles","getChaosCellsHosts","getChaosCellsHostsOfActiveBundle","prepareHostsFromCells","prepareHost","getChaosBreadcrumbItems","tabletChaosBundleRootLink","tabletActiveChaosBundleLink","getChytListData","chyt","list","getChytListAvailableCreators","_data$items","creator","getChytListAvailableHealths","_data$items2","health","getChytListAvailableStates","_data$items3","getChytCurrentAlias","clique","currentClique","getChytListFilterAlias","listFilters","getChytListFilterHealth","getChytListFilterCreator","getChytListFilterState","CHYT_LIST_SELECTABLE_COLUMNS","instance_count","total_cpu","total_memory","creation_time","stage","yt_operation_start_time","yt_operation_finish_time","speclet_modification_time","strawberry_state_modification_time","getChytListVisibleColumns","_getSettingsData$glob","getSettingsData","userColumns","getChytListColumns","checked","getChytListTableSortState","getChytListTableSortStateByName","multisortIndex","getChytFilterPredicate","alias","getChytListTableItems","predicate","_data$items4","filteredItems","multiSortBySortStateArray","getFavouriteAccounts","makeGetSetting","getAccountsNS","prepareFavourites","getLastVisitedAccounts","prepareLastVisited","getPopularAccounts","preparePopulars","isActiveAcountInFavourites","getActiveAccount","prepareIsInFavourites","getFavouriteChyt","getChytNS","getLastVisitedChyt","isActiveCliqueInFavourites","getFavouritePaths","getClusterNS","getLastVisitedPaths","getPopularPaths","isCurrentPathInFavourites","getPath","favourites","getFavouriteBundles","getBundlesNS","isActiveBundleInFavourites","getTabletsActiveBundle","getFavouriteChaosBundles","getChaosBundlesNS","isActiveChaosBundleInFavourites","getSetting","SettingName","LOCAL","FAVOURITES","settingGetter","LAST_VISITED","lastVisited","entry","tabletCellBundleDashboardUrl","makeUrlForTabletCellBundleDashboard","genTabletCellBundlesCellUrl","cellId","TABLET_CELL_BUNDLES","TabletsTab","TABLET_CELLS","compareBundlesByAccount","left","right","sorted","_orderTypeToOrderK","orderTypeToOrderK","orderK","undefinedOrderK","_ref2$nodes","nodes","l","_ref3$nodes","r","multiSortWithUndefined","includes"],"sourceRoot":""}
|
1
|
+
{"version":3,"file":"js/scheduling.6448eabd.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/ClickableAttributesButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/CollapsibleSection/CollapsibleSection.tsx","webpack://@ytsaurus/ui/./src/ui/components/Dialog/controls/RoleListControl/utils.ts","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/components/EditableAsText/EditableAsText.tsx","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/ElementsTableFooter.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyFooter.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyHead.js","webpack://@ytsaurus/ui/./src/ui/components/Favourites/Favourites.tsx","webpack://@ytsaurus/ui/./src/ui/components/Text/Text.tsx","webpack://@ytsaurus/ui/./src/ui/pages/components/Placeholder.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.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/scheduling/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/controls/ShareUsageBar.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/scheduling/scheduling-ts.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/PoolMetaData.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/PoolStaticConfiguration/SchedulingStaticConfiguration.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/SchedulingOperationsError/SchedulingOperationsError.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/PoolsSuggest/PoolsSuggest.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/PoolTags.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Overview/Overview.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/ElementsTableSticky.js","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/Details/Details.js","webpack://@ytsaurus/ui/./src/ui/utils/scheduling/details.js","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/PoolAcl/PoolAcl.js","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/SchedulingExpandedPoolsUpdater.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/Content.js","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/rum/rum-app-measures.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/acl-filters.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/acl.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/chaos_cell_bundles/index.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/chyt/index.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/favourites.js","webpack://@ytsaurus/ui/./src/ui/utils/tablet_cell_bundles/index.ts"],"sourcesContent":["import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport AttributesButton, {AttributesButtonProps} from './AttributesButton';\n\nimport {openAttributesModal} from '../../store/actions/modals/attributes-modal';\nimport {ButtonProps} from '../Button/Button';\n\ninterface Props extends Omit<AttributesButtonProps, 'onClick' | 'title'> {\n title: React.ReactNode;\n\n // The function is called inside click handler, and overrides path and exactPath\n getPathProps?: () => Pick<Partial<Props>, 'path' | 'exactPath'>;\n path?: string;\n exactPath?: string;\n\n attribute?: string;\n attributes?: object;\n\n size?: ButtonProps['size'];\n view?: ButtonProps['view'];\n}\n\nfunction ClickableAttributesButton({\n title,\n getPathProps = () => {\n return {};\n },\n path,\n exactPath,\n attribute,\n attributes,\n openAttributesModal,\n withTooltip = true,\n tooltipProps = {placement: 'bottom-end', content: 'Show attributes'},\n ...rest\n}: Props & ConnectedProps<typeof connector>) {\n return (\n <AttributesButton\n {...rest}\n tooltipProps={tooltipProps}\n withTooltip={withTooltip}\n onClick={() => {\n const pathProps = {\n path,\n exactPath,\n ...getPathProps(),\n };\n\n openAttributesModal({\n title,\n ...pathProps,\n attribute,\n attributes,\n });\n }}\n />\n );\n}\n\nconst connector = connect(null, {openAttributesModal});\n\nexport default connector(ClickableAttributesButton);\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","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\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: 'Current', data: currentArr.concat(otherArr)},\n toAdd: {\n title: 'Will be added',\n itemClassName: block('item-to-add'),\n data: toAdd.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n toRemove: {\n title: 'Will be removed',\n itemClassName: block('item-to-remove'),\n data: toRemove.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n unrecognized: {\n 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 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 Block 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 <Block {...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 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\ninterface Props {\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 onModeChange?: (isEdit: boolean) => void;\n}\n\nexport function EditableAsText(props: Props) {\n const {\n children,\n onChange,\n text,\n className,\n withControls,\n size,\n disableEdit,\n cancelOnClose,\n openOnClick,\n renderEditor,\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 handleWrapClick = () => {\n if (!editMode && openOnClick) {\n startTextEdit();\n }\n };\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 <div\n className={block(null, [className || '', editMode ? 'edit' : ''])}\n onClick={handleWrapClick}\n >\n {editMode ? (\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 </>\n ) : (\n <React.Fragment>\n {children}\n {!disableEdit && (\n <Button\n className={block('control', {type: 'edit'})}\n view=\"outlined\"\n onClick={startTextEdit}\n size={controlSize}\n >\n <Icon awesome={'pencil'} size={controlSize} />\n </Button>\n )}\n </React.Fragment>\n )}\n </div>\n );\n}\n\nexport function EditButton({\n onClick,\n size = 'm',\n}: {\n onClick: () => void;\n size?: ButtonProps['size'];\n}) {\n return (\n <Button className={block('edit-btn')} onClick={onClick} size={size}>\n <Icon awesome={'pencil'} />\n </Button>\n );\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableRow from '../../components/ElementsTable/ElementsTableRow';\n\nimport {ELEMENTS_TABLE, TemplatesPropType, prepareColumnsData} from './utils';\n\nimport './ElementsTable.scss';\n\nexport default class ElementsTableFooter extends Component {\n static propTypes = {\n footer: PropTypes.object.isRequired,\n templates: TemplatesPropType.isRequired,\n cssHover: PropTypes.bool,\n };\n\n static defaultProps = {\n templates: {},\n cssHover: false,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {};\n }\n\n static getDerivedStateFromProps(props) {\n const {columns} = props;\n const {items, set} = prepareColumnsData(columns);\n\n return {\n columnItems: items,\n columnSet: set,\n };\n }\n\n renderRow(item, index, key = index) {\n const {css, itemHeight, templates, itemMods, selectedIndex, computeKey, cssHover} =\n this.props;\n const {columnSet, columnItems} = this.state;\n\n const selected = selectedIndex === index;\n const currentKey = typeof computeKey === 'function' ? computeKey(item) : key;\n\n return (\n <ElementsTableRow\n key={currentKey}\n columnSet={columnSet}\n columnItems={columnItems}\n item={item}\n itemHeight={itemHeight}\n css={css}\n templates={templates}\n selected={selected}\n index={index}\n itemMods={itemMods}\n cssHover={cssHover}\n />\n );\n }\n\n render() {\n const bFooter = block(ELEMENTS_TABLE)('footer');\n const {footer} = this.props;\n\n return <tfoot className={bFooter}>{this.renderRow(footer, 0)}</tfoot>;\n }\n}\n","import React from 'react';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableFooter from '../../../components/ElementsTable/ElementsTableFooter';\n\nimport {getDisplayName} from '../../../utils';\nimport {prepareTableClassName} from '../../../components/ElementsTable/utils';\n\nimport '../ElementsTable.scss';\n\nexport default (Component) => {\n return class WithStickyFooter extends React.Component {\n static displayName = `WithStickyFooter(${getDisplayName(Component)})`;\n\n static defaultProps = {\n size: 'm',\n };\n\n renderStickyFooter() {\n const bWrapper = block('elements-table-wrapper')({\n sticky: 'bottom',\n });\n const {footer} = this.props;\n\n return (\n <div className={bWrapper}>\n <table className={prepareTableClassName(this.props)}>\n <ElementsTableFooter {...this.props} footer={footer} />\n </table>\n </div>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n <Component {...this.props} />\n {this.props.footer && this.renderStickyFooter()}\n </React.Fragment>\n );\n }\n };\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\nimport {compose} from 'redux';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableHeader from '../../../components/ElementsTable/ElementsTableHeader';\n\nimport {toggleColumnSortOrder} from '../../../store/actions/tables';\nimport {getDisplayName} from '../../../utils';\nimport {prepareTableClassName} from '../../../components/ElementsTable/utils';\nimport {HEADER_HEIGHT} from '../../../constants/index';\n\nimport '../ElementsTable.scss';\n\nconst withStickyHead = (Component) => {\n return class WithStickyHead extends React.Component {\n static displayName = `WithStickyHead(${getDisplayName(Component)})`;\n\n static propTypes = {\n top: PropTypes.number,\n };\n\n static defaultProps = {\n templates: {},\n size: 'm',\n theme: 'bordered',\n padded: false,\n striped: true,\n top: HEADER_HEIGHT,\n };\n\n renderStickyHead() {\n const {top} = this.props;\n const bWrapper = block('elements-table-wrapper')({sticky: 'top'});\n\n return (\n <div className={bWrapper} style={{top}}>\n <table className={prepareTableClassName(this.props)}>\n <ElementsTableHeader {...this.props} />\n </table>\n </div>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n {this.renderStickyHead()}\n <Component {...this.props} />\n </React.Fragment>\n );\n }\n };\n};\n\nconst mapStateToProps = ({tables}) => {\n return {sortState: tables};\n};\n\nconst mapDispatchToProps = {\n toggleColumnSortOrder,\n};\n\nconst composedWithStickyHead = compose(\n connect(mapStateToProps, mapDispatchToProps),\n withStickyHead,\n);\n\nexport default composedWithStickyHead;\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {Button, ButtonProps, DropdownMenu} from '@gravity-ui/uikit';\n\nimport Icon from '../Icon/Icon';\nimport Hotkey from '../../components/Hotkey/Hotkey';\n\nimport './Favourites.scss';\n\nconst b = block('favourites');\n\ninterface Props {\n className?: string;\n isActive: boolean;\n items: Array<FavouritesItem>;\n onItemClick: (item: FavouritesItem) => void;\n toggleDisabled?: boolean;\n onToggle: () => void;\n theme?: 'clear';\n}\n\nexport interface FavouritesItem {\n path: string;\n}\n\ninterface State {\n isActive: boolean;\n}\n\nexport default class Favourites extends Component<Props, State> {\n static itemType = PropTypes.shape({\n path: PropTypes.string,\n });\n\n static propTypes = {\n isActive: PropTypes.bool.isRequired,\n items: PropTypes.arrayOf(Favourites.itemType),\n onItemClick: PropTypes.func,\n toggleDisabled: PropTypes.bool,\n onToggle: PropTypes.func,\n className: PropTypes.string,\n theme: PropTypes.string,\n };\n\n static getDerivedStateFromProps(props: Props, state: State) {\n if (props.isActive !== state.isActive) {\n return {isActive: props.isActive};\n }\n return null;\n }\n\n state = {\n isActive: this.props.isActive,\n };\n\n toggleActive = () => {\n const {onToggle} = this.props;\n\n this.setState((prevState) => ({isActive: !prevState.isActive}));\n onToggle();\n };\n\n onItemClick = (item: FavouritesItem) => {\n const {onItemClick} = this.props;\n onItemClick(item);\n };\n\n renderDropDownMenu() {\n const {items} = this.props;\n\n const dropItems = map_(items, (item) => {\n return {\n text: item.path,\n action: () => this.onItemClick(item),\n };\n });\n if (items.length === 0) {\n dropItems.push({\n action: () => {},\n text: 'No favourites',\n });\n }\n\n const switcher = this.renderButton({\n view: 'normal',\n size: 'm',\n pin: 'brick-round',\n title: 'View favourites',\n children: <Icon awesome=\"angle-down\" />,\n });\n\n return (\n <DropdownMenu\n popupProps={{\n className: b('popup', {empty: items.length === 0}),\n }}\n items={dropItems}\n switcher={switcher}\n />\n );\n }\n\n renderHotkey() {\n return <Hotkey settings={[{keys: 'f', handler: this.toggleActive, scope: 'all'}]} />;\n }\n\n renderButton(buttonProps: ButtonProps & {disabled?: boolean}) {\n const {theme} = this.props;\n const themeProps = !theme ? {} : {view: 'outlined' as const};\n return <Button {...buttonProps} {...themeProps} />;\n }\n\n render() {\n const {toggleDisabled, className, theme} = this.props;\n const {isActive} = this.state;\n\n return (\n <div className={b(null, className)}>\n <div className={b('star-btn', {clear: theme === 'clear'})}>\n {this.renderButton({\n view: 'outlined-info',\n selected: isActive,\n size: 'm',\n pin: theme === 'clear' ? 'round-brick' : 'round-clear',\n title: 'Add to favourites [F]',\n onClick: this.toggleActive,\n disabled: toggleDisabled,\n children: <Icon awesome={isActive ? 'star-alt' : 'star'} />,\n })}\n </div>\n {this.renderDropDownMenu()}\n {this.renderHotkey()}\n </div>\n );\n }\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport './Text.scss';\nimport unipika from '../../common/thor/unipika';\nimport {UNIPIKA_ESCAPED_SETTINGS} from '../../utils';\n\nconst block = cn('yt-text');\n\ninterface Props {\n className?: string;\n children: React.ReactNode;\n}\n\nexport function Secondary({children, disabled}: Props & {disabled?: boolean}) {\n return <span className={block('secondary', {disabled})}>{children}</span>;\n}\n\nexport function Bold({children}: Props) {\n return <span className={block('bold')}>{children}</span>;\n}\n\nexport function SecondaryBold({children}: Props) {\n return (\n <Secondary>\n <Bold>{children}</Bold>\n </Secondary>\n );\n}\n\nexport function Warning({children, className}: Props) {\n return <span className={block('warning', className)}>{children}</span>;\n}\n\nexport function WarningLight({children, className}: Props) {\n return <span className={block('warning-light', className)}>{children}</span>;\n}\n\nexport function NoWrap({children}: Props) {\n return <span className={block('no-wrap')}>{children}</span>;\n}\n\nexport function Escaped({text, onClick}: {text: string; onClick?: (e: React.MouseEvent) => void}) {\n const textNode = unipika.prettyprint(text, {\n ...UNIPIKA_ESCAPED_SETTINGS,\n asHTML: true,\n });\n return (\n <span\n onClick={onClick}\n className={block('escaped')}\n dangerouslySetInnerHTML={{__html: textNode}}\n />\n );\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","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 {Toaster} from '@gravity-ui/uikit';\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 {isSupportedSchedulingChildrenByPool} from '../../../store/selectors/thor/support';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {flattenAttributes} from '../../../utils/scheduling/scheduling';\nimport {UIBatchError} from '../../../utils/errors/ui-error';\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 'estimated_burst_usage_duration_sec',\n 'fair_share_ratio',\n 'fifo_index',\n 'fifo_sort_parameters',\n 'integral_guarantee_type',\n 'is_ephemeral',\n 'max_operation_count',\n 'max_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 'resource_usage',\n 'promised_fair_share_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 '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 new 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 || !isSupportedSchedulingChildrenByPool(state);\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 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: Object.keys(rawPools).length ? rawPools : 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, PoolInfo>,\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\nimport {Toaster} from '@gravity-ui/uikit';\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 type {PoolInfo} from '../../../store/selectors/scheduling/scheduling-pools';\nimport {\n getSchedulingAttributesToFilterParams,\n schedulingOverviewHasFilter,\n} from '../../../store/selectors/scheduling/attributes-to-filter';\nimport {USE_CACHE} from '../../../../shared/constants/yt-api';\n\nconst toaster = new Toaster();\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_fair_share_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?: PoolInfo): 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: PoolInfo): 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(abcServiceFilter: {\n id: number;\n slug: string;\n}): SchedulingThunkAction {\n return (dispatch, getState) => {\n dispatch(schedulingLoadFilterAttributes(getTree(getState())));\n dispatch({\n type: SCHEDULING_DATA_PARTITION,\n data: {abcServiceFilter},\n });\n };\n}\n","import 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 {Toaster} from '@gravity-ui/uikit';\n\n// @ts-expect-error\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {getSchedulingNS} from '../../../store/selectors/settings';\nimport {toggleFavourite} from '../../../store/actions/favourites';\nimport {getPools, getTree} from '../../../store/selectors/scheduling/scheduling';\nimport {\n POOL_GENERAL_TYPE_TO_ATTRIBUTE,\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_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';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\n\nconst toaster = new Toaster();\n\nconst setName = (path, newName, prevName) => {\n if (prevName === newName) {\n return Promise.resolve();\n }\n\n return yt.v3.set({path: `${path}/@name`}, newName);\n};\n\nconst makeOtherAttributesCommands = (path, values, initialValues) => {\n const initialSortParamsString = initialValues.fifoSortParams.join('|');\n const newSortParamsString = values.fifoSortParams.join('|');\n\n const commands = [];\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\nconst setResourceAttributes = (path, values, omittedValues, attribute) => {\n if (isEmpty_(values) && isEmpty_(omittedValues)) {\n return Promise.resolve();\n }\n\n const keyMapper = {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 yt.v3.set({path: `${path}/@${attribute}`}, input);\n })\n .catch((error) => {\n if (error.code === 500) {\n // attribute not found\n return yt.v3.set({path: `${path}/@${attribute}`}, preparedValues);\n }\n\n return Promise.reject(error);\n });\n};\n\nconst makeGeneralCommands = (path, values, initialValues) => {\n const isInitial = (value, initialValue) => value === initialValue;\n const isOmitted = (value, omittedValues) =>\n Object.prototype.hasOwnProperty.call(omittedValues, value);\n\n //const {name: abcServiceName, slug: abcServiceSlug, id} = prepareAbcService(values.abcService);\n const omittedValues = pickBy_(\n values,\n (value) => value === '' || value === undefined || value === null,\n );\n\n const commands = [];\n\n // if (!isInitial(abcServiceSlug, initialValues.abcService?.value)) {\n // commands.push({\n // command: abcServiceSlug ? 'set' : 'remove',\n // parameters: {\n // path: `${path}/@abc`,\n // },\n // input: !abcServiceSlug ? undefined : {\n // slug: abcServiceSlug,\n // name: abcServiceName,\n // id,\n // },\n // });\n // }\n\n if (!isInitial(values.mode, initialValues.mode)) {\n commands.push({\n command: 'set',\n parameters: {\n path: `${path}/@mode`,\n },\n input: values.mode,\n });\n }\n\n if (!isInitial(values.weight, initialValues.weight)) {\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),\n });\n }\n }\n\n return commands;\n};\n\nfunction isInvalidNumber(value) {\n return value === '' || isNaN(Number(value));\n}\n\nfunction isValidNumber(value) {\n return !isInvalidNumber(value);\n}\n\nexport function editPool(pool, values, initialValues) {\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 = pickBy_(values.resourceLimits, isValidNumber);\n const omittedResourceLimitsValues = pickBy_(values.resourceLimits, isInvalidNumber);\n const resourceLimitsValues = mapValues_(filteredResourceLimitsValues, (value) =>\n Number(value),\n );\n delete resourceLimitsValues['error-block'];\n delete omittedResourceLimitsValues['error-block'];\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 }),\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 ])\n .then(setName(path, values.general.name, initialValues.general.name))\n .then(() => {\n toaster.add({\n name: 'edit pool',\n timeout: 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 !== yt.codes.CANCELLED) {\n dispatch({\n type: SCHEDULING_EDIT_POOL_FAILURE,\n data: {error},\n });\n\n return Promise.reject(error);\n }\n });\n };\n}\n\nexport function openEditModal(item) {\n return {\n type: TOGGLE_EDIT_VISIBILITY,\n data: {\n visibility: true,\n item,\n },\n };\n}\n\nexport function closeEditModal({cancelled} = {}) {\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) {\n return (dispatch) => {\n dispatch({\n type: CHANGE_TREE,\n data: {tree},\n });\n\n dispatch(loadSchedulingData());\n };\n}\n\nexport function changeTableTreeState(treeState) {\n return {\n type: CHANGE_TABLE_TREE_STATE,\n data: {treeState},\n };\n}\n\nexport function changePool(pool) {\n return {\n type: CHANGE_POOL,\n data: {pool},\n };\n}\n\nexport function changeContentMode(evt) {\n return {\n type: CHANGE_CONTENT_MODE,\n data: {\n contentMode: evt.target.value,\n },\n };\n}\n\nexport function changePoolChildrenFilter(poolChildrenFilter) {\n return {\n type: CHANGE_POOL_CHILDREN_FILTER,\n data: {poolChildrenFilter},\n };\n}\n\nexport function togglePoolFavourites(pool, tree) {\n return (dispatch, getState) => {\n const value = `${pool}[${tree}]`;\n const parentNS = getSchedulingNS(getState());\n return dispatch(toggleFavourite(value, parentNS));\n };\n}\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 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 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 {PoolInfo, getPools} from './scheduling-pools';\n\nexport const getSchedulingBreadcrumbItems = createSelector(\n [getPool, getPools],\n (pool: string, pools: Array<PoolInfo>) => {\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\ninterface 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 getCurrentPoolStaticConfiguration = createSelector(\n [getIsRoot, getCurrentPool],\n (isRoot, data): Array<PoolStaticConfigurationItem> => {\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 makeStaticConfigurationItem(\n 'Strong guarantee',\n ypath.getValue(data.attributes, '/strong_guarantee_resources'),\n ),\n burst_guarantee_resources &&\n makeStaticConfigurationItem('Burst', burst_guarantee_resources),\n resource_flow && makeStaticConfigurationItem('Flow', resource_flow),\n ].filter(Boolean);\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 React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport capitalize_ from 'lodash/capitalize';\n\nimport format from '../../../common/hammer/format';\nimport ypath from '../../../common/thor/ypath';\n\nimport MetaTable from '../../../components/MetaTable/MetaTable';\nimport {useSelector} from 'react-redux';\nimport {getCurrentPool, getIsRoot} from '../../../store/selectors/scheduling/scheduling';\nimport UIFactory from '../../../UIFactory';\nimport {getClusterUiConfig} from '../../../store/selectors/global';\n\nconst block = cn('pool-meta-table');\n\ninterface Props {\n className?: string;\n}\n\nexport default function PoolMetaData({className}: Props) {\n const pool = useSelector(getCurrentPool);\n const isRoot = useSelector(getIsRoot);\n const clusterUiConfig = useSelector(getClusterUiConfig);\n\n if (!pool || isRoot) {\n return null;\n }\n\n const cpu = ypath.getNumber(pool, '/cypressAttributes/strong_guarantee_resources/cpu', 0);\n const gpu = ypath.getNumber(pool, '/cypressAttributes/strong_guarantee_resources/gpu', 0);\n const memory = ypath.getNumber(pool, '/cypressAttributes/strong_guarantee_resources/memory', 0);\n const hasStrong = cpu > 0 || gpu > 0 || memory > 0;\n\n const {integralType, mode} = pool;\n const hasIntegralType = integralType && integralType !== 'none';\n\n const guaranteeType = [hasStrong && 'Strong', hasIntegralType && capitalize_(integralType)]\n .filter(Boolean)\n .join(' + ');\n return (\n <div className={block(null, className)}>\n <MetaTable\n items={[\n {\n key: 'Guarantee type',\n value: guaranteeType || 'Strong',\n },\n {\n key: 'Mode',\n value: format.Readable(mode) || format.NO_VALUE,\n },\n ...(UIFactory.getExtraMetaTableItemsForPool({pool, clusterUiConfig}) || []),\n ]}\n />\n </div>\n );\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport {Column} from '@gravity-ui/react-data-table';\n\nimport CollapsibleSection from '../../../components/CollapsibleSection/CollapsibleSection';\nimport {getIsRoot, getTree} from '../../../store/selectors/scheduling/scheduling';\nimport {\n getCurrentPoolStaticConfiguration,\n getCurrentPoolTreeStaticConfiguration,\n} from '../../../store/selectors/scheduling/scheduling-ts';\n\nimport DataTableYT from '../../../components/DataTableYT/DataTableYT';\nimport format from '../../../common/hammer/format';\n\nimport './SchedulingStaticConfiguration.scss';\nimport {getSettingsSchedulingExpandStaticConfiguration} from '../../../store/selectors/settings/settings-ts';\nimport {setSettingsSchedulingExpandStaticConfiguration} from '../../../store/actions/settings/settings';\nimport Label from '../../../components/Label/Label';\nimport UIFactory from '../../../UIFactory';\nimport PoolMetaData from '../Content/PoolMetaData';\nimport {getCluster} from '../../../store/selectors/global';\nimport {ArrayElement} from '../../../types';\n\nconst block = cn('scheduling-static-configuration');\n\ninterface Props {\n onToggleCollapsedState: (value: boolean) => void;\n}\n\nfunction SchedulingStaticConfiguration(props: Props) {\n const {onToggleCollapsedState} = props;\n const dispatch = useDispatch();\n const isRoot = useSelector(getIsRoot);\n\n const collapsed = useSelector(getSettingsSchedulingExpandStaticConfiguration);\n const onToggle = React.useCallback(\n (value: boolean) => {\n onToggleCollapsedState(value);\n dispatch(setSettingsSchedulingExpandStaticConfiguration(value));\n },\n [onToggleCollapsedState, dispatch],\n );\n\n return (\n <CollapsibleSection\n name={'Static configuration'}\n className={block()}\n onToggle={onToggle}\n collapsed={collapsed}\n >\n <div className={block('container')}>\n <PoolMetaData className={block('pool-meta')} />\n {isRoot ? <PoolTreeStaticConfiguration /> : <PoolStaticConfiguration />}\n </div>\n </CollapsibleSection>\n );\n}\n\nexport default React.memo(SchedulingStaticConfiguration);\n\nfunction PoolStaticConfiguration() {\n const staticConfigurationItems = useSelector(getCurrentPoolStaticConfiguration);\n\n const columns: Array<Column<ArrayElement<typeof staticConfigurationItems>>> = [\n {\n name: 'name',\n header: 'Guarantees',\n sortable: false,\n width: 200,\n },\n {\n name: 'cpu',\n header: 'CPU',\n sortable: false,\n width: 100,\n render: ({row}) => {\n const {cpu, cpuLabel} = row;\n if (cpuLabel) {\n return <Label capitalize text={cpuLabel} />;\n }\n return format['Number'](cpu);\n },\n align: 'right',\n },\n {\n name: 'gpu',\n header: 'GPU',\n sortable: false,\n width: 100,\n render: ({row}) => {\n return format['Number'](row.gpu);\n },\n align: 'right',\n },\n {\n name: 'memory',\n header: 'Memory',\n sortable: false,\n width: 120,\n render: ({row}) => {\n return format['Bytes'](row.memory);\n },\n align: 'right',\n },\n {\n name: 'user_slots',\n header: 'User slots',\n sortable: false,\n width: 100,\n render: ({row}) => {\n return format['Number'](row.user_slots);\n },\n align: 'right',\n },\n {\n name: 'network',\n header: 'Network',\n sortable: false,\n width: 100,\n render: ({row}) => {\n const res = format['Number'](row.network);\n return res === format.NO_VALUE ? res : res + ' %';\n },\n align: 'right',\n },\n ];\n\n return (\n <DataTableYT\n className={block('table')}\n columns={columns}\n data={staticConfigurationItems}\n useThemeYT={true}\n settings={{\n displayIndices: false,\n }}\n />\n );\n}\n\nfunction PoolTreeStaticConfiguration() {\n const items = useSelector(getCurrentPoolTreeStaticConfiguration);\n const poolTree = useSelector(getTree);\n const cluster = useSelector(getCluster);\n\n const columns: Array<Column<ArrayElement<typeof items>>> = [\n {\n name: 'name',\n header: '',\n sortable: false,\n width: 200,\n render: (row) => {\n const {name, level} = row?.row || {};\n return <span className={block('name', {level: level as any})}>{name}</span>;\n },\n },\n {\n name: 'total',\n header: 'Total',\n sortable: false,\n width: 100,\n render: ({row}) => {\n return format[row.format](row.total);\n },\n align: 'right',\n },\n {\n name: 'used',\n header: 'Distributed',\n sortable: false,\n width: 150,\n render({row}) {\n const {used, usedTitle, lastDayMaxValueSensor, lastDayMaxValueTitle} = row;\n const formatValue = format[row.format];\n\n const content = !lastDayMaxValueSensor\n ? null\n : UIFactory.renderSchedulingLastDayMaximum({\n cluster,\n tree: poolTree,\n title: lastDayMaxValueTitle,\n sensor: lastDayMaxValueSensor,\n format: formatValue,\n current: {\n value: formatValue(used),\n title: usedTitle!,\n },\n showHint: true,\n showAsLink: true,\n });\n\n return !content ? (\n formatValue(used)\n ) : (\n <span className={block('used-cell')}>\n {formatValue(used)} / {content}\n </span>\n );\n },\n align: 'right',\n },\n {\n name: 'free',\n header: 'Delta',\n sortable: false,\n width: 150,\n render({row}) {\n const formatFn = format[row.format];\n const {free, total, lastDayMaxValueSensor} = row;\n const freeValue = formatFn(free);\n\n const content = !lastDayMaxValueSensor\n ? null\n : UIFactory.renderSchedulingLastDayMaximum({\n cluster,\n tree: poolTree,\n title: 'Last day max operations',\n sensor: lastDayMaxValueSensor,\n format: (lastDayMaxValue?: number) => {\n const v =\n isNaN(total!) || isNaN(lastDayMaxValue!)\n ? undefined\n : total! - lastDayMaxValue!;\n return formatFn(v);\n },\n });\n\n return !content ? (\n freeValue\n ) : (\n <span>\n {freeValue} / {content}\n </span>\n );\n },\n align: 'right',\n },\n ];\n\n return (\n <DataTableYT\n className={block('table')}\n columns={columns}\n data={items}\n useThemeYT={true}\n settings={{\n displayIndices: false,\n }}\n rowClassName={(row) => {\n return !row?.level ? '' : block('row', {level: row.level as any});\n }}\n />\n );\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport ErrorBlock from '../../../../../components/Error/Error';\nimport {getSchedulingOperationsError} from '../../../../../store/selectors/scheduling/expanded-pools';\n\nfunction SchedulingOperationsError() {\n const error = useSelector(getSchedulingOperationsError);\n return !error ? null : <ErrorBlock error={error} topMargin={'none'} />;\n}\n\nexport default React.memo(SchedulingOperationsError);\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\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 {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport capitalize_ from 'lodash/capitalize';\n\nimport Label from '../../../../../components/Label/Label';\nimport UIFactory from '../../../../../UIFactory';\nimport {PoolInfo} from '../../../../../store/selectors/scheduling/scheduling-pools';\nimport {getCluster, getClusterUiConfig} from '../../../../../store/selectors/global';\n\nimport './PoolTags.scss';\n\nconst block = cn('scheduling-pool-tags');\n\nfunction PoolTags({pool}: {pool: PoolInfo}) {\n const cluster = useSelector(getCluster);\n const clusterUiConfig = useSelector(getClusterUiConfig);\n\n const {integralType} = pool;\n const showGuaranteeType = integralType === 'burst' || integralType === 'relaxed';\n const hasFlow = Number(pool.flowCPU) > 0 || Number(pool.flowGPU) > 0;\n return (\n <span className={block()}>\n {showGuaranteeType && (\n <Label\n className={block('tag')}\n text={capitalize_(integralType)}\n theme={'complementary'}\n />\n )}\n {!showGuaranteeType && hasFlow && (\n <Label className={block('tag')} text={'Integral'} theme={'complementary'} />\n )}\n {pool.mode === 'fifo' && (\n <Label className={block('tag')} text={'FIFO'} theme={'misc'} />\n )}\n {UIFactory.renderSchedulingTableItemExtraControls({\n cluster,\n pool,\n clusterUiConfig,\n })}\n </span>\n );\n}\n\nexport default React.memo(PoolTags);\n","import {Sticky, StickyContainer} from 'react-sticky';\nimport React, {Component, Fragment} from 'react';\nimport {connect, useDispatch, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport hammer from '../../../../../common/hammer';\nimport cn from 'bem-cn-lite';\nimport qs from 'qs';\n\nimport ElementsTable from '../../../../../components/ElementsTable/ElementsTable';\nimport {FormattedLink, FormattedText} from '../../../../../components/formatters';\n\nimport ClickableAttributesButton from '../../../../../components/AttributesButton/ClickableAttributesButton';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport Button from '../../../../../components/Button/Button';\nimport Label from '../../../../../components/Label/Label';\nimport Link from '../../../../../components/Link/Link';\nimport Icon from '../../../../../components/Icon/Icon';\n\nimport {\n changePool,\n changeTableTreeState,\n openEditModal,\n} from '../../../../../store/actions/scheduling/scheduling';\nimport {\n openPoolDeleteModal,\n schedulingSetAbcFilter,\n} from '../../../../../store/actions/scheduling/scheduling-ts';\nimport {\n getCurrentPool,\n getIsRoot,\n getSchedulingIsInitialLoading,\n getSchedulingOverviewMaxDepth,\n getSchedulingTreeState,\n getTableItems,\n getTree,\n} from '../../../../../store/selectors/scheduling/scheduling';\nimport {getSchedulingAbcFilter} from '../../../../../store/selectors/scheduling/attributes-to-filter';\nimport {SCHEDULING_POOL_TREE_TABLE_ID, Tab} from '../../../../../constants/scheduling';\nimport {poolsTableItems} from '../../../../../utils/scheduling/overviewTable';\nimport {HEADER_HEIGHT, Page} from '../../../../../constants/index';\nimport {getCluster} from '../../../../../store/selectors/global';\n\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {getSchedulingIsFinalLoadingState} from '../../../../../store/selectors/scheduling';\nimport ShareUsageBar from '../../controls/ShareUsageBar';\nimport SchedulingStaticConfiguration from '../../../PoolStaticConfiguration/SchedulingStaticConfiguration';\n\nimport './Overview.scss';\nimport {Dialog} from '@gravity-ui/uikit';\nimport {Tooltip} from '../../../../../components/Tooltip/Tooltip';\nimport SchedulingOperationsError from '../SchedulingOperationsError/SchedulingOperationsError';\nimport {\n getPoolPathsByName,\n getSchedulingOperationsCount,\n resetExpandedPools,\n setExpandedPools,\n setLoadAllOperations,\n} from '../../../../../store/actions/scheduling/expanded-pools';\nimport {PoolsSuggest} from '../../../../../pages/scheduling/PoolsSuggest/PoolsSuggest';\nimport PoolTags from './PoolTags';\nimport UIFactory from '../../../../../UIFactory';\n\nconst block = cn('scheduling-overview');\n\nconst STARVATION_STATUS_TO_THEME = {\n starving: 'warning',\n aggressively_starving: 'danger',\n};\n\nclass Overview extends Component {\n static resourcePropTypes = PropTypes.shape({\n type: PropTypes.string.isRequired,\n progress: PropTypes.object.isRequired,\n });\n\n static tableItemPropTypes = PropTypes.shape({\n abc: PropTypes.object,\n name: PropTypes.string.isRequired,\n fairShareRatio: PropTypes.number,\n usageRatio: PropTypes.number,\n weight: PropTypes.number,\n demandRatio: PropTypes.number,\n\n runningOperationCount: PropTypes.number,\n operationCount: PropTypes.number,\n children: PropTypes.array,\n level: PropTypes.number,\n type: PropTypes.string,\n mode: PropTypes.string,\n });\n\n static propTypes = {\n // from connect\n treeState: PropTypes.string.isRequired,\n cluster: PropTypes.string.isRequired,\n items: PropTypes.arrayOf(Overview.tableItemPropTypes).isRequired,\n currentPool: PropTypes.shape({\n name: PropTypes.string.isRequired,\n }),\n\n changePool: PropTypes.func.isRequired,\n openPoolDeleteModal: PropTypes.func.isRequired,\n schedulingSetFilter: PropTypes.func.isRequired,\n openEditModal: PropTypes.func.isRequired,\n changeTableTreeState: PropTypes.func.isRequired,\n schedulingSetAbcFilter: PropTypes.func.isRequired,\n\n isInitialLoading: PropTypes.bool,\n };\n\n static poolModeTheme = {\n fair_share: 'default',\n fifo: 'info',\n };\n\n static renderBars([share, usage] = [], {forceTheme = undefined, title = undefined}) {\n return (\n <ShareUsageBar\n className={block('bars')}\n shareValue={share?.value}\n shareTitle={share?.title}\n usageValue={usage?.value}\n usageTitle={usage?.title}\n forceTheme={forceTheme}\n title={title}\n />\n );\n }\n\n static renderRatio(data) {\n const EPSILON = 1e-6;\n\n if (data < EPSILON) {\n return 0;\n } else if (data === 1) {\n return 1;\n }\n\n return hammer.format['Number'](data, {digits: 6});\n }\n\n static renderMode(item) {\n if (item.mode) {\n const text = hammer.format['ReadableField'](item.mode);\n const theme = Overview.poolModeTheme[item.mode];\n\n return <Label text={text} theme={theme} />;\n }\n\n return hammer.format.NO_VALUE;\n }\n\n static renderWeight(item) {\n const {weightEdited} = item;\n const edited = !isNaN(weightEdited);\n return (\n <span className={block('weight-content', {edited})}>\n <Tooltip content={edited ? 'Explicitly defined' : 'Automatically calculated'}>\n {hammer.format['Number'](item.weight, {\n digits: 6,\n digitsOnlyForFloat: true,\n })}\n </Tooltip>\n </span>\n );\n }\n\n static renderColumnAsRatio(item, columnName) {\n const data = poolsTableItems[columnName].get(item);\n\n return Overview.renderRatio(data);\n }\n\n static renderFairShareUsage(item) {\n const barsData = [\n {\n value: item.fairShareRatio,\n title: 'Fair share',\n theme: 'success',\n },\n {\n value: item.usageRatio,\n title: 'Usage',\n theme: 'info',\n },\n ];\n\n const {starvation_status} = item;\n const forceTheme = STARVATION_STATUS_TO_THEME[starvation_status];\n\n return Overview.renderBars(barsData, {\n forceTheme,\n title: !forceTheme ? null : (\n <div className={block('starvation-status')}>\n <Label theme={forceTheme} text={hammer.format.Readable(starvation_status)} />\n </div>\n ),\n });\n }\n\n static renderOperationOverview(item) {\n const formatter = hammer.format['Number'];\n\n return formatter(item.runningOperationCount) + ' / ' + formatter(item.operationCount);\n }\n\n static renderAttributesButton(item, getPoolPaths) {\n const buttonProps = getPoolPaths\n ? {\n getPathProps: () => {\n return {\n exactPath: getPoolPaths(item.name).orchidPath,\n };\n },\n }\n : {\n attributes: item.attributes,\n };\n return <ClickableAttributesButton title={item.name} {...buttonProps} />;\n }\n\n static renderEditButton(item, onClick) {\n if (item.isEphemeral) {\n return null;\n }\n const title = `edit pool ${item?.name || ''}`;\n return (\n <Button title={title} size=\"s\" view=\"flat-secondary\" onClick={onClick}>\n <Icon awesome=\"pencil\" />\n </Button>\n );\n }\n\n static renderFifoIndex(item) {\n if (item.fifoIndex === undefined || item.type !== 'operation') {\n return '';\n } else {\n return item.fifoIndex;\n }\n }\n\n static renderDeleteButton(item, onClick) {\n if (item.isEphemeral) {\n return null;\n }\n return (\n <Button size=\"s\" view=\"flat-secondary\" onClick={onClick}>\n <Icon awesome=\"trash-bin\" />\n </Button>\n );\n }\n\n static renderType(item, columnName, toggleItemState, itemState, allowExpand = true) {\n const icon = {\n pool: 'tasks',\n operation: 'code',\n };\n\n const empty = allowExpand && itemState ? itemState.empty : true;\n const expanderClass = block('table-row-expander', {empty});\n const expanderClassIcon = block('table-row-expander-icon', {empty});\n\n const expanderIcon = itemState && (\n <Icon\n className={expanderClassIcon}\n awesome={itemState.collapsed ? 'angle-down' : 'angle-up'}\n />\n );\n\n return (\n <span onClick={empty ? undefined : toggleItemState} className={expanderClass}>\n {item.type !== 'operation' && expanderIcon}\n <span\n className={block('operation-icon', {\n type: item.type,\n })}\n title={item.type}\n >\n {icon[item.type] ? <Icon awesome={icon[item.type]} /> : null}\n </span>\n </span>\n );\n }\n\n static renderName(item, tab, cluster, currentPool) {\n const isCurrentPool = item.name === currentPool.name;\n const linkText = {\n pool: item.incomplete ? '' : item.name,\n operation: item.id,\n };\n\n if (item.type === 'pool') {\n if (isCurrentPool) {\n return <FormattedText text={linkText[item.type]} />;\n } else {\n const params = qs.parse(window.location.search.slice(1));\n const text = linkText[item.type];\n const state = {\n ...params,\n tab,\n cluster,\n pool: item.name,\n page: Page.SCHEDULING,\n };\n return <FormattedLink text={text} state={state} theme=\"primary\" routed />;\n }\n } else if (item.type === 'operation') {\n const url = `/${cluster}/operations/${item.id}`;\n return <Link url={url}>{linkText[item.type]}</Link>;\n } else {\n return <FormattedText text={item.name} />;\n }\n }\n\n static renderEphemeralIcon(item) {\n return (\n item.isEphemeral && (\n <Tooltip content=\"Ephemeral pool\" className={block('ephemeral-icon')}>\n <Icon awesome=\"ghost\" />\n </Tooltip>\n )\n );\n }\n\n static renderDominantResource(item) {\n return hammer.format['ReadableField'](item.dominantResource);\n }\n\n static renderMinShare(item) {\n return Overview.renderRatio(item.minShareRatio);\n }\n\n renderNameCell = (item, ...rest) => {\n const {cluster, currentPool, changePool, itemsMaxDepth} = this.props;\n const allowExpand = item.name !== currentPool.name;\n\n return (\n <span\n className={block('name-content', {\n level: item.level,\n 'max-depth': itemsMaxDepth,\n })}\n >\n {Overview.renderType(item, ...rest, allowExpand)}\n <span className={block('name-content-name')}>\n {Overview.renderName(item, Tab.OVERVIEW, cluster, currentPool, changePool)}\n </span>\n {Overview.renderEphemeralIcon(item)}\n <PoolTags pool={item} />\n </span>\n );\n };\n\n renderActions = (item) => {\n const {openEditModal, openPoolDeleteModal, getPoolPathsByName} = this.props;\n\n if (item.aggregation) {\n return;\n }\n\n if (item.type !== 'pool') {\n return Overview.renderAttributesButton(item);\n }\n\n const handleEditClick = () => openEditModal(item);\n const handleDeleteClick = () => openPoolDeleteModal(item);\n\n return (\n <Fragment>\n {Overview.renderAttributesButton(item, getPoolPathsByName)}\n \n {Overview.renderEditButton(item, handleEditClick)}\n \n {Overview.renderDeleteButton(item, handleDeleteClick)}\n </Fragment>\n );\n };\n\n get tableSettings() {\n const {treeState} = this.props;\n\n return {\n treeState,\n css: block(),\n theme: 'light',\n striped: false,\n tableId: SCHEDULING_POOL_TREE_TABLE_ID,\n tree: true,\n columns: {\n items: poolsTableItems,\n sets: {\n default: {\n items: [\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 },\n },\n mode: 'default',\n },\n templates: {\n name: this.renderNameCell,\n mode: Overview.renderMode,\n FI: Overview.renderFifoIndex,\n weight: Overview.renderWeight,\n fair_share: Overview.renderColumnAsRatio,\n usage: Overview.renderColumnAsRatio,\n demand: Overview.renderColumnAsRatio,\n min_share: Overview.renderMinShare,\n fair_share_usage: Overview.renderFairShareUsage,\n dominant_resource: Overview.renderDominantResource,\n operation_overview: Overview.renderOperationOverview,\n actions: this.renderActions,\n },\n computeKey(item) {\n return item.key;\n },\n };\n }\n\n renderToolbar() {\n return (\n <Sticky topOffset={-HEADER_HEIGHT}>\n {({isSticky}) => (\n <div className={block('toolbar', {sticky: isSticky})}>\n <SchedulingOverviewToolbar {...this.props} />\n </div>\n )}\n </Sticky>\n );\n }\n\n rowClassName = (item) => {\n const {currentPool} = this.props;\n return item.name !== currentPool?.name ? undefined : block('current-row');\n };\n\n render() {\n const {items, treeStateExpanded, isInitialLoading} = this.props;\n\n return (\n <ErrorBoundary>\n <div className={block(null, 'elements-section')}>\n <SchedulingStaticConfiguration onToggleCollapsedState={fireResizeEvent} />\n <StickyContainer>\n {this.renderToolbar()}\n <SchedulingOperationsError />\n <ResetExpandedPoolsOnTreeChange>\n <ElementsTable\n {...this.tableSettings}\n treeStateExpanded={treeStateExpanded}\n items={items}\n rowClassName={this.rowClassName}\n onItemToggleState={this.onItemToggleState}\n isLoading={isInitialLoading}\n />\n </ResetExpandedPoolsOnTreeChange>\n </StickyContainer>\n </div>\n </ErrorBoundary>\n );\n }\n\n onItemToggleState = (poolPath, collapsed) => {\n const {setExpandedPools} = this.props;\n const parts = poolPath.split('/');\n const poolName = parts[parts.length - 1];\n\n setExpandedPools({[poolName]: !collapsed});\n };\n}\n\nconst mapStateToProps = (state) => {\n const items = getTableItems(state);\n const itemsMaxDepth = getSchedulingOverviewMaxDepth(state);\n const cluster = getCluster(state);\n const currentPool = getCurrentPool(state);\n const treeState = getSchedulingTreeState(state);\n const isRoot = getIsRoot(state);\n\n const isInitialLoading = getSchedulingIsInitialLoading(state);\n\n return {\n cluster,\n items,\n itemsMaxDepth,\n currentPool,\n treeState,\n treeStateExpanded: isRoot || !items[0] ? undefined : [items[0].key],\n abcServiceFilter: getSchedulingAbcFilter(state),\n isInitialLoading,\n };\n};\n\nconst mapDispatchToProps = {\n changePool,\n openPoolDeleteModal,\n openEditModal,\n changeTableTreeState,\n schedulingSetAbcFilter,\n setExpandedPools,\n getSchedulingOperationsCount,\n setLoadAllOperations,\n getPoolPathsByName,\n};\n\nfunction fireResizeEvent() {\n setTimeout(() => window.dispatchEvent(new Event('resize')), 500);\n}\n\nconst OverviewConnected = connect(mapStateToProps, mapDispatchToProps)(Overview);\n\nexport default OverviewConnected;\n\nexport function OverviewWithRum() {\n const isFinalState = useSelector(getSchedulingIsFinalLoadingState);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.SCHEDULING_OVERVIEW,\n additionalStartType: RumMeasureTypes.SCHEDULING,\n startDeps: [isFinalState],\n allowStart: ([isFinal]) => {\n return !isFinal;\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.SCHEDULING_OVERVIEW,\n stopDeps: [isFinalState],\n allowStop: ([isFinal]) => {\n return isFinal;\n },\n });\n\n return <OverviewConnected />;\n}\n\nfunction ResetExpandedPoolsOnTreeChange({children}) {\n const dispatch = useDispatch();\n const tree = useSelector(getTree);\n /**\n * The component is required to reset inner state of ElementsTable by recreate it when tree is changed.\n * Also it resets state when the tab is changed back from 'Details'\n * These resets are required to sync store.getState().schedulingOperations.expandedPools and state of ElementsTable\n * to correctly calculate current max depth of items (see getSchedulingOverviewMaxDepth)\n */\n React.useEffect(() => {\n dispatch(resetExpandedPools(tree));\n }, [tree]);\n\n return <React.Fragment key={tree}>{children}</React.Fragment>;\n}\n\nclass SchedulingOverviewToolbar extends React.PureComponent {\n state = {\n confirmExpandDialogVisible: false,\n };\n\n handleExpand = () => {\n const opCount = this.props.getSchedulingOperationsCount();\n if (opCount <= 2000) {\n this.onConfirmExpand();\n } else {\n this.setConfirmDialogVisibility(true);\n }\n };\n onConfirmExpand = () => {\n const {setLoadAllOperations} = this.props;\n setLoadAllOperations(true);\n this.props.changeTableTreeState('expanded');\n };\n handleCollapse = () => {\n const {setLoadAllOperations} = this.props;\n setLoadAllOperations(true);\n this.props.changeTableTreeState('collapsed');\n };\n\n onAbcServiceFilter = (abcService) => {\n const {slug, id} = abcService || {};\n this.props.schedulingSetAbcFilter({id, slug});\n };\n\n setConfirmDialogVisibility = (confirmExpandDialogVisible) => {\n this.setState({confirmExpandDialogVisible});\n };\n\n renderConfirmExpandDialog() {\n const {confirmExpandDialogVisible} = this.state;\n return !confirmExpandDialogVisible ? null : (\n <Dialog open={true}>\n <Dialog.Header caption={'Confirmation of \"Expand all\"'} />\n <Dialog.Body>\n To display the expanded tree it is required to load all running operations, it\n might be a reason of less responsiveness UI.\n <div>Are you sure you want to load all running operations?</div>\n </Dialog.Body>\n <Dialog.Footer\n onClickButtonApply={() => {\n this.setConfirmDialogVisibility(false);\n this.onConfirmExpand();\n }}\n onClickButtonCancel={() => this.setConfirmDialogVisibility(false)}\n textButtonCancel={'No'}\n textButtonApply={'Yes, please expand'}\n />\n </Dialog>\n );\n }\n\n render() {\n const {\n abcServiceFilter: {slug},\n } = this.props;\n\n return (\n <React.Fragment>\n {this.renderConfirmExpandDialog()}\n <PoolsSuggest className={block('filter')} />\n\n {UIFactory.renderControlAbcService({\n className: block('abc-filter'),\n value: {slug},\n onChange: this.onAbcServiceFilter,\n })}\n\n <Button\n size=\"m\"\n className={block('toolbar-button')}\n theme=\"normal\"\n title=\"Expand All\"\n onClick={this.handleExpand}\n >\n <Icon awesome=\"arrow-to-bottom\" />\n </Button>\n\n <Button size=\"m\" theme=\"normal\" title=\"Collapse All\" onClick={this.handleCollapse}>\n <Icon awesome=\"arrow-to-top\" />\n </Button>\n </React.Fragment>\n );\n }\n}\n","import React from 'react';\nimport {compose} from 'redux';\n\nimport withStickyHead from '../../components/ElementsTable/hocs/withStickyHead';\nimport withStickyFooter from '../../components/ElementsTable/hocs/withStickyFooter';\nimport ElementsTableBase from '../../components/ElementsTable/ElementsTable';\n\nconst ElementsTable = compose(withStickyHead, withStickyFooter)(ElementsTableBase);\n\nfunction ElementsTableSticky(props) {\n return <ElementsTable {...props} />;\n}\n\nexport default ElementsTableSticky;\n","import React, {Component, Fragment} from 'react';\nimport {Sticky, StickyContainer} from 'react-sticky';\nimport {connect, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport hammer from '../../../../../common/hammer';\nimport cn from 'bem-cn-lite';\n\nimport {Progress} from '@gravity-ui/uikit';\n\nimport ElementsTableSticky from '../../../../../components/ElementsTable/ElementsTableSticky';\nimport Overview from '../../../../../pages/scheduling/Content/tabs/Overview/Overview';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport RadioButton from '../../../../../components/RadioButton/RadioButton';\nimport Filter from '../../../../../components/Filter/Filter';\n\nimport {\n changeContentMode,\n changePool,\n changePoolChildrenFilter,\n openEditModal,\n} from '../../../../../store/actions/scheduling/scheduling';\nimport {openPoolDeleteModal} from '../../../../../store/actions/scheduling/scheduling-ts';\nimport {SCHEDULING_POOL_CHILDREN_TABLE_ID, Tab} from '../../../../../constants/scheduling';\nimport {calculateTotalOverPools} from '../../../../../utils/scheduling/details';\nimport {childTableItems} from '../../../../../utils/scheduling/detailsTable';\nimport {HEADER_HEIGHT} from '../../../../../constants/index';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport {\n getContentMode,\n getCurrentPool,\n getPollChildrenTableItems,\n getPoolChildrenFilter,\n getSchedulingIsInitialLoading,\n getSortedPoolChildren,\n} from '../../../../../store/selectors/scheduling/scheduling';\n\nimport {getSchedulingIsFinalLoadingState} from '../../../../../store/selectors/scheduling';\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {getProgressTheme} from '../../../../../utils/progress';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\nimport {Tooltip} from '../../../../../components/Tooltip/Tooltip';\nimport {Bold, Secondary} from '../../../../../components/Text/Text';\n\nimport SchedulingOperationsError from '../SchedulingOperationsError/SchedulingOperationsError';\nimport {getPoolPathsByName} from '../../../../../store/actions/scheduling/expanded-pools';\n\nimport PoolTags from '../Overview/PoolTags';\n\nimport './Details.scss';\n\nconst block = cn('scheduling-details');\n\nclass Details extends Component {\n static renderDominantResource(item) {\n return hammer.format['ReadableField'](item.dominantResource);\n }\n\n static renderMinShare(item) {\n return Overview.renderRatio(item.minShareRatio);\n }\n\n static renderMaxShare(item) {\n return Overview.renderRatio(item.maxShareRatio);\n }\n\n static renderColumnAsRatio(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return Overview.renderRatio(data);\n }\n\n static renderColumnAsNumber(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return hammer.format['Number'](data);\n }\n\n static renderMaxOperationCount(item) {\n const {maxOperationCount, maxOperationCountEdited} = item;\n return Details.renderNumberWithEdited(maxOperationCount, maxOperationCountEdited);\n }\n\n static renderMaxRunningOperationCount(item) {\n const {maxRunningOperationCount, maxRunningOperationCountEdited} = item;\n return Details.renderNumberWithEdited(\n maxRunningOperationCount,\n maxRunningOperationCountEdited,\n );\n }\n\n static renderNumberWithEdited(value, editedValue) {\n const content = hammer.format.Number(value);\n\n const autoCalculated = isNaN(editedValue);\n return (\n <Tooltip content={autoCalculated ? 'Automatically calculated' : 'Explicitly defined'}>\n {autoCalculated ? <Secondary>{content}</Secondary> : <Bold>{content}</Bold>}\n </Tooltip>\n );\n }\n\n static renderColumnAsBytes(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return hammer.format['Bytes'](data);\n }\n\n static renderColumnAsFloatNumber(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return hammer.format['Number'](data, {\n digits: 2,\n digitsOnlyForFloat: true,\n });\n }\n\n static renderIntegralGuarantee(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n const {integralType} = item;\n const hasActiveGuarantee = integralType && integralType !== 'none';\n\n const value = hammer.format['Number'](data, {\n digits: 2,\n digitsOnlyForFloat: true,\n });\n\n return hasActiveGuarantee ? (\n value\n ) : (\n <Tooltip\n className={block('integral-guarantee', {\n inactive: !hasActiveGuarantee,\n })}\n content={'It is impossible to use the guarantee until \"Guarantee type\" is defined'}\n >\n {value}\n </Tooltip>\n );\n }\n\n static renderColumnAsReadable(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return hammer.format['ReadableField'](data);\n }\n\n static renderIntegralType(item, columnName) {\n const data = childTableItems[columnName].get(item);\n\n return data === undefined\n ? hammer.format.NO_VALUE\n : Details.renderColumnAsReadable(item, columnName);\n }\n\n static renderAsProgress(item, columnName) {\n const value = childTableItems[columnName].get(item);\n const theme = getProgressTheme(value);\n const text = childTableItems[columnName].text(item);\n return isNaN(value) ? (\n hammer.format.NO_VALUE\n ) : (\n <Progress value={value * 100} theme={theme} text={text} />\n );\n }\n\n static childrenIntegrals(item, columnName) {\n const value = childTableItems[columnName].get(item);\n return !value\n ? hammer.format.NO_VALUE\n : hammer.format.Number(value, {\n digits: 2,\n digitsOnlyForFloat: true,\n });\n }\n\n static propTypes = {\n // from connect\n mode: PropTypes.string.isRequired,\n filter: PropTypes.string.isRequired,\n cluster: PropTypes.string.isRequired,\n currentPool: PropTypes.shape({\n name: PropTypes.string.isRequired,\n }),\n items: PropTypes.arrayOf(Overview.tableItemPropTypes).isRequired,\n children: PropTypes.arrayOf(Overview.tableItemPropTypes),\n\n changePoolChildrenFilter: PropTypes.func.isRequired,\n changeContentMode: PropTypes.func.isRequired,\n openEditModal: PropTypes.func.isRequired,\n openPoolDeleteModal: PropTypes.func.isRequired,\n changePool: PropTypes.func.isRequired,\n\n isInitialLoading: PropTypes.bool,\n };\n\n get columnsSets() {\n return {\n cpu: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'min_resources_cpu',\n 'abs_guaranteed_cpu',\n //'rel_guaranteed_cpu',\n 'abs_demand_cpu',\n 'resource_detailed_cpu',\n 'abs_usage_cpu',\n //'rel_usage_cpu',\n 'resource_limit_cpu',\n //'guaranteed_usage_cpu',\n 'actions',\n ],\n },\n memory: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'min_resources_memory',\n 'abs_guaranteed_memory',\n //'rel_guaranteed_memory',\n 'abs_demand_memory',\n 'resource_detailed_memory',\n 'abs_usage_memory',\n //'rel_usage_memory',\n 'resource_limit_memory',\n //'guaranteed_usage_memory',\n 'actions',\n ],\n },\n gpu: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'min_resources_gpu',\n 'abs_guaranteed_gpu',\n //'rel_guaranteed_gpu',\n 'abs_demand_gpu',\n 'resource_detailed_gpu',\n 'abs_usage_gpu',\n //'rel_usage_gpu',\n 'resource_limit_gpu',\n //'guaranteed_usage_gpu',\n 'actions',\n ],\n },\n user_slots: {\n items: [\n 'name',\n 'FI',\n 'weight',\n 'min_resources_user_slots',\n 'abs_guaranteed_user_slots',\n //'rel_guaranteed_user_slots',\n 'abs_demand_user_slots',\n 'resource_detailed_user_slots',\n 'abs_usage_user_slots',\n //'rel_usage_user_slots',\n 'resource_limit_user_slots',\n //'guaranteed_usage_user_slots',\n 'actions',\n ],\n },\n operations: {\n items: [\n 'name',\n 'FI',\n 'running_operation_count',\n 'max_running_operation_count',\n 'running_operation_progress',\n 'operation_count',\n 'max_operation_count',\n 'operation_progress',\n 'actions',\n ],\n },\n integral: {\n items: [\n 'name',\n 'FI',\n 'integral_type',\n 'burst_cpu',\n 'children_burst_cpu',\n 'flow_cpu',\n 'children_flow_cpu',\n 'accumulated',\n //'accumulated_cpu',\n 'burst_duration',\n 'actions',\n ],\n },\n };\n }\n\n get tableSettings() {\n const {mode, children} = this.props;\n const isCurrentPool = this.isCurrentPool;\n const totalRow = children?.length ? calculateTotalOverPools(children) : undefined;\n\n return {\n css: block(),\n theme: 'light',\n striped: false,\n tableId: SCHEDULING_POOL_CHILDREN_TABLE_ID,\n footer: totalRow,\n header: false,\n top: 99,\n columns: {\n items: childTableItems,\n sets: this.columnsSets,\n mode,\n },\n templates: {\n name: this.renderNameCell,\n mode: Overview.renderMode,\n FI: Overview.renderFifoIndex,\n weight: Overview.renderWeight,\n dominant_resource: Details.renderDominantResource,\n min_share: Details.renderMinShare,\n max_share: Details.renderMaxShare,\n operation_overview: Overview.renderOperationOverview,\n demand: Details.renderColumnAsRatio,\n fair_share: Details.renderColumnAsRatio,\n usage: Details.renderColumnAsRatio,\n fair_share_usage: Overview.renderFairShareUsage,\n\n resource_detailed_cpu: Details.renderColumnAsFloatNumber,\n resource_detailed_memory: Details.renderColumnAsBytes,\n resource_detailed_gpu: Details.renderColumnAsNumber,\n resource_detailed_user_slots: Details.renderColumnAsNumber,\n\n resource_limit_cpu: Details.renderColumnAsFloatNumber,\n resource_limit_memory: Details.renderColumnAsBytes,\n resource_limit_gpu: Details.renderColumnAsNumber,\n resource_limit_user_slots: Details.renderColumnAsNumber,\n\n min_resources_cpu: Details.renderColumnAsFloatNumber,\n min_resources_memory: Details.renderColumnAsBytes,\n min_resources_gpu: Details.renderColumnAsNumber,\n min_resources_user_slots: Details.renderColumnAsNumber,\n\n abs_guaranteed_cpu: Details.renderColumnAsFloatNumber,\n abs_guaranteed_memory: Details.renderColumnAsBytes,\n abs_guaranteed_gpu: Details.renderColumnAsFloatNumber,\n abs_guaranteed_user_slots: Details.renderColumnAsFloatNumber,\n\n abs_demand_cpu: Details.renderColumnAsNumber,\n abs_demand_memory: Details.renderColumnAsBytes,\n abs_demand_gpu: Details.renderColumnAsNumber,\n abs_demand_user_slots: Details.renderColumnAsNumber,\n\n abs_usage_cpu: Details.renderColumnAsNumber,\n abs_usage_memory: Details.renderColumnAsBytes,\n abs_usage_gpu: Details.renderColumnAsNumber,\n abs_usage_user_slots: Details.renderColumnAsNumber,\n\n rel_guaranteed_cpu: this.renderRelResource,\n rel_guaranteed_memory: this.renderRelResource,\n rel_guaranteed_gpu: this.renderRelResource,\n rel_guaranteed_user_slots: this.renderRelResource,\n\n rel_usage_cpu: this.renderRelResource,\n rel_usage_memory: this.renderRelResource,\n rel_usage_gpu: this.renderRelResource,\n rel_usage_user_slots: this.renderRelResource,\n\n guaranteed_usage_cpu: this.renderResourceBars,\n guaranteed_usage_memory: this.renderResourceBars,\n guaranteed_usage_gpu: this.renderResourceBars,\n guaranteed_usage_user_slots: this.renderResourceBars,\n\n running_operation_progress: Details.renderAsProgress,\n running_operation_count: Details.renderColumnAsNumber,\n operation_count: Details.renderColumnAsNumber,\n operation_progress: Details.renderAsProgress,\n max_running_operation_count: Details.renderMaxRunningOperationCount,\n max_operation_count: Details.renderMaxOperationCount,\n\n integral_type: Details.renderIntegralType,\n burst_cpu: Details.renderIntegralGuarantee,\n flow_cpu: Details.renderIntegralGuarantee,\n children_burst_cpu: Details.childrenIntegrals,\n children_flow_cpu: Details.childrenIntegrals,\n accumulated: Details.renderColumnAsRatio,\n accumulated_cpu: Details.renderColumnAsNumber,\n burst_duration: Details.renderColumnAsNumber,\n\n actions: this.renderActions,\n },\n computeKey(item) {\n return item.name;\n },\n itemMods(item) {\n return {\n current: isCurrentPool(item) ? 'yes' : '',\n aggregation: item.aggregation ? 'yes' : '',\n };\n },\n };\n }\n\n renderResourceBars = (item, columnName) => {\n const isCurrentPool = this.isCurrentPool(item);\n\n if (isCurrentPool) {\n return hammer.format.NO_VALUE;\n }\n\n const {currentPool} = this.props;\n const resourceData = childTableItems[columnName].get(item, currentPool);\n const barsData = [\n {\n value: resourceData.guaranteed,\n title: 'Guaranteed share',\n theme: 'success',\n },\n {\n value: resourceData.usage,\n title: 'Usage',\n theme: 'info',\n },\n ];\n\n return Overview.renderBars(barsData);\n };\n\n renderRelResource = (item, columnName) => {\n const isCurrentPool = this.isCurrentPool(item);\n\n if (isCurrentPool) {\n return hammer.format.NO_VALUE;\n }\n\n const {currentPool} = this.props;\n const data = childTableItems[columnName].get(item, currentPool);\n\n return Overview.renderRatio(data);\n };\n\n renderNameCell = (item, ...rest) => {\n const {cluster, currentPool, changePool} = this.props;\n\n return (\n <span className={block('name-cell', {child: item.isChildPool})}>\n {Overview.renderType(item, ...rest)}\n <span className={block('name-cell-text')}>\n {Overview.renderName(item, Tab.DETAILS, cluster, currentPool, changePool)}\n </span>\n {Overview.renderEphemeralIcon(item)}\n <PoolTags pool={item} />\n </span>\n );\n };\n\n renderActions = (item) => {\n const {openEditModal, openPoolDeleteModal, getPoolPathsByName} = this.props;\n\n if (item.aggregation) {\n return;\n }\n\n if (item.type !== 'pool') {\n return Overview.renderAttributesButton(item);\n }\n\n const handleEditClick = () => openEditModal(item);\n const handleDeleteClick = () => openPoolDeleteModal(item);\n\n return (\n <Fragment>\n {Overview.renderAttributesButton(item, getPoolPathsByName)}\n \n {Overview.renderEditButton(item, handleEditClick)}\n \n {Overview.renderDeleteButton(item, handleDeleteClick)}\n </Fragment>\n );\n };\n\n isCurrentPool = (item) => item.name === this.props.currentPool.name;\n\n renderToolbar() {\n const {filter, mode, changePoolChildrenFilter, changeContentMode, currentPool} = this.props;\n\n return (\n <Sticky topOffset={-HEADER_HEIGHT}>\n {({isSticky}) => (\n <div className={block('toolbar', {sticky: isSticky})}>\n <Filter\n key={currentPool?.name}\n size=\"m\"\n value={filter}\n placeholder=\"Filter...\"\n className={block('filter')}\n onChange={changePoolChildrenFilter}\n />\n\n <RadioButton\n size=\"m\"\n value={mode}\n onChange={changeContentMode}\n name=\"navigation-tablets-mode\"\n items={[\n {\n value: 'cpu',\n text: 'CPU',\n },\n {\n value: 'memory',\n text: 'Memory',\n },\n {\n value: 'gpu',\n text: 'GPU',\n },\n {\n value: 'user_slots',\n text: 'User slots',\n },\n {\n value: 'operations',\n text: 'Operations',\n },\n {\n value: 'integral',\n text: 'Integral guarantees',\n },\n ]}\n />\n </div>\n )}\n </Sticky>\n );\n }\n\n render() {\n const {items, mode, isInitialLoading} = this.props;\n\n return (\n <ErrorBoundary>\n <div className={block()}>\n <StickyContainer>\n {this.renderToolbar()}\n <SchedulingOperationsError />\n <ElementsTableSticky\n cssTableMods={{mode}}\n {...this.tableSettings}\n items={items}\n isLoading={isInitialLoading}\n />\n </StickyContainer>\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const currentPool = getCurrentPool(state);\n const items = getPollChildrenTableItems(state);\n const mode = getContentMode(state);\n const filter = getPoolChildrenFilter(state);\n const cluster = getCluster(state);\n const children = getSortedPoolChildren(state);\n\n const isInitialLoading = getSchedulingIsInitialLoading(state);\n\n return {currentPool, mode, filter, items, children, cluster, isInitialLoading};\n};\n\nconst mapDispatchToProps = {\n changePoolChildrenFilter,\n changeContentMode,\n openEditModal,\n openPoolDeleteModal,\n changePool,\n getPoolPathsByName,\n};\n\nconst DetailsConnected = connect(mapStateToProps, mapDispatchToProps)(Details);\n\nexport default function DetailsWithRum() {\n const isFinalState = useSelector(getSchedulingIsFinalLoadingState);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.SCHEDULING_DETAILS,\n additionalStartType: RumMeasureTypes.SCHEDULING,\n startDeps: [isFinalState],\n allowStart: ([isFinal]) => {\n return !isFinal;\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.SCHEDULING_DETAILS,\n stopDeps: [isFinalState],\n allowStop: ([isFinal]) => {\n return isFinal;\n },\n });\n\n return <DetailsConnected />;\n}\n","import hammer from '../../common/hammer';\n\nexport function calculateTotalOverPools(pools) {\n const summedProperties = [\n 'weight',\n 'minShareRatio',\n 'demandRatio',\n 'fairShareRatio',\n 'usageRatio',\n 'maxOperationCount',\n 'maxRunningOperationCount',\n 'runningOperationCount',\n 'operationCount',\n ].map((name) => ({name, type: 'sum'}));\n\n ['cpu', 'user_memory', 'gpu', 'user_slots'].forEach((resource) => {\n ['min', 'guaranteed', 'usage', 'demand'].forEach((metric) => {\n const name = ['resources', resource, metric].join('.');\n summedProperties.push({name, type: 'nested/sum'});\n });\n });\n\n // We can aggregate only pools with resources\n const items = pools.filter((pool) => Boolean(pool.resources));\n\n return Object.assign(hammer.aggregation.prepare(items, summedProperties)[0], {\n key: 'aggregation',\n name: 'Aggregation',\n type: 'aggregation',\n aggregation: true,\n });\n}\n","import React from 'react';\nimport {connect, useSelector} from 'react-redux';\n\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport {NoContent} from '../../../../../components/NoContent/NoContent';\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 {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}) {\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) => {\n return {\n loadState: getAclLoadState(state, IdmObjectType.POOL),\n };\n};\n\nexport default connect(mapStateToProps)(PoolAclWithRum);\n","import React from 'react';\nimport {getPool, getTree} from '../../../store/selectors/scheduling/scheduling';\nimport {useDispatch, useSelector} from 'react-redux';\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';\nimport PropTypes from 'prop-types';\nimport {useSelector} from 'react-redux';\nimport {Redirect, Route, Switch, withRouter} from 'react-router';\nimport cn from 'bem-cn-lite';\n\nimport reduce_ from 'lodash/reduce';\n\nimport Tabs from '../../../components/Tabs/Tabs';\nimport Placeholder from '../../../pages/components/Placeholder';\nimport {OverviewWithRum} from '../../../pages/scheduling/Content/tabs/Overview/Overview';\nimport Details from '../../../pages/scheduling/Content/tabs/Details/Details';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\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 {makeTabProps} from '../../../utils';\nimport {formatByParams} from '../../../utils/format';\n\nimport './Content.scss';\nimport {getCluster} from '../../../store/selectors/global';\nimport SchedulingExpandedPoolsUpdater from './SchedulingExpandedPoolsUpdater';\nimport UIFactory from '../../../UIFactory';\nimport {UI_TAB_SIZE} from '../../../constants/global';\n\nconst block = cn('scheduling-content');\n\nContent.propTypes = {\n // from parent\n className: PropTypes.string,\n // from react-router\n match: PropTypes.shape({\n path: PropTypes.string.isRequired,\n url: PropTypes.string.isRequired,\n }).isRequired,\n location: PropTypes.shape({\n search: PropTypes.string.isRequired,\n }).isRequired,\n};\n\nfunction Content({className, match, location}) {\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 = {...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 {},\n );\n\n const titleDict = {};\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 = [];\n\n extraTabs.forEach((tab) => {\n const {name, title, component, urlTemplate} = tab;\n const tabSettings = {show: true};\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 <div className={block(null, className)}>\n <Tabs\n {...props}\n active={DEFAULT_TAB}\n className={block('tabs')}\n routed\n size={UI_TAB_SIZE}\n />\n\n <Switch>\n <Route path={`${match.path}/${Tab.OVERVIEW}`} component={OverviewWithRum} />\n <Route path={`${match.path}/${Tab.DETAILS}`} component={Details} />\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 </div>\n </ErrorBoundary>\n );\n}\n\nexport default withRouter(Content);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\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 'react-redux';\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 Error 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 InitialPoolResourceInfo,\n POOL_GENERAL_TYPE_TO_ATTRIBUTE,\n POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR,\n POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE,\n PoolGeneralResourceType,\n PoolIntegralResourceType,\n PoolStrongResourceType,\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 {\n PoolInfo,\n getSchedulingPoolsMapByName,\n} from '../../../../store/selectors/scheduling/scheduling-pools';\nimport Link from '../../../../components/Link/Link';\n\nimport './PoolEditorDialog.scss';\nimport UIFactory from '../../../../UIFactory';\nimport {createQuotaReqTicketUrl} from '../../../../config';\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 : <Error className={block('error')} error={error} />;\n}\n\nexport interface PoolEditorFormValues {\n general: Record<PoolGeneralResourceType, InitialPoolResourceInfo> & {\n weight: {value?: number; error?: string};\n }; // TODO add description for another fields\n resourceGuarantee: Record<PoolStrongResourceType, InitialPoolResourceInfo>;\n integralGuarantee: Record<\n Exclude<PoolIntegralResourceType, 'guaranteeType'>,\n InitialPoolResourceInfo\n > & {guaranteeType?: 'none' | 'burst' | 'relaxed'};\n resourceLimits: {\n cpu: number | string;\n gpu: number | string;\n memory: number | string;\n userSlots: number | string;\n };\n otherSettings: {\n forbidImmediateOperations: boolean;\n fifoSortParams: Array<string>;\n createEphemeralSubpools: boolean;\n };\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 [initialValues, 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 [data, 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.value,\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 = initialValues.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 = initialValues.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 = initialValues.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, initialValues));\n },\n [editItem, initialValues, 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: initialValues.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: initialValues.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: initialValues.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 initialValues.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: initialValues.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: initialValues.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 initialValues.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: initialValues.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 initialValues.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?: PoolInfo): [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: PoolInfo | undefined,\n pools: Array<PoolInfo>,\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 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport keys_ from 'lodash/keys';\n\nimport {Dialog as DeleteDialog} from '@gravity-ui/uikit';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport Error 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 && <Error 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 <Error 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 'react-redux';\n\nimport sortedIndexOf_ from 'lodash/sortedIndexOf';\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport Link from '../../../../components/Link/Link';\nimport Error 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 && <Error error={error} />,\n },\n },\n ]}\n />\n );\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\nimport some_ from 'lodash/some';\n\nimport {Breadcrumbs, BreadcrumbsItem} from '../../../components/Breadcrumbs';\nimport {useHistory} from 'react-router';\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 {EditButton} from '../../../components/EditableAsText/EditableAsText';\nimport Select from '../../../components/Select/Select';\nimport CreatePoolButton from '../Instruments/CreatePoolDialog/CreatePoolDialog';\n\nimport {makeRoutedURL} from '../../../store/location';\nimport {getCluster, getClusterUiConfig} from '../../../store/selectors/global';\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 <EditableSchedulingBreadcrumbs />\n <span className={block('actions')}>\n {UIFactory.renderTopRowExtraControlsForPool({\n itemClassName: block('extra-control'),\n pool,\n clusterUiConfig,\n })}\n <CreatePoolButton />\n </span>\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 tree = useSelector(getTree);\n const cluster = useSelector(getCluster);\n const history = useHistory();\n\n const handleChangePool = (name: string | number) => {\n setTimeout(() => {\n dispatch(changePool(name.toString()));\n }, 0);\n };\n\n const items = React.useMemo(() => {\n return ['<Root>', ...bcItems.slice(1)].map((text) => {\n const pathname = text\n ? window.location.pathname\n : calcRootPathname(window.location.pathname, cluster);\n return (\n <BreadcrumbsItem\n key={text}\n href={makeRoutedURL(pathname, {tree, text, filter: ''})}\n >\n {text}\n </BreadcrumbsItem>\n );\n });\n }, [bcItems, cluster, tree]);\n\n return (\n <Breadcrumbs\n navigate={history.push}\n onAction={handleChangePool}\n className={block('breadcrumbs')}\n showRoot\n >\n {items}\n </Breadcrumbs>\n );\n}\n\nfunction calcRootPathname(pathname: string, cluster: string) {\n // it is not allowed to stay on ACL and Monitor tabs for <Root> link\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\nfunction EditableSchedulingBreadcrumbs() {\n const [editMode, setEditMode] = React.useState(false);\n const toggleEdit = React.useCallback(() => {\n setEditMode(!editMode);\n }, [editMode, setEditMode]);\n\n return (\n <div className={block('editable-breadcrumbs', {edit: editMode})}>\n {editMode ? (\n <PoolsSuggest autoFocus onCancelEdit={toggleEdit} />\n ) : (\n <React.Fragment>\n <SchedulingBreadcrumbs />\n <EditButton onClick={toggleEdit} />\n <div className={block('btn-spacer')} />\n <CurrentPoolToClipboardButton />\n </React.Fragment>\n )}\n </div>\n );\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: unknown) => dispatch(changeTree(tree)), [dispatch]);\n\n return (\n <div className={block('tree')}>\n <Select\n value={[tree]}\n hideFilter={treeItems?.length <= 5}\n items={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 {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 {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 {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) ?? false\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 filter_ from 'lodash/filter';\nimport find_ from 'lodash/find';\nimport map_ from 'lodash/map';\nimport uniq_ from 'lodash/uniq';\n\nimport {createSelector} from 'reselect';\n\nimport {concatByAnd} from '../../../common/hammer/predicate';\nimport type {RootState} from '../../../store/reducers';\nimport type {ChaosBundle, ChaosCell} from '../../../store/reducers/chaos_cell_bundles';\nimport {getCluster} from '../../../store/selectors/global';\nimport {\n aggregateTotal,\n tabletActiveChaosBundleLink,\n tabletChaosBundleRootLink,\n} from '../../../utils/components/tablet-cells';\nimport {prepareHost} from '../../../utils';\nimport {sortArrayBySortState} from '../../../utils/sort-helpers';\nimport {sortTableBundles} from '../../../utils/tablet_cell_bundles';\n\nexport const getChaosIsLoaded = (state: RootState) => state.chaos_cell_bundles.loaded;\nexport const getChaosIsLoading = (state: RootState) => state.chaos_cell_bundles.loading;\nexport const getChaosError = (state: RootState) => state.chaos_cell_bundles.error;\n\nexport const getChaosBundlesSortState = (state: RootState) => state.chaos_cell_bundles.bundlesSort;\n\nexport const getChaosBundlesNameFilter = (state: RootState) =>\n state.chaos_cell_bundles.bundlesNameFilter;\nexport const getChaosBundlesAccountFilter = (state: RootState) =>\n state.chaos_cell_bundles.bundlesAccountFilter;\nexport const getChaosBundlesTagNodeFilter = (state: RootState) =>\n state.chaos_cell_bundles.bundlesTagNodeFilter;\n\nexport const getChaosBundles = (state: RootState) => state.chaos_cell_bundles.bundles;\n\nexport const getChaosActiveBundle = (state: RootState) => state.chaos_cell_bundles.activeBundle;\n\nexport const getChaosBundlesTableMode = (state: RootState) =>\n state.chaos_cell_bundles.bundlesTableMode;\n\nexport const getChaosActiveBundleData = createSelector(\n [getChaosBundles, getChaosActiveBundle],\n (bundles, activeBundle) => {\n return find_(bundles, (item) => item.bundle === activeBundle);\n },\n);\n\nexport const getChaosBundlesTotal = createSelector(\n [getChaosBundles],\n (bundles): ChaosBundle => aggregateTotal(bundles),\n);\n\nconst COLUMNS_SORTABLE_AS_IS = new Set<keyof ChaosBundle>([\n 'bundle',\n 'health',\n 'tabletCells',\n 'tablets',\n 'uncompressed',\n 'compressed',\n 'enable_bundle_balancer',\n 'node_tag_filter',\n 'memory',\n 'tablet_count',\n 'tablet_count_limit',\n 'tablet_count_free',\n 'tablet_count_percentage',\n 'tablet_static_memory',\n 'tablet_static_memory_limit',\n 'tablet_static_memory_free',\n 'tablet_static_memory_percentage',\n]);\n\nexport const getChaosBundlesFiltered = createSelector(\n [\n getChaosBundles,\n getChaosBundlesNameFilter,\n getChaosBundlesAccountFilter,\n getChaosBundlesTagNodeFilter,\n ],\n (bundles, nameFilter, accountFilter, tagNodeFilter) => {\n const predicates: Array<(item: ChaosBundle) => boolean> = [];\n if (nameFilter) {\n const lowerNameFilter = nameFilter.toLowerCase();\n predicates.push((item) => {\n return -1 !== item.bundle.toLowerCase().indexOf(lowerNameFilter);\n });\n }\n\n if (accountFilter) {\n const lowerAccountFilter = accountFilter.toLowerCase();\n predicates.push((item) => {\n const {changelog_account, snapshot_account} = item;\n return (\n (Boolean(changelog_account) &&\n -1 !== changelog_account.toLowerCase().indexOf(lowerAccountFilter)) ||\n (Boolean(snapshot_account) &&\n -1 !== snapshot_account.toLowerCase().indexOf(lowerAccountFilter))\n );\n });\n }\n\n if (tagNodeFilter) {\n const lowerTagNodeFilter = tagNodeFilter.toLowerCase();\n predicates.push((item) => {\n const {node_tag_filter} = item;\n return (\n Boolean(node_tag_filter) &&\n -1 !== node_tag_filter.toLowerCase().indexOf(lowerTagNodeFilter)\n );\n });\n }\n\n return !predicates.length ? bundles : filter_(bundles, concatByAnd(...predicates));\n },\n);\n\nexport const getChaosBundlesSorted = createSelector(\n [getChaosBundlesFiltered, getChaosBundlesSortState],\n (bundles, {column, order}) => {\n if (!column || !order) {\n return bundles;\n }\n\n return sortTableBundles({bundles, column, order, columnsSortable: COLUMNS_SORTABLE_AS_IS});\n },\n);\n\nexport const getChaosCells = (state: RootState) => state.chaos_cell_bundles.cells;\nexport const getChaosCellsSortState = (state: RootState) => state.chaos_cell_bundles.cellsSort;\n\nexport const getChaosCellsIdFilter = (state: RootState) => state.chaos_cell_bundles.cellsIdFilter;\nexport const getChaosCellsBundleFilter = (state: RootState) =>\n state.chaos_cell_bundles.cellsBundleFilter;\nexport const getChaosCellsHostFilter = (state: RootState) =>\n state.chaos_cell_bundles.cellsHostFilter;\n\nexport const getChaosCellsOfActiveAccount = createSelector(\n [getChaosCells, getChaosActiveBundle],\n (cells, activeBundle) => {\n if (!activeBundle) {\n return cells;\n }\n\n return filter_(cells, (item) => {\n return Boolean(item.bundle) && activeBundle === item.bundle;\n });\n },\n);\n\nexport const getChaosCellsFiltered = createSelector(\n [\n getChaosCellsOfActiveAccount,\n getChaosCellsIdFilter,\n getChaosCellsBundleFilter,\n getChaosCellsHostFilter,\n getChaosActiveBundle,\n ],\n (cells, idFilter, bundleFilter, hostFilter) => {\n const predicates: Array<(item: ChaosCell) => boolean> = [];\n if (idFilter) {\n predicates.push((item) => {\n return -1 !== item.id.indexOf(idFilter);\n });\n }\n\n if (bundleFilter) {\n predicates.push((item) => {\n return Boolean(item.bundle) && -1 !== item.bundle.indexOf(bundleFilter);\n });\n }\n\n if (hostFilter) {\n predicates.push((item) => {\n return Boolean(item.peerAddress) && -1 !== item.peerAddress.indexOf(hostFilter);\n });\n }\n return !predicates.length ? cells : filter_(cells, concatByAnd(...predicates));\n },\n);\n\nexport function filterChaosCellsByBundle(bundle: string, cells: Array<ChaosCell>) {\n if (!bundle) {\n return [];\n }\n\n return filter_(cells, (item) => item.bundle === bundle);\n}\n\nexport const getChaosCellsSorted = createSelector(\n [getChaosCellsFiltered, getChaosCellsSortState],\n (cells, sortState) => {\n return sortArrayBySortState(cells, sortState);\n },\n);\n\nexport const getChaosCellsBundles = createSelector([getChaosCells], (cells) => {\n return uniq_(map_(cells, 'bundle')).sort();\n});\n\nexport const getChaosCellsHosts = createSelector([getChaosCellsOfActiveAccount], (cells) => {\n return uniq_(map_(cells, 'peerAddress')).sort();\n});\n\nexport const getChaosCellsHostsOfActiveBundle = createSelector(\n [getChaosActiveBundle, getChaosCellsFiltered],\n (activeBundle: string, cells: Array<ChaosCell>) => {\n if (!activeBundle) {\n return '';\n }\n return prepareHostsFromCells(cells);\n },\n);\n\nexport function prepareHostsFromCells(cells: Array<ChaosCell>) {\n return uniq_(map_(cells, ({peerAddress}) => prepareHost(peerAddress)).filter(Boolean))\n .sort()\n .join('|');\n}\n\nexport interface ChaosCellBundlesBreadcrumbsItem {\n text: string;\n href: string;\n title?: string;\n}\n\nexport const getChaosBreadcrumbItems = createSelector(\n [getCluster, getChaosActiveBundle],\n (cluster, activeBundle): Array<ChaosCellBundlesBreadcrumbsItem> => {\n const res: Array<ChaosCellBundlesBreadcrumbsItem> = [\n {\n text: '',\n href: tabletChaosBundleRootLink(cluster),\n title: '<bundles>',\n },\n ];\n\n if (activeBundle) {\n res.push({\n text: activeBundle,\n href: tabletActiveChaosBundleLink(cluster, activeBundle),\n });\n }\n\n return res;\n },\n);\n","import {createSelector} from 'reselect';\nimport uniq_ from 'lodash/uniq';\nimport compact_ from 'lodash/compact';\n\nimport {concatByAnd} from '../../../common/hammer/predicate';\n\nimport {RootState} from '../../../store/reducers';\nimport {ChytInfo} from '../../../store/reducers/chyt/list';\nimport {SortState} from '../../../types';\nimport {multiSortBySortStateArray} from '../../../utils/sort-helpers';\nimport {StrawberryListAttributes} from '../../../utils/strawberryControllerApi';\nimport {getSettingsData} from '../../../store/selectors/settings/settings-base';\n\nexport const getChytListData = (state: RootState) => state.chyt.list.data;\n\nexport const getChytListAvailableCreators = createSelector([getChytListData], (data) => {\n const {items = []} = data;\n return uniq_(items.map((item) => item.creator!)).sort();\n});\n\nexport const getChytListAvailableHealths = createSelector([getChytListData], (data) => {\n const {items = []} = data;\n return compact_(uniq_(items.map((item) => item.health)).sort());\n});\n\nexport const getChytListAvailableStates = createSelector([getChytListData], (data) => {\n const {items = []} = data;\n return uniq_(items.map((item) => item.state!)).sort();\n});\n\nexport const getChytCurrentAlias = (state: RootState) => state.chyt.clique.currentClique;\n\nexport const getChytListFilterAlias = (state: RootState) => state.chyt.listFilters.name;\nexport const getChytListFilterHealth = (state: RootState) => state.chyt.listFilters.health;\nexport const getChytListFilterCreator = (state: RootState) => state.chyt.listFilters.creator;\nexport const getChytListFilterState = (state: RootState) => state.chyt.listFilters.state;\n\ntype ChytListColumns = Exclude<StrawberryListAttributes, 'yt_operation_id'>;\nconst CHYT_LIST_SELECTABLE_COLUMNS: Record<Exclude<ChytListColumns, 'health_reason'>, true> = {\n instance_count: true,\n total_cpu: true,\n total_memory: true,\n creation_time: true,\n stage: true,\n yt_operation_start_time: true,\n yt_operation_finish_time: true,\n speclet_modification_time: true,\n strawberry_state_modification_time: true,\n pool: true,\n health: true,\n creator: true,\n state: true,\n};\n\nexport type ChytSelectableColumn = keyof typeof CHYT_LIST_SELECTABLE_COLUMNS;\n\ntype ChytColumnItem = {checked: boolean; column: ChytListColumns};\n\nexport const getChytListColumnsFromSettings = (state: RootState) => {\n return (\n getSettingsData(state)['global::chyt::list_columns'] ??\n ([\n 'health',\n 'state',\n 'instance_count',\n 'total_cpu',\n 'total_memory',\n 'creator',\n 'creation_time',\n ] as const)\n );\n};\n\nexport const getChytListVisibleColumns = createSelector(\n [getChytListColumnsFromSettings],\n (columns): Array<ChytSelectableColumn> => {\n const userColumns = new Set(columns);\n return compact_(\n columns.map((k) => {\n return CHYT_LIST_SELECTABLE_COLUMNS[\n k as keyof typeof CHYT_LIST_SELECTABLE_COLUMNS\n ] && userColumns.has(k)\n ? (k as ChytSelectableColumn)\n : null;\n }),\n );\n },\n);\n\nexport const getChytListColumns = createSelector(\n [getChytListVisibleColumns],\n (columns): Array<ChytColumnItem> => {\n const userColumns = new Set(columns);\n const res = columns.map((column) => {\n return {checked: true, column};\n });\n\n Object.keys(CHYT_LIST_SELECTABLE_COLUMNS).forEach((k) => {\n const column = k as ChytSelectableColumn;\n if (!userColumns.has(column)) {\n res.push({checked: false, column});\n }\n });\n\n return res;\n },\n);\n\nexport const getChytListTableSortState = (state: RootState) => state.chyt.listFilters.sortState;\n\nexport const getChytListTableSortStateByName = createSelector(\n [getChytListTableSortState],\n (sortState) => {\n return sortState.reduce(\n (acc, item, index) => {\n if (item.column) {\n acc[item.column] = {\n ...item,\n multisortIndex: sortState.length > 1 ? index + 1 : undefined,\n };\n }\n return acc;\n },\n {} as Record<keyof ChytInfo, SortState<keyof ChytInfo> & {multisortIndex?: number}>,\n );\n },\n);\n\nconst getChytFilterPredicate = createSelector(\n [\n getChytListFilterAlias,\n getChytListFilterCreator,\n getChytListFilterState,\n getChytListFilterHealth,\n ],\n (alias, creator, state, health) => {\n const predicates = compact_([\n alias ? (item: ChytInfo) => -1 !== item.alias.indexOf(alias) : undefined,\n creator !== undefined ? (item: ChytInfo) => creator === item.creator : undefined,\n state ? (item: ChytInfo) => state === item.state : undefined,\n health ? (item: ChytInfo) => health === item.health : undefined,\n ]);\n\n return predicates.length ? concatByAnd(...predicates) : undefined;\n },\n);\n\nexport const getChytListTableItems = createSelector(\n [getChytListData, getChytListTableSortState, getChytFilterPredicate],\n (data, sortState, predicate) => {\n const {items = []} = data;\n\n const filteredItems = !predicate ? items : items.filter(predicate);\n\n const sortedItems = multiSortBySortStateArray(filteredItems, sortState);\n\n return sortedItems;\n },\n);\n","import find_ from 'lodash/find';\nimport sortBy_ from 'lodash/sortBy';\n\nimport {createSelector} from 'reselect';\n\nimport {\n getAccountsNS,\n getBundlesNS,\n getChaosBundlesNS,\n getChytNS,\n getClusterNS,\n getSchedulingNS,\n makeGetSetting,\n} from '../../store/selectors/settings';\nimport {SettingName} from '../../../shared/constants/settings';\nimport {getActiveAccount} from '../../store/selectors/accounts/accounts';\nimport {getPath} from '../../store/selectors/navigation';\nimport {getPool, getTree} from '../../store/selectors/scheduling/scheduling';\nimport {getTabletsActiveBundle} from './tablet_cell_bundles';\nimport {getChaosActiveBundle} from './chaos_cell_bundles';\nimport {getChytCurrentAlias} from './chyt';\n\n//************* Selectors for Accounts *****************\n\nexport const getFavouriteAccounts = createSelector(\n [makeGetSetting, getAccountsNS],\n prepareFavourites,\n);\n\nexport const getLastVisitedAccounts = createSelector(\n [makeGetSetting, getAccountsNS],\n prepareLastVisited,\n);\n\nexport const getPopularAccounts = createSelector([getLastVisitedAccounts], preparePopulars);\n\nexport const isActiveAcountInFavourites = createSelector(\n [getActiveAccount, getFavouriteAccounts],\n prepareIsInFavourites,\n);\n\nexport const getFavouriteChyt = createSelector([makeGetSetting, getChytNS], prepareFavourites);\n\nexport const getLastVisitedChyt = createSelector([makeGetSetting, getChytNS], prepareLastVisited);\n\nexport const getPopularChyt = createSelector([getLastVisitedChyt], preparePopulars);\n\nexport const isActiveCliqueInFavourites = createSelector(\n [getChytCurrentAlias, getFavouriteChyt],\n prepareIsInFavourites,\n);\n\n//************* Selectors for Navigation *****************\n\nexport const getFavouritePaths = createSelector([makeGetSetting, getClusterNS], prepareFavourites);\n\nexport const getLastVisitedPaths = createSelector(\n [makeGetSetting, getClusterNS],\n prepareLastVisited,\n);\n\nexport const getPopularPaths = createSelector([getLastVisitedPaths], preparePopulars);\n\nexport const isCurrentPathInFavourites = createSelector(\n [getPath, getFavouritePaths],\n prepareIsInFavourites,\n);\n\n//************* Selectors for Scheduling *****************\n\nexport const getFavouritePools = createSelector(\n [makeGetSetting, getSchedulingNS],\n prepareFavourites,\n);\n\nexport const isActivePoolInFavourites = createSelector(\n [getPool, getTree, getFavouritePools],\n prepareIsPoolInFavourites,\n);\n\n//************* Selectors for Bundles *****************\n\nexport const getFavouriteBundles = createSelector(\n [makeGetSetting, getBundlesNS],\n prepareFavourites,\n);\n\nexport const isActiveBundleInFavourites = createSelector(\n [getTabletsActiveBundle, getFavouriteBundles],\n prepareIsInFavourites,\n);\n\n// ************ Selectors for Chaos bundles ***********\n\nexport const getFavouriteChaosBundles = createSelector(\n [makeGetSetting, getChaosBundlesNS],\n prepareFavourites,\n);\n\nexport const isActiveChaosBundleInFavourites = createSelector(\n [getChaosActiveBundle, getFavouriteChaosBundles],\n prepareIsInFavourites,\n);\n\n//********************** Helpers *************************\n\nfunction prepareFavourites(getSetting, parentNS) {\n const items = getSetting(SettingName.LOCAL.FAVOURITES, parentNS);\n return sortBy_(items, 'path');\n}\n\nfunction prepareLastVisited(settingGetter, parentNS) {\n return settingGetter(SettingName.LOCAL.LAST_VISITED, parentNS) || [];\n}\n\nfunction preparePopulars(lastVisited) {\n return sortBy_(lastVisited, (entry) => -entry.count);\n}\n\nfunction prepareIsInFavourites(value, favourites) {\n return Boolean(find_(favourites, ({path}) => path === value));\n}\n\nfunction prepareIsPoolInFavourites(pool, tree, favourites) {\n return Boolean(find_(favourites, ({path}) => path === `${pool}[${tree}]`));\n}\n","import UIFactory from '../../UIFactory';\nimport {Page} from '../../constants';\nimport {TabletsTab} from '../../constants/tablets';\nimport {OrderType, multiSortWithUndefined, orderTypeToOrderK} from '../sort-helpers';\n\nexport function tabletCellBundleDashboardUrl(cluster: string, bundle: string) {\n return UIFactory.makeUrlForTabletCellBundleDashboard(cluster, bundle);\n}\n\nexport function genTabletCellBundlesCellUrl(cellId: string, cluster?: string) {\n const prefix = cluster ? `/${cluster}/` : '';\n return `${prefix}${Page.TABLET_CELL_BUNDLES}/${TabletsTab.TABLET_CELLS}?id=${cellId}`;\n}\n\nfunction compareBundlesByAccount<T extends Record<string, any>>(left: T, right: T) {\n if (\n left.changelog_account === right.changelog_account &&\n left.snapshot_account === right.snapshot_account\n ) {\n return 0;\n }\n\n return left.changelog_account < right.changelog_account\n ? -1\n : left.snapshot_account < right.snapshot_account\n ? -1\n : 1;\n}\n\nexport const sortTableBundles = <T extends Record<string, any>>({\n bundles,\n column,\n columnsSortable,\n order,\n}: {\n bundles: T[];\n column: keyof T;\n columnsSortable: Set<string>;\n order: OrderType;\n}) => {\n let sorted: T[] = [];\n\n const {orderK, undefinedOrderK} = orderTypeToOrderK(order);\n\n if (column === 'changelog_account') {\n sorted = [...bundles].sort(compareBundlesByAccount);\n } else if (column === 'nodes') {\n sorted = [...bundles].sort(({nodes: l = []}, {nodes: r = []}) => l.length - r.length);\n } else if (columnsSortable.has(column as string)) {\n return multiSortWithUndefined(bundles, [{key: column, orderK, undefinedOrderK}]);\n }\n\n return (order as string).includes('asc') ? sorted : sorted.reverse();\n};\n"],"names":["connect","openAttributesModal","_ref","title","_ref$getPathProps","getPathProps","path","exactPath","attribute","attributes","_ref$withTooltip","withTooltip","_ref$tooltipProps","tooltipProps","placement","content","rest","_objectWithoutProperties","_excluded","_jsx","AttributesButton","_objectSpread","onClick","pathProps","b","block","headingCN","CollapsibleSectionStateLess","_Component","_inherits","_super","_createSuper","_this","_classCallCheck","_len","arguments","length","args","Array","_key","call","apply","concat","toggle","onToggle","props","collapsed","_createClass","key","value","_this$props","this","name","children","size","overview","className","headingClassName","marginDirection","togglerRightPadding","ErrorBoundary","_jsxs","margin","clickable","Icon","awesome","Component","CollapsibleSection","_React$useState","React","_React$useState2","_slicedToArray","setCollapsed","onChange","defaultProps","cn","prepareRoleListValue","roles","otherMembers","undefined","current","toAdd","toRemove","unrecognized","forEach_","item","isUnrecognized","isRequested","isApproved","isDepriving","push","currentArr","map","prepareItemOfCurrent","otherArr","data","frozen","newItems","itemClassName","role","extraProps","text","roleListValueToSubjectList","_toConsumableArray","manyListDataItemToSubjectList","manyListDataItem","map_","filter_","_ref2","removed","_ref3","_ref4","type","extractChangedSubjects","added","filter","_ref5","_ref6","user","group","_ref7","_ref8","DialogError","Block","makeErrorFields","errors","compact_","error","index","extras","FORM_ERROR","makeFormSubmitError","validationErrors","_defineProperty","importYTDFDialog","YTDFDialog","withLazyLoading","_asyncToGenerator","_regeneratorRuntime","_callee","_context","prev","next","t0","sent","YTDialog","abrupt","stop","mounted","setMounted","visible","_callee2","_context2","RoleListControl","EditableList","_callee3","_context3","TabFieldVertical","_callee4","_context4","EditableAsText","withControls","disableEdit","cancelOnClose","openOnClick","renderEditor","onModeChange","_props$saveButtonView","saveButtonView","_props$cancelButtonVi","cancelButtonView","editMode","setEditMode","_React$useState3","_React$useState4","input","setInput","useEffect","handleChangeMode","useCallback","isEdit","closeEditMode","startTextEdit","handleChange","val","applyValue","closeAndResetValue","onApply","handleKeyDown","evt","controlSize","_Fragment","onBlur","TextInput","autoFocus","onUpdate","onKeyDown","Button","view","onMouseDown","EditButton","_ref$size","ElementsTableFooter","state","css","itemHeight","templates","itemMods","selectedIndex","computeKey","cssHover","_this$state","columnSet","columnItems","selected","currentKey","ElementsTableRow","bFooter","ELEMENTS_TABLE","footer","renderRow","columns","_prepareColumnsData","prepareColumnsData","items","set","_WithStickyFooter","_React$Component","WithStickyFooter","bWrapper","sticky","prepareTableClassName","renderStickyFooter","displayName","getDisplayName","mapDispatchToProps","toggleColumnSortOrder","compose","sortState","tables","_WithStickyHead","WithStickyHead","top","style","ElementsTableHeader","renderStickyHead","theme","padded","striped","HEADER_HEIGHT","Favourites","isActive","toggleActive","setState","prevState","onItemClick","_this2","dropItems","action","switcher","renderButton","pin","DropdownMenu","popupProps","empty","Hotkey","settings","keys","handler","scope","buttonProps","themeProps","toggleDisabled","clear","disabled","renderDropDownMenu","renderHotkey","itemType","PropTypes","Secondary","Bold","SecondaryBold","Warning","WarningLight","NoWrap","Escaped","textNode","unipika","prettyprint","UNIPIKA_ESCAPED_SETTINGS","asHTML","dangerouslySetInnerHTML","__html","Placeholder","tab","useRouteMatch","params","hammer","format","makeGet","parameters","command","USE_CACHE","makeList","USE_MAX_SIZE","cancelHelper","CancelHelper","POOL_FIELDS_TO_LOAD","POOL_TREE_GET_ATTRS","EmptyFullPath","_Error","_wrapNativeSuper","Error","loadExpandedPools","tree","dispatch","getState","pool","getPool","ROOT_POOL_NAME","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","join","updateExpandedPoolNoLoad","addFullPathToExpandedPoolsNoLoad","e","CHANGE_POOL","Toaster","add","_getSchedulingOperati","loadAll","getExpandedPoolsLoadAll","expandedPools","expandedPoolNames","operationsExpandedPools","operationsRequests","prefix","forEach","loadAllPools","isSupportedSchedulingChildrenByPool","poolsRequests","poolsChildrenRequests","poolsCypressDataRequests","poolsExpandedPools","_expandedPools$get","get","cypressDataPath","removeAllRequests","SCHEDULING_EXPANDED_POOLS_REQUEST","Promise","all","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","reduce_","acc","Object","assign","poolsToCollapse","pos","rawPools","cypressData","pools","_ref8$","_splitBatchResults3","flattenAttributes","_splitBatchResults4","resultIndices","poolsReqeustsIgnored","poolInfo","_splitBatchResults5","poolChildren","poolsChildrenRequestsIgnored","_splitBatchResults6","cypressDataChildrenPerPool","poolsCypressDataRequestsIgnored","poolChildrenCypressData","$value","position","setExpandedPools","SCHEDULING_EXPANDED_POOLS_SUCCESS","expandedPoolsTree","EMPTY_OBJECT","flattenCypressData","inner_errors","isCancelled","SCHEDULING_EXPANDED_POOLS_FAILURE","changes","getTree","poolsByName","getSchedulingPoolsMapByName","expanded","expandedPoolInfo","_data","res","_data2","parent","calcExpandedPoolInfo","SCHEDULING_EXPANDED_POOLS_PARTITION","getPoolPathsByName","_dispatch","getPools","calculatePoolPath","orchidPath","toaster","loadSchedulingData","SCHEDULING_DATA_REQUEST","isInitialLoading","getSchedulingIsInitialLoading","cluster","getCluster","rumId","RumWrapper","RumMeasureTypes","SCHEDULING","fetch","schedulingData","_splitBatchResults$re","schedulerAlerts","rawTrees","defaultTree","reject","trees","prepareTrees","prepareCurrentTree","scheduling","schedulingLoadFilterAttributes","checkFilters","SCHEDULING_DATA_PARTITION","treeRequests","schedulingLoadTree","ytApiV4Id","treeData","extracted","extractBatchV4Values","_splitBatchResults2","treeResources","resource_usage","resource_limits","config","resource_distribution_info","SCHEDULING_DATA_SUCCESS","code","yt","CANCELLED","SCHEDULING_DATA_FAILURE","openPoolDeleteModal","POOL_TOGGLE_DELETE_VISIBILITY","visibility","closePoolDeleteModal","setPoolAttributes","poolPath","values","initials","isEmpty_","transferData","toModify","guaranteeType","restValues","v","k","limit","source","attr","POOL_RESOURCE_TYPE_TO_ATTRIBUTE","_initials$key","diff","hasOwnProperty","updateNodeAttributes","tmp","dstPool","dotPath","startsWith","INTEGRAL_GUARANTEES_PREFIX","substr","replace","delta","update_","Math","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","makeOtherAttributesCommands","initialValues","initialSortParamsString","fifoSortParams","newSortParamsString","commands","forbidImmediateOperations","createEphemeralSubpools","setResourceAttributes","omittedValues","keyMapper","userSlots","omittedValuesList","preparedValues","mapKeys_","schedulingGetAttrsBeforeEdit","resources","result","omit_","makeGeneralCommands","isInitial","initialValue","pickBy_","mode","weight","prototype","isOmitted","Number","isInvalidNumber","isNaN","isValidNumber","editPool","computePoolPath","filteredResourceLimitsValues","resourceLimits","omittedResourceLimitsValues","resourceLimitsValues","mapValues_","SCHEDULING_EDIT_POOL_REQUEST","general","otherSettings","schedulingEditPool","resourceGuarantee","integralGuarantee","pick_","POOL_GENERAL_TYPE_TO_ATTRIBUTE","timeout","SCHEDULING_EDIT_POOL_SUCCESS","closeEditModal","setTimeout","SCHEDULING_EDIT_POOL_FAILURE","openEditModal","TOGGLE_EDIT_VISIBILITY","cancelled","SCHEDULING_EDIT_POOL_CANCELLED","changeTree","CHANGE_TREE","changePool","getSchedulingIsFinalLoadingState","createSelector","store","loading","loaded","status","calculateLoadingStatus","isFinalLoadingStatus","ShareUsageBar","shareValue","usageValue","shareTitle","usageTitle","forceTheme","x","Tooltip","NO_VALUE","_calcProgressProps","calcProgressProps","digits","Progress","getSchedulingBreadcrumbItems","_loop","find_","reverse","makeStaticConfigurationItem","attrs","cpu","ypath","getValue","gpu","memory","user_slots","network","getCurrentPoolStaticConfiguration","getIsRoot","getCurrentPool","isRoot","burst_guarantee_resources","resource_flow","Boolean","calcTreeStaticConfiguration","totals","undistributed","resourceType","total","free","used","calcTreeStaticConfigurationByDistributed","distributed","getPoolsTopLevel","getPoolsAllocatedOperationsCount","topPools","maxOperationCount","maxRunningOperationCount","getCurrentTreeGpuLimit","getTreeResources","getOperationsStaticConfiguration","allocated","operationCount","runningOperationCount","level","usedTitle","lastDayMaxValueSensor","lastDayMaxValueTitle","getCurrentPoolTreeStaticConfiguration","operationRows","undistributed_resources","burst","distributed_burst_guarantee_resources","unburst","undistributed_burst_guarantee_resources","flow","distributed_resource_flow","unflow","undistributed_resource_flow","cpuRow","burstRow","flowRow","max","PoolMetaData","useSelector","clusterUiConfig","getClusterUiConfig","hasStrong","integralType","capitalize_","MetaTable","Readable","UIFactory","getExtraMetaTableItemsForPool","SchedulingStaticConfiguration","onToggleCollapsedState","useDispatch","getSettingsSchedulingExpandStaticConfiguration","setSettingsSchedulingExpandStaticConfiguration","PoolTreeStaticConfiguration","PoolStaticConfiguration","staticConfigurationItems","header","sortable","width","render","row","cpuLabel","Label","capitalize","align","DataTableYT","useThemeYT","displayIndices","poolTree","formatValue","renderSchedulingLastDayMaximum","sensor","showHint","showAsLink","_ref9","formatFn","freeValue","lastDayMaxValue","rowClassName","SchedulingOperationsError","getSchedulingOperationsError","ErrorBlock","topMargin","PoolsSuggest","_ref$onCancelEdit","onCancelEdit","poolNames","getPoolsNames","getSuggestItems","_items","match","filtered","lcFilter","toLowerCase","lcPoolName","indexOf","handleCancelEdit","onFocus","Suggest","popupClassName","placeholder","PoolTags","showGuaranteeType","hasFlow","flowCPU","flowGPU","renderSchedulingTableItemExtraControls","STARVATION_STATUS_TO_THEME","starving","aggressively_starving","Overview","renderNameCell","currentPool","itemsMaxDepth","allowExpand","_len2","_key2","renderType","renderName","Tab","OVERVIEW","renderEphemeralIcon","renderActions","_this$props2","aggregation","renderAttributesButton","Fragment","renderEditButton","renderDeleteButton","onItemToggleState","treeState","tableId","SCHEDULING_POOL_TREE_TABLE_ID","poolsTableItems","sets","default","renderMode","FI","renderFifoIndex","renderWeight","fair_share","renderColumnAsRatio","usage","demand","min_share","renderMinShare","fair_share_usage","renderFairShareUsage","dominant_resource","renderDominantResource","operation_overview","renderOperationOverview","actions","Sticky","topOffset","isSticky","SchedulingOverviewToolbar","_this$props3","treeStateExpanded","fireResizeEvent","StickyContainer","renderToolbar","ResetExpandedPoolsOnTreeChange","ElementsTable","tableSettings","isLoading","share","_ref4$forceTheme","_ref4$title","poolModeTheme","weightEdited","edited","digitsOnlyForFloat","columnName","renderRatio","barsData","fairShareRatio","usageRatio","starvation_status","renderBars","formatter","getPoolPaths","ClickableAttributesButton","fifoIndex","toggleItemState","itemState","icon","operation","expanderClass","expanderClassIcon","expanderIcon","isCurrentPool","linkText","incomplete","id","FormattedText","qs","window","location","search","page","Page","FormattedLink","routed","url","Link","dominantResource","minShareRatio","resourcePropTypes","isRequired","progress","tableItemPropTypes","abc","demandRatio","fifo","changeTableTreeState","CHANGE_TABLE_TREE_STATE","schedulingSetAbcFilter","abcServiceFilter","getSchedulingOperationsCount","root","setLoadAllOperations","dispatchEvent","Event","OverviewConnected","getTableItems","getSchedulingOverviewMaxDepth","getSchedulingTreeState","getSchedulingAbcFilter","OverviewWithRum","isFinalState","useAppRumMeasureStart","SCHEDULING_OVERVIEW","additionalStartType","startDeps","allowStart","useRumMeasureStop","stopDeps","allowStop","_getSchedulingOperati2","old","_toPropertyKey","resetExpandedPools","_React$PureComponent","_super2","_this3","_len3","_key3","confirmExpandDialogVisible","handleExpand","onConfirmExpand","setConfirmDialogVisibility","handleCollapse","onAbcServiceFilter","abcService","_ref10","slug","_this4","Dialog","open","Header","caption","Body","Footer","onClickButtonApply","onClickButtonCancel","textButtonCancel","textButtonApply","renderConfirmExpandDialog","renderControlAbcService","withStickyHead","withStickyFooter","ElementsTableBase","Details","renderResourceBars","resourceData","childTableItems","guaranteed","renderRelResource","child","isChildPool","DETAILS","integral","totalRow","summedProperties","resource","metric","prepare","calculateTotalOverPools","SCHEDULING_POOL_CHILDREN_TABLE_ID","columnsSets","max_share","renderMaxShare","resource_detailed_cpu","renderColumnAsFloatNumber","resource_detailed_memory","renderColumnAsBytes","resource_detailed_gpu","renderColumnAsNumber","resource_detailed_user_slots","resource_limit_cpu","resource_limit_memory","resource_limit_gpu","resource_limit_user_slots","min_resources_cpu","min_resources_memory","min_resources_gpu","min_resources_user_slots","abs_guaranteed_cpu","abs_guaranteed_memory","abs_guaranteed_gpu","abs_guaranteed_user_slots","abs_demand_cpu","abs_demand_memory","abs_demand_gpu","abs_demand_user_slots","abs_usage_cpu","abs_usage_memory","abs_usage_gpu","abs_usage_user_slots","rel_guaranteed_cpu","rel_guaranteed_memory","rel_guaranteed_gpu","rel_guaranteed_user_slots","rel_usage_cpu","rel_usage_memory","rel_usage_gpu","rel_usage_user_slots","guaranteed_usage_cpu","guaranteed_usage_memory","guaranteed_usage_gpu","guaranteed_usage_user_slots","running_operation_progress","renderAsProgress","running_operation_count","operation_count","operation_progress","max_running_operation_count","renderMaxRunningOperationCount","max_operation_count","renderMaxOperationCount","integral_type","renderIntegralType","burst_cpu","renderIntegralGuarantee","flow_cpu","children_burst_cpu","childrenIntegrals","children_flow_cpu","accumulated","accumulated_cpu","burst_duration","_this$props4","changePoolChildrenFilter","changeContentMode","Filter","RadioButton","_this$props5","ElementsTableSticky","cssTableMods","maxShareRatio","maxOperationCountEdited","renderNumberWithEdited","maxRunningOperationCountEdited","editedValue","autoCalculated","hasActiveGuarantee","inactive","renderColumnAsReadable","getProgressTheme","poolChildrenFilter","CHANGE_POOL_CHILDREN_FILTER","CHANGE_CONTENT_MODE","contentMode","target","DetailsConnected","getPollChildrenTableItems","getContentMode","getPoolChildrenFilter","getSortedPoolChildren","DetailsWithRum","SCHEDULING_DETAILS","PoolAcl","NoContent","warning","hint","PoolAclPanel","loadState","getAclLoadState","IdmObjectType","POOL","SCHEDULING_ACL","SchedulingExpandedPoolsUpdater","withRouter","getPoolIsEphemeral","allowAcl","isPoolAclAllowed","localTab","showSettings","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","Switch","Redirect","from","to","pathname","headingBlock","SchedulingResources","getResources","makeError","PoolEditorDialog","editItem","getSchedulingEditItem","_useSelector","poolErrorData","editVisibility","treGpuLimit","allowedSources","getSchedulingSourcesOfEditItem","poolsItems","getPoolsSelectItems","_useMemo","useMemo","getInitialValues","_useMemo2","initialFormValues","editCloseHandler","editConfirmHandler","form","_form$getState","POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE","POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR","_typeof","_x","getCurrentUserName","hasWarning","setHasWarning","checkPermError","setCheckPermError","pathToCheck","checkUserPermissionsUI","newHasWarning","warningField","checkPermErrorField","poolErrorDataField","transferNotice","parentPool","renderTransferQuotaNoticeForPool","isTopLevel","isTopLevelPool","useTransferNotice","integralTypeNotice","isAbcPoolName","summary","_createQuotaReqTicket","createQuotaReqTicketUrl","queue","useChangeIntegralTypeNotice","onClose","headerProps","onAdd","required","tooltip","hideFilter","min","MIN_VALUE","hidePrettyValue","String","initialLimit","Infinity","sourcesSkipParent","limitInputTitle","cpuStrong","decimalPlaces","gpuStrong","memoryStrong","burstCpu","burstGpu","flowCpu","flowGpu","validator","axis","SchedulingDialogsMemo","SchedulingDialogs","Scheduling","_state$scheduling$sch","hasError","errorData","updateFn","useUpdater","Content","SchedulingMemo","SchedulingWithRum","deleteVisibility","deleteItem","deleteConfirmHandler","SCHEDULING_DELETE_POOL_REQUEST","remove","autoHiding","SCHEDULING_DELETE_POOL_SUCCESS","SCHEDULING_DELETE_POOL_FAILURE","deleteCloseHandler","SCHEDULING_CREATE_POOL_CANCELLED","closeDeleteModal","DeleteDialog","hasCloseButton","keys_","message","propsButtonApply","prepareAbcService","fetchCreatePoolDialogTreeItems","currentTree","getPoolTrees","treeItems","CREATE_POOL_DIALOG_TREE_ITEMS_SUCCESS","createPool","create","parent_name","successContent","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","getCreatePoolDialogError","login","getTreesSelectItems","handleCreateConfirm","handleNameChange","sortedFlatTree","getCreatePoolDialogFlatTreeItems","validateForm","sortedIndexOf_","isApplyDisabled","validate","pristineSubmittable","touched","docsUrl","docsUrls","isIdmAclAvailable","SchedulingTopRowContent","RowWithName","urlParams","SchedulingFavourites","SchedulingPhysicalTree","EditableSchedulingBreadcrumbs","renderTopRowExtraControlsForPool","favouritesPools","getFavouritePools","isActivePool","isActivePoolInFavourites","onFavouriteClick","onFavouriteToggle","parentNS","getSchedulingNS","toggleFavourite","togglePoolFavourites","CurrentPoolToClipboardButton","currentPoolPath","getCurrentPoolPath","ClipboardButton","shiftText","hoverContent","SchedulingBreadcrumbs","bcItems","history","useHistory","some_","_v","endsWith","calcRootPathname","BreadcrumbsItem","href","makeRoutedURL","Breadcrumbs","navigate","onAction","toString","showRoot","toggleEdit","edit","Select","vals","SchedulingTopRowContentMemo","SchedulingTopRowContentWithError","compact","useRumMeasureStart","subPage","getApproversSubjectFilter","aclFilters","approversSubject","getObjectSubjectFilter","objectSubject","getObjectPermissionsFilter","objectPermissions","getAclFilterColumns","columnsFilter","getAclFilterColumnGroupName","columnGroupNameFilter","getAclFilterExpandedSubjects","expandedSubjects","getAclCurrentTab","aclCurrentTab","prepareColumnsNames","columnsPermissions","permission","uniq_","flatten_","sort","prepareApprovers","approvers","subject","extra","subjects","subjectType","groupInfo","group_name","getAllUserPermissions","acl","userPermissions","getAllObjectPermissions","getAllObjectPermissionsWithSplittedSubjects","isSplitted","subjectIndex","getObjectPermissionsTypesList","permissionsFilter","uniquePermisions","Set","permissionTypes","getAclPermissionsSettings","permissions","sortBy_","subjectFilterPredicate","_item$subjects$","entries","_str","str","pop","getAllObjectPermissionsFiltered","subjectFilter","_partition_","partition_","_item$columns","_partition_2","mainPermissions","withColumns","lowerNameFilter","toLocaleLowerCase","filterBySubject","permissionsFilterSet","filterByPermissions","_permissionsFilterPre","foundCount","some","p","has","permissionsFilterPredicate","visibleColumns","filterByColumns","_columns$some","colName","mainPredicates","columnsPredicates","concatByAnd","getObjectPermissionsAggregated","aggregateBySubject","count","AggregateBySubject","first","aggrKey","inherited","allPermissions","aggregationKey","_item$permissions","_child$permissions","_child$permissions2","_item$columns2","_this$first","_this$first2","_this$first3","_this$first4","JSON","stringify","column","isMissing","hasInherited","hasDenyAction","inheritance_mode","isEqual_","inheritedFrom","hasExpandable","objPermissions","aggregated","aggKey","dst","reduce","_item$getItems","getItems","_partition_3","_partition_4","other","OrderByRoleStatus","getAllColumnGroupsActual","columnGroups","nameFilter","nameFilterLower","predicates","_item$columns$some","_item$columns3","_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","names","isPermissionDeleted","permissionDeletionError","deletionError","getLastDeletedPermissionKey","deletedItemKey","getIdmPermissionsRequestError","idmPermissionsRequestError","getIdmManageAclRequestError","idmManageAclRequestError","getIdmPathVersion","version","getChaosIsLoaded","chaos_cell_bundles","getChaosIsLoading","getChaosBundlesSortState","bundlesSort","getChaosBundlesNameFilter","bundlesNameFilter","getChaosBundlesAccountFilter","bundlesAccountFilter","getChaosBundlesTagNodeFilter","bundlesTagNodeFilter","getChaosBundles","bundles","getChaosActiveBundle","activeBundle","getChaosBundlesTableMode","bundlesTableMode","getChaosActiveBundleData","bundle","getChaosBundlesTotal","aggregateTotal","COLUMNS_SORTABLE_AS_IS","getChaosBundlesFiltered","accountFilter","tagNodeFilter","lowerAccountFilter","changelog_account","snapshot_account","lowerTagNodeFilter","node_tag_filter","getChaosBundlesSorted","order","sortTableBundles","columnsSortable","getChaosCells","cells","getChaosCellsSortState","cellsSort","getChaosCellsIdFilter","cellsIdFilter","getChaosCellsBundleFilter","cellsBundleFilter","getChaosCellsHostFilter","cellsHostFilter","getChaosCellsOfActiveAccount","getChaosCellsFiltered","idFilter","bundleFilter","hostFilter","peerAddress","filterChaosCellsByBundle","getChaosCellsSorted","sortArrayBySortState","getChaosCellsBundles","getChaosCellsHosts","getChaosCellsHostsOfActiveBundle","prepareHostsFromCells","prepareHost","getChaosBreadcrumbItems","tabletChaosBundleRootLink","tabletActiveChaosBundleLink","getChytListData","chyt","list","getChytListAvailableCreators","_data$items","creator","getChytListAvailableHealths","_data$items2","health","getChytListAvailableStates","_data$items3","getChytCurrentAlias","clique","currentClique","getChytListFilterAlias","listFilters","getChytListFilterHealth","getChytListFilterCreator","getChytListFilterState","CHYT_LIST_SELECTABLE_COLUMNS","instance_count","total_cpu","total_memory","creation_time","stage","yt_operation_start_time","yt_operation_finish_time","speclet_modification_time","strawberry_state_modification_time","getChytListVisibleColumns","_getSettingsData$glob","getSettingsData","userColumns","getChytListColumns","checked","getChytListTableSortState","getChytListTableSortStateByName","multisortIndex","getChytFilterPredicate","alias","getChytListTableItems","predicate","_data$items4","filteredItems","multiSortBySortStateArray","getFavouriteAccounts","makeGetSetting","getAccountsNS","prepareFavourites","getLastVisitedAccounts","prepareLastVisited","getPopularAccounts","preparePopulars","isActiveAcountInFavourites","getActiveAccount","prepareIsInFavourites","getFavouriteChyt","getChytNS","getLastVisitedChyt","isActiveCliqueInFavourites","getFavouritePaths","getClusterNS","getLastVisitedPaths","getPopularPaths","isCurrentPathInFavourites","getPath","favourites","getFavouriteBundles","getBundlesNS","isActiveBundleInFavourites","getTabletsActiveBundle","getFavouriteChaosBundles","getChaosBundlesNS","isActiveChaosBundleInFavourites","getSetting","SettingName","LOCAL","FAVOURITES","settingGetter","LAST_VISITED","lastVisited","entry","tabletCellBundleDashboardUrl","makeUrlForTabletCellBundleDashboard","genTabletCellBundlesCellUrl","cellId","TABLET_CELL_BUNDLES","TabletsTab","TABLET_CELLS","compareBundlesByAccount","left","right","sorted","_orderTypeToOrderK","orderTypeToOrderK","orderK","undefinedOrderK","_ref2$nodes","nodes","l","_ref3$nodes","r","multiSortWithUndefined","includes"],"sourceRoot":""}
|