ferns-ui 1.15.0 → 1.16.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/Accordion.js CHANGED
@@ -5,7 +5,7 @@ import { Heading } from "./Heading";
5
5
  import { InfoModalIcon } from "./InfoModalIcon";
6
6
  import { Text } from "./Text";
7
7
  import { useTheme } from "./Theme";
8
- export const Accordion = ({ children, isCollapsed = false, title, subtitle, includeInfoModal = false, infoModalChildren, infoModalSubtitle, infoModalText, infoModalTitle, }) => {
8
+ export const Accordion = ({ children, isCollapsed = false, title, subtitle, includeInfoModal = false, infoModalChildren, infoModalSubtitle, infoModalText, infoModalTitle, onToggle, }) => {
9
9
  const { theme } = useTheme();
10
10
  const [collapsed, setCollapsed] = useState(false);
11
11
  // The external collapse state should override the internal collapse state.
@@ -27,7 +27,12 @@ export const Accordion = ({ children, isCollapsed = false, title, subtitle, incl
27
27
  includeInfoModal && infoModalTitle && (React.createElement(InfoModalIcon, { infoModalChildren: infoModalChildren, infoModalSubtitle: infoModalSubtitle, infoModalText: infoModalText, infoModalTitle: infoModalTitle }))),
28
28
  subtitle && React.createElement(Text, null, subtitle)),
29
29
  React.createElement(View, null,
30
- React.createElement(Pressable, { "aria-role": "button", hitSlop: { top: 20, bottom: 20, left: 20, right: 20 }, testID: "accordion-toggle", onPress: () => setCollapsed(!collapsed) },
30
+ React.createElement(Pressable, { "aria-role": "button", hitSlop: { top: 20, bottom: 20, left: 20, right: 20 }, testID: "accordion-toggle", onPress: () => {
31
+ setCollapsed(!collapsed);
32
+ if (onToggle) {
33
+ onToggle(!collapsed);
34
+ }
35
+ } },
31
36
  React.createElement(FontAwesome6, { color: theme.text.link, name: collapsed ? "chevron-down" : "chevron-up", selectable: undefined, size: 16 })))),
32
37
  collapsed ? null : React.createElement(View, { style: { marginTop: 8 } }, children)));
33
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Accordion.js","sourceRoot":"","sources":["../src/Accordion.tsx"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,iCAAiC,CAAC;AAC3D,OAAO,KAAK,EAAE,EAAK,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AACrD,OAAO,EAAC,SAAS,EAAE,IAAI,EAAC,MAAM,cAAc,CAAC;AAG7C,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAC;AAEjC,MAAM,CAAC,MAAM,SAAS,GAAuB,CAAC,EAC5C,QAAQ,EACR,WAAW,GAAG,KAAK,EACnB,KAAK,EACL,QAAQ,EACR,gBAAgB,GAAG,KAAK,EACxB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,cAAc,GACf,EAAE,EAAE;IACH,MAAM,EAAC,KAAK,EAAC,GAAG,QAAQ,EAAE,CAAC;IAC3B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElD,2EAA2E;IAC3E,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,CAAC,WAAW,CAAC,CAAC;IAC5B,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,OAAO,CACL,oBAAC,IAAI,IACH,KAAK,EAAE;YACL,OAAO,EAAE,EAAE;YACX,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;YACvC,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;YACpC,cAAc,EAAE,CAAC;YACjB,iBAAiB,EAAE,CAAC;YACpB,KAAK,EAAE,MAAM;SACd;QAED,oBAAC,IAAI,IAAC,KAAK,EAAE,EAAC,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAC;YACxF,oBAAC,IAAI,IAAC,KAAK,EAAE,EAAC,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAC;gBAC5C,oBAAC,IAAI,IAAC,KAAK,EAAE,EAAC,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAC;oBACvD,oBAAC,OAAO,QAAE,KAAK,CAAW;oBACzB,gBAAgB,IAAI,cAAc,IAAI,CACrC,oBAAC,aAAa,IACZ,iBAAiB,EAAE,iBAAiB,EACpC,iBAAiB,EAAE,iBAAiB,EACpC,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc,GAC9B,CACH,CACI;gBACN,QAAQ,IAAI,oBAAC,IAAI,QAAE,QAAQ,CAAQ,CAC/B;YACP,oBAAC,IAAI;gBACH,oBAAC,SAAS,iBACE,QAAQ,EAClB,OAAO,EAAE,EAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAC,EACnD,MAAM,EAAC,kBAAkB,EACzB,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC;oBAEvC,oBAAC,YAAY,IACX,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EACtB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,EAC/C,UAAU,EAAE,SAAS,EACrB,IAAI,EAAE,EAAE,GACR,CACQ,CACP,CACF;QACN,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAC,IAAI,IAAC,KAAK,EAAE,EAAC,SAAS,EAAE,CAAC,EAAC,IAAG,QAAQ,CAAQ,CAC7D,CACR,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"Accordion.js","sourceRoot":"","sources":["../src/Accordion.tsx"],"names":[],"mappings":"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"}
package/dist/Common.d.ts CHANGED
@@ -45,6 +45,10 @@ export interface AccordionProps extends InfoModalIconProps {
45
45
  * The title of the accordion.
46
46
  */
47
47
  title: string;
48
+ /**
49
+ * * Callback fired when the accordion is toggled.
50
+ * */
51
+ onToggle?: (isCollapse: boolean) => void;
48
52
  }
