├── .gitattributes ├── src ├── @types │ ├── index.d.ts │ └── navigation.d.ts ├── components │ ├── GoBack │ │ ├── index.ts │ │ ├── styles.ts │ │ └── GoBack.tsx │ ├── Header │ │ ├── index.ts │ │ ├── styles.ts │ │ └── Header.tsx │ ├── Profile │ │ ├── index.ts │ │ ├── styles.ts │ │ └── Profile.tsx │ ├── Input │ │ ├── index.tsx │ │ ├── styles.ts │ │ └── Input.tsx │ ├── Input_old │ │ ├── index.tsx │ │ ├── styles.ts │ │ └── Input.tsx │ ├── Notifications │ │ └── ContentTop │ │ │ ├── index.ts │ │ │ ├── styles.ts │ │ │ └── ContentTop.tsx │ ├── ButtonPersonalizado │ │ ├── index.ts │ │ ├── styles.ts │ │ ├── ButtonPersonalizado.tsx │ │ └── variants.ts │ ├── ButtonSocialGoogle │ │ ├── ButtonSocialGoogle.tsx │ │ └── styles.ts │ └── ButtonSocial │ │ ├── ButtonSocial.tsx │ │ └── styles.ts ├── screens │ ├── App │ │ ├── Profile │ │ │ ├── index.ts │ │ │ ├── styles.ts │ │ │ └── Profile.tsx │ │ ├── AddCartao │ │ │ ├── index.ts │ │ │ ├── styles.ts │ │ │ └── AddCartao.tsx │ │ ├── DetailsCard │ │ │ ├── index.ts │ │ │ ├── DetailsCard.tsx │ │ │ └── styles.ts │ │ └── Transcation │ │ │ ├── index.ts │ │ │ ├── styles.ts │ │ │ └── Transaction.tsx │ ├── Auth │ │ ├── Login │ │ │ ├── index.ts │ │ │ ├── styles.ts │ │ │ └── Login.tsx │ │ ├── Cadastro │ │ │ ├── index.ts │ │ │ ├── styles.ts │ │ │ └── Cadastro.tsx │ │ └── RecuperarSenha │ │ │ ├── index.ts │ │ │ ├── styles.ts │ │ │ └── RecuperarSenha.tsx │ └── Tab │ │ ├── Carteira │ │ ├── index.ts │ │ ├── Carteira.tsx │ │ └── styles.ts │ │ ├── Relatorio │ │ ├── index.ts │ │ ├── styles.ts │ │ └── Relatorio.tsx │ │ ├── Settings │ │ ├── index.ts │ │ ├── styles.ts │ │ └── Settings.tsx │ │ └── Notificacao │ │ ├── index.ts │ │ ├── styles.ts │ │ └── Notificacao.tsx ├── assets │ ├── visa.png │ ├── addcard.png │ ├── chipcard.png │ ├── convert.png │ ├── ellipse1.png │ ├── ellipse2.png │ ├── entrada.png │ ├── export.png │ ├── google.png │ ├── netflix.png │ ├── paypal.png │ ├── add-circle.png │ ├── money-send.png │ ├── carddetails.png │ └── estatistica.png ├── styles │ ├── styled.d.ts │ └── theme.ts ├── routes │ ├── index.tsx │ ├── auth.routes.tsx │ ├── app.routes.tsx │ └── tab.routes.tsx ├── utils │ ├── new_notifications.ts │ ├── limited_transaction.ts │ ├── recent_notifications.ts │ └── transaction.ts └── App.tsx ├── ios ├── Podfile.properties.json ├── walletapp │ ├── Images.xcassets │ │ ├── Contents.json │ │ ├── SplashScreen.imageset │ │ │ ├── splashscreen.png │ │ │ └── Contents.json │ │ ├── SplashScreenBackground.imageset │ │ │ ├── background.png │ │ │ └── Contents.json │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── AppDelegate.h │ ├── main.m │ ├── Supporting │ │ └── Expo.plist │ ├── Info.plist │ ├── SplashScreen.storyboard │ └── AppDelegate.mm ├── .gitignore ├── .xcode.env ├── Podfile └── walletapp.xcodeproj │ └── xcshareddata │ └── xcschemes │ └── walletapp.xcscheme ├── android ├── app │ ├── debug.keystore │ ├── src │ │ ├── main │ │ │ ├── res │ │ │ │ ├── values │ │ │ │ │ ├── strings.xml │ │ │ │ │ ├── colors.xml │ │ │ │ │ └── styles.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ └── drawable │ │ │ │ │ ├── splashscreen_image.png │ │ │ │ │ ├── splashscreen.xml │ │ │ │ │ └── rn_edit_text_material.xml │ │ │ ├── jni │ │ │ │ ├── MainApplicationModuleProvider.h │ │ │ │ ├── OnLoad.cpp │ │ │ │ ├── MainApplicationModuleProvider.cpp │ │ │ │ ├── MainComponentsRegistry.h │ │ │ │ ├── MainApplicationTurboModuleManagerDelegate.h │ │ │ │ ├── MainApplicationTurboModuleManagerDelegate.cpp │ │ │ │ ├── Android.mk │ │ │ │ └── MainComponentsRegistry.cpp │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── walletapp │ │ │ │ │ ├── newarchitecture │ │ │ │ │ ├── components │ │ │ │ │ │ └── MainComponentsRegistry.java │ │ │ │ │ ├── modules │ │ │ │ │ │ └── MainApplicationTurboModuleManagerDelegate.java │ │ │ │ │ └── MainApplicationReactNativeHost.java │ │ │ │ │ ├── MainActivity.java │ │ │ │ │ └── MainApplication.java │ │ │ └── AndroidManifest.xml │ │ └── debug │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ └── com │ │ │ └── walletapp │ │ │ └── ReactNativeFlipper.java │ ├── proguard-rules.pro │ ├── build_defs.bzl │ └── BUCK ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── .gitignore ├── settings.gradle ├── gradle.properties ├── build.gradle └── gradlew.bat ├── .buckconfig ├── .editorconfig ├── metro.config.js ├── app.json ├── App.tsx ├── index.js ├── .gitignore ├── Informacao.md ├── babel.config.js ├── LICENSE ├── tsconfig.json ├── package.json ├── documentacao.md └── README.md /.gitattributes: -------------------------------------------------------------------------------- 1 | *.pbxproj -text 2 | -------------------------------------------------------------------------------- /src/@types/index.d.ts: -------------------------------------------------------------------------------- 1 | declare module "*.png"; 2 | -------------------------------------------------------------------------------- /src/components/GoBack/index.ts: -------------------------------------------------------------------------------- 1 | export * from './GoBack'; -------------------------------------------------------------------------------- /src/components/Header/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./Header"; -------------------------------------------------------------------------------- /src/components/Profile/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./Profile"; -------------------------------------------------------------------------------- /src/screens/App/Profile/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Profile'; -------------------------------------------------------------------------------- /src/screens/App/AddCartao/index.ts: -------------------------------------------------------------------------------- 1 | export * from './AddCartao'; -------------------------------------------------------------------------------- /src/screens/Auth/Login/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./Login"; 2 | -------------------------------------------------------------------------------- /src/screens/Tab/Carteira/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Carteira'; -------------------------------------------------------------------------------- /src/screens/Tab/Relatorio/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Relatorio'; -------------------------------------------------------------------------------- /src/screens/Tab/Settings/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Settings'; -------------------------------------------------------------------------------- /ios/Podfile.properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "expo.jsEngine": "jsc" 3 | } 4 | -------------------------------------------------------------------------------- /src/components/Input/index.tsx: -------------------------------------------------------------------------------- 1 | export { default } from './Input'; -------------------------------------------------------------------------------- /src/screens/App/DetailsCard/index.ts: -------------------------------------------------------------------------------- 1 | export * from './DetailsCard'; -------------------------------------------------------------------------------- /src/screens/App/Transcation/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Transaction'; -------------------------------------------------------------------------------- /src/screens/Auth/Cadastro/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./Cadastro"; 2 | -------------------------------------------------------------------------------- /src/screens/Tab/Notificacao/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Notificacao'; -------------------------------------------------------------------------------- /src/components/Input_old/index.tsx: -------------------------------------------------------------------------------- 1 | export { default } from "./Input"; 2 | -------------------------------------------------------------------------------- /src/screens/Auth/RecuperarSenha/index.ts: -------------------------------------------------------------------------------- 1 | export * from './RecuperarSenha' -------------------------------------------------------------------------------- /src/components/Notifications/ContentTop/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ContentTop'; -------------------------------------------------------------------------------- /src/components/ButtonPersonalizado/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ButtonPersonalizado'; -------------------------------------------------------------------------------- /src/assets/visa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/src/assets/visa.png -------------------------------------------------------------------------------- /src/assets/addcard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/src/assets/addcard.png -------------------------------------------------------------------------------- /src/assets/chipcard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/src/assets/chipcard.png -------------------------------------------------------------------------------- /src/assets/convert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/src/assets/convert.png -------------------------------------------------------------------------------- /src/assets/ellipse1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/src/assets/ellipse1.png -------------------------------------------------------------------------------- /src/assets/ellipse2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/src/assets/ellipse2.png -------------------------------------------------------------------------------- /src/assets/entrada.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/src/assets/entrada.png -------------------------------------------------------------------------------- /src/assets/export.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/src/assets/export.png -------------------------------------------------------------------------------- /src/assets/google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/src/assets/google.png -------------------------------------------------------------------------------- /src/assets/netflix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/src/assets/netflix.png -------------------------------------------------------------------------------- /src/assets/paypal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/src/assets/paypal.png -------------------------------------------------------------------------------- /src/assets/add-circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/src/assets/add-circle.png -------------------------------------------------------------------------------- /src/assets/money-send.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/src/assets/money-send.png -------------------------------------------------------------------------------- /android/app/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/android/app/debug.keystore -------------------------------------------------------------------------------- /src/assets/carddetails.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/src/assets/carddetails.png -------------------------------------------------------------------------------- /src/assets/estatistica.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/src/assets/estatistica.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | wallet-app 3 | 4 | -------------------------------------------------------------------------------- /ios/walletapp/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "expo" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /.buckconfig: -------------------------------------------------------------------------------- 1 | 2 | [android] 3 | target = Google Inc.:Google APIs:23 4 | 5 | [maven_repositories] 6 | central = https://repo1.maven.org/maven2 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/splashscreen_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/android/app/src/main/res/drawable/splashscreen_image.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 4 6 | end_of_line = ls 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true -------------------------------------------------------------------------------- /android/app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFFFFF 4 | -------------------------------------------------------------------------------- /ios/walletapp/Images.xcassets/SplashScreen.imageset/splashscreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/ios/walletapp/Images.xcassets/SplashScreen.imageset/splashscreen.png -------------------------------------------------------------------------------- /metro.config.js: -------------------------------------------------------------------------------- 1 | // Learn more https://docs.expo.io/guides/customizing-metro 2 | const { getDefaultConfig } = require('expo/metro-config'); 3 | 4 | module.exports = getDefaultConfig(__dirname); 5 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "expo": { 3 | "name": "wallet-app", 4 | "slug": "wallet-app", 5 | "version": "1.0.0", 6 | "assetBundlePatterns": [ 7 | "**/*" 8 | ] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /ios/walletapp/Images.xcassets/SplashScreenBackground.imageset/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SilvaneiMartins/wallet-app/HEAD/ios/walletapp/Images.xcassets/SplashScreenBackground.imageset/background.png -------------------------------------------------------------------------------- /src/styles/styled.d.ts: -------------------------------------------------------------------------------- 1 | import 'styled-components'; 2 | import theme from './theme'; 3 | 4 | declare module 'styled-components' { 5 | type ThemeType = typeof theme 6 | export interface DefaultTheme extends ThemeType { } 7 | } 8 | -------------------------------------------------------------------------------- /App.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { View, Text } from 'react-native'; 3 | 4 | export const App = () => { 5 | return ( 6 | 7 | Wallet App 8 | 9 | ); 10 | } -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/splashscreen.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /ios/walletapp/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | #import 4 | 5 | #import 6 | 7 | @interface AppDelegate : EXAppDelegateWrapper 8 | 9 | @end 10 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /ios/walletapp/main.m: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #import "AppDelegate.h" 4 | 5 | int main(int argc, char * argv[]) { 6 | @autoreleasepool { 7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 8 | } 9 | } 10 | 11 | -------------------------------------------------------------------------------- /src/routes/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import { AppRoutes } from './app.routes'; 4 | import { AuthRoutes } from './auth.routes'; 5 | 6 | export const Routes = () => { 7 | const user = true; 8 | 9 | return user ? : ; 10 | } -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | # 3 | .DS_Store 4 | 5 | # Android/IntelliJ 6 | # 7 | build/ 8 | .idea 9 | .gradle 10 | local.properties 11 | *.iml 12 | *.hprof 13 | 14 | # BUCK 15 | buck-out/ 16 | \.buckd/ 17 | *.keystore 18 | !debug.keystore 19 | 20 | # Bundle artifacts 21 | *.jsbundle 22 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | import { registerRootComponent } from 'expo'; 2 | 3 | import { App } from './src/App'; 4 | 5 | // registerRootComponent calls AppRegistry.registerComponent('main', () => App); 6 | // It also ensures that whether you load the app in Expo Go or in a native build, 7 | // the environment is set up appropriately 8 | registerRootComponent(App); 9 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/components/GoBack/styles.ts: -------------------------------------------------------------------------------- 1 | import { Platform } from 'react-native'; 2 | import styled from 'styled-components/native'; 3 | 4 | export const Container = styled.TouchableOpacity` 5 | padding: 20px; 6 | width: 50px; 7 | height: 50px; 8 | margin-left: 35px; 9 | align-items: center; 10 | justify-content: center; 11 | margin-top: ${Platform.OS === 'ios' ? 0 : 50}px; 12 | `; 13 | -------------------------------------------------------------------------------- /ios/walletapp/Supporting/Expo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | EXUpdatesSDKVersion 6 | YOUR-APP-SDK-VERSION-HERE 7 | EXUpdatesURL 8 | YOUR-APP-URL-HERE 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/@types/navigation.d.ts: -------------------------------------------------------------------------------- 1 | export declare global { 2 | namespace ReactNavigation { 3 | interface RootParamList { 4 | Login: undefined, 5 | Cadastro: undefined, 6 | RecuperarSenha: undefined, 7 | Profile: undefined, 8 | AddCartao: undefined, 9 | 10 | DetailsCard: undefined, 11 | Transaction: undefined, 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /android/app/src/main/jni/MainApplicationModuleProvider.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | 8 | namespace facebook { 9 | namespace react { 10 | 11 | std::shared_ptr MainApplicationModuleProvider( 12 | const std::string moduleName, 13 | const JavaTurboModule::InitParams ¶ms); 14 | 15 | } // namespace react 16 | } // namespace facebook 17 | -------------------------------------------------------------------------------- /ios/walletapp/Images.xcassets/SplashScreen.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "idiom": "universal", 5 | "filename": "splashscreen.png", 6 | "scale": "1x" 7 | }, 8 | { 9 | "idiom": "universal", 10 | "scale": "2x" 11 | }, 12 | { 13 | "idiom": "universal", 14 | "scale": "3x" 15 | } 16 | ], 17 | "info": { 18 | "version": 1, 19 | "author": "expo" 20 | } 21 | } -------------------------------------------------------------------------------- /android/app/src/main/jni/OnLoad.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "MainApplicationTurboModuleManagerDelegate.h" 3 | #include "MainComponentsRegistry.h" 4 | 5 | JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) { 6 | return facebook::jni::initialize(vm, [] { 7 | facebook::react::MainApplicationTurboModuleManagerDelegate:: 8 | registerNatives(); 9 | facebook::react::MainComponentsRegistry::registerNatives(); 10 | }); 11 | } 12 | -------------------------------------------------------------------------------- /ios/walletapp/Images.xcassets/SplashScreenBackground.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "idiom": "universal", 5 | "filename": "background.png", 6 | "scale": "1x" 7 | }, 8 | { 9 | "idiom": "universal", 10 | "scale": "2x" 11 | }, 12 | { 13 | "idiom": "universal", 14 | "scale": "3x" 15 | } 16 | ], 17 | "info": { 18 | "version": 1, 19 | "author": "expo" 20 | } 21 | } -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | # 3 | .DS_Store 4 | 5 | # Xcode 6 | # 7 | build/ 8 | *.pbxuser 9 | !default.pbxuser 10 | *.mode1v3 11 | !default.mode1v3 12 | *.mode2v3 13 | !default.mode2v3 14 | *.perspectivev3 15 | !default.perspectivev3 16 | xcuserdata 17 | *.xccheckout 18 | *.moved-aside 19 | DerivedData 20 | *.hmap 21 | *.ipa 22 | *.xcuserstate 23 | project.xcworkspace 24 | .xcode.env.local 25 | 26 | # Bundle artifacts 27 | *.jsbundle 28 | 29 | # CocoaPods 30 | /Pods/ 31 | -------------------------------------------------------------------------------- /src/utils/new_notifications.ts: -------------------------------------------------------------------------------- 1 | export const new_notifications = [ 2 | { 3 | id: "1", 4 | datetime: "01/02/2023", 5 | title: "Você recebeu um novo pagamento R$ 50,00 de Silvio Martins", 6 | type: "Recebimento Pix", 7 | ativo: true, 8 | }, 9 | { 10 | id: "2", 11 | datetime: "30/01/2023", 12 | title: "Você recebeu um novo pagamento R$ 100,00 de Silvio Martins", 13 | type: "Cartão de Crédito", 14 | ativo: false, 15 | } 16 | ] -------------------------------------------------------------------------------- /ios/.xcode.env: -------------------------------------------------------------------------------- 1 | # This `.xcode.env` file is versioned and is used to source the environment 2 | # used when running script phases inside Xcode. 3 | # To customize your local environment, you can create an `.xcode.env.local` 4 | # file that is not versioned. 5 | 6 | # NODE_BINARY variable contains the PATH to the node executable. 7 | # 8 | # Customize the NODE_BINARY variable here. 9 | # For example, to use nvm with brew, add the following line 10 | # . "$(brew --prefix nvm)/nvm.sh" --no-use 11 | export NODE_BINARY=$(command -v node) 12 | -------------------------------------------------------------------------------- /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 | # react-native-reanimated 11 | -keep class com.swmansion.reanimated.** { *; } 12 | -keep class com.facebook.react.turbomodule.** { *; } 13 | 14 | # Add any project specific keep options here: 15 | -------------------------------------------------------------------------------- /src/components/Input/styles.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components/native'; 2 | 3 | export const Container = styled.View` 4 | width: 100%; 5 | height: 60px; 6 | padding: 0 12px; 7 | margin-top: 10px; 8 | border-radius: 8px; 9 | align-items: center; 10 | flex-direction: row; 11 | justify-content: center; 12 | background-color: ${({ theme }) => theme.COLORS.GRAY5}; 13 | `; 14 | 15 | export const InputContainer = styled.TextInput` 16 | border: 0; 17 | flex: 1; 18 | height: 50px; 19 | font-size: 16px; 20 | border-radius: 8px; 21 | font-family: ${({ theme }) => theme.FONTS.POPPINSLIGHT}; 22 | `; -------------------------------------------------------------------------------- /src/components/ButtonSocialGoogle/ButtonSocialGoogle.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { RectButtonProps } from "react-native-gesture-handler"; 3 | 4 | import PngGoogle from "../../assets/google.png"; 5 | import { Button, IconeGogle, Title } from "./styles"; 6 | 7 | interface Props extends RectButtonProps { 8 | title: string 9 | } 10 | 11 | const ButtonSocialGoogle: React.FC = ({ title, ...rest }) => { 12 | return ( 13 | 17 | ); 18 | }; 19 | 20 | export { ButtonSocialGoogle }; 21 | -------------------------------------------------------------------------------- /src/components/GoBack/GoBack.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { useTheme } from 'styled-components/native'; 3 | import { CaretCircleLeft } from 'phosphor-react-native'; 4 | import { useNavigation } from '@react-navigation/native'; 5 | 6 | import { Container } from './styles'; 7 | 8 | export const GoBack = () => { 9 | const { COLORS } = useTheme(); 10 | const navigation = useNavigation(); 11 | 12 | return ( 13 | navigation.goBack()}> 14 | 19 | 20 | ) 21 | } -------------------------------------------------------------------------------- /src/components/ButtonSocial/ButtonSocial.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Fontisto } from '@expo/vector-icons'; 3 | import { RectButtonProps } from "react-native-gesture-handler"; 4 | 5 | import { Button, IconFacebook, Title } from "./styles"; 6 | 7 | interface Props extends RectButtonProps { 8 | title: string; 9 | iconName: React.ComponentProps["name"] 10 | } 11 | 12 | const ButtonSocial: React.FC = ({ title, iconName,...rest }) => { 13 | return ( 14 | 18 | ); 19 | }; 20 | 21 | export { ButtonSocial }; 22 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /src/components/ButtonPersonalizado/styles.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components/native'; 2 | import { RFValue } from 'react-native-responsive-fontsize'; 3 | import { TouchableOpacity } from 'react-native'; 4 | 5 | export const Container = styled(TouchableOpacity).attrs({ 6 | 7 | })` 8 | width: 100%; 9 | height: 50px; 10 | align-items: center; 11 | justify-content: center; 12 | margin-top: ${RFValue(15)}px; 13 | border-radius: ${RFValue(8)}px; 14 | `; 15 | 16 | export const Content = styled.View` 17 | flex-direction: row; 18 | align-items: center; 19 | justify-content: center; 20 | `; 21 | 22 | export const Title = styled.Text` 23 | font-size: ${RFValue(18)}px; 24 | font-family: ${({ theme }) => theme.FONTS.POPPINSMEDIUM}; 25 | `; -------------------------------------------------------------------------------- /src/screens/Tab/Settings/styles.ts: -------------------------------------------------------------------------------- 1 | import styled from "styled-components/native"; 2 | 3 | export const Container = styled.View` 4 | flex: 1; 5 | padding: 10px 15px; 6 | `; 7 | 8 | export const ViewFooter = styled.View` 9 | width: 100%; 10 | align-items: center; 11 | justify-content: center; 12 | margin-top: 50px; 13 | `; 14 | 15 | export const TitleFooter = styled.Text` 16 | font-size: 17px; 17 | margin-top: 10px; 18 | color: ${({ theme }) => theme.COLORS.PURPLE_CARD}; 19 | font-family: ${({ theme }) => theme.FONTS.POPPINSREGULAR}; 20 | `; 21 | 22 | export const ViewIconButton = styled.View` 23 | padding: 10px; 24 | border-radius: 30px; 25 | border-width: 1px; 26 | border-color: ${({ theme }) => theme.COLORS.GRAY5}; 27 | `; -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | # 3 | .DS_Store 4 | 5 | # Xcode 6 | # 7 | build/ 8 | *.pbxuser 9 | !default.pbxuser 10 | *.mode1v3 11 | !default.mode1v3 12 | *.mode2v3 13 | !default.mode2v3 14 | *.perspectivev3 15 | !default.perspectivev3 16 | xcuserdata 17 | *.xccheckout 18 | *.moved-aside 19 | DerivedData 20 | *.hmap 21 | *.ipa 22 | *.xcuserstate 23 | project.xcworkspace 24 | 25 | # Android/IntelliJ 26 | # 27 | build/ 28 | .idea 29 | .gradle 30 | local.properties 31 | *.iml 32 | *.hprof 33 | 34 | # node.js 35 | # 36 | node_modules/ 37 | npm-debug.log 38 | yarn-error.log 39 | 40 | # BUCK 41 | buck-out/ 42 | \.buckd/ 43 | *.keystore 44 | !debug.keystore 45 | 46 | # Bundle artifacts 47 | *.jsbundle 48 | 49 | # CocoaPods 50 | /ios/Pods/ 51 | 52 | # Expo 53 | .expo/ 54 | web-build/ 55 | dist/ 56 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /ios/walletapp/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "expo" 37 | } 38 | } -------------------------------------------------------------------------------- /Informacao.md: -------------------------------------------------------------------------------- 1 | # Instalar framework externo; 2 | [X] Unform Core: @unform/core": "^2.1.3" 3 | [X] Unform Mobile: @unform/mobile": "^2.1.3" 4 | [X] Link do projeto: https://unform.dev/ 5 | 6 | Informação: 7 | Unform é uma API focada em desempenho para criar experiências de formulários poderosas para React e React Native. Usando ganchos, você pode criar formulários leves e combináveis com base em componentes ultrassensíveis. 8 | Integre-se a qualquer biblioteca de formulários, valide seus campos e tenha seus dados prontos para uso. 9 | 10 | # Trocar input das telas principais; 11 | 12 | Vamos refatorar os input das principais tela, vamos criar um input genérico aonde pode usar ícones tanto na esquerda quanto na direito. Vamos criar um componente aonde podemos utilizar na aplicação toda. 13 | -------------------------------------------------------------------------------- /src/routes/auth.routes.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createNativeStackNavigator } from '@react-navigation/native-stack'; 3 | 4 | import { Login } from '../screens/Auth/Login'; 5 | import { Cadastro } from '../screens/Auth/Cadastro'; 6 | import { RecuperarSenha } from '../screens/Auth/RecuperarSenha'; 7 | 8 | const { Navigator, Screen } = createNativeStackNavigator(); 9 | 10 | export const AuthRoutes = () => { 11 | return ( 12 | 18 | 19 | 20 | 21 | 22 | ) 23 | } -------------------------------------------------------------------------------- /android/app/src/main/jni/MainApplicationModuleProvider.cpp: -------------------------------------------------------------------------------- 1 | #include "MainApplicationModuleProvider.h" 2 | 3 | #include 4 | 5 | namespace facebook { 6 | namespace react { 7 | 8 | std::shared_ptr MainApplicationModuleProvider( 9 | const std::string moduleName, 10 | const JavaTurboModule::InitParams ¶ms) { 11 | // Here you can provide your own module provider for TurboModules coming from 12 | // either your application or from external libraries. The approach to follow 13 | // is similar to the following (for a library called `samplelibrary`: 14 | // 15 | // auto module = samplelibrary_ModuleProvider(moduleName, params); 16 | // if (module != nullptr) { 17 | // return module; 18 | // } 19 | // return rncore_ModuleProvider(moduleName, params); 20 | return rncore_ModuleProvider(moduleName, params); 21 | } 22 | 23 | } // namespace react 24 | } // namespace facebook 25 | -------------------------------------------------------------------------------- /src/components/ButtonSocialGoogle/styles.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components/native'; 2 | import { RectButton } from 'react-native-gesture-handler'; 3 | import { RFValue } from 'react-native-responsive-fontsize'; 4 | 5 | export const Button = styled(RectButton)` 6 | align-items: center; 7 | flex-direction: row; 8 | margin-bottom: 16px; 9 | justify-content: center; 10 | width: ${RFValue(145)}px; 11 | height: ${RFValue(50)}px; 12 | margin-left: ${RFValue(10)}px; 13 | border-radius: ${RFValue(5)}px; 14 | box-shadow: 1px 1px 1px rgba(0,0,0,0.1); 15 | background-color: ${({ theme }) => theme.COLORS.GRAY6}; 16 | `; 17 | 18 | export const IconeGogle = styled.Image` 19 | width: ${RFValue(25)}px; 20 | height: ${RFValue(25)}px; 21 | `; 22 | 23 | export const Title = styled.Text` 24 | font-size: ${RFValue(17)}px; 25 | margin-left: ${RFValue(10)}px; 26 | font-family: ${({ theme }) => theme.FONTS.POPPINSLIGHT}; 27 | `; 28 | -------------------------------------------------------------------------------- /src/utils/limited_transaction.ts: -------------------------------------------------------------------------------- 1 | import NetflixPng from "../assets/netflix.png"; 2 | import PaypalPng from "../assets/paypal.png"; 3 | import EntradaPng from "../assets/entrada.png"; 4 | 5 | export const limited_transaction = [ 6 | { 7 | id: "1", 8 | title: "Pagto Netflix", 9 | subtitle: "Pagto referente a netflix", 10 | amount: 49.99, 11 | icon: NetflixPng 12 | }, 13 | { 14 | id: "2", 15 | title: "Pagto Boleto Paypal", 16 | subtitle: "Pagto referente a boeleto paypal", 17 | amount: 99.50, 18 | icon: PaypalPng 19 | }, 20 | { 21 | id: "3", 22 | title: "Entrada", 23 | subtitle: "Valor referente a entrada", 24 | amount: 500.00, 25 | icon: EntradaPng 26 | }, 27 | { 28 | id: "4", 29 | title: "Pagto Netflix", 30 | subtitle: "Pagto referente a netflix", 31 | amount: 19.99, 32 | icon: NetflixPng 33 | } 34 | ] -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = function (api) { 2 | api.cache(true); 3 | return { 4 | presets: ['babel-preset-expo'], 5 | plugins: [ 6 | 'react-native-reanimated/plugin', 7 | [ 8 | 'module-resolver', 9 | { 10 | root: ['./src'], 11 | extensions: ['.js', '.jsx', '.ts', '.tsx'], 12 | alias: { 13 | '@assets': './src/assets', 14 | '@components': './src/components', 15 | '@config': './src/config', 16 | '@hooks': './src/hooks', 17 | '@routes': './src/routes', 18 | '@screens': './src/screens', 19 | '@services': './src/services', 20 | '@styles': './src/styles', 21 | '@utils': './src/utils', 22 | }, 23 | }, 24 | ], 25 | ], 26 | }; 27 | }; 28 | -------------------------------------------------------------------------------- /android/app/src/main/jni/MainComponentsRegistry.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | namespace facebook { 9 | namespace react { 10 | 11 | class MainComponentsRegistry 12 | : public facebook::jni::HybridClass { 13 | public: 14 | // Adapt it to the package you used for your Java class. 15 | constexpr static auto kJavaDescriptor = 16 | "Lcom/walletapp/newarchitecture/components/MainComponentsRegistry;"; 17 | 18 | static void registerNatives(); 19 | 20 | MainComponentsRegistry(ComponentFactory *delegate); 21 | 22 | private: 23 | static std::shared_ptr 24 | sharedProviderRegistry(); 25 | 26 | static jni::local_ref initHybrid( 27 | jni::alias_ref, 28 | ComponentFactory *delegate); 29 | }; 30 | 31 | } // namespace react 32 | } // namespace facebook 33 | -------------------------------------------------------------------------------- /src/routes/app.routes.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createNativeStackNavigator } from '@react-navigation/native-stack'; 3 | 4 | import { TabRoutes } from './tab.routes'; 5 | import { Profile } from '../screens/App/Profile'; 6 | import { AddCartao } from '../screens/App/AddCartao'; 7 | import { DetailsCard } from '../screens/App/DetailsCard'; 8 | import { Transaction } from '../screens/App/Transcation'; 9 | 10 | const { Navigator, Screen } = createNativeStackNavigator(); 11 | 12 | export const AppRoutes = () => { 13 | return ( 14 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | ) 27 | } -------------------------------------------------------------------------------- /src/components/ButtonSocial/styles.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components/native'; 2 | import { Fontisto } from '@expo/vector-icons'; 3 | import { RectButton } from 'react-native-gesture-handler'; 4 | import { RFValue } from 'react-native-responsive-fontsize'; 5 | 6 | export const Button = styled(RectButton)` 7 | align-items: center; 8 | flex-direction: row; 9 | margin-bottom: 16px; 10 | justify-content: center; 11 | width: ${RFValue(145)}px; 12 | height: ${RFValue(50)}px; 13 | margin-left: ${RFValue(10)}px; 14 | border-radius: ${RFValue(5)}px; 15 | box-shadow: 1px 1px 1px rgba(0,0,0, 0.1); 16 | background-color: ${({ theme }) => theme.COLORS.BLUE}; 17 | `; 18 | 19 | export const IconFacebook = styled(Fontisto)` 20 | font-size: ${RFValue(25)}px; 21 | color: ${({ theme }) => theme.COLORS.WHITE}; 22 | `; 23 | 24 | export const Title = styled.Text` 25 | font-size: ${RFValue(17)}px; 26 | margin-left: ${RFValue(10)}px; 27 | color: ${({ theme }) => theme.COLORS.WHITE}; 28 | font-family: ${({ theme }) => theme.FONTS.POPPINSLIGHT}; 29 | `; 30 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'walletapp' 2 | 3 | apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle"); 4 | useExpoModules() 5 | 6 | apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json')"].execute(null, rootDir).text.trim(), "../native_modules.gradle"); 7 | applyNativeModulesSettingsGradle(settings) 8 | 9 | include ':app' 10 | includeBuild(new File(["node", "--print", "require.resolve('react-native-gradle-plugin/package.json')"].execute(null, rootDir).text.trim()).getParentFile()) 11 | 12 | if (settings.hasProperty("newArchEnabled") && settings.newArchEnabled == "true") { 13 | include(":ReactAndroid") 14 | project(":ReactAndroid").projectDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), "../ReactAndroid"); 15 | include(":ReactAndroid:hermes-engine") 16 | project(":ReactAndroid:hermes-engine").projectDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), "../ReactAndroid/hermes-engine"); 17 | } 18 | -------------------------------------------------------------------------------- /src/components/Profile/styles.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components/native'; 2 | 3 | export const Container = styled.View``; 4 | 5 | export const ViewProfile = styled.View` 6 | flex-direction: row; 7 | align-items: center; 8 | padding: 5px 15px; 9 | margin-top: 15px; 10 | `; 11 | 12 | export const ViewIcon = styled.View.attrs({ 13 | shadowColor: "#000", 14 | shadowOffset: { 15 | width: 0, 16 | height: 1, 17 | }, 18 | shadowOpacity: 0.30, 19 | shadowRadius: 1.00, 20 | 21 | elevation: 3, 22 | })` 23 | width: 50px; 24 | height: 50px; 25 | align-items: center; 26 | justify-content: center; 27 | border-radius: 30px; 28 | background-color: ${({ theme }) => theme.COLORS.WHITE}; 29 | `; 30 | 31 | export const ViewRight = styled.View` 32 | flex: 1; 33 | margin-left: 15px; 34 | flex-direction: row; 35 | align-items: center; 36 | justify-content: space-between; 37 | `; 38 | 39 | export const ProfileName = styled.Text` 40 | font-size: 18px; 41 | justify-content: space-between; 42 | color: ${({ theme }) => theme.COLORS.PURPLE_CARD}; 43 | font-family: ${({ theme }) => theme.FONTS.POPPINSMEDIUM}; 44 | `; -------------------------------------------------------------------------------- /src/components/Header/styles.ts: -------------------------------------------------------------------------------- 1 | import { Platform, Pressable } from "react-native"; 2 | import styled from 'styled-components/native'; 3 | 4 | export const Container = styled.View` 5 | width: 100%; 6 | padding: 10px; 7 | align-items: center; 8 | flex-direction: row; 9 | justify-content: space-between; 10 | margin-top: ${Platform.OS === "ios" ? 0 : 25}px; 11 | `; 12 | 13 | export const ContentHeader = styled.View` 14 | flex: 1; 15 | padding: 10px; 16 | justify-content: center; 17 | `; 18 | 19 | export const Avatar = styled.Image` 20 | width: 56px; 21 | height: 56px; 22 | border-radius: 30px; 23 | margin-right: 20px; 24 | `; 25 | 26 | export const AppName = styled.Text` 27 | font-size: 20px; 28 | line-height: 29.8px; 29 | color: ${({ theme }) => theme.COLORS.GRAY1}; 30 | font-family: ${({ theme }) => theme.FONTS.POPPINSBOLD}; 31 | `; 32 | 33 | export const Status = styled.Text` 34 | font-size: 15px; 35 | color: ${({ theme }) => theme.COLORS.GRAY4}; 36 | font-family: ${({ theme }) => theme.FONTS.POPPINSMEDIUM}; 37 | `; 38 | 39 | export const IconButton = styled(Pressable)` 40 | width: 40px; 41 | height: 40px; 42 | margin-left: 10px; 43 | `; -------------------------------------------------------------------------------- /src/screens/App/AddCartao/styles.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components/native'; 2 | 3 | export const Container = styled.View` 4 | flex: 1; 5 | width: 100%; 6 | align-items: center; 7 | `; 8 | 9 | export const Title = styled.Text` 10 | width: 100%; 11 | font-size: 30px; 12 | margin-top: 50px; 13 | text-align: center; 14 | color: ${({ theme }) => theme.COLORS.PURPLE_TEXT}; 15 | `; 16 | 17 | export const Content = styled.ImageBackground` 18 | width: 240px; 19 | height: 340px; 20 | margin-top: 60px; 21 | border-radius: 50px; 22 | align-items: center; 23 | justify-content: center; 24 | background-color: ${({ theme }) => theme.COLORS.PURPLE_CARD}; 25 | `; 26 | 27 | export const SubTitle = styled.Text` 28 | font-size: 16px; 29 | line-height: 20px; 30 | text-align: center; 31 | margin-top: 60px; 32 | color: ${({ theme }) => theme.COLORS.GRAY1}; 33 | font-family: ${({ theme }) => theme.FONTS.POPPINSREGULAR}; 34 | `; 35 | 36 | export const ContentChip = styled.Image` 37 | width: 35px; 38 | height: 40px; 39 | position: absolute; 40 | top: 75px; 41 | left: 50px; 42 | `; 43 | 44 | export const ContetVisa = styled.Image` 45 | width: 66px; 46 | height: 20px; 47 | position: absolute; 48 | bottom: 40px; 49 | right: 27px; 50 | `; -------------------------------------------------------------------------------- /android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #include 5 | #include 6 | 7 | namespace facebook { 8 | namespace react { 9 | 10 | class MainApplicationTurboModuleManagerDelegate 11 | : public jni::HybridClass< 12 | MainApplicationTurboModuleManagerDelegate, 13 | TurboModuleManagerDelegate> { 14 | public: 15 | // Adapt it to the package you used for your Java class. 16 | static constexpr auto kJavaDescriptor = 17 | "Lcom/walletapp/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate;"; 18 | 19 | static jni::local_ref initHybrid(jni::alias_ref); 20 | 21 | static void registerNatives(); 22 | 23 | std::shared_ptr getTurboModule( 24 | const std::string name, 25 | const std::shared_ptr jsInvoker) override; 26 | std::shared_ptr getTurboModule( 27 | const std::string name, 28 | const JavaTurboModule::InitParams ¶ms) override; 29 | 30 | /** 31 | * Test-only method. Allows user to verify whether a TurboModule can be 32 | * created by instances of this class. 33 | */ 34 | bool canCreateTurboModule(std::string name); 35 | }; 36 | 37 | } // namespace react 38 | } // namespace facebook 39 | -------------------------------------------------------------------------------- /android/app/src/main/java/com/walletapp/newarchitecture/components/MainComponentsRegistry.java: -------------------------------------------------------------------------------- 1 | package com.walletapp.newarchitecture.components; 2 | 3 | import com.facebook.jni.HybridData; 4 | import com.facebook.proguard.annotations.DoNotStrip; 5 | import com.facebook.react.fabric.ComponentFactory; 6 | import com.facebook.soloader.SoLoader; 7 | 8 | /** 9 | * Class responsible to load the custom Fabric Components. This class has native methods and needs a 10 | * corresponding C++ implementation/header file to work correctly (already placed inside the jni/ 11 | * folder for you). 12 | * 13 | *

