diff --git a/src/client/Preview.tsx b/src/client/Preview.tsx index 5455e67..a0f01a5 100644 --- a/src/client/Preview.tsx +++ b/src/client/Preview.tsx @@ -31,10 +31,18 @@ import { LoaderIcon, PlayIcon, ScrollTextIcon, + SearchCodeIcon, XIcon, } from "lucide-react"; import { AnimatePresence, motion } from "motion/react"; -import { type FC, useCallback, useEffect, useMemo, useState } from "react"; +import { + type FC, + type PropsWithChildren, + useCallback, + useEffect, + useMemo, + useState, +} from "react"; import { useSearchParams } from "react-router"; import { Select, @@ -196,7 +204,7 @@ export const Preview: FC = () => { ($errors.show && $errors.diagnostics.length > 0) } className={cn( - "flex h-full w-full flex-col items-start gap-6 p-6 ", + "flex h-full w-full flex-col items-start gap-4 p-5 ", ($wasmState !== "loaded" || ($errors.show && $errors.diagnostics.length > 0)) && "pointer-events-none", @@ -226,16 +234,7 @@ export const Preview: FC = () => { ) : null} -
- - -
+ } {$parameters.length === 0 ? ( @@ -247,6 +246,12 @@ export const Preview: FC = () => {
)} +
+ + +
@@ -486,15 +491,17 @@ const LogsEmptyState = () => { type LogProps = { log: ParserLog }; const Log: FC = ({ log }) => { - const [showTable, setShowTable] = useState(() => false); + const data = Object.entries(log).reduce>( + (acc, [key, value]) => { + acc[key] = value; + return acc; + }, + {}, + ); return ( - setShowTable(() => show)} - > - + + + ); +}; + +type FormProps = { parameters: ParameterWithSource[] }; + +const Form: FC = ({ parameters }) => { + return parameters + .sort((a, b) => a.order - b.order) + .map((p, index) => ); +}; + +type FormElementProps = { parameter: ParameterWithSource }; +const FormElement: FC = ({ parameter }) => { + const $form = useStore((state) => state.form); + const $setForm = useStore((state) => state.setFormState); + + const value = useMemo( + () => + $form[parameter.name] ?? + (parameter.default_value.value === "??" + ? "" + : parameter.default_value.value), + [$form, parameter], + ); + + const onValueChange = (value: string) => { + $setForm(parameter.name, value); + }; + + return ( + + ); +}; + +const UserSelect: FC = () => { + const $setWorkspaceOwner = useStore((state) => state.setWorkspaceOwner); + + return ( + + ); +}; + +type TableDrawerProps = { + data: Record; + headers?: [string, string]; +} & PropsWithChildren; + +const TableDrawer: FC = ({ + data, + headers = ["field", "value"], + children, +}) => { + const [showTable, setShowTable] = useState(() => false); + + return ( + setShowTable(() => show)} + > + {children} @@ -528,11 +619,11 @@ const Log: FC = ({ log }) => { initial={{ opacity: 0, transform: "translateX(100px)" }} animate={{ opacity: 1, transform: "translateX(0px)" }} exit={{ opacity: 0, transform: "translateX(100px)" }} - className="fixed top-0 right-0 z-20 flex h-full w-full max-w-md flex-col justify-start gap-6 border-l bg-surface-primary p-4" + className="fixed top-0 right-0 z-20 flex h-full w-full max-w-lg flex-col justify-start gap-6 border-l bg-surface-primary p-4" >
- Log + Parameter Values
-
+
-

field

+

{headers[0]}

-

value

+

{headers[1]}

- {Object.entries(log).map(([key, value], index) => { + {Object.entries(data).map(([key, value], index) => { const displayValue = JSON.stringify(value); return ( @@ -593,63 +684,29 @@ const Log: FC = ({ log }) => { ); }; -type FormProps = { parameters: ParameterWithSource[] }; - -const Form: FC = ({ parameters }) => { - return parameters - .sort((a, b) => a.order - b.order) - .map((p, index) => ); -}; - -type FormElementProps = { parameter: ParameterWithSource }; -const FormElement: FC = ({ parameter }) => { - const $form = useStore((state) => state.form); - const $setForm = useStore((state) => state.setFormState); +const ViewOutput: FC = () => { + const $parameters = useStore((state) => state.parameters); - const value = useMemo( - () => - $form[parameter.name] ?? - (parameter.default_value.value === "??" - ? "" - : parameter.default_value.value), - [$form, parameter], + const isInvalid = useMemo( + () => $parameters.length === 0 || $parameters.some((p) => !p.value.valid), + [$parameters], ); - const onValueChange = (value: string) => { - $setForm(parameter.name, value); - }; - - return ( - + const data = useMemo( + () => + $parameters.reduce>((acc, p) => { + acc[p.name] = p.value.value; + return acc; + }, {}), + [$parameters], ); -}; - -const UserSelect: FC = () => { - const $setWorkspaceOwner = useStore((state) => state.setWorkspaceOwner); return ( - + + + ); };