@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.
Files changed (108) hide show
  1. package/dist/public/build/assets-manifest.json +75 -75
  2. package/dist/public/build/css/{job.c7c99207.chunk.css → job.9757ff68.chunk.css} +2 -2
  3. package/dist/public/build/css/job.9757ff68.chunk.css.map +1 -0
  4. package/dist/public/build/css/main.0efa9da5.css +10 -0
  5. package/dist/public/build/css/main.0efa9da5.css.map +1 -0
  6. package/dist/public/build/css/navigation.c199c4f2.chunk.css +2 -0
  7. package/dist/public/build/css/navigation.c199c4f2.chunk.css.map +1 -0
  8. package/dist/public/build/js/{1260.534f3f75.chunk.js → 1260.a1e22005.chunk.js} +2 -2
  9. package/dist/public/build/js/{1260.534f3f75.chunk.js.map → 1260.a1e22005.chunk.js.map} +1 -1
  10. package/dist/public/build/js/{1879.23423388.chunk.js → 1879.3975650a.chunk.js} +3 -3
  11. package/dist/public/build/js/{1879.23423388.chunk.js.map → 1879.3975650a.chunk.js.map} +1 -1
  12. package/dist/public/build/js/{1983.666923be.chunk.js → 1983.64a2e22f.chunk.js} +2 -2
  13. package/dist/public/build/js/{1983.666923be.chunk.js.map → 1983.64a2e22f.chunk.js.map} +1 -1
  14. package/dist/public/build/js/{2447.b2877275.chunk.js → 2447.eb8fde89.chunk.js} +2 -2
  15. package/dist/public/build/js/{2447.b2877275.chunk.js.map → 2447.eb8fde89.chunk.js.map} +1 -1
  16. package/dist/public/build/js/3724.3e5848f0.chunk.js +2 -0
  17. package/dist/public/build/js/{3724.425d01ec.chunk.js.map → 3724.3e5848f0.chunk.js.map} +1 -1
  18. package/dist/public/build/js/6729.39d7cf60.chunk.js +2 -0
  19. package/dist/public/build/js/6729.39d7cf60.chunk.js.map +1 -0
  20. package/dist/public/build/js/{7959.95ebd185.chunk.js → 7959.faac2ff8.chunk.js} +2 -2
  21. package/dist/public/build/js/{7959.95ebd185.chunk.js.map → 7959.faac2ff8.chunk.js.map} +1 -1
  22. package/dist/public/build/js/{8390.83f4531a.chunk.js → 8390.c3d2de6a.chunk.js} +2 -2
  23. package/dist/public/build/js/{8390.83f4531a.chunk.js.map → 8390.c3d2de6a.chunk.js.map} +1 -1
  24. package/dist/public/build/js/{8460.2d4d237e.chunk.js → 8460.fc8e2238.chunk.js} +2 -2
  25. package/dist/public/build/js/{8460.2d4d237e.chunk.js.map → 8460.fc8e2238.chunk.js.map} +1 -1
  26. package/dist/public/build/js/{8778.e18e655b.chunk.js → 8778.f3ea089f.chunk.js} +2 -2
  27. package/dist/public/build/js/{8778.e18e655b.chunk.js.map → 8778.f3ea089f.chunk.js.map} +1 -1
  28. package/dist/public/build/js/{9558.a6ea64c9.chunk.js → 9558.6a4bf9a9.chunk.js} +2 -2
  29. package/dist/public/build/js/{9558.a6ea64c9.chunk.js.map → 9558.6a4bf9a9.chunk.js.map} +1 -1
  30. package/dist/public/build/js/9569.aac48f3b.chunk.js +2 -0
  31. package/dist/public/build/js/9569.aac48f3b.chunk.js.map +1 -0
  32. package/dist/public/build/js/{accounts.2ba221c2.chunk.js → accounts.aa7ed73f.chunk.js} +2 -2
  33. package/dist/public/build/js/accounts.aa7ed73f.chunk.js.map +1 -0
  34. package/dist/public/build/js/{acl.c948c339.chunk.js → acl.4cd54663.chunk.js} +2 -2
  35. package/dist/public/build/js/{acl.c948c339.chunk.js.map → acl.4cd54663.chunk.js.map} +1 -1
  36. package/dist/public/build/js/{app-navigation.b062662b.chunk.js → app-navigation.13c65573.chunk.js} +2 -2
  37. package/dist/public/build/js/app-navigation.13c65573.chunk.js.map +1 -0
  38. package/dist/public/build/js/chyt.0ee6bfa2.chunk.js +2 -0
  39. package/dist/public/build/js/chyt.0ee6bfa2.chunk.js.map +1 -0
  40. package/dist/public/build/js/cluster-page-wrapper.bdc8607f.chunk.js +2 -0
  41. package/dist/public/build/js/cluster-page-wrapper.bdc8607f.chunk.js.map +1 -0
  42. package/dist/public/build/js/{components.bbe331cb.chunk.js → components.b39828bc.chunk.js} +2 -2
  43. package/dist/public/build/js/components.b39828bc.chunk.js.map +1 -0
  44. package/dist/public/build/js/job.ea2ba82d.chunk.js +2 -0
  45. package/dist/public/build/js/job.ea2ba82d.chunk.js.map +1 -0
  46. package/dist/public/build/js/main.6375dbc6.js +3 -0
  47. package/dist/public/build/js/main.6375dbc6.js.map +1 -0
  48. package/dist/public/build/js/manage-tokens.e1e791fc.chunk.js +2 -0
  49. package/dist/public/build/js/manage-tokens.e1e791fc.chunk.js.map +1 -0
  50. package/dist/public/build/js/{navigation-flow.eeb01518.chunk.js → navigation-flow.6d67215a.chunk.js} +2 -2
  51. package/dist/public/build/js/{navigation-flow.eeb01518.chunk.js.map → navigation-flow.6d67215a.chunk.js.map} +1 -1
  52. package/dist/public/build/js/navigation.529208de.chunk.js +2 -0
  53. package/dist/public/build/js/navigation.529208de.chunk.js.map +1 -0
  54. package/dist/public/build/js/odin.c4c4ef6f.chunk.js +2 -0
  55. package/dist/public/build/js/odin.c4c4ef6f.chunk.js.map +1 -0
  56. package/dist/public/build/js/{path-viewer.b1b3328d.chunk.js → path-viewer.c091d9f4.chunk.js} +2 -2
  57. package/dist/public/build/js/{path-viewer.b1b3328d.chunk.js.map → path-viewer.c091d9f4.chunk.js.map} +1 -1
  58. package/dist/public/build/js/{query-navigation.9964bfcf.chunk.js → query-navigation.b1574290.chunk.js} +2 -2
  59. package/dist/public/build/js/{query-navigation.9964bfcf.chunk.js.map → query-navigation.b1574290.chunk.js.map} +1 -1
  60. package/dist/public/build/js/{query-results.733b1795.chunk.js → query-results.0a05cc41.chunk.js} +2 -2
  61. package/dist/public/build/js/{query-results.733b1795.chunk.js.map → query-results.0a05cc41.chunk.js.map} +1 -1
  62. package/dist/public/build/js/query-tracker.515069f6.chunk.js +2 -0
  63. package/dist/public/build/js/query-tracker.515069f6.chunk.js.map +1 -0
  64. package/dist/public/build/js/{runtime.481a6d3a.js → runtime.09217c31.js} +2 -2
  65. package/dist/public/build/js/{runtime.481a6d3a.js.map → runtime.09217c31.js.map} +1 -1
  66. package/dist/public/build/js/{scheduling.b70d4627.chunk.js → scheduling.6448eabd.chunk.js} +2 -2
  67. package/dist/public/build/js/{scheduling.b70d4627.chunk.js.map → scheduling.6448eabd.chunk.js.map} +1 -1
  68. package/dist/public/build/js/system.1114aa96.chunk.js +2 -0
  69. package/dist/public/build/js/system.1114aa96.chunk.js.map +1 -0
  70. package/dist/public/build/js/{yt-df-dialog.9ddda260.chunk.js → yt-df-dialog.4ad719bf.chunk.js} +2 -2
  71. package/dist/public/build/js/yt-df-dialog.4ad719bf.chunk.js.map +1 -0
  72. package/dist/public/build/manifest.json +70 -70
  73. package/dist/shared/constants/settings-types.d.ts +1 -0
  74. package/package.json +3 -2
  75. package/dist/public/build/css/job.c7c99207.chunk.css.map +0 -1
  76. package/dist/public/build/css/main.2d3cbfcd.css +0 -10
  77. package/dist/public/build/css/main.2d3cbfcd.css.map +0 -1
  78. package/dist/public/build/css/navigation.0a9042b3.chunk.css +0 -2
  79. package/dist/public/build/css/navigation.0a9042b3.chunk.css.map +0 -1
  80. package/dist/public/build/js/3724.425d01ec.chunk.js +0 -2
  81. package/dist/public/build/js/5177.b4cec253.chunk.js +0 -2
  82. package/dist/public/build/js/5177.b4cec253.chunk.js.map +0 -1
  83. package/dist/public/build/js/6729.da9aa02f.chunk.js +0 -2
  84. package/dist/public/build/js/6729.da9aa02f.chunk.js.map +0 -1
  85. package/dist/public/build/js/accounts.2ba221c2.chunk.js.map +0 -1
  86. package/dist/public/build/js/app-navigation.b062662b.chunk.js.map +0 -1
  87. package/dist/public/build/js/chyt.7f99f87d.chunk.js +0 -2
  88. package/dist/public/build/js/chyt.7f99f87d.chunk.js.map +0 -1
  89. package/dist/public/build/js/cluster-page-wrapper.894fbacc.chunk.js +0 -2
  90. package/dist/public/build/js/cluster-page-wrapper.894fbacc.chunk.js.map +0 -1
  91. package/dist/public/build/js/components.bbe331cb.chunk.js.map +0 -1
  92. package/dist/public/build/js/job.4fc50056.chunk.js +0 -2
  93. package/dist/public/build/js/job.4fc50056.chunk.js.map +0 -1
  94. package/dist/public/build/js/main.7981a440.js +0 -3
  95. package/dist/public/build/js/main.7981a440.js.map +0 -1
  96. package/dist/public/build/js/manage-tokens.286a4da9.chunk.js +0 -2
  97. package/dist/public/build/js/manage-tokens.286a4da9.chunk.js.map +0 -1
  98. package/dist/public/build/js/navigation.d891266d.chunk.js +0 -2
  99. package/dist/public/build/js/navigation.d891266d.chunk.js.map +0 -1
  100. package/dist/public/build/js/odin.df1cfe56.chunk.js +0 -2
  101. package/dist/public/build/js/odin.df1cfe56.chunk.js.map +0 -1
  102. package/dist/public/build/js/query-tracker.06cc4fdc.chunk.js +0 -2
  103. package/dist/public/build/js/query-tracker.06cc4fdc.chunk.js.map +0 -1
  104. package/dist/public/build/js/system.f759d3f0.chunk.js +0 -2
  105. package/dist/public/build/js/system.f759d3f0.chunk.js.map +0 -1
  106. package/dist/public/build/js/yt-df-dialog.9ddda260.chunk.js.map +0 -1
  107. /package/dist/public/build/js/{1879.23423388.chunk.js.LICENSE.txt → 1879.3975650a.chunk.js.LICENSE.txt} +0 -0
  108. /package/dist/public/build/js/{main.7981a440.js.LICENSE.txt → main.6375dbc6.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"js/navigation-flow.eeb01518.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevrons-right.svg","webpack://@ytsaurus/ui/./src/ui/components/ExpandButton/ExpandButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/StatusLabel/StatusLabel.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/flow/status.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/flow/status.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/flow/filters.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/flow/layout.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/flow/layout.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Flow/FlowLayout/FlowLayout.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/flow/specs.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/flow/specs.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Flow/PipelineSpec/PipelineSpec.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Flow/Flow.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevron-right.svg"],"sourcesContent":["const SvgChevronsRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M3.47 10.97a.75.75 0 1 0 1.06 1.06l3.5-3.5a.75.75 0 0 0 0-1.06l-3.5-3.5a.75.75 0 0 0-1.06 1.06L6.44 8zm5 0a.75.75 0 1 0 1.06 1.06l3.5-3.5a.75.75 0 0 0 0-1.06l-3.5-3.5a.75.75 0 0 0-1.06 1.06L11.44 8z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronsRight;","import React, {FC} from 'react';\nimport {Button, ButtonProps, Icon} from '@gravity-ui/uikit';\nimport shevronRightSvg from '@gravity-ui/icons/svgs/chevron-right.svg';\nimport doubleShevronRightSvg from '@gravity-ui/icons/svgs/chevrons-right.svg';\nimport cn from 'bem-cn-lite';\nimport './ExpandButton.scss';\n\nconst block = cn('yt-expanded-button');\n\ntype Props = {\n className?: string;\n expanded: boolean;\n toggleExpanded: () => void;\n inline?: boolean;\n all?: boolean;\n showText?: boolean;\n qa?: ButtonProps['qa'];\n};\n\nexport const ExpandButton: FC<Props> = ({\n className,\n expanded,\n inline,\n toggleExpanded,\n all,\n showText,\n qa,\n}) => {\n const titleExpanded = all ? 'Collapse All' : 'Collapse';\n const titleCollapsed = all ? 'Expand All' : 'Expand';\n return (\n <Button\n className={block({inline}, className)}\n view=\"flat-secondary\"\n title={expanded ? titleExpanded : titleCollapsed}\n onClick={toggleExpanded}\n qa={qa}\n >\n {showText && (expanded ? titleExpanded : titleCollapsed) + ' '}\n <Icon\n className={block('expand', {expanded})}\n data={all ? doubleShevronRightSvg : shevronRightSvg}\n size={16}\n />\n </Button>\n );\n};\n","import React from 'react';\nimport block from 'bem-cn-lite';\n\nimport hammer from '../../common/hammer';\nimport Icon, {IconName} from '../Icon/Icon';\n\nimport './StatusLabel.scss';\n\nfunction getViewState(label?: StatusLabelProps['label']): ViewState {\n const states: Record<Exclude<typeof label, undefined>, ViewState> = {\n // preparing states\n materializing: 'preparing',\n initializing: 'preparing',\n preparing: 'preparing',\n pending: 'preparing',\n starting: 'preparing',\n\n // running states\n running: 'running',\n completing: 'running',\n failing: 'running',\n aborting: 'running',\n reviving: 'running',\n suspended: 'suspended',\n\n // final states\n failed: 'failed',\n completed: 'completed',\n aborted: 'aborted',\n\n // NavigationFlowState\n Unknown: 'unknown',\n Stopped: 'suspended',\n Paused: 'suspended',\n Working: 'running',\n Draining: 'running',\n Pausing: 'running',\n Completed: 'completed',\n };\n\n return states[label!] ?? 'unknown';\n}\n\n// see https://github.com/ytsaurus/ytsaurus/blob/4ff6c0d/yt/yt/flow/lib/client/public.h#L20-L28\nexport type NavigationFlowState =\n | 'Unknown'\n | 'Stopped'\n | 'Paused'\n | 'Working'\n | 'Draining'\n | 'Pausing'\n | 'Completed';\n\nexport type StatusLabelState =\n | 'aborted'\n | 'aborting'\n | 'completed'\n | 'completing'\n | 'failed'\n | 'failing'\n | 'initializing'\n | 'materializing'\n | 'pending'\n | 'preparing'\n | 'reviving'\n | 'running'\n | 'starting'\n | 'suspended'\n | 'running';\n\ntype ViewState =\n | 'preparing'\n | 'running'\n | 'failed'\n | 'aborted'\n | 'completed'\n | 'suspended'\n | 'unknown';\n\nfunction getIcon(state: ViewState) {\n const iconsByViewState: Record<ViewState, IconName> = {\n preparing: 'clock',\n running: 'play-circle',\n suspended: 'pause-circle',\n failed: 'times-circle',\n completed: 'check-circle',\n aborted: 'times-circle',\n unknown: 'question-circle',\n };\n return iconsByViewState[state];\n}\n\nconst b = block('status-label');\n\nexport type StatusLabelProps = {\n className?: string;\n label?: StatusLabelState | NavigationFlowState;\n renderPlaque?: boolean;\n};\n\nexport default function StatusLabel({className, label, renderPlaque}: StatusLabelProps) {\n const mappedState = getViewState(label);\n const icon = getIcon(mappedState);\n const mods = {state: mappedState};\n\n return !label ? (\n <span />\n ) : (\n <span className={b(null, renderPlaque ? b('plaque', mods, className) : b(mods, className))}>\n <Icon awesome={icon} />\n <span>{hammer.format['ReadableField'](label)}</span>\n </span>\n );\n}\n","import {RootState} from '../../reducers';\n\nexport const getFlowStatusData = (state: RootState) => state.flow.status.data;\nexport const getFlowStatusPipelinePath = (state: RootState) => state.flow.status.pipeline_path;\nexport const getFlowStatusError = (state: RootState) => state.flow.status.error;\n","import {ThunkAction} from 'redux-thunk';\n\nimport {ytApiV4} from '../../../rum/rum-wrap-api';\nimport {RootState} from '../../../store/reducers';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {getFlowStatusPipelinePath} from '../../../store/selectors/flow/status';\nimport {flowStatusActions} from '../../reducers/flow/status';\n\ntype AsyncAction<R = void> = ThunkAction<R, RootState, unknown, any>;\n\nconst cancelHelper = new CancelHelper();\n\nexport function loadFlowStatus(pipeline_path: string): AsyncAction<Promise<void>> {\n return (dispatch) => {\n dispatch(flowStatusActions.onRequest({pipeline_path}));\n\n return ytApiV4\n .getPipelineState({\n parameters: {pipeline_path},\n cancellation: cancelHelper.removeAllAndSave,\n })\n .then(\n (data) => {\n dispatch(flowStatusActions.onSuccess({data}));\n },\n (error) => {\n if (!isCancelled(error)) {\n dispatch(flowStatusActions.onError({error}));\n }\n },\n );\n };\n}\n\nexport function updateFlowState({\n pipeline_path,\n state,\n}: {\n pipeline_path: string;\n state: 'start' | 'stop' | 'pause';\n}): AsyncAction<Promise<void>> {\n return (dispatch, getState) => {\n const method = `${state}Pipeline` as const;\n return ytApiV4[method]({pipeline_path}).then(() => {\n const path = getFlowStatusPipelinePath(getState());\n if (path === pipeline_path) {\n dispatch(loadFlowStatus(pipeline_path));\n }\n });\n };\n}\n","import {RootState} from '../../../store/reducers';\n\nexport const getFlowViewMode = (state: RootState) => state.flow.filters.flowViewMode;\n","import {ThunkAction} from 'redux-thunk';\n\nimport {ytApiV4} from '../../../rum/rum-wrap-api';\nimport {RootState} from '../../../store/reducers';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {flowLayoutActions} from '../../../store/reducers/flow/layout';\n\ntype AsyncAction<R = void> = ThunkAction<R, RootState, unknown, any>;\n\nconst cancelHelper = new CancelHelper();\n\nexport function loadFlowLayout(pipeline_path: string): AsyncAction<Promise<void>> {\n return (dispatch) => {\n dispatch(flowLayoutActions.onRequest({pipeline_path}));\n\n return ytApiV4\n .getFlowView({\n parameters: {pipeline_path, ...{annotate_with_types: true}},\n cancellation: cancelHelper.removeAllAndSave,\n })\n .then(\n (data) => {\n dispatch(flowLayoutActions.onSuccess({data}));\n },\n (error) => {\n if (!isCancelled(error)) {\n dispatch(flowLayoutActions.onError({error}));\n }\n },\n );\n };\n}\n\nexport function expandFlowLayoutComputation({\n computation_id,\n}: {\n computation_id: string;\n}): AsyncAction<void> {\n return (dispatch) => {\n dispatch(flowLayoutActions.onExpandComputation({computation_id}));\n };\n}\n\nexport function expandFlowLayoutWorker({\n worker_address,\n}: {\n worker_address: string;\n}): AsyncAction<void> {\n return (dispatch) => {\n dispatch(flowLayoutActions.onExpandWorker({worker_address}));\n };\n}\n","import {createSelector} from 'reselect';\nimport map_ from 'lodash/map';\nimport forEach_ from 'lodash/forEach';\n\nimport {RootState} from '../../../store/reducers';\n\nexport const getFlowLayoutPipelinePath = (state: RootState) => state.flow.layout.pipeline_path;\nexport const getFlowLayoutError = (state: RootState) => state.flow.layout.error;\nconst getFlowLayoutExpandedComputations = (state: RootState) =>\n state.flow.layout.expandedComputations;\nconst getFlowLayoutExpandedWorkers = (state: RootState) => state.flow.layout.expandedWorkers;\n\nconst getFlowLayoutRawData = (state: RootState) => state.flow.layout.data;\n\ntype RowData = Pick<\n ReturnType<typeof getFlowLayoutPartitions>[number],\n 'job' | 'partition' | 'worker'\n>;\ntype LayoutExpandable = {\n $value: Array<Exclude<FlowLayoutDataItem, LayoutExpandable>>;\n $attributes: {\n name: string;\n expanded: boolean;\n job_count: number;\n worker_count: number;\n partition_count: number;\n };\n};\n\nexport type FlowLayoutDataItem = {[K in keyof RowData]: RowData[K] | null} | LayoutExpandable;\n\nexport const getFlowLayoutData = createSelector(\n [getFlowLayoutRawData, getFlowLayoutExpandedComputations, getFlowLayoutExpandedWorkers],\n (data, expandedComputations, expandedWorkers) => {\n return (mode: 'computations' | 'workers') => {\n return mode === 'computations'\n ? handleExpandedNames(getFlowLayoutPartitions(data), expandedComputations)\n : handleExpandedNames(getFlowLayoutWorkers(data), expandedWorkers);\n };\n },\n);\n\nfunction getFlowLayoutPartitions(data: ReturnType<typeof getFlowLayoutRawData>) {\n const {jobs = {}, partitions} = data?.execution_spec?.layout?.value ?? {};\n return map_(partitions, (item) => {\n const job = jobs[item.current_job_id!];\n const {worker_address} = job ?? {};\n const worker = data?.workers[worker_address];\n return {\n name: item.computation_id,\n partition: (item as typeof item | undefined) ?? null,\n job: (job as typeof job | undefined) ?? null,\n worker: worker ?? null,\n };\n });\n}\n\nfunction getFlowLayoutWorkers(data: ReturnType<typeof getFlowLayoutRawData>) {\n const {jobs, partitions} = data?.execution_spec?.layout?.value ?? {};\n\n const res: ReturnType<typeof getFlowLayoutPartitions> = [];\n const visitedWorkers = new Set<string>();\n\n forEach_(jobs, (job) => {\n const {worker_address, partition_id} = job;\n const partition = partitions?.[partition_id];\n const worker = data?.workers[worker_address];\n res.push({\n name: worker_address,\n partition: partition ?? null,\n job: job ?? null,\n worker: worker ?? null,\n });\n\n visitedWorkers.add(worker_address);\n });\n forEach_(data?.workers, (item) => {\n const {address} = item;\n if (!visitedWorkers.has(address)) {\n res.push({name: address, partition: null, job: null, worker: null});\n }\n });\n\n return res;\n}\n\nfunction handleExpandedNames(\n rows: Array<RowData & {name: string}>,\n expandedNames: Record<string, true>,\n) {\n const expanded = new Set(Object.keys(expandedNames));\n const groups: Array<LayoutExpandable> = [];\n const groupsByName = new Map<string, LayoutExpandable>();\n rows.forEach((item) => {\n const {name, ...rest} = item;\n let dst = groupsByName.get(name);\n if (!dst) {\n dst = {\n $attributes: {\n name: name,\n expanded: expanded.has(name),\n job_count: 0,\n worker_count: 0,\n partition_count: 0,\n },\n $value: [],\n };\n groupsByName.set(name, dst!);\n groups.push(dst!);\n }\n if (item.job) {\n ++dst!.$attributes.job_count;\n }\n if (item.worker) {\n ++dst!.$attributes.worker_count;\n }\n if (item.partition) {\n ++dst!.$attributes.partition_count;\n }\n dst!.$value?.push(rest);\n });\n\n if (!expanded.size) {\n return groups;\n }\n\n let res: Array<FlowLayoutDataItem> = [];\n for (const item of groups) {\n const {name} = item.$attributes;\n if (expanded.has(name)) {\n res = res.concat(item, item.$value);\n } else {\n res.push(item);\n }\n }\n\n return res;\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 format from '../../../../../common/hammer/format';\n\nimport ClickableAttributesButton from '../../../../../components/AttributesButton/ClickableAttributesButton';\nimport ClipboardButton from '../../../../../components/ClipboardButton/ClipboardButton';\nimport DataTableYT, {\n DATA_TABLE_YT_SETTINGS,\n} from '../../../../../components/DataTableYT/DataTableYT';\nimport ErrorBlock from '../../../../../components/Error/Error';\nimport {ExpandButton} from '../../../../../components/ExpandButton';\n\nimport {useUpdater} from '../../../../../hooks/use-updater';\nimport {\n expandFlowLayoutComputation,\n expandFlowLayoutWorker,\n loadFlowLayout,\n} from '../../../../../store/actions/flow/layout';\nimport {\n FlowLayoutDataItem,\n getFlowLayoutData,\n getFlowLayoutError,\n getFlowLayoutPipelinePath,\n} from '../../../../../store/selectors/flow/layout';\n\nimport './FlowLayout.scss';\n\nconst block = cn('yt-navigation-flow-layout');\n\nexport function FlowLayout({path, viewMode}: {path: string; viewMode: 'computations' | 'workers'}) {\n const dispatch = useDispatch();\n\n const pipeline_path = useSelector(getFlowLayoutPipelinePath);\n const error = useSelector(getFlowLayoutError);\n const getData = useSelector(getFlowLayoutData);\n\n const data = React.useMemo(() => {\n return getData(viewMode);\n }, [viewMode, getData]);\n\n const samePath = path === pipeline_path;\n const columns = useFlowLayoutColumn(viewMode);\n\n const updateFn = React.useCallback(() => {\n dispatch(loadFlowLayout(path));\n }, [path, dispatch]);\n useUpdater(updateFn);\n\n if (!samePath) {\n return null;\n }\n\n return (\n <div className={block()}>\n {Boolean(error) && <ErrorBlock error={error} />}\n <DataTableYT\n settings={DATA_TABLE_YT_SETTINGS}\n columns={columns}\n data={data}\n useThemeYT\n />\n </div>\n );\n}\n\nfunction useFlowLayoutColumn(type: 'computations' | 'workers') {\n const dispatch = useDispatch();\n\n const res = React.useMemo(() => {\n const isComputations = type === 'computations';\n const columns: Array<Column<FlowLayoutDataItem>> = [\n {\n name: isComputations\n ? 'Computation / Partition Id'\n : 'Worker address / Partition Id',\n className: block('td-name'),\n render({row}) {\n let content;\n if ('$attributes' in row) {\n const {\n $attributes: {name, expanded},\n } = row;\n content = (\n <>\n <ExpandButton\n className={block('expand', {hidden: row.$value.length === 0})}\n expanded={expanded}\n toggleExpanded={() => {\n dispatch(\n isComputations\n ? expandFlowLayoutComputation({\n computation_id: name,\n })\n : expandFlowLayoutWorker({worker_address: name}),\n );\n requestAnimationFrame(() => {\n window.dispatchEvent(new Event('resize'));\n });\n }}\n />\n <span className={block('name-title')}>\n {name}{' '}\n <ClipboardButton\n view=\"flat-secondary\"\n text={name}\n inlineMargins\n visibleOnRowHover\n />\n </span>\n </>\n );\n } else {\n content = (\n <span className={block('name-title', {level: '1'})}>\n {row.partition?.partition_id}\n <ClipboardButton\n view=\"flat-secondary\"\n text={row.partition?.partition_id}\n inlineMargins\n visibleOnRowHover\n />\n </span>\n );\n }\n return <div className={block('name')}>{content}</div>;\n },\n },\n {\n name: 'Partition state',\n render({row}) {\n return 'partition' in row\n ? row.partition?.state\n : format.Number(row.$value.length);\n },\n width: 120,\n },\n {\n name: 'Job Id',\n render({row}) {\n return 'partition' in row ? (\n <>\n {row.partition?.current_job_id}{' '}\n <ClipboardButton\n view=\"flat-secondary\"\n text={row.partition?.current_job_id}\n inlineMargins\n visibleOnRowHover\n />\n </>\n ) : (\n format.Number(row.$attributes.job_count)\n );\n },\n width: 400,\n },\n isComputations\n ? {\n name: 'Worker address',\n render({row}) {\n return 'job' in row ? (\n <>\n {row.job?.worker_address}\n <ClipboardButton\n view=\"flat-secondary\"\n text={row.job?.worker_address}\n inlineMargins\n visibleOnRowHover\n />\n </>\n ) : (\n format.Number(row.$attributes.worker_count)\n );\n },\n width: 400,\n }\n : {\n name: 'Computation',\n render({row}) {\n return 'partition' in row\n ? row.partition?.computation_id\n : format.Number(row.$attributes.partition_count);\n },\n width: 400,\n },\n {\n name: 'actions',\n header: null,\n render({row}) {\n return (\n <ClickableAttributesButton\n className={block('show-attributes')}\n title={'Details'}\n attributes={row}\n withTooltip={false}\n />\n );\n },\n width: 50,\n },\n ];\n return columns;\n }, [type]);\n return res;\n}\n","import {RootState} from '../../../store/reducers';\n\nexport const getFlowStaticSpecData = (state: RootState) => state.flow.staticSpec.data;\nexport const getFlowStaticSpecPath = (state: RootState) => state.flow.staticSpec.pipeline_path;\nexport const getFlowStaticSpecError = (state: RootState) => state.flow.staticSpec.error;\nexport const getFlowStaticSpecFirstLoading = (state: RootState) => {\n const {loading, loaded} = state.flow.staticSpec;\n return !loaded && loading;\n};\n\nexport const getFlowDynamicSpecData = (state: RootState) => state.flow.dynamicSpec.data;\nexport const getFlowDynamicSpecPath = (state: RootState) => state.flow.dynamicSpec.pipeline_path;\nexport const getFlowDynamicSpecError = (state: RootState) => state.flow.dynamicSpec.error;\nexport const getFlowDynamicSpecFirstLoading = (state: RootState) => {\n const {loading, loaded} = state.flow.dynamicSpec;\n return !loaded && loading;\n};\n","import {ThunkAction} from 'redux-thunk';\n\nimport {ytApiV4} from '../../../rum/rum-wrap-api';\nimport {RootState} from '../../../store/reducers';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {\n FlowSpecState,\n dynamicSpecActions,\n staticSpecActions,\n} from '../../../store/reducers/flow/specs';\nimport {getFlowDynamicSpecPath, getFlowStaticSpecPath} from '../../../store/selectors/flow/specs';\n\nconst cancelHelper = new CancelHelper();\n\ntype AsyncAction<R = void> = ThunkAction<R, RootState, unknown, any>;\n\nexport function loadFlowStaticSpec(pipeline_path: string): AsyncAction {\n return (dispatch) => {\n dispatch(staticSpecActions.onRequest({pipeline_path}));\n return ytApiV4\n .getPipelineSpec({\n parameters: {pipeline_path},\n cancellation: cancelHelper.removeAllAndSave,\n })\n .then(\n (data: FlowSpecState['data']) => {\n dispatch(staticSpecActions.onSuccess({data}));\n },\n (error: any) => {\n if (!isCancelled(error)) {\n dispatch(staticSpecActions.onError({error}));\n }\n },\n );\n };\n}\n\nexport function updateFlowStaticSpec({\n data,\n path,\n}: {\n data: FlowSpecState['data'];\n path: string;\n}): AsyncAction<Promise<void>> {\n return (dispatch, getState) => {\n return ytApiV4\n .setPipelineSpec({pipeline_path: path, expected_version: data?.version}, data?.spec)\n .then(() => {\n const pipeline_path = getFlowStaticSpecPath(getState());\n if (pipeline_path && pipeline_path === path) {\n dispatch(loadFlowStaticSpec(path));\n }\n });\n };\n}\n\nexport function loadFlowDynamicSpec(pipeline_path: string): AsyncAction {\n return (dispatch) => {\n dispatch(dynamicSpecActions.onRequest({pipeline_path}));\n return ytApiV4\n .getPipelineDynamicSpec({\n parameters: {pipeline_path},\n cancellation: cancelHelper.removeAllAndSave,\n })\n .then(\n (data: FlowSpecState['data']) => {\n dispatch(dynamicSpecActions.onSuccess({data}));\n },\n (error: any) => {\n if (!isCancelled(error)) {\n dispatch(dynamicSpecActions.onError({error}));\n }\n },\n );\n };\n}\n\nexport function updateFlowDynamicSpec({\n data,\n path,\n}: {\n data: FlowSpecState['data'];\n path: string;\n}): AsyncAction<Promise<void>> {\n return (dispatch, getState) => {\n return ytApiV4\n .setPipelineDynamicSpec(\n {pipeline_path: path, expected_version: data?.version},\n data?.spec,\n )\n .then(() => {\n const pipline_path = getFlowDynamicSpecPath(getState());\n if (path === pipline_path) {\n dispatch(loadFlowDynamicSpec(path));\n }\n });\n };\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport {Button} from '@gravity-ui/uikit';\n\nimport {YTError} from '../../../../../../@types/types';\n\nimport {useUpdater} from '../../../../../hooks/use-updater';\n\nimport {useThunkDispatch} from '../../../../../store/thunkDispatch';\nimport {\n loadFlowDynamicSpec,\n loadFlowStaticSpec,\n updateFlowDynamicSpec,\n updateFlowStaticSpec,\n} from '../../../../../store/actions/flow/specs';\nimport {\n getFlowDynamicSpecData,\n getFlowDynamicSpecFirstLoading,\n getFlowStaticSpecData,\n getFlowStaticSpecError,\n getFlowStaticSpecFirstLoading,\n} from '../../../../../store/selectors/flow/specs';\nimport {getFlowSpecYsonSettings} from '../../../../../store/selectors/thor/unipika';\nimport {FlowSpecState} from '../../../../../store/reducers/flow/specs';\n\nimport Yson from '../../../../../components/Yson/Yson';\nimport Icon from '../../../../../components/Icon/Icon';\nimport {YTDFDialog, makeErrorFields} from '../../../../../components/Dialog';\nimport ErrorBlock from '../../../../../components/Block/Block';\nimport Loader from '../../../../../components/Loader/Loader';\nimport {UnipikaSettings} from '../../../../../components/Yson/StructuredYson/StructuredYsonTypes';\n\nimport './PipelineSpec.scss';\nimport {YsonDownloadButton} from '../../../../../components/DownloadAttributesButton';\nimport {pathToFileName} from '../../../helpers/pathToFileName';\n\nconst block = cn('yt-pipeline-spec');\n\ntype PipelineSpecProps = {\n path: string;\n error: YTError | undefined;\n data: FlowSpecState['data'];\n name: string;\n onSave: (data: PipelineSpecProps['data']) => Promise<void>;\n};\n\nfunction PipelineSpec({path, data, error, name, onSave}: PipelineSpecProps) {\n const [showEdit, setShowEdit] = React.useState(false);\n\n const settings = useSelector(getFlowSpecYsonSettings);\n\n return (\n <React.Fragment>\n {Boolean(error) && <ErrorBlock error={error} />}\n <Yson\n value={data}\n settings={settings}\n virtualized\n folding\n extraTools={\n <React.Fragment>\n <YsonDownloadButton\n value={data}\n settings={settings}\n name={`pipeline_spec_${pathToFileName(path)}`}\n />\n <Button view=\"outlined\" onClick={() => setShowEdit(true)}>\n <Icon awesome=\"pencil\" />\n Edit {name}\n </Button>\n </React.Fragment>\n }\n />\n <EditSpecDialog\n path={path}\n name={name}\n visible={showEdit}\n onSpecApply={(spec) => onSave({...data!, spec})}\n onClose={() => setShowEdit(false)}\n spec={data?.spec}\n settings={settings}\n />\n </React.Fragment>\n );\n}\n\ntype FormValues = {\n text: {value?: string};\n path: string;\n};\n\nfunction EditSpecDialog({\n path,\n visible,\n spec,\n onClose,\n onSpecApply,\n name,\n settings,\n}: Pick<PipelineSpecProps, 'name' | 'path'> & {\n spec?: unknown;\n visible: boolean;\n onClose: () => void;\n settings: UnipikaSettings;\n onSpecApply: (spec: unknown) => Promise<void>;\n}) {\n const [error, setError] = React.useState<YTError | undefined>();\n\n const text = React.useMemo(() => {\n return {value: JSON.stringify(spec, null, 4)};\n }, [spec]);\n\n return (\n visible && (\n <YTDFDialog<FormValues>\n visible\n size=\"l\"\n onClose={onClose}\n initialValues={{text, path}}\n headerProps={{\n title: `Edit ${name}`,\n }}\n onAdd={async (f) => {\n setError(undefined);\n const {text} = f.getState().values;\n if (text.value) {\n try {\n return await onSpecApply(JSON.parse(text.value));\n } catch (e: any) {\n setError(e);\n return Promise.reject(e);\n }\n } else {\n return Promise.resolve();\n }\n }}\n fields={[\n {\n caption: 'Pipeline path',\n name: 'path',\n type: 'plain',\n },\n {\n name: 'text',\n caption: 'Specification',\n type: 'json',\n fullWidth: true,\n extras: {\n className: block('editor'),\n initialShowPreview: false,\n unipikaSettings: settings,\n },\n },\n ...makeErrorFields([error]),\n ]}\n />\n )\n );\n}\n\nexport function FlowStaticSpec({pipeline_path: path}: {pipeline_path: string}) {\n const dispatch = useThunkDispatch();\n\n const data = useSelector(getFlowStaticSpecData);\n const error = useSelector(getFlowStaticSpecError);\n const firstLoading = useSelector(getFlowStaticSpecFirstLoading);\n\n const updateFn = React.useCallback(() => {\n dispatch(loadFlowStaticSpec(path));\n }, [dispatch, path]);\n useUpdater(updateFn);\n\n const onEdit = React.useCallback(\n (newData: typeof data) => {\n return dispatch(updateFlowStaticSpec({path, data: newData}));\n },\n [path, dispatch],\n );\n\n return firstLoading ? (\n <Loader />\n ) : (\n <PipelineSpec\n path={path}\n data={data}\n error={error}\n name=\"static specification\"\n onSave={onEdit}\n />\n );\n}\n\nexport function FlowDynamicSpec({pipeline_path: path}: {pipeline_path: string}) {\n const dispatch = useThunkDispatch();\n\n const data = useSelector(getFlowDynamicSpecData);\n const error = useSelector(getFlowStaticSpecError);\n const firstLoading = useSelector(getFlowDynamicSpecFirstLoading);\n\n const updateFn = React.useCallback(() => {\n dispatch(loadFlowDynamicSpec(path));\n }, [dispatch, path]);\n useUpdater(updateFn);\n\n const onEdit = React.useCallback(\n (newData: typeof data) => {\n return dispatch(updateFlowDynamicSpec({path, data: newData}));\n },\n [path, dispatch],\n );\n\n return firstLoading ? (\n <Loader />\n ) : (\n <PipelineSpec\n path={path}\n data={data}\n error={error}\n name=\"dynamic specification\"\n onSave={onEdit}\n />\n );\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport {Button, Flex, Link, RadioButton, Text} from '@gravity-ui/uikit';\n\nimport Alert from '../../../../components/Alert/Alert';\nimport ClipboardButton from '../../../../components/ClipboardButton/ClipboardButton';\nimport format from '../../../../common/hammer/format';\nimport Icon from '../../../../components/Icon/Icon';\nimport MetaTable from '../../../../components/MetaTable/MetaTable';\nimport StatusLabel from '../../../../components/StatusLabel/StatusLabel';\nimport {useUpdater} from '../../../../hooks/use-updater';\nimport {useThunkDispatch} from '../../../../store/thunkDispatch';\nimport {loadFlowStatus, updateFlowState} from '../../../../store/actions/flow/status';\nimport {getFlowViewMode} from '../../../../store/selectors/flow/filters';\nimport {getFlowStatusData} from '../../../../store/selectors/flow/status';\nimport {getCluster} from '../../../../store/selectors/global';\nimport {getAttributes, getPath} from '../../../../store/selectors/navigation';\nimport {\n FLOW_VIEW_MODES,\n FlowViewMode,\n setFlowViewMode,\n} from '../../../../store/reducers/flow/filters';\nimport UIFactory from '../../../../UIFactory';\nimport {formatByParams} from '../../../../utils/format';\n\nimport {FlowLayout} from './FlowLayout/FlowLayout';\nimport {FlowDynamicSpec, FlowStaticSpec} from './PipelineSpec/PipelineSpec';\nimport './Flow.scss';\n\nconst block = cn('yt-navigation-flow');\n\nfunction useViewModeOptions() {\n const res = React.useMemo(() => {\n const {urlTemplate, component} = UIFactory.getMonitoringComponentForNavigationFlow() ?? {};\n const options =\n component || urlTemplate\n ? FLOW_VIEW_MODES\n : FLOW_VIEW_MODES.filter((item) => item !== 'monitoring');\n\n return options.map((value) => {\n return {value, content: format.ReadableField(value)};\n });\n }, []);\n return res;\n}\n\nexport function Flow() {\n const dispatch = useDispatch();\n const viewMode = useSelector(getFlowViewMode);\n\n const options = useViewModeOptions();\n\n return (\n <div className={block()}>\n <FlowState />\n <Flex className={block('toolbar')}>\n <RadioButton<FlowViewMode>\n options={options}\n value={viewMode}\n onUpdate={(value) => dispatch(setFlowViewMode(value))}\n />\n </Flex>\n <div className={block('content', {view: viewMode})}>\n <FlowContent viewMode={viewMode} />\n </div>\n </div>\n );\n}\n\nfunction FlowContent({viewMode}: {viewMode: FlowViewMode}) {\n const path = useSelector(getPath);\n\n if (!path) {\n return null;\n }\n\n switch (viewMode) {\n case 'static_spec':\n return <FlowStaticSpec pipeline_path={path} />;\n case 'dynamic_spec':\n return <FlowDynamicSpec pipeline_path={path} />;\n case 'monitoring':\n return <FlowMonitoring />;\n case 'workers':\n case 'computations':\n return <FlowLayout path={path} viewMode={viewMode} />;\n case 'graph':\n return (\n <Alert\n header={'Warning'}\n message={`'${viewMode}' view mode is not implemented yet`}\n />\n );\n default:\n return (\n <Alert\n header=\"Unexpected behaviour\"\n error={new Error(`'${viewMode}' view mode is not implemented`)}\n />\n );\n }\n}\n\nfunction FlowStatusToolbar() {\n const dispatch = useThunkDispatch();\n\n const pipeline_path = useSelector(getPath);\n\n const updateFn = React.useCallback(() => {\n return dispatch(loadFlowStatus(pipeline_path));\n }, [pipeline_path, dispatch]);\n\n useUpdater(updateFn);\n\n const {onStart, onStop, onPause} = React.useMemo(() => {\n return {\n onStart: () => dispatch(updateFlowState({pipeline_path, state: 'start'})),\n onStop: () => dispatch(updateFlowState({pipeline_path, state: 'stop'})),\n onPause: () => dispatch(updateFlowState({pipeline_path, state: 'pause'})),\n };\n }, [dispatch, pipeline_path]);\n\n return (\n <Flex className={block('status-toolbar')} alignItems=\"center\" gap={2}>\n <Button view=\"outlined\" onClick={onStart}>\n <Icon awesome=\"play-circle\" /> Start\n </Button>\n <Button view=\"outlined\" onClick={onPause}>\n <Icon awesome=\"pause-circle\" /> Pause\n </Button>\n <Button view=\"outlined\" onClick={onStop}>\n <Icon awesome=\"stop-circle\" /> Stop\n </Button>\n </Flex>\n );\n}\n\nfunction FlowState() {\n const value = useSelector(getFlowStatusData);\n const {leader_controller_address} = useSelector(getAttributes);\n return (\n <React.Fragment>\n <Flex className={block('state')} alignItems=\"center\" gap={2}>\n <Text variant=\"header-1\">Processing catalog </Text>\n <FlowStatusToolbar />\n </Flex>\n <MetaTable\n items={[\n [{key: 'status', value: <StatusLabel label={value} />}],\n [\n {\n key: 'leader_controller_address',\n value: (\n <>\n {leader_controller_address}\n <ClipboardButton\n view=\"flat-secondary\"\n text={leader_controller_address}\n inlineMargins\n />\n </>\n ),\n className: block('meta-item'),\n },\n ],\n ]}\n />\n </React.Fragment>\n );\n}\n\nfunction FlowMonitoring() {\n const {\n component: Component,\n title,\n urlTemplate,\n } = UIFactory.getMonitoringComponentForNavigationFlow() ?? {};\n const attributes = useSelector(getAttributes);\n const {monitoring_cluster, monitoring_project} = attributes;\n const cluster = useSelector(getCluster);\n\n if (Component) {\n return (\n <Component\n cluster={cluster}\n monitoring_cluster={monitoring_cluster}\n monitoring_project={monitoring_project}\n attributes={attributes}\n />\n );\n } else if (urlTemplate) {\n return (\n <Link\n target=\"_blank\"\n href={formatByParams(urlTemplate, {\n ytCluster: cluster,\n monitoring_cluster,\n monitoring_project,\n })}\n >\n {title || 'Monitoring'}\n </Link>\n );\n } else {\n return null;\n }\n}\n","const SvgChevronRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M5.47 13.03a.75.75 0 0 1 0-1.06L9.44 8 5.47 4.03a.75.75 0 0 1 1.06-1.06l4.5 4.5a.75.75 0 0 1 0 1.06l-4.5 4.5a.75.75 0 0 1-1.06 0\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronRight;"],"names":["props","_jsx","_objectSpread","xmlns","fill","viewBox","children","fillRule","d","clipRule","block","cn","ExpandButton","_ref","className","expanded","inline","toggleExpanded","all","showText","qa","titleExpanded","titleCollapsed","_jsxs","Button","view","title","onClick","Icon","data","doubleShevronRightSvg","shevronRightSvg","size","b","StatusLabel","label","renderPlaque","mappedState","_states","materializing","initializing","preparing","pending","starting","running","completing","failing","aborting","reviving","suspended","failed","completed","aborted","Unknown","Stopped","Paused","Working","Draining","Pausing","Completed","getViewState","icon","unknown","mods","state","awesome","hammer","format","getFlowStatusData","flow","status","getFlowStatusPipelinePath","pipeline_path","cancelHelper","CancelHelper","loadFlowStatus","dispatch","flowStatusActions","onRequest","ytApiV4","getPipelineState","parameters","cancellation","removeAllAndSave","then","onSuccess","error","isCancelled","onError","updateFlowState","getState","method","concat","getFlowViewMode","filters","flowViewMode","getFlowLayoutPipelinePath","layout","getFlowLayoutError","getFlowLayoutData","createSelector","expandedComputations","expandedWorkers","mode","handleExpandedNames","_data$execution_spec$","_data$execution_spec","execution_spec","value","_ref$jobs","jobs","partitions","map_","item","_ref3","_ref4","job","current_job_id","worker_address","worker","workers","name","computation_id","partition","getFlowLayoutPartitions","_data$execution_spec$2","_data$execution_spec2","_ref5","res","visitedWorkers","Set","forEach_","partition_id","push","add","address","has","getFlowLayoutWorkers","rows","expandedNames","Object","keys","groups","groupsByName","Map","forEach","_$value","rest","_objectWithoutProperties","_excluded","dst","get","$attributes","job_count","worker_count","partition_count","$value","set","_i","_groups","length","FlowLayout","path","viewMode","useDispatch","useSelector","getData","React","samePath","columns","type","isComputations","render","_ref2","content","row","_row$$attributes","_Fragment","hidden","flowLayoutActions","onExpandComputation","expandFlowLayoutComputation","onExpandWorker","expandFlowLayoutWorker","requestAnimationFrame","window","dispatchEvent","Event","ClipboardButton","text","inlineMargins","visibleOnRowHover","_row$partition","_row$partition2","level","_row$partition3","Number","width","_row$partition4","_row$partition5","_row$job","_row$job2","_ref6","_row$partition6","header","_ref7","ClickableAttributesButton","attributes","withTooltip","useFlowLayoutColumn","updateFn","getFlowView","annotate_with_types","loadFlowLayout","useUpdater","Boolean","ErrorBlock","DataTableYT","settings","DATA_TABLE_YT_SETTINGS","useThemeYT","getFlowStaticSpecData","staticSpec","getFlowStaticSpecPath","getFlowStaticSpecError","getFlowStaticSpecFirstLoading","_state$flow$staticSpe","loading","loaded","getFlowDynamicSpecData","dynamicSpec","getFlowDynamicSpecPath","getFlowDynamicSpecFirstLoading","_state$flow$dynamicSp","loadFlowStaticSpec","staticSpecActions","getPipelineSpec","loadFlowDynamicSpec","dynamicSpecActions","getPipelineDynamicSpec","PipelineSpec","onSave","_React$useState","_React$useState2","_slicedToArray","showEdit","setShowEdit","getFlowSpecYsonSettings","Yson","virtualized","folding","extraTools","YsonDownloadButton","pathToFileName","EditSpecDialog","visible","onSpecApply","spec","onClose","_React$useState3","_React$useState4","setError","JSON","stringify","YTDFDialog","initialValues","headerProps","onAdd","_asyncToGenerator","_regeneratorRuntime","_callee","f","_context","prev","next","undefined","values","parse","abrupt","sent","t0","Promise","reject","resolve","stop","_x","apply","arguments","fields","caption","fullWidth","extras","initialShowPreview","unipikaSettings","_toConsumableArray","makeErrorFields","FlowStaticSpec","useThunkDispatch","firstLoading","onEdit","newData","setPipelineSpec","expected_version","version","updateFlowStaticSpec","Loader","FlowDynamicSpec","setPipelineDynamicSpec","pipline_path","updateFlowDynamicSpec","Flow","options","_UIFactory$getMonitor","UIFactory","getMonitoringComponentForNavigationFlow","urlTemplate","component","FLOW_VIEW_MODES","filter","map","ReadableField","FlowState","Flex","RadioButton","onUpdate","setFlowViewMode","FlowContent","getPath","FlowMonitoring","Alert","message","Error","FlowStatusToolbar","_React$useMemo","onStart","onStop","onPause","alignItems","gap","leader_controller_address","getAttributes","Text","variant","MetaTable","items","key","_UIFactory$getMonitor2","Component","monitoring_cluster","monitoring_project","cluster","getCluster","Link","target","href","formatByParams","ytCluster"],"sourceRoot":""}
