@fairys/rn-valtio-form-basic 1.0.0 → 1.0.2
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 +8 -1
- package/esm/form.item.js +8 -2
- package/esm/hooks/form.d.ts +7 -1
- package/esm/hooks/form.item.d.ts +4 -0
- package/esm/hooks/form.item.js +14 -3
- package/esm/hooks/form.js +2 -1
- package/package.json +2 -2
- package/src/form.item.tsx +15 -2
- package/src/hooks/form.item.ts +20 -2
- package/src/hooks/form.ts +13 -2
package/README.md
CHANGED
|
@@ -236,11 +236,18 @@ export interface FairysValtioFormAttrsProps<T extends MObject<T> = Record<string
|
|
|
236
236
|
* - immutable:直接使用对象(注意:当传递的不是`valtio`的`proxy`对象时,会使用`valtio`中的`proxy`声明)
|
|
237
237
|
*/
|
|
238
238
|
initFormDataType?: 'deepCopy' | 'immutable';
|
|
239
|
+
/**
|
|
240
|
+
* 表单值改变时回调
|
|
241
|
+
* @param path 表单项路径
|
|
242
|
+
* @param value 表单项值
|
|
243
|
+
*/
|
|
244
|
+
onValuesChange?: (path: PropertyKey, value: any) => void;
|
|
245
|
+
|
|
239
246
|
}
|
|
240
247
|
/**
|
|
241
248
|
* 表单属性处理
|
|
242
249
|
*/
|
|
243
|
-
export declare function useFairysValtioForm<T extends MObject<T> = Record<string, any>>(props: FairysValtioFormAttrsProps<T>, ref: React.Ref<FairysValtioFormInstance<T>>): Omit<FairysValtioFormAttrsProps<T>, "initFormDataType" | "form" | "rules" | "formData" | "hideState"> & {
|
|
250
|
+
export declare function useFairysValtioForm<T extends MObject<T> = Record<string, any>>(props: FairysValtioFormAttrsProps<T>, ref: React.Ref<FairysValtioFormInstance<T>>): Omit<FairysValtioFormAttrsProps<T>, "initFormDataType" | "form" | "rules" | "formData" | "hideState"|"onValuesChange"> & {
|
|
244
251
|
formInstance: FairysValtioFormInstance<T>;
|
|
245
252
|
};
|
|
246
253
|
|
package/esm/form.item.js
CHANGED
|
@@ -3,7 +3,7 @@ import { Text, View } from "react-native";
|
|
|
3
3
|
import { Fragment } from "react";
|
|
4
4
|
import { FairysValtioFormParentAttrsContext, useFairysValtioFormInstanceContextHideState } from "@fairys/valtio-form-basic/esm/common";
|
|
5
5
|
import { formItemStyles } from "./styles/form.item.js";
|
|
6
|
-
import { useFairysValtioFormItemAttrs, useFairysValtioFormItemNoStyleAttrs } from "./hooks/form.item.js";
|
|
6
|
+
import { useFairysValtioFormItemAttrs, useFairysValtioFormItemHideAttrs, useFairysValtioFormItemNoStyleAttrs } from "./hooks/form.item.js";
|
|
7
7
|
function FairysRNValtioFormItemBase(props) {
|
|
8
8
|
const { label, extra, helpText } = props;
|
|
9
9
|
const { itemStyle, itemContainerStyle, itemLabelStyle, itemLabelTextStyle, itemLabelShowColonStyle, itemExtraStyle, itemInputStyle, itemBodyStyle, isInvalid, isRequired, showColon, formAttrsNameInstance, itemBorderType, errorStyle, helpStyle, error, children } = useFairysValtioFormItemAttrs(props);
|
|
@@ -74,10 +74,16 @@ function FairysRNValtioFormItemBase(props) {
|
|
|
74
74
|
]
|
|
75
75
|
});
|
|
76
76
|
}
|
|
77
|
+
function FairysRNValtioFormHideItemEmpty(props) {
|
|
78
|
+
useFairysValtioFormItemHideAttrs(props);
|
|
79
|
+
return /*#__PURE__*/ jsx(Fragment, {});
|
|
80
|
+
}
|
|
77
81
|
function FairysRNValtioFormHideItem(props) {
|
|
78
82
|
const [state] = useFairysValtioFormInstanceContextHideState();
|
|
79
83
|
const isHide = state[props.name];
|
|
80
|
-
if (isHide) return /*#__PURE__*/ jsx(
|
|
84
|
+
if (isHide) return /*#__PURE__*/ jsx(FairysRNValtioFormHideItemEmpty, {
|
|
85
|
+
...props
|
|
86
|
+
});
|
|
81
87
|
return /*#__PURE__*/ jsx(FairysRNValtioFormItemBase, {
|
|
82
88
|
...props
|
|
83
89
|
});
|
package/esm/hooks/form.d.ts
CHANGED
|
@@ -20,11 +20,17 @@ export interface FairysValtioFormAttrsProps<T extends MObject<T> = Record<string
|
|
|
20
20
|
* - immutable:直接使用对象(注意:当传递的不是`valtio`的`proxy`对象时,会使用`valtio`中的`proxy`声明)
|
|
21
21
|
*/
|
|
22
22
|
initFormDataType?: 'deepCopy' | 'immutable';
|
|
23
|
+
/**
|
|
24
|
+
* 表单值改变时回调
|
|
25
|
+
* @param path 表单项路径
|
|
26
|
+
* @param value 表单项值
|
|
27
|
+
*/
|
|
28
|
+
onValuesChange?: (path: PropertyKey, value: any) => void;
|
|
23
29
|
}
|
|
24
30
|
/**
|
|
25
31
|
* 表单属性处理
|
|
26
32
|
*
|
|
27
33
|
*/
|
|
28
|
-
export declare function useFairysValtioForm<T extends MObject<T> = Record<string, any>>(props: FairysValtioFormAttrsProps<T>, ref: React.Ref<FairysValtioFormInstance<T>>): Omit<FairysValtioFormAttrsProps<T>, "initFormDataType" | "form" | "rules" | "formData" | "hideState"> & {
|
|
34
|
+
export declare function useFairysValtioForm<T extends MObject<T> = Record<string, any>>(props: FairysValtioFormAttrsProps<T>, ref: React.Ref<FairysValtioFormInstance<T>>): Omit<FairysValtioFormAttrsProps<T>, "initFormDataType" | "form" | "rules" | "formData" | "hideState" | "onValuesChange"> & {
|
|
29
35
|
formInstance: FairysValtioFormInstance<T>;
|
|
30
36
|
};
|
package/esm/hooks/form.item.d.ts
CHANGED
|
@@ -117,3 +117,7 @@ export interface FairysValtioFormItemNoStyleAttrsReturn<T extends MObject<T> = R
|
|
|
117
117
|
/**子元素*/
|
|
118
118
|
children?: React.ReactNode;
|
|
119
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* 处理表单表单项属性,隐藏表单项时移除数据值
|
|
122
|
+
*/
|
|
123
|
+
export declare function useFairysValtioFormItemHideAttrs<T extends MObject<T> = Record<string, any>>(props: FairysValtioFormItemAttrsProps<T>): void;
|
package/esm/hooks/form.item.js
CHANGED
|
@@ -16,7 +16,7 @@ function useFairysValtioFormItemAttrs(props) {
|
|
|
16
16
|
const parent_isInvalidBorderRed = layoutAttrs.isInvalidBorderRed;
|
|
17
17
|
const parent_isInvalidTextRed = layoutAttrs.isInvalidTextRed;
|
|
18
18
|
const parent_showColon = layoutAttrs.showColon;
|
|
19
|
-
const { name, valuePropName = 'value', getValuePath = 'text', getValueFromEvent, formatValue, onAfterUpdate, trigger = 'onChange', style, labelStyle, bodyStyle, children, labelMode = parent_labelMode, errorLayout = parent_errorLayout, colSpan = 1, isRequired: _isRequired, itemBorderType = parent_borderedType, attrs = {}, showColon = parent_showColon, itemBorderColor = parent_itemBorderColor, isInvalidBorderRed = parent_isInvalidBorderRed, isInvalidTextRed = parent_isInvalidTextRed, isJoinParentField = true, rules, isRemoveValueOnUnmount =
|
|
19
|
+
const { name, valuePropName = 'value', getValuePath = 'text', getValueFromEvent, formatValue, onAfterUpdate, trigger = 'onChange', style, labelStyle, bodyStyle, children, labelMode = parent_labelMode, errorLayout = parent_errorLayout, colSpan = 1, isRequired: _isRequired, itemBorderType = parent_borderedType, attrs = {}, showColon = parent_showColon, itemBorderColor = parent_itemBorderColor, isInvalidBorderRed = parent_isInvalidBorderRed, isInvalidTextRed = parent_isInvalidTextRed, isJoinParentField = true, rules, isRemoveValueOnUnmount = false } = props;
|
|
20
20
|
const { name: _name, paths, parentName, formAttrsNameInstance } = useFairysValtioFormAttrsName({
|
|
21
21
|
name,
|
|
22
22
|
isJoinParentField
|
|
@@ -216,7 +216,7 @@ function useFairysValtioFormItemAttrs(props) {
|
|
|
216
216
|
};
|
|
217
217
|
}
|
|
218
218
|
function useFairysValtioFormItemNoStyleAttrs(props) {
|
|
219
|
-
const { name, valuePropName = 'value', getValuePath = 'text', getValueFromEvent, formatValue, onAfterUpdate, trigger = 'onChange', children, attrs = {}, isJoinParentField = true, rules, isRequired: _isRequired, isRemoveValueOnUnmount =
|
|
219
|
+
const { name, valuePropName = 'value', getValuePath = 'text', getValueFromEvent, formatValue, onAfterUpdate, trigger = 'onChange', children, attrs = {}, isJoinParentField = true, rules, isRequired: _isRequired, isRemoveValueOnUnmount = false } = props;
|
|
220
220
|
const [state, errorState, formInstance] = useFairysValtioFormInstanceContextState();
|
|
221
221
|
const { name: _name, paths, parentName, formAttrsNameInstance } = useFairysValtioFormAttrsName({
|
|
222
222
|
name,
|
|
@@ -295,4 +295,15 @@ function useFairysValtioFormItemNoStyleAttrs(props) {
|
|
|
295
295
|
}) : children
|
|
296
296
|
};
|
|
297
297
|
}
|
|
298
|
-
|
|
298
|
+
function useFairysValtioFormItemHideAttrs(props) {
|
|
299
|
+
const { name, isJoinParentField = true, isHideRemoveValue = true } = props;
|
|
300
|
+
const [, , formInstance] = useFairysValtioFormInstanceContextState();
|
|
301
|
+
const { name: _name } = useFairysValtioFormAttrsName({
|
|
302
|
+
name,
|
|
303
|
+
isJoinParentField
|
|
304
|
+
});
|
|
305
|
+
useEffect(()=>()=>{
|
|
306
|
+
if (isHideRemoveValue) formInstance.removeValueByPaths(_name);
|
|
307
|
+
}, []);
|
|
308
|
+
}
|
|
309
|
+
export { useFairysValtioFormItemAttrs, useFairysValtioFormItemHideAttrs, useFairysValtioFormItemNoStyleAttrs };
|
package/esm/hooks/form.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { useFairysValtioFormInstance } from "@fairys/valtio-form-basic/esm/common";
|
|
2
2
|
import { useEffect, useImperativeHandle, useMemo } from "react";
|
|
3
3
|
function useFairysValtioForm(props, ref) {
|
|
4
|
-
const { form, rules, formData, hideState, initFormDataType = 'deepCopy', ...rest } = props;
|
|
4
|
+
const { form, rules, formData, hideState, initFormDataType = 'deepCopy', onValuesChange, ...rest } = props;
|
|
5
5
|
const formInstance = useFairysValtioFormInstance(form);
|
|
6
6
|
formInstance.rules = rules;
|
|
7
|
+
formInstance.onValuesChange = onValuesChange;
|
|
7
8
|
useMemo(()=>formInstance.ctor({
|
|
8
9
|
formData,
|
|
9
10
|
hideState,
|
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": "1.0.
|
|
6
|
+
"version": "1.0.2",
|
|
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": "^1.0.
|
|
28
|
+
"@fairys/valtio-form-basic": "^1.0.2"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/react": "~18.2.21",
|
package/src/form.item.tsx
CHANGED
|
@@ -10,7 +10,11 @@ import {
|
|
|
10
10
|
} from '@fairys/valtio-form-basic/esm/common';
|
|
11
11
|
import { formItemStyles } from './styles/form.item';
|
|
12
12
|
import type { FairysValtioFormItemAttrsProps } from './hooks/form.item';
|
|
13
|
-
import {
|
|
13
|
+
import {
|
|
14
|
+
useFairysValtioFormItemAttrs,
|
|
15
|
+
useFairysValtioFormItemNoStyleAttrs,
|
|
16
|
+
useFairysValtioFormItemHideAttrs,
|
|
17
|
+
} from 'hooks/form.item';
|
|
14
18
|
|
|
15
19
|
export interface FairysRNValtioFormItemProps<T extends MObject<T> = Record<string, any>>
|
|
16
20
|
extends Omit<ViewProps, 'style'>,
|
|
@@ -98,6 +102,15 @@ export function FairysRNValtioFormItemBase<T extends MObject<T> = Record<string,
|
|
|
98
102
|
</View>
|
|
99
103
|
);
|
|
100
104
|
}
|
|
105
|
+
|
|
106
|
+
/**隐藏表单项的空组件*/
|
|
107
|
+
function FairysRNValtioFormHideItemEmpty<T extends MObject<T> = Record<string, any>>(
|
|
108
|
+
props: Omit<FairysRNValtioFormItemProps<T>, 'isHide' | 'noStyle'>,
|
|
109
|
+
) {
|
|
110
|
+
useFairysValtioFormItemHideAttrs(props);
|
|
111
|
+
return <Fragment />;
|
|
112
|
+
}
|
|
113
|
+
|
|
101
114
|
/**控制隐藏的表单项*/
|
|
102
115
|
export function FairysRNValtioFormHideItem<T extends MObject<T> = Record<string, any>>(
|
|
103
116
|
props: Omit<FairysRNValtioFormItemProps<T>, 'isHide' | 'noStyle'>,
|
|
@@ -105,7 +118,7 @@ export function FairysRNValtioFormHideItem<T extends MObject<T> = Record<string,
|
|
|
105
118
|
const [state] = useFairysValtioFormInstanceContextHideState();
|
|
106
119
|
const isHide = state[props.name];
|
|
107
120
|
if (isHide) {
|
|
108
|
-
return <
|
|
121
|
+
return <FairysRNValtioFormHideItemEmpty<T> {...props} />;
|
|
109
122
|
}
|
|
110
123
|
return <FairysRNValtioFormItemBase<T> {...props} />;
|
|
111
124
|
}
|
package/src/hooks/form.item.ts
CHANGED
|
@@ -75,7 +75,7 @@ export function useFairysValtioFormItemAttrs<T extends MObject<T> = Record<strin
|
|
|
75
75
|
isInvalidTextRed = parent_isInvalidTextRed,
|
|
76
76
|
isJoinParentField = true,
|
|
77
77
|
rules,
|
|
78
|
-
isRemoveValueOnUnmount =
|
|
78
|
+
isRemoveValueOnUnmount = false,
|
|
79
79
|
} = props;
|
|
80
80
|
const {
|
|
81
81
|
name: _name,
|
|
@@ -382,7 +382,7 @@ export function useFairysValtioFormItemNoStyleAttrs<T extends MObject<T> = Recor
|
|
|
382
382
|
isJoinParentField = true,
|
|
383
383
|
rules,
|
|
384
384
|
isRequired: _isRequired,
|
|
385
|
-
isRemoveValueOnUnmount =
|
|
385
|
+
isRemoveValueOnUnmount = false,
|
|
386
386
|
} = props;
|
|
387
387
|
const [state, errorState, formInstance] = useFairysValtioFormInstanceContextState<T>();
|
|
388
388
|
const {
|
|
@@ -511,3 +511,21 @@ export interface FairysValtioFormItemNoStyleAttrsReturn<T extends MObject<T> = R
|
|
|
511
511
|
/**子元素*/
|
|
512
512
|
children?: React.ReactNode;
|
|
513
513
|
}
|
|
514
|
+
|
|
515
|
+
/**
|
|
516
|
+
* 处理表单表单项属性,隐藏表单项时移除数据值
|
|
517
|
+
*/
|
|
518
|
+
export function useFairysValtioFormItemHideAttrs<T extends MObject<T> = Record<string, any>>(
|
|
519
|
+
props: FairysValtioFormItemAttrsProps<T>,
|
|
520
|
+
) {
|
|
521
|
+
const { name, isJoinParentField = true, isHideRemoveValue = true } = props;
|
|
522
|
+
const [, , formInstance] = useFairysValtioFormInstanceContextState<T>();
|
|
523
|
+
const { name: _name } = useFairysValtioFormAttrsName({ name, isJoinParentField });
|
|
524
|
+
useEffect(() => {
|
|
525
|
+
return () => {
|
|
526
|
+
if (isHideRemoveValue) {
|
|
527
|
+
formInstance.removeValueByPaths(_name);
|
|
528
|
+
}
|
|
529
|
+
};
|
|
530
|
+
}, []);
|
|
531
|
+
}
|
package/src/hooks/form.ts
CHANGED
|
@@ -22,6 +22,12 @@ export interface FairysValtioFormAttrsProps<T extends MObject<T> = Record<string
|
|
|
22
22
|
* - immutable:直接使用对象(注意:当传递的不是`valtio`的`proxy`对象时,会使用`valtio`中的`proxy`声明)
|
|
23
23
|
*/
|
|
24
24
|
initFormDataType?: 'deepCopy' | 'immutable';
|
|
25
|
+
/**
|
|
26
|
+
* 表单值改变时回调
|
|
27
|
+
* @param path 表单项路径
|
|
28
|
+
* @param value 表单项值
|
|
29
|
+
*/
|
|
30
|
+
onValuesChange?: (path: PropertyKey, value: any) => void;
|
|
25
31
|
}
|
|
26
32
|
|
|
27
33
|
/**
|
|
@@ -32,10 +38,12 @@ export function useFairysValtioForm<T extends MObject<T> = Record<string, any>>(
|
|
|
32
38
|
props: FairysValtioFormAttrsProps<T>,
|
|
33
39
|
ref: React.Ref<FairysValtioFormInstance<T>>,
|
|
34
40
|
) {
|
|
35
|
-
const { form, rules, formData, hideState, initFormDataType = 'deepCopy', ...rest } = props;
|
|
41
|
+
const { form, rules, formData, hideState, initFormDataType = 'deepCopy', onValuesChange, ...rest } = props;
|
|
36
42
|
const formInstance = useFairysValtioFormInstance(form);
|
|
37
43
|
/**表单规则*/
|
|
38
44
|
formInstance.rules = rules;
|
|
45
|
+
/**表单值改变时回调*/
|
|
46
|
+
formInstance.onValuesChange = onValuesChange;
|
|
39
47
|
/**初始化表单值*/
|
|
40
48
|
useMemo(() => formInstance.ctor({ formData, hideState, initFormDataType }), []);
|
|
41
49
|
useImperativeHandle(ref, () => formInstance);
|
|
@@ -44,7 +52,10 @@ export function useFairysValtioForm<T extends MObject<T> = Record<string, any>>(
|
|
|
44
52
|
return {
|
|
45
53
|
...rest,
|
|
46
54
|
formInstance,
|
|
47
|
-
} as Omit<
|
|
55
|
+
} as Omit<
|
|
56
|
+
FairysValtioFormAttrsProps<T>,
|
|
57
|
+
'initFormDataType' | 'form' | 'rules' | 'formData' | 'hideState' | 'onValuesChange'
|
|
58
|
+
> & {
|
|
48
59
|
formInstance: FairysValtioFormInstance<T>;
|
|
49
60
|
};
|
|
50
61
|
}
|