Bläddra i källkod

Merge branch 'dev' of SashaGoncharov19/nomadmania-app into master

Oleksandr Honcharov 1 år sedan
förälder
incheckning
8a23378577
61 ändrade filer med 1142 tillägg och 267 borttagningar
  1. 2 0
      Route.tsx
  2. 3 0
      app.config.ts
  3. 10 0
      assets/icons/bell.svg
  4. 10 0
      assets/icons/document.svg
  5. 3 0
      assets/icons/exit.svg
  6. 1 1
      assets/icons/facebook.svg
  7. 10 0
      assets/icons/faq.svg
  8. 2 0
      assets/icons/gear.svg
  9. 1 1
      assets/icons/instagram.svg
  10. 2 2
      assets/icons/link.svg
  11. 3 0
      assets/icons/mail.svg
  12. 1 1
      assets/icons/right-arrow.svg
  13. 10 0
      assets/icons/shield.svg
  14. 10 0
      assets/icons/user-pen.svg
  15. 10 0
      assets/icons/user-plus.svg
  16. 10 0
      assets/icons/user-xmark.svg
  17. 1 1
      assets/icons/x(twitter).svg
  18. 1 1
      assets/icons/youtube.svg
  19. 594 39
      package-lock.json
  20. 1 1
      src/components/FlatList/index.tsx
  21. 1 3
      src/modules/api/auth/auth-api.ts
  22. 0 0
      src/modules/api/auth/auth-query-keys.tsx
  23. 3 0
      src/modules/api/auth/index.ts
  24. 4 0
      src/modules/api/auth/queries/index.ts
  25. 4 2
      src/modules/api/auth/queries/use-post-join-test.tsx
  26. 4 2
      src/modules/api/auth/queries/use-post-login.tsx
  27. 4 2
      src/modules/api/auth/queries/use-post-register.tsx
  28. 4 2
      src/modules/api/auth/queries/use-post-reset-password.tsx
  29. 3 0
      src/modules/api/regions/index.ts
  30. 1 0
      src/modules/api/regions/queries/index.ts
  31. 4 2
      src/modules/api/regions/queries/use-post-get-regions.tsx
  32. 0 0
      src/modules/api/regions/regions-api.tsx
  33. 0 0
      src/modules/api/regions/regions-query-keys.tsx
  34. 0 0
      src/modules/api/response-type.ts
  35. 3 0
      src/modules/api/series/index.ts
  36. 1 0
      src/modules/api/series/queries/index.ts
  37. 21 0
      src/modules/api/series/queries/use-post-get-series.tsx
  38. 4 6
      src/modules/api/series/series-api.tsx
  39. 3 0
      src/modules/api/series/series-query-keys.tsx
  40. 3 0
      src/modules/api/user/index.ts
  41. 3 0
      src/modules/api/user/queries/index.ts
  42. 17 0
      src/modules/api/user/queries/use-post-get-profile-info.tsx
  43. 4 2
      src/modules/api/user/queries/use-post-get-profile.tsx
  44. 4 2
      src/modules/api/user/queries/use-post-set-profile.tsx
  45. 42 2
      src/modules/api/user/user-api.tsx
  46. 5 0
      src/modules/api/user/user-query-keys.tsx
  47. 0 4
      src/modules/auth/user/user-query-keys.tsx
  48. 0 11
      src/modules/map/series/queries/use-post-get-series.tsx
  49. 28 12
      src/screens/InAppScreens/MapScreen/index.tsx
  50. 14 12
      src/screens/InAppScreens/ProfileScreen/Profile/edit-personal-info.tsx
  51. 117 0
      src/screens/InAppScreens/ProfileScreen/Settings/index.tsx
  52. 21 0
      src/screens/InAppScreens/ProfileScreen/Settings/styles.ts
  53. 103 148
      src/screens/InAppScreens/ProfileScreen/index.tsx
  54. 17 0
      src/screens/InAppScreens/ProfileScreen/styles.ts
  55. 1 1
      src/screens/LoginScreen/index.tsx
  56. 1 1
      src/screens/RegisterScreen/EditAccount/index.tsx
  57. 1 1
      src/screens/RegisterScreen/JoinUs/index.tsx
  58. 1 1
      src/screens/ResetPasswordScreen/index.tsx
  59. 4 2
      src/types/api.ts
  60. 2 1
      src/types/navigation.ts
  61. 5 1
      tsconfig.json

+ 2 - 0
Route.tsx

@@ -19,6 +19,7 @@ import ProfileScreen from './src/screens/InAppScreens/ProfileScreen';
 import TravellersScreen from './src/screens/InAppScreens/TravellersScreen';
 
 import { EditPersonalInfo } from './src/screens/InAppScreens/ProfileScreen/Profile/edit-personal-info';
+import Settings from './src/screens/InAppScreens/ProfileScreen/Settings/';
 
 import { NAVIGATION_PAGES } from './src/types';
 import { storage, StoreType } from './src/storage';
@@ -115,6 +116,7 @@ const Route = () => {
                     name={NAVIGATION_PAGES.EDIT_PERSONAL_INFO}
                     component={EditPersonalInfo}
                   />
+                  <ScreenStack.Screen name={NAVIGATION_PAGES.SETTINGS} component={Settings} />
                 </ScreenStack.Navigator>
               )}
             </BottomTab.Screen>

+ 3 - 0
app.config.ts

@@ -31,6 +31,9 @@ export default ({ config }: ConfigContext): ExpoConfig => ({
       projectId: env.EAS_PROJECT_ID
     }
   },
+  experiments: {
+    tsconfigPaths: true
+  },
   splash: {
     image: './assets/splash.png',
     resizeMode: 'cover'

+ 10 - 0
assets/icons/bell.svg

@@ -0,0 +1,10 @@
+<svg width="14" height="16" viewBox="0 0 14 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_664_4081)">
+<path d="M6.99989 0C6.44676 0 5.99989 0.446875 5.99989 1V1.6C3.71864 2.0625 1.99989 4.08125 1.99989 6.5V7.0875C1.99989 8.55625 1.45927 9.975 0.484265 11.075L0.253015 11.3344C-0.00948489 11.6281 -0.0719849 12.05 0.0873901 12.4094C0.246765 12.7688 0.60614 13 0.99989 13H12.9999C13.3936 13 13.7499 12.7688 13.9124 12.4094C14.0749 12.05 14.0093 11.6281 13.7468 11.3344L13.5155 11.075C12.5405 9.975 11.9999 8.55937 11.9999 7.0875V6.5C11.9999 4.08125 10.2811 2.0625 7.99989 1.6V1C7.99989 0.446875 7.55301 0 6.99989 0ZM8.41551 15.4156C8.79051 15.0406 8.99989 14.5312 8.99989 14H6.99989H4.99989C4.99989 14.5312 5.20926 15.0406 5.58426 15.4156C5.95926 15.7906 6.46864 16 6.99989 16C7.53114 16 8.04051 15.7906 8.41551 15.4156Z" fill="#0F3F4F"/>
+</g>
+<defs>
+<clipPath id="clip0_664_4081">
+<rect width="14" height="16" fill="white"/>
+</clipPath>
+</defs>
+</svg>

+ 10 - 0
assets/icons/document.svg

@@ -0,0 +1,10 @@
+<svg width="12" height="16" viewBox="0 0 12 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_649_3992)">
+<path d="M2 0C0.896875 0 0 0.896875 0 2V14C0 15.1031 0.896875 16 2 16H10C11.1031 16 12 15.1031 12 14V5H8C7.44688 5 7 4.55312 7 4V0H2ZM8 0V4H12L8 0ZM3.5 8H8.5C8.775 8 9 8.225 9 8.5C9 8.775 8.775 9 8.5 9H3.5C3.225 9 3 8.775 3 8.5C3 8.225 3.225 8 3.5 8ZM3.5 10H8.5C8.775 10 9 10.225 9 10.5C9 10.775 8.775 11 8.5 11H3.5C3.225 11 3 10.775 3 10.5C3 10.225 3.225 10 3.5 10ZM3.5 12H8.5C8.775 12 9 12.225 9 12.5C9 12.775 8.775 13 8.5 13H3.5C3.225 13 3 12.775 3 12.5C3 12.225 3.225 12 3.5 12Z" fill="#0F3F4F"/>
+</g>
+<defs>
+<clipPath id="clip0_649_3992">
+<rect width="12" height="16" fill="white"/>
+</clipPath>
+</defs>
+</svg>

+ 3 - 0
assets/icons/exit.svg

@@ -0,0 +1,3 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M11.8094 3.30938L15.6469 7.14687C15.8719 7.37187 16 7.68125 16 8C16 8.31875 15.8719 8.62812 15.6469 8.85312L11.8094 12.6906C11.6094 12.8906 11.3406 13 11.0594 13C10.475 13 10 12.525 10 11.9406V10H6C5.44688 10 5 9.55313 5 9V7C5 6.44688 5.44688 6 6 6H10V4.05937C10 3.475 10.475 3 11.0594 3C11.3406 3 11.6094 3.1125 11.8094 3.30938ZM5 3H3C2.44688 3 2 3.44688 2 4V12C2 12.5531 2.44688 13 3 13H5C5.55312 13 6 13.4469 6 14C6 14.5531 5.55312 15 5 15H3C1.34375 15 0 13.6562 0 12V4C0 2.34375 1.34375 1 3 1H5C5.55312 1 6 1.44687 6 2C6 2.55313 5.55312 3 5 3Z" />
+</svg>

+ 1 - 1
assets/icons/facebook.svg

@@ -1,3 +1,3 @@
 <svg width="12" height="20" viewBox="0 0 12 20" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M3.125 11.6914V20H7.65625V11.6914H11.0352L11.7383 7.87109H7.65625V6.51953C7.65625 4.5 8.44922 3.72656 10.4961 3.72656C11.1328 3.72656 11.6445 3.74219 11.9414 3.77344V0.308594C11.3828 0.15625 10.0156 0 9.22656 0C5.05078 0 3.125 1.97266 3.125 6.22656V7.87109H0.546875V11.6914H3.125Z" fill="#C8C8C8"/>
+<path d="M3.125 11.6914V20H7.65625V11.6914H11.0352L11.7383 7.87109H7.65625V6.51953C7.65625 4.5 8.44922 3.72656 10.4961 3.72656C11.1328 3.72656 11.6445 3.74219 11.9414 3.77344V0.308594C11.3828 0.15625 10.0156 0 9.22656 0C5.05078 0 3.125 1.97266 3.125 6.22656V7.87109H0.546875V11.6914H3.125Z" />
 </svg>

+ 10 - 0
assets/icons/faq.svg

@@ -0,0 +1,10 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_648_3987)">
+<path d="M8 16C10.1217 16 12.1566 15.1571 13.6569 13.6569C15.1571 12.1566 16 10.1217 16 8C16 5.87827 15.1571 3.84344 13.6569 2.34315C12.1566 0.842855 10.1217 0 8 0C5.87827 0 3.84344 0.842855 2.34315 2.34315C0.842855 3.84344 0 5.87827 0 8C0 10.1217 0.842855 12.1566 2.34315 13.6569C3.84344 15.1571 5.87827 16 8 16ZM5.30625 5.16563C5.55312 4.46875 6.21563 4 6.95625 4H8.77812C9.86875 4 10.75 4.88438 10.75 5.97188C10.75 6.67813 10.3719 7.33125 9.75937 7.68437L8.75 8.2625C8.74375 8.66875 8.40938 9 8 9C7.58437 9 7.25 8.66562 7.25 8.25V7.82812C7.25 7.55937 7.39375 7.3125 7.62813 7.17812L9.0125 6.38438C9.15938 6.3 9.25 6.14375 9.25 5.975C9.25 5.7125 9.0375 5.50313 8.77812 5.50313H6.95625C6.85 5.50313 6.75625 5.56875 6.72188 5.66875L6.70937 5.70625C6.57188 6.09688 6.14062 6.3 5.75313 6.1625C5.36563 6.025 5.15938 5.59375 5.29688 5.20625L5.30937 5.16875L5.30625 5.16563ZM7 11C7 10.7348 7.10536 10.4804 7.29289 10.2929C7.48043 10.1054 7.73478 10 8 10C8.26522 10 8.51957 10.1054 8.70711 10.2929C8.89464 10.4804 9 10.7348 9 11C9 11.2652 8.89464 11.5196 8.70711 11.7071C8.51957 11.8946 8.26522 12 8 12C7.73478 12 7.48043 11.8946 7.29289 11.7071C7.10536 11.5196 7 11.2652 7 11Z" fill="#0F3F4F"/>
+</g>
+<defs>
+<clipPath id="clip0_648_3987">
+<rect width="16" height="16" fill="white"/>
+</clipPath>
+</defs>
+</svg>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 2 - 0
assets/icons/gear.svg


+ 1 - 1
assets/icons/instagram.svg