49
53
  export interface BaseProfile {
50
54
  email: string;
@@ -316,11 +320,11 @@ export type TextFieldType = "date" | "datetime" | "decimal" | "decimalRange" | "
316
320
  export type IconSize = "xs" | "sm" | "md" | "lg" | "xl" | "2xl";
317
321
  export declare const iconSizeToNumber: (size?: IconSize) => number;
318
322
  export type TextSize = "sm" | "md" | "lg" | "xl" | "2xl";
319
- export type ValueMappingItem = {
323
+ export interface ValueMappingItem {
320
324
  value: number;
321
325
  label: string;
322
326
  size?: IconSize;
323
- };
327
+ }
324
328
  export type IconPrefix = "far" | "fas";
325
329
  export interface LayerProps {
326
330
  children: ReactChildren;
@@ -1 +1 @@
1
- {"version":3,"file":"Common.js","sourceRoot":"","sources":["../src/Common.ts"],"names":[],"mappings":"AA+WA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;CACP,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,OAAqB;IAC9C,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,WAAW,CAAC,OAAyB,CAAC,CAAC;AAChD,CAAC;AAqBD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAe,EAAE,EAAE;IAClD,OAAO;QACL,EAAE,EAAE,CAAC;QACL,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,KAAK,EAAE,EAAE;KACV,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;AAClB,CAAC,CAAC;AA+RF,MAAM,YAAY,GAAG;IACnB,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,GAAG;IACZ,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;CACX,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,QAAkB;IAC5C,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"Common.js","sourceRoot":"","sources":["../src/Common.ts"],"names":[],"mappings":"AAoXA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;CACP,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,OAAqB;IAC9C,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,WAAW,CAAC,OAAyB,CAAC,CAAC;AAChD,CAAC;AAqBD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAe,EAAE,EAAE;IAClD,OAAO;QACL,EAAE,EAAE,CAAC;QACL,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,KAAK,EAAE,EAAE;KACV,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;AAClB,CAAC,CAAC;AA+RF,MAAM,YAAY,GAAG;IACnB,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,GAAG;IACZ,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;CACX,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,QAAkB;IAC5C,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC"}
@@ -14,7 +14,10 @@ import { TextField } from "./TextField";
14
14
  export const EmailField = (_a) => {
15
15
  var { errorText, iconName, placeholder, value, onChange, onBlur } = _a, rest = __rest(_a, ["errorText", "iconName", "placeholder", "value", "onChange", "onBlur"]);
16
16
  const [localValue, setLocalValue] = useState(value || "");
17
- const [error, setError] = useState(errorText);
17
+ // Sync local state with incoming prop values
18
+ useEffect(() => {
19
+ setLocalValue(value || "");
20
+ }, [value]);
18
21
  const validateEmail = useCallback((email) => {
19
22
  if (email.trim() === "") {
20
23
  return undefined;
@@ -25,43 +28,20 @@ export const EmailField = (_a) => {
25
28
  }
26
29
  return undefined;
27
30
  }, []);
28
- // Sync local state with incoming prop values
29
- useEffect(() => {
30
- setLocalValue(value || "");
31
- setError(errorText);
32
- }, [value, errorText]);
33
- const handleBlur = useCallback((email) => {
34
- if (onBlur) {
35
- onBlur(email);
36
- }
37
- const validationError = validateEmail(email);
38
- if (validationError) {
39
- setError(validationError);
40
- }
41
- else {
42
- setError(undefined);
31
+ const localOnChange = useCallback((e) => {
32
+ setLocalValue(e);
33
+ const err = validateEmail(e);
34
+ if (!err && onChange) {
35
+ onChange(e);
36
+ }
37
+ }, [onChange, validateEmail, setLocalValue]);
38
+ const localOnBlur = useCallback((e) => {
39
+ setLocalValue(e);
40
+ const err = validateEmail(e);
41
+ if (!err && onBlur) {
42
+ onBlur(e);
43
43
  }
44
44
  }, [onBlur, validateEmail]);
45
- const handleChange = useCallback((email) => {
46
- setLocalValue(email);
47
- const validationError = validateEmail(email);
48
- if (error && !validationError) {
49
- setError(undefined);
50
- }
51
- if (!validationError) {
52
- onChange(email);
53
- }
54
- }, [onChange, error, validateEmail]);
55
- return (React.createElement(TextField, Object.assign({ errorText: error, iconName: iconName, placeholder: placeholder, type: "email", value: localValue, onBlur: (e) => {
56
- handleBlur(e);
57
- if (onBlur) {
58
- onBlur(value || "");
59
- }
60
- }, onChange: (e) => {
61
- handleChange(e);
62
- if (onChange) {
63
- onChange;
64
- }
65
- } }, rest)));
45
+ return (React.createElement(TextField, Object.assign({ errorText: errorText || validateEmail(localValue), iconName: iconName, placeholder: placeholder, type: "email", value: localValue, onBlur: localOnBlur, onChange: localOnChange }, rest)));
66
46
  };
67
47
  //# sourceMappingURL=EmailField.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EmailField.js","sourceRoot":"","sources":["../src/EmailField.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EmailField.js","sourceRoot":"","sources":["../src/EmailField.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAK,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAGlE,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAEtC,MAAM,CAAC,MAAM,UAAU,GAAwB,CAAC,EAQ/C,EAAE,EAAE;QAR2C,EAC9C,SAAS,EACT,QAAQ,EACR,WAAW,EACX,KAAK,EACL,QAAQ,EACR,MAAM,OAEP,EADI,IAAI,cAPuC,uEAQ/C,CADQ;IAEP,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAS,KAAK,IAAI,EAAE,CAAC,CAAC;IAElE,6CAA6C;IAC7C,SAAS,CAAC,GAAG,EAAE;QACb,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC7B,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,KAAa,EAAsB,EAAE;QACtE,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,UAAU,GAAG,4BAA4B,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,8BAA8B,CAAC;QACxC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,CAAS,EAAE,EAAE;QACZ,aAAa,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;YACrB,QAAQ,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;IACH,CAAC,EACD,CAAC,QAAQ,EAAE,aAAa,EAAE,aAAa,CAAC,CACzC,CAAC;IAEF,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,CAAS,EAAE,EAAE;QACZ,aAAa,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;YACnB,MAAM,CAAC,CAAC,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,EACD,CAAC,MAAM,EAAE,aAAa,CAAC,CACxB,CAAC;IACF,OAAO,CACL,oBAAC,SAAS,kBACR,SAAS,EAAE,SAAS,IAAI,aAAa,CAAC,UAAU,CAAC,EACjD,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,aAAa,IACnB,IAAI,EACR,CACH,CAAC;AACJ,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ferns-ui",
3
- "version": "1.15.0",
3
+ "version": "1.16.1",
4
4
  "main": "dist/index.js",
5
5
  "license": "Apache-2.0",
6
6
  "scripts": {
package/src/Accordion.tsx CHANGED
@@ -18,6 +18,7 @@ export const Accordion: FC<AccordionProps> = ({
18
18
  infoModalSubtitle,
19
19
  infoModalText,
20
20
  infoModalTitle,
21
+ onToggle,
21
22
  }) => {
22
23
  const {theme} = useTheme();
23
24
  const [collapsed, setCollapsed] = useState(false);
@@ -58,7 +59,12 @@ export const Accordion: FC<AccordionProps> = ({
58
59
  aria-role="button"
59
60
  hitSlop={{top: 20, bottom: 20, left: 20, right: 20}}
60
61
  testID="accordion-toggle"
61
- onPress={() => setCollapsed(!collapsed)}
62
+ onPress={() => {
63
+ setCollapsed(!collapsed);
64
+ if (onToggle) {
65
+ onToggle(!collapsed);
66
+ }
67
+ }}
62
68
  >
63
69
  <FontAwesome6
64
70
  color={theme.text.link}
package/src/Common.ts CHANGED
@@ -64,6 +64,11 @@ export interface AccordionProps extends InfoModalIconProps {
64
64
  * The title of the accordion.
65
65
  */
66
66
  title: string;
67
+
68
+ /**
69
+ * * Callback fired when the accordion is toggled.
70
+ * */
71
+ onToggle?: (isCollapse: boolean) => void;
67
72
  }
68
73
 
69
74
  export interface BaseProfile {
@@ -420,11 +425,11 @@ export const iconSizeToNumber = (size?: IconSize) => {
420
425
 
421
426
  export type TextSize = "sm" | "md" | "lg" | "xl" | "2xl";
422
427
 
423
- export type ValueMappingItem = {
428
+ export interface ValueMappingItem {
424
429
  value: number;
425
430
  label: string;
426
431
  size?: IconSize;
427
- };
432
+ }
428
433
 
429
434
  export type IconPrefix = "far" | "fas";
430
435
 
@@ -13,7 +13,11 @@ export const EmailField: FC<EmailFieldProps> = ({
13
13
  ...rest
14
14
  }) => {
15
15
  const [localValue, setLocalValue] = useState<string>(value || "");
16
- const [error, setError] = useState<string | undefined>(errorText);
16
+
17
+ // Sync local state with incoming prop values
18
+ useEffect(() => {
19
+ setLocalValue(value || "");
20
+ }, [value]);
17
21
 
18
22
  const validateEmail = useCallback((email: string): string | undefined => {
19
23
  if (email.trim() === "") {
@@ -26,60 +30,36 @@ export const EmailField: FC<EmailFieldProps> = ({
26
30
  return undefined;
27
31
  }, []);
28
32
 
29
- // Sync local state with incoming prop values
30
- useEffect(() => {
31
- setLocalValue(value || "");
32
- setError(errorText);
33
- }, [value, errorText]);
34
-
35
- const handleBlur = useCallback(
36
- (email: string) => {
37
- if (onBlur) {
38
- onBlur(email);
39
- }
40
- const validationError = validateEmail(email);
41
- if (validationError) {
42
- setError(validationError);
43
- } else {
44
- setError(undefined);
33
+ const localOnChange = useCallback(
34
+ (e: string) => {
35
+ setLocalValue(e);
36
+ const err = validateEmail(e);
37
+ if (!err && onChange) {
38
+ onChange(e);
45
39
  }
46
40
  },
47
- [onBlur, validateEmail]
41
+ [onChange, validateEmail, setLocalValue]
48
42
  );
49
43
 
50
- const handleChange = useCallback(
51
- (email: string) => {
52
- setLocalValue(email);
53
- const validationError = validateEmail(email);
54
- if (error && !validationError) {
55
- setError(undefined);
56
- }
57
- if (!validationError) {
58
- onChange(email);
44
+ const localOnBlur = useCallback(
45
+ (e: string) => {
46
+ setLocalValue(e);
47
+ const err = validateEmail(e);
48
+ if (!err && onBlur) {
49
+ onBlur(e);
59
50
  }
60
51
  },
61
- [onChange, error, validateEmail]
52
+ [onBlur, validateEmail]
62
53
  );
63
-
64
54
  return (
65
55
  <TextField
66
- errorText={error}
56
+ errorText={errorText || validateEmail(localValue)}
67
57
  iconName={iconName}
68
58
  placeholder={placeholder}
69
59
  type="email"
70
60
  value={localValue}
71
- onBlur={(e) => {
72
- handleBlur(e);
73
- if (onBlur) {
74
- onBlur(value || "");
75
- }
76
- }}
77
- onChange={(e) => {
78
- handleChange(e);
79
- if (onChange) {
80
- onChange;
81
- }
82
- }}
61
+ onBlur={localOnBlur}
62
+ onChange={localOnChange}
83
63
  {...rest}
84
64
  />
85
65
  );