Skip to content

Commit 34e98c4

Browse files
Convert useStateWithTelemetry to use useMemo
1 parent f325eeb commit 34e98c4

4 files changed

Lines changed: 33 additions & 24 deletions

File tree

extensions/ql-vscode/src/view/common/CodePaths/CodePaths.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,18 @@ export type CodePathsProps = {
2424
severity: ResultSeverity;
2525
};
2626

27+
const filterIsOpenTelemetry = (v: boolean) => v === true;
28+
2729
export const CodePaths = ({
2830
codeFlows,
2931
ruleDescription,
3032
message,
3133
severity,
3234
}: CodePathsProps) => {
33-
const [isOpen, setIsOpen] = useStateWithTelemetry(
35+
const [isOpen, setIsOpen] = useStateWithTelemetry<boolean>(
3436
false,
3537
"code-path-is-open",
36-
(v) => v === true,
38+
filterIsOpenTelemetry,
3739
);
3840

3941
const linkRef = useRef<HTMLAnchorElement>(null);

extensions/ql-vscode/src/view/common/Telemetry.ts

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,25 +28,28 @@ export function useStateWithTelemetry<S>(
2828
filterTelemetryOnValue?: (value: S) => boolean,
2929
): [S, React.Dispatch<S> | React.Dispatch<React.SetStateAction<S>>] {
3030
const [value, setter] = useState<S>(defaultValue);
31-
if (filterTelemetryOnValue === undefined) {
32-
const setterWithTelemetry = (x: React.SetStateAction<S>) => {
33-
vscode.postMessage({
34-
t: "telemetry",
35-
action: telemetryAction,
36-
});
37-
setter(x);
38-
};
39-
return [value, setterWithTelemetry];
40-
} else {
41-
const setterWithTelemetry = (x: S) => {
42-
if (filterTelemetryOnValue(x)) {
31+
const setterWithTelemetry = React.useMemo<
32+
React.Dispatch<S> | React.Dispatch<React.SetStateAction<S>>
33+
>(() => {
34+
if (filterTelemetryOnValue === undefined) {
35+
return (x: React.SetStateAction<S>) => {
4336
vscode.postMessage({
4437
t: "telemetry",
4538
action: telemetryAction,
4639
});
47-
}
48-
setter(x);
49-
};
50-
return [value, setterWithTelemetry];
51-
}
40+
setter(x);
41+
};
42+
} else {
43+
return (x: S) => {
44+
if (filterTelemetryOnValue(x)) {
45+
vscode.postMessage({
46+
t: "telemetry",
47+
action: telemetryAction,
48+
});
49+
}
50+
setter(x);
51+
};
52+
}
53+
}, [telemetryAction, filterTelemetryOnValue, setter]);
54+
return [value, setterWithTelemetry];
5255
}

extensions/ql-vscode/src/view/remote-queries/RawResultsTable.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,16 +94,18 @@ type RawResultsTableProps = {
9494
sourceLocationPrefix: string;
9595
};
9696

97+
const filterTableExpandedTelemetry = (v: boolean) => v === true;
98+
9799
const RawResultsTable = ({
98100
schema,
99101
results,
100102
fileLinkPrefix,
101103
sourceLocationPrefix,
102104
}: RawResultsTableProps) => {
103-
const [tableExpanded, setTableExpanded] = useStateWithTelemetry(
105+
const [tableExpanded, setTableExpanded] = useStateWithTelemetry<boolean>(
104106
false,
105107
"raw-results-table-expanded",
106-
(v) => v === true,
108+
filterTableExpandedTelemetry,
107109
);
108110
const numOfResultsToShow = tableExpanded
109111
? results.rows.length

extensions/ql-vscode/src/view/variant-analysis/RepoRow.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,8 @@ const isExpandableContentLoaded = (
158158
return resultsLoaded;
159159
};
160160

161+
const filterRepoRowExpandedTelemetry = (v: boolean) => v === true;
162+
161163
export const RepoRow = ({
162164
repository,
163165
status,
@@ -168,10 +170,10 @@ export const RepoRow = ({
168170
selected,
169171
onSelectedChange,
170172
}: RepoRowProps) => {
171-
const [isExpanded, setExpanded] = useStateWithTelemetry(
173+
const [isExpanded, setExpanded] = useStateWithTelemetry<boolean>(
172174
false,
173175
"variant-analysis-repo-row-expanded",
174-
(v) => v === true,
176+
filterRepoRowExpandedTelemetry,
175177
);
176178
const resultsLoaded = !!interpretedResults || !!rawResults;
177179
const [resultsLoading, setResultsLoading] = useState(false);
@@ -212,7 +214,7 @@ export const RepoRow = ({
212214
setResultsLoading(false);
213215
setExpanded(true);
214216
}
215-
}, [resultsLoaded, resultsLoading]);
217+
}, [resultsLoaded, resultsLoading, setExpanded]);
216218

217219
const onClickCheckbox = useCallback((e: React.MouseEvent) => {
218220
// Prevent calling the onClick event of the container, which would toggle the expanded state

0 commit comments

Comments
 (0)