@fairys/rn-valtio-form-basic 0.0.12 → 0.0.13

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/esm/form.d.ts CHANGED
@@ -1,16 +1,25 @@
1
1
  import { FairysRNValtioFormItem, FairysRNValtioFormHideItem, FairysRNValtioFormItemBase } from './form.item';
2
2
  import { useFairysValtioFormInstance, useFairysValtioFormInstanceContext, useFairysValtioFormInstanceContextState, useFairysValtioFormInstanceContextHideState } from '@fairys/valtio-form-basic/esm/common';
3
- import type { MObject } from '@fairys/valtio-form-basic/esm/common';
3
+ import type { FairysValtioFormInstance, MObject } from '@fairys/valtio-form-basic/esm/common';
4
4
  import type { FairysValtioFormAttrsProps } from './hooks/form';
5
+ import React from 'react';
5
6
  export interface FairysRNValtioFormProps<T extends MObject<T> = object> extends FairysValtioFormAttrsProps<T> {
6
7
  }
7
- export declare function FairysRNValtioForm<T extends MObject<T> = object>(props: FairysRNValtioFormProps<T>): import("react/jsx-runtime").JSX.Element;
8
- export declare namespace FairysRNValtioForm {
9
- var useForm: typeof useFairysValtioFormInstance;
10
- var useFormState: typeof useFairysValtioFormInstanceContextState;
11
- var useFormHideState: typeof useFairysValtioFormInstanceContextHideState;
12
- var useFormInstance: typeof useFairysValtioFormInstanceContext;
13
- var FormItemBase: typeof FairysRNValtioFormItemBase;
14
- var FormItem: typeof FairysRNValtioFormItem;
15
- var FormHideItem: typeof FairysRNValtioFormHideItem;
16
- }
8
+ declare function FairysRNValtioFormBase<T extends MObject<T> = object>(props: FairysRNValtioFormProps<T>, ref: React.Ref<FairysValtioFormInstance<T>>): import("react/jsx-runtime").JSX.Element;
9
+ export declare const FairysRNValtioForm: typeof FairysRNValtioFormBase & {
10
+ /**初始化实例*/
11
+ useForm: typeof useFairysValtioFormInstance;
12
+ /**获取状态*/
13
+ useFormState: typeof useFairysValtioFormInstanceContextState;
14
+ /**获取隐藏状态*/
15
+ useFormHideState: typeof useFairysValtioFormInstanceContextHideState;
16
+ /**获取上下文实例*/
17
+ useFormInstance: typeof useFairysValtioFormInstanceContext;
18
+ /**表单项基础组件*/
19
+ FormItemBase: typeof FairysRNValtioFormItemBase;
20
+ /**表单项组件*/
21
+ FormItem: typeof FairysRNValtioFormItem;
22
+ /**隐藏表单项组件*/
23
+ FormHideItem: typeof FairysRNValtioFormHideItem;
24
+ };
25
+ export {};
package/esm/form.js CHANGED
@@ -3,8 +3,9 @@ import { FairysRNValtioFormLayout } from "./layout.js";
3
3
  import { FairysRNValtioFormHideItem, FairysRNValtioFormItem, FairysRNValtioFormItemBase } from "./form.item.js";
4
4
  import { FairysValtioFormInstanceContext, useFairysValtioFormInstance, useFairysValtioFormInstanceContext, useFairysValtioFormInstanceContextHideState, useFairysValtioFormInstanceContextState } from "@fairys/valtio-form-basic/esm/common";
5
5
  import { useFairysValtioForm } from "./hooks/form.js";