@@ -1,3 +1,3 @@
 <svg width="20" height="21" viewBox="0 0 20 21" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M10.0044 5.29478C7.16511 5.29478 4.87493 7.58496 4.87493 10.4242C4.87493 13.2635 7.16511 15.5537 10.0044 15.5537C12.8437 15.5537 15.1339 13.2635 15.1339 10.4242C15.1339 7.58496 12.8437 5.29478 10.0044 5.29478ZM10.0044 13.7591C8.16957 13.7591 6.66957 12.2635 6.66957 10.4242C6.66957 8.58496 8.16511 7.08942 10.0044 7.08942C11.8437 7.08942 13.3392 8.58496 13.3392 10.4242C13.3392 12.2635 11.8392 13.7591 10.0044 13.7591ZM16.5401 5.08496C16.5401 5.75014 16.0044 6.28139 15.3437 6.28139C14.6785 6.28139 14.1473 5.74567 14.1473 5.08496C14.1473 4.42425 14.683 3.88853 15.3437 3.88853C16.0044 3.88853 16.5401 4.42425 16.5401 5.08496ZM19.9374 6.29925C19.8615 4.69657 19.4955 3.27693 18.3214 2.10728C17.1517 0.937639 15.7321 0.571568 14.1294 0.491211C12.4776 0.397461 7.52672 0.397461 5.87493 0.491211C4.27672 0.567104 2.85707 0.933175 1.68297 2.10282C0.508859 3.27246 0.147252 4.6921 0.0668945 6.29478C-0.0268555 7.94657 -0.0268555 12.8975 0.0668945 14.5492C0.142787 16.1519 0.508859 17.5716 1.68297 18.7412C2.85707 19.9109 4.27225 20.2769 5.87493 20.3573C7.52672 20.451 12.4776 20.451 14.1294 20.3573C15.7321 20.2814 17.1517 19.9153 18.3214 18.7412C19.491 17.5716 19.8571 16.1519 19.9374 14.5492C20.0312 12.8975 20.0312 7.95103 19.9374 6.29925ZM17.8035 16.3216C17.4553 17.1966 16.7812 17.8707 15.9017 18.2234C14.5848 18.7457 11.4598 18.6251 10.0044 18.6251C8.54904 18.6251 5.41957 18.7412 4.10707 18.2234C3.23207 17.8751 2.55797 17.201 2.20529 16.3216C1.68297 15.0046 1.8035 11.8796 1.8035 10.4242C1.8035 8.96889 1.68743 5.83942 2.20529 4.52693C2.5535 3.65192 3.22761 2.97782 4.10707 2.62514C5.42404 2.10282 8.54904 2.22335 10.0044 2.22335C11.4598 2.22335 14.5892 2.10728 15.9017 2.62514C16.7767 2.97335 17.4508 3.64746 17.8035 4.52693C18.3258 5.84389 18.2053 8.96889 18.2053 10.4242C18.2053 11.8796 18.3258 15.0091 17.8035 16.3216Z" fill="#C8C8C8"/>
+<path d="M10.0044 5.29478C7.16511 5.29478 4.87493 7.58496 4.87493 10.4242C4.87493 13.2635 7.16511 15.5537 10.0044 15.5537C12.8437 15.5537 15.1339 13.2635 15.1339 10.4242C15.1339 7.58496 12.8437 5.29478 10.0044 5.29478ZM10.0044 13.7591C8.16957 13.7591 6.66957 12.2635 6.66957 10.4242C6.66957 8.58496 8.16511 7.08942 10.0044 7.08942C11.8437 7.08942 13.3392 8.58496 13.3392 10.4242C13.3392 12.2635 11.8392 13.7591 10.0044 13.7591ZM16.5401 5.08496C16.5401 5.75014 16.0044 6.28139 15.3437 6.28139C14.6785 6.28139 14.1473 5.74567 14.1473 5.08496C14.1473 4.42425 14.683 3.88853 15.3437 3.88853C16.0044 3.88853 16.5401 4.42425 16.5401 5.08496ZM19.9374 6.29925C19.8615 4.69657 19.4955 3.27693 18.3214 2.10728C17.1517 0.937639 15.7321 0.571568 14.1294 0.491211C12.4776 0.397461 7.52672 0.397461 5.87493 0.491211C4.27672 0.567104 2.85707 0.933175 1.68297 2.10282C0.508859 3.27246 0.147252 4.6921 0.0668945 6.29478C-0.0268555 7.94657 -0.0268555 12.8975 0.0668945 14.5492C0.142787 16.1519 0.508859 17.5716 1.68297 18.7412C2.85707 19.9109 4.27225 20.2769 5.87493 20.3573C7.52672 20.451 12.4776 20.451 14.1294 20.3573C15.7321 20.2814 17.1517 19.9153 18.3214 18.7412C19.491 17.5716 19.8571 16.1519 19.9374 14.5492C20.0312 12.8975 20.0312 7.95103 19.9374 6.29925ZM17.8035 16.3216C17.4553 17.1966 16.7812 17.8707 15.9017 18.2234C14.5848 18.7457 11.4598 18.6251 10.0044 18.6251C8.54904 18.6251 5.41957 18.7412 4.10707 18.2234C3.23207 17.8751 2.55797 17.201 2.20529 16.3216C1.68297 15.0046 1.8035 11.8796 1.8035 10.4242C1.8035 8.96889 1.68743 5.83942 2.20529 4.52693C2.5535 3.65192 3.22761 2.97782 4.10707 2.62514C5.42404 2.10282 8.54904 2.22335 10.0044 2.22335C11.4598 2.22335 14.5892 2.10728 15.9017 2.62514C16.7767 2.97335 17.4508 3.64746 17.8035 4.52693C18.3258 5.84389 18.2053 8.96889 18.2053 10.4242C18.2053 11.8796 18.3258 15.0091 17.8035 16.3216Z" />
 </svg>

+ 2 - 2
assets/icons/link.svg

@@ -1,4 +1,4 @@
 <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M10.6637 15.973L8.00899 18.6277C6.17926 20.4574 3.20204 20.4574 1.3723 18.6277C-0.457434 16.798 -0.457434 13.8207 1.3723 11.991L5.35432 8.00899C7.18405 6.17926 10.1613 6.17926 11.991 8.00899C12.3574 8.37534 12.3574 8.96999 11.991 9.33633C11.6247 9.70268 11.03 9.70268 10.6637 9.33633C9.56596 8.23862 7.77936 8.23862 6.68165 9.33633L2.69964 13.3183C1.60193 14.4161 1.60193 16.2027 2.69964 17.3004C3.79735 18.3981 5.58395 18.3981 6.68165 17.3004L9.33633 14.6457C9.70268 14.2793 10.2973 14.2793 10.6637 14.6457C11.03 15.012 11.03 15.6067 10.6637 15.973Z" fill="#C8C8C8"/>
-<path d="M18.6277 8.00899L14.6457 11.991C12.8159 13.8207 9.83873 13.8207 8.00899 11.991C7.64265 11.6247 7.64265 11.03 8.00899 10.6637C8.37534 10.2973 8.96999 10.2973 9.33633 10.6637C10.434 11.7614 12.2206 11.7614 13.3183 10.6637L17.3004 6.68165C18.3981 5.58395 18.3981 3.79735 17.3004 2.69964C16.2027 1.60193 14.4161 1.60193 13.3183 2.69964L10.6637 5.35432C10.2973 5.72066 9.70268 5.72066 9.33633 5.35432C8.96999 4.98797 8.96999 4.39332 9.33633 4.02698L11.991 1.3723C13.8207 -0.457434 16.798 -0.457434 18.6277 1.3723C20.4574 3.20204 20.4574 6.17926 18.6277 8.00899Z" fill="#C8C8C8"/>
+<path d="M10.6637 15.973L8.00899 18.6277C6.17926 20.4574 3.20204 20.4574 1.3723 18.6277C-0.457434 16.798 -0.457434 13.8207 1.3723 11.991L5.35432 8.00899C7.18405 6.17926 10.1613 6.17926 11.991 8.00899C12.3574 8.37534 12.3574 8.96999 11.991 9.33633C11.6247 9.70268 11.03 9.70268 10.6637 9.33633C9.56596 8.23862 7.77936 8.23862 6.68165 9.33633L2.69964 13.3183C1.60193 14.4161 1.60193 16.2027 2.69964 17.3004C3.79735 18.3981 5.58395 18.3981 6.68165 17.3004L9.33633 14.6457C9.70268 14.2793 10.2973 14.2793 10.6637 14.6457C11.03 15.012 11.03 15.6067 10.6637 15.973Z" />
+<path d="M18.6277 8.00899L14.6457 11.991C12.8159 13.8207 9.83873 13.8207 8.00899 11.991C7.64265 11.6247 7.64265 11.03 8.00899 10.6637C8.37534 10.2973 8.96999 10.2973 9.33633 10.6637C10.434 11.7614 12.2206 11.7614 13.3183 10.6637L17.3004 6.68165C18.3981 5.58395 18.3981 3.79735 17.3004 2.69964C16.2027 1.60193 14.4161 1.60193 13.3183 2.69964L10.6637 5.35432C10.2973 5.72066 9.70268 5.72066 9.33633 5.35432C8.96999 4.98797 8.96999 4.39332 9.33633 4.02698L11.991 1.3723C13.8207 -0.457434 16.798 -0.457434 18.6277 1.3723C20.4574 3.20204 20.4574 6.17926 18.6277 8.00899Z" />
 </svg>

+ 3 - 0
assets/icons/mail.svg

@@ -0,0 +1,3 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M1.5 2C0.671875 2 0 2.67188 0 3.5C0 3.97187 0.221875 4.41562 0.6 4.7L7.4 9.8C7.75625 10.0656 8.24375 10.0656 8.6 9.8L15.4 4.7C15.7781 4.41562 16 3.97187 16 3.5C16 2.67188 15.3281 2 14.5 2H1.5ZM0 5.5V12C0 13.1031 0.896875 14 2 14H14C15.1031 14 16 13.1031 16 12V5.5L9.2 10.6C8.4875 11.1344 7.5125 11.1344 6.8 10.6L0 5.5Z" fill="#0F3F4F"/>
+</svg>

+ 1 - 1
assets/icons/right-arrow.svg

@@ -1,6 +1,6 @@
 <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
 <g clip-path="url(#clip0_4051_13205)">
-<path fill-rule="evenodd" clip-rule="evenodd" d="M5.79194 2.32325C6.1657 2.02424 6.71109 2.08484 7.0101 2.4586L11.0101 7.4586C11.2633 7.77512 11.2633 8.22488 11.0101 8.5414L7.0101 13.5414C6.71109 13.9152 6.1657 13.9758 5.79194 13.6768C5.41818 13.3777 5.35758 12.8324 5.65659 12.4586L9.22347 8L5.65659 3.5414C5.35758 3.16764 5.41818 2.62225 5.79194 2.32325Z" fill="#0F3F4F"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M5.79194 2.32325C6.1657 2.02424 6.71109 2.08484 7.0101 2.4586L11.0101 7.4586C11.2633 7.77512 11.2633 8.22488 11.0101 8.5414L7.0101 13.5414C6.71109 13.9152 6.1657 13.9758 5.79194 13.6768C5.41818 13.3777 5.35758 12.8324 5.65659 12.4586L9.22347 8L5.65659 3.5414C5.35758 3.16764 5.41818 2.62225 5.79194 2.32325Z" />
 </g>
 <defs>
 <clipPath id="clip0_4051_13205">

+ 10 - 0
assets/icons/shield.svg

@@ -0,0 +1,10 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_650_4020)">
+<path d="M8.00001 0C8.14376 0 8.28751 0.03125 8.41876 0.090625L14.3031 2.5875C14.9906 2.87813 15.5031 3.55625 15.5 4.375C15.4844 7.475 14.2094 13.1469 8.82501 15.725C8.30314 15.975 7.69689 15.975 7.17501 15.725C1.79064 13.1469 0.515639 7.475 0.500014 4.375C0.496889 3.55625 1.00939 2.87813 1.69689 2.5875L7.58439 0.090625C7.71251 0.03125 7.85626 0 8.00001 0ZM8.00001 2.0875V13.9C12.3125 11.8125 13.4719 7.19062 13.5 4.41875L8.00001 2.0875Z" fill="#0F3F4F"/>
+</g>
+<defs>
+<clipPath id="clip0_650_4020">
+<rect width="16" height="16" fill="white"/>
+</clipPath>
+</defs>
+</svg>

+ 10 - 0
assets/icons/user-pen.svg

