/
use-input-props.ts
84 lines (78 loc) · 1.59 KB
/
use-input-props.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import { useComponentDefaultProps, DefaultProps, extractSystemStyles } from '@mantine/styles';
import { useId } from '@mantine/hooks';
import { InputWrapperBaseProps } from './InputWrapper/InputWrapper';
import { InputSharedProps } from './Input';
interface BaseProps extends InputWrapperBaseProps, InputSharedProps, DefaultProps {
__staticSelector?: string;
id?: string;
}
export function useInputProps<T extends BaseProps, U extends Partial<T>>(
component: string,
defaultProps: U,
props: T
) {
const {
label,
description,
error,
required,
classNames,
styles,
className,
unstyled,
__staticSelector,
sx,
errorProps,
labelProps,
descriptionProps,
wrapperProps,
id,
size,
style,
inputContainer,
inputWrapperOrder,
withAsterisk,
...others
} = useComponentDefaultProps<T>(component, defaultProps, props);
const uid = useId(id);
const { systemStyles, rest } = extractSystemStyles(others);
return {
...rest,
classNames,
styles,
unstyled,
wrapperProps: {
label,
description,
error,
required,
classNames,
className,
__staticSelector,
sx,
errorProps,
labelProps,
descriptionProps,
unstyled,
styles,
id: uid,
size,
style,
inputContainer,
inputWrapperOrder,
withAsterisk,
...wrapperProps,
...systemStyles,
},
inputProps: {
required,
classNames,
styles,
unstyled,
id: uid,
size,
__staticSelector,
invalid: !!error,
},
};
}