Skip to content

Commit 59b2231

Browse files
committed
wip
1 parent 6311b96 commit 59b2231

File tree

6 files changed

+63
-43
lines changed

6 files changed

+63
-43
lines changed

packages/react-inertia/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
"laravel-precognition-react": "0.1.0"
3535
},
3636
"devDependencies": {
37+
"@types/react-dom": "^18.2.4",
3738
"typescript": "^5.0.0"
3839
}
3940
}

packages/react-inertia/src/index.ts

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Config, NamedInputEvent, RequestMethod, SimpleValidationErrors, toSimpleValidationErrors, ValidationConfig, ValidationErrors } from 'laravel-precognition'
2-
import { useForm as useVueForm } from 'laravel-precognition-vue'
3-
import { useForm as useInertiaForm } from '@inertiajs/vue3'
2+
import { useForm as useReactForm } from 'laravel-precognition-react'
3+
import { useForm as useInertiaForm } from '@inertiajs/react'
44

55
export const useForm = <Data extends Record<string, unknown>>(method: RequestMethod, url: string, inputs: Data, config: ValidationConfig = {}): any => {
66
/**
@@ -9,19 +9,19 @@ export const useForm = <Data extends Record<string, unknown>>(method: RequestMet
99
const inertiaForm = useInertiaForm(inputs)
1010

1111
/**
12-
* The Vue form.
12+
* The React form.
1313
*/
14-
const vueForm = useVueForm(method, url, inputs, config)
14+
const precognitiveForm = useReactForm(method, url, inputs, config)
1515

1616
/**
1717
* Setup event listeners.
1818
*/
19-
vueForm.validator().on('errorsChanged', () => {
19+
precognitiveForm.validator().on('errorsChanged', () => {
2020
inertiaClearErrors()
2121

2222
inertiaSetError(
2323
// @ts-expect-error
24-
toSimpleValidationErrors(vueForm.validator().errors())
24+
toSimpleValidationErrors(precognitiveForm.validator().errors())
2525
)
2626
})
2727

@@ -45,30 +45,42 @@ export const useForm = <Data extends Record<string, unknown>>(method: RequestMet
4545
*/
4646
const inertiaSetError = inertiaForm.setError.bind(inertiaForm)
4747

48+
/**
49+
* The Inertia set data function.
50+
*/
51+
const inertiaSetData = inertiaForm.setData.bind(inertiaForm)
52+
4853
/**
4954
* Patch the form.
5055
*/
5156
return Object.assign(inertiaForm, {
52-
processing: vueForm.processing,
53-
validating: vueForm.validating,
54-
touched: vueForm.touched,
55-
valid: vueForm.valid,
56-
invalid: vueForm.invalid,
57+
processing: precognitiveForm.processing,
58+
validating: precognitiveForm.validating,
59+
touched: precognitiveForm.touched,
60+
valid: precognitiveForm.valid,
61+
invalid: precognitiveForm.invalid,
62+
setData(key: any, value?: any) {
63+
inertiaSetData(key, value)
64+
65+
precognitiveForm.setData(key, value)
66+
67+
return this
68+
},
5769
clearErrors() {
5870
inertiaClearErrors()
5971

60-
vueForm.setErrors({})
72+
precognitiveForm.setErrors({})
6173

6274
return this
6375
},
6476
reset(...names: string[]) {
6577
inertiaReset(...names)
6678

67-
vueForm.reset(...names)
79+
precognitiveForm.reset(...names)
6880
},
6981
setErrors(errors: SimpleValidationErrors|ValidationErrors) {
7082
// @ts-expect-error
71-
vueForm.setErrors(errors)
83+
precognitiveForm.setErrors(errors)
7284

7385
return this
7486
},
@@ -83,14 +95,14 @@ export const useForm = <Data extends Record<string, unknown>>(method: RequestMet
8395
return this
8496
},
8597
validate(name: string|NamedInputEvent) {
86-
vueForm.setData(inertiaForm.data())
98+
precognitiveForm.setData(inertiaForm.data)
8799

88-
vueForm.validate(name)
100+
precognitiveForm.validate(name)
89101

90102
return this
91103
},
92104
setValidationTimeout(duration: number) {
93-
vueForm.setValidationTimeout(duration)
105+
precognitiveForm.setValidationTimeout(duration)
94106

95107
return this
96108
},
@@ -104,7 +116,7 @@ export const useForm = <Data extends Record<string, unknown>>(method: RequestMet
104116
const options = {
105117
...userOptions,
106118
onError: (errors: SimpleValidationErrors): any => {
107-
vueForm.validator().setErrors(errors)
119+
precognitiveForm.validator().setErrors(errors)
108120

109121
if (userOptions.onError) {
110122
return userOptions.onError(errors)

packages/react-inertia/tsconfig.json

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,7 @@
77
"resolveJsonModule": true,
88
"strict": true,
99
"declaration": true,
10-
"esModuleInterop": true,
11-
"types": [
12-
"vue"
13-
]
10+
"esModuleInterop": true
1411
},
1512
"include": [
1613
"./src/index.ts"

packages/react/src/index.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,17 @@ export const useForm = <Data extends Record<string, unknown>>(method: RequestMet
123123
return {
124124
data,
125125
setData(key, value) {
126-
const newData = cloneDeep(payload.current!)
126+
if (typeof key === 'object') {
127+
payload.current = key
127128

128-
payload.current = set(newData, key, value)
129+
setData(key)
130+
} else {
131+
const newData = cloneDeep(payload.current!)
132+
133+
payload.current = set(newData, key, value)
129134

130-
setData(payload.current)
135+
setData(payload.current)
136+
}
131137

132138
return this
133139
},
@@ -184,5 +190,8 @@ export const useForm = <Data extends Record<string, unknown>>(method: RequestMet
184190
async submit(config = {}) {
185191
return client[method](url, payload.current, resolveSubmitConfig(config))
186192
},
193+
validator() {
194+
return validator.current!
195+
}
187196
}
188197
}

packages/react/src/types.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import { Config, NamedInputEvent } from 'laravel-precognition'
1+
import { Config, NamedInputEvent, Validator } from 'laravel-precognition'
22

33
export interface Form<Data extends Record<string, unknown>> {
44
processing: boolean,
55
validating: boolean,
66
touched(name: keyof Data): boolean,
77
data: Data,
8-
setData(key: keyof Data, value: unknown): Form<Data>,
8+
setData(key: Data|keyof Data, value?: unknown): Form<Data>,
99
errors: Partial<Record<keyof Data, string>>,
1010
hasErrors: boolean,
1111
valid(name: keyof Data): boolean,
@@ -15,4 +15,5 @@ export interface Form<Data extends Record<string, unknown>> {
1515
setValidationTimeout(duration: number): Form<Data>,
1616
submit(config?: Config): Promise<unknown>,
1717
reset(...names: (keyof Partial<Data>)[]): Form<Data>,
18+
validator(): Validator,
1819
}

packages/vue-inertia/src/index.ts

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,19 @@ export const useForm = <Data extends Record<string, unknown>>(method: RequestMet
99
const inertiaForm = useInertiaForm(inputs)
1010

1111
/**
12-
* The Vue form.
12+
* The Precognitive form.
1313
*/
14-
const vueForm = useVueForm(method, url, inputs, config)
14+
const precognitiveForm = useVueForm(method, url, inputs, config)
1515

1616
/**
1717
* Setup event listeners.
1818
*/
19-
vueForm.validator().on('errorsChanged', () => {
19+
precognitiveForm.validator().on('errorsChanged', () => {
2020
inertiaClearErrors()
2121

2222
inertiaSetError(
2323
// @ts-expect-error
24-
toSimpleValidationErrors(vueForm.validator().errors())
24+
toSimpleValidationErrors(precognitiveForm.validator().errors())
2525
)
2626
})
2727

@@ -49,26 +49,26 @@ export const useForm = <Data extends Record<string, unknown>>(method: RequestMet
4949
* Patch the form.
5050
*/
5151
return Object.assign(inertiaForm, {
52-
processing: vueForm.processing,
53-
validating: vueForm.validating,
54-
touched: vueForm.touched,
55-
valid: vueForm.valid,
56-
invalid: vueForm.invalid,
52+
processing: precognitiveForm.processing,
53+
validating: precognitiveForm.validating,
54+
touched: precognitiveForm.touched,
55+
valid: precognitiveForm.valid,
56+
invalid: precognitiveForm.invalid,
5757
clearErrors() {
5858
inertiaClearErrors()
5959

60-
vueForm.setErrors({})
60+
precognitiveForm.setErrors({})
6161

6262
return this
6363
},
6464
reset(...names: string[]) {
6565
inertiaReset(...names)
6666

67-
vueForm.reset(...names)
67+
precognitiveForm.reset(...names)
6868
},
6969
setErrors(errors: SimpleValidationErrors|ValidationErrors) {
7070
// @ts-expect-error
71-
vueForm.setErrors(errors)
71+
precognitiveForm.setErrors(errors)
7272

7373
return this
7474
},
@@ -83,14 +83,14 @@ export const useForm = <Data extends Record<string, unknown>>(method: RequestMet
8383
return this
8484
},
8585
validate(name: string|NamedInputEvent) {
86-
vueForm.setData(inertiaForm.data())
86+
precognitiveForm.setData(inertiaForm.data())
8787

88-
vueForm.validate(name)
88+
precognitiveForm.validate(name)
8989

9090
return this
9191
},
9292
setValidationTimeout(duration: number) {
93-
vueForm.setValidationTimeout(duration)
93+
precognitiveForm.setValidationTimeout(duration)
9494

9595
return this
9696
},
@@ -104,7 +104,7 @@ export const useForm = <Data extends Record<string, unknown>>(method: RequestMet
104104
const options = {
105105
...userOptions,
106106
onError: (errors: SimpleValidationErrors): any => {
107-
vueForm.validator().setErrors(errors)
107+
precognitiveForm.validator().setErrors(errors)
108108

109109
if (userOptions.onError) {
110110
return userOptions.onError(errors)

0 commit comments

Comments
 (0)