Please note that this class is used ONLY if you opt-in for the New Architecture (see the 14 | * `newArchEnabled` property). Is ignored otherwise. 15 | */ 16 | @DoNotStrip 17 | public class MainComponentsRegistry { 18 | static { 19 | SoLoader.loadLibrary("fabricjni"); 20 | } 21 | 22 | @DoNotStrip private final HybridData mHybridData; 23 | 24 | @DoNotStrip 25 | private native HybridData initHybrid(ComponentFactory componentFactory); 26 | 27 | @DoNotStrip 28 | private MainComponentsRegistry(ComponentFactory componentFactory) { 29 | mHybridData = initHybrid(componentFactory); 30 | } 31 | 32 | @DoNotStrip 33 | public static MainComponentsRegistry register(ComponentFactory componentFactory) { 34 | return new MainComponentsRegistry(componentFactory); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Silvanei Martins 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | Informação do desenvolvedor: 24 | GitHub: https://github.com/SilvaneiMartins 25 | Porrifólio: https://silvaneimartins.com.br/ 26 | LinkedIn: https://www.linkedin.com/in/silvanei-martins-a5412436 27 | Youtube: https://www.youtube.com/channel/UCmYDvec1_liMzbQcbXtuLmg/videos -------------------------------------------------------------------------------- /src/screens/App/Transcation/styles.ts: -------------------------------------------------------------------------------- 1 | import { Pressable } from 'react-native'; 2 | import styled from 'styled-components/native'; 3 | 4 | export const Container = styled.View` 5 | flex: 1; 6 | `; 7 | 8 | export const ContentFlat = styled.View` 9 | padding: 5px; 10 | margin-right: 10px; 11 | flex-direction: row; 12 | `; 13 | 14 | export const IconTransaction = styled.Image` 15 | width: 60px; 16 | height: 60px; 17 | `; 18 | 19 | export const DetailsTransaction = styled.View` 20 | flex: 1; 21 | `; 22 | 23 | export const NameTransaction = styled.Text` 24 | font-weight: 900; 25 | font-size: 16px; 26 | color: ${({ theme }) => theme.COLORS.GRAY1}; 27 | font-weight: ${({ theme }) => theme.FONTS.POPPINSREGULAR}; 28 | `; 29 | 30 | export const SubtTitleTransaction = styled.Text` 31 | font-size: 14px; 32 | color: ${({ theme }) => theme.COLORS.GRAY4}; 33 | font-weight: ${({ theme }) => theme.FONTS.POPPINSLIGHT}; 34 | `; 35 | 36 | export const AmountTransaction = styled.Text` 37 | font-weight: 900; 38 | font-size: 16px; 39 | color: ${({ theme }) => theme.COLORS.GRAY1}; 40 | font-weight: ${({ theme }) => theme.FONTS.POPPINSREGULAR}; 41 | `; 42 | 43 | export const ButtonGoBack = styled(Pressable)` 44 | position: absolute; 45 | bottom: 20px; 46 | right: 30px; 47 | padding: 10px; 48 | border-radius: 30px 49 | background-color: ${({ theme }) => theme.COLORS.GRAY4}; 50 | `; -------------------------------------------------------------------------------- /src/screens/App/AddCartao/AddCartao.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Pressable } from 'react-native'; 3 | import { useNavigation } from '@react-navigation/native'; 4 | 5 | import VisaPng from '../../../assets/visa.png'; 6 | import BgPng from '../../../assets/addcard.png'; 7 | import ChipPng from '../../../assets/chipcard.png'; 8 | import { GoBack } from '../../../components/GoBack' 9 | import { 10 | Container, 11 | Title, 12 | Content, 13 | SubTitle, 14 | ContentChip, 15 | ContetVisa, 16 | } from './styles'; 17 | 18 | export const AddCartao = () => { 19 | const navigation = useNavigation(); 20 | 21 | const handleAddCartao = () => { 22 | navigation.navigate('DetailsCard'); 23 | } 24 | 25 | return ( 26 | <> 27 | 28 | 29 | Adicionar Cartão 30 | 31 | 32 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | Adicionar um novo cartão {'\n'} 42 | na sua carteira para uma vida fácil 43 | 44 | 45 | 46 | ) 47 | } -------------------------------------------------------------------------------- /src/screens/Auth/RecuperarSenha/styles.ts: -------------------------------------------------------------------------------- 1 | import styled from "styled-components/native"; 2 | 3 | export const Container = styled.View` 4 | padding: 20px;; 5 | `; 6 | 7 | export const ContentHeadedr = styled.View` 8 | width: 100%; 9 | margin-left: -10px; 10 | align-items: center; 11 | justify-content: space-between; 12 | `; 13 | 14 | export const Title = styled.Text` 15 | text-align: center; 16 | font-size: 25px; 17 | margin-top: 40px; 18 | font-family: ${({ theme }) => theme.FONTS.POPPINSMEDIUM}; 19 | `; 20 | 21 | export const Description = styled.Text` 22 | margin-top: 60px; 23 | font-size: 30px; 24 | margin-bottom: 10px; 25 | font-family: ${({ theme }) => theme.FONTS.POPPINSBOLD}; 26 | `; 27 | 28 | export const ContendBody = styled.View` 29 | margin-top: 80px; 30 | `; 31 | 32 | export const ContentFooter = styled.View` 33 | margin-top: 80px; 34 | align-items: center; 35 | justify-content: center; 36 | `; 37 | 38 | export const ButtonGoBack = styled.TouchableOpacity` 39 | flex-direction: row; 40 | align-items: center; 41 | justify-content: center; 42 | `; 43 | 44 | export const Title1 = styled.Text` 45 | font-size: 14px; 46 | color: ${({ theme }) => theme.COLORS.GRAY3}; 47 | font-family: ${({ theme }) => theme.FONTS.POPPINSMEDIUM}; 48 | `; 49 | 50 | export const Title2 = styled.Text` 51 | margin-left: 10px; 52 | font-size: 17px; 53 | color: ${({ theme }) => theme.COLORS.BLUE}; 54 | font-family: ${({ theme }) => theme.FONTS.POPPINSBOLD}; 55 | `; 56 | -------------------------------------------------------------------------------- /android/app/BUCK: -------------------------------------------------------------------------------- 1 | # To learn about Buck see [Docs](https://buckbuild.com/). 2 | # To run your application with Buck: 3 | # - install Buck 4 | # - `npm start` - to start the packager 5 | # - `cd android` 6 | # - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` 7 | # - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck 8 | # - `buck install -r android/app` - compile, install and run application 9 | # 10 | 11 | load(":build_defs.bzl", "create_aar_targets", "create_jar_targets") 12 | 13 | lib_deps = [] 14 | 15 | create_aar_targets(glob(["libs/*.aar"])) 16 | 17 | create_jar_targets(glob(["libs/*.jar"])) 18 | 19 | android_library( 20 | name = "all-libs", 21 | exported_deps = lib_deps, 22 | ) 23 | 24 | android_library( 25 | name = "app-code", 26 | srcs = glob([ 27 | "src/main/java/**/*.java", 28 | ]), 29 | deps = [ 30 | ":all-libs", 31 | ":build_config", 32 | ":res", 33 | ], 34 | ) 35 | 36 | android_build_config( 37 | name = "build_config", 38 | package = "com.walletapp", 39 | ) 40 | 41 | android_resource( 42 | name = "res", 43 | package = "com.walletapp", 44 | res = "src/main/res", 45 | ) 46 | 47 | android_binary( 48 | name = "app", 49 | keystore = "//android/keystores:debug", 50 | manifest = "src/main/AndroidManifest.xml", 51 | package_type = "debug", 52 | deps = [ 53 | ":app-code", 54 | ], 55 | ) 56 | -------------------------------------------------------------------------------- /src/screens/Auth/Cadastro/styles.ts: -------------------------------------------------------------------------------- 1 | import { Pressable } from 'react-native'; 2 | import styled from 'styled-components/native'; 3 | 4 | export const Container = styled.View` 5 | padding: 20px; 6 | `; 7 | 8 | export const ContentHeader = styled.View` 9 | width: 100%; 10 | margin-left: -10px; 11 | align-items: center; 12 | justify-content: space-between; 13 | `; 14 | 15 | export const Title = styled.Text` 16 | text-align: center; 17 | font-size: 25px; 18 | margin-top: 40px; 19 | font-family: ${({ theme }) => theme.FONTS.POPPINSMEDIUM}; 20 | `; 21 | 22 | export const Description = styled.Text` 23 | font-size: 35px; 24 | margin-top: 60px; 25 | margin-bottom: 10px; 26 | font-family: ${({ theme }) => theme.FONTS.POPPINSEXTRABOLD}; 27 | `; 28 | 29 | export const ContentBody = styled.View` 30 | margin-bottom: 20px; 31 | `; 32 | 33 | export const ContentFoooter = styled.View` 34 | margin-top: 50px; 35 | align-items: center; 36 | justify-content: center; 37 | `; 38 | 39 | export const ButtonFooter = styled(Pressable)` 40 | align-items: center; 41 | justify-content: center; 42 | flex-direction: row; 43 | `; 44 | 45 | export const Title1 = styled.Text` 46 | font-size: 14px; 47 | color: ${({ theme }) => theme.COLORS.GRAY3}; 48 | font-family: ${({ theme }) => theme.FONTS.POPPINSMEDIUM}; 49 | `; 50 | 51 | export const Title2 = styled.Text` 52 | font-size: 14px; 53 | margin-left: 10px; 54 | color: ${({ theme }) => theme.COLORS.BLUE}; 55 | font-family: ${({ theme }) => theme.FONTS.POPPINSBOLD}; 56 | `; 57 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "expo/tsconfig.base", 3 | "compilerOptions": { 4 | "target": "esnext", 5 | "module": "commonjs", 6 | "lib": [ 7 | "es2017" 8 | ], 9 | "allowJs": true, 10 | "jsx": "react-native", 11 | "noEmit": true, 12 | "isolatedModules": true, 13 | "strict": true, 14 | "moduleResolution": "node", 15 | "allowSyntheticDefaultImports": true, 16 | "forceConsistentCasingInFileNames": true, 17 | "esModuleInterop": true, 18 | "skipLibCheck": true, 19 | "resolveJsonModule": true, 20 | "baseUrl": "./", 21 | "paths": { 22 | "@src/*": [ 23 | "./src/*" 24 | ], 25 | "@assets/*": [ 26 | "./assets/*" 27 | ], 28 | "@components/*": [ 29 | "./components/*" 30 | ], 31 | "@config/*": [ 32 | "./config/*" 33 | ], 34 | "@hooks/*": [ 35 | "./hooks/*" 36 | ], 37 | "@routes/*": [ 38 | "./routes/*" 39 | ], 40 | "@screens/*": [ 41 | "./screens/*" 42 | ], 43 | "@services/*": [ 44 | "./services/*" 45 | ], 46 | "@styles/*": [ 47 | "./styles/*" 48 | ], 49 | "@utils/*": [ 50 | "./utils/*" 51 | ] 52 | } 53 | }, 54 | "include": [ 55 | "src/**/*" 56 | ], 57 | } -------------------------------------------------------------------------------- /src/components/Notifications/ContentTop/styles.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components/native'; 2 | 3 | export const ContentFlat = styled.View` 4 | margin-top: 10px; 5 | border-radius: 17px; 6 | flex-direction: row; 7 | align-items: center; 8 | justify-content: space-between; 9 | background-color: ${({ theme }) => theme.COLORS.WHITE}; 10 | `; 11 | 12 | export const NewNotificationsFlat = styled.View` 13 | width: 83%; 14 | height: 88px; 15 | padding: 10px; 16 | padding-left: 20px; 17 | `; 18 | 19 | export const DataNotifications = styled.Text``; 20 | 21 | export const DataNotificationsText = styled.Text` 22 | font-size: 12px; 23 | color: ${({ theme }) => theme.COLORS.GRAY4}; 24 | `; 25 | 26 | export const TitleNotifications = styled.View` 27 | `; 28 | 29 | export const TitleNotificationsText = styled.Text` 30 | font-size: 14px; 31 | font-weight: 500; 32 | color: ${({ theme }) => theme.COLORS.TYPOSECONDARY}; 33 | `; 34 | 35 | export const DescriptionNotifications = styled.View``; 36 | 37 | export const DescriptionNotificationsText = styled.Text` 38 | font-size: 12px; 39 | color: ${({ theme }) => theme.COLORS.GRAY4}; 40 | `; 41 | 42 | export const NewButtonNotifications = styled.TouchableOpacity` 43 | width: 50px; 44 | height: 88px; 45 | align-items: center; 46 | justify-content: center; 47 | `; 48 | 49 | export const Badge = styled.View` 50 | top: -3px; 51 | right: 8px; 52 | width: 15px; 53 | height: 15px; 54 | position: absolute; 55 | border-radius: 10px; 56 | 57 | background-color: tomato; 58 | `; 59 | -------------------------------------------------------------------------------- /android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp: -------------------------------------------------------------------------------- 1 | #include "MainApplicationTurboModuleManagerDelegate.h" 2 | #include "MainApplicationModuleProvider.h" 3 | 4 | namespace facebook { 5 | namespace react { 6 | 7 | jni::local_ref 8 | MainApplicationTurboModuleManagerDelegate::initHybrid( 9 | jni::alias_ref) { 10 | return makeCxxInstance(); 11 | } 12 | 13 | void MainApplicationTurboModuleManagerDelegate::registerNatives() { 14 | registerHybrid({ 15 | makeNativeMethod( 16 | "initHybrid", MainApplicationTurboModuleManagerDelegate::initHybrid), 17 | makeNativeMethod( 18 | "canCreateTurboModule", 19 | MainApplicationTurboModuleManagerDelegate::canCreateTurboModule), 20 | }); 21 | } 22 | 23 | std::shared_ptr 24 | MainApplicationTurboModuleManagerDelegate::getTurboModule( 25 | const std::string name, 26 | const std::shared_ptr jsInvoker) { 27 | // Not implemented yet: provide pure-C++ NativeModules here. 28 | return nullptr; 29 | } 30 | 31 | std::shared_ptr 32 | MainApplicationTurboModuleManagerDelegate::getTurboModule( 33 | const std::string name, 34 | const JavaTurboModule::InitParams ¶ms) { 35 | return MainApplicationModuleProvider(name, params); 36 | } 37 | 38 | bool MainApplicationTurboModuleManagerDelegate::canCreateTurboModule( 39 | std::string name) { 40 | return getTurboModule(name, nullptr) != nullptr || 41 | getTurboModule(name, {.moduleName = name}) != nullptr; 42 | } 43 | 44 | } // namespace react 45 | } // namespace facebook 46 | -------------------------------------------------------------------------------- /src/screens/App/Profile/styles.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components/native'; 2 | 3 | export const Container = styled.View` 4 | padding: 20px; 5 | `; 6 | 7 | export const Header = styled.View` 8 | width: 100%; 9 | align-items: center; 10 | justify-content: center; 11 | `; 12 | 13 | export const Content = styled.View` 14 | margin-top: 30px; 15 | `; 16 | 17 | export const Footer = styled.View` 18 | margin-top: 10px; 19 | `; 20 | 21 | export const Avatar = styled.Image` 22 | width: 95px; 23 | height: 95px; 24 | border-radius: 45px; 25 | `; 26 | 27 | export const ViewHeader = styled.View` 28 | flex-direction: row; 29 | align-items: center; 30 | justify-content: center; 31 | margin-top: 10px; 32 | `; 33 | 34 | export const HeaderName = styled.Text` 35 | font-size: 22px; 36 | margin-right: 15px; 37 | color: ${({ theme }) => theme.COLORS.PURPLE_CARD}; 38 | font-family: ${({ theme }) => theme.FONTS.POPPINSLIGHT}; 39 | `; 40 | 41 | export const IconButton = styled.TouchableOpacity` 42 | 43 | `; 44 | 45 | export const ViewFooter = styled.View` 46 | width: 100%; 47 | align-items: center; 48 | justify-content: center; 49 | margin-top: 50px; 50 | `; 51 | 52 | export const TitleFooter = styled.Text` 53 | font-size: 17px; 54 | margin-top: 10px; 55 | color: ${({ theme }) => theme.COLORS.PURPLE_CARD}; 56 | font-family: ${({ theme }) => theme.FONTS.POPPINSREGULAR}; 57 | `; 58 | 59 | export const ViewIconButton = styled.View` 60 | padding: 10px; 61 | border-radius: 30px; 62 | border-width: 1px; 63 | border-color: ${({ theme }) => theme.COLORS.GRAY5}; 64 | `; -------------------------------------------------------------------------------- /src/App.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { StatusBar } from "expo-status-bar"; 3 | import { ThemeProvider } from "styled-components/native"; 4 | import { View, ActivityIndicator, Text } from "react-native"; 5 | import { NavigationContainer } from '@react-navigation/native'; 6 | 7 | import { 8 | useFonts, 9 | Poppins_300Light, 10 | Poppins_400Regular, 11 | Poppins_500Medium, 12 | Poppins_700Bold, 13 | Poppins_800ExtraBold, 14 | } from "@expo-google-fonts/poppins"; 15 | 16 | import { DMSans_400Regular } from "@expo-google-fonts/dm-sans"; 17 | import { DMSerifDisplay_400Regular } from "@expo-google-fonts/dm-serif-display"; 18 | 19 | import theme from "../src/styles/theme"; 20 | import { Routes } from './routes' 21 | 22 | export const App = () => { 23 | const [fontsLoaded] = useFonts({ 24 | Poppins_300Light, 25 | Poppins_400Regular, 26 | Poppins_500Medium, 27 | Poppins_700Bold, 28 | Poppins_800ExtraBold, 29 | DMSans_400Regular, 30 | DMSerifDisplay_400Regular, 31 | }); 32 | 33 | if (!fontsLoaded) { 34 | return ; 35 | } 36 | 37 | return ( 38 | 39 | 40 | 41 | 47 | 48 | 49 | 50 | 51 | ); 52 | }; -------------------------------------------------------------------------------- /android/app/src/main/jni/Android.mk: -------------------------------------------------------------------------------- 1 | THIS_DIR := $(call my-dir) 2 | 3 | include $(REACT_ANDROID_DIR)/Android-prebuilt.mk 4 | 5 | # If you wish to add a custom TurboModule or Fabric component in your app you 6 | # will have to include the following autogenerated makefile. 7 | # include $(GENERATED_SRC_DIR)/codegen/jni/Android.mk 8 | include $(CLEAR_VARS) 9 | 10 | LOCAL_PATH := $(THIS_DIR) 11 | 12 | # You can customize the name of your application .so file here. 13 | LOCAL_MODULE := walletapp_appmodules 14 | 15 | LOCAL_C_INCLUDES := $(LOCAL_PATH) 16 | LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp) 17 | LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) 18 | 19 | # If you wish to add a custom TurboModule or Fabric component in your app you 20 | # will have to uncomment those lines to include the generated source 21 | # files from the codegen (placed in $(GENERATED_SRC_DIR)/codegen/jni) 22 | # 23 | # LOCAL_C_INCLUDES += $(GENERATED_SRC_DIR)/codegen/jni 24 | # LOCAL_SRC_FILES += $(wildcard $(GENERATED_SRC_DIR)/codegen/jni/*.cpp) 25 | # LOCAL_EXPORT_C_INCLUDES += $(GENERATED_SRC_DIR)/codegen/jni 26 | 27 | # Here you should add any native library you wish to depend on. 28 | LOCAL_SHARED_LIBRARIES := \ 29 | libfabricjni \ 30 | libfbjni \ 31 | libfolly_runtime \ 32 | libglog \ 33 | libjsi \ 34 | libreact_codegen_rncore \ 35 | libreact_debug \ 36 | libreact_nativemodule_core \ 37 | libreact_render_componentregistry \ 38 | libreact_render_core \ 39 | libreact_render_debug \ 40 | libreact_render_graphics \ 41 | librrc_view \ 42 | libruntimeexecutor \ 43 | libturbomodulejsijni \ 44 | libyoga 45 | 46 | LOCAL_CFLAGS := -DLOG_TAG=\"ReactNative\" -fexceptions -frtti -std=c++17 -Wall 47 | 48 | include $(BUILD_SHARED_LIBRARY) 49 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wallet-app", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "scripts": { 6 | "start": "expo start --dev-client", 7 | "android": "expo run:android", 8 | "ios": "expo run:ios", 9 | "web": "expo start --web", 10 | "clean": "cd android && .\\/gradlew clean && cd .. && yarn install && cd .." 11 | }, 12 | "dependencies": { 13 | "@expo-google-fonts/dm-sans": "^0.2.2", 14 | "@expo-google-fonts/dm-serif-display": "^0.2.2", 15 | "@expo-google-fonts/poppins": "^0.2.2", 16 | "@expo/vector-icons": "^13.0.0", 17 | "@react-navigation/bottom-tabs": "^6.4.0", 18 | "@react-navigation/native": "^6.0.13", 19 | "@react-navigation/native-stack": "^6.9.0", 20 | "@unform/core": "2.1.3", 21 | "@unform/mobile": "2.1.3", 22 | "expo": "~46.0.9", 23 | "expo-splash-screen": "~0.16.2", 24 | "expo-status-bar": "~1.4.0", 25 | "phosphor-react-native": "^1.1.2", 26 | "react": "18.0.0", 27 | "react-dom": "18.0.0", 28 | "react-native": "0.69.9", 29 | "react-native-gesture-handler": "~2.5.0", 30 | "react-native-iphone-x-helper": "^1.3.1", 31 | "react-native-reanimated": "~2.9.1", 32 | "react-native-responsive-fontsize": "^0.5.1", 33 | "react-native-safe-area-context": "4.3.1", 34 | "react-native-screens": "~3.15.0", 35 | "react-native-svg": "12.3.0", 36 | "react-native-web": "~0.18.7", 37 | "styled-components": "^5.3.5" 38 | }, 39 | "devDependencies": { 40 | "@babel/core": "^7.12.9", 41 | "@types/react": "~18.0.0", 42 | "@types/react-native": "~0.69.1", 43 | "@types/styled-components-react-native": "^5.1.3", 44 | "babel-plugin-module-resolver": "^4.1.0", 45 | "typescript": "^4.6.3" 46 | }, 47 | "private": true 48 | } 49 | -------------------------------------------------------------------------------- /ios/Podfile: -------------------------------------------------------------------------------- 1 | require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking") 2 | require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods") 3 | require File.join(File.dirname(`node --print "require.resolve('@react-native-community/cli-platform-ios/package.json')"`), "native_modules") 4 | 5 | require 'json' 6 | podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {} 7 | 8 | platform :ios, podfile_properties['ios.deploymentTarget'] || '12.4' 9 | install! 'cocoapods', 10 | :deterministic_uuids => false 11 | 12 | target 'walletapp' do 13 | use_expo_modules! 14 | config = use_native_modules! 15 | 16 | use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks'] 17 | 18 | # Flags change depending on the env values. 19 | flags = get_default_flags() 20 | 21 | use_react_native!( 22 | :path => config[:reactNativePath], 23 | :hermes_enabled => flags[:hermes_enabled] || podfile_properties['expo.jsEngine'] == 'hermes', 24 | :fabric_enabled => flags[:fabric_enabled], 25 | # An absolute path to your application root. 26 | :app_path => "#{Dir.pwd}/.." 27 | ) 28 | 29 | # Uncomment to opt-in to using Flipper 30 | # Note that if you have use_frameworks! enabled, Flipper will not work 31 | # 32 | # if !ENV['CI'] 33 | # use_flipper!() 34 | # end 35 | 36 | post_install do |installer| 37 | react_native_post_install(installer) 38 | __apply_Xcode_12_5_M1_post_install_workaround(installer) 39 | end 40 | 41 | post_integrate do |installer| 42 | begin 43 | expo_patch_react_imports!(installer) 44 | rescue => e 45 | Pod::UI.warn e 46 | end 47 | end 48 | 49 | end 50 | -------------------------------------------------------------------------------- /ios/walletapp/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleSignature 18 | ???? 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | NSAppTransportSecurity 26 | 27 | NSAllowsArbitraryLoads 28 | 29 | NSExceptionDomains 30 | 31 | localhost 32 | 33 | NSExceptionAllowsInsecureHTTPLoads 34 | 35 | 36 | 37 | 38 | UILaunchStoryboardName 39 | SplashScreen 40 | UIRequiredDeviceCapabilities 41 | 42 | armv7 43 | 44 | UISupportedInterfaceOrientations 45 | 46 | UIInterfaceOrientationPortrait 47 | UIInterfaceOrientationLandscapeLeft 48 | UIInterfaceOrientationLandscapeRight 49 | 50 | UIViewControllerBasedStatusBarAppearance 51 | 52 | UIStatusBarStyle 53 | UIStatusBarStyleDefault 54 | 55 | 56 | -------------------------------------------------------------------------------- /src/components/Input/Input.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react' 2 | import Icon from '@expo/vector-icons/Ionicons'; 3 | import { useTheme } from 'styled-components'; 4 | import { TextInputProps, TouchableOpacity } from 'react-native'; 5 | 6 | import { Container, InputContainer } from './styles' 7 | 8 | interface InputProps extends TextInputProps { 9 | iconSize?: number; 10 | iconColor?: string; 11 | LeftIcon?: boolean; 12 | RightIcon?: boolean; 13 | iconName: keyof typeof Icon.glyphMap; 14 | secureTextEntry?: boolean; 15 | } 16 | 17 | const Input = ({ 18 | RightIcon, 19 | LeftIcon, 20 | iconName, 21 | iconSize, 22 | iconColor, 23 | secureTextEntry = true, 24 | ...rest 25 | }: InputProps) => { 26 | const { COLORS } = useTheme(); 27 | 28 | const [secury, setSecury] = useState(secureTextEntry); 29 | 30 | return ( 31 | 32 | {LeftIcon && ( 33 | 39 | )} 40 | 46 | {RightIcon && ( 47 | setSecury(!secury)}> 48 | 54 | 55 | )} 56 | 57 | ) 58 | } 59 | 60 | export default Input -------------------------------------------------------------------------------- /src/screens/App/Transcation/Transaction.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { FlatList } from 'react-native'; 3 | import { CaretDoubleLeft } from 'phosphor-react-native'; 4 | import { useNavigation } from '@react-navigation/native'; 5 | 6 | import { Header } from '../../../components/Header'; 7 | import { transaction } from '../../../utils/transaction'; 8 | import { 9 | Container, 10 | ContentFlat, 11 | IconTransaction, 12 | DetailsTransaction, 13 | NameTransaction, 14 | SubtTitleTransaction, 15 | AmountTransaction, 16 | ButtonGoBack, 17 | } from './styles'; 18 | 19 | export const Transaction = () => { 20 | const navigation = useNavigation(); 21 | 22 | const handleGoBackHome = () => { 23 | navigation.goBack() 24 | } 25 | 26 | return ( 27 | <> 28 |

33 | 34 | ( 37 | 38 | 41 | 42 | 43 | {item.title} 44 | {item.subtitle} 45 | 46 | 47 | R$ {item.amount} 48 | 49 | )} 50 | showsVerticalScrollIndicator={false} 51 | /> 52 | 53 | 54 | 55 | 56 | 57 | ) 58 | } -------------------------------------------------------------------------------- /android/app/src/main/java/com/walletapp/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java: -------------------------------------------------------------------------------- 1 | package com.walletapp.newarchitecture.modules; 2 | 3 | import com.facebook.jni.HybridData; 4 | import com.facebook.react.ReactPackage; 5 | import com.facebook.react.ReactPackageTurboModuleManagerDelegate; 6 | import com.facebook.react.bridge.ReactApplicationContext; 7 | import com.facebook.soloader.SoLoader; 8 | import java.util.List; 9 | 10 | /** 11 | * Class responsible to load the TurboModules. This class has native methods and needs a 12 | * corresponding C++ implementation/header file to work correctly (already placed inside the jni/ 13 | * folder for you). 14 | * 15 | *

Please note that this class is used ONLY if you opt-in for the New Architecture (see the 16 | * `newArchEnabled` property). Is ignored otherwise. 17 | */ 18 | public class MainApplicationTurboModuleManagerDelegate 19 | extends ReactPackageTurboModuleManagerDelegate { 20 | 21 | private static volatile boolean sIsSoLibraryLoaded; 22 | 23 | protected MainApplicationTurboModuleManagerDelegate( 24 | ReactApplicationContext reactApplicationContext, List packages) { 25 | super(reactApplicationContext, packages); 26 | } 27 | 28 | protected native HybridData initHybrid(); 29 | 30 | native boolean canCreateTurboModule(String moduleName); 31 | 32 | public static class Builder extends ReactPackageTurboModuleManagerDelegate.Builder { 33 | protected MainApplicationTurboModuleManagerDelegate build( 34 | ReactApplicationContext context, List packages) { 35 | return new MainApplicationTurboModuleManagerDelegate(context, packages); 36 | } 37 | } 38 | 39 | @Override 40 | protected synchronized void maybeLoadOtherSoLibraries() { 41 | if (!sIsSoLibraryLoaded) { 42 | // If you change the name of your application .so file in the Android.mk file, 43 | // make sure you update the name here as well. 44 | SoLoader.loadLibrary("walletapp_appmodules"); 45 | sIsSoLibraryLoaded = true; 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/rn_edit_text_material.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 21 | 22 | 23 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/components/ButtonPersonalizado/ButtonPersonalizado.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { useTheme } from 'styled-components'; 3 | import { AntDesign } from '@expo/vector-icons'; 4 | import { 5 | ActivityIndicator, 6 | TouchableOpacityProps, 7 | } from 'react-native'; 8 | 9 | import { variants } from './variants'; 10 | import { Container, Title, Content } from './styles'; 11 | 12 | interface ButtonProps extends TouchableOpacityProps { 13 | title: string; 14 | onPress: () => void; 15 | isLoading?: boolean; 16 | disabled?: boolean; 17 | style?: TouchableOpacityProps["style"]; 18 | variant?: "primary" | "outline" | "black" | 'transparent'; 19 | iconName?: keyof typeof AntDesign.glyphMap; 20 | } 21 | 22 | export function ButtonPersonalizado({ 23 | title, 24 | onPress, 25 | isLoading, 26 | iconName, 27 | disabled, 28 | variant = 'primary', 29 | style, 30 | ...rest 31 | }: ButtonProps) { 32 | const { COLORS } = useTheme(); 33 | const buttonVariant = variants[variant]; 34 | const buttonStyle = disabled ? buttonVariant.disabled : buttonVariant.enabled; 35 | 36 | return ( 37 | 43 | {isLoading ? ( 44 | 45 | ) : ( 46 | 47 | {iconName && ( 48 | 56 | )} 57 | {title} 58 | 59 | )} 60 | 61 | ) 62 | } -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /src/screens/App/DetailsCard/DetailsCard.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { View, Text } from 'react-native'; 3 | 4 | import { GoBack } from '../../../components/GoBack'; 5 | import detailsCardPng from '../../../assets/carddetails.png'; 6 | import { ButtonPersonalizado } from '../../../components/ButtonPersonalizado'; 7 | import { 8 | Container, 9 | Title, 10 | CardImage, 11 | Name, 12 | Banco, 13 | Conta, 14 | Status, 15 | Validade, 16 | ViewInfo, 17 | InfoTitle, 18 | ViewDetails, 19 | } from './styles'; 20 | 21 | export const DetailsCard = () => { 22 | return ( 23 | <> 24 | 25 | 26 | Detalhes do Cartão 27 | 28 | 31 | 32 | 33 | 34 | Nome 35 | Silvanei Martins 36 | 37 | 38 | Banco 39 | Martins 40 | 41 | 42 | Conta 43 | 000934-2 44 | 45 | 46 | Status 47 | Ativo 48 | 49 | 50 | Vencimento 51 | 2022-2025 52 | 53 | 54 | 55 | { }} 59 | 60 | style={{ 61 | marginTop: 30, 62 | }} 63 | /> 64 | 65 | 66 | ) 67 | } -------------------------------------------------------------------------------- /src/screens/Auth/RecuperarSenha/RecuperarSenha.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { ScrollView } from 'react-native'; 3 | import { useTheme } from 'styled-components/native'; 4 | import { useNavigation } from '@react-navigation/native'; 5 | 6 | import Input from '../../../components/Input'; 7 | import { ButtonPersonalizado } from '../../../components/ButtonPersonalizado'; 8 | import { 9 | Container, 10 | ContentHeadedr, 11 | Title, 12 | Description, 13 | ContendBody, 14 | ContentFooter, 15 | ButtonGoBack, 16 | Title1, 17 | Title2, 18 | } from './styles'; 19 | 20 | export const RecuperarSenha = () => { 21 | const { COLORS } = useTheme(); 22 | const navigation = useNavigation(); 23 | 24 | const handleVoltarLogin = () => { 25 | navigation.navigate('Login'); 26 | } 27 | 28 | return ( 29 | 30 | 31 | 32 | Seja Bem Vindo {'\n'} a App Wallet 33 | Recuperar Senha 34 | 35 | 36 | 37 | 45 | 46 | 47 | { }} 50 | style={{ 51 | marginTop: 40 52 | }} 53 | /> 54 | 55 | 56 | 57 | Não quer recuperar senha? 58 | Voltar 59 | 60 | 61 | 62 | 63 | ) 64 | } -------------------------------------------------------------------------------- /src/components/Input_old/styles.ts: -------------------------------------------------------------------------------- 1 | import styled, { css } from 'styled-components/native'; 2 | import { TextInput, ViewProps } from 'react-native'; 3 | import { RFValue } from 'react-native-responsive-fontsize'; 4 | 5 | interface IContainerProps extends ViewProps { 6 | hasError: boolean; 7 | isFocused: boolean; 8 | isFilled?: boolean; 9 | } 10 | 11 | interface ITextContainerProps extends ViewProps { 12 | hasError: boolean; 13 | isFocused: boolean; 14 | isFilled?: boolean; 15 | } 16 | 17 | export const Container = styled.View` 18 | width: 85%; 19 | flex-direction: row; 20 | height: ${RFValue(50)}px; 21 | margin-bottom: ${RFValue(10)}px; 22 | `; 23 | 24 | export const IConContainer = styled.View` 25 | width: ${RFValue(55)}px; 26 | height: ${RFValue(50)}px; 27 | justify-content: center; 28 | align-items: center; 29 | 30 | ${({ isFocused, isFilled }) => (isFocused || isFilled) && css` 31 | border-bottom-width: ${RFValue(2)}px; 32 | border-bottom-color; ${({ theme }) => theme.COLORS.BLUE1}; 33 | `}; 34 | 35 | ${({ hasError }) => hasError && css` 36 | border-bottom-color: ${({ theme }) => theme.COLORS.RED}; 37 | `}; 38 | 39 | margin-right: ${RFValue(3)}px; 40 | border-top-left-radius: ${RFValue(5)}px; 41 | border-bottom-left-radius: ${RFValue(5)}px; 42 | background-color: ${({ theme }) => theme.COLORS.GRAY5}; 43 | `; 44 | 45 | export const InputText = styled(TextInput)` 46 | flex: 1; 47 | font-size: ${RFValue(12)}px; 48 | border-top-right-radius: ${RFValue(5)}px; 49 | border-bottom-right-radius: ${RFValue(5)}px; 50 | color: ${({ theme }) => theme.COLORS.GRAY1}; 51 | font-family: ${({ theme }) => theme.FONTS.POPPINSLIGHT}; 52 | background-color: ${({ theme }) => theme.COLORS.GRAY5}; 53 | 54 | ${({ isFocused, isFilled }) => (isFocused || isFilled) && css` 55 | border-bottom-width: ${RFValue(2)}px; 56 | border-bottom-color; ${({ theme }) => theme.COLORS.BLUE1}; 57 | `}; 58 | 59 | ${({ hasError }) => hasError && css` 60 | border-bottom-color: ${({ theme }) => theme.COLORS.RED}; 61 | `}; 62 | 63 | padding: 0 ${RFValue(10)}px; 64 | `; 65 | -------------------------------------------------------------------------------- /src/screens/Tab/Notificacao/styles.ts: -------------------------------------------------------------------------------- 1 | import styled from "styled-components/native"; 2 | import { FlatList } from "react-native"; 3 | 4 | export const Container = styled.View` 5 | flex: 1; 6 | `; 7 | 8 | export const ContentHeader = styled.View` 9 | width: 100%; 10 | height: 35%; 11 | align-items: center; 12 | padding: 5px 10px; 13 | `; 14 | 15 | export const ContentTopTitle = styled.Text` 16 | font-size: 20px; 17 | font-weight: bold; 18 | color: ${({ theme }) => theme.COLORS.BLACK}; 19 | font-family: ${({ theme }) => theme.FONTS.POPPINSLIGHT}; 20 | `; 21 | 22 | export const ContentBody = styled.View` 23 | flex: 1; 24 | width: 100%; 25 | align-items: center; 26 | padding: 0px 10px; 27 | `; 28 | 29 | export const ContentBodyTitle = styled.Text` 30 | font-size: 20px; 31 | font-weight: bold; 32 | color: ${({ theme }) => theme.COLORS.BLACK}; 33 | font-family: ${({ theme }) => theme.FONTS.POPPINSLIGHT}; 34 | `; 35 | 36 | export const ContentFlat = styled.View` 37 | /* flex: 1; */ 38 | margin-top: 10px; 39 | border-radius: 17px; 40 | flex-direction: row; 41 | align-items: center; 42 | justify-content: space-between; 43 | background-color: ${({ theme }) => theme.COLORS.WHITE}; 44 | `; 45 | 46 | export const NewNotificationsFlat = styled.View` 47 | width: 83%; 48 | padding: 10px; 49 | height: 88px; 50 | `; 51 | 52 | export const DataNotifications = styled.Text` 53 | 54 | `; 55 | 56 | export const DataNotificationsText = styled.Text` 57 | font-size: 12px; 58 | color: ${({ theme }) => theme.COLORS.GRAY4}; 59 | `; 60 | 61 | export const TitleNotifications = styled.View` 62 | `; 63 | 64 | export const TitleNotificationsText = styled.Text` 65 | font-size: 14px; 66 | font-weight: 500; 67 | color: ${({ theme }) => theme.COLORS.TYPOSECONDARY}; 68 | `; 69 | 70 | export const DescriptionNotifications = styled.View` 71 | 72 | `; 73 | 74 | export const DescriptionNotificationsText = styled.Text` 75 | font-size: 12px; 76 | color: ${({ theme }) => theme.COLORS.GRAY4}; 77 | `; 78 | 79 | export const NewButtonNotifications = styled.TouchableOpacity` 80 | width: 50px; 81 | height: 88px; 82 | align-items: center; 83 | justify-content: center; 84 | `; 85 | -------------------------------------------------------------------------------- /android/app/src/main/jni/MainComponentsRegistry.cpp: -------------------------------------------------------------------------------- 1 | #include "MainComponentsRegistry.h" 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | namespace facebook { 9 | namespace react { 10 | 11 | MainComponentsRegistry::MainComponentsRegistry(ComponentFactory *delegate) {} 12 | 13 | std::shared_ptr 14 | MainComponentsRegistry::sharedProviderRegistry() { 15 | auto providerRegistry = CoreComponentsRegistry::sharedProviderRegistry(); 16 | 17 | // Custom Fabric Components go here. You can register custom 18 | // components coming from your App or from 3rd party libraries here. 19 | // 20 | // providerRegistry->add(concreteComponentDescriptorProvider< 21 | // AocViewerComponentDescriptor>()); 22 | return providerRegistry; 23 | } 24 | 25 | jni::local_ref 26 | MainComponentsRegistry::initHybrid( 27 | jni::alias_ref, 28 | ComponentFactory *delegate) { 29 | auto instance = makeCxxInstance(delegate); 30 | 31 | auto buildRegistryFunction = 32 | [](EventDispatcher::Weak const &eventDispatcher, 33 | ContextContainer::Shared const &contextContainer) 34 | -> ComponentDescriptorRegistry::Shared { 35 | auto registry = MainComponentsRegistry::sharedProviderRegistry() 36 | ->createComponentDescriptorRegistry( 37 | {eventDispatcher, contextContainer}); 38 | 39 | auto mutableRegistry = 40 | std::const_pointer_cast(registry); 41 | 42 | mutableRegistry->setFallbackComponentDescriptor( 43 | std::make_shared( 44 | ComponentDescriptorParameters{ 45 | eventDispatcher, contextContainer, nullptr})); 46 | 47 | return registry; 48 | }; 49 | 50 | delegate->buildRegistryFunction = buildRegistryFunction; 51 | return instance; 52 | } 53 | 54 | void MainComponentsRegistry::registerNatives() { 55 | registerHybrid({ 56 | makeNativeMethod("initHybrid", MainComponentsRegistry::initHybrid), 57 | }); 58 | } 59 | 60 | } // namespace react 61 | } // namespace facebook 62 | -------------------------------------------------------------------------------- /src/screens/App/DetailsCard/styles.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components/native'; 2 | 3 | export const Container = styled.View` 4 | flex: 1; 5 | padding: 30px; 6 | `; 7 | 8 | export const Title = styled.Text` 9 | font-size: 30px; 10 | margin-top: 30px; 11 | text-align: center; 12 | color: ${({ theme }) => theme.COLORS.PURPLE_TEXT}; 13 | `; 14 | 15 | export const CardImage = styled.Image` 16 | width: 100%; 17 | height: 220px; 18 | margin-top: 30px; 19 | border-radius: 50px; 20 | `; 21 | 22 | export const ViewDetails = styled.View` 23 | width: 100%; 24 | margin-top: 30px; 25 | align-items: center; 26 | `; 27 | 28 | export const ViewInfo = styled.View` 29 | width: 80%; 30 | padding: 5px 0; 31 | flex-direction: row; 32 | `; 33 | 34 | export const InfoTitle = styled.Text` 35 | font-size: 16px; 36 | line-height: 20px; 37 | color: ${({ theme}) => theme.COLORS.GRAY4}; 38 | font-family: ${({ theme }) => theme.FONTS.POPPINSMEDIUM}; 39 | `; 40 | 41 | export const Name = styled.Text` 42 | flex: 1; 43 | font-size: 16px; 44 | line-height: 20px; 45 | text-align: right; 46 | color: ${({ theme}) => theme.COLORS.GRAY1}; 47 | font-family: ${({ theme }) => theme.FONTS.POPPINSMEDIUM}; 48 | `; 49 | 50 | export const Banco = styled.Text` 51 | flex: 1; 52 | font-size: 16px; 53 | line-height: 20px; 54 | text-align: right; 55 | color: ${({ theme}) => theme.COLORS.GRAY1}; 56 | font-family: ${({ theme }) => theme.FONTS.POPPINSMEDIUM}; 57 | `; 58 | 59 | export const Conta = styled.Text` 60 | flex: 1; 61 | font-size: 16px; 62 | line-height: 20px; 63 | text-align: right; 64 | color: ${({ theme}) => theme.COLORS.GRAY1}; 65 | font-family: ${({ theme }) => theme.FONTS.POPPINSMEDIUM}; 66 | `; 67 | 68 | export const Status = styled.Text` 69 | flex: 1; 70 | font-size: 16px; 71 | line-height: 20px; 72 | text-align: right; 73 | color: ${({ theme}) => theme.COLORS.GRAY1}; 74 | font-family: ${({ theme }) => theme.FONTS.POPPINSMEDIUM}; 75 | `; 76 | 77 | export const Validade = styled.Text` 78 | flex: 1; 79 | font-size: 16px; 80 | line-height: 20px; 81 | text-align: right; 82 | color: ${({ theme}) => theme.COLORS.GRAY1}; 83 | font-family: ${({ theme }) => theme.FONTS.POPPINSMEDIUM}; 84 | `; 85 | 86 | -------------------------------------------------------------------------------- /src/components/Notifications/ContentTop/ContentTop.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react'; 2 | import { View, Text } from 'react-native'; 3 | import { useTheme } from 'styled-components/native'; 4 | import { ArrowCircleUp } from 'phosphor-react-native'; 5 | 6 | import { new_notifications } from '../../../utils/new_notifications'; 7 | 8 | import { 9 | Badge, 10 | ContentFlat, 11 | DataNotifications, 12 | TitleNotifications, 13 | NewNotificationsFlat, 14 | DataNotificationsText, 15 | TitleNotificationsText, 16 | NewButtonNotifications, 17 | DescriptionNotifications, 18 | DescriptionNotificationsText, 19 | } from './styles'; 20 | 21 | interface IContentTopProps { 22 | datetime: string; 23 | title: string; 24 | type: string; 25 | } 26 | 27 | 28 | export const ContentTop = (props: IContentTopProps) => { 29 | const { COLORS } = useTheme(); 30 | 31 | const [isVerify, setIsVerify] = useState(false); 32 | 33 | const handleVerify = () => { 34 | setIsVerify(!isVerify); 35 | } 36 | 37 | return ( 38 | 39 | 40 | 41 | 42 | 43 | {props.datetime} 44 | 45 | 46 | 47 | 48 | 49 | {props.title} 50 | 51 | 52 | 53 | 54 | 55 | {props.type} 56 | 57 | 58 | 59 | 60 | {isVerify ? ( 61 | 62 | 63 | 64 | ) : ( 65 | 66 | 67 | 68 | )} 69 | 70 | ) 71 | } -------------------------------------------------------------------------------- /src/screens/Auth/Login/styles.ts: -------------------------------------------------------------------------------- 1 | import { Pressable } from 'react-native'; 2 | import styled from 'styled-components/native'; 3 | import { RFValue } from 'react-native-responsive-fontsize'; 4 | 5 | export const Container = styled.View` 6 | padding: ${RFValue(20)}px; 7 | `; 8 | 9 | export const ContentHeader = styled.View` 10 | width: 100%; 11 | margin-left: -10px; 12 | align-items: center; 13 | justify-content: space-between; 14 | `; 15 | 16 | export const ContentBody = styled.View``; 17 | 18 | export const ViewButton = styled.View` 19 | flex-direction: row; 20 | `; 21 | 22 | export const Title = styled.Text` 23 | text-align: center; 24 | font-size: ${RFValue(25)}px; 25 | margin-top: ${RFValue(40)}px; 26 | font-family: ${({ theme }) => theme.FONTS.POPPINSMEDIUM}; 27 | `; 28 | 29 | export const Description = styled.Text` 30 | margin-top: ${RFValue(60)}px; 31 | font-size: ${RFValue(15)}px; 32 | margin-bottom: ${RFValue(10)}px; 33 | font-family: ${({ theme }) => theme.FONTS.POPPINSLIGHT}; 34 | `; 35 | 36 | export const ContentFooter = styled.View` 37 | margin-top: 30px; 38 | align-items: center; 39 | justify-content: center; 40 | `; 41 | 42 | export const ButtonSignUp = styled.TouchableOpacity` 43 | align-items: center; 44 | flex-direction: row; 45 | justify-content: center; 46 | `; 47 | 48 | export const TitleButtonSignUp1 = styled.Text` 49 | font-size: 14px; 50 | color: ${({ theme }) => theme.COLORS.GRAY3}; 51 | font-family: ${({ theme }) => theme.FONTS.POPPINSMEDIUM}; 52 | `; 53 | 54 | export const TitleButtonSingUp2 = styled.Text` 55 | font-size: 17px; 56 | margin-left: 10px; 57 | color: ${({ theme }) => theme.COLORS.BLUE}; 58 | font-family: ${({ theme }) => theme.FONTS.POPPINSBOLD}; 59 | `; 60 | 61 | export const ContentForgotPassword = styled.View` 62 | width: 100%; 63 | padding: 20px; 64 | margin-top: 20px; 65 | align-items: flex-end; 66 | justify-content: flex-end; 67 | `; 68 | 69 | 70 | export const ContentButtonForgotPassword = styled.TouchableOpacity` 71 | align-items: center; 72 | justify-content: flex-end; 73 | `; 74 | 75 | export const ContentTitleForgotPassword = styled.Text` 76 | align-items: flex-end; 77 | font-size: 17px; 78 | color: ${({ theme }) => theme.COLORS.GRAY3}; 79 | font-family: ${({ theme }) => theme.FONTS.POPPINSREGULAR}; 80 | `; -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | # Default value: -Xmx512m -XX:MaxMetaspaceSize=256m 13 | org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | 20 | # AndroidX package structure to make it clearer which packages are bundled with the 21 | # Android operating system, and which are packaged with your app's APK 22 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 23 | android.useAndroidX=true 24 | 25 | # Automatically convert third-party libraries to use AndroidX 26 | android.enableJetifier=true 27 | 28 | # Version of flipper SDK to use with React Native 29 | FLIPPER_VERSION=0.125.0 30 | 31 | # Use this property to specify which architecture you want to build. 32 | # You can also override it from the CLI using 33 | # ./gradlew -PreactNativeArchitectures=x86_64 34 | reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 35 | 36 | # Use this property to enable support to the new architecture. 37 | # This will allow you to use TurboModules and the Fabric render in 38 | # your application. You should enable this flag either if you want 39 | # to write custom TurboModules/Fabric components OR use libraries that 40 | # are providing them. 41 | newArchEnabled=false 42 | 43 | # The hosted JavaScript engine 44 | # Supported values: expo.jsEngine = "hermes" | "jsc" 45 | expo.jsEngine=jsc 46 | 47 | # Enable GIF support in React Native images (~200 B increase) 48 | expo.gif.enabled=true 49 | # Enable webp support in React Native images (~85 KB increase) 50 | expo.webp.enabled=true 51 | # Enable animated webp support (~3.4 MB increase) 52 | # Disabled by default because iOS doesn't support animated webp 53 | expo.webp.animated=false 54 | -------------------------------------------------------------------------------- /src/utils/recent_notifications.ts: -------------------------------------------------------------------------------- 1 | export const recents_notifications = [ 2 | { 3 | id: "1", 4 | datetime: "2021-05-01T00:00:00.000Z", 5 | title: "Você recebeu um novo pagamento R$ 50,00 de Silvio Martins", 6 | type: "Recebimento Pix", 7 | ativo: true, 8 | }, 9 | { 10 | id: "2", 11 | datetime: "2021-05-01T00:00:00.000Z", 12 | title: "Você recebeu um novo pagamento R$ 100,00 de Silvio Martins", 13 | type: "Cartão de Debito", 14 | ativo: false, 15 | }, 16 | { 17 | id: "3", 18 | datetime: "2021-05-01T00:00:00.000Z", 19 | title: "Você recebeu um novo pagamento R$ 10,00 de Silvio Martins", 20 | type: "Cartão de Crédito", 21 | ativo: false, 22 | }, 23 | { 24 | id: "4", 25 | datetime: "2021-05-01T00:00:00.000Z", 26 | title: "Você recebeu um novo pagamento R$ 59,00 de Silvio Martins", 27 | type: "Cartão de Debito", 28 | ativo: false, 29 | }, 30 | { 31 | id: "5", 32 | datetime: "2021-05-01T00:00:00.000Z", 33 | title: "Você recebeu um novo pagamento R$ 75,00 de Silvio Martins", 34 | type: "Cartão de Crédito", 35 | ativo: false, 36 | }, 37 | { 38 | id: "6", 39 | datetime: "2021-05-01T00:00:00.000Z", 40 | title: "Você recebeu um novo pagamento R$ 36,00 de Silvio Martins", 41 | type: "Cartão de Debito", 42 | ativo: false, 43 | }, 44 | { 45 | id: "7", 46 | datetime: "2021-05-01T00:00:00.000Z", 47 | title: "Você recebeu um novo pagamento R$ 100,00 de Silvio Martins", 48 | type: "Cartão de Crédito", 49 | ativo: false, 50 | }, 51 | { 52 | id: "8", 53 | datetime: "2021-05-01T00:00:00.000Z", 54 | title: "Você recebeu um novo pagamento R$ 80,00 de Silvio Martins", 55 | type: "Cartão de DEbito", 56 | ativo: false, 57 | }, 58 | { 59 | id: "9", 60 | datetime: "2021-05-01T00:00:00.000Z", 61 | title: "Você recebeu um novo pagamento R$ 90,00 de Silvio Martins", 62 | type: "Cartão de Crédito", 63 | ativo: false, 64 | }, 65 | { 66 | id: "10", 67 | datetime: "2021-05-01T00:00:00.000Z", 68 | title: "Você recebeu um novo pagamento R$ 30,00 de Silvio Martins", 69 | type: "Cartão de DEbito", 70 | ativo: false, 71 | } 72 | ] -------------------------------------------------------------------------------- /src/components/Header/Header.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { BellSimpleRinging, ChartBarHorizontal, CurrencyCircleDollar } from 'phosphor-react-native'; 3 | 4 | import { 5 | Container, 6 | ContentHeader, 7 | Avatar, 8 | AppName, 9 | Status, 10 | IconButton, 11 | } from './styles'; 12 | 13 | interface IHeader { 14 | appName: string; 15 | iconLeft?: boolean; 16 | textLeft?: boolean; 17 | avatarRight?: boolean; 18 | typeRelatorio?: boolean; 19 | typeTransaction?: boolean; 20 | typeNotification?: boolean; 21 | } 22 | 23 | export const Header = ({ 24 | iconLeft, 25 | typeRelatorio, 26 | appName, 27 | textLeft, 28 | avatarRight, 29 | typeTransaction, 30 | typeNotification, 31 | }: IHeader) => { 32 | return ( 33 | 34 | {iconLeft && ( 35 | <> 36 | {typeRelatorio && ( 37 | 44 | )} 45 | {typeNotification && ( 46 | 53 | )} 54 | {typeTransaction && ( 55 | 62 | )} 63 | 64 | )} 65 | 66 | {appName} 67 | {textLeft && ( 68 | Ativo 69 | )} 70 | 71 | {avatarRight && ( 72 | 75 | )} 76 | 77 | ) 78 | } -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | import org.apache.tools.ant.taskdefs.condition.Os 2 | 3 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 4 | 5 | buildscript { 6 | ext { 7 | buildToolsVersion = findProperty('android.buildToolsVersion') ?: '31.0.0' 8 | minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '21') 9 | compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '31') 10 | targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '31') 11 | if (findProperty('android.kotlinVersion')) { 12 | kotlinVersion = findProperty('android.kotlinVersion') 13 | } 14 | frescoVersion = findProperty('expo.frescoVersion') ?: '2.5.0' 15 | 16 | if (System.properties['os.arch'] == 'aarch64') { 17 | // For M1 Users we need to use the NDK 24 which added support for aarch64 18 | ndkVersion = '24.0.8215888' 19 | } else { 20 | // Otherwise we default to the side-by-side NDK version from AGP. 21 | ndkVersion = '21.4.7075529' 22 | } 23 | } 24 | repositories { 25 | google() 26 | mavenCentral() 27 | } 28 | dependencies { 29 | classpath('com.android.tools.build:gradle:7.1.1') 30 | classpath('com.facebook.react:react-native-gradle-plugin') 31 | classpath('de.undercouch:gradle-download-task:5.0.1') 32 | // NOTE: Do not place your application dependencies here; they belong 33 | // in the individual module build.gradle files 34 | } 35 | } 36 | 37 | allprojects { 38 | repositories { 39 | mavenLocal() 40 | maven { 41 | // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm 42 | url(new File(['node', '--print', "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), '../android')) 43 | } 44 | maven { 45 | // Android JSC is installed from npm 46 | url(new File(['node', '--print', "require.resolve('jsc-android/package.json')"].execute(null, rootDir).text.trim(), '../dist')) 47 | } 48 | 49 | google() 50 | mavenCentral { 51 | // We don't want to fetch react-native from Maven Central as there are 52 | // older versions over there. 53 | content { 54 | excludeGroup 'com.facebook.react' 55 | } 56 | } 57 | maven { url 'https://www.jitpack.io' } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/screens/Tab/Settings/Settings.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { TouchableOpacity } from 'react-native'; 3 | import { useTheme } from 'styled-components/native'; 4 | import { SignOut } from 'phosphor-react-native'; 5 | import { useNavigation } from '@react-navigation/native'; 6 | 7 | import { Header } from '../../../components/Header'; 8 | import { Profile } from '../../../components/Profile'; 9 | import { 10 | Container, 11 | ViewFooter, 12 | TitleFooter, 13 | ViewIconButton 14 | } from './styles'; 15 | 16 | export const Settings = () => { 17 | const { COLORS } = useTheme(); 18 | const navigation = useNavigation(); 19 | 20 | const handleGoPerfilUser = () => { 21 | navigation.navigate('Profile'); 22 | } 23 | 24 | return ( 25 | <> 26 |

27 | 28 | 29 | 35 | 36 | { }} 41 | /> 42 | 43 | { }} 48 | /> 49 | 50 | { }} 55 | /> 56 | 57 | { }} 62 | /> 63 | 64 | 65 | 66 | 67 | 72 | 73 | 74 | Sair da Wallet 75 | 76 | 77 | 78 | ) 79 | } -------------------------------------------------------------------------------- /documentacao.md: -------------------------------------------------------------------------------- 1 | # GitHub 2 | 3 | Nome da Organização: Sam Agenda 4 | Nome do Repositório: sam-agenda 5 | Descrição: Agenda do comercio de Vilhena 6 | Linguagem: Node Js, Typescript 7 | URL: www.samagenda.com.br 8 | URL do Repositório: 9 | URL do Repositório no GitHub: 10 | 11 | # Ferramentas para deploy do Back-End: 12 | 13 | Render: Ferramentas para subir servidor backend e deixar online. 14 | Url: www.render.com 15 | ORM: Prisma 16 | Framework: Express 17 | Banco de Dados: PostgresSQL 18 | 19 | # Configuração a realizar no projeto; 20 | 21 | Terminar de configurar script start:dev: -r --exit-child -respawn 22 | 23 | # Comando GitHub 24 | 25 | npm init -y 26 | yarn add typescript -D 27 | yarn add @types/node -D 28 | yarn add @types/express -D 29 | yarn add @types/body-parser -D 30 | yarn add @types/mongoose -D 31 | yarn add @types/morgan -D 32 | yarn add @types/cors -D 33 | yarn add @types/jwt -D 34 | yarn add @types/bcryptjs -D 35 | yarn add @types/jsonwebtoken -D 36 | yarn add @types/moment -D 37 | yarn add @types/request-promise -D 38 | yarn add @types/winston -D 39 | yarn add @types/winston-mongodb -D 40 | 41 | # Subir código para GitHub pela primeira vez; 42 | 43 | 1 - git init 44 | 2 - git add . 45 | 3 - git commit -m "feat: Criação inicial da API" 46 | 4 - git branch -M main 47 | 5 - git remote add origin 'endereço do repositório' 48 | 6 - git push -u origin main 49 | 50 | # Criar um commit no GitHub; 51 | 52 | 1 - git add . 53 | # Adiciona as mudanças feito no projeto; 54 | 2 - git commit -m "feat: Criação inicial da API" 55 | # Nome do commit e comenta as o que voce fez; 56 | 3 - git push 57 | # Enviar para GitHub 58 | 4 - git pull 59 | # Buscar atualizações no GitHub referente ao projeto; 60 | 61 | # Trabalhando com branch main e develop no GitHub; 62 | 63 | 1 - git push origin main:develop 64 | 2 - git checkout develop 65 | 3 - git checkout -b feature/new-feature 66 | 3 - yarn install 67 | 68 | # Realizar um merge para o branch main; 69 | 70 | 1 - git checkout main 71 | 2 - git merge develop # nome da branch 72 | 3 - git merge --abort # para cancelar o merge 73 | 4 - git add . 74 | 5 - git commit -m "feat: fusão das branch develop e main" 75 | 76 | 77 | # Documentação Input 78 | 79 | * leftIcon: Ele serve para ancorar ícone na esquerda; 80 | * rightIcon: Ele serve para ancorar ícone na direita; 81 | * secureTextEntry: Serve para colocar typo de password; 82 | * secureTextEntry={false}: Serve para tirar o type de password; -------------------------------------------------------------------------------- /src/screens/App/Profile/Profile.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { TouchableOpacity } from 'react-native'; 3 | import { useTheme } from 'styled-components/native'; 4 | import { Pen, Trash } from 'phosphor-react-native'; 5 | 6 | import { Profile as ComponentProfile } from '../../../components/Profile'; 7 | import { GoBack } from '../../../components/GoBack'; 8 | import { 9 | Container, 10 | Header, 11 | Content, 12 | Footer, 13 | Avatar, 14 | ViewHeader, 15 | HeaderName, 16 | IconButton, 17 | ViewFooter, 18 | TitleFooter, 19 | ViewIconButton, 20 | } from './styles'; 21 | 22 | export const Profile = () => { 23 | const { COLORS } = useTheme(); 24 | 25 | return ( 26 | <> 27 | 28 | 29 |
30 | 35 | 36 | Silvanei 37 | 38 | 43 | 44 | 45 |
46 | 47 | { }} 50 | /> 51 | { }} 54 | /> 55 | { }} 58 | /> 59 | { }} 62 | /> 63 | 64 |
65 | 66 | 67 | 68 | 73 | 74 | 75 | Deletar Conta 76 | 77 |
78 |
79 | 80 | ) 81 | } -------------------------------------------------------------------------------- /android/gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%" == "" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%" == "" set DIRNAME=. 29 | set APP_BASE_NAME=%~n0 30 | set APP_HOME=%DIRNAME% 31 | 32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 34 | 35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 37 | 38 | @rem Find java.exe 39 | if defined JAVA_HOME goto findJavaFromJavaHome 40 | 41 | set JAVA_EXE=java.exe 42 | %JAVA_EXE% -version >NUL 2>&1 43 | if "%ERRORLEVEL%" == "0" goto execute 44 | 45 | echo. 46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 47 | echo. 48 | echo Please set the JAVA_HOME variable in your environment to match the 49 | echo location of your Java installation. 50 | 51 | goto fail 52 | 53 | :findJavaFromJavaHome 54 | set JAVA_HOME=%JAVA_HOME:"=% 55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 56 | 57 | if exist "%JAVA_EXE%" goto execute 58 | 59 | echo. 60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 61 | echo. 62 | echo Please set the JAVA_HOME variable in your environment to match the 63 | echo location of your Java installation. 64 | 65 | goto fail 66 | 67 | :execute 68 | @rem Setup the command line 69 | 70 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 71 | 72 | 73 | @rem Execute Gradle 74 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 75 | 76 | :end 77 | @rem End local scope for the variables with windows NT shell 78 | if "%ERRORLEVEL%"=="0" goto mainEnd 79 | 80 | :fail 81 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 82 | rem the _cmd.exe /c_ return code! 83 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 84 | exit /b 1 85 | 86 | :mainEnd 87 | if "%OS%"=="Windows_NT" endlocal 88 | 89 | :omega 90 | -------------------------------------------------------------------------------- /src/screens/Tab/Relatorio/styles.ts: -------------------------------------------------------------------------------- 1 | import styled from "styled-components/native"; 2 | 3 | export const Container = styled.View` 4 | flex: 1; 5 | /* padding: 15px; */ 6 | `; 7 | 8 | export const BalanceImage = styled.ImageBackground` 9 | width: 100%; 10 | height: 215px; 11 | `; 12 | 13 | export const AmountValue = styled.Text` 14 | font-size: 11px; 15 | top: 60px; 16 | left: 160px; 17 | position: absolute; 18 | color: ${({ theme }) => theme.COLORS.WHITE}; 19 | font-family: ${({ theme }) => theme.FONTS.POPPINSREGULAR}; 20 | `; 21 | 22 | export const ViewContent = styled.View` 23 | padding: 30px; 24 | align-items: center; 25 | justify-content: center; 26 | `; 27 | 28 | export const TitleAmount = styled.Text` 29 | font-size: 16px; 30 | line-height: 20px; 31 | color: ${({ theme }) => theme.COLORS.GRAY3}; 32 | font-family: ${({ theme }) => theme.FONTS.POPPINSBOLD}; 33 | `; 34 | 35 | export const ValorTatal = styled.Text` 36 | font-size: 30px; 37 | line-height: 42px; 38 | color: ${({ theme }) => theme.COLORS.PURPLE_CARD}; 39 | font-family: ${({ theme }) => theme.FONTS.POPPINSBOLD}; 40 | `; 41 | 42 | 43 | export const Footer = styled.View` 44 | flex: 1; 45 | `; 46 | 47 | export const ContentFlat = styled.View` 48 | padding: 5px; 49 | margin-right: 10px; 50 | flex-direction: row; 51 | `; 52 | 53 | export const ContentFlatHeader = styled.View` 54 | flex-direction: row; 55 | align-items: center; 56 | padding: 20px; 57 | justify-content: space-between; 58 | `; 59 | 60 | export const Title = styled.Text` 61 | font-size: 20px; 62 | margin-left: 13px; 63 | color: ${({ theme }) => theme.COLORS.GRAY1}; 64 | font-family: ${({ theme }) => theme.FONTS.POPPINSBOLD}; 65 | `; 66 | 67 | export const ButtonVerTotos = styled.TouchableOpacity` 68 | padding: 3px; 69 | border-width: 1px; 70 | border-radius: 30px; 71 | border-color: ${({ theme }) => theme.COLORS.PURPLE_CARD}; 72 | `; 73 | 74 | export const ButtonTitleVertotos = styled.Text` 75 | font-size: 12px; 76 | color: ${({ theme }) => theme.COLORS.PURPLEDARK1}; 77 | font-family: ${({ theme }) => theme.FONTS.POPPINSLIGHT}; 78 | `; 79 | 80 | export const IconTransaction = styled.Image` 81 | width: 60px; 82 | height: 60px; 83 | `; 84 | 85 | export const DetailsTransaction = styled.View` 86 | flex: 1; 87 | `; 88 | 89 | export const NameTransaction = styled.Text` 90 | font-weight: 900; 91 | font-size: 16px; 92 | color: ${({ theme }) => theme.COLORS.GRAY1}; 93 | font-weight: ${({ theme }) => theme.FONTS.POPPINSREGULAR}; 94 | `; 95 | 96 | export const SubtTitleTransaction = styled.Text` 97 | font-size: 14px; 98 | color: ${({ theme }) => theme.COLORS.GRAY4}; 99 | font-weight: ${({ theme }) => theme.FONTS.POPPINSLIGHT}; 100 | `; 101 | 102 | export const AmountTransaction = styled.Text` 103 | font-weight: 900; 104 | font-size: 16px; 105 | color: ${({ theme }) => theme.COLORS.GRAY1}; 106 | font-weight: ${({ theme }) => theme.FONTS.POPPINSREGULAR}; 107 | `; -------------------------------------------------------------------------------- /src/screens/Tab/Relatorio/Relatorio.tsx: -------------------------------------------------------------------------------- 1 | 2 | import React from 'react'; 3 | import { View, Text, FlatList } from 'react-native'; 4 | import { useNavigation } from '@react-navigation/native'; 5 | 6 | import { Header } from '../../../components/Header'; 7 | import BalancePng from '../../../assets/estatistica.png' 8 | import { limited_transaction } from '../../../utils/limited_transaction'; 9 | import { 10 | Container, 11 | AmountValue, 12 | BalanceImage, 13 | ViewContent, 14 | TitleAmount, 15 | ValorTatal, 16 | Footer, 17 | ContentFlat, 18 | ContentFlatHeader, 19 | Title, 20 | ButtonVerTotos, 21 | ButtonTitleVertotos, 22 | IconTransaction, 23 | DetailsTransaction, 24 | NameTransaction, 25 | SubtTitleTransaction, 26 | AmountTransaction, 27 | } from './styles'; 28 | 29 | export const Relatorio = () => { 30 | const navigation = useNavigation(); 31 | 32 | const handleGoTransaction = () => { 33 | navigation.navigate('Transaction') 34 | } 35 | 36 | return ( 37 | <> 38 |
43 | 44 | 48 | R$ 500,00 49 | 50 | 51 | 52 | Valor Taltal 53 | R$ 10.000,00 54 | 55 | 56 |
57 | ( 60 | 61 | 64 | 65 | 66 | {item.title} 67 | {item.subtitle} 68 | 69 | 70 | R$ {item.amount} 71 | 72 | )} 73 | ListHeaderComponent={ 74 | 75 | Minhas Transações 76 | 77 | Mais Recentes 78 | 79 | 80 | } 81 | showsVerticalScrollIndicator={false} 82 | /> 83 |
84 |
85 | 86 | ) 87 | } -------------------------------------------------------------------------------- /android/app/src/main/java/com/walletapp/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.walletapp; 2 | 3 | import android.os.Build; 4 | import android.os.Bundle; 5 | 6 | import com.facebook.react.ReactActivity; 7 | import com.facebook.react.ReactActivityDelegate; 8 | import com.facebook.react.ReactRootView; 9 | 10 | import expo.modules.ReactActivityDelegateWrapper; 11 | 12 | public class MainActivity extends ReactActivity { 13 | @Override 14 | protected void onCreate(Bundle savedInstanceState) { 15 | // Set the theme to AppTheme BEFORE onCreate to support 16 | // coloring the background, status bar, and navigation bar. 17 | // This is required for expo-splash-screen. 18 | setTheme(R.style.AppTheme); 19 | super.onCreate(null); 20 | } 21 | 22 | /** 23 | * Returns the name of the main component registered from JavaScript. 24 | * This is used to schedule rendering of the component. 25 | */ 26 | @Override 27 | protected String getMainComponentName() { 28 | return "main"; 29 | } 30 | 31 | /** 32 | * Returns the instance of the {@link ReactActivityDelegate}. There the RootView is created and 33 | * you can specify the renderer you wish to use - the new renderer (Fabric) or the old renderer 34 | * (Paper). 35 | */ 36 | @Override 37 | protected ReactActivityDelegate createReactActivityDelegate() { 38 | return new ReactActivityDelegateWrapper(this, BuildConfig.IS_NEW_ARCHITECTURE_ENABLED, 39 | new MainActivityDelegate(this, getMainComponentName()) 40 | ); 41 | } 42 | 43 | /** 44 | * Align the back button behavior with Android S 45 | * where moving root activities to background instead of finishing activities. 46 | * @see onBackPressed 47 | */ 48 | @Override 49 | public void invokeDefaultOnBackPressed() { 50 | if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) { 51 | if (!moveTaskToBack(false)) { 52 | // For non-root activities, use the default implementation to finish them. 53 | super.invokeDefaultOnBackPressed(); 54 | } 55 | return; 56 | } 57 | 58 | // Use the default back button implementation on Android S 59 | // because it's doing more than {@link Activity#moveTaskToBack} in fact. 60 | super.invokeDefaultOnBackPressed(); 61 | } 62 | 63 | public static class MainActivityDelegate extends ReactActivityDelegate { 64 | public MainActivityDelegate(ReactActivity activity, String mainComponentName) { 65 | super(activity, mainComponentName); 66 | } 67 | 68 | @Override 69 | protected ReactRootView createRootView() { 70 | ReactRootView reactRootView = new ReactRootView(getContext()); 71 | // If you opted-in for the New Architecture, we enable the Fabric Renderer. 72 | reactRootView.setIsFabric(BuildConfig.IS_NEW_ARCHITECTURE_ENABLED); 73 | return reactRootView; 74 | } 75 | 76 | @Override 77 | protected boolean isConcurrentRootEnabled() { 78 | // If you opted-in for the New Architecture, we enable Concurrent Root (i.e. React 18). 79 | // More on this on https://reactjs.org/blog/2022/03/29/react-v18.html 80 | return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /src/components/ButtonPersonalizado/variants.ts: -------------------------------------------------------------------------------- 1 | import theme from '../../styles/theme'; 2 | 3 | interface ButtonStyle { 4 | button: { 5 | backgroundColor: string; 6 | borderWidth?: number; 7 | borderColor?: string; 8 | }; 9 | title: { 10 | color: string; 11 | fontSize?: number, 12 | }; 13 | icon: { 14 | color: string; 15 | }; 16 | } 17 | 18 | export interface ButtonVariant { 19 | enabled: ButtonStyle; 20 | disabled: ButtonStyle; 21 | } 22 | 23 | const buttonPrimary: ButtonVariant = { 24 | enabled: { 25 | button: { 26 | backgroundColor: theme.COLORS.PRIMARY, 27 | }, 28 | title: { 29 | color: theme.COLORS.WHITE, 30 | }, 31 | icon: { 32 | color: theme.COLORS.WHITE, 33 | }, 34 | }, 35 | disabled: { 36 | button: { 37 | backgroundColor: theme.COLORS.GRAY_100, 38 | }, 39 | title: { 40 | color: theme.COLORS.WHITE, 41 | }, 42 | icon: { 43 | color: theme.COLORS.WHITE, 44 | }, 45 | }, 46 | } 47 | 48 | const buttonOutLine: ButtonVariant = { 49 | enabled: { 50 | button: { 51 | borderWidth: 2, 52 | borderColor: theme.COLORS.PRIMARY, 53 | backgroundColor: 'transparent', 54 | }, 55 | title: { 56 | color: theme.COLORS.GRAY1, 57 | }, 58 | icon: { 59 | color: theme.COLORS.GRAY1, 60 | }, 61 | }, 62 | disabled: { 63 | button: { 64 | borderWidth: 2, 65 | borderColor: theme.COLORS.PRIMARY, 66 | backgroundColor: 'transparent', 67 | }, 68 | title: { 69 | color: theme.COLORS.GREEN1, 70 | }, 71 | icon: { 72 | color: theme.COLORS.GREEN1, 73 | }, 74 | }, 75 | } 76 | 77 | const buttonBlack: ButtonVariant = { 78 | enabled: { 79 | button: { 80 | backgroundColor: theme.COLORS.BLACK, 81 | }, 82 | title: { 83 | color: theme.COLORS.WHITE, 84 | }, 85 | icon: { 86 | color: theme.COLORS.WHITE, 87 | }, 88 | }, 89 | disabled: { 90 | button: { 91 | backgroundColor: theme.COLORS.GRAY_100, 92 | }, 93 | title: { 94 | color: theme.COLORS.WHITE, 95 | }, 96 | icon: { 97 | color: theme.COLORS.WHITE, 98 | }, 99 | }, 100 | }; 101 | 102 | const buttonTransparent: ButtonVariant = { 103 | enabled: { 104 | button: { 105 | backgroundColor: 'transparent', 106 | }, 107 | title: { 108 | color: theme.COLORS.GRAY2, 109 | fontSize: 17, 110 | }, 111 | icon: { 112 | color: theme.COLORS.GRAY2, 113 | } 114 | }, 115 | disabled: { 116 | button: { 117 | backgroundColor: 'transparent', 118 | }, 119 | title: { 120 | color: theme.COLORS.GRAY2, 121 | fontSize: 17, 122 | }, 123 | icon: { 124 | color: theme.COLORS.GRAY2, 125 | } 126 | } 127 | } 128 | 129 | export const variants = { 130 | primary: buttonPrimary, 131 | outline: buttonOutLine, 132 | black: buttonBlack, 133 | transparent: buttonTransparent, 134 | }; -------------------------------------------------------------------------------- /android/app/src/debug/java/com/walletapp/ReactNativeFlipper.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Facebook, Inc. and its affiliates. 3 | * 4 | *

This source code is licensed under the MIT license found in the LICENSE file in the root 5 | * directory of this source tree. 6 | */ 7 | package com.walletapp; 8 | 9 | import android.content.Context; 10 | import com.facebook.flipper.android.AndroidFlipperClient; 11 | import com.facebook.flipper.android.utils.FlipperUtils; 12 | import com.facebook.flipper.core.FlipperClient; 13 | import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin; 14 | import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin; 15 | import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin; 16 | import com.facebook.flipper.plugins.inspector.DescriptorMapping; 17 | import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin; 18 | import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor; 19 | import com.facebook.flipper.plugins.network.NetworkFlipperPlugin; 20 | import com.facebook.flipper.plugins.react.ReactFlipperPlugin; 21 | import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin; 22 | import com.facebook.react.ReactInstanceManager; 23 | import com.facebook.react.bridge.ReactContext; 24 | import com.facebook.react.modules.network.NetworkingModule; 25 | import okhttp3.OkHttpClient; 26 | 27 | public class ReactNativeFlipper { 28 | public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) { 29 | if (FlipperUtils.shouldEnableFlipper(context)) { 30 | final FlipperClient client = AndroidFlipperClient.getInstance(context); 31 | client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults())); 32 | client.addPlugin(new ReactFlipperPlugin()); 33 | client.addPlugin(new DatabasesFlipperPlugin(context)); 34 | client.addPlugin(new SharedPreferencesFlipperPlugin(context)); 35 | client.addPlugin(CrashReporterPlugin.getInstance()); 36 | NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin(); 37 | NetworkingModule.setCustomClientBuilder( 38 | new NetworkingModule.CustomClientBuilder() { 39 | @Override 40 | public void apply(OkHttpClient.Builder builder) { 41 | builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin)); 42 | } 43 | }); 44 | client.addPlugin(networkFlipperPlugin); 45 | client.start(); 46 | // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized 47 | // Hence we run if after all native modules have been initialized 48 | ReactContext reactContext = reactInstanceManager.getCurrentReactContext(); 49 | if (reactContext == null) { 50 | reactInstanceManager.addReactInstanceEventListener( 51 | new ReactInstanceManager.ReactInstanceEventListener() { 52 | @Override 53 | public void onReactContextInitialized(ReactContext reactContext) { 54 | reactInstanceManager.removeReactInstanceEventListener(this); 55 | reactContext.runOnNativeModulesQueueThread( 56 | new Runnable() { 57 | @Override 58 | public void run() { 59 | client.addPlugin(new FrescoFlipperPlugin()); 60 | } 61 | }); 62 | } 63 | }); 64 | } else { 65 | client.addPlugin(new FrescoFlipperPlugin()); 66 | } 67 | } 68 | } 69 | } -------------------------------------------------------------------------------- /ios/walletapp.xcodeproj/xcshareddata/xcschemes/walletapp.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 53 | 55 | 61 | 62 | 63 | 64 | 70 | 72 | 78 | 79 | 80 | 81 | 83 | 84 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /src/screens/Auth/Cadastro/Cadastro.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { useTheme } from "styled-components/native"; 3 | import { useNavigation } from '@react-navigation/native'; 4 | import { KeyboardAvoidingView, ScrollView } from 'react-native'; 5 | 6 | import Input from '../../../components/Input'; 7 | import { ButtonPersonalizado } from "../../../components/ButtonPersonalizado"; 8 | import { 9 | Container, 10 | ContentHeader, 11 | Title, 12 | Description, 13 | ContentBody, 14 | ContentFoooter, 15 | ButtonFooter, 16 | Title1, 17 | Title2, 18 | } from "./styles"; 19 | 20 | export const Cadastro = () => { 21 | const { COLORS } = useTheme(); 22 | const navigation = useNavigation(); 23 | 24 | const handleVoltarLogin = () => { 25 | navigation.navigate('Login'); 26 | } 27 | 28 | return ( 29 | // 33 | 34 | 37 | 38 | Seja bem vindo {'\n'} a App Wallet 39 | CADASTRO 40 | 41 | 42 | 43 | 54 | 55 | 66 | 67 | 79 | 80 | { }} 83 | style={{ 84 | marginTop: 50, 85 | }} 86 | /> 87 | 88 | 89 | 90 | 91 | Já tem conta? 92 | Logar-se 93 | 94 | 95 | 96 | 97 | // 98 | ); 99 | }; 100 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | APP MOBILE WALLET 3 |
4 | Versão: 1.0 5 |

