@rownd/react-native 0.1.10 → 0.2.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.
Files changed (56) hide show
  1. package/README.md +17 -6
  2. package/lib/commonjs/assets/images/error-icon-material.svg +1 -0
  3. package/lib/commonjs/components/AutoSigninDialog.js +29 -16
  4. package/lib/commonjs/components/AutoSigninDialog.js.map +1 -1
  5. package/lib/commonjs/components/BottomSheetTextInput/BottomSheetTextInput.js +65 -0
  6. package/lib/commonjs/components/BottomSheetTextInput/BottomSheetTextInput.js.map +1 -0
  7. package/lib/commonjs/components/BottomSheetTextInput/index.js +24 -0
  8. package/lib/commonjs/components/BottomSheetTextInput/index.js.map +1 -0
  9. package/lib/commonjs/components/BottomSheetTextInput/types.js +6 -0
  10. package/lib/commonjs/components/BottomSheetTextInput/types.js.map +1 -0
  11. package/lib/commonjs/components/DefaultContext.js.map +1 -1
  12. package/lib/commonjs/components/GlobalContext.js.map +1 -1
  13. package/lib/commonjs/components/RowndComponents.js +4 -6
  14. package/lib/commonjs/components/RowndComponents.js.map +1 -1
  15. package/lib/commonjs/components/SignIn.js +55 -51
  16. package/lib/commonjs/components/SignIn.js.map +1 -1
  17. package/lib/commonjs/components/images/ErrorIcon.js +31 -0
  18. package/lib/commonjs/components/images/ErrorIcon.js.map +1 -0
  19. package/lib/commonjs/types.js.map +1 -1
  20. package/lib/module/assets/images/error-icon-material.svg +1 -0
  21. package/lib/module/components/AutoSigninDialog.js +25 -15
  22. package/lib/module/components/AutoSigninDialog.js.map +1 -1
  23. package/lib/module/components/BottomSheetTextInput/BottomSheetTextInput.js +52 -0
  24. package/lib/module/components/BottomSheetTextInput/BottomSheetTextInput.js.map +1 -0
  25. package/lib/module/components/BottomSheetTextInput/index.js +5 -0
  26. package/lib/module/components/BottomSheetTextInput/index.js.map +1 -0
  27. package/lib/module/components/BottomSheetTextInput/types.js +2 -0
  28. package/lib/module/components/BottomSheetTextInput/types.js.map +1 -0
  29. package/lib/module/components/DefaultContext.js.map +1 -1
  30. package/lib/module/components/GlobalContext.js.map +1 -1
  31. package/lib/module/components/RowndComponents.js +5 -5
  32. package/lib/module/components/RowndComponents.js.map +1 -1
  33. package/lib/module/components/SignIn.js +41 -37
  34. package/lib/module/components/SignIn.js.map +1 -1
  35. package/lib/module/components/images/ErrorIcon.js +18 -0
  36. package/lib/module/components/images/ErrorIcon.js.map +1 -0
  37. package/lib/module/types.js.map +1 -1
  38. package/lib/package.json +3 -5
  39. package/lib/typescript/src/components/BottomSheetTextInput/BottomSheetTextInput.d.ts +4 -0
  40. package/lib/typescript/src/components/BottomSheetTextInput/index.d.ts +2 -0
  41. package/lib/typescript/src/components/BottomSheetTextInput/types.d.ts +3 -0
  42. package/lib/typescript/src/components/DefaultContext.d.ts +1 -1
  43. package/lib/typescript/src/components/GlobalContext.d.ts +2 -2
  44. package/lib/typescript/src/components/images/ErrorIcon.d.ts +4 -0
  45. package/package.json +3 -5
  46. package/src/assets/images/error-icon-material.svg +1 -0
  47. package/src/components/AutoSigninDialog.tsx +19 -13
  48. package/src/components/BottomSheetTextInput/BottomSheetTextInput.tsx +57 -0
  49. package/src/components/BottomSheetTextInput/index.ts +5 -0
  50. package/src/components/BottomSheetTextInput/types.ts +3 -0
  51. package/src/components/DefaultContext.tsx +1 -1
  52. package/src/components/GlobalContext.tsx +2 -2
  53. package/src/components/RowndComponents.tsx +3 -3
  54. package/src/components/SignIn.tsx +47 -37
  55. package/src/components/images/ErrorIcon.tsx +11 -0
  56. package/src/types.ts +1 -1
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  Rownd bindings for React Native
4
4
 
5
5
  ## Prerequisites
6
- You must be using React Native v0.64 or higher.
6
+ You must be using React Native v0.61 or higher.
7
7
 
8
8
  ## Installation
9
9
 
@@ -15,11 +15,22 @@ npm install @rownd/react-native
15
15
 
16
16
  Due to some native peer-dependencies, you'll also need to run the following command to get modules with native code working properly.
17
17
 
18
- ```sh
19
- npm install @gorhom/bottom-sheet @react-native-clipboard/clipboard \
20
- react-native-device-info react-native-gesture-handler react-native-mmkv \
21
- react-native-reanimated react-native-sha256 react-native-svg
22
- ```
18
+ > If you already use `react-native-gesture-handler` and/or `react-native-reanimated` run the following command:
19
+
20
+ ```sh
21
+ npm install @gorhom/bottom-sheet@2 @react-native-clipboard/clipboard \
22
+ react-native-device-info react-native-gesture-handler@1 react-native-mmkv \
23
+ react-native-reanimated@1 react-native-sha256 react-native-svg
24
+ ```
25
+
26
+ > If you **do not** use the aforementioned libraries _or_ are on v2.x, run this command instead:
27
+
28
+ ```sh
29
+ npm install @gorhom/bottom-sheet @react-native-clipboard/clipboard \
30
+ react-native-device-info react-native-gesture-handler react-native-mmkv \
31
+ react-native-reanimated react-native-sha256 react-native-svg
32
+ ```
33
+
23
34
 
24
35
  Once those are installed, run this command to ensure the iOS build can find the native components.
25
36
 
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="48" width="48"><path d="M24 34q.7 0 1.175-.475.475-.475.475-1.175 0-.7-.475-1.175Q24.7 30.7 24 30.7q-.7 0-1.175.475-.475.475-.475 1.175 0 .7.475 1.175Q23.3 34 24 34Zm-1.35-7.65h3V13.7h-3ZM24 44q-4.1 0-7.75-1.575-3.65-1.575-6.375-4.3-2.725-2.725-4.3-6.375Q4 28.1 4 23.95q0-4.1 1.575-7.75 1.575-3.65 4.3-6.35 2.725-2.7 6.375-4.275Q19.9 4 24.05 4q4.1 0 7.75 1.575 3.65 1.575 6.35 4.275 2.7 2.7 4.275 6.35Q44 19.85 44 24q0 4.1-1.575 7.75-1.575 3.65-4.275 6.375t-6.35 4.3Q28.15 44 24 44Zm.05-3q7.05 0 12-4.975T41 23.95q0-7.05-4.95-12T24 7q-7.05 0-12.025 4.95Q7 16.9 7 24q0 7.05 4.975 12.025Q16.95 41 24.05 41ZM24 24Z"/></svg>
@@ -11,14 +11,18 @@ var _reactNative = require("react-native");
11
11
 
12
12
  var _bottomSheet = require("@gorhom/bottom-sheet");
13
13
 
14
- var _usehooksTs = require("usehooks-ts");
14
+ var _package = _interopRequireDefault(require("@gorhom/bottom-sheet/package.json"));
15
15
 
16
- var _vectorIcons = require("@expo/vector-icons");
16
+ var _usehooksTs = require("usehooks-ts");
17
17
 
18
18
  var _hooks = require("../hooks");
19
19
 
20
20
  var _GlobalContext = require("./GlobalContext");
21
21
 
22
+ var _ErrorIcon = _interopRequireDefault(require("./images/ErrorIcon"));
23
+
24
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
+
22
26
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
27
 
24
28
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -26,13 +30,17 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
26
30
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
27
31
 
28
32
  function AutoSigninDialog() {
33
+ var _state$nav3, _state$nav3$options, _state$nav4, _state$nav4$options;
34
+
29
35
  const navTo = (0, _hooks.useNav)();
30
36
  const {
31
37
  state
32
38
  } = (0, _GlobalContext.useGlobalContext)(); // Let the user know they're auto signing-in, then close when done
33
39
 
34
40
  (0, _usehooksTs.useTimeout)(() => {
35
- if (state.nav.options.type === 'error') {
41
+ var _state$nav, _state$nav$options;
42
+
43
+ if ((state === null || state === void 0 ? void 0 : (_state$nav = state.nav) === null || _state$nav === void 0 ? void 0 : (_state$nav$options = _state$nav.options) === null || _state$nav$options === void 0 ? void 0 : _state$nav$options.type) === 'error') {
36
44
  return;
37
45
  }
38
46
 
@@ -55,26 +63,28 @@ function AutoSigninDialog() {
55
63
  const renderBackdrop = (0, _react.useCallback)(props => /*#__PURE__*/_react.default.createElement(_bottomSheet.BottomSheetBackdrop, _extends({}, props, {
56
64
  pressBehavior: "none"
57
65
  })), []);
58
- return /*#__PURE__*/_react.default.createElement(_bottomSheet.BottomSheetModal, {
66
+ let extraBottomSheetProps = {};
67
+
68
+ if (_package.default.version.startsWith('4')) {
69
+ var _state$nav2, _state$nav2$options;
70
+
71
+ extraBottomSheetProps.keyboardBehavior = 'fillParent';
72
+ extraBottomSheetProps.android_keyboardInputMode = 'adjustResize';
73
+ extraBottomSheetProps.enablePanDownToClose = (state === null || state === void 0 ? void 0 : (_state$nav2 = state.nav) === null || _state$nav2 === void 0 ? void 0 : (_state$nav2$options = _state$nav2.options) === null || _state$nav2$options === void 0 ? void 0 : _state$nav2$options.type) === 'error';
74
+ }
75
+
76
+ return /*#__PURE__*/_react.default.createElement(_bottomSheet.BottomSheetModal, _extends({
59
77
  snapPoints: snapPoints,
60
78
  index: 0,
61
79
  backdropComponent: renderBackdrop,
62
- keyboardBehavior: "fillParent",
63
- android_keyboardInputMode: "adjustResize",
64
- enablePanDownToClose: state.nav.options.type === 'error',
65
80
  onDismiss: handleClose,
66
81
  style: styles.bottomSheet,
67
82
  ref: bottomSheetModalRef
68
- }, /*#__PURE__*/_react.default.createElement(_reactNative.View, {
83
+ }, extraBottomSheetProps), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
69
84
  style: styles.innerContainer
70
- }, state.nav.options.type === 'error' && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_vectorIcons.MaterialIcons, {
71
- name: "error",
72
- size: 24,
73
- color: "#DA1E28",
74
- style: styles.errorIcon
75
- }), /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
85
+ }, (state === null || state === void 0 ? void 0 : (_state$nav3 = state.nav) === null || _state$nav3 === void 0 ? void 0 : (_state$nav3$options = _state$nav3.options) === null || _state$nav3$options === void 0 ? void 0 : _state$nav3$options.type) === 'error' && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_ErrorIcon.default, null), /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
76
86
  style: styles.errorMessage
77
- }, state.nav.options.message || 'An error occurred. Please try again.')), state.nav.options.type === 'sign-in' && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactNative.ActivityIndicator, {
87
+ }, state.nav.options.message || 'An error occurred. Please try again.')), (state === null || state === void 0 ? void 0 : (_state$nav4 = state.nav) === null || _state$nav4 === void 0 ? void 0 : (_state$nav4$options = _state$nav4.options) === null || _state$nav4$options === void 0 ? void 0 : _state$nav4$options.type) === 'sign-in' && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactNative.ActivityIndicator, {
78
88
  size: "large",
79
89
  color: "#5b0ae0"
80
90
  }), /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
@@ -113,7 +123,10 @@ const styles = _reactNative.StyleSheet.create({
113
123
  padding: 20
114
124
  },
115
125
  errorIcon: {
116
- textAlign: 'center'
126
+ textAlign: 'center',
127
+ color: '#DA1E28',
128
+ height: 24,
129
+ width: 24
117
130
  }
118
131
  });