@@ -0,0 +1,10 @@
+<svg width="16" height="13" viewBox="0 0 16 13" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_645_3961)">
+<path d="M5.6 6.4C6.44869 6.4 7.26263 6.06286 7.86274 5.46274C8.46286 4.86263 8.8 4.04869 8.8 3.2C8.8 2.35131 8.46286 1.53737 7.86274 0.937258C7.26263 0.337142 6.44869 0 5.6 0C4.75131 0 3.93737 0.337142 3.33726 0.937258C2.73714 1.53737 2.4 2.35131 2.4 3.2C2.4 4.04869 2.73714 4.86263 3.33726 5.46274C3.93737 6.06286 4.75131 6.4 5.6 6.4ZM4.4575 7.6C1.995 7.6 0 9.595 0 12.0575C0 12.4675 0.3325 12.8 0.7425 12.8H8.07C7.9925 12.58 7.9775 12.34 8.035 12.105L8.41 10.6025C8.48 10.32 8.625 10.065 8.83 9.86L9.8375 8.8525C9.035 8.0775 7.945 7.6 6.74 7.6H4.4575ZM15.345 5.8925C14.955 5.5025 14.3225 5.5025 13.93 5.8925L13.195 6.6275L14.97 8.4025L15.705 7.6675C16.095 7.2775 16.095 6.645 15.705 6.2525L15.345 5.8925ZM9.3975 10.425C9.295 10.5275 9.2225 10.655 9.1875 10.7975L8.8125 12.3C8.7775 12.4375 8.8175 12.58 8.9175 12.68C9.0175 12.78 9.16 12.82 9.2975 12.785L10.8 12.41C10.94 12.375 11.07 12.3025 11.1725 12.2L14.4025 8.9675L12.6275 7.1925L9.3975 10.425Z" />
+</g>
+<defs>
+<clipPath id="clip0_645_3961">
+<rect width="16" height="12.8" fill="white"/>
+</clipPath>
+</defs>
+</svg>

+ 10 - 0
assets/icons/user-plus.svg

@@ -0,0 +1,10 @@
+<svg width="16" height="13" viewBox="0 0 16 13" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_648_3970)">
+<path d="M2.4 3.2C2.4 2.35131 2.73714 1.53737 3.33726 0.937258C3.93737 0.337142 4.75131 0 5.6 0C6.44869 0 7.26263 0.337142 7.86274 0.937258C8.46286 1.53737 8.8 2.35131 8.8 3.2C8.8 4.04869 8.46286 4.86263 7.86274 5.46274C7.26263 6.06286 6.44869 6.4 5.6 6.4C4.75131 6.4 3.93737 6.06286 3.33726 5.46274C2.73714 4.86263 2.4 4.04869 2.4 3.2ZM0 12.0575C0 9.595 1.995 7.6 4.4575 7.6H6.7425C9.205 7.6 11.2 9.595 11.2 12.0575C11.2 12.4675 10.8675 12.8 10.4575 12.8H0.7425C0.3325 12.8 0 12.4675 0 12.0575ZM12.6 7.8V6.2H11C10.6675 6.2 10.4 5.9325 10.4 5.6C10.4 5.2675 10.6675 5 11 5H12.6V3.4C12.6 3.0675 12.8675 2.8 13.2 2.8C13.5325 2.8 13.8 3.0675 13.8 3.4V5H15.4C15.7325 5 16 5.2675 16 5.6C16 5.9325 15.7325 6.2 15.4 6.2H13.8V7.8C13.8 8.1325 13.5325 8.4 13.2 8.4C12.8675 8.4 12.6 8.1325 12.6 7.8Z" fill="#0F3F4F"/>
+</g>
+<defs>
+<clipPath id="clip0_648_3970">
+<rect width="16" height="12.8" fill="white"/>
+</clipPath>
+</defs>
+</svg>

+ 10 - 0
assets/icons/user-xmark.svg

@@ -0,0 +1,10 @@
+<svg width="16" height="13" viewBox="0 0 16 13" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_649_4016)">
+<path d="M2.4 3.2C2.4 2.35131 2.73714 1.53737 3.33726 0.937258C3.93737 0.337142 4.75131 0 5.6 0C6.44869 0 7.26263 0.337142 7.86274 0.937258C8.46286 1.53737 8.8 2.35131 8.8 3.2C8.8 4.04869 8.46286 4.86263 7.86274 5.46274C7.26263 6.06286 6.44869 6.4 5.6 6.4C4.75131 6.4 3.93737 6.06286 3.33726 5.46274C2.73714 4.86263 2.4 4.04869 2.4 3.2ZM0 12.0575C0 9.595 1.995 7.6 4.4575 7.6H6.7425C9.205 7.6 11.2 9.595 11.2 12.0575C11.2 12.4675 10.8675 12.8 10.4575 12.8H0.7425C0.3325 12.8 0 12.4675 0 12.0575ZM11.775 3.575C12.01 3.34 12.39 3.34 12.6225 3.575L13.7975 4.75L14.9725 3.575C15.2075 3.34 15.5875 3.34 15.82 3.575C16.0525 3.81 16.055 4.19 15.82 4.4225L14.645 5.5975L15.82 6.7725C16.055 7.0075 16.055 7.3875 15.82 7.62C15.585 7.8525 15.205 7.855 14.9725 7.62L13.7975 6.445L12.6225 7.62C12.3875 7.855 12.0075 7.855 11.775 7.62C11.5425 7.385 11.54 7.005 11.775 6.7725L12.95 5.5975L11.775 4.4225C11.54 4.1875 11.54 3.8075 11.775 3.575Z" />
+</g>
+<defs>
+<clipPath id="clip0_649_4016">
+<rect width="16" height="12.8" fill="white"/>
+</clipPath>
+</defs>
+</svg>

+ 1 - 1
assets/icons/x(twitter).svg

@@ -1,3 +1,3 @@
 <svg width="20" height="19" viewBox="0 0 20 19" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M15.7497 0H18.8179L12.1165 7.65754L20 18.0791H13.8288L8.99174 11.7601L3.46371 18.0791H0.391134L7.55758 9.887L0 0H6.32768L10.6953 5.77575L15.7497 0ZM14.6719 16.2451H16.3711L5.402 1.73837H3.57671L14.6719 16.2451Z" fill="#C8C8C8"/>
+<path d="M15.7497 0H18.8179L12.1165 7.65754L20 18.0791H13.8288L8.99174 11.7601L3.46371 18.0791H0.391134L7.55758 9.887L0 0H6.32768L10.6953 5.77575L15.7497 0ZM14.6719 16.2451H16.3711L5.402 1.73837H3.57671L14.6719 16.2451Z" />
 </svg>

+ 1 - 1
assets/icons/youtube.svg

@@ -1,3 +1,3 @@
 <svg width="20" height="15" viewBox="0 0 20 15" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M19.5826 2.20066C19.3519 1.33285 18.6745 0.651776 17.814 0.421091C16.2541 0 10 0 10 0C10 0 3.74588 0 2.18601 0.421091C1.32552 0.651776 0.648114 1.33285 0.41743 2.20066C0 3.77151 0 7.04504 0 7.04504C0 7.04504 0 10.3186 0.41743 11.8894C0.648114 12.7572 1.32552 13.409 2.18601 13.6397C3.74588 14.0608 10 14.0608 10 14.0608C10 14.0608 16.2541 14.0608 17.814 13.6397C18.6745 13.409 19.3519 12.7536 19.5826 11.8894C20 10.3186 20 7.04504 20 7.04504C20 7.04504 20 3.77151 19.5826 2.20066ZM7.95679 10.0183V4.07177L13.182 7.04504L7.95679 10.0183Z" fill="#C8C8C8"/>
+<path d="M19.5826 2.20066C19.3519 1.33285 18.6745 0.651776 17.814 0.421091C16.2541 0 10 0 10 0C10 0 3.74588 0 2.18601 0.421091C1.32552 0.651776 0.648114 1.33285 0.41743 2.20066C0 3.77151 0 7.04504 0 7.04504C0 7.04504 0 10.3186 0.41743 11.8894C0.648114 12.7572 1.32552 13.409 2.18601 13.6397C3.74588 14.0608 10 14.0608 10 14.0608C10 14.0608 16.2541 14.0608 17.814 13.6397C18.6745 13.409 19.3519 12.7536 19.5826 11.8894C20 10.3186 20 7.04504 20 7.04504C20 7.04504 20 3.77151 19.5826 2.20066ZM7.95679 10.0183V4.07177L13.182 7.04504L7.95679 10.0183Z" />
 </svg>

+ 594 - 39
package-lock.json

@@ -7,10 +7,9 @@
     "": {
       "name": "nomadmania-app",
       "version": "1.0.0",
-      "hasInstallScript": true,
       "dependencies": {
-        "@react-native-async-storage/async-storage": "1.18.2",
         "@react-native-community/datetimepicker": "7.2.0",
+        "@react-native-community/masked-view": "^0.1.11",
         "@react-native-community/netinfo": "9.3.10",
         "@react-navigation/bottom-tabs": "^6.5.11",
         "@react-navigation/material-top-tabs": "^6.6.5",
@@ -23,11 +22,14 @@
         "dotenv": "^16.3.1",
         "expo": "~49.0.15",
         "expo-checkbox": "~2.4.0",
+        "expo-dev-client": "~2.4.12",
+        "expo-image": "~1.3.5",
         "expo-image-picker": "~14.3.2",
         "expo-location": "~16.1.0",
         "expo-splash-screen": "~0.20.5",
         "expo-sqlite": "~11.3.3",
         "expo-status-bar": "~1.6.0",
+        "expo-updates": "~0.18.19",
         "formik": "^2.4.5",
         "moment": "^2.29.4",
         "patch-package": "^8.0.0",
@@ -35,9 +37,13 @@
         "react": "18.2.0",
         "react-native": "0.72.6",
         "react-native-calendar-picker": "^7.1.4",
+        "react-native-gesture-handler": "~2.12.0",
         "react-native-keyboard-aware-scroll-view": "^0.9.5",
         "react-native-maps": "1.7.1",
+        "react-native-mmkv": "^2.11.0",
         "react-native-pager-view": "6.2.0",
+        "react-native-reanimated": "~3.3.0",
+        "react-native-render-html": "^6.3.4",
         "react-native-safe-area-context": "4.6.3",
         "react-native-screens": "~3.22.0",
         "react-native-svg": "13.9.0",
@@ -1412,6 +1418,20 @@
         "@babel/core": "^7.0.0-0"
       }
     },
+    "node_modules/@babel/plugin-transform-object-assign": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.23.3.tgz",
+      "integrity": "sha512-TPJ6O7gVC2rlQH2hvQGRH273G1xdoloCj9Pc07Q7JbIZYDi+Sv5gaE2fu+r5E7qK4zyt6vj0FbZaZTRU5C3OMA==",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
     "node_modules/@babel/plugin-transform-object-rest-spread": {
       "version": "7.23.4",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz",
@@ -2015,7 +2035,6 @@
       "version": "2.0.17",
       "resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz",
       "integrity": "sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==",
-      "peer": true,
       "dependencies": {
         "@types/hammerjs": "^2.0.36"
       },
@@ -3847,6 +3866,101 @@
         "@jridgewell/sourcemap-codec": "^1.4.14"
       }
     },
+    "node_modules/@jsamr/counter-style": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/@jsamr/counter-style/-/counter-style-2.0.2.tgz",
+      "integrity": "sha512-2mXudGVtSzVxWEA7B9jZLKjoXUeUFYDDtFrQoC0IFX9/Dszz4t1vZOmafi3JSw/FxD+udMQ+4TAFR8Qs0J3URQ=="
+    },
+    "node_modules/@jsamr/react-native-li": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/@jsamr/react-native-li/-/react-native-li-2.3.1.tgz",
+      "integrity": "sha512-Qbo4NEj48SQ4k8FZJHFE2fgZDKTWaUGmVxcIQh3msg5JezLdTMMHuRRDYctfdHI6L0FZGObmEv3haWbIvmol8w==",
+      "peerDependencies": {
+        "@jsamr/counter-style": "^1.0.0 || ^2.0.0",
+        "react": "*",
+        "react-native": "*"
+      }
+    },
+    "node_modules/@native-html/css-processor": {
+      "version": "1.11.0",
+      "resolved": "https://registry.npmjs.org/@native-html/css-processor/-/css-processor-1.11.0.tgz",
+      "integrity": "sha512-NnhBEbJX5M2gBGltPKOetiLlKhNf3OHdRafc8//e2ZQxXN8JaSW/Hy8cm94pnIckQxwaMKxrtaNT3x4ZcffoNQ==",
+      "dependencies": {
+        "css-to-react-native": "^3.0.0",
+        "csstype": "^3.0.8"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-native": "*"
+      }
+    },
+    "node_modules/@native-html/transient-render-engine": {
+      "version": "11.2.3",
+      "resolved": "https://registry.npmjs.org/@native-html/transient-render-engine/-/transient-render-engine-11.2.3.tgz",
+      "integrity": "sha512-zXwgA3gPUEmFs3I3syfnvDvS6WiUHXEE6jY09OBzK+trq7wkweOSFWIoyXiGkbXrozGYG0KY90YgPyr8Tg8Uyg==",
+      "dependencies": {
+        "@native-html/css-processor": "1.11.0",
+        "@types/ramda": "^0.27.44",
+        "csstype": "^3.0.9",
+        "domelementtype": "^2.2.0",
+        "domhandler": "^4.2.2",
+        "domutils": "^2.8.0",
+        "htmlparser2": "^7.1.2",
+        "ramda": "^0.27.2"
+      },
+      "peerDependencies": {
+        "@types/react-native": "*",
+        "react-native": "^*"
+      }
+    },
+    "node_modules/@native-html/transient-render-engine/node_modules/dom-serializer": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
+      "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
+      "dependencies": {
+        "domelementtype": "^2.0.1",
+        "domhandler": "^4.2.0",
+        "entities": "^2.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+      }
+    },
+    "node_modules/@native-html/transient-render-engine/node_modules/domhandler": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
+      "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
+      "dependencies": {
+        "domelementtype": "^2.2.0"
+      },
+      "engines": {
+        "node": ">= 4"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/domhandler?sponsor=1"
+      }
+    },
+    "node_modules/@native-html/transient-render-engine/node_modules/domutils": {
+      "version": "2.8.0",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
+      "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
+      "dependencies": {
+        "dom-serializer": "^1.0.1",
+        "domelementtype": "^2.2.0",
+        "domhandler": "^4.2.0"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/domutils?sponsor=1"
+      }
+    },
+    "node_modules/@native-html/transient-render-engine/node_modules/entities": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+      "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
     "node_modules/@nodelib/fs.scandir": {
       "version": "2.1.5",
       "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -3965,17 +4079,6 @@
         "node": ">=14"
       }
     },
