From cee10f54bffd5c1cb69d6c9e1fcc64f2eb1f8de7 Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Wed, 20 Jan 2021 15:27:19 +0300 Subject: [PATCH] Preserve expanded problems, fix #1143 --- .../components/Problems/Problems.tsx | 45 +++++++++++++++++-- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/src/panel-triggers/components/Problems/Problems.tsx b/src/panel-triggers/components/Problems/Problems.tsx index ceaab12..360c9e7 100644 --- a/src/panel-triggers/components/Problems/Problems.tsx +++ b/src/panel-triggers/components/Problems/Problems.tsx @@ -33,6 +33,7 @@ export interface ProblemListProps { interface ProblemListState { expanded: any; + expandedProblems: any; page: number; } @@ -44,6 +45,7 @@ export default class ProblemList extends PureComponent { + handleExpandedChange = (expanded: any, event: any) => { + const { problems, pageSize } = this.props; + const { page } = this.state; + const expandedProblems = {}; + + for (const row in expanded) { + const rowId = Number(row); + const problemIndex = pageSize * page + rowId; + if (expanded[row] && problemIndex < problems.length) { + const expandedProblem = problems[problemIndex].eventid; + if (expandedProblem) { + expandedProblems[expandedProblem] = true; + } + } + } + const nextExpanded = { ...this.state.expanded }; - nextExpanded[this.state.page] = expanded; + nextExpanded[page] = expanded; + + const nextExpandedProblems = { ...this.state.expandedProblems }; + nextExpandedProblems[page] = expandedProblems; + this.setState({ - expanded: nextExpanded + expanded: nextExpanded, + expandedProblems: nextExpandedProblems, }); } @@ -86,7 +108,22 @@ export default class ProblemList extends PureComponent { - return this.state.expanded[page] || {}; + const { problems, pageSize } = this.props; + const { expandedProblems } = this.state; + const expandedProblemsPage = expandedProblems[page] || {}; + const expandedPage = {}; + + // Go through the page and search for expanded problems + const startIndex = pageSize * page; + const endIndex = Math.min(startIndex + pageSize, problems.length); + for (let i = startIndex; i < endIndex; i++) { + const problem = problems[i]; + if (expandedProblemsPage[problem.eventid]) { + expandedPage[i - startIndex] = {}; + } + } + + return expandedPage; } buildColumns() {