Rearrange functions so they are defined earlier in the file from where they are called
This commit is contained in:
@@ -87,6 +87,59 @@ export class ResultsApp extends React.Component<
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private updateStateWithNewResultsInfo(resultsInfo: ResultsInfo): void {
|
||||||
|
this.setState((prevState) => {
|
||||||
|
if (resultsInfo === null && prevState.isExpectingResultsUpdate) {
|
||||||
|
// Display loading message
|
||||||
|
return {
|
||||||
|
displayedResults: {
|
||||||
|
resultsInfo: null,
|
||||||
|
results: null,
|
||||||
|
errorMessage: "Loading results…",
|
||||||
|
},
|
||||||
|
isExpectingResultsUpdate: prevState.isExpectingResultsUpdate,
|
||||||
|
nextResultsInfo: resultsInfo,
|
||||||
|
};
|
||||||
|
} else if (resultsInfo === null) {
|
||||||
|
// No results to display
|
||||||
|
return {
|
||||||
|
displayedResults: {
|
||||||
|
resultsInfo: null,
|
||||||
|
results: null,
|
||||||
|
errorMessage: "No results to display",
|
||||||
|
},
|
||||||
|
isExpectingResultsUpdate: prevState.isExpectingResultsUpdate,
|
||||||
|
nextResultsInfo: resultsInfo,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
let results: Results | null = null;
|
||||||
|
let statusText = "";
|
||||||
|
try {
|
||||||
|
const resultSets = getResultSets(resultsInfo);
|
||||||
|
results = {
|
||||||
|
resultSets,
|
||||||
|
database: resultsInfo.database,
|
||||||
|
sortStates: getSortStates(resultsInfo),
|
||||||
|
};
|
||||||
|
} catch (e) {
|
||||||
|
const errorMessage = getErrorMessage(e);
|
||||||
|
|
||||||
|
statusText = `Error loading results: ${errorMessage}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
displayedResults: {
|
||||||
|
resultsInfo,
|
||||||
|
results,
|
||||||
|
errorMessage: statusText,
|
||||||
|
},
|
||||||
|
nextResultsInfo: null,
|
||||||
|
isExpectingResultsUpdate: false,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
handleMessage(msg: IntoResultsViewMsg): void {
|
handleMessage(msg: IntoResultsViewMsg): void {
|
||||||
switch (msg.t) {
|
switch (msg.t) {
|
||||||
case "setState":
|
case "setState":
|
||||||
@@ -160,85 +213,23 @@ export class ResultsApp extends React.Component<
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private updateStateWithNewResultsInfo(resultsInfo: ResultsInfo): void {
|
private vscodeMessageHandler(evt: MessageEvent) {
|
||||||
this.setState((prevState) => {
|
// sanitize origin
|
||||||
if (resultsInfo === null && prevState.isExpectingResultsUpdate) {
|
const origin = evt.origin.replace(/\n|\r/g, "");
|
||||||
// Display loading message
|
evt.origin === window.origin
|
||||||
return {
|
? this.handleMessage(evt.data as IntoResultsViewMsg)
|
||||||
displayedResults: {
|
: console.error(`Invalid event origin ${origin}`);
|
||||||
resultsInfo: null,
|
|
||||||
results: null,
|
|
||||||
errorMessage: "Loading results…",
|
|
||||||
},
|
|
||||||
isExpectingResultsUpdate: prevState.isExpectingResultsUpdate,
|
|
||||||
nextResultsInfo: resultsInfo,
|
|
||||||
};
|
|
||||||
} else if (resultsInfo === null) {
|
|
||||||
// No results to display
|
|
||||||
return {
|
|
||||||
displayedResults: {
|
|
||||||
resultsInfo: null,
|
|
||||||
results: null,
|
|
||||||
errorMessage: "No results to display",
|
|
||||||
},
|
|
||||||
isExpectingResultsUpdate: prevState.isExpectingResultsUpdate,
|
|
||||||
nextResultsInfo: resultsInfo,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
let results: Results | null = null;
|
|
||||||
let statusText = "";
|
|
||||||
try {
|
|
||||||
const resultSets = this.getResultSets(resultsInfo);
|
|
||||||
results = {
|
|
||||||
resultSets,
|
|
||||||
database: resultsInfo.database,
|
|
||||||
sortStates: this.getSortStates(resultsInfo),
|
|
||||||
};
|
|
||||||
} catch (e) {
|
|
||||||
const errorMessage = getErrorMessage(e);
|
|
||||||
|
|
||||||
statusText = `Error loading results: ${errorMessage}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
displayedResults: {
|
|
||||||
resultsInfo,
|
|
||||||
results,
|
|
||||||
errorMessage: statusText,
|
|
||||||
},
|
|
||||||
nextResultsInfo: null,
|
|
||||||
isExpectingResultsUpdate: false,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private getResultSets(resultsInfo: ResultsInfo): readonly ResultSet[] {
|
componentDidMount(): void {
|
||||||
const parsedResultSets = resultsInfo.parsedResultSets;
|
this.vscodeMessageHandler = this.vscodeMessageHandler.bind(this);
|
||||||
const resultSet = parsedResultSets.resultSet;
|
window.addEventListener("message", this.vscodeMessageHandler);
|
||||||
if (
|
}
|
||||||
resultSet.t !== "InterpretedResultSet" &&
|
|
||||||
resultSet.t !== "RawResultSet"
|
componentWillUnmount(): void {
|
||||||
) {
|
if (this.vscodeMessageHandler) {
|
||||||
throw new Error(
|
window.removeEventListener("message", this.vscodeMessageHandler);
|
||||||
`Invalid result set type. Should be either "InterpretedResultSet" or "RawResultSet", but got "${
|
|
||||||
(resultSet as { t: string }).t
|
|
||||||
}".`,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return [resultSet];
|
|
||||||
}
|
|
||||||
|
|
||||||
private getSortStates(
|
|
||||||
resultsInfo: ResultsInfo,
|
|
||||||
): Map<string, RawResultsSortState> {
|
|
||||||
const entries = Array.from(resultsInfo.sortedResultsMap.entries());
|
|
||||||
return new Map(
|
|
||||||
entries.map(([key, sortedResultSetInfo]) => [
|
|
||||||
key,
|
|
||||||
sortedResultSetInfo.sortState,
|
|
||||||
]),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
render(): JSX.Element {
|
render(): JSX.Element {
|
||||||
@@ -286,23 +277,32 @@ export class ResultsApp extends React.Component<
|
|||||||
return <span>{displayedResults.errorMessage}</span>;
|
return <span>{displayedResults.errorMessage}</span>;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
componentDidMount(): void {
|
|
||||||
this.vscodeMessageHandler = this.vscodeMessageHandler.bind(this);
|
function getSortStates(
|
||||||
window.addEventListener("message", this.vscodeMessageHandler);
|
resultsInfo: ResultsInfo,
|
||||||
}
|
): Map<string, RawResultsSortState> {
|
||||||
|
const entries = Array.from(resultsInfo.sortedResultsMap.entries());
|
||||||
componentWillUnmount(): void {
|
return new Map(
|
||||||
if (this.vscodeMessageHandler) {
|
entries.map(([key, sortedResultSetInfo]) => [
|
||||||
window.removeEventListener("message", this.vscodeMessageHandler);
|
key,
|
||||||
}
|
sortedResultSetInfo.sortState,
|
||||||
}
|
]),
|
||||||
|
);
|
||||||
private vscodeMessageHandler(evt: MessageEvent) {
|
}
|
||||||
// sanitize origin
|
|
||||||
const origin = evt.origin.replace(/\n|\r/g, "");
|
function getResultSets(resultsInfo: ResultsInfo): readonly ResultSet[] {
|
||||||
evt.origin === window.origin
|
const parsedResultSets = resultsInfo.parsedResultSets;
|
||||||
? this.handleMessage(evt.data as IntoResultsViewMsg)
|
const resultSet = parsedResultSets.resultSet;
|
||||||
: console.error(`Invalid event origin ${origin}`);
|
if (
|
||||||
}
|
resultSet.t !== "InterpretedResultSet" &&
|
||||||
|
resultSet.t !== "RawResultSet"
|
||||||
|
) {
|
||||||
|
throw new Error(
|
||||||
|
`Invalid result set type. Should be either "InterpretedResultSet" or "RawResultSet", but got "${
|
||||||
|
(resultSet as { t: string }).t
|
||||||
|
}".`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return [resultSet];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user