119
132
  //# sourceMappingURL=AutoSigninDialog.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["AutoSigninDialog","navTo","useNav","state","useGlobalContext","useTimeout","nav","options","type","handleClose","bottomSheetModalRef","useRef","useEffect","current","present","useCallback","setTimeout","hide","snapPoints","useMemo","renderBackdrop","props","styles","bottomSheet","innerContainer","errorIcon","errorMessage","message","signInMessage","StyleSheet","create","modal","shadowColor","shadowOffset","width","height","shadowOpacity","shadowRadius","elevation","borderRadius","borderColor","borderWidth","padding","textAlign","fontSize"],"sources":["AutoSigninDialog.tsx"],"sourcesContent":["import React, { useMemo, useCallback, useEffect, useRef } from 'react';\nimport { View, Text, StyleSheet, ActivityIndicator } from 'react-native';\nimport {\n BottomSheetBackdrop,\n BottomSheetBackdropProps,\n BottomSheetModal,\n} from '@gorhom/bottom-sheet';\nimport { useTimeout } from 'usehooks-ts';\nimport { MaterialIcons } from '@expo/vector-icons';\n\nimport { useNav } from '../hooks';\nimport { useGlobalContext } from './GlobalContext';\n\nexport function AutoSigninDialog() {\n const navTo = useNav();\n const { state } = useGlobalContext();\n\n // Let the user know they're auto signing-in, then close when done\n useTimeout(() => {\n if (state.nav.options.type === 'error') {\n return;\n }\n\n handleClose();\n }, 3000);\n\n const bottomSheetModalRef = useRef<BottomSheetModal>(null);\n useEffect(() => {\n if (bottomSheetModalRef.current) {\n bottomSheetModalRef.current.present();\n }\n }, []);\n\n const handleClose = useCallback(() => {\n setTimeout(() => {\n navTo({ hide: true });\n }, 150);\n }, [navTo]);\n\n const snapPoints = useMemo(() => ['30%', '60%'], []);\n\n const renderBackdrop = useCallback(\n (props: BottomSheetBackdropProps) => (\n <BottomSheetBackdrop {...props} pressBehavior=\"none\" />\n ),\n []\n );\n\n return (\n <BottomSheetModal\n snapPoints={snapPoints}\n index={0}\n backdropComponent={renderBackdrop}\n keyboardBehavior=\"fillParent\"\n android_keyboardInputMode=\"adjustResize\"\n enablePanDownToClose={state.nav.options.type === 'error'}\n onDismiss={handleClose}\n style={styles.bottomSheet}\n ref={bottomSheetModalRef}\n >\n <View style={styles.innerContainer}>\n {state.nav.options.type === 'error' && (\n <>\n <MaterialIcons\n name=\"error\"\n size={24}\n color=\"#DA1E28\"\n style={styles.errorIcon}\n />\n <Text style={styles.errorMessage}>\n {state.nav.options.message ||\n 'An error occurred. Please try again.'}\n </Text>\n </>\n )}\n\n {state.nav.options.type === 'sign-in' && (\n <>\n <ActivityIndicator size=\"large\" color=\"#5b0ae0\" />\n <Text style={styles.signInMessage}>\n Automatically signing you in. Just a sec...\n </Text>\n </>\n )}\n </View>\n </BottomSheetModal>\n );\n}\n\nconst styles = StyleSheet.create({\n modal: {\n // flex: 1,\n },\n bottomSheet: {\n shadowColor: '#000',\n shadowOffset: {\n width: 0,\n height: 12,\n },\n shadowOpacity: 0.58,\n shadowRadius: 16.0,\n\n elevation: 24,\n },\n innerContainer: {\n borderRadius: 20,\n borderColor: 'transparent',\n borderWidth: 0,\n padding: 25,\n textAlign: 'center',\n },\n signInMessage: {\n textAlign: 'center',\n fontSize: 24,\n padding: 20,\n },\n errorMessage: {\n textAlign: 'center',\n fontSize: 24,\n padding: 20,\n },\n errorIcon: {\n textAlign: 'center',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"names":["AutoSigninDialog","navTo","useNav","state","useGlobalContext","useTimeout","nav","options","type","handleClose","bottomSheetModalRef","useRef","useEffect","current","present","useCallback","setTimeout","hide","snapPoints","useMemo","renderBackdrop","props","extraBottomSheetProps","bottomSheetMeta","version","startsWith","keyboardBehavior","android_keyboardInputMode","enablePanDownToClose","styles","bottomSheet","innerContainer","errorMessage","message","signInMessage","StyleSheet","create","modal","shadowColor","shadowOffset","width","height","shadowOpacity","shadowRadius","elevation","borderRadius","borderColor","borderWidth","padding","textAlign","fontSize","errorIcon","color"],"sources":["AutoSigninDialog.tsx"],"sourcesContent":["import React, { useMemo, useCallback, useEffect, useRef } from 'react';\nimport { View, Text, StyleSheet, ActivityIndicator } from 'react-native';\nimport {\n BottomSheetBackdrop,\n BottomSheetBackdropProps,\n BottomSheetModal,\n} from '@gorhom/bottom-sheet';\nimport bottomSheetMeta from '@gorhom/bottom-sheet/package.json';\nimport { useTimeout } from 'usehooks-ts';\n\nimport { useNav } from '../hooks';\nimport { useGlobalContext } from './GlobalContext';\n\nimport ErrorIcon from './images/ErrorIcon';\n\nexport function AutoSigninDialog() {\n const navTo = useNav();\n const { state } = useGlobalContext();\n\n // Let the user know they're auto signing-in, then close when done\n useTimeout(() => {\n if (state?.nav?.options?.type === 'error') {\n return;\n }\n\n handleClose();\n }, 3000);\n\n const bottomSheetModalRef = useRef<BottomSheetModal>(null);\n useEffect(() => {\n if (bottomSheetModalRef.current) {\n bottomSheetModalRef.current.present();\n }\n }, []);\n\n const handleClose = useCallback(() => {\n setTimeout(() => {\n navTo({ hide: true });\n }, 150);\n }, [navTo]);\n\n const snapPoints = useMemo(() => ['30%', '60%'], []);\n\n const renderBackdrop = useCallback(\n (props: BottomSheetBackdropProps) => (\n <BottomSheetBackdrop {...props} pressBehavior=\"none\" />\n ),\n []\n );\n\n let extraBottomSheetProps: any = {};\n if (bottomSheetMeta.version.startsWith('4')) {\n extraBottomSheetProps.keyboardBehavior = 'fillParent';\n extraBottomSheetProps.android_keyboardInputMode = 'adjustResize';\n extraBottomSheetProps.enablePanDownToClose =\n state?.nav?.options?.type === 'error';\n }\n\n return (\n <BottomSheetModal\n snapPoints={snapPoints}\n index={0}\n backdropComponent={renderBackdrop}\n onDismiss={handleClose}\n style={styles.bottomSheet}\n ref={bottomSheetModalRef}\n {...extraBottomSheetProps}\n >\n <View style={styles.innerContainer}>\n {state?.nav?.options?.type === 'error' && (\n <>\n <ErrorIcon />\n <Text style={styles.errorMessage}>\n {state.nav.options.message ||\n 'An error occurred. Please try again.'}\n </Text>\n </>\n )}\n\n {state?.nav?.options?.type === 'sign-in' && (\n <>\n <ActivityIndicator size=\"large\" color=\"#5b0ae0\" />\n <Text style={styles.signInMessage}>\n Automatically signing you in. Just a sec...\n </Text>\n </>\n )}\n </View>\n </BottomSheetModal>\n );\n}\n\nconst styles = StyleSheet.create({\n modal: {\n // flex: 1,\n },\n bottomSheet: {\n shadowColor: '#000',\n shadowOffset: {\n width: 0,\n height: 12,\n },\n shadowOpacity: 0.58,\n shadowRadius: 16.0,\n\n elevation: 24,\n },\n innerContainer: {\n borderRadius: 20,\n borderColor: 'transparent',\n borderWidth: 0,\n padding: 25,\n textAlign: 'center',\n },\n signInMessage: {\n textAlign: 'center',\n fontSize: 24,\n padding: 20,\n },\n errorMessage: {\n textAlign: 'center',\n fontSize: 24,\n padding: 20,\n },\n errorIcon: {\n textAlign: 'center',\n color: '#DA1E28',\n height: 24,\n width: 24,\n },\n});\n"],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _reactNativeGestureHandler = require("react-native-gesture-handler");