1
+ {"version":3,"file":"js/navigation-flow.6d67215a.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevrons-right.svg","webpack://@ytsaurus/ui/./src/ui/components/ExpandButton/ExpandButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/StatusLabel/StatusLabel.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/flow/status.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/flow/status.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/flow/filters.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/flow/layout.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/flow/layout.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Flow/FlowLayout/FlowLayout.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/flow/specs.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/flow/specs.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Flow/PipelineSpec/PipelineSpec.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Flow/Flow.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevron-right.svg"],"sourcesContent":["const SvgChevronsRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M3.47 10.97a.75.75 0 1 0 1.06 1.06l3.5-3.5a.75.75 0 0 0 0-1.06l-3.5-3.5a.75.75 0 0 0-1.06 1.06L6.44 8zm5 0a.75.75 0 1 0 1.06 1.06l3.5-3.5a.75.75 0 0 0 0-1.06l-3.5-3.5a.75.75 0 0 0-1.06 1.06L11.44 8z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronsRight;","import React, {FC} from 'react';\nimport {Button, ButtonProps, Icon} from '@gravity-ui/uikit';\nimport shevronRightSvg from '@gravity-ui/icons/svgs/chevron-right.svg';\nimport doubleShevronRightSvg from '@gravity-ui/icons/svgs/chevrons-right.svg';\nimport cn from 'bem-cn-lite';\nimport './ExpandButton.scss';\n\nconst block = cn('yt-expanded-button');\n\ntype Props = {\n className?: string;\n expanded: boolean;\n toggleExpanded: () => void;\n inline?: boolean;\n all?: boolean;\n showText?: boolean;\n qa?: ButtonProps['qa'];\n};\n\nexport const ExpandButton: FC<Props> = ({\n className,\n expanded,\n inline,\n toggleExpanded,\n all,\n showText,\n qa,\n}) => {\n const titleExpanded = all ? 'Collapse All' : 'Collapse';\n const titleCollapsed = all ? 'Expand All' : 'Expand';\n return (\n <Button\n className={block({inline}, className)}\n view=\"flat-secondary\"\n title={expanded ? titleExpanded : titleCollapsed}\n onClick={toggleExpanded}\n qa={qa}\n >\n {showText && (expanded ? titleExpanded : titleCollapsed) + ' '}\n <Icon\n className={block('expand', {expanded})}\n data={all ? doubleShevronRightSvg : shevronRightSvg}\n size={16}\n />\n </Button>\n );\n};\n","import React from 'react';\nimport block from 'bem-cn-lite';\n\nimport hammer from '../../common/hammer';\nimport Icon, {IconName} from '../Icon/Icon';\n\nimport './StatusLabel.scss';\n\nfunction getViewState(label?: StatusLabelProps['label']): ViewState {\n const states: Record<Exclude<typeof label, undefined>, ViewState> = {\n // preparing states\n materializing: 'preparing',\n initializing: 'preparing',\n preparing: 'preparing',\n pending: 'preparing',\n starting: 'preparing',\n\n // running states\n running: 'running',\n completing: 'running',\n failing: 'running',\n aborting: 'running',\n reviving: 'running',\n suspended: 'suspended',\n\n // final states\n failed: 'failed',\n completed: 'completed',\n aborted: 'aborted',\n\n // NavigationFlowState\n Unknown: 'unknown',\n Stopped: 'suspended',\n Paused: 'suspended',\n Working: 'running',\n Draining: 'running',\n Pausing: 'running',\n Completed: 'completed',\n };\n\n return states[label!] ?? 'unknown';\n}\n\n// see https://github.com/ytsaurus/ytsaurus/blob/4ff6c0d/yt/yt/flow/lib/client/public.h#L20-L28\nexport type NavigationFlowState =\n | 'Unknown'\n | 'Stopped'\n | 'Paused'\n | 'Working'\n | 'Draining'\n | 'Pausing'\n | 'Completed';\n\nexport type StatusLabelState =\n | 'aborted'\n | 'aborting'\n | 'completed'\n | 'completing'\n | 'failed'\n | 'failing'\n | 'initializing'\n | 'materializing'\n | 'pending'\n | 'preparing'\n | 'reviving'\n | 'running'\n | 'starting'\n | 'suspended'\n | 'running';\n\ntype ViewState =\n | 'preparing'\n | 'running'\n | 'failed'\n | 'aborted'\n | 'completed'\n | 'suspended'\n | 'unknown';\n\nfunction getIcon(state: ViewState) {\n const iconsByViewState: Record<ViewState, IconName> = {\n preparing: 'clock',\n running: 'play-circle',\n suspended: 'pause-circle',\n failed: 'times-circle',\n completed: 'check-circle',\n aborted: 'times-circle',\n unknown: 'question-circle',\n };\n return iconsByViewState[state];\n}\n\nconst b = block('status-label');\n\nexport type StatusLabelProps = {\n className?: string;\n label?: StatusLabelState | NavigationFlowState;\n renderPlaque?: boolean;\n};\n\nexport default function StatusLabel({className, label, renderPlaque}: StatusLabelProps) {\n const mappedState = getViewState(label);\n const icon = getIcon(mappedState);\n const mods = {state: mappedState};\n\n return !label ? (\n <span />\n ) : (\n <span className={b(null, renderPlaque ? b('plaque', mods, className) : b(mods, className))}>\n <Icon awesome={icon} />\n <span>{hammer.format['ReadableField'](label)}</span>\n </span>\n );\n}\n","import {RootState} from '../../reducers';\n\nexport const getFlowStatusData = (state: RootState) => state.flow.status.data;\nexport const getFlowStatusPipelinePath = (state: RootState) => state.flow.status.pipeline_path;\nexport const getFlowStatusError = (state: RootState) => state.flow.status.error;\n","import {ThunkAction} from 'redux-thunk';\n\nimport {ytApiV4} from '../../../rum/rum-wrap-api';\nimport {RootState} from '../../../store/reducers';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {getFlowStatusPipelinePath} from '../../../store/selectors/flow/status';\nimport {flowStatusActions} from '../../reducers/flow/status';\n\ntype AsyncAction<R = void> = ThunkAction<R, RootState, unknown, any>;\n\nconst cancelHelper = new CancelHelper();\n\nexport function loadFlowStatus(pipeline_path: string): AsyncAction<Promise<void>> {\n return (dispatch) => {\n dispatch(flowStatusActions.onRequest({pipeline_path}));\n\n return ytApiV4\n .getPipelineState({\n parameters: {pipeline_path},\n cancellation: cancelHelper.removeAllAndSave,\n })\n .then(\n (data) => {\n dispatch(flowStatusActions.onSuccess({data}));\n },\n (error) => {\n if (!isCancelled(error)) {\n dispatch(flowStatusActions.onError({error}));\n }\n },\n );\n };\n}\n\nexport function updateFlowState({\n pipeline_path,\n state,\n}: {\n pipeline_path: string;\n state: 'start' | 'stop' | 'pause';\n}): AsyncAction<Promise<void>> {\n return (dispatch, getState) => {\n const method = `${state}Pipeline` as const;\n return ytApiV4[method]({pipeline_path}).then(() => {\n const path = getFlowStatusPipelinePath(getState());\n if (path === pipeline_path) {\n dispatch(loadFlowStatus(pipeline_path));\n }\n });\n };\n}\n","import {RootState} from '../../../store/reducers';\n\nexport const getFlowViewMode = (state: RootState) => state.flow.filters.flowViewMode;\n","import {ThunkAction} from 'redux-thunk';\n\nimport {ytApiV4} from '../../../rum/rum-wrap-api';\nimport {RootState} from '../../../store/reducers';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {flowLayoutActions} from '../../../store/reducers/flow/layout';\n\ntype AsyncAction<R = void> = ThunkAction<R, RootState, unknown, any>;\n\nconst cancelHelper = new CancelHelper();\n\nexport function loadFlowLayout(pipeline_path: string): AsyncAction<Promise<void>> {\n return (dispatch) => {\n dispatch(flowLayoutActions.onRequest({pipeline_path}));\n\n return ytApiV4\n .getFlowView({\n parameters: {pipeline_path, ...{annotate_with_types: true}},\n cancellation: cancelHelper.removeAllAndSave,\n })\n .then(\n (data) => {\n dispatch(flowLayoutActions.onSuccess({data}));\n },\n (error) => {\n if (!isCancelled(error)) {\n dispatch(flowLayoutActions.onError({error}));\n }\n },\n );\n };\n}\n\nexport function expandFlowLayoutComputation({\n computation_id,\n}: {\n computation_id: string;\n}): AsyncAction<void> {\n return (dispatch) => {\n dispatch(flowLayoutActions.onExpandComputation({computation_id}));\n };\n}\n\nexport function expandFlowLayoutWorker({\n worker_address,\n}: {\n worker_address: string;\n}): AsyncAction<void> {\n return (dispatch) => {\n dispatch(flowLayoutActions.onExpandWorker({worker_address}));\n };\n}\n","import {createSelector} from 'reselect';\nimport map_ from 'lodash/map';\nimport forEach_ from 'lodash/forEach';\n\nimport {RootState} from '../../../store/reducers';\n\nexport const getFlowLayoutPipelinePath = (state: RootState) => state.flow.layout.pipeline_path;\nexport const getFlowLayoutError = (state: RootState) => state.flow.layout.error;\nconst getFlowLayoutExpandedComputations = (state: RootState) =>\n state.flow.layout.expandedComputations;\nconst getFlowLayoutExpandedWorkers = (state: RootState) => state.flow.layout.expandedWorkers;\n\nconst getFlowLayoutRawData = (state: RootState) => state.flow.layout.data;\n\ntype RowData = Pick<\n ReturnType<typeof getFlowLayoutPartitions>[number],\n 'job' | 'partition' | 'worker'\n>;\ntype LayoutExpandable = {\n $value: Array<Exclude<FlowLayoutDataItem, LayoutExpandable>>;\n $attributes: {\n name: string;\n expanded: boolean;\n job_count: number;\n worker_count: number;\n partition_count: number;\n };\n};\n\nexport type FlowLayoutDataItem = {[K in keyof RowData]: RowData[K] | null} | LayoutExpandable;\n\nexport const getFlowLayoutData = createSelector(\n [getFlowLayoutRawData, getFlowLayoutExpandedComputations, getFlowLayoutExpandedWorkers],\n (data, expandedComputations, expandedWorkers) => {\n return (mode: 'computations' | 'workers') => {\n return mode === 'computations'\n ? handleExpandedNames(getFlowLayoutPartitions(data), expandedComputations)\n : handleExpandedNames(getFlowLayoutWorkers(data), expandedWorkers);\n };\n },\n);\n\nfunction getFlowLayoutPartitions(data: ReturnType<typeof getFlowLayoutRawData>) {\n const {jobs = {}, partitions} = data?.execution_spec?.layout?.value ?? {};\n return map_(partitions, (item) => {\n const job = jobs[item.current_job_id!];\n const {worker_address} = job ?? {};\n const worker = data?.workers[worker_address];\n return {\n name: item.computation_id,\n partition: (item as typeof item | undefined) ?? null,\n job: (job as typeof job | undefined) ?? null,\n worker: worker ?? null,\n };\n });\n}\n\nfunction getFlowLayoutWorkers(data: ReturnType<typeof getFlowLayoutRawData>) {\n const {jobs, partitions} = data?.execution_spec?.layout?.value ?? {};\n\n const res: ReturnType<typeof getFlowLayoutPartitions> = [];\n const visitedWorkers = new Set<string>();\n\n forEach_(jobs, (job) => {\n const {worker_address, partition_id} = job;\n const partition = partitions?.[partition_id];\n const worker = data?.workers[worker_address];\n res.push({\n name: worker_address,\n partition: partition ?? null,\n job: job ?? null,\n worker: worker ?? null,\n });\n\n visitedWorkers.add(worker_address);\n });\n forEach_(data?.workers, (item) => {\n const {address} = item;\n if (!visitedWorkers.has(address)) {\n res.push({name: address, partition: null, job: null, worker: null});\n }\n });\n\n return res;\n}\n\nfunction handleExpandedNames(\n rows: Array<RowData & {name: string}>,\n expandedNames: Record<string, true>,\n) {\n const expanded = new Set(Object.keys(expandedNames));\n const groups: Array<LayoutExpandable> = [];\n const groupsByName = new Map<string, LayoutExpandable>();\n rows.forEach((item) => {\n const {name, ...rest} = item;\n let dst = groupsByName.get(name);\n if (!dst) {\n dst = {\n $attributes: {\n name: name,\n expanded: expanded.has(name),\n job_count: 0,\n worker_count: 0,\n partition_count: 0,\n },\n $value: [],\n };\n groupsByName.set(name, dst!);\n groups.push(dst!);\n }\n if (item.job) {\n ++dst!.$attributes.job_count;\n }\n if (item.worker) {\n ++dst!.$attributes.worker_count;\n }\n if (item.partition) {\n ++dst!.$attributes.partition_count;\n }\n dst!.$value?.push(rest);\n });\n\n if (!expanded.size) {\n return groups;\n }\n\n let res: Array<FlowLayoutDataItem> = [];\n for (const item of groups) {\n const {name} = item.$attributes;\n if (expanded.has(name)) {\n res = res.concat(item, item.$value);\n } else {\n res.push(item);\n }\n }\n\n return res;\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 format from '../../../../../common/hammer/format';\n\nimport ClickableAttributesButton from '../../../../../components/AttributesButton/ClickableAttributesButton';\nimport ClipboardButton from '../../../../../components/ClipboardButton/ClipboardButton';\nimport DataTableYT, {\n DATA_TABLE_YT_SETTINGS,\n} from '../../../../../components/DataTableYT/DataTableYT';\nimport ErrorBlock from '../../../../../components/Error/Error';\nimport {ExpandButton} from '../../../../../components/ExpandButton';\n\nimport {useUpdater} from '../../../../../hooks/use-updater';\nimport {\n expandFlowLayoutComputation,\n expandFlowLayoutWorker,\n loadFlowLayout,\n} from '../../../../../store/actions/flow/layout';\nimport {\n FlowLayoutDataItem,\n getFlowLayoutData,\n getFlowLayoutError,\n getFlowLayoutPipelinePath,\n} from '../../../../../store/selectors/flow/layout';\n\nimport './FlowLayout.scss';\n\nconst block = cn('yt-navigation-flow-layout');\n\nexport function FlowLayout({path, viewMode}: {path: string; viewMode: 'computations' | 'workers'}) {\n const dispatch = useDispatch();\n\n const pipeline_path = useSelector(getFlowLayoutPipelinePath);\n const error = useSelector(getFlowLayoutError);\n const getData = useSelector(getFlowLayoutData);\n\n const data = React.useMemo(() => {\n return getData(viewMode);\n }, [viewMode, getData]);\n\n const samePath = path === pipeline_path;\n const columns = useFlowLayoutColumn(viewMode);\n\n const updateFn = React.useCallback(() => {\n dispatch(loadFlowLayout(path));\n }, [path, dispatch]);\n useUpdater(updateFn);\n\n if (!samePath) {\n return null;\n }\n\n return (\n <div className={block()}>\n {Boolean(error) && <ErrorBlock error={error} />}\n <DataTableYT\n settings={DATA_TABLE_YT_SETTINGS}\n columns={columns}\n data={data}\n useThemeYT\n />\n </div>\n );\n}\n\nfunction useFlowLayoutColumn(type: 'computations' | 'workers') {\n const dispatch = useDispatch();\n\n const res = React.useMemo(() => {\n const isComputations = type === 'computations';\n const columns: Array<Column<FlowLayoutDataItem>> = [\n {\n name: isComputations\n ? 'Computation / Partition Id'\n : 'Worker address / Partition Id',\n className: block('td-name'),\n render({row}) {\n let content;\n if ('$attributes' in row) {\n const {\n $attributes: {name, expanded},\n } = row;\n content = (\n <>\n <ExpandButton\n className={block('expand', {hidden: row.$value.length === 0})}\n expanded={expanded}\n toggleExpanded={() => {\n dispatch(\n isComputations\n ? expandFlowLayoutComputation({\n computation_id: name,\n })\n : expandFlowLayoutWorker({worker_address: name}),\n );\n requestAnimationFrame(() => {\n window.dispatchEvent(new Event('resize'));\n });\n }}\n />\n <span className={block('name-title')}>\n {name}{' '}\n <ClipboardButton\n view=\"flat-secondary\"\n text={name}\n inlineMargins\n visibleOnRowHover\n />\n </span>\n </>\n );\n } else {\n content = (\n <span className={block('name-title', {level: '1'})}>\n {row.partition?.partition_id}\n <ClipboardButton\n view=\"flat-secondary\"\n text={row.partition?.partition_id}\n inlineMargins\n visibleOnRowHover\n />\n </span>\n );\n }\n return <div className={block('name')}>{content}</div>;\n },\n },\n {\n name: 'Partition state',\n render({row}) {\n return 'partition' in row\n ? row.partition?.state\n : format.Number(row.$value.length);\n },\n width: 120,\n },\n {\n name: 'Job Id',\n render({row}) {\n return 'partition' in row ? (\n <>\n {row.partition?.current_job_id}{' '}\n <ClipboardButton\n view=\"flat-secondary\"\n text={row.partition?.current_job_id}\n inlineMargins\n visibleOnRowHover\n />\n </>\n ) : (\n format.Number(row.$attributes.job_count)\n );\n },\n width: 400,\n },\n isComputations\n ? {\n name: 'Worker address',\n render({row}) {\n return 'job' in row ? (\n <>\n {row.job?.worker_address}\n <ClipboardButton\n view=\"flat-secondary\"\n text={row.job?.worker_address}\n inlineMargins\n visibleOnRowHover\n />\n </>\n ) : (\n format.Number(row.$attributes.worker_count)\n );\n },\n width: 400,\n }\n : {\n name: 'Computation',\n render({row}) {\n return 'partition' in row\n ? row.partition?.computation_id\n : format.Number(row.$attributes.partition_count);\n },\n width: 400,\n },\n {\n name: 'actions',\n header: null,\n render({row}) {\n return (\n <ClickableAttributesButton\n className={block('show-attributes')}\n title={'Details'}\n attributes={row}\n withTooltip={false}\n />\n );\n },\n width: 50,\n },\n ];\n return columns;\n }, [type]);\n return res;\n}\n","import {RootState} from '../../../store/reducers';\n\nexport const getFlowStaticSpecData = (state: RootState) => state.flow.staticSpec.data;\nexport const getFlowStaticSpecPath = (state: RootState) => state.flow.staticSpec.pipeline_path;\nexport const getFlowStaticSpecError = (state: RootState) => state.flow.staticSpec.error;\nexport const getFlowStaticSpecFirstLoading = (state: RootState) => {\n const {loading, loaded} = state.flow.staticSpec;\n return !loaded && loading;\n};\n\nexport const getFlowDynamicSpecData = (state: RootState) => state.flow.dynamicSpec.data;\nexport const getFlowDynamicSpecPath = (state: RootState) => state.flow.dynamicSpec.pipeline_path;\nexport const getFlowDynamicSpecError = (state: RootState) => state.flow.dynamicSpec.error;\nexport const getFlowDynamicSpecFirstLoading = (state: RootState) => {\n const {loading, loaded} = state.flow.dynamicSpec;\n return !loaded && loading;\n};\n","import {ThunkAction} from 'redux-thunk';\n\nimport {ytApiV4} from '../../../rum/rum-wrap-api';\nimport {RootState} from '../../../store/reducers';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {\n FlowSpecState,\n dynamicSpecActions,\n staticSpecActions,\n} from '../../../store/reducers/flow/specs';\nimport {getFlowDynamicSpecPath, getFlowStaticSpecPath} from '../../../store/selectors/flow/specs';\n\nconst cancelHelper = new CancelHelper();\n\ntype AsyncAction<R = void> = ThunkAction<R, RootState, unknown, any>;\n\nexport function loadFlowStaticSpec(pipeline_path: string): AsyncAction {\n return (dispatch) => {\n dispatch(staticSpecActions.onRequest({pipeline_path}));\n return ytApiV4\n .getPipelineSpec({\n parameters: {pipeline_path},\n cancellation: cancelHelper.removeAllAndSave,\n })\n .then(\n (data: FlowSpecState['data']) => {\n dispatch(staticSpecActions.onSuccess({data}));\n },\n (error: any) => {\n if (!isCancelled(error)) {\n dispatch(staticSpecActions.onError({error}));\n }\n },\n );\n };\n}\n\nexport function updateFlowStaticSpec({\n data,\n path,\n}: {\n data: FlowSpecState['data'];\n path: string;\n}): AsyncAction<Promise<void>> {\n return (dispatch, getState) => {\n return ytApiV4\n .setPipelineSpec({pipeline_path: path, expected_version: data?.version}, data?.spec)\n .then(() => {\n const pipeline_path = getFlowStaticSpecPath(getState());\n if (pipeline_path && pipeline_path === path) {\n dispatch(loadFlowStaticSpec(path));\n }\n });\n };\n}\n\nexport function loadFlowDynamicSpec(pipeline_path: string): AsyncAction {\n return (dispatch) => {\n dispatch(dynamicSpecActions.onRequest({pipeline_path}));\n return ytApiV4\n .getPipelineDynamicSpec({\n parameters: {pipeline_path},\n cancellation: cancelHelper.removeAllAndSave,\n })\n .then(\n (data: FlowSpecState['data']) => {\n dispatch(dynamicSpecActions.onSuccess({data}));\n },\n (error: any) => {\n if (!isCancelled(error)) {\n dispatch(dynamicSpecActions.onError({error}));\n }\n },\n );\n };\n}\n\nexport function updateFlowDynamicSpec({\n data,\n path,\n}: {\n data: FlowSpecState['data'];\n path: string;\n}): AsyncAction<Promise<void>> {\n return (dispatch, getState) => {\n return ytApiV4\n .setPipelineDynamicSpec(\n {pipeline_path: path, expected_version: data?.version},\n data?.spec,\n )\n .then(() => {\n const pipline_path = getFlowDynamicSpecPath(getState());\n if (path === pipline_path) {\n dispatch(loadFlowDynamicSpec(path));\n }\n });\n };\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport {Button} from '@gravity-ui/uikit';\n\nimport {YTError} from '../../../../../../@types/types';\n\nimport {useUpdater} from '../../../../../hooks/use-updater';\n\nimport {useThunkDispatch} from '../../../../../store/thunkDispatch';\nimport {\n loadFlowDynamicSpec,\n loadFlowStaticSpec,\n updateFlowDynamicSpec,\n updateFlowStaticSpec,\n} from '../../../../../store/actions/flow/specs';\nimport {\n getFlowDynamicSpecData,\n getFlowDynamicSpecFirstLoading,\n getFlowStaticSpecData,\n getFlowStaticSpecError,\n getFlowStaticSpecFirstLoading,\n} from '../../../../../store/selectors/flow/specs';\nimport {getFlowSpecYsonSettings} from '../../../../../store/selectors/thor/unipika';\nimport {FlowSpecState} from '../../../../../store/reducers/flow/specs';\n\nimport Yson from '../../../../../components/Yson/Yson';\nimport Icon from '../../../../../components/Icon/Icon';\nimport {YTDFDialog, makeErrorFields} from '../../../../../components/Dialog';\nimport ErrorBlock from '../../../../../components/Block/Block';\nimport Loader from '../../../../../components/Loader/Loader';\nimport {UnipikaSettings} from '../../../../../components/Yson/StructuredYson/StructuredYsonTypes';\n\nimport './PipelineSpec.scss';\nimport {YsonDownloadButton} from '../../../../../components/DownloadAttributesButton';\nimport {pathToFileName} from '../../../helpers/pathToFileName';\n\nconst block = cn('yt-pipeline-spec');\n\ntype PipelineSpecProps = {\n path: string;\n error: YTError | undefined;\n data: FlowSpecState['data'];\n name: string;\n onSave: (data: PipelineSpecProps['data']) => Promise<void>;\n};\n\nfunction PipelineSpec({path, data, error, name, onSave}: PipelineSpecProps) {\n const [showEdit, setShowEdit] = React.useState(false);\n\n const settings = useSelector(getFlowSpecYsonSettings);\n\n return (\n <React.Fragment>\n {Boolean(error) && <ErrorBlock error={error} />}\n <Yson\n value={data}\n settings={settings}\n virtualized\n folding\n extraTools={\n <React.Fragment>\n <YsonDownloadButton\n value={data}\n settings={settings}\n name={`pipeline_spec_${pathToFileName(path)}`}\n />\n <Button view=\"outlined\" onClick={() => setShowEdit(true)}>\n <Icon awesome=\"pencil\" />\n Edit {name}\n </Button>\n </React.Fragment>\n }\n />\n <EditSpecDialog\n path={path}\n name={name}\n visible={showEdit}\n onSpecApply={(spec) => onSave({...data!, spec})}\n onClose={() => setShowEdit(false)}\n spec={data?.spec}\n settings={settings}\n />\n </React.Fragment>\n );\n}\n\ntype FormValues = {\n text: {value?: string};\n path: string;\n};\n\nfunction EditSpecDialog({\n path,\n visible,\n spec,\n onClose,\n onSpecApply,\n name,\n settings,\n}: Pick<PipelineSpecProps, 'name' | 'path'> & {\n spec?: unknown;\n visible: boolean;\n onClose: () => void;\n settings: UnipikaSettings;\n onSpecApply: (spec: unknown) => Promise<void>;\n}) {\n const [error, setError] = React.useState<YTError | undefined>();\n\n const text = React.useMemo(() => {\n return {value: JSON.stringify(spec, null, 4)};\n }, [spec]);\n\n return (\n visible && (\n <YTDFDialog<FormValues>\n visible\n size=\"l\"\n onClose={onClose}\n initialValues={{text, path}}\n headerProps={{\n title: `Edit ${name}`,\n }}\n onAdd={async (f) => {\n setError(undefined);\n const {text} = f.getState().values;\n if (text.value) {\n try {\n return await onSpecApply(JSON.parse(text.value));\n } catch (e: any) {\n setError(e);\n return Promise.reject(e);\n }\n } else {\n return Promise.resolve();\n }\n }}\n fields={[\n {\n caption: 'Pipeline path',\n name: 'path',\n type: 'plain',\n },\n {\n name: 'text',\n caption: 'Specification',\n type: 'json',\n fullWidth: true,\n extras: {\n className: block('editor'),\n initialShowPreview: false,\n unipikaSettings: settings,\n },\n },\n ...makeErrorFields([error]),\n ]}\n />\n )\n );\n}\n\nexport function FlowStaticSpec({pipeline_path: path}: {pipeline_path: string}) {\n const dispatch = useThunkDispatch();\n\n const data = useSelector(getFlowStaticSpecData);\n const error = useSelector(getFlowStaticSpecError);\n const firstLoading = useSelector(getFlowStaticSpecFirstLoading);\n\n const updateFn = React.useCallback(() => {\n dispatch(loadFlowStaticSpec(path));\n }, [dispatch, path]);\n useUpdater(updateFn);\n\n const onEdit = React.useCallback(\n (newData: typeof data) => {\n return dispatch(updateFlowStaticSpec({path, data: newData}));\n },\n [path, dispatch],\n );\n\n return firstLoading ? (\n <Loader />\n ) : (\n <PipelineSpec\n path={path}\n data={data}\n error={error}\n name=\"static specification\"\n onSave={onEdit}\n />\n );\n}\n\nexport function FlowDynamicSpec({pipeline_path: path}: {pipeline_path: string}) {\n const dispatch = useThunkDispatch();\n\n const data = useSelector(getFlowDynamicSpecData);\n const error = useSelector(getFlowStaticSpecError);\n const firstLoading = useSelector(getFlowDynamicSpecFirstLoading);\n\n const updateFn = React.useCallback(() => {\n dispatch(loadFlowDynamicSpec(path));\n }, [dispatch, path]);\n useUpdater(updateFn);\n\n const onEdit = React.useCallback(\n (newData: typeof data) => {\n return dispatch(updateFlowDynamicSpec({path, data: newData}));\n },\n [path, dispatch],\n );\n\n return firstLoading ? (\n <Loader />\n ) : (\n <PipelineSpec\n path={path}\n data={data}\n error={error}\n name=\"dynamic specification\"\n onSave={onEdit}\n />\n );\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport {Button, Flex, Link, RadioButton, Text} from '@gravity-ui/uikit';\n\nimport Alert from '../../../../components/Alert/Alert';\nimport ClipboardButton from '../../../../components/ClipboardButton/ClipboardButton';\nimport format from '../../../../common/hammer/format';\nimport Icon from '../../../../components/Icon/Icon';\nimport MetaTable from '../../../../components/MetaTable/MetaTable';\nimport StatusLabel from '../../../../components/StatusLabel/StatusLabel';\nimport {useUpdater} from '../../../../hooks/use-updater';\nimport {useThunkDispatch} from '../../../../store/thunkDispatch';\nimport {loadFlowStatus, updateFlowState} from '../../../../store/actions/flow/status';\nimport {getFlowViewMode} from '../../../../store/selectors/flow/filters';\nimport {getFlowStatusData} from '../../../../store/selectors/flow/status';\nimport {getCluster} from '../../../../store/selectors/global';\nimport {getAttributes, getPath} from '../../../../store/selectors/navigation';\nimport {\n FLOW_VIEW_MODES,\n FlowViewMode,\n setFlowViewMode,\n} from '../../../../store/reducers/flow/filters';\nimport UIFactory from '../../../../UIFactory';\nimport {formatByParams} from '../../../../utils/format';\n\nimport {FlowLayout} from './FlowLayout/FlowLayout';\nimport {FlowDynamicSpec, FlowStaticSpec} from './PipelineSpec/PipelineSpec';\nimport './Flow.scss';\n\nconst block = cn('yt-navigation-flow');\n\nfunction useViewModeOptions() {\n const res = React.useMemo(() => {\n const {urlTemplate, component} = UIFactory.getMonitoringComponentForNavigationFlow() ?? {};\n const options =\n component || urlTemplate\n ? FLOW_VIEW_MODES\n : FLOW_VIEW_MODES.filter((item) => item !== 'monitoring');\n\n return options.map((value) => {\n return {value, content: format.ReadableField(value)};\n });\n }, []);\n return res;\n}\n\nexport function Flow() {\n const dispatch = useDispatch();\n const viewMode = useSelector(getFlowViewMode);\n\n const options = useViewModeOptions();\n\n return (\n <div className={block()}>\n <FlowState />\n <Flex className={block('toolbar')}>\n <RadioButton<FlowViewMode>\n options={options}\n value={viewMode}\n onUpdate={(value) => dispatch(setFlowViewMode(value))}\n />\n </Flex>\n <div className={block('content', {view: viewMode})}>\n <FlowContent viewMode={viewMode} />\n </div>\n </div>\n );\n}\n\nfunction FlowContent({viewMode}: {viewMode: FlowViewMode}) {\n const path = useSelector(getPath);\n\n if (!path) {\n return null;\n }\n\n switch (viewMode) {\n case 'static_spec':\n return <FlowStaticSpec pipeline_path={path} />;\n case 'dynamic_spec':\n return <FlowDynamicSpec pipeline_path={path} />;\n case 'monitoring':\n return <FlowMonitoring />;\n case 'workers':\n case 'computations':\n return <FlowLayout path={path} viewMode={viewMode} />;\n case 'graph':\n return (\n <Alert\n header={'Warning'}\n message={`'${viewMode}' view mode is not implemented yet`}\n />\n );\n default:\n return (\n <Alert\n header=\"Unexpected behaviour\"\n error={new Error(`'${viewMode}' view mode is not implemented`)}\n />\n );\n }\n}\n\nfunction FlowStatusToolbar() {\n const dispatch = useThunkDispatch();\n\n const pipeline_path = useSelector(getPath);\n\n const updateFn = React.useCallback(() => {\n return dispatch(loadFlowStatus(pipeline_path));\n }, [pipeline_path, dispatch]);\n\n useUpdater(updateFn);\n\n const {onStart, onStop, onPause} = React.useMemo(() => {\n return {\n onStart: () => dispatch(updateFlowState({pipeline_path, state: 'start'})),\n onStop: () => dispatch(updateFlowState({pipeline_path, state: 'stop'})),\n onPause: () => dispatch(updateFlowState({pipeline_path, state: 'pause'})),\n };\n }, [dispatch, pipeline_path]);\n\n return (\n <Flex className={block('status-toolbar')} alignItems=\"center\" gap={2}>\n <Button view=\"outlined\" onClick={onStart}>\n <Icon awesome=\"play-circle\" /> Start\n </Button>\n <Button view=\"outlined\" onClick={onPause}>\n <Icon awesome=\"pause-circle\" /> Pause\n </Button>\n <Button view=\"outlined\" onClick={onStop}>\n <Icon awesome=\"stop-circle\" /> Stop\n </Button>\n </Flex>\n );\n}\n\nfunction FlowState() {\n const value = useSelector(getFlowStatusData);\n const {leader_controller_address} = useSelector(getAttributes);\n return (\n <React.Fragment>\n <Flex className={block('state')} alignItems=\"center\" gap={2}>\n <Text variant=\"header-1\">Processing catalog </Text>\n <FlowStatusToolbar />\n </Flex>\n <MetaTable\n items={[\n [{key: 'status', value: <StatusLabel label={value} />}],\n [\n {\n key: 'leader_controller_address',\n value: (\n <>\n {leader_controller_address}\n <ClipboardButton\n view=\"flat-secondary\"\n text={leader_controller_address}\n inlineMargins\n />\n </>\n ),\n className: block('meta-item'),\n },\n ],\n ]}\n />\n </React.Fragment>\n );\n}\n\nfunction FlowMonitoring() {\n const {\n component: Component,\n title,\n urlTemplate,\n } = UIFactory.getMonitoringComponentForNavigationFlow() ?? {};\n const attributes = useSelector(getAttributes);\n const {monitoring_cluster, monitoring_project} = attributes;\n const cluster = useSelector(getCluster);\n\n if (Component) {\n return (\n <Component\n cluster={cluster}\n monitoring_cluster={monitoring_cluster}\n monitoring_project={monitoring_project}\n attributes={attributes}\n />\n );\n } else if (urlTemplate) {\n return (\n <Link\n target=\"_blank\"\n href={formatByParams(urlTemplate, {\n ytCluster: cluster,\n monitoring_cluster,\n monitoring_project,\n })}\n >\n {title || 'Monitoring'}\n </Link>\n );\n } else {\n return null;\n }\n}\n","const SvgChevronRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M5.47 13.03a.75.75 0 0 1 0-1.06L9.44 8 5.47 4.03a.75.75 0 0 1 1.06-1.06l4.5 4.5a.75.75 0 0 1 0 1.06l-4.5 4.5a.75.75 0 0 1-1.06 0\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronRight;"],"names":["props","_jsx","_objectSpread","xmlns","fill","viewBox","children","fillRule","d","clipRule","block","cn","ExpandButton","_ref","className","expanded","inline","toggleExpanded","all","showText","qa","titleExpanded","titleCollapsed","_jsxs","Button","view","title","onClick","Icon","data","doubleShevronRightSvg","shevronRightSvg","size","b","StatusLabel","label","renderPlaque","mappedState","_states","materializing","initializing","preparing","pending","starting","running","completing","failing","aborting","reviving","suspended","failed","completed","aborted","Unknown","Stopped","Paused","Working","Draining","Pausing","Completed","getViewState","icon","unknown","mods","state","awesome","hammer","format","getFlowStatusData","flow","status","getFlowStatusPipelinePath","pipeline_path","cancelHelper","CancelHelper","loadFlowStatus","dispatch","flowStatusActions","onRequest","ytApiV4","getPipelineState","parameters","cancellation","removeAllAndSave","then","onSuccess","error","isCancelled","onError","updateFlowState","getState","method","concat","getFlowViewMode","filters","flowViewMode","getFlowLayoutPipelinePath","layout","getFlowLayoutError","getFlowLayoutData","createSelector","expandedComputations","expandedWorkers","mode","handleExpandedNames","_data$execution_spec$","_data$execution_spec","execution_spec","value","_ref$jobs","jobs","partitions","map_","item","_ref3","_ref4","job","current_job_id","worker_address","worker","workers","name","computation_id","partition","getFlowLayoutPartitions","_data$execution_spec$2","_data$execution_spec2","_ref5","res","visitedWorkers","Set","forEach_","partition_id","push","add","address","has","getFlowLayoutWorkers","rows","expandedNames","Object","keys","groups","groupsByName","Map","forEach","_$value","rest","_objectWithoutProperties","_excluded","dst","get","$attributes","job_count","worker_count","partition_count","$value","set","_i","_groups","length","FlowLayout","path","viewMode","useDispatch","useSelector","getData","React","samePath","columns","type","isComputations","render","_ref2","content","row","_row$$attributes","_Fragment","hidden","flowLayoutActions","onExpandComputation","expandFlowLayoutComputation","onExpandWorker","expandFlowLayoutWorker","requestAnimationFrame","window","dispatchEvent","Event","ClipboardButton","text","inlineMargins","visibleOnRowHover","_row$partition","_row$partition2","level","_row$partition3","Number","width","_row$partition4","_row$partition5","_row$job","_row$job2","_ref6","_row$partition6","header","_ref7","ClickableAttributesButton","attributes","withTooltip","useFlowLayoutColumn","updateFn","getFlowView","annotate_with_types","loadFlowLayout","useUpdater","Boolean","ErrorBlock","DataTableYT","settings","DATA_TABLE_YT_SETTINGS","useThemeYT","getFlowStaticSpecData","staticSpec","getFlowStaticSpecPath","getFlowStaticSpecError","getFlowStaticSpecFirstLoading","_state$flow$staticSpe","loading","loaded","getFlowDynamicSpecData","dynamicSpec","getFlowDynamicSpecPath","getFlowDynamicSpecFirstLoading","_state$flow$dynamicSp","loadFlowStaticSpec","staticSpecActions","getPipelineSpec","loadFlowDynamicSpec","dynamicSpecActions","getPipelineDynamicSpec","PipelineSpec","onSave","_React$useState","_React$useState2","_slicedToArray","showEdit","setShowEdit","getFlowSpecYsonSettings","Yson","virtualized","folding","extraTools","YsonDownloadButton","pathToFileName","EditSpecDialog","visible","onSpecApply","spec","onClose","_React$useState3","_React$useState4","setError","JSON","stringify","YTDFDialog","initialValues","headerProps","onAdd","_asyncToGenerator","_regeneratorRuntime","_callee","f","_context","prev","next","undefined","values","parse","abrupt","sent","t0","Promise","reject","resolve","stop","_x","apply","arguments","fields","caption","fullWidth","extras","initialShowPreview","unipikaSettings","_toConsumableArray","makeErrorFields","FlowStaticSpec","useThunkDispatch","firstLoading","onEdit","newData","setPipelineSpec","expected_version","version","updateFlowStaticSpec","Loader","FlowDynamicSpec","setPipelineDynamicSpec","pipline_path","updateFlowDynamicSpec","Flow","options","_UIFactory$getMonitor","UIFactory","getMonitoringComponentForNavigationFlow","urlTemplate","component","FLOW_VIEW_MODES","filter","map","ReadableField","FlowState","Flex","RadioButton","onUpdate","setFlowViewMode","FlowContent","getPath","FlowMonitoring","Alert","message","Error","FlowStatusToolbar","_React$useMemo","onStart","onStop","onPause","alignItems","gap","leader_controller_address","getAttributes","Text","variant","MetaTable","items","key","_UIFactory$getMonitor2","Component","monitoring_cluster","monitoring_project","cluster","getCluster","Link","target","href","formatByParams","ytCluster"],"sourceRoot":""}