6 | 7 |

8 | PROTÓTIPO DO CURSO 9 |

10 | 11 |

12 | 13 | 🚧 APLICAÇÃO MOBILE PARA ANDROID E IOS WALLET FINANCEIRA... 🚧 14 |

15 | 16 |

17 | 18 |
19 |

20 | 21 | 🚀 Você ira encontrar uma lista de funcionalidade do projeto que foi implementado. Vamos utilizar banco de dados na nuvem para gerenciar todas as informações geradas pelo sistema.📄 22 | 23 | ### Features 24 | 25 | - [X] Tela de Login; 26 | - [ ] Tela de Cadastro; 27 | - [ ] Tela de Recuperação de Senha; 28 | - [ ] Tela de Alteração de Senha; 29 | - [ ] Tela Home; 30 | - [ ] Tela Notificações; 31 | - [ ] Tela de Perfil de usuário; 32 | - [ ] Tela Cartões; 33 | - [ ] Tela de Detalhes do Cartão; 34 | - [ ] Tela de Status da Renda; 35 | - [ ] Tela de Transferência; 36 | 37 | ## ✅ Instrução para rodar o projeto na maquina local; 38 | 39 | Para realizar o clone o projeto em sua máquina, e necessário que tenha as seguintes ferramentas instalado em sua máquina `yarn` ou `npm`, `node js`, `expo`. para instalar as depenicas você tem que rodar o comando `yarn` e em seguida `yarn android` caso seja ANDROID para executar a aplicação ou `yarn ios` caso seja emulador IOS. 40 | 41 | Atualmente o projeto não necessita de nenhuma variável ambiente, então, é simples para você deixar o projeto em execução. 42 | 43 | ```bash 44 | # Clonar o repositório 45 | $ git clonehttps://github.com/SilvaneiMartins/wallet-app 46 | 47 | # Acessar a pasta do projeto 48 | $ cd wallet-app 49 | 50 | # Instalar as dependências 51 | $ yarn 52 | $ npm install 53 | 54 | # Executar a aplicação android 55 | $ npx react-native run-android 56 | $ yarn android 57 | $ expo start 58 | 59 | # Executar a aplicação no ios 60 | $ npx react-native ios-android 61 | $ yarn ios 62 | $ expo start 63 | ``` 64 | 65 | ## :memo: License 66 | 67 | Este projeto está sob a licença MIT. Caso gostaria de ler, por favor acessar a licença aqui neste link [LICENSE](https://github.com/SilvaneiMartins/wallet-app/blob/master/LICENSE) para maiores informações. 68 | 69 | --- 70 | 71 | ## 🛠 Tecnologias usada no projeto; 72 | 73 | Aqui tem link de algumas das tecnologias utilizada no projeto. 74 | 75 | - [REACT](https://pt-br.reactjs.org) 76 | - [YUP](https://github.com/jquense/yup) 77 | - [REACT-NATIVE](https://reactnative.dev/) 78 | - [REDUX](https://github.com/reduxjs/redux) 79 | - [MOMENT](https://github.com/moment/moment) 80 | - [UNFORM](https://github.com/unform/unform) 81 | - [STYLED-COMPONENTS](https://styled-components.com/) 82 | - [REACT-NATIVE-VECTOR-ICONS](https://phosphoricons.com/) 83 | 84 | 85 | ### Observação Importante sobre o Projeto; 86 | 87 | - O projeto foi desenvolvido para Android e IOS, para que possa ser executado em qualquer plataforma, mas no momento vamos dar continuidade para Android é utilizar o sistema operacional windows. 88 | 89 | - Quando for adicionado ferramento ao projeto sera adicionado logo acima na sessão de Tecnologias usada no projeto. 90 | 91 | - Este README será utilizado como documentação para o projeto Wallet. 92 | 93 | ### Developer 94 | 95 | --- 96 | 97 | 98 | Silvanei Martins 104 |
105 | 106 | Silvanei de Almeida Martins 107 | 108 |
109 | 110 | 🚀 111 | 112 | Feito com ❤️ por Silvanei Martins 113 | -------------------------------------------------------------------------------- /src/screens/Tab/Notificacao/Notificacao.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react'; 2 | import { FlatList } from 'react-native'; 3 | import { useTheme } from 'styled-components/native'; 4 | import { ArrowCircleUp } from 'phosphor-react-native'; 5 | 6 | import { Header } from '../../../components/Header'; 7 | import { new_notifications } from '../../../utils/new_notifications'; 8 | import { ContentTop } from '../../../components/Notifications/ContentTop'; 9 | import { recents_notifications } from '../../../utils/recent_notifications'; 10 | 11 | import { 12 | Container, 13 | ContentBody, 14 | ContentFlat, 15 | ContentHeader, 16 | ContentTopTitle, 17 | ContentBodyTitle, 18 | DataNotifications, 19 | TitleNotifications, 20 | NewNotificationsFlat, 21 | DataNotificationsText, 22 | TitleNotificationsText, 23 | NewButtonNotifications, 24 | DescriptionNotifications, 25 | DescriptionNotificationsText, 26 | } from './styles'; 27 | 28 | export const Notificacao = () => { 29 | const { COLORS } = useTheme(); 30 | 31 | return ( 32 | <> 33 |
38 | 39 | 40 | Novo 41 | ( 44 | 49 | )} 50 | showsVerticalScrollIndicator={false} 51 | /> 52 | 53 | 54 | 55 | Recentes 56 | item.id.toString()} 59 | renderItem={({ item }) => ( 60 | 61 | 62 | 63 | 64 | {item.datetime} 65 | 66 | 67 | 68 | 69 | 70 | {item.title} 71 | 72 | 73 | 74 | 75 | 76 | {item.type} 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | )} 86 | contentContainerStyle={{ 87 | paddingBottom: 20 88 | }} 89 | showsVerticalScrollIndicator={false} 90 | /> 91 | 92 | 93 | 94 | ) 95 | } -------------------------------------------------------------------------------- /src/components/Input_old/Input.tsx: -------------------------------------------------------------------------------- 1 | import React, { 2 | useRef, 3 | useState, 4 | useEffect, 5 | forwardRef, 6 | useCallback, 7 | useImperativeHandle, 8 | } from "react"; 9 | import { useField } from "@unform/core"; 10 | import { useTheme } from "styled-components"; 11 | import { Ionicons } from "@expo/vector-icons"; 12 | import { TextInputProps } from "react-native"; 13 | 14 | interface InputRef { 15 | focus(): void; 16 | } 17 | 18 | interface InputValueReference { 19 | value: string; 20 | } 21 | 22 | interface InputProps extends TextInputProps { 23 | name: string; 24 | value?: string; 25 | iconName: keyof typeof Ionicons.glyphMap; 26 | containerStyle?: { [key: string]: string | number }; 27 | } 28 | 29 | import { Container, IConContainer, InputText } from "./styles"; 30 | 31 | const Input: React.ForwardRefRenderFunction = ( 32 | { iconName, name, value, containerStyle, ...rest }, 33 | ref 34 | ) => { 35 | const theme = useTheme(); 36 | 37 | const [hasError, setHasError] = useState(false); 38 | const [isFocused, setIsFocused] = useState(false); 39 | const [isFilled, setIsFilled] = useState(false); 40 | 41 | const { 42 | registerField, 43 | fieldName, 44 | defaultValue = "", 45 | error, 46 | } = useField(name); 47 | const inputElementRef = useRef(null); 48 | const inputValueRef = useRef({ value: defaultValue }); 49 | 50 | useEffect(() => { 51 | setHasError(!!error); 52 | }, [error]); 53 | 54 | const handleFocus = useCallback(() => { 55 | setIsFocused(true); 56 | setHasError(false); 57 | }, []); 58 | 59 | const handleBlur = useCallback(() => { 60 | setIsFocused(false); 61 | setIsFilled(!!inputValueRef.current.value); 62 | }, []); 63 | 64 | useImperativeHandle(ref, () => ({ 65 | focus() { 66 | inputElementRef.current.focus(); 67 | }, 68 | })); 69 | 70 | useEffect(() => { 71 | registerField({ 72 | name: fieldName, 73 | ref: inputElementRef.current, 74 | path: "value", 75 | setValue(_, value) { 76 | inputValueRef.current.value = value; 77 | inputElementRef.current.setNativeProps({ text: value }); 78 | }, 79 | clearValue() { 80 | inputValueRef.current.value = ""; 81 | inputElementRef.current.clear(); 82 | }, 83 | }); 84 | }, [registerField, fieldName]); 85 | 86 | return ( 87 | 88 | 93 | {iconName && ( 94 | 103 | )} 104 | 105 | 106 | { 116 | inputValueRef.current.value = value; 117 | }} 118 | {...rest} 119 | /> 120 | 121 | ); 122 | }; 123 | 124 | export default forwardRef(Input); 125 | -------------------------------------------------------------------------------- /android/app/src/main/java/com/walletapp/MainApplication.java: -------------------------------------------------------------------------------- 1 | package com.walletapp; 2 | 3 | import android.app.Application; 4 | import android.content.Context; 5 | import android.content.res.Configuration; 6 | import androidx.annotation.NonNull; 7 | 8 | import com.facebook.react.PackageList; 9 | import com.facebook.react.ReactApplication; 10 | import com.facebook.react.ReactInstanceManager; 11 | import com.facebook.react.ReactNativeHost; 12 | import com.facebook.react.ReactPackage; 13 | import com.facebook.react.config.ReactFeatureFlags; 14 | import com.facebook.soloader.SoLoader; 15 | import com.walletapp.newarchitecture.MainApplicationReactNativeHost; 16 | 17 | import expo.modules.ApplicationLifecycleDispatcher; 18 | import expo.modules.ReactNativeHostWrapper; 19 | 20 | import java.lang.reflect.InvocationTargetException; 21 | import java.util.List; 22 | 23 | public class MainApplication extends Application implements ReactApplication { 24 | private final ReactNativeHost mReactNativeHost = new ReactNativeHostWrapper( 25 | this, 26 | new ReactNativeHost(this) { 27 | @Override 28 | public boolean getUseDeveloperSupport() { 29 | return BuildConfig.DEBUG; 30 | } 31 | 32 | @Override 33 | protected List getPackages() { 34 | @SuppressWarnings("UnnecessaryLocalVariable") 35 | List packages = new PackageList(this).getPackages(); 36 | // Packages that cannot be autolinked yet can be added manually here, for example: 37 | // packages.add(new MyReactNativePackage()); 38 | return packages; 39 | } 40 | 41 | @Override 42 | protected String getJSMainModuleName() { 43 | return "index"; 44 | } 45 | }); 46 | 47 | private final ReactNativeHost mNewArchitectureNativeHost = 48 | new ReactNativeHostWrapper(this, new MainApplicationReactNativeHost(this)); 49 | 50 | @Override 51 | public ReactNativeHost getReactNativeHost() { 52 | if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { 53 | return mNewArchitectureNativeHost; 54 | } else { 55 | return mReactNativeHost; 56 | } 57 | } 58 | 59 | @Override 60 | public void onCreate() { 61 | super.onCreate(); 62 | // If you opted-in for the New Architecture, we enable the TurboModule system 63 | ReactFeatureFlags.useTurboModules = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; 64 | SoLoader.init(this, /* native exopackage */ false); 65 | 66 | initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); 67 | ApplicationLifecycleDispatcher.onApplicationCreate(this); 68 | } 69 | 70 | @Override 71 | public void onConfigurationChanged(@NonNull Configuration newConfig) { 72 | super.onConfigurationChanged(newConfig); 73 | ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig); 74 | } 75 | 76 | /** 77 | * Loads Flipper in React Native templates. Call this in the onCreate method with something like 78 | * initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); 79 | * 80 | * @param context 81 | * @param reactInstanceManager 82 | */ 83 | private static void initializeFlipper( 84 | Context context, ReactInstanceManager reactInstanceManager) { 85 | if (BuildConfig.DEBUG) { 86 | try { 87 | /* 88 | We use reflection here to pick up the class that initializes Flipper, 89 | since Flipper library is not available in release mode 90 | */ 91 | Class aClass = Class.forName("com.walletapp.ReactNativeFlipper"); 92 | aClass 93 | .getMethod("initializeFlipper", Context.class, ReactInstanceManager.class) 94 | .invoke(null, context, reactInstanceManager); 95 | } catch (ClassNotFoundException e) { 96 | e.printStackTrace(); 97 | } catch (NoSuchMethodException e) { 98 | e.printStackTrace(); 99 | } catch (IllegalAccessException e) { 100 | e.printStackTrace(); 101 | } catch (InvocationTargetException e) { 102 | e.printStackTrace(); 103 | } 104 | } 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /src/components/Profile/Profile.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { TouchableOpacity } from 'react-native'; 3 | import { useTheme } from 'styled-components/native'; 4 | import { useNavigation } from '@react-navigation/native'; 5 | import { 6 | User, 7 | CaretRight, 8 | BellSimple, 9 | Wallet, 10 | Password, 11 | PhoneCall, 12 | } from "phosphor-react-native"; 13 | 14 | import { 15 | Container, 16 | ViewProfile, 17 | ProfileName, 18 | ViewRight, 19 | ViewIcon, 20 | } from './styles'; 21 | 22 | interface IProfile { 23 | name: string; 24 | iconLeft?: boolean; 25 | iconRight?: boolean; 26 | typeUser?: boolean; 27 | typeNotification?: boolean; 28 | typeWalet?: boolean; 29 | typeLogin?: boolean; 30 | typeCall?: boolean; 31 | onPress: () => void; 32 | } 33 | 34 | export const Profile = ({ 35 | name, 36 | iconLeft, 37 | iconRight, 38 | typeCall, 39 | typeLogin, 40 | typeNotification, 41 | typeUser, 42 | typeWalet, 43 | onPress, 44 | }: IProfile) => { 45 | const { COLORS } = useTheme(); 46 | 47 | const navigation = useNavigation(); 48 | 49 | return ( 50 | <> 51 | 52 | 53 | {iconLeft && ( 54 | <> 55 | {typeUser && ( 56 | 57 | 62 | 63 | )} 64 | {typeNotification && ( 65 | 66 | 71 | 72 | )} 73 | {typeWalet && ( 74 | 75 | 80 | 81 | )} 82 | {typeLogin && ( 83 | 84 | 89 | 90 | )} 91 | {typeCall && ( 92 | 93 | 98 | 99 | )} 100 | 101 | )} 102 | 103 | {name} 104 | 105 | 110 | 111 | 112 | 113 | 114 | 115 | ) 116 | } -------------------------------------------------------------------------------- /src/styles/theme.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | COLORS: { 3 | TEXT: '#969CB2', 4 | GRAY: '#999591', 5 | BLACK: '#100C08', 6 | GRAY_100: '#B8B8B8', 7 | ICON: '#666666', 8 | WHITE: '#FFFFFF', 9 | TITLE: '#363F5F', 10 | SHAPE: '#f4ede8', 11 | PRIMARY: '#1DC18B', 12 | GRAYHARD: '#666360', 13 | TEXTDARK: '#000000', 14 | WHITE_100: '#FFFFFF', 15 | 16 | RED: '#EB5757', 17 | ORANGE_300: '#fbb605', 18 | ORANGE: '#F2994A', 19 | YELLOW: '#F2C94C', 20 | GREEN3: '#6FCF97', 21 | GREEN2: '#27AE60', 22 | GREEN1: '#219653', 23 | BLUE3: '#56CCF2', 24 | BLUE2: '#2D9CDB', 25 | BLUE1: '#2F80ED', 26 | BLUE: '#4368C7', 27 | GRAY6: '#F2F2F2', 28 | GRAY5: '#E0E0E0', 29 | GRAY4: '#BDBDBD', 30 | GRAY3: '#828282', 31 | GRAY2: '#4F4F4F', 32 | GRAY1: '#333333', 33 | 34 | PINK: '#D71CDB', 35 | PURPLE2: '#BB6BD9', 36 | PURPLE1: '#9B51E0', 37 | PURPLE: '#9038FF', 38 | PURPLEDARK1: '#6E34B8', 39 | PURPLEDARK2: '#5B259F', 40 | PURPLEDARK3: '#2F1155', 41 | PURPLE_CARD: "#5B259F", 42 | PURPLE_ELIPSE_ONE: "#6E34B8", 43 | PURPLE_ELIPSE_TWO: "#9038FF", 44 | PURPLE_TEXT: '#130138', 45 | 46 | TONE: '#E6E3D6', 47 | AVATAR: '#E0E0E0', 48 | BORDER: '#DEDCD3', 49 | SPEACH: '#D5CFB9', 50 | SPEACH200: '#bab49f', 51 | SPEACH300: '#b7ad87', 52 | SPEACH400: '#aea997', 53 | SPEACH500: '#928b72', 54 | SPEACH600: '#888577', 55 | INFORMATIVO: '#F3B263', 56 | 57 | TYPOTIME: '#6E664E', 58 | TYPOGHOST: '#999999', 59 | TYPOBrand: '#55AB67', 60 | TYPOSOCIAL: '#5B75A6', 61 | TYPOPRIMARY: '#000000', 62 | TYPOSECONDARY: '#333333', 63 | 64 | TONEBG: '#E6E3D6', 65 | TONEYPE: '#6E664E', 66 | TONE1829: '#f3ebd9', 67 | TONESTO: '#e4daca', 68 | TONEPAINT: '#f2d9be', 69 | TONEGLIDDEN: '#e7e3d6', 70 | TONEOLYMPIC: '#ede3d6', 71 | TONEPANTONE: '#f0e4d7', 72 | TONECAPAROL: '#e4d8d0', 73 | TONEBRISTOL: '#ecddc9', 74 | TONEMATTNEWS: '#f2d9be', 75 | TONEHOMEBASE: '#f0e9d9', 76 | 77 | BACKGROUND: '#E5E5E5', 78 | BACKGROUNDDARK: '#312e38', 79 | BACKGROUNDLIGHT: '#FFFFFF', 80 | BACKGROUNDOFICIAL: '#F2EFE5', 81 | BACKGROUNDDEFAULT: '#F1EFE5', 82 | 83 | SECONDARY: '#FF872C', 84 | SECONDARY_LIGHT: 'rgba(255, 135, 44, 0.3)', 85 | SECONDARY_LIGHT4: 'rgba(255, 135, 44, 0.4)', 86 | SECONDARY_LIGHT2: 'rgba(255, 135, 44, 0.2)', 87 | SECONDARY_LIGHT1: 'rgba(255, 135, 44, 0.1)', 88 | 89 | SUCCESS: '#12A454', 90 | SUCCESS_LIGHT: 'rgba(18, 164, 84, 0.5)', 91 | SUCCESS_LIGHT1: 'rgba(18, 164, 84, 0.1)', 92 | SUCCESS_LIGHT2: 'rgba(18, 164, 84, 0.2)', 93 | SUCCESS_LIGHT3: 'rgba(18, 164, 84, 0.3)', 94 | SUCCESS_LIGHT4: 'rgba(18, 164, 84, 0.4)', 95 | SUCCESS_LIGHT5: 'rgba(18, 164, 84, 0.5)', 96 | SUCCESS_LIGHT6: 'rgba(18, 164, 84, 0.6)', 97 | SUCCESS_LIGHT7: 'rgba(18, 164, 84, 0.7)', 98 | SUCCESS_LIGHT8: 'rgba(18, 164, 84, 0.8)', 99 | SUCCESS_LIGHT9: 'rgba(18, 164, 84, 0.9)', 100 | 101 | ATTENTION: '#E83F5B', 102 | ATTENTION_LIGHT1: 'rgba(232, 63, 91, 0.1)', 103 | ATTENTION_LIGHT2: 'rgba(232, 63, 91, 0.2)', 104 | ATTENTION_LIGHT3: 'rgba(232, 63, 91, 0.3)', 105 | ATTENTION_LIGHT4: 'rgba(232, 63, 91, 0.4)', 106 | ATTENTION_LIGHT: 'rgba(232, 63, 91, 0.5)', 107 | ATTENTION_LIGHT6: 'rgba(232, 63, 91, 0.6)', 108 | ATTENTION_LIGHT7: 'rgba(232, 63, 91, 0.7)', 109 | ATTENTION_LIGHT8: 'rgba(232, 63, 91, 0.8)', 110 | ATTENTION_LIGHT9: 'rgba(232, 63, 91, 0.9)', 111 | }, 112 | 113 | FONTS: { 114 | TEXT: 'DMSans_400Regular', 115 | POPPINSBOLD: 'Poppins_700Bold', 116 | POPPINSLIGHT: 'Poppins_300Light', 117 | POPPINSMEDIUM: 'Poppins_500Medium', 118 | TITLE: 'DMSerifDisplay_400Regular', 119 | POPPINSREGULAR: 'Poppins_400Regular', 120 | POPPINSEXTRABOLD: 'Poppins_800ExtraBold', 121 | }, 122 | }; 123 | -------------------------------------------------------------------------------- /src/screens/Auth/Login/Login.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from "react"; 2 | import { useTheme } from "styled-components"; 3 | import { KeyboardAvoidingView, ScrollView } from "react-native"; 4 | import { useNavigation } from "@react-navigation/native"; 5 | 6 | import Input from "../../../components/Input/Input"; 7 | import { ButtonSocial } from "../../../components/ButtonSocial/ButtonSocial"; 8 | import { ButtonPersonalizado } from "../../../components/ButtonPersonalizado"; 9 | import { ButtonSocialGoogle } from "../../../components/ButtonSocialGoogle/ButtonSocialGoogle"; 10 | import { 11 | Container, 12 | ContentHeader, 13 | ContentBody, 14 | ContentFooter, 15 | Title, 16 | Description, 17 | ViewButton, 18 | ButtonSignUp, 19 | TitleButtonSignUp1, 20 | TitleButtonSingUp2, 21 | ContentForgotPassword, 22 | ContentButtonForgotPassword, 23 | ContentTitleForgotPassword, 24 | } from "./styles"; 25 | 26 | export const Login = () => { 27 | const { COLORS } = useTheme(); 28 | const [loading, setLoading] = useState(false); 29 | const navigation = useNavigation() 30 | 31 | function onPressButton() { 32 | setLoading(true); 33 | console.log("pressionado"); 34 | setTimeout(() => { 35 | setLoading(false); 36 | }, 2000); 37 | } 38 | 39 | const handleCadastro = () => { 40 | navigation.navigate('Cadastro'); 41 | } 42 | 43 | const handleRecuperarSenha = () => { 44 | navigation.navigate('RecuperarSenha'); 45 | } 46 | 47 | return ( 48 | // 52 | 53 | 54 | 55 | Seja bem vindo(a) {"\n"} a App Carteira 56 | Entrar com rede sociais 57 | 58 | 59 | 60 | 61 | 62 | 63 | 73 | 84 | 85 | 86 | Recuperar Senha 87 | 88 | 89 | {}} 93 | style={{ marginBottom: 20 }} 94 | /> 95 | 96 | 97 | 98 | 99 | Não tem cadastro ainda? 100 | Cadastre-se 101 | 102 | 103 | 104 | 105 | 106 | // 107 | ); 108 | }; 109 | -------------------------------------------------------------------------------- /ios/walletapp/SplashScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 31 | 39 | 40 | 41 | 42 | 53 | 54 | 55 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /src/screens/Tab/Carteira/Carteira.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { useNavigation } from '@react-navigation/native'; 3 | import { View, Text, TouchableOpacity, FlatList } from 'react-native'; 4 | 5 | import Payments from '../../../assets/export.png'; 6 | import Transfer from '../../../assets/convert.png'; 7 | import TopUp from '../../../assets/add-circle.png'; 8 | import PayOut from '../../../assets/money-send.png'; 9 | import EllipseOnePng from '../../../assets/ellipse1.png'; 10 | import EllipseTwoPng from '../../../assets/ellipse2.png'; 11 | import { Header } from '../../../components/Header/Header'; 12 | import { limited_transaction } from "../../../utils/limited_transaction"; 13 | import { 14 | Container, 15 | Content, 16 | ViewContainer, 17 | ViewBalanceLeft, 18 | ViewBalanceRight, 19 | TitleValor, 20 | TitleValoConta, 21 | TitleCartao, 22 | TitleNomeCartao, 23 | Body, 24 | IconPayment, 25 | IconTransfer, 26 | IconPayOut, 27 | IconTopUp, 28 | TitleTransfer, 29 | TitlePayments, 30 | TitlePayOut, 31 | TitleTopUp, 32 | Footer, 33 | ContentFlat, 34 | ContentFlatHeader, 35 | Title, 36 | ButtonVerTotos, 37 | ButtonTitleVertotos, 38 | IconTransaction, 39 | DetailsTransaction, 40 | NameTransaction, 41 | SubtTitleTransaction, 42 | AmountTransaction, 43 | EllipseOne, 44 | EllipseTwo, 45 | } from './styles'; 46 | 47 | export const Carteira = () => { 48 | const navigation = useNavigation(); 49 | 50 | const hadleGoTransaction = () => { 51 | navigation.navigate('Transaction') 52 | } 53 | 54 | return ( 55 | 56 |
61 | 62 | 63 | 64 | 65 | 66 | Valor Total 67 | R$ 1.000,00 68 | 69 | 70 | 71 | Cartão 72 | Wallet 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | Transf. 81 | 82 | 83 | 84 | Forma Pagto 85 | 86 | 87 | 88 | Pagtos 89 | 90 | navigation.navigate('AddCartao')} 92 | style={{ alignItems: 'center' }} 93 | > 94 | 95 | Add Cartão 96 | 97 | 98 | 99 | 100 |
101 | ( 104 | 105 | 108 | 109 | 110 | {item.title} 111 | {item.subtitle} 112 | 113 | 114 | R$ {item.amount} 115 | 116 | )} 117 | ListHeaderComponent={ 118 | 119 | Minhas Transações 120 | 121 | Ver Todos 122 | 123 | 124 | } 125 | showsVerticalScrollIndicator={false} 126 | /> 127 |
128 | 129 | ) 130 | } -------------------------------------------------------------------------------- /src/screens/Tab/Carteira/styles.ts: -------------------------------------------------------------------------------- 1 | import styled from "styled-components/native"; 2 | 3 | export const Container = styled.View` 4 | flex: 1; 5 | `; 6 | 7 | export const ViewContainer = styled.View` 8 | padding: 0 30px; 9 | align-items: center; 10 | justify-content: center; 11 | `; 12 | 13 | export const Content = styled.View` 14 | width: 100%; 15 | height: 160px; 16 | flex-direction: row; 17 | border-radius: 50px; 18 | align-items: center; 19 | justify-content: space-around; 20 | background-color: ${({ theme }) => theme.COLORS.PURPLE_CARD}; 21 | `; 22 | 23 | export const EllipseOne = styled.Image` 24 | top: 1px; 25 | left: 40px; 26 | position: absolute; 27 | `; 28 | 29 | export const EllipseTwo = styled.Image` 30 | right: 0; 31 | bottom: 0; 32 | position: absolute; 33 | `; 34 | 35 | export const ViewBalanceLeft = styled.View``; 36 | 37 | export const ViewBalanceRight = styled.View` 38 | z-index: 1; 39 | `; 40 | 41 | export const TitleValor = styled.Text` 42 | font-size: 16px; 43 | color: ${({ theme }) => theme.COLORS.WHITE}; 44 | font-family: ${({ theme }) => theme.FONTS.POPPINSBOLD}; 45 | `; 46 | 47 | export const TitleValoConta = styled.Text` 48 | font-size: 20px; 49 | color: ${({ theme }) => theme.COLORS.WHITE}; 50 | font-family: ${({ theme }) => theme.FONTS.POPPINSEXTRABOLD}; 51 | `; 52 | 53 | export const TitleCartao = styled.Text` 54 | font-size: 16px; 55 | color: ${({ theme }) => theme.COLORS.WHITE}; 56 | font-family: ${({ theme }) => theme.FONTS.POPPINSBOLD}; 57 | `; 58 | 59 | export const TitleNomeCartao = styled.Text` 60 | font-size: 20px; 61 | color: ${({ theme }) => theme.COLORS.WHITE}; 62 | font-family: ${({ theme }) => theme.FONTS.POPPINSEXTRABOLD}; 63 | `; 64 | 65 | export const Body = styled.View` 66 | width: 100%; 67 | padding: 10px; 68 | margin-top: 20px; 69 | align-items: center; 70 | flex-direction: row; 71 | justify-content: space-between; 72 | `; 73 | 74 | export const IconPayment = styled.Image` 75 | width: 70px; 76 | height: 70px; 77 | `; 78 | 79 | export const IconTransfer = styled.Image` 80 | width: 70px; 81 | height: 70px; 82 | `; 83 | 84 | export const IconPayOut = styled.Image` 85 | width: 70px; 86 | height: 70px; 87 | `; 88 | 89 | export const IconTopUp = styled.Image` 90 | width: 70px; 91 | height: 70px; 92 | `; 93 | 94 | export const TitleTransfer = styled.Text` 95 | font-size: 13px; 96 | color: ${({ theme }) => theme.COLORS.PURPLE_CARD}; 97 | font-family: ${({ theme }) => theme.FONTS.POPPINSMEDIUM}; 98 | `; 99 | 100 | export const TitlePayments = styled.Text` 101 | font-size: 13px; 102 | color: ${({ theme }) => theme.COLORS.PURPLE_CARD}; 103 | font-family: ${({ theme }) => theme.FONTS.POPPINSMEDIUM}; 104 | `; 105 | 106 | export const TitlePayOut = styled.Text` 107 | font-size: 13px; 108 | color: ${({ theme }) => theme.COLORS.PURPLE_CARD}; 109 | font-family: ${({ theme }) => theme.FONTS.POPPINSMEDIUM}; 110 | `; 111 | 112 | export const TitleTopUp = styled.Text` 113 | font-size: 13px; 114 | color: ${({ theme }) => theme.COLORS.PURPLE_CARD}; 115 | font-family: ${({ theme }) => theme.FONTS.POPPINSMEDIUM}; 116 | `; 117 | 118 | export const Footer = styled.View` 119 | flex: 1; 120 | `; 121 | 122 | export const ContentFlat = styled.View` 123 | padding: 5px 20px; 124 | flex-direction: row; 125 | `; 126 | 127 | export const ContentFlatHeader = styled.View` 128 | flex-direction: row; 129 | align-items: center; 130 | padding: 20px; 131 | justify-content: space-between; 132 | `; 133 | 134 | export const Title = styled.Text` 135 | font-size: 20px; 136 | margin-left: 13px; 137 | color: ${({ theme }) => theme.COLORS.GRAY1}; 138 | font-family: ${({ theme }) => theme.FONTS.POPPINSBOLD}; 139 | `; 140 | 141 | export const ButtonVerTotos = styled.TouchableOpacity` 142 | padding: 3px; 143 | border-width: 1px; 144 | border-radius: 30px; 145 | border-color: ${({ theme }) => theme.COLORS.PURPLE_CARD}; 146 | `; 147 | 148 | export const ButtonTitleVertotos = styled.Text` 149 | font-size: 12px; 150 | color: ${({ theme }) => theme.COLORS.PURPLEDARK1}; 151 | font-family: ${({ theme }) => theme.FONTS.POPPINSLIGHT}; 152 | `; 153 | 154 | export const IconTransaction = styled.Image` 155 | width: 60px; 156 | height: 60px; 157 | `; 158 | 159 | export const DetailsTransaction = styled.View` 160 | flex: 1; 161 | `; 162 | 163 | export const NameTransaction = styled.Text` 164 | font-weight: 900; 165 | font-size: 16px; 166 | color: ${({ theme }) => theme.COLORS.GRAY1}; 167 | font-weight: ${({ theme }) => theme.FONTS.POPPINSREGULAR}; 168 | `; 169 | 170 | export const SubtTitleTransaction = styled.Text` 171 | font-size: 14px; 172 | color: ${({ theme }) => theme.COLORS.GRAY4}; 173 | font-weight: ${({ theme }) => theme.FONTS.POPPINSLIGHT}; 174 | `; 175 | 176 | export const AmountTransaction = styled.Text` 177 | font-weight: 900; 178 | font-size: 16px; 179 | color: ${({ theme }) => theme.COLORS.GRAY1}; 180 | font-weight: ${({ theme }) => theme.FONTS.POPPINSREGULAR}; 181 | `; 182 | -------------------------------------------------------------------------------- /android/app/src/main/java/com/walletapp/newarchitecture/MainApplicationReactNativeHost.java: -------------------------------------------------------------------------------- 1 | package com.walletapp.newarchitecture; 2 | 3 | import android.app.Application; 4 | import androidx.annotation.NonNull; 5 | import com.facebook.react.PackageList; 6 | import com.facebook.react.ReactInstanceManager; 7 | import com.facebook.react.ReactNativeHost; 8 | import com.facebook.react.ReactPackage; 9 | import com.facebook.react.ReactPackageTurboModuleManagerDelegate; 10 | import com.facebook.react.bridge.JSIModulePackage; 11 | import com.facebook.react.bridge.JSIModuleProvider; 12 | import com.facebook.react.bridge.JSIModuleSpec; 13 | import com.facebook.react.bridge.JSIModuleType; 14 | import com.facebook.react.bridge.JavaScriptContextHolder; 15 | import com.facebook.react.bridge.ReactApplicationContext; 16 | import com.facebook.react.bridge.UIManager; 17 | import com.facebook.react.fabric.ComponentFactory; 18 | import com.facebook.react.fabric.CoreComponentsRegistry; 19 | import com.facebook.react.fabric.EmptyReactNativeConfig; 20 | import com.facebook.react.fabric.FabricJSIModuleProvider; 21 | import com.facebook.react.fabric.ReactNativeConfig; 22 | import com.facebook.react.uimanager.ViewManagerRegistry; 23 | import com.walletapp.BuildConfig; 24 | import com.walletapp.newarchitecture.components.MainComponentsRegistry; 25 | import com.walletapp.newarchitecture.modules.MainApplicationTurboModuleManagerDelegate; 26 | import java.util.ArrayList; 27 | import java.util.List; 28 | 29 | /** 30 | * A {@link ReactNativeHost} that helps you load everything needed for the New Architecture, both 31 | * TurboModule delegates and the Fabric Renderer. 32 | * 33 | *

Please note that this class is used ONLY if you opt-in for the New Architecture (see the 34 | * `newArchEnabled` property). Is ignored otherwise. 35 | */ 36 | public class MainApplicationReactNativeHost extends ReactNativeHost { 37 | public MainApplicationReactNativeHost(Application application) { 38 | super(application); 39 | } 40 | 41 | @Override 42 | public boolean getUseDeveloperSupport() { 43 | return BuildConfig.DEBUG; 44 | } 45 | 46 | @Override 47 | protected List getPackages() { 48 | List packages = new PackageList(this).getPackages(); 49 | // Packages that cannot be autolinked yet can be added manually here, for example: 50 | // packages.add(new MyReactNativePackage()); 51 | // TurboModules must also be loaded here providing a valid TurboReactPackage implementation: 52 | // packages.add(new TurboReactPackage() { ... }); 53 | // If you have custom Fabric Components, their ViewManagers should also be loaded here 54 | // inside a ReactPackage. 55 | return packages; 56 | } 57 | 58 | @Override 59 | protected String getJSMainModuleName() { 60 | return "index"; 61 | } 62 | 63 | @NonNull 64 | @Override 65 | protected ReactPackageTurboModuleManagerDelegate.Builder 66 | getReactPackageTurboModuleManagerDelegateBuilder() { 67 | // Here we provide the ReactPackageTurboModuleManagerDelegate Builder. This is necessary 68 | // for the new architecture and to use TurboModules correctly. 69 | return new MainApplicationTurboModuleManagerDelegate.Builder(); 70 | } 71 | 72 | @Override 73 | protected JSIModulePackage getJSIModulePackage() { 74 | return new JSIModulePackage() { 75 | @Override 76 | public List getJSIModules( 77 | final ReactApplicationContext reactApplicationContext, 78 | final JavaScriptContextHolder jsContext) { 79 | final List specs = new ArrayList<>(); 80 | 81 | // Here we provide a new JSIModuleSpec that will be responsible of providing the 82 | // custom Fabric Components. 83 | specs.add( 84 | new JSIModuleSpec() { 85 | @Override 86 | public JSIModuleType getJSIModuleType() { 87 | return JSIModuleType.UIManager; 88 | } 89 | 90 | @Override 91 | public JSIModuleProvider getJSIModuleProvider() { 92 | final ComponentFactory componentFactory = new ComponentFactory(); 93 | CoreComponentsRegistry.register(componentFactory); 94 | 95 | // Here we register a Components Registry. 96 | // The one that is generated with the template contains no components 97 | // and just provides you the one from React Native core. 98 | MainComponentsRegistry.register(componentFactory); 99 | 100 | final ReactInstanceManager reactInstanceManager = getReactInstanceManager(); 101 | 102 | ViewManagerRegistry viewManagerRegistry = 103 | new ViewManagerRegistry( 104 | reactInstanceManager.getOrCreateViewManagers(reactApplicationContext)); 105 | 106 | return new FabricJSIModuleProvider( 107 | reactApplicationContext, 108 | componentFactory, 109 | ReactNativeConfig.DEFAULT_CONFIG, 110 | viewManagerRegistry); 111 | } 112 | }); 113 | return specs; 114 | } 115 | }; 116 | } 117 | } 118 | -------------------------------------------------------------------------------- /src/utils/transaction.ts: -------------------------------------------------------------------------------- 1 | import NetflixPng from "../assets/netflix.png"; 2 | import PaypalPng from "../assets/paypal.png"; 3 | import EntradaPng from "../assets/entrada.png"; 4 | 5 | export const transaction = [ 6 | { 7 | id: "1", 8 | title: "Pagto Netflix", 9 | subtitle: "Pagto referente a netflix", 10 | amount: 49.99, 11 | icon: NetflixPng 12 | }, 13 | { 14 | id: "2", 15 | title: "Pagto Boleto Paypal", 16 | subtitle: "Pagto referente a boeleto paypal", 17 | amount: 99.50, 18 | icon: PaypalPng 19 | }, 20 | { 21 | id: "3", 22 | title: "Entrada", 23 | subtitle: "Valor referente a entrada", 24 | amount: 500.00, 25 | icon: EntradaPng 26 | }, 27 | { 28 | id: "4", 29 | title: "Pagto Netflix", 30 | subtitle: "Pagto referente a netflix", 31 | amount: 19.99, 32 | icon: NetflixPng 33 | }, 34 | { 35 | id: "5", 36 | title: "Pagto Boleto Paypal", 37 | subtitle: "Pagto referente a boeleto paypal", 38 | amount: 39.50, 39 | icon: PaypalPng 40 | }, 41 | { 42 | id: "6", 43 | title: "Entrada", 44 | subtitle: "Valor referente a entrada", 45 | amount: 300.00, 46 | icon: EntradaPng 47 | }, 48 | { 49 | id: "7", 50 | title: "Pagto Netflix", 51 | subtitle: "Pagto referente a netflix", 52 | amount: 49.99, 53 | icon: NetflixPng 54 | }, 55 | { 56 | id: "8", 57 | title: "Pagto Boleto Paypal", 58 | subtitle: "Pagto referente a boeleto paypal", 59 | amount: 99.50, 60 | icon: PaypalPng 61 | }, 62 | { 63 | id: "9", 64 | title: "Entrada", 65 | subtitle: "Valor referente a entrada", 66 | amount: 500.00, 67 | icon: EntradaPng 68 | }, 69 | { 70 | id: "10", 71 | title: "Pagto Netflix", 72 | subtitle: "Pagto referente a netflix", 73 | amount: 19.99, 74 | icon: NetflixPng 75 | }, 76 | { 77 | id: "11", 78 | title: "Pagto Boleto Paypal", 79 | subtitle: "Pagto referente a boeleto paypal", 80 | amount: 39.50, 81 | icon: PaypalPng 82 | }, 83 | { 84 | id: "12", 85 | title: "Entrada", 86 | subtitle: "Valor referente a entrada", 87 | amount: 300.00, 88 | icon: EntradaPng 89 | }, 90 | { 91 | id: "13", 92 | title: "Pagto Netflix", 93 | subtitle: "Pagto referente a netflix", 94 | amount: 49.99, 95 | icon: NetflixPng 96 | }, 97 | { 98 | id: "14", 99 | title: "Pagto Boleto Paypal", 100 | subtitle: "Pagto referente a boeleto paypal", 101 | amount: 99.50, 102 | icon: PaypalPng 103 | }, 104 | { 105 | id: "15", 106 | title: "Entrada", 107 | subtitle: "Valor referente a entrada", 108 | amount: 500.00, 109 | icon: EntradaPng 110 | }, 111 | { 112 | id: "16", 113 | title: "Pagto Netflix", 114 | subtitle: "Pagto referente a netflix", 115 | amount: 19.99, 116 | icon: NetflixPng 117 | }, 118 | { 119 | id: "17", 120 | title: "Pagto Boleto Paypal", 121 | subtitle: "Pagto referente a boeleto paypal", 122 | amount: 39.50, 123 | icon: PaypalPng 124 | }, 125 | { 126 | id: "18", 127 | title: "Entrada", 128 | subtitle: "Valor referente a entrada", 129 | amount: 300.00, 130 | icon: EntradaPng 131 | }, 132 | { 133 | id: "19", 134 | title: "Pagto Netflix", 135 | subtitle: "Pagto referente a netflix", 136 | amount: 49.99, 137 | icon: NetflixPng 138 | }, 139 | { 140 | id: "20", 141 | title: "Pagto Boleto Paypal", 142 | subtitle: "Pagto referente a boeleto paypal", 143 | amount: 99.50, 144 | icon: PaypalPng 145 | }, 146 | { 147 | id: "21", 148 | title: "Entrada", 149 | subtitle: "Valor referente a entrada", 150 | amount: 500.00, 151 | icon: EntradaPng 152 | }, 153 | { 154 | id: "22", 155 | title: "Pagto Netflix", 156 | subtitle: "Pagto referente a netflix", 157 | amount: 19.99, 158 | icon: NetflixPng 159 | }, 160 | { 161 | id: "23", 162 | title: "Pagto Boleto Paypal", 163 | subtitle: "Pagto referente a boeleto paypal", 164 | amount: 39.50, 165 | icon: PaypalPng 166 | }, 167 | { 168 | id: "24", 169 | title: "Entrada", 170 | subtitle: "Valor referente a entrada", 171 | amount: 300.00, 172 | icon: EntradaPng 173 | }, 174 | { 175 | id: "25", 176 | title: "Saída", 177 | subtitle: "Valor referente a Saída", 178 | amount: 300.00, 179 | icon: EntradaPng 180 | }, 181 | { 182 | id: "26", 183 | title: "Entrada", 184 | subtitle: "Valor referente a entrada", 185 | amount: 300.00, 186 | icon: EntradaPng 187 | }, 188 | { 189 | id: "27", 190 | title: "Saída", 191 | subtitle: "Valor referente a Saída", 192 | amount: 300.00, 193 | icon: EntradaPng 194 | } 195 | ] -------------------------------------------------------------------------------- /src/routes/tab.routes.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { View, Platform } from 'react-native'; 3 | import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; 4 | import { CreditCard, ChartBar, Bell, GearSix } from 'phosphor-react-native'; 5 | 6 | import theme from '../styles/theme'; 7 | import { Settings } from '../screens/Tab/Settings'; 8 | import { Carteira } from '../screens/Tab/Carteira'; 9 | import { Relatorio } from '../screens/Tab/Relatorio'; 10 | import { Notificacao } from '../screens/Tab/Notificacao'; 11 | 12 | const { Navigator, Screen } = createBottomTabNavigator(); 13 | 14 | export const TabRoutes = () => { 15 | return ( 16 | 33 | ( 39 | 46 | {focused ? ( 47 | 52 | ) : ( 53 | 58 | )} 59 | 60 | ) 61 | }} 62 | /> 63 | ( 69 | 76 | {focused ? ( 77 | 82 | ) : ( 83 | 88 | )} 89 | 90 | ) 91 | }} 92 | /> 93 | ( 99 | 106 | {focused ? ( 107 | 112 | ) : ( 113 | 118 | )} 119 | 120 | ) 121 | }} 122 | /> 123 | ( 129 | 136 | {focused ? ( 137 | 142 | ) : ( 143 | 148 | )} 149 | 150 | ) 151 | }} 152 | /> 153 | 154 | ) 155 | } -------------------------------------------------------------------------------- /ios/walletapp/AppDelegate.mm: -------------------------------------------------------------------------------- 1 | #import "AppDelegate.h" 2 | 3 | #import 4 | #import 5 | #import 6 | #import 7 | #import 8 | 9 | #import 10 | 11 | #if RCT_NEW_ARCH_ENABLED 12 | #import 13 | #import 14 | #import 15 | #import 16 | #import 17 | #import 18 | 19 | #import 20 | 21 | static NSString *const kRNConcurrentRoot = @"concurrentRoot"; 22 | 23 | @interface AppDelegate () { 24 | RCTTurboModuleManager *_turboModuleManager; 25 | RCTSurfacePresenterBridgeAdapter *_bridgeAdapter; 26 | std::shared_ptr _reactNativeConfig; 27 | facebook::react::ContextContainer::Shared _contextContainer; 28 | } 29 | @end 30 | #endif 31 | 32 | @implementation AppDelegate 33 | 34 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 35 | { 36 | RCTAppSetupPrepareApp(application); 37 | 38 | RCTBridge *bridge = [self.reactDelegate createBridgeWithDelegate:self launchOptions:launchOptions]; 39 | 40 | #if RCT_NEW_ARCH_ENABLED 41 | _contextContainer = std::make_shared(); 42 | _reactNativeConfig = std::make_shared(); 43 | _contextContainer->insert("ReactNativeConfig", _reactNativeConfig); 44 | _bridgeAdapter = [[RCTSurfacePresenterBridgeAdapter alloc] initWithBridge:bridge contextContainer:_contextContainer]; 45 | bridge.surfacePresenter = _bridgeAdapter.surfacePresenter; 46 | #endif 47 | 48 | NSDictionary *initProps = [self prepareInitialProps]; 49 | UIView *rootView = [self.reactDelegate createRootViewWithBridge:bridge moduleName:@"main" initialProperties:initProps]; 50 | 51 | rootView.backgroundColor = [UIColor whiteColor]; 52 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 53 | UIViewController *rootViewController = [self.reactDelegate createRootViewController]; 54 | rootViewController.view = rootView; 55 | self.window.rootViewController = rootViewController; 56 | [self.window makeKeyAndVisible]; 57 | 58 | [super application:application didFinishLaunchingWithOptions:launchOptions]; 59 | 60 | return YES; 61 | } 62 | 63 | - (NSArray> *)extraModulesForBridge:(RCTBridge *)bridge 64 | { 65 | // If you'd like to export some custom RCTBridgeModules, add them here! 66 | return @[]; 67 | } 68 | 69 | /// This method controls whether the `concurrentRoot`feature of React18 is turned on or off. 70 | /// 71 | /// @see: https://reactjs.org/blog/2022/03/29/react-v18.html 72 | /// @note: This requires to be rendering on Fabric (i.e. on the New Architecture). 73 | /// @return: `true` if the `concurrentRoot` feture is enabled. Otherwise, it returns `false`. 74 | - (BOOL)concurrentRootEnabled 75 | { 76 | // Switch this bool to turn on and off the concurrent root 77 | return true; 78 | } 79 | 80 | - (NSDictionary *)prepareInitialProps 81 | { 82 | NSMutableDictionary *initProps = [NSMutableDictionary new]; 83 | #if RCT_NEW_ARCH_ENABLED 84 | initProps[kRNConcurrentRoot] = @([self concurrentRootEnabled]); 85 | #endif 86 | return initProps; 87 | } 88 | 89 | - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge 90 | { 91 | #if DEBUG 92 | return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"]; 93 | #else 94 | return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; 95 | #endif 96 | } 97 | 98 | // Linking API 99 | - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary *)options { 100 | return [super application:application openURL:url options:options] || [RCTLinkingManager application:application openURL:url options:options]; 101 | } 102 | 103 | // Universal Links 104 | - (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray> * _Nullable))restorationHandler { 105 | BOOL result = [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler]; 106 | return [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler] || result; 107 | } 108 | 109 | // Explicitly define remote notification delegates to ensure compatibility with some third-party libraries 110 | - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 111 | { 112 | return [super application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken]; 113 | } 114 | 115 | // Explicitly define remote notification delegates to ensure compatibility with some third-party libraries 116 | - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error 117 | { 118 | return [super application:application didFailToRegisterForRemoteNotificationsWithError:error]; 119 | } 120 | 121 | // Explicitly define remote notification delegates to ensure compatibility with some third-party libraries 122 | - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler 123 | { 124 | return [super application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler]; 125 | } 126 | 127 | #if RCT_NEW_ARCH_ENABLED 128 | 129 | #pragma mark - RCTCxxBridgeDelegate 130 | 131 | - (std::unique_ptr)jsExecutorFactoryForBridge:(RCTBridge *)bridge 132 | { 133 | _turboModuleManager = [[RCTTurboModuleManager alloc] initWithBridge:bridge 134 | delegate:self 135 | jsInvoker:bridge.jsCallInvoker]; 136 | return RCTAppSetupDefaultJsExecutorFactory(bridge, _turboModuleManager); 137 | } 138 | 139 | #pragma mark RCTTurboModuleManagerDelegate 140 | 141 | - (Class)getModuleClassFromName:(const char *)name 142 | { 143 | return RCTCoreModulesClassProvider(name); 144 | } 145 | 146 | - (std::shared_ptr)getTurboModule:(const std::string &)name 147 | jsInvoker:(std::shared_ptr)jsInvoker 148 | { 149 | return nullptr; 150 | } 151 | 152 | - (std::shared_ptr)getTurboModule:(const std::string &)name 153 | initParams: 154 | (const facebook::react::ObjCTurboModule::InitParams &)params 155 | { 156 | return nullptr; 157 | } 158 | 159 | - (id)getModuleInstanceFromClass:(Class)moduleClass 160 | { 161 | return RCTAppSetupDefaultModuleFromClass(moduleClass); 162 | } 163 | 164 | #endif 165 | 166 | @end 167 | --------------------------------------------------------------------------------