@jobber/components-native 0.39.0 → 0.40.1
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/dist/src/Form/Form.js +187 -0
- package/dist/src/Form/Form.style.js +33 -0
- package/dist/src/Form/components/FormActionBar/FormActionBar.js +21 -0
- package/dist/src/Form/components/FormActionBar/FormActionBar.style.js +5 -0
- package/dist/src/Form/components/FormActionBar/index.js +1 -0
- package/dist/src/Form/components/FormBody/FormBody.js +20 -0
- package/dist/src/Form/components/FormBody/FormBody.style.js +26 -0
- package/dist/src/Form/components/FormBody/index.js +1 -0
- package/dist/src/Form/components/FormCache/FormCache.js +34 -0
- package/dist/src/Form/components/FormErrorBanner/FormErrorBanner.js +21 -0
- package/dist/src/Form/components/FormErrorBanner/index.js +1 -0
- package/dist/src/Form/components/FormErrorBanner/messages.js +13 -0
- package/dist/src/Form/components/FormMask/FormMask.js +11 -0
- package/dist/src/Form/components/FormMask/FormMask.style.js +15 -0
- package/dist/src/Form/components/FormMask/index.js +1 -0
- package/dist/src/Form/components/FormMessage/FormMessage.js +48 -0
- package/dist/src/Form/components/FormMessage/components/InternalFormMessage/InternalFormMessage.js +28 -0
- package/dist/src/Form/components/FormMessage/components/InternalFormMessage/InternalFormMessage.style.js +17 -0
- package/dist/src/Form/components/FormMessage/components/InternalFormMessage/index.js +1 -0
- package/dist/src/Form/components/FormMessage/components/InternalFormMessage/messages.js +8 -0
- package/dist/src/Form/components/FormMessage/index.js +1 -0
- package/dist/src/Form/components/FormMessageBanner/FormMessageBanner.js +15 -0
- package/dist/src/Form/components/FormMessageBanner/index.js +1 -0
- package/dist/src/Form/components/FormSaveButton/FormSaveButton.js +69 -0
- package/dist/src/Form/components/FormSaveButton/index.js +1 -0
- package/dist/src/Form/components/FormSaveButton/messages.js +8 -0
- package/dist/src/Form/constants.js +2 -0
- package/dist/src/Form/context/AtlantisFormContext.js +16 -0
- package/dist/src/Form/context/index.js +1 -0
- package/dist/src/Form/context/types.js +1 -0
- package/dist/src/Form/hooks/useFormViewRefs.js +14 -0
- package/dist/src/Form/hooks/useInternalForm.js +37 -0
- package/dist/src/Form/hooks/useOfflineHandler.js +24 -0
- package/dist/src/Form/hooks/useSaveButtonPosition.js +25 -0
- package/dist/src/Form/hooks/useScreenInformation.js +15 -0
- package/dist/src/Form/hooks/useScrollToError/index.js +1 -0
- package/dist/src/Form/hooks/useScrollToError/useScrollToError.js +63 -0
- package/dist/src/Form/index.js +4 -0
- package/dist/src/Form/messages.js +28 -0
- package/dist/src/Form/types.js +10 -0
- package/dist/src/InputText/InputText.js +8 -1
- package/dist/src/index.js +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/src/Form/Form.d.ts +4 -0
- package/dist/types/src/Form/Form.style.d.ts +31 -0
- package/dist/types/src/Form/components/FormActionBar/FormActionBar.d.ts +13 -0
- package/dist/types/src/Form/components/FormActionBar/FormActionBar.style.d.ts +15 -0
- package/dist/types/src/Form/components/FormActionBar/index.d.ts +2 -0
- package/dist/types/src/Form/components/FormBody/FormBody.d.ts +10 -0
- package/dist/types/src/Form/components/FormBody/FormBody.style.d.ts +24 -0
- package/dist/types/src/Form/components/FormBody/index.d.ts +1 -0
- package/dist/types/src/Form/components/FormCache/FormCache.d.ts +10 -0
- package/dist/types/src/Form/components/FormErrorBanner/FormErrorBanner.d.ts +3 -0
- package/dist/types/src/Form/components/FormErrorBanner/index.d.ts +1 -0
- package/dist/types/src/Form/components/FormErrorBanner/messages.d.ts +12 -0
- package/dist/types/src/Form/components/FormMask/FormMask.d.ts +2 -0
- package/dist/types/src/Form/components/FormMask/FormMask.style.d.ts +13 -0
- package/dist/types/src/Form/components/FormMask/index.d.ts +1 -0
- package/dist/types/src/Form/components/FormMessage/FormMessage.d.ts +19 -0
- package/dist/types/src/Form/components/FormMessage/components/InternalFormMessage/InternalFormMessage.d.ts +8 -0
- package/dist/types/src/Form/components/FormMessage/components/InternalFormMessage/InternalFormMessage.style.d.ts +20 -0
- package/dist/types/src/Form/components/FormMessage/components/InternalFormMessage/index.d.ts +1 -0
- package/dist/types/src/Form/components/FormMessage/components/InternalFormMessage/messages.d.ts +7 -0
- package/dist/types/src/Form/components/FormMessage/index.d.ts +1 -0
- package/dist/types/src/Form/components/FormMessageBanner/FormMessageBanner.d.ts +7 -0
- package/dist/types/src/Form/components/FormMessageBanner/index.d.ts +1 -0
- package/dist/types/src/Form/components/FormSaveButton/FormSaveButton.d.ts +3 -0
- package/dist/types/src/Form/components/FormSaveButton/index.d.ts +1 -0
- package/dist/types/src/Form/components/FormSaveButton/messages.d.ts +7 -0
- package/dist/types/src/Form/constants.d.ts +2 -0
- package/dist/types/src/Form/context/AtlantisFormContext.d.ts +12 -0
- package/dist/types/src/Form/context/index.d.ts +2 -0
- package/dist/types/src/Form/context/types.d.ts +26 -0
- package/dist/types/src/Form/hooks/useFormViewRefs.d.ts +10 -0
- package/dist/types/src/Form/hooks/useInternalForm.d.ts +19 -0
- package/dist/types/src/Form/hooks/useOfflineHandler.d.ts +1 -0
- package/dist/types/src/Form/hooks/useSaveButtonPosition.d.ts +12 -0
- package/dist/types/src/Form/hooks/useScreenInformation.d.ts +8 -0
- package/dist/types/src/Form/hooks/useScrollToError/index.d.ts +1 -0
- package/dist/types/src/Form/hooks/useScrollToError/useScrollToError.d.ts +10 -0
- package/dist/types/src/Form/index.d.ts +5 -0
- package/dist/types/src/Form/messages.d.ts +27 -0
- package/dist/types/src/Form/types.d.ts +199 -0
- package/dist/types/src/InputNumber/InputNumber.d.ts +1 -1
- package/dist/types/src/index.d.ts +1 -0
- package/package.json +3 -2
- package/src/Form/Form.style.ts +34 -0
- package/src/Form/Form.test.tsx +588 -0
- package/src/Form/Form.tsx +296 -0
- package/src/Form/components/FormActionBar/FormActionBar.style.ts +11 -0
- package/src/Form/components/FormActionBar/FormActionBar.tsx +63 -0
- package/src/Form/components/FormActionBar/index.ts +2 -0
- package/src/Form/components/FormBody/FormBody.style.ts +27 -0
- package/src/Form/components/FormBody/FormBody.tsx +62 -0
- package/src/Form/components/FormBody/index.ts +1 -0
- package/src/Form/components/FormCache/FormCache.tsx +50 -0
- package/src/Form/components/FormErrorBanner/FormErrorBanner.test.tsx +124 -0
- package/src/Form/components/FormErrorBanner/FormErrorBanner.tsx +34 -0
- package/src/Form/components/FormErrorBanner/index.ts +1 -0
- package/src/Form/components/FormErrorBanner/messages.ts +14 -0
- package/src/Form/components/FormMask/FormMask.style.tsx +16 -0
- package/src/Form/components/FormMask/FormMask.tsx +19 -0
- package/src/Form/components/FormMask/index.ts +1 -0
- package/src/Form/components/FormMessage/FormMessage.test.tsx +72 -0
- package/src/Form/components/FormMessage/FormMessage.tsx +63 -0
- package/src/Form/components/FormMessage/components/InternalFormMessage/InternalFormMessage.style.ts +18 -0
- package/src/Form/components/FormMessage/components/InternalFormMessage/InternalFormMessage.tsx +55 -0
- package/src/Form/components/FormMessage/components/InternalFormMessage/index.ts +1 -0
- package/src/Form/components/FormMessage/components/InternalFormMessage/messages.ts +10 -0
- package/src/Form/components/FormMessage/index.ts +1 -0
- package/src/Form/components/FormMessageBanner/FormMessageBanner.test.tsx +27 -0
- package/src/Form/components/FormMessageBanner/FormMessageBanner.tsx +33 -0
- package/src/Form/components/FormMessageBanner/index.ts +1 -0
- package/src/Form/components/FormSaveButton/FormSaveButton.test.tsx +159 -0
- package/src/Form/components/FormSaveButton/FormSaveButton.tsx +103 -0
- package/src/Form/components/FormSaveButton/index.ts +1 -0
- package/src/Form/components/FormSaveButton/messages.ts +9 -0
- package/src/Form/constants.ts +2 -0
- package/src/Form/context/AtlantisFormContext.test.tsx +45 -0
- package/src/Form/context/AtlantisFormContext.tsx +21 -0
- package/src/Form/context/index.ts +5 -0
- package/src/Form/context/types.ts +34 -0
- package/src/Form/hooks/useFormViewRefs.ts +23 -0
- package/src/Form/hooks/useInternalForm.ts +99 -0
- package/src/Form/hooks/useOfflineHandler.ts +36 -0
- package/src/Form/hooks/useSaveButtonPosition.ts +52 -0
- package/src/Form/hooks/useScreenInformation.ts +25 -0
- package/src/Form/hooks/useScrollToError/index.ts +1 -0
- package/src/Form/hooks/useScrollToError/useScrollToError.test.tsx +103 -0
- package/src/Form/hooks/useScrollToError/useScrollToError.ts +102 -0
- package/src/Form/index.ts +13 -0
- package/src/Form/messages.ts +33 -0
- package/src/Form/types.ts +255 -0
- package/src/InputNumber/InputNumber.tsx +1 -1
- package/src/InputText/InputText.tsx +8 -1
- package/src/index.ts +1 -0
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { MutableRefObject, RefObject } from "react";
|
|
2
|
+
import {
|
|
3
|
+
ControllerProps,
|
|
4
|
+
DeepPartial,
|
|
5
|
+
FieldPath,
|
|
6
|
+
FieldValues,
|
|
7
|
+
Mode,
|
|
8
|
+
UnpackNestedValue,
|
|
9
|
+
UseFormReturn,
|
|
10
|
+
} from "react-hook-form";
|
|
11
|
+
import { IconNames } from "@jobber/design";
|
|
12
|
+
import { KeyboardAwareScrollView } from "react-native-keyboard-aware-scroll-view";
|
|
13
|
+
|
|
14
|
+
export type FormValues<T> = UnpackNestedValue<T>;
|
|
15
|
+
export type FormErrors = FormNetworkErrors | FormUserErrors;
|
|
16
|
+
export type FormBannerMessage = FormWarningMessage | FormNoticeMessage;
|
|
17
|
+
|
|
18
|
+
export enum FormSubmitErrorType {
|
|
19
|
+
NetworkError = "NetworkError",
|
|
20
|
+
UserError = "UserErrors",
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export enum FormBannerMessageType {
|
|
24
|
+
WarningMessage = "WarningMessage",
|
|
25
|
+
NoticeMessage = "NoticeMessage",
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface FormBannerErrors {
|
|
29
|
+
networkError?: string | undefined;
|
|
30
|
+
bannerError?: {
|
|
31
|
+
title: string;
|
|
32
|
+
messages?: string[];
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
interface FormNetworkErrors {
|
|
37
|
+
errorType: FormSubmitErrorType.NetworkError;
|
|
38
|
+
networkErrors: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface FormUserErrors {
|
|
42
|
+
errorType: FormSubmitErrorType.UserError;
|
|
43
|
+
userErrors: Record<string, string>;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
interface FormWarningMessage {
|
|
47
|
+
messageType: FormBannerMessageType.WarningMessage;
|
|
48
|
+
message: string;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
interface FormNoticeMessage {
|
|
52
|
+
messageType: FormBannerMessageType.NoticeMessage;
|
|
53
|
+
message: string;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export type FormRef<T extends FieldValues = FieldValues> =
|
|
57
|
+
| (UseFormReturn<T> & {
|
|
58
|
+
scrollViewRef?: RefObject<KeyboardAwareScrollView>;
|
|
59
|
+
saveButtonHeight?: number;
|
|
60
|
+
messageBannerHeight?: number;
|
|
61
|
+
})
|
|
62
|
+
| undefined;
|
|
63
|
+
|
|
64
|
+
export interface FormProps<T extends FieldValues, SubmitResponseType> {
|
|
65
|
+
/**
|
|
66
|
+
* Content to be passed into the form
|
|
67
|
+
*/
|
|
68
|
+
children: React.ReactNode;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* A callback function that is run before invoking onSubmit. Form submission is canceled if the promise resolves to false.
|
|
72
|
+
*/
|
|
73
|
+
onBeforeSubmit?: (data: FormValues<T>) => Promise<boolean>;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* A callback function that handles the submission of form data
|
|
77
|
+
*/
|
|
78
|
+
onSubmit: (data: FormValues<T>) => Promise<SubmitResponseType>;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* A callback function that handles any error that occurs during "onSubmit"
|
|
82
|
+
*/
|
|
83
|
+
onSubmitError: (error: FormErrors) => void;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* A callback function that handles a successful form submission from "onSubmit"
|
|
87
|
+
*/
|
|
88
|
+
onSubmitSuccess: (data: SubmitResponseType) => void;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Network or user errors to be displayed as a banner at the top of the form
|
|
92
|
+
*/
|
|
93
|
+
bannerErrors?: FormBannerErrors;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Status messages to be displayed as a banner at the top of the form
|
|
97
|
+
*/
|
|
98
|
+
bannerMessages?: FormBannerMessage[];
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Loading when the initial form data is being fetched
|
|
102
|
+
*/
|
|
103
|
+
initialLoading?: boolean;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* The initial values of the form inputs
|
|
107
|
+
* This should be available as soon as initialLoading is set to false
|
|
108
|
+
*/
|
|
109
|
+
initialValues?: FormValues<DeepPartial<T>>;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* When the validation should happen.
|
|
113
|
+
* Possible values are "onBlur", "onChange", "onSubmit", "onTouched", and "all".
|
|
114
|
+
* The default value is "onTouched"
|
|
115
|
+
*/
|
|
116
|
+
mode?: Mode;
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* When the validation after submission should happen.
|
|
120
|
+
* Possible values are "onBlur", "onChange", and "onSubmit".
|
|
121
|
+
* The default value is "onChange"
|
|
122
|
+
*/
|
|
123
|
+
reValidateMode?: Exclude<Mode, "onTouched" | "all">;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* ref object to access react hook form methods and state
|
|
127
|
+
*/
|
|
128
|
+
formRef?: MutableRefObject<FormRef<T> | undefined>;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Label to be displayed for the save button
|
|
132
|
+
*/
|
|
133
|
+
saveButtonLabel?: string;
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* @deprecated use `secondaryAction` instead.
|
|
137
|
+
* Override default save button in the sticky section of the form with another element.
|
|
138
|
+
*/
|
|
139
|
+
renderStickySection?: (
|
|
140
|
+
onSubmit: () => void,
|
|
141
|
+
label: string | undefined,
|
|
142
|
+
isSubmitting: boolean,
|
|
143
|
+
) => JSX.Element;
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Adding a key will save a local copy of the form data that will be used to
|
|
147
|
+
* recover values when the app is backgrounded or has crashed.
|
|
148
|
+
*/
|
|
149
|
+
localCacheKey?: string;
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Forms field names that will not be considered for caching.
|
|
153
|
+
* Useful for omitting sensitive data.
|
|
154
|
+
*/
|
|
155
|
+
localCacheExclude?: string[];
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* A string or array of strings that can be used to identify the pre-filled
|
|
159
|
+
* data on the form. This can be used to support local caching for forms that
|
|
160
|
+
* prefill data without inadvertently applying the cache at the wrong time.
|
|
161
|
+
*
|
|
162
|
+
* For example this can be used to when an object is based on data from
|
|
163
|
+
* another object (Quote being converted into a Job). This will allow
|
|
164
|
+
* the user to retrieve data from the cache when trying to create the
|
|
165
|
+
* same object (same Quote being converted into a Job) following an app crash.
|
|
166
|
+
*
|
|
167
|
+
* There is still only one copy of data for each `localCacheKey`.
|
|
168
|
+
* If a user opens the same form the data will only be loaded if the `localCacheId` matches
|
|
169
|
+
*/
|
|
170
|
+
localCacheId?: string | string[];
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Secondary Action for ButtonGroup
|
|
174
|
+
*/
|
|
175
|
+
secondaryActions?: SecondaryActionProp[];
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* A number that will pull down the save button when the position is sticky.
|
|
179
|
+
* Useful when there's a footer or content below the form that is pulling
|
|
180
|
+
* the button up.
|
|
181
|
+
*/
|
|
182
|
+
saveButtonOffset?: number;
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Forces to render the sticky save button instead of the inline.
|
|
186
|
+
* The sticky save button is default for iOS but not for Android due to
|
|
187
|
+
* limitations. Use this prop with caution on Android.
|
|
188
|
+
*/
|
|
189
|
+
showStickySaveButton?: boolean;
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Renders a footer below the save button.
|
|
193
|
+
*/
|
|
194
|
+
renderFooter?: React.ReactNode;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export type InternalFormProps<T extends FieldValues, SubmitResponseType> = Omit<
|
|
198
|
+
FormProps<T, SubmitResponseType>,
|
|
199
|
+
"initialLoading"
|
|
200
|
+
>;
|
|
201
|
+
|
|
202
|
+
export type ValidationRulesByFieldPath<T extends FieldValues> = {
|
|
203
|
+
[p in FieldPath<T>]: ControllerProps<T, p>["rules"];
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
export interface FormSaveButtonProps {
|
|
207
|
+
/**
|
|
208
|
+
* Press handler
|
|
209
|
+
*/
|
|
210
|
+
primaryAction: () => Promise<void> | void;
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Primary Button is loading
|
|
214
|
+
*/
|
|
215
|
+
loading: boolean;
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Label for the save button
|
|
219
|
+
*/
|
|
220
|
+
label?: string;
|
|
221
|
+
/**
|
|
222
|
+
* Props and information regarding the secondary Action button(s)
|
|
223
|
+
*/
|
|
224
|
+
secondaryActions?: SecondaryActionProp[];
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Set whether secondary Button is loading
|
|
228
|
+
*/
|
|
229
|
+
setSecondaryActionLoading?: (bool: boolean) => void;
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Callback that is called when the secondary actions bottom sheet is opened.
|
|
233
|
+
*/
|
|
234
|
+
onOpenBottomSheet?: () => void;
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Callback that is called when the secondary actions bottom sheet is closed.
|
|
238
|
+
*/
|
|
239
|
+
onCloseBottomSheet?: () => void;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
interface SecondaryActionOnPress {
|
|
243
|
+
onBeforeSubmit?: () => Promise<boolean>;
|
|
244
|
+
onSubmit: (formSubmit: FormSaveButtonProps["primaryAction"]) => Promise<void>;
|
|
245
|
+
onSubmitSuccess?: () => void;
|
|
246
|
+
onSubmitError?: (error: FormErrors) => void;
|
|
247
|
+
resetFormOnSubmit?: boolean;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
export interface SecondaryActionProp {
|
|
251
|
+
label: string;
|
|
252
|
+
icon?: IconNames | undefined;
|
|
253
|
+
handleAction: SecondaryActionOnPress;
|
|
254
|
+
destructive?: boolean;
|
|
255
|
+
}
|
|
@@ -14,7 +14,7 @@ export interface InputNumberProps
|
|
|
14
14
|
> {
|
|
15
15
|
readonly value?: number;
|
|
16
16
|
readonly defaultValue?: number;
|
|
17
|
-
readonly onChange
|
|
17
|
+
readonly onChange?: (newValue?: number | string | undefined) => void;
|
|
18
18
|
readonly keyboard?: NumberKeyboard;
|
|
19
19
|
/**
|
|
20
20
|
* Used to locate this view in end-to-end tests
|
|
@@ -267,6 +267,7 @@ function InputTextInternal(
|
|
|
267
267
|
ref: Ref<InputTextRef>,
|
|
268
268
|
) {
|
|
269
269
|
const isAndroid = Platform.OS === "android";
|
|
270
|
+
const isIOS = Platform.OS === "ios";
|
|
270
271
|
|
|
271
272
|
const {
|
|
272
273
|
input: inputTransform = identity,
|
|
@@ -419,7 +420,13 @@ function InputTextInternal(
|
|
|
419
420
|
);
|
|
420
421
|
|
|
421
422
|
function handleChangeText(value: string) {
|
|
422
|
-
|
|
423
|
+
/**
|
|
424
|
+
* Replacing the U+FFFC character because it's duplicating text
|
|
425
|
+
* when dictating on iOS 16.
|
|
426
|
+
* https://github.com/facebook/react-native/issues/36521#issuecomment-1555421134
|
|
427
|
+
*/
|
|
428
|
+
const removedIOSCharValue = isIOS ? value.replace(/\uFFFC/g, "") : value;
|
|
429
|
+
const newValue = outputTransform(removedIOSCharValue);
|
|
423
430
|
setHasMiniLabel(Boolean(newValue));
|
|
424
431
|
onChangeText?.(newValue);
|
|
425
432
|
field.onChange(newValue);
|
package/src/index.ts
CHANGED