UNPKG

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

Version:

.NET library implementing distributed task queue machinery using Apache Cassandra

84 lines 5.26 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 } = react_router_dom_1.useLocation(); const [loading, setLoading] = react_1.useState(false); const [loaderText, setLoaderText] = react_1.useState(""); const [taskDetails, setTaskDetails] = react_1.useState([]); 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 RtqMonitoringSearchRequestUtils_1.isRemoteTaskQueueSearchRequestEmpty(request); }; const getRequestBySearchQuery = (searchQuery) => { const request = TasksPageContainer_1.searchRequestMapping.parse(searchQuery); if (RtqMonitoringSearchRequestUtils_1.isRemoteTaskQueueSearchRequestEmpty(request)) { return RtqMonitoringSearchRequestUtils_1.createDefaultRemoteTaskQueueSearchRequest(); } return request; }; const getParentAndChildrenTaskIds = (taskDetails) => { const linkedIds = taskDetails .map(({ childTaskIds, taskMeta: { parentTaskId } }) => [parentTaskId, ...(childTaskIds || [])]) .flat() .filter(isNotNullOrUndefined); return uniq_1.default(linkedIds); }; const getTaskLocation = (id) => ({ pathname: `../${id}` }); return (jsx_runtime_1.jsxs(CommonLayout_1.CommonLayout, Object.assign({ withArrow: true }, { children: [jsx_runtime_1.jsx(CommonLayout_1.CommonLayout.GoBack, { to: `${RouteUtils_1.RouteUtils.backUrl(pathname)}${search}` }, void 0), jsx_runtime_1.jsx(CommonLayout_1.CommonLayout.Header, { title: "\u0414\u0435\u0440\u0435\u0432\u043E \u0437\u0430\u0434\u0430\u0447" }, void 0), jsx_runtime_1.jsxs(CommonLayout_1.CommonLayout.Content, { children: [jsx_runtime_1.jsx(react_ui_1.Loader, Object.assign({ type: "big", active: loading, caption: loaderText }, { children: jsx_runtime_1.jsx("div", Object.assign({ style: { overflowX: "auto" } }, { children: taskDetails && jsx_runtime_1.jsx(TaskChainTree_1.TaskChainTree, { getTaskLocation: getTaskLocation, taskDetails: taskDetails }, void 0) }), void 0) }), void 0), useErrorHandlingContainer && jsx_runtime_1.jsx(ErrorHandlingContainer_1.ErrorHandlingContainer, {}, void 0)] }, void 0)] }), void 0)); 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 = difference_1.default(parentAndChildrenTaskIds, allTaskIds); taskDetails = [...taskDetails, ...loadedTaskDetails]; if (iterationCount > 50) { break; } } setTaskDetails(taskDetails); } finally { setLoading(false); } }); } }; exports.TaskChainsTreeContainer = TaskChainsTreeContainer; //# sourceMappingURL=TaskChainsTreeContainer.js.map