-    "node_modules/@react-native-async-storage/async-storage": {
-      "version": "1.18.2",
-      "resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.18.2.tgz",
-      "integrity": "sha512-dM8AfdoeIxlh+zqgr0o5+vCTPQ0Ru1mrPzONZMsr7ufp5h+6WgNxQNza7t0r5qQ6b04AJqTlBNixTWZxqP649Q==",
-      "dependencies": {
-        "merge-options": "^3.0.4"
-      },
-      "peerDependencies": {
-        "react-native": "^0.0.0-0 || 0.60 - 0.72 || 1000.0.0"
-      }
-    },
     "node_modules/@react-native-community/cli": {
       "version": "11.3.7",
       "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-11.3.7.tgz",
@@ -5961,6 +6064,16 @@
         "invariant": "^2.2.4"
       }
     },
+    "node_modules/@react-native-community/masked-view": {
+      "version": "0.1.11",
+      "resolved": "https://registry.npmjs.org/@react-native-community/masked-view/-/masked-view-0.1.11.tgz",
+      "integrity": "sha512-rQfMIGSR/1r/SyN87+VD8xHHzDYeHaJq6elOSCAD+0iLagXkSI2pfA0LmSXP21uw5i3em7GkkRjfJ8wpqWXZNw==",
+      "deprecated": "Repository was moved to @react-native-masked-view/masked-view",
+      "peerDependencies": {
+        "react": ">=16.0",
+        "react-native": ">=0.57"
+      }
+    },
     "node_modules/@react-native-community/netinfo": {
       "version": "9.3.10",
       "resolved": "https://registry.npmjs.org/@react-native-community/netinfo/-/netinfo-9.3.10.tgz",
@@ -8210,8 +8323,7 @@
     "node_modules/@types/hammerjs": {
       "version": "2.0.45",
       "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.45.tgz",
-      "integrity": "sha512-qkcUlZmX6c4J8q45taBKTL3p+LbITgyx7qhlPYOdOHZB7B31K0mXbP5YA7i7SgDeEGuI9MnumiKPEMrxg8j3KQ==",
-      "peer": true
+      "integrity": "sha512-qkcUlZmX6c4J8q45taBKTL3p+LbITgyx7qhlPYOdOHZB7B31K0mXbP5YA7i7SgDeEGuI9MnumiKPEMrxg8j3KQ=="
     },
     "node_modules/@types/hoist-non-react-statics": {
       "version": "3.3.5",
@@ -8256,6 +8368,14 @@
       "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz",
       "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng=="
     },
+    "node_modules/@types/ramda": {
+      "version": "0.27.66",
+      "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.27.66.tgz",
+      "integrity": "sha512-i2YW+E2U6NfMt3dp0RxNcejox+bxJUNDjB7BpYuRuoHIzv5juPHkJkNgcUOu+YSQEmaWu8cnAo/8r63C0NnuVA==",
+      "dependencies": {
+        "ts-toolbelt": "^6.15.1"
+      }
+    },
     "node_modules/@types/react": {
       "version": "18.2.47",
       "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.47.tgz",
@@ -8266,6 +8386,16 @@
         "csstype": "^3.0.2"
       }
     },
+    "node_modules/@types/react-native": {
+      "version": "0.73.0",
+      "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.73.0.tgz",
+      "integrity": "sha512-6ZRPQrYM72qYKGWidEttRe6M5DZBEV5F+MHMHqd4TTYx0tfkcdrUFGdef6CCxY0jXU7wldvd/zA/b0A/kTeJmA==",
+      "deprecated": "This is a stub types definition. react-native provides its own type definitions, so you do not need this installed.",
+      "peer": true,
+      "dependencies": {
+        "react-native": "*"
+      }
+    },
     "node_modules/@types/react-native-calendar-picker": {
       "version": "7.0.7",
       "resolved": "https://registry.npmjs.org/@types/react-native-calendar-picker/-/react-native-calendar-picker-7.0.7.tgz",
@@ -8287,6 +8417,11 @@
       "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
       "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw=="
     },
+    "node_modules/@types/urijs": {
+      "version": "1.19.25",
+      "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.25.tgz",
+      "integrity": "sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg=="
+    },
     "node_modules/@types/yargs": {
       "version": "15.0.19",
       "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz",
@@ -9091,6 +9226,14 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/camelize": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz",
+      "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/caniuse-lite": {
       "version": "1.0.30001576",
       "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz",
@@ -9131,6 +9274,24 @@
         "node": ">=0.8.0"
       }
     },
+    "node_modules/character-entities-html4": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz",
+      "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/character-entities-legacy": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
+      "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
     "node_modules/charenc": {
       "version": "0.0.2",
       "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
@@ -9535,6 +9696,14 @@
         "node": ">=8"
       }
     },
+    "node_modules/css-color-keywords": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz",
+      "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==",
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/css-select": {
       "version": "5.1.0",
       "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
@@ -9550,6 +9719,16 @@
         "url": "https://github.com/sponsors/fb55"
       }
     },
+    "node_modules/css-to-react-native": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz",
+      "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==",
+      "dependencies": {
+        "camelize": "^1.0.0",
+        "css-color-keywords": "^1.0.0",
+        "postcss-value-parser": "^4.0.2"
+      }
+    },
     "node_modules/css-tree": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
@@ -10238,6 +10417,119 @@
         "expo": "*"
       }
     },
+    "node_modules/expo-dev-client": {
+      "version": "2.4.12",
+      "resolved": "https://registry.npmjs.org/expo-dev-client/-/expo-dev-client-2.4.12.tgz",
+      "integrity": "sha512-3+xg0yb/0g6+JQaWq5+xn2uHoOXP4oSX33aWkaZPSNJLoyzfRaHNDF5MLcrMBbEHCw5T5qZRU291K+uQeMMC0g==",
+      "dependencies": {
+        "expo-dev-launcher": "2.4.14",
+        "expo-dev-menu": "3.2.2",
+        "expo-dev-menu-interface": "1.3.0",
+        "expo-manifests": "~0.7.0",
+        "expo-updates-interface": "~0.10.0"
+      },
+      "peerDependencies": {
+        "expo": "*"
+      }
+    },
+    "node_modules/expo-dev-launcher": {
+      "version": "2.4.14",
+      "resolved": "https://registry.npmjs.org/expo-dev-launcher/-/expo-dev-launcher-2.4.14.tgz",
+      "integrity": "sha512-SlUf+fEX9sKzDzY1Ui8j5775eLKpO0xPVoI89G7CRsrpUv6ZRvRF836cMFesxkU5d+3bXHpKzDQiEPDSI1G/WQ==",
+      "dependencies": {
+        "expo-dev-menu": "3.2.2",
+        "resolve-from": "^5.0.0",
+        "semver": "^7.5.3"
+      },
+      "peerDependencies": {
+        "expo": "*"
+      }
+    },
+    "node_modules/expo-dev-launcher/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/expo-dev-launcher/node_modules/semver": {
+      "version": "7.5.4",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/expo-dev-launcher/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+    },
+    "node_modules/expo-dev-menu": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/expo-dev-menu/-/expo-dev-menu-3.2.2.tgz",
+      "integrity": "sha512-q0IDlCGkZMsDIFV+Mgnz0Q3u/bcnrF8IFMglJ0onF09e5csLk5Ts7hKoQyervOJeThyI402r9OQsFNaru2tgtg==",
+      "dependencies": {
+        "expo-dev-menu-interface": "1.3.0",
+        "semver": "^7.5.3"
+      },
+      "peerDependencies": {
+        "expo": "*"
+      }
+    },
+    "node_modules/expo-dev-menu-interface": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/expo-dev-menu-interface/-/expo-dev-menu-interface-1.3.0.tgz",
+      "integrity": "sha512-WtRP7trQ2lizJJTTFXUSGGn1deIeHaYej0sUynvu/uC69VrSP4EeSnYOxbmEO29kuT/MsQBMGu0P/AkMQOqCOg==",
+      "peerDependencies": {
+        "expo": "*"
+      }
+    },
+    "node_modules/expo-dev-menu/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/expo-dev-menu/node_modules/semver": {
+      "version": "7.5.4",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/expo-dev-menu/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+    },
+    "node_modules/expo-eas-client": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/expo-eas-client/-/expo-eas-client-0.6.0.tgz",
+      "integrity": "sha512-FSPy0ThcJBvzEzOZVhpOrYyHgQ8U1jJ4v7u7tr1x0KOVRqyf25APEQZFxxRPn3zAYW0tQ+uDTCbrwNymFqhQfw=="
+    },
     "node_modules/expo-file-system": {
       "version": "15.4.5",
       "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-15.4.5.tgz",
@@ -10260,6 +10552,14 @@
         "expo": "*"
       }
     },
+    "node_modules/expo-image": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/expo-image/-/expo-image-1.3.5.tgz",
+      "integrity": "sha512-yrIR2mnfIKbKcguoqWK3U5m3zvLPnonvSCabB2ErVGhws8zQs7ILYf+7T08j8U6eFcohjw0CoAFJ6RWNsX2EhA==",
+      "peerDependencies": {
+        "expo": "*"
+      }
+    },
     "node_modules/expo-image-loader": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/expo-image-loader/-/expo-image-loader-4.3.0.tgz",
@@ -10279,6 +10579,11 @@
         "expo": "*"
       }
     },
+    "node_modules/expo-json-utils": {
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/expo-json-utils/-/expo-json-utils-0.7.1.tgz",
+      "integrity": "sha512-L0lyH8diXQtV0q5BLbFlcoxTqPF5im79xDHPhybB0j36xYdm65hjwRJ4yMrPIN5lR18hj48FUZeONiDHRyEvIg=="
+    },
     "node_modules/expo-keep-awake": {
       "version": "12.3.0",
       "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-12.3.0.tgz",
@@ -10295,6 +10600,14 @@
         "expo": "*"
       }
     },
+    "node_modules/expo-manifests": {
+      "version": "0.7.2",
+      "resolved": "https://registry.npmjs.org/expo-manifests/-/expo-manifests-0.7.2.tgz",
+      "integrity": "sha512-xlhL0XI2zw3foJ0q2Ra4ieBhU0V2yz+Rv6GpVEaaIHFlIC/Dbx+mKrX5dgenZEMERr/MG7sRJaRbAVB2PaAYhA==",
+      "dependencies": {
+        "expo-json-utils": "~0.7.0"
+      }
+    },
     "node_modules/expo-modules-autolinking": {
       "version": "1.5.1",
       "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-1.5.1.tgz",
@@ -10444,6 +10757,107 @@
       "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-1.6.0.tgz",
       "integrity": "sha512-e//Oi2WPdomMlMDD3skE4+1ZarKCJ/suvcB4Jo/nO427niKug5oppcPNYO+csR6y3ZglGuypS+3pp/hJ+Xp6fQ=="
     },
