Skip to content

Commit 557110d

Browse files
committed
Use readonly dropdowns for showing type models
1 parent 261f8b3 commit 557110d

File tree

4 files changed

+54
-1
lines changed

4 files changed

+54
-1
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import * as React from "react";
2+
import { useMemo } from "react";
3+
import { Dropdown } from "./Dropdown";
4+
5+
type Props = {
6+
value: string;
7+
className?: string;
8+
9+
"aria-label"?: string;
10+
};
11+
12+
export function ReadonlyDropdown({ value, ...props }: Props) {
13+
const options = useMemo(() => {
14+
return [
15+
{
16+
value,
17+
label: value,
18+
},
19+
];
20+
}, [value]);
21+
22+
return (
23+
<Dropdown
24+
value={value}
25+
disabledPlaceholder={value}
26+
disabled={true}
27+
options={options}
28+
{...props}
29+
/>
30+
);
31+
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
modeledMethodSupportsInput,
77
} from "../../model-editor/modeled-method";
88
import { Method, getArgumentsList } from "../../model-editor/method";
9+
import { ReadonlyDropdown } from "../common/ReadonlyDropdown";
910

1011
type Props = {
1112
method: Method;
@@ -60,6 +61,10 @@ export const ModelInputDropdown = ({
6061
? modeledMethod.input
6162
: undefined;
6263

64+
if (modeledMethod?.type === "type") {
65+
return <ReadonlyDropdown value={modeledMethod.path} aria-label="Path" />;
66+
}
67+
6368
return (
6469
<Dropdown
6570
value={value}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
modeledMethodSupportsOutput,
77
} from "../../model-editor/modeled-method";
88
import { Method, getArgumentsList } from "../../model-editor/method";
9+
import { ReadonlyDropdown } from "../common/ReadonlyDropdown";
910

1011
type Props = {
1112
method: Method;
@@ -61,6 +62,15 @@ export const ModelOutputDropdown = ({
6162
? modeledMethod.output
6263
: undefined;
6364

65+
if (modeledMethod?.type === "type") {
66+
return (
67+
<ReadonlyDropdown
68+
value={modeledMethod.relatedTypeName}
69+
aria-label="Related type name"
70+
/>
71+
);
72+
}
73+
6474
return (
6575
<Dropdown
6676
value={value}

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
import { Method, getArgumentsList } from "../../model-editor/method";
1111
import { createEmptyModeledMethod } from "../../model-editor/modeled-method-empty";
1212
import { Mutable } from "../../common/mutable";
13+
import { ReadonlyDropdown } from "../common/ReadonlyDropdown";
1314

1415
const options: Array<{ value: ModeledMethodType; label: string }> = [
1516
{ value: "none", label: "Unmodeled" },
@@ -78,7 +79,13 @@ export const ModelTypeDropdown = ({
7879
const isShownOption = options.some((option) => option.value === value);
7980

8081
if (!isShownOption) {
81-
return <>{value}</>;
82+
return (
83+
<ReadonlyDropdown
84+
// Try to show this like a normal type with uppercased first letter
85+
value={value.charAt(0).toUpperCase() + value.slice(1)}
86+
aria-label="Model type"
87+
/>
88+
);
8289
}
8390

8491
return (

0 commit comments

Comments
 (0)