Skip to content

Commit 5a91897

Browse files
committed
fix: code field error only shows after submit attempt, clears as user types
1 parent aafe716 commit 5a91897

1 file changed

Lines changed: 38 additions & 30 deletions

File tree

apps/web/components/snippet-editor.tsx

Lines changed: 38 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -214,43 +214,51 @@ export function SnippetEditor() {
214214
<form.Field
215215
name="code"
216216
validators={{
217-
onBlur: ({ value }) => {
217+
onChange: ({ value }) => {
218+
const r = codeSchema.safeParse(value.trim())
219+
return r.success ? undefined : r.error.issues[0].message
220+
},
221+
onSubmit: ({ value }) => {
218222
const r = codeSchema.safeParse(value.trim())
219223
return r.success ? undefined : r.error.issues[0].message
220224
},
221225
}}
222226
>
223227
{(field) => (
224-
<div className={cn(field.state.meta.errors.length > 0 && "ring-1 ring-inset ring-destructive/40")}>
225-
<form.Subscribe selector={(s) => s.values.language}>
226-
{(language) => (
227-
<CodeMirror
228-
value={field.state.value}
229-
onChange={(val) => field.handleChange(val)}
230-
theme={vscodeDark}
231-
extensions={[
232-
...(getLanguageExtension(language as Language)
233-
? [getLanguageExtension(language as Language)!]
234-
: []),
235-
]}
236-
minHeight="240px"
237-
basicSetup={{
238-
lineNumbers: true,
239-
foldGutter: false,
240-
highlightActiveLine: true,
241-
autocompletion: true,
242-
}}
243-
className="text-sm"
244-
style={{ fontFamily: "var(--font-mono, ui-monospace, monospace)" }}
245-
/>
246-
)}
247-
</form.Subscribe>
248-
{field.state.meta.errors.length > 0 && (
249-
<p className="px-4 py-2 text-xs text-destructive bg-destructive/5">
250-
{String(field.state.meta.errors[0])}
251-
</p>
228+
<form.Subscribe selector={(s) => s.submissionAttempts}>
229+
{(attempts) => (
230+
<div className={cn(attempts > 0 && field.state.meta.errors.length > 0 && "ring-1 ring-inset ring-destructive/40")}>
231+
<form.Subscribe selector={(s) => s.values.language}>
232+
{(language) => (
233+
<CodeMirror
234+
value={field.state.value}
235+
onChange={(val) => field.handleChange(val)}
236+
theme={vscodeDark}
237+
extensions={[
238+
...(getLanguageExtension(language as Language)
239+
? [getLanguageExtension(language as Language)!]
240+
: []),
241+
]}
242+
minHeight="240px"
243+
basicSetup={{
244+
lineNumbers: true,
245+
foldGutter: false,
246+
highlightActiveLine: true,
247+
autocompletion: true,
248+
}}
249+
className="text-sm"
250+
style={{ fontFamily: "var(--font-mono, ui-monospace, monospace)" }}
251+
/>
252+
)}
253+
</form.Subscribe>
254+
{attempts > 0 && field.state.meta.errors.length > 0 && (
255+
<p className="px-4 py-2 text-xs text-destructive bg-destructive/5">
256+
{String(field.state.meta.errors[0])}
257+
</p>
258+
)}
259+
</div>
252260
)}
253-
</div>
261+
</form.Subscribe>
254262
)}
255263
</form.Field>
256264

0 commit comments

Comments
 (0)