6
- function FairysRNValtioForm(props) {
7
- const { formInstance, children, ...rest } = useFairysValtioForm(props);
6
+ import react from "react";
7
+ function FairysRNValtioFormBase(props, ref) {
8
+ const { formInstance, children, ...rest } = useFairysValtioForm(props, ref);
8
9
  return /*#__PURE__*/ jsx(FairysValtioFormInstanceContext.Provider, {
9
10
  value: formInstance,
10
11
  children: /*#__PURE__*/ jsx(FairysRNValtioFormLayout, {
@@ -13,6 +14,7 @@ function FairysRNValtioForm(props) {
13
14
  })
14
15
  });
15
16
  }
17
+ const FairysRNValtioForm = /*#__PURE__*/ react.forwardRef(FairysRNValtioFormBase);
16
18
  FairysRNValtioForm.useForm = useFairysValtioFormInstance;
17
19
  FairysRNValtioForm.useFormState = useFairysValtioFormInstanceContextState;
18
20
  FairysRNValtioForm.useFormHideState = useFairysValtioFormInstanceContextHideState;
@@ -30,7 +30,7 @@ export interface FairysValtioFormAttrsProps<T extends MObject<T> = object> exten
30
30
 
31
31
  * ```
32
32
  */
33
- export declare function useFairysValtioForm<T extends MObject<T> = object>(props: FairysValtioFormAttrsProps<T>): {
33
+ export declare function useFairysValtioForm<T extends MObject<T> = object>(props: FairysValtioFormAttrsProps<T>, ref: React.Ref<FairysValtioFormInstance<T>>): {
34
34
  formInstance: FairysValtioFormInstance<T>;
35
35
  /**子元素*/
36
36
  children: ReactNode;
package/esm/hooks/form.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { useFairysValtioFormInstance } from "@fairys/valtio-form-basic/esm/common";
2
- import { useMemo } from "react";
3
- function useFairysValtioForm(props) {
2
+ import { useEffect, useImperativeHandle, useMemo } from "react";
3
+ function useFairysValtioForm(props, ref) {
4
4
  const { form, rules, formData, hideState, initFormDataType = 'deepCopy', ...rest } = props;
5
5
  const formInstance = useFairysValtioFormInstance(form);
6
6
  formInstance.rules = rules;
@@ -9,6 +9,8 @@ function useFairysValtioForm(props) {
9
9
  hideState,
10
10
  initFormDataType
11
11
  }), []);
12
+ useImperativeHandle(ref, ()=>formInstance);
13
+ useEffect(()=>()=>formInstance.clear(), []);
12
14
  return {
13
15
  ...rest,
14
16
  formInstance
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "author": "SunLxy <1011771396@qq.com>",
4
4
  "description": "rn表单框架组件",
5
5
  "homepage": "https://github.com/autumn-fairy-tales/valtio-form-basic",
6
- "version": "0.0.12",
6
+ "version": "0.0.13",
7
7
  "main": "esm/index.js",
8
8
  "types": "esm/index.d.ts",
9
9
  "module": "esm/index.js",
@@ -25,11 +25,11 @@
25
25
  "esm"
26
26
  ],
27
27
  "dependencies": {
28
- "@fairys/valtio-form-basic": "^0.0.12"
28
+ "@fairys/valtio-form-basic": "^0.0.13"
29
29
  },
30
30
  "devDependencies": {
31
- "react-native": "0.76.9",
32
31
  "@types/react": "~18.2.21",
33
- "react": "^18.0.0"
32
+ "react": "^18.0.0",
33
+ "react-native": "0.76.9"
34
34
  }
35
- }
35
+ }
package/src/form.tsx CHANGED
@@ -8,20 +8,43 @@ import {
8
8
  useFairysValtioFormInstanceContextHideState,
9
9
  } from '@fairys/valtio-form-basic/esm/common';
10
10
 
11
- import type { MObject } from '@fairys/valtio-form-basic/esm/common';
11
+ import type { FairysValtioFormInstance, MObject } from '@fairys/valtio-form-basic/esm/common';
12
12
  import type { FairysValtioFormAttrsProps } from 'hooks/form';
13
13
  import { useFairysValtioForm } from 'hooks/form';
14
+ import React from 'react';
14
15
 
15
16
  export interface FairysRNValtioFormProps<T extends MObject<T> = object> extends FairysValtioFormAttrsProps<T> {}
16
17
 
17
- export function FairysRNValtioForm<T extends MObject<T> = object>(props: FairysRNValtioFormProps<T>) {
18
- const { formInstance, children, ...rest } = useFairysValtioForm(props);
18
+ function FairysRNValtioFormBase<T extends MObject<T> = object>(
19
+ props: FairysRNValtioFormProps<T>,
20
+ ref: React.Ref<FairysValtioFormInstance<T>>,
21
+ ) {
22
+ const { formInstance, children, ...rest } = useFairysValtioForm(props, ref);
19
23
  return (
20
24
  <FairysValtioFormInstanceContext.Provider value={formInstance}>
21
25
  <FairysRNValtioFormLayout {...rest}>{children}</FairysRNValtioFormLayout>
22
26
  </FairysValtioFormInstanceContext.Provider>
23
27
  );
24
28
  }
29
+
30
+ export const FairysRNValtioForm = React.forwardRef(
31
+ FairysRNValtioFormBase,
32
+ ) as unknown as typeof FairysRNValtioFormBase & {
33
+ /**初始化实例*/
34
+ useForm: typeof useFairysValtioFormInstance;
35
+ /**获取状态*/
36
+ useFormState: typeof useFairysValtioFormInstanceContextState;
37
+ /**获取隐藏状态*/
38
+ useFormHideState: typeof useFairysValtioFormInstanceContextHideState;
39
+ /**获取上下文实例*/
40
+ useFormInstance: typeof useFairysValtioFormInstanceContext;
41
+ /**表单项基础组件*/
42
+ FormItemBase: typeof FairysRNValtioFormItemBase;
43
+ /**表单项组件*/
44
+ FormItem: typeof FairysRNValtioFormItem;
45
+ /**隐藏表单项组件*/
46
+ FormHideItem: typeof FairysRNValtioFormHideItem;
47
+ };
25
48
  /**初始化实例*/
26
49
  FairysRNValtioForm.useForm = useFairysValtioFormInstance;
27
50
  /**获取状态*/
package/src/hooks/form.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { MObject } from '@fairys/valtio-form-basic/esm/common';
2
2
  import { FairysValtioFormInstance, useFairysValtioFormInstance } from '@fairys/valtio-form-basic/esm/common';
3
- import { useMemo, type ReactNode } from 'react';
3
+ import { useMemo, type ReactNode, useImperativeHandle, useEffect } from 'react';
4
4
  import { FairysValtioFormLayoutAttrsProps } from './layout';
5
5
  import { RuleItem } from 'async-validator';
6
6
 
@@ -32,13 +32,19 @@ export interface FairysValtioFormAttrsProps<T extends MObject<T> = object> exten
32
32
 
33
33
  * ```
34
34
  */
35
- export function useFairysValtioForm<T extends MObject<T> = object>(props: FairysValtioFormAttrsProps<T>) {
35
+ export function useFairysValtioForm<T extends MObject<T> = object>(
36
+ props: FairysValtioFormAttrsProps<T>,
37
+ ref: React.Ref<FairysValtioFormInstance<T>>,
38
+ ) {
36
39
  const { form, rules, formData, hideState, initFormDataType = 'deepCopy', ...rest } = props;
37
40
  const formInstance = useFairysValtioFormInstance(form);
38
41
  /**表单规则*/
39
42
  formInstance.rules = rules;
40
43
  /**初始化表单值*/
41
44
  useMemo(() => formInstance.ctor({ formData, hideState, initFormDataType }), []);
45
+ useImperativeHandle(ref, () => formInstance);
46
+ /**卸载清空所有数据*/
47
+ useEffect(() => () => formInstance.clear(), []);
42
48
  return {
43
49
  ...rest,
44
50
  formInstance,