asasvirtuais 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.ts +1 -0
- package/package.json +2 -1
- package/packages/fields.tsx +1 -1
- package/packages/form.tsx +7 -6
- package/packages/react-interface.tsx +13 -26
package/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
// Silence is golden
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "asasvirtuais",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.6.0",
|
|
5
5
|
"directories": {
|
|
6
6
|
"packages": "./packages"
|
|
7
7
|
},
|
|
8
8
|
"exports": {
|
|
9
|
+
".": "./index.ts",
|
|
9
10
|
"./package.json": "./package.json",
|
|
10
11
|
"./*": "./packages/*",
|
|
11
12
|
"./*/*": "./packages/*/*"
|
package/packages/fields.tsx
CHANGED
|
@@ -4,7 +4,7 @@ import { Input, Text, Button, Image, HStack, Spinner, Textarea } from '@chakra-u
|
|
|
4
4
|
import { createContext } from 'react'
|
|
5
5
|
import z from 'zod'
|
|
6
6
|
|
|
7
|
-
type FieldsProps<T> = { defaults: T }
|
|
7
|
+
type FieldsProps<T> = { defaults: Partial<T> }
|
|
8
8
|
|
|
9
9
|
export function useFieldsProvider<T>(props: FieldsProps<T>) {
|
|
10
10
|
|
package/packages/form.tsx
CHANGED
|
@@ -3,7 +3,7 @@ import React, { createContext, useMemo } from 'react'
|
|
|
3
3
|
import { useCallback, useState } from 'react'
|
|
4
4
|
|
|
5
5
|
type Props<Fields, Result> = {
|
|
6
|
-
data:
|
|
6
|
+
data: Partial<Fields>
|
|
7
7
|
callback: (fields: Fields) => Promise<Result>
|
|
8
8
|
}
|
|
9
9
|
|
|
@@ -12,11 +12,11 @@ export function useFormProvider<Fields, Result>(props: React.PropsWithChildren<P
|
|
|
12
12
|
const [loading, setLoading] = useState(false)
|
|
13
13
|
const [error, setError] = useState<Error | null>(null)
|
|
14
14
|
|
|
15
|
-
const
|
|
15
|
+
const data = useMemo(() => {
|
|
16
16
|
if (props.data instanceof FormData)
|
|
17
17
|
return Object.fromEntries(props.data.entries()) as Fields
|
|
18
18
|
else
|
|
19
|
-
return props.data
|
|
19
|
+
return props.data as Fields
|
|
20
20
|
}, [props.data])
|
|
21
21
|
|
|
22
22
|
/** receives an event (optional) and processes the form submission using the fields state as props, stores the result or error in the respective states */
|
|
@@ -26,7 +26,7 @@ export function useFormProvider<Fields, Result>(props: React.PropsWithChildren<P
|
|
|
26
26
|
setLoading(true)
|
|
27
27
|
setError(null)
|
|
28
28
|
try {
|
|
29
|
-
const result = await props.callback(
|
|
29
|
+
const result = await props.callback(data)
|
|
30
30
|
setResult(result)
|
|
31
31
|
} catch (err) {
|
|
32
32
|
console.error(err)
|
|
@@ -37,7 +37,7 @@ export function useFormProvider<Fields, Result>(props: React.PropsWithChildren<P
|
|
|
37
37
|
}
|
|
38
38
|
return false
|
|
39
39
|
},
|
|
40
|
-
[
|
|
40
|
+
[data, props.callback]
|
|
41
41
|
)
|
|
42
42
|
|
|
43
43
|
return {
|
|
@@ -45,7 +45,8 @@ export function useFormProvider<Fields, Result>(props: React.PropsWithChildren<P
|
|
|
45
45
|
result,
|
|
46
46
|
error,
|
|
47
47
|
submit,
|
|
48
|
-
|
|
48
|
+
callback: props.callback,
|
|
49
|
+
data,
|
|
49
50
|
}
|
|
50
51
|
}
|
|
51
52
|
|
|
@@ -17,7 +17,7 @@ import { FormProvider, useForm, useFormProvider } from 'asasvirtuais/form'
|
|
|
17
17
|
export function reactInterface<
|
|
18
18
|
Database extends Record<
|
|
19
19
|
string,
|
|
20
|
-
{ readable: z.
|
|
20
|
+
{ readable: z.ZodObject<z.ZodRawShape>; writable: z.ZodObject<z.ZodRawShape> }
|
|
21
21
|
>
|
|
22
22
|
>(
|
|
23
23
|
database: Database,
|
|
@@ -170,12 +170,8 @@ export function reactInterface<
|
|
|
170
170
|
defaults?: Partial<z.infer<Database[T]['writable']>>
|
|
171
171
|
onSuccess?: (result: z.infer<Database[T]['readable']>) => void
|
|
172
172
|
children: (
|
|
173
|
-
props: ReturnType<
|
|
174
|
-
|
|
175
|
-
z.infer<Database[T]['readable']>
|
|
176
|
-
>> & ReturnType<typeof useFieldsProvider<z.infer<Database[T]['writable']>>> & {
|
|
177
|
-
callback: (fields: Partial<z.infer<Database[T]["writable"]>>) => Promise<z.infer<Database[T]["readable"]>>
|
|
178
|
-
}
|
|
173
|
+
props: ReturnType<typeof useFormProvider<z.infer<Database[T]['writable']>, z.infer<Database[T]['readable']>>>
|
|
174
|
+
& ReturnType<typeof useFields<z.infer<Database[T]['writable']>>>
|
|
179
175
|
) => React.ReactNode
|
|
180
176
|
}) {
|
|
181
177
|
type Readable = z.infer<Database[T]['readable']>
|
|
@@ -196,7 +192,7 @@ export function reactInterface<
|
|
|
196
192
|
<FieldsProvider<Writable> defaults={defaults || ({} as Writable)}>
|
|
197
193
|
{fields => (
|
|
198
194
|
<FormProvider<Writable, Readable> callback={callback} data={fields.fields}>
|
|
199
|
-
{form => children({ ...form, ...fields
|
|
195
|
+
{form => children({ ...form, ...fields })}
|
|
200
196
|
</FormProvider>
|
|
201
197
|
)}
|
|
202
198
|
</FieldsProvider>
|
|
@@ -215,12 +211,8 @@ export function reactInterface<
|
|
|
215
211
|
defaults?: Partial<z.infer<Database[T]['writable']>>
|
|
216
212
|
onSuccess?: (result: z.infer<Database[T]['readable']>) => void
|
|
217
213
|
children: (
|
|
218
|
-
props: ReturnType<
|
|
219
|
-
|
|
220
|
-
z.infer<Database[T]['readable']>
|
|
221
|
-
>> & ReturnType<typeof useFieldsProvider<z.infer<Database[T]['writable']>>> & {
|
|
222
|
-
callback: (fields: Partial<z.infer<Database[T]["writable"]>>) => Promise<z.infer<Database[T]["readable"]>>
|
|
223
|
-
}
|
|
214
|
+
props: ReturnType<typeof useFormProvider<z.infer<Database[T]['writable']>, z.infer<Database[T]['readable']>>>
|
|
215
|
+
& ReturnType<typeof useFields<z.infer<Database[T]['writable']>>>
|
|
224
216
|
) => React.ReactNode
|
|
225
217
|
}) {
|
|
226
218
|
type Readable = z.infer<Database[T]['readable']>
|
|
@@ -238,12 +230,12 @@ export function reactInterface<
|
|
|
238
230
|
)
|
|
239
231
|
|
|
240
232
|
return (
|
|
241
|
-
<FieldsProvider<
|
|
233
|
+
<FieldsProvider<Writable>
|
|
242
234
|
defaults={defaults || ({} as Partial<Writable>)}
|
|
243
235
|
>
|
|
244
236
|
{fields => (
|
|
245
|
-
<FormProvider<
|
|
246
|
-
{form => children({ ...form, ...fields
|
|
237
|
+
<FormProvider<Writable, Readable> callback={callback} data={fields.fields}>
|
|
238
|
+
{form => children({ ...form, ...fields })}
|
|
247
239
|
</FormProvider>
|
|
248
240
|
)}
|
|
249
241
|
</FieldsProvider>
|
|
@@ -260,13 +252,8 @@ export function reactInterface<
|
|
|
260
252
|
defaults?: Partial<ListProps<z.infer<Database[T]['readable']>>>
|
|
261
253
|
onSuccess?: (result: z.infer<Database[T]['readable']>[]) => void
|
|
262
254
|
children: (
|
|
263
|
-
props: ReturnType<
|
|
264
|
-
|
|
265
|
-
Array<z.infer<Database[T]['readable']>
|
|
266
|
-
>>> & ReturnType<typeof useFieldsProvider<z.infer<Database[T]['writable']>>>
|
|
267
|
-
& {
|
|
268
|
-
callback: (fields: Partial<z.infer<Database[T]["writable"]>>) => Promise<z.infer<Database[T]["readable"]>[]>
|
|
269
|
-
}
|
|
255
|
+
props: ReturnType<typeof useFormProvider<ListProps<z.infer<Database[T]['readable']>>, z.infer<Database[T]['readable']>[]>>
|
|
256
|
+
& ReturnType<typeof useFields<ListProps<z.infer<Database[T]['readable']>>>>
|
|
270
257
|
) => React.ReactNode
|
|
271
258
|
}) {
|
|
272
259
|
type Readable = z.infer<Database[T]['readable']>
|
|
@@ -288,8 +275,8 @@ export function reactInterface<
|
|
|
288
275
|
defaults={(defaults || {}) as ListProps<Readable>}
|
|
289
276
|
>
|
|
290
277
|
{fields => (
|
|
291
|
-
<FormProvider<ListProps<Readable>,
|
|
292
|
-
{form => children({ ...form, ...fields
|
|
278
|
+
<FormProvider<ListProps<Readable>, Readable[]> callback={callback} data={fields.fields}>
|
|
279
|
+
{form => children({ ...form, ...fields })}
|
|
293
280
|
</FormProvider>
|
|
294
281
|
)}
|
|
295
282
|
</FieldsProvider>
|