-
-
Notifications
You must be signed in to change notification settings - Fork 65
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Handling Record<string, string>
Input with Superforms
#447
Comments
What is the error you're getting? This works very well for me: <script lang="ts" context="module">
type T = Record<string, unknown>;
</script>
<script lang="ts" generics="T extends Record<string, unknown>">
import { formFieldProxy, type SuperForm, type FormPathLeaves } from '$lib/index.js';
export let form: SuperForm<T>;
export let field: FormPathLeaves<T>;
$: ({ value, errors } = formFieldProxy(form, field));
</script>
<label>
{field}: <input name={field} bind:value={$value} aria-invalid={$errors ? 'true' : undefined} />
{#if $errors}<span class="invalid">{$errors}</span>{/if}
</label> <script lang="ts">
const superform = superForm(data.form, {
taintedMessage: false,
dataType: 'json'
});
</script>
<RecordField field="message.name" form={superform} /> |
Thanks for getting back in the issue. In your example you bind to the
which likely implies that
We would want to bind to the |
Just tacking on another example here for what I'd hope would one day be supported: I'm interested in accessing the constraints for a nested objects where the keys are unknown at compile time. export const CustomProperty = z.object({
type: z.enum(customPropertyTypes),
key: z.string().min(3, { message: 'Key should have at least 3 characters' }),
...
})
export const CustomPropertySchema = z.object({
classifiers: z.record(z.string(), CustomProperty),
specifiers: z.record(z.string(), CustomProperty),
});
export let ProjectInsert = createInsertSchema(project, {
metadata: CustomPropertySchema
}); The constraints object returned from running
The more deeply nested constraints are not available -- I've confirmed with @ciscoheat that this currently cannot be achieved. Note that validation DOES take the nested rules into consideration, and the errors show up in the right path. However, it would also be great to have access to the constraints of nested fields. |
Description:
We are using a Zod schema with
Record<string, string>
to support a multi-languagemessage
. Our schema is defined as follows:This allows inputs such as:
Our goal is to build a custom component that accepts the
message
key as input and displays the various messages within a single component. While this works fine for single values (e.g.,message: "hello"
), we are unable to correctly pass theRecord
based message to a component.Current Implementation:
Here is our current code, which does not have the correct type for the
field
value. Typically, you would useFormPathLeaves<T>
directly, but that is not possible withRecord
. Additionally, the code has incorrect types for the$errors
and$value
stores, as it treats them as singular values.Question:
What is the correct way to handle a
Record<string, string>
based input when using Superforms?Expected Behavior:
We need a solution that correctly types the
field
value and ensures the$errors
and$value
stores are correctly typed asRecord<string, string>
.Any guidance or examples on how to achieve this would be greatly appreciated. Thank you!
The text was updated successfully, but these errors were encountered: