Skip to content

Commit 41646f6

Browse files
authored
Merge pull request #117 from classmodel/form-refactor
Form refactor
2 parents 7cdc58b + 5452613 commit 41646f6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+5237
-1005
lines changed

.github/workflows/deploy.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ jobs:
3737
run: pnpm run docs --out ../../apps/class-solid/.output/public/docs
3838
working-directory: ./packages/class
3939

40+
- name: Form example app
41+
run: |
42+
BASE_URL='/class-web/form' pnpm example:build
43+
mv example-dist ../../apps/class-solid/.output/public/form
44+
working-directory: ./packages/form
45+
4046
- name: upload artifact
4147
uses: actions/upload-pages-artifact@v3
4248
with:

.github/workflows/publish-package.yml

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ on:
55
types: [published]
66

77
jobs:
8-
publish:
8+
publish-class:
99
runs-on: ubuntu-latest
1010
steps:
1111
- uses: actions/checkout@v4
1212
- uses: pnpm/action-setup@v4
1313
- name: Setup Node
1414
uses: actions/setup-node@v4
1515
with:
16-
node-version: "20"
16+
node-version: "22"
1717
cache: "pnpm"
1818
cache-dependency-path: ./pnpm-lock.yaml
1919
registry-url: https://registry.npmjs.org/
@@ -29,3 +29,27 @@ jobs:
2929
working-directory: packages/class
3030
env:
3131
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
32+
publish-form:
33+
runs-on: ubuntu-latest
34+
steps:
35+
- uses: actions/checkout@v4
36+
- uses: pnpm/action-setup@v4
37+
- name: Setup Node
38+
uses: actions/setup-node@v4
39+
with:
40+
node-version: "22"
41+
cache: "pnpm"
42+
cache-dependency-path: ./pnpm-lock.yaml
43+
registry-url: https://registry.npmjs.org/
44+
- run: pnpm install
45+
- run: pnpm build
46+
working-directory: packages/form
47+
- run: |
48+
if [[ $GITHUB_REF_NAME == *next* ]]; then
49+
pnpm publish --tag next --no-git-checks
50+
else
51+
pnpm publish --no-git-checks
52+
fi
53+
working-directory: packages/form
54+
env:
55+
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}

.github/workflows/quality.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ jobs:
2020
- name: Setup Node
2121
uses: actions/setup-node@v4
2222
with:
23-
node-version: "20"
23+
node-version: "22"
2424
cache: "pnpm"
2525
cache-dependency-path: ./pnpm-lock.yaml
2626
- name: Install dependencies
@@ -36,7 +36,7 @@ jobs:
3636
- name: Setup Node
3737
uses: actions/setup-node@v4
3838
with:
39-
node-version: "20"
39+
node-version: "22"
4040
cache: "pnpm"
4141
cache-dependency-path: ./pnpm-lock.yaml
4242
- name: Install dependencies

.github/workflows/test.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
- name: Setup Node
2020
uses: actions/setup-node@v4
2121
with:
22-
node-version: "20"
22+
node-version: "22"
2323
cache: "pnpm"
2424
cache-dependency-path: ./pnpm-lock.yaml
2525
- name: Install dependencies
@@ -36,7 +36,7 @@ jobs:
3636
- name: Setup Node
3737
uses: actions/setup-node@v4
3838
with:
39-
node-version: "20"
39+
node-version: "22"
4040
cache: "pnpm"
4141
cache-dependency-path: ./pnpm-lock.yaml
4242
- name: Install dependencies

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ The class model can be run from the command line, see [packages/class/README.md]
2323

2424
The class model can be used a package or library, see [packages/class/README.md](packages/class/README.md#package-usage) for more information.
2525

26+
The app uses a form component that has been generalized into a package, see [packages/form/README.md](packages/form/README.md) for more information.
27+
2628
## Developers
2729

2830
This repository is a so-called monorepo, where multiple packages and application

apps/class-solid/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "class-solid",
33
"private": true,
4-
"version": "0.0.15",
4+
"version": "0.1.0",
55
"type": "module",
66
"scripts": {
77
"dev": "vinxi dev",
@@ -12,8 +12,8 @@
1212
},
1313
"dependencies": {
1414
"@classmodel/class": "workspace:*",
15+
"@classmodel/form": "workspace:*",
1516
"@kobalte/core": "^0.13.3",
16-
"@modular-forms/solid": "^0.23.0",
1717
"@solid-primitives/refs": "^1.0.8",
1818
"@solidjs/router": "^0.14.1",
1919
"@solidjs/start": "^1.0.4",
Lines changed: 6 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
import type { Config } from "@classmodel/class/config";
2-
import { pruneConfig } from "@classmodel/class/config_utils";
3-
import { type SubmitHandler, createForm } from "@modular-forms/solid";
2+
import { Form } from "@classmodel/form";
43
import { createMemo } from "solid-js";
5-
import { unwrap } from "solid-js/store";
64
import type { ExperimentConfig } from "~/lib/experiment_config";
75
import { findPresetByName } from "~/lib/presets";
8-
import { ObjectField } from "./ObjectField";
9-
import { ajvForm } from "./ajvForm";
106

117
export function ExperimentConfigForm({
128
id,
@@ -19,34 +15,13 @@ export function ExperimentConfigForm({
1915
}) {
2016
const preset = createMemo(() => findPresetByName(experiment.preset));
2117

22-
const initialValues = createMemo(() =>
23-
pruneConfig(unwrap(experiment.reference), unwrap(preset().config)),
24-
);
25-
const [_, { Form, Field }] = createForm<Config>({
26-
initialValues: initialValues(),
27-
validate: ajvForm(preset().validate),
28-
});
29-
30-
const handleSubmit: SubmitHandler<Config> = (values, event) => {
31-
// Use ajv to coerce strings to numbers and fill in defaults
32-
preset().validate(values);
33-
onSubmit(values);
34-
};
35-
3618
return (
3719
<Form
3820
id={id}
39-
onSubmit={handleSubmit}
40-
shouldActive={false} // Also return from collapsed fields
41-
shouldDirty={false} // ~Don't return empty strings for unset fields~
42-
>
43-
<div>
44-
<ObjectField
45-
schema={preset().schema}
46-
value={initialValues()}
47-
Field={Field}
48-
/>
49-
</div>
50-
</Form>
21+
onSubmit={onSubmit}
22+
values={experiment.reference}
23+
defaults={preset().config}
24+
schema={preset().schema}
25+
/>
5126
);
5227
}

apps/class-solid/src/components/ObjectField.tsx

Lines changed: 0 additions & 159 deletions
This file was deleted.

0 commit comments

Comments
 (0)