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 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.5.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/*/*"
@@ -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: FormData | Fields
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 values = useMemo(() => {
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(values)
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
- [values, props.callback]
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
- values,
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.SomeZodObject; writable: z.SomeZodObject }
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
- typeof useFormProvider<z.infer<Database[T]['writable']>,
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, callback })}
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
- typeof useFormProvider<z.infer<Database[T]['writable']>,
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<Partial<Writable>>
233
+ <FieldsProvider<Writable>
242
234
  defaults={defaults || ({} as Partial<Writable>)}
243
235
  >
244
236
  {fields => (
245
- <FormProvider<Partial<Writable>, Readable> callback={callback} data={fields.fields}>
246
- {form => children({ ...form, ...fields, callback })}
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
- typeof useFormProvider<z.infer<Database[T]['writable']>,
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>, Array<Readable>> callback={callback} data={fields.fields}>
292
- {form => children({ ...form, ...fields, callback })}
278
+ <FormProvider<ListProps<Readable>, Readable[]> callback={callback} data={fields.fields}>
279
+ {form => children({ ...form, ...fields })}
293
280
  </FormProvider>
294
281
  )}
295
282
  </FieldsProvider>