@wavemaker/app-rn-runtime 11.14.3-rc.6401 → 11.15.0-2.247

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.
Files changed (96) hide show
  1. package/actions/notification-action.js +1 -0
  2. package/actions/notification-action.js.map +1 -1
  3. package/components/basic/bottomsheet/bottomsheet.component.js +58 -23
  4. package/components/basic/bottomsheet/bottomsheet.component.js.map +1 -1
  5. package/components/basic/button/button.component.js +56 -7
  6. package/components/basic/button/button.component.js.map +1 -1
  7. package/components/basic/button/button.styles.js +0 -1
  8. package/components/basic/button/button.styles.js.map +1 -1
  9. package/components/basic/message/message.component.js +1 -1
  10. package/components/basic/message/message.component.js.map +1 -1
  11. package/components/basic/message/message.props.js +1 -0
  12. package/components/basic/message/message.props.js.map +1 -1
  13. package/components/basic/picture/picture.component.js +2 -2
  14. package/components/basic/picture/picture.component.js.map +1 -1
  15. package/components/chart/bar-chart/bar-chart.component.js +13 -2
  16. package/components/chart/bar-chart/bar-chart.component.js.map +1 -1
  17. package/components/chart/bar-chart/bar-chart.props.js +1 -0
  18. package/components/chart/bar-chart/bar-chart.props.js.map +1 -1
  19. package/components/container/accordion/accordion.component.js +10 -3
  20. package/components/container/accordion/accordion.component.js.map +1 -1
  21. package/components/container/accordion/accordion.styles.js +6 -2
  22. package/components/container/accordion/accordion.styles.js.map +1 -1
  23. package/components/container/container.component.js +132 -50
  24. package/components/container/container.component.js.map +1 -1
  25. package/components/container/container.props.js +1 -0
  26. package/components/container/container.props.js.map +1 -1
  27. package/components/container/panel/panel.component.js +8 -1
  28. package/components/container/panel/panel.component.js.map +1 -1
  29. package/components/container/panel/panel.props.js +2 -0
  30. package/components/container/panel/panel.props.js.map +1 -1
  31. package/components/container/tile/tile.component.js +3 -0
  32. package/components/container/tile/tile.component.js.map +1 -1
  33. package/components/container/wizard/wizard.component.js +1 -1
  34. package/components/container/wizard/wizard.component.js.map +1 -1
  35. package/components/container/wizard/wizard.props.js +1 -0
  36. package/components/container/wizard/wizard.props.js.map +1 -1
  37. package/components/container/wizard/wizard.styles.js +0 -13
  38. package/components/container/wizard/wizard.styles.js.map +1 -1
  39. package/components/data/form/form-body/form-body.component.js +2 -1
  40. package/components/data/form/form-body/form-body.component.js.map +1 -1
  41. package/components/data/form/form-footer/form-footer.component.js +2 -1
  42. package/components/data/form/form-footer/form-footer.component.js.map +1 -1
  43. package/components/input/chips/chips.component.js +2 -2
  44. package/components/input/chips/chips.component.js.map +1 -1
  45. package/components/input/chips/chips.styles.js +1 -0
  46. package/components/input/chips/chips.styles.js.map +1 -1
  47. package/components/input/currency/currency.component.js +3 -1
  48. package/components/input/currency/currency.component.js.map +1 -1
  49. package/components/input/epoch/base-datetime.component.js +3 -1
  50. package/components/input/epoch/base-datetime.component.js.map +1 -1
  51. package/components/input/number/number.component.js +2 -1
  52. package/components/input/number/number.component.js.map +1 -1
  53. package/components/input/select/select.component.js +76 -35
  54. package/components/input/select/select.component.js.map +1 -1
  55. package/components/input/text/text.component.js +2 -1
  56. package/components/input/text/text.component.js.map +1 -1
  57. package/components/input/textarea/textarea.component.js +2 -1
  58. package/components/input/textarea/textarea.component.js.map +1 -1
  59. package/components/input/toggle/toggle.component.js +12 -4
  60. package/components/input/toggle/toggle.component.js.map +1 -1
  61. package/components/input/toggle/toggle.props.js +5 -0
  62. package/components/input/toggle/toggle.props.js.map +1 -1
  63. package/components/navigation/popover/popover.component.js +5 -1
  64. package/components/navigation/popover/popover.component.js.map +1 -1
  65. package/core/advanced-promise-rejection-tracker.js +208 -0
  66. package/core/advanced-promise-rejection-tracker.js.map +1 -0
  67. package/core/base.component.js +8 -3
  68. package/core/base.component.js.map +1 -1
  69. package/core/components/error-fallback/error-fallback.component.js +50 -18
  70. package/core/components/error-fallback/error-fallback.component.js.map +1 -1
  71. package/core/components/error-fallback/error-fallback.styles.js +4 -1
  72. package/core/components/error-fallback/error-fallback.styles.js.map +1 -1
  73. package/core/error-boundary.component.js +17 -1
  74. package/core/error-boundary.component.js.map +1 -1
  75. package/core/fixed-view.component.js +19 -2
  76. package/core/fixed-view.component.js.map +1 -1
  77. package/core/global-error-handler.service.js +103 -0
  78. package/core/global-error-handler.service.js.map +1 -0
  79. package/core/tappable.component.js +7 -4
  80. package/core/tappable.component.js.map +1 -1
  81. package/core/toast.service.js.map +1 -1
  82. package/npm-shrinkwrap.json +802 -712
  83. package/package-lock.json +802 -712
  84. package/package.json +2 -2
  85. package/runtime/App.js +124 -13
  86. package/runtime/App.js.map +1 -1
  87. package/runtime/base-page.component.js +11 -2
  88. package/runtime/base-page.component.js.map +1 -1
  89. package/runtime/navigator/drawer.navigator.js +1 -0
  90. package/runtime/navigator/drawer.navigator.js.map +1 -1
  91. package/runtime/services/device/camera-service.js +31 -20
  92. package/runtime/services/device/camera-service.js.map +1 -1
  93. package/styles/theme.js +17 -3
  94. package/styles/theme.js.map +1 -1
  95. package/styles/theme.variables.js +2 -0
  96. package/styles/theme.variables.js.map +1 -1
@@ -1,7 +1,7 @@
1
- import React, { useState } from 'react';
2
- import { Text, View, ScrollView, TouchableOpacity } from 'react-native';
3
- import { navigate, goBackRef } from '@wavemaker/app-rn-runtime/core/navigation.service';
4
- import * as Clipboard from 'expo-clipboard';
1
+ import React, { useState, useEffect } from 'react';
2
+ import { Text, View, ScrollView, TouchableOpacity, BackHandler } from 'react-native';
3
+ import { navigate, goBackRef, getNavigationReady } from '@wavemaker/app-rn-runtime/core/navigation.service';
4
+ import { setStringAsync } from 'expo-clipboard';
5
5
  import injector from '@wavemaker/app-rn-runtime/core/injector';
6
6
  import { ThemeConsumer } from '@wavemaker/app-rn-runtime/styles/theme';
7
7
  import { DEFAULT_CLASS } from './error-fallback.styles';
