import React from "react"; import { Box, Flex, Text, Flash, Button, Tooltip } from "rimble-ui"; import { VcSchema, EXAMPLE_SCHEMAS, EXAMPLE_VCS } from "vc-schema-tools"; import styled from "styled-components"; import Editor from "react-simple-code-editor"; import Prism from "prismjs"; import "prismjs/components/prism-json"; import { useDebounce } from "use-debounce"; import { H5 } from "../../layouts"; import { HighlightedJson, PrismHighlightedCodeWrap } from "../../elements/HighlightedJson/HighlightedJson"; const Pane = styled(Flex)` flex-direction: column; width: 50%; height: 94vh; `; const Section = styled(Flex)` flex-direction: column; height: 50%; `; export const SchemaPlayground: React.FunctionComponent = () => { const [inputSchema, setInputSchema] = React.useState(""); const [debouncedSchema] = useDebounce(inputSchema, 500); const [inputSchemaError, setInputSchemaError] = React.useState(); const [vcSchema, setVcSchema] = React.useState(); const [inputVc, setInputVc] = React.useState(""); const [debouncedVc] = useDebounce(inputVc, 500); const [inputVcValid, setInputVcValid] = React.useState(); const [inputVcValidityMessage, setInputVcValidityMessage] = React.useState(); const [outputContext, setOutputContext] = React.useState(""); React.useEffect(() => { setInputSchemaError(undefined); if (!debouncedSchema) { setVcSchema(undefined); return; } try { setVcSchema(new VcSchema(debouncedSchema, true)); } catch (err) { setInputSchemaError(err.message); } }, [debouncedSchema]); React.useEffect(() => { setOutputContext(vcSchema ? vcSchema.getJsonLdContextString(true) : ""); }, [vcSchema]); React.useEffect(() => { if (vcSchema && debouncedVc) { (async function () { const { isValid, message } = await vcSchema.validateVc(debouncedVc); setInputVcValid(isValid); setInputVcValidityMessage(message); })(); } else { setInputVcValid(undefined); } }, [vcSchema, debouncedVc]); return ( Examples:{" "}
JSON Schema input
Prism.highlight(inputSchema, Prism.languages.json, "json")} style={{ minHeight: "100%" }} /> {inputSchemaError && Error: {inputSchemaError}}
VC input for validation
playground @context will automatically be appended
Prism.highlight(inputVc, Prism.languages.json, "json")} style={{ minHeight: "100%" }} /> {typeof inputVcValid !== "undefined" && ( {inputVcValidityMessage} Open in{" "} vcSchema?.openJsonLdChecker(inputVc)}> JSON-LD Checker vcSchema?.openJsonLdPlaygroundPage(inputVc)}> JSON-LD Playground )}
JSON-LD @context output
); };