diff --git a/.re-natal b/.re-natal index 8df24503f8..30b794c73c 100644 --- a/.re-natal +++ b/.re-natal @@ -15,17 +15,12 @@ "realm", "react-native-i18n", "realm/react-native", - "react-native-action-button", - "react-native-vector-icons/Ionicons", - "react-native-vector-icons/Octicons", "react-native-randombytes", "dismissKeyboard", - "react-native-linear-gradient", "react-native-splash-screen", "react-native-status", "react-native-camera", "react-native-qrcode", - "react-native-orientation", "identicon.js", "react-native-fs", "react-native-dialogs", diff --git a/android/app/build.gradle b/android/app/build.gradle index 39ced4fd70..9815827b31 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -197,15 +197,12 @@ dependencies { implementation project(':react-native-dialogs') implementation project(':react-native-randombytes') implementation project(':realm') - implementation project(':react-native-vector-icons') implementation fileTree(dir: "libs", include: ["*.jar"]) implementation "com.android.support:appcompat-v7:23.0.1" implementation "com.facebook.react:react-native:+" // From node_modules implementation project(':react-native-i18n') - implementation project(':react-native-linear-gradient') implementation project(':react-native-camera') implementation project(':react-native-status') - implementation project(':react-native-orientation') implementation project(':react-native-fs') implementation project(':react-native-image-crop-picker') implementation project(':react-native-webview-bridge') diff --git a/android/app/src/main/java/im/status/ethereum/MainApplication.java b/android/app/src/main/java/im/status/ethereum/MainApplication.java index 211dd4244c..28a51eb3bd 100644 --- a/android/app/src/main/java/im/status/ethereum/MainApplication.java +++ b/android/app/src/main/java/im/status/ethereum/MainApplication.java @@ -1,7 +1,6 @@ package im.status.ethereum; import android.support.multidex.MultiDexApplication; -import com.BV.LinearGradient.LinearGradientPackage; import com.aakashns.reactnativedialogs.ReactNativeDialogsPackage; import com.bitgo.randombytes.RandomBytesPackage; import org.devio.rn.splashscreen.SplashScreenReactPackage; @@ -15,11 +14,9 @@ import com.facebook.react.ReactPackage; import com.facebook.react.shell.MainReactPackage; import com.facebook.soloader.SoLoader; import com.github.alinz.reactnativewebviewbridge.WebViewBridgePackage; -import com.github.yamill.orientation.OrientationPackage; import com.AlexanderZaytsev.RNI18n.RNI18nPackage; import com.instabug.reactlibrary.RNInstabugReactnativePackage; import com.lwansbrough.RCTCamera.RCTCameraPackage; -import com.oblador.vectoricons.VectorIconsPackage; import com.reactnative.ivpusic.imagepicker.PickerPackage; import com.rnfs.RNFSPackage; import es.tiarg.nfcreactnative.NfcReactNativePackage; @@ -65,12 +62,9 @@ public class MainApplication extends MultiDexApplication implements ReactApplica new SplashScreenReactPackage(), statusPackage, new RealmReactPackage(), - new VectorIconsPackage(), new RNI18nPackage(), new RandomBytesPackage(), - new LinearGradientPackage(), new RCTCameraPackage(), - new OrientationPackage(), new RNFSPackage(), new ReactNativeDialogsPackage(), new ImageResizerPackage(), diff --git a/android/settings.gradle b/android/settings.gradle index fe601e7915..ae9d1d8310 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -22,18 +22,12 @@ include ':react-native-randombytes' project(':react-native-randombytes').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-randombytes/android') include ':react-native-i18n' project(':react-native-i18n').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-i18n/android') -include ':react-native-vector-icons' -project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android') include ':realm' project(':realm').projectDir = new File(rootProject.projectDir, '../node_modules/realm/android') -include ':react-native-linear-gradient' -project(':react-native-linear-gradient').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-linear-gradient/android') include ':react-native-status' project(':react-native-status').projectDir = new File(rootProject.projectDir, '../modules/react-native-status/android') include ':react-native-camera' project(':react-native-camera').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-camera/android') -include ':react-native-orientation', ':app' -project(':react-native-orientation').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-orientation/android') include ':react-native-fs' project(':react-native-fs').projectDir = new File(settingsDir, '../node_modules/react-native-fs/android') include ':react-native-image-crop-picker' diff --git a/components/src/status_im/ui/components/react.cljs b/components/src/status_im/ui/components/react.cljs index c8f8b9d702..7c8f98dffa 100644 --- a/components/src/status_im/ui/components/react.cljs +++ b/components/src/status_im/ui/components/react.cljs @@ -24,7 +24,6 @@ (def native-modules (.-NativeModules js-dependencies/react-native)) (def device-event-emitter (.-DeviceEventEmitter js-dependencies/react-native)) (def dismiss-keyboard! js-dependencies/dismiss-keyboard) -(def orientation js-dependencies/orientation) (def back-handler (get-react-property "BackHandler")) (def splash-screen (.-SplashScreen native-modules)) @@ -51,16 +50,11 @@ (def switch (get-class "Switch")) (def check-box (get-class "CheckBox")) -(def touchable-without-feedback (get-class "TouchableWithoutFeedback")) (def touchable-highlight-class (get-class "TouchableHighlight")) (def touchable-opacity (get-class "TouchableOpacity")) (def activity-indicator (get-class "ActivityIndicator")) (def modal (get-class "Modal")) -(def picker-class (get-class "Picker")) -(def picker-item-class - (when-let [picker (get-react-property "Picker")] - (adapt-class (.-Item picker)))) (def pan-responder (.-PanResponder js-dependencies/react-native)) (def animated (.-Animated js-dependencies/react-native)) @@ -123,22 +117,9 @@ (defn get-dimensions [name] (js->clj (.get dimensions name) :keywordize-keys true)) -(def gradient (adapt-class (.-default js-dependencies/linear-gradient))) - -(defn linear-gradient [props] - [gradient props]) - (defn list-item [component] (reagent/as-element component)) -(defn picker - ([{:keys [style item-style selected on-change]} items] - [picker-class {:selectedValue selected :style style :itemStyle item-style :onValueChange on-change} - (for [{:keys [label value]} items] - ^{:key (str value)} - [picker-item-class - {:label (or label value) :value value}])])) - ;; Image picker (def image-picker-class js-dependencies/image-crop-picker) diff --git a/components/src/status_im/ui/components/svg.clj b/components/src/status_im/ui/components/svg.clj index accbd6c1bd..e4b093c774 100644 --- a/components/src/status_im/ui/components/svg.clj +++ b/components/src/status_im/ui/components/svg.clj @@ -2,7 +2,7 @@ (:require [clojure.string :as string] [hickory.core :as hickory])) -(def svg-tags #{:svg :g :rect :path :use :defs}) +(def svg-tags #{:svg :g :rect :path :use :defs :circle}) (defmacro slurp-svg [file] "Reads svg file, and return function (fn [color] ..), which returns hiccup structure for react-native-svg lib diff --git a/ios/StatusIm.xcodeproj/project.pbxproj b/ios/StatusIm.xcodeproj/project.pbxproj index f8c726e831..364c8a8009 100644 --- a/ios/StatusIm.xcodeproj/project.pbxproj +++ b/ios/StatusIm.xcodeproj/project.pbxproj @@ -13,7 +13,6 @@ 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; }; 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; }; 00E356F31AD99517003FC87E /* StatusImTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* StatusImTests.m */; }; - 0F942CF509F74CCDB5CB35B0 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 54E2B86FB12D4CC49DA05C69 /* MaterialIcons.ttf */; }; 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; }; 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; }; 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; }; @@ -34,15 +33,10 @@ 25DC9C9DC25846BD8D084888 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B9A886A2CB448B1ABA0EB62 /* libc++.tbd */; }; 3E15DFEC1F6F4D7CAE088F49 /* libTcpSockets.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C2A4E93F6B154AEFA3485B45 /* libTcpSockets.a */; }; 4C16DE0C1F89508700AA10DB /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C16DE0B1F89508700AA10DB /* JavaScriptCore.framework */; }; - 4D3D740D5EFA4F8592B048D7 /* libBVLinearGradient.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DF1CD4C3D1254774ACCAE4E8 /* libBVLinearGradient.a */; }; 4FFAE7B0414A463991039A2E /* libRNRandomBytes.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C55F15EB4D4DAF9202A662 /* libRNRandomBytes.a */; }; 5974D2035B8B47E0946B63B6 /* libRNFIRMessaging.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F752F17B1E04216B1337A72 /* libRNFIRMessaging.a */; }; 5F8585D411844E5981B94F40 /* libRNInstabug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4EC426A98043452BB6F9C134 /* libRNInstabug.a */; }; - 67F099D82798449FADF8358A /* libRCTOrientation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5535217F57E44D77AA9CF083 /* libRCTOrientation.a */; }; - 6CE6374707AC4EC788354DD1 /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 11632AA0A5F84F029DD91797 /* libRNVectorIcons.a */; }; - 74242ACAF37A48D0BFACDE82 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2756305FAFF144C4A6B0A039 /* Zocial.ttf */; }; 81C6E6AE0AA739BE9D87C1D0 /* libPods-StatusImTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FC1CBCFE6C906043D6CCEEE1 /* libPods-StatusImTests.a */; }; - 82E689BAF9FB43C8AC6FF1CA /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CEB0E2659D1A4F5FA842057A /* EvilIcons.ttf */; }; 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; 8E55E6877F950B81C8D711C5 /* libPods-StatusIm.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 101A4045637A2ADF57D28EF5 /* libPods-StatusIm.a */; }; 925C1F471F7B73B20063DFA0 /* FirebaseCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 925C1F401F7B73B20063DFA0 /* FirebaseCore.framework */; }; @@ -63,9 +57,7 @@ 9EE89E271E03FCB7007D3C25 /* libSplashScreen.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B24FC7F21DE718EF00D694FF /* libSplashScreen.a */; }; 9EE89E2D1E03FD9F007D3C25 /* libimageCropPicker.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 20A5C9531D927137002C4965 /* libimageCropPicker.a */; }; 9EF0836B1F3B53AB00876A8F /* libReactNativeConfig.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9EF083611F3B538B00876A8F /* libReactNativeConfig.a */; }; - A6AF670051B842249D520C7B /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7ED174A34D7D42358313368B /* Foundation.ttf */; }; ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; }; - AE97D4B08C9F4821B8E9C50B /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 359B076A658B4FBAB5128B03 /* Ionicons.ttf */; }; B23B48FF1E76917B006D4535 /* RobotoMono-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B23B48FE1E76917B006D4535 /* RobotoMono-Medium.ttf */; }; B24FC7FD1DE7195700D694FF /* Social.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B24FC7FC1DE7195700D694FF /* Social.framework */; }; B24FC7FF1DE7195F00D694FF /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B24FC7FE1DE7195F00D694FF /* MessageUI.framework */; }; @@ -73,12 +65,9 @@ B2F2D1BC1D9D531B00B7B453 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B2F2D1BB1D9D531B00B7B453 /* Images.xcassets */; }; B957A49EB0DE44D9A31CAF2D /* libRNSVG.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2BF381BC7B4EB0887F0091 /* libRNSVG.a */; }; BA68A2377A20496EA737000D /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 4E586E1B0E544F64AA9F5BD1 /* libz.tbd */; }; - C3EE9AEA6F77464588FBAA64 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7B5870D9ED504F32B6A09C35 /* FontAwesome.ttf */; }; C93242561FE1C68C00FE7099 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C93242531FE1C68C00FE7099 /* libRCTAnimation.a */; }; CE4E31B31D8695250033ED64 /* Statusgo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE4E31B21D8695250033ED64 /* Statusgo.framework */; }; - D28AEFB4C39548EB80416889 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 52E205D210BC48B7A553BB62 /* Entypo.ttf */; }; E0AD9E8F495A4907B65104BF /* libRCTImageResizer.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2BEE3436791D42248F853999 /* libRCTImageResizer.a */; }; - EF2B5857B4A34E0C9707FB3F /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B3B19223008342D096AA356E /* Octicons.ttf */; }; F9238D6C1E5F055900C047B9 /* SF-UI-Text-Semibold.otf in Resources */ = {isa = PBXBuildFile; fileRef = F9238D6B1E5F055900C047B9 /* SF-UI-Text-Semibold.otf */; }; FD4F213C3873473CB703B1D2 /* libRNFS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 674B3D9595A047AB8D518F4E /* libRNFS.a */; }; /* End PBXBuildFile section */ @@ -175,13 +164,6 @@ remoteGlobalIDString = 73EEC9391BFE4B1D00D468EB; remoteInfo = RNRandomBytes; }; - 20B7D1021D3F74CD00B70F14 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 8AE71EE8751F4652B13BFE83 /* RNVectorIcons.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 5DBEB1501B18CEA900B34395; - remoteInfo = RNVectorIcons; - }; 20B7D10D1D3F74CD00B70F14 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 46E2F6052EB44C698C680894 /* RNI18n.xcodeproj */; @@ -203,20 +185,6 @@ remoteGlobalIDString = F12AFB9B1ADAF8F800E0535D; remoteInfo = RNFS; }; - 20B7D11E1D3F74CD00B70F14 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 807594C429CA44128AB5666B /* BVLinearGradient.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 134814201AA4EA6300B7C361; - remoteInfo = BVLinearGradient; - }; - 20B7D1231D3F74CD00B70F14 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 43A6FA689D844B0BAF3AA8B4 /* RCTOrientation.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 134814201AA4EA6300B7C361; - remoteInfo = RCTOrientation; - }; 20B7D1281D3F74CD00B70F14 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = F090E261B9854867A728CE4F /* RealmReact.xcodeproj */; @@ -224,6 +192,20 @@ remoteGlobalIDString = F60690131CA2766F0003FB26; remoteInfo = RealmReact; }; + 5537E2A920650E640085CED4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EBF21BDC1FC498900052F4D5; + remoteInfo = jsinspector; + }; + 5537E2AB20650E640085CED4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EBF21BFA1FC4989A0052F4D5; + remoteInfo = "jsinspector-tvOS"; + }; 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; @@ -343,13 +325,6 @@ remoteGlobalIDString = B29EC9CC1E48BED600704A36; remoteInfo = RCTHttpServer; }; - C90047C41FC47AF50002B8EA /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 807594C429CA44128AB5666B /* BVLinearGradient.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 64AA15081EF7F30100718508; - remoteInfo = "BVLinearGradient-tvOS"; - }; C90047CC1FC47AF50002B8EA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; @@ -559,34 +534,25 @@ 20A5C96E1D92716C002C4965 /* QBImagePicker.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QBImagePicker.framework; path = "../node_modules/react-native-image-crop-picker/ios/QBImagePicker/build/Debug-iphoneos/QBImagePicker.framework"; sourceTree = ""; }; 20B6B6831D92C42600CC5C6A /* RSKImageCropper.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = RSKImageCropper.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 20B6B6861D92C42600CC5C6A /* QBImagePicker.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = QBImagePicker.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2756305FAFF144C4A6B0A039 /* 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 = ""; }; 2BEE3436791D42248F853999 /* libRCTImageResizer.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRCTImageResizer.a; sourceTree = ""; }; 305F194186D848FDB07AF34C /* RNFS.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNFS.xcodeproj; path = "../node_modules/react-native-fs/RNFS.xcodeproj"; sourceTree = ""; }; - 359B076A658B4FBAB5128B03 /* 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 = ""; }; 38A44830EC5708E89387F641 /* Pods-StatusIm.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-StatusIm.release.xcconfig"; path = "Pods/Target Support Files/Pods-StatusIm/Pods-StatusIm.release.xcconfig"; sourceTree = ""; }; 38E1A2C8D0734EE99E2B16CE /* TcpSockets.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = TcpSockets.xcodeproj; path = "../node_modules/react-native-tcp/ios/TcpSockets.xcodeproj"; sourceTree = ""; }; 3A7EB0491DD9CABC00A4FCC8 /* SplashScreen.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SplashScreen.xcodeproj; path = "../node_modules/react-native-splash-screen/ios/SplashScreen.xcodeproj"; sourceTree = ""; }; 439B6B4B407A4E2AACAFE5BE /* RCTStatus.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RCTStatus.xcodeproj; path = "../modules/react-native-status/ios/RCTStatus/RCTStatus.xcodeproj"; sourceTree = ""; }; - 43A6FA689D844B0BAF3AA8B4 /* RCTOrientation.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RCTOrientation.xcodeproj; path = "../node_modules/react-native-orientation/iOS/RCTOrientation.xcodeproj"; sourceTree = ""; }; 45FB5F523DE04BDE9877869C /* RNRandomBytes.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNRandomBytes.xcodeproj; path = "../node_modules/react-native-randombytes/RNRandomBytes.xcodeproj"; sourceTree = ""; }; 46E2F6052EB44C698C680894 /* RNI18n.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNI18n.xcodeproj; path = "../node_modules/react-native-i18n/ios/RNI18n.xcodeproj"; sourceTree = ""; }; 4C16DE0B1F89508700AA10DB /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; 4E586E1B0E544F64AA9F5BD1 /* libz.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; 4EC426A98043452BB6F9C134 /* libRNInstabug.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNInstabug.a; sourceTree = ""; }; - 52E205D210BC48B7A553BB62 /* 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 = ""; }; 52F6ED6465184513A082652B /* libRNI18n.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNI18n.a; sourceTree = ""; }; - 54E2B86FB12D4CC49DA05C69 /* MaterialIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = ""; }; 5535217F57E44D77AA9CF083 /* libRCTOrientation.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRCTOrientation.a; sourceTree = ""; }; 5E5A7625B76441D984EA8C0D /* RCTImageResizer.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RCTImageResizer.xcodeproj; path = "../node_modules/react-native-image-resizer/ios/RCTImageResizer.xcodeproj"; sourceTree = ""; }; 674B3D9595A047AB8D518F4E /* libRNFS.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNFS.a; sourceTree = ""; }; 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; }; 78C55F15EB4D4DAF9202A662 /* libRNRandomBytes.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNRandomBytes.a; sourceTree = ""; }; - 7B5870D9ED504F32B6A09C35 /* 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 = ""; }; - 7ED174A34D7D42358313368B /* 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 = ""; }; 7F752F17B1E04216B1337A72 /* libRNFIRMessaging.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNFIRMessaging.a; sourceTree = ""; }; - 807594C429CA44128AB5666B /* BVLinearGradient.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = BVLinearGradient.xcodeproj; path = "../node_modules/react-native-linear-gradient/BVLinearGradient.xcodeproj"; sourceTree = ""; }; 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; - 8AE71EE8751F4652B13BFE83 /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNVectorIcons.xcodeproj; path = "../node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = ""; }; 8B9A886A2CB448B1ABA0EB62 /* libc++.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; 922C4CA61F4D5F8B0033C753 /* StatusIm.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = StatusIm.entitlements; path = StatusIm/StatusIm.entitlements; sourceTree = ""; }; 925C1F401F7B73B20063DFA0 /* FirebaseCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FirebaseCore.framework; sourceTree = ""; }; @@ -616,11 +582,9 @@ B2A5F42F1DEC36B200174F4D /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = ""; }; B2DEA0A41E49E32000FA28D6 /* RCTHttpServer.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTHttpServer.xcodeproj; path = "../node_modules/react-native-http-bridge/ios/RCTHttpServer.xcodeproj"; sourceTree = ""; }; B2F2D1BB1D9D531B00B7B453 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = StatusIm/Images.xcassets; sourceTree = ""; }; - B3B19223008342D096AA356E /* 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 = ""; }; C2A4E93F6B154AEFA3485B45 /* libTcpSockets.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libTcpSockets.a; sourceTree = ""; }; CD48A32459B64E96843BB238 /* libRealmReact.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRealmReact.a; sourceTree = ""; }; CE4E31B21D8695250033ED64 /* Statusgo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Statusgo.framework; path = "../modules/react-native-status/ios/RCTStatus/Statusgo.framework"; sourceTree = ""; }; - CEB0E2659D1A4F5FA842057A /* 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 = ""; }; D489EE8D5F52DA10AC715727 /* Pods-StatusImTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-StatusImTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-StatusImTests/Pods-StatusImTests.release.xcconfig"; sourceTree = ""; }; DF1CD4C3D1254774ACCAE4E8 /* libBVLinearGradient.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libBVLinearGradient.a; sourceTree = ""; }; F090E261B9854867A728CE4F /* RealmReact.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RealmReact.xcodeproj; path = "../node_modules/realm/react-native/ios/RealmReact.xcodeproj"; sourceTree = ""; }; @@ -674,10 +638,7 @@ 9E7C64731E03FDDE004C7042 /* libRCTCamera.a in Frameworks */, FD4F213C3873473CB703B1D2 /* libRNFS.a in Frameworks */, 213311F38CA74CE280FD09AD /* libRNI18n.a in Frameworks */, - 4D3D740D5EFA4F8592B048D7 /* libBVLinearGradient.a in Frameworks */, - 67F099D82798449FADF8358A /* libRCTOrientation.a in Frameworks */, 4FFAE7B0414A463991039A2E /* libRNRandomBytes.a in Frameworks */, - 6CE6374707AC4EC788354DD1 /* libRNVectorIcons.a in Frameworks */, 22118DE1207A419FBFE7B62D /* libRealmReact.a in Frameworks */, 25DC9C9DC25846BD8D084888 /* libc++.tbd in Frameworks */, BA68A2377A20496EA737000D /* libz.tbd in Frameworks */, @@ -803,6 +764,8 @@ C90048061FC47AF50002B8EA /* libcxxreact.a */, C90048081FC47AF50002B8EA /* libjschelpers.a */, C900480A1FC47AF50002B8EA /* libjschelpers.a */, + 5537E2AA20650E640085CED4 /* libjsinspector.a */, + 5537E2AC20650E640085CED4 /* libjsinspector-tvOS.a */, C900480C1FC47AF50002B8EA /* libthird-party.a */, C900480E1FC47AF50002B8EA /* libthird-party.a */, C90048101FC47AF50002B8EA /* libdouble-conversion.a */, @@ -817,14 +780,6 @@ isa = PBXGroup; children = ( 2028E0111D4275BD00227DCD /* SF */, - 52E205D210BC48B7A553BB62 /* Entypo.ttf */, - CEB0E2659D1A4F5FA842057A /* EvilIcons.ttf */, - 7B5870D9ED504F32B6A09C35 /* FontAwesome.ttf */, - 7ED174A34D7D42358313368B /* Foundation.ttf */, - 359B076A658B4FBAB5128B03 /* Ionicons.ttf */, - 54E2B86FB12D4CC49DA05C69 /* MaterialIcons.ttf */, - B3B19223008342D096AA356E /* Octicons.ttf */, - 2756305FAFF144C4A6B0A039 /* Zocial.ttf */, B23B48FE1E76917B006D4535 /* RobotoMono-Medium.ttf */, ); name = Resources; @@ -878,14 +833,6 @@ name = Products; sourceTree = ""; }; - 20B7D0FF1D3F74CD00B70F14 /* Products */ = { - isa = PBXGroup; - children = ( - 20B7D1031D3F74CD00B70F14 /* libRNVectorIcons.a */, - ); - name = Products; - sourceTree = ""; - }; 20B7D1041D3F74CD00B70F14 /* Products */ = { isa = PBXGroup; children = ( @@ -912,23 +859,6 @@ name = Products; sourceTree = ""; }; - 20B7D11B1D3F74CD00B70F14 /* Products */ = { - isa = PBXGroup; - children = ( - 20B7D11F1D3F74CD00B70F14 /* libBVLinearGradient.a */, - C90047C51FC47AF50002B8EA /* libBVLinearGradient.a */, - ); - name = Products; - sourceTree = ""; - }; - 20B7D1201D3F74CD00B70F14 /* Products */ = { - isa = PBXGroup; - children = ( - 20B7D1241D3F74CD00B70F14 /* libRCTOrientation.a */, - ); - name = Products; - sourceTree = ""; - }; 20B7D1251D3F74CD00B70F14 /* Products */ = { isa = PBXGroup; children = ( @@ -981,10 +911,7 @@ 9F1854E6D9654226B1FC8308 /* RCTCamera.xcodeproj */, 305F194186D848FDB07AF34C /* RNFS.xcodeproj */, 46E2F6052EB44C698C680894 /* RNI18n.xcodeproj */, - 807594C429CA44128AB5666B /* BVLinearGradient.xcodeproj */, - 43A6FA689D844B0BAF3AA8B4 /* RCTOrientation.xcodeproj */, 45FB5F523DE04BDE9877869C /* RNRandomBytes.xcodeproj */, - 8AE71EE8751F4652B13BFE83 /* RNVectorIcons.xcodeproj */, F090E261B9854867A728CE4F /* RealmReact.xcodeproj */, 38E1A2C8D0734EE99E2B16CE /* TcpSockets.xcodeproj */, 439B6B4B407A4E2AACAFE5BE /* RCTStatus.xcodeproj */, @@ -1255,10 +1182,6 @@ productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; projectDirPath = ""; projectReferences = ( - { - ProductGroup = 20B7D11B1D3F74CD00B70F14 /* Products */; - ProjectRef = 807594C429CA44128AB5666B /* BVLinearGradient.xcodeproj */; - }, { ProductGroup = 20A5C94C1D927137002C4965 /* Products */; ProjectRef = 20A5C94B1D927137002C4965 /* imageCropPicker.xcodeproj */; @@ -1303,10 +1226,6 @@ ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */; ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; }, - { - ProductGroup = 20B7D1201D3F74CD00B70F14 /* Products */; - ProjectRef = 43A6FA689D844B0BAF3AA8B4 /* RCTOrientation.xcodeproj */; - }, { ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */; ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; @@ -1371,10 +1290,6 @@ ProductGroup = 92925B361F571DE600203EEB /* Products */; ProjectRef = 1E74DC52A1E449A2BA858B14 /* RNSVG.xcodeproj */; }, - { - ProductGroup = 20B7D0FF1D3F74CD00B70F14 /* Products */; - ProjectRef = 8AE71EE8751F4652B13BFE83 /* RNVectorIcons.xcodeproj */; - }, { ProductGroup = B24FC7BB1DE718EA00D694FF /* Products */; ProjectRef = 3A7EB0491DD9CABC00A4FCC8 /* SplashScreen.xcodeproj */; @@ -1477,13 +1392,6 @@ remoteRef = 20B7D0FD1D3F74CC00B70F14 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 20B7D1031D3F74CD00B70F14 /* libRNVectorIcons.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRNVectorIcons.a; - remoteRef = 20B7D1021D3F74CD00B70F14 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; 20B7D10E1D3F74CD00B70F14 /* libRNI18n.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; @@ -1505,20 +1413,6 @@ remoteRef = 20B7D1191D3F74CD00B70F14 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 20B7D11F1D3F74CD00B70F14 /* libBVLinearGradient.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libBVLinearGradient.a; - remoteRef = 20B7D11E1D3F74CD00B70F14 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 20B7D1241D3F74CD00B70F14 /* libRCTOrientation.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRCTOrientation.a; - remoteRef = 20B7D1231D3F74CD00B70F14 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; 20B7D1291D3F74CD00B70F14 /* libRealmReact.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; @@ -1526,6 +1420,20 @@ remoteRef = 20B7D1281D3F74CD00B70F14 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; + 5537E2AA20650E640085CED4 /* libjsinspector.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libjsinspector.a; + remoteRef = 5537E2A920650E640085CED4 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5537E2AC20650E640085CED4 /* libjsinspector-tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libjsinspector-tvOS.a"; + remoteRef = 5537E2AB20650E640085CED4 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; @@ -1645,13 +1553,6 @@ remoteRef = B2DEA0B01E49E32000FA28D6 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - C90047C51FC47AF50002B8EA /* libBVLinearGradient.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libBVLinearGradient.a; - remoteRef = C90047C41FC47AF50002B8EA /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; C90047CD1FC47AF50002B8EA /* libRCTBlob-tvOS.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; @@ -1837,17 +1738,9 @@ 2028DFFC1D4275B600227DCD /* SF-UI-Display-Thin.otf in Resources */, 2028DFFB1D4275B600227DCD /* SF-UI-Display-Semibold.otf in Resources */, B23B48FF1E76917B006D4535 /* RobotoMono-Medium.ttf in Resources */, - D28AEFB4C39548EB80416889 /* Entypo.ttf in Resources */, - 82E689BAF9FB43C8AC6FF1CA /* EvilIcons.ttf in Resources */, - C3EE9AEA6F77464588FBAA64 /* FontAwesome.ttf in Resources */, - A6AF670051B842249D520C7B /* Foundation.ttf in Resources */, 9E54D6011F17A5DB009F0C16 /* upload-dsym.sh in Resources */, B2F2D1BC1D9D531B00B7B453 /* Images.xcassets in Resources */, - AE97D4B08C9F4821B8E9C50B /* Ionicons.ttf in Resources */, - 0F942CF509F74CCDB5CB35B0 /* MaterialIcons.ttf in Resources */, - EF2B5857B4A34E0C9707FB3F /* Octicons.ttf in Resources */, 92A0DF7D1F4DE3A4002051BC /* GoogleService-Info.plist in Resources */, - 74242ACAF37A48D0BFACDE82 /* Zocial.ttf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/package-lock.json b/package-lock.json index 408db67205..ce8c7e80ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1926,7 +1926,7 @@ }, "compression": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.5.2.tgz", + "resolved": "http://registry.npmjs.org/compression/-/compression-1.5.2.tgz", "integrity": "sha1-sDuNhub4rSloPLqN+R3cb/x3s5U=", "requires": { "accepts": "1.2.13", @@ -8036,14 +8036,6 @@ } } }, - "react-native-action-button": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/react-native-action-button/-/react-native-action-button-2.8.1.tgz", - "integrity": "sha512-u5DWS2ZorgRGNNhh3H8+PKq0KHQqOIk6jr/w/qGaTrPpX4Fvg0t5WsqlSjDa4J6xrgWJ712OX3rhc56wLLSI3g==", - "requires": { - "prop-types": "15.6.0" - } - }, "react-native-background-timer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/react-native-background-timer/-/react-native-background-timer-2.0.0.tgz", @@ -8150,19 +8142,6 @@ "levelup": "0.18.6" } }, - "react-native-linear-gradient": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/react-native-linear-gradient/-/react-native-linear-gradient-2.4.0.tgz", - "integrity": "sha512-h4nwmcjfeedSiHGBmQkMmCSIqm3196YtT1AtbAqE93jgAcpib0btvoCx8nBUemmhfm+CA5mFEh8p5biA4wFw/A==", - "requires": { - "prop-types": "15.6.0" - } - }, - "react-native-orientation": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/react-native-orientation/-/react-native-orientation-3.1.0.tgz", - "integrity": "sha1-zkcP5EqaR99b5JlbAaEInT9KAz4=" - }, "react-native-os": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/react-native-os/-/react-native-os-1.1.0.tgz", @@ -8215,9 +8194,9 @@ "integrity": "sha512-yaTnGAHRyhduLSfD85gP3Vsf0BRePHW3aNNtDXbkbUhwIIeafu2cJH86U/qKFuKLMYLnFOXteOkP80gaYVGAYg==" }, "react-native-svg": { - "version": "6.0.1-rc.3", - "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-6.0.1-rc.3.tgz", - "integrity": "sha512-JesFrzf4egetLS+37EO8h2CibnVCv9PNyCEcULXC/7WOtWEE0fSTPlbm7J+2q/szPcf9G6I8P2dec+LGhlH1cA==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-6.3.1.tgz", + "integrity": "sha512-0kmfUwKUBWnPuJpy+bdGIYKkXHg/M/X57ji8b3d3ZFB2rRTWMRkwI1D+AJ6FQRX109+FJn6L6hsIokDj1lckzA==", "requires": { "color": "2.0.1", "lodash": "4.17.4", @@ -8267,73 +8246,6 @@ "util": "0.10.3" } }, - "react-native-vector-icons": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-4.4.2.tgz", - "integrity": "sha512-0E53c7OolA6nMuQdh4gTuYKGe0yPuVbNXHfty0gJoE3Bct80JE8Q8Rrlv8xWSFe8jqYcSPiUr8Lg1+G8LAttYg==", - "requires": { - "lodash": "4.17.4", - "prop-types": "15.6.0", - "yargs": "8.0.2" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" - } - } - } - }, "react-native-webview-bridge": { "version": "github:status-im/react-native-webview-bridge#b4200c08c0036a90ee07199b118849a65c7cc635", "requires": { diff --git a/package.json b/package.json index 36d497a8f1..65f58d4c3a 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,6 @@ "react": "16.2.0", "react-dom": "16.2.0", "react-native": "0.53.3", - "react-native-action-button": "2.8.1", "react-native-background-timer": "2.0.0", "react-native-camera": "0.10.0", "react-native-config": "0.9.0", @@ -62,16 +61,13 @@ "react-native-image-resizer": "1.0.0", "react-native-invertible-scroll-view": "1.1.0", "react-native-level-fs": "3.0.0", - "react-native-linear-gradient": "2.4.0", - "react-native-orientation": "3.1.0", "react-native-os": "1.1.0", "react-native-qrcode": "0.2.6", "react-native-randombytes": "3.0.0", "react-native-splash-screen": "3.0.6", - "react-native-svg": "6.0.1-rc.3", + "react-native-svg": "6.3.1", "react-native-tcp": "3.3.0", "react-native-udp": "2.2.1", - "react-native-vector-icons": "4.4.2", "react-native-webview-bridge": "github:status-im/react-native-webview-bridge#feature/camera-permissions", "readable-stream": "1.1.14", "realm": "2.0.7", diff --git a/react-native/src/status_im/react_native/js_dependencies.cljs b/react-native/src/status_im/react_native/js_dependencies.cljs index c8e75e2ba6..abbf215556 100644 --- a/react-native/src/status_im/react_native/js_dependencies.cljs +++ b/react-native/src/status_im/react_native/js_dependencies.cljs @@ -1,6 +1,5 @@ (ns status-im.react-native.js-dependencies) -(def action-button (js/require "react-native-action-button")) (def camera (js/require "react-native-camera")) (def config (js/require "react-native-config")) (def dialogs (js/require "react-native-dialogs")) @@ -13,14 +12,11 @@ (def image-crop-picker (js/require "react-native-image-crop-picker")) (def image-resizer (js/require "react-native-image-resizer")) (def instabug (js/require "instabug-reactnative")) -(def linear-gradient (js/require "react-native-linear-gradient")) (def nfc (js/require "nfc-react-native")) -(def orientation (js/require "react-native-orientation")) (def qr-code (js/require "react-native-qrcode")) (def random-bytes (js/require "react-native-randombytes")) (def react-native (js/require "react-native")) (def realm (js/require "realm")) -(def vector-icons (js/require "react-native-vector-icons/Ionicons")) (def webview-bridge (js/require "react-native-webview-bridge")) (def svg (js/require "react-native-svg")) (def react-native-fcm (js/require "react-native-fcm")) diff --git a/resources/icons/camera.svg b/resources/icons/camera.svg new file mode 100644 index 0000000000..8b13a02422 --- /dev/null +++ b/resources/icons/camera.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/rn-cli.config.js b/rn-cli.config.js deleted file mode 100644 index 0b06e26c89..0000000000 --- a/rn-cli.config.js +++ /dev/null @@ -1,9 +0,0 @@ -// workaround for react-native-vector-icons -// https://github.com/oblador/react-native-vector-icons/issues/626#issuecomment-362386341 - -const blacklist = require('metro/src/blacklist') -module.exports = { - getBlacklistRE () { - return blacklist([/react-native\/local-cli\/core\/__fixtures__.*/]) - }, -} diff --git a/src/status_im/android/core.cljs b/src/status_im/android/core.cljs index 5db5886509..89c70056c5 100644 --- a/src/status_im/android/core.cljs +++ b/src/status_im/android/core.cljs @@ -9,9 +9,6 @@ [status-im.ui.screens.views :as views] [status-im.ui.components.react :as react] [status-im.native-module.core :as status] - [status-im.utils.error-handler :as error-handler] - [status-im.utils.utils :as utils] - [status-im.utils.config :as config] [status-im.utils.notifications :as notifications] [status-im.core :as core] [status-im.utils.snoopy :as snoopy])) @@ -35,9 +32,6 @@ :else false)))] (.addEventListener react/back-handler "hardwareBackPress" new-listener))) -(defn orientation->keyword [o] - (keyword (.toLowerCase o))) - (defn app-state-change-handler [state] (dispatch [:app-state-change state])) @@ -46,12 +40,6 @@ (reagent/create-class {:component-will-mount (fn [] - (let [o (orientation->keyword (.getInitialOrientation react/orientation))] - (dispatch [:set :orientation o])) - (.addOrientationListener - react/orientation - #(dispatch [:set :orientation (orientation->keyword %)])) - (.lockToPortrait react/orientation) (.addListener react/keyboard "keyboardDidShow" (fn [e] diff --git a/src/status_im/chat/specs.cljs b/src/status_im/chat/specs.cljs index 31fef1a47b..3447d0dfa1 100644 --- a/src/status_im/chat/specs.cljs +++ b/src/status_im/chat/specs.cljs @@ -14,6 +14,7 @@ (s/def :chat/selected-participants (s/nilable set?)) (s/def :chat/chat-loaded-callbacks (s/nilable map?)) (s/def :chat/public-group-topic (s/nilable string?)) +(s/def :chat/public-group-topic-error (s/nilable string?)) (s/def :chat/messages (s/nilable map?)) ; messages indexed by message-id (s/def :chat/not-loaded-message-ids (s/nilable set?)) ; set of message-ids not yet fully loaded from persisted state (s/def :chat/last-clock-value (s/nilable number?)) ; last logical clock value of messages in chat diff --git a/src/status_im/debug/handlers.cljs b/src/status_im/debug/handlers.cljs deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/status_im/ios/core.cljs b/src/status_im/ios/core.cljs index 299aba4c32..b19f11f56b 100644 --- a/src/status_im/ios/core.cljs +++ b/src/status_im/ios/core.cljs @@ -8,28 +8,15 @@ status-im.data-store.core [status-im.ui.screens.views :as views] [status-im.ui.components.react :as react] - [status-im.native-module.core :as status] - [status-im.utils.error-handler :as error-handler] - [status-im.utils.utils :as utils] - [status-im.utils.config :as config] [status-im.utils.notifications :as notifications] [status-im.core :as core] [status-im.utils.snoopy :as snoopy])) -(defn orientation->keyword [o] - (keyword (.toLowerCase o))) - (defn app-root [] (let [keyboard-height (subscribe [:get :keyboard-height])] (reagent/create-class {:component-will-mount (fn [] - (let [o (orientation->keyword (.getInitialOrientation react/orientation))] - (dispatch [:set :orientation o])) - (.addOrientationListener - react/orientation - #(dispatch [:set :orientation (orientation->keyword %)])) - (.lockToPortrait react/orientation) (.addListener react/keyboard "keyboardWillShow" (fn [e] diff --git a/src/status_im/translations/en.cljs b/src/status_im/translations/en.cljs index d673ee2836..6462cdb42d 100644 --- a/src/status_im/translations/en.cljs +++ b/src/status_im/translations/en.cljs @@ -210,6 +210,7 @@ :search-chats "Search chats" :empty-topic "Empty topic" :topic-format "Wrong format [a-z0-9\\-]+" + :topic-name-error "A topic name can contain only following characters: a-z -" :public-group-topic "Topic" :set-a-topic "Set a topic" :empty-chat-description "There are no messages \nin this chat yet" diff --git a/src/status_im/ui/components/carousel/carousel.cljs b/src/status_im/ui/components/carousel/carousel.cljs deleted file mode 100644 index b4e7b31940..0000000000 --- a/src/status_im/ui/components/carousel/carousel.cljs +++ /dev/null @@ -1,196 +0,0 @@ -(ns status-im.ui.components.carousel.carousel - (:require [reagent.impl.component :as component] - [status-im.ui.components.react :as react] - [status-im.ui.components.carousel.styles :as styles] - [taoensso.timbre :as log] - [status-im.react-native.js-dependencies :as js-dependencies] - [status-im.utils.utils :as utils])) - - -(defn window-page-width [] - (.-width (.get (.. js-dependencies/react-native -Dimensions) "window"))) - -(def defaults {:gap 8 - :sneak 8 - :pageStyle {} - :scrollThreshold 20}) - -(defn get-active-page [data] - (get data :activePage 0)) - -(defn get-sneak [{:keys [sneak gap count]}] - (if (> (or count 2) 1) - (or sneak (:sneak defaults)) - gap)) - -(defn get-gap [data] - (get data :gap (:gap defaults))) - -(defn get-count [data] - (get data :count)) - -(defn compute-page-width - ([gap sneak] - (compute-page-width (window-page-width) gap sneak)) - ([window-page-width gap sneak] - (- window-page-width (+ (* 2 gap) (* 2 sneak))))) - -(defn get-page-width [data] - (get data :pageWidth (compute-page-width (get-gap data) (get-sneak data)))) - -(defn get-page-style [data] - (let [data-style (get data :pageStyle {})] - (merge (:pageStyle defaults) data-style))) - -(defn get-scroll-threshold [data] - (get data :scrollThreshold (:scrollThreshold defaults))) - -(defn apply-props [component props] - (let [sneak (get-sneak props) - page-width (get-page-width props) - style (get-page-style props) - gap (quot (- (window-page-width) - (* 2 sneak) - page-width) - 2) - count (get-count props)] - (reagent.core/set-state component {:sneak sneak - :pageWidth page-width - :pageStyle style - :gap gap - :count count}))) - -(defn scroll-to [component x y] - (.scrollTo (.-scrollView component) (clj->js {:y y - :x x}))) - -(defn get-current-position [event] - (.-x (.-contentOffset (.-nativeEvent event)))) - -(defn get-page-position [state page] - (let [page-width (get-page-width state) - gap (get-gap state) - sneak (get-sneak state) - count (get-count state) - addition (condp = page - 0 gap - (dec count) (- (* 3 gap) (* sneak 2)) - (- sneak (* gap 2)))] - (+ (* page page-width) - (* (dec page) gap) - addition))) - -(defn go-to-page [component page] - (let [props (reagent.core/props component) - state (reagent.core/state component) - page-width (get-page-width state) - gap (get-gap state) - page-position (get-page-position state page)] - (log/debug "go-to-page: props-page-width=" page-width "; gap=" gap - "; page-position=" page-position "; page: " page) - (reagent.core/set-state component {:scrolling? true}) - (utils/set-timeout #(reagent.core/set-state component {:scrolling? false}) 200) - (scroll-to component page-position 0) - (reagent.core/set-state component {:activePage page}) - (when (:onPageChange props) - ((:onPageChange props) page)))) - -(defn on-scroll-end [event component starting-position] - (let [props (reagent.core/props component) - state (reagent.core/state component) - scroll-threshold (get-scroll-threshold props) - current-page (get-active-page state) - current-position (get-current-position event) - page-count (get-count state) - direction (cond - (> current-position (+ starting-position scroll-threshold)) 1 - (< current-position (- starting-position scroll-threshold)) -1 - :else 0) - new-page (+ current-page direction)] - (log/debug state "on-scroll-end: starting position=" starting-position - "; current-position=" current-position "; direction=" direction - "; current-page=" current-page "; new-page=" new-page) - (if (and (not= current-page new-page) - (< -1 new-page page-count)) - (go-to-page component new-page) - (scroll-to component starting-position 0)))) - -(defn component-will-mount [component new-args] - (let [props (reagent.core/props component)] - (log/debug "component-will-mount: new-args=" new-args) - (apply-props component props))) - -(defn component-did-mount [component] - (let [props (reagent.core/props component) - initial-page (.-initialPage props)] - (log/debug "component-did-mount: initial-page="initial-page) - (when (pos? initial-page) - (go-to-page component initial-page)))) - -(defn component-will-receive-props [component new-argv] - (let [props (component/extract-props new-argv)] - (log/debug "component-will-receive-props: props=" props) - (apply-props component props))) - -(defn get-event-width [event] - (.-width (.-layout (.-nativeEvent event)))) - -(defn on-layout-change [event component] - (let [state (reagent.core/state component) - page-width (compute-page-width (get-event-width event) - (get-gap state) - (get-sneak state)) - state-page-width (get-page-width state) - active-page (get-active-page state) - gap (get-gap state) - page-position (* active-page (+ page-width gap))] - (log/debug "Layout changed: " " page-width=" page-width "; state-page-width=" state-page-width) - (if (not= page-width state-page-width) - (do - (reagent.core/set-state component {:pageWidth page-width}) - (.setState component (clj->js {:layout (.-layout (.-nativeEvent event))}))) - (scroll-to component page-position 0)))) - -(defn get-pages [component data children] - (let [page-width (get-page-width data) - page-style (get-page-style data) - gap (get-gap data) - count (get-count data)] - (doall (map-indexed (fn [index child] - (let [page-index index - touchable-data {:key index - :onPress #(go-to-page component page-index)}] - [react/touchable-without-feedback touchable-data - [react/view {:style [(styles/page index count page-width gap) - page-style] - :onLayout #(log/debug "view onLayout" %)} - - child]])) children)))) - -(defn reagent-render [data children] - (let [starting-position (atom 0) - component (reagent.core/current-component) - state (reagent.core/state component) - gap (get-gap state)] - (log/debug "reagent-render: " data state) - [react/view {:style styles/scroll-view-container} - [react/scroll-view {:contentContainerStyle (styles/content-container gap) - :automaticallyAdjustContentInsets false - :bounces false - :decelerationRate 0.9 - :horizontal true - :onLayout #(on-layout-change % component) - :scrollEnabled (not (get state :scrolling?)) - :onScrollBeginDrag #(reset! starting-position (get-current-position %)) - :onScrollEndDrag #(on-scroll-end % component @starting-position) - :showsHorizontalScrollIndicator false - :ref #(set! (.-scrollView component) %)} - (get-pages component state children)]])) - -(defn carousel [_ _] - (let [component-data {:component-did-mount component-did-mount - :component-will-mount component-will-mount - :component-will-receive-props component-will-receive-props - :display-name "carousel" - :reagent-render reagent-render}] - (reagent.core/create-class component-data))) diff --git a/src/status_im/ui/components/carousel/styles.cljs b/src/status_im/ui/components/carousel/styles.cljs deleted file mode 100644 index 8c5918428e..0000000000 --- a/src/status_im/ui/components/carousel/styles.cljs +++ /dev/null @@ -1,19 +0,0 @@ -(ns status-im.ui.components.carousel.styles) - -(def scroll-view-container - {:flex 1}) - -(defn content-container [gap] - {:padding-left (quot gap 2) - :padding-right (quot gap 2)}) - -(defn page [index count page-width gap] - (let [margin (quot gap 2) - left-spacing (if (zero? index) gap 0) - right-spacing (if (and (= index (dec count)) - (> count 1)) - gap 0)] - {:width page-width - :justify-content :center - :margin-left (+ margin left-spacing) - :margin-right (+ margin right-spacing)})) diff --git a/src/status_im/ui/components/common/common.cljs b/src/status_im/ui/components/common/common.cljs index d611cb89e5..024c10f964 100644 --- a/src/status_im/ui/components/common/common.cljs +++ b/src/status_im/ui/components/common/common.cljs @@ -13,26 +13,16 @@ (defn top-shadow [] (when platform/android? - [react/linear-gradient - {:style styles/gradient-bottom - :colors styles/gradient-top-colors}])) + [react/view])) (defn bottom-shadow [] (when platform/android? - [react/linear-gradient - {:style styles/gradient-top - :colors styles/gradient-bottom-colors}])) + [react/view])) (defn separator [style & [wrapper-style]] [react/view (merge styles/separator-wrapper wrapper-style) [react/view (merge styles/separator style)]]) -(defn form-spacer [] - [react/view - [bottom-shadow] - [react/view styles/form-spacer] - [top-shadow]]) - (defn list-separator [] [separator styles/list-separator]) diff --git a/src/status_im/ui/components/context_menu.cljs b/src/status_im/ui/components/context_menu.cljs deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/status_im/ui/components/drag_drop.cljs b/src/status_im/ui/components/drag_drop.cljs deleted file mode 100644 index be6478ca18..0000000000 --- a/src/status_im/ui/components/drag_drop.cljs +++ /dev/null @@ -1,11 +0,0 @@ -(ns status-im.ui.components.drag-drop - (:require [status-im.ui.components.react :as react])) - -(defn pan-handlers [pan-responder] - (js->clj (.-panHandlers pan-responder))) - -(defn create-pan-responder [{:keys [on-move on-release]}] - (.create react/pan-responder - (clj->js {:onStartShouldSetPanResponder (fn [] true) - :onPanResponderMove on-move - :onPanResponderRelease on-release}))) diff --git a/src/status_im/ui/components/icons/custom_icons.cljs b/src/status_im/ui/components/icons/custom_icons.cljs deleted file mode 100644 index 84324aa36f..0000000000 --- a/src/status_im/ui/components/icons/custom_icons.cljs +++ /dev/null @@ -1,6 +0,0 @@ -(ns status-im.ui.components.icons.custom-icons - (:require [reagent.core :as reagent] - [status-im.react-native.js-dependencies :as js-dependencies])) - -(def ion-icon - (reagent/adapt-react-class (.-default js-dependencies/vector-icons))) diff --git a/src/status_im/ui/components/icons/vector_icons.cljs b/src/status_im/ui/components/icons/vector_icons.cljs index 1cbf7fa684..b926c043ad 100644 --- a/src/status_im/ui/components/icons/vector_icons.cljs +++ b/src/status_im/ui/components/icons/vector_icons.cljs @@ -24,6 +24,7 @@ (def path (get-class "Path")) (def use (get-class "Use")) (def defs (get-class "Defs")) +(def circle (get-class "Circle")) (def icons {:icons/discover (components.svg/slurp-svg "./resources/icons/bottom/discover_gray.svg") :icons/contacts (components.svg/slurp-svg "./resources/icons/bottom/contacts_gray.svg") @@ -80,7 +81,8 @@ :icons/wnode (components.svg/slurp-svg "./resources/icons/wnode.svg") :icons/refresh (components.svg/slurp-svg "./resources/icons/refresh.svg") :icons/newchat (components.svg/slurp-svg "./resources/icons/newchat.svg") - :icons/logo (components.svg/slurp-svg "./resources/icons/logo.svg")}) + :icons/logo (components.svg/slurp-svg "./resources/icons/logo.svg") + :icons/camera (components.svg/slurp-svg "./resources/icons/camera.svg")}) (defn normalize-property-name [n] (if (= n :icons/options) diff --git a/src/status_im/ui/components/image_button/styles.cljs b/src/status_im/ui/components/image_button/styles.cljs deleted file mode 100644 index f9e16a9e4e..0000000000 --- a/src/status_im/ui/components/image_button/styles.cljs +++ /dev/null @@ -1,29 +0,0 @@ -(ns status-im.ui.components.image-button.styles - (:require [status-im.ui.components.styles :as styles])) - -(def image-button - {:position :absolute - :bottom 2 - :right 16 - :flex 1 - :height 50 - :align-items :center}) - -(def image-button-content - {:flex 1 - :flex-direction :row - :height 50 - :align-items :center - :align-self :center}) - -(def image-button-text - {:flex 1 - :flex-direction :column - :letter-spacing -0.3 - :margin-left 8}) - -(def scan-button-text - (merge image-button-text {:color styles/color-blue})) - -(def show-qr-button-text - (merge image-button-text {:color "#838c93"})) diff --git a/src/status_im/ui/components/image_button/view.cljs b/src/status_im/ui/components/image_button/view.cljs deleted file mode 100644 index 605fc2749d..0000000000 --- a/src/status_im/ui/components/image_button/view.cljs +++ /dev/null @@ -1,20 +0,0 @@ -(ns status-im.ui.components.image-button.view - (:require [status-im.i18n :as i18n] - [status-im.ui.components.icons.vector-icons :as vector-icons] - [status-im.ui.components.image-button.styles :as styles] - [status-im.ui.components.react :as react] - [status-im.ui.components.styles :as components.styles])) - -(defn- image-button [{:keys [value style handler]}] - [react/view styles/image-button - [react/touchable-highlight {:on-press handler} - [react/view styles/image-button-content - [vector-icons/icon :icons/fullscreen {:color :blue :style components.styles/icon-scan}] - (when value - [react/text {:style style} value])]]]) - -(defn scan-button [{:keys [show-label? handler]}] - [image-button {:value (when show-label? - (i18n/label :t/scan-qr)) - :style styles/scan-button-text - :handler handler}]) \ No newline at end of file diff --git a/src/status_im/ui/components/item_checkbox.cljs b/src/status_im/ui/components/item_checkbox.cljs deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/status_im/ui/components/native_action_button.cljs b/src/status_im/ui/components/native_action_button.cljs deleted file mode 100644 index 7b72f4f570..0000000000 --- a/src/status_im/ui/components/native_action_button.cljs +++ /dev/null @@ -1,10 +0,0 @@ -(ns status-im.ui.components.native-action-button - (:require [reagent.core :as reagent] - [status-im.react-native.js-dependencies :as js-dependencies])) - -(def native-action-button - (reagent/adapt-react-class (.-default js-dependencies/action-button))) - - -(def native-action-button-item - (reagent/adapt-react-class (.. js-dependencies/action-button -default -Item))) diff --git a/src/status_im/ui/components/status_view/view.cljs b/src/status_im/ui/components/status_view/view.cljs deleted file mode 100644 index 07444b9b81..0000000000 --- a/src/status_im/ui/components/status_view/view.cljs +++ /dev/null @@ -1,30 +0,0 @@ -(ns status-im.ui.components.status-view.view - (:require [clojure.string :as string] - [status-im.ui.components.react :as react] - [status-im.ui.components.styles :as components.styles] - [status-im.utils.core :as utils.core])) - -(defn tag-view [tag] - [react/text {:style {:color components.styles/color-blue4-faded} - :font :medium} - (str tag " ")]) - -(defn status-view [{:keys [style - non-tag-color - message-id - status - on-press - number-of-lines] - :or {message-id "msg" - non-tag-color components.styles/color-black}}] - [react/text {:style style - :on-press on-press - :number-of-lines number-of-lines - :font :default} - (for [[i status] (map-indexed vector (string/split status #" "))] - (if (utils.core/hash-tag? status) - ^{:key (str "item-" message-id "-" i)} - [tag-view status] - ^{:key (str "item-" message-id "-" i)} - [react/text {:style {:color non-tag-color}} - (str status " ")]))]) diff --git a/src/status_im/ui/components/sticky_button.cljs b/src/status_im/ui/components/sticky_button.cljs deleted file mode 100644 index 5e568ea64d..0000000000 --- a/src/status_im/ui/components/sticky_button.cljs +++ /dev/null @@ -1,30 +0,0 @@ -(ns status-im.ui.components.sticky-button - (:require-macros [status-im.utils.styles :refer [defstyle defnstyle]]) - (:require [status-im.ui.components.styles :as styles] - [status-im.utils.platform :as platform] - [status-im.utils.core :as u] - [status-im.ui.components.react :as react])) - -(def sticky-button-style - {:flex-direction :row - :height 52 - :justify-content :center - :align-items :center - :background-color styles/color-light-blue}) - -(defstyle sticky-button-label-style - {:color styles/color-white - :ios {:font-size 17 - :line-height 20 - :letter-spacing -0.2} - :android {:font-size 14 - :letter-spacing 0.5}}) - -(defn sticky-button - ([label on-press] (sticky-button label on-press false)) - ([label on-press once?] - [react/touchable-highlight {:on-press (if once? (u/wrap-call-once! on-press) on-press)} - [react/view sticky-button-style - [react/text {:style sticky-button-label-style - :uppercase? true} - label]]])) diff --git a/src/status_im/ui/components/styles.cljs b/src/status_im/ui/components/styles.cljs index 465999dcc6..6ace15535a 100644 --- a/src/status_im/ui/components/styles.cljs +++ b/src/status_im/ui/components/styles.cljs @@ -1,25 +1,16 @@ (ns status-im.ui.components.styles - (:require [status-im.utils.platform :as platform] - [status-im.ui.components.colors :as colors])) - -;; TODO(oskarth): Make a palette of all these colors + (:require [status-im.ui.components.colors :as colors])) (def color-transparent "transparent") (def color-blue "#7099e6") -(def color-blue2 "#5b6dee") -(def color-blue3 "#424fae") (def color-blue4 "#4360df") ; colors/blue -(def color-blue4-faded "rgba(67,96,222,0.87)") (def color-blue4-transparent "rgba(67, 96, 223, 0.10)") (def color-blue6 "#3745AF") (def color-blue-transparent "#7099e632") (def color-black "#000000") (def color-purple "#a187d5") -(def color-gray-transparent-light "rgba(0, 0, 0, 0.1)") -(def color-gray-transparent-medium-light "rgba(0, 0, 0, 0.2)") (def color-gray-transparent "rgba(0, 0, 0, 0.4)") (def color-gray4-transparent "rgba(147, 155, 161, 0.2)") -(def color-gray10-transparent "rgba(184, 193, 199, 0.5)") (def color-gray "#838c93de") (def color-gray2 "#8f838c93") (def color-gray3 "#00000040") @@ -28,42 +19,25 @@ (def color-gray6 "#212121") (def color-gray7 "#9fa3b4") (def color-gray9 "#E9EBEC") -(def color-gray10 "#9BA3A8") -(def color-gray11 "#EEF1F5") (def color-dark "#49545d") -(def color-steel "#838b91") (def color-white "white") (def color-white-transparent "#ffffff66") (def color-white-transparent-1 "#f1f1f11a") -(def color-white-transparent-2 "#fefefe21") (def color-white-transparent-3 "#FFFFFF1A") (def color-white-transparent-4 "#FFFFFF33") (def color-white-transparent-5 "#FFFFFF8C") -(def color-white-transparent-6 "rgba(255, 255, 255, 0.6)") (def color-light-blue "#628fe3") (def color-light-blue-transparent "#628fe333") -(def color-light-blue6 "#e3ebfa") -(def color-dark-blue-1 "#252c4a") (def color-dark-blue-2 "#1f253f") -(def color-dark-blue-3 "#191f37") -(def color-dark-blue-4 "#6e00e4") (def color-light-gray "#EEF2F5") -(def color-light-gray2 "#ececf0") (def color-light-gray3 "#e8ebec") -(def color-light-gray4 "#eff2f3") -(def color-light-gray5 "#D7D7D7") (def color-light-gray6 "#BAC1C6") (def color-red "red") (def color-red-2 "#d84b4b") -(def color-red-3 "#FFC1BD") -(def color-red-4 "#8A3832") (def color-light-red "#e86363") -(def color-green-1 "#a8f4d4") -(def color-green-2 "#448469") (def color-green-3 "#44d058") (def color-green-3-light "rgba(68, 208, 88, 0.2)") (def color-green-4 "#0dcd8d") -(def color-cyan "#7adcfb") (def color-separator "#D6D6D6") @@ -76,7 +50,6 @@ (def online-color color-light-blue) (def new-messages-count-color color-blue-transparent) (def chat-background color-light-gray) -(def selected-message-color "#E4E9ED") (def separator-color "#0000001f") (def default-chat-color color-purple) @@ -118,23 +91,6 @@ {:width 23 :height 22}) -(def icon-scan - {:width 18 - :height 18}) - -(def icon-plus - {:width 18 - :height 18}) - -(def icon-close - {:width 12 - :height 12}) - -(def white-form-text-input - {:margin-left -4 - :font-size 14 - :color color-white}) - (def button-input-container {:flex 1 :flex-direction :row}) diff --git a/src/status_im/ui/components/text_field/styles.cljs b/src/status_im/ui/components/text_field/styles.cljs deleted file mode 100644 index e2a4fe95f8..0000000000 --- a/src/status_im/ui/components/text_field/styles.cljs +++ /dev/null @@ -1,35 +0,0 @@ -(ns status-im.ui.components.text-field.styles - (:require-macros [status-im.utils.styles :refer [defnstyle]])) - -(def text-field-container - {:padding-top 2}) - -(def text-input - {:font-size 16 - :text-align-vertical :center}) - -(defnstyle label [top font-size color] - {:position :absolute - :top top - :color color - :font-size font-size - :background-color :transparent - :ios {:left 0} - :android {:left 4}}) - -(defn underline-container [background-color] - {:background-color background-color - :align-items :center}) - -(defn underline [background-color width height] - {:background-color background-color - :height height - :width width}) - -(defnstyle error-text [color] - {:color color - :background-color :transparent - :font-size 12 - :line-height 20 - :ios {:margin-left 0} - :android {:margin-left 4}}) diff --git a/src/status_im/ui/components/text_field/view.cljs b/src/status_im/ui/components/text_field/view.cljs deleted file mode 100644 index bff4ddebfd..0000000000 --- a/src/status_im/ui/components/text_field/view.cljs +++ /dev/null @@ -1,178 +0,0 @@ -(ns status-im.ui.components.text-field.view - (:require [clojure.string :as string] - [reagent.core :as reagent] - [status-im.ui.components.react :as react] - [status-im.ui.components.text-field.styles :as styles] - [status-im.ui.components.animation :as animation] - [taoensso.timbre :as log] - [status-im.ui.components.styles :as components.styles])) - - -(def config {:label-top 16 - :label-bottom 37 - :label-font-large 16 - :label-font-small 13 - :label-animation-duration 200}) - -(def default-props {:wrapper-style {} - :input-style {} - :line-style {} - :editable true - :label-color "#838c93" - :line-color components.styles/separator-color - :focus-line-color components.styles/separator-color - :focus-line-height 1 - :error-color "#d50000" - :secure-text-entry false - :on-focus #() - :on-blur #() - :on-change-text #() - :on-change #() - :auto-capitalize :sentences}) - -(defn field-animation [{:keys [top to-top font-size to-font-size - line-width to-line-width line-height to-line-height]} & [value-blank?]] - (let [duration (:label-animation-duration config) - animation (animation/parallel (into [] - (concat - (when (or (nil? value-blank?) value-blank?) - [(animation/timing top {:toValue to-top - :duration duration}) - (animation/timing font-size {:toValue to-font-size - :duration duration})]) - [(animation/timing line-width {:toValue to-line-width - :duration duration}) - (animation/timing line-height {:toValue to-line-height - :duration duration})])))] - (animation/start animation (fn [arg] - (when (.-finished arg) - (log/debug "Field animation finished")))))) - -; Invoked once before the component is mounted. The return value will be used -; as the initial value of this.state. -(defn get-initial-state [_] - {:has-focus false - :float-label? false - :label-top 0 - :label-font-size 0 - :line-width (animation/create-value 0) - :line-height (animation/create-value 1) - :max-line-width 100}) - -; Invoked once, both on the client and server, immediately before the initial -; rendering occurs. If you call setState within this method, render() will see -; the updated state and will be executed only once despite the state change. -(defn component-will-mount [component] - (let [{:keys [value]} (reagent/props component) - data {:label-top (animation/create-value (if (string/blank? value) - (:label-bottom config) - (:label-top config))) - :label-font-size (animation/create-value (if (string/blank? value) - (:label-font-large config) - (:label-font-small config))) - :float-label? (if (string/blank? value) false true)}] - ;(log/debug "component-will-mount") - (reagent/set-state component data))) - -(defn on-input-focus [{:keys [component animation onFocus]}] - (do - (log/debug "input focused") - (reagent/set-state component {:has-focus true - :float-label? true}) - (field-animation (merge animation - {:to-line-width (:max-line-width (reagent/state component))})) - (when onFocus (onFocus)))) - -(defn on-input-blur [{:keys [component value animation onBlur]}] - (log/debug "Input blurred") - (reagent/set-state component {:has-focus false - :float-label? (if (string/blank? value) false true)}) - (field-animation animation (string/blank? value)) - (when onBlur (onBlur))) - -(defn get-width [event] - (.-width (.-layout (.-nativeEvent event)))) - -(defn reagent-render [_ _] - (let [component (reagent/current-component) - input-ref (reagent/atom nil) - {:keys [float-label? - label-top - label-font-size - line-width - line-height - current-value - valid-value - temp-value - max-length]} (reagent/state component) - {:keys [wrapper-style input-style label-hidden? focus-line-height - secure-text-entry label-color error-color error label value on-focus on-blur validator - auto-focus on-change-text on-change on-end-editing on-submit-editing editable placeholder - placeholder-text-color auto-capitalize multiline number-of-lines accessibility-label]} - (merge default-props (reagent/props component)) - valid-value (or valid-value "") - label-color (if (and error (not float-label?)) error-color label-color) - label (when-not label-hidden? - (if error (str label " *") label))] - [react/view (merge styles/text-field-container wrapper-style) - (when-not label-hidden? - [react/animated-text {:style (styles/label label-top label-font-size label-color)} label]) - [react/text-input {:ref #(reset! input-ref %) - :style (merge styles/text-input input-style) - :placeholder (or placeholder "") - :placeholder-text-color placeholder-text-color - :editable editable - :multiline multiline - :number-of-lines number-of-lines - :secure-text-entry secure-text-entry - :auto-capitalize auto-capitalize - :on-focus #(on-input-focus {:component component - :animation {:top label-top - :to-top (:label-top config) - :font-size label-font-size - :to-font-size (:label-font-small config) - :line-width line-width - :line-height line-height - :to-line-height focus-line-height} - :onFocus on-focus}) - :on-blur #(on-input-blur {:component component - :value (or current-value value) - :animation {:top label-top - :to-top (:label-bottom config) - :font-size label-font-size - :to-font-size (:label-font-large config) - :line-width line-width - :line-height line-height - :to-line-width 0 - :to-line-height 1} - :onBlur on-blur}) - :on-change-text (fn [text] - (reagent/set-state component {:current-value text}) - (if (or (not validator) (validator text)) - (do - (reagent/set-state component {:valid-value text - :temp-value nil}) - (on-change-text text)) - (reagent/set-state component {:temp-value valid-value - :max-length (count valid-value)}))) - :on-change on-change - :default-value value - :value temp-value - :max-length max-length - :on-submit-editing #(do (.blur @input-ref) (when on-submit-editing (on-submit-editing))) - :on-end-editing (when on-end-editing on-end-editing) - :auto-focus (true? auto-focus) - :accessibility-label accessibility-label}]])) - -(defn text-field [_ _] - (let [component-data {:get-initial-state get-initial-state - :component-will-mount component-will-mount - :display-name "text-field" - :reagent-render reagent-render - :component-did-update (fn [comp] - (let [{:keys [temp-value]} (reagent/state comp)] - (when temp-value - (reagent/set-state comp {:temp-value nil - :max-length nil}))))}] - ;(log/debug "Creating text-field component: " data) - (reagent/create-class component-data))) diff --git a/src/status_im/ui/components/text_input/view.cljs b/src/status_im/ui/components/text_input/view.cljs index 57686104c3..f08fa0331f 100644 --- a/src/status_im/ui/components/text_input/view.cljs +++ b/src/status_im/ui/components/text_input/view.cljs @@ -4,12 +4,12 @@ [status-im.ui.components.colors :as colors] [status-im.ui.components.tooltip.views :as tooltip])) -(defn text-input-with-label [{:keys [label error style height] :as props}] +(defn text-input-with-label [{:keys [label error style height container] :as props}] [react/view (when label [react/text {:style styles/label} label]) - [react/view {:style (styles/input-container height)} + [react/view {:style (merge (styles/input-container height) container)} [react/text-input (merge {:style (merge styles/input style) diff --git a/src/status_im/ui/screens/add_new/new_public_chat/db.cljs b/src/status_im/ui/screens/add_new/new_public_chat/db.cljs index 78e8907eb1..f3fc10c17e 100644 --- a/src/status_im/ui/screens/add_new/new_public_chat/db.cljs +++ b/src/status_im/ui/screens/add_new/new_public_chat/db.cljs @@ -16,4 +16,4 @@ (spec/def ::topic (spec/and :global/not-empty-string ::legal-name - (partial re-matches #"[a-z0-9\-]+"))) + (partial re-matches #"[a-z\-]+"))) diff --git a/src/status_im/ui/screens/add_new/new_public_chat/styles.cljs b/src/status_im/ui/screens/add_new/new_public_chat/styles.cljs index e0c5c045a4..445d6e16a5 100644 --- a/src/status_im/ui/screens/add_new/new_public_chat/styles.cljs +++ b/src/status_im/ui/screens/add_new/new_public_chat/styles.cljs @@ -1,7 +1,6 @@ (ns status-im.ui.screens.add-new.new-public-chat.styles (:require-macros [status-im.utils.styles :refer [defstyle]]) - (:require [status-im.ui.components.colors :as colors] - [status-im.ui.components.styles :as styles])) + (:require [status-im.ui.components.colors :as colors])) (def group-chat-name-input {:font-size 17 @@ -9,29 +8,13 @@ :letter-spacing -0.2 :color colors/text}) -(defstyle group-chat-topic-input - {:font-size 14 - :line-height 16 - :color colors/text - :padding-left -1 - :ios {:padding-bottom 0}}) - -(defstyle topic-hash-style - {:width 10 - :position :absolute - :android {:top 8 :left 3} - :ios {:top 6 :left 3}}) - (def topic-hash (merge group-chat-name-input {:margin-left 14})) -(def group-chat-name-wrapper - {:flex 1}) - (def group-container - {:flex 1 - :flex-direction :column}) + {:flex 1 + :flex-direction :column}) (def chat-name-container {:margin-top 10}) @@ -46,14 +29,6 @@ (merge members-text {:padding-horizontal 16})) -(def input-container - {:flex-direction :row - :align-items :center - :border-radius styles/border-radius - :height 52 - :background-color colors/gray-light - :margin-top 24}) - (def public-chat-icon {:background-color colors/blue :border-radius 50 @@ -65,3 +40,12 @@ (def public-chat-icon-symbol {:font-size 20 :color colors/white}) + +(def input-container + {:padding-left 0 + :background-color nil}) + +(def tooltip + {:bottom-value -15 + :color colors/red-light + :font-size 12}) diff --git a/src/status_im/ui/screens/add_new/new_public_chat/view.cljs b/src/status_im/ui/screens/add_new/new_public_chat/view.cljs index 5bf891977c..0adb625bff 100644 --- a/src/status_im/ui/screens/add_new/new_public_chat/view.cljs +++ b/src/status_im/ui/screens/add_new/new_public_chat/view.cljs @@ -1,42 +1,38 @@ (ns status-im.ui.screens.add-new.new-public-chat.view (:require-macros [status-im.utils.views :as views]) - (:require [cljs.spec.alpha :as spec] - [re-frame.core :as re-frame] + (:require [re-frame.core :as re-frame] [status-im.i18n :as i18n] [status-im.ui.components.list.views :as list] [status-im.ui.components.react :as react] - [status-im.ui.components.styles :as components.styles] [status-im.ui.components.status-bar.view :as status-bar] - [status-im.ui.components.text-field.view :as text-field] [status-im.ui.components.toolbar.view :as toolbar] [status-im.ui.screens.add-new.styles :as add-new.styles] [status-im.ui.screens.add-new.new-public-chat.styles :as styles] [status-im.ui.screens.add-new.new-public-chat.db :as v] - status-im.utils.db)) + [status-im.ui.components.text-input.view :as text-input.view] + status-im.utils.db + [status-im.ui.components.styles :as common.styles] + [cljs.spec.alpha :as spec] + [status-im.ui.components.tooltip.views :as tooltip])) -(defn- topic-error-label [topic] - (cond - (not (spec/valid? :global/not-empty-string topic)) - (i18n/label :t/empty-topic) - - (not (spec/valid? ::v/topic topic)) - (i18n/label :t/topic-format))) - -(defn- chat-name-input [topic] - [react/view (merge add-new.styles/input-container {:margin-top 8}) - [react/text {:style styles/topic-hash} "#"] - [text-field/text-field - {:wrapper-style styles/group-chat-name-wrapper - :line-color components.styles/color-transparent - :focus-line-color components.styles/color-transparent - :label-hidden? true - :input-style styles/group-chat-topic-input - :on-change-text #(re-frame/dispatch [:set :public-group-topic %]) - :on-submit-editing #(when topic (re-frame/dispatch [:create-new-public-chat topic])) - :value topic - :validator #(re-matches #"[a-z\-]*" %) - :auto-capitalize :none - :accessibility-label :chat-name-input}]]) +(defn- chat-name-input [topic error] + [react/view + [react/view (merge add-new.styles/input-container {:margin-top 8}) + [react/text {:style styles/topic-hash} "#"] + [react/view common.styles/flex + [text-input.view/text-input-with-label + {:container styles/input-container + :on-change-text #(do + (re-frame/dispatch [:set :public-group-topic-error (when-not (spec/valid? ::v/topic %) + (i18n/label :t/topic-name-error))]) + (re-frame/dispatch [:set :public-group-topic %])) + :on-submit-editing #(when (and topic (spec/valid? ::v/topic topic)) + (re-frame/dispatch [:create-new-public-chat topic])) + :auto-capitalize :none + :accessibility-label :chat-name-input + :placeholder nil}]]] + (when error + [tooltip/tooltip error styles/tooltip])]) (defn- public-chat-icon [topic] [react/view styles/public-chat-icon @@ -58,7 +54,8 @@ (def default-public-chats ["status" "openbounty" "ethereum"]) (views/defview new-public-chat [] - (views/letsubs [topic [:get :public-group-topic]] + (views/letsubs [topic [:get :public-group-topic] + error [:get :public-group-topic-error]] [react/view styles/group-container [status-bar/status-bar] [toolbar/simple-toolbar @@ -67,7 +64,7 @@ [react/text {:style styles/section-title :font :medium} (i18n/label :t/public-group-topic)] - [chat-name-input topic]] + [chat-name-input topic error]] [react/view styles/chat-name-container [react/text {:style styles/section-title :font :medium} diff --git a/src/status_im/ui/screens/contacts/events.cljs b/src/status_im/ui/screens/contacts/events.cljs index 1857eb6a5d..bf7762f1c8 100644 --- a/src/status_im/ui/screens/contacts/events.cljs +++ b/src/status_im/ui/screens/contacts/events.cljs @@ -6,22 +6,17 @@ [status-im.protocol.core :as protocol] [status-im.utils.contacts :as utils.contacts] [status-im.utils.random :as random] - [taoensso.timbre :as log] [cljs.reader :refer [read-string]] [status-im.utils.js-resources :as js-res] - [status-im.react-native.js-dependencies :as rn-dependencies] - [status-im.js-dependencies :as dependencies] [status-im.i18n :refer [label]] [status-im.ui.screens.contacts.navigation] [status-im.ui.screens.navigation :as navigation] - [status-im.ui.screens.discover.events :as discover-events] [status-im.chat.console :as console-chat] [status-im.commands.events.loading :as loading-events] - [cljs.spec.alpha :as spec] - [status-im.protocol.web3.utils :as web3.utils] [status-im.ui.screens.add-new.new-chat.db :as new-chat.db] - [clojure.string :as string] - [status-im.utils.datetime :as datetime])) + [status-im.utils.datetime :as datetime] + [status-im.js-dependencies :as js-dependencies])) + ;;;; COFX (reg-cofx @@ -135,7 +130,7 @@ 128 public-key nil)] (when normalized-key - (subs (.sha3 dependencies/Web3.prototype normalized-key #js {:encoding "hex"}) 26)))) + (subs (.sha3 js-dependencies/Web3.prototype normalized-key #js {:encoding "hex"}) 26)))) (defn- prepare-default-groups-events [groups default-groups] [[:add-contact-groups @@ -268,7 +263,6 @@ :pending? false)] (-> fx (watch-contact contact') - (discover-events/send-portions-when-contact-exists chat-or-whisper-id) (add-new-contact contact')))) (defn add-contact-and-open-chat [fx whisper-id] diff --git a/src/status_im/ui/screens/contacts/views.cljs b/src/status_im/ui/screens/contacts/views.cljs index 2b79c0b3e5..dbbf43dbf5 100644 --- a/src/status_im/ui/screens/contacts/views.cljs +++ b/src/status_im/ui/screens/contacts/views.cljs @@ -2,9 +2,6 @@ (:require-macros [status-im.utils.views :refer [defview letsubs]]) (:require [re-frame.core :refer [dispatch]] [status-im.ui.components.react :refer [view text touchable-highlight scroll-view]] - [status-im.ui.components.native-action-button :refer [native-action-button - native-action-button-item]] - [status-im.ui.components.icons.custom-icons :refer [ion-icon]] [status-im.ui.components.contact.contact :refer [contact-view]] [status-im.utils.platform :refer [platform-specific ios? android?]] [status-im.utils.utils :as u] diff --git a/src/status_im/ui/screens/db.cljs b/src/status_im/ui/screens/db.cljs index 123f2d107e..f20921635f 100644 --- a/src/status_im/ui/screens/db.cljs +++ b/src/status_im/ui/screens/db.cljs @@ -10,7 +10,6 @@ status-im.chat.specs status-im.commands.specs status-im.ui.screens.profile.db - status-im.ui.screens.discover.db status-im.ui.screens.network-settings.db status-im.ui.screens.offline-messaging-settings.db status-im.ui.screens.browser.db @@ -64,8 +63,6 @@ ;;height of native keyboard if shown (spec/def ::keyboard-height (spec/nilable number?)) (spec/def ::keyboard-max-height (spec/nilable number?)) -;;:unknown - not used -(spec/def ::orientation (spec/nilable keyword?)) ;;:online - presence of internet connection in the phone (spec/def ::network-status (spec/nilable keyword?)) @@ -180,7 +177,6 @@ ::status-node-started? ::keyboard-height ::keyboard-max-height - ::orientation ::network-status ::mailserver-status ::peers-count @@ -211,6 +207,7 @@ :chat/selected-participants :chat/chat-loaded-callbacks :chat/public-group-topic + :chat/public-group-topic-error :chat/messages :chat/not-loaded-message-ids :chat/last-clock-value diff --git a/src/status_im/ui/screens/discover/all_dapps/views.cljs b/src/status_im/ui/screens/discover/all_dapps/views.cljs deleted file mode 100644 index a545d197bd..0000000000 --- a/src/status_im/ui/screens/discover/all_dapps/views.cljs +++ /dev/null @@ -1,74 +0,0 @@ -(ns status-im.ui.screens.discover.all-dapps.views - (:require-macros [status-im.utils.views :refer [defview letsubs]]) - (:require [cljs.pprint :as pprint] - [re-frame.core :as re-frame] - [status-im.ui.components.react :as react] - [status-im.ui.components.list.views :as list] - [status-im.ui.components.chat-icon.screen :as chat-icon] - [status-im.ui.screens.discover.components.views :as discover-components] - [status-im.ui.screens.discover.styles :as styles] - [status-im.i18n :as i18n] - [status-im.ui.components.toolbar.view :as toolbar])) - -(defn navigate-to-dapp [dapp] - (do (re-frame/dispatch [:set :discover-current-dapp dapp]) - (re-frame/dispatch [:navigate-to :discover-dapp-details]))) - -(defn render-dapp [{:keys [name photo-path dapp?] :as dapp}] - [react/touchable-highlight {:on-press #(navigate-to-dapp dapp) - :disabled (empty? name)} - [react/view {:style styles/all-dapps-flat-list-item} - - [react/view styles/dapps-list-item-name-container - [react/view styles/dapps-list-item-avatar-container - [react/view [chat-icon/contact-icon-view dapp {:size 80}]]] - [react/text {:style styles/dapps-list-item-name - :font :medium - :number-of-lines 2} - name]]]]) - -;; TODO(oskarth): Move this to top level discover ns -(defn preview [dapps] - [react/view styles/dapp-preview-container - ;; TODO(oskarth): Refactor to shorter form - [discover-components/title - :t/dapps - :t/all - #(re-frame/dispatch [:navigate-to :discover-all-dapps]) - true] - (if (seq dapps) - [list/flat-list {:data (vals dapps) - :key-fn :dapp-url - :render-fn render-dapp - :horizontal true - :default-separator? false - :shows-horizontal-scroll-indicator false - :content-container-style styles/dapp-preview-flat-list}] - [react/text (i18n/label :t/none)])]) - -;; todo(goranjovic): this is a hacky fix for the dapp alignment problem in a flatlist based grid -;; it works fine only if the number of items is evenly divisible with the number of columns -;; so we make it so by adding up blank dapp items. -;; the proper solution might be to find a decent component for grid lists -(defn add-blank-dapps-for-padding [columns dapps] - (let [extras (mod (count dapps) columns)] - (if (zero? extras) - dapps - (concat dapps - (map (fn [i] {:name "" - :dapp-url (str "blank-" i)}) - (range (- columns extras))))))) - -(defview main [] - (letsubs [all-dapps [:discover/all-dapps]] - (let [columns 3] - (when (seq all-dapps) - [react/view styles/all-dapps-container - [toolbar/toolbar {} - toolbar/default-nav-back - [toolbar/content-title (i18n/label :t/dapps)]] - [list/flat-list {:data (add-blank-dapps-for-padding columns (vals all-dapps)) - :key-fn :dapp-url - :render-fn render-dapp - :num-columns columns - :content-container-style styles/all-dapps-flat-list}]])))) diff --git a/src/status_im/ui/screens/discover/components/views.cljs b/src/status_im/ui/screens/discover/components/views.cljs deleted file mode 100644 index cb211f0849..0000000000 --- a/src/status_im/ui/screens/discover/components/views.cljs +++ /dev/null @@ -1,122 +0,0 @@ -(ns status-im.ui.screens.discover.components.views - (:require-macros [status-im.utils.views :refer [defview letsubs]]) - (:require [re-frame.core :as re-frame] - [clojure.string :as str] - [status-im.ui.components.react :as react] - [status-im.ui.screens.discover.styles :as styles] - [status-im.ui.components.status-view.view :as view] - [status-im.utils.gfycat.core :as gfycat] - [status-im.utils.identicon :as identicon] - [status-im.ui.components.chat-icon.screen :as chat-icon] - [status-im.ui.components.icons.vector-icons :as vector-icons] - [status-im.i18n :as i18n])) - -;; TODO(oskarth): Too many positional args, refactor to map -(defn title [label-kw action-kw action-fn active?] - [react/view styles/title - [react/text {:style styles/title-text - :font :medium} - (i18n/label label-kw)] - [react/touchable-highlight {:on-press action-fn - :disabled (not active?)} - [react/view {} - ;; NOTE(oskarth): text-transform to uppercase not supported as RN style - ;; https://github.com/facebook/react-native/issues/2088 - [react/text {:style (styles/title-action-text active?) - :uppercase? true} - (i18n/label action-kw)]]]]) - - ;; TODO(oskarth): Reconcile with above fn -(defn title-no-action [label-kw] - [react/view styles/title - [react/text {:style styles/title-text - :font :medium} - (i18n/label label-kw)]]) - -(defn display-name [me? account-name contact-name name whisper-id] - (cond - me? account-name ;status by current user - (not (str/blank? contact-name)) contact-name ; what's the - (not (str/blank? name)) name ;difference - :else (gfycat/generate-gfy whisper-id))) - -(defn display-image [me? account-photo-path contact-photo-path photo-path whisper-id] - (cond - me? account-photo-path - (not (str/blank? contact-photo-path)) contact-photo-path - (not (str/blank? photo-path)) photo-path - :else (identicon/identicon whisper-id))) - -(defn chat-button [whisper-id] - [react/touchable-highlight {:on-press #(re-frame/dispatch [:start-chat whisper-id {:navigation-replace? true}])} - [react/view styles/chat-button-container - [react/view styles/chat-button-inner - [vector-icons/icon :icons/chats {:color :active}] - [react/text {:style styles/chat-button-text - :uppercase? true} - (i18n/label :t/chat)]]]]) - -(defn discover-list-item [{:keys [message show-separator? current-account contacts]}] - (let [{contact-name :name - contact-photo-path :photo-path} (get contacts (:whisper-id message)) - {:keys [name photo-path whisper-id message-id status]} message - {account-photo-path :photo-path - account-address :public-key - account-name :name} current-account - me? (= account-address whisper-id)] - [react/view - [react/view styles/discover-list-item - [view/status-view {:id message-id - :style styles/discover-item-status-text - :status status}] - [react/touchable-highlight {:on-press #(re-frame/dispatch [:show-status-author-profile whisper-id])} - [react/view styles/discover-list-item-second-row - [react/view styles/discover-list-item-name-container - [react/view styles/discover-list-item-avatar-container - [chat-icon/chat-icon - (display-image me? account-photo-path contact-photo-path photo-path whisper-id) - {:size 24}]] - [react/view - [react/text {:style styles/discover-list-item-name - :font :medium - :number-of-lines 1} - (display-name me? account-name contact-name name whisper-id)]]] - - (when-not me? - (chat-button whisper-id))]] - (when show-separator? - [react/view styles/separator])]])) - -;; NOTE(oskarth): Should possibly be merged with discover-list-item-full, but -;; there are too many differences between preview item (main screen) and full -;; screen, so safer to modify custom styles here without risking regressions. -(defn discover-list-item-full [{:keys [message show-separator? current-account contacts]}] - (let [{contact-name :name - contact-photo-path :photo-path} (get contacts (:whisper-id message)) - {:keys [name photo-path whisper-id message-id status]} message - {account-photo-path :photo-path - account-address :public-key - account-name :name} current-account - me? (= account-address whisper-id)] - [react/view - [react/view styles/discover-list-item-full ;; XXX: Custom style here - [view/status-view {:id message-id - :style styles/discover-item-status-text - :status status}] - [react/touchable-highlight {:on-press #(re-frame/dispatch [:show-status-author-profile whisper-id])} - [react/view styles/discover-list-item-second-row - [react/view styles/discover-list-item-name-container - [react/view styles/discover-list-item-avatar-container - [chat-icon/chat-icon - (display-image me? account-photo-path contact-photo-path photo-path whisper-id) - {:size 24}]] - [react/view - [react/text {:style styles/discover-list-item-name - :font :medium - :number-of-lines 1} - (display-name me? account-name contact-name name whisper-id)]]] - - (when-not me? - (chat-button whisper-id))]]] - (when show-separator? - [react/view styles/separator])])) diff --git a/src/status_im/ui/screens/discover/dapp_details/views.cljs b/src/status_im/ui/screens/discover/dapp_details/views.cljs deleted file mode 100644 index 391f6963bb..0000000000 --- a/src/status_im/ui/screens/discover/dapp_details/views.cljs +++ /dev/null @@ -1,47 +0,0 @@ -(ns status-im.ui.screens.discover.dapp-details.views - (:require-macros [status-im.utils.views :refer [defview letsubs]]) - (:require [status-im.ui.components.react :as react] - [status-im.ui.screens.discover.components.views :as components] - [status-im.ui.components.chat-icon.screen :as chat-icon.screen] - [status-im.ui.components.common.common :as common] - [status-im.ui.components.icons.vector-icons :as vector-icons] - [status-im.ui.components.toolbar.view :as toolbar] - [status-im.ui.screens.discover.styles :as styles] - [status-im.i18n :as i18n] - [re-frame.core :as re-frame])) - -(defn section [title content] - [react/view styles/dapp-details-section-container - [react/view styles/dapp-details-section-title-container - [react/text {:font :small - :style styles/dapp-details-section-title-text} title]] - [react/view styles/dapp-details-section-body-container - [react/text {:font :medium - :style styles/dapp-details-section-content-text} content]]]) - -(defview dapp-details [] - (letsubs [{:keys [photo-path name dapp-url] :as dapp} [:get :discover-current-dapp]] - [react/view styles/dapp-details-container - [toolbar/toolbar {} - toolbar/default-nav-back - [toolbar/content-title (i18n/label :t/dapp-profile)]] - [react/view styles/dapp-details-inner-container - [react/view styles/dapp-details-header - [react/view styles/dapp-details-icon - [chat-icon.screen/chat-icon photo-path {:size 56}]] - [react/view styles/dapp-details-name-container - [react/text {:font :medium - :style styles/dapp-details-name-text} name]]] - [react/touchable-highlight {:on-press #(re-frame/dispatch [:open-chat-with-contact dapp])} - [react/view styles/dapp-details-action-container - [react/view styles/dapp-details-action-icon-container - [vector-icons/icon :icons/open {:color :active - :style styles/dapp-details-open-icon - :container-style styles/dapp-details-open-icon-background}]] - [react/view styles/dapp-details-action-name-container - [react/view - [react/text {:font :medium - :style styles/dapp-details-action-name-text} (i18n/label :t/open)]]]]] - [section (i18n/label :t/description) (:description dapp "Description goes here")] - [common/separator] - [section (i18n/label :t/url) dapp-url]]])) diff --git a/src/status_im/ui/screens/discover/db.cljs b/src/status_im/ui/screens/discover/db.cljs deleted file mode 100644 index 23c3e637cf..0000000000 --- a/src/status_im/ui/screens/discover/db.cljs +++ /dev/null @@ -1,9 +0,0 @@ -(ns status-im.ui.screens.discover.db - (:require [cljs.spec.alpha :as s])) - -;; {id (string) descovery (map)} -(s/def :discoveries/discoveries (s/nilable map?)) -(s/def :discoveries/discover-search-tags (s/nilable set?)) -(s/def :discoveries/tags (s/nilable vector?)) -(s/def :discoveries/current-tag (s/nilable map?)) -(s/def :discoveries/request-discoveries-timer (s/nilable int?)) diff --git a/src/status_im/ui/screens/discover/events.cljs b/src/status_im/ui/screens/discover/events.cljs deleted file mode 100644 index ba1e29bbcb..0000000000 --- a/src/status_im/ui/screens/discover/events.cljs +++ /dev/null @@ -1,177 +0,0 @@ -(ns status-im.ui.screens.discover.events - (:require [re-frame.core :as re-frame] - [status-im.protocol.core :as protocol] - [status-im.utils.handlers :as handlers] - [clojure.string :as string] - [status-im.utils.utils :as utils])) - -(def request-discoveries-interval-s 600) -(def maximum-number-of-discoveries 1000) - -;; EFFECTS - -(re-frame/reg-fx - ::send-portions - (fn [{:keys [current-public-key web3 contacts to discoveries]}] - (protocol/send-discoveries-response! - {:web3 web3 - :discoveries discoveries - :message {:from current-public-key - :to to}}))) - -(re-frame/reg-fx - ::request-discoveries - (fn [{:keys [identities web3 current-public-key message-id]}] - (doseq [id identities] - (when-not (protocol/message-pending? web3 :discoveries-request id) - (protocol/send-discoveries-request! - {:web3 web3 - :message {:from current-public-key - :to id - :message-id message-id}}))))) - -(re-frame/reg-fx - ::broadcast-status - (fn [{:keys [identities web3 message]}] - (doseq [id identities] - (protocol/send-status! - {:web3 web3 - :message (assoc message :to id)})))) - -;; HELPER-FN - -(defn send-portions-when-contact-exists - "Takes fx map and adds send-portions if contact exists" - [{{:keys [current-public-key web3 discoveries] - :contacts/keys [contacts]} :db :as fx} - to] - (cond-> fx - (get contacts to) - (assoc ::send-portions {:current-public-key current-public-key - :web3 web3 - :contacts contacts - :to to - :discoveries (mapv #(dissoc % :tags) (vals discoveries))}))) - -(defn add-discover [db {:keys [message-id] :as discover}] - (assoc-in db [:discoveries message-id] discover)) - -(defn add-discovers [db discovers] - (reduce add-discover db discovers)) - -(defn new-discover? [discoveries {:keys [message-id]}] - (not (get discoveries message-id))) - - -;; EVENTS - -(defn navigate-to-discover-search-results [db search-tags] - {:db (assoc db :discover-search-tags search-tags) - :dispatch [:navigate-to :discover-search-results]}) - -(handlers/register-handler-fx - :discover/search-tags-results-view - (fn [{:keys [db]} [_ search-text]] - (navigate-to-discover-search-results db (reduce (fn [acc tag] - (conj acc (-> tag - (string/replace #"#" "") - string/lower-case - keyword))) - #{} - (re-seq #"[^ !?,;:.]+" search-text))))) - -(handlers/register-handler-fx - :discover/search-tag-results-view - (fn [{:keys [db]} [_ tag]] - (navigate-to-discover-search-results db #{(keyword tag)}))) - -(handlers/register-handler-fx - :discover/popular-tags-view - (fn [{:keys [db]} [_ popular-tags]] - {:db (assoc db :discover-search-tags (into #{} popular-tags)) - :dispatch [:navigate-to :discover-all-hashtags]})) - -(handlers/register-handler-fx - :broadcast-status - [(re-frame/inject-cofx :random-id)] - (fn [{{:keys [current-public-key web3] - :accounts/keys [accounts current-account-id] - :contacts/keys [contacts]} :db - random-id :random-id} - [_ status]] - (when-let [hashtags (seq (handlers/get-hashtags status))] - (let [{:keys [name photo-path]} (get accounts current-account-id) - message {:message-id random-id - :from current-public-key - :payload {:message-id random-id - :status status - :hashtags (vec hashtags) - :profile {:name name - :profile-image photo-path}}}] - - {::broadcast-status {:web3 web3 - :message message - :identities (handlers/identities contacts)} - :dispatch [:status-received message]})))) - -(handlers/register-handler-fx - :request-discoveries - [(re-frame/inject-cofx :random-id)] - (fn [{{:keys [current-public-key web3] - :contacts/keys [contacts]} :db - random-id :random-id} _] - {::request-discoveries {:current-public-key current-public-key - :web3 web3 - :identities (handlers/identities contacts) - :message-id random-id}})) - -(handlers/register-handler-fx - :discoveries-send-portions - (fn [{:keys [db]} [_ to]] - (send-portions-when-contact-exists {:db db} to))) - -(handlers/register-handler-fx - :discoveries-request-received - (fn [{:keys [db]} [_ {:keys [from]}]] - (send-portions-when-contact-exists {:db db} from))) - -(handlers/register-handler-fx - :discoveries-response-received - [(re-frame/inject-cofx :now)] - (fn [{{:keys [discoveries] - :contacts/keys [contacts] :as db} :db - now :now} - [_ {:keys [payload from]}]] - (when (get contacts from) - (when-let [discovers (some->> (:data payload) - (filter #(new-discover? discoveries %)) - (map #(assoc % - :created-at now - :tags (handlers/get-hashtags (:status %)))))] - {:db (add-discovers db discovers) - :data-store.discover/save-all [discovers maximum-number-of-discoveries]})))) - -(handlers/register-handler-fx - :status-received - [(re-frame/inject-cofx :now)] - (fn [{{:keys [discoveries] :as db} :db - now :now} - [_ {{:keys [message-id status profile] :as payload} :payload - from :from}]] - (when (new-discover? discoveries payload) - (let [{:keys [name profile-image]} profile - discover {:message-id message-id - :name name - :photo-path profile-image - :status status - :tags (handlers/get-hashtags status) - :whisper-id from - :created-at now}] - {:db (add-discover db discover) - :data-store.discover/save-all [[discover] maximum-number-of-discoveries]})))) - -(handlers/register-handler-fx - :show-status-author-profile - (fn [{db :db} [_ identity]] - {:db (assoc db :contacts/identity identity) - :dispatch [:navigate-to :profile]})) diff --git a/src/status_im/ui/screens/discover/popular_hashtags/views.cljs b/src/status_im/ui/screens/discover/popular_hashtags/views.cljs deleted file mode 100644 index 1d519a438f..0000000000 --- a/src/status_im/ui/screens/discover/popular_hashtags/views.cljs +++ /dev/null @@ -1,47 +0,0 @@ -(ns status-im.ui.screens.discover.popular-hashtags.views - (:require-macros [status-im.utils.views :refer [defview letsubs]]) - (:require [status-im.ui.components.react :as react] - [status-im.ui.screens.discover.styles :as styles] - [status-im.ui.screens.discover.components.views :as components] - [status-im.ui.components.list.views :as list] - [re-frame.core :as re-frame] - [status-im.i18n :as i18n] - [status-im.ui.components.toolbar.view :as toolbar])) - -(defn render-tag [tag] - [react/touchable-highlight - {:on-press #(re-frame/dispatch [:discover/search-tag-results-view tag])} - [react/view styles/tag-view - [react/text {:style styles/tag-title - :font :default} - (str " #" tag)]]]) - -(defn tags-menu [tags] - [react/view styles/tag-title-container - [list/flat-list {:data tags - :key-fn (fn [_ i] (str i)) - :render-fn render-tag - :horizontal true - :shows-horizontal-scroll-indicator false - :default-separator? false}]]) - -(defview discover-all-popular-hashtags [] - (letsubs [current-account [:get-current-account] - contacts [:get-contacts] - {:keys [discoveries tags]} [:discover/all-popular-hashtags]] - [react/view styles/all-recent-container - [toolbar/toolbar {} - toolbar/default-nav-back - [toolbar/content-title (i18n/label :t/popular-tags)]] - [tags-menu (map name tags)] - [react/scroll-view styles/list-container - [react/view styles/status-list-outer - [react/view styles/status-list-inner - (let [discoveries (map-indexed vector discoveries)] - (for [[i {:keys [message-id] :as message}] discoveries] - ^{:key (str "message-hashtag-" message-id)} - [components/discover-list-item-full - {:message message - :show-separator? (not= (inc i) (count discoveries)) - :contacts contacts - :current-account current-account}]))]]]])) diff --git a/src/status_im/ui/screens/discover/recent_statuses/views.cljs b/src/status_im/ui/screens/discover/recent_statuses/views.cljs deleted file mode 100644 index 3eedbf8bf5..0000000000 --- a/src/status_im/ui/screens/discover/recent_statuses/views.cljs +++ /dev/null @@ -1,28 +0,0 @@ -(ns status-im.ui.screens.discover.recent-statuses.views - (:require-macros [status-im.utils.views :refer [defview letsubs]]) - (:require [status-im.ui.components.react :as react] - [status-im.ui.screens.discover.components.views :as components] - [status-im.ui.screens.discover.styles :as styles] - [status-im.ui.components.toolbar.view :as toolbar] - [status-im.i18n :as i18n])) - -(defview discover-all-recent [] - (letsubs [discoveries [:discover/recent-discoveries] - current-account [:get-current-account] - contacts [:get-contacts]] - [react/view styles/all-recent-container - [toolbar/toolbar {} - toolbar/default-nav-back - [toolbar/content-title (i18n/label :t/recent)]] - (when (seq discoveries) - [react/scroll-view (styles/list-container false) - [react/view styles/status-list-outer - [react/view styles/status-list-inner - (let [discoveries (map-indexed vector discoveries)] - (for [[i {:keys [message-id] :as message}] discoveries] - ^{:key (str "message-recent-" message-id)} - [components/discover-list-item-full - {:message message - :show-separator? (not= (inc i) (count discoveries)) - :contacts contacts - :current-account current-account}]))]]])])) diff --git a/src/status_im/ui/screens/discover/search_results/views.cljs b/src/status_im/ui/screens/discover/search_results/views.cljs deleted file mode 100644 index 121b23831f..0000000000 --- a/src/status_im/ui/screens/discover/search_results/views.cljs +++ /dev/null @@ -1,35 +0,0 @@ -(ns status-im.ui.screens.discover.search-results.views - (:require-macros [status-im.utils.views :refer [defview letsubs]]) - (:require [status-im.ui.components.react :as react] - [status-im.ui.components.icons.vector-icons :as vi] - [status-im.ui.components.toolbar.view :as toolbar] - [status-im.ui.screens.discover.components.views :as components] - [status-im.i18n :as i18n] - [status-im.ui.screens.discover.styles :as styles] - [status-im.ui.screens.contacts.styles :as contacts-styles])) - -;; TOOD(oskarth): Refactor this, very similar to discover-all-hashtags view -(defview discover-search-results [] - (letsubs [{:keys [discoveries tags total]} [:discover/search-results 250] - contacts [:get-contacts] - current-account [:get-current-account]] - [react/view styles/discover-tag-container - [toolbar/toolbar {} - toolbar/default-nav-back - [toolbar/content-title (str "#" (name (first tags)) " " total)]] - (if (empty? discoveries) - [react/view styles/empty-view - [vi/icon :icons/group-big {:style contacts-styles/empty-contacts-icon}] - [react/text {:style contacts-styles/empty-contacts-text} - (i18n/label :t/no-statuses-found)]] - [react/scroll-view styles/list-container - [react/view styles/status-list-outer - [react/view styles/status-list-inner - (let [discoveries (map-indexed vector discoveries)] - (for [[i {:keys [message-id] :as message}] discoveries] - ^{:key (str "message-hashtag-" message-id)} - [components/discover-list-item-full - {:message message - :show-separator? (not= (inc i) (count discoveries)) - :contacts contacts - :current-account current-account}]))]]])])) diff --git a/src/status_im/ui/screens/discover/styles.cljs b/src/status_im/ui/screens/discover/styles.cljs deleted file mode 100644 index e20f41fb9a..0000000000 --- a/src/status_im/ui/screens/discover/styles.cljs +++ /dev/null @@ -1,441 +0,0 @@ -(ns status-im.ui.screens.discover.styles - (:require-macros [status-im.utils.styles :refer [defstyle]]) - (:require [status-im.ui.components.styles :as styles])) - -;; Common - -(def background-color styles/color-light-gray) - -(def row-separator - {:border-bottom-width 1 - :border-bottom-color styles/color-light-gray4}) - -(def row - {:flex 1 - :flex-direction :row - :align-items :center - :justify-content :space-between - :margin-bottom 10}) - -(def column - {:flex-direction :column}) - -(def empty-view - {:flex 1 - :background-color styles/color-white - :align-items :center - :justify-content :center}) - -(def title - {:padding 16 - :flex-direction :row - :justify-content :space-between}) - -(defstyle title-text - {:ios {:color styles/color-steel - :font-size 13} - :android {:color styles/color-gray2 - :font-size 14}}) - -(defstyle discover-item-status-text - {:ios {:font-size 14 - :letter-spacing -0.1} - :android {:line-height 22 - :font-size 16}}) - -(def discover-list-item-name-container - {:flex 1 - :padding-right 30 - :flex-direction :row - :justify-content :flex-start - :align-items :center}) - -(def discover-list-item-name - {:margin-left 7 - :color styles/color-black - :font-size 14}) - -;; TODO(oskarth): These rules should be pulled out into more custom styles, not -;; generic enough for discover-list-item -(def discover-list-item - {:flex-direction :column - :padding-bottom 16 - :margin-right 10 - :top 1}) - -(def discover-list-item-full - {:flex-direction :column - :margin-top 16 - :margin-horizontal 16 - :margin-bottom 12}) - -;; TODO(oskarth): Style too specific for full view, refactor -(def discover-list-item-second-row - {:flex 1 - :flex-direction :row - :align-items :center - :justify-content :space-between - :padding-top 25}) - -(defstyle discover-list-item-avatar-container - {:flex-direction :column}) - -(def popular-container - {:background-color background-color}) - -(def carousel-page-style - {}) - -(def tag-button - {:color styles/color-blue - :font-size 14 - :padding-right 5 - :padding-bottom 2 - :align-items :center - :justify-content :center}) - -(def tag-name - {:color styles/color-blue - :background-color :white - :font-size 14 - :align-items :center - :justify-content :center}) - -(def tag-count - {:color styles/color-gray - :font-size 12 - :padding-right 6 - :padding-bottom 2 - :align-items :center - :justify-content :center}) - -(def tag-count-container - {:flex 0.2 - :flex-direction :column - :align-items :flex-end - :padding-top 6 - :padding-right 9}) - -(def separator - {:background-color styles/color-gray11 - :height 4 - :margin-top 2 - :margin-bottom 2}) - -;; Popular list item - -(defstyle popular-list-container - {:flex 1 - :background-color :white - :padding-top 18 - :padding-left 16 - :ios {:border-radius 3 - :border-width 1 - :border-color styles/color-white} - :android {:border-radius 4 - :margin-top 2 - :margin-bottom 4 - :margin-right 2}}) - -(def chat-button-container - {:justify-content :center - :align-items :center - :background-color styles/color-blue4-transparent - :border-radius 8}) - -(defstyle chat-button-inner - {:flex-direction :row - :padding-top 7 - :padding-left 7 - :padding-right 8 - :padding-bottom 5}) - -(defstyle chat-button-text - {:color styles/color-blue4 - :ios {:font-size 15} - :android {:font-size 14 - :font-weight :bold}}) - -;; discover_recent - -(def status-list-outer - {:background-color background-color}) - -(def status-list-inner - {:background-color :white - :margin-top 4}) - -;; All dapps - -(def all-dapps-container - {:flex 1 - :margin-top 16 - :background-color background-color}) - -(def all-dapps-flat-list - {:flex-direction :column - :flex-wrap :wrap - :justify-content :center - :align-items :center - :margin-top 8 - :background-color styles/color-white}) - -(def all-dapps-flat-list-item - {:margin 10 - :width 90 - :height 140 - :justify-content :center - :align-items :center}) - -(def dapps-list-item-name-container - {:background-color styles/color-white - :flex-direction :column - :align-items :center}) - -(def dapps-list-item-name - {:margin-left 7 - :padding 4 - :margin 4 - :color styles/text1-color - :font-size 14 - :text-align :center}) - -(defstyle dapps-list-item-avatar-container - {:flex-direction :column - :padding 4 - :margin 4 - :align-items :center - :ios {:padding-top 0 - :bottom -4 - :justify-content :flex-end}}) - -(def dapp-preview-container - {:background-color styles/color-white - :margin-top 16 - :margin-bottom 4}) - -(def dapp-preview-flat-list - {:justify-content :center - :flex-direction :row - :margin-left 8 - :margin-vertical 0 - :background-color styles/color-white}) - -;; Discover tag - -(def discover-tag-toolbar - {:border-bottom-color styles/color-light-gray5 - :border-bottom-width 1}) - -(def tag-title-container - {:height 68 - :margin-left 16 - :align-items :center - :justify-content :flex-start - :flex-direction :row - :background-color styles/color-light-gray}) - -(defstyle tag-view - {:margin-horizontal 2 - :padding 10 - :padding-bottom 8 - :height 36 - :background-color styles/color-white - :justify-content :center - :align-items :center - :flex-direction :column - :ios { - :border-color styles/color-light-blue6} - :android {:border-radius 4}}) - -(def tag-title - {:color styles/color-blue4 - :background-color styles/color-white - :font-size 14}) - -(def icon-back - {:width 8 - :height 14}) - -(def discover-container - {:flex 1 - :background-color styles/color-light-gray}) - -(def list-container - {:flex 1}) - -(defn title-action-text [active?] - {:color (if active? - styles/color-blue - styles/color-gray-transparent)}) - -(def recent-statuses-preview-container - {:background-color background-color}) - -(def recent-statuses-preview-content - {:border-radius 4 - :padding-top 18 - :padding-left 16 - :margin-top 2 - :margin-bottom 4 - :margin-right 2 - :background-color :white}) - -(def public-chats-container - {:background-color styles/color-white}) - -(def public-chats-item-container - {:flex-direction :row - :padding 16}) - -(def public-chats-icon-width-ratio - 0.15) - -(def public-chats-icon-container - {:flex public-chats-icon-width-ratio}) - -(defn public-chats-icon [color] - {:width 50 - :height 50 - :border-radius 25 - :background-color color - :flex-direction :row - :justify-content :center - :align-items :center}) - -(def public-chats-icon-text - {:font-size 25}) - -(def public-chats-item-inner - {:flex (- 1 public-chats-icon-width-ratio) - :margin-left 10 - :flex-direction :column}) - -(def public-chats-item-name-container - {:flex-direction :row}) - -(def public-chats-item-name-text - {:font-size 16 - :margin-left 5}) - -(def dapp-details-inner-container - {:flex-direction :column}) - -(defstyle dapp-details-header - {:flex-direction :row - :justify-content :flex-start - :align-items :center - :height 80 - :background-color styles/color-white - :margin-top 4 - :android {:elevation 2}}) - -(def dapp-details-icon - {:flex 0.2 - :background-color styles/color-white - :margin-left 10}) - -(def dapp-details-name-container - {:flex 0.8 - :background-color styles/color-white}) - -(defstyle dapp-details-name-text - {:android {:font-size 16 - :color styles/color-gray6} - :ios {:font-size 17}}) - -(defstyle dapp-details-action-container - {:flex-direction :row - :margin-top 15 - :margin-bottom 15 - :align-items :center - :background-color styles/color-white - :android {:height 64 - :elevation 2} - :ios {:height 72}}) - -(def dapp-details-action-icon-container - {:padding-left 10 - :flex 0.2 - :justify-content :center - :align-items :center - :background-color styles/color-white}) - -(defstyle dapp-details-open-icon-background - {:ios {:background-color styles/color-blue4-transparent - :height 40 - :width 40 - :border-radius 20 - :justify-content :center - :align-items :center}}) - -(defstyle dapp-details-open-icon - {:width 24 - :height 24}) - -(def dapp-details-action-name-container - {:flex 0.80 - :background-color styles/color-white - :flex-direction :row - :justify-content :flex-start - :align-items :center}) - -(defstyle dapp-details-action-name-text - {:color styles/color-blue4 - :android {:font-size 16 - :color styles/color-gray6} - :ios {:font-size 17}}) - -(defstyle dapp-details-section-container - {:background-color styles/color-white - :android {:elevation 2}}) - -(def dapp-details-section-title-container - {:background-color styles/color-white - :padding 10}) - -(defstyle dapp-details-section-title-text - {:color styles/color-gray - :ios {:font-size 14} - :android {:font-size 12}}) - -(def dapp-details-section-body-container - {:background-color styles/color-white - :padding-left 10 - :padding-right 10 - :padding-bottom 16}) - -(defstyle dapp-details-section-content-text - {:ios {:font-size 17} - :android {:font-size 16 - :color styles/color-gray6}}) - -(def empty-section-container - {:flex-direction :row - :justify-content :center - :align-items :center - :padding-vertical 50 - :margin-right 6}) - -(def empty-section-image - {:height 70 - :width 70}) - -(def empty-section-description - {:flex-direction :column - :margin-left 6}) - -(def empty-section-title-text - {:font-size 15}) - -(def empty-section-body-text - {:margin-top 2 - :font-size 14}) - -;; TODO(oskarth): Copy of existing style, generalize - discover-container overloaded -(def all-recent-container all-dapps-container) -(def all-popular-container all-dapps-container) - -;; TODO(goranjovic): Using the same style in dapp-details screen - reconcile later -(def dapp-details-container all-dapps-container) -(def discover-tag-container all-dapps-container) diff --git a/src/status_im/ui/screens/discover/subs.cljs b/src/status_im/ui/screens/discover/subs.cljs deleted file mode 100644 index aa9bc383c9..0000000000 --- a/src/status_im/ui/screens/discover/subs.cljs +++ /dev/null @@ -1,108 +0,0 @@ -(ns status-im.ui.screens.discover.subs - (:require [re-frame.core :refer [reg-sub]] - [status-im.utils.datetime :as time])) - -(defn- calculate-priority [now-ms chats current-public-key contacts - {:keys [whisper-id created-at]}] - (let [contact (get contacts whisper-id) - chat (get chats whisper-id) - seen-online-recently? (< (- now-ms (get contact :last-online)) - time/hour) - me? (= current-public-key whisper-id)] - (+ created-at ; message is newer => priority is higher - (if (or me? contact) time/day 0) ; user exists in contact list => increase priority - (if (or me? chat) time/day 0) ; chat with this user exists => increase priority - (if (or me? seen-online-recently?) time/hour 0)))) ; the user was online recently => increase priority - - -(defn- get-discoveries-by-tags [discoveries-by-tags search-tags] - (reduce (fn [acc search-tag] - (concat acc (get discoveries-by-tags search-tag []))) - [] - search-tags)) - -(reg-sub :discover/discoveries :discoveries) - -(reg-sub :discover/discoveries-with-priority - :<- [:discover/discoveries] - :<- [:get-active-chats] - :<- [:get-contacts] - :<- [:get :current-public-key] - (fn [[discoveries chats contacts current-public-key]] - (let [now-ms (time/timestamp)] - (map #(assoc % :priority (calculate-priority now-ms chats current-public-key contacts %)) (vals discoveries))))) - -(reg-sub :discover/search-tags :discover-search-tags) - -(reg-sub :discover/tags - :<- [:discover/discoveries] - (fn [discoveries] - (reduce (fn [acc {:keys [tags]}] - (into acc tags)) - #{} - (vals discoveries)))) - - -;; TODO(yenda) this is not really the most recent discoveries -;; it's just all off them -(reg-sub :discover/recent-discoveries - :<- [:discover/discoveries] - (fn [discoveries] - (sort-by :created-at > (vals discoveries)))) - -(reg-sub :discover/discoveries-by-tags - :<- [:discover/discoveries-with-priority] - (fn [discoveries] - (reduce (fn [discoveries-by-tags {:keys [tags] :as discovery}] - (reduce (fn [discoveries-by-tags tag] - (update discoveries-by-tags tag conj discovery)) - discoveries-by-tags - tags)) - {} - discoveries))) - -(reg-sub :discover/most-popular-hashtags - :<- [:discover/discoveries-by-tags] - (fn [discoveries] - (->> discoveries - (sort-by (comp count val) >) - (take 10)))) - -(reg-sub :discover/popular-hashtags-preview - :<- [:discover/most-popular-hashtags] - (fn [most-popular-hashtags] - (->> most-popular-hashtags - (map (fn [[tag discoveries]] {:tag tag - :total (count discoveries) - :discovery (first (sort-by :priority > discoveries))}))))) - -(reg-sub :discover/all-popular-hashtags - :<- [:discover/most-popular-hashtags] - (fn [most-popular-hashtags] - (let [tags (map first most-popular-hashtags) - discoveries (apply concat (map second most-popular-hashtags))] - {:tags tags - :discoveries (sort-by :priority > (distinct discoveries))}))) - - -(reg-sub :discover/search-results - :<- [:discover/discoveries-by-tags] - :<- [:discover/search-tags] - :<- [:get-active-chats] - :<- [:get-contacts] - :<- [:get :current-public-key] - (fn [[discoveries search-tags chats contacts current-public-key] [_ limit]] - (let [discoveries (->> (get-discoveries-by-tags discoveries search-tags) - (sort-by :priority >))] - {:discoveries (take limit discoveries) - :tags search-tags - :total (count discoveries)}))) - -(reg-sub :discover/all-dapps - (fn [db] - (let [dapp? (->> (get-in db [:group/contact-groups "dapps" :contacts]) - (map :identity) - set)] - (->> (:contacts/contacts db) - (filter #(-> % key dapp?)) - (into {}))))) diff --git a/src/status_im/ui/screens/discover/views.cljs b/src/status_im/ui/screens/discover/views.cljs deleted file mode 100644 index ce39c928f7..0000000000 --- a/src/status_im/ui/screens/discover/views.cljs +++ /dev/null @@ -1,148 +0,0 @@ -(ns status-im.ui.screens.discover.views - (:require-macros [status-im.utils.views :refer [defview letsubs]]) - (:require [re-frame.core :as re-frame] - [clojure.string :as string] - [status-im.ui.components.react :as react] - [status-im.ui.components.icons.vector-icons :as vector-icons] - [status-im.ui.components.toolbar.view :as toolbar] - [status-im.ui.components.toolbar.actions :as actions] - [status-im.ui.components.carousel.carousel :as carousel] - [status-im.ui.screens.discover.components.views :as components] - [status-im.ui.screens.discover.all-dapps.views :as all-dapps] - [status-im.i18n :as i18n] - [status-im.ui.screens.discover.styles :as styles] - [status-im.ui.screens.contacts.styles :as contacts-st] - [status-im.ui.components.list.views :as list] - [status-im.react-native.resources :as resources])) - -(defn empty-section [image-kw title-kw body-kw] - [react/view styles/empty-section-container - [react/image {:source (image-kw resources/ui) - :style styles/empty-section-image}] - [react/view styles/empty-section-description - [react/text {:font :medium - :style styles/empty-section-title-text} - (i18n/label title-kw)] - [react/text {:style styles/empty-section-body-text} - (i18n/label body-kw)]]]) - -(defn get-hashtags [status] - (let [hashtags (map #(string/lower-case (string/replace % #"#" "")) (re-seq #"[^ !?,;:.]+" status))] - (or hashtags []))) - -(defn top-status-for-popular-hashtag [{:keys [popular-hashtag current-account contacts]}] - (let [{:keys [tag discovery total]} popular-hashtag] - [react/view styles/popular-list-container - [react/view styles/row - [react/view {} - [react/touchable-highlight - {:on-press #(re-frame/dispatch [:discover/search-tag-results-view tag])} - [react/view {} - [react/text {:style styles/tag-name - :font :medium} - (str " #" (name tag))]]]] - [react/view styles/tag-count-container - [react/text {:style styles/tag-count - :font :default} - (str total)]]] - [components/discover-list-item {:message discovery - :show-separator? false - :current-account current-account - :contacts contacts}]])) - -(defn popular-hashtags-preview [{:keys [popular-hashtags contacts current-account]}] - (let [has-content? (seq popular-hashtags)] - [react/view styles/popular-container - [components/title :t/popular-tags :t/all #(re-frame/dispatch [:navigate-to :discover-all-popular-hashtags]) has-content?] - (if has-content? - [carousel/carousel {:pageStyle styles/carousel-page-style - :gap 8 - :sneak 16 - :count (count popular-hashtags)} - (for [popular-hashtag popular-hashtags] - [top-status-for-popular-hashtag {:popular-hashtag popular-hashtag - :contacts contacts - :current-account current-account}])] - [empty-section :empty-hashtags :t/no-hashtags-discovered-title :t/no-hashtags-discovered-body])])) - -(defn recent-statuses-preview [{:keys [current-account contacts discoveries]}] - (let [has-content? (seq discoveries)] - [react/view styles/recent-statuses-preview-container - [components/title :t/recent :t/all #(re-frame/dispatch [:navigate-to :discover-all-recent]) has-content?] - (if has-content? - [carousel/carousel {:pageStyle styles/carousel-page-style - :gap 8 - :sneak 16 - :count (count discoveries)} - (for [discovery discoveries] - [react/view styles/recent-statuses-preview-content - [components/discover-list-item {:message discovery - :show-separator? false - :current-account current-account - :contacts contacts}]])] - [empty-section :empty-recent :t/no-statuses-discovered :t/no-statuses-discovered-body])])) - -;; TODO(oskarth): Figure out chat count how to get from public chat list subscription -;; TODO(oskarth): Move colors into common namespace -(def public-chats-mock-data - [{:name "Status" - :topic "status" - :count 25 - :color "#77DCC6"} - {:name "ETH news" - :topic "ethnews" - :count 12 - :color "#DC77CE"} - {:name "All about Ethereum" - :topic "ethereum" - :count 32 - :color "#778CDC"} - {:name "Devcon" - :topic "devcon" - :count 47 - :color "#77DCC6"}]) - -(defn navigate-to-public-chat [topic] - (re-frame/dispatch [:create-new-public-chat topic])) - -(defn render-public-chats-item [{:keys [name color topic] :as item}] - [react/touchable-highlight {:on-press #(navigate-to-public-chat topic)} - [react/view styles/public-chats-item-container - [react/view styles/public-chats-icon-container - [react/view (styles/public-chats-icon color) - [react/text {:style styles/public-chats-icon-text} - (-> name first str)]]] - [react/view styles/public-chats-item-inner - [react/view styles/public-chats-item-name-container - [vector-icons/icon :icons/public-chat] - [react/text {:font :medium - :style styles/public-chats-item-name-text} - name]] - [react/view {} - [react/text {:style {:color :lightgray}} - (str "#" topic)]]]]]) - -(defn public-chats-teaser [] - [react/view styles/public-chats-container - [components/title-no-action :t/public-chats] - [list/flat-list {:data public-chats-mock-data - :key-fn :topic - :render-fn render-public-chats-item}]]) - -(defview discover [current-view?] - (letsubs [contacts [:get-contacts] - current-account [:get-current-account] - discoveries [:discover/recent-discoveries] - all-dapps [:discover/all-dapps] - popular-hashtags [:discover/popular-hashtags-preview]] - [react/view styles/discover-container - [toolbar/simple-toolbar (i18n/label :t/discover)] - [react/scroll-view styles/list-container - [recent-statuses-preview {:contacts contacts - :current-account current-account - :discoveries discoveries}] - [popular-hashtags-preview {:popular-hashtags popular-hashtags - :contacts contacts - :current-account current-account}] - [all-dapps/preview all-dapps] - [public-chats-teaser]]])) diff --git a/src/status_im/ui/screens/events.cljs b/src/status_im/ui/screens/events.cljs index b5f2267349..7127645ac5 100644 --- a/src/status_im/ui/screens/events.cljs +++ b/src/status_im/ui/screens/events.cljs @@ -10,7 +10,6 @@ status-im.ui.screens.accounts.login.events status-im.ui.screens.accounts.recover.events status-im.ui.screens.contacts.events - status-im.ui.screens.discover.events status-im.ui.screens.group.chat-settings.events status-im.ui.screens.group.events status-im.ui.screens.navigation diff --git a/src/status_im/ui/screens/group/navigation.cljs b/src/status_im/ui/screens/group/navigation.cljs index 39a49721ef..7a74f6226e 100644 --- a/src/status_im/ui/screens/group/navigation.cljs +++ b/src/status_im/ui/screens/group/navigation.cljs @@ -11,4 +11,4 @@ (defmethod nav/preload-data! :new-public-chat [db] - (dissoc db :public-group-topic)) + (dissoc db :public-group-topic :public-group-topic-error)) diff --git a/src/status_im/ui/screens/home/styles.cljs b/src/status_im/ui/screens/home/styles.cljs index a1c61c5fec..c8f26d552d 100644 --- a/src/status_im/ui/screens/home/styles.cljs +++ b/src/status_im/ui/screens/home/styles.cljs @@ -219,3 +219,16 @@ :width delete-button-width :justify-content :center :align-items :center}) + +(def action-button-container + {:position :absolute + :bottom 16 + :right 16}) + +(def action-button + {:width 56 + :height 56 + :background-color colors/blue + :border-radius 28 + :align-items :center + :justify-content :center}) diff --git a/src/status_im/ui/screens/home/views.cljs b/src/status_im/ui/screens/home/views.cljs index 752d18cf8d..b02668e6a6 100644 --- a/src/status_im/ui/screens/home/views.cljs +++ b/src/status_im/ui/screens/home/views.cljs @@ -4,7 +4,6 @@ [status-im.ui.components.colors :as colors] [status-im.ui.components.list.views :as list] [status-im.ui.components.react :as react] - [status-im.ui.components.native-action-button :refer [native-action-button]] [status-im.ui.components.toolbar.view :as toolbar] [status-im.ui.components.toolbar.actions :as toolbar.actions] [status-im.ui.components.connectivity.view :as connectivity] @@ -16,7 +15,8 @@ [status-im.utils.platform :as platform] [status-im.react-native.resources :as resources] [status-im.ui.components.common.common :as components.common] - [status-im.i18n :as i18n])) + [status-im.i18n :as i18n] + [status-im.ui.components.icons.vector-icons :as icons])) (defn- toolbar [show-welcome?] [toolbar/toolbar nil nil @@ -28,25 +28,25 @@ [(toolbar.actions/add #(re-frame/dispatch [:navigate-to :new]))])]]) (defn- home-action-button [] - [native-action-button {:button-color colors/blue - :offset-x styles/native-button-offset - :offset-y styles/native-button-offset - :accessibility-label :plus-button - :on-press #(re-frame/dispatch [:navigate-to :new])}]) + [react/view styles/action-button-container + [react/touchable-highlight {:accessibility-label :plus-button + :on-press #(re-frame/dispatch [:navigate-to :new])} + [react/view styles/action-button + [icons/icon :icons/add {:color :white}]]]]) (views/defview home-list-deletable [[home-item-id home-item]] - (views/letsubs [swiped? [:delete-swipe-position home-item-id]] - (let [delete-action (if (:chat-id home-item) :remove-chat :remove-browser) - inner-item-view (if (:chat-id home-item) - inner-item/home-list-chat-item-inner-view - inner-item/home-list-browser-item-inner-view) - offset-x (animation/create-value (if swiped? styles/delete-button-width 0)) + (views/letsubs [swiped? [:delete-swipe-position home-item-id]] + (let [delete-action (if (:chat-id home-item) :remove-chat :remove-browser) + inner-item-view (if (:chat-id home-item) + inner-item/home-list-chat-item-inner-view + inner-item/home-list-browser-item-inner-view) + offset-x (animation/create-value (if swiped? styles/delete-button-width 0)) swipe-pan-responder (responder/swipe-pan-responder offset-x styles/delete-button-width home-item-id swiped?) - swipe-pan-handler (responder/pan-handlers swipe-pan-responder)] + swipe-pan-handler (responder/pan-handlers swipe-pan-responder)] [react/view swipe-pan-handler [react/animated-view {:style {:flex 1 :right offset-x}} [inner-item-view home-item] - [react/touchable-highlight {:style styles/delete-icon-highlight + [react/touchable-highlight {:style styles/delete-icon-highlight :on-press #(do (re-frame/dispatch [:set-swipe-position home-item-id false]) (re-frame/dispatch [delete-action home-item-id]))} diff --git a/src/status_im/ui/screens/network_settings/add_rpc/views.cljs b/src/status_im/ui/screens/network_settings/add_rpc/views.cljs deleted file mode 100644 index df09158b20..0000000000 --- a/src/status_im/ui/screens/network_settings/add_rpc/views.cljs +++ /dev/null @@ -1,24 +0,0 @@ -(ns status-im.ui.screens.network-settings.add-rpc.views - (:require - [re-frame.core :refer [dispatch]] - [status-im.ui.components.status-bar.view :as status-bar] - [status-im.ui.components.toolbar.view :as toolbar] - [status-im.ui.components.text-input.view :as text-input] - [status-im.ui.screens.network-settings.views :as network-settings] - [status-im.ui.components.react :as react] - [status-im.ui.components.sticky-button :as sticky-button] - [status-im.i18n :as i18n] - [clojure.string :as str])) - -(defn add-rpc-url [] - (let [rpc-url "text"] - [react/view {:flex 1} - [status-bar/status-bar] - [toolbar/simple-toolbar - (i18n/label :t/add-network)] - [network-settings/network-badge] - [react/view {:margin-top 8} - [text-input/text-input-with-label {:label (i18n/label :t/rpc-url)}]] - [react/view {:flex 1}] - (when (not (str/blank? rpc-url)) - [sticky-button/sticky-button (i18n/label :t/add-network) #()])])) diff --git a/src/status_im/ui/screens/network_settings/network_details/views.cljs b/src/status_im/ui/screens/network_settings/network_details/views.cljs deleted file mode 100644 index 02db500a9f..0000000000 --- a/src/status_im/ui/screens/network_settings/network_details/views.cljs +++ /dev/null @@ -1,61 +0,0 @@ -(ns status-im.ui.screens.network-settings.network-details.views - (:require-macros [status-im.utils.views :as views]) - (:require - [re-frame.core :as rf] - [status-im.ui.components.status-bar.view :as status-bar] - [status-im.ui.components.toolbar.view :as toolbar] - [status-im.ui.screens.network-settings.views :as network-settings] - [status-im.ui.components.react :as react] - [status-im.utils.platform :as platform] - [status-im.i18n :as i18n] - [status-im.ui.screens.network-settings.styles :as st])) - -(def options - [{:text (i18n/label :t/add-json-file) - :value #(rf/dispatch [:network-add-json-file])} - {:text (i18n/label :t/paste-json-as-text) - :value #(rf/dispatch [:network-paste-json-as-text])} - {:text (i18n/label :t/:edit-rpc-url) - :value #(rf/dispatch [:network-edit-rpc-url])} - {:text (i18n/label :t/:remove-network) - :value #(rf/dispatch [:network-remove])}]) - -(views/defview network-details [] - (views/letsubs [{:keys [networks/selected-network]} [:get-screen-params] - {:keys [network]} [:get-current-account]] - (let [{:keys [id name config]} selected-network - connected? (= id network)] - [react/view {:flex 1} - [status-bar/status-bar] - [toolbar/simple-toolbar] - [network-settings/network-badge - {:name name - :connected? connected?}] - (when-not connected? - [react/touchable-highlight {:on-press #(rf/dispatch [:connect-network id])} - [react/view st/connect-button-container - [react/view {:style st/connect-button - :accessibility-label :network-connect-button} - [react/text {:style st/connect-button-label - :uppercase? true} - (i18n/label :t/connect)]] - [react/text {:style st/connect-button-description} - (i18n/label :t/connecting-requires-login)]]]) - [react/view st/network-config-container - [react/text {:style st/network-config-text - :accessibility-label :network-details-text} - config]] - ;; TODO(rasom): uncomment edit-button when it will be functional, - ;; https://github.com/status-im/status-react/issues/2104 - #_[react/view {:opacity 0.4} - [react/view st/edit-button-container - [react/view st/edit-button - [react/text {:style st/edit-button-label - :uppercase? true} - (i18n/label :t/edit-network-config)]] - #_[context-menu ; TODO should be implemented later - [view st/edit-button - [text {:style st/edit-button-label} (i18n/label :t/edit-network-config)]] - options] - [react/text {:style st/edit-button-description} - (i18n/label :t/edit-network-warning)]]]]))) diff --git a/src/status_im/ui/screens/network_settings/parse_json/views.cljs b/src/status_im/ui/screens/network_settings/parse_json/views.cljs deleted file mode 100644 index 28e3970aad..0000000000 --- a/src/status_im/ui/screens/network_settings/parse_json/views.cljs +++ /dev/null @@ -1,32 +0,0 @@ -(ns status-im.ui.screens.network-settings.parse-json.views - (:require - [re-frame.core :refer [dispatch]] - [status-im.ui.components.status-bar.view :refer [status-bar]] - [status-im.ui.components.toolbar.view :as toolbar] - [status-im.ui.screens.network-settings.views :as network-settings] - [status-im.ui.components.react :refer [view text text-input]] - [status-im.ui.components.sticky-button :as sticky-button] - [status-im.ui.screens.network-settings.styles :as st] - [status-im.i18n :as i18n] - [clojure.string :as str])) - -(defn paste-json-text [] - (let [network-json "test" - error nil] - [view {:flex 1} - [status-bar] - [toolbar/simple-toolbar - (i18n/label :t/add-network)] - [network-settings/network-badge] - [view {:margin-top 16 - :margin-left 16 - :flex 1} - (when error - [text {:style {:color :red}} - (i18n/label :t/error-processing-json)]) - [text-input {:style st/paste-json-text-input - :flex 1 - :placeholder (i18n/label :t/paste-json) - :multiline true}]] - (when (not (str/blank? network-json)) - [sticky-button/sticky-button (i18n/label :t/process-json) #()])])) diff --git a/src/status_im/ui/screens/network_settings/views.cljs b/src/status_im/ui/screens/network_settings/views.cljs index 4863610132..5a6f595843 100644 --- a/src/status_im/ui/screens/network_settings/views.cljs +++ b/src/status_im/ui/screens/network_settings/views.cljs @@ -1,7 +1,6 @@ (ns status-im.ui.screens.network-settings.views (:require-macros [status-im.utils.views :as views]) (:require [re-frame.core :as re-frame] - [status-im.ui.components.action-button.action-button :as action-button] [status-im.ui.components.action-button.styles :as action-button-styles] [status-im.ui.components.react :as react] [status-im.ui.components.icons.vector-icons :as vector-icons] @@ -16,33 +15,11 @@ [react/view (styles/network-icon connected? size) [vector-icons/icon :icons/network {:color (if connected? :white :gray)}]]) -(defn network-badge [& [{:keys [name connected? options]}]] - [react/view styles/network-badge - [network-icon connected? 56] - [react/view {:padding-left 16} - [react/text {:style styles/badge-name-text} - (or name (i18n/label :t/new-network))] - (when connected? - [react/text {:style styles/badge-connected-text} - (i18n/label :t/connected)])]]) - (defn actions-view [] - [react/view action-button-styles/actions-list - ;; TODO(rasom): uncomment add-new-network button when it will be functional, - ;; https://github.com/status-im/status-react/issues/2104 - #_[react/view {:opacity 0.4} - [action-button/action-button - {:label (i18n/label :t/add-new-network) - :icon :icons/add - :icon-opts {:color :blue}}]] - #_[context-menu ; TODO should be implemented later - [action-button-view (i18n/label :t/add-new-network) :add_blue] - [{:text (i18n/label :t/add-json-file) :value #(dispatch [:navigate-to :paste-json-text])} - {:text (i18n/label :t/paste-json-as-text) :value #(dispatch [:navigate-to :paste-json-text])} - {:text (i18n/label :t/specify-rpc-url) :value #(dispatch [:navigate-to :add-rpc-url])}]]]) + [react/view action-button-styles/actions-list]) (defn render-network [current-network] - (fn [{:keys [id name config] :as network}] + (fn [{:keys [id name] :as network}] (let [connected? (= id current-network)] [react/touchable-highlight {:on-press #(re-frame/dispatch [:navigate-to :network-details {:networks/selected-network network}]) diff --git a/src/status_im/ui/screens/profile/photo_capture/styles.cljs b/src/status_im/ui/screens/profile/photo_capture/styles.cljs index 3c12b5b94f..ab8f473a17 100644 --- a/src/status_im/ui/screens/profile/photo_capture/styles.cljs +++ b/src/status_im/ui/screens/profile/photo_capture/styles.cljs @@ -1,5 +1,12 @@ (ns status-im.ui.screens.profile.photo-capture.styles) (def container - {:flex 1 + {:flex 1 :background-color :white}) + +(def button-container + {:align-items :center}) + +(def button + {:position :absolute + :bottom 10}) \ No newline at end of file diff --git a/src/status_im/ui/screens/profile/photo_capture/views.cljs b/src/status_im/ui/screens/profile/photo_capture/views.cljs index c3cbb1c7e8..18b35deb81 100644 --- a/src/status_im/ui/screens/profile/photo_capture/views.cljs +++ b/src/status_im/ui/screens/profile/photo_capture/views.cljs @@ -2,14 +2,14 @@ (:require [re-frame.core :as re-frame] [reagent.core :as reagent] [status-im.ui.components.camera :as camera] - [status-im.ui.components.icons.custom-icons :as custom-icons] [status-im.ui.components.react :as react] [status-im.ui.components.status-bar.view :as status-bar] [status-im.ui.components.toolbar.view :as toolbar] [status-im.i18n :as i18n] [status-im.ui.screens.profile.photo-capture.styles :as styles] [status-im.utils.image-processing :as image-processing] - [taoensso.timbre :as log])) + [taoensso.timbre :as log] + [status-im.ui.components.icons.vector-icons :as icons])) (defn image-captured [data] (let [path (.-path data) @@ -35,13 +35,12 @@ :captureTarget (:disk camera/capture-targets) :type "front" :ref #(reset! camera-ref %)}] - [react/view {:style {:padding 10}} - [react/touchable-highlight {:style {:align-self "center"} - :on-press (fn [] - (let [camera @camera-ref] - (-> (.capture camera) - (.then image-captured) - (.catch #(log/debug "Error capturing image: " %)))))} - [react/view - [custom-icons/ion-icon {:name :md-camera - :style {:font-size 36}}]]]]])) + [react/view styles/button-container + [react/view styles/button + [react/touchable-highlight {:on-press (fn [] + (let [camera @camera-ref] + (-> (.capture camera) + (.then image-captured) + (.catch #(log/debug "Error capturing image: " %)))))} + [react/view + [icons/icon :icons/camera {:color :white}]]]]]])) diff --git a/src/status_im/ui/screens/subs.cljs b/src/status_im/ui/screens/subs.cljs index 47256a87e5..33ebff3c98 100644 --- a/src/status_im/ui/screens/subs.cljs +++ b/src/status_im/ui/screens/subs.cljs @@ -5,7 +5,6 @@ status-im.ui.screens.accounts.subs status-im.ui.screens.home.subs status-im.ui.screens.group.chat-settings.subs - status-im.ui.screens.discover.subs status-im.ui.screens.contacts.subs status-im.ui.screens.group.subs status-im.ui.screens.wallet.subs diff --git a/src/status_im/ui/screens/views.cljs b/src/status_im/ui/screens/views.cljs index e7194610d1..21813c2ae1 100644 --- a/src/status_im/ui/screens/views.cljs +++ b/src/status_im/ui/screens/views.cljs @@ -38,16 +38,8 @@ [status-im.ui.screens.wallet.transactions.views :as wallet-transactions] [status-im.ui.screens.wallet.send.transaction-sent.views :refer [transaction-sent transaction-sent-modal]] [status-im.ui.screens.wallet.components.views :refer [contact-code recent-recipients recipient-qr-code]] - [status-im.ui.screens.discover.search-results.views :as discover-search] - [status-im.ui.screens.discover.recent-statuses.views :as discover-recent] - [status-im.ui.screens.discover.all-dapps.views :as discover-all-dapps] - [status-im.ui.screens.discover.popular-hashtags.views :as discover-popular] - [status-im.ui.screens.discover.dapp-details.views :as discover-dapp-details] [status-im.ui.screens.network-settings.views :refer [network-settings]] [status-im.ui.screens.offline-messaging-settings.views :refer [offline-messaging-settings]] - [status-im.ui.screens.network-settings.add-rpc.views :refer [add-rpc-url]] - [status-im.ui.screens.network-settings.network-details.views :refer [network-details]] - [status-im.ui.screens.network-settings.parse-json.views :refer [paste-json-text]] [status-im.ui.screens.browser.views :refer [browser]] [status-im.ui.screens.add-new.open-dapp.views :refer [open-dapp dapp-description]] [status-im.ui.screens.intro.views :refer [intro]] @@ -153,20 +145,12 @@ :chat chat :profile profile.contact/profile :group-chat-profile profile.group-chat/group-chat-profile - :discover-all-recent discover-recent/discover-all-recent - :discover-all-popular-hashtags discover-popular/discover-all-popular-hashtags - :discover-search-results discover-search/discover-search-results - :discover-dapp-details discover-dapp-details/dapp-details - :discover-all-dapps discover-all-dapps/main :profile-photo-capture profile-photo-capture :accounts accounts :login login :recover recover :network-settings network-settings :offline-messaging-settings offline-messaging-settings - :paste-json-text paste-json-text - :add-rpc-url add-rpc-url - :network-details network-details :recent-recipients recent-recipients :recipient-qr-code recipient-qr-code :contact-code contact-code