Skip to content

Commit ea086e5

Browse files
committed
[docs] Add SvelteKit integration page
1 parent 67152e7 commit ea086e5

File tree

8 files changed

+133
-4
lines changed

8 files changed

+133
-4
lines changed

.changeset/tricky-crews-behave.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"docs": minor
3+
---
4+
5+
Add SvelteKit integration page

apps/docs/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"@sjsf/form": "workspace:*",
1717
"@sjsf/shadcn-theme": "workspace:*",
1818
"@sjsf/skeleton-theme": "workspace:*",
19+
"@sjsf/sveltekit": "workspace:*",
1920
"@sjsf/zod-integration": "workspace:*",
2021
"ajv": "catalog:",
2122
"mermaid": "^11.4.0",

apps/docs/src/content/docs/_validator.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,14 @@ import {
55
DEFAULT_AJV_CONFIG,
66
} from "@sjsf/ajv8-validator";
77
import { isSchemaObjectValue } from "@sjsf/form/core";
8-
import type { Schema, SchemaValue, ValidationError } from "@sjsf/form";
8+
import {
9+
DEFAULT_ID_PREFIX,
10+
DEFAULT_ID_SEPARATOR,
11+
pathToId,
12+
type Schema,
13+
type SchemaValue,
14+
type ValidationError,
15+
} from "@sjsf/form";
916

1017
class StarValidator extends AjvValidator {
1118
validateFormData(
@@ -15,7 +22,9 @@ class StarValidator extends AjvValidator {
1522
const errors = super.validateFormData(schema, formData);
1623
return isSchemaObjectValue(formData) && !formData["star"]
1724
? errors.concat({
18-
instanceId: "root_star",
25+
instanceId: pathToId(DEFAULT_ID_PREFIX, DEFAULT_ID_SEPARATOR, [
26+
"star",
27+
]),
1928
propertyTitle: "Star",
2029
message: "I will try my best!",
2130
error: {} as ErrorObject,
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<script lang="ts">
2+
import { FormContent } from "@sjsf/form";
3+
import { createValidator } from "@sjsf/ajv8-validator";
4+
import { theme } from "@sjsf/form/basic-theme";
5+
import { translation } from "@sjsf/form/translations/en";
6+
import { useSvelteKitForm, meta } from "@sjsf/sveltekit/client";
7+
8+
import type { PageData, ActionData } from "./$types";
9+
10+
const { form, enhance } = useSvelteKitForm(
11+
meta<ActionData, PageData>(),
12+
"form",
13+
{
14+
...theme,
15+
validator: createValidator(),
16+
translation,
17+
}
18+
);
19+
</script>
20+
21+
<form
22+
use:enhance
23+
method="POST"
24+
novalidate
25+
style="display: flex; flex-direction: column; gap: 1rem"
26+
>
27+
<FormContent bind:value={form.formValue} />
28+
<button type="submit" style="padding: 0.5rem;">Submit</button>
29+
</form>
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import type { Schema } from "@sjsf/form";
2+
import { createValidator } from "@sjsf/ajv8-validator";
3+
import {
4+
initForm,
5+
makeFormDataParser,
6+
validateForm,
7+
} from "@sjsf/sveltekit/server";
8+
9+
import type { Actions } from "./$types";
10+
11+
const validator = createValidator();
12+
13+
const parseFormData = makeFormDataParser({
14+
validator,
15+
});
16+
17+
const schema: Schema = {
18+
title: "Registration form",
19+
type: "object",
20+
required: ["firstName", "lastName"],
21+
additionalProperties: {
22+
type: "string",
23+
},
24+
properties: {
25+
firstName: {
26+
type: "string",
27+
title: "First name",
28+
},
29+
lastName: {
30+
type: "string",
31+
title: "Last name",
32+
},
33+
},
34+
};
35+
36+
export const load = async () => {
37+
const form = initForm({ schema, validator, sendSchema: true });
38+
return { form };
39+
};
40+
41+
export const actions = {
42+
default: async ({ request }) => {
43+
return {
44+
form: validateForm({
45+
schema,
46+
validator,
47+
data: await parseFormData({
48+
schema,
49+
request,
50+
}),
51+
sendData: true,
52+
}),
53+
};
54+
},
55+
} satisfies Actions;
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
---
2+
title: SvelteKit
3+
sidebar:
4+
position: 2
5+
---
6+
7+
import { Code, Tabs, TabItem } from "@astrojs/starlight/components";
8+
9+
import Npm from '@/components/npm.astro';
10+
11+
import clientCode from './_sveltekit-client.svelte.invalid?raw';
12+
import serverCode from './_sveltekit-server.ts.invalid?raw';
13+
14+
## Installation
15+
16+
<Npm pkg="@sjsf/form @sjsf/sveltekit" />
17+
18+
## Example
19+
20+
<Tabs>
21+
<TabItem label='+page.svelte' >
22+
<Code code={clientCode} lang='svelte' />
23+
</TabItem>
24+
<TabItem label='+page.server.ts'>
25+
<Code code={serverCode} lang='typescript' />
26+
</TabItem>
27+
</Tabs>

mkfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ f/:
2727
pnpm run test $@
2828
popd
2929

30-
ds/:
30+
docs/:
3131
pushd apps/docs
3232
c:
3333
pnpm run check
@@ -39,7 +39,7 @@ ds/:
3939
pnpm run preview
4040
popd
4141

42-
pl/:
42+
pg/:
4343
pushd apps/playground
4444
d:
4545
pnpm run dev

pnpm-lock.yaml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)