Skip to content

Commit 604f954

Browse files
committed
✨ Enhance type safety and improve React component handling
Introduced stricter PropTypes, fixed React component keys, and cleanup.
1 parent 2c1105e commit 604f954

9 files changed

Lines changed: 20 additions & 17 deletions

File tree

packages/web/src/App.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
// Copyright (c) Microsoft Corporation.
22
// Licensed under the MIT License.
33

4-
/// <reference path="../../core/src/types/prompt_template.d.ts" />
5-
/// <reference path="./vscode-elements.d.ts" />
6-
import React, { useEffect, useMemo, useRef, useState } from "react";
4+
import React, { useEffect, useRef, useState } from "react";
75

86
import "@vscode-elements/elements/dist/vscode-button";
97
import "@vscode-elements/elements/dist/vscode-single-select";
@@ -185,7 +183,6 @@ function RefreshButton() {
185183
function ScriptSelect() {
186184
const scripts = useScripts();
187185
const { scriptid, setScriptid } = useScriptId();
188-
const { refresh } = useApi();
189186
const { filename } = useScript() || {};
190187

191188
return (
@@ -207,7 +204,7 @@ function ScriptSelect() {
207204
{scripts
208205
.filter((s) => !s.isSystem && !s.unlisted)
209206
.map(({ id, title }) => (
210-
<vscode-option value={id} selected={scriptid === id} description={title}>
207+
<vscode-option key={id} value={id} selected={scriptid === id} description={title}>
211208
{id}
212209
</vscode-option>
213210
))}
@@ -282,6 +279,7 @@ function PromptParametersFields() {
282279
.map(([key, fieldSchema]) => {
283280
return (
284281
<JSONSchemaObjectForm
282+
key={key}
285283
schema={fieldSchema as JSONSchemaObject}
286284
value={parameters}
287285
fieldPrefix={`${key}.`}

packages/web/src/BarChart.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import React from "react";
55
import { VictoryAxis, VictoryBar, VictoryChart, VictoryGroup, VictoryTheme } from "victory";
66

7-
export default function BarChart(props: { rows: any[]; headers: string[] }) {
7+
export default function BarChart(props: { rows: Record<string, number>[]; headers: string[] }) {
88
const { rows, headers } = props;
99
const x = headers[0];
1010
const ys = headers.slice(1);

packages/web/src/Buttons.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,22 @@ import "@vscode-elements/elements/dist/vscode-button";
77
import AIDisclaimer from "./AIDisclaimer";
88
import { hosted } from "./configuration";
99

10+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
1011
function extractTextFromChildren(children: any): string {
1112
if (!children) return "";
1213

1314
return React.Children.toArray(children).reduce((text, child) => {
1415
if (typeof child === "string") {
1516
return text + child;
1617
} else if (React.isValidElement(child)) {
18+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
1719
return text + extractTextFromChildren((child.props as any).children);
1820
}
1921
return text;
2022
}, "") as string;
2123
}
2224

25+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
2326
function CopyButton(props: { children: any; text?: string }) {
2427
const { children, text } = props;
2528
const [copied, setCopied] = useState(false);
@@ -30,7 +33,7 @@ function CopyButton(props: { children: any; text?: string }) {
3033
await navigator.clipboard.writeText(res);
3134
setCopied(true);
3235
setTimeout(() => setCopied(false), 2000);
33-
} catch (err) {}
36+
} catch {}
3437
};
3538
const title = copied ? "Copied!" : "Copy";
3639
const buttonText = copied ? "Copied!" : "";
@@ -41,6 +44,7 @@ function CopyButton(props: { children: any; text?: string }) {
4144
);
4245
}
4346

47+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
4448
function SaveButton(props: { filename?: string; children: any; text?: string }) {
4549
const { children, text, filename } = props;
4650
const [saved, setSaved] = useState(false);
@@ -64,7 +68,7 @@ function SaveButton(props: { filename?: string; children: any; text?: string })
6468
}
6569
setSaved(true);
6670
setTimeout(() => setSaved(false), 2000);
67-
} catch (err) {}
71+
} catch {}
6872
};
6973
const title = saved ? "Saved!" : "Save";
7074
return (
@@ -79,6 +83,7 @@ function SaveButton(props: { filename?: string; children: any; text?: string })
7983
}
8084

8185
export default function CopySaveButtons(props: {
86+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
8287
children: any;
8388
filename?: string;
8489
text?: string;

packages/web/src/DataTable.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import "@vscode-elements/elements/dist/vscode-table-row";
99
import "@vscode-elements/elements/dist/vscode-table-header-cell";
1010
import "@vscode-elements/elements/dist/vscode-table-cell";
1111

12-
export default function DataTable(props: { rows: any[]; headers: string[] }) {
12+
export default function DataTable(props: { rows: Record<string, number>[]; headers: string[] }) {
1313
const { rows, headers } = props;
1414
if (!rows?.length || !headers?.length) return null;
1515

packages/web/src/DataTableTabs.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import DataTable from "./DataTable";
1414

1515
export default function DataTableTabs(props: { children: string; chart?: string }) {
1616
const { children, chart } = props;
17-
const rows: any[] = JSON5TryParse(children);
17+
const rows: Record<string, number>[] = JSON5TryParse(children);
1818

1919
// find rows that are numbers
2020
if (!rows?.length && typeof rows[0] !== "object") return null;

packages/web/src/JSONSchema.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
// Copyright (c) Microsoft Corporation.
22
// Licensed under the MIT License.
33

4-
/// <reference path="../../core/src/types/prompt_template.d.ts" />
5-
/// <reference path="./vscode-elements.d.ts" />
64
import React, { Dispatch, SetStateAction, startTransition, useEffect, useState } from "react";
75

86
import { underscore } from "inflection";
@@ -233,7 +231,7 @@ function JSONSchemaSimpleTypeFormField(props: {
233231
function fieldDisplayName(fieldPrefix: string, fieldName: string, field: JSONSchemaSimpleType) {
234232
return underscore(
235233
(fieldPrefix ? `${fieldPrefix} / ` : fieldPrefix) + (field.title || fieldName),
236-
).replaceAll(/[_\.]/g, " ");
234+
).replaceAll(/[_.]/g, " ");
237235
}
238236

239237
export function JSONBooleanOptionsGroup(props: {

packages/web/src/Results.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ function StatsTabPanel() {
204204
const result = useResult();
205205
const { usage } = result || {};
206206
if (!usage) return null;
207+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
207208
const { cost, ...rest } = usage || {};
208209

209210
const md = usage

packages/web/src/RunnerContext.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export function RunnerProvider({ children }: { children: React.ReactNode }) {
5454
useEventListener(client, RunClient.SCRIPT_START_EVENT, start, false);
5555

5656
const runUpdate = useCallback(
57-
(e: Event) =>
57+
() =>
5858
startTransition(() => {
5959
setRunId(client.runId);
6060
setState("running");
@@ -64,7 +64,7 @@ export function RunnerProvider({ children }: { children: React.ReactNode }) {
6464
useEventListener(client, RunClient.RUN_EVENT, runUpdate, false);
6565

6666
const end = useCallback(
67-
(e: Event) =>
67+
() =>
6868
startTransition(() => {
6969
setState(undefined);
7070
if (runId === client.runId) setResult(client.result);
@@ -74,7 +74,7 @@ export function RunnerProvider({ children }: { children: React.ReactNode }) {
7474
useEventListener(client, RunClient.SCRIPT_END_EVENT, end, false);
7575

7676
const appendTrace = useCallback(
77-
(evt: Event) =>
77+
() =>
7878
startTransition(() => {
7979
setTrace(() => client.trace);
8080
setOutput(() => client.output);

packages/web/src/useUrlSearchParam.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export function useUrlSearchParams<T>(
1111
const [state, setState] = useState<T>(initialValues);
1212
useEffect(() => {
1313
const params = new URLSearchParams(window.location.search);
14+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
1415
const newState: any = {};
1516
Object.entries(fields).forEach(([key, field]) => {
1617
const { type } = field;
@@ -43,7 +44,7 @@ export function useUrlSearchParams<T>(
4344
if (type === "string") {
4445
if (value !== "") params.set(key, value as string);
4546
} else if (type === "boolean") {
46-
if (!!value) params.set(key, "1");
47+
if (value) params.set(key, "1");
4748
} else if (type === "integer" || type === "number") {
4849
const v = value as number;
4950
if (!isNaN(v)) params.set(key, v.toString());

0 commit comments

Comments
 (0)