diff --git a/teachertool/src/components/CriteriaInstanceDisplay.tsx b/teachertool/src/components/CriteriaInstanceDisplay.tsx index 4f912acff4a..13a9b76f43b 100644 --- a/teachertool/src/components/CriteriaInstanceDisplay.tsx +++ b/teachertool/src/components/CriteriaInstanceDisplay.tsx @@ -4,7 +4,7 @@ import { CriteriaInstance, CriteriaParameterValue } from "../types/criteria"; import { logDebug } from "../services/loggingService"; import { setParameterValue } from "../transforms/setParameterValue"; import { classList } from "react-common/components/util"; -import { getReadableBlockString, splitCriteriaTemplate } from "../utils"; +import { splitCriteriaTemplate } from "../utils"; import { useContext, useEffect, useMemo, useState } from "react"; import { Input } from "react-common/components/controls/Input"; import { Button } from "react-common/components/controls/Button"; @@ -58,6 +58,57 @@ const InlineInputSegment: React.FC = ({ ); }; +interface BlockReadableNameProps { + blockData: BlockData; +} +const BlockReadableName: React.FC = ({ blockData }) => { + const [readableName, setReadableName] = useState(undefined); + + useEffect(() => { + async function updateReadableName(blockId: string | undefined) { + let blockReadableName: pxt.editor.ReadableBlockName | undefined; + if (blockId) { + blockReadableName = blockId ? await getBlockReadableName(blockId) : undefined; + } + if (blockReadableName) { + setReadableName(blockReadableName); + } else { + setReadableName({ + parts: [{ kind: "label", content: blockData.block.snippetName || blockData.block.name }], + } as pxt.editor.ReadableBlockName); + } + } + + updateReadableName(blockData.block.blockId); + }, [blockData]); + + const readableComponent = readableName?.parts.map((part, i) => { + if (part.kind === "label" || part.kind === "break") { + return ( + + {part.kind == "label" ? part.content : " "} + + ); + } else if (part.kind === "param") { + return ( + + {part.content} + + ); + } + }); + + return ( + {readableComponent ||
} + ); +}; + interface BlockInputSegmentProps { instance: CriteriaInstance; param: CriteriaParameterValue; @@ -68,7 +119,6 @@ interface BlockData { } const BlockInputSegment: React.FC = ({ instance, param }) => { const { state: teacherTool } = useContext(AppStateContext); - const [blockText, setBlockText] = useState(undefined); // Maybe makes sense to move this to use effect and handle call to setBlockText as a separate part of same use effect? const blockData = useMemo(() => { @@ -80,11 +130,6 @@ const BlockInputSegment: React.FC = ({ instance, param } for (const category of Object.values(teacherTool.toolboxCategories)) { const block = category.blocks?.find(b => b.blockId === param.value); if (block) { - async function updateBlockText(blockId: string | undefined) { - const blockReadableName = blockId ? await getBlockReadableName(blockId) : undefined; - setBlockText(blockReadableName ? blockReadableName.parts.map(part => part.content).join(" ") : undefined); - } - /* await */ updateBlockText(block.blockId); return { category, block }; } } @@ -100,9 +145,10 @@ const BlockInputSegment: React.FC = ({ instance, param } } const style = blockData ? { backgroundColor: blockData.category.color, color: "white" } : undefined; + const blockDisplay = blockData ? : null; return (