Preserve expanded problems, fix #1143

This commit is contained in:
Alexander Zobnin
2021-01-20 15:27:19 +03:00
parent 879967bf28
commit cee10f54bf

View File

@@ -33,6 +33,7 @@ export interface ProblemListProps {
interface ProblemListState { interface ProblemListState {
expanded: any; expanded: any;
expandedProblems: any;
page: number; page: number;
} }
@@ -44,6 +45,7 @@ export default class ProblemList extends PureComponent<ProblemListProps, Problem
super(props); super(props);
this.state = { this.state = {
expanded: {}, expanded: {},
expandedProblems: {},
page: 0, page: 0,
}; };
} }
@@ -71,11 +73,31 @@ export default class ProblemList extends PureComponent<ProblemListProps, Problem
} }
} }
handleExpandedChange = expanded => { 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 }; const nextExpanded = { ...this.state.expanded };
nextExpanded[this.state.page] = expanded; nextExpanded[page] = expanded;
const nextExpandedProblems = { ...this.state.expandedProblems };
nextExpandedProblems[page] = expandedProblems;
this.setState({ this.setState({
expanded: nextExpanded expanded: nextExpanded,
expandedProblems: nextExpandedProblems,
}); });
} }
@@ -86,7 +108,22 @@ export default class ProblemList extends PureComponent<ProblemListProps, Problem
} }
getExpandedPage = (page: number) => { getExpandedPage = (page: number) => {
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() { buildColumns() {