@rownd/react-native 0.1.11 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -6
- package/lib/commonjs/assets/images/error-icon-material.svg +1 -0
- package/lib/commonjs/components/AutoSigninDialog.js +29 -16
- package/lib/commonjs/components/AutoSigninDialog.js.map +1 -1
- package/lib/commonjs/components/BottomSheetTextInput/BottomSheetTextInput.js +65 -0
- package/lib/commonjs/components/BottomSheetTextInput/BottomSheetTextInput.js.map +1 -0
- package/lib/commonjs/components/BottomSheetTextInput/index.js +24 -0
- package/lib/commonjs/components/BottomSheetTextInput/index.js.map +1 -0
- package/lib/commonjs/components/BottomSheetTextInput/types.js +6 -0
- package/lib/commonjs/components/BottomSheetTextInput/types.js.map +1 -0
- package/lib/commonjs/components/DefaultContext.js.map +1 -1
- package/lib/commonjs/components/GlobalContext.js.map +1 -1
- package/lib/commonjs/components/RowndComponents.js +2 -6
- package/lib/commonjs/components/RowndComponents.js.map +1 -1
- package/lib/commonjs/components/SignIn.js +59 -42
- package/lib/commonjs/components/SignIn.js.map +1 -1
- package/lib/commonjs/components/images/ErrorIcon.js +31 -0
- package/lib/commonjs/components/images/ErrorIcon.js.map +1 -0
- package/lib/commonjs/types.js.map +1 -1
- package/lib/module/assets/images/error-icon-material.svg +1 -0
- package/lib/module/components/AutoSigninDialog.js +25 -15
- package/lib/module/components/AutoSigninDialog.js.map +1 -1
- package/lib/module/components/BottomSheetTextInput/BottomSheetTextInput.js +52 -0
- package/lib/module/components/BottomSheetTextInput/BottomSheetTextInput.js.map +1 -0
- package/lib/module/components/BottomSheetTextInput/index.js +5 -0
- package/lib/module/components/BottomSheetTextInput/index.js.map +1 -0
- package/lib/module/components/BottomSheetTextInput/types.js +2 -0
- package/lib/module/components/BottomSheetTextInput/types.js.map +1 -0
- package/lib/module/components/DefaultContext.js.map +1 -1
- package/lib/module/components/GlobalContext.js.map +1 -1
- package/lib/module/components/RowndComponents.js +2 -4
- package/lib/module/components/RowndComponents.js.map +1 -1
- package/lib/module/components/SignIn.js +58 -42
- package/lib/module/components/SignIn.js.map +1 -1
- package/lib/module/components/images/ErrorIcon.js +18 -0
- package/lib/module/components/images/ErrorIcon.js.map +1 -0
- package/lib/module/types.js.map +1 -1
- package/lib/package.json +3 -7
- package/lib/typescript/src/components/BottomSheetTextInput/BottomSheetTextInput.d.ts +4 -0
- package/lib/typescript/src/components/BottomSheetTextInput/index.d.ts +2 -0
- package/lib/typescript/src/components/BottomSheetTextInput/types.d.ts +3 -0
- package/lib/typescript/src/components/DefaultContext.d.ts +1 -1
- package/lib/typescript/src/components/GlobalContext.d.ts +2 -2
- package/lib/typescript/src/components/images/ErrorIcon.d.ts +4 -0
- package/package.json +3 -7
- package/src/assets/images/error-icon-material.svg +1 -0
- package/src/components/AutoSigninDialog.tsx +19 -13
- package/src/components/BottomSheetTextInput/BottomSheetTextInput.tsx +57 -0
- package/src/components/BottomSheetTextInput/index.ts +5 -0
- package/src/components/BottomSheetTextInput/types.ts +3 -0
- package/src/components/DefaultContext.tsx +1 -1
- package/src/components/GlobalContext.tsx +2 -2
- package/src/components/RowndComponents.tsx +1 -4
- package/src/components/SignIn.tsx +64 -43
- package/src/components/images/ErrorIcon.tsx +11 -0
- package/src/types.ts +1 -1
- package/lib/commonjs/tailwind.config.js +0 -17
- package/lib/commonjs/tailwind.config.js.map +0 -1
- package/lib/commonjs/utils/tailwind.js +0 -17
- package/lib/commonjs/utils/tailwind.js.map +0 -1
- package/lib/module/tailwind.config.js +0 -10
- package/lib/module/tailwind.config.js.map +0 -1
- package/lib/module/utils/tailwind.js +0 -5
- package/lib/module/utils/tailwind.js.map +0 -1
- package/lib/typescript/src/tailwind.config.d.ts +0 -10
- package/lib/typescript/src/utils/tailwind.d.ts +0 -2
- package/src/tailwind.config.ts +0 -9
- package/src/utils/tailwind.ts +0 -6
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
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); }
|
|
2
|
+
|
|
3
|
+
import React, { memo, useCallback, forwardRef } from 'react';
|
|
4
|
+
import { TextInput } from 'react-native-gesture-handler';
|
|
5
|
+
|
|
6
|
+
// @ts-ignore
|
|
7
|
+
const {
|
|
8
|
+
useBottomSheetInternal
|
|
9
|
+
} = require('@gorhom/bottom-sheet/src/hooks/useBottomSheetInternal');
|
|
10
|
+
|
|
11
|
+
const BottomSheetTextInputComponent = /*#__PURE__*/forwardRef((_ref, ref) => {
|
|
12
|
+
let {
|
|
13
|
+
onFocus,
|
|
14
|
+
onBlur,
|
|
15
|
+
...rest
|
|
16
|
+
} = _ref;
|
|
17
|
+
//#region hooks
|
|
18
|
+
// @ts-ignore
|
|
19
|
+
let {
|
|
20
|
+
shouldHandleKeyboardEvents
|
|
21
|
+
} = useBottomSheetInternal(); //#endregion
|
|
22
|
+
|
|
23
|
+
if (!shouldHandleKeyboardEvents) {
|
|
24
|
+
shouldHandleKeyboardEvents = {};
|
|
25
|
+
} //#region callbacks
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
const handleOnFocus = useCallback(args => {
|
|
29
|
+
shouldHandleKeyboardEvents.value = true;
|
|
30
|
+
|
|
31
|
+
if (onFocus) {
|
|
32
|
+
onFocus(args);
|
|
33
|
+
}
|
|
34
|
+
}, [onFocus, shouldHandleKeyboardEvents]);
|
|
35
|
+
const handleOnBlur = useCallback(args => {
|
|
36
|
+
shouldHandleKeyboardEvents.value = false;
|
|
37
|
+
|
|
38
|
+
if (onBlur) {
|
|
39
|
+
onBlur(args);
|
|
40
|
+
}
|
|
41
|
+
}, [onBlur, shouldHandleKeyboardEvents]); //#endregion
|
|
42
|
+
|
|
43
|
+
return /*#__PURE__*/React.createElement(TextInput, _extends({
|
|
44
|
+
ref: ref,
|
|
45
|
+
onFocus: handleOnFocus,
|
|
46
|
+
onBlur: handleOnBlur
|
|
47
|
+
}, rest));
|
|
48
|
+
});
|
|
49
|
+
const BottomSheetTextInput = /*#__PURE__*/memo(BottomSheetTextInputComponent);
|
|
50
|
+
BottomSheetTextInput.displayName = 'BottomSheetTextInput';
|
|
51
|
+
export default BottomSheetTextInput;
|
|
52
|
+
//# sourceMappingURL=BottomSheetTextInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","memo","useCallback","forwardRef","TextInput","useBottomSheetInternal","require","BottomSheetTextInputComponent","ref","onFocus","onBlur","rest","shouldHandleKeyboardEvents","handleOnFocus","args","value","handleOnBlur","BottomSheetTextInput","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,OAAOA,KAAP,IAAgBC,IAAhB,EAAsBC,WAAtB,EAAmCC,UAAnC,QAAqD,OAArD;AACA,SAASC,SAAT,QAA0B,8BAA1B;;AAGA;AACA,MAAM;EACJC;AADI,IAEFC,OAAO,CAAC,uDAAD,CAFX;;AAIA,MAAMC,6BAA6B,gBAAGJ,UAAU,CAG9C,OAA+BK,GAA/B,KAAuC;EAAA,IAAtC;IAAEC,OAAF;IAAWC,MAAX;IAAmB,GAAGC;EAAtB,CAAsC;EACvC;EACA;EACA,IAAI;IAAEC;EAAF,IAAiCP,sBAAsB,EAA3D,CAHuC,CAIvC;;EAEA,IAAI,CAACO,0BAAL,EAAiC;IAC/BA,0BAA0B,GAAG,EAA7B;EACD,CARsC,CAUvC;;;EACA,MAAMC,aAAa,GAAGX,WAAW,CAC9BY,IAAD,IAAU;IACRF,0BAA0B,CAACG,KAA3B,GAAmC,IAAnC;;IACA,IAAIN,OAAJ,EAAa;MACXA,OAAO,CAACK,IAAD,CAAP;IACD;EACF,CAN8B,EAO/B,CAACL,OAAD,EAAUG,0BAAV,CAP+B,CAAjC;EASA,MAAMI,YAAY,GAAGd,WAAW,CAC7BY,IAAD,IAAU;IACRF,0BAA0B,CAACG,KAA3B,GAAmC,KAAnC;;IACA,IAAIL,MAAJ,EAAY;MACVA,MAAM,CAACI,IAAD,CAAN;IACD;EACF,CAN6B,EAO9B,CAACJ,MAAD,EAASE,0BAAT,CAP8B,CAAhC,CApBuC,CA6BvC;;EAEA,oBACE,oBAAC,SAAD;IACE,GAAG,EAAEJ,GADP;IAEE,OAAO,EAAEK,aAFX;IAGE,MAAM,EAAEG;EAHV,GAIML,IAJN,EADF;AAQD,CA1C+C,CAAhD;AA4CA,MAAMM,oBAAoB,gBAAGhB,IAAI,CAACM,6BAAD,CAAjC;AACAU,oBAAoB,CAACC,WAArB,GAAmC,sBAAnC;AAEA,eAAeD,oBAAf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["default","BottomSheetTextInputProps"],"sources":["index.ts"],"sourcesContent":["// @ts-ignore\nexport { default } from './BottomSheetTextInput';\n\n// @ts-ignore\nexport { BottomSheetTextInputProps } from './types';\n"],"mappings":"AAAA;AACA,SAASA,OAAT,QAAwB,wBAAxB,C,CAEA;;AACA,SAASC,yBAAT,QAA0C,SAA1C"}
|
|
@@ -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":["useEffect","useCallback","useRef","isEqual","useDebounce","useApi","useDeviceFingerprint","DEFAULT_USER_AGENT","useGlobalContext","ActionType","ky","Clipboard","base64","Linking","events","EventType","DefaultContext","config","state","dispatch","client","api","resp","get","headers","appKey","json","app","icon","iconMeta","head","icon_content_type","type","SET_APP_CONFIG","payload","err","console","error","auth","access_token","id","authData","authLink","getInitialURL","getString","includes","CHANGE_ROUTE","route","opts","startsWith","authStr","split","JSON","parse","decode","setString","LOGIN_SUCCESS","retrieveUserInfo","userInfo","Authorization","LOAD_USER","UPDATE_LOCAL_ACLS","redacted","reduce","acc","field","shared","retrieveAcls","appUserAcls","acls","Error","user","needs_refresh","SET_REFRESH_USER_DATA","saveAclsDebounced","saveAcls","local_acls","put","localAclsRef","current","saveUserDataDebounced","saveUserData","data","SET_IS_SAVING_USER_DATA","saving","eventDetails","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":"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"}
|
|
1
|
+
{"version":3,"names":["useEffect","useCallback","useRef","isEqual","useDebounce","useApi","useDeviceFingerprint","DEFAULT_USER_AGENT","useGlobalContext","ActionType","ky","Clipboard","base64","Linking","events","EventType","DefaultContext","config","state","dispatch","client","api","resp","get","headers","appKey","json","app","icon","iconMeta","head","icon_content_type","type","SET_APP_CONFIG","payload","err","console","error","auth","access_token","id","authData","authLink","getInitialURL","getString","includes","CHANGE_ROUTE","route","opts","startsWith","authStr","split","JSON","parse","decode","setString","LOGIN_SUCCESS","retrieveUserInfo","userInfo","Authorization","LOAD_USER","UPDATE_LOCAL_ACLS","redacted","reduce","acc","field","shared","retrieveAcls","appUserAcls","acls","Error","user","needs_refresh","SET_REFRESH_USER_DATA","saveAclsDebounced","saveAcls","local_acls","put","localAclsRef","current","saveUserDataDebounced","saveUserData","data","SET_IS_SAVING_USER_DATA","saving","eventDetails","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":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","createContext","useReducer","useContext","isEqual","pick","jwt_decode","storage","events","EventType","ActionType","GlobalContext","undefined","handleStateInit","initialState","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","SET_CONTAINER_VISIBLE","payload","isVisible","CHANGE_ROUTE","route","trigger","opts","SET_SECTION","LOGIN_SUCCESS","id","is_verified_user","app_user_id","SIGN_OUT","REFRESH_TOKEN","LOAD_USER","UPDATE_LOCAL_ACLS","SET_USER_DATA_FIELD","field","value","dispatch","USER_DATA_SAVED","SET_USER_DATA","Object","keys","SET_REFRESH_USER_DATA","LOAD_STATE","SET_IS_SAVING_USER_DATA","saving","SET_APP_CONFIG","persistedState","set","stringify","useGlobalContext","context","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":["React","createContext","useReducer","useContext","isEqual","pick","jwt_decode","storage","events","EventType","ActionType","GlobalContext","undefined","handleStateInit","initialState","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","SET_CONTAINER_VISIBLE","payload","isVisible","CHANGE_ROUTE","route","trigger","opts","SET_SECTION","LOGIN_SUCCESS","id","is_verified_user","app_user_id","SIGN_OUT","REFRESH_TOKEN","LOAD_USER","UPDATE_LOCAL_ACLS","SET_USER_DATA_FIELD","field","value","dispatch","USER_DATA_SAVED","SET_USER_DATA","Object","keys","SET_REFRESH_USER_DATA","LOAD_STATE","SET_IS_SAVING_USER_DATA","saving","SET_APP_CONFIG","persistedState","set","stringify","useGlobalContext","context","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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"}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { useDeviceContext } from 'twrnc';
|
|
3
|
-
import tw from '../utils/tailwind';
|
|
4
2
|
import { SignIn } from './SignIn';
|
|
5
3
|
import { AutoSigninDialog } from './AutoSigninDialog';
|
|
6
4
|
import { useGlobalContext } from './GlobalContext';
|
|
7
5
|
export function RowndComponents() {
|
|
8
6
|
const {
|
|
9
7
|
state
|
|
10
|
-
} = useGlobalContext();
|
|
11
|
-
|
|
8
|
+
} = useGlobalContext(); // useDeviceContext(tw);
|
|
9
|
+
|
|
12
10
|
return /*#__PURE__*/React.createElement(React.Fragment, null, state.nav.current_route === '/account/login' && /*#__PURE__*/React.createElement(SignIn, null), state.nav.current_route === '/account/auto-signin' && /*#__PURE__*/React.createElement(AutoSigninDialog, null));
|
|
13
11
|
}
|
|
14
12
|
//# sourceMappingURL=RowndComponents.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","
|
|
1
|
+
{"version":3,"names":["React","SignIn","AutoSigninDialog","useGlobalContext","RowndComponents","state","nav","current_route"],"sources":["RowndComponents.tsx"],"sourcesContent":["import React from 'react';\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,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,MAAT,QAAuB,UAAvB;AACA,SAASC,gBAAT,QAAiC,oBAAjC;AACA,SAASC,gBAAT,QAAiC,iBAAjC;AAEA,OAAO,SAASC,eAAT,GAA2B;EAChC,MAAM;IAAEC;EAAF,IAAYF,gBAAgB,EAAlC,CADgC,CAEhC;;EAEA,oBACE,0CACGE,KAAK,CAACC,GAAN,CAAUC,aAAV,KAA4B,gBAA5B,iBAAgD,oBAAC,MAAD,OADnD,EAEGF,KAAK,CAACC,GAAN,CAAUC,aAAV,KAA4B,sBAA5B,iBACC,oBAAC,gBAAD,OAHJ,CADF;AAQD"}
|
|
@@ -2,13 +2,14 @@ function _extends() { _extends = Object.assign ? Object.assign.bind() : function
|
|
|
2
2
|
|
|
3
3
|
import React, { useCallback, useEffect, useMemo, useReducer, useRef, useState } from 'react';
|
|
4
4
|
import { differenceInMinutes } from 'date-fns';
|
|
5
|
-
import { View, StyleSheet,
|
|
5
|
+
import { View, StyleSheet, TouchableOpacity, Image, ActivityIndicator, Linking, Text } from 'react-native'; // import Text from './DarkText';
|
|
6
6
|
|
|
7
7
|
import { SvgCssUri } from 'react-native-svg';
|
|
8
|
-
import tw from '../utils/tailwind';
|
|
9
8
|
import phone from 'phone';
|
|
10
9
|
import jwt_decode from 'jwt-decode';
|
|
11
|
-
import { BottomSheetBackdrop, BottomSheetModal
|
|
10
|
+
import { BottomSheetBackdrop, BottomSheetModal } from '@gorhom/bottom-sheet';
|
|
11
|
+
import BottomSheetTextInput from './BottomSheetTextInput';
|
|
12
|
+
import bottomSheetMeta from '@gorhom/bottom-sheet/package.json';
|
|
12
13
|
import { useApi, useInterval, useNav, useDeviceFingerprint } from '../hooks';
|
|
13
14
|
import { useGlobalContext } from './GlobalContext';
|
|
14
15
|
import { ActionType } from '../data/actions';
|
|
@@ -372,17 +373,24 @@ export function SignIn() {
|
|
|
372
373
|
const renderBackdrop = useCallback(cbProps => /*#__PURE__*/React.createElement(BottomSheetBackdrop, _extends({}, cbProps, {
|
|
373
374
|
pressBehavior: "close"
|
|
374
375
|
})), []);
|
|
375
|
-
|
|
376
|
+
let extraBottomSheetProps = {};
|
|
377
|
+
|
|
378
|
+
if (bottomSheetMeta.version.startsWith('4')) {
|
|
379
|
+
var _state$nav, _state$nav$options;
|
|
380
|
+
|
|
381
|
+
extraBottomSheetProps.keyboardBehavior = 'fillParent';
|
|
382
|
+
extraBottomSheetProps.android_keyboardInputMode = 'adjustResize';
|
|
383
|
+
extraBottomSheetProps.enablePanDownToClose = (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';
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
return /*#__PURE__*/React.createElement(BottomSheetModal, _extends({
|
|
376
387
|
snapPoints: snapPoints,
|
|
377
388
|
index: 1,
|
|
378
389
|
backdropComponent: renderBackdrop,
|
|
379
|
-
keyboardBehavior: "fillParent",
|
|
380
|
-
android_keyboardInputMode: "adjustResize",
|
|
381
|
-
enablePanDownToClose: true,
|
|
382
390
|
onDismiss: handleClose,
|
|
383
391
|
style: styles.bottomSheet,
|
|
384
392
|
ref: bottomSheetModalRef
|
|
385
|
-
}, /*#__PURE__*/React.createElement(View, {
|
|
393
|
+
}, extraBottomSheetProps), /*#__PURE__*/React.createElement(View, {
|
|
386
394
|
style: styles.innerContainer
|
|
387
395
|
}, step === LoginStep.INIT && /*#__PURE__*/React.createElement(React.Fragment, null, (app === null || app === void 0 ? void 0 : (_app$config6 = app.config) === null || _app$config6 === void 0 ? void 0 : (_app$config6$hub = _app$config6.hub) === null || _app$config6$hub === void 0 ? void 0 : (_app$config6$hub$auth = _app$config6$hub.auth) === null || _app$config6$hub$auth === void 0 ? void 0 : _app$config6$hub$auth.show_app_icon) && (app === null || app === void 0 ? void 0 : app.icon) && (app.icon_content_type === 'image/svg+xml' ? /*#__PURE__*/React.createElement(SvgCssUri, {
|
|
388
396
|
uri: app.icon,
|
|
@@ -414,61 +422,56 @@ export function SignIn() {
|
|
|
414
422
|
value: addlFieldValues[field.name] || '',
|
|
415
423
|
[['input', 'text', 'tel', 'email'].includes(field.type) ? 'onInput' : 'onChange']: handleAddlFieldChange
|
|
416
424
|
});
|
|
417
|
-
})), /*#__PURE__*/React.createElement(
|
|
418
|
-
style: _ref => {
|
|
419
|
-
let {
|
|
420
|
-
pressed
|
|
421
|
-
} = _ref;
|
|
422
|
-
return [styles.button, !isValidUserIdentifier && styles.buttonDisabled, pressed && styles.buttonPressed, isSubmitting && styles.buttonSubmitting];
|
|
423
|
-
},
|
|
425
|
+
})), /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
424
426
|
disabled: !isValidUserIdentifier || isSubmitting,
|
|
425
427
|
onPress: initSignIn
|
|
426
|
-
}, /*#__PURE__*/React.createElement(
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
428
|
+
}, /*#__PURE__*/React.createElement(View, {
|
|
429
|
+
style: { ...styles.button,
|
|
430
|
+
...(!isValidUserIdentifier && styles.buttonDisabled),
|
|
431
|
+
...(isSubmitting && styles.buttonSubmitting)
|
|
432
|
+
}
|
|
433
|
+
}, /*#__PURE__*/React.createElement(View, {
|
|
430
434
|
style: styles.buttonText
|
|
431
435
|
}, /*#__PURE__*/React.createElement(Text, {
|
|
432
436
|
style: isValidUserIdentifier ? styles.buttonContent : { ...styles.buttonContent,
|
|
433
437
|
...styles.buttonDisabledText
|
|
434
438
|
}
|
|
435
|
-
}, isSubmitting
|
|
439
|
+
}, isSubmitting && /*#__PURE__*/React.createElement(ActivityIndicator, {
|
|
440
|
+
size: "small",
|
|
441
|
+
color: "#efefef",
|
|
442
|
+
style: styles.loadingIndicator
|
|
443
|
+
}), isSubmitting ? 'Just a sec...' : 'Continue')))), /*#__PURE__*/React.createElement(Text, {
|
|
436
444
|
style: styles.signInNoticeText
|
|
437
445
|
}, "By continuing, you're agreeing to the terms of service that govern this app and to receive email or text messages for verification purposes.")), step === LoginStep.WAITING && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Text, {
|
|
438
446
|
style: styles.dialogHeading
|
|
439
447
|
}, "Thanks! Verify your", ' ', loginType === 'phone' ? 'phone number' : 'email', " to finish"), /*#__PURE__*/React.createElement(Text, {
|
|
440
|
-
style:
|
|
448
|
+
style: styles.py6
|
|
441
449
|
}, "Click the link in the message we just sent to", ' ', /*#__PURE__*/React.createElement(Text, {
|
|
442
|
-
style:
|
|
450
|
+
style: styles.italic
|
|
443
451
|
}, userIdentifier), " to verify and finish.", /*#__PURE__*/React.createElement(Text, {
|
|
444
452
|
style: [styles.link],
|
|
445
453
|
onPress: () => setStep(LoginStep.INIT)
|
|
446
454
|
}, "\xA0Re-send message")), /*#__PURE__*/React.createElement(View, {
|
|
447
455
|
style: styles.signInVerificationImage
|
|
448
|
-
}, loginType === 'phone' ? /*#__PURE__*/React.createElement(ImagePhoneVerifyWaiting, null) : /*#__PURE__*/React.createElement(ImageEmailVerifyWaiting, null)), /*#__PURE__*/React.createElement(
|
|
449
|
-
style:
|
|
450
|
-
let {
|
|
451
|
-
pressed
|
|
452
|
-
} = _ref2;
|
|
453
|
-
return [styles.button, pressed && styles.buttonPressed];
|
|
454
|
-
},
|
|
456
|
+
}, loginType === 'phone' ? /*#__PURE__*/React.createElement(ImagePhoneVerifyWaiting, null) : /*#__PURE__*/React.createElement(ImageEmailVerifyWaiting, null)), /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
457
|
+
style: [styles.button],
|
|
455
458
|
onPress: () => setStep(LoginStep.INIT)
|
|
456
459
|
}, /*#__PURE__*/React.createElement(Text, {
|
|
457
460
|
style: styles.buttonContent
|
|
458
461
|
}, "Try a different", ' ', loginType === 'phone' ? 'phone number' : 'email'))), step === LoginStep.SUCCESS && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(View, {
|
|
459
462
|
style: styles.signInVerificationImage
|
|
460
463
|
}, /*#__PURE__*/React.createElement(ImageCheckmarkFilled, null))), step === LoginStep.FAILURE && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Text, {
|
|
461
|
-
style:
|
|
462
|
-
}, "Whoops, that didn't work!"), /*#__PURE__*/React.createElement(
|
|
464
|
+
style: styles.textBase
|
|
465
|
+
}, "Whoops, that didn't work!"), /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
463
466
|
style: styles.button,
|
|
464
467
|
onPress: () => setStep(LoginStep.INIT)
|
|
465
468
|
}, /*#__PURE__*/React.createElement(Text, {
|
|
466
469
|
style: styles.buttonContent
|
|
467
470
|
}, "Try again"))), step === LoginStep.ERROR && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Text, {
|
|
468
|
-
style:
|
|
471
|
+
style: styles.textBase
|
|
469
472
|
}, "An error occurred while signing you in."), !!error && /*#__PURE__*/React.createElement(Text, {
|
|
470
|
-
style:
|
|
471
|
-
}, error), /*#__PURE__*/React.createElement(
|
|
473
|
+
style: styles.textRose800
|
|
474
|
+
}, error), /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
472
475
|
style: styles.button,
|
|
473
476
|
onPress: () => setStep(LoginStep.INIT)
|
|
474
477
|
}, /*#__PURE__*/React.createElement(Text, {
|
|
@@ -544,9 +547,11 @@ const styles = StyleSheet.create({
|
|
|
544
547
|
marginBottom: 30,
|
|
545
548
|
elevation: 0,
|
|
546
549
|
backgroundColor: '#5b0ae0',
|
|
550
|
+
color: '#fff',
|
|
547
551
|
display: 'flex',
|
|
548
552
|
alignItems: 'center',
|
|
549
|
-
justifyContent: 'center'
|
|
553
|
+
justifyContent: 'center' // height: 45,
|
|
554
|
+
|
|
550
555
|
},
|
|
551
556
|
buttonDisabled: {
|
|
552
557
|
backgroundColor: '#eee'
|
|
@@ -559,10 +564,10 @@ const styles = StyleSheet.create({
|
|
|
559
564
|
fontSize: 18,
|
|
560
565
|
color: '#fff'
|
|
561
566
|
},
|
|
562
|
-
buttonText: {
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
567
|
+
buttonText: {// marginHorizontal: 10,
|
|
568
|
+
// paddingHorizontal: 10,
|
|
569
|
+
// fontSize: 18,
|
|
570
|
+
// color: '#fff',
|
|
566
571
|
},
|
|
567
572
|
buttonTextInner: {
|
|
568
573
|
fontSize: 18
|
|
@@ -575,9 +580,7 @@ const styles = StyleSheet.create({
|
|
|
575
580
|
color: '#c7c7c7'
|
|
576
581
|
},
|
|
577
582
|
loadingIndicator: {
|
|
578
|
-
|
|
579
|
-
padding: 20,
|
|
580
|
-
margin: 20
|
|
583
|
+
marginRight: 10
|
|
581
584
|
},
|
|
582
585
|
signInNoticeText: {
|
|
583
586
|
fontSize: 12,
|
|
@@ -588,6 +591,19 @@ const styles = StyleSheet.create({
|
|
|
588
591
|
},
|
|
589
592
|
link: {
|
|
590
593
|
color: '#6114e1'
|
|
594
|
+
},
|
|
595
|
+
py6: {
|
|
596
|
+
paddingVertical: 6
|
|
597
|
+
},
|
|
598
|
+
italic: {
|
|
599
|
+
fontStyle: 'italic'
|
|
600
|
+
},
|
|
601
|
+
textBase: {
|
|
602
|
+
fontSize: 16,
|
|
603
|
+
lineHeight: 24
|
|
604
|
+
},
|
|
605
|
+
textRose800: {
|
|
606
|
+
color: 'rgb(159, 18, 57)'
|
|
591
607
|
}
|
|
592
608
|
});
|
|
593
609
|
//# sourceMappingURL=SignIn.js.map
|