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
-
+
- {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 (
-
+
+
+
);
};