Skip to content

Commit 692dd02

Browse files
committed
Add logic to change style for non-accepted suggestions
1 parent 271808a commit 692dd02

File tree

7 files changed

+62
-10
lines changed

7 files changed

+62
-10
lines changed

extensions/ql-vscode/src/model-editor/modeled-method.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { MethodSignature } from "./method";
2+
import { ModelingStatus } from "./shared/modeling-status";
23

34
export type ModeledMethodType =
45
| "none"
@@ -109,3 +110,18 @@ export function modeledMethodSupportsProvenance(
109110
modeledMethod.type === "neutral"
110111
);
111112
}
113+
114+
export function isModelAccepted(
115+
modeledMethod: ModeledMethod | undefined,
116+
modelingStatus: ModelingStatus,
117+
): boolean {
118+
if (!modeledMethod) {
119+
return true;
120+
}
121+
122+
return (
123+
modelingStatus !== "unsaved" ||
124+
modeledMethod.type === "none" ||
125+
modeledMethod.provenance !== "ai-generated"
126+
);
127+
}

extensions/ql-vscode/src/stories/method-modeling/MethodModelingInputs.stories.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,13 @@ ModelingInProgress.args = {
6060
modeledMethod,
6161
isModelingInProgress: true,
6262
};
63+
64+
const generatedModeledMethod = createSinkModeledMethod({
65+
provenance: "ai-generated",
66+
});
67+
export const ModelingNotAccepted = Template.bind({});
68+
ModelingNotAccepted.args = {
69+
method,
70+
modeledMethod: generatedModeledMethod,
71+
modelingStatus: "unsaved",
72+
};
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { styled } from "styled-components";
2+
import { Dropdown } from "../common/Dropdown";
3+
4+
export const InputDropdown = styled(Dropdown)<{ $accepted: boolean }>`
5+
font-style: ${(props) => (props.$accepted ? "normal" : "italic")};
6+
`;

extensions/ql-vscode/src/view/model-editor/ModelInputDropdown.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
import * as React from "react";
22
import { ChangeEvent, useCallback, useMemo } from "react";
3-
import { Dropdown } from "../common/Dropdown";
43
import {
54
ModeledMethod,
5+
isModelAccepted,
66
modeledMethodSupportsInput,
77
} from "../../model-editor/modeled-method";
88
import { Method } from "../../model-editor/method";
99
import { ReadonlyDropdown } from "../common/ReadonlyDropdown";
1010
import { QueryLanguage } from "../../common/query-language";
1111
import { getModelsAsDataLanguage } from "../../model-editor/languages";
1212
import { ModelingStatus } from "../../model-editor/shared/modeling-status";
13+
import { InputDropdown } from "./InputDropdown";
1314

