UNPKG

@skbkontur/cassandra-distributed-task-queue-ui

Version:

.NET library implementing distributed task queue machinery using Apache Cassandra

84 lines 5.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TaskChainsTreeContainer = void 0; const tslib_1 = require("tslib"); const jsx_runtime_1 = require("react/jsx-runtime"); const react_ui_1 = require("@skbkontur/react-ui"); const difference_1 = tslib_1.__importDefault(require("lodash/difference")); const uniq_1 = tslib_1.__importDefault(require("lodash/uniq")); const react_1 = require("react"); const react_router_dom_1 = require("react-router-dom"); const RtqMonitoringSearchRequestUtils_1 = require("../Domain/RtqMonitoringSearchRequestUtils"); const RouteUtils_1 = require("../Domain/Utils/RouteUtils"); const ErrorHandlingContainer_1 = require("../components/ErrorHandling/ErrorHandlingContainer"); const CommonLayout_1 = require("../components/Layouts/CommonLayout"); const TaskChainTree_1 = require("../components/TaskChainTree/TaskChainTree"); const TasksPageContainer_1 = require("./TasksPageContainer"); const isNotNullOrUndefined = (input) => Boolean(input); const TaskChainsTreeContainer = ({ useErrorHandlingContainer, rtqMonitoringApi, }) => { const { search, pathname } = (0, react_router_dom_1.useLocation)(); const [loading, setLoading] = (0, react_1.useState)(false); const [loaderText, setLoaderText] = (0, react_1.useState)(""); const [taskDetails, setTaskDetails] = (0, react_1.useState)([]); (0, react_1.useEffect)(() => { const request = getRequestBySearchQuery(search); if (!isSearchRequestEmpty(search)) { loadData(search, request); } }, [search]); const isSearchRequestEmpty = (searchQuery) => { const request = TasksPageContainer_1.searchRequestMapping.parse(searchQuery); return (0, RtqMonitoringSearchRequestUtils_1.isRemoteTaskQueueSearchRequestEmpty)(request); }; const getRequestBySearchQuery = (searchQuery) => { const request = TasksPageContainer_1.searchRequestMapping.parse(searchQuery); if ((0, RtqMonitoringSearchRequestUtils_1.isRemoteTaskQueueSearchRequestEmpty)(request)) { return (0, RtqMonitoringSearchRequestUtils_1.createDefaultRemoteTaskQueueSearchRequest)(); } return request; }; const getParentAndChildrenTaskIds = (taskDetails) => { const linkedIds = taskDetails .map(({ childTaskIds, taskMeta: { parentTaskId } }) => [parentTaskId, ...(childTaskIds || [])]) .flat() .filter(isNotNullOrUndefined); return (0, uniq_1.default)(linkedIds); }; const getTaskLocation = (id) => ({ pathname: `../${id}` }); return ((0, jsx_runtime_1.jsxs)(CommonLayout_1.CommonLayout, { withArrow: true, children: [(0, jsx_runtime_1.jsx)(CommonLayout_1.CommonLayout.GoBack, { to: `${RouteUtils_1.RouteUtils.backUrl(pathname)}${search}` }), (0, jsx_runtime_1.jsx)(CommonLayout_1.CommonLayout.Header, { title: "\u0414\u0435\u0440\u0435\u0432\u043E \u0437\u0430\u0434\u0430\u0447" }), (0, jsx_runtime_1.jsxs)(CommonLayout_1.CommonLayout.Content, { children: [(0, jsx_runtime_1.jsx)(react_ui_1.Loader, { type: "big", active: loading, caption: loaderText, children: (0, jsx_runtime_1.jsx)("div", { style: { overflowX: "auto" }, children: taskDetails && (0, jsx_runtime_1.jsx)(TaskChainTree_1.TaskChainTree, { getTaskLocation: getTaskLocation, taskDetails: taskDetails }) }) }), useErrorHandlingContainer && (0, jsx_runtime_1.jsx)(ErrorHandlingContainer_1.ErrorHandlingContainer, {})] })] })); function loadData(searchQuery, request) { return tslib_1.__awaiter(this, void 0, void 0, function* () { let iterationCount = 0; setLoading(true); setLoaderText("Загрузка задач: 0"); try { let taskDetails = []; let allTaskIds = []; const results = yield rtqMonitoringApi.search(request); let taskIdsToLoad = results.taskMetas.map(x => x.id); while (taskIdsToLoad.length > 0) { iterationCount++; if (taskIdsToLoad.length > 100) { throw new Error("Количство задач в дереве превысило допустимый предел: 100 зачад"); } const loadedTaskDetails = yield Promise.all(taskIdsToLoad.map(id => rtqMonitoringApi.getTaskDetails(id))); allTaskIds = [...allTaskIds, ...taskIdsToLoad]; setLoading(true); setLoaderText(`Загрузка задач: ${taskDetails.length}`); const parentAndChildrenTaskIds = getParentAndChildrenTaskIds(loadedTaskDetails); taskIdsToLoad = (0, difference_1.default)(parentAndChildrenTaskIds, allTaskIds); taskDetails = [...taskDetails, ...loadedTaskDetails]; if (iterationCount > 50) { break; } } setTaskDetails(taskDetails); } finally { setLoading(false); } }); } }; exports.TaskChainsTreeContainer = TaskChainsTreeContainer; //# sourceMappingURL=TaskChainsTreeContainer.js.map