{"version":3,"file":"static/js/main.44b7c424.js","mappings":"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","sources":["i18n.js","constants/Api.js","contexts/ThemeContext.js","assets/countries.js","components/StyledButton.js","contexts/RoomContext.js","constants/device.js","contexts/UserContext.js","components/StyledInput.js","components/SearchModal.js","utils/openLink.js","screens/onboarding/SignupScreen/SignupForm.js","screens/onboarding/SignupScreen/ConfirmForm.js","screens/onboarding/SignupScreen/SignupScreen.js","screens/onboarding/components/OnboardingLayout.js","screens/onboarding/NameScreen.js","screens/onboarding/UsernameScreen.js","screens/MainScreen/Chat/Bubble.js","screens/onboarding/GeolocationPermissionScreen.js","screens/onboarding/PushNotificationPermissionScreen.js","screens/onboarding/ContactsPermissionScreen.js","contexts/SettingsContext.js","contexts/SpeakerContext.js","contexts/NotificationsContext.js","components/OnboardingHeader.js","components/StyledStatusBar.js","hooks/useSpeaker.js","assets/languages-list.js","screens/MainScreen/Drawer.js","utils/SourceEvent.js","utils/throttle.js","helpers/dateHelper.js","screens/MainScreen/Chat/Card.js","screens/MainScreen/Chat/ResponseLinks.js","screens/MainScreen/Chat/PlacesMap.js","screens/MainScreen/Chat/Chat.js","utils/debounce.js","hooks/useRecorder.js","components/Menu.js","screens/MainScreen/FooterButton.js","screens/MainScreen/Recorder.js","screens/MainScreen/ChatView.js","screens/MainScreen/MicrophoneView.js","screens/MainScreen/MainScreen.js","screens/AccountScreen.js","screens/UpgradeScreen.js","screens/LinkBankScreen.js","utils/capitalize.js","screens/QueryScreen.js","UpgradeMenu.js","MainStackNavigator.js","screens/onboarding/LanguageScreen.js","components/RadioButton.js","screens/onboarding/GenderScreen.js","screens/RoomNotFoundScreen.js","App.js","index.js","webpack/bootstrap","webpack/runtime/amd options","webpack/runtime/chunk loaded","webpack/runtime/compat get default export","webpack/runtime/create fake namespace object","webpack/runtime/define property getters","webpack/runtime/global","webpack/runtime/harmony module decorator","webpack/runtime/hasOwnProperty shorthand","webpack/runtime/make namespace object","webpack/runtime/publicPath","webpack/runtime/jsonp chunk loading","webpack/startup"],"sourcesContent":["import i18n from 'i18next';\nimport {initReactI18next} from 'react-i18next';\n\nimport en from './locales/en.json';\nimport fr from './locales/fr.json';\nimport es from './locales/es.json';\nimport zh from './locales/zh.json';\nimport pt from './locales/pt.json';\nimport ru from './locales/ru.json';\nimport it from './locales/it.json';\nimport de from './locales/de.json';\nimport he from './locales/he.json';\nimport ar from './locales/ar.json';\n\n// Note: Duplicated in i18next-parser.config.js (minus iw)\nconst SUPPORTED_LANGUAGE = ['en', 'fr', 'es', 'zh', 'pt', 'ru', 'it', 'de', 'he', 'iw', 'ar'];\n\ni18n\n\t.use(initReactI18next)\n\t.init({\n\t\tresources: {\n\t\t\ten: {translation: en},\n\t\t\tfr: {translation: fr},\n\t\t\tes: {translation: es},\n\t\t\tzh: {translation: zh},\n\t\t\tpt: {translation: pt},\n\t\t\tru: {translation: ru},\n\t\t\tit: {translation: it},\n\t\t\tde: {translation: de},\n\t\t\the: {translation: he},\n\t\t\tiw: {translation: he},\n\t\t\tar: {translation: ar},\n\t\t},\n\n\t\tdebug: false,\n\n\t\tlng: 'en',\n\t\tfallbackLng: 'en',\n\t\tsupportedLngs: SUPPORTED_LANGUAGE,\n\n\t\tload: 'languageOnly',\n\n\t\tkeySeparator: '.',\n\n\t\tsaveMissing: false,\n\n\t\tinterpolation: {\n\t\t\tescapeValue: false,\n\t\t},\n\t});\n\nexport default i18n;\n","import {Platform} from 'react-native';\n\nif (__DEV__) {\n console.log('***** App running in Development mode. *****');\n} else {\n console.log('***** App running in Production mode. *****');\n}\n\nconst appName = 'Secretaire';\n\n\nlet apiBaseUrl = 'https://api.secretaire.ai';\nlet assetsBaseUrl = 'https://api.secretaire.ai';\nlet webBaseUrl = 'https://www.secretaire.ai';\nlet webSocketBaseUrl = 'wss://api.secretaire.ai/cable';\n\n// let apiBaseUrl = 'http://192.168.1.183:3000';\n// let apiBaseUrl = 'https://staging.secretaire.ai';\n\nlet roomSlug = null;\n\n\nif (Platform.OS === 'web') {\n\n\n\n // Check whether API endpoints are set by the backend\n try {\n console.log('API_BASE_URL is set from server-side authentication', API_BASE_URL);\n apiBaseUrl = API_BASE_URL;\n } catch (error) {\n console.log('API_BASE_URL do not exist in server-side authentication');\n console.log('apiBaseUrl', apiBaseUrl);\n }\n\n\n // Check whether user is already authenticated server-side\n try {\n console.log('ROOM_SLUG', ROOM_SLUG);\n roomSlug = ROOM_SLUG;\n console.log('ROOM_SLUG set from server-side authentication');\n } catch (error) {\n console.log('ROOM_SLUG do not exist in server-side authentication');\n const splitHostName = window.location.hostname.split('.');\n let exceptionSubdomains = [\"api\", \"app\", \"chat\", \"dev\", \"local\", \"heroku\", \"staging\", \"app-dev\", \"app-local\", \"app-staging\", \"www\"];\n roomSlug = splitHostName.length > 1\n ? exceptionSubdomains.includes(splitHostName[0]) ? null : splitHostName[0]\n : null;\n console.log('roomSlug', roomSlug);\n }\n\n\n}\n\n\nconsole.log('apiBaseUrl', apiBaseUrl);\nconsole.log('assetsBaseUrl', assetsBaseUrl);\nconsole.log('webBaseUrl', webBaseUrl);\nconsole.log('webSocketBaseUrl', webSocketBaseUrl);\n\nexport default {\n roomSlug,\n appName,\n apiBaseUrl,\n assetsBaseUrl,\n webBaseUrl,\n webSocketBaseUrl,\n};\n","import {createContext} from 'react';\n\nexport const WEB_MAX_WIDTH = 800;\n\nexport const themes = {\n light: {\n light: true,\n\n backgroundPrimary: '#f2f1f5',\n backgroundSecondary: '#f8f8f8',\n headerBackground: '#ffffff',\n footerBackground: '#ffffff',\n headerBorderColor: '#ebeaea',\n footerBorderColor: '#ebeaea',\n textPrimary: '#000000',\n textSecondary: '#444444',\n colorPrimary: '#3c88f6',\n colorSecondary: '#bfbfbf',\n\n success: '#5cc185',\n error: '#dc3545ff',\n warning: '#ff882a',\n\n inputBackgroundColor: '#ffffff',\n inputBorderColor: '#ebeaea',\n\n buttonText: '#ffffff',\n link: '#3C88F6',\n },\n dark: {\n light: false,\n\n backgroundPrimary: '#1d1d1d',\n backgroundSecondary: '#2A2A2B',\n headerBackground: '#0f0f0f',\n footerBackground: '#0f0f0f',\n headerBorderColor: '#2a2a2b',\n footerBorderColor: '#2a2a2b',\n textPrimary: '#ffffff',\n textSecondary: '#a9a9a9',\n colorPrimary: '#3c88f6',\n colorSecondary: '#bfbfbf',\n\n success: '#5cc185',\n error: '#dc3545ff',\n warning: '#ff882a',\n\n inputBackgroundColor: '#000000',\n inputBorderColor: '#444D55',\n\n buttonText: '#ffffff',\n link: '#3C88F6',\n },\n};\n\nexport const ThemeContext = createContext(themes.light);\n","const data = [\n {\n \"name\": \"Afghanistan\",\n \"flag\": \"🇦🇫\",\n \"code\": \"AF\",\n \"dial_code\": \"+93\",\n },\n {\n \"name\": \"Åland Islands\",\n \"flag\": \"🇦🇽\",\n \"code\": \"AX\",\n \"dial_code\": \"+358\",\n },\n {\n \"name\": \"Albania\",\n \"flag\": \"🇦🇱\",\n \"code\": \"AL\",\n \"dial_code\": \"+355\",\n },\n {\n \"name\": \"Algeria\",\n \"flag\": \"🇩🇿\",\n \"code\": \"DZ\",\n \"dial_code\": \"+213\",\n },\n {\n \"name\": \"American Samoa\",\n \"flag\": \"🇦🇸\",\n \"code\": \"AS\",\n \"dial_code\": \"+1684\",\n },\n {\n \"name\": \"Andorra\",\n \"flag\": \"🇦🇩\",\n \"code\": \"AD\",\n \"dial_code\": \"+376\",\n },\n {\n \"name\": \"Angola\",\n \"flag\": \"🇦🇴\",\n \"code\": \"AO\",\n \"dial_code\": \"+244\",\n },\n {\n \"name\": \"Anguilla\",\n \"flag\": \"🇦🇮\",\n \"code\": \"AI\",\n \"dial_code\": \"+1264\",\n },\n {\n \"name\": \"Antarctica\",\n \"flag\": \"🇦🇶\",\n \"code\": \"AQ\",\n \"dial_code\": \"+672\",\n },\n {\n \"name\": \"Antigua and Barbuda\",\n \"flag\": \"🇦🇬\",\n \"code\": \"AG\",\n \"dial_code\": \"+1268\",\n },\n {\n \"name\": \"Argentina\",\n \"flag\": \"🇦🇷\",\n \"code\": \"AR\",\n \"dial_code\": \"+54\",\n },\n {\n \"name\": \"Armenia\",\n \"flag\": \"🇦🇲\",\n \"code\": \"AM\",\n \"dial_code\": \"+374\",\n },\n {\n \"name\": \"Aruba\",\n \"flag\": \"🇦🇼\",\n \"code\": \"AW\",\n \"dial_code\": \"+297\",\n },\n {\n \"name\": \"Australia\",\n \"flag\": \"🇦🇺\",\n \"code\": \"AU\",\n \"dial_code\": \"+61\",\n },\n {\n \"name\": \"Austria\",\n \"flag\": \"🇦🇹\",\n \"code\": \"AT\",\n \"dial_code\": \"+43\",\n },\n {\n \"name\": \"Azerbaijan\",\n \"flag\": \"🇦🇿\",\n \"code\": \"AZ\",\n \"dial_code\": \"+994\",\n },\n {\n \"name\": \"Bahamas\",\n \"flag\": \"🇧🇸\",\n \"code\": \"BS\",\n \"dial_code\": \"+1242\",\n },\n {\n \"name\": \"Bahrain\",\n \"flag\": \"🇧🇭\",\n \"code\": \"BH\",\n \"dial_code\": \"+973\",\n },\n {\n \"name\": \"Bangladesh\",\n \"flag\": \"🇧🇩\",\n \"code\": \"BD\",\n \"dial_code\": \"+880\",\n },\n {\n \"name\": \"Barbados\",\n \"flag\": \"🇧🇧\",\n \"code\": \"BB\",\n \"dial_code\": \"+1246\",\n },\n {\n \"name\": \"Belarus\",\n \"flag\": \"🇧🇾\",\n \"code\": \"BY\",\n \"dial_code\": \"+375\",\n },\n {\n \"name\": \"Belgium\",\n \"flag\": \"🇧🇪\",\n \"code\": \"BE\",\n \"dial_code\": \"+32\",\n },\n {\n \"name\": \"Belize\",\n \"flag\": \"🇧🇿\",\n \"code\": \"BZ\",\n \"dial_code\": \"+501\",\n },\n {\n \"name\": \"Benin\",\n \"flag\": \"🇧🇯\",\n \"code\": \"BJ\",\n \"dial_code\": \"+229\",\n },\n {\n \"name\": \"Bermuda\",\n \"flag\": \"🇧🇲\",\n \"code\": \"BM\",\n \"dial_code\": \"+1441\",\n },\n {\n \"name\": \"Bhutan\",\n \"flag\": \"🇧🇹\",\n \"code\": \"BT\",\n \"dial_code\": \"+975\",\n },\n {\n \"name\": \"Bolivia, Plurinational State of bolivia\",\n \"flag\": \"🇧🇴\",\n \"code\": \"BO\",\n \"dial_code\": \"+591\",\n },\n {\n \"name\": \"Bosnia and Herzegovina\",\n \"flag\": \"🇧🇦\",\n \"code\": \"BA\",\n \"dial_code\": \"+387\",\n },\n {\n \"name\": \"Botswana\",\n \"flag\": \"🇧🇼\",\n \"code\": \"BW\",\n \"dial_code\": \"+267\",\n },\n {\n \"name\": \"Bouvet Island\",\n \"flag\": \"🇧🇻\",\n \"code\": \"BV\",\n \"dial_code\": \"+47\",\n },\n {\n \"name\": \"Brazil\",\n \"flag\": \"🇧🇷\",\n \"code\": \"BR\",\n \"dial_code\": \"+55\",\n },\n {\n \"name\": \"British Indian Ocean Territory\",\n \"flag\": \"🇮🇴\",\n \"code\": \"IO\",\n \"dial_code\": \"+246\",\n },\n {\n \"name\": \"Brunei Darussalam\",\n \"flag\": \"🇧🇳\",\n \"code\": \"BN\",\n \"dial_code\": \"+673\",\n },\n {\n \"name\": \"Bulgaria\",\n \"flag\": \"🇧🇬\",\n \"code\": \"BG\",\n \"dial_code\": \"+359\",\n },\n {\n \"name\": \"Burkina Faso\",\n \"flag\": \"🇧🇫\",\n \"code\": \"BF\",\n \"dial_code\": \"+226\",\n },\n {\n \"name\": \"Burundi\",\n \"flag\": \"🇧🇮\",\n \"code\": \"BI\",\n \"dial_code\": \"+257\",\n },\n {\n \"name\": \"Cambodia\",\n \"flag\": \"🇰🇭\",\n \"code\": \"KH\",\n \"dial_code\": \"+855\",\n },\n {\n \"name\": \"Cameroon\",\n \"flag\": \"🇨🇲\",\n \"code\": \"CM\",\n \"dial_code\": \"+237\",\n },\n {\n \"name\": \"Canada\",\n \"flag\": \"🇨🇦\",\n \"code\": \"CA\",\n \"dial_code\": \"+1\",\n },\n {\n \"name\": \"Cape Verde\",\n \"flag\": \"🇨🇻\",\n \"code\": \"CV\",\n \"dial_code\": \"+238\",\n },\n {\n \"name\": \"Cayman Islands\",\n \"flag\": \"🇰🇾\",\n \"code\": \"KY\",\n \"dial_code\": \"+345\",\n },\n {\n \"name\": \"Central African Republic\",\n \"flag\": \"🇨🇫\",\n \"code\": \"CF\",\n \"dial_code\": \"+236\",\n },\n {\n \"name\": \"Chad\",\n \"flag\": \"🇹🇩\",\n \"code\": \"TD\",\n \"dial_code\": \"+235\",\n },\n {\n \"name\": \"Chile\",\n \"flag\": \"🇨🇱\",\n \"code\": \"CL\",\n \"dial_code\": \"+56\",\n },\n {\n \"name\": \"China\",\n \"flag\": \"🇨🇳\",\n \"code\": \"CN\",\n \"dial_code\": \"+86\",\n },\n {\n \"name\": \"Christmas Island\",\n \"flag\": \"🇨🇽\",\n \"code\": \"CX\",\n \"dial_code\": \"+61\",\n },\n {\n \"name\": \"Cocos (Keeling) Islands\",\n \"flag\": \"🇨🇨\",\n \"code\": \"CC\",\n \"dial_code\": \"+61\",\n },\n {\n \"name\": \"Colombia\",\n \"flag\": \"🇨🇴\",\n \"code\": \"CO\",\n \"dial_code\": \"+57\",\n },\n {\n \"name\": \"Comoros\",\n \"flag\": \"🇰🇲\",\n \"code\": \"KM\",\n \"dial_code\": \"+269\",\n },\n {\n \"name\": \"Congo\",\n \"flag\": \"🇨🇬\",\n \"code\": \"CG\",\n \"dial_code\": \"+242\",\n },\n {\n \"name\": \"Congo, The Democratic Republic of the Congo\",\n \"flag\": \"🇨🇩\",\n \"code\": \"CD\",\n \"dial_code\": \"+243\",\n },\n {\n \"name\": \"Cook Islands\",\n \"flag\": \"🇨🇰\",\n \"code\": \"CK\",\n \"dial_code\": \"+682\",\n },\n {\n \"name\": \"Costa Rica\",\n \"flag\": \"🇨🇷\",\n \"code\": \"CR\",\n \"dial_code\": \"+506\",\n },\n {\n \"name\": \"Cote d'Ivoire\",\n \"flag\": \"🇨🇮\",\n \"code\": \"CI\",\n \"dial_code\": \"+225\",\n },\n {\n \"name\": \"Croatia\",\n \"flag\": \"🇭🇷\",\n \"code\": \"HR\",\n \"dial_code\": \"+385\",\n },\n {\n \"name\": \"Cuba\",\n \"flag\": \"🇨🇺\",\n \"code\": \"CU\",\n \"dial_code\": \"+53\",\n },\n {\n \"name\": \"Cyprus\",\n \"flag\": \"🇨🇾\",\n \"code\": \"CY\",\n \"dial_code\": \"+357\",\n },\n {\n \"name\": \"Czech Republic\",\n \"flag\": \"🇨🇿\",\n \"code\": \"CZ\",\n \"dial_code\": \"+420\",\n },\n {\n \"name\": \"Denmark\",\n \"flag\": \"🇩🇰\",\n \"code\": \"DK\",\n \"dial_code\": \"+45\",\n },\n {\n \"name\": \"Djibouti\",\n \"flag\": \"🇩🇯\",\n \"code\": \"DJ\",\n \"dial_code\": \"+253\",\n },\n {\n \"name\": \"Dominica\",\n \"flag\": \"🇩🇲\",\n \"code\": \"DM\",\n \"dial_code\": \"+1767\",\n },\n {\n \"name\": \"Dominican Republic\",\n \"flag\": \"🇩🇴\",\n \"code\": \"DO\",\n \"dial_code\": \"+1849\",\n },\n {\n \"name\": \"Ecuador\",\n \"flag\": \"🇪🇨\",\n \"code\": \"EC\",\n \"dial_code\": \"+593\",\n },\n {\n \"name\": \"Egypt\",\n \"flag\": \"🇪🇬\",\n \"code\": \"EG\",\n \"dial_code\": \"+20\",\n },\n {\n \"name\": \"El Salvador\",\n \"flag\": \"🇸🇻\",\n \"code\": \"SV\",\n \"dial_code\": \"+503\",\n },\n {\n \"name\": \"Equatorial Guinea\",\n \"flag\": \"🇬🇶\",\n \"code\": \"GQ\",\n \"dial_code\": \"+240\",\n },\n {\n \"name\": \"Eritrea\",\n \"flag\": \"🇪🇷\",\n \"code\": \"ER\",\n \"dial_code\": \"+291\",\n },\n {\n \"name\": \"Estonia\",\n \"flag\": \"🇪🇪\",\n \"code\": \"EE\",\n \"dial_code\": \"+372\",\n },\n {\n \"name\": \"Ethiopia\",\n \"flag\": \"🇪🇹\",\n \"code\": \"ET\",\n \"dial_code\": \"+251\",\n },\n {\n \"name\": \"Falkland Islands (Malvinas)\",\n \"flag\": \"🇫🇰\",\n \"code\": \"FK\",\n \"dial_code\": \"+500\",\n },\n {\n \"name\": \"Faroe Islands\",\n \"flag\": \"🇫🇴\",\n \"code\": \"FO\",\n \"dial_code\": \"+298\",\n },\n {\n \"name\": \"Fiji\",\n \"flag\": \"🇫🇯\",\n \"code\": \"FJ\",\n \"dial_code\": \"+679\",\n },\n {\n \"name\": \"Finland\",\n \"flag\": \"🇫🇮\",\n \"code\": \"FI\",\n \"dial_code\": \"+358\",\n },\n {\n \"name\": \"France\",\n \"flag\": \"🇫🇷\",\n \"code\": \"FR\",\n \"dial_code\": \"+33\",\n },\n {\n \"name\": \"French Guiana\",\n \"flag\": \"🇬🇫\",\n \"code\": \"GF\",\n \"dial_code\": \"+594\",\n },\n {\n \"name\": \"French Polynesia\",\n \"flag\": \"🇵🇫\",\n \"code\": \"PF\",\n \"dial_code\": \"+689\",\n },\n {\n \"name\": \"French Southern Territories\",\n \"flag\": \"🇹🇫\",\n \"code\": \"TF\",\n \"dial_code\": \"+262\",\n },\n {\n \"name\": \"Gabon\",\n \"flag\": \"🇬🇦\",\n \"code\": \"GA\",\n \"dial_code\": \"+241\",\n },\n {\n \"name\": \"Gambia\",\n \"flag\": \"🇬🇲\",\n \"code\": \"GM\",\n \"dial_code\": \"+220\",\n },\n {\n \"name\": \"Georgia\",\n \"flag\": \"🇬🇪\",\n \"code\": \"GE\",\n \"dial_code\": \"+995\",\n },\n {\n \"name\": \"Germany\",\n \"flag\": \"🇩🇪\",\n \"code\": \"DE\",\n \"dial_code\": \"+49\",\n },\n {\n \"name\": \"Ghana\",\n \"flag\": \"🇬🇭\",\n \"code\": \"GH\",\n \"dial_code\": \"+233\",\n },\n {\n \"name\": \"Gibraltar\",\n \"flag\": \"🇬🇮\",\n \"code\": \"GI\",\n \"dial_code\": \"+350\",\n },\n {\n \"name\": \"Greece\",\n \"flag\": \"🇬🇷\",\n \"code\": \"GR\",\n \"dial_code\": \"+30\",\n },\n {\n \"name\": \"Greenland\",\n \"flag\": \"🇬🇱\",\n \"code\": \"GL\",\n \"dial_code\": \"+299\",\n },\n {\n \"name\": \"Grenada\",\n \"flag\": \"🇬🇩\",\n \"code\": \"GD\",\n \"dial_code\": \"+1473\",\n },\n {\n \"name\": \"Guadeloupe\",\n \"flag\": \"🇬🇵\",\n \"code\": \"GP\",\n \"dial_code\": \"+590\",\n },\n {\n \"name\": \"Guam\",\n \"flag\": \"🇬🇺\",\n \"code\": \"GU\",\n \"dial_code\": \"+1671\",\n },\n {\n \"name\": \"Guatemala\",\n \"flag\": \"🇬🇹\",\n \"code\": \"GT\",\n \"dial_code\": \"+502\",\n },\n {\n \"name\": \"Guernsey\",\n \"flag\": \"🇬🇬\",\n \"code\": \"GG\",\n \"dial_code\": \"+44\",\n },\n {\n \"name\": \"Guinea\",\n \"flag\": \"🇬🇳\",\n \"code\": \"GN\",\n \"dial_code\": \"+224\",\n },\n {\n \"name\": \"Guinea-Bissau\",\n \"flag\": \"🇬🇼\",\n \"code\": \"GW\",\n \"dial_code\": \"+245\",\n },\n {\n \"name\": \"Guyana\",\n \"flag\": \"🇬🇾\",\n \"code\": \"GY\",\n \"dial_code\": \"+592\",\n },\n {\n \"name\": \"Haiti\",\n \"flag\": \"🇭🇹\",\n \"code\": \"HT\",\n \"dial_code\": \"+509\",\n },\n {\n \"name\": \"Heard Island and Mcdonald Islands\",\n \"flag\": \"🇭🇲\",\n \"code\": \"HM\",\n \"dial_code\": \"+672\",\n },\n {\n \"name\": \"Holy See (Vatican City State)\",\n \"flag\": \"🇻🇦\",\n \"code\": \"VA\",\n \"dial_code\": \"+379\",\n },\n {\n \"name\": \"Honduras\",\n \"flag\": \"🇭🇳\",\n \"code\": \"HN\",\n \"dial_code\": \"+504\",\n },\n {\n \"name\": \"Hong Kong\",\n \"flag\": \"🇭🇰\",\n \"code\": \"HK\",\n \"dial_code\": \"+852\",\n },\n {\n \"name\": \"Hungary\",\n \"flag\": \"🇭🇺\",\n \"code\": \"HU\",\n \"dial_code\": \"+36\",\n },\n {\n \"name\": \"Iceland\",\n \"flag\": \"🇮🇸\",\n \"code\": \"IS\",\n \"dial_code\": \"+354\",\n },\n {\n \"name\": \"India\",\n \"flag\": \"🇮🇳\",\n \"code\": \"IN\",\n \"dial_code\": \"+91\",\n },\n {\n \"name\": \"Indonesia\",\n \"flag\": \"🇮🇩\",\n \"code\": \"ID\",\n \"dial_code\": \"+62\",\n },\n {\n \"name\": \"Iran, Islamic Republic of Persian Gulf\",\n \"flag\": \"🇮🇷\",\n \"code\": \"IR\",\n \"dial_code\": \"+98\",\n },\n {\n \"name\": \"Iraq\",\n \"flag\": \"🇮🇶\",\n \"code\": \"IQ\",\n \"dial_code\": \"+964\",\n },\n {\n \"name\": \"Ireland\",\n \"flag\": \"🇮🇪\",\n \"code\": \"IE\",\n \"dial_code\": \"+353\",\n },\n {\n \"name\": \"Isle of Man\",\n \"flag\": \"🇮🇲\",\n \"code\": \"IM\",\n \"dial_code\": \"+44\",\n },\n {\n \"name\": \"Israel\",\n \"flag\": \"🇮🇱\",\n \"code\": \"IL\",\n \"dial_code\": \"+972\",\n },\n {\n \"name\": \"Italy\",\n \"flag\": \"🇮🇹\",\n \"code\": \"IT\",\n \"dial_code\": \"+39\",\n },\n {\n \"name\": \"Jamaica\",\n \"flag\": \"🇯🇲\",\n \"code\": \"JM\",\n \"dial_code\": \"+1876\",\n },\n {\n \"name\": \"Japan\",\n \"flag\": \"🇯🇵\",\n \"code\": \"JP\",\n \"dial_code\": \"+81\",\n },\n {\n \"name\": \"Jersey\",\n \"flag\": \"🇯🇪\",\n \"code\": \"JE\",\n \"dial_code\": \"+44\",\n },\n {\n \"name\": \"Jordan\",\n \"flag\": \"🇯🇴\",\n \"code\": \"JO\",\n \"dial_code\": \"+962\",\n },\n {\n \"name\": \"Kazakhstan\",\n \"flag\": \"🇰🇿\",\n \"code\": \"KZ\",\n \"dial_code\": \"+7\",\n },\n {\n \"name\": \"Kenya\",\n \"flag\": \"🇰🇪\",\n \"code\": \"KE\",\n \"dial_code\": \"+254\",\n },\n {\n \"name\": \"Kiribati\",\n \"flag\": \"🇰🇮\",\n \"code\": \"KI\",\n \"dial_code\": \"+686\",\n },\n {\n \"name\": \"Korea, Democratic People's Republic of Korea\",\n \"flag\": \"🇰🇵\",\n \"code\": \"KP\",\n \"dial_code\": \"+850\",\n },\n {\n \"name\": \"Korea, Republic of South Korea\",\n \"flag\": \"🇰🇷\",\n \"code\": \"KR\",\n \"dial_code\": \"+82\",\n },\n {\n \"name\": \"Kosovo\",\n \"flag\": \"🇽🇰\",\n \"code\": \"XK\",\n \"dial_code\": \"+383\",\n },\n {\n \"name\": \"Kuwait\",\n \"flag\": \"🇰🇼\",\n \"code\": \"KW\",\n \"dial_code\": \"+965\",\n },\n {\n \"name\": \"Kyrgyzstan\",\n \"flag\": \"🇰🇬\",\n \"code\": \"KG\",\n \"dial_code\": \"+996\",\n },\n {\n \"name\": \"Laos\",\n \"flag\": \"🇱🇦\",\n \"code\": \"LA\",\n \"dial_code\": \"+856\",\n },\n {\n \"name\": \"Latvia\",\n \"flag\": \"🇱🇻\",\n \"code\": \"LV\",\n \"dial_code\": \"+371\",\n },\n {\n \"name\": \"Lebanon\",\n \"flag\": \"🇱🇧\",\n \"code\": \"LB\",\n \"dial_code\": \"+961\",\n },\n {\n \"name\": \"Lesotho\",\n \"flag\": \"🇱🇸\",\n \"code\": \"LS\",\n \"dial_code\": \"+266\",\n },\n {\n \"name\": \"Liberia\",\n \"flag\": \"🇱🇷\",\n \"code\": \"LR\",\n \"dial_code\": \"+231\",\n },\n {\n \"name\": \"Libyan Arab Jamahiriya\",\n \"flag\": \"🇱🇾\",\n \"code\": \"LY\",\n \"dial_code\": \"+218\",\n },\n {\n \"name\": \"Liechtenstein\",\n \"flag\": \"🇱🇮\",\n \"code\": \"LI\",\n \"dial_code\": \"+423\",\n },\n {\n \"name\": \"Lithuania\",\n \"flag\": \"🇱🇹\",\n \"code\": \"LT\",\n \"dial_code\": \"+370\",\n },\n {\n \"name\": \"Luxembourg\",\n \"flag\": \"🇱🇺\",\n \"code\": \"LU\",\n \"dial_code\": \"+352\",\n },\n {\n \"name\": \"Macao\",\n \"flag\": \"🇲🇴\",\n \"code\": \"MO\",\n \"dial_code\": \"+853\",\n },\n {\n \"name\": \"Macedonia\",\n \"flag\": \"🇲🇰\",\n \"code\": \"MK\",\n \"dial_code\": \"+389\",\n },\n {\n \"name\": \"Madagascar\",\n \"flag\": \"🇲🇬\",\n \"code\": \"MG\",\n \"dial_code\": \"+261\",\n },\n {\n \"name\": \"Malawi\",\n \"flag\": \"🇲🇼\",\n \"code\": \"MW\",\n \"dial_code\": \"+265\",\n },\n {\n \"name\": \"Malaysia\",\n \"flag\": \"🇲🇾\",\n \"code\": \"MY\",\n \"dial_code\": \"+60\",\n },\n {\n \"name\": \"Maldives\",\n \"flag\": \"🇲🇻\",\n \"code\": \"MV\",\n \"dial_code\": \"+960\",\n },\n {\n \"name\": \"Mali\",\n \"flag\": \"🇲🇱\",\n \"code\": \"ML\",\n \"dial_code\": \"+223\",\n },\n {\n \"name\": \"Malta\",\n \"flag\": \"🇲🇹\",\n \"code\": \"MT\",\n \"dial_code\": \"+356\",\n },\n {\n \"name\": \"Marshall Islands\",\n \"flag\": \"🇲🇭\",\n \"code\": \"MH\",\n \"dial_code\": \"+692\",\n },\n {\n \"name\": \"Martinique\",\n \"flag\": \"🇲🇶\",\n \"code\": \"MQ\",\n \"dial_code\": \"+596\",\n },\n {\n \"name\": \"Mauritania\",\n \"flag\": \"🇲🇷\",\n \"code\": \"MR\",\n \"dial_code\": \"+222\",\n },\n {\n \"name\": \"Mauritius\",\n \"flag\": \"🇲🇺\",\n \"code\": \"MU\",\n \"dial_code\": \"+230\",\n },\n {\n \"name\": \"Mayotte\",\n \"flag\": \"🇾🇹\",\n \"code\": \"YT\",\n \"dial_code\": \"+262\",\n },\n {\n \"name\": \"Mexico\",\n \"flag\": \"🇲🇽\",\n \"code\": \"MX\",\n \"dial_code\": \"+52\",\n },\n {\n \"name\": \"Micronesia, Federated States of Micronesia\",\n \"flag\": \"🇫🇲\",\n \"code\": \"FM\",\n \"dial_code\": \"+691\",\n },\n {\n \"name\": \"Moldova\",\n \"flag\": \"🇲🇩\",\n \"code\": \"MD\",\n \"dial_code\": \"+373\",\n },\n {\n \"name\": \"Monaco\",\n \"flag\": \"🇲🇨\",\n \"code\": \"MC\",\n \"dial_code\": \"+377\",\n },\n {\n \"name\": \"Mongolia\",\n \"flag\": \"🇲🇳\",\n \"code\": \"MN\",\n \"dial_code\": \"+976\",\n },\n {\n \"name\": \"Montenegro\",\n \"flag\": \"🇲🇪\",\n \"code\": \"ME\",\n \"dial_code\": \"+382\",\n },\n {\n \"name\": \"Montserrat\",\n \"flag\": \"🇲🇸\",\n \"code\": \"MS\",\n \"dial_code\": \"+1664\",\n },\n {\n \"name\": \"Morocco\",\n \"flag\": \"🇲🇦\",\n \"code\": \"MA\",\n \"dial_code\": \"+212\",\n },\n {\n \"name\": \"Mozambique\",\n \"flag\": \"🇲🇿\",\n \"code\": \"MZ\",\n \"dial_code\": \"+258\",\n },\n {\n \"name\": \"Myanmar\",\n \"flag\": \"🇲🇲\",\n \"code\": \"MM\",\n \"dial_code\": \"+95\",\n },\n {\n \"name\": \"Namibia\",\n \"flag\": \"🇳🇦\",\n \"code\": \"NA\",\n \"dial_code\": \"+264\",\n },\n {\n \"name\": \"Nauru\",\n \"flag\": \"🇳🇷\",\n \"code\": \"NR\",\n \"dial_code\": \"+674\",\n },\n {\n \"name\": \"Nepal\",\n \"flag\": \"🇳🇵\",\n \"code\": \"NP\",\n \"dial_code\": \"+977\",\n },\n {\n \"name\": \"Netherlands\",\n \"flag\": \"🇳🇱\",\n \"code\": \"NL\",\n \"dial_code\": \"+31\",\n },\n {\n \"name\": \"Netherlands Antilles\",\n \"flag\": \"\",\n \"code\": \"AN\",\n \"dial_code\": \"+599\",\n },\n {\n \"name\": \"New Caledonia\",\n \"flag\": \"🇳🇨\",\n \"code\": \"NC\",\n \"dial_code\": \"+687\",\n },\n {\n \"name\": \"New Zealand\",\n \"flag\": \"🇳🇿\",\n \"code\": \"NZ\",\n \"dial_code\": \"+64\",\n },\n {\n \"name\": \"Nicaragua\",\n \"flag\": \"🇳🇮\",\n \"code\": \"NI\",\n \"dial_code\": \"+505\",\n },\n {\n \"name\": \"Niger\",\n \"flag\": \"🇳🇪\",\n \"code\": \"NE\",\n \"dial_code\": \"+227\",\n },\n {\n \"name\": \"Nigeria\",\n \"flag\": \"🇳🇬\",\n \"code\": \"NG\",\n \"dial_code\": \"+234\",\n },\n {\n \"name\": \"Niue\",\n \"flag\": \"🇳🇺\",\n \"code\": \"NU\",\n \"dial_code\": \"+683\",\n },\n {\n \"name\": \"Norfolk Island\",\n \"flag\": \"🇳🇫\",\n \"code\": \"NF\",\n \"dial_code\": \"+672\",\n },\n {\n \"name\": \"Northern Mariana Islands\",\n \"flag\": \"🇲🇵\",\n \"code\": \"MP\",\n \"dial_code\": \"+1670\",\n },\n {\n \"name\": \"Norway\",\n \"flag\": \"🇳🇴\",\n \"code\": \"NO\",\n \"dial_code\": \"+47\",\n },\n {\n \"name\": \"Oman\",\n \"flag\": \"🇴🇲\",\n \"code\": \"OM\",\n \"dial_code\": \"+968\",\n },\n {\n \"name\": \"Pakistan\",\n \"flag\": \"🇵🇰\",\n \"code\": \"PK\",\n \"dial_code\": \"+92\",\n },\n {\n \"name\": \"Palau\",\n \"flag\": \"🇵🇼\",\n \"code\": \"PW\",\n \"dial_code\": \"+680\",\n },\n {\n \"name\": \"Palestinian Territory, Occupied\",\n \"flag\": \"🇵🇸\",\n \"code\": \"PS\",\n \"dial_code\": \"+970\",\n },\n {\n \"name\": \"Panama\",\n \"flag\": \"🇵🇦\",\n \"code\": \"PA\",\n \"dial_code\": \"+507\",\n },\n {\n \"name\": \"Papua New Guinea\",\n \"flag\": \"🇵🇬\",\n \"code\": \"PG\",\n \"dial_code\": \"+675\",\n },\n {\n \"name\": \"Paraguay\",\n \"flag\": \"🇵🇾\",\n \"code\": \"PY\",\n \"dial_code\": \"+595\",\n },\n {\n \"name\": \"Peru\",\n \"flag\": \"🇵🇪\",\n \"code\": \"PE\",\n \"dial_code\": \"+51\",\n },\n {\n \"name\": \"Philippines\",\n \"flag\": \"🇵🇭\",\n \"code\": \"PH\",\n \"dial_code\": \"+63\",\n },\n {\n \"name\": \"Pitcairn\",\n \"flag\": \"🇵🇳\",\n \"code\": \"PN\",\n \"dial_code\": \"+64\",\n },\n {\n \"name\": \"Poland\",\n \"flag\": \"🇵🇱\",\n \"code\": \"PL\",\n \"dial_code\": \"+48\",\n },\n {\n \"name\": \"Portugal\",\n \"flag\": \"🇵🇹\",\n \"code\": \"PT\",\n \"dial_code\": \"+351\",\n },\n {\n \"name\": \"Puerto Rico\",\n \"flag\": \"🇵🇷\",\n \"code\": \"PR\",\n \"dial_code\": \"+1939\",\n },\n {\n \"name\": \"Qatar\",\n \"flag\": \"🇶🇦\",\n \"code\": \"QA\",\n \"dial_code\": \"+974\",\n },\n {\n \"name\": \"Romania\",\n \"flag\": \"🇷🇴\",\n \"code\": \"RO\",\n \"dial_code\": \"+40\",\n },\n {\n \"name\": \"Russia\",\n \"flag\": \"🇷🇺\",\n \"code\": \"RU\",\n \"dial_code\": \"+7\",\n },\n {\n \"name\": \"Rwanda\",\n \"flag\": \"🇷🇼\",\n \"code\": \"RW\",\n \"dial_code\": \"+250\",\n },\n {\n \"name\": \"Reunion\",\n \"flag\": \"🇷🇪\",\n \"code\": \"RE\",\n \"dial_code\": \"+262\",\n },\n {\n \"name\": \"Saint Barthelemy\",\n \"flag\": \"🇧🇱\",\n \"code\": \"BL\",\n \"dial_code\": \"+590\",\n },\n {\n \"name\": \"Saint Helena, Ascension and Tristan Da Cunha\",\n \"flag\": \"🇸🇭\",\n \"code\": \"SH\",\n \"dial_code\": \"+290\",\n },\n {\n \"name\": \"Saint Kitts and Nevis\",\n \"flag\": \"🇰🇳\",\n \"code\": \"KN\",\n \"dial_code\": \"+1869\",\n },\n {\n \"name\": \"Saint Lucia\",\n \"flag\": \"🇱🇨\",\n \"code\": \"LC\",\n \"dial_code\": \"+1758\",\n },\n {\n \"name\": \"Saint Martin\",\n \"flag\": \"🇲🇫\",\n \"code\": \"MF\",\n \"dial_code\": \"+590\",\n },\n {\n \"name\": \"Saint Pierre and Miquelon\",\n \"flag\": \"🇵🇲\",\n \"code\": \"PM\",\n \"dial_code\": \"+508\",\n },\n {\n \"name\": \"Saint Vincent and the Grenadines\",\n \"flag\": \"🇻🇨\",\n \"code\": \"VC\",\n \"dial_code\": \"+1784\",\n },\n {\n \"name\": \"Samoa\",\n \"flag\": \"🇼🇸\",\n \"code\": \"WS\",\n \"dial_code\": \"+685\",\n },\n {\n \"name\": \"San Marino\",\n \"flag\": \"🇸🇲\",\n \"code\": \"SM\",\n \"dial_code\": \"+378\",\n },\n {\n \"name\": \"Sao Tome and Principe\",\n \"flag\": \"🇸🇹\",\n \"code\": \"ST\",\n \"dial_code\": \"+239\",\n },\n {\n \"name\": \"Saudi Arabia\",\n \"flag\": \"🇸🇦\",\n \"code\": \"SA\",\n \"dial_code\": \"+966\",\n },\n {\n \"name\": \"Senegal\",\n \"flag\": \"🇸🇳\",\n \"code\": \"SN\",\n \"dial_code\": \"+221\",\n },\n {\n \"name\": \"Serbia\",\n \"flag\": \"🇷🇸\",\n \"code\": \"RS\",\n \"dial_code\": \"+381\",\n },\n {\n \"name\": \"Seychelles\",\n \"flag\": \"🇸🇨\",\n \"code\": \"SC\",\n \"dial_code\": \"+248\",\n },\n {\n \"name\": \"Sierra Leone\",\n \"flag\": \"🇸🇱\",\n \"code\": \"SL\",\n \"dial_code\": \"+232\",\n },\n {\n \"name\": \"Singapore\",\n \"flag\": \"🇸🇬\",\n \"code\": \"SG\",\n \"dial_code\": \"+65\",\n },\n {\n \"name\": \"Slovakia\",\n \"flag\": \"🇸🇰\",\n \"code\": \"SK\",\n \"dial_code\": \"+421\",\n },\n {\n \"name\": \"Slovenia\",\n \"flag\": \"🇸🇮\",\n \"code\": \"SI\",\n \"dial_code\": \"+386\",\n },\n {\n \"name\": \"Solomon Islands\",\n \"flag\": \"🇸🇧\",\n \"code\": \"SB\",\n \"dial_code\": \"+677\",\n },\n {\n \"name\": \"Somalia\",\n \"flag\": \"🇸🇴\",\n \"code\": \"SO\",\n \"dial_code\": \"+252\",\n },\n {\n \"name\": \"South Africa\",\n \"flag\": \"🇿🇦\",\n \"code\": \"ZA\",\n \"dial_code\": \"+27\",\n },\n {\n \"name\": \"South Sudan\",\n \"flag\": \"🇸🇸\",\n \"code\": \"SS\",\n \"dial_code\": \"+211\",\n },\n {\n \"name\": \"South Georgia and the South Sandwich Islands\",\n \"flag\": \"🇬🇸\",\n \"code\": \"GS\",\n \"dial_code\": \"+500\",\n },\n {\n \"name\": \"Spain\",\n \"flag\": \"🇪🇸\",\n \"code\": \"ES\",\n \"dial_code\": \"+34\",\n },\n {\n \"name\": \"Sri Lanka\",\n \"flag\": \"🇱🇰\",\n \"code\": \"LK\",\n \"dial_code\": \"+94\",\n },\n {\n \"name\": \"Sudan\",\n \"flag\": \"🇸🇩\",\n \"code\": \"SD\",\n \"dial_code\": \"+249\",\n },\n {\n \"name\": \"Suriname\",\n \"flag\": \"🇸🇷\",\n \"code\": \"SR\",\n \"dial_code\": \"+597\",\n },\n {\n \"name\": \"Svalbard and Jan Mayen\",\n \"flag\": \"🇸🇯\",\n \"code\": \"SJ\",\n \"dial_code\": \"+47\",\n },\n {\n \"name\": \"Swaziland\",\n \"flag\": \"🇸🇿\",\n \"code\": \"SZ\",\n \"dial_code\": \"+268\",\n },\n {\n \"name\": \"Sweden\",\n \"flag\": \"🇸🇪\",\n \"code\": \"SE\",\n \"dial_code\": \"+46\",\n },\n {\n \"name\": \"Switzerland\",\n \"flag\": \"🇨🇭\",\n \"code\": \"CH\",\n \"dial_code\": \"+41\",\n },\n {\n \"name\": \"Syrian Arab Republic\",\n \"flag\": \"🇸🇾\",\n \"code\": \"SY\",\n \"dial_code\": \"+963\",\n },\n {\n \"name\": \"Taiwan\",\n \"flag\": \"🇹🇼\",\n \"code\": \"TW\",\n \"dial_code\": \"+886\",\n },\n {\n \"name\": \"Tajikistan\",\n \"flag\": \"🇹🇯\",\n \"code\": \"TJ\",\n \"dial_code\": \"+992\",\n },\n {\n \"name\": \"Tanzania, United Republic of Tanzania\",\n \"flag\": \"🇹🇿\",\n \"code\": \"TZ\",\n \"dial_code\": \"+255\",\n },\n {\n \"name\": \"Thailand\",\n \"flag\": \"🇹🇭\",\n \"code\": \"TH\",\n \"dial_code\": \"+66\",\n },\n {\n \"name\": \"Timor-Leste\",\n \"flag\": \"🇹🇱\",\n \"code\": \"TL\",\n \"dial_code\": \"+670\",\n },\n {\n \"name\": \"Togo\",\n \"flag\": \"🇹🇬\",\n \"code\": \"TG\",\n \"dial_code\": \"+228\",\n },\n {\n \"name\": \"Tokelau\",\n \"flag\": \"🇹🇰\",\n \"code\": \"TK\",\n \"dial_code\": \"+690\",\n },\n {\n \"name\": \"Tonga\",\n \"flag\": \"🇹🇴\",\n \"code\": \"TO\",\n \"dial_code\": \"+676\",\n },\n {\n \"name\": \"Trinidad and Tobago\",\n \"flag\": \"🇹🇹\",\n \"code\": \"TT\",\n \"dial_code\": \"+1868\",\n },\n {\n \"name\": \"Tunisia\",\n \"flag\": \"🇹🇳\",\n \"code\": \"TN\",\n \"dial_code\": \"+216\",\n },\n {\n \"name\": \"Turkey\",\n \"flag\": \"🇹🇷\",\n \"code\": \"TR\",\n \"dial_code\": \"+90\",\n },\n {\n \"name\": \"Turkmenistan\",\n \"flag\": \"🇹🇲\",\n \"code\": \"TM\",\n \"dial_code\": \"+993\",\n },\n {\n \"name\": \"Turks and Caicos Islands\",\n \"flag\": \"🇹🇨\",\n \"code\": \"TC\",\n \"dial_code\": \"+1649\",\n },\n {\n \"name\": \"Tuvalu\",\n \"flag\": \"🇹🇻\",\n \"code\": \"TV\",\n \"dial_code\": \"+688\",\n },\n {\n \"name\": \"Uganda\",\n \"flag\": \"🇺🇬\",\n \"code\": \"UG\",\n \"dial_code\": \"+256\",\n },\n {\n \"name\": \"Ukraine\",\n \"flag\": \"🇺🇦\",\n \"code\": \"UA\",\n \"dial_code\": \"+380\",\n },\n {\n \"name\": \"United Arab Emirates\",\n \"flag\": \"🇦🇪\",\n \"code\": \"AE\",\n \"dial_code\": \"+971\",\n },\n {\n \"name\": \"United Kingdom\",\n \"flag\": \"🇬🇧\",\n \"code\": \"GB\",\n \"dial_code\": \"+44\",\n },\n {\n \"name\": \"United States\",\n \"flag\": \"🇺🇸\",\n \"code\": \"US\",\n \"dial_code\": \"+1\",\n },\n {\n \"name\": \"Uruguay\",\n \"flag\": \"🇺🇾\",\n \"code\": \"UY\",\n \"dial_code\": \"+598\",\n },\n {\n \"name\": \"Uzbekistan\",\n \"flag\": \"🇺🇿\",\n \"code\": \"UZ\",\n \"dial_code\": \"+998\",\n },\n {\n \"name\": \"Vanuatu\",\n \"flag\": \"🇻🇺\",\n \"code\": \"VU\",\n \"dial_code\": \"+678\",\n },\n {\n \"name\": \"Venezuela, Bolivarian Republic of Venezuela\",\n \"flag\": \"🇻🇪\",\n \"code\": \"VE\",\n \"dial_code\": \"+58\",\n },\n {\n \"name\": \"Vietnam\",\n \"flag\": \"🇻🇳\",\n \"code\": \"VN\",\n \"dial_code\": \"+84\",\n },\n {\n \"name\": \"Virgin Islands, British\",\n \"flag\": \"🇻🇬\",\n \"code\": \"VG\",\n \"dial_code\": \"+1284\",\n },\n {\n \"name\": \"Virgin Islands, U.S.\",\n \"flag\": \"🇻🇮\",\n \"code\": \"VI\",\n \"dial_code\": \"+1340\",\n },\n {\n \"name\": \"Wallis and Futuna\",\n \"flag\": \"🇼🇫\",\n \"code\": \"WF\",\n \"dial_code\": \"+681\",\n },\n {\n \"name\": \"Yemen\",\n \"flag\": \"🇾🇪\",\n \"code\": \"YE\",\n \"dial_code\": \"+967\",\n },\n {\n \"name\": \"Zambia\",\n \"flag\": \"🇿🇲\",\n \"code\": \"ZM\",\n \"dial_code\": \"+260\",\n },\n {\n \"name\": \"Zimbabwe\",\n \"flag\": \"🇿🇼\",\n \"code\": \"ZW\",\n \"dial_code\": \"+263\",\n },\n];\n\nexport default data;\n","import React, {useContext, useMemo} from 'react';\nimport {Text, TouchableOpacity, StyleSheet, ActivityIndicator} from 'react-native';\nimport {ThemeContext} from '../contexts/ThemeContext';\n\nconst StyledButton = ({\n text,\n disabled,\n loading,\n onPress,\n variant = 'regular',\n fontSize = 16,\n style,\n ...props\n}) => {\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme), [theme]);\n\n return (\n \n {loading\n ? \n : {text}}\n \n );\n};\n\nconst getStyles = theme => StyleSheet.create({\n button: {\n paddingVertical: 10,\n paddingHorizontal: 20,\n borderRadius: 15,\n textAlign: 'center',\n alignItems: 'center',\n },\n regular: {\n backgroundColor: theme.colorPrimary,\n },\n outlined: {\n borderColor: theme.colorPrimary,\n borderWidth: 1,\n },\n outlinedSecondary: {\n borderColor: theme.textSecondary,\n borderWidth: 1,\n },\n outlinedError: {\n borderColor: theme.error,\n borderWidth: 1,\n },\n textButtonPrimary: {},\n textButtonSecondary: {},\n textButtonError: {},\n regularText: {\n color: theme.buttonText,\n },\n outlinedText: {\n color: theme.colorPrimary,\n },\n outlinedSecondaryText: {\n color: theme.textPrimary,\n },\n outlinedErrorText: {\n color: theme.error,\n },\n textButtonPrimaryText: {\n color: theme.colorPrimary,\n },\n textButtonSecondaryText: {\n color: theme.textSecondary,\n },\n textButtonErrorText: {\n color: theme.error,\n },\n});\n\nexport default StyledButton;\n","import * as React from 'react';\n\nexport const RoomContext = React.createContext({\n room: null,\n});\n","export const DEVICE_TYPE_LABELS = ['unknown', 'phone', 'tablet', 'desktop', 'tv'];\n","import * as React from 'react';\n\nexport const UserContext = React.createContext({\n isLoggedIn: false,\n user: null,\n userId: null,\n userToken: null,\n deviceToken: null,\n setUserId: () => {},\n setUserToken: () => {},\n setDeviceToken: () => {},\n setUser: () => {},\n signOut: () => {},\n});\n","import React, {useContext, useMemo} from 'react';\nimport {View, Text, TextInput, StyleSheet} from 'react-native';\n\nimport {ThemeContext} from '../contexts/ThemeContext';\n\nconst StyledInput = ({style, inputStyle, errors, ...props}) => {\n const theme = useContext(ThemeContext);\n const textInputStyle = useMemo(() => getStyles(theme), [theme]);\n\n return (\n \n \n\n {(errors || []).map(error => (\n \n {error}\n \n ))}\n \n );\n};\n\nconst getStyles = theme => StyleSheet.create({\n inputContainer: {\n justifyContent: 'center',\n width: '100%',\n height: 45,\n paddingHorizontal: 10,\n backgroundColor: theme.inputBackgroundColor,\n borderRadius: 15,\n borderWidth: 1,\n borderColor: theme.inputBorderColor,\n },\n input: {\n width: '100%',\n fontSize: 16,\n color: theme.textPrimary,\n },\n});\n\nexport default StyledInput;\n","import React, {useCallback, useContext, useEffect, useMemo, useState} from 'react';\nimport {\n View,\n Text,\n Modal,\n FlatList,\n StyleSheet,\n SafeAreaView,\n KeyboardAvoidingView,\n Platform,\n TouchableOpacity,\n Keyboard,\n Dimensions,\n TouchableWithoutFeedback,\n} from 'react-native';\n\nimport {useTranslation} from 'react-i18next';\nimport {FontAwesome} from '@expo/vector-icons';\n\nimport {ThemeContext, WEB_MAX_WIDTH} from '../contexts/ThemeContext';\n\nimport StyledInput from './StyledInput';\nimport StyledButton from './StyledButton';\n\nconst SearchModal = ({\n data,\n open,\n close,\n onClick,\n getText = item => item.name,\n}) => {\n const {t} = useTranslation();\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme), [theme]);\n\n const [searchText, setSearchText] = useState('');\n\n useEffect(() => {\n setSearchText('');\n }, [open]);\n\n const onChangeText = useCallback(value => setSearchText(value), [setSearchText]);\n\n const handleClick = useCallback(item => () => {\n onClick(item);\n close();\n }, [onClick, close]);\n\n const filteredList = useMemo(() => {\n return data.filter(({name}) => name.toLowerCase().includes(searchText.toLowerCase()));\n }, [data, searchText]);\n\n return (\n \n \n \n \n \n \n \n \n \n \n\n item.code}\n renderItem={({item}) => (\n \n \n \n {item.flag}\n \n\n \n {getText(item)}\n \n \n \n )}\n />\n \n\n \n \n \n \n \n \n \n );\n};\n\nconst getStyles = theme => StyleSheet.create({\n container: {\n flex: 1,\n backgroundColor: theme.backgroundPrimary,\n alignItems: 'center',\n },\n countryStyle: {\n flex: 1,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n borderTopColor: theme.headerBorderColor,\n borderTopWidth: 1,\n paddingHorizontal: 20,\n },\n text: {\n fontSize: 16,\n color: theme.textPrimary,\n },\n closeContainer: {\n padding: 16,\n borderTopColor: theme.footerBorderColor,\n borderTopWidth: 1,\n },\n});\n\nexport default SearchModal;\n","import {Platform} from 'react-native';\nimport * as Linking from 'expo-linking';\n\nconst openLink = url => {\n\tif (Platform.OS === 'web') {\n\t\twindow.open(url,'_blank');\n\t} else {\n\t\tLinking.openURL(url);\n\t}\n};\n\nexport default openLink;\n","import React, {useState, useCallback, useContext, useMemo} from 'react';\n\nimport {\n Alert,\n Keyboard,\n View,\n Text,\n StyleSheet,\n TextInput,\n TouchableWithoutFeedback,\n TouchableOpacity,\n Platform,\n} from 'react-native';\nimport {Trans, useTranslation} from 'react-i18next';\nimport Constants from 'expo-constants';\nimport * as Device from 'expo-device';\nimport * as Localization from 'expo-localization';\nimport * as Sentry from 'sentry-expo';\nimport {FontAwesome} from '@expo/vector-icons';\nimport AsyncStorage from '@react-native-async-storage/async-storage';\n\nimport Api from '../../../constants/Api';\nimport {DEVICE_TYPE_LABELS} from '../../../constants/device';\nimport {ThemeContext} from '../../../contexts/ThemeContext';\nimport {UserContext} from '../../../contexts/UserContext';\nimport {RoomContext} from '../../../contexts/RoomContext';\nimport countries from '../../../assets/countries';\nimport SearchModal from '../../../components/SearchModal';\nimport StyledButton from '../../../components/StyledButton';\nimport openLink from '../../../utils/openLink';\nimport StyledInput from '../../../components/StyledInput';\n\nconst SignupForm = ({\n country,\n setCountry,\n status,\n setStatus,\n phoneNumber,\n setPhoneNumber,\n email,\n setEmail,\n signupWithPhone,\n setSignupWithPhone,\n}) => {\n const {t} = useTranslation();\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme), [theme]);\n const {user, deviceToken, setUser, setUserId, setUserToken} = useContext(UserContext);\n const {room} = useContext(RoomContext);\n\n const [errors, setErrors] = useState({});\n\n const [countryModalOpen, setCountryModalOpen] = useState(false);\n const [signingUpAsGuest, setSigningUpAsGuest] = useState(false);\n\n const openCountryModal = useCallback(() => {\n setCountryModalOpen(true);\n }, [setCountryModalOpen]);\n\n const closeCountryModal = useCallback(() => {\n setCountryModalOpen(false);\n }, [setCountryModalOpen]);\n\n const handleEmailSignupPress = async () => {\n try {\n setStatus('sending');\n setErrors({});\n\n const response = await fetch(`${Api.apiBaseUrl}/api/signup`, {\n method: 'POST',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n email: email,\n expo_installation_id: Constants.installationId,\n expo_session_id: Constants.sessionId,\n }),\n });\n\n const responseJson = await response.json();\n\n console.log('************ response ************');\n console.log(responseJson);\n\n if (responseJson.status === 'ok') {\n setStatus('sent');\n } else {\n setErrors(responseJson);\n setStatus('initial');\n }\n } catch (error) {\n console.error(error);\n setStatus('error');\n\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n }\n };\n\n const handlePhoneSignupPress = async () => {\n if (phoneNumber === '') {\n if (Platform.OS === 'web') {\n window.alert(t('SignupScreen.signup.alerts.missingPhoneNumber.message', 'Please enter your phone number.'));\n } else {\n Alert.alert(\n t('SignupScreen.signup.alerts.missingPhoneNumber.title', 'Phone Number'),\n t('SignupScreen.signup.alerts.missingPhoneNumber.message', 'Please enter your phone number.'),\n );\n }\n } else if (country.dial_code === '+1' && phoneNumber.startsWith('+1')) {\n if (Platform.OS === 'web') {\n window.alert(t('SignupScreen.signup.alerts.noAmericanNumber.message', 'American and Canadian phone numbers are not currently supported.'));\n } else {\n Alert.alert(\n t('SignupScreen.signup.alerts.noAmericanNumber.title', 'Unsupported phone number'),\n t('SignupScreen.signup.alerts.noAmericanNumber.message', 'American and Canadian phone numbers are not currently supported.'),\n );\n }\n } else if (!phoneNumber.match(/^\\+[0-9]+$/) && !phoneNumber.match(/^[0-9]+$/)) {\n if (Platform.OS === 'web') {\n window.alert(t('SignupScreen.signup.alerts.onlyDigits.message', 'Please enter digits only.'));\n } else {\n Alert.alert(\n t('SignupScreen.signup.alerts.onlyDigits.title', 'Phone Number'),\n t('SignupScreen.signup.alerts.onlyDigits.message', 'Please enter digits only.'),\n );\n }\n } else {\n setStatus('sending');\n\n try {\n const response = await fetch(`${Api.apiBaseUrl}/api/signup`, {\n method: 'POST',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n phone_number: phoneNumber,\n expo_installation_id: Constants.installationId,\n expo_session_id: Constants.sessionId,\n }),\n });\n\n const responseJson = await response.json();\n\n console.log('************ response ************');\n console.log(responseJson);\n\n if (responseJson.status === 'ok') {\n setStatus('sent');\n } else {\n setStatus('error');\n }\n } catch (error) {\n console.error(error);\n setStatus('error');\n\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n }\n }\n };\n\n const _storeToken = async (userId, userToken) => {\n try {\n await AsyncStorage.setItem('userId', userId);\n await AsyncStorage.setItem('userToken', userToken);\n\n setUserId(userId);\n setUserToken(userToken);\n } catch (error) {\n console.error(error);\n\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n }\n };\n\n const handleSignupAsGuestPress = async () => {\n setSigningUpAsGuest(true);\n\n try {\n const deviceType = await Device.getDeviceTypeAsync();\n\n const response = await fetch(`${Api.apiBaseUrl}/api/signup_as_guest`, {\n method: 'POST',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n room: Api.roomSlug,\n device_token: deviceToken,\n\n language: Localization.getLocales()[0].languageTag,\n country_code: Localization.getLocales()[0].regionCode,\n timezone: Localization.timezone,\n\n device_type: DEVICE_TYPE_LABELS[deviceType] || 'UNKNOWN',\n device_model_name: Device.modelName,\n brand: Device.brand, // Android: \"google\", \"xiaomi\"; iOS: \"Apple\"; web: null\n manufacturer: Device.manufacturer, // Android: \"Google\", \"xiaomi\"; iOS: \"Apple\"; web: \"Google\", null\n os_name: Platform.OS,\n os_version: Device.osVersion,\n name: Device.deviceName, // \"Vivian's iPhone XS\"\n }),\n });\n\n const responseJson = await response.json();\n\n console.log('************ response ************');\n console.log(responseJson);\n\n if (responseJson.status === 'ok') {\n const userResponse = await fetch(\n `${Api.apiBaseUrl}/users/${responseJson.user_id}.json?user_token=${responseJson.user_token}${Api.roomSlug ? `&room=${Api.roomSlug}` : ''}`,\n {\n method: 'GET',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n }\n );\n\n const userResponseJson = await userResponse.json();\n\n console.log('userResponseJson');\n console.log(userResponseJson);\n\n if(userResponseJson && userResponseJson.id) {\n console.log('fetchUser OK');\n\n setUser(userResponseJson);\n }\n\n _storeToken(responseJson.user_id, responseJson.user_token);\n } else {\n setStatus('error');\n }\n\n setSigningUpAsGuest(false);\n } catch (error) {\n console.error(error);\n setSigningUpAsGuest(false);\n\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n }\n };\n\n if (room) {\n return (\n <>\n \n\n \n \n {'By continuing, you accept our '}\n openLink('https://www.secretaire.ai/terms')}>\n Terms of Service\n \n {' and our '}\n openLink('https://www.secretaire.ai/terms')}>\n Privacy Notice\n \n .\n \n \n \n );\n }\n\n return (\n \n \n \n {signupWithPhone\n ? t('SignupScreen.signup.phone.title', 'Enter your phone number :')\n : t('SignupScreen.signup.email.title', 'Enter your email address :')\n }\n \n\n {signupWithPhone\n ? (\n \n \n\n {\n if (Platform.OS !== 'web') {\n Keyboard.dismiss();\n }\n openCountryModal();\n }}\n accessible={false}\n >\n \n {country.flag}\n \n\n \n \n\n {\n if (Platform.OS !== 'web') {\n Keyboard.dismiss();\n }\n }}\n >\n {\n const phoneNumberRegex = new RegExp(`^\\\\${country.dial_code}0+`);\n\n if (phoneNumber === '') {\n setPhoneNumber(country.dial_code + val.replace(phoneNumberRegex, country.dial_code));\n } else {\n setPhoneNumber(val.replace(phoneNumberRegex, country.dial_code));\n }}\n }\n />\n \n\n {\n setPhoneNumber(item.dial_code);\n setCountry(item);\n }}\n getText={item => `${item.name} (${item.dial_code})`}\n />\n \n )\n : (\n\n {\n setEmail(val);\n }}\n errors={errors.email_address}\n onKeyPress={event => {\n if (event.nativeEvent.key === 'Enter') {\n handleEmailSignupPress();\n }\n }}\n autoFocus={Platform.OS === 'web'}\n />\n )\n }\n\n \n\n setSignupWithPhone(!signupWithPhone)}\n />\n\n \n \n {'By continuing, you accept our '}\n openLink('https://www.secretaire.ai/terms')}>\n Terms of Service\n \n {' and our '}\n openLink('https://www.secretaire.ai/terms')}>\n Privacy Notice\n \n .\n \n \n \n\n {(!user && (Platform.OS !== 'web' || Api.roomSlug) && (\n \n ))}\n \n );\n};\n\n// TODO: Refactor styles with the other component\nconst getStyles = theme => StyleSheet.create({\n container: {\n marginTop: 10,\n marginBottom: 10,\n flex: 1,\n justifyContent: 'space-between',\n },\n subtitle: {\n fontSize: 16,\n lineHeight: 24,\n textAlign: 'center',\n maxWidth: 400,\n color: theme.textPrimary,\n },\n inputContainer: {\n flexDirection: 'row',\n maxWidth: 320,\n marginTop: 15,\n marginBottom: 25,\n padding: 10,\n borderRadius: 50,\n backgroundColor: theme.inputBackgroundColor,\n borderColor: theme.inputBorderColor,\n },\n iconStyle: {\n color: theme.colorSecondary,\n marginTop: 5,\n marginBottom: 0,\n },\n flag: {\n fontSize: 28,\n marginLeft: 5,\n marginRight: 5,\n },\n input: {\n flex: 1,\n fontSize: 16,\n fontWeight: 'bold',\n color: theme.textPrimary,\n },\n button: {\n paddingVertical: 15,\n paddingHorizontal: 80,\n // marginBottom: 30,\n },\n legalText: {\n color: theme.textSecondary,\n fontSize: 13,\n textAlign: 'center',\n maxWidth: 300,\n },\n hyperlinkStyle: {\n color: theme.link,\n },\n});\n\nexport default SignupForm;\n","import React, {useState, useContext, useMemo} from 'react';\n\nimport {\n View,\n Text,\n StyleSheet,\n TextInput,\n TouchableOpacity,\n Platform,\n} from 'react-native';\nimport Constants from 'expo-constants';\nimport AsyncStorage from '@react-native-async-storage/async-storage';\nimport {useTranslation} from 'react-i18next';\nimport * as Device from 'expo-device';\nimport * as Localization from 'expo-localization';\nimport * as Sentry from 'sentry-expo';\n\nimport Api from '../../../constants/Api';\nimport {DEVICE_TYPE_LABELS} from '../../../constants/device';\nimport {ThemeContext} from '../../../contexts/ThemeContext';\nimport {UserContext} from '../../../contexts/UserContext';\nimport StyledButton from '../../../components/StyledButton';\n\nconst ConfirmForm = ({setStatus, phoneNumber, email, signupWithPhone}) => {\n const {t} = useTranslation();\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme), [theme]);\n const {user, userToken, deviceToken, setUser, setUserId, setUserToken} = useContext(UserContext);\n\n const [confirmationCode, setConfirmationCode] = useState('');\n const [loading, setLoading] = useState(false);\n\n const handleConfirmPress = async () => {\n if (confirmationCode === '') {\n alert(t('SignupScreen.confirm.alerts.invalidConfirmationCode.message', 'Invalid confirmation code.'));\n } else {\n try {\n setLoading(true);\n\n const deviceType = await Device.getDeviceTypeAsync();\n\n let response = await fetch(`${Api.apiBaseUrl}/api/confirm`, {\n method: 'POST',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n // Note: upgrade and user_token are used to upgrade guest accounts\n upgrade: !!user,\n user_token: userToken,\n\n ...(signupWithPhone\n ? {phone_number: phoneNumber}\n : {email: email}),\n confirmation_code: confirmationCode,\n expo_installation_id: Constants.installationId,\n\n country_code: Localization.getLocales()[0].regionCode,\n timezone: Localization.timezone,\n\n device_token: deviceToken,\n\n device_type: DEVICE_TYPE_LABELS[deviceType] || 'UNKNOWN',\n device_model_name: Device.modelName,\n brand: Device.brand, // Android: \"google\", \"xiaomi\"; iOS: \"Apple\"; web: null\n manufacturer: Device.manufacturer, // Android: \"Google\", \"xiaomi\"; iOS: \"Apple\"; web: \"Google\", null\n os_name: Platform.OS,\n os_version: Device.osVersion,\n name: Device.deviceName, // \"Vivian's iPhone XS\"\n }),\n });\n let responseJson = await response.json();\n\n console.log('****** response ******');\n console.log(responseJson);\n\n if (responseJson.status === 'ok') {\n const userResponse = await fetch(\n `${Api.apiBaseUrl}/users/${responseJson.user_id}.json?user_token=${responseJson.user_token}${Api.roomSlug ? `&room=${Api.roomSlug}` : ''}`,\n {\n method: 'GET',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n }\n );\n\n const userResponseJson = await userResponse.json();\n\n console.log('userResponseJson');\n console.log(userResponseJson);\n\n if(userResponseJson && userResponseJson.id) {\n console.log('fetchUser OK');\n\n setUser(userResponseJson);\n }\n\n _storeToken(responseJson.user_id, responseJson.user_token);\n setLoading(false);\n } else {\n alert(t('SignupScreen.confirm.alerts.invalidConfirmationCode.message', 'Invalid confirmation code.'));\n setLoading(false);\n }\n } catch (error) {\n console.error(error);\n setStatus('error');\n setLoading(false);\n\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n }\n }\n };\n\n const handleCancelPress = () => {\n setStatus('initial');\n setConfirmationCode('');\n };\n\n const _storeToken = async (userId, userToken) => {\n try {\n await AsyncStorage.setItem('userId', userId);\n await AsyncStorage.setItem('userToken', userToken);\n\n setUserId(userId);\n setUserToken(userToken);\n } catch (error) {\n console.error(error);\n\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n }\n };\n\n return (\n \n \n {signupWithPhone\n ? t('SignupScreen.confirm.phone.title', 'Please enter the confirmation code that was just sent to {{phoneNumber}}.', {phoneNumber})\n : t('SignupScreen.confirm.email.title', 'Please enter the confirmation code that was just sent to {{email}}.', {email})\n }\n \n\n \n setConfirmationCode(val)}\n onKeyPress={event => {\n if (event.nativeEvent.key === 'Enter') {\n handleConfirmPress();\n }\n }}\n autoFocus\n />\n \n\n \n\n \n \n {t('SignupScreen.confirm.buttons.cancel.text', 'Cancel')}\n \n \n \n );\n};\n\n// TODO: Refactor styles with the other component\nconst getStyles = theme => StyleSheet.create({\n container: {\n alignItems: 'center',\n marginTop: 10,\n marginBottom: 10,\n },\n subtitle: {\n fontSize: 16,\n lineHeight: 24,\n textAlign: 'center',\n maxWidth: 400,\n color: theme.textPrimary,\n },\n inputContainer: {\n flexDirection: 'row',\n maxWidth: 320,\n marginTop: 15,\n marginBottom: 25,\n padding: 10,\n borderRadius: 50,\n backgroundColor: theme.inputBackgroundColor, // '#f7f8fc',\n borderColor: theme.inputBorderColor, // '#f7f8fc',\n },\n input: {\n flex: 1,\n padding: 6,\n fontSize: 16,\n textAlign: 'center',\n fontWeight: 'bold',\n color: theme.textPrimary,\n },\n button: {\n paddingVertical: 15,\n paddingHorizontal: 80,\n marginBottom: 30,\n },\n cancelButtonText: {\n fontSize: 16,\n color: theme.textSecondary,\n },\n});\n\nexport default ConfirmForm;\n","import React, {useState, useContext, useEffect, useMemo} from 'react';\n\nimport {\n Image,\n Keyboard,\n View,\n Text,\n StyleSheet,\n SafeAreaView,\n KeyboardAvoidingView,\n TouchableWithoutFeedback,\n Platform,\n} from 'react-native';\nimport {useTranslation} from 'react-i18next';\nimport * as Localization from 'expo-localization';\n\nimport Api from '../../../constants/Api';\nimport {ThemeContext} from '../../../contexts/ThemeContext';\nimport countries from '../../../assets/countries';\nimport StyledButton from '../../../components/StyledButton';\nimport {RoomContext} from '../../../contexts/RoomContext';\n\nimport SignupForm from './SignupForm';\nimport ConfirmForm from './ConfirmForm';\n\nconst DEFAULT_COUNTRY = countries.find(({code}) => code === 'US');\n\nconst SignupScreen = () => {\n const {t} = useTranslation();\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme), [theme]);\n const {room} = useContext(RoomContext);\n\n const [phoneNumber, setPhoneNumber] = useState('');\n const [email, setEmail] = useState('');\n const [signupWithPhone, setSignupWithPhone] = useState(false);\n const [status, setStatus] = useState('initial');\n const [country, setCountry] = useState(DEFAULT_COUNTRY);\n\n useEffect(() => {\n const initCountry = async () => {\n let countryCode;\n let locale = Localization.locale;\n\n if (Platform.OS === 'web') {\n // eslint-disable-next-line no-undef\n if (Intl && Intl.DateTimeFormat) {\n // eslint-disable-next-line no-undef\n locale = Intl.DateTimeFormat().resolvedOptions().locale;\n }\n }\n\n const splitted = locale.split('-');\n\n countryCode = splitted.length > 1 ? splitted[1] : locale;\n\n if (countryCode) {\n setCountry(countries.find(({code}) => code === countryCode.toUpperCase()) || DEFAULT_COUNTRY);\n }\n };\n\n initCountry();\n }, []);\n\n const handleCancelPress = () => setStatus('initial');\n\n return (\n \n \n {\n if (Platform.OS !== 'web') {\n Keyboard.dismiss();\n }\n }}\n >\n \n \n \n \n \n\n \n {room && room.name ? room.name : 'Secrétaire AI'}\n \n\n {room && room.short_description && (\n \n {room.short_description}\n \n )}\n \n\n \n {(status === 'initial' || status === 'sending') && (\n \n )}\n\n {status === 'sent' && (\n \n )}\n\n {status === 'error' && (\n \n \n {t('SignupScreen.confirm.errors.text1', 'An error occurred.')}\n \n\n \n {signupWithPhone\n ? t('SignupScreen.confirm.errors.text2.phone', 'We were unable to send a confirmation code to {{phoneNumber}}.', {phoneNumber})\n : t('SignupScreen.confirm.errors.text2.email', 'We were unable to send a confirmation code to {{email}}.', {email})}\n \n\n \n {signupWithPhone\n ? t('SignupScreen.confirm.errors.text3.phone', 'Please check your phone number or try again later.')\n : t('SignupScreen.confirm.errors.text3.email', 'Please check your email address or try again later.')}\n \n\n \n \n )}\n \n \n \n \n \n );\n};\n\n// TODO: Refactor styles with the other component\nconst getStyles = theme => StyleSheet.create({\n container: {\n flex: 1,\n backgroundColor: theme.backgroundPrimary,\n },\n textContainer: {\n alignItems: 'center',\n marginTop: 10,\n marginBottom: 10,\n },\n logoContainer: {\n marginTop: 50,\n marginBottom: 20,\n padding: 10,\n borderRadius: 60,\n },\n logo: {\n width: 80,\n height: 80,\n resizeMode: 'contain',\n borderRadius: 20,\n },\n title: {\n fontSize: 22,\n fontWeight: 'bold',\n color: theme.textPrimary,\n },\n formContainer: {\n alignItems: 'center',\n paddingHorizontal: 30,\n flex: 1,\n },\n text: {\n fontSize: 16,\n color: theme.textPrimary,\n lineHeight: 24,\n textAlign: 'center',\n maxWidth: 250,\n marginBottom: 16,\n },\n button: {\n paddingVertical: 15,\n paddingHorizontal: 80,\n marginBottom: 30,\n },\n});\n\nexport default SignupScreen;\n","import React, {useContext, useMemo} from 'react';\nimport {\n ActivityIndicator,\n KeyboardAvoidingView,\n Platform,\n SafeAreaView,\n ScrollView,\n StyleSheet,\n View,\n} from 'react-native';\nimport {useHeaderHeight} from '@react-navigation/elements';\n\nimport {UserContext} from '../../../contexts/UserContext';\nimport {ThemeContext, WEB_MAX_WIDTH} from '../../../contexts/ThemeContext';\n\nconst OnboardingLayout = ({footer, children}) => {\n const {userId} = useContext(UserContext);\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme), [theme]);\n\n const height = useHeaderHeight();\n\n return (\n \n \n {userId ?\n \n \n \n {children}\n \n \n\n \n \n {footer}\n \n \n \n :\n \n \n \n }\n \n \n );\n};\n\nconst getStyles = theme => StyleSheet.create({\n safeArea: {\n flex: 1,\n backgroundColor: theme.headerBackground,\n },\n content: {\n flex: 1,\n backgroundColor: theme.backgroundPrimary,\n },\n stepImage: {\n marginBottom: 10,\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n container: {\n maxWidth: WEB_MAX_WIDTH,\n alignSelf: 'center',\n flex: 1,\n paddingTop: 20,\n paddingHorizontal: 24,\n },\n footer: {\n backgroundColor: theme.footerBackground,\n borderTopWidth: 1,\n borderTopColor: theme.footerBorderColor,\n borderStyle: 'solid',\n paddingVertical: 16,\n paddingHorizontal: 24,\n },\n footerInner: {\n width: '100%',\n maxWidth: WEB_MAX_WIDTH,\n alignSelf: 'center',\n },\n});\n\nexport default OnboardingLayout;\n","import React, {useState, useContext, useMemo} from 'react';\nimport {Platform, StyleSheet, Text, View} from 'react-native';\nimport {useTranslation} from 'react-i18next';\nimport * as Sentry from 'sentry-expo';\n\nimport {UserContext} from '../../contexts/UserContext';\nimport {ThemeContext} from '../../contexts/ThemeContext';\nimport Api from '../../constants/Api';\nimport StyledInput from '../../components/StyledInput';\nimport StyledButton from '../../components/StyledButton';\nimport OnboardingLayout from './components/OnboardingLayout';\n\nconst NameScreen = ({navigation}) => {\n const {t} = useTranslation();\n const {setUser, userId, user, userToken} = useContext(UserContext);\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme), [theme]);\n\n const [loading, setLoading] = useState(false);\n const [email, setEmail] = useState((user || {}).email && (user || {}).email.startsWith('tmp_') ? '' : (user || {}).email);\n const [firstName, setFirstName] = useState((user || {}).first_name);\n const [lastName, setLastName] = useState((user || {}).last_name);\n const [birthDateDay, setBirthDateDay] = useState((user || {}).birth_date ? user.birth_date.split('-')[2] : '');\n const [birthDateMonth, setBirthDateMonth] = useState((user || {}).birth_date ? user.birth_date.split('-')[1] : '');\n const [birthDateYear, setBirthDateYear] = useState((user || {}).birth_date ? user.birth_date.split('-')[0] : '');\n\n const [errors, setErrors] = useState({});\n\n const handlePress = async () => {\n const validationError = {};\n\n if (!firstName) {\n validationError.first_name = [t('NameScreen.errors.missingFirstName', 'Please enter your name.')];\n }\n\n if (!lastName) {\n validationError.last_name = [t('NameScreen.errors.missingLastName', 'Please enter your name.')];\n }\n\n if (!email) {\n validationError.email = [t('NameScreen.errors.missingEmail', 'Please enter your email address.')];\n }\n\n if (Object.keys(validationError).length) {\n setErrors(validationError);\n return;\n }\n\n try {\n setErrors({});\n setLoading(true);\n\n const response = await fetch(`${Api.apiBaseUrl}/users/${userId}`, {\n method: 'PATCH',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n user_token: userToken,\n first_name: firstName,\n last_name: lastName,\n email: email,\n birth_date: birthDateYear && birthDateMonth && birthDateDay ? `${birthDateYear}-${birthDateMonth}-${birthDateDay}` : undefined,\n }),\n });\n\n const responseJson = await response.json();\n\n console.log('#######responseJson');\n console.log(responseJson);\n\n setLoading(false);\n\n if(responseJson && responseJson.email === email) {\n setUser(responseJson);\n navigation.navigate('Gender', {onboarding: true});\n } else {\n setErrors(responseJson);\n }\n\n return responseJson;\n } catch (error) {\n console.error('error');\n\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n }\n };\n\n return (\n }>\n \n {t('NameScreen.form.nameLabel', 'What\\'s your name ?')}\n \n\n \n \n {\n setFirstName(val);\n }}\n errors={errors.first_name}\n />\n \n\n \n {\n setLastName(val);\n }}\n errors={errors.last_name}\n />\n \n \n\n \n {t('NameScreen.form.emailLabel', 'What is your email address ?')}\n \n\n \n {\n setEmail(val);\n }}\n errors={errors.email}\n />\n \n\n \n {t('NameScreen.form.birthDateLabel', 'When were you born ?')}\n \n\n \n \n \n {\n setBirthDateDay(val);\n }}\n />\n \n\n \n {\n setBirthDateMonth(val);\n }}\n />\n \n\n \n {\n setBirthDateYear(val);\n }}\n />\n \n \n\n \n {(errors.birth_date || []).map(error => (\n \n {error}\n \n ))}\n \n \n \n );\n};\n\nconst getStyles = theme => StyleSheet.create({\n formRow: {\n flexDirection: 'row',\n marginBottom: 16,\n },\n rowTitle: {\n textAlign: 'center',\n color: theme.textPrimary,\n fontSize: 16,\n fontWeight: 'bold',\n marginBottom: 16,\n },\n});\n\nexport default NameScreen;\n","import React, {useState, useContext, useMemo} from 'react';\nimport {Platform, StyleSheet, Text, View} from 'react-native';\nimport {useTranslation} from 'react-i18next';\nimport * as Sentry from 'sentry-expo';\n\nimport {ThemeContext} from '../../contexts/ThemeContext';\nimport {UserContext} from '../../contexts/UserContext';\nimport Api from '../../constants/Api';\nimport OnboardingLayout from './components/OnboardingLayout';\nimport StyledInput from '../../components/StyledInput';\nimport StyledButton from '../../components/StyledButton';\n\nconst UsernameScreen = ({navigation}) => {\n const {t} = useTranslation();\n const {setUser, user, userId, userToken} = useContext(UserContext);\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme), [theme]);\n\n const [loading, setLoading] = useState(false);\n const [username, setUsername] = useState((user || {}).username && (user || {}).username.startsWith('tmp_') ? '' : (user || {}).username);\n const [errorMessage, setErrorMessage] = useState(null);\n\n const handlePress = async () => {\n if (!username) {\n setErrorMessage(t('UsernameScreen.errors.missingUsername', 'Please choose a username.'));\n return;\n }\n\n try {\n setErrorMessage(null);\n setLoading(true);\n\n const response = await fetch(`${Api.apiBaseUrl}/users/${userId}`, {\n method: 'PATCH',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n user_token: userToken,\n username: username,\n ...(Platform.OS === 'web'\n ? user.status === 'guest'\n ? {has_completed_guest_onboarding: true}\n : {has_completed_onboarding: true}\n : {}\n ),\n }),\n });\n\n const responseJson = await response.json();\n console.log('#######responseJson');\n console.log(responseJson);\n\n setLoading(false);\n\n if(responseJson && responseJson.username === username) {\n setUser(responseJson);\n if (Platform.OS !== 'web') {\n navigation.navigate('GeolocationPermission', {onboarding: true});\n }\n } else {\n setErrorMessage(responseJson.username);\n }\n\n return responseJson;\n } catch (error) {\n console.error('Error during username selection.');\n console.error(error);\n setErrorMessage(t('UsernameScreen.errors.request', 'Error during username selection.'));\n\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n }\n };\n\n return (\n }>\n {errorMessage\n ? (\n \n {errorMessage}\n \n ) : null\n }\n\n \n {t('UsernameScreen.form.usernameLabel', 'What username do you want ?')}\n \n\n \n {\n setUsername(val);\n }}\n />\n \n\n \n {t('UsernameScreen.form.emailLabel', 'Your email address will be :')}\n \n\n \n {username && username.length > 0 ? username + '@secretaire.ai' : '@secretaire.ai'}\n \n \n );\n};\n\nconst getStyles = theme => StyleSheet.create({\n text: {\n textAlign: 'center',\n color: theme.textPrimary,\n fontSize: 16,\n marginBottom: 16,\n },\n bold: {\n fontWeight: 'bold',\n },\n});\n\nexport default UsernameScreen;\n","import React, {useContext, useMemo} from 'react';\nimport {ActivityIndicator, Dimensions, Platform, StyleSheet, Text, View} from 'react-native';\n\nimport Markdown from 'react-native-markdown-display';\n\nimport {ThemeContext, WEB_MAX_WIDTH} from '../../../contexts/ThemeContext';\nimport openLink from '../../../utils/openLink';\n\nconst PADDING_VERTICAL = 8;\n\nconst openUrl = (url, customCallback) => {\n if (customCallback) {\n const result = customCallback(url);\n if (url && result && typeof result === 'boolean') {\n openLink(url);\n }\n } else if (url) {\n openLink(url);\n }\n};\n\nconst renderRules = {\n // Emphasis\n strong: (node, children, parent, styles) => (\n \n {children}\n \n ),\n em: (node, children, parent, styles) => (\n \n {children}\n \n ),\n s: (node, children, parent, styles) => (\n \n {children}\n \n ),\n\n // Code\n code_inline: (node, children, parent, styles, inheritedStyles = {}) => (\n \n {node.content}\n \n ),\n code_block: (node, children, parent, styles, inheritedStyles = {}) => {\n // we trim new lines off the end of code blocks because the parser sends an extra one.\n let {content} = node;\n\n if (\n typeof node.content === 'string' &&\n node.content.charAt(node.content.length - 1) === '\\n'\n ) {\n content = node.content.substring(0, node.content.length - 1);\n }\n\n return (\n \n {content}\n \n );\n },\n fence: (node, children, parent, styles, inheritedStyles = {}) => {\n // we trim new lines off the end of code blocks because the parser sends an extra one.\n let {content} = node;\n\n if (\n typeof node.content === 'string' &&\n node.content.charAt(node.content.length - 1) === '\\n'\n ) {\n content = node.content.substring(0, node.content.length - 1);\n }\n\n return (\n \n {content}\n \n );\n },\n\n // Links\n link: (node, children, parent, styles, onLinkPress) => (\n openUrl(node.attributes.href, onLinkPress)}\n selectable\n >\n {children}\n \n ),\n\n // Text Output\n text: (node, children, parent, styles, inheritedStyles = {}) => (\n \n {node.content}\n \n ),\n textgroup: (node, children, parent, styles) => (\n \n {children}\n \n ),\n hardbreak: (node, children, parent, styles) => (\n \n {'\\n'}\n \n ),\n softbreak: (node, children, parent, styles) => (\n \n {'\\n'}\n \n ),\n\n inline: (node, children, parent, styles) => (\n \n {children}\n \n ),\n span: (node, children, parent, styles) => (\n \n {children}\n \n ),\n};\n\nconst Bubble = ({variant, text, children}) => {\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme), [theme]);\n\n const isMarkdown = text && variant === 'response' && text.search('```') !== -1;\n\n const content = useMemo(() => {\n // Note: Detect link only in response\n if (!text || variant !== 'response') return text;\n\n const linkRegex = /(https?:\\/\\/(?:www\\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\s|,.]{2,}|www\\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\s|,.]{2,}|https?:\\/\\/(?:www\\.|(?!www))[a-zA-Z0-9]+\\.[^\\s|,.]{2,}|www\\.[a-zA-Z0-9]+\\.[^\\s|,.]{2,})/gm;\n\n const matches = text.matchAll(linkRegex);\n\n const result = [];\n let index = 0;\n\n for (const match of matches) {\n let start = match.index;\n const end = match.index + match[0].length;\n\n const fullLink = text.slice(start, end);\n\n const link = !fullLink.startsWith('http') ? `https://${fullLink}` : fullLink;\n\n result.push(text.slice(index, start));\n result.push(\n openLink(link)}\n selectable\n >\n {fullLink}\n \n );\n\n index = end;\n }\n\n if (!result.length) {\n result.push(text);\n } else if (index < text.length) {\n result.push(text.slice(index, text.length));\n }\n\n return result;\n }, [styles, text, theme.link, variant]);\n\n return (\n \n {text\n ? isMarkdown\n ? (\n \n {text}\n \n )\n : (\n \n {content}\n \n )\n : \n }\n\n {children}\n \n );\n};\n\n// Styles\n// ***********************************************\n\nconst getStyles = theme => StyleSheet.create({\n bubble: {\n borderRadius: 20,\n paddingHorizontal: 12,\n marginVertical: 6,\n },\n dateBubble: {\n marginTop: 30,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: '#6C757D',\n alignSelf: 'center',\n },\n queryBubble: {\n backgroundColor: theme.colorPrimary, // '#167347',\n alignSelf: 'flex-end',\n },\n exampleBubble: {\n backgroundColor: theme.colorPrimary, // '#167347',\n alignSelf: 'center',\n },\n errorQueryBubble: {\n backgroundColor: theme.error,\n alignSelf: 'flex-end',\n },\n errorBubble: {\n backgroundColor: theme.error,\n alignSelf: 'flex-start',\n },\n responseBubble: {\n backgroundColor: theme.light ? '#ffffff' : '#383838',\n alignSelf: 'flex-start',\n marginRight: 6,\n },\n dateText: {\n color: theme.textSecondary,\n },\n responseText: {\n color: theme.textPrimary,\n },\n text: {\n color: '#ffffff',\n fontSize: 16,\n },\n});\n\nexport default Bubble;\n","import React, {useCallback, useContext, useMemo, useState} from 'react';\nimport {Platform, StyleSheet, Text, View} from 'react-native';\n\nimport * as Location from 'expo-location';\nimport * as Sentry from 'sentry-expo';\nimport {useTranslation} from 'react-i18next';\n\nimport {ThemeContext} from '../../contexts/ThemeContext';\nimport {UserContext} from '../../contexts/UserContext';\nimport Api from '../../constants/Api';\nimport OnboardingLayout from './components/OnboardingLayout';\nimport StyledButton from '../../components/StyledButton';\nimport Bubble from '../MainScreen/Chat/Bubble';\n\nconst NEXT_SCREEN = 'PushNotificationPermission';\n\nconst GeolocationPermissionScreen = ({navigation}) => {\n\tconst {t} = useTranslation();\n\tconst {userId, userToken} = useContext(UserContext);\n\tconst theme = useContext(ThemeContext);\n\tconst styles = useMemo(() => getStyles(theme), [theme]);\n\n\tconst [loading, setLoading] = useState(false);\n\n\tconst handleNotNowButtonClick = useCallback(() => {\n\t\tnavigation.navigate(NEXT_SCREEN);\n\t}, [navigation]);\n\n\tconst handleAllowButtonClick = useCallback(async () => {\n\t\tsetLoading(true);\n\t\tconst {status} = await Location.requestForegroundPermissionsAsync();\n\n\t\tconst updateUserLocation = async () => {\n\t\t\ttry {\n\t\t\t\tconst location = await Location.getCurrentPositionAsync({enableHighAccuracy: false});\n\n\t\t\t\tfetch(`${Api.apiBaseUrl}/users/${userId}`, {\n\t\t\t\t\tmethod: 'PATCH',\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'Accept': 'application/json',\n\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t},\n\t\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t\tuser_token: userToken,\n\t\t\t\t\t\tlatitude: location.coords.latitude,\n\t\t\t\t\t\tlongitude: location.coords.longitude,\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\t// Note: We just ignore if this fail since it's not critical\n\t\t\t\tconsole.log(error);\n\n\t\t\t\tif (Platform.OS === 'web') {\n\t\t\t\t\tSentry.Browser.captureException(error);\n\t\t\t\t} else {\n\t\t\t\t\tSentry.Native.captureException(error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (status === 'granted') {\n\t\t\t// Note: We don't await here to not block the user on the page while we save his position since\n\t\t\t// it's not critical\n\t\t\tupdateUserLocation();\n\t\t}\n\n\t\tnavigation.navigate(NEXT_SCREEN);\n\t\tsetLoading(false);\n\t}, [navigation, userId, userToken]);\n\n\treturn (\n\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t)}\n\t\t>\n\t\t\t\n\t\t\t\t{t(\n\t\t\t\t\t'OnboardingLayout.introduction',\n\t\t\t\t\t'Here are some examples of the things you will be able to ask Secrétaire:'\n\t\t\t\t)}\n\t\t\t\n\n\t\t\t\n\n\t\t\t\n\n\t\t\t\n\t\t\n\t);\n};\n\nconst getStyles = theme => StyleSheet.create({\n\ttext: {\n\t\ttextAlign: 'center',\n\t\tcolor: theme.textPrimary,\n\t\tfontSize: 16,\n\t},\n});\n\nexport default GeolocationPermissionScreen;\n","import React, {useCallback, useContext, useMemo, useState} from 'react';\nimport {Platform, StyleSheet, Text, View} from 'react-native';\n\nimport * as Notifications from 'expo-notifications';\nimport * as Sentry from 'sentry-expo';\nimport {useTranslation} from 'react-i18next';\n\nimport {ThemeContext} from '../../contexts/ThemeContext';\nimport {UserContext} from '../../contexts/UserContext';\nimport Api from '../../constants/Api';\nimport OnboardingLayout from './components/OnboardingLayout';\nimport StyledButton from '../../components/StyledButton';\nimport Bubble from '../MainScreen/Chat/Bubble';\n\nconst NEXT_SCREEN = 'ContactsPermission';\n\nconst LOADING_INITIAL_STATE = {loading: false, buttonClicked: null};\n\nconst PushNotificationPermissionScreen = ({navigation}) => {\n\tconst {t} = useTranslation();\n\tconst {userId, userToken, user, setUser} = useContext(UserContext);\n\tconst theme = useContext(ThemeContext);\n\tconst styles = useMemo(() => getStyles(theme), [theme]);\n\n\tconst [loadingState, setLoadingState] = useState(LOADING_INITIAL_STATE);\n\tconst [errorMessage, setErrorMessage] = useState(null);\n\n\tconst updateUserHasCompletedOnboarding = useCallback(async (buttonClicked, tokenInfos = {}) => {\n\t\ttry {\n\t\t\tsetLoadingState({loading: true, buttonClicked});\n\t\t\tsetErrorMessage(null);\n\n\t\t\tconst result = await fetch(`${Api.apiBaseUrl}/users/${userId}`, {\n\t\t\t\tmethod: 'PATCH',\n\t\t\t\theaders: {\n\t\t\t\t\t'Accept': 'application/json',\n\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tuser_token: userToken,\n\t\t\t\t\thas_completed_guest_onboarding: user.status === 'guest' ? true : undefined,\n\t\t\t\t\t...tokenInfos,\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tconst updatedUser = await result.json();\n\n\t\t\tsetUser(updatedUser);\n\t\t\tsetLoadingState(LOADING_INITIAL_STATE);\n\t\t} catch (error) {\n\t\t\tsetLoadingState(LOADING_INITIAL_STATE);\n\n\t\t\tsetErrorMessage(t('PushNotificationPermissionScreen.errors.request', 'Something went wrong, try again later.'));\n\n\t\t\tif (Platform.OS === 'web') {\n\t\t\t\tSentry.Browser.captureException(error);\n\t\t\t} else {\n\t\t\t\tSentry.Native.captureException(error);\n\t\t\t}\n\t\t}\n\t}, [userId, userToken, user.status, setUser, t]);\n\n\tconst handleNotNowButtonClick = useCallback(async () => {\n\t\tif (user.status === 'guest') {\n\t\t\tupdateUserHasCompletedOnboarding('notNowButton');\n\t\t} else {\n\t\t\tnavigation.navigate(NEXT_SCREEN);\n\t\t}\n\t}, [navigation, updateUserHasCompletedOnboarding, user.status]);\n\n\tconst handleAllowButtonClick = useCallback(async () => {\n\t\tconst {status} = await Notifications.requestPermissionsAsync();\n\n\t\tif (status === 'granted') {\n\t\t\ttry {\n\t\t\t\tconst token = (await Notifications.getExpoPushTokenAsync()).data;\n\n\t\t\t\tupdateUserHasCompletedOnboarding('allowButton', {\n\t\t\t\t\tpush_token: token,\n\t\t\t\t\thas_notifications_enabled: true,\n\t\t\t\t});\n\n\t\t\t\tif (user.status !== 'guest') {\n\t\t\t\t\tnavigation.navigate(NEXT_SCREEN);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.log(error);\n\t\t\t\tsetLoadingState(LOADING_INITIAL_STATE);\n\n\t\t\t\tsetErrorMessage(t('PushNotificationPermissionScreen.errors.request', 'Something went wrong, try again later.'));\n\n\t\t\t\tif (Platform.OS === 'web') {\n\t\t\t\t\tSentry.Browser.captureException(error);\n\t\t\t\t} else {\n\t\t\t\t\tSentry.Native.captureException(error);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, [updateUserHasCompletedOnboarding, user.status, navigation, t]);\n\n\treturn (\n\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t)}\n\t\t>\n\t\t\t{errorMessage && (\n\t\t\t\t\n\t\t\t\t\t{errorMessage}\n\t\t\t\t\n\t\t\t)}\n\n\t\t\t\n\t\t\t\t{t(\n\t\t\t\t\t'OnboardingLayout.introduction',\n\t\t\t\t\t'Here are some examples of the things you will be able to ask Secrétaire:'\n\t\t\t\t)}\n\t\t\t\n\n\t\t\t\n\n\t\t\t\n\n\t\t\t\n\t\t\n\t);\n};\n\nconst getStyles = theme => StyleSheet.create({\n\ttext: {\n\t\ttextAlign: 'center',\n\t\tcolor: theme.textPrimary,\n\t\tfontSize: 16,\n\t},\n});\n\nexport default PushNotificationPermissionScreen;\n","import React, {useCallback, useContext, useMemo, useState} from 'react';\nimport {\n Text,\n View,\n StyleSheet,\n Platform,\n} from 'react-native';\n\nimport * as Contacts from 'expo-contacts';\nimport * as Sentry from 'sentry-expo';\nimport {useTranslation} from 'react-i18next';\n\nimport {ThemeContext} from '../../contexts/ThemeContext';\nimport {UserContext} from '../../contexts/UserContext';\nimport Api from '../../constants/Api';\nimport OnboardingLayout from './components/OnboardingLayout';\nimport StyledButton from '../../components/StyledButton';\nimport Bubble from '../MainScreen/Chat/Bubble';\n\nconst LOADING_INITIAL_STATE = {loading: false, buttonClicked: null};\n\nconst ContactsPermissionScreen = ({navigation}) => {\n const {t} = useTranslation();\n const {userId, userToken, user, setUser} = useContext(UserContext);\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme), [theme]);\n\n const [loadingState, setLoadingState] = useState(LOADING_INITIAL_STATE);\n const [errorMessage, setErrorMessage] = useState(null);\n\n const updateUserHasCompletedOnboarding = useCallback(async buttonClicked => {\n navigation.navigate('Upgrade');\n // try {\n // setLoadingState({loading: true, buttonClicked});\n // setErrorMessage(null);\n //\n // const result = await fetch(`${Api.apiBaseUrl}/users/${userId}`, {\n // method: 'PATCH',\n // headers: {\n // 'Accept': 'application/json',\n // 'Content-Type': 'application/json',\n // },\n // body: JSON.stringify({\n // user_token: userToken,\n // ...(user.status === 'guest'\n // ? {has_completed_guest_onboarding: true}\n // : {has_completed_onboarding: true}\n // ),\n // }),\n // });\n //\n // const updatedUser = await result.json();\n //\n // setUser(updatedUser);\n // setLoadingState(LOADING_INITIAL_STATE);\n // } catch (error) {\n // setLoadingState(LOADING_INITIAL_STATE);\n //\n // setErrorMessage(t('ContactsPermissionScreen.errors.request', 'Something went wrong, try again later.'));\n //\n // if (Platform.OS === 'web') {\n // Sentry.Browser.captureException(error);\n // } else {\n // Sentry.Native.captureException(error);\n // }\n // }\n }, [userId, userToken, user.status, setUser, t]);\n\n const handleNotNowButtonClick = useCallback(() => {\n updateUserHasCompletedOnboarding('notNowButton');\n }, [updateUserHasCompletedOnboarding]);\n\n const handleAllowButtonClick = useCallback(async () => {\n const {status} = await Contacts.requestPermissionsAsync();\n\n const updateUserContacts = async () => {\n try {\n const result = await Contacts.getContactsAsync({\n fields: [\n Contacts.Fields.Addresses,\n Contacts.Fields.Birthday,\n Contacts.Fields.Company,\n Contacts.Fields.ContactType,\n Contacts.Fields.Dates,\n // Note: Undefined on IOS\n // Contacts.Fields.Departement,\n Contacts.Fields.Emails,\n Contacts.Fields.ExtraNames,\n Contacts.Fields.FirstName,\n Contacts.Fields.ID,\n Contacts.Fields.Image,\n Contacts.Fields.ImageAvailable,\n Contacts.Fields.InstantMessageAddresses,\n Contacts.Fields.JobTitle,\n Contacts.Fields.LastName,\n Contacts.Fields.MaidenName,\n Contacts.Fields.MiddleName,\n Contacts.Fields.Name,\n Contacts.Fields.NamePrefix,\n Contacts.Fields.NameSuffix,\n Contacts.Fields.Nickname,\n Contacts.Fields.NonGregorianBirthday,\n // Note: Require additional permissions on IOS\n // Contacts.Fields.Note,\n Contacts.Fields.PhoneNumbers,\n Contacts.Fields.PhoneticFirstName,\n Contacts.Fields.PhoneticLastName,\n Contacts.Fields.PhoneticMiddleName,\n Contacts.Fields.RawImage,\n Contacts.Fields.Relationships,\n Contacts.Fields.SocialProfiles,\n Contacts.Fields.UrlAddresses,\n ],\n });\n\n const contacts = result.data;\n\n fetch(`${Api.apiBaseUrl}/contacts`, {\n method: 'POST',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n user_token: userToken,\n contact: contacts.map(contact => {\n const facebookProfile = contact.socialProfiles && contact.socialProfiles.length && contact.socialProfiles.find(({service}) => service === 'Facebook');\n\n return ({\n user_id: userId,\n\n origin: 'device',\n ref: contact.id,\n contact_type: contact.contactType,\n\n name: contact.name,\n first_name: contact.firstName,\n last_name: contact.lastName,\n middle_name: contact.middleName,\n\n email_address_1: contact.emails && contact.emails.length && contact.emails[0] && contact.emails[0].email ? contact.emails[0].email : null,\n email_address_1_label: contact.emails && contact.emails.length && contact.emails[0] && contact.emails[0].label ? contact.emails[0].label : null,\n\n email_address_2: contact.emails && contact.emails.length && contact.emails[1] && contact.emails[1].email ? contact.emails[1].email : null,\n email_address_2_label: contact.emails && contact.emails.length && contact.emails[1] && contact.emails[1].label ? contact.emails[1].label : null,\n\n email_address_3: contact.emails && contact.emails.length && contact.emails[2] && contact.emails[2].email ? contact.emails[2].email : null,\n email_address_3_label: contact.emails && contact.emails.length && contact.emails[2] && contact.emails[2].label ? contact.emails[2].label : null,\n\n phone_number_1: contact.phoneNumbers && contact.phoneNumbers.length && contact.phoneNumbers[0] && (contact.phoneNumbers[0].digits || contact.phoneNumbers[0].number) ? (contact.phoneNumbers[0].digits || contact.phoneNumbers[0].number) : null,\n phone_number_1_formatted: contact.phoneNumbers && contact.phoneNumbers.length && contact.phoneNumbers[0] && contact.phoneNumbers[0].number ? contact.phoneNumbers[0].number : null,\n phone_number_1_label: contact.phoneNumbers && contact.phoneNumbers.length && contact.phoneNumbers[0] && contact.phoneNumbers[0].label ? contact.phoneNumbers[0].label : null,\n\n phone_number_2: contact.phoneNumbers && contact.phoneNumbers.length && contact.phoneNumbers[1] && (contact.phoneNumbers[1].digits || contact.phoneNumbers[1].number) ? (contact.phoneNumbers[1].digits || contact.phoneNumbers[1].number) : null,\n phone_number_2_formatted: contact.phoneNumbers && contact.phoneNumbers.length && contact.phoneNumbers[1] && contact.phoneNumbers[1].number ? contact.phoneNumbers[1].number : null,\n phone_number_2_label: contact.phoneNumbers && contact.phoneNumbers.length && contact.phoneNumbers[1] && contact.phoneNumbers[1].label ? contact.phoneNumbers[1].label : null,\n\n phone_number_3: contact.phoneNumbers && contact.phoneNumbers.length && contact.phoneNumbers[2] && (contact.phoneNumbers[2].digits || contact.phoneNumbers[2].number) ? (contact.phoneNumbers[2].digits || contact.phoneNumbers[2].number) : null,\n phone_number_3_formatted: contact.phoneNumbers && contact.phoneNumbers.length && contact.phoneNumbers[2] && contact.phoneNumbers[2].number ? contact.phoneNumbers[2].number : null,\n phone_number_3_label: contact.phoneNumbers && contact.phoneNumbers.length && contact.phoneNumbers[2] && contact.phoneNumbers[2].label ? contact.phoneNumbers[2].label : null,\n\n phone_number_4: contact.phoneNumbers && contact.phoneNumbers.length && contact.phoneNumbers[3] && (contact.phoneNumbers[3].digits || contact.phoneNumbers[3].number) ? (contact.phoneNumbers[3].digits || contact.phoneNumbers[3].number) : null,\n phone_number_4_formatted: contact.phoneNumbers && contact.phoneNumbers.length && contact.phoneNumbers[3] && contact.phoneNumbers[3].number ? contact.phoneNumbers[3].number : null,\n phone_number_4_label: contact.phoneNumbers && contact.phoneNumbers.length && contact.phoneNumbers[3] && contact.phoneNumbers[3].label ? contact.phoneNumbers[3].label : null,\n\n phone_number_5: contact.phoneNumbers && contact.phoneNumbers.length && contact.phoneNumbers[4] && (contact.phoneNumbers[4].digits || contact.phoneNumbers[4].number) ? (contact.phoneNumbers[4].digits || contact.phoneNumbers[4].number) : null,\n phone_number_5_formatted: contact.phoneNumbers && contact.phoneNumbers.length && contact.phoneNumbers[4] && contact.phoneNumbers[4].number ? contact.phoneNumbers[4].number : null,\n phone_number_5_label: contact.phoneNumbers && contact.phoneNumbers.length && contact.phoneNumbers[4] && contact.phoneNumbers[4].label ? contact.phoneNumbers[4].label : null,\n\n facebook_username: facebookProfile ? facebookProfile.username : null,\n facebook_url: facebookProfile ? facebookProfile.url : null,\n });\n }),\n }),\n });\n } catch (error) {\n // Note: We just ignore if this fail since it's not critical\n console.log(error);\n }\n };\n\n if (status === 'granted') {\n // Note: We don't await here to not block the user on the page while we save his contacts since\n // it's not critical\n updateUserContacts();\n\n updateUserHasCompletedOnboarding('allowButton');\n\n // Note: This Alert ask if the user wants to add Secretaire AI as a contact, useless for now\n //\n // return Alert.alert(\n // t('ContactsPermissionScreen.alert.title', 'Do you want to add Secrétaire contact information ?'),\n // t('ContactsPermissionScreen.alert.message', 'This will add Secrétaire contact information to your contacts, you can use them to make queries by email, phone and Whatsapp.'),\n // [\n // {text: t('ContactsPermissionScreen.alert.buttons.no', 'No'), style: 'cancel', onPress: () => updateUserHasCompletedOnboarding('allowButton')},\n // {\n // text: t('ContactsPermissionScreen.alert.buttons.yes', 'Yes'),\n // onPress: async () => {\n // await Contacts.addContactAsync({\n // [Contacts.Fields.Name]: 'Secrétaire AI',\n // [Contacts.Fields.Company]: 'Secrétaire AI',\n // [Contacts.Fields.ContactType]: 'company',\n // [Contacts.Fields.Emails]: [\n // {email: 'secretaire@secretaire.ai', label: 'Main'},\n // {email: `${user.username}@secretaire.ai`, label: 'Your personal address'},\n // ],\n // [Contacts.Fields.PhoneNumbers]: [\n // {number: '+15854400009', label: 'Sms'},\n // {number: '+33780974620', label: 'Whatsapp'},\n // ],\n // [Contacts.Fields.UrlAddresses]: [\n // {url: 'https://www.secretaire.ai', label: 'Website'},\n // ],\n // });\n //\n // updateUserHasCompletedOnboarding('allowButton');\n // },\n // },\n // ]\n // );\n }\n }, [updateUserHasCompletedOnboarding, userId, userToken]);\n\n return (\n \n \n \n \n\n \n \n \n \n )}\n >\n {errorMessage && (\n \n {errorMessage}\n \n )}\n\n \n {t(\n 'OnboardingLayout.introduction',\n 'Here are some examples of the things you will be able to ask Secrétaire:'\n )}\n \n\n \n\n \n\n \n \n );\n};\n\nconst getStyles = theme => StyleSheet.create({\n text: {\n textAlign: 'center',\n color: theme.textPrimary,\n fontSize: 16,\n },\n});\n\nexport default ContactsPermissionScreen;\n","import {createContext} from 'react';\nimport * as Localization from 'expo-localization';\n\nexport const DEFAULT_SETTINGS = {\n theme: 'dark',\n muted: false,\n chatMode: null,\n language: Localization.locale,\n};\n\nexport const SettingsContext = createContext(DEFAULT_SETTINGS);\n","import {createContext} from 'react';\n\nexport const DEFAULT_SPEAKER_STATE = {\n speaking: false,\n setSpeaking: () => null,\n};\n\nexport const SpeakerContext = createContext(DEFAULT_SPEAKER_STATE);\n","import * as React from 'react';\n\nexport const NotificationsContext = React.createContext({\n notificationsCount: null,\n setNotificationsCount: () => {},\n unreadNotificationsCount: null,\n setUnreadNotificationsCount: () => {},\n unansweredNotificationsCount: null,\n setUnansweredNotificationsCount: () => {},\n undismissdNotificationsCount: null,\n setUndismissNotificationsCount: () => {},\n});\n","import React, {useContext, useMemo} from 'react';\nimport {Image, SafeAreaView, StyleSheet, Text, View} from 'react-native';\nimport {HeaderBackButton} from '@react-navigation/elements';\n\nimport {ThemeContext} from '../contexts/ThemeContext';\n\nconst STEPS_IMAGES = [\n\trequire('../assets/images/steps/step1.png'),\n\trequire('../assets/images/steps/step2.png'),\n\trequire('../assets/images/steps/step3.png'),\n\trequire('../assets/images/steps/step4.png'),\n];\n\nconst OnboardingHeader = ({back, navigation, step, title, subtitle}) => {\n\tconst theme = useContext(ThemeContext);\n\tconst styles = useMemo(() => getStyles(theme), [theme]);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{back && (\n\t\t\t\t\t\n\t\t\t\t\t\t navigation.goBack()}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t)}\n\n\t\t\t\t\n\t\t\t\t\t{/**/}\n\n\t\t\t\t\t\n\t\t\t\t\t\t{title}\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t{subtitle}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nconst getStyles = theme => StyleSheet.create({\n\theader: {\n\t\tbackgroundColor: theme.headerBackground,\n\t\tborderBottomWidth: 1,\n\t\tborderBottomColor: theme.headerBorderColor,\n\t\tborderStyle: 'solid',\n\t},\n\tbackContainer: {\n\t\theight: '100%',\n\t\tposition: 'absolute',\n\t\tmarginTop: 6,\n\t\televation: 2,\n\t\tzIndex: 2,\n\t},\n\tstepImage: {\n\t\tmarginBottom: 10,\n\t\tmarginLeft: 'auto',\n\t\tmarginRight: 'auto',\n\t},\n\ttext: {\n\t\tcolor: theme.textPrimary,\n\t\ttextAlign: 'center',\n\t},\n\ttitle: {\n\t\tfontSize: 18,\n\t\tfontWeight: 'bold',\n\t\tmarginBottom: 5,\n\t},\n\tsubtitle: {\n\t\tfontSize: 14,\n\t},\n});\n\nexport default OnboardingHeader;\n","import React, {useContext} from 'react';\nimport {StatusBar} from 'react-native';\n\nimport {ThemeContext} from '../contexts/ThemeContext';\n\nconst StyledStatusBar = () => {\n\tconst theme = useContext(ThemeContext);\n\n\treturn (\n\t\t\n\t);\n};\n\nexport default StyledStatusBar;\n","import {useCallback, useContext, useEffect} from 'react';\nimport {Platform} from 'react-native';\n\nimport * as Speech from 'expo-speech';\nimport {Audio} from 'expo-av';\n\nimport {SettingsContext} from '../contexts/SettingsContext';\nimport {SpeakerContext} from '../contexts/SpeakerContext';\n\nlet responseBuffer = '';\nlet tokenBuffer = '';\nlet shouldSpeakQuery = true;\nlet speakingFalseInterval = null;\n\nconst useSpeaker = () => {\n const {settings: {muted, language}} = useContext(SettingsContext);\n const {setSpeaking} = useContext(SpeakerContext);\n\n const stop = useCallback(async () => {\n shouldSpeakQuery = false;\n Speech.stop();\n setSpeaking(false);\n }, [setSpeaking]);\n\n useEffect(() => {\n if (muted) {\n stop();\n }\n }, [muted]);\n\n const speak = useCallback(async (text, languageToSpeak = language) => {\n if (Platform.OS === 'ios') {\n await Audio.setAudioModeAsync({\n playsInSilentModeIOS: true,\n allowsRecordingIOS: false,\n });\n\n // HACK: We must play a sound via Audio from expo for allowsRecordingIOS: false to take\n // effect and the next sounds to be played through the speakers and not the earpiece\n // Follow up on: https://github.com/expo/expo/issues/20943\n const {sound} = await Audio.Sound.createAsync(require('../assets/silent.wav'));\n await sound.playAsync();\n }\n\n if (!muted) {\n Speech.speak(text, {\n language: languageToSpeak,\n onStart: () => {\n if (Platform.OS === 'web') {\n // Note: We use an interval to check if we need to set speaking to false every second\n // to handle Safari which doesn't trigger the onDone callback for some reason...\n speakingFalseInterval = setInterval(() => {\n if (!window.speechSynthesis.speaking) {\n setSpeaking(false);\n clearInterval(speakingFalseInterval);\n }\n }, 1000);\n }\n\n setSpeaking(true);\n },\n onResume: () => {\n setSpeaking(true);\n },\n onPause: () => {\n setSpeaking(false);\n },\n onStopped: () => {\n setSpeaking(false);\n },\n onDone: () => {\n if (Platform.OS === 'web' && window.speechSynthesis.pending) {\n return;\n }\n\n setSpeaking(false);\n },\n });\n }\n }, [language, muted, setSpeaking]);\n\n const initSpeakQueryState = useCallback(() => {\n shouldSpeakQuery = true;\n }, []);\n\n const speakToken = useCallback(async (token, languageToSpeak = language) => {\n // console.log('-----------------------------');\n // console.log(`speakToken(${token})`);\n // console.log(`tokenBuffer: ${tokenBuffer} -> ${tokenBuffer}${token}`);\n // console.log(`responseBuffer: ${responseBuffer} -> ${responseBuffer}${tokenBuffer}`);\n // console.log(`${token.includes('.') || token.includes('\\n') ? '*** Speak CALLED ***' : ''}`);\n // console.log('-----------------------------');\n\n tokenBuffer = `${tokenBuffer}${token}`;\n\n if (token.includes('.') || token.includes('\\n')) {\n if (shouldSpeakQuery) {\n speak(tokenBuffer, languageToSpeak);\n }\n\n responseBuffer = `${responseBuffer}${tokenBuffer}`;\n tokenBuffer = '';\n }\n }, [language, speak]);\n\n const emptyResponseBuffer = useCallback(async (message, languageToSpeak = language) => {\n if (message.length > responseBuffer.length) {\n if (shouldSpeakQuery) {\n speak(message.slice(responseBuffer.length), languageToSpeak);\n }\n }\n\n responseBuffer = '';\n tokenBuffer = '';\n }, [language, speak]);\n\n return {\n speak,\n stop,\n initSpeakQueryState,\n speakToken,\n emptyResponseBuffer,\n };\n};\n\nexport default useSpeaker;\n","const languageList = [\n {\n \"name\": \"Afrikaans (South Africa)\",\n \"code\": \"af-ZA\",\n \"flag\": \"🇿🇦\",\n },\n {\n \"name\": \"Albanian (Albania)\",\n \"code\": \"sq-AL\",\n \"flag\": \"🇦🇱\",\n },\n {\n \"name\": \"Amharic (Ethiopia)\",\n \"code\": \"am-ET\",\n \"flag\": \"🇪🇹\",\n },\n {\n \"name\": \"Arabic (Algeria)\",\n \"code\": \"ar-DZ\",\n \"flag\": \"🇩🇿\",\n },\n {\n \"name\": \"Arabic (Bahrain)\",\n \"code\": \"ar-BH\",\n \"flag\": \"🇧🇭\",\n },\n {\n \"name\": \"Arabic (Egypt)\",\n \"code\": \"ar-EG\",\n \"flag\": \"🇪🇬\",\n },\n {\n \"name\": \"Arabic (Iraq)\",\n \"code\": \"ar-IQ\",\n \"flag\": \"🇮🇶\",\n },\n {\n \"name\": \"Arabic (Israel)\",\n \"code\": \"ar-IL\",\n \"flag\": \"🇮🇱\",\n },\n {\n \"name\": \"Arabic (Jordan)\",\n \"code\": \"ar-JO\",\n \"flag\": \"🇯🇴\",\n },\n {\n \"name\": \"Arabic (Kuwait)\",\n \"code\": \"ar-KW\",\n \"flag\": \"🇰🇼\",\n },\n {\n \"name\": \"Arabic (Lebanon)\",\n \"code\": \"ar-LB\",\n \"flag\": \"🇱🇧\",\n },\n {\n \"name\": \"Arabic (Mauritania)\",\n \"code\": \"ar-MR\",\n \"flag\": \"🇲🇷\",\n },\n {\n \"name\": \"Arabic (Morocco)\",\n \"code\": \"ar-MA\",\n \"flag\": \"🇲🇦\",\n },\n {\n \"name\": \"Arabic (Oman)\",\n \"code\": \"ar-OM\",\n \"flag\": \"🇴🇲\",\n },\n {\n \"name\": \"Arabic (Qatar)\",\n \"code\": \"ar-QA\",\n \"flag\": \"🇶🇦\",\n },\n {\n \"name\": \"Arabic (Saudi Arabia)\",\n \"code\": \"ar-SA\",\n \"flag\": \"🇸🇦\",\n },\n {\n \"name\": \"Arabic (State of Palestine)\",\n \"code\": \"ar-PS\",\n \"flag\": \"🇵🇸\",\n },\n {\n \"name\": \"Arabic (Tunisia)\",\n \"code\": \"ar-TN\",\n \"flag\": \"🇹🇳\",\n },\n {\n \"name\": \"Arabic (United Arab Emirates)\",\n \"code\": \"ar-AE\",\n \"flag\": \"🇦🇪\",\n },\n {\n \"name\": \"Arabic (Yemen)\",\n \"code\": \"ar-YE\",\n \"flag\": \"🇾🇪\",\n },\n {\n \"name\": \"Armenian (Armenia)\",\n \"code\": \"hy-AM\",\n \"flag\": \"🇦🇲\",\n },\n {\n \"name\": \"Azerbaijani (Azerbaijan)\",\n \"code\": \"az-AZ\",\n \"flag\": \"🇦🇿\",\n },\n {\n \"name\": \"Basque (Spain)\",\n \"code\": \"eu-ES\",\n \"flag\": \"🇪🇸\",\n },\n {\n \"name\": \"Bengali (Bangladesh)\",\n \"code\": \"bn-BD\",\n \"flag\": \"🇧🇩\",\n },\n {\n \"name\": \"Bengali (India)\",\n \"code\": \"bn-IN\",\n \"flag\": \"🇮🇳\",\n },\n {\n \"name\": \"Bosnian (Bosnia and Herzegovina)\",\n \"code\": \"bs-BA\",\n \"flag\": \"🇧🇦\",\n },\n {\n \"name\": \"Bulgarian (Bulgaria)\",\n \"code\": \"bg-BG\",\n \"flag\": \"🇧🇬\",\n },\n {\n \"name\": \"Burmese (Myanmar)\",\n \"code\": \"my-MM\",\n \"flag\": \"🇲🇲\",\n },\n {\n \"name\": \"Catalan (Spain)\",\n \"code\": \"ca-ES\",\n \"flag\": \"🇪🇸\",\n },\n {\n \"name\": \"Chinese Cantonese (Traditional, Hong Kong)\",\n \"code\": \"zh-HK\",\n \"flag\": \"🇭🇰\",\n },\n {\n \"name\": \"Chinese Mandarin (Simplified, China)\",\n \"code\": \"zh-CN\",\n \"flag\": \"🇨🇳\",\n },\n {\n \"name\": \"Chinese Mandarin (Traditional, Taiwan)\",\n \"code\": \"zh-TW\",\n \"flag\": \"🇹🇼\",\n },\n {\n \"name\": \"Croatian (Croatia)\",\n \"code\": \"hr-HR\",\n \"flag\": \"🇭🇷\",\n },\n {\n \"name\": \"Czech (Czech Republic)\",\n \"code\": \"cs-CZ\",\n \"flag\": \"🇨🇿\",\n },\n {\n \"name\": \"Danish (Denmark)\",\n \"code\": \"da-DK\",\n \"flag\": \"🇩🇰\",\n },\n {\n \"name\": \"Dutch (Belgium)\",\n \"code\": \"nl-BE\",\n \"flag\": \"🇧🇪\",\n },\n {\n \"name\": \"Dutch (Netherlands)\",\n \"code\": \"nl-NL\",\n \"flag\": \"🇳🇱\",\n },\n {\n \"name\": \"English (Australia)\",\n \"code\": \"en-AU\",\n \"flag\": \"🇦🇺\",\n },\n {\n \"name\": \"English (Canada)\",\n \"code\": \"en-CA\",\n \"flag\": \"🇨🇦\",\n },\n {\n \"name\": \"English (Ghana)\",\n \"code\": \"en-GH\",\n \"flag\": \"🇬🇭\",\n },\n {\n \"name\": \"English (Hong Kong)\",\n \"code\": \"en-HK\",\n \"flag\": \"🇭🇰\",\n },\n {\n \"name\": \"English (India)\",\n \"code\": \"en-IN\",\n \"flag\": \"🇮🇳\",\n },\n {\n \"name\": \"English (Ireland)\",\n \"code\": \"en-IE\",\n \"flag\": \"🇮🇪\",\n },\n {\n \"name\": \"English (Kenya)\",\n \"code\": \"en-KE\",\n \"flag\": \"🇰🇪\",\n },\n {\n \"name\": \"English (New Zealand)\",\n \"code\": \"en-NZ\",\n \"flag\": \"🇳🇿\",\n },\n {\n \"name\": \"English (Nigeria)\",\n \"code\": \"en-NG\",\n \"flag\": \"🇳🇬\",\n },\n {\n \"name\": \"English (Pakistan)\",\n \"code\": \"en-PK\",\n \"flag\": \"🇵🇰\",\n },\n {\n \"name\": \"English (Philippines)\",\n \"code\": \"en-PH\",\n \"flag\": \"🇵🇭\",\n },\n {\n \"name\": \"English (Singapore)\",\n \"code\": \"en-SG\",\n \"flag\": \"🇸🇬\",\n },\n {\n \"name\": \"English (South Africa)\",\n \"code\": \"en-ZA\",\n \"flag\": \"🇿🇦\",\n },\n {\n \"name\": \"English (Tanzania)\",\n \"code\": \"en-TZ\",\n \"flag\": \"🇹🇿\",\n },\n {\n \"name\": \"English (United Kingdom)\",\n \"code\": \"en-GB\",\n \"flag\": \"🇬🇧\",\n },\n {\n \"name\": \"English (United States)\",\n \"code\": \"en-US\",\n \"flag\": \"🇺🇸\",\n },\n {\n \"name\": \"Estonian (Estonia)\",\n \"code\": \"et-EE\",\n \"flag\": \"🇪🇪\",\n },\n {\n \"name\": \"Filipino (Philippines)\",\n \"code\": \"fil-PH\",\n \"flag\": \"🇵🇭\",\n },\n {\n \"name\": \"Finnish (Finland)\",\n \"code\": \"fi-FI\",\n \"flag\": \"🇫🇮\",\n },\n {\n \"name\": \"French (Belgium)\",\n \"code\": \"fr-BE\",\n \"flag\": \"🇧🇪\",\n },\n {\n \"name\": \"French (Canada)\",\n \"code\": \"fr-CA\",\n \"flag\": \"🇨🇦\",\n },\n {\n \"name\": \"French (France)\",\n \"code\": \"fr-FR\",\n \"flag\": \"🇫🇷\",\n },\n {\n \"name\": \"French (Switzerland)\",\n \"code\": \"fr-CH\",\n \"flag\": \"🇨🇭\",\n },\n {\n \"name\": \"Galician (Spain)\",\n \"code\": \"gl-ES\",\n \"flag\": \"🇪🇸\",\n },\n {\n \"name\": \"Georgian (Georgia)\",\n \"code\": \"ka-GE\",\n \"flag\": \"🇬🇪\",\n },\n {\n \"name\": \"German (Austria)\",\n \"code\": \"de-AT\",\n \"flag\": \"🇦🇹\",\n },\n {\n \"name\": \"German (Germany)\",\n \"code\": \"de-DE\",\n \"flag\": \"🇩🇪\",\n },\n {\n \"name\": \"German (Switzerland)\",\n \"code\": \"de-CH\",\n \"flag\": \"🇨🇭\",\n },\n {\n \"name\": \"Greek (Greece)\",\n \"code\": \"el-GR\",\n \"flag\": \"🇬🇷\",\n },\n {\n \"name\": \"Gujarati (India)\",\n \"code\": \"gu-IN\",\n \"flag\": \"🇮🇳\",\n },\n {\n \"name\": \"Hebrew (Israel)\",\n \"code\": \"he-IL\",\n \"flag\": \"🇮🇱\",\n },\n {\n \"name\": \"Hindi (India)\",\n \"code\": \"hi-IN\",\n \"flag\": \"🇮🇳\",\n },\n {\n \"name\": \"Hungarian (Hungary)\",\n \"code\": \"hu-HU\",\n \"flag\": \"🇭🇺\",\n },\n {\n \"name\": \"Icelandic (Iceland)\",\n \"code\": \"is-IS\",\n \"flag\": \"🇮🇸\",\n },\n {\n \"name\": \"Indonesian (Indonesia)\",\n \"code\": \"id-ID\",\n \"flag\": \"🇮🇩\",\n },\n {\n \"name\": \"Italian (Italy)\",\n \"code\": \"it-IT\",\n \"flag\": \"🇮🇹\",\n },\n {\n \"name\": \"Italian (Switzerland)\",\n \"code\": \"it-CH\",\n \"flag\": \"🇨🇭\",\n },\n {\n \"name\": \"Japanese (Japan)\",\n \"code\": \"ja-JP\",\n \"flag\": \"🇯🇵\",\n },\n {\n \"name\": \"Javanese (Indonesia)\",\n \"code\": \"jv-ID\",\n \"flag\": \"🇮🇩\",\n },\n {\n \"name\": \"Kannada (India)\",\n \"code\": \"kn-IN\",\n \"flag\": \"🇮🇳\",\n },\n {\n \"name\": \"Kazakh (Kazakhstan)\",\n \"code\": \"kk-KZ\",\n \"flag\": \"🇰🇿\",\n },\n {\n \"name\": \"Khmer (Cambodia)\",\n \"code\": \"km-KH\",\n \"flag\": \"🇰🇭\",\n },\n {\n \"name\": \"Korean (South Korea)\",\n \"code\": \"ko-KR\",\n \"flag\": \"🇰🇷\",\n },\n {\n \"name\": \"Lao (Laos)\",\n \"code\": \"lo-LA\",\n \"flag\": \"🇱🇦\",\n },\n {\n \"name\": \"Latvian (Latvia)\",\n \"code\": \"lv-LV\",\n \"flag\": \"🇱🇻\",\n },\n {\n \"name\": \"Lithuanian (Lithuania)\",\n \"code\": \"lt-LT\",\n \"flag\": \"🇱🇹\",\n },\n {\n \"name\": \"Macedonian (North Macedonia)\",\n \"code\": \"mk-MK\",\n \"flag\": \"🇲🇰\",\n },\n {\n \"name\": \"Malay (Malaysia)\",\n \"code\": \"ms-MY\",\n \"flag\": \"🇲🇾\",\n },\n {\n \"name\": \"Malayalam (India)\",\n \"code\": \"ml-IN\",\n \"flag\": \"🇮🇳\",\n },\n {\n \"name\": \"Marathi (India)\",\n \"code\": \"mr-IN\",\n \"flag\": \"🇮🇳\",\n },\n {\n \"name\": \"Mongolian (Mongolia)\",\n \"code\": \"mn-MN\",\n \"flag\": \"🇲🇳\",\n },\n {\n \"name\": \"Nepali (Nepal)\",\n \"code\": \"ne-NP\",\n \"flag\": \"🇳🇵\",\n },\n {\n \"name\": \"Norwegian Bokmål (Norway)\",\n \"code\": \"no-NO\",\n \"flag\": \"🇳🇴\",\n },\n {\n \"name\": \"Persian (Iran)\",\n \"code\": \"fa-IR\",\n \"flag\": \"🇮🇷\",\n },\n {\n \"name\": \"Polish (Poland)\",\n \"code\": \"pl-PL\",\n \"flag\": \"🇵🇱\",\n },\n {\n \"name\": \"Portuguese (Brazil)\",\n \"code\": \"pt-BR\",\n \"flag\": \"🇧🇷\",\n },\n {\n \"name\": \"Portuguese (Portugal)\",\n \"code\": \"pt-PT\",\n \"flag\": \"🇵🇹\",\n },\n {\n \"name\": \"Punjabi (Gurmukhi India)\",\n \"code\": \"pa-Guru-IN\",\n \"flag\": \"🇮🇳\",\n },\n {\n \"name\": \"Romanian (Romania)\",\n \"code\": \"ro-RO\",\n \"flag\": \"🇷🇴\",\n },\n {\n \"name\": \"Russian (Russia)\",\n \"code\": \"ru-RU\",\n \"flag\": \"🇷🇺\",\n },\n {\n \"name\": \"Kinyarwanda (Rwanda)\",\n \"code\": \"rw-RW\",\n \"flag\": \"🇷🇼\",\n },\n {\n \"name\": \"Serbian (Serbia)\",\n \"code\": \"sr-RS\",\n \"flag\": \"🇷🇸\",\n },\n {\n \"name\": \"Sinhala (Sri Lanka)\",\n \"code\": \"si-LK\",\n \"flag\": \"🇱🇰\",\n },\n {\n \"name\": \"Slovak (Slovakia)\",\n \"code\": \"sk-SK\",\n \"flag\": \"🇸🇰\",\n },\n {\n \"name\": \"Slovenian (Slovenia)\",\n \"code\": \"sl-SI\",\n \"flag\": \"🇸🇮\",\n },\n {\n \"name\": \"Swati (South Africa)\",\n \"code\": \"ss-latn-za\",\n \"flag\": \"🇿🇦\",\n },\n {\n \"name\": \"Southern Sotho (South Africa)\",\n \"code\": \"st-ZA\",\n \"flag\": \"🇿🇦\",\n },\n {\n \"name\": \"Spanish (Argentina)\",\n \"code\": \"es-AR\",\n \"flag\": \"🇦🇷\",\n },\n {\n \"name\": \"Spanish (Bolivia)\",\n \"code\": \"es-BO\",\n \"flag\": \"🇧🇴\",\n },\n {\n \"name\": \"Spanish (Chile)\",\n \"code\": \"es-CL\",\n \"flag\": \"🇨🇱\",\n },\n {\n \"name\": \"Spanish (Colombia)\",\n \"code\": \"es-CO\",\n \"flag\": \"🇨🇴\",\n },\n {\n \"name\": \"Spanish (Costa Rica)\",\n \"code\": \"es-CR\",\n \"flag\": \"🇨🇷\",\n },\n {\n \"name\": \"Spanish (Dominican Republic)\",\n \"code\": \"es-DO\",\n \"flag\": \"🇩🇴\",\n },\n {\n \"name\": \"Spanish (Ecuador)\",\n \"code\": \"es-EC\",\n \"flag\": \"🇪🇨\",\n },\n {\n \"name\": \"Spanish (El Salvador)\",\n \"code\": \"es-SV\",\n \"flag\": \"🇸🇻\",\n },\n {\n \"name\": \"Spanish (Guatemala)\",\n \"code\": \"es-GT\",\n \"flag\": \"🇬🇹\",\n },\n {\n \"name\": \"Spanish (Honduras)\",\n \"code\": \"es-HN\",\n \"flag\": \"🇭🇳\",\n },\n {\n \"name\": \"Spanish (Mexico)\",\n \"code\": \"es-MX\",\n \"flag\": \"🇲🇽\",\n },\n {\n \"name\": \"Spanish (Nicaragua)\",\n \"code\": \"es-NI\",\n \"flag\": \"🇳🇮\",\n },\n {\n \"name\": \"Spanish (Panama)\",\n \"code\": \"es-PA\",\n \"flag\": \"🇵🇦\",\n },\n {\n \"name\": \"Spanish (Paraguay)\",\n \"code\": \"es-PY\",\n \"flag\": \"🇵🇾\",\n },\n {\n \"name\": \"Spanish (Peru)\",\n \"code\": \"es-PE\",\n \"flag\": \"🇵🇪\",\n },\n {\n \"name\": \"Spanish (Puerto Rico)\",\n \"code\": \"es-PR\",\n \"flag\": \"🇵🇷\",\n },\n {\n \"name\": \"Spanish (Spain)\",\n \"code\": \"es-ES\",\n \"flag\": \"🇪🇸\",\n },\n {\n \"name\": \"Spanish (United States)\",\n \"code\": \"es-US\",\n \"flag\": \"🇺🇸\",\n },\n {\n \"name\": \"Spanish (Uruguay)\",\n \"code\": \"es-UY\",\n \"flag\": \"🇺🇾\",\n },\n {\n \"name\": \"Spanish (Venezuela)\",\n \"code\": \"es-VE\",\n \"flag\": \"🇻🇪\",\n },\n {\n \"name\": \"Sundanese (Indonesia)\",\n \"code\": \"su-ID\",\n \"flag\": \"🇮🇩\",\n },\n {\n \"name\": \"Swahili (Kenya)\",\n \"code\": \"sw-KE\",\n \"flag\": \"🇰🇪\",\n },\n {\n \"name\": \"Swahili (Tanzania)\",\n \"code\": \"sw-TZ\",\n \"flag\": \"🇹🇿\",\n },\n {\n \"name\": \"Swedish (Sweden)\",\n \"code\": \"sv-SE\",\n \"flag\": \"🇸🇪\",\n },\n {\n \"name\": \"Tamil (India)\",\n \"code\": \"ta-IN\",\n \"flag\": \"🇮🇳\",\n },\n {\n \"name\": \"Tamil (Malaysia)\",\n \"code\": \"ta-MY\",\n \"flag\": \"🇲🇾\",\n },\n {\n \"name\": \"Tamil (Singapore)\",\n \"code\": \"ta-SG\",\n \"flag\": \"🇸🇬\",\n },\n {\n \"name\": \"Tamil (Sri Lanka)\",\n \"code\": \"ta-LK\",\n \"flag\": \"🇱🇰\",\n },\n {\n \"name\": \"Telugu (India)\",\n \"code\": \"te-IN\",\n \"flag\": \"🇮🇳\",\n },\n {\n \"name\": \"Thai (Thailand)\",\n \"code\": \"th-TH\",\n \"flag\": \"🇹🇭\",\n },\n {\n \"name\": \"Setswana (South Africa)\",\n \"code\": \"tn-latn-za\",\n \"flag\": \"🇿🇦\",\n },\n {\n \"name\": \"Turkish (Turkey)\",\n \"code\": \"tr-TR\",\n \"flag\": \"🇹🇷\",\n },\n {\n \"name\": \"Tsonga (South Africa)\",\n \"code\": \"ts-ZA\",\n \"flag\": \"🇿🇦\",\n },\n {\n \"name\": \"Ukrainian (Ukraine)\",\n \"code\": \"uk-UA\",\n \"flag\": \"🇺🇦\",\n },\n {\n \"name\": \"Urdu (India)\",\n \"code\": \"ur-IN\",\n \"flag\": \"🇮🇳\",\n },\n {\n \"name\": \"Urdu (Pakistan)\",\n \"code\": \"ur-PK\",\n \"flag\": \"🇵🇰\",\n },\n {\n \"name\": \"Uzbek (Uzbekistan)\",\n \"code\": \"uz-UZ\",\n \"flag\": \"🇺🇿\",\n },\n {\n \"name\": \"Venda (South Africa)\",\n \"code\": \"ve-ZA\",\n \"flag\": \"🇿🇦\",\n },\n {\n \"name\": \"Vietnamese (Vietnam)\",\n \"code\": \"vi-VN\",\n \"flag\": \"🇻🇳\",\n },\n {\n \"name\": \"isiXhosa (South Africa)\",\n \"code\": \"xh-ZA\",\n \"flag\": \"🇿🇦\",\n },\n {\n \"name\": \"Zulu (South Africa)\",\n \"code\": \"zu-ZA\",\n \"flag\": \"🇿🇦\",\n },\n];\n\nexport default languageList;\n","import React, {useCallback, useContext, useEffect, useMemo, useState} from 'react';\nimport {\n\tActivityIndicator,\n\tAlert,\n\tDimensions,\n\tPlatform,\n\tSafeAreaView,\n\tScrollView,\n\tStyleSheet,\n\tText,\n\tTouchableOpacity,\n\tTouchableWithoutFeedback,\n\tView,\n} from 'react-native';\nimport {EvilIcons, FontAwesome, Ionicons, MaterialIcons, AntDesign} from '@expo/vector-icons';\nimport {useTranslation} from 'react-i18next';\nimport {useNavigation} from '@react-navigation/native';\nimport * as Sentry from 'sentry-expo';\n\nimport Api from '../../constants/Api';\nimport {ThemeContext} from '../../contexts/ThemeContext';\nimport {UserContext} from '../../contexts/UserContext';\nimport {SettingsContext} from '../../contexts/SettingsContext';\nimport StyledButton from '../../components/StyledButton';\nimport SearchModal from '../../components/SearchModal';\nimport StyledInput from '../../components/StyledInput';\nimport languageList from '../../assets/languages-list';\nimport openLink from '../../utils/openLink';\n\nconst DRAWER_MAX_WIDTH = 300;\n\nconst TextButton = ({disabled, text, onPress, selected = false, icon = null}) => {\n\tconst theme = useContext(ThemeContext);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{icon}\n\t\t\t\n\n\t\t\t\n\t\t\t\t{text}\n\t\t\t\n\t\t\n\t);\n};\n\nconst EDIT_DISCUSSION_INITIAL_STATE = {\n\tid: null,\n\tname: '',\n};\n\nconst Drawer = ({\n\tquerying,\n\tdrawerOpen,\n\tcloseDrawer,\n\tsetChatMode,\n\tchatMode,\n\tdiscussions,\n\tsetDiscussions,\n\tdiscussionsLoading,\n\tdiscussionId,\n\tupdateDiscussionId,\n\tfetchDiscussions,\n\tsetDiscussionsLoading,\n}) => {\n\tconst {t} = useTranslation();\n\tconst theme = useContext(ThemeContext);\n\tconst styles = useMemo(() => getStyles(theme), [theme]);\n\tconst {userToken, user, subscribed} = useContext(UserContext);\n\tconst {settings, updateSettings} = useContext(SettingsContext);\n\tconst {navigate} = useNavigation();\n\n\tconst [clearDiscussionLoading, setClearDiscussionLoading] = useState(false);\n\tconst [editDiscussionState, setEditDiscussionState] = useState(EDIT_DISCUSSION_INITIAL_STATE);\n\tconst [languageModalOpen, setLanguageModalOpen] = useState(false);\n\n\tuseEffect(() => {\n\t\tsetEditDiscussionState(EDIT_DISCUSSION_INITIAL_STATE);\n\t}, [drawerOpen]);\n\n\tconst createDiscussion = useCallback(async () => {\n\t\tupdateDiscussionId(null);\n\t\tcloseDrawer();\n\t}, [closeDrawer, updateDiscussionId]);\n\n\tconst clearDiscussion = useCallback(async clearDiscussionId => {\n\t\ttry {\n\t\t\tsetClearDiscussionLoading(true);\n\n\t\t\t// TODO: Handle response and error\n\t\t\tconst response = await fetch(`${Api.apiBaseUrl}/discussions/${clearDiscussionId}/clear?user_token=${userToken}`, {method: 'DELETE'});\n\t\t\tconsole.log(response);\n\n\t\t\t// TODO: handle error\n\n\t\t\tconst updatedDiscussions = await fetchDiscussions();\n\n\t\t\tif (clearDiscussionId === discussionId) {\n\t\t\t\tupdateDiscussionId(updatedDiscussions[0] ? updatedDiscussions[0].id : null);\n\t\t\t}\n\n\t\t\tsetClearDiscussionLoading(false);\n\t\t} catch (error) {\n\t\t\t// TODO: handle error\n\t\t\tif (Platform.OS === 'web') {\n\t\t\t\tSentry.Browser.captureException(error);\n\t\t\t} else {\n\t\t\t\tSentry.Native.captureException(error);\n\t\t\t}\n\t\t}\n\t}, [userToken, setClearDiscussionLoading, fetchDiscussions, discussionId, updateDiscussionId]);\n\n\tconst onClearClick = useCallback(clearDiscussionId => () => {\n\t\tif (Platform.OS === 'web') {\n\t\t\tif (window.confirm(t('MainScreen.Drawer.alerts.clearDiscussion.message', 'Are you sure you want to clear this discussion ?'))) {\n\t\t\t\tclearDiscussion(clearDiscussionId);\n\t\t\t}\n\t\t} else {\n\t\t\tAlert.alert(\n\t\t\t\tt('MainScreen.Drawer.alerts.clearDiscussion.title', 'Clear discussion'),\n\t\t\t\tt('MainScreen.Drawer.alerts.clearDiscussion.message', 'Are you sure you want to clear this discussion ?'),\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\ttext: t('MainScreen.Drawer.alerts.buttons.cancel', 'Cancel'),\n\t\t\t\t\t\tstyle: 'cancel',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttext: t('MainScreen.Drawer.alerts.buttons.confirm', 'Confirm'),\n\t\t\t\t\t\tonPress: () => clearDiscussion(clearDiscussionId),\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t);\n\t\t}\n\t}, [clearDiscussion, t]);\n\n\tconst onEditClick = useCallback(discussion => () => {\n\t\tsetEditDiscussionState({id: discussion.id, name: discussion.name});\n\t}, [setEditDiscussionState]);\n\n\tconst onEditDiscussionTitle = useCallback(value => {\n\t\tsetEditDiscussionState({...editDiscussionState, name: value});\n\t}, [setEditDiscussionState, editDiscussionState]);\n\n\tconst onValidateEdit = useCallback(async () => {\n\t\ttry {\n\t\t\tsetDiscussionsLoading(true);\n\n\t\t\tconst result = await fetch(`${Api.apiBaseUrl}/discussions/${editDiscussionState.id}.json`, {\n\t\t\t\tmethod: 'PATCH',\n\t\t\t\theaders: {\n\t\t\t\t\t'Accept': 'application/json',\n\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tuser_token: userToken,\n\t\t\t\t\tname: editDiscussionState.name,\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tconst updatedDiscussion = await result.json();\n\t\t\tconsole.log(updatedDiscussion);\n\n\t\t\tsetEditDiscussionState(EDIT_DISCUSSION_INITIAL_STATE);\n\t\t\tfetchDiscussions();\n\t\t} catch (error) {\n\t\t\tsetDiscussionsLoading(false);\n\t\t\t// TODO: Handle error\n\t\t\tif (Platform.OS === 'web') {\n\t\t\t\tSentry.Browser.captureException(error);\n\t\t\t} else {\n\t\t\t\tSentry.Native.captureException(error);\n\t\t\t}\n\t\t}\n\t}, [setDiscussionsLoading, editDiscussionState.id, editDiscussionState.name, userToken, fetchDiscussions]);\n\n\tconst toggleMuted = useCallback(() => updateSettings({...settings, muted: !settings.muted}), [settings, updateSettings]);\n\n\tconst clearDiscussions = useCallback(async () => {\n\t\tsetClearDiscussionLoading(true);\n\n\t\t// TODO: Handle response and error\n\t\tconst response = await fetch(`${Api.apiBaseUrl}/discussions/clear?user_token=${userToken}`, {method: 'DELETE'});\n\t\tconsole.log(response);\n\n\t\tsetClearDiscussionLoading(false);\n\n\t\tsetDiscussions([]);\n\t\tupdateDiscussionId(null);\n\t}, [userToken, updateDiscussionId, setDiscussions]);\n\n\tconst toggleTheme = useCallback(() => {\n\t\tupdateSettings({...settings, theme: settings.theme === 'light' ? 'dark' : 'light'});\n\t}, [updateSettings, settings]);\n\n\tconst currentLanguage = useMemo(() => {\n\t\t// Note: Special case to make default en: en-US\n\t\tif (settings.language === 'en') {\n\t\t\treturn languageList.find(language => language.code === 'en-US');\n\t\t}\n\n\t\treturn languageList.find(language => settings.language.length === 2\n\t\t\t? settings.language === language.code.slice(0, 2)\n\t\t\t: settings.language === language.code\n\t\t) || languageList.find(language => language.code === 'en-US');\n\t}, [settings]);\n\n\tconst openLanguageModal = useCallback(() => {\n\t\tsetLanguageModalOpen(true);\n\t}, [setLanguageModalOpen]);\n\n\tconst closeLanguageModal = useCallback(() => {\n\t\tsetLanguageModalOpen(false);\n\t}, [setLanguageModalOpen]);\n\n\tconst handleChangeLanguage = useCallback(newLanguage => {\n\t\tupdateSettings({...settings, language: newLanguage.code});\n\t\tcloseDrawer();\n\t}, [updateSettings, settings, closeDrawer]);\n\n\tconst handleClearDiscussion = useCallback(() => {\n\t\tif (Platform.OS === 'web') {\n\t\t\tif (window.confirm(t('MainScreen.Drawer.alerts.clearDiscussions.message', 'Are you sure you want to clear discussions ?'))) {\n\t\t\t\tclearDiscussions();\n\t\t\t}\n\t\t} else {\n\t\t\tAlert.alert(\n\t\t\t\tt('MainScreen.Drawer.alerts.clearDiscussions.title', 'Clear discussions'),\n\t\t\t\tt('MainScreen.Drawer.alerts.clearDiscussions.message', 'Are you sure you want to clear discussions ?'),\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\ttext: t('MainScreen.Drawer.alerts.buttons.cancel', 'Cancel'),\n\t\t\t\t\t\tstyle: 'cancel',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttext: t('MainScreen.Drawer.alerts.buttons.confirm', 'Confirm'),\n\t\t\t\t\t\tonPress: clearDiscussions,\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t);\n\t\t}\n\t}, [clearDiscussions, t]);\n\n\tconst handleSettingsClick = useCallback(() => {\n\t\tnavigate('Account');\n\t\tcloseDrawer();\n\t}, [closeDrawer, navigate]);\n\n\tconst handleContactSupport = useCallback(() => {\n\t\topenLink('mailto:support@secretaire.ai');\n\t}, []);\n\n\tif (!drawerOpen) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t{discussionsLoading || clearDiscussionLoading\n\t\t\t\t\t\t? (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)\n\t\t\t\t\t\t: (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{discussions.map(discussion => (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{discussion.id === editDiscussionState.id\n\t\t\t\t\t\t\t\t\t\t\t\t? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t: (\n\t\t\t\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcloseDrawer();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetChatMode(true);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tupdateDiscussionId(discussion.id);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tselected={discussionId === discussion.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ticon={}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t{/**/}\n\t\t\t\t\t\t\t\t\t\t{/*\t*/}\n\t\t\t\t\t\t\t\t\t\t{/*\t\t{discussion.id === editDiscussionState.id*/}\n\t\t\t\t\t\t\t\t\t\t{/*\t\t\t? */}\n\t\t\t\t\t\t\t\t\t\t{/*\t\t\t: }*/}\n\t\t\t\t\t\t\t\t\t\t{/*\t*/}\n\t\t\t\t\t\t\t\t\t\t{/**/}\n\n\t\t\t\t\t\t\t\t\t\t{/*{discussion.id !== editDiscussionState.id && (*/}\n\t\t\t\t\t\t\t\t\t\t{/*\t*/}\n\t\t\t\t\t\t\t\t\t\t{/*\t\t*/}\n\t\t\t\t\t\t\t\t\t\t{/*\t\t\t*/}\n\t\t\t\t\t\t\t\t\t\t{/*\t\t*/}\n\t\t\t\t\t\t\t\t\t\t{/*\t*/}\n\t\t\t\t\t\t\t\t\t\t{/*)}*/}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t{user\n\t\t\t\t\t&& (user.daily_queries !== undefined && user.free_queries !== undefined)\n\t\t\t\t\t&& (user.status === 'guest' || subscribed === false) && (\n\t\t\t\t\t\t user.status === 'guest'\n\t\t\t\t\t\t\t\t? navigate('Signup')\n\t\t\t\t\t\t\t\t: navigate('Upgrade')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t}\n\t\t\t\t\t/>\n\n\t\t\t\t\t}\n\t\t\t\t\t/>\n\n\t\t\t\t\t\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{Platform.OS !== 'web' || window.MediaRecorder.isTypeSupported('audio/webm') && (\n\t\t\t\t\t\t setChatMode(!chatMode)}\n\t\t\t\t\t\t\ticon={}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{currentLanguage.flag}}\n\t\t\t\t\t/>\n\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\n\t\t\t{Dimensions.get('window').width < 1500 && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t)}\n\t\t\n\t);\n};\n\nconst getStyles = theme => StyleSheet.create({\n\tdrawerContainer: {\n\t\tposition: 'absolute',\n\t\ttop: 0,\n\t\tleft: 0,\n\t\theight: '100%',\n\t\tflexDirection: 'row',\n\n\t\tzIndex: 10,\n\t\televation: 10,\n\t},\n\tdrawer: {\n\t\tbackgroundColor: theme.headerBackground,\n\t\tborderStyle: 'solid',\n\t\tborderRightWidth: 1,\n\t\tborderRightColor: theme.headerBorderColor,\n\t\twidth: '70%',\n\t\tmaxWidth: DRAWER_MAX_WIDTH,\n\t\theight: '100%',\n\t\tpadding: 12,\n\t},\n\tbottomContainer: {\n\t\tpaddingTop: 12,\n\t\tborderStyle: 'solid',\n\t\tborderTopWidth: 1,\n\t\tborderTopColor: theme.inputBorderColor,\n\t},\n\tcloseArea: {\n\t\tflex: 1,\n\t\theight: '100%',\n\t},\n});\n\nexport default Drawer;\n","//\n// Note: Source code copied from: https://github.com/binaryminds/react-native-sse\n//\n// Patched _handleEvent (line 188) from\n//\n// `line = parts[i].replace(/^(\\s|\\u00A0)+|(\\s|\\u00A0)+$/g, '');`\n// to\n// `line = parts[i]; // .replace(/^(\\s|\\u00A0)+|(\\s|\\u00A0)+$/g, '');`\n//\n// Patched _handleEvent (line 197) from\n//\n// `data.push(line.replace(/data:?\\s*/, ''));`\n// to\n// `data.push(line.replace(/data:?\\s?/, ''));`\n//\n// In order to not strip the data of space character.\n//\n\nclass EventSource {\n\tERROR = -1;\n\tCONNECTING = 0;\n\tOPEN = 1;\n\tCLOSED = 2;\n\n\tconstructor(url, options = {}) {\n\t\tthis.interval = options.pollingInterval || 5000;\n\t\tthis.lastEventId = null;\n\t\tthis.lastIndexProcessed = 0;\n\t\tthis.eventType = undefined;\n\t\tthis.status = this.CONNECTING;\n\n\t\tthis.eventHandlers = {\n\t\t\topen: [],\n\t\t\tmessage: [],\n\t\t\terror: [],\n\t\t\tclose: [],\n\t\t};\n\n\t\tthis.method = options.method || 'GET';\n\t\tthis.timeout = options.timeOut || 0;\n\t\tthis.headers = options.headers || {};\n\t\tthis.body = options.body || undefined;\n\t\tthis.debug = options.debug || false;\n\n\t\tthis._xhr = null;\n\t\tthis._pollTimer = null;\n\n\t\tif (!url || (typeof url !== 'string' && typeof url.toString !== 'function')) {\n\t\t\tthrow new SyntaxError('[EventSource] Invalid URL argument.');\n\t\t}\n\n\t\tif (typeof url.toString === 'function') {\n\t\t\tthis.url = url.toString();\n\t\t} else {\n\t\t\tthis.url = url;\n\t\t}\n\n\t\tthis._pollAgain(500);\n\t}\n\n\t_pollAgain(time) {\n\t\tthis._pollTimer = setTimeout(() => {\n\t\t\tthis.open();\n\t\t}, time);\n\t}\n\n\topen() {\n\t\ttry {\n\t\t\tthis.lastIndexProcessed = 0;\n\t\t\tthis.status = this.CONNECTING;\n\n\t\t\tthis._xhr = new XMLHttpRequest();\n\t\t\tthis._xhr.open(this.method, this.url, true);\n\n\t\t\tif (this.headers) {\n\t\t\t\tfor (const [key, value] of Object.entries(this.headers)) {\n\t\t\t\t\tthis._xhr.setRequestHeader(key, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._xhr.setRequestHeader('Accept', 'text/event-stream');\n\t\t\tthis._xhr.setRequestHeader('Cache-Control', 'no-cache');\n\t\t\tthis._xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n\n\t\t\tif (this.lastEventId !== null) {\n\t\t\t\tthis._xhr.setRequestHeader('Last-Event-ID', this.lastEventId);\n\t\t\t}\n\n\t\t\tthis._xhr.timeout = this.timeout;\n\n\t\t\tthis._xhr.onreadystatechange = () => {\n\t\t\t\tconst xhr = this._xhr;\n\n\t\t\t\tif (this.debug) {\n\t\t\t\t\tconsole.debug(\n\t\t\t\t\t\t`[EventSource][onreadystatechange] ReadyState: ${xhr.readyState}, status: ${xhr.status}`\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (![XMLHttpRequest.DONE, XMLHttpRequest.LOADING].includes(xhr.readyState)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (xhr.status >= 200 && xhr.status < 400) {\n\t\t\t\t\tif (this.status === this.CONNECTING) {\n\t\t\t\t\t\tthis.status = this.OPEN;\n\t\t\t\t\t\tthis.dispatch('open', { type: 'open' });\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._handleEvent(xhr.responseText || '');\n\n\t\t\t\t\tif (xhr.readyState === XMLHttpRequest.DONE) {\n\t\t\t\t\t\tif (this.debug) {\n\t\t\t\t\t\t\tconsole.debug(\n\t\t\t\t\t\t\t\t'[EventSource][onreadystatechange][DONE] Operation done. Reconnecting...'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis._pollAgain(this.interval);\n\t\t\t\t\t}\n\t\t\t\t} else if (this.status !== this.CLOSED) {\n\t\t\t\t\tif (this._xhr.status !== 0) {\n\t\t\t\t\t\tthis.dispatch('error', {\n\t\t\t\t\t\t\ttype: 'error',\n\t\t\t\t\t\t\tmessage: xhr.responseText,\n\t\t\t\t\t\t\txhrStatus: xhr.status,\n\t\t\t\t\t\t\txhrState: xhr.readyState,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif ([XMLHttpRequest.DONE, XMLHttpRequest.UNSENT].includes(xhr.readyState)) {\n\t\t\t\t\t\tif (this.debug) {\n\t\t\t\t\t\t\tconsole.debug(\n\t\t\t\t\t\t\t\t'[EventSource][onreadystatechange][ERROR] Response status error. Reconnecting...'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// this._pollAgain(this.interval);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis._xhr.onerror = () => {\n\t\t\t\tthis.status === this.ERROR;\n\n\t\t\t\tthis.dispatch('error', {\n\t\t\t\t\ttype: 'error',\n\t\t\t\t\tmessage: this._xhr.responseText,\n\t\t\t\t\txhrStatus: this._xhr.status,\n\t\t\t\t\txhrState: this._xhr.readyState,\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tif (this.body) {\n\t\t\t\tthis._xhr.send(this.body);\n\t\t\t} else {\n\t\t\t\tthis._xhr.send();\n\t\t\t}\n\n\t\t\tif (this.timeout > 0) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (this._xhr.readyState === XMLHttpRequest.LOADING) {\n\t\t\t\t\t\tthis.dispatch('error', {\n\t\t\t\t\t\t\ttype: 'timeout',\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tthis.close();\n\t\t\t\t\t}\n\t\t\t\t}, this.timeout);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tthis.status = this.ERROR;\n\t\t\tthis.dispatch('error', {\n\t\t\t\ttype: 'exception',\n\t\t\t\tmessage: e.message,\n\t\t\t\terror: e,\n\t\t\t});\n\t\t}\n\t}\n\n\t_handleEvent(response) {\n\t\tconst parts = response.substr(this.lastIndexProcessed).split('\\n');\n\t\tthis.lastIndexProcessed = response.lastIndexOf('\\n\\n') + 2;\n\t\tlet data = [];\n\t\tlet retry = 0;\n\t\tlet line = '';\n\n\t\tfor (let i = 0; i < parts.length; i++) {\n\t\t\tline = parts[i]; // .replace(/^(\\s|\\u00A0)+|(\\s|\\u00A0)+$/g, '');\n\t\t\tif (line.indexOf('event') === 0) {\n\t\t\t\tthis.eventType = line.replace(/event:?\\s*/, '');\n\t\t\t} else if (line.indexOf('retry') === 0) {\n\t\t\t\tretry = parseInt(line.replace(/retry:?\\s*/, ''), 10);\n\t\t\t\tif (!isNaN(retry)) {\n\t\t\t\t\tthis.interval = retry;\n\t\t\t\t}\n\t\t\t} else if (line.indexOf('data') === 0) {\n\t\t\t\tdata.push(line.replace(/data:?\\s?/, ''));\n\t\t\t} else if (line.indexOf('id:') === 0) {\n\t\t\t\tthis.lastEventId = line.replace(/id:?\\s*/, '');\n\t\t\t} else if (line.indexOf('id') === 0) {\n\t\t\t\tthis.lastEventId = null;\n\t\t\t} else if (line === '') {\n\t\t\t\tif (data.length > 0) {\n\t\t\t\t\tconst eventType = this.eventType || 'message';\n\t\t\t\t\tconst event = {\n\t\t\t\t\t\ttype: eventType,\n\t\t\t\t\t\tdata: data.join(\"\\n\"),\n\t\t\t\t\t\turl: this.url,\n\t\t\t\t\t\tlastEventId: this.lastEventId,\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.dispatch(eventType, event);\n\n\t\t\t\t\tdata = [];\n\t\t\t\t\tthis.eventType = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\taddEventListener(type, listener) {\n\t\tif (this.eventHandlers[type] === undefined) {\n\t\t\tthis.eventHandlers[type] = [];\n\t\t}\n\n\t\tthis.eventHandlers[type].push(listener);\n\t}\n\n\tremoveEventListener(type, listener) {\n\t\tif (this.eventHandlers[type] !== undefined) {\n\t\t\tthis.eventHandlers[type] = this.eventHandlers[type].filter((handler) => handler !== listener);\n\t\t}\n\t}\n\n\tremoveAllEventListeners(type) {\n\t\tconst availableTypes = Object.keys(this.eventHandlers);\n\n\t\tif (type === undefined) {\n\t\t\tfor (const eventType of availableTypes) {\n\t\t\t\tthis.eventHandlers[eventType] = [];\n\t\t\t}\n\t\t} else {\n\t\t\tif (!availableTypes.includes(type)) {\n\t\t\t\tthrow Error(`[EventSource] '${type}' type is not supported event type.`);\n\t\t\t}\n\n\t\t\tthis.eventHandlers[type] = [];\n\t\t}\n\t}\n\n\tdispatch(type, data) {\n\t\tconst availableTypes = Object.keys(this.eventHandlers);\n\n\t\tif (!availableTypes.includes(type)) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const handler of Object.values(this.eventHandlers[type])) {\n\t\t\thandler(data);\n\t\t}\n\t}\n\n\tclose() {\n\t\tthis.status = this.CLOSED;\n\t\tclearTimeout(this._pollTimer);\n\t\tif (this._xhr) {\n\t\t\tthis._xhr.abort();\n\t\t}\n\n\t\tthis.dispatch('close', { type: 'close' });\n\t}\n}\n\nexport default EventSource;\n","export function throttle(func, wait, leading, trailing, context) {\n\tlet ctx, args, result;\n\tlet timeout = null;\n\tlet previous = 0;\n\n\tconst later = function () {\n\t\tprevious = new Date;\n\t\ttimeout = null;\n\t\tresult = func.apply(ctx, args);\n\t};\n\n\treturn function() {\n\t\tconst now = new Date;\n\n\t\tif (!previous && !leading) previous = now;\n\n\t\tconst remaining = wait - (now - previous);\n\t\tctx = context || this;\n\t\targs = arguments;\n\n\t\tif (remaining <= 0) {\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = null;\n\t\t\tprevious = now;\n\t\t\tresult = func.apply(ctx, args);\n\t\t} else if (!timeout && trailing) {\n\t\t\ttimeout = setTimeout(later, remaining);\n\t\t}\n\t\treturn result;\n\t};\n}\n","export const formatDate = (date, t) => {\n\tconst today = new Date();\n\n\tif (\n\t\tdate.getDate() === today.getDate()\n\t\t&& date.getMonth() === today.getMonth()\n\t\t&& date.getFullYear() === today.getFullYear()\n\t) {\n\t\treturn t('dateHelper.today', 'Today');\n\t}\n\n\tconst months = [\n\t\tt('dateHelper.months.jan', 'Jan'),\n\t\tt('dateHelper.months.feb', 'Feb'),\n\t\tt('dateHelper.months.mar', 'Mar'),\n\t\tt('dateHelper.months.apr', 'Apr'),\n\t\tt('dateHelper.months.may', 'May'),\n\t\tt('dateHelper.months.jun', 'Jun'),\n\t\tt('dateHelper.months.jul', 'Jul'),\n\t\tt('dateHelper.months.aug', 'Aug'),\n\t\tt('dateHelper.months.sep', 'Sep'),\n\t\tt('dateHelper.months.oct', 'Oct'),\n\t\tt('dateHelper.months.nov', 'Nov'),\n\t\tt('dateHelper.months.dec', 'Dec'),\n\t];\n\n\tconst monthName = months[date.getMonth()];\n\tconst day = date.getDate();\n\tconst year = date.getFullYear();\n\n\treturn `${monthName} ${day}, ${year}`;\n};\n\nexport const formatHoursAndMinutes = (hours, minutes) => {\n\tif (hours < 10) {\n\t\thours = `0${hours}`;\n\t}\n\n\tif (minutes < 10) {\n\t\tminutes = `0${minutes}`;\n\t}\n\n\treturn `${hours}:${minutes}`;\n};\n\nexport const formatTime = date => formatHoursAndMinutes(date.getHours(), date.getMinutes());\n\n","import React, {useContext, useMemo} from 'react';\nimport {\n Dimensions,\n Image,\n StyleSheet,\n Text,\n TouchableOpacity,\n TouchableWithoutFeedback,\n View,\n} from 'react-native';\n\nimport * as Localization from 'expo-localization';\n\nimport {ThemeContext, WEB_MAX_WIDTH} from '../../../contexts/ThemeContext';\nimport openLink from '../../../utils/openLink';\n\nconst PlaceCard = ({card, isLast}) => {\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme), [theme]);\n\n let distance_text = '';\n\n if (card.distance < 1.0) {\n distance_text = `${Math.round(card.distance * 100) * 10} m`;\n } else {\n distance_text = `${Math.round(card.distance)} km`;\n }\n\n return (\n \n {card.image_url ?\n \n : null}\n\n \n {card.title ?\n {card.title}\n : null}\n\n {card.subtitle || card.distance ? (\n \n {card.distance ? {`${distance_text} - `} : null}\n {card.subtitle}\n \n ) : null}\n\n {card.rating !== undefined && card.rating !== null ?\n \n {`⭐ ${card.rating}${card.total_ratings ? ` (${card.total_ratings})` : ''}${card.price_level ? ` - ${(Localization.getLocales()[0].currencySymbol || '$').repeat(card.price_level)}` : ''}`}\n \n : null}\n\n {card.link_1_title ?\n openLink(card.link_1_url)}>\n {card.link_1_title}\n \n : null}\n \n \n );\n};\n\nconst WeatherCard = ({card, isLast}) => {\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme), [theme]);\n\n return (\n \n \n {card.image_url ?\n \n : null}\n\n \n {card.data.temperature !== undefined && card.data.temperature !== null ?\n \n {card.data.temperature}°C\n \n : null}\n\n {(card.data.min_temperature !== undefined && card.data.min_temperature !== null)\n || (card.data.max_temperature !== undefined && card.data.max_temperature !== null) && (\n \n {card.data.min_temperature !== undefined && card.data.min_temperature !== null ?\n \n ↓ {card.data.min_temperature}°C\n \n : null}\n\n {card.data.max_temperature !== undefined && card.data.max_temperature !== null ?\n \n ↑ {card.data.max_temperature}°C\n \n : null}\n \n )}\n \n \n\n \n {card.title ?\n \n {card.title}\n \n : null}\n \n \n );\n};\n\nconst ImageCard = ({card, isLast}) => {\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme), [theme]);\n\n const hasAdditionnalInfo = card.title || card.subtitle || card.description || card.link_1_title || card.link_2_title || card.link_3_title || card.link_4_title || card.link_5_title || card.link_6_title;\n\n return (\n \n \n {card.image_url ?\n openLink(card.image_url)}>\n \n \n : null}\n \n\n {hasAdditionnalInfo && (\n \n {card.title ?\n {card.title}\n : null}\n\n {card.subtitle ?\n {card.subtitle}\n : null}\n\n {card.description ?\n {card.description}\n : null}\n\n {card.link_1_title ?\n openLink(card.link_1_url)}>\n {card.link_1_title}\n \n : null}\n\n {card.link_2_title ?\n openLink(card.link_2_url)}>\n {card.link_2_title}\n \n : null}\n\n {card.link_3_title ?\n openLink(card.link_3_url)}>\n {card.link_3_title}\n \n : null}\n\n {card.link_4_title ?\n openLink(card.link_4_url)}>\n {card.link_4_title}\n \n : null}\n\n {card.link_5_title ?\n openLink(card.link_5_url)}>\n {card.link_5_title}\n \n : null}\n\n {card.link_6_title ?\n openLink(card.link_6_url)}>\n {card.link_6_title}\n \n : null}\n \n )}\n \n );\n};\n\nconst Card = ({card, isLast}) => {\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme), [theme]);\n\n switch (card.card_type) {\n case 'place':\n return ;\n case 'weather':\n return ;\n case 'image':\n return ;\n default:\n return (\n \n {card.image_url ?\n \n : null}\n\n \n {card.title ?\n {card.title}\n : null}\n\n {card.subtitle ?\n {card.subtitle}\n : null}\n\n {card.description ?\n {card.description}\n : null}\n\n {card.link_1_title ?\n openLink(card.link_1_url)}>\n {card.link_1_title}\n \n : null}\n\n {card.link_2_title ?\n openLink(card.link_2_url)}>\n {card.link_2_title}\n \n : null}\n\n {card.link_3_title ?\n openLink(card.link_3_url)}>\n {card.link_3_title}\n \n : null}\n\n {card.link_4_title ?\n openLink(card.link_4_url)}>\n {card.link_4_title}\n \n : null}\n\n {card.link_5_title ?\n openLink(card.link_5_url)}>\n {card.link_5_title}\n \n : null}\n\n {card.link_6_title ?\n openLink(card.link_6_url)}>\n {card.link_6_title}\n \n : null}\n \n \n );\n }\n};\n\nconst getStyles = theme => StyleSheet.create({\n container: {\n marginTop: 6,\n backgroundColor: theme.backgroundSecondary,\n borderRadius: 20,\n borderColor: theme.backgroundSecondary,\n borderWidth: 1,\n borderStyle: 'solid',\n width: 202,\n },\n image: {\n width: 200,\n height: 200,\n borderTopLeftRadius: 20,\n borderTopRightRadius: 20,\n },\n title: {\n fontSize: 15,\n textAlign: 'left',\n fontWeight: 'bold',\n marginTop: 10,\n marginBottom: 5,\n color: theme.textPrimary,\n },\n subtitle: {\n fontSize: 14,\n textAlign: 'left',\n marginBottom: 5,\n color: theme.textSecondary,\n },\n description: {\n fontSize: 13,\n textAlign: 'left',\n marginBottom: 5,\n color: theme.textSecondary,\n },\n link: {\n fontSize: 15,\n textAlign: 'left',\n color: '#0279CC',\n marginBottom: 5,\n },\n});\n\nexport default Card;\n","import React, {useContext, useState} from 'react';\nimport {\n View,\n Text,\n Linking,\n Platform,\n} from 'react-native';\n\nimport {useNavigation} from '@react-navigation/native';\nimport {useTranslation} from 'react-i18next';\nimport * as Location from 'expo-location';\nimport * as Notifications from 'expo-notifications';\nimport * as Sentry from 'sentry-expo';\n\nimport {ThemeContext} from '../../../contexts/ThemeContext';\nimport {UserContext} from '../../../contexts/UserContext';\nimport StyledButton from '../../../components/StyledButton';\nimport openLink from '../../../utils/openLink';\nimport Api from '../../../constants/Api';\n\nconst ResponseLink = ({type, url, title, query, handleReprocessQuery, disabled}) => {\n const {t} = useTranslation();\n const {user, userToken, userId, setUser, subscribed} = useContext(UserContext);\n const {navigate} = useNavigation();\n const theme = useContext(ThemeContext);\n\n const [loading, setLoading] = useState(false);\n\n switch (type) {\n case 'SIGN_UP':\n return (\n <>\n \n {t(\n 'UpgradeMenu.textGuest',\n 'You get {{count}} free queries every day as a guest. Create your account to get more.',\n {count: user.free_queries},\n )}\n \n\n navigate('Signup')}\n disabled={disabled || user.status !== 'guest'}\n />\n \n );\n case 'UPGRADE':\n return (\n <>\n \n {t(\n 'UpgradeMenu.textUser',\n 'You get {{count}} free queries every day. Upgrade to a premium account to get unlimited queries and much more.',\n {count: (user || {}).free_queries},\n )}\n \n\n navigate('Upgrade')}\n disabled={disabled || subscribed}\n />\n \n );\n case 'PREMIUM_FEATURE':\n return (\n <>\n \n {t(\n 'ResponseLinks.premiumFeature.text',\n 'You need a premium account to get access to this feature.',\n )}\n \n\n navigate('Upgrade')}\n disabled={disabled || subscribed}\n />\n \n );\n case 'PERMISSION_LOCATION':\n return (\n {\n const {canAskAgain} = await Location.getForegroundPermissionsAsync();\n\n if (canAskAgain) {\n try {\n const {status} = await Location.requestForegroundPermissionsAsync();\n\n if (status === 'granted') {\n setLoading(true);\n const location = await Location.getCurrentPositionAsync({enableHighAccuracy: false});\n\n handleReprocessQuery(query, {\n latitude: location.coords.latitude,\n longitude: location.coords.longitude,\n });\n }\n } catch (error) {\n // TODO: Handle error\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n } finally {\n setLoading(false);\n }\n } else {\n Linking.openSettings();\n }\n }}\n />\n );\n case 'PERMISSION_PUSH_NOTIFICATION':\n return (\n {\n const {canAskAgain} = await Notifications.getPermissionsAsync();\n\n if (canAskAgain) {\n const {status} = await Notifications.requestPermissionsAsync();\n\n if (status === 'granted') {\n try {\n setLoading(true);\n\n const token = (await Notifications.getExpoPushTokenAsync()).data;\n\n const result = await fetch(`${Api.apiBaseUrl}/users/${userId}`, {\n method: 'PATCH',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n user_token: userToken,\n push_token: token,\n has_notifications_enabled: true,\n }),\n });\n\n const updatedUser = await result.json();\n\n setUser(updatedUser);\n setLoading(false);\n\n // Note: We can't send an empty update but we don't need to update anything on the query, since it's\n // the user that has been updated, so we send the same text back.\n handleReprocessQuery(query, {text: query.text});\n } catch (error) {\n // TODO: Handle error\n console.log('error', error);\n setLoading(false);\n\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n }\n }\n } else {\n Linking.openSettings();\n }\n }}\n />\n );\n case 'URL':\n return (\n openLink(url)}\n />\n );\n }\n};\n\nconst ResponseLinks = ({query, response, handleReprocessQuery, disabled}) => {\n const results = [];\n\n for (let i = 1; i < 5; i++) {\n if (response[`link_${i}_type`]) {\n results.push(\n \n );\n }\n }\n\n if (!results.length) return null;\n\n return (\n \n {results}\n \n );\n};\n\nexport default ResponseLinks;\n","import React, {useEffect, useRef, useState} from 'react';\nimport {\n View,\n Platform,\n ActivityIndicator,\n} from 'react-native';\n\nimport * as Location from 'expo-location';\n\nlet Maps;\nlet PlacesMap;\n\nif (Platform.OS !== 'web') {\n Maps = require('react-native-maps');\n\n // eslint-disable-next-line react/display-name\n PlacesMap = ({cards}) => {\n const mapViewRef = useRef();\n\n const [showUserLocation, setShowUserLocation] = useState(false);\n\n useEffect(() => {\n const checkLocationPermission = async () => {\n const locationPerm = await Location.getForegroundPermissionsAsync();\n\n if (locationPerm.granted) {\n setShowUserLocation(true);\n }\n };\n\n checkLocationPermission();\n }, []);\n\n return (\n \n {\n setTimeout(() => mapViewRef.current && mapViewRef.current.fitToSuppliedMarkers(\n cards.map(({id}) => id.toString()),\n {\n animated: false,\n edgePadding: Platform.OS === 'ios'\n ? {\n top: 40,\n right: 15,\n bottom: 15,\n left: 15,\n }\n : {\n top: 150,\n right: 50,\n bottom: 50,\n left: 50,\n },\n }\n ), 0);\n }}\n >\n {cards.map(card => card.card_type === 'place' && (\n \n ))}\n \n \n );\n };\n} else {\n Maps = require('@react-google-maps/api');\n\n // eslint-disable-next-line react/display-name\n PlacesMap = ({cards}) => {\n const {isLoaded, loadError} = Maps.useLoadScript({\n googleMapsApiKey: 'AIzaSyC6fgqbEA1FjrlKFs1Xz85Fps8tm_enBvI',\n });\n\n const renderMap = () => {\n // wrapping to a function is useful in case you want to access `window.google`\n // to eg. setup options or create latLng object, it won't be available otherwise\n // feel free to render directly if you don't need that\n\n function onLoad (mapInstance) {\n // do something with map Instance\n const bounds = new window.google.maps.LatLngBounds();\n\n cards.forEach(card => {\n if (card.card_type === 'place') {\n bounds.extend(new window.google.maps.LatLng(card.latitude, card.longitude));\n }\n });\n\n mapInstance.fitBounds(bounds);\n }\n\n return (\n \n \n {cards.map(card => card.card_type === 'place' && (\n \n ))}\n \n \n );\n };\n\n if (loadError) {\n return
Map cannot be loaded right now, sorry.
;\n }\n\n return isLoaded ? renderMap() : ;\n };\n}\n\nexport default PlacesMap;\n","import React, {useCallback, useContext, useMemo} from 'react';\nimport {\n Text,\n View,\n ScrollView,\n StyleSheet,\n TouchableOpacity,\n Share,\n Platform,\n Dimensions,\n} from 'react-native';\n\nimport {FontAwesome, MaterialIcons} from '@expo/vector-icons';\nimport {useTranslation} from 'react-i18next';\nimport * as Sentry from 'sentry-expo';\nimport {useNavigation} from '@react-navigation/native';\n\nimport Api from '../../../constants/Api';\nimport {ThemeContext, WEB_MAX_WIDTH} from '../../../contexts/ThemeContext';\nimport {formatDate, formatTime} from '../../../helpers/dateHelper';\nimport {debounce} from '../../../utils/debounce';\n\nimport Card from './Card';\nimport Bubble from './Bubble';\nimport ResponseLinks from './ResponseLinks';\nimport PlacesMap from './PlacesMap';\nimport {UserContext} from '../../../contexts/UserContext';\n\nconst CHANNEL_ICONS = {\n Recording: ,\n recording: ,\n Web: ,\n web: ,\n Whatsapp: ,\n whatsapp: ,\n Email: ,\n email: ,\n Slack: ,\n slack: ,\n Telegram: ,\n telegram: ,\n Keyboard: ,\n keyboard: ,\n Sms: ,\n sms: ,\n Message: ,\n message: ,\n};\n\nconst Chat = ({\n scrollViewRef,\n onScrollBeginDrag,\n queries,\n setQueryText,\n handleReprocessQuery,\n exampleSections,\n canStopGenerating,\n disableResponseLinks = false,\n disableQueryLinks = false,\n}) => {\n const {t} = useTranslation();\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme), [theme]);\n const {navigate} = useNavigation();\n const {user} = useContext(UserContext);\n\n let currentDate = queries.length ? new Date(queries[0].created_at) : null;\n\n const handleShare = useCallback((query, response) => debounce(async () => {\n try {\n let cardsText = '';\n\n if (response.cards.length) {\n if (response.cards.length === 1) {\n // TODO: Handle weather and shazam cards\n const card = response.cards[0];\n\n if (card.card_type === 'image') {\n cardsText = `\\n${card.image_url}`;\n }\n } else {\n const texts = response.cards.reduce((result, card) => {\n if (card.card_type === 'place') {\n result.push(`- ${card.title} (${card.link_1_url})`);\n }\n\n return result;\n }, []);\n\n if (texts.length) {\n cardsText = `\\n\\n${texts.join('\\n')}`;\n }\n }\n }\n\n const result = await Share.share({\n message: `${response.message}${cardsText}\\n\\n${t('MainScreen.ChatView.Chat.sharedByText', 'Message shared via {{appName}}.', {appName: Api.appName})}`,\n }, {\n subject: query.text,\n });\n\n if (result.action === Share.sharedAction) {\n if (result.activityType) {\n // shared with activity type of result.activityType\n } else {\n // shared\n }\n } else if (result.action === Share.dismissedAction) {\n // dismissed\n }\n } catch (error) {\n // TODO: Handle errors\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n }\n }, 300, true), [t]);\n\n return (\n \n {!(queries || []).length && (exampleSections || []).length ? (\n \n \n {t(\n 'MainScreen.ChatView.Chat.exampleIntroduction',\n 'Here are some examples of the things you can ask :'\n )}\n \n\n {exampleSections.map(({title, examples}) => (\n \n \n {title}\n \n\n {(examples || []).length > 0 && (\n \n {examples.map((example, i) => (\n setQueryText(example)}>\n 600 ? 3 : 2) - 18,\n height: 100,\n justifyContent: 'center',\n paddingHorizontal: 12,\n }, {\n marginRight: i === examples.length - 1 ? 0 : 12,\n }]}\n >\n \n {example}\n \n \n \n ))}\n \n )}\n \n ))}\n \n ) : null}\n\n {queries.map((query, i) => {\n if (Object.keys(query).length === 0) {\n return null;\n }\n\n let shouldDisplayDate = i === 0;\n\n const queryDate = new Date(query.created_at);\n\n if (\n queryDate.getDate() !== currentDate.getDate()\n || queryDate.getMonth() !== currentDate.getMonth()\n || queryDate.getFullYear() !== currentDate.getFullYear()\n ) {\n currentDate = queryDate;\n shouldDisplayDate = true;\n }\n\n // if (query.status === 'pending') {\n // const fakeResponseId = uuid.v4();\n //\n // query.responses.push({\n // id: fakeResponseId,\n // message: null,\n // created_at: Date.now(),\n // channel: query.channel,\n // source: undefined,\n // cards: [],\n // });\n // }\n\n return (\n \n {shouldDisplayDate && (\n \n )}\n\n {!user.expert_mode || disableQueryLinks || query.status === 'processing'\n ? (\n \n )\n : (\n navigate('Query', {id: query.id})}>\n \n \n )}\n\n\n \n {CHANNEL_ICONS[query.channel]} {formatTime(queryDate)}\n \n\n {query.status === 'empty'\n ? null\n : !query.responses || !query.responses.length\n ? queryDate.getTime() > Date.now() - 60000\n // Note: Loading\n ? query.text ? : null\n // Note: Timed out\n : (\n \n )\n // Note: Actual responses\n : query.responses.sort((a, b) => a.id - b.id).map(response => (\n \n \n \n \n \n\n \n \n \n \n \n \n\n {(response.cards || []).length > 0 && response.cards.find(({card_type}) => card_type === 'place') && (\n \n )}\n\n {(response.cards || []).length > 0 && (\n \n {response.cards.map((card, i) => (\n \n ))}\n \n )}\n\n \n <>{CHANNEL_ICONS[response.channel]} {formatTime(new Date(response.created_at))}{response.source ? ` ${t('MainScreen.ChatView.Chat.source', '- Source: {{source}}', {source: response.source})}`: ''}\n \n \n ))\n }\n \n );\n })}\n \n );\n};\n\nconst getStyles = theme => StyleSheet.create({\n examplesContainer: {\n flex: 1,\n paddingTop: 30,\n },\n text: {\n textAlign: 'center',\n color: theme.textPrimary,\n fontSize: 16,\n },\n});\n\nexport default Chat;\n","export function debounce(func, wait, immediate, context) {\n\tlet result;\n\tlet timeout = null;\n\n\treturn function() {\n\t\tconst ctx = context || this, args = arguments;\n\t\tconst later = function () {\n\t\t\ttimeout = null;\n\t\t\tif (!immediate) result = func.apply(ctx, args);\n\t\t};\n\t\tconst callNow = immediate && !timeout;\n\t\tclearTimeout(timeout);\n\t\ttimeout = setTimeout(later, wait);\n\t\tif (callNow) result = func.apply(ctx, args);\n\t\treturn result;\n\t};\n}\n","import {useState, useCallback} from 'react';\n\nimport {Alert, Linking} from 'react-native';\nimport {Audio, InterruptionModeAndroid, InterruptionModeIOS} from 'expo-av';\nimport {useTranslation} from 'react-i18next';\n\nconst recordingOptions = {\n isMeteringEnabled: true,\n android: {\n extension: '.m4a',\n outputFormat: Audio.AndroidOutputFormat.AMR_WB,\n audioEncoder: Audio.AndroidAudioEncoder.AMR_WB,\n sampleRate: 16000,\n numberOfChannels: 1,\n bitRate: 16000,\n },\n ios: {\n extension: '.wav',\n // audioQuality: Audio.RECORDING_OPTION_IOS_AUDIO_QUALITY_HIGH,\n audioQuality: Audio.IOSAudioQuality.HIGH,\n sampleRate: 44100,\n numberOfChannels: 1,\n bitRate: 128000,\n linearPCMBitDepth: 16,\n linearPCMIsBigEndian: false,\n linearPCMIsFloat: false,\n },\n web: {\n mimeType: 'audio/webm',\n bitsPerSecond: 128000,\n },\n};\n\nconst INITIAL_STATE = {\n status: 'initial',\n recordingFile: null,\n startingPromise: null,\n};\n\nconst useRecorder = () => {\n const {t} = useTranslation();\n const [state, setState] = useState(INITIAL_STATE);\n\n const requestPermissions = useCallback(async beforeRequestingCallback => {\n const audioPerm = await Audio.getPermissionsAsync();\n console.log('Audio perm before request', audioPerm);\n\n if (audioPerm.granted === false) {\n beforeRequestingCallback();\n\n if (audioPerm.canAskAgain === false) {\n return Alert.alert(\n t('useRecorder.alert.title', 'Microphone permission needed'),\n t('useRecorder.alert.message', 'Microphone permission is denied, please go to settings to enable it.'),\n [\n {text: t('useRecorder.alert.buttons.cancel', 'Cancel'), style: 'cancel'},\n {text: t('useRecorder.alert.buttons.confirm', 'Open settings'), onPress: () => Linking.openSettings()},\n ]\n );\n }\n\n console.log('Requesting permissions..');\n return Audio.requestPermissionsAsync();\n }\n }, []);\n\n const start = useCallback(async () => {\n if (state.status !== 'initial') {\n return ;\n }\n\n const audioRecording = new Audio.Recording();\n\n // eslint-disable-next-line no-async-promise-executor\n const startingPromise = new Promise(async (resolve) => {\n await Audio.setAudioModeAsync({\n allowsRecordingIOS: true,\n interruptionModeIOS: InterruptionModeIOS.MixWithOthers,\n playsInSilentModeIOS: true,\n shouldDuckAndroid: true,\n interruptionModeAndroid: InterruptionModeAndroid.DuckOthers,\n playThroughEarpieceIOS: false,\n playThroughEarpieceAndroid: false,\n });\n\n const beforePrep = Date.now();\n await audioRecording.prepareToRecordAsync(recordingOptions);\n console.log('prepareToRecordAsync duration', Date.now() - beforePrep);\n\n const beforeStart = Date.now();\n await audioRecording.startAsync();\n console.log('startAsync duration', Date.now() - beforeStart);\n\n console.log('Recording started: ', audioRecording);\n\n setState({status: 'recording', recordingFile: audioRecording, startingPromise});\n\n resolve(audioRecording);\n });\n\n setState({status: 'starting', recordingFile: audioRecording, startingPromise});\n\n return startingPromise;\n }, [state]);\n\n const stop = useCallback(async () => {\n if (state.status === 'initial') {\n return ;\n }\n\n await state.startingPromise;\n\n try {\n await state.recordingFile.stopAndUnloadAsync();\n\n console.log('Recording stopped');\n\n setState(INITIAL_STATE);\n\n return state.recordingFile.getURI();\n } catch (error) {\n if (error.code === 'E_AUDIO_NODATA') {\n // Note: This error happen on android when recording is stopped too quickly, in this case\n // the recording file should be discarded.\n // See: https://docs.expo.dev/versions/v47.0.0/sdk/audio/#stopandunloadasync\n\n setState(INITIAL_STATE);\n }\n\n // TODO: Handle error\n console.log('Error stopping the recording', error);\n }\n }, [state]);\n\n return {\n state,\n requestPermissions,\n start,\n stop,\n };\n};\n\nexport default useRecorder;\n","import React, {useContext, useEffect, useMemo, useRef, useState} from 'react';\n\nimport {Dimensions, Pressable, StyleSheet, View} from 'react-native';\n\nimport {ThemeContext} from '../contexts/ThemeContext';\n\nconst MODAL_HORIZONTAL_MARGIN = 12;\nconst MODAL_PADDING = 10;\nconst BORDER_WIDTH = 1;\nconst TRIANGLE_SIZE = 10;\n\nconst Menu = ({\n style,\n anchor,\n open,\n close,\n position = 'top',\n variant = 'regular',\n children,\n}) => {\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme, {position, variant}), [theme]);\n\n const menuRef = useRef(null);\n\n const [menuMeasurement, setMenuMeasurement] = useState({height: 0, x: -1000, opacity: 0});\n const [anchorMeasurement, setAnchorMeasurement] = useState({width: 0, x: -1000});\n\n useEffect(() => {\n if (menuRef.current) {\n setTimeout(() => menuRef.current.measure((fx, fy, width, height, px) => {\n setMenuMeasurement({height, x: px, opacity: 1});\n }), 0);\n }\n }, [open]);\n\n useEffect(() => {\n if (anchor.current) {\n setTimeout(() => anchor && anchor.current && anchor.current.measure((fx, fy, width, height, px) => {\n setAnchorMeasurement({width, x: px});\n }), 0);\n }\n }, [anchor, open]);\n\n if (!open) return null;\n\n return (\n \n \n {children}\n \n\n {variant === 'regular' && (\n \n )}\n\n \n \n );\n};\n\nconst getStyles = (theme, {position, variant}) => StyleSheet.create({\n modalView: {\n position: 'absolute',\n right: MODAL_HORIZONTAL_MARGIN,\n backgroundColor: variant === 'regular' ? theme.headerBackground : theme[variant],\n borderRadius: 10,\n ...(variant === 'regular'\n ? {\n borderStyle: 'solid',\n borderColor: theme.colorSecondary,\n borderWidth: BORDER_WIDTH,\n }\n : {}\n ),\n padding: MODAL_PADDING,\n alignItems: 'center',\n },\n modalText: {\n color: theme.textPrimary,\n fontSize: 16,\n textAlign: 'center',\n },\n triangle: {\n position: 'absolute',\n width: 0,\n height: 0,\n borderStyle: 'solid',\n borderLeftWidth: TRIANGLE_SIZE,\n borderLeftColor: 'transparent',\n borderRightWidth: TRIANGLE_SIZE,\n borderRightColor: 'transparent',\n },\n innerTriangle: {\n ...(position === 'top'\n ? {\n bottom: -(TRIANGLE_SIZE - BORDER_WIDTH),\n borderTopWidth: TRIANGLE_SIZE,\n borderTopColor: variant === 'regular' ? theme.headerBackground : theme[variant],\n }\n : {\n top: -(TRIANGLE_SIZE - BORDER_WIDTH),\n borderBottomWidth: TRIANGLE_SIZE,\n borderBottomColor: variant === 'regular' ? theme.headerBackground : theme[variant],\n }\n ),\n },\n outerTriangle: {\n ...(position === 'top'\n ? {\n bottom: -TRIANGLE_SIZE,\n borderTopWidth: TRIANGLE_SIZE,\n borderTopColor: variant === 'regular' ? theme.colorSecondary : undefined,\n }\n : {\n top: -TRIANGLE_SIZE,\n borderBottomWidth: TRIANGLE_SIZE,\n borderBottomColor: variant === 'regular' ? theme.colorSecondary : undefined,\n }\n ),\n },\n});\n\nexport default Menu;\n","import React, {forwardRef, useContext, useMemo} from 'react';\nimport {StyleSheet, TouchableOpacity, View} from 'react-native';\n\nimport {ThemeContext} from '../../contexts/ThemeContext';\n\nexport const BUTTON_SIZE = 47;\nexport const BUTTON_MARGIN_LEFT = 8;\n\n// eslint-disable-next-line react/display-name\nconst FooterButton = forwardRef(({disabled, iconBackgroundColor, icon, ...props}, ref) => {\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme), [theme]);\n\n return (\n \n \n {icon}\n \n \n );\n});\n\nconst getStyles = () => StyleSheet.create({\n touch: {\n height: '100%',\n justifyContent: 'center',\n },\n icon: {\n width: BUTTON_SIZE,\n height: BUTTON_SIZE,\n alignItems: 'center',\n justifyContent: 'center',\n marginLeft: BUTTON_MARGIN_LEFT,\n marginRight: 12,\n borderRadius: BUTTON_SIZE / 2,\n },\n});\n\nexport default FooterButton;\n","import React, {useCallback, useContext, useMemo, useRef, useState} from 'react';\n\nimport {Animated, Dimensions, Image, Platform, StyleSheet, Text} from 'react-native';\nimport uuid from 'react-native-uuid';\nimport {useTranslation} from 'react-i18next';\nimport * as Device from 'expo-device';\nimport * as Location from 'expo-location';\nimport * as Haptics from 'expo-haptics';\nimport * as Sentry from 'sentry-expo';\nimport Constants from 'expo-constants';\n\nimport Api from '../../constants/Api';\nimport {UserContext} from '../../contexts/UserContext';\nimport {SettingsContext} from '../../contexts/SettingsContext';\nimport {ThemeContext} from '../../contexts/ThemeContext';\nimport {formatHoursAndMinutes} from '../../helpers/dateHelper';\nimport useRecorder from '../../hooks/useRecorder';\nimport useSpeaker from '../../hooks/useSpeaker';\nimport Menu from '../../components/Menu';\n\nimport FooterButton from './FooterButton';\n\nconst LONG_PRESS_TIME = 300;\n\nlet alertCloseTimeout;\nlet timerInterval;\nlet microphonePermissionsRequested = false;\n\nconst Recorder = ({disabled, pushLocalQuery, updateCurrentQuery, createQuery, scrollViewRef}) => {\n const {t} = useTranslation();\n const {userToken} = useContext(UserContext);\n const {settings: {language}} = useContext(SettingsContext);\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme), [theme]);\n\n const recordButtonRef = useRef(null);\n\n const recorder = useRecorder();\n const speaker = useSpeaker();\n const [shortPressAlertVisible, setShortPressAlertVisible] = useState(false);\n const [displayTime, setDisplayTime] = useState(0);\n const [uploading, setUploading] = useState(false);\n\n const handleUploadRecording = useCallback(async (uri, ref) => {\n try {\n const formData = new FormData();\n\n formData.append('user_token', userToken);\n formData.append('recording[ref]', ref);\n\n if(Platform.OS === 'web') {\n const blob = await (await fetch(uri)).blob();\n\n formData.append('recording[file]', blob, 'recording_' + Constants.sessionId + '_' + Date.now() + '.wav');\n } else {\n\n formData.append('recording[file]', {\n uri,\n type: 'audio/x-wav',\n name: 'recording_' + Constants.sessionId + '_' + Date.now() + '.wav',\n });\n }\n\n formData.append('recording[language]', language); // fr-FR\n formData.append('recording[device_brand]', Device.brand); // Android: \"google\", \"xiaomi\"; iOS: \"Apple\"; web: null\n formData.append('recording[device_name]', Device.deviceName); // \"Vivian's iPhone XS\"\n formData.append('recording[device_manufacturer]', Device.manufacturer); // Android: \"Google\", \"xiaomi\"; iOS: \"Apple\"; web: \"Google\", null\n formData.append('recording[device_os_name]', Platform.OS);\n formData.append('recording[device_os_version]', Device.osVersion);\n formData.append('recording[device_model_name]', Device.modelName);\n formData.append('recording[expo_session_id]', Constants.sessionId);\n formData.append('recording[expo_installation_id]', Constants.installationId);\n\n if(Platform.OS === 'web') {\n formData.append('recording[encoding]', 'WEBM_OPUS');\n formData.append('recording[sample_rate]', '48000');\n formData.append('recording[bit_rate]', '128000');\n } else if(Platform.OS === 'ios') {\n formData.append('recording[encoding]', 'LINEAR16');\n formData.append('recording[sample_rate]', '48000');\n formData.append('recording[bit_rate]', '128000');\n } else {\n formData.append('recording[encoding]', 'AMR_WB');\n formData.append('recording[sample_rate]', '16000');\n formData.append('recording[bit_rate]', '16000');\n }\n\n const deviceType = await Device.getDeviceTypeAsync();\n if(deviceType === 0) { formData.append('recording[device_type]', 'unknown'); }\n else if(deviceType === 1) { formData.append('recording[device_type]', 'phone'); }\n else if(deviceType === 2) { formData.append('recording[device_type]', 'tablet'); }\n else if(deviceType === 3) { formData.append('recording[device_type]', 'desktop'); }\n else if(deviceType === 4) { formData.append('recording[device_type]', 'tv'); }\n else { formData.append('recording[device_type]', 'UNKNOWN'); }\n\n let locationPerm = {};\n\n if (Platform.OS === 'web') {\n const {state} = await navigator.permissions.query({name: 'geolocation'});\n\n locationPerm = {granted: state === 'granted'};\n } else {\n locationPerm = await Location.getForegroundPermissionsAsync();\n }\n\n if (locationPerm.granted) {\n let location = await Location.getLastKnownPositionAsync({\n requiredAccuracy: 300, // Note: Return null if ~300 meter away from last known location\n maxAge: 600000, // Note: Return null if last known location is more than 10m old\n });\n\n if (!location) {\n location = await Location.getCurrentPositionAsync({\n accuracy: Location.Accuracy.High,\n mayShowUserSettingsDialog: false,\n });\n }\n\n formData.append('recording[latitude]', location.coords.latitude);\n formData.append('recording[longitude]', location.coords.longitude);\n }\n\n const response = await fetch(`${Api.apiBaseUrl}/recordings.json`, {\n method: 'POST',\n body: formData,\n });\n\n return await response.json();\n } catch (error) {\n // TODO: Handle errors\n console.log('There was an error during upload.', error);\n throw error;\n }\n }, [userToken, language]);\n\n const scaleAnim = useRef(new Animated.Value(1.0)).current;\n const translateAnim = useRef(new Animated.Value(Dimensions.get('window').width)).current;\n\n const recorderAnimation = useMemo(() => (\n Animated.stagger(400, [\n Animated.timing(translateAnim, {toValue: 0, duration: 400, useNativeDriver: true}),\n Animated.loop(\n Animated.sequence([\n Animated.timing(scaleAnim, {toValue: 1.0, duration: 400, useNativeDriver: true}),\n Animated.timing(scaleAnim, {toValue: 0.6, duration: 400, useNativeDriver: true}),\n Animated.timing(scaleAnim, {toValue: 1.0, duration: 400, useNativeDriver: true}),\n ])\n ),\n ])\n ), [scaleAnim, translateAnim]);\n\n const handleLongPress = useCallback(async () => {\n // Note: If this press triggered a permission request we don't want to do anything else\n if (microphonePermissionsRequested) {\n microphonePermissionsRequested = false;\n return;\n }\n\n speaker.stop();\n\n if (Platform.OS !== 'web') {\n Haptics.impactAsync(Haptics.ImpactFeedbackStyle.High);\n }\n\n await recorder.start();\n\n const startTime = Date.now();\n\n timerInterval = setInterval(() => {\n setDisplayTime(Math.round((Date.now() - startTime) / 1000));\n }, 1000);\n\n recorderAnimation.start();\n }, [recorder, recorderAnimation, speaker]);\n\n const handlePress = useCallback(async () => {\n // Note: If this press triggered a permission request we don't want to do anything else\n if (microphonePermissionsRequested) {\n microphonePermissionsRequested = false;\n return;\n }\n\n if (Platform.OS !== 'web') {\n Haptics.notificationAsync(Haptics.NotificationFeedbackType.Error);\n }\n\n setShortPressAlertVisible(true);\n\n // Note: We always clear the last alertCloseTimeout to replace it with the new one\n clearTimeout(alertCloseTimeout);\n alertCloseTimeout = setTimeout(() => setShortPressAlertVisible(false), 2000);\n }, []);\n\n const handlePressIn = useCallback(async () => {\n await recorder.requestPermissions(() => {\n microphonePermissionsRequested = true;\n });\n }, [recorder]);\n\n const handlePressOut = useCallback(async () => {\n if (recorder.state.status === 'starting') {\n recorder.stop();\n } else if (recorder.state.status === 'recording') {\n try {\n setUploading(true);\n\n if (Platform.OS !== 'web') {\n Haptics.impactAsync(Haptics.ImpactFeedbackStyle.High);\n }\n\n const uri = await recorder.stop();\n\n const ref = uuid.v4();\n\n const localQuery = {\n ref,\n status: 'processing',\n text: null,\n channel: 'recording',\n created_at: new Date(),\n updated_at: new Date(),\n responses: [],\n };\n\n // Note: Optimistically add a fake query until the server return the result\n const localQueries = pushLocalQuery(localQuery);\n\n setTimeout(() => scrollViewRef && scrollViewRef.current && scrollViewRef.current.scrollToEnd({animated: true}), 0);\n\n let recording;\n\n try {\n recording = await handleUploadRecording(uri, ref);\n\n // Note: Update localQuery text with the transcription of the recording\n localQuery.text = recording.transcription;\n\n if (recording.status === 'failed') {\n localQuery.text = t('MainScreen.ChatView.Recorder.errors.noAudio', 'No audio detected');\n localQuery.status = 'empty';\n }\n } catch (error) {\n localQuery.text = t('MainScreen.ChatView.Recorder.errors.recordingFailed', 'Sorry, something went wrong, try again later.');\n localQuery.status = 'empty';\n\n recording = null;\n\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n }\n\n updateCurrentQuery(localQueries, localQuery);\n\n setTimeout(() => scrollViewRef && scrollViewRef.current && scrollViewRef.current.scrollToEnd({animated: true}), 0);\n\n Animated.timing(translateAnim, {\n toValue: Dimensions.get('window').width,\n duration: 300,\n useNativeDriver: true,\n }).start(async () => {\n setUploading(false);\n\n if (Platform.OS !== 'web') {\n Haptics.notificationAsync(Haptics.NotificationFeedbackType.Success);\n }\n\n clearInterval(timerInterval);\n recorderAnimation.reset();\n setDisplayTime(0);\n\n if (recording && recording.status !== 'failed') {\n await createQuery({\n ref,\n channel: 'recording',\n text: recording.transcription,\n recordingId: recording.id,\n }, localQueries, localQuery);\n\n setTimeout(() => scrollViewRef && scrollViewRef.current && scrollViewRef.current.scrollToEnd({animated: true}), 0);\n }\n });\n } catch (error) {\n console.log('There was an error during upload.', error);\n\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n }\n }\n }, [\n recorder,\n pushLocalQuery,\n updateCurrentQuery,\n translateAnim,\n scrollViewRef,\n handleUploadRecording,\n t,\n recorderAnimation,\n createQuery,\n ]);\n\n return (\n <>\n \n {uploading\n ? (\n \n {t('MainScreen.ChatView.Recorder.uploading', 'Uploading...')}\n \n )\n : (\n <>\n \n\n \n {formatHoursAndMinutes(Math.floor(displayTime / 60), (displayTime % 60))}\n \n \n )}\n \n\n {!uploading && (\n \n }\n />\n )}\n\n setShortPressAlertVisible(false)}\n position=\"top\"\n variant=\"warning\"\n >\n \n {t('MainScreen.ChatView.Recorder.errors.holdButton', 'Hold the button while speaking.')}\n \n \n \n );\n};\n\nconst getStyles = () => StyleSheet.create({\n centeredView: {\n flex: 1,\n },\n modalText: {\n color: '#fff',\n fontSize: 16,\n textAlign: 'center',\n },\n});\n\nexport default Recorder;\n","import React, {useCallback, useContext, useEffect, useMemo, useRef, useState} from 'react';\n\nimport {\n ActivityIndicator,\n AppState,\n Dimensions,\n Keyboard,\n Platform,\n SafeAreaView,\n StyleSheet,\n View,\n} from 'react-native';\nimport uuid from 'react-native-uuid';\n\nimport * as Device from 'expo-device';\nimport * as Location from 'expo-location';\nimport * as Haptics from 'expo-haptics';\nimport * as Localization from 'expo-localization';\nimport * as Sentry from 'sentry-expo';\nimport {FontAwesome} from '@expo/vector-icons';\nimport Constants from 'expo-constants';\nimport {useTranslation} from 'react-i18next';\n\nimport EventSource from '../../utils/SourceEvent';\nimport {UserContext} from '../../contexts/UserContext';\nimport {SettingsContext} from '../../contexts/SettingsContext';\nimport {ThemeContext, WEB_MAX_WIDTH} from '../../contexts/ThemeContext';\nimport {throttle} from '../../utils/throttle';\nimport useSpeaker from '../../hooks/useSpeaker';\nimport Api from '../../constants/Api';\nimport StyledInput from '../../components/StyledInput';\n\nimport Chat from './Chat/Chat';\nimport Recorder from './Recorder';\nimport FooterButton, {BUTTON_MARGIN_LEFT, BUTTON_SIZE} from './FooterButton';\nimport StyledButton from '../../components/StyledButton';\n\nconst RTL_LANGUAGES = ['ar', 'he', 'iw', 'fa', 'dv', 'ha', 'ks', 'ku', 'ps', 'ur', 'yi'];\n\nconst DEFAULT_INPUT_HEIGHT = 19;\nconst FOOTER_PADDING_HORIZONTAL = 12;\nconst FOOTER_PADDING_VERTICAL = 8;\n\nlet shouldScroll = false;\nlet eventSource = null;\n\nlet backgroundTimestamp = null;\n\nlet pollingTimeout = null;\nlet preventPolling = false;\n\nconst ChatView = ({\n shouldntRefreshQueries,\n discussionId,\n updateDiscussionId,\n fetchDiscussions,\n querying,\n setQuerying,\n}) => {\n const {t} = useTranslation();\n const {userToken, deviceToken, user, setUser} = useContext(UserContext);\n const {settings: {language}} = useContext(SettingsContext);\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme), [theme]);\n const speaker = useSpeaker();\n\n const scrollViewRef = useRef(null);\n\n const [canStopGenerating, setCanStopGenerating] = useState(false);\n const [loading, setLoading] = useState(false);\n const [queries, setQueries] = useState([]);\n const [queryText, setQueryText] = useState('');\n\n const [examplesLoading, setExamplesLoading] = useState(false);\n const [exampleSections, setExampleSections] = useState([]);\n\n const [inputHeight, setInputHeight] = useState(DEFAULT_INPUT_HEIGHT);\n\n useEffect(() => {\n const loadExamples = async () => {\n try {\n setExamplesLoading(true);\n\n const response = await fetch(\n `${Api.apiBaseUrl}/${language.slice(0, 2)}/examples${Api.roomSlug ? `?room=${Api.roomSlug}` : ''}`,\n {\n method: 'GET',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n }\n );\n\n const responseJson = await response.json();\n\n setExampleSections(responseJson);\n } catch (error) {\n // TODO: Handle errors\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n } finally {\n setExamplesLoading(false);\n }\n };\n\n loadExamples();\n }, [language]);\n\n const fetchQueries = useCallback(async () => {\n if (discussionId) {\n setLoading(true);\n\n const response = await fetch(`${Api.apiBaseUrl}/discussions/${discussionId}.json?user_token=${userToken}`, {method: 'GET'});\n const data = await response.json();\n\n setLoading(false);\n\n if (data.error) {\n // TODO: handle error\n console.log(data.error);\n return;\n }\n\n setQueries(data.queries);\n\n if ((data.queries || []).length) {\n setTimeout(() => scrollViewRef && scrollViewRef.current && scrollViewRef.current.scrollToEnd({animated: false}), 0);\n }\n } else {\n setQueries([]);\n }\n }, [userToken, setLoading, setQueries, discussionId]);\n\n useEffect(() => {\n return () => {\n if (pollingTimeout) {\n clearTimeout(pollingTimeout);\n }\n };\n }, []);\n\n useEffect(() => {\n if (!shouldntRefreshQueries) {\n if (pollingTimeout) {\n clearTimeout(pollingTimeout);\n }\n\n fetchQueries();\n }\n }, [userToken, shouldntRefreshQueries, discussionId, fetchQueries]);\n\n const appState = useRef(AppState.currentState);\n\n useEffect(() => {\n const subscription = AppState.addEventListener('change', nextAppState => {\n if (appState.current.match(/inactive|background/) && nextAppState === 'active') {\n // Note: App has come to the foreground\n\n if (backgroundTimestamp && Date.now() - backgroundTimestamp > 3 * 60 * 60 * 1000) {\n updateDiscussionId(null);\n } else {\n if (Platform.OS === 'ios') {\n fetchQueries();\n }\n }\n } else if (appState.current === 'active' && nextAppState.match(/inactive|background/)) {\n // Note: App leaves the foreground\n\n backgroundTimestamp = Date.now();\n }\n\n appState.current = nextAppState;\n });\n\n return () => {\n subscription.remove();\n };\n }, [fetchQueries, updateDiscussionId]);\n\n const pushCurrentQuery = useCallback(query => {\n preventPolling = true;\n\n const updatedQueries = [...(queries || []), query];\n\n setQueries(updatedQueries);\n\n return updatedQueries;\n }, [queries, setQueries]);\n\n const updateCurrentQuery = useCallback((queries, currentQuery) => {\n const currentQueryIndex = queries.findIndex(query => query.ref === currentQuery.ref);\n\n if (currentQueryIndex !== -1) {\n const updatedQueries = [...queries];\n updatedQueries[currentQueryIndex] = currentQuery;\n\n setQueries(updatedQueries);\n }\n }, []);\n\n const createQuery = useCallback(async (data, localQueries, localQuery) => {\n const fakeResponseId = uuid.v4();\n\n try {\n setQuerying(true);\n\n if (shouldScroll) {\n setTimeout(() => scrollViewRef && scrollViewRef.current && scrollViewRef.current.scrollToEnd({animated: true}), 0);\n }\n\n const requestObject = {\n user_token: userToken,\n device_token: deviceToken,\n room: Api.roomSlug,\n stream: true,\n query: {\n discussion_id: discussionId || undefined,\n channel: data.channel,\n ref: data.ref,\n text: data.text,\n recording_id: data.recordingId || undefined,\n\n country_code: Localization.getLocales()[0].regionCode,\n timezone: Localization.timezone,\n\n language: language, // fr-FR\n device_brand: Device.brand, // Android: \"google\", \"xiaomi\"; iOS: \"Apple\"; web: null\n device_name: Device.deviceName, // \"Vivian's iPhone XS\"\n device_manufacturer: Device.manufacturer, // Android: \"Google\", \"xiaomi\"; iOS: \"Apple\"; web: \"Google\", null\n device_os_name: Platform.OS,\n device_os_version: Device.osVersion,\n device_model_name: Device.modelName,\n expo_session_id: Constants.sessionId,\n expo_installation_id: Constants.installationId,\n\n screen: 'chat',\n },\n };\n\n const deviceTypeIndex = await Device.getDeviceTypeAsync();\n\n if(deviceTypeIndex === 0) {\n requestObject.query.device_type = 'unknown';\n } else if(deviceTypeIndex === 1) {\n requestObject.query.device_type = 'phone';\n } else if(deviceTypeIndex === 2) {\n requestObject.query.device_type = 'tablet';\n } else if(deviceTypeIndex === 3) {\n requestObject.query.device_type = 'desktop';\n } else if(deviceTypeIndex === 4) {\n requestObject.query.device_type = 'tv';\n } else {\n requestObject.query.device_type = 'UNKNOWN';\n }\n\n let locationPerm = {};\n\n if (Platform.OS === 'web') {\n const {state} = await navigator.permissions.query({name: 'geolocation'});\n\n locationPerm = {granted: state === 'granted'};\n } else {\n locationPerm = await Location.getForegroundPermissionsAsync();\n }\n\n if (locationPerm.granted) {\n let location = await Location.getLastKnownPositionAsync({\n requiredAccuracy: 300, // Note: Return null if ~300 meter away from last known location\n maxAge: 600000, // Note: Return null if last known location is more than 10m old\n });\n\n if (!location) {\n location = await Location.getCurrentPositionAsync({\n accuracy: Location.Accuracy.High,\n mayShowUserSettingsDialog: false,\n });\n }\n\n requestObject.query.latitude = location.coords.latitude;\n requestObject.query.longitude = location.coords.longitude;\n }\n\n let appStateListener = null;\n\n const createRequest = new Promise((resolve, reject) => {\n eventSource = new EventSource(\n `${Api.apiBaseUrl}/queries.json`,\n {\n method: 'POST',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(requestObject),\n // debug: true,\n }\n );\n\n eventSource.addEventListener('open', () => {\n console.log('Event \"open\" called');\n shouldScroll = true;\n\n speaker.initSpeakQueryState();\n });\n\n const throttledUpdateCurrentQuery = throttle(currentQuery => {\n updateCurrentQuery(localQueries, currentQuery);\n\n if (shouldScroll) {\n setTimeout(() => scrollViewRef && scrollViewRef.current && scrollViewRef.current.scrollToEnd({animated: true}), 0);\n }\n }, 300, false, false);\n\n let message = '';\n\n eventSource.addEventListener('initial', async event => {\n setCanStopGenerating(true);\n\n const currentQuery = JSON.parse(event.data);\n console.log('[Event \"initial\"] currentQuery: ', currentQuery);\n\n // Note: If we weren't on a discussion (eg: first use, after a clear discussion) we fetchDiscussions and\n // update the discussionId and fetchDiscussions to update the drawer content\n if (!discussionId) {\n const fetchAndUpdateDiscussion = async () => {\n await fetchDiscussions();\n\n updateDiscussionId(currentQuery.discussion_id, true);\n };\n\n fetchAndUpdateDiscussion();\n }\n\n eventSource.addEventListener('message', event => {\n message += event.data;\n\n throttledUpdateCurrentQuery({\n ...currentQuery,\n responses: [{\n id: fakeResponseId,\n message,\n created_at: Date.now(),\n channel: currentQuery.channel,\n source: undefined,\n cards: [],\n }],\n });\n\n speaker.speakToken(event.data, currentQuery.language);\n });\n\n eventSource.addEventListener('loading_message', event => {\n // TODO:\n throttledUpdateCurrentQuery({\n ...currentQuery,\n responses: [{\n id: fakeResponseId,\n message: event.data,\n created_at: Date.now(),\n channel: currentQuery.channel,\n source: undefined,\n cards: [],\n }],\n });\n });\n\n if (Platform.OS === 'ios') {\n appStateListener = AppState.addEventListener('change', nextAppState => {\n appStateListener.remove();\n\n if (nextAppState === 'inactive' || nextAppState === 'background') {\n if (eventSource) {\n eventSource.removeAllEventListeners();\n eventSource.close();\n eventSource = null;\n }\n\n preventPolling = false;\n setQuerying(false);\n setCanStopGenerating(false);\n }\n });\n }\n });\n\n eventSource.addEventListener('final', async event => {\n eventSource.removeAllEventListeners();\n eventSource.close();\n eventSource = null;\n preventPolling = false;\n setQuerying(false);\n setCanStopGenerating(false);\n\n const query = JSON.parse(event.data);\n console.log('Event \"final\": ', query);\n\n if (query.responses && query.responses.length && query.responses[0].message) {\n speaker.emptyResponseBuffer(query.responses[0].message, query.responses[0].language);\n }\n\n const newQueries = [...queries, query];\n\n setQueries(newQueries);\n\n if (query.status === 'pending') {\n const pollPendingQueries = async () => {\n pollingTimeout = null;\n\n if (preventPolling) {\n // Note: If preventPolling is true we delay the next request\n pollingTimeout = setTimeout(pollPendingQueries, 5000);\n } else {\n const response = await fetch(`${Api.apiBaseUrl}/discussions/${query.discussion_id}.json?user_token=${userToken}`, {method: 'GET'});\n const updatedDiscussion = await response.json();\n\n const updatedQueries = (updatedDiscussion || {}).queries || [];\n\n if (updatedQueries.some(fetchedQuery => fetchedQuery.status === 'pending')) {\n pollingTimeout = setTimeout(pollPendingQueries, 5000);\n }\n\n setQueries(updatedQueries);\n }\n };\n\n pollingTimeout = setTimeout(pollPendingQueries, 5000);\n }\n\n const updatedUser = {...user, daily_queries: query.daily_queries};\n\n setUser(updatedUser);\n\n resolve(query);\n });\n\n eventSource.addEventListener('error', (event) => {\n // TODO: Handle errors\n if (event.type === 'error') {\n console.log('Connection error:', event.message);\n } else if (event.type === 'exception') {\n console.log('Error:', event.message, event.error);\n }\n\n updateCurrentQuery(localQueries, {\n ...localQuery,\n responses: [{\n id: fakeResponseId,\n message: t('MainScreen.ChatView.Recorder.errors.recordingFailed', 'Sorry, something went wrong, try again later.'),\n status: 'error',\n created_at: Date.now(),\n channel: localQuery.channel,\n source: undefined,\n cards: [],\n }],\n });\n\n eventSource.removeAllEventListeners();\n eventSource.close();\n eventSource = null;\n preventPolling = false;\n setQuerying(false);\n setCanStopGenerating(false);\n reject({message: event.message});\n });\n\n eventSource.addEventListener('close', () => {\n eventSource.removeAllEventListeners();\n eventSource.close();\n eventSource = null;\n preventPolling = false;\n setQuerying(false);\n setCanStopGenerating(false);\n });\n });\n\n const result = await createRequest;\n\n if (appStateListener) {\n appStateListener.remove();\n }\n\n console.log('createRequest() result', result);\n\n return result;\n } catch (error) {\n // TODO: Handle errors\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n\n if (eventSource) {\n eventSource.removeAllEventListeners();\n eventSource.close();\n eventSource = null;\n }\n\n preventPolling = false;\n setQuerying(false);\n setCanStopGenerating(false);\n\n updateCurrentQuery(localQueries, {\n ...localQuery,\n responses: [{\n id: fakeResponseId,\n message: t('MainScreen.ChatView.Recorder.errors.recordingFailed', 'Sorry, something went wrong, try again later.'),\n status: 'error',\n created_at: Date.now(),\n channel: localQuery.channel,\n source: undefined,\n cards: [],\n }],\n });\n }\n }, [setQuerying, userToken, deviceToken, discussionId, language, speaker, updateCurrentQuery, fetchDiscussions, updateDiscussionId, queries, user, setUser, t]);\n\n const handleSendQuery = useCallback(async text => {\n if (\n !text.length\n || !text.trim().length\n // Note: THIS IS NOT A SIMPLE SPACE, DO NOT DELETE !\n // This is a weird character that is added when on iPhone someone use the voice control\n // but doesn't speak.\n || text === ''\n ) {\n if (Platform.OS !== 'web') {\n Haptics.notificationAsync(Haptics.NotificationFeedbackType.Error);\n }\n\n return;\n }\n\n setQueryText('');\n setInputHeight(DEFAULT_INPUT_HEIGHT);\n Keyboard.dismiss();\n\n const ref = uuid.v4();\n\n const localQuery = {\n ref,\n status: 'processing',\n text: text.trim(),\n channel: 'keyboard',\n created_at: new Date(),\n updated_at: new Date(),\n responses: [],\n };\n\n // Note: Optimistically add a fake query until the server return the result\n const localQueries = pushCurrentQuery(localQuery);\n\n setTimeout(() => scrollViewRef && scrollViewRef.current && scrollViewRef.current.scrollToEnd({animated: true}), 0);\n\n await createQuery({ref, channel: 'keyboard', text: text.trim()}, localQueries, localQuery);\n\n setTimeout(() => scrollViewRef && scrollViewRef.current && scrollViewRef.current.scrollToEnd({animated: true}), 0);\n }, [pushCurrentQuery, createQuery]);\n\n const handleReprocessQuery = useCallback(async (query, update) => {\n preventPolling = true;\n\n const fakeResponseId = uuid.v4();\n\n const optimisticallyUpdatedQuery = {\n ...query,\n responses: [\n ...query.responses,\n {\n id: fakeResponseId,\n created_at: Date.now(),\n channel: query.channel,\n source: undefined,\n cards: [],\n },\n ],\n };\n\n const queryIndex = queries.findIndex(query => query.ref === optimisticallyUpdatedQuery.ref);\n\n if (queryIndex !== -1) {\n const updatedQueries = [...queries];\n updatedQueries[queryIndex] = optimisticallyUpdatedQuery;\n\n setQueries(updatedQueries);\n }\n\n setTimeout(() => scrollViewRef && scrollViewRef.current && scrollViewRef.current.scrollToEnd({animated: true}), 0);\n\n const result = await fetch(`${Api.apiBaseUrl}/queries/${query.id}/reprocess`, {\n method: 'POST',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n user_token: userToken,\n query: update,\n }),\n });\n\n const updatedQuery = await result.json();\n\n if (queryIndex !== -1) {\n const updatedQueries = [...queries];\n updatedQueries[queryIndex] = updatedQuery;\n\n setQueries(updatedQueries);\n }\n\n setTimeout(() => scrollViewRef && scrollViewRef.current && scrollViewRef.current.scrollToEnd({animated: true}), 0);\n\n preventPolling = false;\n }, [queries, userToken]);\n\n const onChangeText = useCallback(value => setQueryText(value), [setQueryText]);\n const onSubmitEditing = useCallback(event => handleSendQuery(event.nativeEvent.text), [handleSendQuery]);\n\n // Note: onContentSize doesn't work properly on web, check: https://github.com/necolas/react-native-web/issues/2160\n const onChangeWeb = useCallback(event => {\n if (Platform.OS !== 'web') return;\n\n window.requestAnimationFrame(() => {\n event.nativeEvent.target.style.height = '0px';\n\n const height = event.nativeEvent.target.scrollHeight < DEFAULT_INPUT_HEIGHT ? DEFAULT_INPUT_HEIGHT : Math.min(event.nativeEvent.target.scrollHeight, 120);\n\n event.nativeEvent.target.style.height = `${height}px`;\n\n setInputHeight(height < DEFAULT_INPUT_HEIGHT ? DEFAULT_INPUT_HEIGHT : Math.min(height, 120));\n });\n }, []);\n\n const onKeyPress = useCallback(event => {\n if (Platform.OS === 'web') {\n const {nativeEvent: {key, shiftKey}} = event;\n\n if (key === 'Enter' && !shiftKey) {\n handleSendQuery(queryText);\n }\n }\n }, [handleSendQuery, queryText]);\n\n const onContentSizeChange = useCallback(event => {\n const {nativeEvent: {contentSize: {height}}} = event;\n\n setInputHeight(height < DEFAULT_INPUT_HEIGHT ? DEFAULT_INPUT_HEIGHT : Math.min(height, 120));\n }, [setInputHeight]);\n\n return (\n \n \n {loading || examplesLoading\n ? (\n \n \n \n )\n : (\n {\n shouldScroll = false;\n }}\n queries={queries}\n setQueryText={setQueryText}\n handleReprocessQuery={handleReprocessQuery}\n exampleSections={exampleSections}\n canStopGenerating={canStopGenerating}\n />\n )}\n\n {canStopGenerating && (\n \n {\n if (eventSource) {\n eventSource.close();\n eventSource = null;\n }\n\n const updatedQueries = [...queries];\n const currentQuery = queries[queries.length - 1];\n\n updatedQueries[updatedQueries.length - 1] = {\n ...currentQuery,\n responses: currentQuery.responses.length\n ? currentQuery.responses.map(response => ({\n ...response,\n // TODO: Translate\n message: `${response.message} [canceled]`,\n }))\n : [{\n id: uuid.v4(),\n // TODO: Translate\n message: '[canceled]',\n created_at: Date.now(),\n channel: currentQuery.channel,\n source: undefined,\n cards: [],\n }],\n };\n\n setQueries(updatedQueries);\n preventPolling = false;\n setQuerying(false);\n }}\n />\n \n )}\n\n \n \n \n\n {queryText.length || (Platform.OS === 'web' && !window.MediaRecorder.isTypeSupported('audio/webm'))\n ? (\n handleSendQuery(queryText)}\n iconBackgroundColor={theme.colorPrimary}\n icon={}\n />\n )\n : (\n \n )\n }\n \n \n \n \n );\n};\n\nconst getStyles = theme => StyleSheet.create({\n footer: {\n ...(Platform.OS === 'web'\n ? {\n position: 'fixed',\n bottom: 0,\n }\n : {}),\n backgroundColor: theme.footerBackground,\n alignItems: 'center',\n width: '100%',\n borderTopColor: theme.footerBorderColor,\n borderTopWidth: 1,\n borderTopStyle: 'solid',\n },\n innerFooter: {\n flexDirection: 'row',\n alignItems: 'center',\n maxWidth: WEB_MAX_WIDTH,\n width: '100%',\n height: '100%',\n justifyContent: 'flex-start',\n paddingLeft: FOOTER_PADDING_HORIZONTAL,\n },\n});\n\nexport default ChatView;\n","import React, {useCallback, useContext, useEffect, useMemo, useRef, useState} from 'react';\nimport {\n Animated,\n Image,\n Platform,\n StyleSheet,\n TouchableOpacity,\n View,\n Easing,\n Text,\n ScrollView,\n AppState,\n Dimensions,\n} from 'react-native';\nimport {useHeaderHeight} from '@react-navigation/elements';\nimport {useTranslation} from 'react-i18next';\nimport Constants from 'expo-constants';\nimport uuid from 'react-native-uuid';\nimport * as Haptics from 'expo-haptics';\nimport * as Localization from 'expo-localization';\nimport * as Device from 'expo-device';\nimport * as Location from 'expo-location';\nimport * as Sentry from 'sentry-expo';\n\nimport {UserContext} from '../../contexts/UserContext';\nimport {SettingsContext} from '../../contexts/SettingsContext';\nimport {ThemeContext} from '../../contexts/ThemeContext';\nimport Api from '../../constants/Api';\nimport useRecorder from '../../hooks/useRecorder';\nimport useSpeaker from '../../hooks/useSpeaker';\nimport EventSource from '../../utils/SourceEvent';\nimport {throttle} from '../../utils/throttle';\n\nimport Card from './Chat/Card';\nimport PlacesMap from './Chat/PlacesMap';\n\nlet microphonePermissionsRequested = false;\n\nlet shouldScroll = false;\nlet eventSource = null;\n\nconst BUTTON_SIZE = 200;\nconst BORDER_SIZE = 10;\n\nconst CustomProgressBar = ({loading, rotationDegree}) => {\n const theme = useContext(ThemeContext);\n\n const COLOR = theme.light ? 'rgba(0, 0, 0, 0.3)' : '#fff';\n\n return (\n \n \n\n {loading && (\n \n )}\n \n );\n};\n\nconst MicrophoneView = ({discussionId, updateDiscussionId, fetchDiscussions}) => {\n const {t} = useTranslation();\n const {userToken, user, deviceToken, setUser} = useContext(UserContext);\n const {settings: {language}} = useContext(SettingsContext);\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme), [theme]);\n const headerHeight = useHeaderHeight();\n\n const recorder = useRecorder();\n const speaker = useSpeaker();\n\n const scrollViewRef = useRef(null);\n\n const topTextInitialValue = useMemo(() => ({\n text: t('MainScreen.MicrophoneView.Recorder.instruction', 'Push to talk'),\n style: 'system',\n }), [t]);\n\n const [loading, setLoading] = useState(false);\n const [topText, setTopText] = useState(topTextInitialValue);\n const [lastResponse, setLastResponse] = useState(null);\n\n useEffect(() => {\n if (discussionId == null) {\n setTopText(topTextInitialValue);\n setLastResponse(null);\n }\n }, [discussionId, topTextInitialValue]);\n\n // TODO: refactor createQuery with the one in ChatView\n const createQuery = useCallback(async (data, localQueries, localQuery) => {\n const fakeResponseId = uuid.v4();\n\n try {\n // setQuerying(true);\n\n if (shouldScroll) {\n setTimeout(() => scrollViewRef && scrollViewRef.current && scrollViewRef.current.scrollToEnd({animated: true}), 0);\n }\n\n const requestObject = {\n user_token: userToken,\n device_token: deviceToken,\n room: Api.roomSlug,\n stream: true,\n query: {\n discussion_id: discussionId || undefined,\n channel: data.channel,\n ref: data.ref,\n text: data.text,\n recording_id: data.recordingId || undefined,\n\n country_code: Localization.getLocales()[0].regionCode,\n timezone: Localization.timezone,\n\n language: language, // fr-FR\n device_brand: Device.brand, // Android: \"google\", \"xiaomi\"; iOS: \"Apple\"; web: null\n device_name: Device.deviceName, // \"Vivian's iPhone XS\"\n device_manufacturer: Device.manufacturer, // Android: \"Google\", \"xiaomi\"; iOS: \"Apple\"; web: \"Google\", null\n device_os_name: Platform.OS,\n device_os_version: Device.osVersion,\n device_model_name: Device.modelName,\n expo_session_id: Constants.sessionId,\n expo_installation_id: Constants.installationId,\n\n screen: 'microphone',\n },\n };\n\n const deviceTypeIndex = await Device.getDeviceTypeAsync();\n\n if(deviceTypeIndex === 0) {\n requestObject.query.device_type = 'unknown';\n } else if(deviceTypeIndex === 1) {\n requestObject.query.device_type = 'phone';\n } else if(deviceTypeIndex === 2) {\n requestObject.query.device_type = 'tablet';\n } else if(deviceTypeIndex === 3) {\n requestObject.query.device_type = 'desktop';\n } else if(deviceTypeIndex === 4) {\n requestObject.query.device_type = 'tv';\n } else {\n requestObject.query.device_type = 'UNKNOWN';\n }\n\n let locationPerm = {};\n\n if (Platform.OS === 'web') {\n const {state} = await navigator.permissions.query({name: 'geolocation'});\n\n locationPerm = {granted: state === 'granted'};\n } else {\n locationPerm = await Location.getForegroundPermissionsAsync();\n }\n\n if (locationPerm.granted) {\n let location = await Location.getLastKnownPositionAsync({\n requiredAccuracy: 300, // Note: Return null if ~300 meter away from last known location\n maxAge: 600000, // Note: Return null if last known location is more than 10m old\n });\n\n if (!location) {\n location = await Location.getCurrentPositionAsync({\n accuracy: Location.Accuracy.High,\n mayShowUserSettingsDialog: false,\n });\n }\n\n requestObject.query.latitude = location.coords.latitude;\n requestObject.query.longitude = location.coords.longitude;\n }\n\n let appStateListener = null;\n\n const createRequest = new Promise((resolve, reject) => {\n eventSource = new EventSource(\n `${Api.apiBaseUrl}/queries.json`,\n {\n method: 'POST',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(requestObject),\n // debug: true,\n }\n );\n\n eventSource.addEventListener('open', () => {\n console.log('Event \"open\" called');\n shouldScroll = true;\n\n speaker.initSpeakQueryState();\n });\n\n const throttledUpdateCurrentQuery = throttle(currentQuery => {\n // updateCurrentQuery(localQueries, currentQuery);\n setLastResponse(currentQuery.responses[0]);\n\n if (shouldScroll) {\n setTimeout(() => scrollViewRef && scrollViewRef.current && scrollViewRef.current.scrollToEnd({animated: true}), 0);\n }\n }, 300, false, false);\n\n let message = '';\n\n eventSource.addEventListener('initial', async event => {\n // setCanStopGenerating(true);\n\n const currentQuery = JSON.parse(event.data);\n console.log('[Event \"initial\"] currentQuery: ', currentQuery);\n\n // Note: If we weren't on a discussion (eg: first use, after a clear discussion) we fetchDiscussions and\n // update the discussionId and fetchDiscussions to update the drawer content\n if (!discussionId) {\n const fetchAndUpdateDiscussion = async () => {\n await fetchDiscussions();\n\n console.log('updateDiscussionId()', currentQuery, currentQuery.discussion_id);\n updateDiscussionId(currentQuery.discussion_id);\n };\n\n fetchAndUpdateDiscussion();\n }\n\n eventSource.addEventListener('message', event => {\n message += event.data;\n\n throttledUpdateCurrentQuery({\n ...currentQuery,\n responses: [{\n id: fakeResponseId,\n message,\n created_at: Date.now(),\n channel: currentQuery.channel,\n source: undefined,\n cards: [],\n }],\n });\n\n speaker.speakToken(event.data, currentQuery.language);\n });\n\n eventSource.addEventListener('loading_message', event => {\n // TODO:\n throttledUpdateCurrentQuery({\n ...currentQuery,\n responses: [{\n id: fakeResponseId,\n message: event.data,\n created_at: Date.now(),\n channel: currentQuery.channel,\n source: undefined,\n cards: [],\n }],\n });\n });\n\n if (Platform.OS === 'ios') {\n appStateListener = AppState.addEventListener('change', nextAppState => {\n appStateListener.remove();\n\n if (nextAppState === 'inactive' || nextAppState === 'background') {\n if (eventSource) {\n eventSource.removeAllEventListeners();\n eventSource.close();\n eventSource = null;\n }\n\n // setQuerying(false);\n // setCanStopGenerating(false);\n }\n });\n }\n });\n\n eventSource.addEventListener('final', async event => {\n eventSource.removeAllEventListeners();\n eventSource.close();\n eventSource = null;\n // setQuerying(false);\n // setCanStopGenerating(false);\n\n const query = JSON.parse(event.data);\n console.log('Event \"final\": ', query);\n\n if (query.responses && query.responses.length && query.responses[0].message) {\n speaker.emptyResponseBuffer(query.responses[0].message, query.responses[0].language);\n }\n\n const updatedUser = {...user, daily_queries: query.daily_queries};\n\n setUser(updatedUser);\n\n resolve(query);\n });\n\n eventSource.addEventListener('error', (event) => {\n // TODO: Handle errors\n if (event.type === 'error') {\n console.log('Connection error:', event.message);\n } else if (event.type === 'exception') {\n console.log('Error:', event.message, event.error);\n }\n\n // TODO:\n setLastResponse({\n message: t('MainScreen.ChatView.Recorder.errors.recordingFailed', 'Sorry, something went wrong, try again later.'),\n });\n\n // updateCurrentQuery(localQueries, {\n // ...localQuery,\n // responses: [{\n // id: fakeResponseId,\n // message: t('MainScreen.ChatView.Recorder.errors.recordingFailed', 'Sorry, something went wrong, try again later.'),\n // status: 'error',\n // created_at: Date.now(),\n // channel: localQuery.channel,\n // source: undefined,\n // cards: [],\n // }],\n // });\n\n eventSource.removeAllEventListeners();\n eventSource.close();\n eventSource = null;\n // setQuerying(false);\n // setCanStopGenerating(false);\n reject({message: event.message});\n });\n\n eventSource.addEventListener('close', () => {\n console.log('Close SSE connection.');\n eventSource.removeAllEventListeners();\n eventSource.close();\n eventSource = null;\n // setQuerying(false);\n // setCanStopGenerating(false);\n });\n });\n\n const result = await createRequest;\n\n if (appStateListener) {\n appStateListener.remove();\n }\n\n console.log('createRequest() result', result);\n\n return result;\n } catch (error) {\n // TODO: Handle errors\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n\n if (eventSource) {\n eventSource.removeAllEventListeners();\n eventSource.close();\n eventSource = null;\n // setQuerying(false);\n // setCanStopGenerating(false);\n }\n\n // TODO:\n setLastResponse({\n message: t('MainScreen.ChatView.Recorder.errors.recordingFailed', 'Sorry, something went wrong, try again later.'),\n });\n\n // updateCurrentQuery(localQueries, {\n // ...localQuery,\n // responses: [{\n // id: fakeResponseId,\n // message: t('MainScreen.ChatView.Recorder.errors.recordingFailed', 'Sorry, something went wrong, try again later.'),\n // status: 'error',\n // created_at: Date.now(),\n // channel: localQuery.channel,\n // source: undefined,\n // cards: [],\n // }],\n // });\n }\n }, [userToken, deviceToken, discussionId, language, speaker, user, setUser, fetchDiscussions, updateDiscussionId, t]);\n\n\n // TODO: refactor handleUploadRecording with the one in ChatView\n const handleUploadRecording = useCallback(async (uri, ref) => {\n try {\n const formData = new FormData();\n\n formData.append('user_token', userToken);\n formData.append('recording[ref]', ref);\n\n if(Platform.OS === 'web') {\n const blob = await (await fetch(uri)).blob();\n\n formData.append('recording[file]', blob, 'recording_' + Constants.sessionId + '_' + Date.now() + '.wav');\n } else {\n formData.append('recording[file]', {\n uri,\n type: 'audio/x-wav',\n name: 'recording_' + Constants.sessionId + '_' + Date.now() + '.wav',\n });\n }\n\n formData.append('recording[language]', language); // fr-FR\n formData.append('recording[device_brand]', Device.brand); // Android: \"google\", \"xiaomi\"; iOS: \"Apple\"; web: null\n formData.append('recording[device_name]', Device.deviceName); // \"Vivian's iPhone XS\"\n formData.append('recording[device_manufacturer]', Device.manufacturer); // Android: \"Google\", \"xiaomi\"; iOS: \"Apple\"; web: \"Google\", null\n formData.append('recording[device_os_name]', Platform.OS);\n formData.append('recording[device_os_version]', Device.osVersion);\n formData.append('recording[device_model_name]', Device.modelName);\n formData.append('recording[expo_session_id]', Constants.sessionId);\n formData.append('recording[expo_installation_id]', Constants.installationId);\n\n if(Platform.OS === 'web') {\n formData.append('recording[encoding]', 'WEBM_OPUS');\n formData.append('recording[sample_rate]', '48000');\n formData.append('recording[bit_rate]', '128000');\n } else if(Platform.OS === 'ios') {\n formData.append('recording[encoding]', 'LINEAR16');\n formData.append('recording[sample_rate]', '48000');\n formData.append('recording[bit_rate]', '128000');\n } else {\n formData.append('recording[encoding]', 'AMR_WB');\n formData.append('recording[sample_rate]', '16000');\n formData.append('recording[bit_rate]', '16000');\n }\n\n const deviceType = await Device.getDeviceTypeAsync();\n if(deviceType === 0) { formData.append('recording[device_type]', 'unknown'); }\n else if(deviceType === 1) { formData.append('recording[device_type]', 'phone'); }\n else if(deviceType === 2) { formData.append('recording[device_type]', 'tablet'); }\n else if(deviceType === 3) { formData.append('recording[device_type]', 'desktop'); }\n else if(deviceType === 4) { formData.append('recording[device_type]', 'tv'); }\n else { formData.append('recording[device_type]', 'UNKNOWN'); }\n\n let locationPerm = {};\n\n if (Platform.OS === 'web') {\n const {state} = await navigator.permissions.query({name: 'geolocation'});\n\n locationPerm = {granted: state === 'granted'};\n } else {\n locationPerm = await Location.getForegroundPermissionsAsync();\n }\n\n if (locationPerm.granted) {\n let location = await Location.getLastKnownPositionAsync({\n requiredAccuracy: 300, // Note: Return null if ~300 meter away from last known location\n maxAge: 600000, // Note: Return null if last known location is more than 10m old\n });\n\n if (!location) {\n location = await Location.getCurrentPositionAsync({\n accuracy: Location.Accuracy.High,\n mayShowUserSettingsDialog: false,\n });\n }\n\n formData.append('recording[latitude]', location.coords.latitude);\n formData.append('recording[longitude]', location.coords.longitude);\n }\n\n const response = await fetch(`${Api.apiBaseUrl}/recordings.json`, {\n method: 'POST',\n body: formData,\n });\n\n return await response.json();\n } catch (error) {\n // TODO: Handle errors\n console.log('There was an error during upload.', error);\n\n setLoading(false);\n loadingAnimation.stop();\n loadingAnimation.reset();\n\n Animated.sequence([\n Animated.timing(shakeAnim, {toValue: 10, duration: 100, useNativeDriver: Platform.OS !== 'web'}),\n Animated.timing(shakeAnim, {toValue: -10, duration: 100, useNativeDriver: Platform.OS !== 'web'}),\n Animated.timing(shakeAnim, {toValue: 10, duration: 100, useNativeDriver: Platform.OS !== 'web'}),\n Animated.timing(shakeAnim, {toValue: -10, duration: 100, useNativeDriver: Platform.OS !== 'web'}),\n Animated.timing(shakeAnim, {toValue: 10, duration: 100, useNativeDriver: Platform.OS !== 'web'}),\n Animated.timing(shakeAnim, {toValue: 0, duration: 100, useNativeDriver: Platform.OS !== 'web'}),\n ]).start(() => {\n breathingAnimation.start();\n });\n\n throw error;\n }\n }, [userToken, language, loadingAnimation, shakeAnim, breathingAnimation]);\n\n const shakeAnim = useRef(new Animated.Value(0)).current;\n const rotationDegree = useRef(new Animated.Value(0)).current;\n const scaleAnim = React.useRef(new Animated.Value(1)).current;\n\n const breathingAnimation = Animated.loop(\n Animated.sequence([\n Animated.timing(scaleAnim, {toValue: 1.0, duration: 0, useNativeDriver: Platform.OS !== 'web'}),\n Animated.timing(scaleAnim, {toValue: 1.2, duration: 1000, useNativeDriver: Platform.OS !== 'web'}),\n Animated.timing(scaleAnim, {toValue: 1.0, duration: 1500, useNativeDriver: Platform.OS !== 'web'}),\n ])\n );\n\n useEffect(() => {\n breathingAnimation.start();\n }, []);\n\n const loadingAnimation = useMemo(() => (\n Animated.loop(Animated.timing(\n rotationDegree,\n {\n toValue: 360,\n duration: 1000,\n easing: Easing.linear,\n useNativeDriver: Platform.OS !== 'web',\n }\n ))\n ), [rotationDegree]);\n\n const handleLongPress = useCallback(async () => {\n // Note: If this press triggered a permission request we don't want to do anything else\n if (microphonePermissionsRequested) {\n microphonePermissionsRequested = false;\n return;\n }\n\n speaker.stop();\n\n if (Platform.OS !== 'web') {\n Haptics.impactAsync(Haptics.ImpactFeedbackStyle.High);\n }\n\n await recorder.start();\n }, [recorder, speaker]);\n\n const handlePress = useCallback(async () => {\n // Note: If this press triggered a permission request we don't want to do anything else\n if (microphonePermissionsRequested) {\n microphonePermissionsRequested = false;\n return;\n }\n\n if (Platform.OS !== 'web') {\n Haptics.notificationAsync(Haptics.NotificationFeedbackType.Error);\n }\n\n setLastResponse(null);\n setTopText({\n text: t('MainScreen.ChatView.Recorder.errors.holdButton', 'Hold the button while speaking.'),\n style: 'system',\n });\n\n Animated.sequence([\n Animated.timing(shakeAnim, {toValue: 10, duration: 100, useNativeDriver: Platform.OS !== 'web'}),\n Animated.timing(shakeAnim, {toValue: -10, duration: 100, useNativeDriver: Platform.OS !== 'web'}),\n Animated.timing(shakeAnim, {toValue: 10, duration: 100, useNativeDriver: Platform.OS !== 'web'}),\n Animated.timing(shakeAnim, {toValue: -10, duration: 100, useNativeDriver: Platform.OS !== 'web'}),\n Animated.timing(shakeAnim, {toValue: 10, duration: 100, useNativeDriver: Platform.OS !== 'web'}),\n Animated.timing(shakeAnim, {toValue: 0, duration: 100, useNativeDriver: Platform.OS !== 'web'}),\n ]).start(() => {\n breathingAnimation.start();\n });\n }, []);\n\n const handlePressIn = useCallback(async () => {\n await recorder.requestPermissions(() => {\n microphonePermissionsRequested = true;\n });\n\n breathingAnimation.stop();\n breathingAnimation.reset();\n });\n\n const handlePressOut = useCallback(async () => {\n if (recorder.state.status === 'starting') {\n recorder.stop();\n } else if (recorder.state.status === 'recording') {\n try {\n setLoading(true);\n loadingAnimation.start();\n\n if (Platform.OS !== 'web') {\n Haptics.impactAsync(Haptics.ImpactFeedbackStyle.High);\n }\n\n const uri = await recorder.stop();\n\n const ref = uuid.v4();\n\n const recording = await handleUploadRecording(uri, ref);\n\n if (recording.status === 'failed') {\n setLastResponse(null);\n setTopText({\n text: t('MainScreen.ChatView.Recorder.errors.noAudio', 'No audio detected'),\n style: 'system',\n });\n } else {\n setLastResponse(null);\n setTopText({\n text: recording.transcription,\n style: 'transcript',\n });\n\n const query = await createQuery({\n ref,\n channel: 'recording',\n text: recording.transcription,\n recordingId: recording.id,\n });\n\n if (Platform.OS !== 'web') {\n Haptics.notificationAsync(Haptics.NotificationFeedbackType.Success);\n }\n\n if (query) {\n if (query.responses && query.responses.length && query.responses[0].message) {\n setLastResponse(query.responses[0]);\n }\n }\n }\n\n setLoading(false);\n loadingAnimation.stop();\n loadingAnimation.reset();\n } catch (error) {\n console.log('There was an error during upload.', error);\n\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n }\n\n breathingAnimation.start();\n }\n }, [breathingAnimation, createQuery, handleUploadRecording, loadingAnimation, recorder, t]);\n\n return (\n \n \n {(topText || {}).text && (\n \n \n {topText.text}\n \n \n )}\n \n\n \n \n \n \n \n\n \n \n \n \n \n\n \n {lastResponse && (\n \n {\n shouldScroll = false;\n }}\n >\n \n {lastResponse.message}\n \n\n {(lastResponse.cards || []).length > 0 && lastResponse.cards.find(({card_type}) => card_type === 'place') && (\n \n )}\n\n {(lastResponse.cards || []).length > 0 && (\n \n {lastResponse.cards.map((card, i) => (\n \n ))}\n \n )}\n \n \n )}\n \n \n );\n};\n\n\nconst getStyles = theme => StyleSheet.create({\n container: {\n height: '100%',\n width: '100%',\n maxWidth: Math.min(Dimensions.get('window').width, 800),\n justifyContent: 'center',\n },\n systemTopTextContainer: {},\n systemTopTextText: {\n fontSize: 20,\n },\n transcriptTopTextContainer: {\n backgroundColor: theme.light ? '#ffffff' : '#383838',\n },\n transcriptTopTextText: {\n fontSize: 16,\n fontWeight: 'bold',\n },\n});\n\nexport default MicrophoneView;\n","import React, {useCallback, useContext, useEffect, useMemo, useRef, useState} from 'react';\nimport {\n Platform,\n StyleSheet,\n View,\n KeyboardAvoidingView,\n} from 'react-native';\nimport {useHeaderHeight} from '@react-navigation/elements';\nimport {useTranslation} from 'react-i18next';\n\nimport {UserContext} from '../../contexts/UserContext';\nimport {SettingsContext} from '../../contexts/SettingsContext';\nimport {ThemeContext} from '../../contexts/ThemeContext';\nimport useSpeaker from '../../hooks/useSpeaker';\nimport Api from '../../constants/Api';\n\nimport Drawer from './Drawer';\nimport ChatView from './ChatView';\nimport MicrophoneView from './MicrophoneView';\n\nconst MainScreen = ({\n chatMode,\n setChatMode,\n drawerOpen,\n closeDrawer,\n discussionId,\n setDiscussionId,\n discussions,\n setDiscussions,\n}) => {\n const {t} = useTranslation();\n const {user, userToken} = useContext(UserContext);\n const {settings: {language}} = useContext(SettingsContext);\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme), [theme]);\n const height = useHeaderHeight();\n const speaker = useSpeaker();\n\n const [discussionsLoading, setDiscussionsLoading] = useState(false);\n const [querying, setQuerying] = useState(false);\n\n const shouldntRefreshQueries = useRef(false);\n\n useEffect(() => {\n speaker.speak(t(\n 'MainScreen.greeting',\n 'Hello {{firstName}}, how can I help you ?',\n {firstName: user.first_name}\n ), language);\n }, []);\n\n const updateDiscussionId = useCallback((value, shouldntRefresh = false) => {\n shouldntRefreshQueries.current = shouldntRefresh;\n setDiscussionId(value);\n }, []);\n\n const fetchDiscussions = useCallback(async () => {\n setDiscussionsLoading(true);\n\n const response = await fetch(`${Api.apiBaseUrl}/discussions.json?user_token=${userToken}${Api.roomSlug ? `&room=${Api.roomSlug}` : ''}`, {method: 'GET'});\n const data = await response.json();\n\n setDiscussionsLoading(false);\n\n if (data.error) {\n // TODO: handle error\n console.log(data.error);\n return;\n }\n\n setDiscussions(data);\n return data;\n }, [userToken, setDiscussionsLoading, setDiscussions]);\n\n return (\n \n {\n setChatMode(value);\n shouldntRefreshQueries.current = false;\n }}\n chatMode={chatMode}\n discussions={discussions}\n setDiscussions={setDiscussions}\n discussionsLoading={discussionsLoading}\n discussionId={discussionId}\n updateDiscussionId={updateDiscussionId}\n fetchDiscussions={fetchDiscussions}\n setDiscussionsLoading={setDiscussionsLoading}\n />\n\n \n {chatMode\n ? (\n \n )\n : (\n \n )}\n \n \n );\n};\n\nconst getStyles = theme => StyleSheet.create({\n mainContainer: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.backgroundPrimary,\n },\n});\n\nexport default MainScreen;\n","import React, {useContext, useMemo, useCallback, useState, useEffect} from 'react';\nimport {Alert, Image, Platform, StyleSheet, Text, View} from 'react-native';\nimport {useTranslation} from 'react-i18next';\nimport {useNavigation} from '@react-navigation/native';\nimport * as Sentry from 'sentry-expo';\nimport Constants from 'expo-constants';\n\nimport {UserContext} from '../contexts/UserContext';\nimport {ThemeContext} from '../contexts/ThemeContext';\nimport StyledButton from '../components/StyledButton';\nimport Api from '../constants/Api';\nimport openLink from '../utils/openLink';\n\nconst PURCHASES_STUB = {\n\trestorePurchases: () => {},\n};\n\nlet Purchases = PURCHASES_STUB;\n\nif (Constants.appOwnership !== 'expo' && Platform.OS !== 'web') {\n\tPurchases = require('react-native-purchases').default;\n}\n\nconst AccountScreen = () => {\n\tconst {t} = useTranslation();\n\tconst {userId, userToken, user, signOut, subscribed} = useContext(UserContext);\n\tconst theme = useContext(ThemeContext);\n\tconst styles = useMemo(() => getStyles(theme), [theme]);\n\tconst {navigate} = useNavigation();\n\n\tconst [bankAccounts, setBankAccounts] = useState([]);\n\tconst [restoreLoading, setRestoreLoading] = useState(false);\n\n\tuseEffect(() => {\n\t\tconst fetchBankAccounts = async () => {\n\t\t\ttry {\n\t\t\t\tconst result = await fetch(`${Api.apiBaseUrl}/bank_accounts.json?user_token=${userToken}`, {\n\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t'Accept': 'application/json',\n\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\tconst bankAccountList = await result.json();\n\n\t\t\t\tif (bankAccountList.error) {\n\t\t\t\t\tthrow bankAccountList.error;\n\t\t\t\t}\n\n\t\t\t\tsetBankAccounts(bankAccountList);\n\t\t\t} catch (error) {\n\t\t\t\t// TODO: handle error\n\t\t\t\tconsole.log(error);\n\n\t\t\t\tif (Platform.OS === 'web') {\n\t\t\t\t\tSentry.Browser.captureException(error);\n\t\t\t\t} else {\n\t\t\t\t\tSentry.Native.captureException(error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tfetchBankAccounts();\n\t}, [userToken]);\n\n\tconst logOut = useCallback(() => {\n\t\tif (Platform.OS === 'web') {\n\t\t\tif (window.confirm(t('AccountScreen.alerts.logout.message', 'Are you sure you want to log out ?'))) {\n\t\t\t\tsignOut();\n\t\t\t}\n\t\t} else {\n\t\t\tAlert.alert(\n\t\t\t\tt('AccountScreen.alerts.logout.title', 'Log out'),\n\t\t\t\tt('AccountScreen.alerts.logout.message', 'Are you sure you want to log out ?'),\n\t\t\t\t[\n\t\t\t\t\t{text: t('AccountScreen.alerts.logout.buttons.cancel', 'Cancel'), style: 'cancel'},\n\t\t\t\t\t{\n\t\t\t\t\t\ttext: t('AccountScreen.alerts.logout.buttons.confirm', 'Log out'),\n\t\t\t\t\t\tonPress: signOut,\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t);\n\t\t}\n\t}, [signOut, t]);\n\n\tconst restore = useCallback(async () => {\n\t\ttry {\n\t\t\tif ((user || {}).status === 'guest') {\n\t\t\t\tAlert.alert(\n\t\t\t\t\tt('AccountScreen.alerts.restoreAsGuest.title', 'Restore purchases'),\n\t\t\t\t\tt('AccountScreen.alerts.restoreAsGuest.message', 'You must create an account before being able to restore purchases.'),\n\t\t\t\t\t[\n\t\t\t\t\t\t{text: t('AccountScreen.alerts.restoreAsGuest.buttons.cancel', 'Cancel'), style: 'cancel'},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: t('AccountScreen.alerts.restoreAsGuest.buttons.confirm', 'Create my free account'),\n\t\t\t\t\t\t\tonPress: () => navigate('Signup'),\n\t\t\t\t\t\t},\n\t\t\t\t\t]\n\t\t\t\t);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetRestoreLoading(true);\n\n\t\t\tawait Purchases.restorePurchases();\n\t\t} catch (e) {\n\t\t\t// TODO: Handle error\n\t\t} finally {\n\t\t\tsetRestoreLoading(false);\n\t\t}\n\t}, [navigate, t, user]);\n\n\tconst deleteAccount = useCallback(async () => {\n\t\tif (Platform.OS === 'web') {\n\t\t\tif (window.confirm(t('AccountScreen.alerts.delete.message', 'Are you sure to PERMANENTLY delete your account? This action is irreversible.'))) {\n\t\t\t\ttry {\n\t\t\t\t\tawait fetch(`${Api.apiBaseUrl}/users/${userId}`, {\n\t\t\t\t\t\tmethod: 'PATCH',\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t'Accept': 'application/json',\n\t\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t\t\tuser_token: userToken,\n\t\t\t\t\t\t\tstatus: 'deleted',\n\t\t\t\t\t\t}),\n\t\t\t\t\t});\n\n\t\t\t\t\tsignOut();\n\t\t\t\t} catch (error) {\n\t\t\t\t\t// TODO: Handle error\n\t\t\t\t\tif (Platform.OS === 'web') {\n\t\t\t\t\t\tSentry.Browser.captureException(error);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tSentry.Native.captureException(error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tAlert.alert(\n\t\t\t\tt('AccountScreen.alerts.delete.title', 'Delete account'),\n\t\t\t\tt('AccountScreen.alerts.delete.message', 'Are you sure to PERMANENTLY delete your account? This action is irreversible.'),\n\t\t\t\t[\n\t\t\t\t\t{text: t('AccountScreen.alerts.delete.buttons.cancel', 'Cancel'), style: 'cancel'},\n\t\t\t\t\t{\n\t\t\t\t\t\ttext: t('AccountScreen.alerts.delete.buttons.confirm', 'Delete account'),\n\t\t\t\t\t\tonPress: async () => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait fetch(`${Api.apiBaseUrl}/users/${userId}`, {\n\t\t\t\t\t\t\t\t\tmethod: 'PATCH',\n\t\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\t\t'Accept': 'application/json',\n\t\t\t\t\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t\t\t\t\t\tuser_token: userToken,\n\t\t\t\t\t\t\t\t\t\tstatus: 'deleted',\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tsignOut();\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\t// TODO: Handle error\n\t\t\t\t\t\t\t\tif (Platform.OS === 'web') {\n\t\t\t\t\t\t\t\t\tSentry.Browser.captureException(error);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tSentry.Native.captureException(error);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t);\n\t\t}\n\t}, [signOut, t, userId, userToken]);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t{user && user.status !== 'guest' ? `${user.first_name || ''} ${user.last_name || ''}` : t('AccountScreen.guest', 'Guest user')}\n\t\t\t\t\n\n\t\t\t\t{(user && user.status !== 'guest')\n\t\t\t\t\t? (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{user.email || ''}\n\t\t\t\t\t\t\n\t\t\t\t\t)\n\t\t\t\t\t: (\n\t\t\t\t\t\t navigate('Signup')}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t{subscribed && (\n\t\t\t\t\t\n\t\t\t\t\t\t{t('AccountScreen.subscriptionActive', '★ Subscription active ★')}\n\t\t\t\t\t\n\t\t\t\t)}\n\n\t\t\t\t {\n\t\t\t\t\t\tif (Platform.OS === 'web') {\n\t\t\t\t\t\t\topenLink(`${Api.apiBaseUrl}/banks?user_token=${userToken}&persist=true`);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnavigate('Link bank');\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t/>\n\n\t\t\t\t{(bankAccounts || []).length\n\t\t\t\t\t? (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{t('AccountScreen.bankAccountList.title', 'Connected bank accounts:')}\n\t\t\t\t\t\t\n\t\t\t\t\t)\n\t\t\t\t\t: null\n\t\t\t\t}\n\n\t\t\t\t{(bankAccounts || []).map(bankAccount => (\n\t\t\t\t\t\n\t\t\t\t\t\t{`• ${bankAccount.bank_name} - ${bankAccount.owner_name} - ${bankAccount.name}`}\n\t\t\t\t\t\n\t\t\t\t))}\n\t\t\t\n\n\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\tv{Constants.expoConfig.version}\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nconst getStyles = theme => StyleSheet.create({\n\tmainContainer: {\n\t\tflex: 1,\n\t\tpaddingHorizontal: 12,\n\t\tpaddingTop: 40,\n\t\tpaddingBottom: 20,\n\t\talignItems: 'center',\n\t\tjustifyContent: 'space-between',\n\t\tbackgroundColor: theme.backgroundPrimary,\n\t},\n\ttopContainer: {\n\t\talignItems: 'center',\n\t},\n\timage: {\n\t\twidth: 100,\n\t\theight: 100,\n\t\tborderRadius: 50,\n\t\tmarginBottom: 20,\n\t},\n\tname: {\n\t\tfontSize: 20,\n\t\tcolor: theme.textPrimary,\n\t\tmarginBottom: 10,\n\t},\n});\n\nexport default AccountScreen;\n","import React, {useContext, useMemo, useCallback, useState, useEffect} from 'react';\nimport {\n\tPlatform,\n\tScrollView,\n\tStyleSheet,\n\tText,\n\tView,\n\tSafeAreaView,\n\tTouchableOpacity,\n\tImage,\n\tActivityIndicator,\n\tAlert,\n} from 'react-native';\nimport {useTranslation} from 'react-i18next';\nimport Constants from 'expo-constants';\nimport * as Sentry from 'sentry-expo';\nimport {useNavigation} from '@react-navigation/native';\n\nimport {UserContext} from '../contexts/UserContext';\nimport {ThemeContext, WEB_MAX_WIDTH} from '../contexts/ThemeContext';\nimport StyledButton from '../components/StyledButton';\nimport Api from '../constants/Api';\n\nconst PURCHASES_STUB = {\n\tLOG_LEVEL: {},\n\tsetLogLevel: () => {},\n\tconfigure: () => {},\n\tgetOfferings: () => ({current : {availablePackages: [{identifier: 'FAKE', product: {priceString: 'FAKE', subscriptionPeriod: 'P1M'}}]}}),\n\tpurchasePackage: () => {},\n\tgetCustomerInfo: () => {},\n\taddCustomerInfoUpdateListener: () => {},\n};\n\nlet Purchases = PURCHASES_STUB;\n\nif (Constants.appOwnership !== 'expo' && Platform.OS !== 'web') {\n\tPurchases = require('react-native-purchases').default;\n}\n\nconst PurchasePackage = ({purchasePackage, selected, setSelectedPackage}) => {\n\tconst {t} = useTranslation();\n\tconst theme = useContext(ThemeContext);\n\tconst {user} = useContext(UserContext);\n\n\tconst {product: {priceString, subscriptionPeriod}} = purchasePackage;\n\n\tconst SUBSCRIPTION_PERIOD_TO_TITLE = useMemo(() => ({\n\t\tFREE: t(\n\t\t\t'UpgradeScreen.titles.free',\n\t\t\t'Limited to {{count}} queries per day.',\n\t\t\t{count: user.free_queries},\n\t\t),\n\t\tP1M: t('UpgradeScreen.titles.monthly', 'Premium Subscription - Monthly'),\n\t\tP1Y: t('UpgradeScreen.titles.yearly', 'Premium Subscription - Yearly'),\n\t}), [t, user.free_queries]);\n\n\tconst SUBSCRIPTION_PERIOD_TO_MODEL = useMemo(() => ({\n\t\tFREE: 'GPT-3.5',\n\t\tP1M: 'GPT-4',\n\t\tP1Y: 'GPT-4',\n\t}), []);\n\n\treturn (\n\t\t setSelectedPackage(purchasePackage)}\n\t\t>\n\t\t\t{priceString && (\n\t\t\t\t\n\t\t\t\t\t{priceString}\n\t\t\t\t\n\t\t\t)}\n\n\t\t\t\n\t\t\t\t{SUBSCRIPTION_PERIOD_TO_TITLE[subscriptionPeriod]}\n\t\t\t\n\n\t\t\t\n\t\t\t\t{SUBSCRIPTION_PERIOD_TO_MODEL[subscriptionPeriod]}\n\t\t\t\n\t\t\n\t);\n};\n\nconst UpgradeScreen = ({onboarding}) => {\n\tconst {t} = useTranslation();\n\tconst {userToken, userId, user, setUser, subscribed, setSubscribed} = useContext(UserContext);\n\tconst theme = useContext(ThemeContext);\n\tconst styles = useMemo(() => getStyles(theme), [theme]);\n\tconst {navigate} = useNavigation();\n\n\tconst [loading, setLoading] = useState(true);\n\tconst [confirmLoading, setConfirmLoading] = useState(false);\n\tconst [errorMessage, setErrorMessage] = useState(null);\n\tconst [packages, setPackages] = useState([]);\n\tconst [restoreLoading, setRestoreLoading] = useState(false);\n\n\tconst FREE_PACKAGE = useMemo(() => ({\n\t\tidentifier: 'free',\n\t\tproduct: {\n\t\t\tpriceString: t('UpgradeScreen.freePackage.priceString', 'Free'),\n\t\t\tsubscriptionPeriod: 'FREE',\n\t\t},\n\t}), [t]);\n\n\tconst [selectedPackage, setSelectedPackage] = useState(!onboarding ? FREE_PACKAGE : null);\n\n\tuseEffect(() => {\n\t\tconst getOfferings = async () => {\n\t\t\ttry {\n\t\t\t\tconst offerings = await Purchases.getOfferings();\n\n\t\t\t\tif (offerings.current !== null && offerings.current.availablePackages.length !== 0) {\n\t\t\t\t\tconst packages = [FREE_PACKAGE, ...offerings.current.availablePackages];\n\n\t\t\t\t\tsetPackages(packages);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\t// TODO: Handle errors\n\t\t\t\tsetErrorMessage(t('ContactsPermissionScreen.errors.request', 'Something went wrong, try again later.'));\n\n\t\t\t\tif (Platform.OS === 'web') {\n\t\t\t\t\tSentry.Browser.captureException(error);\n\t\t\t\t} else {\n\t\t\t\t\tSentry.Native.captureException(error);\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\t// TODO: Handle error\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t};\n\n\t\tgetOfferings();\n\t}, [FREE_PACKAGE, t, user.free_queries]);\n\n\tconst restore = useCallback(async () => {\n\t\ttry {\n\t\t\tif ((user || {}).status === 'guest') {\n\t\t\t\tAlert.alert(\n\t\t\t\t\tt('AccountScreen.alerts.restoreAsGuest.title', 'Restore purchases'),\n\t\t\t\t\tt('AccountScreen.alerts.restoreAsGuest.message', 'You must create an account before being able to restore purchases.'),\n\t\t\t\t\t[\n\t\t\t\t\t\t{text: t('AccountScreen.alerts.restoreAsGuest.buttons.cancel', 'Cancel'), style: 'cancel'},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: t('AccountScreen.alerts.restoreAsGuest.buttons.confirm', 'Create my free account'),\n\t\t\t\t\t\t\tonPress: () => navigate('Signup'),\n\t\t\t\t\t\t},\n\t\t\t\t\t]\n\t\t\t\t);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetRestoreLoading(true);\n\n\t\t\tawait Purchases.restorePurchases();\n\t\t} catch (e) {\n\t\t\t// TODO: Handle error\n\t\t} finally {\n\t\t\tsetRestoreLoading(false);\n\t\t}\n\t}, [navigate, t, user]);\n\n\tconst updateUserHasCompletedOnboarding = useCallback(async () => {\n\t\ttry {\n\t\t\tsetConfirmLoading(true);\n\t\t\tsetErrorMessage(null);\n\n\t\t\tconst result = await fetch(`${Api.apiBaseUrl}/users/${userId}`, {\n\t\t\t\tmethod: 'PATCH',\n\t\t\t\theaders: {\n\t\t\t\t\t'Accept': 'application/json',\n\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tuser_token: userToken,\n\t\t\t\t\thas_completed_onboarding: true,\n\t\t\t\t}),\n\t\t\t});\n\n\t\t\tconst updatedUser = await result.json();\n\n\t\t\tsetUser(updatedUser);\n\t\t\tsetConfirmLoading(false);\n\t\t} catch (error) {\n\t\t\tsetErrorMessage(t('ContactsPermissionScreen.errors.request', 'Something went wrong, try again later.'));\n\n\t\t\tif (Platform.OS === 'web') {\n\t\t\t\tSentry.Browser.captureException(error);\n\t\t\t} else {\n\t\t\t\tSentry.Native.captureException(error);\n\t\t\t}\n\t\t} finally {\n\t\t\tsetConfirmLoading(false);\n\t\t}\n\t}, [userId, userToken, setUser, t]);\n\n\tconst buy = useCallback(async purchasePackage => {\n\t\ttry {\n\t\t\tsetConfirmLoading(true);\n\t\t\tconst purchaseMade = await Purchases.purchasePackage(purchasePackage);\n\n\t\t\tif (typeof purchaseMade.customerInfo.entitlements.active['premium'] !== 'undefined') {\n\t\t\t\tsetSubscribed(true);\n\n\t\t\t\tif (onboarding) {\n\t\t\t\t\tawait updateUserHasCompletedOnboarding();\n\t\t\t\t} else {\n\t\t\t\t\tnavigate('MainStack');\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (!error.userCancelled) {\n\t\t\t\t// TODO: Handle error\n\t\t\t\tsetErrorMessage(t('ContactsPermissionScreen.errors.request', 'Something went wrong, try again later.'));\n\n\t\t\t\tif (Platform.OS === 'web') {\n\t\t\t\t\tSentry.Browser.captureException(error);\n\t\t\t\t} else {\n\t\t\t\t\tSentry.Native.captureException(error);\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tsetConfirmLoading(false);\n\t\t}\n\t}, [navigate, onboarding, setSubscribed, t, updateUserHasCompletedOnboarding]);\n\n\treturn (\n\t\t\n\t\t\t{loading\n\t\t\t\t? (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t)\n\t\t\t\t: (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{t('UpgradeScreen.title', 'Premium access')}\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{t('UpgradeScreen.subtitle', 'Get access to an even more powerful assistant and unlimited queries.')}\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{packages.map(purchasePackage => (\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{t('UpgradeScreen.cancel', 'Cancel anytime')}\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t{/**/}\n\t\t\t\t\t\t\t\t{/*\t*/}\n\t\t\t\t\t\t\t\t{/*\t\tBy unlocking premium access you get access to:*/}\n\t\t\t\t\t\t\t\t{/*\t*/}\n\n\t\t\t\t\t\t\t\t{/*\t*/}\n\t\t\t\t\t\t\t\t{/*\t\t• Unlimited queries, have as many request as you'd like, anytime !*/}\n\t\t\t\t\t\t\t\t{/*\t*/}\n\n\t\t\t\t\t\t\t\t{/*\t*/}\n\t\t\t\t\t\t\t\t{/*\t\t• GPT-4 AI model, an even more powerful model that takes your personnal assistant to the next level.*/}\n\t\t\t\t\t\t\t\t{/*\t*/}\n\t\t\t\t\t\t\t\t{/**/}\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{subscribed && (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{t('AccountScreen.subscriptionActive', '★ Subscription active ★')}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t{errorMessage && (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{errorMessage}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t buy(selectedPackage)\n\t\t\t\t\t\t\t\t\t\t: () => {}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdisabled={!selectedPackage || (!onboarding && selectedPackage.identifier === 'free')}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t)\n\t\t\t}\n\t\t\n\t);\n};\n\nconst getStyles = () => StyleSheet.create({\n\tmainContainer: {\n\t\talignSelf: 'center',\n\t\tmaxWidth: WEB_MAX_WIDTH,\n\t\twidth: '100%',\n\t\theight: '100%',\n\t\tflexDirection: 'column',\n\t\tpaddingHorizontal: 12,\n\t\tpaddingBottom: 8,\n\t},\n\n\tlogo: {\n\t\twidth: 80,\n\t\theight: 80,\n\t\tborderRadius: 40,\n\t\tmarginTop: 20,\n\t\tmarginBottom: 10,\n\t\tresizeMode: 'contain',\n\t},\n});\n\nexport default UpgradeScreen;\n","import React, {useContext} from 'react';\nimport {useNavigation} from '@react-navigation/native';\nimport {WebView} from 'react-native-webview';\n\nimport {UserContext} from '../contexts/UserContext';\nimport Api from '../constants/Api';\n\nconst LinkBankScreen = () => {\n\tconst {userToken} = useContext(UserContext);\n\tconst {navigate} = useNavigation();\n\n\treturn (\n\t\t navigate('Account')}\n\t\t/>\n\t);\n};\n\nexport default LinkBankScreen;\n","const capitalize = string => {\n\treturn `${string[0].toUpperCase()}${string.slice(1, string.length)}`;\n};\n\nexport default capitalize;\n","import React, {useCallback, useContext, useEffect, useMemo, useState} from 'react';\nimport {\n\tActivityIndicator,\n\tSafeAreaView,\n\tStyleSheet,\n\tView,\n\tText,\n\tImage,\n\tScrollView,\n} from 'react-native';\nimport {useNavigation, useRoute} from '@react-navigation/native';\n\nimport {UserContext} from '../contexts/UserContext';\nimport {ThemeContext, WEB_MAX_WIDTH} from '../contexts/ThemeContext';\nimport Api from '../constants/Api';\nimport Chat from './MainScreen/Chat/Chat';\nimport capitalize from '../utils/capitalize';\nimport {useTranslation} from 'react-i18next';\n\nconst QueryScreen = () => {\n\tconst {userToken} = useContext(UserContext);\n\tconst theme = useContext(ThemeContext);\n\tconst styles = useMemo(() => getStyles(theme), [theme]);\n\tconst {t} = useTranslation();\n\tconst {params} = useRoute();\n\tconst {setOptions} = useNavigation();\n\n\tconst [loading, setLoading] = useState(true);\n\tconst [query, setQuery] = useState(null);\n\n\tconst fetchQuery = useCallback(async () => {\n\t\tif (params.id) {\n\t\t\tsetLoading(true);\n\n\t\t\tconst response = await fetch(`${Api.apiBaseUrl}/queries/${params.id}.json?user_token=${userToken}`, {method: 'GET'});\n\t\t\tconst data = await response.json();\n\n\t\t\tif (data.error) {\n\t\t\t\t// TODO: handle error\n\t\t\t\tconsole.log(data.error);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetOptions({title: data.discussion.name});\n\n\t\t\tdata.steps.unshift({\n\t\t\t\tid: -1,\n\t\t\t\tname: 'Secrétaire AI',\n\t\t\t\ticon: 'icon-white.png',\n\t\t\t});\n\n\t\t\tif (data.device && data.device.device_type) {\n\t\t\t\tlet icon = 'icon-white.png';\n\n\t\t\t\tswitch(data.device.device_type) {\n\t\t\t\t\tcase 'desktop':\n\t\t\t\t\t\ticon = 'desktop.png';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'phone':\n\t\t\t\t\tcase 'mobile':\n\t\t\t\t\t\ticon = 'mobile.png';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'tablet':\n\t\t\t\t\t\ticon = 'tablet.png';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tdata.steps.unshift({\n\t\t\t\t\tid: -2,\n\t\t\t\t\tname: capitalize(data.device.device_type),\n\t\t\t\t\ticon,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tsetQuery(data);\n\t\t\tsetLoading(false);\n\t\t}\n\t}, [params.id, userToken, setOptions]);\n\n\tuseEffect(() => {\n\t\tfetchQuery();\n\t}, [userToken, fetchQuery]);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{loading\n\t\t\t\t\t? (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t)\n\t\t\t\t\t: (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{t('QueryScreen.stepTitle', 'Steps')}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{(query.steps || []).map((step, i) => (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{i !== 0 && (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t↓\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t{step.name}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\n\t\t\n\t);\n};\n\nconst getStyles = theme => StyleSheet.create({\n\tsafeArea: {\n\t\tflex:1,\n\t\twidth: '100%',\n\t\tbackgroundColor: theme.headerBackground,\n\t},\n\tcontainer: {\n\t\tflex: 1,\n\t\twidth: '100%',\n\t\tbackgroundColor: theme.backgroundPrimary,\n\t},\n\tloaderContainer: {\n\t\tflex: 1,\n\t\tjustifyContent: 'center',\n\t},\n\tscrollView: {paddingTop: 6},\n\ttitleContainer: {alignItems: 'center', paddingTop: 20},\n\ttitle: {fontSize: 20, color: theme.textSecondary},\n\tstepsContainer: {\n\t\tflexDirection: 'column',\n\t\talignItems: 'center',\n\t\tgap: 12,\n\t\tpaddingVertical: 20,\n\t},\n\tarrow: {fontSize: 36, color: theme.colorSecondary, marginBottom: 12},\n\tstep: {\n\t\twidth: 200,\n\t\theight: 200,\n\t\tborderRadius: 100,\n\t\tbackgroundColor: '#212529',\n\t\tjustifyContent: 'center',\n\t\talignItems: 'center',\n\t\tborderWidth: 1,\n\t\tborderColor: theme.inputBorderColor,\n\t},\n\tstepIcon: {\n\t\twidth: 70,\n\t\theight: 70,\n\t\tmarginBottom: 8,\n\t},\n\tstepName: {color: '#fff', fontWeight: 'bold', maxWidth: 120},\n});\n\nexport default QueryScreen;\n","import React, {useContext, useRef, useState} from 'react';\nimport {StyleSheet, Text, TouchableOpacity} from 'react-native';\nimport {useTranslation} from 'react-i18next';\nimport {useNavigation} from '@react-navigation/native';\n\nimport {ThemeContext} from './contexts/ThemeContext';\nimport {UserContext} from './contexts/UserContext';\nimport Menu from './components/Menu';\nimport StyledButton from './components/StyledButton';\n\nconst getQueryNumberColor = (theme, remaining) => {\n switch (remaining) {\n case 0:\n return theme.error;\n case 1:\n return theme.warning;\n default:\n return theme.success;\n }\n};\n\nconst UpgradeMenu = () => {\n const {t} = useTranslation();\n const {user} = useContext(UserContext);\n const theme = useContext(ThemeContext);\n const {navigate} = useNavigation();\n const queryNumberButtonRef = useRef(null);\n\n const [upgradeModalOpen, setUpgradeModalOpen] = useState(false);\n\n const remainingQueries = Math.max((user || {}).free_queries - (user || {}).daily_queries, 0);\n\n return (\n <>\n setUpgradeModalOpen(!upgradeModalOpen)}\n style={{\n marginRight: 5,\n backgroundColor: getQueryNumberColor(theme, remainingQueries),\n height: 28,\n width: 28,\n borderRadius: 14,\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n \n {remainingQueries}\n \n \n\n setUpgradeModalOpen(false)}\n position=\"bottom\"\n >\n \n {user.status === 'guest'\n ? t(\n 'UpgradeMenu.textGuest',\n 'You get {{count}} free queries every day as a guest. Create your account to get more.',\n {count: user.free_queries},\n )\n : t(\n 'UpgradeMenu.textUser',\n 'You get {{count}} free queries every day. Upgrade to a premium account to get unlimited queries and much more.',\n {count: user.free_queries},\n )\n }\n \n\n user.status === 'guest'\n ? navigate('Signup')\n : navigate('Upgrade')\n }\n />\n \n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n height: '100%',\n },\n});\n\nexport default UpgradeMenu;\n","import React, {useCallback, useContext, useMemo, useState} from 'react';\nimport {StyleSheet, TouchableOpacity, View, Text, Dimensions, Platform} from 'react-native';\nimport {useTranslation} from 'react-i18next';\nimport {createStackNavigator} from '@react-navigation/stack';\nimport {FontAwesome, Ionicons} from '@expo/vector-icons';\n\nimport MainScreen from './screens/MainScreen/MainScreen';\nimport SignupScreen from './screens/onboarding/SignupScreen/SignupScreen';\n\nimport {SettingsContext} from './contexts/SettingsContext';\nimport {SpeakerContext} from './contexts/SpeakerContext';\nimport {ThemeContext} from './contexts/ThemeContext';\nimport {RoomContext} from './contexts/RoomContext';\nimport {UserContext} from './contexts/UserContext';\nimport useSpeaker from './hooks/useSpeaker';\nimport AccountScreen from './screens/AccountScreen';\nimport UpgradeScreen from './screens/UpgradeScreen';\nimport LinkBankScreen from './screens/LinkBankScreen';\nimport QueryScreen from './screens/QueryScreen';\nimport UpgradeMenu from './UpgradeMenu';\n\nconst MainStack = createStackNavigator();\n\nconst MainStackNavigator = ({drawerOpen, toggleDrawer, closeDrawer}) => {\n const {t} = useTranslation();\n const {user, subscribed} = useContext(UserContext);\n const theme = useContext(ThemeContext);\n const {settings, updateSettings} = useContext(SettingsContext);\n const {room} = useContext(RoomContext);\n const {speaking} = useContext(SpeakerContext);\n const speaker = useSpeaker();\n\n const [discussionId, setDiscussionId] = useState(null);\n const [discussions, setDiscussions] = useState((user || {}).discussions || []);\n\n const toggleMuted = useCallback(() => updateSettings({...settings, muted: !settings.muted}), [settings, updateSettings]);\n\n const setChatMode = useCallback(value => updateSettings({...settings, chatMode: value}), [settings, updateSettings]);\n\n const currentDiscussion = useMemo(() => {\n return discussions.find(discussion => discussion.id === discussionId);\n }, [discussionId, discussions]);\n\n return (\n \n (\n \n {discussionId && currentDiscussion && currentDiscussion.name\n ? currentDiscussion.name\n : room && room.name ? room.name : 'Secrétaire AI'}\n \n ),\n headerLeft: () => (\n \n \n \n \n \n ),\n headerRight: () => (\n \n {/* setChatMode(!settings.chatMode)}*/}\n {/* style={{padding: 10, marginRight: 5}}*/}\n {/*>*/}\n {/* */}\n {/**/}\n\n {/*{user*/}\n {/* && (user.daily_queries !== undefined && user.free_queries !== undefined)*/}\n {/* && (user.status === 'guest' || subscribed === false) && (*/}\n {/* */}\n {/*)}*/}\n\n \n \n \n \n ),\n }}\n >\n {() => (\n \n )}\n \n\n \n\n \n\n \n\n \n\n \n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n height: '100%',\n },\n});\n\nexport default MainStackNavigator;\n","import React, {useState, useContext, useMemo, useCallback, useEffect} from 'react';\nimport {\n Keyboard,\n Platform,\n StyleSheet,\n Text,\n TouchableOpacity,\n View,\n} from 'react-native';\nimport {useTranslation} from 'react-i18next';\nimport {FontAwesome} from '@expo/vector-icons';\nimport * as Sentry from 'sentry-expo';\n\nimport {SettingsContext} from '../../contexts/SettingsContext';\nimport {ThemeContext} from '../../contexts/ThemeContext';\nimport {UserContext} from '../../contexts/UserContext';\nimport Api from '../../constants/Api';\nimport OnboardingLayout from './components/OnboardingLayout';\nimport StyledButton from '../../components/StyledButton';\nimport countries from '../../assets/countries';\nimport languageList from '../../assets/languages-list';\nimport SearchModal from '../../components/SearchModal';\n\nconst DEFAULT_LANGUAGE = languageList.find(language => language.code === 'en-US');\nconst DEFAULT_COUNTRY = countries.find(({code}) => code === 'US');\n\nconst getLanguageObject = code => languageList.find(language => code.length === 2\n ? code === language.code.slice(0, 2)\n : code === language.code\n) || DEFAULT_LANGUAGE;\n\nconst LanguageScreen = ({navigation}) => {\n const {t} = useTranslation();\n const {settings, updateSettings} = useContext(SettingsContext);\n const {setUser, userId, userToken} = useContext(UserContext);\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme), [theme]);\n\n const [loading, setLoading] = useState(false);\n\n const [languageModalOpen, setLanguageModalOpen] = useState(false);\n\n const [country, setCountry] = useState(DEFAULT_COUNTRY);\n const [countryModalOpen, setCountryModalOpen] = useState(false);\n\n useEffect(() => {\n const initCountry = async () => {\n let countryCode;\n let locale = settings.language;\n\n if (Platform.OS === 'web') {\n // eslint-disable-next-line no-undef\n if (Intl && Intl.DateTimeFormat) {\n // eslint-disable-next-line no-undef\n locale = Intl.DateTimeFormat().resolvedOptions().locale;\n }\n }\n\n const splitted = locale.split('-');\n\n countryCode = splitted.length > 1 ? splitted[1] : locale;\n\n if (countryCode) {\n setCountry(countries.find(({code}) => code === countryCode.toUpperCase()) || DEFAULT_COUNTRY);\n }\n };\n\n initCountry();\n }, []);\n\n const openLanguageModal = useCallback(() => {\n setLanguageModalOpen(true);\n }, [setLanguageModalOpen]);\n\n const closeLanguageModal = useCallback(() => {\n setLanguageModalOpen(false);\n }, [setLanguageModalOpen]);\n\n const handleChangeLanguage = useCallback(newLanguage => {\n updateSettings({...settings, language: newLanguage.code});\n }, [settings, updateSettings]);\n\n const openCountryModal = useCallback(() => {\n setCountryModalOpen(true);\n }, [setCountryModalOpen]);\n\n const closeCountryModal = useCallback(() => {\n setCountryModalOpen(false);\n }, [setCountryModalOpen]);\n\n const handlePress = async () => {\n try {\n setLoading(true);\n\n const response = await fetch(`${Api.apiBaseUrl}/users/${userId}`, {\n method: 'PATCH',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n user_token: userToken,\n language: settings.language,\n country_code: country.code,\n }),\n });\n\n const responseJson = await response.json();\n\n setLoading(false);\n\n if (responseJson) {\n setUser(responseJson);\n navigation.navigate('Name', {onboarding: true});\n }\n\n return responseJson;\n } catch (error) {\n // TODO: Error handling\n\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n }\n };\n\n const language = useMemo(() => getLanguageObject(settings.language), [settings.language]);\n\n return (\n \n }\n >\n \n {t('LanguageScreen.fields.language.label', 'Language')}\n \n\n \n {\n if (Platform.OS !== 'web') {\n Keyboard.dismiss();\n }\n openLanguageModal();\n }}\n accessible={false}\n >\n \n \n {language.flag}\n \n\n \n {language.name}\n \n\n \n \n \n\n \n \n\n \n {t('LanguageScreen.fields.country.label', 'Country')}\n \n\n \n {\n if (Platform.OS !== 'web') {\n Keyboard.dismiss();\n }\n openCountryModal();\n }}\n accessible={false}\n >\n \n \n {country.flag}\n \n\n \n {country.name}\n \n\n \n \n \n\n {\n setCountry(item);\n }}\n getText={item => item.name}\n />\n \n \n );\n};\n\nconst getStyles = theme => StyleSheet.create({\n inputContainer: {\n flexDirection: 'row',\n width: 320,\n marginTop: 15,\n marginBottom: 25,\n padding: 10,\n borderRadius: 50,\n backgroundColor: theme.inputBackgroundColor,\n borderColor: theme.inputBorderColor,\n },\n flag: {\n fontSize: 28,\n marginLeft: 5,\n marginRight: 5,\n },\n iconStyle: {\n color: theme.colorSecondary,\n marginTop: 5,\n marginBottom: 0,\n },\n});\n\nexport default LanguageScreen;\n","import React, {useContext} from 'react';\nimport {Text, TouchableOpacity, View} from 'react-native';\nimport {ThemeContext} from '../contexts/ThemeContext';\n\nconst RadioButton = ({\n text,\n selected,\n disabled,\n onPress,\n style,\n ...props\n}) => {\n const theme = useContext(ThemeContext);\n\n return (\n \n \n {selected && (\n \n )}\n \n\n \n {text}\n \n \n );\n};\n\nexport default RadioButton;\n","import React, {useState, useContext} from 'react';\nimport {Platform, Text, View} from 'react-native';\nimport {useTranslation} from 'react-i18next';\nimport * as Sentry from 'sentry-expo';\n\nimport {UserContext} from '../../contexts/UserContext';\nimport {ThemeContext} from '../../contexts/ThemeContext';\nimport Api from '../../constants/Api';\nimport StyledButton from '../../components/StyledButton';\nimport RadioButton from '../../components/RadioButton';\n\nimport OnboardingLayout from './components/OnboardingLayout';\n\nconst GenderScreen = ({navigation}) => {\n const {t} = useTranslation();\n const {setUser, user, userId, userToken} = useContext(UserContext);\n const theme = useContext(ThemeContext);\n\n const [loading, setLoading] = useState(false);\n const [gender, setGender] = useState((user || {}).gender || '');\n const [errorMessage, setErrorMessage] = useState(null);\n\n const handlePress = async () => {\n console.log('gender', gender, gender.length);\n if (!gender.length) {\n setErrorMessage(t('GenderScreen.errors.missing', 'Please choose an option to continue.'));\n return;\n }\n\n try {\n setErrorMessage(null);\n setLoading(true);\n\n const response = await fetch(`${Api.apiBaseUrl}/users/${userId}`, {\n method: 'PATCH',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n user_token: userToken,\n gender: gender,\n }),\n });\n\n const responseJson = await response.json();\n\n console.log('#######responseJson');\n console.log(responseJson);\n\n setLoading(false);\n\n if(responseJson && responseJson.gender === gender) {\n setUser(responseJson);\n navigation.navigate('Username', {onboarding: true});\n } else {\n setErrorMessage(responseJson.gender);\n }\n\n return responseJson;\n } catch (error) {\n console.error('error');\n\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n }\n };\n\n return (\n }>\n \n \n {t('GenderScreen.label', 'What is your gender ?')}\n \n\n {errorMessage\n ? (\n \n {errorMessage}\n \n ) : null\n }\n\n \n setGender('male')}\n />\n\n setGender('female')}\n />\n\n setGender('na')}\n />\n \n \n \n );\n};\n\nexport default GenderScreen;\n","import React, {useContext, useMemo} from 'react';\n\nimport {\n Image,\n View,\n Text,\n StyleSheet,\n SafeAreaView,\n KeyboardAvoidingView,\n Platform,\n TouchableOpacity,\n} from 'react-native';\nimport {useTranslation} from 'react-i18next';\n\nimport {ThemeContext} from '../contexts/ThemeContext';\nimport openLink from '../utils/openLink';\nimport Api from '../constants/Api';\n\nconst RoomNotFoundScreen = () => {\n const {t} = useTranslation();\n const theme = useContext(ThemeContext);\n const styles = useMemo(() => getStyles(theme), [theme]);\n\n return (\n \n \n \n \n \n openLink(Api.webBaseUrl)}>\n \n \n \n\n \n {t('RoomNotFoundScreen.message', 'Invalid room')}\n \n \n \n \n \n );\n};\n\nconst getStyles = theme => StyleSheet.create({\n container: {\n flex: 1,\n backgroundColor: theme.backgroundPrimary,\n },\n textContainer: {\n alignItems: 'center',\n marginTop: 10,\n marginBottom: 10,\n },\n logoContainer: {\n marginTop: 50,\n marginBottom: 20,\n padding: 10,\n borderRadius: 60,\n },\n logo: {\n width: 80,\n height: 80,\n resizeMode: 'contain',\n borderRadius: 20,\n },\n title: {\n fontSize: 22,\n fontWeight: 'bold',\n color: theme.textPrimary,\n },\n});\n\nexport default RoomNotFoundScreen;\n","import React, {useCallback, useContext, useEffect, useMemo, useRef, useState} from 'react';\nimport {Platform, StyleSheet, View, Dimensions} from 'react-native';\nimport {useTranslation} from 'react-i18next';\nimport AsyncStorage from '@react-native-async-storage/async-storage';\nimport {NavigationContainer} from '@react-navigation/native';\nimport {createStackNavigator} from '@react-navigation/stack';\nimport * as Notifications from 'expo-notifications';\nimport * as SplashScreen from 'expo-splash-screen';\nimport * as Linking from 'expo-linking';\nimport * as Font from 'expo-font';\nimport * as NavigationBar from 'expo-navigation-bar';\nimport * as SecureStore from 'expo-secure-store';\nimport * as Sentry from 'sentry-expo';\nimport uuid from 'react-native-uuid';\nimport {Ionicons} from '@expo/vector-icons';\nimport Constants from 'expo-constants';\n\nimport SignupScreen from './screens/onboarding/SignupScreen/SignupScreen';\nimport NameScreen from './screens/onboarding/NameScreen';\nimport UsernameScreen from './screens/onboarding/UsernameScreen';\nimport GeolocationPermissionScreen from './screens/onboarding/GeolocationPermissionScreen';\nimport PushNotificationPermissionScreen from './screens/onboarding/PushNotificationPermissionScreen';\nimport ContactsPermissionScreen from './screens/onboarding/ContactsPermissionScreen';\n\nimport Api from './constants/Api';\nimport {DEFAULT_SETTINGS, SettingsContext} from './contexts/SettingsContext';\nimport {SpeakerContext} from './contexts/SpeakerContext';\nimport {ThemeContext, themes} from './contexts/ThemeContext';\nimport {UserContext} from './contexts/UserContext';\nimport {RoomContext} from './contexts/RoomContext';\nimport {NotificationsContext} from './contexts/NotificationsContext';\nimport OnboardingHeader from './components/OnboardingHeader';\nimport StyledStatusBar from './components/StyledStatusBar';\nimport MainStackNavigator from './MainStackNavigator';\nimport UpgradeScreen from './screens/UpgradeScreen';\nimport LanguageScreen from './screens/onboarding/LanguageScreen';\nimport GenderScreen from './screens/onboarding/GenderScreen';\nimport RoomNotFoundScreen from './screens/RoomNotFoundScreen';\n\n// import * as Sentry from 'sentry-expo';\n//\n// Sentry.init({\n// dsn: 'https://d995b8a71e40433aa619adbc440345d1@o103811.ingest.sentry.io/5757724',\n// enableInExpoDevelopment: true,\n// debug: true, // Sentry will try to print out useful debugging information if something goes wrong with sending an event. Set this to `false` in production.\n// });\n\n// Access any @sentry/react-native exports via:\n// Sentry.Native.*\n\n// Access any @sentry/browser exports via:\n// Sentry.Browser.*\n\n// Test Sentry Error\n// throw new Error(\"My first Sentry error!\");\n\nconst PURCHASES_STUB = {\n LOG_LEVEL: {},\n setLogLevel: () => {},\n configure: () => {},\n getOfferings: () => {},\n purchasePackage: () => {},\n getCustomerInfo: () => {},\n addCustomerInfoUpdateListener: () => {},\n};\n\nlet Purchases = PURCHASES_STUB;\n\nif (Constants.appOwnership !== 'expo' && Platform.OS !== 'web') {\n Purchases = require('react-native-purchases').default;\n}\n\nconst Stack = createStackNavigator();\n\n// Prepare the notification channel\nNotifications.setNotificationChannelAsync('new-match', {\n name: 'Match notifications',\n importance: Notifications.AndroidImportance.HIGH,\n sound: 'email-sound.wav', // <- for Android 8.0+, see channelId property below\n});\n\nNotifications.setNotificationChannelAsync('new-message', {\n name: 'Message notifications',\n importance: Notifications.AndroidImportance.HIGH,\n sound: 'email-sound.wav', // <- for Android 8.0+, see channelId property below\n});\n\n// When app is in foreground\nNotifications.setNotificationHandler({\n handleNotification: async () => ({\n shouldShowAlert: true,\n shouldPlaySound: true,\n shouldSetBadge: false,\n }),\n});\n\nSplashScreen.preventAutoHideAsync();\n\nconst Splash = () => {\n const theme = useContext(ThemeContext);\n\n return (\n \n );\n};\n\nconst App = () => {\n const containerRef = useRef();\n\n const [isLoadingComplete, setLoadingComplete] = useState(false);\n const [isLoggedIn, setIsLoggedIn] = useState(false);\n const [userId, setUserId] = useState(null);\n const [userToken, setUserToken] = useState(null);\n const [deviceToken, setDeviceToken] = useState(null);\n const [user, setUser] = useState(null);\n\n const [pushNotification, setPushNotification] = useState(true);\n const [notificationsCount, setNotificationsCount] = useState(null);\n\n const [room, setRoom] = useState(null);\n const [settings, setSettings] = useState(DEFAULT_SETTINGS);\n const [speaking, setSpeaking] = useState(false);\n\n const [subscribed, setSubscribed] = useState(null);\n\n const {t, i18n} = useTranslation();\n\n useEffect(() => {\n i18n.changeLanguage(settings.language);\n }, [i18n, settings]);\n\n const [drawerOpen, setDrawerOpen] = useState(Dimensions.get('window').width >= 1500);\n\n const toggleDrawer = useCallback(() => setDrawerOpen(!drawerOpen), [setDrawerOpen, drawerOpen]);\n const closeDrawer = useCallback( () => {\n if (Dimensions.get('window').width >= 1500) {\n // NOTE: We ignore close() call on web/tablets since the drawer can stay open on those platforms\n return ;\n }\n\n setDrawerOpen(false);\n }, [setDrawerOpen]);\n\n // Deep linking\n const linking = {\n prefixes: [Linking.createURL('/'), 'secretaire://', 'https://www.secretaire.ai'],\n config: {\n screens: {\n Root: {\n screens: {\n MainStack: 'app',\n Query: {\n path: 'queries/:id',\n parse: {\n id: Number,\n },\n },\n },\n },\n },\n },\n };\n\n const checkSubscriptionStatus = useCallback(async () => {\n try {\n const customerInfo = await Purchases.getCustomerInfo();\n\n if (typeof customerInfo.entitlements.active['premium'] !== 'undefined') {\n setSubscribed(true);\n } else {\n setSubscribed(false);\n }\n } catch (error) {\n // TODO: Handle error\n }\n }, [setSubscribed]);\n\n useEffect(() => {\n if (user) {\n if (__DEV__) {\n Purchases.setLogLevel(Purchases.LOG_LEVEL.VERBOSE);\n }\n\n if (Platform.OS === 'ios') {\n Purchases.configure({\n apiKey: 'appl_KusxmSTLIKMeunVcvUvMOraiSxw',\n appUserID: userId,\n // TODO: Delete\n // HACK: Ids of user that subscribed so we can't change their appUserID\n // appUserID: ['5310', '5019', '2262'].includes(userId) ? userToken : userId,\n });\n } else if (Platform.OS === 'android') {\n Purchases.configure({\n apiKey: 'goog_aHyALiJxFOavJngXoCadVptudaW',\n appUserID: userId,\n // TODO: Delete\n // HACK: Ids of user that subscribed so we can't change their appUserID\n // appUserID: ['5310', '5019', '2262'].includes(userId) ? userToken : userId,\n });\n }\n\n checkSubscriptionStatus();\n\n Purchases.addCustomerInfoUpdateListener(customerInfo => {\n if (typeof customerInfo.entitlements.active['premium'] !== 'undefined') {\n setSubscribed(true);\n } else {\n setSubscribed(false);\n }\n });\n }\n }, [checkSubscriptionStatus, setSubscribed, user, userId, userToken]);\n\n useEffect(() => {\n if (Platform.OS === 'android') {\n NavigationBar.setBackgroundColorAsync(themes[settings.theme].footerBackground);\n NavigationBar.setButtonStyleAsync(settings.theme);\n }\n }, [settings.theme]);\n\n useEffect(() => {\n const subscription = Notifications.addNotificationReceivedListener(notification => {\n console.log('@@@ notification @@@');\n console.log(notification);\n });\n\n return () => subscription.remove();\n }, []);\n\n const theme = useMemo(() => themes[settings.theme], [settings.theme]);\n\n const retrieveDeviceToken = useCallback(async () => {\n try {\n let deviceTokenFromStorage;\n\n if (Platform.OS === 'web') {\n deviceTokenFromStorage = await AsyncStorage.getItem('deviceToken');\n } else {\n deviceTokenFromStorage = await SecureStore.getItemAsync('deviceToken');\n }\n\n if (deviceTokenFromStorage) {\n setDeviceToken(deviceTokenFromStorage);\n } else {\n const deviceToken = uuid.v4();\n\n if (Platform.OS === 'web') {\n await AsyncStorage.setItem('deviceToken', deviceToken);\n } else {\n await SecureStore.setItemAsync('deviceToken', deviceToken);\n }\n\n setDeviceToken(deviceToken);\n }\n } catch (error) {\n // TODO: Handle error\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n }\n }, [setDeviceToken]);\n\n const signOut = useCallback(async () => {\n await AsyncStorage.removeItem('userId');\n await AsyncStorage.removeItem('userToken');\n\n setUser(null);\n setUserId(null);\n setUserToken(null);\n setIsLoggedIn(false);\n }, []);\n\n const fetchUser = useCallback(async (userId, userToken) => {\n console.log('*** fetchUser ***');\n\n const response = await fetch(\n `${Api.apiBaseUrl}/users/${userId}.json?user_token=${userToken}${Api.roomSlug ? `&room=${Api.roomSlug}` : ''}`,\n {\n method: 'GET',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n }\n );\n\n const responseJson = await response.json();\n\n if(responseJson && responseJson.id) {\n setUser(responseJson);\n } else {\n // signOut();\n }\n }, [signOut]);\n\n const retrieveToken = useCallback(async () => {\n\n // Check whether user is already authenticated server-side\n try {\n console.log(USER_ID, USER_TOKEN);\n if(USER_ID && USER_TOKEN) {\n setUserId(USER_ID);\n setUserToken(USER_TOKEN);\n console.log('USER_ID & USER_TOKEN set from server-side authentication');\n await fetchUser(USER_ID, USER_TOKEN);\n } else {\n console.log('USER_ID & USER_TOKEN do not exist in server-side authentication');\n }\n } catch (error) {\n console.log('USER_ID & USER_TOKEN do not exist in server-side authentication.');\n }\n\n try {\n if (userId && userToken) {\n setIsLoggedIn(true);\n\n await fetchUser(userId, userToken);\n } else {\n const userIdFromStorage = await AsyncStorage.getItem('userId');\n const userTokenFromStorage = await AsyncStorage.getItem('userToken');\n\n if (userIdFromStorage && userTokenFromStorage) {\n setUserId(userIdFromStorage);\n setUserToken(userTokenFromStorage);\n setIsLoggedIn(true);\n\n await fetchUser(userIdFromStorage, userTokenFromStorage);\n } else {\n setIsLoggedIn(false);\n }\n }\n } catch (error) {\n // Error retrieving data\n console.error('***** Error retrieving data *****');\n console.error(error);\n\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n\n setIsLoggedIn(false);\n }\n }, [fetchUser, userId, userToken]);\n\n const retrieveSettings = useCallback(async () => {\n try {\n const settingsFromStorage = await AsyncStorage.getItem('settings');\n\n if (settingsFromStorage) {\n setSettings(JSON.parse(settingsFromStorage));\n }\n } catch (error) {\n // TODO: Handle error, for now settings will be set to DEFAULT_SETTINGS which is probably fine\n\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n }\n }, [setSettings]);\n\n const updateSettings = useCallback(async value => {\n setSettings(value);\n\n try {\n await AsyncStorage.setItem('settings', JSON.stringify(value));\n } catch (error) {\n // TODO: Handle error\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n }\n }, [setSettings]);\n\n const fetchRoom = useCallback(async () => {\n \n if (Api.roomSlug) {\n const response = await fetch(\n `${Api.apiBaseUrl}/room/${Api.roomSlug}`,\n {\n method: 'GET',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n }\n );\n\n const responseJson = await response.json();\n\n console.log('room', responseJson);\n\n if(responseJson) {\n setRoom(responseJson);\n }\n }\n }, []);\n\n // Only for Web, with User authenticated by the backend\n const getUserFromBackend = useCallback(async () => {\n try {\n console.log(USER_I, USER_TOKEN);\n console.log('USER_ID and USER_TOKEN exist.');\n return [USER_ID, USER_TOKEN];\n } catch (error) {\n console.log('USER_ID and USER_TOKEN do not exist');\n }\n }, []);\n\n\n // Load any resources or data that we need prior to rendering the app\n useEffect(() => {\n const loadResourcesAndDataAsync = async () => {\n try {\n await Promise.all([\n retrieveDeviceToken(),\n retrieveToken(),\n retrieveSettings(),\n fetchRoom(),\n // Load fonts\n // Font.loadAsync({\n // ...Ionicons.font,\n // 'space-mono': require('./assets/fonts/SpaceMono-Regular.ttf'),\n // }),\n ]);\n } catch (error) {\n console.warn(error);\n\n if (Platform.OS === 'web') {\n Sentry.Browser.captureException(error);\n } else {\n Sentry.Native.captureException(error);\n }\n } finally {\n // TODO: We probably need an error screen and not use finally to set loading complete\n setLoadingComplete(true);\n\n if (Platform.OS !== 'web') {\n const initialURL = await Linking.getInitialURL();\n\n if (initialURL) {\n Linking.openURL(initialURL);\n }\n }\n\n await SplashScreen.hideAsync();\n }\n };\n\n loadResourcesAndDataAsync();\n }, []);\n\n let screens = null;\n\n if (!isLoadingComplete) {\n screens = ;\n } else if (Api.roomSlug && !room) {\n screens = ;\n } else if (!userToken || !user) {\n screens = ;\n } else if ((user.status === 'guest' && !user.has_completed_guest_onboarding) || (user.status !== 'guest' && !user.has_completed_onboarding)) {\n screens = (\n \n {user && user.status !== 'guest' && (\n \n (\n \n ),\n }}\n />\n (\n \n ),\n }}\n />\n (\n \n ),\n }}\n />\n (\n \n ),\n }}\n />\n \n )}\n (\n \n ),\n }}\n />\n (\n \n ),\n }}\n />\n (\n \n ),\n }}\n />\n (\n \n ),\n }}\n >\n {() => (\n \n )}\n \n \n );\n } else {\n screens = (\n \n {() => (\n \n )}\n \n );\n }\n\n return (\n \n \n \n \n \n \n \n \n\n \n \n {screens}\n \n \n \n \n \n \n \n \n \n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n width: '100%',\n height: '100%',\n },\n});\n\nexport default App;\n","import {registerRootComponent} from 'expo';\nimport * as Sentry from 'sentry-expo';\nimport 'intl-pluralrules';\n\nimport './i18n';\nimport App from './App';\n\nSentry.init({\n\tdsn: 'https://59488a0eb7d54984a03338b886218de8@o4505266437816320.ingest.sentry.io/4505267738116096',\n\tenableInExpoDevelopment: false,\n\tdebug: false,\n\tsampleRate: 0.2,\n});\n\nregisterRootComponent(App);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.hmd = (module) => {\n\tmodule = Object.create(module);\n\tif (!module.children) module.children = [];\n\tObject.defineProperty(module, 'exports', {\n\t\tenumerable: true,\n\t\tset: () => {\n\t\t\tthrow new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);\n\t\t}\n\t});\n\treturn module;\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkweb\"] = self[\"webpackChunkweb\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [343], () => (__webpack_require__(7170)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["i18n","initReactI18next","init","resources","en","translation","fr","es","zh","pt","ru","it","de","he","iw","ar","debug","lng","fallbackLng","supportedLngs","load","keySeparator","saveMissing","interpolation","escapeValue","console","log","apiBaseUrl","assetsBaseUrl","webBaseUrl","webSocketBaseUrl","roomSlug","Platform","API_BASE_URL","error","ROOM_SLUG","splitHostName","window","location","hostname","split","length","includes","appName","WEB_MAX_WIDTH","themes","light","backgroundPrimary","backgroundSecondary","headerBackground","footerBackground","headerBorderColor","footerBorderColor","textPrimary","textSecondary","colorPrimary","colorSecondary","success","warning","inputBackgroundColor","inputBorderColor","buttonText","link","dark","ThemeContext","createContext","getStyles","theme","StyleSheet","button","paddingVertical","paddingHorizontal","borderRadius","textAlign","alignItems","regular","backgroundColor","outlined","borderColor","borderWidth","outlinedSecondary","outlinedError","textButtonPrimary","textButtonSecondary","textButtonError","regularText","color","outlinedText","outlinedSecondaryText","outlinedErrorText","textButtonPrimaryText","textButtonSecondaryText","textButtonErrorText","_ref","text","disabled","loading","onPress","_ref$variant","variant","_ref$fontSize","fontSize","style","props","_objectWithoutProperties","_excluded","useContext","styles","useMemo","_jsx","TouchableOpacity","_objectSpread","opacity","concat","_toConsumableArray","children","ActivityIndicator","size","marginVertical","Text","lineHeight","RoomContext","React","room","DEVICE_TYPE_LABELS","UserContext","isLoggedIn","user","userId","userToken","deviceToken","setUserId","setUserToken","setDeviceToken","setUser","signOut","inputContainer","justifyContent","width","height","input","inputStyle","errors","textInputStyle","_jsxs","View","TextInput","placeholderTextColor","map","marginTop","container","flex","countryStyle","flexDirection","borderTopColor","borderTopWidth","closeContainer","padding","data","open","close","onClick","_ref$getText","getText","item","name","t","useTranslation","_useState","useState","_useState2","_slicedToArray","searchText","setSearchText","useEffect","onChangeText","useCallback","value","handleClick","filteredList","filter","_ref2","toLowerCase","Modal","animationType","transparent","visible","onRequestClose","onDismiss","SafeAreaView","KeyboardAvoidingView","behavior","Math","min","Dimensions","FontAwesome","FlatList","keyboardShouldPersistTaps","keyExtractor","code","renderItem","_ref3","flag","StyledInput","placeholder","url","Linking","openURL","marginBottom","subtitle","maxWidth","iconStyle","marginLeft","marginRight","fontWeight","legalText","hyperlinkStyle","country","setCountry","status","setStatus","phoneNumber","setPhoneNumber","email","setEmail","signupWithPhone","setSignupWithPhone","_useContext","setErrors","_useState3","_useState4","countryModalOpen","setCountryModalOpen","_useState5","_useState6","signingUpAsGuest","setSigningUpAsGuest","openCountryModal","closeCountryModal","handleEmailSignupPress","_asyncToGenerator","response","fetch","Api","method","headers","body","JSON","stringify","expo_installation_id","Constants","expo_session_id","responseJson","json","Sentry","apply","arguments","handlePhoneSignupPress","alert","Alert","dial_code","startsWith","match","phone_number","_storeToken","_ref4","AsyncStorage","_x","_x2","handleSignupAsGuestPress","_ref5","deviceType","Device","getDeviceTypeAsync","device_token","language","Localization","getLocales","languageTag","country_code","regionCode","timezone","device_type","device_model_name","modelName","brand","manufacturer","os_name","os_version","osVersion","deviceName","userResponse","user_id","user_token","userResponseJson","id","_Fragment","StyledButton","Trans","i18nKey","openLink","marginHorizontal","Keyboard","accessible","TouchableWithoutFeedback","keyboardType","returnKeyType","autoCapitalize","autoCorrect","secureTextEntry","val","phoneNumberRegex","RegExp","replace","SearchModal","countries","email_address","onKeyPress","event","nativeEvent","key","autoFocus","cancelButtonText","confirmationCode","setConfirmationCode","setLoading","handleConfirmPress","upgrade","confirmation_code","rounded","cancelButton","DEFAULT_COUNTRY","find","textContainer","logoContainer","logo","resizeMode","title","formContainer","_useState7","_useState8","_useState9","_useState10","initCountry","countryCode","locale","Intl","DateTimeFormat","resolvedOptions","splitted","toUpperCase","Image","source","image_url","uri","require","short_description","SignupForm","ConfirmForm","safeArea","content","stepImage","alignSelf","paddingTop","footer","borderStyle","footerInner","useHeaderHeight","keyboardVerticalOffset","ScrollView","formRow","rowTitle","navigation","first_name","firstName","setFirstName","last_name","lastName","setLastName","birth_date","birthDateDay","setBirthDateDay","_useState11","_useState12","birthDateMonth","setBirthDateMonth","_useState13","_useState14","birthDateYear","setBirthDateYear","_useState15","_useState16","handlePress","validationError","Object","keys","undefined","navigate","onboarding","OnboardingLayout","bold","username","setUsername","errorMessage","setErrorMessage","has_completed_guest_onboarding","has_completed_onboarding","paddingBottom","renderRules","strong","node","parent","selectable","em","s","code_inline","inheritedStyles","code_block","charAt","substring","fence","onLinkPress","customCallback","result","openUrl","attributes","href","textgroup","hardbreak","softbreak","inline","span","bubble","dateBubble","queryBubble","exampleBubble","errorQueryBubble","errorBubble","responseBubble","dateText","responseText","isMarkdown","search","matches","matchAll","index","_loop","start","end","fullLink","slice","push","Markdown","rules","paragraph","ios","fontFamily","android","NEXT_SCREEN","handleNotNowButtonClick","handleAllowButtonClick","Location","requestForegroundPermissionsAsync","updateUserLocation","getCurrentPositionAsync","enableHighAccuracy","latitude","coords","longitude","paddingRight","paddingLeft","Bubble","LOADING_INITIAL_STATE","buttonClicked","loadingState","setLoadingState","updateUserHasCompletedOnboarding","tokenInfos","updatedUser","Notifications","token","push_token","has_notifications_enabled","Contacts","requestPermissionsAsync","updateUserContacts","contacts","getContactsAsync","fields","Fields","Addresses","Birthday","Company","ContactType","Dates","Emails","ExtraNames","FirstName","ID","ImageAvailable","InstantMessageAddresses","JobTitle","LastName","MaidenName","MiddleName","Name","NamePrefix","NameSuffix","Nickname","NonGregorianBirthday","PhoneNumbers","PhoneticFirstName","PhoneticLastName","PhoneticMiddleName","RawImage","Relationships","SocialProfiles","UrlAddresses","contact","facebookProfile","socialProfiles","service","origin","ref","contact_type","contactType","middle_name","middleName","email_address_1","emails","email_address_1_label","label","email_address_2","email_address_2_label","email_address_3","email_address_3_label","phone_number_1","phoneNumbers","digits","number","phone_number_1_formatted","phone_number_1_label","phone_number_2","phone_number_2_formatted","phone_number_2_label","phone_number_3","phone_number_3_formatted","phone_number_3_label","phone_number_4","phone_number_4_formatted","phone_number_4_label","phone_number_5","phone_number_5_formatted","phone_number_5_label","facebook_username","facebook_url","DEFAULT_SETTINGS","muted","chatMode","SettingsContext","SpeakerContext","speaking","setSpeaking","NotificationsContext","notificationsCount","setNotificationsCount","unreadNotificationsCount","setUnreadNotificationsCount","unansweredNotificationsCount","setUnansweredNotificationsCount","undismissdNotificationsCount","setUndismissNotificationsCount","header","borderBottomWidth","borderBottomColor","backContainer","position","elevation","zIndex","back","step","HeaderBackButton","canGoBack","tintColor","goBack","StatusBar","barStyle","responseBuffer","tokenBuffer","shouldSpeakQuery","speakingFalseInterval","_useContext$settings","settings","stop","Speech","speak","languageToSpeak","Audio","setAudioModeAsync","playsInSilentModeIOS","allowsRecordingIOS","sound","playAsync","onStart","setInterval","speechSynthesis","clearInterval","onResume","onPause","onStopped","onDone","pending","initSpeakQueryState","speakToken","emptyResponseBuffer","message","_x3","TextButton","_ref$selected","selected","_ref$icon","icon","numberOfLines","EDIT_DISCUSSION_INITIAL_STATE","drawerContainer","top","left","drawer","borderRightWidth","borderRightColor","bottomContainer","closeArea","querying","drawerOpen","closeDrawer","setChatMode","discussions","setDiscussions","discussionsLoading","discussionId","updateDiscussionId","fetchDiscussions","setDiscussionsLoading","subscribed","_useContext2","updateSettings","useNavigation","clearDiscussionLoading","setClearDiscussionLoading","editDiscussionState","setEditDiscussionState","languageModalOpen","setLanguageModalOpen","createDiscussion","clearDiscussion","clearDiscussionId","updatedDiscussions","onEditDiscussionTitle","confirm","discussion","clearDiscussions","updatedDiscussion","toggleTheme","currentLanguage","languageList","openLanguageModal","closeLanguageModal","handleChangeLanguage","newLanguage","handleClearDiscussion","handleSettingsClick","handleContactSupport","Ionicons","daily_queries","free_queries","MaterialIcons","MediaRecorder","isTypeSupported","EventSource","options","_classCallCheck","ERROR","CONNECTING","OPEN","CLOSED","this","interval","pollingInterval","lastEventId","lastIndexProcessed","eventType","eventHandlers","timeout","timeOut","_xhr","_pollTimer","toString","SyntaxError","_pollAgain","_createClass","time","_this","setTimeout","_this2","XMLHttpRequest","entries","setRequestHeader","onreadystatechange","xhr","readyState","DONE","LOADING","dispatch","type","_handleEvent","xhrStatus","xhrState","UNSENT","onerror","send","e","parts","substr","lastIndexOf","retry","line","i","indexOf","parseInt","isNaN","join","listener","handler","availableTypes","Error","values","clearTimeout","abort","throttle","func","wait","leading","trailing","context","ctx","args","previous","later","Date","now","remaining","formatDate","date","today","getDate","getMonth","getFullYear","formatHoursAndMinutes","hours","minutes","formatTime","getHours","getMinutes","PlaceCard","card","isLast","distance_text","distance","round","image","rating","total_ratings","price_level","currencySymbol","repeat","link_1_title","link_1_url","WeatherCard","temperature","min_temperature","max_temperature","ImageCard","hasAdditionnalInfo","description","link_2_title","link_3_title","link_4_title","link_5_title","link_6_title","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","link_2_url","link_3_url","link_4_url","link_5_url","link_6_url","card_type","ResponseLink","query","handleReprocessQuery","count","getForegroundPermissionsAsync","canAskAgain","results","gap","Maps","PlacesMap","cards","mapViewRef","useRef","showUserLocation","setShowUserLocation","checkLocationPermission","granted","overflow","default","provider","PROVIDER_GOOGLE","showsUserLocation","scrollEnabled","onMapReady","current","fitToSuppliedMarkers","animated","edgePadding","right","bottom","Marker","identifier","coordinate","_Maps$useLoadScript","useLoadScript","googleMapsApiKey","isLoaded","loadError","GoogleMap","mapContainerStyle","gestureHandling","zoom","onLoad","mapInstance","bounds","google","maps","LatLngBounds","forEach","extend","LatLng","fitBounds","lat","CHANNEL_ICONS","Recording","recording","Web","web","Whatsapp","whatsapp","Email","Slack","slack","Telegram","telegram","keyboard","Sms","sms","Message","examplesContainer","scrollViewRef","onScrollBeginDrag","queries","setQueryText","exampleSections","canStopGenerating","_ref$disableResponseL","disableResponseLinks","_ref$disableQueryLink","disableQueryLinks","currentDate","created_at","handleShare","immediate","callNow","debounce","cardsText","texts","reduce","Share","subject","action","activityType","scrollEventThrottle","contentContainerStyle","examples","horizontal","showsHorizontalScrollIndicator","flexGrow","example","shouldDisplayDate","queryDate","expert_mode","channel","responses","sort","a","b","ResponseLinks","Card","getTime","recordingOptions","isMeteringEnabled","extension","outputFormat","audioEncoder","sampleRate","numberOfChannels","bitRate","audioQuality","linearPCMBitDepth","linearPCMIsBigEndian","linearPCMIsFloat","mimeType","bitsPerSecond","INITIAL_STATE","recordingFile","startingPromise","state","setState","requestPermissions","beforeRequestingCallback","audioPerm","audioRecording","Promise","resolve","interruptionModeIOS","InterruptionModeIOS","shouldDuckAndroid","interruptionModeAndroid","InterruptionModeAndroid","playThroughEarpieceIOS","playThroughEarpieceAndroid","beforePrep","prepareToRecordAsync","beforeStart","startAsync","stopAndUnloadAsync","getURI","TRIANGLE_SIZE","modalView","modalText","triangle","borderLeftWidth","borderLeftColor","innerTriangle","outerTriangle","anchor","_ref$position","menuRef","x","menuMeasurement","setMenuMeasurement","anchorMeasurement","setAnchorMeasurement","measure","fx","fy","px","Pressable","_defineProperty","MODAL_HORIZONTAL_MARGIN","FooterButton","forwardRef","iconBackgroundColor","touch","BUTTON_SIZE","alertCloseTimeout","timerInterval","microphonePermissionsRequested","centeredView","pushLocalQuery","updateCurrentQuery","createQuery","recordButtonRef","recorder","useRecorder","speaker","useSpeaker","shortPressAlertVisible","setShortPressAlertVisible","displayTime","setDisplayTime","uploading","setUploading","handleUploadRecording","formData","FormData","append","blob","locationPerm","navigator","permissions","getLastKnownPositionAsync","requiredAccuracy","maxAge","accuracy","mayShowUserSettingsDialog","scaleAnim","Animated","translateAnim","recorderAnimation","toValue","duration","useNativeDriver","handleLongPress","Haptics","impactAsync","startTime","notificationAsync","handlePressIn","handlePressOut","uuid","localQuery","updated_at","localQueries","scrollToEnd","transcription","reset","recordingId","transform","translateX","scale","floor","onPressIn","onPressOut","onLongPress","delayLongPress","Menu","RTL_LANGUAGES","DEFAULT_INPUT_HEIGHT","shouldScroll","eventSource","backgroundTimestamp","pollingTimeout","preventPolling","borderTopStyle","innerFooter","shouldntRefreshQueries","setQuerying","setCanStopGenerating","setQueries","queryText","examplesLoading","setExamplesLoading","setExampleSections","inputHeight","setInputHeight","loadExamples","fetchQueries","appState","AppState","subscription","nextAppState","remove","pushCurrentQuery","updatedQueries","currentQuery","currentQueryIndex","findIndex","fakeResponseId","requestObject","stream","discussion_id","recording_id","device_brand","device_name","device_manufacturer","device_os_name","device_os_version","screen","deviceTypeIndex","appStateListener","createRequest","reject","addEventListener","throttledUpdateCurrentQuery","parse","fetchAndUpdateDiscussion","_ref6","removeAllEventListeners","_x4","_ref7","newQueries","pollPendingQueries","_ref8","some","fetchedQuery","_x5","handleSendQuery","_ref9","trim","_x6","_ref10","update","optimisticallyUpdatedQuery","queryIndex","updatedQuery","_x7","_x8","onSubmitEditing","onChangeWeb","requestAnimationFrame","target","scrollHeight","_event$nativeEvent","shiftKey","onContentSizeChange","contentSize","Chat","onChange","multiline","Recorder","CustomProgressBar","rotationDegree","COLOR","accessibilityRole","rotateZ","interpolate","inputRange","outputRange","systemTopTextContainer","systemTopTextText","transcriptTopTextContainer","transcriptTopTextText","headerHeight","topTextInitialValue","topText","setTopText","lastResponse","setLastResponse","loadingAnimation","shakeAnim","breathingAnimation","easing","Easing","maxHeight","_ref12","mainContainer","setDiscussionId","shouldntRefresh","Drawer","ChatView","MicrophoneView","Purchases","restorePurchases","topContainer","bankAccounts","setBankAccounts","restoreLoading","setRestoreLoading","fetchBankAccounts","bankAccountList","logOut","restore","deleteAccount","_onPress","bankAccount","bank_name","owner_name","LOG_LEVEL","setLogLevel","configure","getOfferings","availablePackages","product","priceString","subscriptionPeriod","purchasePackage","getCustomerInfo","addCustomerInfoUpdateListener","PurchasePackage","setSelectedPackage","_purchasePackage$prod","SUBSCRIPTION_PERIOD_TO_TITLE","FREE","P1M","P1Y","SUBSCRIPTION_PERIOD_TO_MODEL","setSubscribed","confirmLoading","setConfirmLoading","packages","setPackages","FREE_PACKAGE","selectedPackage","offerings","buy","customerInfo","entitlements","active","userCancelled","display","WebView","onMessage","string","loaderContainer","scrollView","titleContainer","stepsContainer","arrow","stepIcon","stepName","params","useRoute","setOptions","setQuery","fetchQuery","steps","unshift","device","capitalize","MainStack","createStackNavigator","toggleDrawer","toggleMuted","currentDiscussion","Navigator","screenOptions","headerTitleAlign","headerStyle","headerBackgroundContainerStyle","headerTitleStyle","headerTintColor","headerShadowVisible","cardStyle","Screen","headerTitle","headerLeft","headerRight","MainScreen","default_screen","component","SignupScreen","headerBackTitleVisible","AccountScreen","UpgradeScreen","LinkBankScreen","QueryScreen","DEFAULT_LANGUAGE","gender","setGender","minWidth","RadioButton","Stack","importance","handleNotification","_handleNotification","shouldShowAlert","shouldPlaySound","shouldSetBadge","SplashScreen","Splash","containerRef","isLoadingComplete","setLoadingComplete","setIsLoggedIn","pushNotification","setPushNotification","_useState17","_useState18","setRoom","_useState19","_useState20","setSettings","_useState21","_useState22","_useState23","_useState24","_useTranslation","changeLanguage","_useState25","_useState26","setDrawerOpen","linking","prefixes","createURL","config","screens","Root","Query","path","Number","checkSubscriptionStatus","apiKey","appUserID","NavigationBar","setBackgroundColorAsync","setButtonStyleAsync","notification","retrieveDeviceToken","deviceTokenFromStorage","SecureStore","getItemAsync","setItemAsync","fetchUser","retrieveToken","USER_ID","USER_TOKEN","userIdFromStorage","userTokenFromStorage","retrieveSettings","settingsFromStorage","fetchRoom","USER_I","loadResourcesAndDataAsync","all","warn","initialURL","getInitialURL","RoomNotFoundScreen","headerShown","Group","LanguageScreen","_ref11","OnboardingHeader","NameScreen","GenderScreen","_ref13","UsernameScreen","_ref14","GeolocationPermissionScreen","_ref15","PushNotificationPermissionScreen","_ref16","ContactsPermissionScreen","_ref17","_ref18","MainStackNavigator","Provider","StyledStatusBar","NavigationContainer","dsn","enableInExpoDevelopment","registerRootComponent","App","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","loaded","__webpack_modules__","call","m","amdO","deferred","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","every","splice","r","n","getter","__esModule","d","leafPrototypes","getProto","getPrototypeOf","obj","mode","then","ns","create","def","getOwnPropertyNames","definition","o","defineProperty","enumerable","get","g","globalThis","Function","hmd","set","prop","prototype","hasOwnProperty","Symbol","toStringTag","p","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","bind","__webpack_exports__"],"sourceRoot":""}