Merge pull request #2597 from github/robertbrignull/data-view-state
Clear up how we pass around view state
This commit is contained in:
@@ -19,6 +19,13 @@ import { percentFormatter } from "./formatters";
|
|||||||
import { Mode } from "../../data-extensions-editor/shared/mode";
|
import { Mode } from "../../data-extensions-editor/shared/mode";
|
||||||
import { groupMethods } from "../../data-extensions-editor/shared/sorting";
|
import { groupMethods } from "../../data-extensions-editor/shared/sorting";
|
||||||
|
|
||||||
|
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;
|
||||||
`;
|
`;
|
||||||
@@ -239,6 +246,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 && (
|
||||||
@@ -252,25 +263,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>
|
||||||
@@ -290,17 +297,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
|
||||||
@@ -313,7 +320,6 @@ export function DataExtensionsEditor({
|
|||||||
unsavedModels={unsavedModels}
|
unsavedModels={unsavedModels}
|
||||||
modeledMethods={modeledMethods}
|
modeledMethods={modeledMethods}
|
||||||
viewState={viewState}
|
viewState={viewState}
|
||||||
mode={viewState?.mode ?? Mode.Application}
|
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
onSaveModelClick={onSaveModelClick}
|
onSaveModelClick={onSaveModelClick}
|
||||||
onGenerateFromLlmClick={onGenerateFromLlmClick}
|
onGenerateFromLlmClick={onGenerateFromLlmClick}
|
||||||
|
|||||||
@@ -70,8 +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;
|
|
||||||
hasUnsavedChanges: boolean;
|
hasUnsavedChanges: boolean;
|
||||||
onChange: (
|
onChange: (
|
||||||
modelName: string,
|
modelName: string,
|
||||||
@@ -95,7 +94,6 @@ export const LibraryRow = ({
|
|||||||
externalApiUsages,
|
externalApiUsages,
|
||||||
modeledMethods,
|
modeledMethods,
|
||||||
viewState,
|
viewState,
|
||||||
mode,
|
|
||||||
hasUnsavedChanges,
|
hasUnsavedChanges,
|
||||||
onChange,
|
onChange,
|
||||||
onSaveModelClick,
|
onSaveModelClick,
|
||||||
@@ -166,7 +164,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 +174,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
|
||||||
@@ -190,7 +188,7 @@ export const LibraryRow = ({
|
|||||||
<ModeledMethodDataGrid
|
<ModeledMethodDataGrid
|
||||||
externalApiUsages={externalApiUsages}
|
externalApiUsages={externalApiUsages}
|
||||||
modeledMethods={modeledMethods}
|
modeledMethods={modeledMethods}
|
||||||
mode={mode}
|
mode={viewState.mode}
|
||||||
onChange={onChangeWithModelName}
|
onChange={onChangeWithModelName}
|
||||||
/>
|
/>
|
||||||
<SectionDivider />
|
<SectionDivider />
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import { useMemo } from "react";
|
|||||||
import { ExternalApiUsage } from "../../data-extensions-editor/external-api-usage";
|
import { ExternalApiUsage } from "../../data-extensions-editor/external-api-usage";
|
||||||
import { ModeledMethod } from "../../data-extensions-editor/modeled-method";
|
import { ModeledMethod } from "../../data-extensions-editor/modeled-method";
|
||||||
import { LibraryRow } from "./LibraryRow";
|
import { LibraryRow } from "./LibraryRow";
|
||||||
import { Mode } from "../../data-extensions-editor/shared/mode";
|
|
||||||
import {
|
import {
|
||||||
groupMethods,
|
groupMethods,
|
||||||
sortGroupNames,
|
sortGroupNames,
|
||||||
@@ -14,8 +13,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;
|
|
||||||
onChange: (
|
onChange: (
|
||||||
modelName: string,
|
modelName: string,
|
||||||
externalApiUsage: ExternalApiUsage,
|
externalApiUsage: ExternalApiUsage,
|
||||||
@@ -38,15 +36,14 @@ export const ModeledMethodsList = ({
|
|||||||
unsavedModels,
|
unsavedModels,
|
||||||
modeledMethods,
|
modeledMethods,
|
||||||
viewState,
|
viewState,
|
||||||
mode,
|
|
||||||
onChange,
|
onChange,
|
||||||
onSaveModelClick,
|
onSaveModelClick,
|
||||||
onGenerateFromLlmClick,
|
onGenerateFromLlmClick,
|
||||||
onGenerateFromSourceClick,
|
onGenerateFromSourceClick,
|
||||||
}: Props) => {
|
}: Props) => {
|
||||||
const grouped = useMemo(
|
const grouped = useMemo(
|
||||||
() => groupMethods(externalApiUsages, mode),
|
() => groupMethods(externalApiUsages, viewState.mode),
|
||||||
[externalApiUsages, mode],
|
[externalApiUsages, viewState.mode],
|
||||||
);
|
);
|
||||||
|
|
||||||
const sortedGroupNames = useMemo(() => sortGroupNames(grouped), [grouped]);
|
const sortedGroupNames = useMemo(() => sortGroupNames(grouped), [grouped]);
|
||||||
@@ -61,7 +58,6 @@ export const ModeledMethodsList = ({
|
|||||||
hasUnsavedChanges={unsavedModels.has(libraryName)}
|
hasUnsavedChanges={unsavedModels.has(libraryName)}
|
||||||
modeledMethods={modeledMethods}
|
modeledMethods={modeledMethods}
|
||||||
viewState={viewState}
|
viewState={viewState}
|
||||||
mode={mode}
|
|
||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
onSaveModelClick={onSaveModelClick}
|
onSaveModelClick={onSaveModelClick}
|
||||||
onGenerateFromLlmClick={onGenerateFromLlmClick}
|
onGenerateFromLlmClick={onGenerateFromLlmClick}
|
||||||
|
|||||||
Reference in New Issue
Block a user