├── .buckconfig
├── .bundle
└── config
├── .editorconfig
├── .env.example
├── .eslintrc.js
├── .expo-shared
├── README.md
└── assets.json
├── .flowconfig
├── .gitattributes
├── .github
└── workflows
│ └── deploy-staging.yml
├── .gitignore
├── .graphqlconfig.yml
├── .prettierrc.js
├── .ruby-version
├── .watchmanconfig
├── App.tsx
├── App.web.tsx
├── Gemfile
├── Gemfile.lock
├── LICENSE
├── README.md
├── __tests__
└── App-test.tsx
├── android
├── app
│ ├── _BUCK
│ ├── build.gradle
│ ├── build_defs.bzl
│ ├── debug.keystore
│ ├── google-services.json
│ ├── proguard-rules.pro
│ └── src
│ │ ├── debug
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── treejer
│ │ │ └── ranger
│ │ │ └── ReactNativeFlipper.java
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── assets
│ │ └── fonts
│ │ │ ├── AntDesign.ttf
│ │ │ ├── Entypo.ttf
│ │ │ ├── EvilIcons.ttf
│ │ │ ├── Feather.ttf
│ │ │ ├── FontAwesome.ttf
│ │ │ ├── FontAwesome5_Brands.ttf
│ │ │ ├── FontAwesome5_Regular.ttf
│ │ │ ├── FontAwesome5_Solid.ttf
│ │ │ ├── Fontisto.ttf
│ │ │ ├── Foundation.ttf
│ │ │ ├── Ionicons.ttf
│ │ │ ├── MaterialCommunityIcons.ttf
│ │ │ ├── MaterialIcons.ttf
│ │ │ ├── Montserrat-Black.ttf
│ │ │ ├── Montserrat-BlackItalic.ttf
│ │ │ ├── Montserrat-Bold.ttf
│ │ │ ├── Montserrat-BoldItalic.ttf
│ │ │ ├── Montserrat-ExtraBold.ttf
│ │ │ ├── Montserrat-ExtraBoldItalic.ttf
│ │ │ ├── Montserrat-ExtraLight.ttf
│ │ │ ├── Montserrat-ExtraLightItalic.ttf
│ │ │ ├── Montserrat-Italic.ttf
│ │ │ ├── Montserrat-Light.ttf
│ │ │ ├── Montserrat-LightItalic.ttf
│ │ │ ├── Montserrat-Medium.ttf
│ │ │ ├── Montserrat-MediumItalic.ttf
│ │ │ ├── Montserrat-Regular.ttf
│ │ │ ├── Montserrat-SemiBold.ttf
│ │ │ ├── Montserrat-SemiBoldItalic.ttf
│ │ │ ├── Montserrat-Thin.ttf
│ │ │ ├── Montserrat-ThinItalic.ttf
│ │ │ ├── Octicons.ttf
│ │ │ ├── SimpleLineIcons.ttf
│ │ │ └── Zocial.ttf
│ │ ├── java
│ │ └── com
│ │ │ └── treejer
│ │ │ └── ranger
│ │ │ ├── MainActivity.java
│ │ │ ├── MainApplication.java
│ │ │ └── newarchitecture
│ │ │ ├── MainApplicationReactNativeHost.java
│ │ │ ├── components
│ │ │ └── MainComponentsRegistry.java
│ │ │ └── modules
│ │ │ └── MainApplicationTurboModuleManagerDelegate.java
│ │ ├── jni
│ │ ├── Android.mk
│ │ ├── MainApplicationModuleProvider.cpp
│ │ ├── MainApplicationModuleProvider.h
│ │ ├── MainApplicationTurboModuleManagerDelegate.cpp
│ │ ├── MainApplicationTurboModuleManagerDelegate.h
│ │ ├── MainComponentsRegistry.cpp
│ │ ├── MainComponentsRegistry.h
│ │ └── OnLoad.cpp
│ │ └── res
│ │ ├── drawable
│ │ ├── autofill_highlight.xml
│ │ ├── launch_screen.png
│ │ └── rn_edit_text_material.xml
│ │ ├── layout
│ │ └── launch_screen.xml
│ │ ├── mipmap-anydpi-v26
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ │ ├── mipmap-hdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_foreground.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-mdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_foreground.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_foreground.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_foreground.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher.png
│ │ ├── ic_launcher_foreground.png
│ │ └── ic_launcher_round.png
│ │ └── values
│ │ ├── colors.xml
│ │ ├── strings.xml
│ │ └── styles.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
├── apollo.config.js
├── app.json
├── assets
├── README.md
├── fonts
│ ├── Montserrat-Black.ttf
│ ├── Montserrat-BlackItalic.ttf
│ ├── Montserrat-Bold.ttf
│ ├── Montserrat-BoldItalic.ttf
│ ├── Montserrat-ExtraBold.ttf
│ ├── Montserrat-ExtraBoldItalic.ttf
│ ├── Montserrat-ExtraLight.ttf
│ ├── Montserrat-ExtraLightItalic.ttf
│ ├── Montserrat-Italic.ttf
│ ├── Montserrat-Light.ttf
│ ├── Montserrat-LightItalic.ttf
│ ├── Montserrat-Medium.ttf
│ ├── Montserrat-MediumItalic.ttf
│ ├── Montserrat-Regular.ttf
│ ├── Montserrat-SemiBold.ttf
│ ├── Montserrat-SemiBoldItalic.ttf
│ ├── Montserrat-Thin.ttf
│ ├── Montserrat-ThinItalic.ttf
│ └── README.md
├── icons
│ ├── README.md
│ ├── index.tsx
│ ├── map-marker.png
│ └── tree.png
└── images
│ ├── README.md
│ ├── eastwood-message-sent-1.png
│ ├── eth.png
│ ├── goerli-logo.png
│ ├── icon.png
│ ├── index.tsx
│ ├── matic-logo.svg
│ ├── matic-network-logo-vector.png
│ ├── matic.png
│ ├── no-wallet.png
│ ├── onboarding-1.png
│ ├── onboarding-2.png
│ ├── onboarding-3.png
│ ├── qrFrame.png
│ ├── rotate.png
│ ├── sign-up.png
│ ├── splash.png
│ ├── stableCoin.png
│ ├── tree.png
│ ├── treejerCoin.png
│ └── welcome.png
├── babel.config.js
├── deploy-staging.sh
├── deploy.sh
├── globals.js
├── index.css
├── index.js
├── index.web.js
├── ios
├── GoogleService-Info.plist
├── Podfile
├── Podfile.lock
├── RangerTreejer.xcodeproj
│ ├── project.pbxproj
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── RangerTreejer.xcscheme
├── RangerTreejer.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── swiftpm
│ │ └── Package.resolved
├── RangerTreejer
│ ├── AppDelegate.h
│ ├── AppDelegate.m
│ ├── AppDelegate.mm
│ ├── Images.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ ├── App-Icon-20x20@1x.png
│ │ │ ├── App-Icon-20x20@2x.png
│ │ │ ├── App-Icon-20x20@3x.png
│ │ │ ├── App-Icon-29x29@1x.png
│ │ │ ├── App-Icon-29x29@2x.png
│ │ │ ├── App-Icon-29x29@3x.png
│ │ │ ├── App-Icon-40x40@1x.png
│ │ │ ├── App-Icon-40x40@2x.png
│ │ │ ├── App-Icon-40x40@3x.png
│ │ │ ├── App-Icon-60x60@2x.png
│ │ │ ├── App-Icon-60x60@3x.png
│ │ │ ├── App-Icon-76x76@1x.png
│ │ │ ├── App-Icon-76x76@2x.png
│ │ │ ├── App-Icon-83.5x83.5@2x.png
│ │ │ ├── Contents.json
│ │ │ └── ItunesArtwork@2x.png
│ │ ├── Contents.json
│ │ └── LaunchScreen.imageset
│ │ │ ├── Contents.json
│ │ │ ├── splashscreen_image-1.png
│ │ │ ├── splashscreen_image-2.png
│ │ │ └── splashscreen_image.png
│ ├── Info.plist
│ ├── LaunchScreen.storyboard
│ └── main.m
└── RangerTreejerTests
│ ├── Info.plist
│ └── RangerTreejerTests.m
├── metro.config.js
├── package.json
├── react-native.config.js
├── shim.js
├── src
├── README.md
├── abis
│ ├── Dai.json
│ ├── MarketPlace.json
│ ├── Planter.json
│ ├── PlanterFund.json
│ ├── README.md
│ ├── TreeFactory.json
│ └── WhitelistPaymaster.json
├── components
│ ├── Activity
│ │ ├── ActivityItem.tsx
│ │ ├── ActivityList.tsx
│ │ └── README.md
│ ├── Analytics
│ │ ├── Analytics.tsx
│ │ └── README.md
│ ├── AppLoading
│ │ ├── AppLoading.tsx
│ │ ├── ContainerLoading.tsx
│ │ ├── Loading.tsx
│ │ └── README.md
│ ├── AppVersion
│ │ ├── AppVersion.tsx
│ │ ├── README.md
│ │ └── index.tsx
│ ├── Avatar
│ │ ├── Avatar.tsx
│ │ ├── README.md
│ │ └── index.ts
│ ├── BackgroundEntropy
│ │ ├── BackgroundEntropy.tsx
│ │ ├── README.md
│ │ └── index.ts
│ ├── Button
│ │ ├── Button.tsx
│ │ ├── README.md
│ │ └── index.tsx
│ ├── Card
│ │ ├── Card.tsx
│ │ ├── README.md
│ │ └── index.ts
│ ├── CheckingPermissions
│ │ ├── BlockedPermissions.tsx
│ │ ├── CheckingPermissions.tsx
│ │ ├── PermissionItem.tsx
│ │ └── README.md
│ ├── Common
│ │ └── Hr.tsx
│ ├── EmptyList
│ │ └── EmptyList.tsx
│ ├── FileInput
│ │ ├── FileInput.tsx
│ │ ├── FileInput.web.tsx
│ │ └── README.md
│ ├── Filter
│ │ └── FilterList.tsx
│ ├── HeaderFixedButtons
│ │ ├── ChatButton.tsx
│ │ └── HeaderFixedButtons.tsx
│ ├── Icons
│ │ ├── Check.tsx
│ │ ├── ChevronLeft.tsx
│ │ ├── ChevronRight.tsx
│ │ ├── GreenBlock.tsx
│ │ ├── Plus.tsx
│ │ ├── README.md
│ │ ├── Times.tsx
│ │ ├── Toast.tsx
│ │ ├── Tree.tsx
│ │ ├── User.tsx
│ │ └── index.ts
│ ├── KeyboardDismiss
│ │ ├── KeyboardDismiss.tsx
│ │ ├── README.md
│ │ └── index.ts
│ ├── LandScapeModal
│ │ ├── LandScapeModal.tsx
│ │ └── README.md
│ ├── MagicWallet
│ │ ├── ProfileMagicWallet.tsx
│ │ └── README.md
│ ├── Map
│ │ ├── Map.tsx
│ │ ├── Map.web.tsx
│ │ ├── MapController.tsx
│ │ ├── MapDetail.tsx
│ │ ├── PlaceItem.tsx
│ │ ├── PlacesList.tsx
│ │ ├── README.md
│ │ ├── SearchBox.tsx
│ │ ├── index.tsx
│ │ └── types.ts
│ ├── NetInfo
│ │ ├── NetInfo.tsx
│ │ ├── README.md
│ │ └── index.ts
│ ├── PreloadImage
│ │ ├── PreLoadImage.tsx
│ │ └── README.md
│ ├── Profile
│ │ └── ProfileGroupButton.tsx
│ ├── ProgressCircles
│ │ ├── ProgressCircles.tsx
│ │ ├── README.md
│ │ └── index.ts
│ ├── PullToRefresh
│ │ ├── PullToRefresh.tsx
│ │ ├── PullToRefresh.web.tsx
│ │ └── README.md
│ ├── PwaModal
│ │ ├── PwaModal.tsx
│ │ └── README.md
│ ├── QrReader
│ │ ├── QrReader.tsx
│ │ ├── QrReader.web.tsx
│ │ └── README.md
│ ├── README.md
│ ├── RadioButton
│ │ ├── README.md
│ │ └── RadioButton.tsx
│ ├── RefreshControl
│ │ ├── README.md
│ │ └── RefreshControl.tsx
│ ├── ScreenTitle
│ │ ├── README.md
│ │ ├── ScreenTitle.tsx
│ │ └── ScreenTitleWithoutNavigation.tsx
│ ├── ShimmerPlaceholder
│ │ ├── README.md
│ │ ├── index.tsx
│ │ └── index.web.tsx
│ ├── Spacer
│ │ ├── README.md
│ │ ├── Spacer.tsx
│ │ └── index.ts
│ ├── StartPlantButton
│ │ └── StartPlantButton.tsx
│ ├── Steps
│ │ ├── README.md
│ │ ├── Steps.tsx
│ │ └── index.ts
│ ├── SubmitTreeModal
│ │ ├── README.md
│ │ └── SubmitTreeModal.tsx
│ ├── SubmitTreeOfflineWebModal
│ │ ├── README.md
│ │ └── SubmitTreeOfflineWebModal.tsx
│ ├── SwitchNetwork
│ │ ├── ConfirmationNetwork.tsx
│ │ ├── NetworkItem.tsx
│ │ ├── README.md
│ │ ├── SelectNetwork.tsx
│ │ └── SwitchNetwork.tsx
│ ├── TabBar
│ │ ├── README.md
│ │ └── TabBar.tsx
│ ├── TextField
│ │ ├── README.md
│ │ ├── TextField.tsx
│ │ └── index.tsx
│ ├── Toast
│ │ ├── CustomToast.tsx
│ │ ├── README.md
│ │ └── ToastContainer.tsx
│ ├── TreeList
│ │ ├── NoInternetTrees.tsx
│ │ ├── README.md
│ │ ├── TreeColorsInfoModal.tsx
│ │ ├── TreeFilterItem.tsx
│ │ ├── TreeImage.tsx
│ │ ├── TreeList.tsx
│ │ ├── TreeSymbol.tsx
│ │ └── index.ts
│ ├── UpdateModal
│ │ ├── README.md
│ │ └── UpdateModal.tsx
│ ├── UserCard
│ │ ├── README.md
│ │ ├── UserCard.tsx
│ │ └── index.ts
│ ├── WebCam
│ │ ├── README.md
│ │ └── WebCam.tsx
│ ├── Withdraw
│ │ ├── AboutWithdraw.tsx
│ │ ├── DaiCoinBalance.tsx
│ │ ├── README.md
│ │ ├── SubmitTransfer.tsx
│ │ ├── TransactionItem.tsx
│ │ ├── TransactionList.tsx
│ │ ├── TransferConfirmationModal.tsx
│ │ └── TransferInput.tsx
│ └── plantModels
│ │ ├── EmptyModelsList.tsx
│ │ └── PlantModelItem.tsx
├── constants
│ ├── README.md
│ ├── styles.ts
│ └── values.ts
├── data
│ ├── README.md
│ └── schema
│ │ ├── README.md
│ │ ├── treejer_api-types
│ │ ├── README.md
│ │ └── index.ts
│ │ └── treejer_api.graphql
├── global.d.ts
├── localization
│ ├── README.md
│ ├── en.ts
│ ├── fa.ts
│ └── index.tsx
├── navigation
│ ├── InitNavigation.tsx
│ ├── Navigation.tsx
│ ├── README.md
│ ├── UnVerifiedUser.tsx
│ ├── VerifiedUser.tsx
│ └── index.tsx
├── redux
│ ├── README.md
│ ├── modules
│ │ ├── README.md
│ │ ├── contracts
│ │ │ ├── README.md
│ │ │ └── contracts.ts
│ │ ├── countris
│ │ │ └── countries.ts
│ │ ├── init
│ │ │ ├── README.md
│ │ │ └── init.ts
│ │ ├── netInfo
│ │ │ ├── README.md
│ │ │ └── netInfo.ts
│ │ ├── offlineMap
│ │ │ ├── offlineMap.ts
│ │ │ └── offlineMap.web.ts
│ │ ├── profile
│ │ │ ├── README.md
│ │ │ └── profile.ts
│ │ ├── recentPlaces
│ │ │ └── recentPlaces.ts
│ │ ├── searchPlaces
│ │ │ └── searchPlaces.ts
│ │ ├── settings
│ │ │ ├── README.md
│ │ │ └── settings.ts
│ │ ├── userNonce
│ │ │ ├── README.md
│ │ │ └── userNonce.ts
│ │ ├── userSign
│ │ │ ├── README.md
│ │ │ └── userSign.ts
│ │ └── web3
│ │ │ ├── README.md
│ │ │ └── web3.ts
│ ├── reducer.ts
│ ├── saga.ts
│ └── store.ts
├── screens
│ ├── GreenBlock
│ │ ├── GreenBlock.tsx
│ │ ├── README.md
│ │ └── screens
│ │ │ ├── MyCommunity
│ │ │ ├── README.md
│ │ │ └── graphql
│ │ │ │ ├── PlanterTreesQuery.graphql
│ │ │ │ ├── PlanterTreesQuery.graphql.d.ts
│ │ │ │ ├── README.md
│ │ │ │ ├── TempTreesQuery.graphql
│ │ │ │ └── TempTreesQuery.graphql.d.ts
│ │ │ ├── README.md
│ │ │ └── TreeDetails
│ │ │ ├── README.md
│ │ │ ├── TreeDetails.tsx
│ │ │ ├── TreePhotos.tsx
│ │ │ ├── TreePhotos.web.tsx
│ │ │ ├── graphql
│ │ │ ├── README.md
│ │ │ ├── TreeDetailQuery.graphql
│ │ │ ├── TreeDetailQuery.graphql.d.ts
│ │ │ └── TreeDetailsQuery.graphql.d.ts
│ │ │ └── index.ts
│ ├── Onboarding
│ │ ├── README.md
│ │ └── screens
│ │ │ ├── OnboardingSlides
│ │ │ ├── OnboardingSlides.tsx
│ │ │ ├── OnboardingSlides.web.tsx
│ │ │ └── README.md
│ │ │ ├── README.md
│ │ │ └── SelectLanguage
│ │ │ ├── README.md
│ │ │ ├── SelectLanguage.tsx
│ │ │ └── index.tsx
│ ├── Profile
│ │ ├── README.md
│ │ ├── components
│ │ │ ├── README.md
│ │ │ ├── SupportItem.tsx
│ │ │ └── supportList.ts
│ │ └── screens
│ │ │ ├── Activity
│ │ │ ├── Activity.tsx
│ │ │ └── graphQl
│ │ │ │ ├── getUserActivites.graphql
│ │ │ │ └── getUserActivites.graphql.d.ts
│ │ │ ├── MyProfile
│ │ │ ├── Invite.tsx
│ │ │ ├── MyProfile.tsx
│ │ │ ├── README.md
│ │ │ ├── graphql
│ │ │ │ ├── PlanterMinWithdrawableBalanceQuery.graphql
│ │ │ │ ├── PlanterMinWithdrawableBalanceQuery.graphql.d.ts
│ │ │ │ ├── PlanterStatusQuery.graphql
│ │ │ │ ├── PlanterStatusQuery.graphql.d.ts
│ │ │ │ ├── PlanterTreesCountQuery.graphql
│ │ │ │ ├── PlanterTreesCountQuery.graphql.d.ts
│ │ │ │ ├── PlanterWithdrawableBalanceQuery.graphql
│ │ │ │ ├── PlanterWithdrawableBalanceQuery.graphql.d.ts
│ │ │ │ └── README.md
│ │ │ └── index.tsx
│ │ │ ├── NoWallet
│ │ │ ├── NoWallet.tsx
│ │ │ ├── README.md
│ │ │ ├── SocialLoginButton.tsx
│ │ │ └── index.ts
│ │ │ ├── OfflineMap
│ │ │ ├── OfflineMap.tsx
│ │ │ ├── OfflineMap.web.tsx
│ │ │ └── README.md
│ │ │ ├── README.md
│ │ │ ├── SavedAreas
│ │ │ ├── README.md
│ │ │ ├── SavedAreas.tsx
│ │ │ └── SavedAreas.web.tsx
│ │ │ ├── SelectOnMapVerifyProfile
│ │ │ ├── README.md
│ │ │ ├── SelectOnMapVerifyProfile.tsx
│ │ │ └── index.tsx
│ │ │ ├── Settings
│ │ │ ├── README.md
│ │ │ ├── SettingsScreen.tsx
│ │ │ └── index.tsx
│ │ │ ├── Support
│ │ │ ├── README.md
│ │ │ └── SupportScreen.tsx
│ │ │ ├── VerifyPending
│ │ │ ├── README.md
│ │ │ ├── VerifyPending.tsx
│ │ │ └── index.tsx
│ │ │ └── VerifyProfile
│ │ │ ├── README.md
│ │ │ ├── ResendCodeButton.tsx
│ │ │ ├── VerifyProfile.tsx
│ │ │ ├── graphql
│ │ │ ├── README.md
│ │ │ ├── SendSMSMutation.graphql
│ │ │ ├── SendSMSMutation.graphql.d.ts
│ │ │ ├── UpdateMobileMutation.graphql
│ │ │ ├── UpdateMobileMutation.graphql.d.ts
│ │ │ ├── UserApplyMutation.graphql
│ │ │ ├── UserApplyMutation.graphql.d.ts
│ │ │ ├── VerifyMobileMutation.graphql
│ │ │ ├── VerifyMobileMutation.graphql.d.ts
│ │ │ ├── VerifyUserMutation.graphql
│ │ │ └── VerifyUserMutation.graphql.d.ts
│ │ │ └── index.tsx
│ ├── README.md
│ ├── TreeSubmission
│ │ ├── README.md
│ │ ├── TreeSubmission.tsx
│ │ ├── components
│ │ │ ├── CheckPermissions
│ │ │ │ ├── CheckOfflineMaps.tsx
│ │ │ │ ├── CheckPermissions.tsx
│ │ │ │ └── README.md
│ │ │ ├── MapMarking
│ │ │ │ ├── Map.tsx
│ │ │ │ ├── Map.web.tsx
│ │ │ │ ├── MapMarking.tsx
│ │ │ │ ├── MapMarking.web.tsx
│ │ │ │ └── README.md
│ │ │ ├── Models
│ │ │ │ ├── CreateModelForm.tsx
│ │ │ │ ├── CreateModelInput.tsx
│ │ │ │ └── PlantModelButtons.tsx
│ │ │ ├── README.md
│ │ │ └── TreeSubmissionStepper
│ │ │ │ ├── README.md
│ │ │ │ ├── TreeSubmissionStepper.tsx
│ │ │ │ └── index.tsx
│ │ ├── index.tsx
│ │ ├── screens
│ │ │ ├── README.md
│ │ │ ├── SelectModels
│ │ │ │ ├── CreateModel.tsx
│ │ │ │ ├── SelectModels.tsx
│ │ │ │ └── graphql
│ │ │ │ │ ├── getPlantingModelsQuery.graphql
│ │ │ │ │ └── getPlantingModelsQuery.graphql.d.ts
│ │ │ ├── SelectOnMap
│ │ │ │ ├── README.md
│ │ │ │ ├── SelectOnMap.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── SelectPhoto
│ │ │ │ ├── PickImageButton.tsx
│ │ │ │ ├── README.md
│ │ │ │ ├── SelectPhoto.tsx
│ │ │ │ ├── SelectPhotoButton.tsx
│ │ │ │ └── WebImagePickerCropper.tsx
│ │ │ ├── SelectPlantType
│ │ │ │ ├── README.md
│ │ │ │ ├── SelectPlantType.tsx
│ │ │ │ └── index.ts
│ │ │ └── SubmitTree
│ │ │ │ ├── README.md
│ │ │ │ ├── SubmitTree.tsx
│ │ │ │ └── index.ts
│ │ └── types.ts
│ └── Withdraw
│ │ ├── README.md
│ │ ├── Withdraw.tsx
│ │ ├── components
│ │ ├── README.md
│ │ ├── TransferForm.tsx
│ │ └── WithdrawSection.tsx
│ │ └── screens
│ │ ├── README.md
│ │ ├── Transfer
│ │ ├── README.md
│ │ └── TransferScreen.tsx
│ │ └── WithrawHistory
│ │ ├── README.md
│ │ ├── TransactionHistory.tsx
│ │ └── graphql
│ │ ├── getTransactionHistoryQuery.graphql
│ │ └── getTransactionHistoryQuery.graphql.d.ts
├── service-worker.js
├── serviceWorkerRegistration.js
├── services
│ ├── Biconomy.ts
│ ├── Magic.tsx
│ ├── Magic.web.tsx
│ ├── README.md
│ ├── apollo.tsx
│ ├── config.ts
│ ├── currentJourney.tsx
│ ├── graphql
│ │ ├── GetMeQuery.graphql
│ │ ├── GetMeQuery.graphql.d.ts
│ │ ├── README.md
│ │ ├── Settings.graphql
│ │ └── Settings.graphql.d.ts
│ └── types.ts
├── toast.d.ts
├── types.ts
└── utilities
│ ├── README.md
│ ├── helpers
│ ├── IPFS.ts
│ ├── README.md
│ ├── alert.ts
│ ├── capitalize.ts
│ ├── checkExif.ts
│ ├── cropImage.js
│ ├── date.ts
│ ├── distanceCalculator.ts
│ ├── distanceInMeters.ts
│ ├── documentTitle.ts
│ ├── error.ts
│ ├── fetch.ts
│ ├── getStaticMapUrl.ts
│ ├── hex.ts
│ ├── inventory.ts
│ ├── inventoryConstants.ts
│ ├── isFilterSelected.ts
│ ├── language.ts
│ ├── maps.ts
│ ├── permissions.ts
│ ├── permissions.web.ts
│ ├── screen.ts
│ ├── sendTransaction.ts
│ ├── shortenedString.ts
│ ├── submitTree.ts
│ ├── tree.ts
│ ├── urlToBlob.ts
│ ├── validators.ts
│ ├── web.ts
│ └── web3Error.ts
│ └── hooks
│ ├── README.md
│ ├── index.tsx
│ ├── useAnalytics.ts
│ ├── useAnalytics.web.ts
│ ├── useAppState.ts
│ ├── useBrowserName.ts
│ ├── useBrowserPlatform.ts
│ ├── useCamera.ts
│ ├── useCamera.web.ts
│ ├── useCheckTreePhoto.ts
│ ├── useCheckTreePhoto.web.ts
│ ├── useDebounce.ts
│ ├── useDeepLinking.ts
│ ├── useGetPlantModelsQuery.ts
│ ├── useGetTransactionHistory.ts
│ ├── useGetUserActivitiesQuery.ts
│ ├── useInAppBrowser.tsx
│ ├── useNetInfo.ts
│ ├── useOfflineTrees.tsx
│ ├── useOrientation.ts
│ ├── usePagination.ts
│ ├── usePlantTreePermissions.ts
│ ├── usePlantTreePermissions.web.ts
│ ├── usePlantedTrees.ts
│ ├── usePlanterStatusQuery.ts
│ ├── useRefocusEffect.ts
│ ├── useStore.ts
│ ├── useTempTrees.ts
│ ├── useTimer.ts
│ ├── useTransition.ts
│ ├── useTreeUpdateInterval.ts
│ └── useWindowSize.ts
├── translations
├── README-es.md
└── README-pt-br.md
├── tsconfig.json
├── web
├── README.md
├── index.html
└── robots.txt
├── webpack.config.ts
└── yarn.lock
/.buckconfig:
--------------------------------------------------------------------------------
1 |
2 | [android]
3 | target = Google Inc.:Google APIs:23
4 |
5 | [maven_repositories]
6 | central = https://repo1.maven.org/maven2
7 |
--------------------------------------------------------------------------------
/.bundle/config:
--------------------------------------------------------------------------------
1 | BUNDLE_PATH: "vendor/bundle"
2 | BUNDLE_FORCE_RUBY_PLATFORM: 1
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # Windows files
2 | [*.bat]
3 | end_of_line = crlf
4 |
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: [
4 | // 'plugin:@shopify/typescript',
5 | // 'plugin:@shopify/graphql',
6 | // 'plugin:@shopify/react',
7 | // 'plugin:@shopify/prettier',
8 | '@react-native-community',
9 | ],
10 | plugins: ['unused-imports'],
11 | rules: {
12 | 'no-shadow': 'off',
13 | 'no-undef': 'off',
14 | 'no-unused-vars': 'off',
15 | 'unused-imports/no-unused-imports': 'off',
16 | '@typescript-eslint/no-unused-vars': 'off',
17 | 'no-console': 0,
18 | 'unused-imports/no-unused-vars': [
19 | 'warn',
20 | {vars: 'all', varsIgnorePattern: '^_', args: 'after-used', argsIgnorePattern: '^_'},
21 | ],
22 | 'react/no-unescaped-entities': 'off',
23 | },
24 | ignorePatterns: ['*.graphql.d.ts', '*.graphql', 'data'],
25 | };
26 |
--------------------------------------------------------------------------------
/.expo-shared/README.md:
--------------------------------------------------------------------------------
1 | > Why do I have a folder named ".expo-shared" in my project?
2 |
3 | The ".expo-shared" folder is created when running commands that produce state that is intended to be shared with all developers on the project. For example, "npx expo-optimize".
4 |
5 | > What does the "assets.json" file contain?
6 |
7 | The "assets.json" file describes the assets that have been optimized through "expo-optimize" and do not need to be processed again.
8 |
9 | > Should I commit the ".expo-shared" folder?
10 |
11 | Yes, you should share the ".expo-shared" folder with your collaborators.
12 |
--------------------------------------------------------------------------------
/.expo-shared/assets.json:
--------------------------------------------------------------------------------
1 | {
2 | "1a6396d0e0de07791be528b08d5071bc0e1bbb1f200eee3f6b3b3ee5e00c0e77": true,
3 | "3dcc047dd8502d8cd4ade6361aa2b7713171e0b3f3d827fca260c2b5e340c2cc": true,
4 | "cc6b5b9732e5d35d935ca83750f0bb122d2bde986ed1d9a1b189e1e57a3173d6": true,
5 | "32362529423832e249111e4d0094a1b768cd39cadc93e377a269aa23868bd16c": true,
6 | "4f477b6858b944318738d72fd1552157b074ebfe7339910dbc1e117ac2a91f29": true,
7 | "1e6c8163dc6ce97aedccd62973c229e08bbad8d9550187f8f28ee04be75a2825": true,
8 | "e312c5d9f285fbaf8d3ed320aaa8f8638d82f7e9d4ea152a6ff5d8ece60c49ca": true,
9 | "8793dacfe1ab40df188496fc61968531f383f62b394d03fb59aed1f1900e242d": true,
10 | "a553ebb87842ba4cf2f8d1d3ebc2e0cfbadb804395181f3d46569ddf2170bb74": true,
11 | "e259f8709819797619f4fd7e4da847936093749069a6f28ded49eca8ceb55cc6": true,
12 | "af71c2baab888441ab37c03e6299779818282f6ccdb331c035be062dbd681d2e": true,
13 | "bd7135d7dc35f854feb556d19bc7d5edaa76559e19546f37573be638d562255a": true,
14 | "daec73daa67627cf5800e3952763ffc09444004f6797a84c82a18c253bff9262": true
15 | }
16 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Windows files should use crlf line endings
2 | # https://help.github.com/articles/dealing-with-line-endings/
3 | *.bat text eol=crlf
4 |
--------------------------------------------------------------------------------
/.github/workflows/deploy-staging.yml:
--------------------------------------------------------------------------------
1 | name: Deploy Staging
2 | on:
3 | push:
4 | branches:
5 | - expo-web
6 | jobs:
7 | Deploy-Staging:
8 | runs-on: ubuntu-latest
9 | steps:
10 | - run: echo "Deploying started"
11 | - name: Check out repository code
12 | uses: actions/checkout@v3
13 | # - run: yarn
14 | # - run: yarn web:prod-github
15 | # - run: ./deploy-staging.sh
16 |
--------------------------------------------------------------------------------
/.graphqlconfig.yml:
--------------------------------------------------------------------------------
1 | projects:
2 | treejer_api:
3 | schemaPath: './src/data/schema/treejer_api.graphql'
4 | includes:
5 | - './src/**/*.graphql'
6 |
--------------------------------------------------------------------------------
/.prettierrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | arrowParens: "avoid",
3 | singleQuote: true,
4 | bracketSpacing: false,
5 | trailingComma: "all",
6 | printWidth: 120
7 | }
8 |
--------------------------------------------------------------------------------
/.ruby-version:
--------------------------------------------------------------------------------
1 | 2.7.4
--------------------------------------------------------------------------------
/.watchmanconfig:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/App.tsx:
--------------------------------------------------------------------------------
1 | // @ts-ignore
2 | import React, {useEffect} from 'react';
3 | import SplashScreen from 'react-native-splash-screen';
4 | import {isWeb} from './src/utilities/helpers/web';
5 | import {i18next} from './src/localization';
6 | import {I18nextProvider} from 'react-i18next';
7 | import {useInitialDeepLinking} from './src/utilities/hooks/useDeepLinking';
8 | import {Provider} from 'react-redux';
9 | import {persistor, store} from './src/redux/store';
10 | import {PersistGate} from 'redux-persist/integration/react';
11 | import {InitNavigation} from './src/navigation/InitNavigation';
12 | import {SafeAreaProvider} from 'react-native-safe-area-context';
13 | import MapboxGL from '@rnmapbox/maps';
14 | import {mapboxPrivateToken} from './src/services/config';
15 |
16 | export default function App() {
17 | useInitialDeepLinking();
18 |
19 | useEffect(() => {
20 | (async function () {
21 | try {
22 | if (!isWeb()) {
23 | SplashScreen.hide();
24 | }
25 | await MapboxGL.setAccessToken(mapboxPrivateToken);
26 | } catch (e) {
27 | console.log(e, 'e is here App.tsx');
28 | }
29 | })();
30 | }, []);
31 |
32 | return (
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | );
43 | }
44 |
--------------------------------------------------------------------------------
/App.web.tsx:
--------------------------------------------------------------------------------
1 | // @ts-ignore
2 | import React, {useEffect} from 'react';
3 | import {i18next} from './src/localization';
4 | import {I18nextProvider} from 'react-i18next';
5 | import {useInitialDeepLinking} from './src/utilities/hooks/useDeepLinking';
6 | import {Provider} from 'react-redux';
7 | import {persistor, store} from './src/redux/store';
8 | import {PersistGate} from 'redux-persist/integration/react';
9 | import {InitNavigation} from './src/navigation/InitNavigation';
10 | import {SafeAreaProvider} from 'react-native-safe-area-context';
11 |
12 | export default function App() {
13 | useInitialDeepLinking();
14 |
15 | return (
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | );
26 | }
27 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source 'https://rubygems.org'
2 | # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
3 | ruby '2.7.4'
4 | gem 'cocoapods', '~> 1.11', '>= 1.11.2'
5 |
--------------------------------------------------------------------------------
/__tests__/App-test.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @format
3 | */
4 |
5 | import 'react-native';
6 | import React from 'react';
7 | import App from '../App';
8 |
9 | // Note: test renderer must be required after react-native.
10 | import renderer from 'react-test-renderer';
11 |
12 | it('renders correctly', () => {
13 | renderer.create();
14 | });
15 |
--------------------------------------------------------------------------------
/android/app/build_defs.bzl:
--------------------------------------------------------------------------------
1 | """Helper definitions to glob .aar and .jar targets"""
2 |
3 | def create_aar_targets(aarfiles):
4 | for aarfile in aarfiles:
5 | name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")]
6 | lib_deps.append(":" + name)
7 | android_prebuilt_aar(
8 | name = name,
9 | aar = aarfile,
10 | )
11 |
12 | def create_jar_targets(jarfiles):
13 | for jarfile in jarfiles:
14 | name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")]
15 | lib_deps.append(":" + name)
16 | prebuilt_jar(
17 | name = name,
18 | binary_jar = jarfile,
19 | )
20 |
--------------------------------------------------------------------------------
/android/app/debug.keystore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/debug.keystore
--------------------------------------------------------------------------------
/android/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/AntDesign.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/AntDesign.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Entypo.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Entypo.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/EvilIcons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/EvilIcons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Feather.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Feather.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/FontAwesome.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/FontAwesome.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/FontAwesome5_Brands.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/FontAwesome5_Brands.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/FontAwesome5_Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/FontAwesome5_Regular.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/FontAwesome5_Solid.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/FontAwesome5_Solid.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Fontisto.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Fontisto.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Foundation.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Foundation.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Ionicons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Ionicons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/MaterialIcons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/MaterialIcons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Montserrat-Black.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Montserrat-Black.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Montserrat-BlackItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Montserrat-BlackItalic.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Montserrat-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Montserrat-Bold.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Montserrat-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Montserrat-BoldItalic.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Montserrat-ExtraBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Montserrat-ExtraBold.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Montserrat-ExtraBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Montserrat-ExtraBoldItalic.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Montserrat-ExtraLight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Montserrat-ExtraLight.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Montserrat-ExtraLightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Montserrat-ExtraLightItalic.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Montserrat-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Montserrat-Italic.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Montserrat-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Montserrat-Light.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Montserrat-LightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Montserrat-LightItalic.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Montserrat-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Montserrat-Medium.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Montserrat-MediumItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Montserrat-MediumItalic.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Montserrat-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Montserrat-Regular.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Montserrat-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Montserrat-SemiBold.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Montserrat-SemiBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Montserrat-SemiBoldItalic.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Montserrat-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Montserrat-Thin.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Montserrat-ThinItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Montserrat-ThinItalic.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Octicons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Octicons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/SimpleLineIcons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/SimpleLineIcons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Zocial.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/assets/fonts/Zocial.ttf
--------------------------------------------------------------------------------
/android/app/src/main/java/com/treejer/ranger/newarchitecture/components/MainComponentsRegistry.java:
--------------------------------------------------------------------------------
1 | package com.treejer.ranger.newarchitecture.components;
2 | import com.facebook.jni.HybridData;
3 | import com.facebook.proguard.annotations.DoNotStrip;
4 | import com.facebook.react.fabric.ComponentFactory;
5 | import com.facebook.soloader.SoLoader;
6 | /**
7 | * Class responsible to load the custom Fabric Components. This class has native methods and needs a
8 | * corresponding C++ implementation/header file to work correctly (already placed inside the jni/
9 | * folder for you).
10 | *
11 | *
Please note that this class is used ONLY if you opt-in for the New Architecture (see the
12 | * `newArchEnabled` property). Is ignored otherwise.
13 | */
14 | @DoNotStrip
15 | public class MainComponentsRegistry {
16 | static {
17 | SoLoader.loadLibrary("fabricjni");
18 | }
19 | @DoNotStrip private final HybridData mHybridData;
20 | @DoNotStrip
21 | private native HybridData initHybrid(ComponentFactory componentFactory);
22 | @DoNotStrip
23 | private MainComponentsRegistry(ComponentFactory componentFactory) {
24 | mHybridData = initHybrid(componentFactory);
25 | }
26 | @DoNotStrip
27 | public static MainComponentsRegistry register(ComponentFactory componentFactory) {
28 | return new MainComponentsRegistry(componentFactory);
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/android/app/src/main/jni/MainApplicationModuleProvider.cpp:
--------------------------------------------------------------------------------
1 | #include "MainApplicationModuleProvider.h"
2 | #include
3 | namespace facebook {
4 | namespace react {
5 | std::shared_ptr MainApplicationModuleProvider(
6 | const std::string moduleName,
7 | const JavaTurboModule::InitParams ¶ms) {
8 | // Here you can provide your own module provider for TurboModules coming from
9 | // either your application or from external libraries. The approach to follow
10 | // is similar to the following (for a library called `samplelibrary`:
11 | //
12 | // auto module = samplelibrary_ModuleProvider(moduleName, params);
13 | // if (module != nullptr) {
14 | // return module;
15 | // }
16 | // return rncore_ModuleProvider(moduleName, params);
17 | return rncore_ModuleProvider(moduleName, params);
18 | }
19 | } // namespace react
20 | } // namespace facebook
21 |
--------------------------------------------------------------------------------
/android/app/src/main/jni/MainApplicationModuleProvider.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include
3 | #include
4 | #include
5 | namespace facebook {
6 | namespace react {
7 | std::shared_ptr MainApplicationModuleProvider(
8 | const std::string moduleName,
9 | const JavaTurboModule::InitParams ¶ms);
10 | } // namespace react
11 | } // namespace facebook
12 |
--------------------------------------------------------------------------------
/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 | namespace facebook {
6 | namespace react {
7 | class MainApplicationTurboModuleManagerDelegate
8 | : public jni::HybridClass<
9 | MainApplicationTurboModuleManagerDelegate,
10 | TurboModuleManagerDelegate> {
11 | public:
12 | // Adapt it to the package you used for your Java class.
13 | static constexpr auto kJavaDescriptor =
14 | "Lcom/treejer/ranger/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate;";
15 | static jni::local_ref initHybrid(jni::alias_ref);
16 | static void registerNatives();
17 | std::shared_ptr getTurboModule(
18 | const std::string name,
19 | const std::shared_ptr jsInvoker) override;
20 | std::shared_ptr getTurboModule(
21 | const std::string name,
22 | const JavaTurboModule::InitParams ¶ms) override;
23 | /**
24 | * Test-only method. Allows user to verify whether a TurboModule can be
25 | * created by instances of this class.
26 | */
27 | bool canCreateTurboModule(std::string name);
28 | };
29 | } // namespace react
30 | } // namespace facebook
31 |
--------------------------------------------------------------------------------
/android/app/src/main/jni/MainComponentsRegistry.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include
3 | #include
4 | #include
5 | #include
6 | namespace facebook {
7 | namespace react {
8 | class MainComponentsRegistry
9 | : public facebook::jni::HybridClass {
10 | public:
11 | // Adapt it to the package you used for your Java class.
12 | constexpr static auto kJavaDescriptor =
13 | "Lcom/treejer/ranger/newarchitecture/components/MainComponentsRegistry;";
14 | static void registerNatives();
15 | MainComponentsRegistry(ComponentFactory *delegate);
16 | private:
17 | static std::shared_ptr
18 | sharedProviderRegistry();
19 | static jni::local_ref initHybrid(
20 | jni::alias_ref,
21 | ComponentFactory *delegate);
22 | };
23 | } // namespace react
24 | } // namespace facebook
25 |
--------------------------------------------------------------------------------
/android/app/src/main/jni/OnLoad.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include "MainApplicationTurboModuleManagerDelegate.h"
3 | #include "MainComponentsRegistry.h"
4 | JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) {
5 | return facebook::jni::initialize(vm, [] {
6 | facebook::react::MainApplicationTurboModuleManagerDelegate::
7 | registerNatives();
8 | facebook::react::MainComponentsRegistry::registerNatives();
9 | });
10 | }
11 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/autofill_highlight.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/res/drawable/launch_screen.png
--------------------------------------------------------------------------------
/android/app/src/main/res/layout/launch_screen.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FAF8F0
4 | #FAF8F0
5 | #023c69
6 |
7 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Treejer Ranger
3 |
4 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'RangerTreejer'
2 | apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
3 | include ':app'
4 | includeBuild('../node_modules/react-native-gradle-plugin')
5 | if (settings.hasProperty("newArchEnabled") && settings.newArchEnabled == "true") {
6 | include(":ReactAndroid")
7 | project(":ReactAndroid").projectDir = file('../node_modules/react-native/ReactAndroid')
8 | }
9 | // include ':react-native-orientation', ':app'
10 | // project(':react-native-orientation').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-orientation/android')
11 |
12 | apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle")
13 | useExpoModules()
14 |
--------------------------------------------------------------------------------
/apollo.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | client: {
3 | service: {
4 | name: 'treejer_api',
5 | localSchemaFile: './src/data/schema/treejer_api.graphql',
6 | includes: './src/**/*.graphql',
7 | },
8 | excludes: 'src/data/schema/**/*',
9 | clientOnlyDirectives: ['connection', 'type', 'rest'],
10 | clientSchemaDirectives: ['client', 'rest', 'contract'],
11 | },
12 | };
13 |
--------------------------------------------------------------------------------
/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "RangerTreejer",
3 | "displayName": "Treejer Ranger",
4 | "scheme": "com.treejer.ranger",
5 | "icon": "./assets/images/icon.png",
6 | "splash": {
7 | "backgroundColor": "#FAF8F0",
8 | "image": "./assets/images/splash.png",
9 | "resizeMode": "contain"
10 | },
11 | "startUrl": "/"
12 | }
13 |
--------------------------------------------------------------------------------
/assets/README.md:
--------------------------------------------------------------------------------
1 | # Assets
2 |
3 | > Fonts, static icons and images are in this directory
4 |
5 | ## Materials
6 |
7 | - [fonts](./fonts)
8 | - [icons](./icons)
9 | - [images](./images)
10 |
--------------------------------------------------------------------------------
/assets/fonts/Montserrat-Black.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/fonts/Montserrat-Black.ttf
--------------------------------------------------------------------------------
/assets/fonts/Montserrat-BlackItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/fonts/Montserrat-BlackItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/Montserrat-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/fonts/Montserrat-Bold.ttf
--------------------------------------------------------------------------------
/assets/fonts/Montserrat-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/fonts/Montserrat-BoldItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/Montserrat-ExtraBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/fonts/Montserrat-ExtraBold.ttf
--------------------------------------------------------------------------------
/assets/fonts/Montserrat-ExtraBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/fonts/Montserrat-ExtraBoldItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/Montserrat-ExtraLight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/fonts/Montserrat-ExtraLight.ttf
--------------------------------------------------------------------------------
/assets/fonts/Montserrat-ExtraLightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/fonts/Montserrat-ExtraLightItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/Montserrat-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/fonts/Montserrat-Italic.ttf
--------------------------------------------------------------------------------
/assets/fonts/Montserrat-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/fonts/Montserrat-Light.ttf
--------------------------------------------------------------------------------
/assets/fonts/Montserrat-LightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/fonts/Montserrat-LightItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/Montserrat-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/fonts/Montserrat-Medium.ttf
--------------------------------------------------------------------------------
/assets/fonts/Montserrat-MediumItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/fonts/Montserrat-MediumItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/Montserrat-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/fonts/Montserrat-Regular.ttf
--------------------------------------------------------------------------------
/assets/fonts/Montserrat-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/fonts/Montserrat-SemiBold.ttf
--------------------------------------------------------------------------------
/assets/fonts/Montserrat-SemiBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/fonts/Montserrat-SemiBoldItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/Montserrat-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/fonts/Montserrat-Thin.ttf
--------------------------------------------------------------------------------
/assets/fonts/Montserrat-ThinItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/fonts/Montserrat-ThinItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/README.md:
--------------------------------------------------------------------------------
1 | # Fonts
2 |
3 | > Fonts are in here
4 |
--------------------------------------------------------------------------------
/assets/icons/README.md:
--------------------------------------------------------------------------------
1 | ## Icons
2 |
3 | > RangerTreejer specific icons
4 |
--------------------------------------------------------------------------------
/assets/icons/index.tsx:
--------------------------------------------------------------------------------
1 | // @ts-nocheck
2 |
3 | import TreeImage from './tree.png';
4 | import MapMarker from './map-marker.png';
5 |
6 | export {TreeImage, MapMarker};
7 |
--------------------------------------------------------------------------------
/assets/icons/map-marker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/icons/map-marker.png
--------------------------------------------------------------------------------
/assets/icons/tree.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/icons/tree.png
--------------------------------------------------------------------------------
/assets/images/README.md:
--------------------------------------------------------------------------------
1 | # Images
2 |
3 | > RangerTreejer specific images
4 |
--------------------------------------------------------------------------------
/assets/images/eastwood-message-sent-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/images/eastwood-message-sent-1.png
--------------------------------------------------------------------------------
/assets/images/eth.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/images/eth.png
--------------------------------------------------------------------------------
/assets/images/goerli-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/images/goerli-logo.png
--------------------------------------------------------------------------------
/assets/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/images/icon.png
--------------------------------------------------------------------------------
/assets/images/index.tsx:
--------------------------------------------------------------------------------
1 | // @ts-nocheck
2 | import MaticLogo from './matic-network-logo-vector.png';
3 | import TreejerIcon from './icon.png';
4 | import RotateIcon from './rotate.png';
5 | import NoWalletImage from './no-wallet.png';
6 | import onBoardingOne from './onboarding-1.png';
7 | import onBoardingTwo from './onboarding-2.png';
8 | import onBoardingThree from './onboarding-3.png';
9 | import Welcome from './welcome.png';
10 | import EastWoodMessage from './eastwood-message-sent-1.png';
11 | import SingUp from './sign-up.png';
12 | import StableDaiCoin from './stableCoin.png';
13 | import TreejerDaiCoin from './treejerCoin.png';
14 | import QrFrame from './qrFrame.png';
15 | import GoerliLogo from './goerli-logo.png';
16 | import Tree from './tree.png';
17 | import MaticCoin from './matic.png';
18 | import EthCoin from './eth.png';
19 |
20 | export {
21 | MaticLogo,
22 | TreejerIcon,
23 | RotateIcon,
24 | NoWalletImage,
25 | onBoardingOne,
26 | onBoardingTwo,
27 | onBoardingThree,
28 | Welcome,
29 | EastWoodMessage,
30 | SingUp,
31 | StableDaiCoin,
32 | TreejerDaiCoin,
33 | QrFrame,
34 | GoerliLogo,
35 | Tree,
36 | MaticCoin,
37 | EthCoin,
38 | };
39 |
--------------------------------------------------------------------------------
/assets/images/matic-network-logo-vector.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/images/matic-network-logo-vector.png
--------------------------------------------------------------------------------
/assets/images/matic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/images/matic.png
--------------------------------------------------------------------------------
/assets/images/no-wallet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/images/no-wallet.png
--------------------------------------------------------------------------------
/assets/images/onboarding-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/images/onboarding-1.png
--------------------------------------------------------------------------------
/assets/images/onboarding-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/images/onboarding-2.png
--------------------------------------------------------------------------------
/assets/images/onboarding-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/images/onboarding-3.png
--------------------------------------------------------------------------------
/assets/images/qrFrame.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/images/qrFrame.png
--------------------------------------------------------------------------------
/assets/images/rotate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/images/rotate.png
--------------------------------------------------------------------------------
/assets/images/sign-up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/images/sign-up.png
--------------------------------------------------------------------------------
/assets/images/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/images/splash.png
--------------------------------------------------------------------------------
/assets/images/stableCoin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/images/stableCoin.png
--------------------------------------------------------------------------------
/assets/images/tree.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/images/tree.png
--------------------------------------------------------------------------------
/assets/images/treejerCoin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/images/treejerCoin.png
--------------------------------------------------------------------------------
/assets/images/welcome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/assets/images/welcome.png
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = function (api) {
2 | console.log(process.env.REACT_APP_WEB, 'process.env.REACT_APP_WEB');
3 | api.cache(true);
4 | return {
5 | // eslint-disable-next-line no-process-env
6 | presets: ['babel-preset-expo'],
7 | plugins: [
8 | 'inline-dotenv',
9 | [
10 | 'module-resolver',
11 | {
12 | extensions: ['.ios.ts', '.android.ts', '.ts', '.ios.tsx', '.android.tsx', '.tsx', '.jsx', '.js', '.json'],
13 | alias: {
14 | components: './src/components',
15 | screens: './src/screens',
16 | services: './src/services',
17 | constants: './src/constants',
18 | utilities: './src/utilities',
19 | navigation: './src/navigation',
20 | types: './src/types',
21 | 'ranger-redux': './src/redux',
22 | },
23 | },
24 | ],
25 | 'import-graphql',
26 | '@babel/plugin-proposal-export-namespace-from',
27 | 'react-native-reanimated/plugin',
28 | ],
29 | };
30 | };
31 |
--------------------------------------------------------------------------------
/deploy-staging.sh:
--------------------------------------------------------------------------------
1 | # ** ==> USERNAME and SERVER_IP env variables are needed!!! <== **
2 | echo "Start deploying ranger treejer web"
3 |
4 | yarn web:build
5 |
6 | echo "web:prod is done"
7 |
8 | SERVER_SSH="$SERVER_USERNAME@$SERVER_IP"
9 | TIME_FOLDER=$(date +'%m-%d-%Y-%H%M')
10 | TAR_FOLDER="web-build-$TIME_FOLDER.tar.gz"
11 |
12 | echo "$(TIME_FOLDER) => Folder for deploying"
13 |
14 | tar -zcvf "$TAR_FOLDER" web-build
15 |
16 | echo "tar.gz file generated"
17 |
18 | scp "$TAR_FOLDER" "$SERVER_SSH:/home/deploy/projects/mobiledev-build/$TAR_FOLDER"
19 |
20 | echo "tar.gz successfully copied to server."
21 |
22 | rm -rf "$TAR_FOLDER"
23 |
24 | SSH_COMMAND="ssh $SERVER_SSH 'cd projects/mobiledev-build; pm2 delete dev; rm -rf web-build; tar -xvf $TAR_FOLDER; pm2 serve web-build 4000 --name \"dev\"'"
25 | eval "${SSH_COMMAND}"
26 |
--------------------------------------------------------------------------------
/deploy.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # ==> USERNAME and SERVER_IP env variables are needed!!! <==
4 |
5 | echo "Start to build web production ..."
6 |
7 | yarn web:build
8 |
9 | echo "web:prod is done"
10 |
11 | SERVER_SSH="$SERVER_USERNAME@$SERVER_IP"
12 | TIME_FOLDER=$(date +'%m-%d-%Y-%H%M')
13 | if
14 | [[ "$PORT" -eq "" || "$PORT" -eq "4000" ]];
15 | then
16 | PORT_LOCAL=4000;
17 | SERVER_FOLDER="/home/deploy/projects/mobiledev-build"
18 | PM2_NAME="dev";
19 | else
20 | PORT_LOCAL=$PORT;
21 | SERVER_FOLDER="/home/deploy/projects/mobile-build"
22 | PM2_NAME="main";
23 | fi
24 | BUILD_TAR_FILE="web-build-$TIME_FOLDER.tar.gz"
25 |
26 | echo "Start deploying ranger treejer web to $SERVER_IP on port $PORT_LOCAL"
27 |
28 | echo "$(TIME_FOLDER) => Folder for deploying"
29 |
30 | tar -zcvf "$BUILD_TAR_FILE" web-build
31 |
32 | echo "tar.gz file generated"
33 |
34 | scp "$BUILD_TAR_FILE" "$SERVER_SSH:$SERVER_FOLDER/$BUILD_TAR_FILE"
35 |
36 | echo "tar.gz successfully copied to server."
37 |
38 | rm -rf "$BUILD_TAR_FILE"
39 |
40 | SSH_COMMAND="ssh $SERVER_SSH 'cd $SERVER_FOLDER; pm2 delete $PM2_NAME; rm -rf web-build; tar -xvf $BUILD_TAR_FILE; pm2 serve web-build $PORT_LOCAL --name $PM2_NAME;'"
41 | eval "${SSH_COMMAND}"
42 |
--------------------------------------------------------------------------------
/globals.js:
--------------------------------------------------------------------------------
1 | // Inject node globals into React Native global scope.
2 | global.Buffer = require('buffer').Buffer;
3 | global.process = require('process');
4 |
5 | if (typeof btoa === 'undefined') {
6 | global.btoa = function (str) {
7 | return new Buffer(str, 'binary').toString('base64');
8 | };
9 | }
10 |
11 | if (typeof atob === 'undefined') {
12 | global.atob = function (b64Encoded) {
13 | return new Buffer(b64Encoded, 'base64').toString('binary');
14 | };
15 | }
16 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @format
3 | */
4 |
5 | import 'react-native-gesture-handler';
6 | import './globals';
7 | import {AppRegistry} from 'react-native';
8 | import App from './App';
9 | import {name as appName} from './app.json';
10 |
11 | AppRegistry.registerComponent(appName, () => App);
12 |
--------------------------------------------------------------------------------
/index.web.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @format
3 | */
4 |
5 | import {registerRootComponent} from 'expo';
6 | import {version} from './package.json';
7 | import App from './App';
8 | import 'slick-carousel/slick/slick.css';
9 | import 'slick-carousel/slick/slick-theme.css';
10 | import 'react-loading-skeleton/dist/skeleton.css';
11 | import {register} from './src/serviceWorkerRegistration';
12 | import './index.css';
13 |
14 | console.log('running web v', version);
15 |
16 | registerRootComponent(App);
17 | register();
18 |
--------------------------------------------------------------------------------
/ios/GoogleService-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CLIENT_ID
6 | 116888410915-hcqgrj6rg5snrmkj1qbatrf94ke34u1e.apps.googleusercontent.com
7 | REVERSED_CLIENT_ID
8 | com.googleusercontent.apps.116888410915-hcqgrj6rg5snrmkj1qbatrf94ke34u1e
9 | ANDROID_CLIENT_ID
10 | 116888410915-77s5ne1de87bfo7gnjvg5lqoccts0hos.apps.googleusercontent.com
11 | API_KEY
12 | AIzaSyA32IWvVN8tZk2HnDGu1AUjmRKMJzTIkD8
13 | GCM_SENDER_ID
14 | 116888410915
15 | PLIST_VERSION
16 | 1
17 | BUNDLE_ID
18 | com.treejer.ranger
19 | PROJECT_ID
20 | electric-signal-262123
21 | STORAGE_BUCKET
22 | electric-signal-262123.appspot.com
23 | IS_ADS_ENABLED
24 |
25 | IS_ANALYTICS_ENABLED
26 |
27 | IS_APPINVITE_ENABLED
28 |
29 | IS_GCM_ENABLED
30 |
31 | IS_SIGNIN_ENABLED
32 |
33 | GOOGLE_APP_ID
34 | 1:116888410915:ios:6380e722e48be146e88a96
35 |
36 |
--------------------------------------------------------------------------------
/ios/RangerTreejer.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/RangerTreejer.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/RangerTreejer.xcworkspace/xcshareddata/swiftpm/Package.resolved:
--------------------------------------------------------------------------------
1 | {
2 | "pins" : [
3 | {
4 | "identity" : "maplibre-gl-native-distribution",
5 | "kind" : "remoteSourceControl",
6 | "location" : "https://github.com/maplibre/maplibre-gl-native-distribution",
7 | "state" : {
8 | "revision" : "4e44c56a54fd3750a24388827f78c8360b0a50f2",
9 | "version" : "5.12.1"
10 | }
11 | }
12 | ],
13 | "version" : 2
14 | }
15 |
--------------------------------------------------------------------------------
/ios/RangerTreejer/AppDelegate.h:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 | #import
4 |
5 | @interface AppDelegate : EXAppDelegateWrapper
6 |
7 | @property (nonatomic, strong) UIWindow *window;
8 |
9 | @end
10 |
--------------------------------------------------------------------------------
/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@1x.png
--------------------------------------------------------------------------------
/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@2x.png
--------------------------------------------------------------------------------
/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@3x.png
--------------------------------------------------------------------------------
/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@1x.png
--------------------------------------------------------------------------------
/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@2x.png
--------------------------------------------------------------------------------
/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@3x.png
--------------------------------------------------------------------------------
/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@1x.png
--------------------------------------------------------------------------------
/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@2x.png
--------------------------------------------------------------------------------
/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@3x.png
--------------------------------------------------------------------------------
/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-60x60@2x.png
--------------------------------------------------------------------------------
/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-60x60@3x.png
--------------------------------------------------------------------------------
/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-76x76@1x.png
--------------------------------------------------------------------------------
/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-76x76@2x.png
--------------------------------------------------------------------------------
/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/App-Icon-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/ios/RangerTreejer/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png
--------------------------------------------------------------------------------
/ios/RangerTreejer/Images.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/ios/RangerTreejer/Images.xcassets/LaunchScreen.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "splashscreen_image.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "splashscreen_image-1.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "splashscreen_image-2.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/ios/RangerTreejer/Images.xcassets/LaunchScreen.imageset/splashscreen_image-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/ios/RangerTreejer/Images.xcassets/LaunchScreen.imageset/splashscreen_image-1.png
--------------------------------------------------------------------------------
/ios/RangerTreejer/Images.xcassets/LaunchScreen.imageset/splashscreen_image-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/ios/RangerTreejer/Images.xcassets/LaunchScreen.imageset/splashscreen_image-2.png
--------------------------------------------------------------------------------
/ios/RangerTreejer/Images.xcassets/LaunchScreen.imageset/splashscreen_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/treejer/mobile/38dfd48b4cc9f83307eb9a46c74a05395acb672d/ios/RangerTreejer/Images.xcassets/LaunchScreen.imageset/splashscreen_image.png
--------------------------------------------------------------------------------
/ios/RangerTreejer/main.m:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | #import "AppDelegate.h"
4 |
5 | int main(int argc, char *argv[])
6 | {
7 | @autoreleasepool {
8 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/ios/RangerTreejerTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/metro.config.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Metro configuration for React Native
3 | * https://github.com/facebook/react-native
4 | *
5 | * @format
6 | */
7 |
8 | const extraNodeModules = require('node-libs-browser');
9 |
10 | module.exports = {
11 | resolver: {
12 | extraNodeModules: {
13 | ...extraNodeModules,
14 | fs: require.resolve('react-native-fs'),
15 | },
16 | sourceExts: ['jsx', 'js', 'ts', 'tsx', 'cjs'],
17 | },
18 | transformer: {
19 | getTransformOptions: async () => ({
20 | transform: {
21 | experimentalImportSupport: false,
22 | inlineRequires: true,
23 | },
24 | }),
25 | },
26 | };
27 |
--------------------------------------------------------------------------------
/react-native.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | project: {
3 | ios: {},
4 | android: {},
5 | },
6 | assets: ['./assets/fonts/'],
7 | dependencies: {
8 | 'magic-sdk': {
9 | platforms: {
10 | android: null,
11 | ios: null,
12 | },
13 | },
14 | 'react-easy-crop': {
15 | platforms: {
16 | android: null,
17 | ios: null,
18 | },
19 | },
20 | },
21 | expo: {
22 | autolinking: {
23 | exclude: ['expo-application', 'expo-asset', 'expo-constants', 'expo-file-system', 'expo-font', 'expo-keep-awake'],
24 | },
25 | },
26 | };
27 |
--------------------------------------------------------------------------------
/shim.js:
--------------------------------------------------------------------------------
1 | if (typeof __dirname === 'undefined') global.__dirname = '/';
2 | if (typeof __filename === 'undefined') global.__filename = '';
3 | if (typeof process === 'undefined') {
4 | global.process = require('process');
5 | } else {
6 | const bProcess = require('process');
7 | for (var p in bProcess) {
8 | if (!(p in process)) {
9 | process[p] = bProcess[p];
10 | }
11 | }
12 | }
13 |
14 | process.browser = false;
15 | if (typeof Buffer === 'undefined') global.Buffer = require('buffer').Buffer;
16 |
17 | // global.location = global.location || { port: 80 }
18 | const isDev = typeof __DEV__ === 'boolean' && __DEV__;
19 | process.env['NODE_ENV'] = isDev ? 'development' : 'production';
20 | if (typeof localStorage !== 'undefined') {
21 | localStorage.debug = isDev ? '*' : '';
22 | }
23 |
24 | // If using the crypto shim, uncomment the following line to ensure
25 | // crypto is loaded first, so it can populate global.crypto
26 | require('crypto');
27 |
--------------------------------------------------------------------------------
/src/README.md:
--------------------------------------------------------------------------------
1 | # SRC
2 |
3 | - [abis](./abis): web3 abi contracts
4 | - [components](./components): all reuseable components that used in RangerTreejer
5 | - [constants](./constants): global app stylesheet
6 | - [data](./data): RangerTreejer graphQl schema
7 | - [localization](./localization):all supported languages
8 | - [navigation](./navigation): navigation config, stacks, authorization stacks and screens
9 | - [screens](./screens): all RangerTreejer screens
10 | - [services](./services): project config
11 | - [utilities](./utilities): common and useful functions and react hooks
12 | - [types.ts](./types.ts): type of stacks params
13 | - [global.d.ts](./global.d.ts): new global types redeclared and created
14 | - [toast.d.ts](./toast.d.ts): custom properties added to react-native-toast-notification types
15 | - [service-worker.js](./service-worker.js) and [serviceWorkerRegistration.js](./serviceWorkerRegistration.js): PWA offline support configuration
16 |
--------------------------------------------------------------------------------
/src/abis/README.md:
--------------------------------------------------------------------------------
1 | # Abis
2 |
3 | > Web3 ABI contracts
4 |
5 | - [Dai.json](./Dai.json)
6 | - [Planter.json](./Planter.json)
7 | - [PlanterFund.json](./PlanterFund.json)
8 | - [TreeFactory.json](./TreeFactory.json)
9 | - [WhitelistPaymaster.json](./WhitelistPaymaster.json)
10 |
--------------------------------------------------------------------------------
/src/components/Activity/README.md:
--------------------------------------------------------------------------------
1 | # Activity
2 |
3 | > Activity components to show and list the user's activity
4 |
5 | - [ActivityItem](./ActivityItem.tsx): detail about user's activity single by single
6 | - [ActivityList](./ActivityList.tsx): list of transaction history, redeemed and recently earned
7 |
--------------------------------------------------------------------------------
/src/components/Analytics/Analytics.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {TouchableWithoutFeedback, TouchableWithoutFeedbackProps} from 'react-native';
3 | import {useAnalytics} from 'utilities/hooks/useAnalytics';
4 |
5 | export interface AnalyticsParams {
6 | [key: string]: any;
7 | }
8 |
9 | export interface AnalyticsProps extends TouchableWithoutFeedbackProps {
10 | name: string;
11 | params?: AnalyticsParams;
12 | }
13 |
14 | export function Analytics(props: AnalyticsProps) {
15 | const {name, params, ...restProps} = props;
16 |
17 | const {sendEvent} = useAnalytics();
18 |
19 | const handleEvent = async () => {
20 | await sendEvent(name, params);
21 | };
22 |
23 | return ;
24 | }
25 |
--------------------------------------------------------------------------------
/src/components/Analytics/README.md:
--------------------------------------------------------------------------------
1 | # Analytics
2 |
3 | > This component does return firebase logger button
4 |
--------------------------------------------------------------------------------
/src/components/AppLoading/AppLoading.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {ActivityIndicator, Image, Text, View} from 'react-native';
3 | import {colors} from 'constants/values';
4 | import {TreejerIcon} from '../../../assets/images';
5 | import {useTranslation} from 'react-i18next';
6 | import globalStyles from 'constants/styles';
7 | import AppVersion from 'components/AppVersion';
8 | import {SafeAreaView} from 'react-native-safe-area-context';
9 |
10 | export function AppLoading() {
11 | const {t} = useTranslation();
12 |
13 | return (
14 |
15 |
16 |
17 | {t('loading.ranger')}
18 |
19 | {t('loading.by')}
20 |
21 |
22 |
23 |
24 |
25 | );
26 | }
27 |
--------------------------------------------------------------------------------
/src/components/AppLoading/ContainerLoading.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {View} from 'react-native';
3 |
4 | import {colors} from 'constants/values';
5 |
6 | export type ContainerLoadingProps = {
7 | loading: boolean;
8 | children?: any;
9 | container?: boolean;
10 | };
11 |
12 | export function ContainerLoading(props: ContainerLoadingProps) {
13 | const {children, container = false} = props;
14 |
15 | return (
16 |
23 | {children}
24 |
25 | );
26 | }
27 |
--------------------------------------------------------------------------------
/src/components/AppLoading/Loading.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {ActivityIndicator, ActivityIndicatorProps} from 'react-native';
3 |
4 | import {ContainerLoading} from './ContainerLoading';
5 |
6 | export type LoadingProps = {
7 | loading: boolean;
8 | children?: any;
9 | loadingSize?: ActivityIndicatorProps['size'];
10 | loadingColor?: ActivityIndicatorProps['color'];
11 | container?: boolean;
12 | };
13 |
14 | export function Loading(props: LoadingProps) {
15 | const {loading, children, loadingSize, loadingColor, container} = props;
16 |
17 | return (
18 |
19 | {children}
20 | {loading ? (
21 |
26 | ) : null}
27 |
28 | );
29 | }
30 |
--------------------------------------------------------------------------------
/src/components/AppLoading/README.md:
--------------------------------------------------------------------------------
1 | # AppLoading
2 |
3 | > This component does return loading content after lunch
4 |
--------------------------------------------------------------------------------
/src/components/AppVersion/AppVersion.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {StyleProp, StyleSheet, Text, TextStyle} from 'react-native';
3 | import {version} from '../../../package.json';
4 | import globalStyles from 'constants/styles';
5 | import {colors} from 'constants/values';
6 |
7 | export interface AppVersionProps {
8 | style?: StyleProp;
9 | }
10 |
11 | export default function AppVersion(props: AppVersionProps) {
12 | const {style} = props;
13 |
14 | return v{version};
15 | }
16 |
17 | const styles = StyleSheet.create({
18 | version: {
19 | ...globalStyles.tiny,
20 | textAlign: 'center',
21 | color: colors.gray,
22 | },
23 | });
24 |
--------------------------------------------------------------------------------
/src/components/AppVersion/README.md:
--------------------------------------------------------------------------------
1 | # AppVersion
2 |
3 | > This component does return current version of the application
4 |
--------------------------------------------------------------------------------
/src/components/AppVersion/index.tsx:
--------------------------------------------------------------------------------
1 | export {default} from './AppVersion';
2 |
--------------------------------------------------------------------------------
/src/components/Avatar/README.md:
--------------------------------------------------------------------------------
1 | # Avatar
2 |
3 | > This component does return user account avatar
4 |
--------------------------------------------------------------------------------
/src/components/Avatar/index.ts:
--------------------------------------------------------------------------------
1 | export {default} from './Avatar';
2 |
--------------------------------------------------------------------------------
/src/components/BackgroundEntropy/BackgroundEntropy.tsx:
--------------------------------------------------------------------------------
1 | import React, {useMemo} from 'react';
2 | import Svg, {Path} from 'react-native-svg';
3 |
4 | function BackgroundEntropy() {
5 | const styles = useMemo(() => {
6 | return {
7 | up: {
8 | bottom: -30,
9 | right: -100,
10 | },
11 | down: {
12 | left: -10,
13 | top: -50,
14 | },
15 | };
16 | }, []);
17 |
18 | return (
19 | <>
20 |
35 |
50 | >
51 | );
52 | }
53 |
54 | export default BackgroundEntropy;
55 |
--------------------------------------------------------------------------------
/src/components/BackgroundEntropy/README.md:
--------------------------------------------------------------------------------
1 | # BackgroundEntropy
2 |
3 | > This component does return svg for background
4 |
--------------------------------------------------------------------------------
/src/components/BackgroundEntropy/index.ts:
--------------------------------------------------------------------------------
1 | export {default} from './BackgroundEntropy';
2 |
--------------------------------------------------------------------------------
/src/components/Button/README.md:
--------------------------------------------------------------------------------
1 | # Button
2 |
3 | > This component does return dynamic button with different style
4 |
--------------------------------------------------------------------------------
/src/components/Button/index.tsx:
--------------------------------------------------------------------------------
1 | export {default} from './Button';
2 |
--------------------------------------------------------------------------------
/src/components/Card/Card.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {View, StyleSheet, TouchableOpacityProps, ViewProps} from 'react-native';
3 | import {colors} from 'constants/values';
4 |
5 | interface Props extends TouchableOpacityProps {
6 | children: React.ReactNode;
7 | style?: ViewProps['style'];
8 | }
9 |
10 | const Card = React.forwardRef(({children, style}, ref) => {
11 | return (
12 |
13 | {children}
14 |
15 | );
16 | });
17 |
18 | Card.displayName = 'Card';
19 |
20 | const styles = StyleSheet.create({
21 | container: {
22 | backgroundColor: 'white',
23 | ...colors.smShadow,
24 | width: '100%',
25 | paddingVertical: 24,
26 | paddingHorizontal: 18,
27 | borderRadius: 10,
28 | },
29 | });
30 |
31 | export default Card;
32 |
--------------------------------------------------------------------------------
/src/components/Card/README.md:
--------------------------------------------------------------------------------
1 | # Card
2 |
3 | > This component does return the white card with default styles, and it's dynamic
4 |
--------------------------------------------------------------------------------
/src/components/Card/index.ts:
--------------------------------------------------------------------------------
1 | export {default} from './Card';
2 |
--------------------------------------------------------------------------------
/src/components/CheckingPermissions/README.md:
--------------------------------------------------------------------------------
1 | # CheckingPermissions
2 |
3 | > Check permissions modal components
4 |
5 | ### components
6 | - [BlockedPermissions](./BlockedPermissions.tsx): list of blocked permissions by the user, inform user about the wrong
7 | - [CheckingPermissions](./CheckingPermissions.tsx): list of all permissions with their state with grant permission button
8 | - [PermissionItem](./PermissionItem.tsx): PermissionItem used in CheckingPermissions and BlockedPermissions
9 |
--------------------------------------------------------------------------------
/src/components/Common/Hr.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {View, ViewProps} from 'react-native';
3 |
4 | import {colors} from 'constants/values';
5 |
6 | export type THrProps = {
7 | styles?: ViewProps['style'];
8 | };
9 |
10 | export function Hr({styles}: THrProps) {
11 | return ;
12 | }
13 |
--------------------------------------------------------------------------------
/src/components/EmptyList/EmptyList.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {StyleSheet, Text, View} from 'react-native';
3 | import globalStyles from 'constants/styles';
4 | import Spacer from 'components/Spacer';
5 | import Icon from 'react-native-vector-icons/AntDesign';
6 | import {colors} from 'constants/values';
7 | import {useTranslation} from 'react-i18next';
8 |
9 | export function EmptyList() {
10 | const {t} = useTranslation();
11 |
12 | return (
13 |
14 |
15 |
16 | {t('activities.empty')}
17 |
18 |
19 |
20 |
21 | );
22 | }
23 | const styles = StyleSheet.create({
24 | container: {
25 | width: '100%',
26 | },
27 | row: {
28 | flexDirection: 'row',
29 | alignItems: 'center',
30 | },
31 | emptyText: {
32 | fontSize: 16,
33 | fontWeight: '500',
34 | color: colors.green,
35 | },
36 | loadingContainer: {
37 | position: 'absolute',
38 | top: 0,
39 | bottom: 0,
40 | left: 0,
41 | right: 0,
42 | },
43 | });
44 |
--------------------------------------------------------------------------------
/src/components/FileInput/FileInput.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | interface FileInputPropsType {
4 | icon?: string;
5 | onPress: (e?: any) => void;
6 | caption: string;
7 | style?: React.CSSProperties;
8 | }
9 |
10 | function FileInput(props: FileInputPropsType) {
11 | return <>>;
12 | }
13 |
14 | export default FileInput;
15 |
--------------------------------------------------------------------------------
/src/components/FileInput/FileInput.web.tsx:
--------------------------------------------------------------------------------
1 | import globalStyles, {fontMedium} from 'constants/styles';
2 | import {colors} from 'constants/values';
3 | import React from 'react';
4 | import {StyleSheet, Text} from 'react-native';
5 | import Icon from 'react-native-vector-icons/Entypo';
6 |
7 | interface FileInputPropsType {
8 | icon?: string;
9 | onPress: (e?: any) => void;
10 | caption: string;
11 | style?: React.CSSProperties;
12 | }
13 |
14 | function FileInput(props: FileInputPropsType) {
15 | const {onPress, caption, icon} = props;
16 | return (
17 |
31 | );
32 | }
33 |
34 | export default FileInput;
35 |
36 | const styles = StyleSheet.create({
37 | secondaryText: {
38 | ...globalStyles.normal,
39 | color: 'white',
40 | marginLeft: 8,
41 | },
42 | });
43 |
--------------------------------------------------------------------------------
/src/components/FileInput/README.md:
--------------------------------------------------------------------------------
1 | # FileInput
2 |
3 | > This component does return input for picking images on the web
4 |
5 | - FileInput: does return nothing on mobile application
6 | - FileInput.web: does return input
7 |
--------------------------------------------------------------------------------
/src/components/HeaderFixedButtons/HeaderFixedButtons.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {StyleSheet, View} from 'react-native';
3 | import {useSafeAreaInsets} from 'react-native-safe-area-context';
4 | import NetInfo from 'components/NetInfo';
5 | import {SwitchNetwork} from 'components/SwitchNetwork/SwitchNetwork';
6 | import Spacer from 'components/Spacer';
7 | import {ChatButton} from 'components/HeaderFixedButtons/ChatButton';
8 |
9 | export function HeaderFixedButtons() {
10 | const {top, right} = useSafeAreaInsets();
11 |
12 | return (
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | );
23 | }
24 |
25 | const styles = StyleSheet.create({
26 | container: {
27 | borderRadius: 100,
28 | position: 'absolute',
29 | zIndex: 9,
30 | alignItems: 'flex-end',
31 | alignSelf: 'flex-end',
32 | flexDirection: 'row',
33 | },
34 | });
35 |
--------------------------------------------------------------------------------
/src/components/Icons/Check.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Svg, {Path} from 'react-native-svg';
3 |
4 | interface Props {
5 | color?: string;
6 | }
7 |
8 | function Check({color = 'white'}: Props) {
9 | return (
10 |
14 | );
15 | }
16 |
17 | export default Check;
18 |
--------------------------------------------------------------------------------
/src/components/Icons/ChevronLeft.tsx:
--------------------------------------------------------------------------------
1 | import {colors} from 'constants/values';
2 |
3 | import React from 'react';
4 | import Svg, {Path, SvgProps} from 'react-native-svg';
5 |
6 | export interface Props extends SvgProps {
7 | color?: string;
8 | }
9 |
10 | function ChevronLeft({color = colors.grayDarker, ...rest}: Props) {
11 | return (
12 |
18 | );
19 | }
20 |
21 | export default ChevronLeft;
22 |
--------------------------------------------------------------------------------
/src/components/Icons/ChevronRight.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import ChevronLeft, {Props} from './ChevronLeft';
4 |
5 | function ChevronRight(props: Props) {
6 | return ;
7 | }
8 |
9 | export default ChevronRight;
10 |
--------------------------------------------------------------------------------
/src/components/Icons/Plus.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Svg, {Line} from 'react-native-svg';
3 | import {TouchableOpacity} from 'react-native';
4 |
5 | interface Props {
6 | color?: string;
7 | onPress?: () => void;
8 | }
9 |
10 | function Plus({color = 'white', onPress}: Props) {
11 | return (
12 |
13 |
17 |
18 | );
19 | }
20 |
21 | export default Plus;
22 |
--------------------------------------------------------------------------------
/src/components/Icons/README.md:
--------------------------------------------------------------------------------
1 | # Icons
2 |
3 | > Common icons
4 |
5 | - Check
6 | - ChevronLeft
7 | - ChevronRight
8 | - GreenBlock
9 | - Plus
10 | - Times
11 | - Toast
12 | - Tree
13 | - User
14 |
--------------------------------------------------------------------------------
/src/components/Icons/Times.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Svg, {Line} from 'react-native-svg';
3 |
4 | interface Props {
5 | color?: string;
6 | }
7 |
8 | function Times({color = 'white'}: Props) {
9 | return (
10 |
14 | );
15 | }
16 |
17 | export default Times;
18 |
--------------------------------------------------------------------------------
/src/components/Icons/Toast.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Icon from 'react-native-vector-icons/FontAwesome';
3 |
4 | import {colors} from 'constants/values';
5 |
6 | export type TToastIconProps = {
7 | name: 'tree' | 'exclamation-circle' | 'exclamation-triangle' | 'info';
8 | };
9 |
10 | function ToastIcon(props: TToastIconProps) {
11 | const {name} = props;
12 |
13 | return ;
14 | }
15 |
16 | export default ToastIcon;
17 |
--------------------------------------------------------------------------------
/src/components/Icons/index.ts:
--------------------------------------------------------------------------------
1 | export {default as Times} from './Times';
2 | export {default as Tree} from './Tree';
3 | export {default as User} from './User';
4 | export {default as GreenBlock} from './GreenBlock';
5 | export {default as ChevronLeft} from './ChevronLeft';
6 | export {default as ChevronRight} from './ChevronRight';
7 | export {default as Check} from './Check';
8 | export {default as ToastIcon} from './Toast';
9 | export {default as Plus} from './Plus';
10 |
--------------------------------------------------------------------------------
/src/components/KeyboardDismiss/KeyboardDismiss.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {Keyboard, TouchableWithoutFeedback, TouchableWithoutFeedbackProps} from 'react-native';
3 |
4 | export interface KeyboardDismissProps extends TouchableWithoutFeedbackProps {
5 | noDismiss?: boolean;
6 | }
7 |
8 | export default function KeyboardDismiss(props: KeyboardDismissProps) {
9 | const {noDismiss, style} = props;
10 |
11 | const handlePress = () => {
12 | if (!noDismiss) {
13 | Keyboard.dismiss();
14 | }
15 | };
16 |
17 | return ;
18 | }
19 |
--------------------------------------------------------------------------------
/src/components/KeyboardDismiss/README.md:
--------------------------------------------------------------------------------
1 | # KeyboardDismiss
2 |
3 | > This component does return a wrapper component for dismissing the keyboard
4 |
--------------------------------------------------------------------------------
/src/components/KeyboardDismiss/index.ts:
--------------------------------------------------------------------------------
1 | export {default} from './KeyboardDismiss';
2 |
--------------------------------------------------------------------------------
/src/components/LandScapeModal/README.md:
--------------------------------------------------------------------------------
1 | # LandScapeModal
2 |
3 | > This component does return a modal with a message for rotate phone
4 | > This component will render when phone was horizontal
5 |
--------------------------------------------------------------------------------
/src/components/MagicWallet/README.md:
--------------------------------------------------------------------------------
1 | # MagicWallet
2 |
3 | > This component does return wallet address and detail about contracts used in Treejer.
4 |
--------------------------------------------------------------------------------
/src/components/Map/Map.tsx:
--------------------------------------------------------------------------------
1 | import React, {forwardRef, LegacyRef} from 'react';
2 | import MapboxGL, {MapViewProps} from '@rnmapbox/maps';
3 |
4 | import {locationType} from 'screens/TreeSubmission/components/MapMarking/MapMarking.web';
5 |
6 | export interface MapProps extends MapViewProps {
7 | // children?: ReactNode | Element;
8 | setLocation?: React.Dispatch>;
9 | setAccuracyInMeters?: React.Dispatch>;
10 | }
11 |
12 | const Map = forwardRef((props: MapProps, ref: LegacyRef) => {
13 | return ;
14 | });
15 |
16 | export default Map;
17 |
--------------------------------------------------------------------------------
/src/components/Map/MapDetail.tsx:
--------------------------------------------------------------------------------
1 | import React, {useMemo} from 'react';
2 | import {StyleSheet, Text, View} from 'react-native';
3 | import {useTranslation} from 'react-i18next';
4 |
5 | import {colors} from 'constants/values';
6 | import {TUserLocation} from 'utilities/hooks/usePlantTreePermissions';
7 |
8 | export type TMapDetailProps = {
9 | location: TUserLocation;
10 | accuracyInMeters;
11 | };
12 |
13 | export function MapDetail(props: TMapDetailProps) {
14 | const {accuracyInMeters, location} = props;
15 |
16 | const {t} = useTranslation();
17 |
18 | const NA = useMemo(() => t('mapMarking.NA'), [t]);
19 |
20 | return (
21 |
22 | {t('mapMarking.lat', {lat: location?.latitude || NA})}
23 | {t('mapMarking.long', {long: location?.longitude || NA})}
24 |
25 | {t('mapMarking.acc', {acc: accuracyInMeters ? Number(accuracyInMeters).toFixed(2) : NA})}
26 |
27 |
28 | );
29 | }
30 |
31 | const styles = StyleSheet.create({
32 | container: {
33 | backgroundColor: colors.khaki,
34 | flex: 0.9,
35 | height: 80,
36 | padding: 8,
37 | borderRadius: 4,
38 | justifyContent: 'space-between',
39 | },
40 | text: {
41 | fontSize: 10,
42 | },
43 | });
44 |
--------------------------------------------------------------------------------
/src/components/Map/README.md:
--------------------------------------------------------------------------------
1 | # Map
2 |
3 | > This component does return map
4 |
5 | - Map
6 | - Map.web: on web
7 |
--------------------------------------------------------------------------------
/src/components/Map/index.tsx:
--------------------------------------------------------------------------------
1 | export {default} from './Map';
2 |
--------------------------------------------------------------------------------
/src/components/Map/types.ts:
--------------------------------------------------------------------------------
1 | export type TPlace = {
2 | center: number[];
3 | geometry: {
4 | coordinates: number[];
5 | };
6 | id: string;
7 | place_name: string;
8 | relevance: number;
9 | text;
10 | string;
11 | type: string;
12 | };
13 |
14 | export type TPlaceForm = {
15 | search: string;
16 | };
17 |
--------------------------------------------------------------------------------
/src/components/NetInfo/README.md:
--------------------------------------------------------------------------------
1 | # NetInfo
2 |
3 | > This component will return user status, offline or online
4 |
--------------------------------------------------------------------------------
/src/components/NetInfo/index.ts:
--------------------------------------------------------------------------------
1 | export {default} from './NetInfo';
2 |
--------------------------------------------------------------------------------
/src/components/PreloadImage/README.md:
--------------------------------------------------------------------------------
1 | # PreloadImage
2 |
3 | > This component will pre fetch images
4 |
--------------------------------------------------------------------------------
/src/components/Profile/ProfileGroupButton.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {StyleSheet, View} from 'react-native';
3 |
4 | export type TProfileGroupButton = {
5 | isVerified?: boolean;
6 | direction?: 'row' | 'column';
7 | children: JSX.Element | JSX.Element[] | null;
8 | };
9 |
10 | export function ProfileGroupButton(props: TProfileGroupButton) {
11 | const {direction = 'row', children} = props;
12 |
13 | return {children};
14 | }
15 |
16 | const styles = StyleSheet.create({
17 | container: {
18 | width: '100%',
19 | },
20 | row: {
21 | flexDirection: 'row',
22 | flexWrap: 'wrap',
23 | },
24 | column: {
25 | flexDirection: 'column',
26 | justifyContent: 'center',
27 | alignContent: 'center',
28 | },
29 | });
30 |
--------------------------------------------------------------------------------
/src/components/ProgressCircles/ProgressCircles.tsx:
--------------------------------------------------------------------------------
1 | import globalStyles from 'constants/styles';
2 |
3 | import React from 'react';
4 | import {StyleSheet, View} from 'react-native';
5 |
6 | export interface ProgressCirclesProps {
7 | numberOfSteps: number;
8 | activeStep: number;
9 | }
10 |
11 | function ProgressCircles({numberOfSteps, activeStep, ...props}: ProgressCirclesProps) {
12 | return (
13 |
14 | {Array.from({length: numberOfSteps}, (_, i) => i).map(i => {
15 | return (
16 |
17 |
25 |
26 | );
27 | })}
28 |
29 | );
30 | }
31 |
32 | const styles = StyleSheet.create({
33 | circle: {
34 | width: 10,
35 | height: 10,
36 | borderRadius: 5,
37 | marginHorizontal: 8,
38 | },
39 | });
40 |
41 | export default ProgressCircles;
42 |
--------------------------------------------------------------------------------
/src/components/ProgressCircles/README.md:
--------------------------------------------------------------------------------
1 | # ProgressCircles
2 |
3 | > This component does return a circle progress bar.
4 |
--------------------------------------------------------------------------------
/src/components/ProgressCircles/index.ts:
--------------------------------------------------------------------------------
1 | export {default} from './ProgressCircles';
2 |
--------------------------------------------------------------------------------
/src/components/PullToRefresh/PullToRefresh.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | interface PullToRefreshProps {
4 | children: JSX.Element | JSX.Element[];
5 | onRefresh: () => Promise;
6 | disabled?: boolean;
7 | }
8 |
9 | export default function PullToRefresh(props: PullToRefreshProps) {
10 | const {children} = props;
11 |
12 | return <>{children}>;
13 | }
14 |
--------------------------------------------------------------------------------
/src/components/PullToRefresh/PullToRefresh.web.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {PullToRefresh as PullToRefreshContainer, PullDownContent, RefreshContent} from 'react-js-pull-to-refresh';
3 |
4 | import {colors} from 'constants/values';
5 |
6 | interface PullToRefreshProps {
7 | children: JSX.Element | JSX.Element[];
8 | onRefresh: () => Promise;
9 | disabled?: boolean;
10 | }
11 |
12 | export default function PullToRefresh(props: PullToRefreshProps) {
13 | const {children, onRefresh, disabled = false} = props;
14 |
15 | if (disabled) {
16 | return <>{children}>;
17 | }
18 | return (
19 | }
21 | releaseContent={<>>}
22 | refreshContent={}
23 | onRefresh={onRefresh}
24 | pullDownThreshold={200}
25 | triggerHeight="auto"
26 | containerStyle={{height: '100%', backgroundColor: colors.khaki}}
27 | >
28 | {children}
29 |
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/src/components/PullToRefresh/README.md:
--------------------------------------------------------------------------------
1 | # PullToRefresh
2 |
3 | > This component does return a wrapper for pulling to refresh on web
4 |
5 | - PullToRefresh: does return children
6 | - PullToRefresh.web
7 |
--------------------------------------------------------------------------------
/src/components/PwaModal/README.md:
--------------------------------------------------------------------------------
1 | # PwaModal
2 |
3 | > This component does return a modal with 'add to home screen' message for install pwa version
4 |
--------------------------------------------------------------------------------
/src/components/QrReader/README.md:
--------------------------------------------------------------------------------
1 | # QrReader
2 |
3 | > This component does return QrCode scanner for get data from a code
4 |
5 |
6 | - QrReader: QrCode scanner on the application
7 | - QrReader.web: QrCode scanner on the web
8 |
--------------------------------------------------------------------------------
/src/components/RadioButton/README.md:
--------------------------------------------------------------------------------
1 | # RadioButton
2 |
3 | > This component will return radio button
4 |
--------------------------------------------------------------------------------
/src/components/RefreshControl/README.md:
--------------------------------------------------------------------------------
1 | # RefreshControl
2 |
3 | > This component does return ScrollView and FlatList refresh controller
4 |
--------------------------------------------------------------------------------
/src/components/RefreshControl/RefreshControl.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {RefreshControl} from 'react-native';
3 |
4 | export default RefreshControl;
5 |
--------------------------------------------------------------------------------
/src/components/ScreenTitle/README.md:
--------------------------------------------------------------------------------
1 | # ScreenTitle
2 |
3 | > This component does return top section of screens it can contain title, go back event, and rightContent without limitation
4 |
--------------------------------------------------------------------------------
/src/components/ScreenTitle/ScreenTitle.tsx:
--------------------------------------------------------------------------------
1 | import React, {useCallback} from 'react';
2 | import {ScreenTitleWithoutNavigation} from 'components/ScreenTitle/ScreenTitleWithoutNavigation';
3 | import {useNavigation} from '@react-navigation/native';
4 | import {Routes} from 'navigation/index';
5 | import {useProfile} from 'ranger-redux/modules/profile/profile';
6 |
7 | export type TScreenTitle = {
8 | goBack?: boolean;
9 | title?: string;
10 | rightContent?: React.ReactElement;
11 | };
12 |
13 | export function ScreenTitle(props: TScreenTitle) {
14 | const navigation = useNavigation();
15 |
16 | const {profile} = useProfile();
17 |
18 | const handleGoBack = useCallback(() => {
19 | if (navigation.canGoBack()) {
20 | navigation.goBack();
21 | } else {
22 | // @ts-ignore
23 | navigation.navigate(profile.isVerified ? Routes.VerifiedProfileTab : Routes.UnVerifiedProfileStack);
24 | }
25 | }, [navigation, profile]);
26 |
27 | return ;
28 | }
29 |
--------------------------------------------------------------------------------
/src/components/ShimmerPlaceholder/README.md:
--------------------------------------------------------------------------------
1 | # ShimmerPlaceholder
2 |
3 | > This component does return a loading skeleton content.
4 |
--------------------------------------------------------------------------------
/src/components/ShimmerPlaceholder/index.tsx:
--------------------------------------------------------------------------------
1 | import LinearGradient from 'react-native-linear-gradient';
2 | import RNShimmerPlaceholder, {createShimmerPlaceholder} from 'react-native-shimmer-placeholder';
3 |
4 | const ShimmerPlaceHolder: typeof RNShimmerPlaceholder = createShimmerPlaceholder(LinearGradient);
5 |
6 | export default ShimmerPlaceHolder;
7 |
--------------------------------------------------------------------------------
/src/components/ShimmerPlaceholder/index.web.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {Text, View} from 'react-native';
3 | import Skeleton from 'react-loading-skeleton';
4 |
5 | interface ShimmerPlaceHolderPropsType {
6 | style: React.CSSProperties;
7 | }
8 |
9 | export default function ShimmerPlaceHolder({style}: ShimmerPlaceHolderPropsType) {
10 | return (
11 |
12 |
13 |
14 | );
15 | }
16 |
--------------------------------------------------------------------------------
/src/components/Spacer/README.md:
--------------------------------------------------------------------------------
1 | # Spacer
2 |
3 | > This component does return space
4 |
--------------------------------------------------------------------------------
/src/components/Spacer/Spacer.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {View} from 'react-native';
3 |
4 | interface SpacerProps {
5 | times?: number;
6 | }
7 |
8 | const Spacer = ({times = 2}: SpacerProps) => ;
9 |
10 | export default Spacer;
11 |
--------------------------------------------------------------------------------
/src/components/Spacer/index.ts:
--------------------------------------------------------------------------------
1 | export {default} from './Spacer';
2 |
--------------------------------------------------------------------------------
/src/components/Steps/README.md:
--------------------------------------------------------------------------------
1 | # Steps
2 |
3 | > This component does return a stepper and step content and step container
4 |
5 | - StepNumber: step level
6 | - StepContent: children
7 | - StepContainer: Stepper wrapper
8 | - Step: does return StepContent and StepNumber
9 |
--------------------------------------------------------------------------------
/src/components/Steps/index.ts:
--------------------------------------------------------------------------------
1 | import {StepContainer, Step, StepContent} from './Steps';
2 |
3 | const Steps = {
4 | Container: StepContainer,
5 | Step,
6 | Content: StepContent,
7 | };
8 |
9 | export default Steps;
10 |
--------------------------------------------------------------------------------
/src/components/SubmitTreeModal/README.md:
--------------------------------------------------------------------------------
1 | # SubmitTreeModal
2 |
3 | > This component returns a medal to show the steps for submitting trees
4 |
--------------------------------------------------------------------------------
/src/components/SubmitTreeOfflineWebModal/README.md:
--------------------------------------------------------------------------------
1 | # SubmitTreeOfflineWebModal
2 |
3 | > This component returns a medal to show the steps for submitting trees when user is offline on web
4 |
--------------------------------------------------------------------------------
/src/components/SwitchNetwork/README.md:
--------------------------------------------------------------------------------
1 | # SwitchNetwork
2 |
3 | > This component does return modal, user can switch between networks
4 |
5 | - ConfirmationNetWork: detail about selected network and 'yes' or 'no' buttons for switch network.
6 | - NetworkItem: switchable networks
7 | - SelectNetwork: list of networks, does return NetworkItem
8 | - SwitchNetwork: modal dose return ConfirmationNetWork and SelectNetwork
9 |
--------------------------------------------------------------------------------
/src/components/TabBar/README.md:
--------------------------------------------------------------------------------
1 | # TabBar
2 |
3 | > This component does return custom tab bar for tab navigation stack
4 |
--------------------------------------------------------------------------------
/src/components/TextField/README.md:
--------------------------------------------------------------------------------
1 | # TextField
2 |
3 | > This component does return controlled TextInput
4 |
--------------------------------------------------------------------------------
/src/components/TextField/index.tsx:
--------------------------------------------------------------------------------
1 | export {default, PhoneField} from './TextField';
2 |
--------------------------------------------------------------------------------
/src/components/Toast/README.md:
--------------------------------------------------------------------------------
1 | # Toast
2 |
3 | > Custom toast components
4 |
5 | - [CustomToast](./CustomToast.tsx): this component does return custom toast
6 | - [ToastContainer](./ToastContainer.tsx): this component does return ToastProvider with customization by the treejer [AlertMode](../../utilities/helpers/alert.ts)
7 |
--------------------------------------------------------------------------------
/src/components/TreeList/NoInternetTrees.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {Text, View} from 'react-native';
3 |
4 | export default function NoInternetTrees() {
5 | return (
6 |
7 | No Internet!
8 |
9 | );
10 | }
11 |
--------------------------------------------------------------------------------
/src/components/TreeList/README.md:
--------------------------------------------------------------------------------
1 | # TreeList
2 |
3 | - NoInternetTrees: no internet message
4 | - TreeFilterItem: tree list item in TreeList component
5 | - TreeImage: tree picture
6 | - TreeList: list of trees
7 | - TreeSymbol: main tree picture
8 | - TreeColorsInfoModal
9 |
--------------------------------------------------------------------------------
/src/components/TreeList/TreeFilterItem.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Button from 'components/Button';
3 | import {useTranslation} from 'react-i18next';
4 |
5 | export enum TreeFilter {
6 | All = 'All',
7 | Submitted = 'Submitted',
8 | Temp = 'Not Verified',
9 | OfflineCreate = 'Planted Offline',
10 | OfflineUpdate = 'Updated Offline',
11 | }
12 |
13 | export interface TreeFilterItem {
14 | caption: TreeFilter;
15 | offline?: boolean;
16 | }
17 |
18 | export type TreeFilterProps = {
19 | item: TreeFilterItem;
20 | currentFilter: TreeFilterItem | null;
21 | onPress: (item: TreeFilterItem) => void;
22 | };
23 |
24 | export function TreeFilterButton(props: TreeFilterProps) {
25 | const {item, currentFilter, onPress} = props;
26 |
27 | const {caption} = item;
28 | const variant = currentFilter?.caption === caption ? 'secondary' : 'primary';
29 |
30 | const {t} = useTranslation();
31 |
32 | return (
33 |