Merge pull request #2597 from github/robertbrignull/data-view-state

Clear up how we pass around view state
This commit is contained in:
Robert
2023-07-12 10:04:39 +01:00
committed by GitHub
3 changed files with 28 additions and 28 deletions

View File

@@ -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}

View File

@@ -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" />
&nbsp;Model with AI &nbsp;Model with AI
@@ -176,8 +174,8 @@ export const LibraryRow = ({
<Codicon name="code" label="Model from source" /> <Codicon name="code" label="Model from source" />
&nbsp;Model from source &nbsp;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" />
&nbsp;Model dependency &nbsp;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 />

View File

@@ -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}