@@ -14,19 +14,49 @@ const Fallback = props => {
14
14
  const {
15
15
  error,
16
16
  info,
17
- resetErrorBoundary
17
+ resetErrorBoundary,
18
+ errorType = 'render'
18
19
  } = props;
19
20
  const [showStack, setShowStack] = useState(false);
20
21
  const [isCopied, setIsCopied] = useState(false);
21
22
  const appConfig = injector.get('APP_CONFIG');
22
23
  const insets = useSafeAreaInsets();
24
+ useEffect(() => {
25
+ const subscription = BackHandler.addEventListener('hardwareBackPress', () => {
26
+ handleGoBack();
27
+ return true;
28
+ });
29
+ return () => {
30
+ subscription.remove();
31
+ };
32
+ }, [resetErrorBoundary]);
33
+
34
+ // Dynamic titles based on error type
35
+ const getErrorTitle = () => {
36
+ if (errorType === 'javascript') {
37
+ return 'Something went wrong.';
38
+ }
39
+ return 'Something went wrong.'; // Same for now, can be customized
40
+ };
41
+ const getErrorSubtitle = () => {
42
+ if (errorType === 'javascript') {
43
+ return 'An unexpected error occurred in the application.';
44
+ }
45
+ return 'Please try again.';
46
+ };
23
47
  const copyErrorToClipboard = async () => {
24
- const errorDetails = `
48
+ let errorDetails = `
49
+ Error Type: ${errorType}
25
50
  Error: ${(error === null || error === void 0 ? void 0 : error.message) || 'Unknown error'}
26
- Stack: ${(error === null || error === void 0 ? void 0 : error.stack) || 'No stack available'}
27
- Component Stack: ${(info === null || info === void 0 ? void 0 : info.componentStack) || 'No component stack available'}
28
- `.trim();
29
- await Clipboard.setStringAsync(errorDetails);
51
+ Stack: ${(error === null || error === void 0 ? void 0 : error.stack) || 'No stack available'}`;
52
+
53
+ // Add component stack for render errors
54
+ if (errorType === 'render' && info !== null && info !== void 0 && info.componentStack) {
55
+ errorDetails += `
56
+ Component Stack: ${info.componentStack}`;
57
+ }
58
+ errorDetails = errorDetails.trim();
59
+ await setStringAsync(errorDetails);
30
60
  setIsCopied(true);
31
61
  setTimeout(() => {
32
62
  setIsCopied(false);
@@ -63,12 +93,12 @@ Component Stack: ${(info === null || info === void 0 ? void 0 : info.componentSt
63
93
  name: "picture2",
64
94
  classname: "error-fallback-image"
65
95
  })), /*#__PURE__*/React.createElement(WmLabel, {
66
- caption: 'Something went wrong.',
96
+ caption: getErrorTitle(),
67
97
  classname: "error-fallback-title"
68
98
  }), /*#__PURE__*/React.createElement(WmLabel, {
69
- caption: 'Please try again.',
99
+ caption: getErrorSubtitle(),
70
100
  classname: "error-fallback-subtitle"
71
- }), /*#__PURE__*/React.createElement(View, {
101
+ }), __DEV__ && /*#__PURE__*/React.createElement(View, {
72
102
  style: errorFallbackStyles.errorCard
73
103
  }, /*#__PURE__*/React.createElement(View, {
74
104
  style: errorFallbackStyles.errorCardRow
@@ -81,8 +111,10 @@ Component Stack: ${(info === null || info === void 0 ? void 0 : info.componentSt
81
111
  classname: "error-fallback-error-label"
82
112
  })), /*#__PURE__*/React.createElement(WmLabel, {
83
113
  caption: (error === null || error === void 0 ? void 0 : error.message) || 'An unexpected error occurred',
84
- classname: "error-fallback-error-message"
85
- })), /*#__PURE__*/React.createElement(TouchableOpacity, {
114
+ classname: "error-fallback-error-message",
115
+ nooflines: 1,
116
+ enableandroidellipsis: true
117
+ })), __DEV__ && /*#__PURE__*/React.createElement(TouchableOpacity, {
86
118
  style: errorFallbackStyles.toggleButton,
87
119
  onPress: () => setShowStack(!showStack)
88
120
  }, /*#__PURE__*/React.createElement(WmLabel, {
@@ -98,7 +130,7 @@ Component Stack: ${(info === null || info === void 0 ? void 0 : info.componentSt
98
130
  id: 'error-stack-arrow-down',
99
131
  iconclass: "wi wi-keyboard-arrow-down",
100
132
  classname: "error-fallback-toggle-icon"
101
- }))), showStack && /*#__PURE__*/React.createElement(View, {
133
+ }))), showStack && __DEV__ && /*#__PURE__*/React.createElement(View, {
102
134
  style: errorFallbackStyles.stackCard
103
135
  }, /*#__PURE__*/React.createElement(View, {
104
136
  style: errorFallbackStyles.stackHeader
@@ -117,13 +149,13 @@ Component Stack: ${(info === null || info === void 0 ? void 0 : info.componentSt
117
149
  }, /*#__PURE__*/React.createElement(WmLabel, {
118
150
  caption: (error === null || error === void 0 ? void 0 : error.stack) || 'No stack trace available',
119
151
  classname: "error-fallback-stacktext"
120
- }), (info === null || info === void 0 ? void 0 : info.componentStack) && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(WmLabel, {
152
+ }), errorType === 'render' && (info === null || info === void 0 ? void 0 : info.componentStack) && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(WmLabel, {
121
153
  caption: "Component Stack:",
122
154
  classname: "error-fallback-component-stacktitle"
123
155
  }), /*#__PURE__*/React.createElement(WmLabel, {
124
156
  caption: info.componentStack,
125
157
  classname: "error-fallback-stacktext"
126
- }))))), /*#__PURE__*/React.createElement(View, {
158
+ }))))), getNavigationReady() && /*#__PURE__*/React.createElement(View, {
127
159
  style: errorFallbackStyles.buttonContainer
128
160
  }, /*#__PURE__*/React.createElement(WmButton, {
129
161
  caption: "Go to Home",
@@ -1 +1 @@
1
- {"version":3,"names":["React","useState","Text","View","ScrollView","TouchableOpacity","navigate","goBackRef","Clipboard","injector","ThemeConsumer","DEFAULT_CLASS","WmIcon","useSafeAreaInsets","WmButton","WmLabel","WmPicture","Fallback","props","error","info","resetErrorBoundary","showStack","setShowStack","isCopied","setIsCopied","appConfig","get","insets","copyErrorToClipboard","errorDetails","message","stack","componentStack","trim","setStringAsync","setTimeout","handleGoBack","handleGoHome","appProperties","homePage","createElement","theme","_appConfig$preference","errorFallbackStyles","getStyle","imageSource","preferences","errorImage","style","paddingTop","top","paddingBottom","bottom","root","infoContainer","imageContainer","picturesource","resizemode","name","classname","caption","errorCard","errorCardRow","id","iconclass","toggleButton","onPress","stackCard","stackHeader","onTap","disabled","stackContainer","showsVerticalScrollIndicator","Fragment","buttonContainer"],"sources":["error-fallback.component.tsx"],"sourcesContent":["import React, { useState, useContext, useEffect } from 'react';\nimport { Text, View, ScrollView, TouchableOpacity, Image } from 'react-native';\nimport {\n navigate,\n goBackRef,\n} from '@wavemaker/app-rn-runtime/core/navigation.service';\nimport * as Clipboard from 'expo-clipboard';\nimport AppConfig from '@wavemaker/app-rn-runtime/core/AppConfig';\nimport injector from '@wavemaker/app-rn-runtime/core/injector';\n\nimport { ThemeConsumer } from '@wavemaker/app-rn-runtime/styles/theme';\nimport { DEFAULT_CLASS, ErrorFallbackStyles } from './error-fallback.styles';\nimport WmIcon from '@wavemaker/app-rn-runtime/components/basic/icon/icon.component';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport WmButton from '@wavemaker/app-rn-runtime/components/basic/button/button.component';\nimport WmLabel from '@wavemaker/app-rn-runtime/components/basic/label/label.component';\nimport WmPicture from '@wavemaker/app-rn-runtime/components/basic/picture/picture.component';\n\nconst Fallback = (props: any) => {\n const { error, info, resetErrorBoundary } = props;\n const [showStack, setShowStack] = useState(false);\n const [isCopied, setIsCopied] = useState(false);\n const appConfig = injector.get<AppConfig>('APP_CONFIG');\n const insets = useSafeAreaInsets();\n\n const copyErrorToClipboard = async () => {\n const errorDetails = `\nError: ${error?.message || 'Unknown error'}\nStack: ${error?.stack || 'No stack available'}\nComponent Stack: ${info?.componentStack || 'No component stack available'}\n `.trim();\n\n await Clipboard.setStringAsync(errorDetails);\n setIsCopied(true);\n\n setTimeout(() => {\n setIsCopied(false);\n }, 2000);\n };\n\n const handleGoBack = () => {\n goBackRef();\n if (resetErrorBoundary) {\n resetErrorBoundary();\n }\n };\n\n const handleGoHome = () => {\n navigate(appConfig.appProperties.homePage, {});\n if (resetErrorBoundary) {\n resetErrorBoundary();\n }\n };\n\n return (\n <ThemeConsumer>\n {(theme) => {\n const errorFallbackStyles = theme.getStyle(\n DEFAULT_CLASS\n ) as ErrorFallbackStyles;\n const imageSource = appConfig?.preferences?.errorImage;\n\n return (\n <View\n style={[\n { paddingTop: insets?.top, paddingBottom: insets?.bottom },\n errorFallbackStyles.root,\n ]}\n >\n {/* Error Image */}\n <View style={errorFallbackStyles.infoContainer}>\n <View style={errorFallbackStyles.imageContainer}>\n <WmPicture\n picturesource={imageSource}\n resizemode=\"contain\"\n name=\"picture2\"\n classname=\"error-fallback-image\"\n />\n </View>\n\n <WmLabel\n caption={'Something went wrong.'}\n classname=\"error-fallback-title\"\n />\n <WmLabel\n caption={'Please try again.'}\n classname=\"error-fallback-subtitle\"\n />\n\n <View style={errorFallbackStyles.errorCard}>\n <View style={errorFallbackStyles.errorCardRow}>\n <WmIcon\n id={'error-icon'}\n iconclass=\"wi wi-error\"\n classname=\"error-fallback-erroricon\"\n ></WmIcon>\n <WmLabel\n caption={'Error'}\n classname=\"error-fallback-error-label\"\n />\n </View>\n <WmLabel\n caption={error?.message || 'An unexpected error occurred'}\n classname=\"error-fallback-error-message\"\n />\n </View>\n\n <TouchableOpacity\n style={errorFallbackStyles.toggleButton}\n onPress={() => setShowStack(!showStack)}\n >\n <WmLabel\n caption={`${showStack ? 'Hide' : 'Show'} Error Details`}\n classname=\"error-fallback-toggle-heading\"\n />\n <Text style={{}}>\n {showStack ? (\n <WmIcon\n id={'error-stack-arrow-up'}\n iconclass=\"wi wi-keyboard-arrow-up\"\n classname=\"error-fallback-toggle-icon\"\n ></WmIcon>\n ) : (\n <WmIcon\n id={'error-stack-arrow-down'}\n iconclass=\"wi wi-keyboard-arrow-down\"\n classname=\"error-fallback-toggle-icon\"\n ></WmIcon>\n )}\n </Text>\n </TouchableOpacity>\n\n {showStack && (\n <View style={errorFallbackStyles.stackCard}>\n <View style={errorFallbackStyles.stackHeader}>\n <WmLabel\n caption={'Error Stack:'}\n classname=\"error-fallback-stacktitle\"\n />\n <WmIcon\n id={'error-stack-content-copy'}\n iconclass=\"wi wi-content-copy\"\n onTap={copyErrorToClipboard}\n disabled={isCopied}\n classname={\n isCopied\n ? 'error-fallback-copyicon error-fallback-copiedIcon'\n : 'error-fallback-copyicon'\n }\n />\n </View>\n <ScrollView\n style={errorFallbackStyles.stackContainer}\n showsVerticalScrollIndicator={true}\n >\n <WmLabel\n caption={error?.stack || 'No stack trace available'}\n classname=\"error-fallback-stacktext\"\n />\n {info?.componentStack && (\n <>\n <WmLabel\n caption=\"Component Stack:\"\n classname=\"error-fallback-component-stacktitle\"\n />\n <WmLabel\n caption={info.componentStack}\n classname=\"error-fallback-stacktext\"\n />\n </>\n )}\n </ScrollView>\n </View>\n )}\n </View>\n\n <View style={errorFallbackStyles.buttonContainer}>\n <WmButton\n caption=\"Go to Home\"\n onTap={handleGoHome}\n classname=\"error-fallback-gotohome-btn\"\n />\n <WmButton\n caption=\"Go Back\"\n onTap={handleGoBack}\n classname=\"error-fallback-goback-btn\"\n />\n </View>\n </View>\n );\n }}\n </ThemeConsumer>\n );\n};\n\nexport default Fallback;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useState","useEffect","Text","View","ScrollView","TouchableOpacity","BackHandler","navigate","goBackRef","getNavigationReady","setStringAsync","injector","ThemeConsumer","DEFAULT_CLASS","WmIcon","useSafeAreaInsets","WmButton","WmLabel","WmPicture","Fallback","props","error","info","resetErrorBoundary","errorType","showStack","setShowStack","isCopied","setIsCopied","appConfig","get","insets","subscription","addEventListener","handleGoBack","remove","getErrorTitle","getErrorSubtitle","copyErrorToClipboard","errorDetails","message","stack","componentStack","trim","setTimeout","handleGoHome","appProperties","homePage","createElement","theme","_appConfig$preference","errorFallbackStyles","getStyle","imageSource","preferences","errorImage","style","paddingTop","top","paddingBottom","bottom","root","infoContainer","imageContainer","picturesource","resizemode","name","classname","caption","__DEV__","errorCard","errorCardRow","id","iconclass","nooflines","enableandroidellipsis","toggleButton","onPress","stackCard","stackHeader","onTap","disabled","stackContainer","showsVerticalScrollIndicator","Fragment","buttonContainer"],"sources":["error-fallback.component.tsx"],"sourcesContent":["import React, { useState, useContext, useEffect } from 'react';\nimport { Text, View, ScrollView, TouchableOpacity, Image, BackHandler } from 'react-native';\nimport {\n navigate,\n goBackRef,\n getNavigationReady,\n} from '@wavemaker/app-rn-runtime/core/navigation.service';\nimport { setStringAsync } from 'expo-clipboard';\nimport AppConfig from '@wavemaker/app-rn-runtime/core/AppConfig';\nimport injector from '@wavemaker/app-rn-runtime/core/injector';\n\nimport { ThemeConsumer } from '@wavemaker/app-rn-runtime/styles/theme';\nimport { DEFAULT_CLASS, ErrorFallbackStyles } from './error-fallback.styles';\nimport WmIcon from '@wavemaker/app-rn-runtime/components/basic/icon/icon.component';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport WmButton from '@wavemaker/app-rn-runtime/components/basic/button/button.component';\nimport WmLabel from '@wavemaker/app-rn-runtime/components/basic/label/label.component';\nimport WmPicture from '@wavemaker/app-rn-runtime/components/basic/picture/picture.component';\n\ninterface FallbackProps {\n error: Error;\n info?: any;\n resetErrorBoundary?: () => void;\n errorType?: 'render' | 'javascript';\n}\n\nconst Fallback = (props: FallbackProps) => {\n const { error, info, resetErrorBoundary, errorType = 'render' } = props;\n const [showStack, setShowStack] = useState(false);\n const [isCopied, setIsCopied] = useState(false);\n const appConfig = injector.get<AppConfig>('APP_CONFIG');\n const insets = useSafeAreaInsets();\n\n useEffect(() => {\n const subscription = BackHandler.addEventListener('hardwareBackPress', () => {\n handleGoBack();\n return true;\n });\n\n return () => {\n subscription.remove();\n };\n}, [resetErrorBoundary]);\n\n // Dynamic titles based on error type\n const getErrorTitle = () => {\n if (errorType === 'javascript') {\n return 'Something went wrong.';\n }\n return 'Something went wrong.'; // Same for now, can be customized\n };\n\n const getErrorSubtitle = () => {\n if (errorType === 'javascript') {\n return 'An unexpected error occurred in the application.';\n }\n return 'Please try again.';\n };\n\n const copyErrorToClipboard = async () => {\n let errorDetails = `\nError Type: ${errorType}\nError: ${error?.message || 'Unknown error'}\nStack: ${error?.stack || 'No stack available'}`;\n\n // Add component stack for render errors\n if (errorType === 'render' && info?.componentStack) {\n errorDetails += `\nComponent Stack: ${info.componentStack}`;\n }\n\n errorDetails = errorDetails.trim();\n\n await setStringAsync(errorDetails);\n setIsCopied(true);\n\n setTimeout(() => {\n setIsCopied(false);\n }, 2000);\n };\n\n const handleGoBack = () => {\n goBackRef();\n if (resetErrorBoundary) {\n resetErrorBoundary();\n }\n };\n\n const handleGoHome = () => {\n navigate(appConfig.appProperties.homePage, {});\n if (resetErrorBoundary) {\n resetErrorBoundary();\n }\n };\n\n return (\n <ThemeConsumer>\n {(theme) => {\n const errorFallbackStyles = theme.getStyle(\n DEFAULT_CLASS\n ) as ErrorFallbackStyles;\n const imageSource = appConfig?.preferences?.errorImage;\n\n return (\n <View\n style={[\n { paddingTop: insets?.top, paddingBottom: insets?.bottom },\n errorFallbackStyles.root,\n ]}\n >\n {/* Error Image */}\n <View style={errorFallbackStyles.infoContainer}>\n <View style={errorFallbackStyles.imageContainer}>\n <WmPicture\n picturesource={imageSource}\n resizemode=\"contain\"\n name=\"picture2\"\n classname=\"error-fallback-image\"\n />\n </View>\n\n <WmLabel\n caption={getErrorTitle()}\n classname=\"error-fallback-title\"\n />\n <WmLabel\n caption={getErrorSubtitle()}\n classname=\"error-fallback-subtitle\"\n />\n\n {__DEV__ && (<View style={errorFallbackStyles.errorCard}>\n <View style={errorFallbackStyles.errorCardRow}>\n <WmIcon\n id={'error-icon'}\n iconclass=\"wi wi-error\"\n classname=\"error-fallback-erroricon\"\n ></WmIcon>\n <WmLabel\n caption={'Error'}\n classname=\"error-fallback-error-label\"\n />\n </View>\n <WmLabel\n caption={error?.message || 'An unexpected error occurred'}\n classname=\"error-fallback-error-message\"\n nooflines={1}\n enableandroidellipsis={true}\n />\n </View>)}\n\n {__DEV__ && (<TouchableOpacity\n style={errorFallbackStyles.toggleButton}\n onPress={() => setShowStack(!showStack)}\n >\n <WmLabel\n caption={`${showStack ? 'Hide' : 'Show'} Error Details`}\n classname=\"error-fallback-toggle-heading\"\n />\n <Text style={{}}>\n {showStack ? (\n <WmIcon\n id={'error-stack-arrow-up'}\n iconclass=\"wi wi-keyboard-arrow-up\"\n classname=\"error-fallback-toggle-icon\"\n ></WmIcon>\n ) : (\n <WmIcon\n id={'error-stack-arrow-down'}\n iconclass=\"wi wi-keyboard-arrow-down\"\n classname=\"error-fallback-toggle-icon\"\n ></WmIcon>\n )}\n </Text>\n </TouchableOpacity>)}\n\n {(showStack && __DEV__) && (\n <View style={errorFallbackStyles.stackCard}>\n <View style={errorFallbackStyles.stackHeader}>\n <WmLabel\n caption={'Error Stack:'}\n classname=\"error-fallback-stacktitle\"\n />\n <WmIcon\n id={'error-stack-content-copy'}\n iconclass=\"wi wi-content-copy\"\n onTap={copyErrorToClipboard}\n disabled={isCopied}\n classname={\n isCopied\n ? 'error-fallback-copyicon error-fallback-copiedIcon'\n : 'error-fallback-copyicon'\n }\n />\n </View>\n <ScrollView\n style={errorFallbackStyles.stackContainer}\n showsVerticalScrollIndicator={true}\n >\n <WmLabel\n caption={error?.stack || 'No stack trace available'}\n classname=\"error-fallback-stacktext\"\n />\n {errorType === 'render' && info?.componentStack && (\n <>\n <WmLabel\n caption=\"Component Stack:\"\n classname=\"error-fallback-component-stacktitle\"\n />\n <WmLabel\n caption={info.componentStack}\n classname=\"error-fallback-stacktext\"\n />\n </>\n )}\n </ScrollView>\n </View>\n )}\n </View>\n\n {getNavigationReady() && <View style={errorFallbackStyles.buttonContainer}>\n <WmButton\n caption=\"Go to Home\"\n onTap={handleGoHome}\n classname=\"error-fallback-gotohome-btn\"\n />\n <WmButton\n caption=\"Go Back\"\n onTap={handleGoBack}\n classname=\"error-fallback-goback-btn\"\n />\n </View>}\n </View>\n );\n }}\n </ThemeConsumer>\n );\n};\n\nexport default Fallback;\n"],"mappings":"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","ignoreList":[]}
@@ -99,7 +99,7 @@ BASE_THEME.registerStyle((themeVariables, addStyle) => {
99
99
  fontSize: 18,
100
100
  color: '#3B82F6',
101
101
  borderRadius: 6,
102
- padding: 0
102
+ paddingRight: 0
103
103
  },
104
104
  copiedIcon: {
105
105
  color: '#48bb78'
@@ -186,6 +186,9 @@ BASE_THEME.registerStyle((themeVariables, addStyle) => {
186
186
  text: defaultStyles.errorLabel
187
187
  });
188
188
  addStyle('error-fallback-error-message', '', {
189
+ root: {
190
+ width: "100%"
191
+ },
189
192
  text: defaultStyles.errorMessage
190
193
  });
191
194
  addStyle('error-fallback-toggle-heading', '', {
@@ -1 +1 @@
1
- {"version":3,"names":["BASE_THEME","defineStyles","DEFAULT_CLASS","registerStyle","themeVariables","addStyle","defaultStyles","root","flex","paddingHorizontal","backgroundColor","justifyContent","text","infoContainer","width","imageContainer","alignItems","marginVertical","errorImage","maxWidth","height","undefined","aspectRatio","maxHeight","alignSelf","title","fontSize","fontWeight","textAlign","color","marginBottom","subtitle","errorCard","borderRadius","paddingVertical","errorCardRow","flexDirection","errorLabel","errorMessage","lineHeight","toggleButton","toggleText","marginRight","toggleIcon","padding","stackCard","stackHeader","stackTitle","copyIcon","copiedIcon","stackContainer","marginTop","stackText","fontFamily","componentStackTitle","buttonContainer","primaryButton","primaryButtonText","secondaryButton","secondaryButtonText","icon"],"sources":["error-fallback.styles.ts"],"sourcesContent":["import BASE_THEME, { AllStyle } from '@wavemaker/app-rn-runtime/styles/theme';\nimport {\n BaseStyles,\n defineStyles,\n} from '@wavemaker/app-rn-runtime/core/base.component';\n\nexport type ErrorFallbackStyles = BaseStyles & {\n imageContainer: AllStyle;\n errorImage: AllStyle;\n title: AllStyle;\n subtitle: AllStyle;\n errorCard: AllStyle;\n errorLabel: AllStyle;\n errorMessage: AllStyle;\n toggleButton: AllStyle;\n toggleText: AllStyle;\n toggleIcon: AllStyle;\n stackCard: AllStyle;\n stackHeader: AllStyle;\n stackTitle: AllStyle;\n copyIcon: AllStyle;\n copiedIcon: AllStyle;\n stackContainer: AllStyle;\n stackText: AllStyle;\n componentStackTitle: AllStyle;\n buttonContainer: AllStyle;\n primaryButton: AllStyle;\n primaryButtonText: AllStyle;\n secondaryButton: AllStyle;\n secondaryButtonText: AllStyle;\n};\n\nexport const DEFAULT_CLASS = 'app-error-fallback';\n\nBASE_THEME.registerStyle((themeVariables, addStyle) => {\n const defaultStyles: ErrorFallbackStyles = defineStyles({\n root: {\n flex: 1,\n paddingHorizontal: 20,\n backgroundColor: '#fff',\n justifyContent: 'center',\n },\n text: {},\n infoContainer: {\n flex: 1,\n width: '100%',\n justifyContent: 'center',\n },\n imageContainer: {\n alignItems: 'center',\n marginVertical: 24,\n },\n errorImage: {\n width: '80%',\n maxWidth: 150,\n height: undefined,\n aspectRatio: 1.2,\n maxHeight: 150,\n alignSelf: 'center',\n },\n title: {\n fontSize: 24,\n fontWeight: '700',\n textAlign: 'center',\n color: '#2d3748',\n marginBottom: 8,\n },\n subtitle: {\n fontSize: 14,\n textAlign: 'center',\n color: '#71717A',\n marginBottom: 24,\n fontWeight: '400',\n },\n errorCard: {\n backgroundColor: 'rgba(245, 71, 70, 0.1)',\n borderRadius: 12,\n paddingHorizontal: 16,\n paddingVertical: 12,\n height: 70,\n marginBottom: 16,\n },\n errorCardRow: {\n flexDirection: 'row',\n alignItems: 'center',\n marginBottom: 8,\n },\n errorLabel: {\n fontSize: 14,\n fontWeight: '600',\n color: '#F54746',\n },\n errorMessage: {\n fontSize: 14,\n color: '#71717A',\n lineHeight: 20,\n fontWeight: 500,\n },\n toggleButton: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: 16,\n },\n toggleText: {\n fontSize: 12,\n color: '#71717A',\n marginRight: 8,\n },\n toggleIcon: {\n fontSize: 18,\n color: '#090A0A',\n padding: 0,\n },\n stackCard: {\n backgroundColor: '#fff',\n marginBottom: 24,\n },\n stackHeader: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n stackTitle: {\n fontSize: 16,\n fontWeight: '600',\n color: '#000',\n },\n copyIcon: {\n fontSize: 18,\n color: '#3B82F6',\n borderRadius: 6,\n padding: 0,\n },\n copiedIcon: {\n color: '#48bb78',\n },\n stackContainer: {\n maxHeight: 200,\n marginTop: 12,\n },\n stackText: {\n fontSize: 12,\n color: '#4a5568',\n lineHeight: 16,\n fontFamily: 'monospace',\n },\n componentStackTitle: {\n fontSize: 14,\n fontWeight: '600',\n color: '#2d3748',\n marginTop: 16,\n marginBottom: 8,\n },\n buttonContainer: {\n width: '100%',\n maxWidth: 400,\n alignSelf: 'center',\n marginTop: 24,\n marginBottom: 16,\n },\n primaryButton: {\n backgroundColor: '#3B82F6',\n borderRadius: 12,\n paddingVertical: 16,\n paddingHorizontal: 24,\n alignItems: 'center',\n marginBottom: 16,\n alignSelf: 'center',\n width: '100%',\n },\n primaryButtonText: {\n color: '#FFFFFF',\n fontWeight: '700',\n fontSize: 16,\n lineHeight: 24,\n },\n secondaryButton: {\n alignItems: 'center',\n paddingVertical: 12,\n paddingHorizontal: 24,\n alignSelf: 'center',\n width: '100%',\n },\n secondaryButtonText: {\n color: '#242424',\n fontWeight: '600',\n fontSize: 16,\n lineHeight: 24,\n },\n });\n\n addStyle(DEFAULT_CLASS, '', defaultStyles);\n addStyle('error-fallback-image', '', {\n root: defaultStyles.errorImage,\n });\n addStyle('error-fallback-title', '', {\n root: { alignSelf: 'center' },\n text: defaultStyles.title,\n });\n addStyle('error-fallback-subtitle', '', {\n root: { alignSelf: 'center' },\n text: defaultStyles.subtitle,\n });\n addStyle('error-fallback-erroricon', '', {\n icon: {fontSize: 15},\n text: { color: '#EF4444'},\n });\n addStyle('error-fallback-error-label', '', {\n text: defaultStyles.errorLabel,\n });\n addStyle('error-fallback-error-message', '', {\n text: defaultStyles.errorMessage,\n });\n addStyle('error-fallback-toggle-heading', '', {\n text: defaultStyles.toggleText,\n });\n addStyle('error-fallback-toggle-icon', '', {\n text: defaultStyles.toggleIcon,\n });\n addStyle('error-fallback-stacktitle', '', {\n root: { alignSelf: 'center' },\n text: defaultStyles.stackTitle,\n });\n addStyle('error-fallback-copyicon', '', {\n icon: defaultStyles.copyIcon,\n });\n addStyle('error-fallback-copiedIcon', '', {\n icon: defaultStyles.copiedIcon,\n });\n addStyle('error-fallback-stacktext', '', {\n text: defaultStyles.stackText,\n });\n addStyle('error-fallback-component-stacktitle', '', {\n text: defaultStyles.componentStackTitle,\n });\n addStyle('error-fallback-gotohome-btn', '', {\n root: defaultStyles.primaryButton,\n text: defaultStyles.primaryButtonText,\n });\n addStyle('error-fallback-goback-btn', '', {\n root: defaultStyles.secondaryButton,\n text: defaultStyles.secondaryButtonText,\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["BASE_THEME","defineStyles","DEFAULT_CLASS","registerStyle","themeVariables","addStyle","defaultStyles","root","flex","paddingHorizontal","backgroundColor","justifyContent","text","infoContainer","width","imageContainer","alignItems","marginVertical","errorImage","maxWidth","height","undefined","aspectRatio","maxHeight","alignSelf","title","fontSize","fontWeight","textAlign","color","marginBottom","subtitle","errorCard","borderRadius","paddingVertical","errorCardRow","flexDirection","errorLabel","errorMessage","lineHeight","toggleButton","toggleText","marginRight","toggleIcon","padding","stackCard","stackHeader","stackTitle","copyIcon","paddingRight","copiedIcon","stackContainer","marginTop","stackText","fontFamily","componentStackTitle","buttonContainer","primaryButton","primaryButtonText","secondaryButton","secondaryButtonText","icon"],"sources":["error-fallback.styles.ts"],"sourcesContent":["import BASE_THEME, { AllStyle } from '@wavemaker/app-rn-runtime/styles/theme';\nimport {\n BaseStyles,\n defineStyles,\n} from '@wavemaker/app-rn-runtime/core/base.component';\n\nexport type ErrorFallbackStyles = BaseStyles & {\n imageContainer: AllStyle;\n errorImage: AllStyle;\n title: AllStyle;\n subtitle: AllStyle;\n errorCard: AllStyle;\n errorLabel: AllStyle;\n errorMessage: AllStyle;\n toggleButton: AllStyle;\n toggleText: AllStyle;\n toggleIcon: AllStyle;\n stackCard: AllStyle;\n stackHeader: AllStyle;\n stackTitle: AllStyle;\n copyIcon: AllStyle;\n copiedIcon: AllStyle;\n stackContainer: AllStyle;\n stackText: AllStyle;\n componentStackTitle: AllStyle;\n buttonContainer: AllStyle;\n primaryButton: AllStyle;\n primaryButtonText: AllStyle;\n secondaryButton: AllStyle;\n secondaryButtonText: AllStyle;\n};\n\nexport const DEFAULT_CLASS = 'app-error-fallback';\n\nBASE_THEME.registerStyle((themeVariables, addStyle) => {\n const defaultStyles: ErrorFallbackStyles = defineStyles({\n root: {\n flex: 1,\n paddingHorizontal: 20,\n backgroundColor: '#fff',\n justifyContent: 'center',\n },\n text: {},\n infoContainer: {\n flex: 1,\n width: '100%',\n justifyContent: 'center',\n },\n imageContainer: {\n alignItems: 'center',\n marginVertical: 24,\n },\n errorImage: {\n width: '80%',\n maxWidth: 150,\n height: undefined,\n aspectRatio: 1.2,\n maxHeight: 150,\n alignSelf: 'center',\n },\n title: {\n fontSize: 24,\n fontWeight: '700',\n textAlign: 'center',\n color: '#2d3748',\n marginBottom: 8,\n },\n subtitle: {\n fontSize: 14,\n textAlign: 'center',\n color: '#71717A',\n marginBottom: 24,\n fontWeight: '400',\n },\n errorCard: {\n backgroundColor: 'rgba(245, 71, 70, 0.1)',\n borderRadius: 12,\n paddingHorizontal: 16,\n paddingVertical: 12,\n height: 70,\n marginBottom: 16,\n },\n errorCardRow: {\n flexDirection: 'row',\n alignItems: 'center',\n marginBottom: 8,\n },\n errorLabel: {\n fontSize: 14,\n fontWeight: '600',\n color: '#F54746',\n },\n errorMessage: {\n fontSize: 14,\n color: '#71717A',\n lineHeight: 20,\n fontWeight: 500,\n },\n toggleButton: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: 16,\n },\n toggleText: {\n fontSize: 12,\n color: '#71717A',\n marginRight: 8,\n },\n toggleIcon: {\n fontSize: 18,\n color: '#090A0A',\n padding: 0,\n },\n stackCard: {\n backgroundColor: '#fff',\n marginBottom: 24,\n },\n stackHeader: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n stackTitle: {\n fontSize: 16,\n fontWeight: '600',\n color: '#000',\n },\n copyIcon: {\n fontSize: 18,\n color: '#3B82F6',\n borderRadius: 6,\n paddingRight:0,\n },\n copiedIcon: {\n color: '#48bb78',\n },\n stackContainer: {\n maxHeight: 200,\n marginTop: 12,\n },\n stackText: {\n fontSize: 12,\n color: '#4a5568',\n lineHeight: 16,\n fontFamily: 'monospace',\n },\n componentStackTitle: {\n fontSize: 14,\n fontWeight: '600',\n color: '#2d3748',\n marginTop: 16,\n marginBottom: 8,\n },\n buttonContainer: {\n width: '100%',\n maxWidth: 400,\n alignSelf: 'center',\n marginTop: 24,\n marginBottom: 16,\n },\n primaryButton: {\n backgroundColor: '#3B82F6',\n borderRadius: 12,\n paddingVertical: 16,\n paddingHorizontal: 24,\n alignItems: 'center',\n marginBottom: 16,\n alignSelf: 'center',\n width: '100%',\n },\n primaryButtonText: {\n color: '#FFFFFF',\n fontWeight: '700',\n fontSize: 16,\n lineHeight: 24,\n },\n secondaryButton: {\n alignItems: 'center',\n paddingVertical: 12,\n paddingHorizontal: 24,\n alignSelf: 'center',\n width: '100%',\n },\n secondaryButtonText: {\n color: '#242424',\n fontWeight: '600',\n fontSize: 16,\n lineHeight: 24,\n },\n });\n\n addStyle(DEFAULT_CLASS, '', defaultStyles);\n addStyle('error-fallback-image', '', {\n root: defaultStyles.errorImage,\n });\n addStyle('error-fallback-title', '', {\n root: { alignSelf: 'center' },\n text: defaultStyles.title,\n });\n addStyle('error-fallback-subtitle', '', {\n root: { alignSelf: 'center' },\n text: defaultStyles.subtitle,\n });\n addStyle('error-fallback-erroricon', '', {\n icon: {fontSize: 15},\n text: { color: '#EF4444'},\n });\n addStyle('error-fallback-error-label', '', {\n text: defaultStyles.errorLabel,\n });\n addStyle('error-fallback-error-message', '', {\n root:{width:\"100%\"},\n text: defaultStyles.errorMessage,\n });\n addStyle('error-fallback-toggle-heading', '', {\n text: defaultStyles.toggleText,\n });\n addStyle('error-fallback-toggle-icon', '', {\n text: defaultStyles.toggleIcon,\n });\n addStyle('error-fallback-stacktitle', '', {\n root: { alignSelf: 'center' },\n text: defaultStyles.stackTitle,\n });\n addStyle('error-fallback-copyicon', '', {\n icon: defaultStyles.copyIcon,\n });\n addStyle('error-fallback-copiedIcon', '', {\n icon: defaultStyles.copiedIcon,\n });\n addStyle('error-fallback-stacktext', '', {\n text: defaultStyles.stackText,\n });\n addStyle('error-fallback-component-stacktitle', '', {\n text: defaultStyles.componentStackTitle,\n });\n addStyle('error-fallback-gotohome-btn', '', {\n root: defaultStyles.primaryButton,\n text: defaultStyles.primaryButtonText,\n });\n addStyle('error-fallback-goback-btn', '', {\n root: defaultStyles.secondaryButton,\n text: defaultStyles.secondaryButtonText,\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -4,6 +4,7 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
4
4
  import * as React from 'react';
5
5
  import Fallback from './components/error-fallback/error-fallback.component';
6
6
  import appModalService from '@wavemaker/app-rn-runtime/runtime/services/app-modal.service';
7
+ import injector from '@wavemaker/app-rn-runtime/core/injector';
7
8
  export default class ErrorBoundary extends React.Component {
8
9
  constructor(props) {
9
10
  super(props);
@@ -24,6 +25,20 @@ export default class ErrorBoundary extends React.Component {
24
25
  };
25
26
  }
26
27
  componentDidCatch(error, info) {
28
+ // Trigger user error callback if app instance is available
29
+ let appInstance = this.props.app;
30
+
31
+ // Fallback: try to get app instance from injector if prop is not available
32
+ if (!appInstance) {
33
+ appInstance = injector.get('APP_INSTANCE');
34
+ }
35
+ if (appInstance && appInstance.triggerOnError) {
36
+ try {
37
+ appInstance.triggerOnError(error, info, 'render');
38
+ } catch (e) {
39
+ console.error('Error calling triggerOnError:', e);
40
+ }
41
+ }
27
42
  if (error && appModalService.modalsOpened.length > 0) {
28
43
  appModalService.modalsOpened.pop();
29
44
  appModalService.showLastModal();
@@ -39,7 +54,8 @@ export default class ErrorBoundary extends React.Component {
39
54
  return /*#__PURE__*/React.createElement(Fallback, {
40
55
  error: (_this$state = this.state) === null || _this$state === void 0 ? void 0 : _this$state.error,
41
56
  info: (_this$state2 = this.state) === null || _this$state2 === void 0 ? void 0 : _this$state2.info,
42
- resetErrorBoundary: this.resetErrorBoundary
57
+ resetErrorBoundary: this.resetErrorBoundary,
58
+ errorType: this.props.errorType || 'render'
43
59
  });
44
60
  }
45
61
  return this.props.children;
@@ -1 +1 @@
1
- {"version":3,"names":["React","Fallback","appModalService","ErrorBoundary","Component","constructor","props","_defineProperty","setState","hasError","error","undefined","info","state","getDerivedStateFromError","componentDidCatch","modalsOpened","length","pop","showLastModal","render","_this$state","_this$state2","createElement","resetErrorBoundary","children"],"sources":["error-boundary.component.tsx"],"sourcesContent":["import * as React from 'react';\nimport Fallback from './components/error-fallback/error-fallback.component';\nimport appModalService from '@wavemaker/app-rn-runtime/runtime/services/app-modal.service';\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n info?: any;\n error?: any;\n}\n\ninterface ErrorBoundaryProps {\n currentPage?: any;\n children: React.ReactNode;\n}\n\nexport default class ErrorBoundary extends React.Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n \n constructor(props: any) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error: any) {\n return { hasError: true };\n }\n\n resetErrorBoundary = () => {\n this.setState({ hasError: false, error: undefined, info: undefined });\n };\n\n componentDidCatch(error: any, info: any) {\n if(error && appModalService.modalsOpened.length > 0){\n appModalService.modalsOpened.pop();\n (appModalService as any).showLastModal();\n }\n this.setState({ error, info });\n }\n\n render() {\n if (this.state.hasError) {\n return <Fallback error={this.state?.error} info={this.state?.info} resetErrorBoundary={this.resetErrorBoundary} />;\n }\n\n return this.props.children;\n }\n}\n"],"mappings":";;;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,QAAQ,MAAM,sDAAsD;AAC3E,OAAOC,eAAe,MAAM,8DAA8D;AAa1F,eAAe,MAAMC,aAAa,SAASH,KAAK,CAACI,SAAS,CAGxD;EAEAC,WAAWA,CAACC,KAAU,EAAE;IACtB,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA,6BAQM,MAAM;MACzB,IAAI,CAACC,QAAQ,CAAC;QAAEC,QAAQ,EAAE,KAAK;QAAEC,KAAK,EAAEC,SAAS;QAAEC,IAAI,EAAED;MAAU,CAAC,CAAC;IACvE,CAAC;IATC,IAAI,CAACE,KAAK,GAAG;MAAEJ,QAAQ,EAAE;IAAM,CAAC;EAClC;EAEA,OAAOK,wBAAwBA,CAACJ,KAAU,EAAE;IAC1C,OAAO;MAAED,QAAQ,EAAE;IAAK,CAAC;EAC3B;EAMAM,iBAAiBA,CAACL,KAAU,EAAEE,IAAS,EAAE;IACvC,IAAGF,KAAK,IAAIR,eAAe,CAACc,YAAY,CAACC,MAAM,GAAG,CAAC,EAAC;MAClDf,eAAe,CAACc,YAAY,CAACE,GAAG,CAAC,CAAC;MACjChB,eAAe,CAASiB,aAAa,CAAC,CAAC;IAC1C;IACA,IAAI,CAACX,QAAQ,CAAC;MAAEE,KAAK;MAAEE;IAAK,CAAC,CAAC;EAChC;EAEAQ,MAAMA,CAAA,EAAG;IACP,IAAI,IAAI,CAACP,KAAK,CAACJ,QAAQ,EAAE;MAAA,IAAAY,WAAA,EAAAC,YAAA;MACvB,oBAAOtB,KAAA,CAAAuB,aAAA,CAACtB,QAAQ;QAACS,KAAK,GAAAW,WAAA,GAAE,IAAI,CAACR,KAAK,cAAAQ,WAAA,uBAAVA,WAAA,CAAYX,KAAM;QAACE,IAAI,GAAAU,YAAA,GAAE,IAAI,CAACT,KAAK,cAAAS,YAAA,uBAAVA,YAAA,CAAYV,IAAK;QAACY,kBAAkB,EAAE,IAAI,CAACA;MAAmB,CAAE,CAAC;IACpH;IAEA,OAAO,IAAI,CAAClB,KAAK,CAACmB,QAAQ;EAC5B;AACF","ignoreList":[]}
1
+ {"version":3,"names":["React","Fallback","appModalService","injector","ErrorBoundary","Component","constructor","props","_defineProperty","setState","hasError","error","undefined","info","state","getDerivedStateFromError","componentDidCatch","appInstance","app","get","triggerOnError","e","console","modalsOpened","length","pop","showLastModal","render","_this$state","_this$state2","createElement","resetErrorBoundary","errorType","children"],"sources":["error-boundary.component.tsx"],"sourcesContent":["import * as React from 'react';\nimport Fallback from './components/error-fallback/error-fallback.component';\nimport appModalService from '@wavemaker/app-rn-runtime/runtime/services/app-modal.service';\nimport injector from '@wavemaker/app-rn-runtime/core/injector';\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n info?: any;\n error?: any;\n}\n\ninterface ErrorBoundaryProps {\n currentPage?: any;\n children: React.ReactNode;\n errorType?: 'render' | 'javascript';\n app?: any;\n}\n\nexport default class ErrorBoundary extends React.Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n \n constructor(props: any) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error: any) {\n return { hasError: true };\n }\n\n resetErrorBoundary = () => {\n this.setState({ hasError: false, error: undefined, info: undefined });\n };\n\n componentDidCatch(error: any, info: any) {\n // Trigger user error callback if app instance is available\n let appInstance = this.props.app;\n \n // Fallback: try to get app instance from injector if prop is not available\n if (!appInstance) {\n appInstance = injector.get('APP_INSTANCE');\n }\n \n if (appInstance && appInstance.triggerOnError) {\n try {\n appInstance.triggerOnError(error, info, 'render');\n } catch (e) {\n console.error('Error calling triggerOnError:', e);\n }\n }\n \n if(error && appModalService.modalsOpened.length > 0){\n appModalService.modalsOpened.pop();\n (appModalService as any).showLastModal();\n }\n this.setState({ error, info });\n }\n\n render() {\n if (this.state.hasError) {\n return <Fallback \n error={this.state?.error} \n info={this.state?.info} \n resetErrorBoundary={this.resetErrorBoundary}\n errorType={this.props.errorType || 'render'}\n />;\n }\n\n return this.props.children;\n }\n}\n"],"mappings":";;;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,QAAQ,MAAM,sDAAsD;AAC3E,OAAOC,eAAe,MAAM,8DAA8D;AAC1F,OAAOC,QAAQ,MAAM,yCAAyC;AAe9D,eAAe,MAAMC,aAAa,SAASJ,KAAK,CAACK,SAAS,CAGxD;EAEAC,WAAWA,CAACC,KAAU,EAAE;IACtB,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA,6BAQM,MAAM;MACzB,IAAI,CAACC,QAAQ,CAAC;QAAEC,QAAQ,EAAE,KAAK;QAAEC,KAAK,EAAEC,SAAS;QAAEC,IAAI,EAAED;MAAU,CAAC,CAAC;IACvE,CAAC;IATC,IAAI,CAACE,KAAK,GAAG;MAAEJ,QAAQ,EAAE;IAAM,CAAC;EAClC;EAEA,OAAOK,wBAAwBA,CAACJ,KAAU,EAAE;IAC1C,OAAO;MAAED,QAAQ,EAAE;IAAK,CAAC;EAC3B;EAMAM,iBAAiBA,CAACL,KAAU,EAAEE,IAAS,EAAE;IACvC;IACA,IAAII,WAAW,GAAG,IAAI,CAACV,KAAK,CAACW,GAAG;;IAEhC;IACA,IAAI,CAACD,WAAW,EAAE;MACdA,WAAW,GAAGd,QAAQ,CAACgB,GAAG,CAAC,cAAc,CAAC;IAC9C;IAEA,IAAIF,WAAW,IAAIA,WAAW,CAACG,cAAc,EAAE;MAC7C,IAAI;QACFH,WAAW,CAACG,cAAc,CAACT,KAAK,EAAEE,IAAI,EAAE,QAAQ,CAAC;MACnD,CAAC,CAAC,OAAOQ,CAAC,EAAE;QACVC,OAAO,CAACX,KAAK,CAAC,+BAA+B,EAAEU,CAAC,CAAC;MACnD;IACF;IAEA,IAAGV,KAAK,IAAIT,eAAe,CAACqB,YAAY,CAACC,MAAM,GAAG,CAAC,EAAC;MAClDtB,eAAe,CAACqB,YAAY,CAACE,GAAG,CAAC,CAAC;MACjCvB,eAAe,CAASwB,aAAa,CAAC,CAAC;IAC1C;IACA,IAAI,CAACjB,QAAQ,CAAC;MAAEE,KAAK;MAAEE;IAAK,CAAC,CAAC;EAChC;EAEAc,MAAMA,CAAA,EAAG;IACP,IAAI,IAAI,CAACb,KAAK,CAACJ,QAAQ,EAAE;MAAA,IAAAkB,WAAA,EAAAC,YAAA;MACvB,oBAAO7B,KAAA,CAAA8B,aAAA,CAAC7B,QAAQ;QACdU,KAAK,GAAAiB,WAAA,GAAE,IAAI,CAACd,KAAK,cAAAc,WAAA,uBAAVA,WAAA,CAAYjB,KAAM;QACzBE,IAAI,GAAAgB,YAAA,GAAE,IAAI,CAACf,KAAK,cAAAe,YAAA,uBAAVA,YAAA,CAAYhB,IAAK;QACvBkB,kBAAkB,EAAE,IAAI,CAACA,kBAAmB;QAC5CC,SAAS,EAAE,IAAI,CAACzB,KAAK,CAACyB,SAAS,IAAI;MAAS,CAC7C,CAAC;IACJ;IAEA,OAAO,IAAI,CAACzB,KAAK,CAAC0B,QAAQ;EAC5B;AACF","ignoreList":[]}
@@ -2,7 +2,7 @@ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object
2
2
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
3
3
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
4
4
  import React from "react";
5
- import { View, Animated } from "react-native";
5
+ import { View, Animated, Keyboard, TextInput, findNodeHandle } from "react-native";
6
6
  import { ThemeProvider } from "../styles/theme";
7
7
  const FixedViewContext = /*#__PURE__*/React.createContext(null);
8
8
  export class FixedView extends React.Component {
@@ -11,6 +11,22 @@ export class FixedView extends React.Component {
11
11
  _defineProperty(this, "container", null);
12
12
  _defineProperty(this, "cachedComponent", void 0);
13
13
  _defineProperty(this, "id", FixedView.counter++);
14
+ /**
15
+ *
16
+ * Capture the touch before it reaches child Touchables
17
+ */
18
+ _defineProperty(this, "handleStartShouldSetResponderCapture", event => {
19
+ var _event$nativeEvent;
20
+ const textInputState = TextInput.State;
21
+ const focusedInput = textInputState !== null && textInputState !== void 0 && textInputState.currentlyFocusedInput ? textInputState.currentlyFocusedInput() : null;
22
+ const focusedHandle = focusedInput ? findNodeHandle(focusedInput) : textInputState !== null && textInputState !== void 0 && textInputState.currentlyFocusedInput ? textInputState.currentlyFocusedInput() : null;
23
+ if (focusedHandle && (event === null || event === void 0 || (_event$nativeEvent = event.nativeEvent) === null || _event$nativeEvent === void 0 ? void 0 : _event$nativeEvent.target) === focusedHandle) {
24
+ // Should not dismiss keyboard if the user presses on the same text input that is already focused
25
+ return false;
26
+ }
27
+ Keyboard.dismiss();
28
+ return false; // let the touch reach the child Touchables
29
+ });
14
30
  }
15
31
  componentWillUnmount() {
16
32
  this.container.remove(this);
@@ -27,7 +43,8 @@ export class FixedView extends React.Component {
27
43
  style: [{
28
44
  position: 'absolute'
29
45
  }, this.props.style],
30
- testID: `${this.props.name}-fixed-view`
46
+ testID: `${this.props.name}-fixed-view`,
47
+ onStartShouldSetResponderCapture: this.handleStartShouldSetResponderCapture
31
48
  }, this.props.children)));
32
49
  } else {
33
50
  container.remove(this);
@@ -1 +1 @@
1
- {"version":3,"names":["React","View","Animated","ThemeProvider","FixedViewContext","createContext","FixedView","Component","constructor","props","_defineProperty","counter","componentWillUnmount","container","remove","render","WrapperView","animated","cachedComponent","usememo","createElement","Consumer","show","add","value","theme","key","id","style","position","testID","name","children","Fragment","Date","now","FixedViewContainer","args","Map","c","n","set","setTimeout","setState","delete","Provider","Array","from","values"],"sources":["fixed-view.component.tsx"],"sourcesContent":["\nimport React from \"react\";\nimport { View, ViewStyle, Animated } from \"react-native\";\nimport { Theme, ThemeProvider } from \"../styles/theme\";\n\nconst FixedViewContext = React.createContext<FixedViewContainer>(null as any);\n\nexport interface FixedViewProps {\n name?: string;\n style?: ViewStyle,\n show?: boolean;\n theme: Theme;\n usememo?: boolean;\n children?: any;\n animated?: boolean;\n}\n\nexport class FixedView extends React.Component<FixedViewProps> {\n static defaultProps = {\n show: true, \n animated: false\n };\n static counter = Date.now();\n container: FixedViewContainer = null as any;\n cachedComponent: React.ReactNode;\n id = FixedView.counter++;\n\n constructor(props: FixedViewProps) {\n super(props);\n }\n\n componentWillUnmount() {\n this.container.remove(this);\n }\n\n render() {\n const WrapperView = this.props.animated ? Animated.View : View\n this.cachedComponent = (this.props.usememo === true && this.cachedComponent ) || (<FixedViewContext.Consumer>\n {(container) => {\n this.container = container;\n if (this.props.show) {\n container.add(this, (\n <ThemeProvider value={this.props.theme} key={this.id}>\n <WrapperView style={[\n {position: 'absolute'},\n this.props.style]}\n testID={`${this.props.name}-fixed-view`}\n >\n {this.props.children}\n </WrapperView>\n </ThemeProvider>\n ));\n } else {\n container.remove(this);\n }\n return <></>;\n }}\n </FixedViewContext.Consumer>);\n return this.cachedComponent;\n }\n}\n\nexport class FixedViewContainer extends React.Component {\n children: Map<FixedView, React.ReactNode> = new Map();\n id = 0;\n\n add(c: FixedView, n : React.ReactNode) {\n this.children.set(c, n);\n setTimeout(() => this.setState({id: ++this.id}));\n }\n\n remove(c: FixedView) {\n this.children.delete(c);\n setTimeout(() => this.setState({id: ++this.id}));\n }\n\n render() {\n return (\n <FixedViewContext.Provider value={this}>\n {(this.props as any).children}\n {Array.from(this.children.values())}\n </FixedViewContext.Provider>\n ) ;\n }\n};"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","View","Animated","Keyboard","TextInput","findNodeHandle","ThemeProvider","FixedViewContext","createContext","FixedView","Component","constructor","props","_defineProperty","counter","event","_event$nativeEvent","textInputState","State","focusedInput","currentlyFocusedInput","focusedHandle","nativeEvent","target","dismiss","componentWillUnmount","container","remove","render","WrapperView","animated","cachedComponent","usememo","createElement","Consumer","show","add","value","theme","key","id","style","position","testID","name","onStartShouldSetResponderCapture","handleStartShouldSetResponderCapture","children","Fragment","Date","now","FixedViewContainer","args","Map","c","n","set","setTimeout","setState","delete","Provider","Array","from","values"],"sources":["fixed-view.component.tsx"],"sourcesContent":["\nimport React from \"react\";\nimport { View, ViewStyle, Animated, Keyboard, TextInput, findNodeHandle, GestureResponderEvent } from \"react-native\";\nimport { Theme, ThemeProvider } from \"../styles/theme\";\n\nconst FixedViewContext = React.createContext<FixedViewContainer>(null as any);\n\nexport interface FixedViewProps {\n name?: string;\n style?: ViewStyle,\n show?: boolean;\n theme: Theme;\n usememo?: boolean;\n children?: any;\n animated?: boolean;\n}\n\nexport class FixedView extends React.Component<FixedViewProps> {\n static defaultProps = {\n show: true, \n animated: false\n };\n static counter = Date.now();\n container: FixedViewContainer = null as any;\n cachedComponent: React.ReactNode;\n id = FixedView.counter++;\n\n constructor(props: FixedViewProps) {\n super(props);\n }\n\n /**\n * \n * Capture the touch before it reaches child Touchables\n */\n handleStartShouldSetResponderCapture = (event: GestureResponderEvent) => {\n const textInputState = TextInput.State as any;\n const focusedInput = textInputState?.currentlyFocusedInput ? textInputState.currentlyFocusedInput() : null;\n const focusedHandle = focusedInput\n ? findNodeHandle(focusedInput)\n : textInputState?.currentlyFocusedInput\n ? textInputState.currentlyFocusedInput()\n : null;\n\n if (focusedHandle && event?.nativeEvent?.target === focusedHandle) {\n // Should not dismiss keyboard if the user presses on the same text input that is already focused\n return false;\n }\n\n Keyboard.dismiss();\n return false; // let the touch reach the child Touchables\n };\n\n componentWillUnmount() {\n this.container.remove(this);\n }\n\n render() {\n const WrapperView = this.props.animated ? Animated.View : View\n this.cachedComponent = (this.props.usememo === true && this.cachedComponent ) || (<FixedViewContext.Consumer>\n {(container) => {\n this.container = container;\n if (this.props.show) {\n container.add(this, (\n <ThemeProvider value={this.props.theme} key={this.id}>\n <WrapperView style={[\n {position: 'absolute'},\n this.props.style]}\n testID={`${this.props.name}-fixed-view`}\n onStartShouldSetResponderCapture={this.handleStartShouldSetResponderCapture}\n >\n {this.props.children}\n </WrapperView>\n </ThemeProvider>\n ));\n } else {\n container.remove(this);\n }\n return <></>;\n }}\n </FixedViewContext.Consumer>);\n return this.cachedComponent;\n }\n}\n\nexport class FixedViewContainer extends React.Component {\n children: Map<FixedView, React.ReactNode> = new Map();\n id = 0;\n\n add(c: FixedView, n : React.ReactNode) {\n this.children.set(c, n);\n setTimeout(() => this.setState({id: ++this.id}));\n }\n\n remove(c: FixedView) {\n this.children.delete(c);\n setTimeout(() => this.setState({id: ++this.id}));\n }\n\n render() {\n return (\n <FixedViewContext.Provider value={this}>\n {(this.props as any).children}\n {Array.from(this.children.values())}\n </FixedViewContext.Provider>\n ) ;\n }\n};"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Global Error Handler Service for WaveMaker Runtime
3
+ *
4
+ * This service provides comprehensive error handling for React Native applications:
5
+ * 1. JavaScript Error Handling: Uses ErrorUtils.setGlobalHandler for sync errors
6
+ * 2. Promise Rejection Tracking: Multi-engine approach for unhandled promise rejections
7
+ * - Web: Uses browser's 'unhandledrejection' event
8
+ * - Hermes: Uses HermesInternal.enablePromiseRejectionTracker
9
+ * - JSC: Uses React Native's 'promise/setimmediate/rejection-tracking' module
10
+ *
11
+ * Key Features:
12
+ * - Catches ALL API call failures (fetch, axios, any HTTP library)
13
+ * - Handles async function errors and manual Promise.reject calls
14
+ * - Automatic engine detection and optimal method selection
15
+ * - Production-ready with proper cleanup mechanisms
16
+ * - Configurable suppression of React Native's default error screens
17
+ *
18
+ * Research Background:
19
+ * This implementation was developed after extensive research into React Native's
20
+ * error handling mechanisms across different JavaScript engines. It addresses
21
+ * the common problem where API call failures and async errors are not caught
22
+ * by standard error boundaries, providing a unified solution for all error types.
23
+ */
24
+
25
+ import { Platform } from 'react-native';
26
+ import { isWebPreviewMode } from './utils';
27
+ import { setupAdvancedPromiseRejectionTracking } from './advanced-promise-rejection-tracker';
28
+ let globalErrorHandler = null;
29
+ let promiseRejectionTracker = null;
30
+
31
+ /**
32
+ * Sets up global error handling for JavaScript errors and unhandled promise rejections
33
+ * @param onError Callback function to handle errors
34
+ * @param suppressDefaultErrorScreen Whether to suppress React Native's default error screen
35
+ * @returns Cleanup function to remove the error handlers
36
+ */
37
+ export const setupGlobalErrorHandler = (onError, suppressDefaultErrorScreen = false) => {
38
+ let originalHandler = null;
39
+ const ErrorUtilsRef = globalThis === null || globalThis === void 0 ? void 0 : globalThis.ErrorUtils;
40
+ if (ErrorUtilsRef) {
41
+ var _ErrorUtilsRef$getGlo, _ErrorUtilsRef$setGlo;
42
+ // Store the original error handler to restore it later
43
+ originalHandler = ErrorUtilsRef === null || ErrorUtilsRef === void 0 || (_ErrorUtilsRef$getGlo = ErrorUtilsRef.getGlobalHandler) === null || _ErrorUtilsRef$getGlo === void 0 ? void 0 : _ErrorUtilsRef$getGlo.call(ErrorUtilsRef);
44
+
45
+ // Setup JavaScript error handler
46
+ globalErrorHandler = (error, isFatal = false) => {
47
+ const errorInfo = __DEV__ ? `${error.stack || error.toString()}` : 'An unexpected error occurred';
48
+
49
+ // Call our custom error handler
50
+ onError(error, isFatal, errorInfo);
51
+
52
+ // Call the original handler for development/debugging if not suppressed
53
+ // This controls whether React Native's default red error screen is shown
54
+ if (originalHandler && __DEV__ && !suppressDefaultErrorScreen) {
55
+ originalHandler(error, isFatal);
56
+ }
57
+ };
58
+
59
+ // Set our custom global error handler
60
+ ErrorUtilsRef === null || ErrorUtilsRef === void 0 || (_ErrorUtilsRef$setGlo = ErrorUtilsRef.setGlobalHandler) === null || _ErrorUtilsRef$setGlo === void 0 || _ErrorUtilsRef$setGlo.call(ErrorUtilsRef, globalErrorHandler);
61
+ }
62
+
63
+ // Setup Advanced Promise Rejection Tracking
64
+ // This automatically detects the best method for the current JavaScript engine:
65
+ // - Web: Uses unhandledrejection event for complete coverage
66
+ // - Hermes: Uses HermesInternal.enablePromiseRejectionTracker for native tracking
67
+ // - JSC: Uses promise/setimmediate/rejection-tracking module for comprehensive handling
68
+ promiseRejectionTracker = setupAdvancedPromiseRejectionTracking(error => {
69
+ // Convert promise rejection to our error handler format
70
+ const promiseError = error instanceof Error ? error : new Error(String(error));
71
+ const errorInfo = __DEV__ ? `Promise rejection: ${promiseError.stack || promiseError.toString()}` : 'An unexpected error occurred';
72
+
73
+ // Call our custom error handler with promise-specific info
74
+ // This ensures API call failures and async errors trigger the same error flow
75
+ onError(promiseError, false, errorInfo);
76
+ });
77
+ return () => {
78
+ var _ErrorUtilsRef$setGlo2;
79
+ // Cleanup function - restores original error handling mechanisms
80
+ ErrorUtilsRef === null || ErrorUtilsRef === void 0 || (_ErrorUtilsRef$setGlo2 = ErrorUtilsRef.setGlobalHandler) === null || _ErrorUtilsRef$setGlo2 === void 0 || _ErrorUtilsRef$setGlo2.call(ErrorUtilsRef, originalHandler);
81
+
82
+ // Cleanup advanced promise rejection tracking
83
+ if (promiseRejectionTracker) {
84
+ promiseRejectionTracker.cleanup();
85
+ promiseRejectionTracker = null;
86
+ }
87
+ globalErrorHandler = null;
88
+ };
89
+ };
90
+
91
+ /**
92
+ * Get current error handling configuration and capabilities
93
+ * Useful for debugging and monitoring the error handling setup
94
+ */
95
+ export const getErrorHandlingInfo = () => {
96
+ return {
97
+ platform: Platform.OS,
98
+ isWebPreview: isWebPreviewMode(),
99
+ hasPromiseTracking: promiseRejectionTracker !== null,
100
+ hasJavaScriptHandler: globalErrorHandler !== null
101
+ };
102
+ };
103
+ //# sourceMappingURL=global-error-handler.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Platform","isWebPreviewMode","setupAdvancedPromiseRejectionTracking","globalErrorHandler","promiseRejectionTracker","setupGlobalErrorHandler","onError","suppressDefaultErrorScreen","originalHandler","ErrorUtilsRef","globalThis","ErrorUtils","_ErrorUtilsRef$getGlo","_ErrorUtilsRef$setGlo","getGlobalHandler","call","error","isFatal","errorInfo","__DEV__","stack","toString","setGlobalHandler","promiseError","Error","String","_ErrorUtilsRef$setGlo2","cleanup","getErrorHandlingInfo","platform","OS","isWebPreview","hasPromiseTracking","hasJavaScriptHandler"],"sources":["global-error-handler.service.ts"],"sourcesContent":["/**\n * Global Error Handler Service for WaveMaker Runtime\n *\n * This service provides comprehensive error handling for React Native applications:\n * 1. JavaScript Error Handling: Uses ErrorUtils.setGlobalHandler for sync errors\n * 2. Promise Rejection Tracking: Multi-engine approach for unhandled promise rejections\n * - Web: Uses browser's 'unhandledrejection' event\n * - Hermes: Uses HermesInternal.enablePromiseRejectionTracker\n * - JSC: Uses React Native's 'promise/setimmediate/rejection-tracking' module\n *\n * Key Features:\n * - Catches ALL API call failures (fetch, axios, any HTTP library)\n * - Handles async function errors and manual Promise.reject calls\n * - Automatic engine detection and optimal method selection\n * - Production-ready with proper cleanup mechanisms\n * - Configurable suppression of React Native's default error screens\n *\n * Research Background:\n * This implementation was developed after extensive research into React Native's\n * error handling mechanisms across different JavaScript engines. It addresses\n * the common problem where API call failures and async errors are not caught\n * by standard error boundaries, providing a unified solution for all error types.\n */\n\nimport { Platform } from 'react-native';\nimport { isWebPreviewMode } from './utils';\nimport {\n setupAdvancedPromiseRejectionTracking,\n AdvancedPromiseRejectionTracker,\n} from './advanced-promise-rejection-tracker';\n\nexport interface GlobalErrorState {\n error: Error;\n errorInfo: string;\n errorType: 'javascript';\n isFatal?: boolean;\n}\n\nexport type GlobalErrorCallback = (\n error: Error,\n isFatal: boolean,\n errorInfo: string\n) => void;\n\nlet globalErrorHandler: ((error: any, isFatal?: boolean) => void) | null = null;\nlet promiseRejectionTracker: AdvancedPromiseRejectionTracker | null = null;\n\n/**\n * Sets up global error handling for JavaScript errors and unhandled promise rejections\n * @param onError Callback function to handle errors\n * @param suppressDefaultErrorScreen Whether to suppress React Native's default error screen\n * @returns Cleanup function to remove the error handlers\n */\nexport const setupGlobalErrorHandler = (\n onError: GlobalErrorCallback,\n suppressDefaultErrorScreen: boolean = false\n): (() => void) => {\n let originalHandler: any = null;\n const ErrorUtilsRef = (globalThis as any)?.ErrorUtils;\n if (ErrorUtilsRef) {\n // Store the original error handler to restore it later\n originalHandler = ErrorUtilsRef?.getGlobalHandler?.();\n\n // Setup JavaScript error handler\n globalErrorHandler = (error: any, isFatal: boolean = false) => {\n const errorInfo = __DEV__\n ? `${error.stack || error.toString()}`\n : 'An unexpected error occurred';\n\n // Call our custom error handler\n onError(error, isFatal, errorInfo);\n\n // Call the original handler for development/debugging if not suppressed\n // This controls whether React Native's default red error screen is shown\n if (originalHandler && __DEV__ && !suppressDefaultErrorScreen) {\n originalHandler(error, isFatal);\n }\n };\n\n // Set our custom global error handler\n ErrorUtilsRef?.setGlobalHandler?.(globalErrorHandler);\n }\n\n // Setup Advanced Promise Rejection Tracking\n // This automatically detects the best method for the current JavaScript engine:\n // - Web: Uses unhandledrejection event for complete coverage\n // - Hermes: Uses HermesInternal.enablePromiseRejectionTracker for native tracking\n // - JSC: Uses promise/setimmediate/rejection-tracking module for comprehensive handling\n promiseRejectionTracker = setupAdvancedPromiseRejectionTracking(\n (error: any) => {\n // Convert promise rejection to our error handler format\n const promiseError =\n error instanceof Error ? error : new Error(String(error));\n const errorInfo = __DEV__\n ? `Promise rejection: ${promiseError.stack || promiseError.toString()}`\n : 'An unexpected error occurred';\n\n // Call our custom error handler with promise-specific info\n // This ensures API call failures and async errors trigger the same error flow\n onError(promiseError, false, errorInfo);\n }\n );\n\n return () => {\n // Cleanup function - restores original error handling mechanisms\n ErrorUtilsRef?.setGlobalHandler?.(originalHandler);\n\n // Cleanup advanced promise rejection tracking\n if (promiseRejectionTracker) {\n promiseRejectionTracker.cleanup();\n promiseRejectionTracker = null;\n }\n\n globalErrorHandler = null;\n };\n};\n\n/**\n * Get current error handling configuration and capabilities\n * Useful for debugging and monitoring the error handling setup\n */\nexport const getErrorHandlingInfo = () => {\n return {\n platform: Platform.OS,\n isWebPreview: isWebPreviewMode(),\n hasPromiseTracking: promiseRejectionTracker !== null,\n hasJavaScriptHandler: globalErrorHandler !== null,\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -41,12 +41,14 @@ export class Tappable extends React.Component {
41
41
  }
42
42
  (_this$parent = this.parent) === null || _this$parent === void 0 || _this$parent.triggerTap(e);
43
43
  }
44
- onPress(e) {
44
+ onPressIn(e) {
45
45
  var _this$props$target;
46
- this.lastPress = Date.now();
47
- const target = this.props.target;
48
46
  this.props.onTouchStart && this.props.onTouchStart(e);
49
47
  (_this$props$target = this.props.target) === null || _this$props$target === void 0 || _this$props$target.invokeEventCallback('onTouchstart', [e, this.props.target]);
48
+ }
49
+ onPress(e) {
50
+ this.lastPress = Date.now();
51
+ const target = this.props.target;
50
52
  const currentTime = Date.now();
51
53
  const tapDelta = currentTime - this.lastTap;
52
54
  if (this.isLongTap) {
@@ -120,6 +122,7 @@ export class Tappable extends React.Component {
120
122
  ...this.props.accessibilityProps,
121
123
  disabled: get(target === null || target === void 0 ? void 0 : target.proxy, 'disabled'),
122
124
  style: this.props.styles,
125
+ onPressIn: e => this.onPressIn(new SyntheticEvent()),
123
126
  onPress: e => {
124
127
  var _e$target;
125
128
  if ((e === null || e === void 0 || (_e$target = e.target) === null || _e$target === void 0 ? void 0 : _e$target.tagName) === 'INPUT') {
@@ -130,7 +133,7 @@ export class Tappable extends React.Component {
130
133
  onLongPress: e => this.onLongTap(new SyntheticEvent()),
131
134
  onPressOut: e => this.onPressOut(new SyntheticEvent())
132
135
  };
133
- if (target !== null && target !== void 0 && target.props.onTap || target !== null && target !== void 0 && target.props.onLongtap || target !== null && target !== void 0 && target.props.onDoubletap || this.props.onTap || this.props.onLongTap || this.props.onDoubleTap) {
136
+ if (target !== null && target !== void 0 && target.props.onTap || target !== null && target !== void 0 && target.props.onLongtap || target !== null && target !== void 0 && target.props.onDoubletap || target !== null && target !== void 0 && target.props.onTouchstart || target !== null && target !== void 0 && target.props.onTouchend || this.props.onTap || this.props.onLongTap || this.props.onDoubleTap || this.props.onTouchStart || this.props.onTouchEnd) {
134
137
  return /*#__PURE__*/React.createElement(UIPreferencesConsumer, null, preferences => {
135
138
  return preferences.enableRipple != false ? /*#__PURE__*/React.createElement(ParentTappableContext.Consumer, null, parent => {
136
139
  this.setParent(parent);