├── .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 | 29 | 34 | 35 | 44 | 49 | 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 | 11 | 12 | 13 | 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 | 13 | 17 | 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 | 14 | 15 | 16 | 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 | 11 | 12 | 13 | 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 |