diff --git a/modelina-website/src/components/playground/GeneratedModels.tsx b/modelina-website/src/components/playground/GeneratedModels.tsx index 6665c4e044..2c17c9b200 100644 --- a/modelina-website/src/components/playground/GeneratedModels.tsx +++ b/modelina-website/src/components/playground/GeneratedModels.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useContext, useState } from 'react'; import { PlaygroundGeneratedContext } from '../contexts/PlaygroundGeneratedContext'; import MonacoEditorWrapper from '../MonacoEditorWrapper'; @@ -7,61 +7,42 @@ interface GeneratedModelsComponentProps { setNewQuery?: (queryKey: string, queryValue: string) => void; } -type GeneratedModelsComponentState = { - selectedModel?: string; -}; -class GeneratedModelsComponent extends React.Component< - GeneratedModelsComponentProps, - GeneratedModelsComponentState -> { - static contextType = PlaygroundGeneratedContext; - declare context: React.ContextType; - constructor(props: GeneratedModelsComponentProps) { - super(props); - this.setNewQuery = this.setNewQuery.bind(this); - this.state = { - selectedModel: '' - }; - } +const GeneratedModelsComponent: React.FC = ({ + showAllInOneFile, + setNewQuery, +}) => { + const context = useContext(PlaygroundGeneratedContext); + const [selectedModel, setSelectedModel] = useState(''); - setNewQuery(modelName: string) { - if (this.props.setNewQuery) { - this.props.setNewQuery('selectedModel', modelName); - } - this.setState({ ...this.state, selectedModel: modelName }); - } - - toShow() { + const toShow = () => { let selectedCode = ''; - let selectedModel = this.state.selectedModel; - if (this.context) { - if (this.props.showAllInOneFile === true) { - //Merge all models together - selectedCode = this.context.models - .map((model: any) => `${model.code}`) - .join('\n\n'); - } else if (this.state.selectedModel !== undefined && this.context.models) { - for (const model of this.context.models) { - if (model.name === this.state.selectedModel) { + let updatedSelectedModel = selectedModel; + + if (context) { + if (showAllInOneFile === true) { + selectedCode = context.models.map((model: any) => `${model.code}`).join('\n\n'); + } else if (selectedModel !== undefined && context.models) { + for (const model of context.models) { + if (model.name === selectedModel) { selectedCode = model.code; break; } } } - if (selectedCode === '' && (this.context.models && this.context.models.length > 0)) { - //If the model is not found default to first one - const defaultModel = this.context.models[0]; + if (selectedCode === '' && (context.models && context.models.length > 0)) { + const defaultModel = context.models[0]; selectedCode = defaultModel.code; - selectedModel = defaultModel.name; + updatedSelectedModel = defaultModel.name; } } - return { selectedCode, selectedModel }; - } - renderModels(selectedModel = '') { - if(this.context?.models){ - return this.context?.models.map((model, index) => { + return { selectedCode, updatedSelectedModel }; + }; + + const renderModels = (selectedModel = '') => { + if (context?.models) { + return context?.models.map((model, index) => { let backgroundColor; if (model.name === selectedModel) { backgroundColor = 'bg-blue-100'; @@ -72,7 +53,8 @@ class GeneratedModelsComponent extends React.Component<
{ - this.setNewQuery(model.name); + setNewQuery && setNewQuery('selectedModel', model.name); + setSelectedModel(model.name); }} className={`${backgroundColor} px-4 py-5 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6`} > @@ -80,48 +62,46 @@ class GeneratedModelsComponent extends React.Component<
); }); - }; - } - - render() { - const { selectedCode, selectedModel } = this.toShow(); - const modelsToRender = this.renderModels(selectedModel); - if (this.props.showAllInOneFile === true) { - return ( -
- -
- ); } + }; + + const { selectedCode, updatedSelectedModel } = toShow(); + const modelsToRender = renderModels(updatedSelectedModel); + + if (showAllInOneFile === true) { return ( -
-
-
-

- Generated Models -

-

- This list contains all the generated models, select one to show - their generated code -

-
-
-
{modelsToRender}
-
-
-
- -
+
+
); } -} + + return ( +
+
+
+

Generated Models

+

+ This list contains all the generated models, select one to show their generated code +

+
+
+
{modelsToRender}
+
+
+
+ +
+
+ ); +}; + export default GeneratedModelsComponent; \ No newline at end of file diff --git a/modelina-website/src/components/playground/Playground.tsx b/modelina-website/src/components/playground/Playground.tsx index b9d9782bc6..58171a0c6f 100644 --- a/modelina-website/src/components/playground/Playground.tsx +++ b/modelina-website/src/components/playground/Playground.tsx @@ -326,7 +326,7 @@ const Playground: React.FC = (props) => { return (
{ - !isLoaded + isLoaded ?
Loading Modelina Playground. Rendering playground components...