+    "node_modules/expo-structured-headers": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/expo-structured-headers/-/expo-structured-headers-3.3.0.tgz",
+      "integrity": "sha512-t+h5Zqaukd3Tn97LaWPpibVsmiC/TFP8F+8sAUliwCSMzgcb5TATRs2NcAB+JcIr8EP3JJDyYXJrZle1cjs4mQ=="
+    },
+    "node_modules/expo-updates": {
+      "version": "0.18.19",
+      "resolved": "https://registry.npmjs.org/expo-updates/-/expo-updates-0.18.19.tgz",
+      "integrity": "sha512-dakYQ7XhZtBKMLcim08wum108ZUQcNigurijb/6PKdg3QHn21IzOr/27n6x54DctcoW8w1B8w8y1Xw2svVsx4w==",
+      "dependencies": {
+        "@expo/code-signing-certificates": "0.0.5",
+        "@expo/config": "~8.1.0",
+        "@expo/config-plugins": "~7.2.0",
+        "arg": "4.1.0",
+        "chalk": "^4.1.2",
+        "expo-eas-client": "~0.6.0",
+        "expo-manifests": "~0.7.0",
+        "expo-structured-headers": "~3.3.0",
+        "expo-updates-interface": "~0.10.0",
+        "fbemitter": "^3.0.0",
+        "resolve-from": "^5.0.0"
+      },
+      "bin": {
+        "expo-updates": "bin/cli.js"
+      },
+      "peerDependencies": {
+        "expo": "*"
+      }
+    },
+    "node_modules/expo-updates-interface": {
+      "version": "0.10.1",
+      "resolved": "https://registry.npmjs.org/expo-updates-interface/-/expo-updates-interface-0.10.1.tgz",
+      "integrity": "sha512-I6JMR7EgjXwckrydDmrkBEX/iw750dcqpzQVsjznYWfi0HTEOxajLHB90fBFqQkUV5i5s4Fd3hYQ1Cn0oMzUbA==",
+      "peerDependencies": {
+        "expo": "*"
+      }
+    },
+    "node_modules/expo-updates/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/expo-updates/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/expo-updates/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/expo-updates/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+    },
+    "node_modules/expo-updates/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/expo-updates/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/fast-deep-equal": {
       "version": "3.1.3",
       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -11184,6 +11598,83 @@
       "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
       "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
     },
+    "node_modules/htmlparser2": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz",
+      "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==",
+      "funding": [
+        "https://github.com/fb55/htmlparser2?sponsor=1",
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/fb55"
+        }
+      ],
+      "dependencies": {
+        "domelementtype": "^2.0.1",
+        "domhandler": "^4.2.2",
+        "domutils": "^2.8.0",
+        "entities": "^3.0.1"
+      }
+    },
+    "node_modules/htmlparser2/node_modules/dom-serializer": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
+      "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
+      "dependencies": {
+        "domelementtype": "^2.0.1",
+        "domhandler": "^4.2.0",
+        "entities": "^2.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+      }
+    },
+    "node_modules/htmlparser2/node_modules/dom-serializer/node_modules/entities": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+      "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
+    "node_modules/htmlparser2/node_modules/domhandler": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
+      "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
+      "dependencies": {
+        "domelementtype": "^2.2.0"
+      },
+      "engines": {
+        "node": ">= 4"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/domhandler?sponsor=1"
+      }
+    },
+    "node_modules/htmlparser2/node_modules/domutils": {
+      "version": "2.8.0",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
+      "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
+      "dependencies": {
+        "dom-serializer": "^1.0.1",
+        "domelementtype": "^2.2.0",
+        "domhandler": "^4.2.0"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/domutils?sponsor=1"
+      }
+    },
+    "node_modules/htmlparser2/node_modules/entities": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
+      "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
     "node_modules/http-errors": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
@@ -11546,14 +12037,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/is-plain-obj": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
-      "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/is-plain-object": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
@@ -13080,17 +13563,6 @@
       "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz",
       "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA=="
     },
-    "node_modules/merge-options": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz",
-      "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==",
-      "dependencies": {
-        "is-plain-obj": "^2.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
     "node_modules/merge-stream": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
@@ -15067,6 +15539,11 @@
         "node": "^10 || ^12 || >=14"
       }
     },
+    "node_modules/postcss-value-parser": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+    },
     "node_modules/postinstall-postinstall": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz",
@@ -15296,6 +15773,11 @@
       "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz",
       "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ=="
     },
+    "node_modules/ramda": {
+      "version": "0.27.2",
+      "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz",
+      "integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA=="
+    },
     "node_modules/range-parser": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
@@ -15473,10 +15955,9 @@
       }
     },
     "node_modules/react-native-gesture-handler": {
-      "version": "2.14.0",
-      "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.14.0.tgz",
-      "integrity": "sha512-cOmdaqbpzjWrOLUpX3hdSjsMby5wq3PIEdMq7okJeg9DmCzanysHSrktw1cXWNc/B5MAgxAn9J7Km0/4UIqKAQ==",
-      "peer": true,
+      "version": "2.12.1",
+      "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.12.1.tgz",
+      "integrity": "sha512-deqh36bw82CFUV9EC4tTo2PP1i9HfCOORGS3Zmv71UYhEZEHkzZv18IZNPB+2Awzj45vLIidZxGYGFxHlDSQ5A==",
       "dependencies": {
         "@egjs/hammerjs": "^2.0.17",
         "hoist-non-react-statics": "^3.3.0",
@@ -15527,6 +16008,15 @@
         }
       }
     },
+    "node_modules/react-native-mmkv": {
+      "version": "2.11.0",
+      "resolved": "https://registry.npmjs.org/react-native-mmkv/-/react-native-mmkv-2.11.0.tgz",
+      "integrity": "sha512-28PdUHjZJmAw3q+8zJDAAdohnZMpDC7WgRUJxACOMkcmJeqS3u5cKS/lSq2bhf1CvaeIiHYHUWiyatUjMRCDQQ==",
+      "peerDependencies": {
+        "react": "*",
+        "react-native": ">=0.71.0"
+      }
+    },
     "node_modules/react-native-pager-view": {
       "version": "6.2.0",
       "resolved": "https://registry.npmjs.org/react-native-pager-view/-/react-native-pager-view-6.2.0.tgz",
@@ -15536,6 +16026,47 @@
         "react-native": "*"
       }
     },
+    "node_modules/react-native-reanimated": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.3.0.tgz",
+      "integrity": "sha512-LzfpPZ1qXBGy5BcUHqw3pBC0qSd22qXS3t8hWSbozXNrBkzMhhOrcILE/nEg/PHpNNp1xvGOW8NwpAMF006roQ==",
+      "dependencies": {
+        "@babel/plugin-transform-object-assign": "^7.16.7",
+        "@babel/preset-typescript": "^7.16.7",
+        "convert-source-map": "^2.0.0",
+        "invariant": "^2.2.4"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0",
+        "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0-0",
+        "@babel/plugin-proposal-optional-chaining": "^7.0.0-0",
+        "@babel/plugin-transform-arrow-functions": "^7.0.0-0",
+        "@babel/plugin-transform-shorthand-properties": "^7.0.0-0",
+        "@babel/plugin-transform-template-literals": "^7.0.0-0",
+        "react": "*",
+        "react-native": "*"
+      }
+    },
+    "node_modules/react-native-render-html": {
+      "version": "6.3.4",
+      "resolved": "https://registry.npmjs.org/react-native-render-html/-/react-native-render-html-6.3.4.tgz",
+      "integrity": "sha512-H2jSMzZjidE+Wo3qCWPUMU1nm98Vs2SGCvQCz/i6xf0P3Y9uVtG/b0sDbG/cYFir2mSYBYCIlS1Dv0WC1LjYig==",
+      "dependencies": {
+        "@jsamr/counter-style": "^2.0.1",
+        "@jsamr/react-native-li": "^2.3.0",
+        "@native-html/transient-render-engine": "11.2.3",
+        "@types/ramda": "^0.27.40",
+        "@types/urijs": "^1.19.15",
+        "prop-types": "^15.5.7",
+        "ramda": "^0.27.2",
+        "stringify-entities": "^3.1.0",
+        "urijs": "^1.19.6"
+      },
+      "peerDependencies": {
+        "react": "*",
+        "react-native": "*"
+      }
+    },
     "node_modules/react-native-safe-area-context": {
       "version": "4.6.3",
       "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.6.3.tgz",
@@ -16495,6 +17026,20 @@
         "node": ">=8"
       }
     },
+    "node_modules/stringify-entities": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz",
+      "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==",
+      "dependencies": {
+        "character-entities-html4": "^1.0.0",
+        "character-entities-legacy": "^1.0.0",
+        "xtend": "^4.0.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
     "node_modules/strip-ansi": {
       "version": "5.2.0",
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -17066,6 +17611,11 @@
       "resolved": "https://registry.npmjs.org/ts-object-utils/-/ts-object-utils-0.0.5.tgz",
       "integrity": "sha512-iV0GvHqOmilbIKJsfyfJY9/dNHCs969z3so90dQWsO1eMMozvTpnB1MEaUbb3FYtZTGjv5sIy/xmslEz0Rg2TA=="
     },
+    "node_modules/ts-toolbelt": {
+      "version": "6.15.5",
+      "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.15.5.tgz",
+      "integrity": "sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A=="
+    },
     "node_modules/tslib": {
       "version": "2.6.2",
       "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
@@ -17284,6 +17834,11 @@
         "browserslist": ">= 4.21.0"
       }
     },
+    "node_modules/urijs": {
+      "version": "1.19.11",
+      "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz",
+      "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ=="
+    },
     "node_modules/url-join": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz",

+ 1 - 1
src/components/FlatList/index.tsx

@@ -3,7 +3,7 @@ import { FlatList as List, SafeAreaView, View } from 'react-native';
 import { Input } from '../Input';
 import { styles } from './styles';
 import { Item, ItemData } from './item';
