Add in-progress UI state for modeling methods (#2675)
This commit is contained in:
@@ -510,6 +510,11 @@ interface AddModeledMethodsMessage {
|
|||||||
modeledMethods: Record<string, ModeledMethod>;
|
modeledMethods: Record<string, ModeledMethod>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface SetInProgressMethodsMessage {
|
||||||
|
t: "setInProgressMethods";
|
||||||
|
inProgressMethods: string[];
|
||||||
|
}
|
||||||
|
|
||||||
interface SwitchModeMessage {
|
interface SwitchModeMessage {
|
||||||
t: "switchMode";
|
t: "switchMode";
|
||||||
mode: Mode;
|
mode: Mode;
|
||||||
@@ -556,7 +561,8 @@ export type ToDataExtensionsEditorMessage =
|
|||||||
| SetExtensionPackStateMessage
|
| SetExtensionPackStateMessage
|
||||||
| SetExternalApiUsagesMessage
|
| SetExternalApiUsagesMessage
|
||||||
| LoadModeledMethodsMessage
|
| LoadModeledMethodsMessage
|
||||||
| AddModeledMethodsMessage;
|
| AddModeledMethodsMessage
|
||||||
|
| SetInProgressMethodsMessage;
|
||||||
|
|
||||||
export type FromDataExtensionsEditorMessage =
|
export type FromDataExtensionsEditorMessage =
|
||||||
| ViewLoadedMsg
|
| ViewLoadedMsg
|
||||||
|
|||||||
@@ -91,6 +91,10 @@ export function DataExtensionsEditor({
|
|||||||
new Set(),
|
new Set(),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const [inProgressSignatures, setInProgressSignatures] = useState<Set<string>>(
|
||||||
|
new Set(),
|
||||||
|
);
|
||||||
|
|
||||||
const [hideModeledApis, setHideModeledApis] = useState(true);
|
const [hideModeledApis, setHideModeledApis] = useState(true);
|
||||||
|
|
||||||
const [modeledMethods, setModeledMethods] = useState<
|
const [modeledMethods, setModeledMethods] = useState<
|
||||||
@@ -135,6 +139,9 @@ export function DataExtensionsEditor({
|
|||||||
]),
|
]),
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
case "setInProgressMethods":
|
||||||
|
setInProgressSignatures(new Set(msg.inProgressMethods));
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
assertNever(msg);
|
assertNever(msg);
|
||||||
}
|
}
|
||||||
@@ -330,6 +337,7 @@ export function DataExtensionsEditor({
|
|||||||
externalApiUsages={externalApiUsages}
|
externalApiUsages={externalApiUsages}
|
||||||
modeledMethods={modeledMethods}
|
modeledMethods={modeledMethods}
|
||||||
modifiedSignatures={modifiedSignatures}
|
modifiedSignatures={modifiedSignatures}
|
||||||
|
inProgressSignatures={inProgressSignatures}
|
||||||
viewState={viewState}
|
viewState={viewState}
|
||||||
hideModeledApis={hideModeledApis}
|
hideModeledApis={hideModeledApis}
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
import * as React from "react";
|
||||||
|
import { Dropdown } from "../common/Dropdown";
|
||||||
|
|
||||||
|
export const InProgressDropdown = () => {
|
||||||
|
const options: Array<{ label: string; value: string }> = [
|
||||||
|
{
|
||||||
|
label: "Thinking...",
|
||||||
|
value: "Thinking...",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
const noop = () => {
|
||||||
|
// Do nothing
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Dropdown
|
||||||
|
value="Thinking..."
|
||||||
|
options={options}
|
||||||
|
disabled={false}
|
||||||
|
onChange={noop}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
@@ -72,6 +72,7 @@ type Props = {
|
|||||||
externalApiUsages: ExternalApiUsage[];
|
externalApiUsages: ExternalApiUsage[];
|
||||||
modeledMethods: Record<string, ModeledMethod>;
|
modeledMethods: Record<string, ModeledMethod>;
|
||||||
modifiedSignatures: Set<string>;
|
modifiedSignatures: Set<string>;
|
||||||
|
inProgressSignatures: Set<string>;
|
||||||
viewState: DataExtensionEditorViewState;
|
viewState: DataExtensionEditorViewState;
|
||||||
hideModeledApis: boolean;
|
hideModeledApis: boolean;
|
||||||
onChange: (
|
onChange: (
|
||||||
@@ -97,6 +98,7 @@ export const LibraryRow = ({
|
|||||||
externalApiUsages,
|
externalApiUsages,
|
||||||
modeledMethods,
|
modeledMethods,
|
||||||
modifiedSignatures,
|
modifiedSignatures,
|
||||||
|
inProgressSignatures,
|
||||||
viewState,
|
viewState,
|
||||||
hideModeledApis,
|
hideModeledApis,
|
||||||
onChange,
|
onChange,
|
||||||
@@ -209,6 +211,7 @@ export const LibraryRow = ({
|
|||||||
externalApiUsages={externalApiUsages}
|
externalApiUsages={externalApiUsages}
|
||||||
modeledMethods={modeledMethods}
|
modeledMethods={modeledMethods}
|
||||||
modifiedSignatures={modifiedSignatures}
|
modifiedSignatures={modifiedSignatures}
|
||||||
|
inProgressSignatures={inProgressSignatures}
|
||||||
mode={viewState.mode}
|
mode={viewState.mode}
|
||||||
hideModeledApis={hideModeledApis}
|
hideModeledApis={hideModeledApis}
|
||||||
onChange={onChangeWithModelName}
|
onChange={onChangeWithModelName}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import {
|
|||||||
VSCodeDataGridCell,
|
VSCodeDataGridCell,
|
||||||
VSCodeDataGridRow,
|
VSCodeDataGridRow,
|
||||||
VSCodeLink,
|
VSCodeLink,
|
||||||
|
VSCodeProgressRing,
|
||||||
} from "@vscode/webview-ui-toolkit/react";
|
} from "@vscode/webview-ui-toolkit/react";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import { ChangeEvent, useCallback, useMemo } from "react";
|
import { ChangeEvent, useCallback, useMemo } from "react";
|
||||||
@@ -23,6 +24,7 @@ import {
|
|||||||
ModelingStatus,
|
ModelingStatus,
|
||||||
ModelingStatusIndicator,
|
ModelingStatusIndicator,
|
||||||
} from "./ModelingStatusIndicator";
|
} from "./ModelingStatusIndicator";
|
||||||
|
import { InProgressDropdown } from "./InProgressDropdown";
|
||||||
|
|
||||||
const ApiOrMethodCell = styled(VSCodeDataGridCell)`
|
const ApiOrMethodCell = styled(VSCodeDataGridCell)`
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -43,6 +45,12 @@ const ViewLink = styled(VSCodeLink)`
|
|||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
const ProgressRing = styled(VSCodeProgressRing)`
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
margin-left: auto;
|
||||||
|
`;
|
||||||
|
|
||||||
const modelTypeOptions: Array<{ value: ModeledMethodType; label: string }> = [
|
const modelTypeOptions: Array<{ value: ModeledMethodType; label: string }> = [
|
||||||
{ value: "none", label: "Unmodeled" },
|
{ value: "none", label: "Unmodeled" },
|
||||||
{ value: "source", label: "Source" },
|
{ value: "source", label: "Source" },
|
||||||
@@ -55,6 +63,7 @@ type Props = {
|
|||||||
externalApiUsage: ExternalApiUsage;
|
externalApiUsage: ExternalApiUsage;
|
||||||
modeledMethod: ModeledMethod | undefined;
|
modeledMethod: ModeledMethod | undefined;
|
||||||
methodIsUnsaved: boolean;
|
methodIsUnsaved: boolean;
|
||||||
|
modelingInProgress: boolean;
|
||||||
mode: Mode;
|
mode: Mode;
|
||||||
hideModeledApis: boolean;
|
hideModeledApis: boolean;
|
||||||
onChange: (
|
onChange: (
|
||||||
@@ -216,38 +225,59 @@ function ModelableMethodRow(props: Props) {
|
|||||||
</UsagesButton>
|
</UsagesButton>
|
||||||
)}
|
)}
|
||||||
<ViewLink onClick={jumpToUsage}>View</ViewLink>
|
<ViewLink onClick={jumpToUsage}>View</ViewLink>
|
||||||
|
{props.modelingInProgress && <ProgressRing />}
|
||||||
</ApiOrMethodCell>
|
</ApiOrMethodCell>
|
||||||
<VSCodeDataGridCell gridColumn={2}>
|
{props.modelingInProgress && (
|
||||||
<Dropdown
|
<>
|
||||||
value={modeledMethod?.type ?? "none"}
|
<VSCodeDataGridCell gridColumn={2}>
|
||||||
options={modelTypeOptions}
|
<InProgressDropdown />
|
||||||
onChange={handleTypeInput}
|
</VSCodeDataGridCell>
|
||||||
/>
|
<VSCodeDataGridCell gridColumn={3}>
|
||||||
</VSCodeDataGridCell>
|
<InProgressDropdown />
|
||||||
<VSCodeDataGridCell gridColumn={3}>
|
</VSCodeDataGridCell>
|
||||||
<Dropdown
|
<VSCodeDataGridCell gridColumn={4}>
|
||||||
value={modeledMethod?.input}
|
<InProgressDropdown />
|
||||||
options={inputOptions}
|
</VSCodeDataGridCell>
|
||||||
disabled={!showInputCell}
|
<VSCodeDataGridCell gridColumn={5}>
|
||||||
onChange={handleInputInput}
|
<InProgressDropdown />
|
||||||
/>
|
</VSCodeDataGridCell>
|
||||||
</VSCodeDataGridCell>
|
</>
|
||||||
<VSCodeDataGridCell gridColumn={4}>
|
)}
|
||||||
<Dropdown
|
{!props.modelingInProgress && (
|
||||||
value={modeledMethod?.output}
|
<>
|
||||||
options={outputOptions}
|
<VSCodeDataGridCell gridColumn={2}>
|
||||||
disabled={!showOutputCell}
|
<Dropdown
|
||||||
onChange={handleOutputInput}
|
value={modeledMethod?.type ?? "none"}
|
||||||
/>
|
options={modelTypeOptions}
|
||||||
</VSCodeDataGridCell>
|
onChange={handleTypeInput}
|
||||||
<VSCodeDataGridCell gridColumn={5}>
|
/>
|
||||||
<KindInput
|
</VSCodeDataGridCell>
|
||||||
kinds={predicate?.supportedKinds || []}
|
<VSCodeDataGridCell gridColumn={3}>
|
||||||
value={modeledMethod?.kind}
|
<Dropdown
|
||||||
disabled={!showKindCell}
|
value={modeledMethod?.input}
|
||||||
onChange={handleKindChange}
|
options={inputOptions}
|
||||||
/>
|
disabled={!showInputCell}
|
||||||
</VSCodeDataGridCell>
|
onChange={handleInputInput}
|
||||||
|
/>
|
||||||
|
</VSCodeDataGridCell>
|
||||||
|
<VSCodeDataGridCell gridColumn={4}>
|
||||||
|
<Dropdown
|
||||||
|
value={modeledMethod?.output}
|
||||||
|
options={outputOptions}
|
||||||
|
disabled={!showOutputCell}
|
||||||
|
onChange={handleOutputInput}
|
||||||
|
/>
|
||||||
|
</VSCodeDataGridCell>
|
||||||
|
<VSCodeDataGridCell gridColumn={5}>
|
||||||
|
<KindInput
|
||||||
|
kinds={predicate?.supportedKinds || []}
|
||||||
|
value={modeledMethod?.kind}
|
||||||
|
disabled={!showKindCell}
|
||||||
|
onChange={handleKindChange}
|
||||||
|
/>
|
||||||
|
</VSCodeDataGridCell>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
</VSCodeDataGridRow>
|
</VSCodeDataGridRow>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ type Props = {
|
|||||||
externalApiUsages: ExternalApiUsage[];
|
externalApiUsages: ExternalApiUsage[];
|
||||||
modeledMethods: Record<string, ModeledMethod>;
|
modeledMethods: Record<string, ModeledMethod>;
|
||||||
modifiedSignatures: Set<string>;
|
modifiedSignatures: Set<string>;
|
||||||
|
inProgressSignatures: Set<string>;
|
||||||
mode: Mode;
|
mode: Mode;
|
||||||
hideModeledApis: boolean;
|
hideModeledApis: boolean;
|
||||||
onChange: (
|
onChange: (
|
||||||
@@ -27,6 +28,7 @@ export const ModeledMethodDataGrid = ({
|
|||||||
externalApiUsages,
|
externalApiUsages,
|
||||||
modeledMethods,
|
modeledMethods,
|
||||||
modifiedSignatures,
|
modifiedSignatures,
|
||||||
|
inProgressSignatures,
|
||||||
mode,
|
mode,
|
||||||
hideModeledApis,
|
hideModeledApis,
|
||||||
onChange,
|
onChange,
|
||||||
@@ -37,7 +39,7 @@ export const ModeledMethodDataGrid = ({
|
|||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<VSCodeDataGrid gridTemplateColumns="0.5fr 0.125fr 0.125fr 0.125fr 0.125fr">
|
<VSCodeDataGrid gridTemplateColumns="0.5fr 0.125fr 0.125fr 0.125fr 0.125fr 0.125fr">
|
||||||
<VSCodeDataGridRow rowType="header">
|
<VSCodeDataGridRow rowType="header">
|
||||||
<VSCodeDataGridCell cellType="columnheader" gridColumn={1}>
|
<VSCodeDataGridCell cellType="columnheader" gridColumn={1}>
|
||||||
API or method
|
API or method
|
||||||
@@ -61,6 +63,9 @@ export const ModeledMethodDataGrid = ({
|
|||||||
externalApiUsage={externalApiUsage}
|
externalApiUsage={externalApiUsage}
|
||||||
modeledMethod={modeledMethods[externalApiUsage.signature]}
|
modeledMethod={modeledMethods[externalApiUsage.signature]}
|
||||||
methodIsUnsaved={modifiedSignatures.has(externalApiUsage.signature)}
|
methodIsUnsaved={modifiedSignatures.has(externalApiUsage.signature)}
|
||||||
|
modelingInProgress={inProgressSignatures.has(
|
||||||
|
externalApiUsage.signature,
|
||||||
|
)}
|
||||||
mode={mode}
|
mode={mode}
|
||||||
hideModeledApis={hideModeledApis}
|
hideModeledApis={hideModeledApis}
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ type Props = {
|
|||||||
externalApiUsages: ExternalApiUsage[];
|
externalApiUsages: ExternalApiUsage[];
|
||||||
modeledMethods: Record<string, ModeledMethod>;
|
modeledMethods: Record<string, ModeledMethod>;
|
||||||
modifiedSignatures: Set<string>;
|
modifiedSignatures: Set<string>;
|
||||||
|
inProgressSignatures: Set<string>;
|
||||||
viewState: DataExtensionEditorViewState;
|
viewState: DataExtensionEditorViewState;
|
||||||
hideModeledApis: boolean;
|
hideModeledApis: boolean;
|
||||||
onChange: (
|
onChange: (
|
||||||
@@ -41,6 +42,7 @@ export const ModeledMethodsList = ({
|
|||||||
externalApiUsages,
|
externalApiUsages,
|
||||||
modeledMethods,
|
modeledMethods,
|
||||||
modifiedSignatures,
|
modifiedSignatures,
|
||||||
|
inProgressSignatures,
|
||||||
viewState,
|
viewState,
|
||||||
hideModeledApis,
|
hideModeledApis,
|
||||||
onChange,
|
onChange,
|
||||||
@@ -84,6 +86,7 @@ export const ModeledMethodsList = ({
|
|||||||
externalApiUsages={grouped[libraryName]}
|
externalApiUsages={grouped[libraryName]}
|
||||||
modeledMethods={modeledMethods}
|
modeledMethods={modeledMethods}
|
||||||
modifiedSignatures={modifiedSignatures}
|
modifiedSignatures={modifiedSignatures}
|
||||||
|
inProgressSignatures={inProgressSignatures}
|
||||||
viewState={viewState}
|
viewState={viewState}
|
||||||
hideModeledApis={hideModeledApis}
|
hideModeledApis={hideModeledApis}
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
|
|||||||
Reference in New Issue
Block a user