@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/README.md +482 -0
- package/esm/form.d.ts +7 -3
- package/esm/form.item.d.ts +5 -5
- package/esm/form.js +3 -1
- package/esm/hooks/form.d.ts +3 -31
- package/esm/hooks/form.item.d.ts +20 -19
- package/esm/hooks/form.item.js +8 -2
- package/esm/hooks/layout.d.ts +2 -12039
- package/package.json +2 -2
- package/src/form.item.tsx +8 -6
- package/src/form.tsx +13 -2
- package/src/hooks/form.item.ts +42 -21
- package/src/hooks/form.ts +7 -9
- package/src/hooks/layout.ts +3 -9
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
|
|
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
|
|
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> =
|
|
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> =
|
|
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> =
|
|
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> =
|
|
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> =
|
|
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> =
|
|
18
|
+
export interface FairysRNValtioFormProps<T extends MObject<T> = Record<string, any>>
|
|
19
|
+
extends FairysValtioFormAttrsProps<T> {}
|
|
17
20
|
|
|
18
|
-
function FairysRNValtioFormBase<T extends MObject<T> =
|
|
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;
|
package/src/hooks/form.item.ts
CHANGED
|
@@ -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> =
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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> =
|
|
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
|
-
|
|
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> =
|
|
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> =
|
|
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
|
-
|
|
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
|
}
|
package/src/hooks/layout.ts
CHANGED
|
@@ -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
|
|
85
|
+
return [state, instance] as [FairysValtioFormLayoutContextOptions, FairysValtioFormLayoutInstance];
|
|
86
86
|
};
|
|
87
87
|
|
|
88
88
|
/**
|
|
89
89
|
* 布局属性处理
|
|
90
|
-
*
|
|
91
|
-
|
|
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();
|