@fairys/rn-valtio-form-basic 0.0.13 → 1.0.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/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.13",
6
+ "version": "1.0.0",
7
7
  "main": "esm/index.js",
8
8
  "types": "esm/index.d.ts",
9
9
  "module": "esm/index.js",
@@ -25,7 +25,7 @@
25
25
  "esm"
26
26
  ],
27
27
  "dependencies": {
28
- "@fairys/valtio-form-basic": "^0.0.13"
28
+ "@fairys/valtio-form-basic": "^1.0.0"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@types/react": "~18.2.21",
package/src/form.item.tsx CHANGED
@@ -12,9 +12,9 @@ import { formItemStyles } from './styles/form.item';
12
12
  import type { FairysValtioFormItemAttrsProps } from './hooks/form.item';
13
13
  import { useFairysValtioFormItemAttrs, useFairysValtioFormItemNoStyleAttrs } from 'hooks/form.item';
14
14
 
15
- export interface FairysRNValtioFormItemProps<T extends MObject<T> = object>
15
+ export interface FairysRNValtioFormItemProps<T extends MObject<T> = Record<string, any>>
16
16
  extends Omit<ViewProps, 'style'>,
17
- FairysValtioFormItemAttrsProps {
17
+ FairysValtioFormItemAttrsProps<T> {
18
18
  /**是否使用控制隐藏的表单项*/
19
19
  isHide?: boolean;
20
20
  /**是否使用无样式表单项*/
@@ -22,7 +22,7 @@ export interface FairysRNValtioFormItemProps<T extends MObject<T> = object>
22
22
  }
23
23
 
24
24
  /**普通表单项*/
25
- export function FairysRNValtioFormItemBase<T extends MObject<T> = object>(
25
+ export function FairysRNValtioFormItemBase<T extends MObject<T> = Record<string, any>>(
26
26
  props: Omit<FairysRNValtioFormItemProps<T>, 'isHide' | 'noStyle'>,
27
27
  ) {
28
28
  const { label, extra, helpText } = props;
@@ -99,7 +99,7 @@ export function FairysRNValtioFormItemBase<T extends MObject<T> = object>(
99
99
  );
100
100
  }
101
101
  /**控制隐藏的表单项*/
102
- export function FairysRNValtioFormHideItem<T extends MObject<T> = object>(
102
+ export function FairysRNValtioFormHideItem<T extends MObject<T> = Record<string, any>>(
103
103
  props: Omit<FairysRNValtioFormItemProps<T>, 'isHide' | 'noStyle'>,
104
104
  ) {
105
105
  const [state] = useFairysValtioFormInstanceContextHideState();
@@ -111,7 +111,7 @@ export function FairysRNValtioFormHideItem<T extends MObject<T> = object>(
111
111
  }
112
112
 
113
113
  /**无样式表单项*/
114
- export function FairysRNValtioFormItemNoStyle<T extends MObject<T> = object>(
114
+ export function FairysRNValtioFormItemNoStyle<T extends MObject<T> = Record<string, any>>(
115
115
  props: Omit<FairysRNValtioFormItemProps<T>, 'isHide' | 'noStyle'>,
116
116
  ) {
117
117
  const { children, formAttrsNameInstance } = useFairysValtioFormItemNoStyleAttrs(props);
@@ -123,7 +123,9 @@ export function FairysRNValtioFormItemNoStyle<T extends MObject<T> = object>(
123
123
  }
124
124
 
125
125
  /**表单项基础组件(根据isHide和noStyle判断是否使用控制隐藏的表单项和无样式表单项)*/
126
- export function FairysRNValtioFormItem<T extends MObject<T> = object>(props: FairysRNValtioFormItemProps<T>) {
126
+ export function FairysRNValtioFormItem<T extends MObject<T> = Record<string, any>>(
127
+ props: FairysRNValtioFormItemProps<T>,
128
+ ) {
127
129
  const { isHide, noStyle, ...rest } = props;
128
130
  if (isHide) {
129
131
  return <FairysRNValtioFormHideItem<T> {...rest} />;
package/src/form.tsx CHANGED
@@ -6,6 +6,8 @@ import {
6
6
  useFairysValtioFormInstanceContext,
7
7
  useFairysValtioFormInstanceContextState,
8
8
  useFairysValtioFormInstanceContextHideState,
9
+ useFairysValtioFormInstanceToState,
10
+ useFairysValtioFormInstanceToHideState,
9
11
  } from '@fairys/valtio-form-basic/esm/common';
10
12
 
11
13
  import type { FairysValtioFormInstance, MObject } from '@fairys/valtio-form-basic/esm/common';
@@ -13,9 +15,10 @@ import type { FairysValtioFormAttrsProps } from 'hooks/form';
13
15
  import { useFairysValtioForm } from 'hooks/form';
14
16
  import React from 'react';
15
17
 
16
- export interface FairysRNValtioFormProps<T extends MObject<T> = object> extends FairysValtioFormAttrsProps<T> {}
18
+ export interface FairysRNValtioFormProps<T extends MObject<T> = Record<string, any>>
19
+ extends FairysValtioFormAttrsProps<T> {}
17
20
 
18
- function FairysRNValtioFormBase<T extends MObject<T> = object>(
21
+ function FairysRNValtioFormBase<T extends MObject<T> = Record<string, any>>(
19
22
  props: FairysRNValtioFormProps<T>,
20
23
  ref: React.Ref<FairysValtioFormInstance<T>>,
21
24
  ) {
@@ -44,6 +47,10 @@ export const FairysRNValtioForm = React.forwardRef(
44
47
  FormItem: typeof FairysRNValtioFormItem;
45
48
  /**隐藏表单项组件*/
46
49
  FormHideItem: typeof FairysRNValtioFormHideItem;
50
+ /**传递表单实例获取状态*/
51
+ useFormInstanceToState: typeof useFairysValtioFormInstanceToState;
52
+ /**传递表单实例获取隐藏状态*/
53
+ useFormInstanceToHideState: typeof useFairysValtioFormInstanceToHideState;
47
54
  };
48
55
  /**初始化实例*/
49
56
  FairysRNValtioForm.useForm = useFairysValtioFormInstance;
@@ -59,3 +66,7 @@ FairysRNValtioForm.FormItemBase = FairysRNValtioFormItemBase;
59
66
  FairysRNValtioForm.FormItem = FairysRNValtioFormItem;
60
67
  /**隐藏表单想*/
61
68
  FairysRNValtioForm.FormHideItem = FairysRNValtioFormHideItem;
69
+ /**传递表单实例获取状态*/
70
+ FairysRNValtioForm.useFormInstanceToState = useFairysValtioFormInstanceToState;
71
+ /**传递表单实例获取隐藏状态*/
72
+ FairysRNValtioForm.useFormInstanceToHideState = useFairysValtioFormInstanceToHideState;
@@ -17,27 +17,27 @@ import {
17
17
  import { formItemStyles } from 'styles/form.item';
18
18
  import { FairysValtioFormLayoutContextOptions, useFairysValtioFormLayoutContext } from './layout';
19
19
 
20
- export interface FairysValtioFormItemAttrsProps<T extends MObject<T> = object>
20
+ export interface FairysValtioFormItemAttrsProps<T extends MObject<T> = Record<string, any>>
21
21
  extends Omit<
22
22
  _FairysValtioFormItemAttrsProps<T>,
23
23
  'style' | 'labelStyle' | 'bodyStyle' | 'rowSpan' | 'className' | 'labelClassName' | 'bodyClassName'
24
24
  > {
25
+ // 基础样式
26
+ /**表单项样式*/
25
27
  style?: ViewProps['style'];
28
+ /**表单项标签样式*/
26
29
  labelStyle?: ViewProps['style'];
30
+ /**表单项主体样式*/
27
31
  bodyStyle?: ViewProps['style'];
28
32
  }
29
33
 
30
34
  /**
31
35
  * 处理表单表单项属性
32
- *
33
- * @example
34
- *
35
- * ```tsx
36
-
37
- * ```
38
- *
39
- */
40
- export function useFairysValtioFormItemAttrs<T extends MObject<T> = object>(props: FairysValtioFormItemAttrsProps<T>) {
36
+ *
37
+ */
38
+ export function useFairysValtioFormItemAttrs<T extends MObject<T> = Record<string, any>>(
39
+ props: FairysValtioFormItemAttrsProps<T>,
40
+ ) {
41
41
  const [layoutAttrs] = useFairysValtioFormLayoutContext();
42
42
  const colCount = layoutAttrs.colCount || 1;
43
43
  const parent_borderedType = layoutAttrs.itemBorderType || 'bottom';
@@ -75,6 +75,7 @@ export function useFairysValtioFormItemAttrs<T extends MObject<T> = object>(prop
75
75
  isInvalidTextRed = parent_isInvalidTextRed,
76
76
  isJoinParentField = true,
77
77
  rules,
78
+ isRemoveValueOnUnmount = true,
78
79
  } = props;
79
80
  const {
80
81
  name: _name,
@@ -110,6 +111,14 @@ export function useFairysValtioFormItemAttrs<T extends MObject<T> = object>(prop
110
111
  };
111
112
  }, [_name, rules]);
112
113
 
114
+ useEffect(() => {
115
+ return () => {
116
+ if (isRemoveValueOnUnmount) {
117
+ formInstance.removeValueByPaths(_name);
118
+ }
119
+ };
120
+ }, []);
121
+
113
122
  const onValueChange = (event: any) => {
114
123
  let newValue = event;
115
124
  const target = event?.nativeEvent;
@@ -287,7 +296,7 @@ export function useFairysValtioFormItemAttrs<T extends MObject<T> = object>(prop
287
296
  } as FairysValtioFormItemAttrsReturn<T>;
288
297
  }
289
298
 
290
- export interface FairysValtioFormItemAttrsReturn<T extends MObject<T> = object> {
299
+ export interface FairysValtioFormItemAttrsReturn<T extends MObject<T> = Record<string, any>> {
291
300
  /**表单项值*/
292
301
  value?: any;
293
302
  /**是否校验错误*/
@@ -329,15 +338,26 @@ export interface FairysValtioFormItemAttrsReturn<T extends MObject<T> = object>
329
338
  /**是否显示冒号*/
330
339
  showColon: boolean;
331
340
  // =========================================
341
+ // 基础样式
342
+ /**表单项样式*/
332
343
  itemStyle: ViewProps['style'];
344
+ /**表单项容器样式*/
333
345
  itemContainerStyle: ViewProps['style'];
346
+ /**表单项标签样式*/
334
347
  itemLabelStyle: ViewProps['style'];
348
+ /**表单项标签文本样式*/
335
349
  itemLabelTextStyle: ViewProps['style'];
350
+ /**表单项标签显示冒号样式*/
336
351
  itemLabelShowColonStyle: ViewProps['style'];
352
+ /**表单项主体样式*/
337
353
  itemBodyStyle: ViewProps['style'];
354
+ /**表单项输入样式*/
338
355
  itemInputStyle: ViewProps['style'];
356
+ /**表单项额外样式*/
339
357
  itemExtraStyle: ViewProps['style'];
358
+ /**错误样式*/
340
359
  errorStyle: ViewProps['style'];
360
+ /**帮助样式*/
341
361
  helpStyle: ViewProps['style'];
342
362
  /**子元素*/
343
363
  children?: React.ReactNode;
@@ -345,14 +365,8 @@ export interface FairysValtioFormItemAttrsReturn<T extends MObject<T> = object>
345
365
 
346
366
  /**
347
367
  * 没有样式的表单项属性,仅返回基础输入组件参数
348
- *
349
- * @example
350
- *
351
- *```tsx
352
-
353
- * ```
354
- */
355
- export function useFairysValtioFormItemNoStyleAttrs<T extends MObject<T> = object>(
368
+ */
369
+ export function useFairysValtioFormItemNoStyleAttrs<T extends MObject<T> = Record<string, any>>(
356
370
  props: FairysValtioFormItemAttrsProps<T>,
357
371
  ) {
358
372
  const {
@@ -368,6 +382,7 @@ export function useFairysValtioFormItemNoStyleAttrs<T extends MObject<T> = objec
368
382
  isJoinParentField = true,
369
383
  rules,
370
384
  isRequired: _isRequired,
385
+ isRemoveValueOnUnmount = true,
371
386
  } = props;
372
387
  const [state, errorState, formInstance] = useFairysValtioFormInstanceContextState<T>();
373
388
  const {
@@ -392,7 +407,13 @@ export function useFairysValtioFormItemNoStyleAttrs<T extends MObject<T> = objec
392
407
  formInstance.removeRules(_name);
393
408
  };
394
409
  }, [_name, rules]);
395
-
410
+ useEffect(() => {
411
+ return () => {
412
+ if (isRemoveValueOnUnmount) {
413
+ formInstance.removeValueByPaths(_name);
414
+ }
415
+ };
416
+ }, []);
396
417
  const onValueChange = (event: any) => {
397
418
  let newValue = event;
398
419
  const target = event?.nativeEvent;
@@ -458,7 +479,7 @@ export function useFairysValtioFormItemNoStyleAttrs<T extends MObject<T> = objec
458
479
  } as FairysValtioFormItemNoStyleAttrsReturn<T>;
459
480
  }
460
481
 
461
- export interface FairysValtioFormItemNoStyleAttrsReturn<T extends MObject<T> = object> {
482
+ export interface FairysValtioFormItemNoStyleAttrsReturn<T extends MObject<T> = Record<string, any>> {
462
483
  /**表单项值*/
463
484
  value?: any;
464
485
  /**是否校验错误*/
package/src/hooks/form.ts CHANGED
@@ -4,7 +4,8 @@ import { useMemo, type ReactNode, useImperativeHandle, useEffect } from 'react';
4
4
  import { FairysValtioFormLayoutAttrsProps } from './layout';
5
5
  import { RuleItem } from 'async-validator';
6
6
 
7
- export interface FairysValtioFormAttrsProps<T extends MObject<T> = object> extends FairysValtioFormLayoutAttrsProps {
7
+ export interface FairysValtioFormAttrsProps<T extends MObject<T> = Record<string, any>>
8
+ extends FairysValtioFormLayoutAttrsProps {
8
9
  /**表单实例*/
9
10
  form?: FairysValtioFormInstance<T>;
10
11
  /**子元素*/
@@ -25,14 +26,9 @@ export interface FairysValtioFormAttrsProps<T extends MObject<T> = object> exten
25
26
 
26
27
  /**
27
28
  * 表单属性处理
28
- *
29
- * @example
30
- *
31
- * ```tsx
32
-
33
- * ```
34
- */
35
- export function useFairysValtioForm<T extends MObject<T> = object>(
29
+ *
30
+ */
31
+ export function useFairysValtioForm<T extends MObject<T> = Record<string, any>>(
36
32
  props: FairysValtioFormAttrsProps<T>,
37
33
  ref: React.Ref<FairysValtioFormInstance<T>>,
38
34
  ) {
@@ -48,5 +44,7 @@ export function useFairysValtioForm<T extends MObject<T> = object>(
48
44
  return {
49
45
  ...rest,
50
46
  formInstance,
47
+ } as Omit<FairysValtioFormAttrsProps<T>, 'initFormDataType' | 'form' | 'rules' | 'formData' | 'hideState'> & {
48
+ formInstance: FairysValtioFormInstance<T>;
51
49
  };
52
50
  }
@@ -82,19 +82,13 @@ export const FairysValtioFormLayoutContext = createContext<FairysValtioFormLayou
82
82
  export const useFairysValtioFormLayoutContext = () => {
83
83
  const instance = useContext(FairysValtioFormLayoutContext);
84
84
  const state = useSnapshot(instance.state);
85
- return [state, instance] as const;
85
+ return [state, instance] as [FairysValtioFormLayoutContextOptions, FairysValtioFormLayoutInstance];
86
86
  };
87
87
 
88
88
  /**
89
89
  * 布局属性处理
90
- *
91
- * @example
92
- *
93
- * ```tsx
94
-
95
- ```
96
- *
97
- */
90
+ *
91
+ */
98
92
  export function useFairysValtioFormLayoutAttrs(props: FairysValtioFormLayoutAttrsProps) {
99
93
  const formLayoutInstance = useFairysValtioFormLayoutInstance();
100
94
  const [state] = useFairysValtioFormLayoutContext();