1415
type Props = {
1516
language: QueryLanguage;
@@ -23,6 +24,7 @@ export const ModelInputDropdown = ({
2324
language,
2425
method,
2526
modeledMethod,
27+
modelingStatus,
2628
onChange,
2729
}: Props): JSX.Element => {
2830
const options = useMemo(() => {
@@ -66,11 +68,14 @@ export const ModelInputDropdown = ({
6668
return <ReadonlyDropdown value={modeledMethod.path} aria-label="Path" />;
6769
}
6870

71+
const modelAccepted = isModelAccepted(modeledMethod, modelingStatus);
72+
6973
return (
70-
<Dropdown
74+
<InputDropdown
7175
value={value}
7276
options={options}
7377
disabled={!enabled}
78+
$accepted={modelAccepted}
7479
onChange={handleChange}
7580
aria-label="Input"
7681
/>

extensions/ql-vscode/src/view/model-editor/ModelKindDropdown.tsx

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
import * as React from "react";
22
import { ChangeEvent, useCallback, useEffect, useMemo } from "react";
3-
import type {
3+
import {
44
ModeledMethod,
55
ModeledMethodKind,
6+
modeledMethodSupportsKind,
7+
isModelAccepted,
68
} from "../../model-editor/modeled-method";
7-
import { modeledMethodSupportsKind } from "../../model-editor/modeled-method";
8-
import { Dropdown } from "../common/Dropdown";
99
import { getModelsAsDataLanguage } from "../../model-editor/languages";
1010
import { QueryLanguage } from "../../common/query-language";
1111
import { ModelingStatus } from "../../model-editor/shared/modeling-status";
12+
import { InputDropdown } from "./InputDropdown";
1213

1314
type Props = {
1415
language: QueryLanguage;
@@ -20,6 +21,7 @@ type Props = {
2021
export const ModelKindDropdown = ({
2122
language,
2223
modeledMethod,
24+
modelingStatus,
2325
onChange,
2426
}: Props) => {
2527
const predicate = useMemo(() => {
@@ -83,11 +85,14 @@ export const ModelKindDropdown = ({
8385
}
8486
}, [modeledMethod, value, kinds, onChangeKind]);
8587

88+
const modelAccepted = isModelAccepted(modeledMethod, modelingStatus);
89+
8690
return (
87-
<Dropdown
91+
<InputDropdown
8892
value={value}
8993
options={options}
9094
disabled={disabled}
95+
$accepted={modelAccepted}
9196
onChange={handleChange}
9297
aria-label="Kind"
9398
/>

extensions/ql-vscode/src/view/model-editor/ModelOutputDropdown.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
import * as React from "react";
22
import { ChangeEvent, useCallback, useMemo } from "react";
3-
import { Dropdown } from "../common/Dropdown";
43
import {
54
ModeledMethod,
5+
isModelAccepted,
66
modeledMethodSupportsOutput,
77
} from "../../model-editor/modeled-method";
88
import { Method } from "../../model-editor/method";
99
import { ReadonlyDropdown } from "../common/ReadonlyDropdown";
1010
import { getModelsAsDataLanguage } from "../../model-editor/languages";
1111
import { QueryLanguage } from "../../common/query-language";
1212
import { ModelingStatus } from "../../model-editor/shared/modeling-status";
13+
import { InputDropdown } from "./InputDropdown";
1314

1415
type Props = {
1516
language: QueryLanguage;
@@ -23,6 +24,7 @@ export const ModelOutputDropdown = ({
2324
language,
2425
method,
2526
modeledMethod,
27+
modelingStatus,
2628
onChange,
2729
}: Props): JSX.Element => {
2830
const options = useMemo(() => {
@@ -72,11 +74,14 @@ export const ModelOutputDropdown = ({
7274
);
7375
}
7476

77+
const modelAccepted = isModelAccepted(modeledMethod, modelingStatus);
78+
7579
return (
76-
<Dropdown
80+
<InputDropdown
7781
value={value}
7882
options={options}
7983
disabled={!enabled}
84+
$accepted={modelAccepted}
8085
onChange={handleChange}
8186
aria-label="Output"
8287
/>

extensions/ql-vscode/src/view/model-editor/ModelTypeDropdown.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as React from "react";
22
import { ChangeEvent, useCallback } from "react";
3-
import { Dropdown } from "../common/Dropdown";
43
import {
4+
isModelAccepted,
55
ModeledMethod,
66
modeledMethodSupportsProvenance,
77
ModeledMethodType,
@@ -14,6 +14,7 @@ import { ReadonlyDropdown } from "../common/ReadonlyDropdown";
1414
import { QueryLanguage } from "../../common/query-language";
1515
import { getModelsAsDataLanguage } from "../../model-editor/languages";
1616
import { ModelingStatus } from "../../model-editor/shared/modeling-status";
17+
import { InputDropdown } from "./InputDropdown";
1718

1819
const options: Array<{ value: ModeledMethodType; label: string }> = [
1920
{ value: "none", label: "Unmodeled" },
@@ -35,6 +36,7 @@ export const ModelTypeDropdown = ({
3536
language,
3637
method,
3738
modeledMethod,
39+
modelingStatus,
3840
onChange,
3941
}: Props): JSX.Element => {
4042
const handleChange = useCallback(
@@ -90,10 +92,13 @@ export const ModelTypeDropdown = ({
9092
);
9193
}
9294

95+
const modelAccepted = isModelAccepted(modeledMethod, modelingStatus);
96+
9397
return (
94-
<Dropdown
98+
<InputDropdown
9599
value={modeledMethod?.type ?? "none"}
96100
options={options}
101+
$accepted={modelAccepted}
97102
onChange={handleChange}
98103
aria-label="Model type"
99104
/>

0 commit comments

Comments
 (0)