diff --git a/android/.settings/org.eclipse.buildship.core.prefs b/android/.settings/org.eclipse.buildship.core.prefs index e8895216fd..e479558406 100644 --- a/android/.settings/org.eclipse.buildship.core.prefs +++ b/android/.settings/org.eclipse.buildship.core.prefs @@ -1,2 +1,13 @@ +arguments= +auto.sync=false +build.scans.enabled=false +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) connection.project.dir= eclipse.preferences.version=1 +gradle.user.home= +java.home= +jvm.arguments= +offline.mode=false +override.workspace.settings=false +show.console.view=false +show.executions.view=false diff --git a/android/app/.project b/android/app/.project index ac485d7c3e..d3316caded 100644 --- a/android/app/.project +++ b/android/app/.project @@ -20,4 +20,15 @@ org.eclipse.jdt.core.javanature org.eclipse.buildship.core.gradleprojectnature + + + 1679415300110 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/flows/f&f.yaml b/flows/f&f.yaml new file mode 100644 index 0000000000..cb6d68f324 --- /dev/null +++ b/flows/f&f.yaml @@ -0,0 +1,60 @@ +# f&f.yaml + +# Add friends and Family to your list to be able to send SATS easily + +appId: io.hexawallet.hexa.development +--- +- runFlow: "login.yaml" +- tapOn: Freiend, tab, 2 of 4 + +#------------------------------------------------------------ +# Create Invitation Link +#------------------------------------------------------------ + +- tapOn: + id: "+AddNewContact" +- tapOn: Anna Haro +- tapOn: + id: "confirmAndProceedButton" +- tapOn: + point: "45%,72%" + +- tapOn: + id: "secureWithContactsPhoneNumber" +- tapOn: + point: "50%,27%" +- tapOn: + point: "50%,47%" +- tapOn: + point: "50%,67%" +- tapOn: + point: "10%,90%" + +- tapOn:  + +#------------------------------------------------------------ +#Create Invitation Link with gift +#------------------------------------------------------------ + +- tapOn: + id: "+AddNewContact" +- tapOn: David Taylor +- tapOn: + id: "confirmAndProceedButton" + +- tapOn: + point: "45%,85%" + +- tapOn: Enter amount in sats +- tapOn: 1 +- tapOn: 0 +- tapOn: 0 +- tapOn: 0 +- tapOn: + text: 0 + index: 0 +- tapOn: + id: "UseSatcardToGiftSats" +- tapOn: Create Gifts +- tapOn:  +- tapOn:  diff --git a/flows/giftSats.yaml b/flows/giftSats.yaml new file mode 100644 index 0000000000..f38affc559 --- /dev/null +++ b/flows/giftSats.yaml @@ -0,0 +1,67 @@ +# giftSats.yaml + +appId: io.hexawallet.hexa.development +--- +- runFlow: "login.yaml" +- tapOn: Securiy, tab, 3 of 4 + +#------------------------------------------------------------ +# Create New Gift +#------------------------------------------------------------ + +- tapOn: + id: "createNewGiftButton" +- tapOn: + point: "45%,85%" + +- tapOn: Enter amount in sats +- tapOn: 1 +- tapOn: 0 +- tapOn: 0 +- tapOn: 0 +- tapOn: + text: 0 + index: 0 +- tapOn: + id: "UseSatcardToGiftSats" +- tapOn: Create Gift +- tapOn:  + +#------------------------------------------------------------ +# Available Gifts +#------------------------------------------------------------ + +- tapOn: + id: "availableGiftsButton" +- tapOn: Sent +- tapOn: Expired +- tapOn: Available +- tapOn: + id: "createNewButtonButton2" +- tapOn: + point: "45%,85%" + +- tapOn: Enter amount in sats +- tapOn: 1 +- tapOn: 0 +- tapOn: 0 +- tapOn: 0 +- tapOn: + text: 0 + index: 0 +- tapOn: + id: "UseSatcardToGiftSats" +- tapOn: Create Gift +- tapOn:  +- tapOn:  + +#------------------------------------------------------------ +# Claim SATSCARD +#------------------------------------------------------------ + +- tapOn: + id: "claimSatscardButton" +- tapOn: + point: "67%,86%" +- tapOn: + point: "22%,88%" \ No newline at end of file diff --git a/flows/home.yaml b/flows/home.yaml new file mode 100644 index 0000000000..0e8025e5a1 --- /dev/null +++ b/flows/home.yaml @@ -0,0 +1,100 @@ +# home.yaml + +# Home Screen + +appId: io.hexawallet.hexa.development +--- +- runFlow: "login.yaml" + +# Test Account + +- tapOn: + id: "HomeAccountCard" + index: 0 + +# Add Lightning Wallet + +- tapOn: + id: "AddLightningWalletButton" +- tapOn: + id: "EnterManuallyButton" +- tapOn: + id: "HostInput" +- inputText: "Sample Host" +- tapOn: + id: "PortInput" +- inputText: "Sample Port" +- tapOn: + id: "MacaroonHexInput" +- inputText: "Sample Macaroon Hex" +- tapOn: + id: "NodeConnectButton" +- tapOn:  +- tapOn:  + +# Buy BTC + +- tapOn: + id: "BuyBTCButton" +- tapOn: + id: "BuyBitcoinButton" +- tapOn: "Close" +- tapOn: "Close" + +- tapOn: + id: notificationButton +- tapOn: + point: "91%,34%" + +- tapOn: + id: navigateToQRScreen +- tapOn: + id: RNE__Input__text-input +- inputText: "1hsmMidMUjZt29p1eZik9Z83kMPos315Y" +- tapOn: Send Max +- inputText: "1" +- tapOn: Confirm & Proceed +- tapOn: Confirm & Send +- tapOn: + point: "63%,89%" +- tapOn:  + +- tapOn: + id: navigateToQRScreen +- tapOn: + id: receiveBitcoinButton +- tapOn: + id: enterAmountToReceive +- tapOn: + point: "26%,77%" +- inputText: 10 +- tapOn: + id: notificationButton +- tapOn: + point: "91%,34%" + +- tapOn: + id: navigateToQRScreen +- tapOn: + id: RNE__Input__text-input +- inputText: "1hsmMidMUjZt29p1eZik9Z83kMPos315Y" +- tapOn: Send Max +- inputText: "1" +- tapOn: Confirm & Proceed +- tapOn: Confirm & Send +- tapOn: + point: "63%,89%" +- tapOn:  + +- tapOn: + id: navigateToQRScreen +- tapOn: + id: receiveBitcoinButton +# - tapOn: +# id: enterAmountToReceive +# - tapOn: +# point: "26%,77%" +# - inputText: 10 +# - tapOn: +# point: "26%,59%" + diff --git a/flows/login.yaml b/flows/login.yaml new file mode 100644 index 0000000000..e1476d61d8 --- /dev/null +++ b/flows/login.yaml @@ -0,0 +1,13 @@ +#login.yaml + +#Login Screen Flow + +appId: io.hexawallet.hexa.development +--- +- launchApp +- tapOn: "1" +- tapOn: "2" +- tapOn: "3" +- tapOn: "4" +- tapOn: + id: "ProceedButton" \ No newline at end of file diff --git a/flows/recovery.yaml b/flows/recovery.yaml new file mode 100644 index 0000000000..9d45ded62f --- /dev/null +++ b/flows/recovery.yaml @@ -0,0 +1,94 @@ +# signup.yaml + +# First time login + +appId: io.hexawallet.hexa.development +--- +- launchApp +- tapOn: "1" +- tapOn: "2" +- tapOn: "3" +- tapOn: "4" + +- tapOn: "1" +- tapOn: "2" +- tapOn: "3" +- tapOn: "4" + +- tapOn: Proceed + + +# --------- Recovery Using BackUp Phrase ----------- + +- tapOn: + id: UsingBackupPhraseButton + +- tapOn: "01 Enter 1st word" +- inputText: "muffin" +- pressKey: Enter + +- tapOn: 02 Enter 2nd word +- inputText: "jeans" +- pressKey: Enter + +- tapOn: 03 Enter 3rd word +- inputText: "other" +- pressKey: Enter + +- tapOn: 04 Enter 4th word +- inputText: "year" +- pressKey: Enter + +- tapOn: 05 Enter 5th word +- inputText: "rare" +- pressKey: Enter + +- tapOn: 06 Enter 6th word +- inputText: "prevent" +- pressKey: Enter + +- tapOn: Next + +- tapOn: "07 Enter 7th word" +- inputText: "message" +- pressKey: Enter + +- tapOn: 08 Enter 8th word +- inputText: "symbol" +- pressKey: Enter + +- tapOn: 09 Enter 9th word +- inputText: "pulse" +- pressKey: Enter + +- tapOn: 10 Enter 10th word +- inputText: "fine" +- pressKey: Enter + +- tapOn: 11 Enter 11th word +- inputText: "midnight" +- pressKey: Enter + +- tapOn: 12 Enter 12th word +- inputText: "solar" +- pressKey: Enter + +- tapOn: Proceed + +# --------- Recovery Using Recovery Keys ----------- + +- tapOn: + id: UsingRecoveryKeysButton +- tapOn: + point: "50%,85%" + +# --------- Start witha new Tribe Wallet ----------- + +- tapOn: + id: StartWithANewTribeWalletButton + +- tapOn: + point: 50%,28% +- inputText: "Test" +- pressKey: Enter +- tapOn: Proceed \ No newline at end of file diff --git a/flows/settings.yaml b/flows/settings.yaml new file mode 100644 index 0000000000..6134a41423 --- /dev/null +++ b/flows/settings.yaml @@ -0,0 +1,100 @@ +# settings.yaml + +appId: io.hexawallet.hexa.development +--- +- runFlow: "login.yaml" +- tapOn: Setting, tab, 4 of 4 + +# ------------ Wallet Backup -------------- + +- tapOn: + id: SettingsButton + index: 0 +- tapOn: + point: "24%,87%" +- tapOn: 01 ******** +- tapOn: 02 ******** +- tapOn: 03 ******** +- tapOn: 04 ******** +- tapOn: Back +- tapOn: + point: 7%,11% + +# ------------ Account Management -------------- + +- tapOn: + id: SettingsButton + index: 1 +- tapOn: + point: "7%,11%" + +# ------------ Node Settings -------------- + +- tapOn: + id: SettingsButton + index: 2 +- tapOn: + id: SetupPersonalNodeAddButton +- tapOn: + id: RNE__Input__text-input + index: 0 +- inputText: "Sample Node Address" +- tapOn: + id: RNE__Input__text-input + index: 1 +- inputText: "Sample Port Number" +- tapOn: + id: UseSSLNodeSwitch +- tapOn: + id: CloseSetupPersonalNodeButton +- extendedWaitUntil: + visible: + id: SetupPersonalNodeAddButton # or any other selector + timeout: 400000 # Timeout in milliseconds +- tapOn:  + +# ------------ Wallet Settings -------------- + +- tapOn: + id: SettingsButton + index: 3 +- tapOn: + id: WalletSettingsOptions + index: 1 +- tapOn: $ USD  +- tapOn: ₹ INR +- tapOn:  +- tapOn: + id: WalletSettingsOptions + index: 0 +- tapOn: "1" +- tapOn: "2" +- tapOn: "3" +- tapOn: "4" +- tapOn: Proceed +- tapOn: "1" +- tapOn: "2" +- tapOn: "3" +- tapOn: "4" +- tapOn: "1" +- tapOn: "2" +- tapOn: "3" +- tapOn: "4" +- tapOn: Proceed +- tapOn: View Settings + +# ------------ App Info -------------- + +- tapOn: + id: SettingsButton + index: 4 +- tapOn:  + +# # ------------ FAQ -------------- +# - tapOn: +# id: faqButton + +# # ------------ TG Group -------------- + +# - tapOn: +# id: btTelegram diff --git a/ios/HEXA.xcodeproj/project.pbxproj b/ios/HEXA.xcodeproj/project.pbxproj index a4b52b79b7..ce209a5d21 100644 --- a/ios/HEXA.xcodeproj/project.pbxproj +++ b/ios/HEXA.xcodeproj/project.pbxproj @@ -11,7 +11,7 @@ 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 1FD7ACE44B524CC0B1241553 /* Montserrat-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 95620CD1F8B44203A87BE6F7 /* Montserrat-SemiBold.ttf */; }; - 237CDD8180521336E8E128D3 /* libPods-HEXA Stage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 949B4AD1F401C3AF3EF614E5 /* libPods-HEXA Stage.a */; }; + 2D7A8800828E7A2257DFB8CA /* libPods-HEXA.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A2FD6EE79EEF5A240F4311AA /* libPods-HEXA.a */; }; 33C70E76106F4F649FE7BB6A /* Montserrat-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C4CEFC8792754D17B591C320 /* Montserrat-Light.ttf */; }; 4929D5DDD981494BB7FF83DD /* Montserrat-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 63D24441726E4404BC7B7B2E /* Montserrat-Regular.ttf */; }; 4D38330326009EDE00F82BDB /* iCloud.m in Sources */ = {isa = PBXBuildFile; fileRef = CCF1689125FB8FCF0038E126 /* iCloud.m */; }; @@ -22,7 +22,6 @@ 4D3833092600BD1400F82BDB /* HexaWalletBackup.json in Resources */ = {isa = PBXBuildFile; fileRef = CCF1689425FB8FE60038E126 /* HexaWalletBackup.json */; }; 4DA9C91C25CBC3DA00454AF7 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 619CF234250654F600A8E6DF /* GoogleService-Info.plist */; }; 4DA9C91D25CBC3E100454AF7 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 619CF22F250654D100A8E6DF /* GoogleService-Info.plist */; }; - 5F6B7C2ABEB9E6279BD99C49 /* libPods-HEXA.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E3B610F237A6F08F5F181419 /* libPods-HEXA.a */; }; 6111482F2506463F00ED433D /* CloudKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6111482E2506463F00ED433D /* CloudKit.framework */; }; 611148352506478E00ED433D /* PdfGenerate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 611148312506478E00ED433D /* PdfGenerate.swift */; }; 6111483A250647BD00ED433D /* PdfPassword.m in Sources */ = {isa = PBXBuildFile; fileRef = 61114839250647BD00ED433D /* PdfPassword.m */; }; @@ -41,9 +40,10 @@ 6182F7AA250B2742005B6ECE /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; 6182F7AB250B2742005B6ECE /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 61B5223F25076DF5002F73B2 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 619CF232250654E300A8E6DF /* GoogleService-Info.plist */; }; + 6CEEE0DCFE6B6C5F413FFFA5 /* libPods-HEXA Dev.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D1A0E64E80E8839E371695F2 /* libPods-HEXA Dev.a */; }; 6D02694291194CBD9EB24B7D /* Montserrat-MediumItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7EBDAB1C01FE4D629B1A7C39 /* Montserrat-MediumItalic.ttf */; }; - 7848CC2319C5FD7B5C873A0C /* libPods-HEXA Dev.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F3C5E168310E57C2D9A6EDE /* libPods-HEXA Dev.a */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; + 9C83F78ACC5FDE7874BEF7D8 /* libPods-HEXA Stage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 566DF0413F43AC2DB600500F /* libPods-HEXA Stage.a */; }; 9DFB7500BB9F4E4AAAACF109 /* Montserrat-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5676B1BA3B1B4E3F9D29308A /* Montserrat-Medium.ttf */; }; AA11C3A22548270900B032D1 /* HEXA.Dev-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = AA11C3A12548270900B032D1 /* HEXA.Dev-Info.plist */; }; AA11C3A42548271A00B032D1 /* HEXA.Stage-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = AA11C3A32548271A00B032D1 /* HEXA.Stage-Info.plist */; }; @@ -77,6 +77,8 @@ /* Begin PBXFileReference section */ 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 00E356F21AD99517003FC87E /* HEXATests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HEXATests.m; sourceTree = ""; }; + 06E293FEDFD63B39F02E5A48 /* Pods-HEXA.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HEXA.release.xcconfig"; path = "Target Support Files/Pods-HEXA/Pods-HEXA.release.xcconfig"; sourceTree = ""; }; + 1114B6120E24AD6E4391F0E3 /* Pods-HEXA.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HEXA.debug.xcconfig"; path = "Target Support Files/Pods-HEXA/Pods-HEXA.debug.xcconfig"; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* Bitcoin Tribe.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Bitcoin Tribe.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = HEXA/AppDelegate.h; sourceTree = ""; }; 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = HEXA/AppDelegate.m; sourceTree = ""; }; @@ -86,20 +88,17 @@ 158EFB7281D64BD3B2F784B3 /* FiraSans-MediumItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "FiraSans-MediumItalic.ttf"; path = "../src/assets/fonts/FiraSans-MediumItalic.ttf"; sourceTree = ""; }; 196ECDEACD8644898512DACB /* Montserrat-Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-Bold.ttf"; path = "../src/assets/fonts/Montserrat-Bold.ttf"; sourceTree = ""; }; 1BDE786A62844DE89D7EE379 /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = ""; }; - 1E6DE7812A8C95DFAF99325A /* Pods-HEXA Stage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HEXA Stage.release.xcconfig"; path = "Target Support Files/Pods-HEXA Stage/Pods-HEXA Stage.release.xcconfig"; sourceTree = ""; }; 227A2A160AEE42F4999170A1 /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialCommunityIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = ""; }; 262894C9A21E4EE48406A1D0 /* FiraSans-Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "FiraSans-Bold.ttf"; path = "../src/assets/fonts/FiraSans-Bold.ttf"; sourceTree = ""; }; 2952F3993041452D93FA88B9 /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = ""; }; - 32FDB81AE47B6EEC0BD81FF5 /* Pods-HEXA Dev.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HEXA Dev.release.xcconfig"; path = "Target Support Files/Pods-HEXA Dev/Pods-HEXA Dev.release.xcconfig"; sourceTree = ""; }; 39CE481CEF614843B40E1EC5 /* OpenSans-ExtraBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "OpenSans-ExtraBold.ttf"; path = "../src/assets/fonts/OpenSans-ExtraBold.ttf"; sourceTree = ""; }; 466F94D18D9449A8957F3610 /* OpenSans-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "OpenSans-Regular.ttf"; path = "../src/assets/fonts/OpenSans-Regular.ttf"; sourceTree = ""; }; 4D3784CB53EE4E7D914C42B4 /* FiraSans-SemiBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "FiraSans-SemiBold.ttf"; path = "../src/assets/fonts/FiraSans-SemiBold.ttf"; sourceTree = ""; }; - 4F3C5E168310E57C2D9A6EDE /* libPods-HEXA Dev.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HEXA Dev.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 5395FCDF04064C3DBEEE4A64 /* FontAwesome5_Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Regular.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf"; sourceTree = ""; }; 559C9AB9CDAC4F3FA05EC3FE /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = ""; }; + 566DF0413F43AC2DB600500F /* libPods-HEXA Stage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HEXA Stage.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 5676B1BA3B1B4E3F9D29308A /* Montserrat-Medium.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-Medium.ttf"; path = "../src/assets/fonts/Montserrat-Medium.ttf"; sourceTree = ""; }; 57F664D38343416FB1C55280 /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = ""; }; - 588886991029783B9689381D /* Pods-HEXA.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HEXA.debug.xcconfig"; path = "Target Support Files/Pods-HEXA/Pods-HEXA.debug.xcconfig"; sourceTree = ""; }; 599B38ECC3EC4E4CB38D4C8A /* OpenSans-Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "OpenSans-Bold.ttf"; path = "../src/assets/fonts/OpenSans-Bold.ttf"; sourceTree = ""; }; 6111482E2506463F00ED433D /* CloudKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CloudKit.framework; path = System/Library/Frameworks/CloudKit.framework; sourceTree = SDKROOT; }; 611148312506478E00ED433D /* PdfGenerate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PdfGenerate.swift; sourceTree = ""; }; @@ -120,20 +119,20 @@ 7EBDAB1C01FE4D629B1A7C39 /* Montserrat-MediumItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-MediumItalic.ttf"; path = "../src/assets/fonts/Montserrat-MediumItalic.ttf"; sourceTree = ""; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = HEXA/LaunchScreen.storyboard; sourceTree = ""; }; 8A1B98A7327A4AD8A5860B74 /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = ""; }; - 8FA226D11F1F9EAEFC4C4205 /* Pods-HEXA Dev.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HEXA Dev.debug.xcconfig"; path = "Target Support Files/Pods-HEXA Dev/Pods-HEXA Dev.debug.xcconfig"; sourceTree = ""; }; 917A2A003A01429481FD026C /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = ""; }; - 949B4AD1F401C3AF3EF614E5 /* libPods-HEXA Stage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HEXA Stage.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 95620CD1F8B44203A87BE6F7 /* Montserrat-SemiBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-SemiBold.ttf"; path = "../src/assets/fonts/Montserrat-SemiBold.ttf"; sourceTree = ""; }; 96E40822F039459A97686C32 /* OpenSans-Italic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "OpenSans-Italic.ttf"; path = "../src/assets/fonts/OpenSans-Italic.ttf"; sourceTree = ""; }; 9963B02F45124E09B5D31DE8 /* FiraSans-Light.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "FiraSans-Light.ttf"; path = "../src/assets/fonts/FiraSans-Light.ttf"; sourceTree = ""; }; 9A4E6F5E9B5642DD8E860F82 /* FiraSans-Medium.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "FiraSans-Medium.ttf"; path = "../src/assets/fonts/FiraSans-Medium.ttf"; sourceTree = ""; }; 9E29DABD5A154C1997E9AD44 /* OpenSans-BoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "OpenSans-BoldItalic.ttf"; path = "../src/assets/fonts/OpenSans-BoldItalic.ttf"; sourceTree = ""; }; + A2FD6EE79EEF5A240F4311AA /* libPods-HEXA.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HEXA.a"; sourceTree = BUILT_PRODUCTS_DIR; }; A35E966FF3B347CFA2E0CBE5 /* FiraSans-BookItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "FiraSans-BookItalic.ttf"; path = "../src/assets/fonts/FiraSans-BookItalic.ttf"; sourceTree = ""; }; - A57D19373905C1C27FEF25F3 /* Pods-HEXA.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HEXA.release.xcconfig"; path = "Target Support Files/Pods-HEXA/Pods-HEXA.release.xcconfig"; sourceTree = ""; }; AA11C3A12548270900B032D1 /* HEXA.Dev-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "HEXA.Dev-Info.plist"; path = "HEXA/HEXA.Dev-Info.plist"; sourceTree = ""; }; AA11C3A32548271A00B032D1 /* HEXA.Stage-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "HEXA.Stage-Info.plist"; path = "HEXA/HEXA.Stage-Info.plist"; sourceTree = ""; }; + AA19F01C683EF9AF27AAAB54 /* Pods-HEXA Dev.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HEXA Dev.release.xcconfig"; path = "Target Support Files/Pods-HEXA Dev/Pods-HEXA Dev.release.xcconfig"; sourceTree = ""; }; AD12BB582E724B3887BFFE64 /* OpenSans-Light.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "OpenSans-Light.ttf"; path = "../src/assets/fonts/OpenSans-Light.ttf"; sourceTree = ""; }; C1B0A87F089E485685570E93 /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = ""; }; + C25F53C05A518DAF33415390 /* Pods-HEXA Dev.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HEXA Dev.debug.xcconfig"; path = "Target Support Files/Pods-HEXA Dev/Pods-HEXA Dev.debug.xcconfig"; sourceTree = ""; }; C4CEFC8792754D17B591C320 /* Montserrat-Light.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-Light.ttf"; path = "../src/assets/fonts/Montserrat-Light.ttf"; sourceTree = ""; }; C88B0D378D49456C80224451 /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = ""; }; C8BC543B70204B8FB3B09520 /* Fontisto.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Fontisto.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf"; sourceTree = ""; }; @@ -141,19 +140,20 @@ CCF1689125FB8FCF0038E126 /* iCloud.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = iCloud.m; path = iCloud/iCloud.m; sourceTree = ""; }; CCF1689325FB8FD90038E126 /* iCloud.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = iCloud.h; path = iCloud/iCloud.h; sourceTree = ""; }; CCF1689425FB8FE60038E126 /* HexaWalletBackup.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = HexaWalletBackup.json; path = iCloud/HexaWalletBackup.json; sourceTree = ""; }; + D1A0E64E80E8839E371695F2 /* libPods-HEXA Dev.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HEXA Dev.a"; sourceTree = BUILT_PRODUCTS_DIR; }; D242AB8F3F014E068BE8C13D /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Brands.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf"; sourceTree = ""; }; DAD1674B7394413A82B21AF7 /* OpenSans-SemiboldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "OpenSans-SemiboldItalic.ttf"; path = "../src/assets/fonts/OpenSans-SemiboldItalic.ttf"; sourceTree = ""; }; + DC3D4F111CB31B026196EC33 /* Pods-HEXA Stage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HEXA Stage.release.xcconfig"; path = "Target Support Files/Pods-HEXA Stage/Pods-HEXA Stage.release.xcconfig"; sourceTree = ""; }; DF7107F6EA2D4846A469A116 /* OpenSans-Semibold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "OpenSans-Semibold.ttf"; path = "../src/assets/fonts/OpenSans-Semibold.ttf"; sourceTree = ""; }; E2EDF28037624796A9996D82 /* FiraSans-Italic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "FiraSans-Italic.ttf"; path = "../src/assets/fonts/FiraSans-Italic.ttf"; sourceTree = ""; }; - E3B610F237A6F08F5F181419 /* libPods-HEXA.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HEXA.a"; sourceTree = BUILT_PRODUCTS_DIR; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; EE6F36351DD345FAB2CDA5DE /* AntDesign.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = AntDesign.ttf; path = "../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf"; sourceTree = ""; }; F49AA80A26A0284D0097D815 /* BackgroundViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BackgroundViewController.h; sourceTree = ""; }; F49AA80B26A0284D0097D815 /* BackgroundViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BackgroundViewController.m; sourceTree = ""; }; F49AA80C26A0284D0097D815 /* BackgroundViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BackgroundViewController.xib; sourceTree = ""; }; - F4CF9D631DFE58D6AF3E43FA /* Pods-HEXA Stage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HEXA Stage.debug.xcconfig"; path = "Target Support Files/Pods-HEXA Stage/Pods-HEXA Stage.debug.xcconfig"; sourceTree = ""; }; F727B7636E8440F1BC2C78B2 /* OpenSans-LightItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "OpenSans-LightItalic.ttf"; path = "../src/assets/fonts/OpenSans-LightItalic.ttf"; sourceTree = ""; }; + FC78098D43A277CC5A91A0C4 /* Pods-HEXA Stage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HEXA Stage.debug.xcconfig"; path = "Target Support Files/Pods-HEXA Stage/Pods-HEXA Stage.debug.xcconfig"; sourceTree = ""; }; FD2C9FFB56CD431FBFFABD4B /* Montserrat-Italic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Montserrat-Italic.ttf"; path = "../src/assets/fonts/Montserrat-Italic.ttf"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -163,7 +163,7 @@ buildActionMask = 2147483647; files = ( 6111482F2506463F00ED433D /* CloudKit.framework in Frameworks */, - 5F6B7C2ABEB9E6279BD99C49 /* libPods-HEXA.a in Frameworks */, + 2D7A8800828E7A2257DFB8CA /* libPods-HEXA.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -172,7 +172,7 @@ buildActionMask = 2147483647; files = ( 6182F77B250B23D7005B6ECE /* CloudKit.framework in Frameworks */, - 7848CC2319C5FD7B5C873A0C /* libPods-HEXA Dev.a in Frameworks */, + 6CEEE0DCFE6B6C5F413FFFA5 /* libPods-HEXA Dev.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -181,7 +181,7 @@ buildActionMask = 2147483647; files = ( 6182F7A7250B2742005B6ECE /* CloudKit.framework in Frameworks */, - 237CDD8180521336E8E128D3 /* libPods-HEXA Stage.a in Frameworks */, + 9C83F78ACC5FDE7874BEF7D8 /* libPods-HEXA Stage.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -234,9 +234,9 @@ 6111482E2506463F00ED433D /* CloudKit.framework */, ED297162215061F000B7C4FE /* JavaScriptCore.framework */, ED2971642150620600B7C4FE /* JavaScriptCore.framework */, - E3B610F237A6F08F5F181419 /* libPods-HEXA.a */, - 4F3C5E168310E57C2D9A6EDE /* libPods-HEXA Dev.a */, - 949B4AD1F401C3AF3EF614E5 /* libPods-HEXA Stage.a */, + A2FD6EE79EEF5A240F4311AA /* libPods-HEXA.a */, + D1A0E64E80E8839E371695F2 /* libPods-HEXA Dev.a */, + 566DF0413F43AC2DB600500F /* libPods-HEXA Stage.a */, ); name = Frameworks; sourceTree = ""; @@ -281,12 +281,12 @@ 9FD0418BDBDF3D36477ED773 /* Pods */ = { isa = PBXGroup; children = ( - 588886991029783B9689381D /* Pods-HEXA.debug.xcconfig */, - A57D19373905C1C27FEF25F3 /* Pods-HEXA.release.xcconfig */, - 8FA226D11F1F9EAEFC4C4205 /* Pods-HEXA Dev.debug.xcconfig */, - 32FDB81AE47B6EEC0BD81FF5 /* Pods-HEXA Dev.release.xcconfig */, - F4CF9D631DFE58D6AF3E43FA /* Pods-HEXA Stage.debug.xcconfig */, - 1E6DE7812A8C95DFAF99325A /* Pods-HEXA Stage.release.xcconfig */, + 1114B6120E24AD6E4391F0E3 /* Pods-HEXA.debug.xcconfig */, + 06E293FEDFD63B39F02E5A48 /* Pods-HEXA.release.xcconfig */, + C25F53C05A518DAF33415390 /* Pods-HEXA Dev.debug.xcconfig */, + AA19F01C683EF9AF27AAAB54 /* Pods-HEXA Dev.release.xcconfig */, + FC78098D43A277CC5A91A0C4 /* Pods-HEXA Stage.debug.xcconfig */, + DC3D4F111CB31B026196EC33 /* Pods-HEXA Stage.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -356,15 +356,15 @@ isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "HEXA" */; buildPhases = ( - CCFCBF23F94C3E9AF1A229DE /* [CP] Check Pods Manifest.lock */, + E7D5BFD78E459CC449A51145 /* [CP] Check Pods Manifest.lock */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - 410D4EA1BBB8949E8948E773 /* [CP] Embed Pods Frameworks */, - D534EDB760F2BA44647C0BED /* [CP] Copy Pods Resources */, - CC8DDC5C4C1D657D88D4DD98 /* [CP-User] [RNFB] Core Configuration */, - 0242AF6CAF61C219F097E08D /* [CP-User] [RNFB] Crashlytics Configuration */, + 2B3CC679D26027119267F479 /* [CP] Embed Pods Frameworks */, + 0954CF239197B8CCF9C0D9CA /* [CP] Copy Pods Resources */, + 281E3690B0051D593124C662 /* [CP-User] [RNFB] Core Configuration */, + E8CFD9B7547FD813748A4AF6 /* [CP-User] [RNFB] Crashlytics Configuration */, ); buildRules = ( ); @@ -379,16 +379,16 @@ isa = PBXNativeTarget; buildConfigurationList = 6182F793250B23D7005B6ECE /* Build configuration list for PBXNativeTarget "HEXA Dev" */; buildPhases = ( - B9C661EAA39E7F0FE1C61D02 /* [CP] Check Pods Manifest.lock */, + 8B73147CC30BE2D32F6CCB15 /* [CP] Check Pods Manifest.lock */, 4D3833062600A16700F82BDB /* Start Packager */, 6182F775250B23D7005B6ECE /* Sources */, 6182F77A250B23D7005B6ECE /* Frameworks */, 6182F77D250B23D7005B6ECE /* Resources */, 4D38330B2600BEC000F82BDB /* Bundle React Native code and images */, - 85921108C3CF0640ECF0EEE2 /* [CP] Embed Pods Frameworks */, - 5727C5DD53954966B4192485 /* [CP] Copy Pods Resources */, - 78080E0C85395FA1FBAB96D2 /* [CP-User] [RNFB] Core Configuration */, - EC86BA14AEBC52ADF59714A4 /* [CP-User] [RNFB] Crashlytics Configuration */, + 45D169498A3E7FFC38B05F31 /* [CP] Embed Pods Frameworks */, + B420B5E1F4A6AD78386AFB56 /* [CP] Copy Pods Resources */, + 7F0C21A9F7B1EF8531A53C6D /* [CP-User] [RNFB] Core Configuration */, + DCE51AF00F0E1D9BCC36A947 /* [CP-User] [RNFB] Crashlytics Configuration */, ); buildRules = ( ); @@ -403,17 +403,17 @@ isa = PBXNativeTarget; buildConfigurationList = 6182F7BF250B2742005B6ECE /* Build configuration list for PBXNativeTarget "HEXA Stage" */; buildPhases = ( - 2FB1D07517B1B6FD1C6FAF8C /* [CP] Check Pods Manifest.lock */, + AF54C44FBFD24A456C171A7E /* [CP] Check Pods Manifest.lock */, 4D260BB12613190A001DA4F9 /* Start Packager */, 6182F7A1250B2742005B6ECE /* Sources */, 6182F7A6250B2742005B6ECE /* Frameworks */, 6182F7A9250B2742005B6ECE /* Resources */, 4D38330D2600BF0500F82BDB /* Bundle React Native code and images */, E5A02DBA22BA388F5357F55F /* ShellScript */, - 2ABAA5C6C634778EC5F6FD01 /* [CP] Embed Pods Frameworks */, - 0F417F540ADC9AAA01A13F44 /* [CP] Copy Pods Resources */, - EBA5E7997536D468EC71D3FB /* [CP-User] [RNFB] Core Configuration */, - 321C0B1326D8F0E162604A4B /* [CP-User] [RNFB] Crashlytics Configuration */, + BEB283A0DEB9A0DC5154E7B7 /* [CP] Embed Pods Frameworks */, + C2E8CB8F583F9370A14B5DDA /* [CP] Copy Pods Resources */, + C5E0944F028426EA9297B9F4 /* [CP-User] [RNFB] Core Configuration */, + A64BF3E39993E5761794B0FC /* [CP-User] [RNFB] Crashlytics Configuration */, ); buildRules = ( ); @@ -544,27 +544,13 @@ shellPath = /bin/sh; shellScript = "cd $PROJECT_DIR/..\nexport NODE_BINARY=node\n./node_modules/react-native/scripts/react-native-xcode.sh\n"; }; - 0242AF6CAF61C219F097E08D /* [CP-User] [RNFB] Crashlytics Configuration */ = { + 0954CF239197B8CCF9C0D9CA /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}", - "$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", - ); - name = "[CP-User] [RNFB] Crashlytics Configuration"; - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\nif [[ ${PODS_ROOT} ]]; then\n echo \"info: Exec FirebaseCrashlytics Run from Pods\"\n \"${PODS_ROOT}/FirebaseCrashlytics/run\"\nelse\n echo \"info: Exec FirebaseCrashlytics Run from framework\"\n \"${PROJECT_DIR}/FirebaseCrashlytics.framework/run\"\nfi\n"; - }; - 0F417F540ADC9AAA01A13F44 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-HEXA Stage/Pods-HEXA Stage-resources.sh", + "${PODS_ROOT}/Target Support Files/Pods-HEXA/Pods-HEXA-resources.sh", "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf", "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf", "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf", @@ -605,70 +591,47 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HEXA Stage/Pods-HEXA Stage-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HEXA/Pods-HEXA-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 2ABAA5C6C634778EC5F6FD01 /* [CP] Embed Pods Frameworks */ = { + 281E3690B0051D593124C662 /* [CP-User] [RNFB] Core Configuration */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-HEXA Stage/Pods-HEXA Stage-frameworks.sh", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework", + "$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", ); + name = "[CP-User] [RNFB] Core Configuration"; runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HEXA Stage/Pods-HEXA Stage-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"info: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"info: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"info: -> RNFB build script started\"\necho \"info: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n _RN_ROOT_EXISTS=$(ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\" || echo '')\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n if ! python3 --version >/dev/null 2>&1; then echo \"python3 not found, firebase.json file processing error.\" && exit 1; fi\n _JSON_OUTPUT_BASE64=$(python3 -c 'import json,sys,base64;print(base64.b64encode(bytes(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"', '\"'rb'\"').read())['${_JSON_ROOT}']), '\"'utf-8'\"')).decode())' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.google_analytics_automatic_screen_reporting_enabled\n _ANALYTICS_AUTO_SCREEN_REPORTING=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_automatic_screen_reporting_enabled\")\n if [[ $_ANALYTICS_AUTO_SCREEN_REPORTING ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAutomaticScreenReportingEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_SCREEN_REPORTING\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"info: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"info: <- RNFB build script finished\"\n"; }; - 2FB1D07517B1B6FD1C6FAF8C /* [CP] Check Pods Manifest.lock */ = { + 2B3CC679D26027119267F479 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-HEXA/Pods-HEXA-frameworks.sh", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL", ); + name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-HEXA Stage-checkManifestLockResult.txt", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HEXA/Pods-HEXA-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 321C0B1326D8F0E162604A4B /* [CP-User] [RNFB] Crashlytics Configuration */ = { + 45D169498A3E7FFC38B05F31 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}", - "$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", - ); - name = "[CP-User] [RNFB] Crashlytics Configuration"; - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\nif [[ ${PODS_ROOT} ]]; then\n echo \"info: Exec FirebaseCrashlytics Run from Pods\"\n \"${PODS_ROOT}/FirebaseCrashlytics/run\"\nelse\n echo \"info: Exec FirebaseCrashlytics Run from framework\"\n \"${PROJECT_DIR}/FirebaseCrashlytics.framework/run\"\nfi\n"; - }; - 410D4EA1BBB8949E8948E773 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-HEXA/Pods-HEXA-frameworks.sh", + "${PODS_ROOT}/Target Support Files/Pods-HEXA Dev/Pods-HEXA Dev-frameworks.sh", "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL", ); name = "[CP] Embed Pods Frameworks"; @@ -677,7 +640,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HEXA/Pods-HEXA-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HEXA Dev/Pods-HEXA Dev-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; 4D260BB12613190A001DA4F9 /* Start Packager */ = { @@ -752,88 +715,56 @@ shellPath = /bin/sh; shellScript = "# Type a script or drag a script file from your workspace to insert its path.\ncd $PROJECT_DIR/..\nexport NODE_BINARY=node\n./node_modules/react-native/scripts/react-native-xcode.sh\n"; }; - 5727C5DD53954966B4192485 /* [CP] Copy Pods Resources */ = { + 7F0C21A9F7B1EF8531A53C6D /* [CP-User] [RNFB] Core Configuration */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-HEXA Dev/Pods-HEXA Dev-resources.sh", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf", - "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf", - "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", + "$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", ); + name = "[CP-User] [RNFB] Core Configuration"; runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HEXA Dev/Pods-HEXA Dev-resources.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"info: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"info: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"info: -> RNFB build script started\"\necho \"info: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n _RN_ROOT_EXISTS=$(ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\" || echo '')\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n if ! python3 --version >/dev/null 2>&1; then echo \"python3 not found, firebase.json file processing error.\" && exit 1; fi\n _JSON_OUTPUT_BASE64=$(python3 -c 'import json,sys,base64;print(base64.b64encode(bytes(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"', '\"'rb'\"').read())['${_JSON_ROOT}']), '\"'utf-8'\"')).decode())' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.google_analytics_automatic_screen_reporting_enabled\n _ANALYTICS_AUTO_SCREEN_REPORTING=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_automatic_screen_reporting_enabled\")\n if [[ $_ANALYTICS_AUTO_SCREEN_REPORTING ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAutomaticScreenReportingEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_SCREEN_REPORTING\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"info: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"info: <- RNFB build script finished\"\n"; }; - 78080E0C85395FA1FBAB96D2 /* [CP-User] [RNFB] Core Configuration */ = { + 8B73147CC30BE2D32F6CCB15 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-HEXA Dev-checkManifestLockResult.txt", ); - name = "[CP-User] [RNFB] Core Configuration"; runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"info: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"info: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"info: -> RNFB build script started\"\necho \"info: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n _RN_ROOT_EXISTS=$(ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\" || echo '')\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n if ! python3 --version >/dev/null 2>&1; then echo \"python3 not found, firebase.json file processing error.\" && exit 1; fi\n _JSON_OUTPUT_BASE64=$(python3 -c 'import json,sys,base64;print(base64.b64encode(bytes(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"', '\"'rb'\"').read())['${_JSON_ROOT}']), '\"'utf-8'\"')).decode())' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.google_analytics_automatic_screen_reporting_enabled\n _ANALYTICS_AUTO_SCREEN_REPORTING=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_automatic_screen_reporting_enabled\")\n if [[ $_ANALYTICS_AUTO_SCREEN_REPORTING ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAutomaticScreenReportingEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_SCREEN_REPORTING\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"info: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"info: <- RNFB build script finished\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 85921108C3CF0640ECF0EEE2 /* [CP] Embed Pods Frameworks */ = { + A64BF3E39993E5761794B0FC /* [CP-User] [RNFB] Crashlytics Configuration */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-HEXA Dev/Pods-HEXA Dev-frameworks.sh", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework", + "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}", + "$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", ); + name = "[CP-User] [RNFB] Crashlytics Configuration"; runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HEXA Dev/Pods-HEXA Dev-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\nif [[ ${PODS_ROOT} ]]; then\n echo \"info: Exec FirebaseCrashlytics Run from Pods\"\n \"${PODS_ROOT}/FirebaseCrashlytics/run\"\nelse\n echo \"info: Exec FirebaseCrashlytics Run from framework\"\n \"${PROJECT_DIR}/FirebaseCrashlytics.framework/run\"\nfi\n"; }; - B9C661EAA39E7F0FE1C61D02 /* [CP] Check Pods Manifest.lock */ = { + AF54C44FBFD24A456C171A7E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -848,55 +779,88 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-HEXA Dev-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-HEXA Stage-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - CC8DDC5C4C1D657D88D4DD98 /* [CP-User] [RNFB] Core Configuration */ = { + B420B5E1F4A6AD78386AFB56 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", + "${PODS_ROOT}/Target Support Files/Pods-HEXA Dev/Pods-HEXA Dev-resources.sh", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", ); - name = "[CP-User] [RNFB] Core Configuration"; runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"info: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"info: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"info: -> RNFB build script started\"\necho \"info: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n _RN_ROOT_EXISTS=$(ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\" || echo '')\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n if ! python3 --version >/dev/null 2>&1; then echo \"python3 not found, firebase.json file processing error.\" && exit 1; fi\n _JSON_OUTPUT_BASE64=$(python3 -c 'import json,sys,base64;print(base64.b64encode(bytes(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"', '\"'rb'\"').read())['${_JSON_ROOT}']), '\"'utf-8'\"')).decode())' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.google_analytics_automatic_screen_reporting_enabled\n _ANALYTICS_AUTO_SCREEN_REPORTING=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_automatic_screen_reporting_enabled\")\n if [[ $_ANALYTICS_AUTO_SCREEN_REPORTING ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAutomaticScreenReportingEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_SCREEN_REPORTING\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"info: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"info: <- RNFB build script finished\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HEXA Dev/Pods-HEXA Dev-resources.sh\"\n"; + showEnvVarsInLog = 0; }; - CCFCBF23F94C3E9AF1A229DE /* [CP] Check Pods Manifest.lock */ = { + BEB283A0DEB9A0DC5154E7B7 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-HEXA Stage/Pods-HEXA Stage-frameworks.sh", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL", ); + name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-HEXA-checkManifestLockResult.txt", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HEXA Stage/Pods-HEXA Stage-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - D534EDB760F2BA44647C0BED /* [CP] Copy Pods Resources */ = { + C2E8CB8F583F9370A14B5DDA /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-HEXA/Pods-HEXA-resources.sh", + "${PODS_ROOT}/Target Support Files/Pods-HEXA Stage/Pods-HEXA Stage-resources.sh", "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf", "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf", "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf", @@ -937,9 +901,36 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HEXA/Pods-HEXA-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HEXA Stage/Pods-HEXA Stage-resources.sh\"\n"; showEnvVarsInLog = 0; }; + C5E0944F028426EA9297B9F4 /* [CP-User] [RNFB] Core Configuration */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", + ); + name = "[CP-User] [RNFB] Core Configuration"; + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"info: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"info: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"info: -> RNFB build script started\"\necho \"info: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n _RN_ROOT_EXISTS=$(ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\" || echo '')\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n if ! python3 --version >/dev/null 2>&1; then echo \"python3 not found, firebase.json file processing error.\" && exit 1; fi\n _JSON_OUTPUT_BASE64=$(python3 -c 'import json,sys,base64;print(base64.b64encode(bytes(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"', '\"'rb'\"').read())['${_JSON_ROOT}']), '\"'utf-8'\"')).decode())' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.google_analytics_automatic_screen_reporting_enabled\n _ANALYTICS_AUTO_SCREEN_REPORTING=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_automatic_screen_reporting_enabled\")\n if [[ $_ANALYTICS_AUTO_SCREEN_REPORTING ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAutomaticScreenReportingEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_SCREEN_REPORTING\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"info: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"info: <- RNFB build script finished\"\n"; + }; + DCE51AF00F0E1D9BCC36A947 /* [CP-User] [RNFB] Crashlytics Configuration */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}", + "$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", + ); + name = "[CP-User] [RNFB] Crashlytics Configuration"; + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\nif [[ ${PODS_ROOT} ]]; then\n echo \"info: Exec FirebaseCrashlytics Run from Pods\"\n \"${PODS_ROOT}/FirebaseCrashlytics/run\"\nelse\n echo \"info: Exec FirebaseCrashlytics Run from framework\"\n \"${PROJECT_DIR}/FirebaseCrashlytics.framework/run\"\nfi\n"; + }; E5A02DBA22BA388F5357F55F /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -975,20 +966,29 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HEXA/Pods-HEXA-resources.sh\"\n"; showEnvVarsInLog = 0; }; - EBA5E7997536D468EC71D3FB /* [CP-User] [RNFB] Core Configuration */ = { + E7D5BFD78E459CC449A51145 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-HEXA-checkManifestLockResult.txt", ); - name = "[CP-User] [RNFB] Core Configuration"; runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"info: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"info: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"info: -> RNFB build script started\"\necho \"info: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n _RN_ROOT_EXISTS=$(ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\" || echo '')\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n if ! python3 --version >/dev/null 2>&1; then echo \"python3 not found, firebase.json file processing error.\" && exit 1; fi\n _JSON_OUTPUT_BASE64=$(python3 -c 'import json,sys,base64;print(base64.b64encode(bytes(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"', '\"'rb'\"').read())['${_JSON_ROOT}']), '\"'utf-8'\"')).decode())' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.google_analytics_automatic_screen_reporting_enabled\n _ANALYTICS_AUTO_SCREEN_REPORTING=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_automatic_screen_reporting_enabled\")\n if [[ $_ANALYTICS_AUTO_SCREEN_REPORTING ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAutomaticScreenReportingEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_SCREEN_REPORTING\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"info: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"info: <- RNFB build script finished\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - EC86BA14AEBC52ADF59714A4 /* [CP-User] [RNFB] Crashlytics Configuration */ = { + E8CFD9B7547FD813748A4AF6 /* [CP-User] [RNFB] Crashlytics Configuration */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1052,7 +1052,7 @@ /* Begin XCBuildConfiguration section */ 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 588886991029783B9689381D /* Pods-HEXA.debug.xcconfig */; + baseConfigurationReference = 1114B6120E24AD6E4391F0E3 /* Pods-HEXA.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; @@ -1091,7 +1091,7 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A57D19373905C1C27FEF25F3 /* Pods-HEXA.release.xcconfig */; + baseConfigurationReference = 06E293FEDFD63B39F02E5A48 /* Pods-HEXA.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; @@ -1130,7 +1130,7 @@ }; 6182F794250B23D7005B6ECE /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8FA226D11F1F9EAEFC4C4205 /* Pods-HEXA Dev.debug.xcconfig */; + baseConfigurationReference = C25F53C05A518DAF33415390 /* Pods-HEXA Dev.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-Development"; CLANG_ENABLE_MODULES = YES; @@ -1173,7 +1173,7 @@ }; 6182F795250B23D7005B6ECE /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 32FDB81AE47B6EEC0BD81FF5 /* Pods-HEXA Dev.release.xcconfig */; + baseConfigurationReference = AA19F01C683EF9AF27AAAB54 /* Pods-HEXA Dev.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-Development"; CLANG_ENABLE_MODULES = YES; @@ -1209,7 +1209,7 @@ }; 6182F7C0250B2742005B6ECE /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F4CF9D631DFE58D6AF3E43FA /* Pods-HEXA Stage.debug.xcconfig */; + baseConfigurationReference = FC78098D43A277CC5A91A0C4 /* Pods-HEXA Stage.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-Staging"; CLANG_ENABLE_MODULES = YES; @@ -1248,7 +1248,7 @@ }; 6182F7C1250B2742005B6ECE /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1E6DE7812A8C95DFAF99325A /* Pods-HEXA Stage.release.xcconfig */; + baseConfigurationReference = DC3D4F111CB31B026196EC33 /* Pods-HEXA Stage.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-Staging"; CLANG_ENABLE_MODULES = YES; diff --git a/ios/Podfile.lock b/ios/Podfile.lock index b7986c6031..f6f33f71ef 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -21,7 +21,7 @@ PODS: - EXPermissions (9.0.1): - UMCore - UMPermissionsInterface - - EXSecureStore (9.3.0): + - EXSecureStore (9.2.0): - UMCore - FBLazyVector (0.63.3) - FBReactNativeSpec (0.63.3): @@ -200,24 +200,24 @@ PODS: - GoogleUtilities/Environment (~> 7.7) - nanopb (< 2.30910.0, >= 2.30908.0) - PromisesObjC (< 3.0, >= 1.2) - - GoogleUtilities/AppDelegateSwizzler (7.8.0): + - GoogleUtilities/AppDelegateSwizzler (7.7.0): - GoogleUtilities/Environment - GoogleUtilities/Logger - GoogleUtilities/Network - - GoogleUtilities/Environment (7.8.0): + - GoogleUtilities/Environment (7.7.0): - PromisesObjC (< 3.0, >= 1.2) - - GoogleUtilities/Logger (7.8.0): + - GoogleUtilities/Logger (7.7.0): - GoogleUtilities/Environment - - GoogleUtilities/MethodSwizzler (7.8.0): + - GoogleUtilities/MethodSwizzler (7.7.0): - GoogleUtilities/Logger - - GoogleUtilities/Network (7.8.0): + - GoogleUtilities/Network (7.7.0): - GoogleUtilities/Logger - "GoogleUtilities/NSData+zlib" - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (7.8.0)" - - GoogleUtilities/Reachability (7.8.0): + - "GoogleUtilities/NSData+zlib (7.7.0)" + - GoogleUtilities/Reachability (7.7.0): - GoogleUtilities/Logger - - GoogleUtilities/UserDefaults (7.8.0): + - GoogleUtilities/UserDefaults (7.7.0): - GoogleUtilities/Logger - GTMSessionFetcher/Core (1.7.2) - jail-monkey (2.6.0): @@ -432,7 +432,7 @@ PODS: - React-Core - react-native-nfc-manager (3.14.0): - React-Core - - react-native-pager-view (6.0.0-rc.2): + - react-native-pager-view (6.0.0-rc.1): - React-Core - react-native-print (0.6.0): - React @@ -442,6 +442,9 @@ PODS: - React-Core - react-native-screen-corner-radius (0.1.1): - React + - react-native-tcp-socket (5.6.2): + - CocoaAsyncSocket + - React-Core - react-native-udp (4.1.5): - CocoaAsyncSocket - React-Core @@ -512,7 +515,7 @@ PODS: - React-Core (= 0.63.3) - React-cxxreact (= 0.63.3) - React-jsi (= 0.63.3) - - RealmJS (10.16.0): + - RealmJS (10.5.0): - GCDWebServer - React - rn-fetch-blob (0.12.0): @@ -567,16 +570,13 @@ PODS: - React - RNSecureStorage (1.0.82): - React - - RNShare (3.8.5): + - RNShare (8.2.1): - React-Core - RNSVG (12.3.0): - React-Core - RNVectorIcons (7.1.0): - React - SocketRocket (0.6.0) - - TcpSockets (4.0.0): - - CocoaAsyncSocket - - React - UMAppLoader (1.2.0) - UMBarCodeScannerInterface (5.2.1) - UMCameraInterface (5.2.1) @@ -665,6 +665,7 @@ DEPENDENCIES: - react-native-randombytes (from `../node_modules/react-native-randombytes`) - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) - react-native-screen-corner-radius (from `../node_modules/react-native-screen-corner-radius`) + - react-native-tcp-socket (from `../node_modules/react-native-tcp-socket`) - react-native-udp (from `../node_modules/react-native-udp`) - react-native-video (from `../node_modules/react-native-video`) - react-native-view-shot (from `../node_modules/react-native-view-shot`) @@ -702,7 +703,6 @@ DEPENDENCIES: - RNShare (from `../node_modules/react-native-share`) - RNSVG (from `../node_modules/react-native-svg`) - RNVectorIcons (from `../node_modules/react-native-vector-icons`) - - TcpSockets (from `../node_modules/react-native-tcp`) - UMAppLoader (from `../node_modules/unimodules-app-loader/ios`) - UMBarCodeScannerInterface (from `../node_modules/unimodules-barcode-scanner-interface/ios`) - UMCameraInterface (from `../node_modules/unimodules-camera-interface/ios`) @@ -837,6 +837,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-safe-area-context" react-native-screen-corner-radius: :path: "../node_modules/react-native-screen-corner-radius" + react-native-tcp-socket: + :path: "../node_modules/react-native-tcp-socket" react-native-udp: :path: "../node_modules/react-native-udp" react-native-video: @@ -911,8 +913,6 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-svg" RNVectorIcons: :path: "../node_modules/react-native-vector-icons" - TcpSockets: - :path: "../node_modules/react-native-tcp" UMAppLoader: :path: "../node_modules/unimodules-app-loader/ios" UMBarCodeScannerInterface: @@ -952,7 +952,7 @@ SPEC CHECKSUMS: EXFileSystem: 76875135b61708b9afa7e6a89b72a60ba0fdfa20 EXImageLoader: 02ca02c9cd5cc8a97b423207a73a791e0a86bea5 EXPermissions: 80ac3acbdb145930079810fe5b08c022b3428aa8 - EXSecureStore: 1b571851e6068b30b8ec097be848a04603c03bae + EXSecureStore: 579cbccd9cd093e6f4336aba073b059008bd78e0 FBLazyVector: 878b59e31113e289e275165efbe4b54fa614d43d FBReactNativeSpec: 7da9338acfb98d4ef9e5536805a0704572d33c2f Firebase: 5f8193dff4b5b7c5d5ef72ae54bb76c08e2b841d @@ -978,7 +978,7 @@ SPEC CHECKSUMS: glog: 40a13f7840415b9a77023fbcae0f1e6f43192af3 GoogleAppMeasurement: 4c19f031220c72464d460c9daa1fb5d1acce958e GoogleDataTransport: 1c8145da7117bd68bbbed00cf304edb6a24de00f - GoogleUtilities: 1d20a6ad97ef46f67bbdec158ce00563a671ebb7 + GoogleUtilities: e0913149f6b0625b553d70dae12b49fc62914fd1 GTMSessionFetcher: 5595ec75acf5be50814f81e9189490412bad82ba jail-monkey: 07b83767601a373db876e939b8dbf3f5eb15f073 libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 @@ -1010,11 +1010,12 @@ SPEC CHECKSUMS: react-native-mail: 8fdcd3aef007c33a6877a18eb4cf7447a1d4ce4a react-native-netinfo: 30fb89fa913c342be82a887b56e96be6d71201dd react-native-nfc-manager: 449c2c400a4f0ab3b8c084a713f41762a26b3307 - react-native-pager-view: c9171e3b9f212fe6a4a529818745d8cd21fe82a0 + react-native-pager-view: 06738ffe86f82c53d59a2387f889679fe210acf1 react-native-print: d2d083f2305faacfba12d3896ec6ca72303da2b2 react-native-randombytes: 421f1c7d48c0af8dbcd471b0324393ebf8fe7846 react-native-safe-area-context: 9e40fb181dac02619414ba1294d6c2a807056ab9 react-native-screen-corner-radius: 57b6dea3c024035bff8377618df6e5056e6c6f27 + react-native-tcp-socket: c1b7297619616b4c9caae6889bcb0aba78086989 react-native-udp: 8864b1211857e9d8224ae5cbaf8580970fb99de1 react-native-video: eee541262ada11bc7ffe8ec5508e6a877937c462 react-native-view-shot: 4475fde003fe8a210053d1f98fb9e06c1d834e1c @@ -1028,7 +1029,7 @@ SPEC CHECKSUMS: React-RCTText: 65a6de06a7389098ce24340d1d3556015c38f746 React-RCTVibration: 8e9fb25724a0805107fc1acc9075e26f814df454 ReactCommon: 4167844018c9ed375cc01a843e9ee564399e53c3 - RealmJS: 8a3478957315c29cdc0b3f958f2e370d22330b2d + RealmJS: 3442dc29909254448c28f500b8b49f976a3b22a8 rn-fetch-blob: f065bb7ab7fb48dd002629f8bdcb0336602d3cba RNCAsyncStorage: 005c0e2f09575360f142d0d1f1f15e4ec575b1af RNCClipboard: cc054ad1e8a33d2a74cd13e565588b4ca928d8fd @@ -1049,11 +1050,10 @@ SPEC CHECKSUMS: RNScreens: f7ad633b2e0190b77b6a7aab7f914fad6f198d8d RNScreenshotPrevent: ec7d8304fd054b8cc17206ec8c7925400ed676b5 RNSecureStorage: 8b2b07278d80c48b3a881c56e604ab147372f243 - RNShare: 7e22ba3bf66294ff7c122a1f2da8a8ec642091a0 + RNShare: eaee3dd5a06dad397c7d3b14762007035c5de405 RNSVG: 302bfc9905bd8122f08966dc2ce2d07b7b52b9f8 RNVectorIcons: bc69e6a278b14842063605de32bec61f0b251a59 SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608 - TcpSockets: a8eb6b5867fe643e6cfed5db2e4de62f4d1e8fd0 UMAppLoader: 61049c8d55590b74e9ae1d5429bf68d96b4a2528 UMBarCodeScannerInterface: e5e4c87797d3d01214e25cd1618866caf5d4f17f UMCameraInterface: 415ac060034edecacdbbaa739c223e3f276e0056 diff --git a/src/components/AppBottomSheetTouchableWrapper.tsx b/src/components/AppBottomSheetTouchableWrapper.tsx index 1d72f3d8ae..55914ab996 100644 --- a/src/components/AppBottomSheetTouchableWrapper.tsx +++ b/src/components/AppBottomSheetTouchableWrapper.tsx @@ -11,7 +11,7 @@ import React, { ReactNode } from 'react' * `@gorhom/bottom-sheet` across the app. */ export const AppBottomSheetTouchableWrapper = ( - props: { children: ReactNode } & Pick, + props: { children: ReactNode } & Pick, ) => Platform.select( { android: , diff --git a/src/components/CardWithRadioBtn.tsx b/src/components/CardWithRadioBtn.tsx index f0e50aaf79..22e49b9b76 100644 --- a/src/components/CardWithRadioBtn.tsx +++ b/src/components/CardWithRadioBtn.tsx @@ -97,7 +97,7 @@ export default function CardWithRadioBtn( { alignItems: 'center', }} > - + {tag !== '' && ( { Create an F{"&"}F invite - props.sendRequestToContact()} > - + - + Create Invitation link @@ -77,13 +77,14 @@ const CreateFNFInvite = (props: Props) => { props.createGifts()} > - + - + Create Invitation link with gift @@ -110,11 +111,11 @@ const styles = StyleSheet.create({ paragraphTitleText: { fontSize: 12, color: Colors.gray3, - textAlign: 'left', - flexWrap: 'wrap' + textAlign: "left", + flexWrap: "wrap", }, cardBackView: { - alignItems: 'center', + alignItems: "center", flexDirection: "row", width: "100%", backgroundColor: Colors.numberBg, diff --git a/src/components/home/AccountCardColumn.tsx b/src/components/home/AccountCardColumn.tsx index 26cdad62e6..42b52265e7 100644 --- a/src/components/home/AccountCardColumn.tsx +++ b/src/components/home/AccountCardColumn.tsx @@ -45,7 +45,7 @@ const AccountCardColumn: React.FC = ( { ) : ( - void; - onPress: () => void -} + onMenuItemSelected: (menuItem: BuyBitcoinBottomSheetMenuItem) => void; + onPress: () => void; +}; export enum BuyMenuItemKind { - FAST_BITCOINS = 'FAST_BITCOINS', - SWAN = 'SWAN', - WYRE = 'WYRE', - RAMP = 'RAMP' + FAST_BITCOINS = "FAST_BITCOINS", + SWAN = "SWAN", + WYRE = "WYRE", + RAMP = "RAMP", } export type BuyBitcoinBottomSheetMenuItem = { title: string; subtitle: string; - kind: BuyMenuItemKind | ''; + kind: BuyMenuItemKind | ""; // imageSource: ImageSourcePropType; disabled: boolean; hasButton: boolean; link: string; - getImage: any -} + getImage: any; +}; +const listItemKeyExtractor = (item: BuyBitcoinBottomSheetMenuItem) => + item.title; -const listItemKeyExtractor = ( item: BuyBitcoinBottomSheetMenuItem ) => item.title - -const BuyBitcoinHomeBottomSheet: React.FC = ( { onMenuItemSelected, onPress }: Props ) => { - const { translations } = useContext( LocalizationContext ) - const strings = translations[ 'home' ] +const BuyBitcoinHomeBottomSheet: React.FC = ({ + onMenuItemSelected, + onPress, +}: Props) => { + const { translations } = useContext(LocalizationContext); + const strings = translations["home"]; const menuItems: BuyBitcoinBottomSheetMenuItem[] = [ { - title: Platform.OS == 'ios' ? strings.ramp : strings.ramp, + title: Platform.OS == "ios" ? strings.ramp : strings.ramp, subtitle: strings.rampSub, kind: BuyMenuItemKind.RAMP, getImage: () => , disabled: false, hasButton: true, - link: 'https://support.ramp.network/en/', + link: "https://support.ramp.network/en/", }, // { // title: strings.wyre, @@ -105,69 +118,88 @@ const BuyBitcoinHomeBottomSheet: React.FC = ( { onMenuItemSelected, onPre // imageSource: require( '../../assets/images/icons/icon_fastbitcoins_light_blue.png' ), // disabled: false // } - ] + ]; - const renderItem = ( { item: menuItem }: { item: BuyBitcoinBottomSheetMenuItem } ) => { + const renderItem = ({ + item: menuItem, + }: { + item: BuyBitcoinBottomSheetMenuItem; + }) => { return ( - + {menuItem.getImage()} - {menuItem.title} - {menuItem.subtitle} + + {menuItem.title} + + + {menuItem.subtitle} + - { onMenuItemSelected( menuItem ) }} - disabled={menuItem.disabled}> - { + onMenuItemSelected(menuItem); + }} + disabled={menuItem.disabled} + > + - - {strings.buyBitCoin} - + {strings.buyBitCoin} - { - onPress() - Linking.openURL( menuItem.link ) - } - } + onPress(); + Linking.openURL(menuItem.link); + }} > - + {strings.fees} - - {` ${strings.learnMore} `} - + {` ${strings.learnMore} `} - ) - } + ); + }; return ( - + = ( { onMenuItemSelected, onPre renderItem={renderItem} scrollEnabled={false} /> - {RNLocalize.getCountry() == 'US' && - - } + {RNLocalize.getCountry() == "US" && ( + + )} - + ); +}; - ) -} - -const styles = StyleSheet.create( { +const styles = StyleSheet.create({ CardText: { - fontSize: RFValue( 12 ), + fontSize: RFValue(12), }, - linkText:{ - paddingBottom: wp( 1 ), - color: Colors.textColorGrey + linkText: { + paddingBottom: wp(1), + color: Colors.textColorGrey, }, imageStyle: { - width: wp( 4 ), height: wp( 4 ), - tintColor: Colors.theam_icon_color + width: wp(4), + height: wp(4), + tintColor: Colors.theam_icon_color, }, learnMore: { fontFamily: Fonts.MediumItalic, - color: Colors.blue + color: Colors.blue, }, linkContainer: { - flexDirection: 'row', - alignItems: 'center', - paddingTop: hp( 1 ), - paddingBottom: hp( 2 ), - paddingHorizontal: wp( 6 ) + flexDirection: "row", + alignItems: "center", + paddingTop: hp(1), + paddingBottom: hp(2), + paddingHorizontal: wp(6), }, buyButton: { - margin: hp( 0.5 ), color: Colors.white, fontSize: RFValue( 12 ), fontFamily: Fonts.Regular + margin: hp(0.5), + color: Colors.white, + fontSize: RFValue(12), + fontFamily: Fonts.Regular, }, buyContainer: { backgroundColor: Colors.blue, - borderRadius: wp( '2%' ), - paddingHorizontal: wp( 2 ), - paddingVertical: hp( 0.5 ) + borderRadius: wp("2%"), + paddingHorizontal: wp(2), + paddingVertical: hp(0.5), }, mainCardContainer: { - marginTop: hp( 1.5 ), + marginTop: hp(1.5), paddingHorizontal: 0, }, rootContainer: { backgroundColor: Colors.white, - marginBottom: hp( 1.5 ), - width: wp( 90 ), - borderRadius: wp( 2 ), - alignSelf: 'center', + marginBottom: hp(1.5), + width: wp(90), + borderRadius: wp(2), + alignSelf: "center", shadowColor: Colors.shadowColor, shadowOpacity: 1, shadowOffset: { - width: 10, height: 10 + width: 10, + height: 10, }, - elevation: 6 + elevation: 6, }, modelHeight: { - height: 'auto', - marginBottom: hp( 3 ) + height: "auto", + marginBottom: hp(3), }, cardMiddle: { // paddingLeft: 0, - marginRight: wp( -2 ), - marginLeft: wp( -1 ), - } -} ) + marginRight: wp(-2), + marginLeft: wp(-1), + }, +}); -export default BuyBitcoinHomeBottomSheet +export default BuyBitcoinHomeBottomSheet; diff --git a/src/components/home/HomeAccountCardsGrid.tsx b/src/components/home/HomeAccountCardsGrid.tsx index b70fa8423a..b666edbb9c 100644 --- a/src/components/home/HomeAccountCardsGrid.tsx +++ b/src/components/home/HomeAccountCardsGrid.tsx @@ -212,7 +212,7 @@ const HomeAccountCardsGrid: React.FC = ( { data={columnData} keyExtractor={keyExtractor} renderItem={( { item, index }: RenderItemProps ) => { - return - - ; + testID: string; title: string; subtitle: string; imageSource: ImageSourcePropType; @@ -36,132 +40,144 @@ export type Props = { isTestAccount: boolean; }; -const FooterButton: React.FC = ( { - style = { - }, +const FooterButton: React.FC = ({ + style = {}, + testID, title, subtitle, imageSource, onPress, -} ) => { +}) => { return ( - - + + {title} - {subtitle ? {subtitle} : null} + {subtitle ? ( + {subtitle} + ) : null} - ) -} + ); +}; -const SendAndReceiveButtonsFooter: React.FC = ( { +const SendAndReceiveButtonsFooter: React.FC = ({ onSendPressed, onReceivePressed, averageTxFees, network, - isTestAccount -} ) => { - const exchangeRates = useSelector( - ( state ) => state.accounts.exchangeRates - ) - - const currencyKind = useCurrencyKind() - const currencyCode = useCurrencyCode() - const common = translations[ 'common' ] - const transactionFeeUnitPrefix = useMemo( () => { - if ( currencyKind == CurrencyKind.FIAT ) { - return currencyCode.toLowerCase() + isTestAccount, +}) => { + const exchangeRates = useSelector((state) => state.accounts.exchangeRates); + + const currencyKind = useCurrencyKind(); + const currencyCode = useCurrencyCode(); + const common = translations["common"]; + const transactionFeeUnitPrefix = useMemo(() => { + if (currencyKind == CurrencyKind.FIAT) { + return currencyCode.toLowerCase(); } else { - return network == NetworkKind.MAINNET ? 'sat' : 't-sat' + return network == NetworkKind.MAINNET ? "sat" : "t-sat"; } - }, [ network, currencyKind ] ) + }, [network, currencyKind]); - const prefersBitcoin = useMemo( () => { - return currencyKind === CurrencyKind.BITCOIN - }, [ currencyKind ] ) + const prefersBitcoin = useMemo(() => { + return currencyKind === CurrencyKind.BITCOIN; + }, [currencyKind]); - const transactionFeeUnitText = useMemo( () => { - if ( currencyKind == CurrencyKind.FIAT ) { - return transactionFeeUnitPrefix + const transactionFeeUnitText = useMemo(() => { + if (currencyKind == CurrencyKind.FIAT) { + return transactionFeeUnitPrefix; } - const suffix = averageTxFees && averageTxFees[ network ].low.averageTxFee == 1 ? '' : 's' + const suffix = + averageTxFees && averageTxFees[network].low.averageTxFee == 1 ? "" : "s"; - return `${transactionFeeUnitPrefix}${suffix}` - }, [ transactionFeeUnitPrefix, averageTxFees ] ) + return `${transactionFeeUnitPrefix}${suffix}`; + }, [transactionFeeUnitPrefix, averageTxFees]); return ( - + - ) -} + ); +}; -const styles = StyleSheet.create( { +const styles = StyleSheet.create({ rootContainer: { - flexDirection: 'row', - justifyContent: 'space-around', + flexDirection: "row", + justifyContent: "space-around", }, buttonContainer: { minWidth: 150, - width: widthPercentageToDP( 42 ), + width: widthPercentageToDP(42), maxWidth: 400, - flexDirection: 'row', - justifyContent: 'center', - alignItems: 'center', + flexDirection: "row", + justifyContent: "center", + alignItems: "center", paddingVertical: 10, paddingHorizontal: 20, borderRadius: 10, - borderColor: '#E3E3E3', + borderColor: "#E3E3E3", borderWidth: 1, backgroundColor: Colors.white, }, @@ -175,20 +191,19 @@ const styles = StyleSheet.create( { marginRight: 10, }, - buttonTextContainer: { - }, + buttonTextContainer: {}, buttonTitleText: { color: Colors.black, fontFamily: Fonts.Medium, - fontSize: RFValue( 15 ), + fontSize: RFValue(15), }, buttonSubtitleText: { color: Colors.textColorGrey, fontFamily: Fonts.Regular, - fontSize: RFValue( 9 ), + fontSize: RFValue(9), }, -} ) +}); -export default SendAndReceiveButtonsFooter +export default SendAndReceiveButtonsFooter; diff --git a/src/pages/Contacts/AddContactAddressBook.tsx b/src/pages/Contacts/AddContactAddressBook.tsx index d3ea278794..47bf28f323 100644 --- a/src/pages/Contacts/AddContactAddressBook.tsx +++ b/src/pages/Contacts/AddContactAddressBook.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState, useContext } from 'react' +import React, { useEffect, useState, useContext } from "react"; import { View, Text, @@ -9,64 +9,68 @@ import { Linking, SafeAreaView, TouchableOpacity, - StatusBar -} from 'react-native' -import AsyncStorage from '@react-native-async-storage/async-storage' -import { useSelector, useDispatch } from 'react-redux' + StatusBar, +} from "react-native"; +import AsyncStorage from "@react-native-async-storage/async-storage"; +import { useSelector, useDispatch } from "react-redux"; import { widthPercentageToDP as wp, heightPercentageToDP as hp, -} from 'react-native-responsive-screen' -import Colors from '../../common/Colors' -import Fonts from '../../common/Fonts' -import { RFValue } from 'react-native-responsive-fontsize' -import { AppBottomSheetTouchableWrapper } from '../../components/AppBottomSheetTouchableWrapper' -import { FlatList } from 'react-native-gesture-handler' -import FontAwesome from 'react-native-vector-icons/FontAwesome' -import CommonStyles from '../../common/Styles/Styles' -import RadioButton from '../../components/RadioButton' -import * as ExpoContacts from 'expo-contacts' -import Icon from 'react-native-vector-icons/MaterialIcons' -import ErrorModalContents from '../../components/ErrorModalContents' -import AntDesign from 'react-native-vector-icons/AntDesign' -import * as Permissions from 'expo-permissions' -import { setIsPermissionGiven, setContactPermissionAsked } from '../../store/actions/preferences' -import ModalContainer from '../../components/home/ModalContainer' -import { Trusted_Contacts } from '../../bitcoin/utilities/Interface' -import { v4 as uuid } from 'uuid' -import { SKIPPED_CONTACT_NAME } from '../../store/reducers/trustedContacts' -import { editTrustedContact } from '../../store/actions/trustedContacts' -import HeaderTitle1 from '../../components/HeaderTitle1' -import { LocalizationContext } from '../../common/content/LocContext' -import PaginationIcon from '../../assets/images/svgs/pagination_1.svg' -import CreateFNFInvite from '../../components/friends-and-family/CreateFNFInvite' -import LinearGradient from 'react-native-linear-gradient' - -export default function AddContactAddressBook( props ) { - let [ selectedContacts, setSelectedContacts ] = useState( [] ) - const [ editedContacts, setEditedContacts ] = useState( [ props.navigation.state.params?.contactToEdit ] ) - const [ searchName, setSearchName ] = useState( '' ) - const [ errorMessage, setErrorMessage ] = useState( '' ) - const [ filterContactData, setFilterContactData ] = useState( [] ) - const [ radioOnOff, setRadioOnOff ] = useState( false ) - const [ contactPermissionAndroid, setContactPermissionAndroid ] = useState( - false, - ) - const isPermissionSet = useSelector( state => state.preferences.contactPermissionAsked ) - const { translations } = useContext( LocalizationContext ) - const strings = translations[ 'f&f' ] - const common = translations[ 'common' ] - const [ permissionModal, setModal ] = useState( false ) - const [ permissionErrModal, setErrModal ] = useState( false ) - const [ createFNFInvite, setCreateFNFInvite ] = useState( false ) - const [ - contactPermissionBottomSheet, - setContactPermissionBottomSheet, - ] = useState( React.createRef() ) - const [ contactPermissionIOS, setContactPermissionIOS ] = useState( false ) - const dispatch = useDispatch() - - const [ contactData, setContactData ] = useState( [] ) +} from "react-native-responsive-screen"; +import Colors from "../../common/Colors"; +import Fonts from "../../common/Fonts"; +import { RFValue } from "react-native-responsive-fontsize"; +import { AppBottomSheetTouchableWrapper } from "../../components/AppBottomSheetTouchableWrapper"; +import { FlatList } from "react-native-gesture-handler"; +import FontAwesome from "react-native-vector-icons/FontAwesome"; +import CommonStyles from "../../common/Styles/Styles"; +import RadioButton from "../../components/RadioButton"; +import * as ExpoContacts from "expo-contacts"; +import Icon from "react-native-vector-icons/MaterialIcons"; +import ErrorModalContents from "../../components/ErrorModalContents"; +import AntDesign from "react-native-vector-icons/AntDesign"; +import * as Permissions from "expo-permissions"; +import { + setIsPermissionGiven, + setContactPermissionAsked, +} from "../../store/actions/preferences"; +import ModalContainer from "../../components/home/ModalContainer"; +import { Trusted_Contacts } from "../../bitcoin/utilities/Interface"; +import { v4 as uuid } from "uuid"; +import { SKIPPED_CONTACT_NAME } from "../../store/reducers/trustedContacts"; +import { editTrustedContact } from "../../store/actions/trustedContacts"; +import HeaderTitle1 from "../../components/HeaderTitle1"; +import { LocalizationContext } from "../../common/content/LocContext"; +import PaginationIcon from "../../assets/images/svgs/pagination_1.svg"; +import CreateFNFInvite from "../../components/friends-and-family/CreateFNFInvite"; +import LinearGradient from "react-native-linear-gradient"; + +export default function AddContactAddressBook(props) { + let [selectedContacts, setSelectedContacts] = useState([]); + const [editedContacts, setEditedContacts] = useState([ + props.navigation.state.params?.contactToEdit, + ]); + const [searchName, setSearchName] = useState(""); + const [errorMessage, setErrorMessage] = useState(""); + const [filterContactData, setFilterContactData] = useState([]); + const [radioOnOff, setRadioOnOff] = useState(false); + const [contactPermissionAndroid, setContactPermissionAndroid] = + useState(false); + const isPermissionSet = useSelector( + (state) => state.preferences.contactPermissionAsked + ); + const { translations } = useContext(LocalizationContext); + const strings = translations["f&f"]; + const common = translations["common"]; + const [permissionModal, setModal] = useState(false); + const [permissionErrModal, setErrModal] = useState(false); + const [createFNFInvite, setCreateFNFInvite] = useState(false); + const [contactPermissionBottomSheet, setContactPermissionBottomSheet] = + useState(React.createRef()); + const [contactPermissionIOS, setContactPermissionIOS] = useState(false); + const dispatch = useDispatch(); + + const [contactData, setContactData] = useState([]); // const [ selectedContact, setContact ] = useState( [] ) const requestContactsPermission = async () => { @@ -74,167 +78,171 @@ export default function AddContactAddressBook( props ) { const result = await PermissionsAndroid.request( PermissionsAndroid.PERMISSIONS.READ_CONTACTS, { - 'title': strings.hexaWould, - 'message': strings.Addressbookdetails, + title: strings.hexaWould, + message: strings.Addressbookdetails, buttonPositive: common.allow, buttonNegative: common.deny, } - ) - return result - } catch ( err ) { - console.warn( err ) + ); + return result; + } catch (err) { + console.warn(err); } - } + }; - useEffect( () => { + useEffect(() => { // if( props.isLoadContacts ){ - getContactsAsync() + getContactsAsync(); // } - }, [] ) - + }, []); const getContact = () => { // if ( props.isLoadContacts ) { - ExpoContacts.getContactsAsync().then( async ( { data } ) => { - if ( !data.length ) { - setErrorMessage( - strings.Nocontacts, - ) - setErrModal( true ) + ExpoContacts.getContactsAsync().then(async ({ data }) => { + if (!data.length) { + setErrorMessage(strings.Nocontacts); + setErrModal(true); } - setContactData( data ) - await AsyncStorage.setItem( 'ContactData', JSON.stringify( data ) ) - const contactList = data.sort( function ( a, b ) { - if ( a.name && b.name ) { - if ( a.name.toLowerCase() < b.name.toLowerCase() ) return -1 - if ( a.name.toLowerCase() > b.name.toLowerCase() ) return 1 + setContactData(data); + await AsyncStorage.setItem("ContactData", JSON.stringify(data)); + const contactList = data.sort(function (a, b) { + if (a.name && b.name) { + if (a.name.toLowerCase() < b.name.toLowerCase()) return -1; + if (a.name.toLowerCase() > b.name.toLowerCase()) return 1; } - return 0 - } ) - setFilterContactData( contactList ) - } ) + return 0; + }); + setFilterContactData(contactList); + }); // } - } + }; const getContactPermission = async () => { - dispatch( setIsPermissionGiven( true ) ) - dispatch( setContactPermissionAsked( true ) ) + dispatch(setIsPermissionGiven(true)); + dispatch(setContactPermissionAsked(true)); - if ( Platform.OS === 'android' ) { - const granted = await requestContactsPermission() + if (Platform.OS === "android") { + const granted = await requestContactsPermission(); //console.log('GRANTED', granted); - if ( granted !== PermissionsAndroid.RESULTS.GRANTED ) { - setErrorMessage( strings.cannotSelect ) - setErrModal( true ) - setContactPermissionAndroid( false ) - return + if (granted !== PermissionsAndroid.RESULTS.GRANTED) { + setErrorMessage(strings.cannotSelect); + setErrModal(true); + setContactPermissionAndroid(false); + return; } else { - - // TODO: Migrate it using react-native-contact - getContact() + getContact(); } - } else if ( Platform.OS === 'ios' ) { + } else if (Platform.OS === "ios") { const { status, expires, permissions } = await Permissions.askAsync( - Permissions.CONTACTS, - ) - if ( status === 'denied' ) { - setContactPermissionIOS( false ) - setErrorMessage( strings.cannotSelect ) - setErrModal( true ) - return + Permissions.CONTACTS + ); + if (status === "denied") { + setContactPermissionIOS(false); + setErrorMessage(strings.cannotSelect); + setErrModal(true); + return; } else { - getContact() + getContact(); } } - } + }; const getContactsAsync = async () => { - if ( Platform.OS === 'android' ) { - const chckContactPermission = await PermissionsAndroid.check( PermissionsAndroid.PERMISSIONS.READ_CONTACTS ) - if ( !chckContactPermission ) { - if ( !isPermissionSet ) { - setModal( true ) + if (Platform.OS === "android") { + const chckContactPermission = await PermissionsAndroid.check( + PermissionsAndroid.PERMISSIONS.READ_CONTACTS + ); + if (!chckContactPermission) { + if (!isPermissionSet) { + setModal(true); } } else { - getContactPermission() - } - } else if ( Platform.OS === 'ios' ) { - if ( ( await Permissions.getAsync( Permissions.CONTACTS ) ).status === 'undetermined' ) { - setModal( true ) + getContactPermission(); } - else { - getContactPermission() + } else if (Platform.OS === "ios") { + if ( + (await Permissions.getAsync(Permissions.CONTACTS)).status === + "undetermined" + ) { + setModal(true); + } else { + getContactPermission(); } } - } + }; - useEffect( () => { - ( async () => { - await AsyncStorage.getItem( 'ContactData', ( err, value ) => { - if ( err ) console.log( 'ERROR in ContactData', err ) + useEffect(() => { + (async () => { + await AsyncStorage.getItem("ContactData", (err, value) => { + if (err) console.log("ERROR in ContactData", err); else { - const data = JSON.parse( value ) - if ( data && data.length ) { - setContactData( data ) - const contactList = data.sort( function ( a, b ) { - if ( a.name && b.name ) { - if ( a.name.toLowerCase() < b.name.toLowerCase() ) return -1 - if ( a.name.toLowerCase() > b.name.toLowerCase() ) return 1 + const data = JSON.parse(value); + if (data && data.length) { + setContactData(data); + const contactList = data.sort(function (a, b) { + if (a.name && b.name) { + if (a.name.toLowerCase() < b.name.toLowerCase()) return -1; + if (a.name.toLowerCase() > b.name.toLowerCase()) return 1; } - return 0 - } ) - setFilterContactData( contactList ) + return 0; + }); + setFilterContactData(contactList); } } - } ) - } )() - }, [] ) - - const filterContacts = ( keyword ) => { - if ( contactData.length > 0 ) { - if ( !keyword.length ) { - setFilterContactData( contactData ) - return + }); + })(); + }, []); + + const filterContacts = (keyword) => { + if (contactData.length > 0) { + if (!keyword.length) { + setFilterContactData(contactData); + return; } - const isFilter = true - const filterContactsForDisplay = [] - for ( let i = 0; i < contactData.length; i++ ) { - if ( contactData[ i ].name != undefined && contactData[ i ].name != null && contactData[ i ].name != '' ) { - const contactWords = contactData[ i ].name.split( ' ' ).length - const middleName = contactData[ i ].name.split( ' ' ).slice( 1, contactWords - 1 ).join( ' ' ) + const isFilter = true; + const filterContactsForDisplay = []; + for (let i = 0; i < contactData.length; i++) { + if ( + contactData[i].name != undefined && + contactData[i].name != null && + contactData[i].name != "" + ) { + const contactWords = contactData[i].name.split(" ").length; + const middleName = contactData[i].name + .split(" ") + .slice(1, contactWords - 1) + .join(" "); if ( - ( contactData[ i ].firstName && - contactData[ i ].firstName + (contactData[i].firstName && + contactData[i].firstName .toLowerCase() - .startsWith( keyword.toLowerCase() ) ) || - ( contactData[ i ].lastName && - contactData[ i ].lastName + .startsWith(keyword.toLowerCase())) || + (contactData[i].lastName && + contactData[i].lastName .toLowerCase() - .startsWith( keyword.toLowerCase() ) ) || - ( contactData[ i ].name && - contactData[ i ].name + .startsWith(keyword.toLowerCase())) || + (contactData[i].name && + contactData[i].name .toLowerCase() - .startsWith( keyword.toLowerCase() ) ) || - ( middleName && - middleName - .toLowerCase() - .startsWith( keyword.toLowerCase() ) ) + .startsWith(keyword.toLowerCase())) || + (middleName && + middleName.toLowerCase().startsWith(keyword.toLowerCase())) ) { - filterContactsForDisplay.push( contactData[ i ] ) + filterContactsForDisplay.push(contactData[i]); } } } - setFilterContactData( filterContactsForDisplay ) + setFilterContactData(filterContactsForDisplay); } else { - return + return; } - } + }; const trustedContacts: Trusted_Contacts = useSelector( - ( state ) => state.trustedContacts.contacts, - ) - const [ isTC, setIsTC ] = useState( false ) + (state) => state.trustedContacts.contacts + ); + const [isTC, setIsTC] = useState(false); // const isTrustedContact = useCallback( // ( selectedContact ) => { @@ -253,26 +261,26 @@ export default function AddContactAddressBook( props ) { // [ trustedContacts ], // ) - async function onContactSelect( index ) { - const contacts = filterContactData - if ( contacts[ index ].checked ) { - selectedContacts = [] + async function onContactSelect(index) { + const contacts = filterContactData; + if (contacts[index].checked) { + selectedContacts = []; } else { - selectedContacts[ 0 ] = contacts[ index ] + selectedContacts[0] = contacts[index]; } - setSelectedContacts( selectedContacts ) + setSelectedContacts(selectedContacts); // onSelectContact( selectedContacts ) - for ( let i = 0; i < contacts.length; i++ ) { + for (let i = 0; i < contacts.length; i++) { if ( - selectedContacts.findIndex( ( value ) => value.id == contacts[ i ].id ) > -1 + selectedContacts.findIndex((value) => value.id == contacts[i].id) > -1 ) { - contacts[ i ].checked = true + contacts[i].checked = true; } else { - contacts[ i ].checked = false + contacts[i].checked = false; } } - setRadioOnOff( !radioOnOff ) - setFilterContactData( contacts ) + setRadioOnOff(!radioOnOff); + setFilterContactData(contacts); // const isTrustedC = await isTrustedContact( selectedContacts[ 0 ] ) // setIsTC( isTrustedC ) // if ( isTrustedC ) { @@ -280,51 +288,54 @@ export default function AddContactAddressBook( props ) { // } } - async function onCancel( value ) { - - if ( filterContactData.findIndex( ( tmp ) => tmp.id == value.id ) > -1 ) { + async function onCancel(value) { + if (filterContactData.findIndex((tmp) => tmp.id == value.id) > -1) { filterContactData[ - filterContactData.findIndex( ( tmp ) => tmp.id == value.id ) - ].checked = false + filterContactData.findIndex((tmp) => tmp.id == value.id) + ].checked = false; } selectedContacts.splice( - selectedContacts.findIndex( ( temp ) => temp.id == value.id ), - 1, - ) - setSelectedContacts( selectedContacts ) - setRadioOnOff( !radioOnOff ) + selectedContacts.findIndex((temp) => temp.id == value.id), + 1 + ); + setSelectedContacts(selectedContacts); + setRadioOnOff(!radioOnOff); // props.onSelectContact( selectedContacts ) } - const onPressContinue = () => { - if ( selectedContacts && selectedContacts.length ) { - - if ( props.navigation.state.params?.fromScreen === 'Edit' ) { - selectedContacts[ 0 ].id = props.navigation.state.params?.contactToEdit.id - selectedContacts[ 0 ].channelKey = props.navigation.state.params?.contactToEdit.channelKey - selectedContacts[ 0 ].displayedName = selectedContacts[ 0 ].name - selectedContacts[ 0 ].avatarImageSource = selectedContacts[ 0 ].image ? selectedContacts[ 0 ].image : props.navigation.state.params?.contactToEdit.avatarImageSource - dispatch( editTrustedContact( { - channelKey: props.navigation.state.params?.contactToEdit.channelKey, - contactName: selectedContacts[ 0 ].name, - image: selectedContacts[ 0 ].image - } ) ) - props.navigation.navigate( 'ContactDetails', { - contact: selectedContacts[ 0 ], - } ) - } else if ( props.navigation.state.params?.fromScreen === 'Gift' ) { - props.navigation.replace( 'EnterGiftDetails', { - fromScreen: 'Gift', + if (selectedContacts && selectedContacts.length) { + if (props.navigation.state.params?.fromScreen === "Edit") { + selectedContacts[0].id = + props.navigation.state.params?.contactToEdit.id; + selectedContacts[0].channelKey = + props.navigation.state.params?.contactToEdit.channelKey; + selectedContacts[0].displayedName = selectedContacts[0].name; + selectedContacts[0].avatarImageSource = selectedContacts[0].image + ? selectedContacts[0].image + : props.navigation.state.params?.contactToEdit.avatarImageSource; + dispatch( + editTrustedContact({ + channelKey: props.navigation.state.params?.contactToEdit.channelKey, + contactName: selectedContacts[0].name, + image: selectedContacts[0].image, + }) + ); + props.navigation.navigate("ContactDetails", { + contact: selectedContacts[0], + }); + } else if (props.navigation.state.params?.fromScreen === "Gift") { + props.navigation.replace("EnterGiftDetails", { + fromScreen: "Gift", giftId: props.navigation.state.params?.giftId, contact: selectedContacts, - setActiveTab: props.navigation.state.params.setActiveTab - } ) + setActiveTab: props.navigation.state.params.setActiveTab, + }); } else { - if( props.navigation.state.params?.fromScreen === 'Invitation' ){ - setCreateFNFInvite( true ) - }else{ - props.navigation.navigate( 'AddContactSendRequest', { + if (props.navigation.state.params?.fromScreen === "Invitation") { + setCreateFNFInvite(true); + } else { + props.navigation.navigate("AddContactSendRequest", { SelectedContact: selectedContacts, giftId: props.navigation.state.params?.giftId, headerText: strings.addContact, @@ -332,18 +343,15 @@ export default function AddContactAddressBook( props ) { contactText: strings.adding, senderName: props?.navigation?.state?.params?.senderName, showDone: true, - note: props?.navigation?.state?.params?.note - } ) - + note: props?.navigation?.state?.params?.note, + }); } - } - } - } + }; const sendRequestToContact = () => { - setCreateFNFInvite( false ) - props.navigation.navigate( 'AddContactSendRequest', { + setCreateFNFInvite(false); + props.navigation.navigate("AddContactSendRequest", { SelectedContact: selectedContacts, giftId: props.navigation.state.params?.giftId, headerText: strings.addContact, @@ -351,27 +359,27 @@ export default function AddContactAddressBook( props ) { contactText: strings.adding, senderName: props?.navigation?.state?.params?.senderName, showDone: true, - note: props?.navigation?.state?.params?.note - } ) - } + note: props?.navigation?.state?.params?.note, + }); + }; const goCreateGifts = () => { - setCreateFNFInvite( false ) - props.navigation.navigate( 'CreateGift', { + setCreateFNFInvite(false); + props.navigation.navigate("CreateGift", { selectedContact: selectedContacts, - statusFlag: 'Invitation', + statusFlag: "Invitation", giftId: props.navigation.state.params?.giftId, - } ) - } + }); + }; const onPressBack = () => { - props.navigation.goBack() - } + props.navigation.goBack(); + }; const onSkipContinue = () => { const skippedContact = { id: uuid(), - } - props.navigation.navigate( 'AddContactSendRequest', { - SelectedContact: [ skippedContact ], + }; + props.navigation.navigate("AddContactSendRequest", { + SelectedContact: [skippedContact], giftId: props.navigation.state.params?.giftId, headerText: strings.addContact, subHeaderText: strings.send, @@ -379,22 +387,29 @@ export default function AddContactAddressBook( props ) { showDone: true, skipClicked: true, senderName: props?.navigation?.state?.params?.senderName, - note: props?.navigation?.state?.params?.note - } ) - } + note: props?.navigation?.state?.params?.note, + }); + }; return ( {/* */} - + { - props.navigation.pop( props.navigation.state.params?.fromScreen === 'Gift' ? 2 : 1 ) + props.navigation.pop( + props.navigation.state.params?.fromScreen === "Gift" ? 2 : 1 + ); }} > @@ -409,26 +424,37 @@ export default function AddContactAddressBook( props ) { {/* from your address book */} - {selectedContacts.length !== 0 && + {selectedContacts.length !== 0 && ( - {selectedContacts[ 0 ].firstName} {selectedContacts[ 0 ].lastName} - { - setSelectedContacts( [] ) - onContactSelect( filterContactData.findIndex( ( tmp ) => tmp.id == selectedContacts[ 0 ].id ) ) - }}> - + + + {selectedContacts[0].firstName} + {" "} + {selectedContacts[0].lastName} + + { + setSelectedContacts([]); + onContactSelect( + filterContactData.findIndex( + (tmp) => tmp.id == selectedContacts[0].id + ) + ); + }} + > + - } + )} {/* @@ -479,9 +505,11 @@ export default function AddContactAddressBook( props ) { {/* */} - + {/* */} - + {/* {selectedContacts.length > 0 ? selectedContacts.map( ( value, index ) => { @@ -523,58 +554,63 @@ export default function AddContactAddressBook( props ) { } ) : null} */} - + - - + { - nameKeyword = nameKeyword.replace( /[^A-Za-z0-9 ]/g, '' ) - setSearchName( nameKeyword ) - filterContacts( nameKeyword ) - } - } + onChangeText={(nameKeyword) => { + nameKeyword = nameKeyword.replace(/[^A-Za-z0-9 ]/g, ""); + setSearchName(nameKeyword); + filterContacts(nameKeyword); + }} value={searchName} /> - + {filterContactData ? ( item.id} + keyExtractor={(item, index) => item.id} data={filterContactData} extraData={radioOnOff} showsVerticalScrollIndicator={false} contentInset={{ - right: 0, top: 0, left: 0, bottom: hp( 24 ) + right: 0, + top: 0, + left: 0, + bottom: hp(24), }} - ListEmptyComponent={() => - + ListEmptyComponent={() => ( + {strings.cannotSelect} + > + {strings.cannotSelect} + {/* getContactPermission()} style={{ @@ -592,22 +628,24 @@ export default function AddContactAddressBook( props ) { */} - } - renderItem={( { item, index } ) => { - let selected = false + )} + renderItem={({ item, index }) => { + let selected = false; if ( - selectedContacts.findIndex( ( temp ) => temp.id == item.id ) > + selectedContacts.findIndex((temp) => temp.id == item.id) > -1 ) { - selected = true + selected = true; } // if (item.phoneNumbers || item.emails) { return ( onContactSelect( index )} + onPress={() => onContactSelect(index)} style={{ ...styles.contactView, - backgroundColor: selected ? 'rgba(105, 162, 176, 0.4)' : null, + backgroundColor: selected + ? "rgba(105, 162, 176, 0.4)" + : null, }} key={index} activeOpacity={0.1} @@ -617,7 +655,7 @@ export default function AddContactAddressBook( props ) { color={Colors.lightBlue} borderColor={Colors.white} isChecked={item.checked} - onpress={() => onContactSelect( index )} + onpress={() => onContactSelect(index)} /> {/* {item.name && item.name.split( ' ' )[ 0 ] @@ -631,25 +669,32 @@ export default function AddContactAddressBook( props ) { : ''} */} - {item.name && item.name.split( ' ' ).map( ( x, index ) => { - const i = item.name.split( ' ' ).length - return ( - - {index !== i - 1 ? `${x} ` : - - {x} - - } - - ) - } )} + {item.name && + item.name.split(" ").map((x, index) => { + const i = item.name.split(" ").length; + return ( + + {index !== i - 1 ? ( + `${x} ` + ) : ( + + {x} + + )} + + ); + })} - ) + ); // } else { // return null; // } @@ -671,31 +716,39 @@ export default function AddContactAddressBook( props ) { backgroundColor: Colors.backgroundColor }} > - { - filterContactData.length > 0 && ( - onPressContinue()} - + {filterContactData.length > 0 && ( + onPressContinue()} + > + - - {common.confirmProceed} - - - ) - } - {props.navigation.state.params?.fromScreen === 'Edit' ? - null : + {common.confirmProceed} + + + )} + {props.navigation.state.params?.fromScreen === "Edit" ? null : ( onSkipContinue()} style={{ @@ -713,9 +766,8 @@ export default function AddContactAddressBook( props ) { > {filterContactData.length > 0 ? common.skip : common.continue} - - } + )} {/* { @@ -726,7 +778,6 @@ export default function AddContactAddressBook( props ) { } */} - {/* )} */} {/* setErrModal( false )} visible={permissionErrModal} closeBottomSheet={() => { setErrModal( false ) }}> @@ -747,7 +798,11 @@ export default function AddContactAddressBook( props ) { bottomImage={require( '../../assets/images/icons/errorImage.png' )} /> */} - setModal( false )} visible={permissionModal} closeBottomSheet={() => { }}> + setModal(false)} + visible={permissionModal} + closeBottomSheet={() => {}} + > { - getContactPermission() + getContactPermission(); // ( contactPermissionBottomSheet as any ).current.snapTo( 0 ) - setModal( false ) + setModal(false); }} onPressIgnore={() => { // ( contactPermissionBottomSheet as any ).current.snapTo( 0 ) - setModal( false ) + setModal(false); }} isBottomImage={true} - bottomImage={require( '../../assets/images/icons/contactPermission.png' )} + bottomImage={require("../../assets/images/icons/contactPermission.png")} /> {/* create FNF Invite */} - setCreateFNFInvite( false )} visible={createFNFInvite} closeBottomSheet={() => { }}> + setCreateFNFInvite(false)} + visible={createFNFInvite} + closeBottomSheet={() => {}} + > setCreateFNFInvite( false )} - sendRequestToContact={()=> sendRequestToContact()} - createGifts={()=> goCreateGifts()} + closeModal={() => setCreateFNFInvite(false)} + sendRequestToContact={() => sendRequestToContact()} + createGifts={() => goCreateGifts()} /> - ) + ); } -const styles = StyleSheet.create( { +const styles = StyleSheet.create({ statusIndicatorView: { - flexDirection: 'row', - marginLeft: 'auto', - marginHorizontal: wp( '6%' ), - marginBottom: hp( 2 ) + flexDirection: "row", + marginLeft: "auto", + marginHorizontal: wp("6%"), + marginBottom: hp(2), }, statusIndicatorActiveView: { height: 5, @@ -805,138 +864,138 @@ const styles = StyleSheet.create( { }, proceedButtonText: { color: Colors.blue, - fontSize: RFValue( 13 ), - fontFamily: Fonts.Medium + fontSize: RFValue(13), + fontFamily: Fonts.Medium, }, modalContentContainer: { - height: '100%', + height: "100%", backgroundColor: Colors.backgroundColor, }, modalHeaderTitleView: { borderBottomWidth: 1, borderColor: Colors.borderColor, - alignItems: 'center', - flexDirection: 'row', - paddingBottom: hp( '2%' ), - marginBottom: wp( '5%' ), - marginLeft: wp( '4%' ), - marginRight: wp( '4%' ), + alignItems: "center", + flexDirection: "row", + paddingBottom: hp("2%"), + marginBottom: wp("5%"), + marginLeft: wp("4%"), + marginRight: wp("4%"), }, modalHeaderTitleText: { color: Colors.blue, - fontSize: RFValue( 18 ), + fontSize: RFValue(18), fontFamily: Fonts.Regular, }, modalHeaderInfoText: { color: Colors.textColorGrey, - fontSize: RFValue( 12 ), + fontSize: RFValue(12), fontFamily: Fonts.Regular, }, TitleText: { color: Colors.blue, - fontSize: RFValue( 13 ), + fontSize: RFValue(13), fontFamily: Fonts.Regular, }, buttonText: { color: Colors.white, fontFamily: Fonts.Medium, - fontSize: RFValue( 13 ), + fontSize: RFValue(13), }, bottomButtonView: { - height: hp( '6%' ), - width: wp( '40%' ), + height: hp("6%"), + width: wp("40%"), backgroundColor: Colors.blue, borderRadius: 10, justifyContent: 'center', alignItems: 'center', // elevation: 10, marginBottom: 20, - marginLeft: wp( 9 ), + marginLeft: wp(9), }, selectedContactView: { - width: wp( '42%' ), - height: wp( '12%' ), + width: wp("42%"), + height: wp("12%"), backgroundColor: Colors.lightBlue, borderRadius: 10, padding: 10, - flexDirection: 'row', - justifyContent: 'space-between', - alignItems: 'center' + flexDirection: "row", + justifyContent: "space-between", + alignItems: "center", }, selectedContactNameText: { color: Colors.white, - fontSize: RFValue( 13 ), - fontFamily: Fonts.Regular + fontSize: RFValue(13), + fontFamily: Fonts.Regular, }, selectedContactContainer: { - height: wp( '20%' ), - alignItems: 'center', - justifyContent: 'space-between', - flexDirection: 'row', + height: wp("20%"), + alignItems: "center", + justifyContent: "space-between", + flexDirection: "row", marginLeft: 20, marginRight: 20, }, contactView: { - height: hp( 6 ), - alignItems: 'center', - flexDirection: 'row', - paddingLeft: wp( 5 ), - marginVertical: hp( 0.7 ), - width: wp( '90%' ), + height: hp(6), + alignItems: "center", + flexDirection: "row", + paddingLeft: wp(5), + marginVertical: hp(0.7), + width: wp("90%"), borderTopRightRadius: 10, borderBottomRightRadius: 10, }, contactText: { marginLeft: 10, - fontSize: RFValue( 13 ), + fontSize: RFValue(13), fontFamily: Fonts.Regular, }, searchBoxContainer: { - flexDirection: 'row', + flexDirection: "row", backgroundColor: Colors.white, - height: hp( '5.5%' ), - width: wp( '85%' ), - alignItems: 'center', - marginVertical: hp( 2 ), + height: hp("5.5%"), + width: wp("85%"), + alignItems: "center", + marginVertical: hp(2), borderRadius: 10, - marginHorizontal: wp( 5 ) + marginHorizontal: wp(5), }, searchBoxInput: { - fontSize: RFValue( 12 ), + fontSize: RFValue(12), color: Colors.black, fontFamily: Fonts.Italic, - paddingLeft: wp( 1.5 ) + paddingLeft: wp(1.5), }, searchBoxIcon: { - paddingLeft: wp( 2 ) + paddingLeft: wp(2), }, addressBook: { - fontSize: RFValue( 12 ), - marginTop: hp( -1.5 ), - marginLeft: wp( 5 ), + fontSize: RFValue(12), + marginTop: hp(-1.5), + marginLeft: wp(5), color: Colors.textColorGrey, }, selectedContactContent: { - flexDirection: 'row', - justifyContent: 'flex-start', + flexDirection: "row", + justifyContent: "flex-start", }, selectedContact: { padding: 12, backgroundColor: Colors.testAccCard, borderRadius: 10, - flexDirection: 'row', - alignItems: 'center', - marginHorizontal: wp( 5 ), - marginTop: hp( 1.7 ), + flexDirection: "row", + alignItems: "center", + marginHorizontal: wp(5), + marginTop: hp(1.7), }, selectedContactText: { - fontSize: RFValue( 12 ), + fontSize: RFValue(12), color: Colors.backgroundColor1, fontFamily: Fonts.FiraSans, - paddingRight: wp( 3 ), - fontWeight: '500' + paddingRight: wp(3), + fontWeight: "500", }, firstName: { - fontWeight: '400' - } -} ) + fontWeight: "400", + }, +}); diff --git a/src/pages/Contacts/AddContactSendRequest.tsx b/src/pages/Contacts/AddContactSendRequest.tsx index e6feddaa70..3c9077dcfa 100644 --- a/src/pages/Contacts/AddContactSendRequest.tsx +++ b/src/pages/Contacts/AddContactSendRequest.tsx @@ -510,7 +510,7 @@ export default function AddContactSendRequest( props ) { }} /> {!giftId && - setSecure2FAModal( true )} style={{ flex: 1 diff --git a/src/pages/FriendsAndFamily/CreateGift.tsx b/src/pages/FriendsAndFamily/CreateGift.tsx index 1820cbecc0..82ef67b590 100644 --- a/src/pages/FriendsAndFamily/CreateGift.tsx +++ b/src/pages/FriendsAndFamily/CreateGift.tsx @@ -6,7 +6,7 @@ import { GiftThemeId, TxPriority, Wallet, -} from '../../bitcoin/utilities/Interface' +} from "../../bitcoin/utilities/Interface"; import { Dimensions, Image, @@ -19,201 +19,203 @@ import { Text, TouchableOpacity, View, -} from 'react-native' +} from "react-native"; import MaterialCurrencyCodeIcon, { materialIconCurrencyCodes, -} from '../../components/MaterialCurrencyCodeIcon' -import React, { useEffect, useMemo, useState } from 'react' -import { calculateSendMaxFee, sourceAccountSelectedForSending } from '../../store/actions/sending' +} from "../../components/MaterialCurrencyCodeIcon"; +import React, { useEffect, useMemo, useState } from "react"; +import { + calculateSendMaxFee, + sourceAccountSelectedForSending, +} from "../../store/actions/sending"; import { generateGifts, giftCreationSuccess, -} from '../../store/actions/accounts' +} from "../../store/actions/accounts"; import { getCurrencyImageByRegion, processRequestQR, -} from '../../common/CommonFunctions/index' +} from "../../common/CommonFunctions/index"; import { heightPercentageToDP as hp, widthPercentageToDP as wp, -} from 'react-native-responsive-screen' -import { useDispatch, useSelector } from 'react-redux' +} from "react-native-responsive-screen"; +import { useDispatch, useSelector } from "react-redux"; -import AccountShell from '../../common/data/models/AccountShell' -import { AccountsState } from '../../store/reducers/accounts' -import AntDesign from 'react-native-vector-icons/AntDesign' -import { AppBottomSheetTouchableWrapper } from '../../components/AppBottomSheetTouchableWrapper' -import BitcoinUnit from '../../common/data/enums/BitcoinUnit' -import BottomInfoBox from '../../components/BottomInfoBox' -import CheckMark from '../../assets/images/svgs/checkmark.svg' -import CheckingAccount from '../../assets/images/accIcons/icon_checking.svg' -import Colors from '../../common/Colors' -import CommonStyles from '../../common/Styles/Styles' -import CurrencyKind from '../../common/data/enums/CurrencyKind' -import DashedContainer from './DashedContainer' -import Dollar from '../../assets/images/svgs/icon_dollar.svg' -import ErrorLoader from '../../components/ErrorLoader' -import FontAwesome from 'react-native-vector-icons/FontAwesome' -import Fonts from '../../common/Fonts' -import FormStyles from '../../common/Styles/FormStyles' -import GiftCard from '../../assets/images/svgs/gift_icon_new.svg' -import HeaderTitle from '../../components/HeaderTitle' -import Illustration from '../../assets/images/svgs/illustration.svg' -import Ionicons from 'react-native-vector-icons/Ionicons' -import Loader from '../../components/loader' -import LoaderModal from '../../components/LoaderModal' -import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons' -import ModalContainer from '../../components/home/ModalContainer' -import { RFValue } from 'react-native-responsive-fontsize' -import { SATOSHIS_IN_BTC } from '../../common/constants/Bitcoin' -import { Shadow } from 'react-native-shadow-2' -import Toast from '../../components/Toast' -import ToggleContainer from './CurrencyToggle' -import { UsNumberFormat } from '../../common/utilities' -import VerifySatModalContents from '../Gift/VerifySatModalContents' -import getAvatarForSubAccount from '../../utils/accounts/GetAvatarForSubAccountKind' -import idx from 'idx' -import { platform } from 'process' -import { translations } from '../../common/content/LocContext' -import { updateUserName } from '../../store/actions/storage' -import useActiveAccountShells from '../../utils/hooks/state-selectors/accounts/UseActiveAccountShells' -import useCurrencyCode from '../../utils/hooks/state-selectors/UseCurrencyCode' -import useCurrencyKind from '../../utils/hooks/state-selectors/UseCurrencyKind' -import useFormattedUnitText from '../../utils/hooks/formatting/UseFormattedUnitText' -import usePrimarySubAccountForShell from '../../utils/hooks/account-utils/UsePrimarySubAccountForShell' -import useSpendableBalanceForAccountShell from '../../utils/hooks/account-utils/UseSpendableBalanceForAccountShell' -import LinearGradient from 'react-native-linear-gradient' +import AccountShell from "../../common/data/models/AccountShell"; +import { AccountsState } from "../../store/reducers/accounts"; +import AntDesign from "react-native-vector-icons/AntDesign"; +import { AppBottomSheetTouchableWrapper } from "../../components/AppBottomSheetTouchableWrapper"; +import BitcoinUnit from "../../common/data/enums/BitcoinUnit"; +import BottomInfoBox from "../../components/BottomInfoBox"; +import CheckMark from "../../assets/images/svgs/checkmark.svg"; +import CheckingAccount from "../../assets/images/accIcons/icon_checking.svg"; +import Colors from "../../common/Colors"; +import CommonStyles from "../../common/Styles/Styles"; +import CurrencyKind from "../../common/data/enums/CurrencyKind"; +import DashedContainer from "./DashedContainer"; +import Dollar from "../../assets/images/svgs/icon_dollar.svg"; +import ErrorLoader from "../../components/ErrorLoader"; +import FontAwesome from "react-native-vector-icons/FontAwesome"; +import Fonts from "../../common/Fonts"; +import FormStyles from "../../common/Styles/FormStyles"; +import GiftCard from "../../assets/images/svgs/gift_icon_new.svg"; +import HeaderTitle from "../../components/HeaderTitle"; +import Illustration from "../../assets/images/svgs/illustration.svg"; +import Ionicons from "react-native-vector-icons/Ionicons"; +import Loader from "../../components/loader"; +import LoaderModal from "../../components/LoaderModal"; +import MaterialCommunityIcons from "react-native-vector-icons/MaterialCommunityIcons"; +import ModalContainer from "../../components/home/ModalContainer"; +import { RFValue } from "react-native-responsive-fontsize"; +import { SATOSHIS_IN_BTC } from "../../common/constants/Bitcoin"; +import { Shadow } from "react-native-shadow-2"; +import Toast from "../../components/Toast"; +import ToggleContainer from "./CurrencyToggle"; +import { UsNumberFormat } from "../../common/utilities"; +import VerifySatModalContents from "../Gift/VerifySatModalContents"; +import getAvatarForSubAccount from "../../utils/accounts/GetAvatarForSubAccountKind"; +import idx from "idx"; +import { platform } from "process"; +import { translations } from "../../common/content/LocContext"; +import { updateUserName } from "../../store/actions/storage"; +import useActiveAccountShells from "../../utils/hooks/state-selectors/accounts/UseActiveAccountShells"; +import useCurrencyCode from "../../utils/hooks/state-selectors/UseCurrencyCode"; +import useCurrencyKind from "../../utils/hooks/state-selectors/UseCurrencyKind"; +import useFormattedUnitText from "../../utils/hooks/formatting/UseFormattedUnitText"; +import usePrimarySubAccountForShell from "../../utils/hooks/account-utils/UsePrimarySubAccountForShell"; +import useSpendableBalanceForAccountShell from "../../utils/hooks/account-utils/UseSpendableBalanceForAccountShell"; +import LinearGradient from "react-native-linear-gradient"; -const { height } = Dimensions.get( 'window' ) +const { height } = Dimensions.get("window"); export type Props = { navigation: any; }; -const CreateGift = ( { navigation }: Props ) => { - const { selectedContact, statusFlag } = navigation?.state?.params - const dispatch = useDispatch() +const CreateGift = ({ navigation }: Props) => { + const { selectedContact, statusFlag } = navigation?.state?.params; + const dispatch = useDispatch(); const activeAccounts = useActiveAccountShells().filter( - ( shell ) => shell?.primarySubAccount.type !== AccountType.LIGHTNING_ACCOUNT - ) + (shell) => shell?.primarySubAccount.type !== AccountType.LIGHTNING_ACCOUNT + ); const currencyKind: CurrencyKind = useSelector( - ( state ) => state.preferences.giftCurrencyKind || CurrencyKind.BITCOIN - ) - const strings = translations[ 'accounts' ] - const prefersBitcoin = useMemo( () => { - return currencyKind === CurrencyKind.BITCOIN - }, [ currencyKind ] ) - const fiatCurrencyCode = useCurrencyCode() - const accountsState: AccountsState = useSelector( ( state ) => state.accounts ) - const currencyCode = useSelector( ( state ) => state.preferences.currencyCode ) - const exchangeRates = useSelector( ( state ) => state.accounts.exchangeRates ) - const [ amount, setAmount ] = useState( '' ) - const [ showKeyboard, setKeyboard ] = useState( false ) - const [ numbersOfGift, setNumbersOfGift ] = useState( 1 ) - const [ initGiftCreation, setInitGiftCreation ] = useState( false ) - const [ includeFees, setFees ] = useState( false ) - const [ addfNf, setAddfNf ] = useState( false ) - const [ giftModal, setGiftModal ] = useState( false ) - const [ createdGift, setCreatedGift ] = useState( null ) - const accountState: AccountsState = useSelector( ( state ) => - idx( state, ( _ ) => _.accounts ) - ) + (state) => state.preferences.giftCurrencyKind || CurrencyKind.BITCOIN + ); + const strings = translations["accounts"]; + const prefersBitcoin = useMemo(() => { + return currencyKind === CurrencyKind.BITCOIN; + }, [currencyKind]); + const fiatCurrencyCode = useCurrencyCode(); + const accountsState: AccountsState = useSelector((state) => state.accounts); + const currencyCode = useSelector((state) => state.preferences.currencyCode); + const exchangeRates = useSelector((state) => state.accounts.exchangeRates); + const [amount, setAmount] = useState(""); + const [showKeyboard, setKeyboard] = useState(false); + const [numbersOfGift, setNumbersOfGift] = useState(1); + const [initGiftCreation, setInitGiftCreation] = useState(false); + const [includeFees, setFees] = useState(false); + const [addfNf, setAddfNf] = useState(false); + const [giftModal, setGiftModal] = useState(false); + const [createdGift, setCreatedGift] = useState(null); + const accountState: AccountsState = useSelector((state) => + idx(state, (_) => _.accounts) + ); const giftCreationStatus = useSelector( - ( state ) => state.accounts.giftCreationStatus - ) - const sendMaxFee = useSelector( ( state ) => - idx( state, ( _ ) => _.sending.sendMaxFee ) - ) - const [ isSendMax, setIsSendMax ] = useState( false ) - const accountShells: AccountShell[] = accountState.accountShells - const [ showLoader, setShowLoader ] = useState( false ) - const [ accountListModal, setAccountListModal ] = useState( false ) - const [ advanceModal, setAdvanceModal ] = useState( false ) + (state) => state.accounts.giftCreationStatus + ); + const sendMaxFee = useSelector((state) => + idx(state, (_) => _.sending.sendMaxFee) + ); + const [isSendMax, setIsSendMax] = useState(false); + const accountShells: AccountShell[] = accountState.accountShells; + const [showLoader, setShowLoader] = useState(false); + const [accountListModal, setAccountListModal] = useState(false); + const [advanceModal, setAdvanceModal] = useState(false); const defaultGiftAccount = accountShells.find( - ( shell ) => + (shell) => shell.primarySubAccount.type == AccountType.CHECKING_ACCOUNT && shell.primarySubAccount.instanceNumber === 0 - ) - const [ selectedAccount, setSelectedAccount ]: [AccountShell, any] = - useState( defaultGiftAccount ) - const spendableBalance = useSpendableBalanceForAccountShell( selectedAccount ) + ); + const [selectedAccount, setSelectedAccount]: [AccountShell, any] = + useState(defaultGiftAccount); + const spendableBalance = useSpendableBalanceForAccountShell(selectedAccount); const account: Account = - accountState.accounts[ selectedAccount.primarySubAccount.id ] - const [ averageLowTxFee, setAverageLowTxFee ] = useState( 0 ) - const [ isExclusive, setIsExclusive ] = useState( true ) - const [ minimumGiftValue, setMinimumGiftValue ] = useState( 1000 ) - const [ showErrorLoader, setShowErrorLoader ] = useState( false ) - const [ satCard, setSatCard ] = useState( false ) - const [ showVerification, setShowVerification ] = useState( false ) + accountState.accounts[selectedAccount.primarySubAccount.id]; + const [averageLowTxFee, setAverageLowTxFee] = useState(0); + const [isExclusive, setIsExclusive] = useState(true); + const [minimumGiftValue, setMinimumGiftValue] = useState(1000); + const [showErrorLoader, setShowErrorLoader] = useState(false); + const [satCard, setSatCard] = useState(false); + const [showVerification, setShowVerification] = useState(false); - const [ name, setName ] = useState( '' ) - const wallet: Wallet = useSelector( ( state ) => state.storage.wallet ) + const [name, setName] = useState(""); + const wallet: Wallet = useSelector((state) => state.storage.wallet); - const currentSatsAmountFormValue = useMemo( () => { - return Number( amount ) - }, [ amount ] ) + const currentSatsAmountFormValue = useMemo(() => { + return Number(amount); + }, [amount]); - const [ dropdownBoxValue, setDropdownBoxValue ] = useState( { + const [dropdownBoxValue, setDropdownBoxValue] = useState({ id: GiftThemeId.ONE, - title: 'Gift Sats', - subText: 'Something that appreciates with time', + title: "Gift Sats", + subText: "Something that appreciates with time", avatar: , color: Colors.darkBlue, - } ) - + }); - useEffect( () => { - dispatch( sourceAccountSelectedForSending( defaultGiftAccount ) ) - }, [ defaultGiftAccount ] ) + useEffect(() => { + dispatch(sourceAccountSelectedForSending(defaultGiftAccount)); + }, [defaultGiftAccount]); - useEffect( () => { - let minimumGiftVal = 1000 - if ( includeFees ) minimumGiftVal += averageLowTxFee - setMinimumGiftValue( minimumGiftVal ) - }, [ includeFees ] ) + useEffect(() => { + let minimumGiftVal = 1000; + if (includeFees) minimumGiftVal += averageLowTxFee; + setMinimumGiftValue(minimumGiftVal); + }, [includeFees]); - useEffect( () => { - if ( numbersOfGift ) setFees( false ) - }, [ numbersOfGift ] ) + useEffect(() => { + if (numbersOfGift) setFees(false); + }, [numbersOfGift]); - useEffect( () => { - setName( wallet.userName ? wallet.userName : wallet.walletName ) - }, [ wallet.walletName, wallet.userName ] ) + useEffect(() => { + setName(wallet.userName ? wallet.userName : wallet.walletName); + }, [wallet.walletName, wallet.userName]); - function convertFiatToSats( fiatAmount: number ) { + function convertFiatToSats(fiatAmount: number) { return accountsState.exchangeRates && - accountsState.exchangeRates[ currencyCode ] + accountsState.exchangeRates[currencyCode] ? Math.trunc( - ( fiatAmount / accountsState.exchangeRates[ currencyCode ].last ) * + (fiatAmount / accountsState.exchangeRates[currencyCode].last) * SATOSHIS_IN_BTC - ) - : 0 + ) + : 0; } - function convertSatsToFiat( sats ) { + function convertSatsToFiat(sats) { return accountsState.exchangeRates && - accountsState.exchangeRates[ currencyCode ] + accountsState.exchangeRates[currencyCode] ? ( - ( sats / SATOSHIS_IN_BTC ) * - accountsState.exchangeRates[ currencyCode ].last - ).toFixed( 2 ) - : '0' + (sats / SATOSHIS_IN_BTC) * + accountsState.exchangeRates[currencyCode].last + ).toFixed(2) + : "0"; } - const isAmountInvalid = useMemo( () => { - let giftAmount = currentSatsAmountFormValue - console.log( giftAmount ) + const isAmountInvalid = useMemo(() => { + let giftAmount = currentSatsAmountFormValue; + console.log(giftAmount); - const numberOfGifts = numbersOfGift ? Number( numbersOfGift ) : 1 - if ( prefersBitcoin ) { - if ( !includeFees && averageLowTxFee ) giftAmount += averageLowTxFee - return giftAmount * numberOfGifts > spendableBalance + const numberOfGifts = numbersOfGift ? Number(numbersOfGift) : 1; + if (prefersBitcoin) { + if (!includeFees && averageLowTxFee) giftAmount += averageLowTxFee; + return giftAmount * numberOfGifts > spendableBalance; } else { - const giftAmountInFiat = giftAmount ? giftAmount : 1 + const giftAmountInFiat = giftAmount ? giftAmount : 1; const spendableBalanceInFiat = parseFloat( - convertSatsToFiat( spendableBalance ) - ) - return giftAmountInFiat * numberOfGifts > spendableBalanceInFiat + convertSatsToFiat(spendableBalance) + ); + return giftAmountInFiat * numberOfGifts > spendableBalanceInFiat; } }, [ currentSatsAmountFormValue, @@ -223,130 +225,130 @@ const CreateGift = ( { navigation }: Props ) => { prefersBitcoin, numbersOfGift, currencyKind, - ] ) + ]); - useEffect( () => { + useEffect(() => { if ( accountsState.selectedGiftId && initGiftCreation && giftCreationStatus ) { const createdGift = accountsState.gifts - ? accountsState.gifts[ accountsState.selectedGiftId ] - : null - if ( createdGift ) { - setCreatedGift( createdGift ) - setGiftModal( true ) - setInitGiftCreation( false ) - setShowLoader( false ) - setShowErrorLoader( false ) - dispatch( giftCreationSuccess( null ) ) + ? accountsState.gifts[accountsState.selectedGiftId] + : null; + if (createdGift) { + setCreatedGift(createdGift); + setGiftModal(true); + setInitGiftCreation(false); + setShowLoader(false); + setShowErrorLoader(false); + dispatch(giftCreationSuccess(null)); } } - }, [ accountsState.selectedGiftId, initGiftCreation, giftCreationStatus ] ) + }, [accountsState.selectedGiftId, initGiftCreation, giftCreationStatus]); - useEffect( () => { - if ( statusFlag == 'Invitation' ) { + useEffect(() => { + if (statusFlag == "Invitation") { if ( accountsState.selectedGiftId && initGiftCreation && giftCreationStatus ) { const createdGift = accountsState.gifts - ? accountsState.gifts[ accountsState.selectedGiftId ] - : null - if ( createdGift ) { - setCreatedGift( createdGift ) - setShowLoader( false ) - navigation.replace( 'SendGift', { - fromScreen: 'Gift', + ? accountsState.gifts[accountsState.selectedGiftId] + : null; + if (createdGift) { + setCreatedGift(createdGift); + setShowLoader(false); + navigation.replace("SendGift", { + fromScreen: "Gift", selectedContact: selectedContact, - giftId: ( createdGift as Gift ).id, + giftId: (createdGift as Gift).id, encryptionType: DeepLinkEncryptionType.OTP, - note: 'Bitcoin is a new type of money that is not controlled by any government or company', + note: "Bitcoin is a new type of money that is not controlled by any government or company", contact: selectedContact, senderName: name, themeId: dropdownBoxValue?.id ?? GiftThemeId.ONE, setActiveTab: navigation.state.params.setActiveTab, - } ) + }); } } } - }, [ accountsState.selectedGiftId, giftCreationStatus, initGiftCreation ] ) + }, [accountsState.selectedGiftId, giftCreationStatus, initGiftCreation]); - useEffect( () => { - setInitGiftCreation( false ) - setShowLoader( false ) - if ( giftCreationStatus ) { - dispatch( giftCreationSuccess( null ) ) - } else if ( giftCreationStatus === false ) { + useEffect(() => { + setInitGiftCreation(false); + setShowLoader(false); + if (giftCreationStatus) { + dispatch(giftCreationSuccess(null)); + } else if (giftCreationStatus === false) { // failed to create gift - setShowLoader( false ) - setShowErrorLoader( true ) - dispatch( giftCreationSuccess( null ) ) + setShowLoader(false); + setShowErrorLoader(true); + dispatch(giftCreationSuccess(null)); } - }, [ giftCreationStatus ] ) + }, [giftCreationStatus]); - useEffect( () => { - if ( isSendMax && sendMaxFee ) setAverageLowTxFee( sendMaxFee ) - else if ( account && accountState.averageTxFees ) + useEffect(() => { + if (isSendMax && sendMaxFee) setAverageLowTxFee(sendMaxFee); + else if (account && accountState.averageTxFees) setAverageLowTxFee( - accountState.averageTxFees[ account.networkType ][ TxPriority.LOW ] + accountState.averageTxFees[account.networkType][TxPriority.LOW] .averageTxFee - ) - }, [ account, accountState.averageTxFees, isSendMax, sendMaxFee ] ) + ); + }, [account, accountState.averageTxFees, isSendMax, sendMaxFee]); - useEffect( () => { - if ( isSendMax && sendMaxFee ) setAverageLowTxFee( sendMaxFee ) - else if ( account && accountState.averageTxFees ) + useEffect(() => { + if (isSendMax && sendMaxFee) setAverageLowTxFee(sendMaxFee); + else if (account && accountState.averageTxFees) setAverageLowTxFee( - accountState.averageTxFees[ account.networkType ][ TxPriority.LOW ] + accountState.averageTxFees[account.networkType][TxPriority.LOW] .averageTxFee - ) - }, [ account, accountState.averageTxFees, isSendMax, sendMaxFee ] ) + ); + }, [account, accountState.averageTxFees, isSendMax, sendMaxFee]); - const numberWithCommas = ( x ) => { - return x ? x.toString().replace( /\B(?=(\d{3})+(?!\d))/g, ',' ) : '' - } + const numberWithCommas = (x) => { + return x ? x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",") : ""; + }; - useEffect( () => { - if ( isSendMax ) setAmount( `${spendableBalance - sendMaxFee}` ) - }, [ sendMaxFee, isSendMax ] ) + useEffect(() => { + if (isSendMax) setAmount(`${spendableBalance - sendMaxFee}`); + }, [sendMaxFee, isSendMax]); - useEffect( () => { - if ( currencyKind == CurrencyKind.BITCOIN ) { - const newAmount = convertFiatToSats( parseFloat( amount ) ).toString() - setAmount( newAmount == 'NaN' ? '' : newAmount ) - } else if ( currencyKind == CurrencyKind.FIAT ) { - const newAmount = convertSatsToFiat( parseFloat( amount ) ).toString() - setAmount( newAmount == 'NaN' ? '' : newAmount ) + useEffect(() => { + if (currencyKind == CurrencyKind.BITCOIN) { + const newAmount = convertFiatToSats(parseFloat(amount)).toString(); + setAmount(newAmount == "NaN" ? "" : newAmount); + } else if (currencyKind == CurrencyKind.FIAT) { + const newAmount = convertSatsToFiat(parseFloat(amount)).toString(); + setAmount(newAmount == "NaN" ? "" : newAmount); } - }, [ currencyKind ] ) + }, [currencyKind]); function handleSendMaxPress() { dispatch( - calculateSendMaxFee( { - numberOfRecipients: Number( numbersOfGift ), + calculateSendMaxFee({ + numberOfRecipients: Number(numbersOfGift), accountShell: selectedAccount, - } ) - ) - setIsSendMax( true ) + }) + ); + setIsSendMax(true); } - const renderButton = ( text, condn ) => { + const renderButton = (text, condn) => { const availableToSpend = selectedAccount && selectedAccount.primarySubAccount?.balances?.confirmed ? selectedAccount.primarySubAccount?.balances?.confirmed - : 0 + : 0; - let isDisabled = isAmountInvalid - if ( !isDisabled ) { - if ( prefersBitcoin ) { - isDisabled = currentSatsAmountFormValue < minimumGiftValue + let isDisabled = isAmountInvalid; + if (!isDisabled) { + if (prefersBitcoin) { + isDisabled = currentSatsAmountFormValue < minimumGiftValue; } else { isDisabled = currentSatsAmountFormValue < - parseFloat( convertSatsToFiat( minimumGiftValue ) ) + parseFloat(convertSatsToFiat(minimumGiftValue)); } } @@ -354,127 +356,130 @@ const CreateGift = ( { navigation }: Props ) => { { - if ( satCard ) { - setShowVerification( true ) + if (satCard) { + setShowVerification(true); } else { - console.log( 'condn', condn ) - const giftInstances = Number( numbersOfGift ) + console.log("condn", condn); + const giftInstances = Number(numbersOfGift); const giftAmountInSats = prefersBitcoin - ? Number( amount ) - : convertFiatToSats( parseFloat( amount ) ) - const giftAmountsInSats = [] - for ( let int = 0; int < giftInstances; int++ ) { - giftAmountsInSats.push( giftAmountInSats ) + ? Number(amount) + : convertFiatToSats(parseFloat(amount)); + const giftAmountsInSats = []; + for (let int = 0; int < giftInstances; int++) { + giftAmountsInSats.push(giftAmountInSats); } - switch ( condn ) { - case 'Invitation': - if ( giftAmountsInSats.length ) { - setInitGiftCreation( true ) - setShowLoader( true ) - dispatch( - generateGifts( { - amounts: giftAmountsInSats, - accountId: - selectedAccount && - selectedAccount.primarySubAccount && - selectedAccount.primarySubAccount.id - ? selectedAccount.primarySubAccount.id - : '', - includeFee: includeFees, - exclusiveGifts: - giftAmountsInSats.length === 1 ? false : isExclusive, - } ) - ) - } - break - case 'Create Gift': - // creating multiple gift instances(based on giftInstances) of the same amount - if ( giftAmountsInSats.length ) { - setInitGiftCreation( true ) - setShowLoader( true ) - dispatch( - generateGifts( { - amounts: giftAmountsInSats, - accountId: - selectedAccount && - selectedAccount.primarySubAccount && - selectedAccount.primarySubAccount.id - ? selectedAccount.primarySubAccount.id - : '', - includeFee: includeFees, - exclusiveGifts: - giftAmountsInSats.length === 1 ? false : isExclusive, - } ) - ) - } - break + switch (condn) { + case "Invitation": + if (giftAmountsInSats.length) { + setInitGiftCreation(true); + setShowLoader(true); + dispatch( + generateGifts({ + amounts: giftAmountsInSats, + accountId: + selectedAccount && + selectedAccount.primarySubAccount && + selectedAccount.primarySubAccount.id + ? selectedAccount.primarySubAccount.id + : "", + includeFee: includeFees, + exclusiveGifts: + giftAmountsInSats.length === 1 ? false : isExclusive, + }) + ); + } + break; + case "Create Gift": + // creating multiple gift instances(based on giftInstances) of the same amount + if (giftAmountsInSats.length) { + setInitGiftCreation(true); + setShowLoader(true); + dispatch( + generateGifts({ + amounts: giftAmountsInSats, + accountId: + selectedAccount && + selectedAccount.primarySubAccount && + selectedAccount.primarySubAccount.id + ? selectedAccount.primarySubAccount.id + : "", + includeFee: includeFees, + exclusiveGifts: + giftAmountsInSats.length === 1 ? false : isExclusive, + }) + ); + } + break; - case 'Add F&F and Send': - setGiftModal( false ) - navigation.navigate( 'AddContact', { - fromScreen: 'Gift', - giftId: ( createdGift as Gift ).id, - setActiveTab: navigation.state.params.setActiveTab, - } ) - break + case "Add F&F and Send": + setGiftModal(false); + navigation.navigate("AddContact", { + fromScreen: "Gift", + giftId: (createdGift as Gift).id, + setActiveTab: navigation.state.params.setActiveTab, + }); + break; - case 'Send Gift': - setGiftModal( false ) - navigation.navigate( 'EnterGiftDetails', { - giftId: ( createdGift as Gift ).id, - setActiveTab: navigation.state.params.setActiveTab, - } ) - break + case "Send Gift": + setGiftModal(false); + navigation.navigate("EnterGiftDetails", { + giftId: (createdGift as Gift).id, + setActiveTab: navigation.state.params.setActiveTab, + }); + break; } } }} - > - {text} - ) - } + ); + }; const onCloseClick = () => { - setShowVerification( false ) - } + setShowVerification(false); + }; const onVerifyClick = () => { - setShowVerification( false ) - navigation.navigate( 'SetUpSatNextCard', { - giftAmount: includeFees ? JSON.stringify( parseInt( amount ) - 226 ) : amount, + setShowVerification(false); + navigation.navigate("SetUpSatNextCard", { + giftAmount: includeFees ? JSON.stringify(parseInt(amount) - 226) : amount, fromClaimFlow: 0, - } ) - } + }); + }; - function onPressNumber( text ) { - let tmpPasscode = amount - if ( text != 'x' ) { - tmpPasscode += text - setAmount( tmpPasscode ) + function onPressNumber(text) { + let tmpPasscode = amount; + if (text != "x") { + tmpPasscode += text; + setAmount(tmpPasscode); } - if ( amount && text == 'x' ) { - setAmount( amount.slice( 0, -1 ) ) + if (amount && text == "x") { + setAmount(amount.slice(0, -1)); } - if ( isSendMax ) setIsSendMax( false ) + if (isSendMax) setIsSendMax(false); } const renderCreateGiftModal = () => { @@ -482,11 +487,11 @@ const CreateGift = ( { navigation }: Props ) => { @@ -494,19 +499,19 @@ const CreateGift = ( { navigation }: Props ) => { { - setGiftModal( false ) - navigation.goBack() + setGiftModal(false); + navigation.goBack(); }} style={{ - width: wp( 7 ), - height: wp( 7 ), - borderRadius: wp( 7 / 2 ), - alignSelf: 'flex-end', + width: wp(7), + height: wp(7), + borderRadius: wp(7 / 2), + alignSelf: "flex-end", backgroundColor: Colors.THEAM_TEXT_COLOR, - alignItems: 'center', - justifyContent: 'center', - marginTop: wp( 3 ), - marginRight: wp( 3 ), + alignItems: "center", + justifyContent: "center", + marginTop: wp(3), + marginRight: wp(3), }} > { Gift Created @@ -532,30 +537,30 @@ const CreateGift = ( { navigation }: Props ) => { ...styles.modalInfoText, }} > - {'You\'re ready to elate!'} + {"You're ready to elate!"} } - currencyCode={prefersBitcoin ? '' : currencyCode} + currencyCode={prefersBitcoin ? "" : currencyCode} /> @@ -591,70 +596,68 @@ const CreateGift = ( { navigation }: Props ) => { */} - {renderButton( 'Send Gift', addfNf ? 'Add F&F and Send' : 'Send Gift' )} + {renderButton("Send Gift", addfNf ? "Add F&F and Send" : "Send Gift")} {/* {renderButton( 'Add F&F and Send' )} */} - ) - } + ); + }; const BalanceCurrencyIcon = () => { - const style = { - } + const style = {}; - if ( prefersBitcoin ) { + if (prefersBitcoin) { return ( - ) + ); } - if ( materialIconCurrencyCodes.includes( fiatCurrencyCode ) ) { + if (materialIconCurrencyCodes.includes(fiatCurrencyCode)) { return ( - ) + ); } else { return ( - ) + ); } - } + }; const renderAccountList = () => { return ( - {activeAccounts.map( ( item, index ) => { + {activeAccounts.map((item, index) => { if ( - [ AccountType.TEST_ACCOUNT, AccountType.SWAN_ACCOUNT ].includes( + [AccountType.TEST_ACCOUNT, AccountType.SWAN_ACCOUNT].includes( item.primarySubAccount.type ) || !item.primarySubAccount.isUsable || item.primarySubAccount.isTFAEnabled ) - return + return; return ( { backgroundColor: Colors.white, }} > - {accountElement( item, () => { - setSelectedAccount( item ) - setAccountListModal( false ) - } )} + {accountElement(item, () => { + setSelectedAccount(item); + setAccountListModal(false); + })} - ) - } )} + ); + })} - ) - } + ); + }; - const AdvanceGiftOptions = ( { title, stateToUpdate, imageToShow } ) => { - const [ timer, SetTimer ] = useState( null ) - const [ counter, SetCounter ] = useState( numbersOfGift ) - const [ timeLock, setTimeLock ] = useState( 1 ) - const [ limitedValidity, setLimitedValidity ] = useState( 1 ) + const AdvanceGiftOptions = ({ title, stateToUpdate, imageToShow }) => { + const [timer, SetTimer] = useState(null); + const [counter, SetCounter] = useState(numbersOfGift); + const [timeLock, setTimeLock] = useState(1); + const [limitedValidity, setLimitedValidity] = useState(1); - let flag = null + let flag = null; const handleTimer = () => { - flag == true ? plus() : flag == false && minus() - flag !== null && SetTimer( () => setTimeout( () => handleTimer(), 500 ) ) - } + flag == true ? plus() : flag == false && minus(); + flag !== null && SetTimer(() => setTimeout(() => handleTimer(), 500)); + }; const stopTimer = () => { - flag = null - SetTimer( null ) - clearTimeout( timer ) - setNumbersOfGift( counter ) - } + flag = null; + SetTimer(null); + clearTimeout(timer); + setNumbersOfGift(counter); + }; const plus = () => { - if ( stateToUpdate == 'gift' ) { - SetCounter( ( prev ) => prev + 1 ) - } else if ( stateToUpdate == 'timeLock' ) { - setTimeLock( timeLock + 1 ) - } else if ( stateToUpdate == 'limitedValidity' ) { - setLimitedValidity( limitedValidity + 1 ) + if (stateToUpdate == "gift") { + SetCounter((prev) => prev + 1); + } else if (stateToUpdate == "timeLock") { + setTimeLock(timeLock + 1); + } else if (stateToUpdate == "limitedValidity") { + setLimitedValidity(limitedValidity + 1); } - } + }; const minus = () => { - if ( stateToUpdate == 'gift' ) { - if ( counter > 1 ) SetCounter( ( prev ) => prev - 1 ) - } else if ( stateToUpdate == 'timeLock' ) { - if ( timeLock > 1 ) setTimeLock( timeLock - 1 ) - } else if ( stateToUpdate == 'limitedValidity' ) { - if ( limitedValidity > 1 ) setLimitedValidity( limitedValidity - 1 ) + if (stateToUpdate == "gift") { + if (counter > 1) SetCounter((prev) => prev - 1); + } else if (stateToUpdate == "timeLock") { + if (timeLock > 1) setTimeLock(timeLock - 1); + } else if (stateToUpdate == "limitedValidity") { + if (limitedValidity > 1) setLimitedValidity(limitedValidity - 1); } - } + }; return ( @@ -750,64 +753,64 @@ const CreateGift = ( { navigation }: Props ) => { Gift Sats created will be of the - {' '} + {" "} same amount - {' '} + {" "} and can be - {' '} + {" "} sent separately { - flag = false - handleTimer() + flag = false; + handleTimer(); }} onPressOut={() => stopTimer()} style={{ - width: wp( '5%' ), - height: wp( '5%' ), - borderRadius: wp( '5%' ) / 2, + width: wp("5%"), + height: wp("5%"), + borderRadius: wp("5%") / 2, backgroundColor: Colors.THEAM_TEXT_COLOR, - justifyContent: 'center', - alignItems: 'center', - marginRight: wp( '4%' ), + justifyContent: "center", + alignItems: "center", + marginRight: wp("4%"), }} > { style={{ color: Colors.black, fontFamily: Fonts.Regular, - fontSize: RFValue( 18 ), + fontSize: RFValue(18), }} > - {stateToUpdate == 'gift' + {stateToUpdate == "gift" ? counter - : stateToUpdate == 'timeLock' - ? timeLock - : limitedValidity} + : stateToUpdate == "timeLock" + ? timeLock + : limitedValidity} { - flag = true - handleTimer() + flag = true; + handleTimer(); }} onPressOut={() => stopTimer()} style={{ - width: wp( '5%' ), - height: wp( '5%' ), - borderRadius: wp( '5%' ) / 2, + width: wp("5%"), + height: wp("5%"), + borderRadius: wp("5%") / 2, backgroundColor: Colors.THEAM_TEXT_COLOR, - justifyContent: 'center', - alignItems: 'center', - marginLeft: wp( '4%' ), + justifyContent: "center", + alignItems: "center", + marginLeft: wp("4%"), }} > @@ -853,9 +856,9 @@ const CreateGift = ( { navigation }: Props ) => { setIsExclusive( !isExclusive )} + onPress={() => setIsExclusive(!isExclusive)} style={{ - flexDirection: 'row', + flexDirection: "row", marginVertical: 7, }} > @@ -872,50 +875,50 @@ const CreateGift = ( { navigation }: Props ) => { - {'Make each gift exclusive\n'} + {"Make each gift exclusive\n"} - (Restricts the gift to{' '} + (Restricts the gift to{" "} one per Bitcoin Tribe app - {' '} + {" "} ) - ) - } + ); + }; const renderAdvanceModal = () => { return ( setAdvanceModal( false )} + onPress={() => setAdvanceModal(false)} style={styles.modalCrossButton} > @@ -924,13 +927,13 @@ const CreateGift = ( { navigation }: Props ) => { @@ -941,10 +944,10 @@ const CreateGift = ( { navigation }: Props ) => { }}>Lorem ipsum dolor Lorem dolor sit amet, consectetur dolor sit */} {/* { imageToShow={require( '../../assets/images/icons/validity.png' )} /> */} - ) - } + ); + }; // gift creation failure UI @@ -977,18 +980,18 @@ const CreateGift = ( { navigation }: Props ) => { { - setShowErrorLoader( false ) + setShowErrorLoader(false); }} style={styles.modalCrossButton} > @@ -998,16 +1001,16 @@ const CreateGift = ( { navigation }: Props ) => { { style={{ color: Colors.gray3, marginBottom: 10, - fontSize: RFValue( 12 ), + fontSize: RFValue(12), fontFamily: Fonts.Regular, }} > @@ -1028,57 +1031,57 @@ const CreateGift = ( { navigation }: Props ) => { {accountElement( selectedAccount, () => {}, 1, - '90%', - 'Bitcoin not deducted' + "90%", + "Bitcoin not deducted" )} { - setShowErrorLoader( false ) + setShowErrorLoader(false); }} > Try again - ) - } + ); + }; const accountElement = ( item, onPressCallBack, activeOpacity = 0, - width = '90%', + width = "90%", message = `${ - currencyKind === CurrencyKind.BITCOIN ? 'Sats' : 'Money' + currencyKind === CurrencyKind.BITCOIN ? "Sats" : "Money" } would be deducted from` ) => { return ( @@ -1092,37 +1095,37 @@ const CreateGift = ( { navigation }: Props ) => { > - {getAvatarForSubAccount( item.primarySubAccount, false, true )} + {getAvatarForSubAccount(item.primarySubAccount, false, true)} @@ -1131,7 +1134,7 @@ const CreateGift = ( { navigation }: Props ) => { @@ -1139,22 +1142,22 @@ const CreateGift = ( { navigation }: Props ) => { item.primarySubAccount.defaultTitle} - {'Available to spend: '} + {"Available to spend: "} {prefersBitcoin ? UsNumberFormat( - item.primarySubAccount?.balances?.confirmed - ) + item.primarySubAccount?.balances?.confirmed + ) : accountsState.exchangeRates && - accountsState.exchangeRates[ currencyCode ] - ? ( - ( item.primarySubAccount?.balances?.confirmed / - SATOSHIS_IN_BTC ) * - accountsState.exchangeRates[ currencyCode ].last - ).toFixed( 2 ) - : 0} + accountsState.exchangeRates[currencyCode] + ? ( + (item.primarySubAccount?.balances?.confirmed / + SATOSHIS_IN_BTC) * + accountsState.exchangeRates[currencyCode].last + ).toFixed(2) + : 0} - {prefersBitcoin ? ' sats' : ` ${fiatCurrencyCode}`} + {prefersBitcoin ? " sats" : ` ${fiatCurrencyCode}`} {activeOpacity === 0 && ( @@ -1163,15 +1166,15 @@ const CreateGift = ( { navigation }: Props ) => { size={24} color="gray" style={{ - alignSelf: 'center', + alignSelf: "center", }} /> )} - ) - } + ); + }; return ( { /> {giftModal && ( setGiftModal( false )} + onBackground={() => setGiftModal(false)} visible={giftModal} closeBottomSheet={() => {}} > @@ -1199,21 +1202,21 @@ const CreateGift = ( { navigation }: Props ) => { CommonStyles.headerContainer, { backgroundColor: Colors.backgroundColor, - marginRight: wp( 4 ), - marginVertical: height < 720 ? wp( 0 ) : 'auto', + marginRight: wp(4), + marginVertical: height < 720 ? wp(0) : "auto", }, ]} > { - navigation.goBack() + navigation.goBack(); }} > @@ -1222,8 +1225,8 @@ const CreateGift = ( { navigation }: Props ) => { { > - {'Create Gift'} + {"Create Gift"} setAdvanceModal( true )} + onPress={() => setAdvanceModal(true)} > - {accountElement( selectedAccount, () => - setAccountListModal( !accountListModal ) + {accountElement(selectedAccount, () => + setAccountListModal(!accountListModal) )} { - if( showKeyboard ) return - setKeyboard( true ) + if (showKeyboard) return; + setKeyboard(true); }} > {currencyKind == CurrencyKind.FIAT ? amount - : UsNumberFormat( amount ) === '0' - ? '' - : UsNumberFormat( amount )} + : UsNumberFormat(amount) === "0" + ? "" + : UsNumberFormat(amount)} {!showKeyboard && !amount && ( {`Enter amount in ${ - prefersBitcoin ? 'sats' : `${fiatCurrencyCode}` + prefersBitcoin ? "sats" : `${fiatCurrencyCode}` }`} )} @@ -1331,7 +1334,7 @@ const CreateGift = ( { navigation }: Props ) => { | @@ -1339,7 +1342,7 @@ const CreateGift = ( { navigation }: Props ) => { )} - {Number( numbersOfGift ) === 1 && ( + {Number(numbersOfGift) === 1 && ( { @@ -1366,12 +1369,12 @@ const CreateGift = ( { navigation }: Props ) => { { { style={{ color: Colors.black, fontFamily: Fonts.Regular, - fontSize: RFValue( 12 ), + fontSize: RFValue(12), }} > - x{' '} + x{" "} {numbersOfGift} @@ -1407,9 +1410,9 @@ const CreateGift = ( { navigation }: Props ) => { style={{ color: Colors.black, fontFamily: Fonts.Regular, - fontSize: RFValue( 12 ), - marginLeft: 'auto', - marginTop: hp( '0.5%' ), + fontSize: RFValue(12), + marginLeft: "auto", + marginTop: hp("0.5%"), }} > gifts @@ -1421,17 +1424,17 @@ const CreateGift = ( { navigation }: Props ) => { @@ -1439,37 +1442,37 @@ const CreateGift = ( { navigation }: Props ) => { {prefersBitcoin ? ( - ) : materialIconCurrencyCodes.includes( fiatCurrencyCode ) ? ( + ) : materialIconCurrencyCodes.includes(fiatCurrencyCode) ? ( ) : ( @@ -1477,32 +1480,32 @@ const CreateGift = ( { navigation }: Props ) => { style={{ ...styles.cardBitCoinImage, }} - source={getCurrencyImageByRegion( fiatCurrencyCode, 'light' )} + source={getCurrencyImageByRegion(fiatCurrencyCode, "light")} /> )} {prefersBitcoin - ? UsNumberFormat( parseInt( amount ) * numbersOfGift ) - : exchangeRates && exchangeRates[ currencyCode ] - ? ( - ( ( parseInt( amount ) * numbersOfGift ) / SATOSHIS_IN_BTC ) * - exchangeRates[ currencyCode ].last - ).toFixed( 2 ) - : ''} + ? UsNumberFormat(parseInt(amount) * numbersOfGift) + : exchangeRates && exchangeRates[currencyCode] + ? ( + ((parseInt(amount) * numbersOfGift) / SATOSHIS_IN_BTC) * + exchangeRates[currencyCode].last + ).toFixed(2) + : ""} - {prefersBitcoin ? 'sats' : fiatCurrencyCode} + {prefersBitcoin ? "sats" : fiatCurrencyCode} ) : null} {/* { - {'Minimum gift value '} + {"Minimum gift value "} {prefersBitcoin ? minimumGiftValue - : convertSatsToFiat( minimumGiftValue )}{' '} - {prefersBitcoin ? 'sats' : currencyCode} + : convertSatsToFiat(minimumGiftValue)}{" "} + {prefersBitcoin ? "sats" : currencyCode} {/* */} { style={{ transform: [ { - scaleX: Platform.OS == 'ios' ? 0.5 : 0.7, + scaleX: Platform.OS == "ios" ? 0.5 : 0.7, }, { - scaleY: Platform.OS == 'ios' ? 0.5 : 0.7, + scaleY: Platform.OS == "ios" ? 0.5 : 0.7, }, ], }} trackColor={{ - false: '#C4C4C4', + false: "#C4C4C4", true: Colors.blue, }} - thumbColor={includeFees ? '#fff' : '#fff'} + thumbColor={includeFees ? "#fff" : "#fff"} ios_backgroundColor="#3e3e3e" - onValueChange={( value ) => { - setFees( value ) + onValueChange={(value) => { + setFees(value); }} /> - {'Include '} + {"Include "} - {'Fee'} + {"Fee"} - {isAmountInvalid ? strings.Insufficient : ''} + {isAmountInvalid ? strings.Insufficient : ""} { // ( Number( numbersOfGift ) === 1 ) && !isSendMax && ( - - setSatCard( !satCard )} - disabled={numbersOfGift ? Number( numbersOfGift ) < 1 : false} + + setSatCard(!satCard)} + disabled={numbersOfGift ? Number(numbersOfGift) < 1 : false} style={{ - flexDirection: 'row' + flexDirection: "row", }} > - {satCard && - - } + {satCard && ( + + )} - + Use SATSCARD™ to gift sats @@ -1625,17 +1634,17 @@ const CreateGift = ( { navigation }: Props ) => { } @@ -1645,74 +1654,74 @@ const CreateGift = ( { navigation }: Props ) => { - {Number( amount ) * numbersOfGift} + {Number(amount) * numbersOfGift} - {prefersBitcoin ? ' sats' : ` ${currencyCode}`} + {prefersBitcoin ? " sats" : ` ${currencyCode}`} {statusFlag - ? renderButton( 'Create Gifts', 'Invitation' ) + ? renderButton("Create Gifts", "Invitation") : renderButton( - numbersOfGift > 1 ? 'Create Gifts' : 'Create Gift', - 'Create Gift' - )} + numbersOfGift > 1 ? "Create Gifts" : "Create Gift", + "Create Gift" + )} {showKeyboard && ( onPressNumber( '1' )} + onPress={() => onPressNumber("1")} style={styles.keyPadElementTouchable} > onPressNumber( '1' )} + onPress={() => onPressNumber("1")} > 1 onPressNumber( '2' )} + onPress={() => onPressNumber("2")} style={styles.keyPadElementTouchable} > onPressNumber( '2' )} + onPress={() => onPressNumber("2")} > 2 onPressNumber( '3' )} + onPress={() => onPressNumber("3")} style={styles.keyPadElementTouchable} > onPressNumber( '3' )} + onPress={() => onPressNumber("3")} > 3 @@ -1720,34 +1729,34 @@ const CreateGift = ( { navigation }: Props ) => { onPressNumber( '4' )} + onPress={() => onPressNumber("4")} style={styles.keyPadElementTouchable} > onPressNumber( '4' )} + onPress={() => onPressNumber("4")} > 4 onPressNumber( '5' )} + onPress={() => onPressNumber("5")} style={styles.keyPadElementTouchable} > onPressNumber( '5' )} + onPress={() => onPressNumber("5")} > 5 onPressNumber( '6' )} + onPress={() => onPressNumber("6")} style={styles.keyPadElementTouchable} > onPressNumber( '6' )} + onPress={() => onPressNumber("6")} > 6 @@ -1755,34 +1764,34 @@ const CreateGift = ( { navigation }: Props ) => { onPressNumber( '7' )} + onPress={() => onPressNumber("7")} style={styles.keyPadElementTouchable} > onPressNumber( '7' )} + onPress={() => onPressNumber("7")} > 7 onPressNumber( '8' )} + onPress={() => onPressNumber("8")} style={styles.keyPadElementTouchable} > onPressNumber( '8' )} + onPress={() => onPressNumber("8")} > 8 onPressNumber( '9' )} + onPress={() => onPressNumber("9")} style={styles.keyPadElementTouchable} > onPressNumber( '9' )} + onPress={() => onPressNumber("9")} > 9 @@ -1798,23 +1807,23 @@ const CreateGift = ( { navigation }: Props ) => { > onPressNumber( '0' )} + onPress={() => onPressNumber("0")} style={styles.keyPadElementTouchable} > onPressNumber( '0' )} + onPress={() => onPressNumber("0")} > 0 onPressNumber( 'x' )} + onPress={() => onPressNumber("x")} style={styles.keyPadElementTouchable} > onPressNumber( 'x' )} + onPress={() => onPressNumber("x")} > { )} setAccountListModal( false )} + onBackground={() => setAccountListModal(false)} visible={accountListModal} - closeBottomSheet={() => setAccountListModal( false )} + closeBottomSheet={() => setAccountListModal(false)} > {renderAccountList()} setAdvanceModal( false )} + onBackground={() => setAdvanceModal(false)} visible={advanceModal} - closeBottomSheet={() => setAdvanceModal( false )} + closeBottomSheet={() => setAdvanceModal(false)} > {renderAdvanceModal()} setShowLoader( false )} + onBackground={() => setShowLoader(false)} visible={showLoader} - closeBottomSheet={() => setShowLoader( false )} + closeBottomSheet={() => setShowLoader(false)} > setShowLoader( false )} + onBackground={() => setShowLoader(false)} visible={showErrorLoader} > {renderErrorModal()} @@ -1869,70 +1878,70 @@ const CreateGift = ( { navigation }: Props ) => { closeBottomSheet={onCloseClick} > - ) -} + ); +}; -const styles = StyleSheet.create( { +const styles = StyleSheet.create({ keyPadRow: { - flexDirection: 'row', - height: hp( '7%' ), + flexDirection: "row", + height: hp("7%"), }, errorText: { fontFamily: Fonts.MediumItalic, color: Colors.red, - fontSize: RFValue( 11, 812 ), - fontStyle: 'italic', + fontSize: RFValue(11, 812), + fontStyle: "italic", }, keyPadElementTouchable: { flex: 1, - height: hp( '8%' ), - fontSize: RFValue( 18 ), - justifyContent: 'center', - alignItems: 'center', + height: hp("8%"), + fontSize: RFValue(18), + justifyContent: "center", + alignItems: "center", }, keyPadElementText: { color: Colors.blue, - fontSize: RFValue( 25 ), + fontSize: RFValue(25), fontFamily: Fonts.Regular, - fontStyle: 'normal', + fontStyle: "normal", }, cardBitCoinImage: { - width: wp( '3.5%' ), - height: wp( '3.5%' ), + width: wp("3.5%"), + height: wp("3.5%"), marginRight: 5, - resizeMode: 'contain', + resizeMode: "contain", // marginBottom: wp( '0.7%' ), }, modalTitleText: { color: Colors.blue, - fontSize: RFValue( 18 ), + fontSize: RFValue(18), fontFamily: Fonts.Regular, letterSpacing: 0.54, }, modalInfoText: { color: Colors.textColorGrey, - fontSize: RFValue( 12 ), + fontSize: RFValue(12), fontFamily: Fonts.Regular, - marginRight: wp( 10 ), + marginRight: wp(10), letterSpacing: 0.6, - marginBottom: hp( 2 ), + marginBottom: hp(2), }, modalContentContainer: { backgroundColor: Colors.backgroundColor, - paddingBottom: hp( 4 ), + paddingBottom: hp(4), }, viewContainer: { flex: 1, @@ -1940,23 +1949,23 @@ const styles = StyleSheet.create( { }, buttonText: { color: Colors.white, - fontSize: RFValue( 13 ), + fontSize: RFValue(13), fontFamily: Fonts.Medium, }, buttonView: { - height: wp( '12%' ), - width: wp( '27%' ), - paddingHorizontal: wp( 2 ), - justifyContent: 'center', - alignItems: 'center', + height: wp("12%"), + width: wp("27%"), + paddingHorizontal: wp(2), + justifyContent: "center", + alignItems: "center", borderRadius: 8, backgroundColor: Colors.blue, }, disabledButtonView: { - height: wp( '12%' ), - width: wp( '27%' ), - justifyContent: 'center', - alignItems: 'center', + height: wp("12%"), + width: wp("27%"), + justifyContent: "center", + alignItems: "center", borderRadius: 8, backgroundColor: Colors.THEAM_TEXT_COLOR, }, @@ -1965,8 +1974,8 @@ const styles = StyleSheet.create( { height: 18, borderRadius: 9, backgroundColor: Colors.white, - justifyContent: 'center', - alignItems: 'center', + justifyContent: "center", + alignItems: "center", elevation: 6, shadowOpacity: 0.1, shadowOffset: { @@ -1976,24 +1985,24 @@ const styles = StyleSheet.create( { }, modalInputBox: { flex: 1, - fontSize: RFValue( 15 ), + fontSize: RFValue(15), color: Colors.textColorGrey, fontFamily: Fonts.Regular, backgroundColor: Colors.white, - alignSelf: 'center', + alignSelf: "center", }, inputBox: { borderWidth: 0.5, borderRadius: 10, - marginLeft: wp( '5%' ), - marginRight: wp( '5%' ), + marginLeft: wp("5%"), + marginRight: wp("5%"), backgroundColor: Colors.white, }, inputBoxFocused: { borderWidth: 0.5, borderRadius: 10, - marginLeft: wp( '5%' ), - marginRight: wp( '5%' ), + marginLeft: wp("5%"), + marginRight: wp("5%"), elevation: 10, shadowColor: Colors.borderColor, shadowOpacity: 10, @@ -2004,72 +2013,72 @@ const styles = StyleSheet.create( { backgroundColor: Colors.white, }, accImage: { - marginRight: wp( 4 ), + marginRight: wp(4), }, availableToSpendText: { color: Colors.blue, - fontSize: RFValue( 10 ), + fontSize: RFValue(10), fontFamily: Fonts.Italic, lineHeight: 15, }, balanceText: { color: Colors.blue, - fontSize: RFValue( 10 ), + fontSize: RFValue(10), fontFamily: Fonts.Italic, }, proceedButtonText: { color: Colors.blue, - fontSize: RFValue( 13 ), + fontSize: RFValue(13), fontFamily: Fonts.Medium, }, selectedContactsView: { - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'space-around', + flexDirection: "row", + alignItems: "center", + justifyContent: "space-around", backgroundColor: Colors.blue, - borderRadius: wp( 2 ), - height: hp( 4 ), - paddingHorizontal: wp( 2 ), + borderRadius: wp(2), + height: hp(4), + paddingHorizontal: wp(2), }, contactText: { - fontSize: RFValue( 13 ), + fontSize: RFValue(13), fontFamily: Fonts.Regular, color: Colors.white, }, accountSelectionView: { - width: '90%', + width: "90%", // shadowOpacity: 0.06, // shadowOffset: { // width: 10, height: 10 // }, // shadowRadius: 10, // elevation: 2, - alignSelf: 'center', - marginTop: hp( 2 ), - marginBottom: hp( 2 ), + alignSelf: "center", + marginTop: hp(2), + marginBottom: hp(2), }, modalCrossButton: { - width: wp( 7 ), - height: wp( 7 ), - borderRadius: wp( 7 / 2 ), + width: wp(7), + height: wp(7), + borderRadius: wp(7 / 2), backgroundColor: Colors.CLOSE_ICON_COLOR, - alignItems: 'center', - justifyContent: 'center', - marginLeft: 'auto', + alignItems: "center", + justifyContent: "center", + marginLeft: "auto", }, homeHeaderAmountText: { fontFamily: Fonts.Regular, - fontSize: RFValue( 20 ), + fontSize: RFValue(20), marginRight: 5, color: Colors.black, }, homeHeaderAmountUnitText: { fontFamily: Fonts.Regular, - fontSize: RFValue( 11 ), + fontSize: RFValue(11), // marginBottom: 3, color: Colors.gray2, - marginTop: hp( 0.7 ), + marginTop: hp(0.7), }, -} ) +}); -export default CreateGift +export default CreateGift; diff --git a/src/pages/FriendsAndFamily/FriendsAndFamilyScreen.tsx b/src/pages/FriendsAndFamily/FriendsAndFamilyScreen.tsx index fa9b85e1eb..dbed61ea9d 100644 --- a/src/pages/FriendsAndFamily/FriendsAndFamilyScreen.tsx +++ b/src/pages/FriendsAndFamily/FriendsAndFamilyScreen.tsx @@ -566,7 +566,7 @@ class FriendsAndFamilyScreen extends React.Component< > {this.strings[ 'f&f' ]} - { this.setState( { isLoadContacts: true, diff --git a/src/pages/FriendsAndFamily/ManageGifts.tsx b/src/pages/FriendsAndFamily/ManageGifts.tsx index 361a5a3c91..d4d1a95492 100644 --- a/src/pages/FriendsAndFamily/ManageGifts.tsx +++ b/src/pages/FriendsAndFamily/ManageGifts.tsx @@ -330,7 +330,7 @@ const ManageGifts = ( props ) => { /> } */} { active === GiftStatus.CREATED && - navigation.navigate( 'CreateGift', { setActiveTab: buttonPress } )} diff --git a/src/pages/Gift/GiftBoxCmponent.tsx b/src/pages/Gift/GiftBoxCmponent.tsx index 7408db5103..5812167c74 100644 --- a/src/pages/Gift/GiftBoxCmponent.tsx +++ b/src/pages/Gift/GiftBoxCmponent.tsx @@ -13,7 +13,7 @@ const {height} = Dimensions.get('window'); const GiftBoxComponent = ( props ) => { return ( - + {/* */} - { @@ -744,7 +744,7 @@ class GiftScreen extends React.Component< } )}} image={} /> - this.props.navigation.navigate( 'ManageGifts', { @@ -752,7 +752,7 @@ class GiftScreen extends React.Component< } )} image={} /> - = ( { const lnAccount = useActiveAccountShells().filter( account => account.primarySubAccount.type === AccountType.LIGHTNING_ACCOUNT ) return ( - diff --git a/src/pages/Home/HomeBuyCard.tsx b/src/pages/Home/HomeBuyCard.tsx index f547617605..a3eb167383 100644 --- a/src/pages/Home/HomeBuyCard.tsx +++ b/src/pages/Home/HomeBuyCard.tsx @@ -156,7 +156,7 @@ const HomeBuyCard = ( { // }, // elevation: 15 }}> - = ( { navigation, }: Props ) => { Import From Gallery */} -