-import { useGetRegionsWithFlagQuery } from '../../modules/auth/regions/queries/use-post-get-regions';
+import { useGetRegionsWithFlagQuery } from '@api/regions';
 
 type Props = {
   itemObject: (object: any) => void;

+ 1 - 3
src/modules/auth/api/auth-api.ts → src/modules/api/auth/auth-api.ts

@@ -2,9 +2,7 @@ import { request } from '../../../utils';
 import { API } from '../../../types';
 import { ResponseType } from '../response-type';
 
-import { UserRegistrationData } from './queries/use-post-register';
-import { UserResetPasswordData } from './queries/use-post-reset-password';
-import { JoinTestTypes } from './queries/use-post-join-test';
+import { UserRegistrationData, UserResetPasswordData, JoinTestTypes } from './queries';
 
 export interface PostLoginUserReturn extends ResponseType {
   token: string;

+ 0 - 0
src/modules/auth/api/auth-query-keys.tsx → src/modules/api/auth/auth-query-keys.tsx


+ 3 - 0
src/modules/api/auth/index.ts

@@ -0,0 +1,3 @@
+export * from './queries';
+export * from './auth-api';
+export * from './auth-query-keys';

+ 4 - 0
src/modules/api/auth/queries/index.ts

@@ -0,0 +1,4 @@
+export * from './use-post-join-test';
+export * from './use-post-login';
+export * from './use-post-register';
+export * from './use-post-reset-password';

+ 4 - 2
src/modules/auth/api/queries/use-post-join-test.tsx → src/modules/api/auth/queries/use-post-join-test.tsx

@@ -1,7 +1,9 @@
 import { useMutation } from '@tanstack/react-query';
-import { authApi, UserJoinTestReturn } from '../auth-api';
-import { BaseAxiosError } from '../../../../types';
+
 import { authQueryKeys } from '../auth-query-keys';
+import { authApi, UserJoinTestReturn } from '../auth-api';
+
+import type { BaseAxiosError } from '../../../../types';
 
 export type JoinTestTypes = {
   username: string;

+ 4 - 2
src/modules/auth/api/queries/use-post-login.tsx → src/modules/api/auth/queries/use-post-login.tsx

@@ -1,7 +1,9 @@
 import { useMutation } from '@tanstack/react-query';
-import { authApi, PostLoginUserReturn } from '../auth-api';
-import { BaseAxiosError } from '../../../../types';
+
 import { authQueryKeys } from '../auth-query-keys';
+import { authApi, type PostLoginUserReturn } from '../auth-api';
+
+import type { BaseAxiosError } from '../../../../types';
 
 type LoginTypes = {
   login: string;

+ 4 - 2
src/modules/auth/api/queries/use-post-register.tsx → src/modules/api/auth/queries/use-post-register.tsx

@@ -1,7 +1,9 @@
 import { useMutation } from '@tanstack/react-query';
-import { authApi, PostRegisterUserReturn } from '../auth-api';
-import { BaseAxiosError } from '../../../../types';
+
 import { authQueryKeys } from '../auth-query-keys';
+import { authApi, type PostRegisterUserReturn } from '../auth-api';
+
+import type { BaseAxiosError } from '../../../../types';
 
 export type UserRegistrationData = {
   user: {

+ 4 - 2
src/modules/auth/api/queries/use-post-reset-password.tsx → src/modules/api/auth/queries/use-post-reset-password.tsx

@@ -1,7 +1,9 @@
 import { useMutation } from '@tanstack/react-query';
-import { authApi, UserResetPasswordReturn } from '../auth-api';
-import { BaseAxiosError } from '../../../../types';
+
 import { authQueryKeys } from '../auth-query-keys';
+import { authApi, type UserResetPasswordReturn } from '../auth-api';
+
+import type { BaseAxiosError } from '../../../../types';
 
 export type UserResetPasswordData = {
   email: string;

+ 3 - 0
src/modules/api/regions/index.ts

@@ -0,0 +1,3 @@
+export * from './queries';
+export * from './regions-api';
+export * from './regions-query-keys';

+ 1 - 0
src/modules/api/regions/queries/index.ts

@@ -0,0 +1 @@
+export * from './use-post-get-regions';

+ 4 - 2
src/modules/auth/regions/queries/use-post-get-regions.tsx → src/modules/api/regions/queries/use-post-get-regions.tsx

@@ -1,7 +1,9 @@
 import { useQuery } from '@tanstack/react-query';
-import { regionsApi, PostGetRegionsReturn } from '../regions-api';
-import { BaseAxiosError } from '../../../../types';
+
 import { regionQueryKeys } from '../regions-query-keys';
+import { regionsApi, type PostGetRegionsReturn } from '../regions-api';
+
+import type { BaseAxiosError } from '../../../../types';
 
 export const useGetRegionsWithFlagQuery = (enabled: boolean) => {
   return useQuery<PostGetRegionsReturn, BaseAxiosError>({

+ 0 - 0
src/modules/auth/regions/regions-api.tsx → src/modules/api/regions/regions-api.tsx


+ 0 - 0
src/modules/auth/regions/regions-query-keys.tsx → src/modules/api/regions/regions-query-keys.tsx


+ 0 - 0
src/modules/auth/response-type.ts → src/modules/api/response-type.ts


+ 3 - 0
src/modules/api/series/index.ts

@@ -0,0 +1,3 @@
+export * from './queries';
+export * from './series-api';
+export * from './series-query-keys';

+ 1 - 0
src/modules/api/series/queries/index.ts

@@ -0,0 +1 @@
+export * from './use-post-get-series';

+ 21 - 0
src/modules/api/series/queries/use-post-get-series.tsx

@@ -0,0 +1,21 @@
+import { useMutation } from '@tanstack/react-query';
+
+import { seriesQueryKeys } from '../series-query-keys';
+import { type PostGetSeries, seriesApi } from '../series-api';
+
+import type { BaseAxiosError } from '../../../../types';
+
+export const fetchSeriesData = () => {
+  return useMutation<
+    PostGetSeries,
+    BaseAxiosError,
+    { token: string | null; regions: string },
+    PostGetSeries
+  >({
+    mutationKey: seriesQueryKeys.fetchSeriesData(),
+    mutationFn: async (variables) => {
+      const response = await seriesApi.getSeries(variables.token, variables.regions);
+      return response.data;
+    }
+  });
+};

+ 4 - 6
src/modules/map/series/series-api.tsx → src/modules/api/series/series-api.tsx

@@ -1,9 +1,8 @@
 import { request } from '../../../utils';
 import { API } from '../../../types';
+import { ResponseType } from '../response-type';
 
-export interface SeriesResponse  {
-  result: 'OK' | 'ERROR';
-  result_description?: string;
+export interface PostGetSeries extends ResponseType {
   series: { id: number; name: string; icon: string }[];
   items: {
     id: number;
@@ -17,7 +16,6 @@ export interface SeriesResponse  {
 }
 
 export const seriesApi = {
-  getSeries: (token: string | null, regions: string) => 
-  request.postForm<SeriesResponse>(API.SERIES, { token, regions })
+  getSeries: (token: string | null, regions: string) =>
+    request.postForm<PostGetSeries>(API.SERIES, { token, regions })
 };
-

+ 3 - 0
src/modules/api/series/series-query-keys.tsx

@@ -0,0 +1,3 @@
+export const seriesQueryKeys = {
+  fetchSeriesData: () => ['fetchSeriesData'] as const,
+};

+ 3 - 0
src/modules/api/user/index.ts

@@ -0,0 +1,3 @@
+export * from './queries';
+export * from './user-api';
+export * from './user-query-keys';

+ 3 - 0
src/modules/api/user/queries/index.ts

@@ -0,0 +1,3 @@
+export * from './use-post-get-profile';
+export * from './use-post-set-profile';
+export * from './use-post-get-profile-info';

+ 17 - 0
src/modules/api/user/queries/use-post-get-profile-info.tsx

@@ -0,0 +1,17 @@
+import { useQuery } from '@tanstack/react-query';
+
+import { userQueryKeys } from '../user-query-keys';
+import { type PostGetProfileInfoReturn, userApi } from '../user-api';
+
+import type { BaseAxiosError } from '../../../../types';
+
+export const usePostGetProfileInfoQuery = (token: string, enabled: boolean) => {
+  return useQuery<PostGetProfileInfoReturn, BaseAxiosError>({
+    queryKey: userQueryKeys.getProfileInfo(),
+    queryFn: async () => {
+      const response = await userApi.getProfileInfo(token);
+      return response.data;
+    },
+    enabled
+  });
+};

+ 4 - 2
src/modules/auth/user/queries/use-post-get-profile.tsx → src/modules/api/user/queries/use-post-get-profile.tsx

@@ -1,7 +1,9 @@
 import { useQuery } from '@tanstack/react-query';
-import { userApi, PostGetProfileData } from '../user-api';
-import { BaseAxiosError } from '../../../../types';
+
 import { userQueryKeys } from '../user-query-keys';
+import { userApi, type PostGetProfileData } from '../user-api';
+
+import type { BaseAxiosError } from '../../../../types';
 
 export const usePostGetProfileQuery = (token: string, enabled: boolean) => {
   return useQuery<PostGetProfileData, BaseAxiosError>({

+ 4 - 2
src/modules/auth/user/queries/use-post-set-profile.tsx → src/modules/api/user/queries/use-post-set-profile.tsx

@@ -1,7 +1,9 @@
 import { useMutation } from '@tanstack/react-query';
-import { userApi, PostSetProfileDataReturn, PostSetProfileData } from '../user-api';
-import { BaseAxiosError } from '../../../../types';
+
 import { userQueryKeys } from '../user-query-keys';
+import { type PostSetProfileDataReturn, type PostSetProfileData, userApi } from '../user-api';
+
+import type { BaseAxiosError } from '../../../../types';
 
 export const usePostSetProfileMutation = () => {
   return useMutation<

+ 42 - 2
src/modules/auth/user/user-api.tsx → src/modules/api/user/user-api.tsx

@@ -53,11 +53,50 @@ export interface PostSetProfileDataReturn extends ResponseType {
   not_updated: string[];
 }
 
-type SocialData = {
+export type SocialData = {
   link: string;
   active: 0 | 1;
 };
 
+export interface PostGetProfileInfoReturn extends ResponseType {
+  username: string;
+  email: string;
+  first_name: string;
+  last_name: string;
+  date_of_birth: string;
+  avatar_full_size: string;
+  avatar: string;
+  bio: string;
+  links: {
+    f?: SocialData;
+    t?: SocialData;
+    i?: SocialData;
+    y?: SocialData;
+    www?: SocialData;
+    other?: SocialData;
+  };
+  homebase: number;
+  homebase_name: string;
+  homebase_flag: string;
+  homebase2: number;
+  homebase2_name: string;
+  homebase2_flag: string;
+  series: Series[];
+  scores: Score[];
+}
+
+export type Series = {
+  id: number;
+  score: number;
+  name: string;
+  icon_png: string;
+};
+
+export type Score = {
+  name: string;
+  score: number;
+};
+
 export const userApi = {
   getProfileData: (token: string) =>
     request.postForm<PostGetProfileData>(API.GET_USER_SETTINGS_DATA, { token }),
@@ -71,5 +110,6 @@ export const userApi = {
     } as unknown as Blob);
 
     return request.postForm<PostSetProfileDataReturn>(API.SET_USER_SETTINGS_DATA, formData);
-  }
+  },
+  getProfileInfo: (token: string) => request.postForm<PostGetProfileInfoReturn>(API.PROFILE_INFO)
 };

+ 5 - 0
src/modules/api/user/user-query-keys.tsx

@@ -0,0 +1,5 @@
+export const userQueryKeys = {
+  getProfileData: () => ['getProfileData'] as const,
+  setProfileData: () => ['setProfileData'] as const,
+  getProfileInfo: () => ['getProfileInfo'] as const
+};

+ 0 - 4
src/modules/auth/user/user-query-keys.tsx

@@ -1,4 +0,0 @@
-export const userQueryKeys = {
-  getProfileData: () => ['getProfileData'] as const,
-  setProfileData: () => ['setProfileData'] as const
-};

+ 0 - 11
src/modules/map/series/queries/use-post-get-series.tsx

@@ -1,11 +0,0 @@
-import { seriesApi } from '../series-api';
-
-export const fetchSeriesData = async (token: string | null, regions: string) => {
-  try {
-    const response = await seriesApi.getSeries(token, regions);
-    return response.data;
-  } catch (error) {
-    throw error;
-  }
-};
-

+ 28 - 12
src/screens/InAppScreens/MapScreen/index.tsx

@@ -30,7 +30,7 @@ import {
   processMarkerData
 } from '../../../utils/mapHelpers';
 import { getData } from '../../../modules/map/regionData';
-import { fetchSeriesData } from '../../../modules/map/series/queries/use-post-get-series';
+import { fetchSeriesData } from '@api/series';
 import MarkerItem from './MarkerItem';
 import ClusterItem from './ClusterItem';
 import {
@@ -61,6 +61,9 @@ const AnimatedMarker = Animated.createAnimatedComponent(Marker);
 const MapScreen: React.FC<MapScreenProps> = ({ navigation }) => {
   const userId = storage.get('uid', StoreType.STRING);
   const token = storage.get('token', StoreType.STRING);
+
+  const { mutateAsync } = fetchSeriesData();
+
   const visitedTiles = `${MAP_HOST}/tiles_nm/user_visited/${userId}`;
 
   const mapRef = useRef<MapView>(null);
@@ -182,17 +185,23 @@ const MapScreen: React.FC<MapScreenProps> = ({ navigation }) => {
     const regionIds = regionsFound.map(
       (region: { properties: { id: any } }) => region.properties.id
     );
-    const candidatesMarkers = await fetchSeriesData(String(token), JSON.stringify(regionIds));
 
-    if (thisToken !== currentTokenRef.current) return;
+    await mutateAsync(
+      { regions: JSON.stringify(regionIds), token: String(token) },
+      {
+        onSuccess: (data) => {
+          if (thisToken !== currentTokenRef.current) return;
 
-    setSeries(candidatesMarkers.series);
+          setSeries(data.series);
 
-    const markersVisible = filterCandidatesMarkers(candidatesMarkers.items, visibleAreaPolygon);
-    const allMarkers = markersVisible.map(processMarkerData);
-    const clusteredMarkers = clusterMarkers(allMarkers, currentZoom, setClusters);
+          const markersVisible = filterCandidatesMarkers(data.items, visibleAreaPolygon);
+          const allMarkers = markersVisible.map(processMarkerData);
+          const clusteredMarkers = clusterMarkers(allMarkers, currentZoom, setClusters);
 
-    setMarkers(clusteredMarkers as MarkerData[]);
+          setMarkers(clusteredMarkers as MarkerData[]);
+        }
+      }
+    );
   };
 
   const renderMarkers = () => {
@@ -314,10 +323,17 @@ const MapScreen: React.FC<MapScreenProps> = ({ navigation }) => {
       mapRef.current?.animateToRegion(region, 1000);
 
       if (tableName === 'regions') {
-        const seriesData = await fetchSeriesData(String(token), JSON.stringify([id]));
-        setSeries(seriesData.series);
-        const allMarkers = seriesData.items.map(processMarkerData);
-        setProcessedMarkers(allMarkers);
+        await mutateAsync(
+          { regions: JSON.stringify([id]), token: String(token) },
+          {
+            onSuccess: (data) => {
+              setSeries(data.series);
+
+              const allMarkers = data.items.map(processMarkerData);
+              setProcessedMarkers(allMarkers);
+            }
+          }
+        );
       } else {
         setProcessedMarkers([]);
       }

+ 14 - 12
src/screens/InAppScreens/ProfileScreen/Profile/edit-personal-info.tsx

@@ -7,19 +7,21 @@ import { useNavigation } from '@react-navigation/native';
 import { useQueryClient } from '@tanstack/react-query';
 import { Image } from 'expo-image';
 
+import {
+  usePostGetProfileQuery,
+  usePostSetProfileMutation,
+  userQueryKeys,
+  type PostSetProfileData
+} from '@api/user';
+
+import { useGetRegionsWithFlagQuery } from '@api/regions';
+
 import { API_HOST } from '../../../../constants';
 
 import { AvatarPicker, BigText, Header, Input, PageWrapper, Button } from '../../../../components';
 import { InputDatePicker } from '../../../../components/Calendar/InputDatePicker';
 import { ModalFlatList } from '../../../../components/FlatList/modal-flatlist';
 
-import { usePostGetProfileQuery } from '../../../../modules/auth/user/queries/use-post-get-profile';
-import { useGetRegionsWithFlagQuery } from '../../../../modules/auth/regions/queries/use-post-get-regions';
-import { usePostSetProfileMutation } from '../../../../modules/auth/user/queries/use-post-set-profile';
-import { userQueryKeys } from '../../../../modules/auth/user/user-query-keys';
-
-import type { PostSetProfileData } from '../../../../modules/auth/user/user-api';
-
 import { storage, StoreType } from '../../../../storage';
 import { Colors } from '../../../../theme';
 
@@ -215,7 +217,7 @@ export const EditPersonalInfo = () => {
                 />
                 <BigText>Links</BigText>
                 <Input
-                  icon={<FacebookIcon />}
+                  icon={<FacebookIcon fill={Colors.LIGHT_GRAY} />}
                   placeholder={'https://www.facebook.com'}
                   inputMode={'text'}
                   onChange={props.handleChange('f')}
@@ -224,7 +226,7 @@ export const EditPersonalInfo = () => {
                   formikError={props.touched.f && props.errors.f}
                 />
                 <Input
-                  icon={<InstagramIcon />}
+                  icon={<InstagramIcon fill={Colors.LIGHT_GRAY} />}
                   placeholder={'https://www.instagram.com'}
                   inputMode={'text'}
                   onChange={props.handleChange('i')}
@@ -233,7 +235,7 @@ export const EditPersonalInfo = () => {
                   formikError={props.touched.i && props.errors.i}
                 />
                 <Input
-                  icon={<XIcon />}
+                  icon={<XIcon fill={Colors.LIGHT_GRAY} />}
                   placeholder={'https://www.twitter.com'}
                   inputMode={'text'}
                   onChange={props.handleChange('t')}
@@ -242,7 +244,7 @@ export const EditPersonalInfo = () => {
                   formikError={props.touched.t && props.errors.t}
                 />
                 <Input
-                  icon={<YoutubeIcon />}
+                  icon={<YoutubeIcon fill={Colors.LIGHT_GRAY} />}
                   placeholder={'https://www.youtube.com'}
                   inputMode={'text'}
                   onChange={props.handleChange('y')}
@@ -260,7 +262,7 @@ export const EditPersonalInfo = () => {
                   formikError={props.touched.www && props.errors.www}
                 />
                 <Input
-                  icon={<LinkIcon />}
+                  icon={<LinkIcon fill={Colors.LIGHT_GRAY} />}
                   placeholder={'Other link'}
                   inputMode={'text'}
                   onChange={props.handleChange('other')}

+ 117 - 0
src/screens/InAppScreens/ProfileScreen/Settings/index.tsx

@@ -0,0 +1,117 @@
+import React, { FC, ReactNode } from 'react';
+import { Text, TouchableOpacity, View } from 'react-native';
+
+import { NavigationProp, useNavigation } from '@react-navigation/native';
+
+import { styles } from './styles';
+
+import { Header, PageWrapper } from '../../../../components';
+import { NAVIGATION_PAGES } from '../../../../types';
+import { Colors } from '../../../../theme';
+
+import UserPenIcon from '../../../../../assets/icons/user-pen.svg';
+import UserPlusIcon from '../../../../../assets/icons/user-plus.svg';
+import BellIcon from '../../../../../assets/icons/bell.svg';
+import MailIcon from '../../../../../assets/icons/mail.svg';
+import FAQIcon from '../../../../../assets/icons/faq.svg';
+import DocumentIcon from '../../../../../assets/icons/document.svg';
+import ShieldIcon from '../../../../../assets/icons/shield.svg';
+import ExitIcon from '../../../../../assets/icons/exit.svg';
+import UserXMark from '../../../../../assets/icons/user-xmark.svg';
+
+import ArrowRightIcon from '../../../../../assets/icons/right-arrow.svg';
+
+type ButtonType = {
+  label: string;
+  icon: ReactNode;
+  red?: boolean;
+  buttonFn?: (navigationHook: NavigationProp<ReactNavigation.RootParamList>) => void;
+};
+
+const buttons: ButtonType[] = [
+  {
+    label: 'Edit Profile',
+    icon: <UserPenIcon fill={Colors.DARK_BLUE} width={20} height={20} />,
+    buttonFn: (navigation) => {
+      navigation.navigate(NAVIGATION_PAGES.EDIT_PERSONAL_INFO);
+    }
+  },
+  {
+    label: 'Invite a Friend',
+    icon: <UserPlusIcon fill={Colors.DARK_BLUE} width={20} height={20} />
+  },
+  {
+    label: 'Notification',
+    icon: <BellIcon fill={Colors.DARK_BLUE} width={20} height={20} />
+  },
+  {
+    label: 'Contact Us',
+    icon: <MailIcon fill={Colors.DARK_BLUE} width={20} height={20} />
+  },
+  {
+    label: 'FAQs',
+    icon: <FAQIcon fill={Colors.DARK_BLUE} width={20} height={20} />
+  },
+  {
+    label: 'Terms & Conditions',
+    icon: <DocumentIcon fill={Colors.DARK_BLUE} width={20} height={20} />
+  },
+  {
+    label: 'Privacy Notice',
+    icon: <ShieldIcon fill={Colors.DARK_BLUE} width={20} height={20} />
+  },
+  {
+    label: 'Logout',
+    icon: <ExitIcon fill={Colors.RED} width={20} height={20} />,
+    red: true
+  },
+  {
+    label: 'Delete account',
+    icon: <UserXMark fill={Colors.RED} width={20} height={20} />,
+    red: true
+  }
+];
+
+const Settings = () => {
+  return (
+    <PageWrapper>
+      <Header label={'Settings'} />
+      {buttons.map((button) => (
+        <SettingsButton
+          label={button.label}
+          icon={button.icon}
+          red={button.red}
+          buttonFn={button.buttonFn}
+        />
+      ))}
+    </PageWrapper>
+  );
+};
+
+type ButtonProps = {
+  label: string;
+  icon: ReactNode;
+  buttonFn?: (navigate: NavigationProp<ReactNavigation.RootParamList>) => void;
+  red?: boolean;
+};
+
+const SettingsButton: FC<ButtonProps> = ({ label, icon, buttonFn, red }) => {
+  const navigation = useNavigation();
+
+  return (
+    <TouchableOpacity
+      style={[styles.alignStyle, styles.buttonWrapper, { justifyContent: 'space-between' }]}
+      onPress={() => (buttonFn ? buttonFn(navigation) : null)}
+    >
+      <View style={styles.alignStyle}>
+        {icon}
+        <Text style={[styles.buttonLabel, red ? { color: Colors.RED } : null]}>{label}</Text>
+      </View>
+      <View>
+        <ArrowRightIcon fill={red ? Colors.RED : Colors.LIGHT_GRAY} width={20} height={20} />
+      </View>
+    </TouchableOpacity>
+  );
+};
+
+export default Settings;

+ 21 - 0
src/screens/InAppScreens/ProfileScreen/Settings/styles.ts

@@ -0,0 +1,21 @@
+import { StyleSheet } from 'react-native';
+import { Colors } from '../../../../theme';
+import { getFontSize } from '../../../../utils';
+
+export const styles = StyleSheet.create({
+  alignStyle: {
+    display: 'flex',
+    flexDirection: 'row',
+    alignItems: 'center'
+  },
+  buttonWrapper: {
+    width: '100%',
+    height: 48
+  },
+  buttonLabel: {
+    color: Colors.DARK_BLUE,
+    fontSize: getFontSize(12),
+    fontWeight: '700',
+    marginLeft: 15
+  }
+});

+ 103 - 148
src/screens/InAppScreens/ProfileScreen/index.tsx

@@ -4,62 +4,39 @@ import { Image } from 'expo-image';
 import { createMaterialTopTabNavigator } from '@react-navigation/material-top-tabs';
 import { NavigationProp } from '@react-navigation/native';
 
+import { type Score, type Series, type SocialData, usePostGetProfileInfoQuery } from '@api/user';
+
 import { PageWrapper } from '../../../components';
 import { Colors } from '../../../theme';
 import { styles } from './styles';
 
 import { API_HOST } from '../../../constants';
 
-import { usePostGetProfileQuery } from '../../../modules/auth/user/queries/use-post-get-profile';
-
 import { NAVIGATION_PAGES } from '../../../types';
 import { navigationOpts } from './navigation-opts';
 
 import { storage, StoreType } from '../../../storage';
 
-import PenIcon from '../../../../assets/icons/pen.svg';
-
 import { getFontSize, getYears } from '../../../utils';
 
-const regions = [
-  {
-    count: 28,
-    name: 'NM1301'
-  },
-  {
-    count: 1,
-    name: 'M@P'
-  },
-  {
-    count: 13,
-    name: 'UN'
-  },
-  {
-    count: 14,
-    name: 'UN+'
-  },
-  {
-    count: 16,
-    name: 'TCC'
-  },
-  {
-    count: 3,
-    name: 'WHS'
-  }
-];
+import IconFacebook from '../../../../assets/icons/facebook.svg';
+import IconInstagram from '../../../../assets/icons/instagram.svg';
+import IconTwitter from '../../../../assets/icons/x(twitter).svg';
+import IconYouTube from '../../../../assets/icons/youtube.svg';
+import IconGlobe from '../../../../assets/icons/bottom-navigation/globe.svg';
+import IconLink from '../../../../assets/icons/link.svg';
+import GearIcon from '../../../../assets/icons/gear.svg';
 
 const Tab = createMaterialTopTabNavigator();
 
-// TODO: refactor + connect with API
-
 type Props = {
   navigation: NavigationProp<any>;
 };
 
 const ProfileScreen: FC<Props> = ({ navigation }) => {
-  const token = storage.get('token', StoreType.STRING);
+  const token = storage.get('token', StoreType.STRING) as string;
 
-  const { data, error } = usePostGetProfileQuery(String(token), true);
+  const { data, error } = usePostGetProfileInfoQuery(token, true);
 
   if (!data) return <Text>Loading</Text>;
 
@@ -69,48 +46,43 @@ const ProfileScreen: FC<Props> = ({ navigation }) => {
         <View>
           <Image
             style={{ borderRadius: 64 / 2, width: 64, height: 64 }}
-            source={{
-              uri: API_HOST + '/img/avatars/' + data.avatar
-            }}
+            source={{ uri: API_HOST + data.avatar }}
           />
         </View>
-        <View>
-          <Text style={[styles.headerText, { fontSize: getFontSize(18) }]}>
+        <View style={{ gap: 5, width: '75%' }}>
+          <Text style={[styles.headerText, { fontSize: getFontSize(18), flex: 0 }]}>
             {data.first_name} {data.last_name}
           </Text>
-          <View style={{ display: 'flex', flexDirection: 'row', alignItems: 'center', gap: 10 }}>
-            <Image
-              source={{
-                uri: API_HOST + '/img/flags_new/' + data.homebase + '.png'
-              }}
-              style={styles.countryFlag}
-            />
-            <Image
-              source={{
-                uri: 'https://upload.wikimedia.org/wikipedia/commons/b/b6/Flag_of_Canada.png'
+          <View style={{ display: 'flex', justifyContent: 'space-between', flexDirection: 'row' }}>
+            <View
+              style={{
+                display: 'flex',
+                flexDirection: 'row',
+                gap: 10,
+                alignItems: 'center'
               }}
-              style={[styles.countryFlag, { marginLeft: -15 }]}
-            />
-            <Text>Age: {getYears(data.date_of_birth)}</Text>
+            >
+              <Text
+                style={{ color: Colors.DARK_BLUE, fontWeight: '600', fontSize: getFontSize(12) }}
+              >
+                Age: {getYears(data.date_of_birth)}
+              </Text>
+              <Image source={{ uri: API_HOST + data.homebase_flag }} style={styles.countryFlag} />
+              {data.homebase2_flag ? (
+                <Image
+                  source={{ uri: API_HOST + data.homebase2_flag }}
+                  style={[styles.countryFlag, { marginLeft: -15 }]}
+                />
+              ) : null}
+            </View>
+
+            <View>
+              <TouchableOpacity onPress={() => navigation.navigate(NAVIGATION_PAGES.SETTINGS)}>
+                <GearIcon fill={Colors.DARK_BLUE} />
+              </TouchableOpacity>
+            </View>
           </View>
         </View>
-        <View>
-          <TouchableOpacity
-            style={{
-              width: 40,
-              height: 40,
-              borderRadius: 40 / 2,
-              borderWidth: 1,
-              borderColor: Colors.LIGHT_GRAY,
-              display: 'flex',
-              justifyContent: 'center',
-              alignItems: 'center'
-            }}
-            onPress={() => navigation.navigate(NAVIGATION_PAGES.EDIT_PERSONAL_INFO)}
-          >
-            <PenIcon />
-          </TouchableOpacity>
-        </View>
       </View>
       <Tab.Navigator
         screenOptions={{
@@ -123,10 +95,20 @@ const ProfileScreen: FC<Props> = ({ navigation }) => {
         <Tab.Screen
           name="Personal Info"
           component={() => (
-            <PersonalInfo data={{ bio: data.bio, date_of_birth: data.date_of_birth }} />
+            <PersonalInfo
+              data={{
+                bio: data.bio,
+                date_of_birth: data.date_of_birth,
+                scores: data.scores,
+                links: data.links,
+                homebase: data.homebase_name,
+                homebase2: data.homebase2_name,
+                series: data.series
+              }}
+            />
           )}
         />
-        <Tab.Screen name="Visited Regions" component={() => <Text>Visited Regions</Text>} />
+        <Tab.Screen name="Ranking" component={() => <Text>Visited Regions</Text>} />
         <Tab.Screen name="Photos" component={() => <Text>Photos</Text>} />
       </Tab.Navigator>
     </PageWrapper>
@@ -137,97 +119,70 @@ type PersonalInfoProps = {
   data: {
     bio: string;
     date_of_birth: string;
+    scores: Score[];
+    links: {
+      f?: SocialData;
+      t?: SocialData;
+      i?: SocialData;
+      y?: SocialData;
+      www?: SocialData;
+      other?: SocialData;
+    };
+    homebase: string;
+    homebase2: string;
+    series: Series[];
   };
 };
 
 const PersonalInfo: FC<PersonalInfoProps> = ({ data }) => {
   return (
     <View style={{ marginTop: 20, gap: 20 }}>
-      <InfoItem inline={true} title={'Visited Regions'}>
-        {regions.map((data) => (
-          <View style={{ display: 'flex', flexDirection: 'column', gap: 5, alignItems: 'center' }}>
-            <Text
-              style={{
-                fontFamily: 'redhat-700',
-                color: Colors.DARK_BLUE,
-                fontSize: getFontSize(14)
-              }}
+      <InfoItem inline={true} title={'RANKING'}>
+        {data.scores?.map((data) => {
+          if (!data.score) return null;
+          return (
+            <View
+              style={{ display: 'flex', flexDirection: 'column', gap: 5, alignItems: 'center' }}
             >
-              {data.count}
-            </Text>
-            <Text style={{ color: 'rgba(62, 100, 113, 1)', fontSize: getFontSize(12) }}>
-              {data.name}
-            </Text>
+              <Text style={[styles.headerText, { flex: 0 }]}>{data.score}</Text>
+              <Text style={[styles.titleText, { flex: 0 }]}>{data.name}</Text>
+            </View>
+          );
+        })}
+      </InfoItem>
+      <InfoItem inline={true} title={'SERIES BADGES'}>
+        {data.series.map((data) => (
+          <View style={{ display: 'flex', flexDirection: 'column', gap: 5, alignItems: 'center' }}>
+            <Image source={{ uri: API_HOST + data.icon_png }} style={{ width: 28, height: 28 }} />
+            <Text style={[styles.headerText, { flex: 0 }]}>{data.score}</Text>
           </View>
         ))}
       </InfoItem>
       <View style={{ display: 'flex', flexDirection: 'row' }}>
-        <Text
-          style={{
-            flex: 1,
-            fontFamily: 'redhat-700',
-            color: Colors.DARK_BLUE,
-            fontSize: getFontSize(14)
-          }}
-        >
-          Date of birth
-        </Text>
-        <Text
-          style={{
-            flex: 1,
-            color: 'rgba(62, 100, 113, 1)',
-            fontWeight: '400',
-            fontSize: getFontSize(14)
-          }}
-        >
-          {data.date_of_birth}
-        </Text>
+        <Text style={styles.headerText}>DATE OF BIRTH</Text>
+        <Text style={styles.titleText}>{new Date(data.date_of_birth).toDateString()}</Text>
       </View>
       <View style={{ display: 'flex', flexDirection: 'row' }}>
-        <Text
-          style={{
-            flex: 1,
-            fontFamily: 'redhat-700',
-            color: Colors.DARK_BLUE,
-            fontSize: getFontSize(14)
-          }}
-        >
-          Region of origin
-        </Text>
-        <Text
-          style={{
-            flex: 1,
-            color: 'rgba(62, 100, 113, 1)',
-            fontWeight: '400',
-            fontSize: getFontSize(14)
-          }}
-        >
-          Greece - Attica, Central and West (Athens, Lamia, Agrinio)
-        </Text>
+        <Text style={styles.headerText}>REGION OF ORIGIN</Text>
+        <Text style={styles.titleText}>{data.homebase}</Text>
       </View>
-      <InfoItem title={'Bio'}>
-        <Text>{data.bio}</Text>
+      {data.homebase2 ? (
+        <View style={{ display: 'flex', flexDirection: 'row' }}>
+          <Text style={styles.headerText}>SECOND REGION</Text>
+          <Text style={styles.titleText}>{data.homebase2}</Text>
+        </View>
+      ) : null}
+      <InfoItem title={'BIO'}>
+        <Text style={[styles.titleText, { flex: 0 }]}>{data.bio}</Text>
       </InfoItem>
-      <InfoItem title={'Social links'}>
-        <View style={{ display: 'flex', flexDirection: 'row', gap: 10 }}>
-          <Image
-            style={{ width: 20, height: 20 }}
-            source={{
-              uri: 'https://upload.wikimedia.org/wikipedia/commons/6/6c/Facebook_Logo_2023.png'
-            }}
-          />
-          <Image
-            style={{ width: 20, height: 20 }}
-            source={{
-              uri: 'https://upload.wikimedia.org/wikipedia/commons/a/a5/Instagram_icon.png'
-            }}
-          />
-          <Image
-            style={{ width: 20, height: 20 }}
-            source={{
-              uri: 'https://w7.pngwing.com/pngs/208/269/png-transparent-youtube-play-button-computer-icons-youtube-youtube-logo-angle-rectangle-logo-thumbnail.png'
-            }}
-          />
+      <InfoItem title={'SOCIAL LINKS'}>
+        <View style={{ display: 'flex', flexDirection: 'row', gap: 15, alignItems: 'center' }}>
+          {data.links.f?.link ? <IconFacebook fill={Colors.DARK_BLUE} /> : null}
+          {data.links.i?.link ? <IconInstagram fill={Colors.DARK_BLUE} /> : null}
+          {data.links.t?.link ? <IconTwitter fill={Colors.DARK_BLUE} /> : null}
+          {data.links.y?.link ? <IconYouTube fill={Colors.DARK_BLUE} /> : null}
+          {data.links.www?.link ? <IconGlobe fill={Colors.DARK_BLUE} /> : null}
+          {data.links.other?.link ? <IconLink fill={Colors.DARK_BLUE} /> : null}
         </View>
       </InfoItem>
     </View>
@@ -240,7 +195,7 @@ const InfoItem: FC<{ title: string; inline?: boolean; children: ReactNode }> = (
   children
 }) => (
   <View>
-    <Text style={styles.headerText}>{title}</Text>
+    <Text style={[styles.headerText, { flex: 0 }]}>{title}</Text>
     <View
       style={{
         display: 'flex',

+ 17 - 0
src/screens/InAppScreens/ProfileScreen/styles.ts

@@ -11,15 +11,32 @@ export const styles = StyleSheet.create({
     gap: 20
   },
   headerText: {
+    flex: 1,
     fontFamily: 'redhat-700',
     color: Colors.DARK_BLUE,
     fontSize: getFontSize(14)
   },
+  titleText: {
+    flex: 1,
+    color: Colors.DARK_BLUE,
+    fontWeight: '600',
+    fontSize: getFontSize(13)
+  },
   countryFlag: {
     width: 20,
     height: 20,
     borderRadius: 20 / 2,
     borderWidth: 0.5,
     borderColor: 'gray'
+  },
+  settingsButton: {
+    width: 40,
+    height: 40,
+    borderRadius: 40 / 2,
+    borderWidth: 1,
+    borderColor: Colors.LIGHT_GRAY,
+    display: 'flex',
+    justifyContent: 'center',
+    alignItems: 'center'
   }
 });

+ 1 - 1
src/screens/LoginScreen/index.tsx

@@ -10,7 +10,7 @@ import { ButtonVariants } from '../../types/components';
 import { storage } from '../../storage';
 import { NAVIGATION_PAGES } from '../../types';
 
-import { useLoginMutation } from '../../modules/auth/api/queries/use-post-login';
+import { useLoginMutation } from '@api/auth';
 
 type Props = {
   navigation: NavigationProp<any>;

+ 1 - 1
src/screens/RegisterScreen/EditAccount/index.tsx

@@ -8,7 +8,7 @@ import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view
 import { AvatarPicker, BigText, Button, Header, Input, PageWrapper } from '../../../components';
 import { InputDatePicker } from '../../../components/Calendar/InputDatePicker';
 import { ModalFlatList } from '../../../components/FlatList/modal-flatlist';
-import { useRegisterMutation } from '../../../modules/auth/api/queries/use-post-register';
+import { useRegisterMutation } from '@api/auth';
 import { storage } from '../../../storage';
 
 import store from '../../../storage/zustand';

+ 1 - 1
src/screens/RegisterScreen/JoinUs/index.tsx

@@ -7,7 +7,7 @@ import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view
 
 import { PageWrapper, Header, Button, BigText, CheckBox, Input } from '../../../components';
 import { NAVIGATION_PAGES } from '../../../types';
-import { useJoinTestMutation } from '../../../modules/auth/api/queries/use-post-join-test';
+import { useJoinTestMutation } from '@api/auth';
 import store from '../../../storage/zustand';
 
 type Props = {

+ 1 - 1
src/screens/ResetPasswordScreen/index.tsx

@@ -6,7 +6,7 @@ import * as yup from 'yup';
 import { PageWrapper, Header, BigText, Button, Input } from '../../components/';
 
 import { styles } from './styles';
-import { useResetPasswordMutation } from '../../modules/auth/api/queries/use-post-reset-password';
+import { useResetPasswordMutation } from '@api/auth';
 
 const ResetPasswordSchema = yup.object({
   email: yup.string().email().required()

+ 4 - 2
src/types/api.ts

@@ -15,7 +15,8 @@ export enum API_ENDPOINT {
   JOIN_TEST = 'pre-join-test',
   GET_SETTINGS_APP = 'get-settings-app',
   SET_SETTINGS_APP = 'set-settings-app',
-  SERIES = 'get-for-regions'
+  SERIES = 'get-for-regions',
+  PROFILE_INFO = 'profile-info'
 }
 
 export enum API {
@@ -26,7 +27,8 @@ export enum API {
   JOIN_TEST = `${API_ROUTE.USER}/${API_ENDPOINT.JOIN_TEST}`,
   GET_USER_SETTINGS_DATA = `${API_ROUTE.USER}/${API_ENDPOINT.GET_SETTINGS_APP}`,
   SET_USER_SETTINGS_DATA = `${API_ROUTE.USER}/${API_ENDPOINT.SET_SETTINGS_APP}`,
-  SERIES = `${API_ROUTE.SERIES}/${API_ENDPOINT.SERIES}`
+  SERIES = `${API_ROUTE.SERIES}/${API_ENDPOINT.SERIES}`,
+  PROFILE_INFO = `${API_ROUTE.USER}/${API_ENDPOINT.PROFILE_INFO}`
 }
 
 export type BaseAxiosError = AxiosError;

+ 2 - 1
src/types/navigation.ts

@@ -11,5 +11,6 @@ export enum NAVIGATION_PAGES {
   TRAVELLERS_TAB = 'Travellers',
   IN_APP_PROFILE = 'Profile',
   PROFILE_TAB = 'inAppProfile',
-  EDIT_PERSONAL_INFO = 'editPersonalInfo'
+  EDIT_PERSONAL_INFO = 'editPersonalInfo',
+  SETTINGS = 'settings'
 }

+ 5 - 1
tsconfig.json

@@ -1,6 +1,10 @@
 {
   "extends": "expo/tsconfig.base",
   "compilerOptions": {
-    "strict": true
+    "strict": true,
+    "baseUrl": ".",
+    "paths": {
+      "@api/*": ["src/modules/api/*"]
+    }
   }
 }

Vissa filer visades inte eftersom för många filer har ändrats