src_components_Profile.tsx.html 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1">
  6. <title> src/components/Profile.tsx</title>
  7. <script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js"></script>
  8. <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
  9. <script src="./build/entry.js"></script>
  10. <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  11. <!--[if lt IE 9]>
  12. <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
  13. <![endif]-->
  14. <link href="https://fonts.googleapis.com/css?family=Roboto:100,400,700|Inconsolata,700" rel="stylesheet">
  15. <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous">
  16. <link type="text/css" rel="stylesheet" href="https://jmblog.github.io/color-themes-for-google-code-prettify/themes/tomorrow-night.min.css">
  17. <link type="text/css" rel="stylesheet" href="styles/app.min.css">
  18. <link type="text/css" rel="stylesheet" href="styles/iframe.css">
  19. <link type="text/css" rel="stylesheet" href="">
  20. <script async defer src="https://buttons.github.io/buttons.js"></script>
  21. </head>
  22. <body class="layout small-header">
  23. <div id="stickyNavbarOverlay"></div>
  24. <div class="top-nav">
  25. <div class="inner">
  26. <a id="hamburger" role="button" class="navbar-burger" aria-label="menu" aria-expanded="false">
  27. <span aria-hidden="true"></span>
  28. <span aria-hidden="true"></span>
  29. <span aria-hidden="true"></span>
  30. </a>
  31. <div class="logo">
  32. </div>
  33. <div class="menu">
  34. <div class="navigation">
  35. <a
  36. href="index.html"
  37. class="link"
  38. >
  39. API Documentation
  40. </a>
  41. </div>
  42. </div>
  43. </div>
  44. </div>
  45. <div id="main">
  46. <div
  47. class="sidebar "
  48. id="sidebarNav"
  49. >
  50. <nav>
  51. <h2><a href="index.html">Documentation</a></h2><div class="category"><h3>Interfaces</h3><ul><li><a href="AddLandmarkProps.html">AddLandmarkProps</a></li><li><a href="CommentProps.html">CommentProps</a></li><li><a href="IdToken.html">IdToken</a></li><li><a href="IntroProps.html">IntroProps</a></li><li><a href="Landmark.html">Landmark</a></li><li><a href="LandmarkDetailsProps.html">LandmarkDetailsProps</a></li><li><a href="LandmarkPinProps.html">LandmarkPinProps</a></li><li><a href="LMComment.html">LMComment</a></li><li><a href="ProfileProps.html">ProfileProps</a></li><li><a href="RegisterProps.html">RegisterProps</a></li><li><a href="UserProfile.html">UserProfile</a></li></ul><h3>Components</h3><ul><li><a href="App.html">App</a></li><li><a href="Atlas.html">Atlas</a></li><li><a href="Comment.html">Comment</a></li><li><a href="PrimaryButton.html">PrimaryButton</a></li><li><a href="Profile.html">Profile</a></li><li><a href="SecondaryButton.html">SecondaryButton</a></li></ul><h3>Global</h3><ul><li><a href="global.html#IconStrings">IconStrings</a></li></ul></div><div class="category"><h2>Hooks</h2><h3>Namespaces</h3><ul><li><a href="useAuth.html">useAuth</a></li><li><a href="useLandmarks.html">useLandmarks</a></li><li><a href="useProfile.html">useProfile</a></li></ul></div><div class="category"><h2>Map</h2><h3>Interfaces</h3><ul><li><a href="UserLocation.html">UserLocation</a></li></ul><h3>Components</h3><ul><li><a href="AddLandmark.html">AddLandmark</a></li><li><a href="LandmarkDetails.html">LandmarkDetails</a></li><li><a href="LandmarkPin.html">LandmarkPin</a></li><li><a href="Map.html">Map</a></li></ul></div><div class="category"><h2>Navigation</h2><h3>Components</h3><ul><li><a href="AuthorizedNavigator.html">AuthorizedNavigator</a></li><li><a href="UnauthorizedNavigator.html">UnauthorizedNavigator</a></li></ul><h3><a href="global.html">Global</a></h3></div><div class="category"><h2>Stores</h2><h3>Classes</h3><ul><li><a href="AuthStore.html">AuthStore</a></li></ul></div><div class="category"><h2>Unauthorized</h2><h3>Components</h3><ul><li><a href="Intro.html">Intro</a></li><li><a href="UnauthorizedLayout.html">UnauthorizedLayout</a></li></ul><h3>Components / Registration</h3><ul><li><a href="RegisterMain.html">RegisterMain</a></li></ul></div>
  52. </nav>
  53. </div>
  54. <div class="core" id="main-content-wrapper">
  55. <div class="content">
  56. <header class="page-title">
  57. <p>Source</p>
  58. <h1>src/components/Profile.tsx</h1>
  59. </header>
  60. <section>
  61. <article>
  62. <pre class="prettyprint source linenums"><code>import axios from "axios";
  63. import React from "react";
  64. import { Text, TouchableOpacity, View } from 'react-native'
  65. import { API_URL, reportAxiosError } from "../globals";
  66. import { useProfile } from "../hooks/useProfile";
  67. import { authStore } from "../stores/AuthStore";
  68. import UnauthorizedLayout from "./Auth/AuthLayout";
  69. import { PrimaryButton } from "./Auth/Buttons";
  70. import * as SecureStore from "expo-secure-store";
  71. import * as WebBrowser from 'expo-web-browser';
  72. /**
  73. * Props for the {@link Profile} component.
  74. */
  75. export interface ProfileProps {
  76. /**
  77. * The id of the logged in user.
  78. */
  79. userId: string
  80. }
  81. /**
  82. * The screen component that displays the user's profile. Gets user information from the {@link useProfile} hook.
  83. * @component
  84. */
  85. export const Profile: React.FC&lt;ProfileProps> = ({userId}) => {
  86. const {profile, getProfileStatus} = useProfile(userId)
  87. /**
  88. * Logs out the current user by sending an XHR request to the OAuth 'revoke-token' endpoint.
  89. */
  90. const logout = async () => {
  91. try {
  92. const tokenParams = new URLSearchParams();
  93. tokenParams.append('client_id', 'atlas.mobile');
  94. tokenParams.append('token', authStore.accessToken as string);
  95. const response = await axios.post(API_URL + `/o/revoke-token/`, tokenParams, {
  96. headers: {
  97. 'Content-Type': 'application/x-www-form-urlencoded'
  98. },
  99. });
  100. await SecureStore.deleteItemAsync('access');
  101. authStore.setAccessTokenAsync(null);
  102. } catch (error) {
  103. reportAxiosError("Something went wrong when retrieving access token", error);
  104. console.log(error.response)
  105. }
  106. }
  107. /**
  108. * Opens up the company privacy policy in the browser.
  109. */
  110. const openPrivacyPolicy = async () => {
  111. await WebBrowser.openBrowserAsync(API_URL + "/privacy")
  112. }
  113. return (
  114. &lt;UnauthorizedLayout>
  115. &lt;View style={{flex: 1, justifyContent: "center", alignItems: 'center'}}>
  116. &lt;Text style={{color: 'white', marginBottom: 20}}>Username: {profile?.username}&lt;/Text>
  117. &lt;Text style={{color: 'white', marginBottom: 40}}>Email: {profile?.email}&lt;/Text>
  118. &lt;PrimaryButton onPress={logout} text="Logout" />
  119. &lt;/View>
  120. &lt;TouchableOpacity onPress={openPrivacyPolicy}>
  121. &lt;Text style={{fontSize: 12, textDecorationLine: "underline", alignSelf: "flex-end", color: 'white'}}>Privacy policy&lt;/Text>
  122. &lt;/TouchableOpacity>
  123. &lt;/UnauthorizedLayout>
  124. )
  125. }</code></pre>
  126. </article>
  127. </section>
  128. </div>
  129. <footer class="footer">
  130. <div class="content has-text-centered">
  131. <p>Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.6.7</a></p>
  132. <p class="sidebar-created-by">
  133. <a href="https://github.com/SoftwareBrothers/better-docs" target="_blank">BetterDocs theme</a> provided with <i class="fas fa-heart"></i> by
  134. <a href="http://softwarebrothers.co" target="_blank">SoftwareBrothers - JavaScript Development Agency</a>
  135. </p>
  136. </div>
  137. </footer>
  138. </div>
  139. <div id="side-nav" class="side-nav">
  140. </div>
  141. </div>
  142. <script src="scripts/app.min.js"></script>
  143. <script>PR.prettyPrint();</script>
  144. <script src="scripts/linenumber.js"> </script>
  145. </body>
  146. </html>