Enforce that viewState is defined and show a loading screen otherwise
This commit is contained in:
@@ -18,6 +18,13 @@ import { ModeledMethodsList } from "./ModeledMethodsList";
|
|||||||
import { percentFormatter } from "./formatters";
|
import { percentFormatter } from "./formatters";
|
||||||
import { Mode } from "../../data-extensions-editor/shared/mode";
|
import { Mode } from "../../data-extensions-editor/shared/mode";
|
||||||
|
|
||||||
|
const LoadingContainer = styled.div`
|
||||||
|
text-align: center;
|
||||||
|
padding: 1em;
|
||||||
|
font-size: x-large;
|
||||||
|
font-weight: 600;
|
||||||
|
`;
|
||||||
|
|
||||||
const DataExtensionsEditorContainer = styled.div`
|
const DataExtensionsEditorContainer = styled.div`
|
||||||
margin-top: 1rem;
|
margin-top: 1rem;
|
||||||
`;
|
`;
|
||||||
@@ -223,6 +230,10 @@ export function DataExtensionsEditor({
|
|||||||
});
|
});
|
||||||
}, [viewState?.mode]);
|
}, [viewState?.mode]);
|
||||||
|
|
||||||
|
if (viewState === undefined) {
|
||||||
|
return <LoadingContainer>Loading...</LoadingContainer>;
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<DataExtensionsEditorContainer>
|
<DataExtensionsEditorContainer>
|
||||||
{progress.maxStep > 0 && (
|
{progress.maxStep > 0 && (
|
||||||
@@ -236,25 +247,21 @@ export function DataExtensionsEditor({
|
|||||||
<>
|
<>
|
||||||
<ViewTitle>Data extensions editor</ViewTitle>
|
<ViewTitle>Data extensions editor</ViewTitle>
|
||||||
<DetailsContainer>
|
<DetailsContainer>
|
||||||
{viewState?.extensionPack && (
|
<LinkIconButton onClick={onOpenExtensionPackClick}>
|
||||||
<>
|
<span slot="start" className="codicon codicon-package"></span>
|
||||||
<LinkIconButton onClick={onOpenExtensionPackClick}>
|
{viewState.extensionPack.name}
|
||||||
<span slot="start" className="codicon codicon-package"></span>
|
</LinkIconButton>
|
||||||
{viewState.extensionPack.name}
|
|
||||||
</LinkIconButton>
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
<div>
|
<div>
|
||||||
{percentFormatter.format(modeledPercentage / 100)} modeled
|
{percentFormatter.format(modeledPercentage / 100)} modeled
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
{percentFormatter.format(unModeledPercentage / 100)} unmodeled
|
{percentFormatter.format(unModeledPercentage / 100)} unmodeled
|
||||||
</div>
|
</div>
|
||||||
{viewState?.enableFrameworkMode && (
|
{viewState.enableFrameworkMode && (
|
||||||
<>
|
<>
|
||||||
<div>
|
<div>
|
||||||
Mode:{" "}
|
Mode:{" "}
|
||||||
{viewState?.mode === Mode.Framework
|
{viewState.mode === Mode.Framework
|
||||||
? "Framework"
|
? "Framework"
|
||||||
: "Application"}
|
: "Application"}
|
||||||
</div>
|
</div>
|
||||||
@@ -274,17 +281,17 @@ export function DataExtensionsEditor({
|
|||||||
<EditorContainer>
|
<EditorContainer>
|
||||||
<ButtonsContainer>
|
<ButtonsContainer>
|
||||||
<VSCodeButton onClick={onSaveAllClick}>Apply</VSCodeButton>
|
<VSCodeButton onClick={onSaveAllClick}>Apply</VSCodeButton>
|
||||||
{viewState?.enableFrameworkMode && (
|
{viewState.enableFrameworkMode && (
|
||||||
<VSCodeButton appearance="secondary" onClick={onRefreshClick}>
|
<VSCodeButton appearance="secondary" onClick={onRefreshClick}>
|
||||||
Refresh
|
Refresh
|
||||||
</VSCodeButton>
|
</VSCodeButton>
|
||||||
)}
|
)}
|
||||||
<VSCodeButton onClick={onGenerateFromSourceClick}>
|
<VSCodeButton onClick={onGenerateFromSourceClick}>
|
||||||
{viewState?.mode === Mode.Framework
|
{viewState.mode === Mode.Framework
|
||||||
? "Generate"
|
? "Generate"
|
||||||
: "Download and generate"}
|
: "Download and generate"}
|
||||||
</VSCodeButton>
|
</VSCodeButton>
|
||||||
{viewState?.showLlmButton && (
|
{viewState.showLlmButton && (
|
||||||
<>
|
<>
|
||||||
<VSCodeButton onClick={onGenerateAllFromLlmClick}>
|
<VSCodeButton onClick={onGenerateAllFromLlmClick}>
|
||||||
Generate using LLM
|
Generate using LLM
|
||||||
@@ -297,7 +304,7 @@ export function DataExtensionsEditor({
|
|||||||
unsavedModels={unsavedModels}
|
unsavedModels={unsavedModels}
|
||||||
modeledMethods={modeledMethods}
|
modeledMethods={modeledMethods}
|
||||||
viewState={viewState}
|
viewState={viewState}
|
||||||
mode={viewState?.mode ?? Mode.Application}
|
mode={viewState.mode}
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
onSaveModelClick={onSaveModelClick}
|
onSaveModelClick={onSaveModelClick}
|
||||||
onGenerateFromLlmClick={onGenerateFromLlmClick}
|
onGenerateFromLlmClick={onGenerateFromLlmClick}
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ type Props = {
|
|||||||
title: string;
|
title: string;
|
||||||
externalApiUsages: ExternalApiUsage[];
|
externalApiUsages: ExternalApiUsage[];
|
||||||
modeledMethods: Record<string, ModeledMethod>;
|
modeledMethods: Record<string, ModeledMethod>;
|
||||||
viewState: DataExtensionEditorViewState | undefined;
|
viewState: DataExtensionEditorViewState;
|
||||||
mode: Mode;
|
mode: Mode;
|
||||||
hasUnsavedChanges: boolean;
|
hasUnsavedChanges: boolean;
|
||||||
onChange: (
|
onChange: (
|
||||||
@@ -166,7 +166,7 @@ export const LibraryRow = ({
|
|||||||
</ModeledPercentage>
|
</ModeledPercentage>
|
||||||
{hasUnsavedChanges ? <VSCodeTag>UNSAVED</VSCodeTag> : null}
|
{hasUnsavedChanges ? <VSCodeTag>UNSAVED</VSCodeTag> : null}
|
||||||
</NameContainer>
|
</NameContainer>
|
||||||
{viewState?.showLlmButton && (
|
{viewState.showLlmButton && (
|
||||||
<VSCodeButton appearance="icon" onClick={handleModelWithAI}>
|
<VSCodeButton appearance="icon" onClick={handleModelWithAI}>
|
||||||
<Codicon name="lightbulb-autofix" label="Model with AI" />
|
<Codicon name="lightbulb-autofix" label="Model with AI" />
|
||||||
Model with AI
|
Model with AI
|
||||||
@@ -176,8 +176,8 @@ export const LibraryRow = ({
|
|||||||
<Codicon name="code" label="Model from source" />
|
<Codicon name="code" label="Model from source" />
|
||||||
Model from source
|
Model from source
|
||||||
</VSCodeButton>
|
</VSCodeButton>
|
||||||
{viewState?.enableFrameworkMode &&
|
{viewState.enableFrameworkMode &&
|
||||||
viewState?.mode === Mode.Application && (
|
viewState.mode === Mode.Application && (
|
||||||
<VSCodeButton appearance="icon" onClick={handleModelDependency}>
|
<VSCodeButton appearance="icon" onClick={handleModelDependency}>
|
||||||
<Codicon name="references" label="Model dependency" />
|
<Codicon name="references" label="Model dependency" />
|
||||||
Model dependency
|
Model dependency
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ type Props = {
|
|||||||
externalApiUsages: ExternalApiUsage[];
|
externalApiUsages: ExternalApiUsage[];
|
||||||
unsavedModels: Set<string>;
|
unsavedModels: Set<string>;
|
||||||
modeledMethods: Record<string, ModeledMethod>;
|
modeledMethods: Record<string, ModeledMethod>;
|
||||||
viewState: DataExtensionEditorViewState | undefined;
|
viewState: DataExtensionEditorViewState;
|
||||||
mode: Mode;
|
mode: Mode;
|
||||||
onChange: (
|
onChange: (
|
||||||
modelName: string,
|
modelName: string,
|
||||||
|
|||||||
Reference in New Issue
Block a user