11
+
12
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
13
+
14
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
15
+
16
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
17
+
18
+ // @ts-ignore
19
+ const {
20
+ useBottomSheetInternal
21
+ } = require('@gorhom/bottom-sheet/src/hooks/useBottomSheetInternal');
22
+
23
+ const BottomSheetTextInputComponent = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
24
+ let {
25
+ onFocus,
26
+ onBlur,
27
+ ...rest
28
+ } = _ref;
29
+ //#region hooks
30
+ // @ts-ignore
31
+ let {
32
+ shouldHandleKeyboardEvents
33
+ } = useBottomSheetInternal(); //#endregion
34
+
35
+ if (!shouldHandleKeyboardEvents) {
36
+ shouldHandleKeyboardEvents = {};
37
+ } //#region callbacks
38
+
39
+
40
+ const handleOnFocus = (0, _react.useCallback)(args => {
41
+ shouldHandleKeyboardEvents.value = true;
42
+
43
+ if (onFocus) {
44
+ onFocus(args);
45
+ }
46
+ }, [onFocus, shouldHandleKeyboardEvents]);
47
+ const handleOnBlur = (0, _react.useCallback)(args => {
48
+ shouldHandleKeyboardEvents.value = false;
49
+
50
+ if (onBlur) {
51
+ onBlur(args);
52
+ }
53
+ }, [onBlur, shouldHandleKeyboardEvents]); //#endregion
54
+
55
+ return /*#__PURE__*/_react.default.createElement(_reactNativeGestureHandler.TextInput, _extends({
56
+ ref: ref,
57
+ onFocus: handleOnFocus,
58
+ onBlur: handleOnBlur
59
+ }, rest));
60
+ });
61
+ const BottomSheetTextInput = /*#__PURE__*/(0, _react.memo)(BottomSheetTextInputComponent);
62
+ BottomSheetTextInput.displayName = 'BottomSheetTextInput';
63
+ var _default = BottomSheetTextInput;
64
+ exports.default = _default;
65
+ //# sourceMappingURL=BottomSheetTextInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useBottomSheetInternal","require","BottomSheetTextInputComponent","forwardRef","ref","onFocus","onBlur","rest","shouldHandleKeyboardEvents","handleOnFocus","useCallback","args","value","handleOnBlur","BottomSheetTextInput","memo","displayName"],"sources":["BottomSheetTextInput.tsx"],"sourcesContent":["import React, { memo, useCallback, forwardRef } from 'react';\nimport { TextInput } from 'react-native-gesture-handler';\nimport { BottomSheetTextInputProps } from './types';\n\n// @ts-ignore\nconst {\n useBottomSheetInternal,\n} = require('@gorhom/bottom-sheet/src/hooks/useBottomSheetInternal');\n\nconst BottomSheetTextInputComponent = forwardRef<\n TextInput,\n BottomSheetTextInputProps\n>(({ onFocus, onBlur, ...rest }, ref) => {\n //#region hooks\n // @ts-ignore\n let { shouldHandleKeyboardEvents } = useBottomSheetInternal();\n //#endregion\n\n if (!shouldHandleKeyboardEvents) {\n shouldHandleKeyboardEvents = {};\n }\n\n //#region callbacks\n const handleOnFocus = useCallback(\n (args) => {\n shouldHandleKeyboardEvents.value = true;\n if (onFocus) {\n onFocus(args);\n }\n },\n [onFocus, shouldHandleKeyboardEvents]\n );\n const handleOnBlur = useCallback(\n (args) => {\n shouldHandleKeyboardEvents.value = false;\n if (onBlur) {\n onBlur(args);\n }\n },\n [onBlur, shouldHandleKeyboardEvents]\n );\n //#endregion\n\n return (\n <TextInput\n ref={ref}\n onFocus={handleOnFocus}\n onBlur={handleOnBlur}\n {...rest}\n />\n );\n});\n\nconst BottomSheetTextInput = memo(BottomSheetTextInputComponent);\nBottomSheetTextInput.displayName = 'BottomSheetTextInput';\n\nexport default BottomSheetTextInput;\n"],"mappings":";;;;;;;AAAA;;AACA;;;;;;;;AAGA;AACA,MAAM;EACJA;AADI,IAEFC,OAAO,CAAC,uDAAD,CAFX;;AAIA,MAAMC,6BAA6B,gBAAG,IAAAC,iBAAA,EAGpC,OAA+BC,GAA/B,KAAuC;EAAA,IAAtC;IAAEC,OAAF;IAAWC,MAAX;IAAmB,GAAGC;EAAtB,CAAsC;EACvC;EACA;EACA,IAAI;IAAEC;EAAF,IAAiCR,sBAAsB,EAA3D,CAHuC,CAIvC;;EAEA,IAAI,CAACQ,0BAAL,EAAiC;IAC/BA,0BAA0B,GAAG,EAA7B;EACD,CARsC,CAUvC;;;EACA,MAAMC,aAAa,GAAG,IAAAC,kBAAA,EACnBC,IAAD,IAAU;IACRH,0BAA0B,CAACI,KAA3B,GAAmC,IAAnC;;IACA,IAAIP,OAAJ,EAAa;MACXA,OAAO,CAACM,IAAD,CAAP;IACD;EACF,CANmB,EAOpB,CAACN,OAAD,EAAUG,0BAAV,CAPoB,CAAtB;EASA,MAAMK,YAAY,GAAG,IAAAH,kBAAA,EAClBC,IAAD,IAAU;IACRH,0BAA0B,CAACI,KAA3B,GAAmC,KAAnC;;IACA,IAAIN,MAAJ,EAAY;MACVA,MAAM,CAACK,IAAD,CAAN;IACD;EACF,CANkB,EAOnB,CAACL,MAAD,EAASE,0BAAT,CAPmB,CAArB,CApBuC,CA6BvC;;EAEA,oBACE,6BAAC,oCAAD;IACE,GAAG,EAAEJ,GADP;IAEE,OAAO,EAAEK,aAFX;IAGE,MAAM,EAAEI;EAHV,GAIMN,IAJN,EADF;AAQD,CA1CqC,CAAtC;AA4CA,MAAMO,oBAAoB,gBAAG,IAAAC,WAAA,EAAKb,6BAAL,CAA7B;AACAY,oBAAoB,CAACE,WAArB,GAAmC,sBAAnC;eAEeF,oB"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "BottomSheetTextInputProps", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _types.BottomSheetTextInputProps;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "default", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _BottomSheetTextInput.default;
16
+ }
17
+ });
18
+
19
+ var _BottomSheetTextInput = _interopRequireDefault(require("./BottomSheetTextInput"));
20
+
21
+ var _types = require("./types");
22
+
23
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["// @ts-ignore\nexport { default } from './BottomSheetTextInput';\n\n// @ts-ignore\nexport { BottomSheetTextInputProps } from './types';\n"],"mappings":";;;;;;;;;;;;;;;;;;AACA;;AAGA"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import { TextInputProps } from 'react-native';\n\nexport interface BottomSheetTextInputProps extends TextInputProps {}\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"names":["DefaultContext","config","state","dispatch","useGlobalContext","client","api","useApi","useDeviceFingerprint","useEffect","resp","get","headers","appKey","json","app","icon","iconMeta","ky","head","icon_content_type","type","ActionType","SET_APP_CONFIG","payload","err","console","error","auth","access_token","id","authData","authLink","Linking","getInitialURL","Clipboard","getString","includes","CHANGE_ROUTE","route","opts","DEFAULT_USER_AGENT","startsWith","authStr","split","JSON","parse","base64","decode","setString","LOGIN_SUCCESS","retrieveUserInfo","useCallback","userInfo","Authorization","LOAD_USER","UPDATE_LOCAL_ACLS","redacted","reduce","acc","field","shared","retrieveAcls","appUserAcls","acls","Error","user","needs_refresh","SET_REFRESH_USER_DATA","saveAclsDebounced","useDebounce","saveAcls","local_acls","put","localAclsRef","useRef","current","isEqual","saveUserDataDebounced","saveUserData","data","SET_IS_SAVING_USER_DATA","saving","eventDetails","events","EventType","USER_DATA_SAVED","userDataRef","email","phone_number"],"sources":["DefaultContext.tsx"],"sourcesContent":["import { useEffect, useCallback, useRef } from 'react';\nimport isEqual from 'lodash-es/isEqual';\nimport { useDebounce, useApi, useDeviceFingerprint } from '../hooks';\nimport { DEFAULT_USER_AGENT } from '../hooks/api';\nimport type { IConfig } from '../utils/config';\nimport { useGlobalContext } from './GlobalContext';\nimport { ActionType } from '../data/actions';\nimport ky from 'ky';\nimport Clipboard from '@react-native-clipboard/clipboard';\nimport base64 from 'react-native-base64';\nimport { Linking } from 'react-native';\nimport { events, EventType } from '../utils/events';\n\nexport type UserInfoResp = {\n data: {\n [key: string]: any;\n };\n redacted: string[];\n};\n\ninterface UserAclsResponse {\n acls: Record<string, { shared: boolean }>;\n}\n\ntype DefaultContextProps = {\n config: IConfig;\n};\n\nexport function DefaultContext({ config }: DefaultContextProps) {\n const { state, dispatch } = useGlobalContext();\n const { client: api } = useApi();\n useDeviceFingerprint();\n\n // Fetch app schema and config\n useEffect(() => {\n (async () => {\n try {\n const resp: any = await api\n .get('hub/app-config', {\n headers: {\n 'x-rownd-app-key': config.appKey,\n },\n })\n .json();\n\n if (resp?.app?.icon) {\n const iconMeta = await ky.head(resp.app.icon);\n resp.app.icon_content_type = iconMeta.headers.get('content-type');\n }\n\n dispatch({\n type: ActionType.SET_APP_CONFIG,\n payload: resp.app,\n });\n } catch (err) {\n console.error('Failed to fetch app config:', err);\n }\n })();\n }, [api, config.appKey, dispatch]);\n\n /**\n * If not signed in, check the clipboard for an init hash or auth link we can use to auto-auth the user\n */\n useEffect(() => {\n if (state.auth.access_token || !state.app.id) {\n return;\n }\n\n (async () => {\n try {\n let authData = null;\n\n let authLink =\n (await Linking.getInitialURL()) || (await Clipboard.getString());\n if (authLink.includes('rownd.link')) {\n dispatch({\n type: ActionType.CHANGE_ROUTE,\n payload: {\n route: '/account/auto-signin',\n opts: {\n type: 'sign-in',\n },\n },\n });\n\n authData = await ky\n .get(authLink, {\n headers: {\n 'User-Agent': DEFAULT_USER_AGENT,\n },\n })\n .json();\n } else if (authLink.startsWith('rph_init=')) {\n const authStr = authLink.split('rph_init=')[1];\n authData = JSON.parse(base64.decode(authStr));\n } else {\n return;\n }\n\n // Clear the clipboard value so we don't leak any creds\n Clipboard.setString('');\n\n dispatch({\n type: ActionType.LOGIN_SUCCESS,\n payload: authData,\n });\n } catch (err) {\n console.error(\n 'We found an auth link or string, but failed to authenticate with it because:',\n err\n );\n }\n })();\n }, [state.auth.access_token, state.app.id, dispatch]);\n\n const retrieveUserInfo = useCallback(() => {\n if (!state.auth.access_token || !state.app.id) {\n return;\n }\n\n (async () => {\n const userInfo: UserInfoResp = await api\n .get(`me/applications/${state.app.id}/data`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n })\n .json();\n dispatch({\n type: ActionType.LOAD_USER,\n payload: userInfo,\n });\n\n dispatch({\n type: ActionType.UPDATE_LOCAL_ACLS,\n payload: userInfo.redacted.reduce(\n (acc: Record<string, any>, field: string) => {\n acc[field] = { shared: false };\n return acc;\n },\n {}\n ),\n });\n })();\n }, [api, dispatch, state.app.id, state.auth.access_token]);\n\n const retrieveAcls = useCallback(() => {\n if (!state.app.id || !state.auth.access_token) {\n return;\n }\n\n (async () => {\n try {\n const appUserAcls: UserAclsResponse = await api\n .get(`me/applications/${state.app.id}/acls`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n })\n .json();\n dispatch({\n type: ActionType.UPDATE_LOCAL_ACLS,\n payload: appUserAcls.acls,\n });\n } catch (err) {\n if (err instanceof Error) {\n // const unsharedAcls = reduceSchemaToUnsharedAcls();\n dispatch({\n type: ActionType.UPDATE_LOCAL_ACLS,\n payload: {},\n });\n }\n }\n })();\n }, [api, dispatch, state.app.id, state.auth.access_token]);\n\n useEffect(retrieveUserInfo, [retrieveUserInfo]);\n useEffect(retrieveAcls, [retrieveAcls]);\n\n useEffect(() => {\n if (!state.user.needs_refresh) {\n return;\n }\n retrieveUserInfo();\n dispatch({\n type: ActionType.SET_REFRESH_USER_DATA,\n payload: { needs_refresh: false },\n });\n }, [dispatch, retrieveUserInfo, state.user.needs_refresh]);\n\n const saveAclsDebounced = useDebounce(saveAcls, 2000); // 2s\n\n async function saveAcls() {\n if (state.app.id && state.local_acls) {\n await api\n .put(`me/applications/${state.app.id}/acls`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n json: {\n acls: state.local_acls,\n },\n })\n .json();\n }\n }\n\n const localAclsRef = useRef(state.local_acls);\n useEffect(() => {\n // Don't save acls if they were just loaded for the first time or they haven't changed\n if (\n !localAclsRef.current ||\n isEqual(localAclsRef.current, state.local_acls)\n ) {\n return;\n }\n saveAclsDebounced();\n }, [saveAclsDebounced, state.local_acls]);\n\n const saveUserDataDebounced = useDebounce(saveUserData, 2000); // 2s\n\n // Save user data in the application state to the API server\n async function saveUserData() {\n if (state.app.id && state.user.data && state.auth.access_token) {\n dispatch({\n type: ActionType.SET_IS_SAVING_USER_DATA,\n payload: {\n saving: true,\n },\n });\n\n const eventDetails: Record<string, any> = {};\n try {\n eventDetails.data = await api\n .put(`me/applications/${state.app.id}/data`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n json: {\n data: state.user.data,\n },\n })\n .json();\n } catch (err) {\n eventDetails.error = err;\n // Get the latest user info from Rownd. Something was probably bad\n // with the data we just tried to save.\n // This is a bit hacky. We should be able to reset the state without\n // calling rownd again by rolling back to a previously good state...\n retrieveUserInfo();\n // TODO: Set some error state\n } finally {\n events.dispatch(EventType.USER_DATA_SAVED, eventDetails);\n dispatch({\n type: ActionType.SET_IS_SAVING_USER_DATA,\n payload: {\n saving: false,\n },\n });\n }\n }\n }\n\n const userDataRef = useRef(state.user.data);\n useEffect(() => {\n // Don't update the user data in the API server if the email is unknown or the data hasn't changed\n if (\n (!state.user.data?.email && !state.user.data.phone_number) ||\n isEqual(userDataRef.current, state.user.data)\n ) {\n return;\n }\n saveUserDataDebounced();\n userDataRef.current = state.user.data;\n }, [dispatch, saveUserDataDebounced, state.user.data]);\n\n return null;\n}\n"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAiBO,SAASA,cAAT,OAAyD;EAAA,IAAjC;IAAEC;EAAF,CAAiC;EAC9D,MAAM;IAAEC,KAAF;IAASC;EAAT,IAAsB,IAAAC,+BAAA,GAA5B;EACA,MAAM;IAAEC,MAAM,EAAEC;EAAV,IAAkB,IAAAC,aAAA,GAAxB;EACA,IAAAC,2BAAA,IAH8D,CAK9D;;EACA,IAAAC,gBAAA,EAAU,MAAM;IACd,CAAC,YAAY;MACX,IAAI;QAAA;;QACF,MAAMC,IAAS,GAAG,MAAMJ,GAAG,CACxBK,GADqB,CACjB,gBADiB,EACC;UACrBC,OAAO,EAAE;YACP,mBAAmBX,MAAM,CAACY;UADnB;QADY,CADD,EAMrBC,IANqB,EAAxB;;QAQA,IAAIJ,IAAJ,aAAIA,IAAJ,4BAAIA,IAAI,CAAEK,GAAV,sCAAI,UAAWC,IAAf,EAAqB;UACnB,MAAMC,QAAQ,GAAG,MAAMC,WAAA,CAAGC,IAAH,CAAQT,IAAI,CAACK,GAAL,CAASC,IAAjB,CAAvB;UACAN,IAAI,CAACK,GAAL,CAASK,iBAAT,GAA6BH,QAAQ,CAACL,OAAT,CAAiBD,GAAjB,CAAqB,cAArB,CAA7B;QACD;;QAEDR,QAAQ,CAAC;UACPkB,IAAI,EAAEC,mBAAA,CAAWC,cADV;UAEPC,OAAO,EAAEd,IAAI,CAACK;QAFP,CAAD,CAAR;MAID,CAlBD,CAkBE,OAAOU,GAAP,EAAY;QACZC,OAAO,CAACC,KAAR,CAAc,6BAAd,EAA6CF,GAA7C;MACD;IACF,CAtBD;EAuBD,CAxBD,EAwBG,CAACnB,GAAD,EAAML,MAAM,CAACY,MAAb,EAAqBV,QAArB,CAxBH;EA0BA;AACF;AACA;;EACE,IAAAM,gBAAA,EAAU,MAAM;IACd,IAAIP,KAAK,CAAC0B,IAAN,CAAWC,YAAX,IAA2B,CAAC3B,KAAK,CAACa,GAAN,CAAUe,EAA1C,EAA8C;MAC5C;IACD;;IAED,CAAC,YAAY;MACX,IAAI;QACF,IAAIC,QAAQ,GAAG,IAAf;QAEA,IAAIC,QAAQ,GACV,CAAC,MAAMC,oBAAA,CAAQC,aAAR,EAAP,MAAoC,MAAMC,kBAAA,CAAUC,SAAV,EAA1C,CADF;;QAEA,IAAIJ,QAAQ,CAACK,QAAT,CAAkB,YAAlB,CAAJ,EAAqC;UACnClC,QAAQ,CAAC;YACPkB,IAAI,EAAEC,mBAAA,CAAWgB,YADV;YAEPd,OAAO,EAAE;cACPe,KAAK,EAAE,sBADA;cAEPC,IAAI,EAAE;gBACJnB,IAAI,EAAE;cADF;YAFC;UAFF,CAAD,CAAR;UAUAU,QAAQ,GAAG,MAAMb,WAAA,CACdP,GADc,CACVqB,QADU,EACA;YACbpB,OAAO,EAAE;cACP,cAAc6B;YADP;UADI,CADA,EAMd3B,IANc,EAAjB;QAOD,CAlBD,MAkBO,IAAIkB,QAAQ,CAACU,UAAT,CAAoB,WAApB,CAAJ,EAAsC;UAC3C,MAAMC,OAAO,GAAGX,QAAQ,CAACY,KAAT,CAAe,WAAf,EAA4B,CAA5B,CAAhB;UACAb,QAAQ,GAAGc,IAAI,CAACC,KAAL,CAAWC,wBAAA,CAAOC,MAAP,CAAcL,OAAd,CAAX,CAAX;QACD,CAHM,MAGA;UACL;QACD,CA5BC,CA8BF;;;QACAR,kBAAA,CAAUc,SAAV,CAAoB,EAApB;;QAEA9C,QAAQ,CAAC;UACPkB,IAAI,EAAEC,mBAAA,CAAW4B,aADV;UAEP1B,OAAO,EAAEO;QAFF,CAAD,CAAR;MAID,CArCD,CAqCE,OAAON,GAAP,EAAY;QACZC,OAAO,CAACC,KAAR,CACE,8EADF,EAEEF,GAFF;MAID;IACF,CA5CD;EA6CD,CAlDD,EAkDG,CAACvB,KAAK,CAAC0B,IAAN,CAAWC,YAAZ,EAA0B3B,KAAK,CAACa,GAAN,CAAUe,EAApC,EAAwC3B,QAAxC,CAlDH;EAoDA,MAAMgD,gBAAgB,GAAG,IAAAC,kBAAA,EAAY,MAAM;IACzC,IAAI,CAAClD,KAAK,CAAC0B,IAAN,CAAWC,YAAZ,IAA4B,CAAC3B,KAAK,CAACa,GAAN,CAAUe,EAA3C,EAA+C;MAC7C;IACD;;IAED,CAAC,YAAY;MACX,MAAMuB,QAAsB,GAAG,MAAM/C,GAAG,CACrCK,GADkC,CAC7B,mBAAkBT,KAAK,CAACa,GAAN,CAAUe,EAAG,OADF,EACU;QAC3ClB,OAAO,EAAE;UACP0C,aAAa,EAAG,UAASpD,KAAK,CAAC0B,IAAN,CAAWC,YAAa;QAD1C;MADkC,CADV,EAMlCf,IANkC,EAArC;MAOAX,QAAQ,CAAC;QACPkB,IAAI,EAAEC,mBAAA,CAAWiC,SADV;QAEP/B,OAAO,EAAE6B;MAFF,CAAD,CAAR;MAKAlD,QAAQ,CAAC;QACPkB,IAAI,EAAEC,mBAAA,CAAWkC,iBADV;QAEPhC,OAAO,EAAE6B,QAAQ,CAACI,QAAT,CAAkBC,MAAlB,CACP,CAACC,GAAD,EAA2BC,KAA3B,KAA6C;UAC3CD,GAAG,CAACC,KAAD,CAAH,GAAa;YAAEC,MAAM,EAAE;UAAV,CAAb;UACA,OAAOF,GAAP;QACD,CAJM,EAKP,EALO;MAFF,CAAD,CAAR;IAUD,CAvBD;EAwBD,CA7BwB,EA6BtB,CAACrD,GAAD,EAAMH,QAAN,EAAgBD,KAAK,CAACa,GAAN,CAAUe,EAA1B,EAA8B5B,KAAK,CAAC0B,IAAN,CAAWC,YAAzC,CA7BsB,CAAzB;EA+BA,MAAMiC,YAAY,GAAG,IAAAV,kBAAA,EAAY,MAAM;IACrC,IAAI,CAAClD,KAAK,CAACa,GAAN,CAAUe,EAAX,IAAiB,CAAC5B,KAAK,CAAC0B,IAAN,CAAWC,YAAjC,EAA+C;MAC7C;IACD;;IAED,CAAC,YAAY;MACX,IAAI;QACF,MAAMkC,WAA6B,GAAG,MAAMzD,GAAG,CAC5CK,GADyC,CACpC,mBAAkBT,KAAK,CAACa,GAAN,CAAUe,EAAG,OADK,EACG;UAC3ClB,OAAO,EAAE;YACP0C,aAAa,EAAG,UAASpD,KAAK,CAAC0B,IAAN,CAAWC,YAAa;UAD1C;QADkC,CADH,EAMzCf,IANyC,EAA5C;QAOAX,QAAQ,CAAC;UACPkB,IAAI,EAAEC,mBAAA,CAAWkC,iBADV;UAEPhC,OAAO,EAAEuC,WAAW,CAACC;QAFd,CAAD,CAAR;MAID,CAZD,CAYE,OAAOvC,GAAP,EAAY;QACZ,IAAIA,GAAG,YAAYwC,KAAnB,EAA0B;UACxB;UACA9D,QAAQ,CAAC;YACPkB,IAAI,EAAEC,mBAAA,CAAWkC,iBADV;YAEPhC,OAAO,EAAE;UAFF,CAAD,CAAR;QAID;MACF;IACF,CAtBD;EAuBD,CA5BoB,EA4BlB,CAAClB,GAAD,EAAMH,QAAN,EAAgBD,KAAK,CAACa,GAAN,CAAUe,EAA1B,EAA8B5B,KAAK,CAAC0B,IAAN,CAAWC,YAAzC,CA5BkB,CAArB;EA8BA,IAAApB,gBAAA,EAAU0C,gBAAV,EAA4B,CAACA,gBAAD,CAA5B;EACA,IAAA1C,gBAAA,EAAUqD,YAAV,EAAwB,CAACA,YAAD,CAAxB;EAEA,IAAArD,gBAAA,EAAU,MAAM;IACd,IAAI,CAACP,KAAK,CAACgE,IAAN,CAAWC,aAAhB,EAA+B;MAC7B;IACD;;IACDhB,gBAAgB;IAChBhD,QAAQ,CAAC;MACPkB,IAAI,EAAEC,mBAAA,CAAW8C,qBADV;MAEP5C,OAAO,EAAE;QAAE2C,aAAa,EAAE;MAAjB;IAFF,CAAD,CAAR;EAID,CATD,EASG,CAAChE,QAAD,EAAWgD,gBAAX,EAA6BjD,KAAK,CAACgE,IAAN,CAAWC,aAAxC,CATH;EAWA,MAAME,iBAAiB,GAAG,IAAAC,kBAAA,EAAYC,QAAZ,EAAsB,IAAtB,CAA1B,CAlK8D,CAkKP;;EAEvD,eAAeA,QAAf,GAA0B;IACxB,IAAIrE,KAAK,CAACa,GAAN,CAAUe,EAAV,IAAgB5B,KAAK,CAACsE,UAA1B,EAAsC;MACpC,MAAMlE,GAAG,CACNmE,GADG,CACE,mBAAkBvE,KAAK,CAACa,GAAN,CAAUe,EAAG,OADjC,EACyC;QAC3ClB,OAAO,EAAE;UACP0C,aAAa,EAAG,UAASpD,KAAK,CAAC0B,IAAN,CAAWC,YAAa;QAD1C,CADkC;QAI3Cf,IAAI,EAAE;UACJkD,IAAI,EAAE9D,KAAK,CAACsE;QADR;MAJqC,CADzC,EASH1D,IATG,EAAN;IAUD;EACF;;EAED,MAAM4D,YAAY,GAAG,IAAAC,aAAA,EAAOzE,KAAK,CAACsE,UAAb,CAArB;EACA,IAAA/D,gBAAA,EAAU,MAAM;IACd;IACA,IACE,CAACiE,YAAY,CAACE,OAAd,IACA,IAAAC,gBAAA,EAAQH,YAAY,CAACE,OAArB,EAA8B1E,KAAK,CAACsE,UAApC,CAFF,EAGE;MACA;IACD;;IACDH,iBAAiB;EAClB,CATD,EASG,CAACA,iBAAD,EAAoBnE,KAAK,CAACsE,UAA1B,CATH;EAWA,MAAMM,qBAAqB,GAAG,IAAAR,kBAAA,EAAYS,YAAZ,EAA0B,IAA1B,CAA9B,CA/L8D,CA+LC;EAE/D;;EACA,eAAeA,YAAf,GAA8B;IAC5B,IAAI7E,KAAK,CAACa,GAAN,CAAUe,EAAV,IAAgB5B,KAAK,CAACgE,IAAN,CAAWc,IAA3B,IAAmC9E,KAAK,CAAC0B,IAAN,CAAWC,YAAlD,EAAgE;MAC9D1B,QAAQ,CAAC;QACPkB,IAAI,EAAEC,mBAAA,CAAW2D,uBADV;QAEPzD,OAAO,EAAE;UACP0D,MAAM,EAAE;QADD;MAFF,CAAD,CAAR;MAOA,MAAMC,YAAiC,GAAG,EAA1C;;MACA,IAAI;QACFA,YAAY,CAACH,IAAb,GAAoB,MAAM1E,GAAG,CAC1BmE,GADuB,CAClB,mBAAkBvE,KAAK,CAACa,GAAN,CAAUe,EAAG,OADb,EACqB;UAC3ClB,OAAO,EAAE;YACP0C,aAAa,EAAG,UAASpD,KAAK,CAAC0B,IAAN,CAAWC,YAAa;UAD1C,CADkC;UAI3Cf,IAAI,EAAE;YACJkE,IAAI,EAAE9E,KAAK,CAACgE,IAAN,CAAWc;UADb;QAJqC,CADrB,EASvBlE,IATuB,EAA1B;MAUD,CAXD,CAWE,OAAOW,GAAP,EAAY;QACZ0D,YAAY,CAACxD,KAAb,GAAqBF,GAArB,CADY,CAEZ;QACA;QACA;QACA;;QACA0B,gBAAgB,GANJ,CAOZ;MACD,CAnBD,SAmBU;QACRiC,cAAA,CAAOjF,QAAP,CAAgBkF,iBAAA,CAAUC,eAA1B,EAA2CH,YAA3C;;QACAhF,QAAQ,CAAC;UACPkB,IAAI,EAAEC,mBAAA,CAAW2D,uBADV;UAEPzD,OAAO,EAAE;YACP0D,MAAM,EAAE;UADD;QAFF,CAAD,CAAR;MAMD;IACF;EACF;;EAED,MAAMK,WAAW,GAAG,IAAAZ,aAAA,EAAOzE,KAAK,CAACgE,IAAN,CAAWc,IAAlB,CAApB;EACA,IAAAvE,gBAAA,EAAU,MAAM;IAAA;;IACd;IACA,IACG,sBAACP,KAAK,CAACgE,IAAN,CAAWc,IAAZ,6CAAC,iBAAiBQ,KAAlB,KAA2B,CAACtF,KAAK,CAACgE,IAAN,CAAWc,IAAX,CAAgBS,YAA7C,IACA,IAAAZ,gBAAA,EAAQU,WAAW,CAACX,OAApB,EAA6B1E,KAAK,CAACgE,IAAN,CAAWc,IAAxC,CAFF,EAGE;MACA;IACD;;IACDF,qBAAqB;IACrBS,WAAW,CAACX,OAAZ,GAAsB1E,KAAK,CAACgE,IAAN,CAAWc,IAAjC;EACD,CAVD,EAUG,CAAC7E,QAAD,EAAW2E,qBAAX,EAAkC5E,KAAK,CAACgE,IAAN,CAAWc,IAA7C,CAVH;EAYA,OAAO,IAAP;AACD"}
1
+ {"version":3,"names":["DefaultContext","config","state","dispatch","useGlobalContext","client","api","useApi","useDeviceFingerprint","useEffect","resp","get","headers","appKey","json","app","icon","iconMeta","ky","head","icon_content_type","type","ActionType","SET_APP_CONFIG","payload","err","console","error","auth","access_token","id","authData","authLink","Linking","getInitialURL","Clipboard","getString","includes","CHANGE_ROUTE","route","opts","DEFAULT_USER_AGENT","startsWith","authStr","split","JSON","parse","base64","decode","setString","LOGIN_SUCCESS","retrieveUserInfo","useCallback","userInfo","Authorization","LOAD_USER","UPDATE_LOCAL_ACLS","redacted","reduce","acc","field","shared","retrieveAcls","appUserAcls","acls","Error","user","needs_refresh","SET_REFRESH_USER_DATA","saveAclsDebounced","useDebounce","saveAcls","local_acls","put","localAclsRef","useRef","current","isEqual","saveUserDataDebounced","saveUserData","data","SET_IS_SAVING_USER_DATA","saving","eventDetails","events","EventType","USER_DATA_SAVED","userDataRef","email","phone_number"],"sources":["DefaultContext.tsx"],"sourcesContent":["import { useEffect, useCallback, useRef } from 'react';\nimport isEqual from 'lodash-es/isEqual';\nimport { useDebounce, useApi, useDeviceFingerprint } from '../hooks';\nimport { DEFAULT_USER_AGENT } from '../hooks/api';\nimport { IConfig } from '../utils/config';\nimport { useGlobalContext } from './GlobalContext';\nimport { ActionType } from '../data/actions';\nimport ky from 'ky';\nimport Clipboard from '@react-native-clipboard/clipboard';\nimport base64 from 'react-native-base64';\nimport { Linking } from 'react-native';\nimport { events, EventType } from '../utils/events';\n\nexport type UserInfoResp = {\n data: {\n [key: string]: any;\n };\n redacted: string[];\n};\n\ninterface UserAclsResponse {\n acls: Record<string, { shared: boolean }>;\n}\n\ntype DefaultContextProps = {\n config: IConfig;\n};\n\nexport function DefaultContext({ config }: DefaultContextProps) {\n const { state, dispatch } = useGlobalContext();\n const { client: api } = useApi();\n useDeviceFingerprint();\n\n // Fetch app schema and config\n useEffect(() => {\n (async () => {\n try {\n const resp: any = await api\n .get('hub/app-config', {\n headers: {\n 'x-rownd-app-key': config.appKey,\n },\n })\n .json();\n\n if (resp?.app?.icon) {\n const iconMeta = await ky.head(resp.app.icon);\n resp.app.icon_content_type = iconMeta.headers.get('content-type');\n }\n\n dispatch({\n type: ActionType.SET_APP_CONFIG,\n payload: resp.app,\n });\n } catch (err) {\n console.error('Failed to fetch app config:', err);\n }\n })();\n }, [api, config.appKey, dispatch]);\n\n /**\n * If not signed in, check the clipboard for an init hash or auth link we can use to auto-auth the user\n */\n useEffect(() => {\n if (state.auth.access_token || !state.app.id) {\n return;\n }\n\n (async () => {\n try {\n let authData = null;\n\n let authLink =\n (await Linking.getInitialURL()) || (await Clipboard.getString());\n if (authLink.includes('rownd.link')) {\n dispatch({\n type: ActionType.CHANGE_ROUTE,\n payload: {\n route: '/account/auto-signin',\n opts: {\n type: 'sign-in',\n },\n },\n });\n\n authData = await ky\n .get(authLink, {\n headers: {\n 'User-Agent': DEFAULT_USER_AGENT,\n },\n })\n .json();\n } else if (authLink.startsWith('rph_init=')) {\n const authStr = authLink.split('rph_init=')[1];\n authData = JSON.parse(base64.decode(authStr));\n } else {\n return;\n }\n\n // Clear the clipboard value so we don't leak any creds\n Clipboard.setString('');\n\n dispatch({\n type: ActionType.LOGIN_SUCCESS,\n payload: authData,\n });\n } catch (err) {\n console.error(\n 'We found an auth link or string, but failed to authenticate with it because:',\n err\n );\n }\n })();\n }, [state.auth.access_token, state.app.id, dispatch]);\n\n const retrieveUserInfo = useCallback(() => {\n if (!state.auth.access_token || !state.app.id) {\n return;\n }\n\n (async () => {\n const userInfo: UserInfoResp = await api\n .get(`me/applications/${state.app.id}/data`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n })\n .json();\n dispatch({\n type: ActionType.LOAD_USER,\n payload: userInfo,\n });\n\n dispatch({\n type: ActionType.UPDATE_LOCAL_ACLS,\n payload: userInfo.redacted.reduce(\n (acc: Record<string, any>, field: string) => {\n acc[field] = { shared: false };\n return acc;\n },\n {}\n ),\n });\n })();\n }, [api, dispatch, state.app.id, state.auth.access_token]);\n\n const retrieveAcls = useCallback(() => {\n if (!state.app.id || !state.auth.access_token) {\n return;\n }\n\n (async () => {\n try {\n const appUserAcls: UserAclsResponse = await api\n .get(`me/applications/${state.app.id}/acls`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n })\n .json();\n dispatch({\n type: ActionType.UPDATE_LOCAL_ACLS,\n payload: appUserAcls.acls,\n });\n } catch (err) {\n if (err instanceof Error) {\n // const unsharedAcls = reduceSchemaToUnsharedAcls();\n dispatch({\n type: ActionType.UPDATE_LOCAL_ACLS,\n payload: {},\n });\n }\n }\n })();\n }, [api, dispatch, state.app.id, state.auth.access_token]);\n\n useEffect(retrieveUserInfo, [retrieveUserInfo]);\n useEffect(retrieveAcls, [retrieveAcls]);\n\n useEffect(() => {\n if (!state.user.needs_refresh) {\n return;\n }\n retrieveUserInfo();\n dispatch({\n type: ActionType.SET_REFRESH_USER_DATA,\n payload: { needs_refresh: false },\n });\n }, [dispatch, retrieveUserInfo, state.user.needs_refresh]);\n\n const saveAclsDebounced = useDebounce(saveAcls, 2000); // 2s\n\n async function saveAcls() {\n if (state.app.id && state.local_acls) {\n await api\n .put(`me/applications/${state.app.id}/acls`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n json: {\n acls: state.local_acls,\n },\n })\n .json();\n }\n }\n\n const localAclsRef = useRef(state.local_acls);\n useEffect(() => {\n // Don't save acls if they were just loaded for the first time or they haven't changed\n if (\n !localAclsRef.current ||\n isEqual(localAclsRef.current, state.local_acls)\n ) {\n return;\n }\n saveAclsDebounced();\n }, [saveAclsDebounced, state.local_acls]);\n\n const saveUserDataDebounced = useDebounce(saveUserData, 2000); // 2s\n\n // Save user data in the application state to the API server\n async function saveUserData() {\n if (state.app.id && state.user.data && state.auth.access_token) {\n dispatch({\n type: ActionType.SET_IS_SAVING_USER_DATA,\n payload: {\n saving: true,\n },\n });\n\n const eventDetails: Record<string, any> = {};\n try {\n eventDetails.data = await api\n .put(`me/applications/${state.app.id}/data`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n json: {\n data: state.user.data,\n },\n })\n .json();\n } catch (err) {\n eventDetails.error = err;\n // Get the latest user info from Rownd. Something was probably bad\n // with the data we just tried to save.\n // This is a bit hacky. We should be able to reset the state without\n // calling rownd again by rolling back to a previously good state...\n retrieveUserInfo();\n // TODO: Set some error state\n } finally {\n events.dispatch(EventType.USER_DATA_SAVED, eventDetails);\n dispatch({\n type: ActionType.SET_IS_SAVING_USER_DATA,\n payload: {\n saving: false,\n },\n });\n }\n }\n }\n\n const userDataRef = useRef(state.user.data);\n useEffect(() => {\n // Don't update the user data in the API server if the email is unknown or the data hasn't changed\n if (\n (!state.user.data?.email && !state.user.data.phone_number) ||\n isEqual(userDataRef.current, state.user.data)\n ) {\n return;\n }\n saveUserDataDebounced();\n userDataRef.current = state.user.data;\n }, [dispatch, saveUserDataDebounced, state.user.data]);\n\n return null;\n}\n"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAiBO,SAASA,cAAT,OAAyD;EAAA,IAAjC;IAAEC;EAAF,CAAiC;EAC9D,MAAM;IAAEC,KAAF;IAASC;EAAT,IAAsB,IAAAC,+BAAA,GAA5B;EACA,MAAM;IAAEC,MAAM,EAAEC;EAAV,IAAkB,IAAAC,aAAA,GAAxB;EACA,IAAAC,2BAAA,IAH8D,CAK9D;;EACA,IAAAC,gBAAA,EAAU,MAAM;IACd,CAAC,YAAY;MACX,IAAI;QAAA;;QACF,MAAMC,IAAS,GAAG,MAAMJ,GAAG,CACxBK,GADqB,CACjB,gBADiB,EACC;UACrBC,OAAO,EAAE;YACP,mBAAmBX,MAAM,CAACY;UADnB;QADY,CADD,EAMrBC,IANqB,EAAxB;;QAQA,IAAIJ,IAAJ,aAAIA,IAAJ,4BAAIA,IAAI,CAAEK,GAAV,sCAAI,UAAWC,IAAf,EAAqB;UACnB,MAAMC,QAAQ,GAAG,MAAMC,WAAA,CAAGC,IAAH,CAAQT,IAAI,CAACK,GAAL,CAASC,IAAjB,CAAvB;UACAN,IAAI,CAACK,GAAL,CAASK,iBAAT,GAA6BH,QAAQ,CAACL,OAAT,CAAiBD,GAAjB,CAAqB,cAArB,CAA7B;QACD;;QAEDR,QAAQ,CAAC;UACPkB,IAAI,EAAEC,mBAAA,CAAWC,cADV;UAEPC,OAAO,EAAEd,IAAI,CAACK;QAFP,CAAD,CAAR;MAID,CAlBD,CAkBE,OAAOU,GAAP,EAAY;QACZC,OAAO,CAACC,KAAR,CAAc,6BAAd,EAA6CF,GAA7C;MACD;IACF,CAtBD;EAuBD,CAxBD,EAwBG,CAACnB,GAAD,EAAML,MAAM,CAACY,MAAb,EAAqBV,QAArB,CAxBH;EA0BA;AACF;AACA;;EACE,IAAAM,gBAAA,EAAU,MAAM;IACd,IAAIP,KAAK,CAAC0B,IAAN,CAAWC,YAAX,IAA2B,CAAC3B,KAAK,CAACa,GAAN,CAAUe,EAA1C,EAA8C;MAC5C;IACD;;IAED,CAAC,YAAY;MACX,IAAI;QACF,IAAIC,QAAQ,GAAG,IAAf;QAEA,IAAIC,QAAQ,GACV,CAAC,MAAMC,oBAAA,CAAQC,aAAR,EAAP,MAAoC,MAAMC,kBAAA,CAAUC,SAAV,EAA1C,CADF;;QAEA,IAAIJ,QAAQ,CAACK,QAAT,CAAkB,YAAlB,CAAJ,EAAqC;UACnClC,QAAQ,CAAC;YACPkB,IAAI,EAAEC,mBAAA,CAAWgB,YADV;YAEPd,OAAO,EAAE;cACPe,KAAK,EAAE,sBADA;cAEPC,IAAI,EAAE;gBACJnB,IAAI,EAAE;cADF;YAFC;UAFF,CAAD,CAAR;UAUAU,QAAQ,GAAG,MAAMb,WAAA,CACdP,GADc,CACVqB,QADU,EACA;YACbpB,OAAO,EAAE;cACP,cAAc6B;YADP;UADI,CADA,EAMd3B,IANc,EAAjB;QAOD,CAlBD,MAkBO,IAAIkB,QAAQ,CAACU,UAAT,CAAoB,WAApB,CAAJ,EAAsC;UAC3C,MAAMC,OAAO,GAAGX,QAAQ,CAACY,KAAT,CAAe,WAAf,EAA4B,CAA5B,CAAhB;UACAb,QAAQ,GAAGc,IAAI,CAACC,KAAL,CAAWC,wBAAA,CAAOC,MAAP,CAAcL,OAAd,CAAX,CAAX;QACD,CAHM,MAGA;UACL;QACD,CA5BC,CA8BF;;;QACAR,kBAAA,CAAUc,SAAV,CAAoB,EAApB;;QAEA9C,QAAQ,CAAC;UACPkB,IAAI,EAAEC,mBAAA,CAAW4B,aADV;UAEP1B,OAAO,EAAEO;QAFF,CAAD,CAAR;MAID,CArCD,CAqCE,OAAON,GAAP,EAAY;QACZC,OAAO,CAACC,KAAR,CACE,8EADF,EAEEF,GAFF;MAID;IACF,CA5CD;EA6CD,CAlDD,EAkDG,CAACvB,KAAK,CAAC0B,IAAN,CAAWC,YAAZ,EAA0B3B,KAAK,CAACa,GAAN,CAAUe,EAApC,EAAwC3B,QAAxC,CAlDH;EAoDA,MAAMgD,gBAAgB,GAAG,IAAAC,kBAAA,EAAY,MAAM;IACzC,IAAI,CAAClD,KAAK,CAAC0B,IAAN,CAAWC,YAAZ,IAA4B,CAAC3B,KAAK,CAACa,GAAN,CAAUe,EAA3C,EAA+C;MAC7C;IACD;;IAED,CAAC,YAAY;MACX,MAAMuB,QAAsB,GAAG,MAAM/C,GAAG,CACrCK,GADkC,CAC7B,mBAAkBT,KAAK,CAACa,GAAN,CAAUe,EAAG,OADF,EACU;QAC3ClB,OAAO,EAAE;UACP0C,aAAa,EAAG,UAASpD,KAAK,CAAC0B,IAAN,CAAWC,YAAa;QAD1C;MADkC,CADV,EAMlCf,IANkC,EAArC;MAOAX,QAAQ,CAAC;QACPkB,IAAI,EAAEC,mBAAA,CAAWiC,SADV;QAEP/B,OAAO,EAAE6B;MAFF,CAAD,CAAR;MAKAlD,QAAQ,CAAC;QACPkB,IAAI,EAAEC,mBAAA,CAAWkC,iBADV;QAEPhC,OAAO,EAAE6B,QAAQ,CAACI,QAAT,CAAkBC,MAAlB,CACP,CAACC,GAAD,EAA2BC,KAA3B,KAA6C;UAC3CD,GAAG,CAACC,KAAD,CAAH,GAAa;YAAEC,MAAM,EAAE;UAAV,CAAb;UACA,OAAOF,GAAP;QACD,CAJM,EAKP,EALO;MAFF,CAAD,CAAR;IAUD,CAvBD;EAwBD,CA7BwB,EA6BtB,CAACrD,GAAD,EAAMH,QAAN,EAAgBD,KAAK,CAACa,GAAN,CAAUe,EAA1B,EAA8B5B,KAAK,CAAC0B,IAAN,CAAWC,YAAzC,CA7BsB,CAAzB;EA+BA,MAAMiC,YAAY,GAAG,IAAAV,kBAAA,EAAY,MAAM;IACrC,IAAI,CAAClD,KAAK,CAACa,GAAN,CAAUe,EAAX,IAAiB,CAAC5B,KAAK,CAAC0B,IAAN,CAAWC,YAAjC,EAA+C;MAC7C;IACD;;IAED,CAAC,YAAY;MACX,IAAI;QACF,MAAMkC,WAA6B,GAAG,MAAMzD,GAAG,CAC5CK,GADyC,CACpC,mBAAkBT,KAAK,CAACa,GAAN,CAAUe,EAAG,OADK,EACG;UAC3ClB,OAAO,EAAE;YACP0C,aAAa,EAAG,UAASpD,KAAK,CAAC0B,IAAN,CAAWC,YAAa;UAD1C;QADkC,CADH,EAMzCf,IANyC,EAA5C;QAOAX,QAAQ,CAAC;UACPkB,IAAI,EAAEC,mBAAA,CAAWkC,iBADV;UAEPhC,OAAO,EAAEuC,WAAW,CAACC;QAFd,CAAD,CAAR;MAID,CAZD,CAYE,OAAOvC,GAAP,EAAY;QACZ,IAAIA,GAAG,YAAYwC,KAAnB,EAA0B;UACxB;UACA9D,QAAQ,CAAC;YACPkB,IAAI,EAAEC,mBAAA,CAAWkC,iBADV;YAEPhC,OAAO,EAAE;UAFF,CAAD,CAAR;QAID;MACF;IACF,CAtBD;EAuBD,CA5BoB,EA4BlB,CAAClB,GAAD,EAAMH,QAAN,EAAgBD,KAAK,CAACa,GAAN,CAAUe,EAA1B,EAA8B5B,KAAK,CAAC0B,IAAN,CAAWC,YAAzC,CA5BkB,CAArB;EA8BA,IAAApB,gBAAA,EAAU0C,gBAAV,EAA4B,CAACA,gBAAD,CAA5B;EACA,IAAA1C,gBAAA,EAAUqD,YAAV,EAAwB,CAACA,YAAD,CAAxB;EAEA,IAAArD,gBAAA,EAAU,MAAM;IACd,IAAI,CAACP,KAAK,CAACgE,IAAN,CAAWC,aAAhB,EAA+B;MAC7B;IACD;;IACDhB,gBAAgB;IAChBhD,QAAQ,CAAC;MACPkB,IAAI,EAAEC,mBAAA,CAAW8C,qBADV;MAEP5C,OAAO,EAAE;QAAE2C,aAAa,EAAE;MAAjB;IAFF,CAAD,CAAR;EAID,CATD,EASG,CAAChE,QAAD,EAAWgD,gBAAX,EAA6BjD,KAAK,CAACgE,IAAN,CAAWC,aAAxC,CATH;EAWA,MAAME,iBAAiB,GAAG,IAAAC,kBAAA,EAAYC,QAAZ,EAAsB,IAAtB,CAA1B,CAlK8D,CAkKP;;EAEvD,eAAeA,QAAf,GAA0B;IACxB,IAAIrE,KAAK,CAACa,GAAN,CAAUe,EAAV,IAAgB5B,KAAK,CAACsE,UAA1B,EAAsC;MACpC,MAAMlE,GAAG,CACNmE,GADG,CACE,mBAAkBvE,KAAK,CAACa,GAAN,CAAUe,EAAG,OADjC,EACyC;QAC3ClB,OAAO,EAAE;UACP0C,aAAa,EAAG,UAASpD,KAAK,CAAC0B,IAAN,CAAWC,YAAa;QAD1C,CADkC;QAI3Cf,IAAI,EAAE;UACJkD,IAAI,EAAE9D,KAAK,CAACsE;QADR;MAJqC,CADzC,EASH1D,IATG,EAAN;IAUD;EACF;;EAED,MAAM4D,YAAY,GAAG,IAAAC,aAAA,EAAOzE,KAAK,CAACsE,UAAb,CAArB;EACA,IAAA/D,gBAAA,EAAU,MAAM;IACd;IACA,IACE,CAACiE,YAAY,CAACE,OAAd,IACA,IAAAC,gBAAA,EAAQH,YAAY,CAACE,OAArB,EAA8B1E,KAAK,CAACsE,UAApC,CAFF,EAGE;MACA;IACD;;IACDH,iBAAiB;EAClB,CATD,EASG,CAACA,iBAAD,EAAoBnE,KAAK,CAACsE,UAA1B,CATH;EAWA,MAAMM,qBAAqB,GAAG,IAAAR,kBAAA,EAAYS,YAAZ,EAA0B,IAA1B,CAA9B,CA/L8D,CA+LC;EAE/D;;EACA,eAAeA,YAAf,GAA8B;IAC5B,IAAI7E,KAAK,CAACa,GAAN,CAAUe,EAAV,IAAgB5B,KAAK,CAACgE,IAAN,CAAWc,IAA3B,IAAmC9E,KAAK,CAAC0B,IAAN,CAAWC,YAAlD,EAAgE;MAC9D1B,QAAQ,CAAC;QACPkB,IAAI,EAAEC,mBAAA,CAAW2D,uBADV;QAEPzD,OAAO,EAAE;UACP0D,MAAM,EAAE;QADD;MAFF,CAAD,CAAR;MAOA,MAAMC,YAAiC,GAAG,EAA1C;;MACA,IAAI;QACFA,YAAY,CAACH,IAAb,GAAoB,MAAM1E,GAAG,CAC1BmE,GADuB,CAClB,mBAAkBvE,KAAK,CAACa,GAAN,CAAUe,EAAG,OADb,EACqB;UAC3ClB,OAAO,EAAE;YACP0C,aAAa,EAAG,UAASpD,KAAK,CAAC0B,IAAN,CAAWC,YAAa;UAD1C,CADkC;UAI3Cf,IAAI,EAAE;YACJkE,IAAI,EAAE9E,KAAK,CAACgE,IAAN,CAAWc;UADb;QAJqC,CADrB,EASvBlE,IATuB,EAA1B;MAUD,CAXD,CAWE,OAAOW,GAAP,EAAY;QACZ0D,YAAY,CAACxD,KAAb,GAAqBF,GAArB,CADY,CAEZ;QACA;QACA;QACA;;QACA0B,gBAAgB,GANJ,CAOZ;MACD,CAnBD,SAmBU;QACRiC,cAAA,CAAOjF,QAAP,CAAgBkF,iBAAA,CAAUC,eAA1B,EAA2CH,YAA3C;;QACAhF,QAAQ,CAAC;UACPkB,IAAI,EAAEC,mBAAA,CAAW2D,uBADV;UAEPzD,OAAO,EAAE;YACP0D,MAAM,EAAE;UADD;QAFF,CAAD,CAAR;MAMD;IACF;EACF;;EAED,MAAMK,WAAW,GAAG,IAAAZ,aAAA,EAAOzE,KAAK,CAACgE,IAAN,CAAWc,IAAlB,CAApB;EACA,IAAAvE,gBAAA,EAAU,MAAM;IAAA;;IACd;IACA,IACG,sBAACP,KAAK,CAACgE,IAAN,CAAWc,IAAZ,6CAAC,iBAAiBQ,KAAlB,KAA2B,CAACtF,KAAK,CAACgE,IAAN,CAAWc,IAAX,CAAgBS,YAA7C,IACA,IAAAZ,gBAAA,EAAQU,WAAW,CAACX,OAApB,EAA6B1E,KAAK,CAACgE,IAAN,CAAWc,IAAxC,CAFF,EAGE;MACA;IACD;;IACDF,qBAAqB;IACrBS,WAAW,CAACX,OAAZ,GAAsB1E,KAAK,CAACgE,IAAN,CAAWc,IAAjC;EACD,CAVD,EAUG,CAAC7E,QAAD,EAAW2E,qBAAX,EAAkC5E,KAAK,CAACgE,IAAN,CAAWc,IAA7C,CAVH;EAYA,OAAO,IAAP;AACD"}
@@ -1 +1 @@
1
- {"version":3,"names":["GlobalContext","createContext","undefined","handleStateInit","initialState","storage","contains","state","JSON","parse","getString","GlobalContextProvider","children","config","is_initializing","is_container_visible","use_modal","nav","current_route","route_trigger","event_id","section","options","user","data","email","needs_refresh","redacted","auth","access_token","refresh_token","app_id","app","schema","local_acls","is_saving_user_data","mainReducer","action","decodedToken","newState","type","ActionType","SET_CONTAINER_VISIBLE","payload","isVisible","CHANGE_ROUTE","route","trigger","opts","SET_SECTION","LOGIN_SUCCESS","jwt_decode","id","is_verified_user","app_user_id","SIGN_OUT","REFRESH_TOKEN","LOAD_USER","UPDATE_LOCAL_ACLS","SET_USER_DATA_FIELD","field","value","events","dispatch","EventType","USER_DATA_SAVED","SET_USER_DATA","isEqual","pick","Object","keys","SET_REFRESH_USER_DATA","LOAD_STATE","SET_IS_SAVING_USER_DATA","saving","SET_APP_CONFIG","persistedState","set","stringify","useReducer","useGlobalContext","context","useContext","Error"],"sources":["GlobalContext.tsx"],"sourcesContent":["import React, { createContext, FunctionComponent } from 'react';\nimport { useReducer, useContext } from 'react';\nimport isEqual from 'lodash-es/isEqual';\nimport pick from 'lodash-es/pick';\nimport jwt_decode from 'jwt-decode';\nimport type { IConfig } from '../utils/config';\nimport storage from '../utils/storage';\nimport { events, EventType } from '../utils/events';\n\nimport { type TAction, ActionType } from '../data/actions';\n\ntype Dispatch = (action: TAction) => void;\n\nexport type GlobalState = {\n is_initializing: boolean;\n is_container_visible: boolean;\n use_modal: boolean;\n nav: {\n current_route: string;\n route_trigger: string;\n event_id: string;\n section: string;\n options?: any;\n };\n user: {\n data: {\n id?: string;\n email: string | null;\n [key: string]: any;\n };\n needs_refresh?: boolean;\n redacted: string[];\n };\n auth: {\n access_token: string | null;\n refresh_token: string | null;\n app_id: string | null;\n init_data?: Record<string, any>;\n is_verified_user?: boolean;\n };\n app: {\n id?: string;\n icon?: string;\n icon_content_type?: string;\n config: AppConfig | null;\n schema: AppSchema | null;\n user_verification_field?: string;\n user_verification_fields?: string[];\n };\n local_acls: Record<string, { shared: boolean }> | null;\n is_saving_user_data: boolean;\n config?: IConfig;\n};\n\ntype AppSchema = Record<string, SchemaField>;\n\nexport interface SchemaField {\n display_name: string;\n type: string;\n data_category: string;\n required: boolean;\n owned_by: string;\n user_visible: boolean;\n revoke_after: string;\n required_retention: string;\n collection_justification: string;\n opt_out_warning: string;\n}\n\ninterface AppConfig {\n customizations: {\n primary_color: string;\n };\n default_user_id_format?: string;\n hub: {\n auth: {\n allow_unverified_users?: boolean;\n additional_fields: [\n {\n name: string;\n type: string;\n label: string;\n placeholder?: string;\n options: [\n {\n value: string;\n label: string;\n }\n ];\n }\n ];\n email: {\n from_address: string;\n image: string;\n };\n show_app_icon: boolean;\n };\n customizations: HubCustomizations;\n };\n}\n\nexport interface HubCustomizations {\n rounded_corners: boolean;\n primary_color: string;\n placement: 'bottom-left' | 'hidden';\n offset_x: number;\n offset_y: number;\n property_overrides: Record<string, string>;\n}\n\ntype ContextProps = {\n config: IConfig;\n};\n\nexport const GlobalContext = createContext<\n { state: GlobalState; dispatch: Dispatch } | undefined\n>(undefined);\n\nfunction handleStateInit(initialState: GlobalState) {\n if (storage.contains('state')) {\n const state = JSON.parse(storage.getString('state') || '{}');\n\n return {\n ...initialState,\n ...state,\n };\n }\n\n return initialState;\n}\n\n// async function updateStorage(newState: any) {\n// const oldState = JSON.parse(await storage.getItem('state') || '{}');\n\n// if (!isEqual(oldState, newState)) {\n// console.log('writing new state', newState);\n// await storage.setItem('state', JSON.stringify(newState));\n// }\n// }\n\nconst GlobalContextProvider: FunctionComponent<ContextProps> = ({\n children,\n config,\n}) => {\n const initialState: GlobalState = {\n is_initializing: false,\n is_container_visible: false,\n use_modal: false,\n nav: {\n current_route: '/',\n route_trigger: '',\n event_id: '',\n section: '',\n options: {},\n },\n user: {\n data: {\n email: null,\n },\n needs_refresh: false,\n redacted: [],\n },\n auth: {\n access_token: null,\n refresh_token: null,\n app_id: null,\n },\n app: {\n schema: null,\n config: null,\n },\n local_acls: null,\n is_saving_user_data: false,\n config,\n };\n\n // TODO: There's a better way to do this where we have a set of rules that watch/apply to the state as it changes\n // function dispatchExternalEvents(prevState: GlobalState, nextState: GlobalState) {\n\n // // Log in, get new token, load previous auth state, etc\n // if (prevState.auth.access_token !== nextState.auth.access_token) {\n // events.dispatch(EventType.AUTH, {\n // access_token: nextState.auth.access_token,\n // user_id: nextState.user.data.id,\n // app_id: nextState.auth.app_id,\n // });\n // }\n\n // // User data changes. Also, fire the event when ACLs change since this affects the data\n // // that the application can see.\n // if (!isEqual(prevState.local_acls, nextState.local_acls) ||\n // !isEqual(prevState.user.data, nextState.user.data)) {\n // events.dispatch(EventType.USER_DATA, {\n // // The data is filtered on the local_acls\n // data: redactUserDataWithAcls(nextState.user.data, nextState.local_acls),\n // });\n // }\n\n // // Log out\n // if (nextState.auth.access_token === null) {\n // events.dispatch(EventType.SIGN_OUT, {});\n // }\n // }\n\n function mainReducer(state: GlobalState, action: TAction): GlobalState {\n let decodedToken: any;\n\n let newState;\n // let cachedAuth;\n switch (action.type) {\n case ActionType.SET_CONTAINER_VISIBLE:\n newState = {\n ...state,\n is_container_visible: action.payload.isVisible,\n use_modal:\n action.payload.isVisible === false ? false : state.use_modal,\n nav: {\n ...state.nav,\n current_route: '/',\n },\n };\n break;\n\n case ActionType.CHANGE_ROUTE:\n newState = {\n ...state,\n nav: {\n ...state.nav,\n current_route: action.payload.route,\n route_trigger: action.payload.trigger || '',\n event_id: action.payload.event_id,\n options: action.payload.opts,\n },\n };\n\n break;\n\n case ActionType.SET_SECTION:\n newState = {\n ...state,\n nav: {\n ...state.nav,\n section: action.payload.section,\n },\n };\n break;\n\n case ActionType.LOGIN_SUCCESS:\n // storage.setItem('auth', JSON.stringify(action.payload));\n decodedToken = jwt_decode(action.payload.access_token);\n\n // Ensure this token is for this app\n if (action.payload.app_id !== state.app.id) {\n return {\n ...state,\n };\n }\n\n newState = {\n ...state,\n auth: {\n ...state.auth,\n access_token: action.payload.access_token,\n refresh_token: action.payload.refresh_token,\n app_id: action.payload.app_id,\n is_verified_user:\n decodedToken?.['https://auth.rownd.io/is_verified_user'] !==\n false, // default is `true` if the attribute doesn't exist\n },\n user: {\n ...state.user,\n data: {\n ...state.user.data,\n id: action.payload.app_user_id,\n },\n },\n };\n break;\n\n case ActionType.SIGN_OUT:\n // storage.removeItem('auth');\n newState = {\n ...state,\n user: {\n data: {\n email: null,\n },\n redacted: [],\n },\n auth: {\n access_token: null,\n refresh_token: null,\n app_id: null,\n },\n };\n break;\n\n case ActionType.REFRESH_TOKEN:\n newState = {\n ...state,\n auth: {\n ...state.auth,\n access_token: action.payload.access_token,\n refresh_token: action.payload.refresh_token,\n },\n };\n\n // cachedAuth = storage.getItem('auth');\n // if (cachedAuth) {\n // const cachedAuthObj = JSON.parse(cachedAuth);\n // cachedAuth = {\n // ...cachedAuthObj,\n // ...newState.auth,\n // };\n // storage.setItem('auth', JSON.stringify(newState.auth));\n // }\n\n break;\n\n case ActionType.LOAD_USER:\n newState = {\n ...state,\n user: {\n ...state.user,\n data: {\n ...action.payload.data,\n },\n redacted: action.payload.redacted,\n },\n };\n break;\n\n case ActionType.UPDATE_LOCAL_ACLS:\n newState = {\n ...state,\n local_acls: {\n ...state.local_acls,\n ...action.payload,\n },\n };\n break;\n\n case ActionType.SET_USER_DATA_FIELD:\n // Dispatch a USER_DATA_SAVED event to satisfy event listeners when the data\n // was not changed and no request to Rownd was ever made.\n if (state.user.data[action.payload.field] === action.payload.value) {\n events.dispatch(EventType.USER_DATA_SAVED, state.user.data);\n }\n\n newState = {\n ...state,\n user: {\n ...state.user,\n data: {\n ...state.user.data,\n [action.payload.field]: action.payload.value,\n },\n },\n };\n break;\n\n case ActionType.SET_USER_DATA:\n // Dispatch a USER_DATA_SAVED event to satisfy event listeners when the data\n // was not changed and no request to Rownd was ever made.\n if (\n isEqual(\n pick(state.user.data, Object.keys(action.payload.data)),\n action.payload.data\n )\n ) {\n events.dispatch(EventType.USER_DATA_SAVED, state.user.data);\n }\n\n newState = {\n ...state,\n user: {\n ...state.user,\n data: {\n ...state.user.data,\n ...action.payload.data,\n },\n },\n };\n break;\n\n case ActionType.SET_REFRESH_USER_DATA:\n newState = {\n ...state,\n user: {\n ...state.user,\n needs_refresh: action.payload.needs_refresh,\n },\n };\n break;\n\n case ActionType.LOAD_STATE:\n newState = {\n ...action.payload,\n };\n break;\n\n case ActionType.SET_IS_SAVING_USER_DATA: {\n newState = {\n ...state,\n is_saving_user_data: action.payload.saving,\n };\n break;\n }\n\n case ActionType.SET_APP_CONFIG:\n newState = {\n ...state,\n app: {\n ...state.app,\n ...action.payload,\n },\n };\n break;\n\n default:\n newState = state;\n }\n\n // Write state to local storage, minus a few fields\n const persistedState: any = { ...newState };\n delete persistedState.config;\n delete persistedState.nav;\n delete persistedState.is_container_visible;\n delete persistedState.use_modal;\n delete persistedState.is_initializing;\n delete persistedState.is_saving_user_data;\n\n // updateStorage(persistedState);\n storage.set('state', JSON.stringify(persistedState));\n\n // Fire any events that depend on state updates\n // dispatchExternalEvents(state, newState);\n\n return newState;\n }\n\n const [state, dispatch] = useReducer(\n mainReducer,\n initialState,\n handleStateInit\n );\n\n // Async load cached state from storage\n // useEffect(() => {\n // (async () => {\n // const existingStateStr = await storage.getItem('state');\n\n // if (!existingStateStr) {\n // return;\n // }\n\n // dispatch({\n // type: ActionType.LOAD_STATE,\n // payload: JSON.parse(existingStateStr),\n // });\n // });\n // }, []);\n\n const value = { state, dispatch };\n return (\n <GlobalContext.Provider value={value}>\n {children}\n {/* <ExternalApi config={config} dispatchEvents={(state: GlobalState) => dispatchExternalEvents(initialState, state)} /> */}\n </GlobalContext.Provider>\n );\n};\n\nfunction useGlobalContext() {\n const context = useContext(GlobalContext);\n\n if (context === undefined) {\n throw new Error(\n 'useGlobalContext must be used within a GlobalContext Provider'\n );\n }\n\n return context;\n}\n\nexport { GlobalContextProvider, useGlobalContext };\n"],"mappings":"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"}
1
+ {"version":3,"names":["GlobalContext","createContext","undefined","handleStateInit","initialState","storage","contains","state","JSON","parse","getString","GlobalContextProvider","children","config","is_initializing","is_container_visible","use_modal","nav","current_route","route_trigger","event_id","section","options","user","data","email","needs_refresh","redacted","auth","access_token","refresh_token","app_id","app","schema","local_acls","is_saving_user_data","mainReducer","action","decodedToken","newState","type","ActionType","SET_CONTAINER_VISIBLE","payload","isVisible","CHANGE_ROUTE","route","trigger","opts","SET_SECTION","LOGIN_SUCCESS","jwt_decode","id","is_verified_user","app_user_id","SIGN_OUT","REFRESH_TOKEN","LOAD_USER","UPDATE_LOCAL_ACLS","SET_USER_DATA_FIELD","field","value","events","dispatch","EventType","USER_DATA_SAVED","SET_USER_DATA","isEqual","pick","Object","keys","SET_REFRESH_USER_DATA","LOAD_STATE","SET_IS_SAVING_USER_DATA","saving","SET_APP_CONFIG","persistedState","set","stringify","useReducer","useGlobalContext","context","useContext","Error"],"sources":["GlobalContext.tsx"],"sourcesContent":["import React, { createContext, FunctionComponent } from 'react';\nimport { useReducer, useContext } from 'react';\nimport isEqual from 'lodash-es/isEqual';\nimport pick from 'lodash-es/pick';\nimport jwt_decode from 'jwt-decode';\nimport { IConfig } from '../utils/config';\nimport storage from '../utils/storage';\nimport { events, EventType } from '../utils/events';\n\nimport { TAction, ActionType } from '../data/actions';\n\ntype Dispatch = (action: TAction) => void;\n\nexport type GlobalState = {\n is_initializing: boolean;\n is_container_visible: boolean;\n use_modal: boolean;\n nav: {\n current_route: string;\n route_trigger: string;\n event_id: string;\n section: string;\n options?: any;\n };\n user: {\n data: {\n id?: string;\n email: string | null;\n [key: string]: any;\n };\n needs_refresh?: boolean;\n redacted: string[];\n };\n auth: {\n access_token: string | null;\n refresh_token: string | null;\n app_id: string | null;\n init_data?: Record<string, any>;\n is_verified_user?: boolean;\n };\n app: {\n id?: string;\n icon?: string;\n icon_content_type?: string;\n config: AppConfig | null;\n schema: AppSchema | null;\n user_verification_field?: string;\n user_verification_fields?: string[];\n };\n local_acls: Record<string, { shared: boolean }> | null;\n is_saving_user_data: boolean;\n config?: IConfig;\n};\n\ntype AppSchema = Record<string, SchemaField>;\n\nexport interface SchemaField {\n display_name: string;\n type: string;\n data_category: string;\n required: boolean;\n owned_by: string;\n user_visible: boolean;\n revoke_after: string;\n required_retention: string;\n collection_justification: string;\n opt_out_warning: string;\n}\n\ninterface AppConfig {\n customizations: {\n primary_color: string;\n };\n default_user_id_format?: string;\n hub: {\n auth: {\n allow_unverified_users?: boolean;\n additional_fields: [\n {\n name: string;\n type: string;\n label: string;\n placeholder?: string;\n options: [\n {\n value: string;\n label: string;\n }\n ];\n }\n ];\n email: {\n from_address: string;\n image: string;\n };\n show_app_icon: boolean;\n };\n customizations: HubCustomizations;\n };\n}\n\nexport interface HubCustomizations {\n rounded_corners: boolean;\n primary_color: string;\n placement: 'bottom-left' | 'hidden';\n offset_x: number;\n offset_y: number;\n property_overrides: Record<string, string>;\n}\n\ntype ContextProps = {\n config: IConfig;\n};\n\nexport const GlobalContext = createContext<\n { state: GlobalState; dispatch: Dispatch } | undefined\n>(undefined);\n\nfunction handleStateInit(initialState: GlobalState) {\n if (storage.contains('state')) {\n const state = JSON.parse(storage.getString('state') || '{}');\n\n return {\n ...initialState,\n ...state,\n };\n }\n\n return initialState;\n}\n\n// async function updateStorage(newState: any) {\n// const oldState = JSON.parse(await storage.getItem('state') || '{}');\n\n// if (!isEqual(oldState, newState)) {\n// console.log('writing new state', newState);\n// await storage.setItem('state', JSON.stringify(newState));\n// }\n// }\n\nconst GlobalContextProvider: FunctionComponent<ContextProps> = ({\n children,\n config,\n}) => {\n const initialState: GlobalState = {\n is_initializing: false,\n is_container_visible: false,\n use_modal: false,\n nav: {\n current_route: '/',\n route_trigger: '',\n event_id: '',\n section: '',\n options: {},\n },\n user: {\n data: {\n email: null,\n },\n needs_refresh: false,\n redacted: [],\n },\n auth: {\n access_token: null,\n refresh_token: null,\n app_id: null,\n },\n app: {\n schema: null,\n config: null,\n },\n local_acls: null,\n is_saving_user_data: false,\n config,\n };\n\n // TODO: There's a better way to do this where we have a set of rules that watch/apply to the state as it changes\n // function dispatchExternalEvents(prevState: GlobalState, nextState: GlobalState) {\n\n // // Log in, get new token, load previous auth state, etc\n // if (prevState.auth.access_token !== nextState.auth.access_token) {\n // events.dispatch(EventType.AUTH, {\n // access_token: nextState.auth.access_token,\n // user_id: nextState.user.data.id,\n // app_id: nextState.auth.app_id,\n // });\n // }\n\n // // User data changes. Also, fire the event when ACLs change since this affects the data\n // // that the application can see.\n // if (!isEqual(prevState.local_acls, nextState.local_acls) ||\n // !isEqual(prevState.user.data, nextState.user.data)) {\n // events.dispatch(EventType.USER_DATA, {\n // // The data is filtered on the local_acls\n // data: redactUserDataWithAcls(nextState.user.data, nextState.local_acls),\n // });\n // }\n\n // // Log out\n // if (nextState.auth.access_token === null) {\n // events.dispatch(EventType.SIGN_OUT, {});\n // }\n // }\n\n function mainReducer(state: GlobalState, action: TAction): GlobalState {\n let decodedToken: any;\n\n let newState;\n // let cachedAuth;\n switch (action.type) {\n case ActionType.SET_CONTAINER_VISIBLE:\n newState = {\n ...state,\n is_container_visible: action.payload.isVisible,\n use_modal:\n action.payload.isVisible === false ? false : state.use_modal,\n nav: {\n ...state.nav,\n current_route: '/',\n },\n };\n break;\n\n case ActionType.CHANGE_ROUTE:\n newState = {\n ...state,\n nav: {\n ...state.nav,\n current_route: action.payload.route,\n route_trigger: action.payload.trigger || '',\n event_id: action.payload.event_id,\n options: action.payload.opts,\n },\n };\n\n break;\n\n case ActionType.SET_SECTION:\n newState = {\n ...state,\n nav: {\n ...state.nav,\n section: action.payload.section,\n },\n };\n break;\n\n case ActionType.LOGIN_SUCCESS:\n // storage.setItem('auth', JSON.stringify(action.payload));\n decodedToken = jwt_decode(action.payload.access_token);\n\n // Ensure this token is for this app\n if (action.payload.app_id !== state.app.id) {\n return {\n ...state,\n };\n }\n\n newState = {\n ...state,\n auth: {\n ...state.auth,\n access_token: action.payload.access_token,\n refresh_token: action.payload.refresh_token,\n app_id: action.payload.app_id,\n is_verified_user:\n decodedToken?.['https://auth.rownd.io/is_verified_user'] !==\n false, // default is `true` if the attribute doesn't exist\n },\n user: {\n ...state.user,\n data: {\n ...state.user.data,\n id: action.payload.app_user_id,\n },\n },\n };\n break;\n\n case ActionType.SIGN_OUT:\n // storage.removeItem('auth');\n newState = {\n ...state,\n user: {\n data: {\n email: null,\n },\n redacted: [],\n },\n auth: {\n access_token: null,\n refresh_token: null,\n app_id: null,\n },\n };\n break;\n\n case ActionType.REFRESH_TOKEN:\n newState = {\n ...state,\n auth: {\n ...state.auth,\n access_token: action.payload.access_token,\n refresh_token: action.payload.refresh_token,\n },\n };\n\n // cachedAuth = storage.getItem('auth');\n // if (cachedAuth) {\n // const cachedAuthObj = JSON.parse(cachedAuth);\n // cachedAuth = {\n // ...cachedAuthObj,\n // ...newState.auth,\n // };\n // storage.setItem('auth', JSON.stringify(newState.auth));\n // }\n\n break;\n\n case ActionType.LOAD_USER:\n newState = {\n ...state,\n user: {\n ...state.user,\n data: {\n ...action.payload.data,\n },\n redacted: action.payload.redacted,\n },\n };\n break;\n\n case ActionType.UPDATE_LOCAL_ACLS:\n newState = {\n ...state,\n local_acls: {\n ...state.local_acls,\n ...action.payload,\n },\n };\n break;\n\n case ActionType.SET_USER_DATA_FIELD:\n // Dispatch a USER_DATA_SAVED event to satisfy event listeners when the data\n // was not changed and no request to Rownd was ever made.\n if (state.user.data[action.payload.field] === action.payload.value) {\n events.dispatch(EventType.USER_DATA_SAVED, state.user.data);\n }\n\n newState = {\n ...state,\n user: {\n ...state.user,\n data: {\n ...state.user.data,\n [action.payload.field]: action.payload.value,\n },\n },\n };\n break;\n\n case ActionType.SET_USER_DATA:\n // Dispatch a USER_DATA_SAVED event to satisfy event listeners when the data\n // was not changed and no request to Rownd was ever made.\n if (\n isEqual(\n pick(state.user.data, Object.keys(action.payload.data)),\n action.payload.data\n )\n ) {\n events.dispatch(EventType.USER_DATA_SAVED, state.user.data);\n }\n\n newState = {\n ...state,\n user: {\n ...state.user,\n data: {\n ...state.user.data,\n ...action.payload.data,\n },\n },\n };\n break;\n\n case ActionType.SET_REFRESH_USER_DATA:\n newState = {\n ...state,\n user: {\n ...state.user,\n needs_refresh: action.payload.needs_refresh,\n },\n };\n break;\n\n case ActionType.LOAD_STATE:\n newState = {\n ...action.payload,\n };\n break;\n\n case ActionType.SET_IS_SAVING_USER_DATA: {\n newState = {\n ...state,\n is_saving_user_data: action.payload.saving,\n };\n break;\n }\n\n case ActionType.SET_APP_CONFIG:\n newState = {\n ...state,\n app: {\n ...state.app,\n ...action.payload,\n },\n };\n break;\n\n default:\n newState = state;\n }\n\n // Write state to local storage, minus a few fields\n const persistedState: any = { ...newState };\n delete persistedState.config;\n delete persistedState.nav;\n delete persistedState.is_container_visible;\n delete persistedState.use_modal;\n delete persistedState.is_initializing;\n delete persistedState.is_saving_user_data;\n\n // updateStorage(persistedState);\n storage.set('state', JSON.stringify(persistedState));\n\n // Fire any events that depend on state updates\n // dispatchExternalEvents(state, newState);\n\n return newState;\n }\n\n const [state, dispatch] = useReducer(\n mainReducer,\n initialState,\n handleStateInit\n );\n\n // Async load cached state from storage\n // useEffect(() => {\n // (async () => {\n // const existingStateStr = await storage.getItem('state');\n\n // if (!existingStateStr) {\n // return;\n // }\n\n // dispatch({\n // type: ActionType.LOAD_STATE,\n // payload: JSON.parse(existingStateStr),\n // });\n // });\n // }, []);\n\n const value = { state, dispatch };\n return (\n <GlobalContext.Provider value={value}>\n {children}\n {/* <ExternalApi config={config} dispatchEvents={(state: GlobalState) => dispatchExternalEvents(initialState, state)} /> */}\n </GlobalContext.Provider>\n );\n};\n\nfunction useGlobalContext() {\n const context = useContext(GlobalContext);\n\n if (context === undefined) {\n throw new Error(\n 'useGlobalContext must be used within a GlobalContext Provider'\n );\n }\n\n return context;\n}\n\nexport { GlobalContextProvider, useGlobalContext };\n"],"mappings":"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"}
@@ -7,10 +7,6 @@ exports.RowndComponents = RowndComponents;
7
7
 
8
8
  var _react = _interopRequireDefault(require("react"));
9
9
 
10
- var _twrnc = require("twrnc");
11
-
12
- var _tailwind = _interopRequireDefault(require("../utils/tailwind"));
13
-
14
10
  var _SignIn = require("./SignIn");
15
11
 
16
12
  var _AutoSigninDialog = require("./AutoSigninDialog");
@@ -19,11 +15,13 @@ var _GlobalContext = require("./GlobalContext");
19
15
 
20
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
17
 
18
+ // import { useDeviceContext } from 'twrnc';
19
+ // import tw from '../utils/tailwind';
22
20
  function RowndComponents() {
23
21
  const {
24
22
  state
25
- } = (0, _GlobalContext.useGlobalContext)();
26
- (0, _twrnc.useDeviceContext)(_tailwind.default);
23
+ } = (0, _GlobalContext.useGlobalContext)(); // useDeviceContext(tw);
24
+
27
25
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, state.nav.current_route === '/account/login' && /*#__PURE__*/_react.default.createElement(_SignIn.SignIn, null), state.nav.current_route === '/account/auto-signin' && /*#__PURE__*/_react.default.createElement(_AutoSigninDialog.AutoSigninDialog, null));
28
26
  }
29
27
  //# sourceMappingURL=RowndComponents.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["RowndComponents","state","useGlobalContext","useDeviceContext","tw","nav","current_route"],"sources":["RowndComponents.tsx"],"sourcesContent":["import React from 'react';\nimport { useDeviceContext } from 'twrnc';\n\nimport tw from '../utils/tailwind';\nimport { SignIn } from './SignIn';\nimport { AutoSigninDialog } from './AutoSigninDialog';\nimport { useGlobalContext } from './GlobalContext';\n\nexport function RowndComponents() {\n const { state } = useGlobalContext();\n useDeviceContext(tw);\n\n return (\n <>\n {state.nav.current_route === '/account/login' && <SignIn />}\n {state.nav.current_route === '/account/auto-signin' && (\n <AutoSigninDialog />\n )}\n </>\n );\n}\n"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;AACA;;AACA;;AACA;;;;AAEO,SAASA,eAAT,GAA2B;EAChC,MAAM;IAAEC;EAAF,IAAY,IAAAC,+BAAA,GAAlB;EACA,IAAAC,uBAAA,EAAiBC,iBAAjB;EAEA,oBACE,4DACGH,KAAK,CAACI,GAAN,CAAUC,aAAV,KAA4B,gBAA5B,iBAAgD,6BAAC,cAAD,OADnD,EAEGL,KAAK,CAACI,GAAN,CAAUC,aAAV,KAA4B,sBAA5B,iBACC,6BAAC,kCAAD,OAHJ,CADF;AAQD"}
1
+ {"version":3,"names":["RowndComponents","state","useGlobalContext","nav","current_route"],"sources":["RowndComponents.tsx"],"sourcesContent":["import React from 'react';\n// import { useDeviceContext } from 'twrnc';\n\n// import tw from '../utils/tailwind';\nimport { SignIn } from './SignIn';\nimport { AutoSigninDialog } from './AutoSigninDialog';\nimport { useGlobalContext } from './GlobalContext';\n\nexport function RowndComponents() {\n const { state } = useGlobalContext();\n // useDeviceContext(tw);\n\n return (\n <>\n {state.nav.current_route === '/account/login' && <SignIn />}\n {state.nav.current_route === '/account/auto-signin' && (\n <AutoSigninDialog />\n )}\n </>\n );\n}\n"],"mappings":";;;;;;;AAAA;;AAIA;;AACA;;AACA;;;;AALA;AAEA;AAKO,SAASA,eAAT,GAA2B;EAChC,MAAM;IAAEC;EAAF,IAAY,IAAAC,+BAAA,GAAlB,CADgC,CAEhC;;EAEA,oBACE,4DACGD,KAAK,CAACE,GAAN,CAAUC,aAAV,KAA4B,gBAA5B,iBAAgD,6BAAC,cAAD,OADnD,EAEGH,KAAK,CAACE,GAAN,CAAUC,aAAV,KAA4B,sBAA5B,iBACC,6BAAC,kCAAD,OAHJ,CADF;AAQD"}