Compare commits
53
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
31d0c14247 | ||
|
|
539b7bbff4 | ||
|
|
777b2bb8da | ||
|
|
f17484f61b | ||
|
|
49a41f4787 | ||
|
|
f65c10502b | ||
|
|
e30ca97372 | ||
|
|
178d62bd27 | ||
|
|
4262d0e8ab | ||
|
|
6f3aa19a04 | ||
|
|
c398c85b0f | ||
|
|
3a728fb112 | ||
|
|
d2fb6c7ee0 | ||
|
|
2ffdeb1fa2 | ||
|
|
a0d9134f7b | ||
|
|
81977475c5 | ||
|
|
813e4ee730 | ||
|
|
5eba373c3c | ||
|
|
c19f170239 | ||
|
|
60ef4fab4b | ||
|
|
47b4ab923b | ||
|
|
05a09d1fa1 | ||
|
|
8bd1c8de95 | ||
|
|
e5ab94f1b2 | ||
|
|
ff82d9c39e | ||
|
|
e1210e90c0 | ||
|
|
ed88170c5d | ||
|
|
32123d2f69 | ||
|
|
a480df4ef5 | ||
|
|
b3361b7d89 | ||
|
|
f7163c748b | ||
|
|
34cf65bfc9 | ||
|
|
88afa09baf | ||
|
|
b358c06a31 | ||
|
|
389a730eff | ||
|
|
4cdbfb6cc6 | ||
|
|
8fe59a0998 | ||
|
|
d4e7e4cd52 | ||
|
|
3de86b09bd | ||
|
|
dc551031fe | ||
|
|
29b02a544c | ||
|
|
3e4cbfeb69 | ||
|
|
8038fc5ceb | ||
|
|
eb1db20161 | ||
|
|
d558c565b0 | ||
|
|
ea58e52dc1 | ||
|
|
624593ec35 | ||
|
|
9d302d8192 | ||
|
|
47428368fd | ||
|
|
4c84dd4a1b | ||
|
|
cfe9d6e539 | ||
|
|
afd92d2df1 | ||
|
|
ba3d4dd4ce |
@@ -36,5 +36,4 @@ STICKERS_TEST_ENABLED=1
|
||||
LOCAL_PAIRING_ENABLED=1
|
||||
FAST_CREATE_COMMUNITY_ENABLED=1
|
||||
TEST_NETWORKS_ENABLED=1
|
||||
SHOW_NOT_IMPLEMENTED_FEATURES=1
|
||||
ENABLE_ALERT_BANNER=1
|
||||
|
||||
+14
-11
@@ -59,7 +59,7 @@ react {
|
||||
/**
|
||||
* Set this to true to Run Proguard on Release builds to minify the Java bytecode.
|
||||
*/
|
||||
def enableProguardInReleaseBuilds = false
|
||||
def enableProguardInReleaseBuilds = true
|
||||
|
||||
/**
|
||||
* The preferred build flavor of JavaScriptCore (JSC)
|
||||
@@ -83,7 +83,6 @@ def jscFlavor = 'org.webkit:android-jsc:+'
|
||||
*/
|
||||
def enableHermes = hermesEnabled.toBoolean();
|
||||
|
||||
|
||||
def getCommitHash = { ->
|
||||
if (project.hasProperty("commitHash")) {
|
||||
return project.commitHash
|
||||
@@ -233,6 +232,7 @@ android {
|
||||
}
|
||||
release {
|
||||
minifyEnabled enableProguardInReleaseBuilds
|
||||
shrinkResources enableProguardInReleaseBuilds
|
||||
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
|
||||
signingConfig null
|
||||
}
|
||||
@@ -240,10 +240,10 @@ android {
|
||||
initWith release
|
||||
applicationIdSuffix ".pr"
|
||||
versionNameSuffix ".pr"
|
||||
debuggable false
|
||||
debuggable false
|
||||
matchingFallbacks = ["release"]
|
||||
// necessary to make react-native-config's code generation work
|
||||
resValue "string", "build_config_package", "im.status.ethereum"
|
||||
// necessary to make react-native-config's code generation work
|
||||
resValue "string", "build_config_package", "im.status.ethereum"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -277,11 +277,14 @@ dependencies {
|
||||
// The version of react-native is set by the React Native Gradle Plugin
|
||||
implementation("com.facebook.react:react-android")
|
||||
implementation("androidx.core:core-splashscreen:1.0.0")
|
||||
// we don't use hermes for debug but we need its pom file for release builds
|
||||
// https://github.com/status-im/status-mobile/pull/18675
|
||||
implementation("com.facebook.react:hermes-android")
|
||||
// FIXME: implementing both hermes & JSC increases bundle size by ~ 2MB
|
||||
implementation(jscFlavor)
|
||||
|
||||
if (enableHermes) {
|
||||
implementation("com.facebook.react:hermes-android")
|
||||
} else {
|
||||
// https://github.com/status-im/status-mobile/issues/18493
|
||||
// we don't use hermes for debug builds because it crashes too often
|
||||
implementation(jscFlavor)
|
||||
}
|
||||
|
||||
// react-native-screens
|
||||
implementation("androidx.appcompat:appcompat:1.1.0-rc01")
|
||||
@@ -293,7 +296,7 @@ dependencies {
|
||||
implementation("com.github.status-im:function:0.0.1")
|
||||
implementation("com.facebook.fresco:fresco:2.5.0")
|
||||
implementation("com.facebook.fresco:animated-gif:2.5.0")
|
||||
implementation("com.squareup.okhttp3:okhttp-tls:4.9.2")
|
||||
implementation("com.squareup.okhttp3:okhttp-tls:4.11.0")
|
||||
implementation("com.google.prefab:cli:2.0.0")
|
||||
implementation("com.android.tools.build:aapt2:8.1.1-10154469")
|
||||
}
|
||||
|
||||
Vendored
+13
-1
@@ -58,6 +58,9 @@
|
||||
-keep interface okhttp3.** { *; }
|
||||
-dontwarn okhttp3.**
|
||||
|
||||
# to fix : java.security.KeyStoreException: BKS not found
|
||||
-keep class org.bouncycastle.** { *; }
|
||||
|
||||
# okio
|
||||
|
||||
-keep class sun.misc.Unsafe { *; }
|
||||
@@ -75,4 +78,13 @@
|
||||
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
|
||||
**[] $VALUES;
|
||||
public *;
|
||||
}
|
||||
}
|
||||
|
||||
# react-native-config
|
||||
# https://github.com/lugg/react-native-config?tab=readme-ov-file#problems-with-proguard
|
||||
-keep class im.status.ethereum.BuildConfig {*;}
|
||||
|
||||
# react-native-navigation
|
||||
# to fix : java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
|
||||
# at com.reactnativenavigation.views.element.animators.PropertyAnimatorCreator.getChildClass(Unknown Source:13)
|
||||
-keep class com.reactnativenavigation.** {*;}
|
||||
|
||||
+5
-5
@@ -1119,14 +1119,14 @@ PODS:
|
||||
- React
|
||||
- ReactNativeCameraKit (14.0.0-beta13):
|
||||
- React-Core
|
||||
- ReactNativeNavigation (7.38.3):
|
||||
- ReactNativeNavigation (7.39.0):
|
||||
- HMSegmentedControl
|
||||
- React-Core
|
||||
- React-CoreModules
|
||||
- React-RCTImage
|
||||
- React-RCTText
|
||||
- ReactNativeNavigation/Core (= 7.38.3)
|
||||
- ReactNativeNavigation/Core (7.38.3):
|
||||
- ReactNativeNavigation/Core (= 7.39.0)
|
||||
- ReactNativeNavigation/Core (7.39.0):
|
||||
- HMSegmentedControl
|
||||
- React-Core
|
||||
- React-CoreModules
|
||||
@@ -1484,7 +1484,7 @@ SPEC CHECKSUMS:
|
||||
FBLazyVector: 56e0e498dbb513b96c40bac6284729ba4e62672d
|
||||
FBReactNativeSpec: 146c741a3f40361f6bc13a4ba284678cbedb5881
|
||||
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
|
||||
glog: 530710e7949eb12c82670bd09e946becf50a3c2a
|
||||
glog: c5d68082e772fa1c511173d6b30a9de2c05a69a2
|
||||
hermes-engine: 1d1835b2cc54c381909d94d1b3c8e0a2f1a94a0e
|
||||
HMSegmentedControl: 34c1f54d822d8308e7b24f5d901ec674dfa31352
|
||||
Keycard: ac6df4d91525c3c82635ac24d4ddd9a80aca5fc8
|
||||
@@ -1551,7 +1551,7 @@ SPEC CHECKSUMS:
|
||||
ReactCommon: 2947b0bffd82ea0e58ca7928881152d4c6dae9af
|
||||
ReactNativeAudioToolkit: de9610f323e855ac6574be8c99621f3d57c5df06
|
||||
ReactNativeCameraKit: d95d3e19c514526a234d9f93c6db7e7f10eef9ea
|
||||
ReactNativeNavigation: 46305e1026fa4cdcf0cfb3822932fc58d090668d
|
||||
ReactNativeNavigation: 679d8c8bf3b8ae98d285bce810964d10da85dbdb
|
||||
RNCAsyncStorage: c913ede1fa163a71cea118ed4670bbaaa4b511bb
|
||||
RNCClipboard: 60fed4b71560d7bfe40e9d35dea9762b024da86d
|
||||
RNCMaskedView: 71fc32d971f03b7f03d6ab6b86b730c4ee64f5b6
|
||||
|
||||
+13
@@ -75,4 +75,17 @@ class NetworkManager(private val reactContext: ReactApplicationContext) : ReactC
|
||||
utils.executeRunnableStatusGoMethod({ Statusgo.recover(rpcParams) }, callback)
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun getConnectionStringForExportingKeypairsKeystores(configJSON: String, callback: Callback) {
|
||||
val jsonConfig = JSONObject(configJSON)
|
||||
val senderConfig = jsonConfig.getJSONObject("senderConfig")
|
||||
val keyUID = senderConfig.getString("loggedInKeyUid")
|
||||
val keyStorePath = utils.getKeyStorePath(keyUID)
|
||||
senderConfig.put("keystorePath", keyStorePath)
|
||||
|
||||
utils.executeRunnableStatusGoMethod(
|
||||
{ Statusgo.getConnectionStringForExportingKeypairsKeystores(jsonConfig.toString()) },
|
||||
callback)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -106,4 +106,22 @@ RCT_EXPORT_METHOD(recover:(NSString *)message
|
||||
callback(@[result]);
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(getConnectionStringForExportingKeypairsKeystores:(NSString *)configJSON
|
||||
callback:(RCTResponseSenderBlock)callback) {
|
||||
|
||||
NSData *configData = [configJSON dataUsingEncoding:NSUTF8StringEncoding];
|
||||
NSError *error;
|
||||
NSMutableDictionary *configDict = [NSJSONSerialization JSONObjectWithData:configData options:NSJSONReadingMutableContainers error:&error];
|
||||
NSMutableDictionary *senderConfig = configDict[@"senderConfig"];
|
||||
NSString *keyUID = senderConfig[@"loggedInKeyUid"];
|
||||
NSURL *multiaccountKeystoreDir = [Utils getKeyStoreDirForKeyUID:keyUID];
|
||||
NSString *keystoreDir = multiaccountKeystoreDir.path;
|
||||
|
||||
[senderConfig setValue:keystoreDir forKey:@"keystorePath"];
|
||||
NSString *modifiedConfigJSON = [Utils jsonStringWithPrettyPrint:NO fromDictionary:configDict];
|
||||
|
||||
NSString *result = StatusgoGetConnectionStringForExportingKeypairsKeystores(modifiedConfigJSON);
|
||||
callback(@[result]);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
+123
-51
@@ -8454,20 +8454,16 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "commons-logging/commons-logging/1.3.1",
|
||||
"path": "commons-logging/commons-logging/1.3.2",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"commons-logging-1.3.1.pom": {
|
||||
"sha1": "4bfde82c8e291f8e31227a91e0c5e428ee113e2d",
|
||||
"sha256": "sha256-jeGLudCI4RAGLLIgVKx4DfW8A0njFzUbjtFuIH//s7g="
|
||||
"commons-logging-1.3.2.pom": {
|
||||
"sha1": "fcfa9f6e411771b8be9bee29e9d318867d3e1bc3",
|
||||
"sha256": "sha256-ZMFGqsSRjMPiHhMij1/kF4VZM7GBN0zML4me8eFWsm0="
|
||||
},
|
||||
"commons-logging-1.3.1-api.jar": {
|
||||
"sha1": "c8395db010f14b2643d838c66703ad7c9325ff3c",
|
||||
"sha256": "sha256-F+1DKWd0Dhql/EJKJGrawLoAamu/2pjKvGkoNRqOuFQ="
|
||||
},
|
||||
"commons-logging-1.3.1.jar": {
|
||||
"sha1": "8cff7dc1e492911f3dd7640ebfb60d6206a1dd40",
|
||||
"sha256": "sha256-lUB7tDN7rWuPsuZHpH+VIZmxUg7ztreTF9H+D8eQuPw="
|
||||
"commons-logging-1.3.2.jar": {
|
||||
"sha1": "3dc966156ef19d23c839715165435e582fafa753",
|
||||
"sha256": "sha256-a4WEJPUYAV8yv80Rg6Nz9Kgn1y0Ca2Ax2gyRzw6PNIk="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -12764,20 +12760,20 @@
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/squareup/okhttp3/okhttp-tls/4.9.2",
|
||||
"path": "com/squareup/okhttp3/okhttp-tls/4.11.0",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"okhttp-tls-4.9.2.pom": {
|
||||
"sha1": "dec05ee1b4de176f92a12361b1cc82eb7b45857d",
|
||||
"sha256": "sha256-pzMpEUHs6TYBsocbxdsl3laPLAqVohrGEBOkQdQbDBI="
|
||||
"okhttp-tls-4.11.0.pom": {
|
||||
"sha1": "93518ebb24213d6dcbde8e0c21913e40672f80c3",
|
||||
"sha256": "sha256-0SYiMcXxtb/bVe/7+SXas1/dWlNFEvhsSd3HIGY/IEg="
|
||||
},
|
||||
"okhttp-tls-4.9.2.jar": {
|
||||
"sha1": "2337dfb8b20de9cecd4ea36d54d15a3d85a3f385",
|
||||
"sha256": "sha256-W8xRWQAJ2M/xShfi7i3cQ6J1HOQZmdhiQaNG8JwiB34="
|
||||
"okhttp-tls-4.11.0.jar": {
|
||||
"sha1": "5ac74e5e234dc2d5cd434ac87df377858a2dcf40",
|
||||
"sha256": "sha256-SuTHCSwBeBhSRQabkSdGX9V8dkSF81ev7USlxIoFNf0="
|
||||
},
|
||||
"okhttp-tls-4.9.2.module": {
|
||||
"sha1": "d5ab02f5e49911694f95a23a0a93dd3de27f8dd1",
|
||||
"sha256": "sha256-s001IZvRHujsteSz3Qf0W+iym6Bep5z57dqRYcwlj9E="
|
||||
"okhttp-tls-4.11.0.module": {
|
||||
"sha1": "e790e6e5d0e88f9fc0c70df981e86daf29f411fa",
|
||||
"sha256": "sha256-2m5O5qfdybnUZusr5ScBAmsXms2wClyso08uXTdeSMI="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -12850,6 +12846,25 @@
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/squareup/okhttp3/okhttp/4.11.0",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"okhttp-4.11.0.pom": {
|
||||
"sha1": "723ab52cf1ac14363cb36ab084b0af810c095bef",
|
||||
"sha256": "sha256-ei1Cezixfgdtpk7o0hAuZIiNyyOK7l4tukp3UslKP94="
|
||||
},
|
||||
"okhttp-4.11.0.jar": {
|
||||
"sha1": "436932d695b2c43f2c86b8111c596179cd133d56",
|
||||
"sha256": "sha256-7o9r1s0SVwE9dIMw9MoUdjip+8tS+ziNWsk89TQIdF0="
|
||||
},
|
||||
"okhttp-4.11.0.module": {
|
||||
"sha1": "db24464b688785ba9c5765df8b5508a9b8994b40",
|
||||
"sha256": "sha256-VnwltR13eWF0Q5GE11JBK6l+2f22X8cYQNvFVjvrj6g="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/squareup/okhttp3/parent/3.9.1",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
@@ -12872,6 +12887,25 @@
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/squareup/okio/okio-jvm/3.2.0",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"okio-jvm-3.2.0.pom": {
|
||||
"sha1": "749720d97fe3dc16e0d84a05628f4c818b375a85",
|
||||
"sha256": "sha256-XEUflKdr6oYbbvK/hOj1cgBUWWjIZVWr3+0Tx8otSJ0="
|
||||
},
|
||||
"okio-jvm-3.2.0.jar": {
|
||||
"sha1": "332d1c5dc82b0241cb1d35bb0901d28470cc89ca",
|
||||
"sha256": "sha256-tkK670xXAFXeTLPRZnsrFtztkB/4BmNFoGNpGqBgJaQ="
|
||||
},
|
||||
"okio-jvm-3.2.0.module": {
|
||||
"sha1": "09f966bc7d27d5151fa3367e637e098cf7cf4179",
|
||||
"sha256": "sha256-p3jzkIXtar/NaHESmGxjhapXrC2IQLIdlGs8IJXzDqQ="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/squareup/okio/okio-jvm/3.9.0",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
@@ -12891,25 +12925,6 @@
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/squareup/okio/okio-metadata/2.8.0",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"okio-metadata-2.8.0.pom": {
|
||||
"sha1": "dc508270653b48fd92c98866c5f1ed6e3e033cad",
|
||||
"sha256": "sha256-v8xCxsWC2Zl4UgnmAs30RRoyZJrsbg7CaLdIhOA0QAg="
|
||||
},
|
||||
"okio-metadata-2.8.0.jar": {
|
||||
"sha1": "2a068c26cd04cbd7214ae6a4146c5f5424bdb393",
|
||||
"sha256": "sha256-99w4g86uLh/jQl4bVMXfKLiFfF/QA4G1If2mB5DylSw="
|
||||
},
|
||||
"okio-metadata-2.8.0.module": {
|
||||
"sha1": "a5b10ac12aa5f879996e516be24aaeb9b4459873",
|
||||
"sha256": "sha256-pO72Qb5eVGPSeJw8c2AfmpnzbhN3ygB+MPD+5ToFTNw="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/squareup/okio/okio-parent/1.13.0",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
@@ -13026,6 +13041,29 @@
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/squareup/okio/okio/3.2.0",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"okio-3.2.0.pom": {
|
||||
"sha1": "85284557b21661be1c4983910fef4e35532e1e34",
|
||||
"sha256": "sha256-i0b1jZua6xF4Nh1YpoZfTa1mWTDF/3tV4LqmHvOpcqE="
|
||||
},
|
||||
"okio-3.2.0-all.jar": {
|
||||
"sha1": "22e2a4f865203033fc0f35fd5892a213d21a4710",
|
||||
"sha256": "sha256-Uf+6hylix9O+0SjfKbDeqz7qMfwjfAoMgVjcmQqEh44="
|
||||
},
|
||||
"okio-3.2.0.jar": {
|
||||
"sha1": "afd4b7185a6976c2ac6bfb7b126c257ee9b3e765",
|
||||
"sha256": "sha256-3KkyyyAptsniZ3D4fbCLFNSB/+gTGlnzaaI4XBG+Ti0="
|
||||
},
|
||||
"okio-3.2.0.module": {
|
||||
"sha1": "32c2edb224d6eeaee24f8086e3ac41b92138fadb",
|
||||
"sha256": "sha256-aB9c7BcN5FuVST6e5wWGjrNa34mO4G+W4i0ZclDBsQQ="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "com/squareup/okio/okio/3.9.0",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
@@ -15897,17 +15935,6 @@
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/apache/commons/commons-parent/67",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"commons-parent-67.pom": {
|
||||
"sha1": "761d110d7313f09bfc20ec1fb1f420da3314958e",
|
||||
"sha256": "sha256-UHrZeCzW5L8io0Eyk2TG2vqqAqsmswy8Z4XPsFlQZ1Y="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/apache/commons/commons-parent/69",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
@@ -20025,6 +20052,21 @@
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.6.10",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"kotlin-stdlib-jdk7-1.6.10.pom": {
|
||||
"sha1": "5da7f12df7646d63f35e8a894157143c93efceb4",
|
||||
"sha256": "sha256-YSIR/5MPW1LHJP92NBfVqigd1+AyXDs1yNGBIKao300="
|
||||
},
|
||||
"kotlin-stdlib-jdk7-1.6.10.jar": {
|
||||
"sha1": "e1c380673654a089c4f0c9f83d0ddfdc1efdb498",
|
||||
"sha256": "sha256-Ku3NxrabM731zCNbzqiOfPZgEUa7a83/2zErus174mE="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.6.20",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
@@ -20235,6 +20277,36 @@
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.6.10",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"kotlin-stdlib-jdk8-1.6.10.pom": {
|
||||
"sha1": "9ad76ce2a9e0473c5d5d4ec01add1b061beb521d",
|
||||
"sha256": "sha256-Q6ZJ+nN7+zX6SvTm3jPi8IpdGRBNdYLqQNvNK2N5Csw="
|
||||
},
|
||||
"kotlin-stdlib-jdk8-1.6.10.jar": {
|
||||
"sha1": "e80fe6ac3c3573a80305f5ec43f86b829e8ab53d",
|
||||
"sha256": "sha256-FFbYLQOeow2EhbAykB9Su/B+fNvoux+HCK0yqFdMQc4="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.6.20",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
"files": {
|
||||
"kotlin-stdlib-jdk8-1.6.20.pom": {
|
||||
"sha1": "6207ba2d7a89316eafea7f135ef1fc17e41c424b",
|
||||
"sha256": "sha256-GEap+GBLC+HHGiEovb2diQJyAnlCf2ItK5pECsmjwwk="
|
||||
},
|
||||
"kotlin-stdlib-jdk8-1.6.20.jar": {
|
||||
"sha1": "dab8089bca6ac0e394c37281ea8cff2f99acd421",
|
||||
"sha256": "sha256-/asb8SDiteerbXiI6evAJOxrjKcpNhKWOV2rY0shNpU="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"path": "org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.8.0",
|
||||
"repo": "https://repo.maven.apache.org/maven2",
|
||||
|
||||
@@ -597,12 +597,13 @@ com.google.test.platform:core-proto:0.0.2-dev
|
||||
com.ibm.icu:icu4j:53.1
|
||||
com.intellij:annotations:12.0
|
||||
com.parse.bolts:bolts-tasks:1.4.0
|
||||
com.squareup.okhttp3:okhttp-tls:4.9.2
|
||||
com.squareup.okhttp3:okhttp-tls:4.11.0
|
||||
com.squareup.okhttp3:okhttp-urlconnection:4.9.2
|
||||
com.squareup.okhttp3:okhttp:4.9.2
|
||||
com.squareup.okio:okio-metadata:2.8.0
|
||||
com.squareup.okio:okio:2.8.0
|
||||
com.squareup.okhttp3:okhttp:4.11.0
|
||||
com.squareup.okio:okio-jvm:3.2.0
|
||||
com.squareup.okio:okio:2.9.0
|
||||
com.squareup.okio:okio:3.2.0
|
||||
com.squareup:javapoet:1.8.0
|
||||
com.squareup:javapoet:1.10.0
|
||||
com.squareup:javapoet:1.13.0
|
||||
|
||||
@@ -528,7 +528,7 @@ https://repo.maven.apache.org/maven2/commons-io/commons-io/2.4/commons-io-2.4.po
|
||||
https://repo.maven.apache.org/maven2/commons-io/commons-io/2.16.1/commons-io-2.16.1.pom
|
||||
https://repo.maven.apache.org/maven2/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.pom
|
||||
https://repo.maven.apache.org/maven2/commons-logging/commons-logging/1.2/commons-logging-1.2.pom
|
||||
https://repo.maven.apache.org/maven2/commons-logging/commons-logging/1.3.1/commons-logging-1.3.1.pom
|
||||
https://repo.maven.apache.org/maven2/commons-logging/commons-logging/1.3.2/commons-logging-1.3.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/adobe/xmp/xmpcore/6.1.11/xmpcore-6.1.11.pom
|
||||
https://repo.maven.apache.org/maven2/com/afollestad/material-dialogs/commons/0.9.6.0/commons-0.9.6.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/afollestad/material-dialogs/core/0.9.6.0/core-0.9.6.0.pom
|
||||
@@ -806,15 +806,16 @@ https://repo.maven.apache.org/maven2/com/squareup/javapoet/1.8.0/javapoet-1.8.0.
|
||||
https://repo.maven.apache.org/maven2/com/squareup/javapoet/1.10.0/javapoet-1.10.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/javapoet/1.13.0/javapoet-1.13.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/javawriter/2.5.0/javawriter-2.5.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp-tls/4.9.2/okhttp-tls-4.9.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp-tls/4.11.0/okhttp-tls-4.11.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp-urlconnection/4.9.2/okhttp-urlconnection-4.9.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/3.9.1/okhttp-3.9.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/3.12.1/okhttp-3.12.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/4.9.2/okhttp-4.9.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/4.11.0/okhttp-4.11.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.9.1/parent-3.9.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.12.1/parent-3.12.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-jvm/3.2.0/okio-jvm-3.2.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-jvm/3.9.0/okio-jvm-3.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-metadata/2.8.0/okio-metadata-2.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-parent/1.13.0/okio-parent-1.13.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-parent/1.15.0/okio-parent-1.15.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-parent/1.17.4/okio-parent-1.17.4.pom
|
||||
@@ -823,6 +824,7 @@ https://repo.maven.apache.org/maven2/com/squareup/okio/okio/1.15.0/okio-1.15.0.p
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/1.17.4/okio-1.17.4.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/2.8.0/okio-2.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/2.9.0/okio-2.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/3.2.0/okio-3.2.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/3.9.0/okio-3.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/activation/all/1.2.0/all-1.2.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/activation/all/1.2.1/all-1.2.1.pom
|
||||
@@ -1032,7 +1034,6 @@ https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/39/common
|
||||
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/42/commons-parent-42.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/48/commons-parent-48.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/52/commons-parent-52.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/67/commons-parent-67.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/69/commons-parent-69.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4.1.1/httpclient-4.1.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4.2.6/httpclient-4.2.6.pom
|
||||
@@ -1300,6 +1301,7 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.5
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.5.30/kotlin-stdlib-jdk7-1.5.30.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.5.31/kotlin-stdlib-jdk7-1.5.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.6.0/kotlin-stdlib-jdk7-1.6.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.6.10/kotlin-stdlib-jdk7-1.6.10.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.6.20/kotlin-stdlib-jdk7-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.8.0/kotlin-stdlib-jdk7-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.8.20-RC2/kotlin-stdlib-jdk7-1.8.20-RC2.pom
|
||||
@@ -1314,6 +1316,8 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.5
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.5.30/kotlin-stdlib-jdk8-1.5.30.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.5.31/kotlin-stdlib-jdk8-1.5.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.6.0/kotlin-stdlib-jdk8-1.6.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.6.10/kotlin-stdlib-jdk8-1.6.10.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.6.20/kotlin-stdlib-jdk8-1.6.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.8.0/kotlin-stdlib-jdk8-1.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.8.20-RC2/kotlin-stdlib-jdk8-1.8.20-RC2.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.8.21/kotlin-stdlib-jdk8-1.8.21.pom
|
||||
|
||||
@@ -55,7 +55,8 @@ com.android.tools.build:gradle:8.1.1
|
||||
com.google.errorprone:error_prone_annotations:2.7.1
|
||||
com.android.tools.lint:lint-gradle:31.1.1
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0
|
||||
com.android.tools.build:gradle:3.5.4' \
|
||||
com.android.tools.build:gradle:3.5.4
|
||||
com.facebook.react:hermes-android:0.73.5' \
|
||||
>> "${DEPS_LIST}"
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -57,7 +57,7 @@ in {
|
||||
yarn = super.yarn.override { nodejs = super.nodejs-18_x; };
|
||||
openjdk = super.openjdk11_headless;
|
||||
xcodeWrapper = callPackage ./pkgs/xcodeenv/compose-xcodewrapper.nix { } {
|
||||
versions = ["15.1" "15.2"];
|
||||
versions = ["15.1" "15.2" "15.3"];
|
||||
};
|
||||
go = super.go_1_20;
|
||||
clang = super.clang_15;
|
||||
|
||||
+1
-1
@@ -55,7 +55,7 @@
|
||||
"react-native-keychain": "8.1.2",
|
||||
"react-native-linear-gradient": "^2.8.0",
|
||||
"react-native-lottie-splash-screen": "^1.0.1",
|
||||
"react-native-navigation": "7.38.3",
|
||||
"react-native-navigation": "7.39.0",
|
||||
"react-native-orientation-locker": "^1.5.0",
|
||||
"react-native-permissions": "4.1.5",
|
||||
"react-native-reanimated": "3.6.1",
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
# https://github.com/wix/react-native-navigation/issues/7819
|
||||
|
||||
--- ./node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonPresenter.kt
|
||||
+++ ./node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonPresenter-patched.kt
|
||||
@@ -194,8 +194,8 @@
|
||||
|
||||
class WixAccessibilityDelegateCompat: AccessibilityDelegateCompat(){
|
||||
override fun onInitializeAccessibilityNodeInfo(
|
||||
- host: View?,
|
||||
- info: AccessibilityNodeInfoCompat?
|
||||
+ host: View,
|
||||
+ info: AccessibilityNodeInfoCompat
|
||||
) {
|
||||
super.onInitializeAccessibilityNodeInfo(host, info)
|
||||
|
||||
@@ -216,4 +216,4 @@
|
||||
}
|
||||
|
||||
|
||||
-}
|
||||
\ No newline at end of file
|
||||
+}
|
||||
@@ -1,19 +0,0 @@
|
||||
# https://github.com/wix/react-native-navigation/issues/7819
|
||||
|
||||
--- ./node_modules/react-native-navigation/lib/android/app/build.gradle
|
||||
+++ ./node_modules/react-native-navigation/lib/android/app/build-patched.gradle
|
||||
@@ -62,11 +62,11 @@
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
- sourceCompatibility JavaVersion.VERSION_1_8
|
||||
- targetCompatibility JavaVersion.VERSION_1_8
|
||||
+ sourceCompatibility JavaVersion.VERSION_17
|
||||
+ targetCompatibility JavaVersion.VERSION_17
|
||||
}
|
||||
kotlinOptions {
|
||||
- jvmTarget = JavaVersion.VERSION_1_8
|
||||
+ jvmTarget = JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
flavorDimensions "RNN.reactNativeVersion"
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"meta": {
|
||||
"hostname": "node-01.do-ams3.sites.misc",
|
||||
"timestamp": "2024-02-02T14:48:22.521541",
|
||||
"timestamp": "2024-03-15T00:00:36.865154",
|
||||
"warning": "DO NOT EDIT! Auto generated from Consul. Should only be used at build time."
|
||||
},
|
||||
"fleets": {
|
||||
@@ -82,38 +82,21 @@
|
||||
"boot-01.ac-cn-hongkong-c.eth.staging": "/ip4/47.91.229.44/tcp/30703/ethv4/16Uiu2HAmRnt2Eyoknh3auxh4fJwkRgqkH1gqrWGes8Pk1k3MV4xu"
|
||||
}
|
||||
},
|
||||
"wakuv2.prod": {
|
||||
"waku.sandbox": {
|
||||
"tcp/p2p/waku": {
|
||||
"node-01.do-ams3.wakuv2.prod": "/dns4/node-01.do-ams3.wakuv2.prod.statusim.net/tcp/30303/p2p/16Uiu2HAmL5okWopX7NqZWBUKVqW8iUxCEmd5GMHLVPwCgzYzQv3e",
|
||||
"node-01.gc-us-central1-a.wakuv2.prod": "/dns4/node-01.gc-us-central1-a.wakuv2.prod.statusim.net/tcp/30303/p2p/16Uiu2HAmVkKntsECaYfefR1V2yCR79CegLATuTPE6B9TxgxBiiiA",
|
||||
"node-01.ac-cn-hongkong-c.wakuv2.prod": "/dns4/node-01.ac-cn-hongkong-c.wakuv2.prod.statusim.net/tcp/30303/p2p/16Uiu2HAm4v86W3bmT1BiH6oSPzcsSr24iDQpSN5Qa992BCjjwgrD"
|
||||
"node-01.do-ams3.waku.sandbox": "/dns4/node-01.do-ams3.waku.sandbox.status.im/tcp/30303/p2p/16Uiu2HAmQSMNExfUYUqfuXWkD5DaNZnMYnigRxFKbk3tcEFQeQeE",
|
||||
"node-01.gc-us-central1-a.waku.sandbox": "/dns4/node-01.gc-us-central1-a.waku.sandbox.status.im/tcp/30303/p2p/16Uiu2HAm6fyqE1jB5MonzvoMdU8v76bWV8ZeNpncDamY1MQXfjdB",
|
||||
"node-01.ac-cn-hongkong-c.waku.sandbox": "/dns4/node-01.ac-cn-hongkong-c.waku.sandbox.status.im/tcp/30303/p2p/16Uiu2HAmSJvSJphxRdbnigUV5bjRRZFBhTtWFTSyiKaQByCjwmpV"
|
||||
},
|
||||
"enr/p2p/waku": {
|
||||
"node-01.do-ams3.wakuv2.prod": "enr:-P-4QJI8tS1WTdIQxq_yIrD05oIIW1Xg-tm_qfP0CHfJGnp9dfr6ttQJmHwTNxGEl4Le8Q7YHcmi-kXTtphxFysS11oBgmlkgnY0gmlwhLymh5GKbXVsdGlhZGRyc7hgAC02KG5vZGUtMDEuZG8tYW1zMy53YWt1djIucHJvZC5zdGF0dXNpbS5uZXQGdl8ALzYobm9kZS0wMS5kby1hbXMzLndha3V2Mi5wcm9kLnN0YXR1c2ltLm5ldAYfQN4DiXNlY3AyNTZrMaEDbl1X_zJIw3EAJGtmHMVn4Z2xhpSoUaP5ElsHKCv7hlWDdGNwgnZfg3VkcIIjKIV3YWt1Mg8",
|
||||
"node-01.gc-us-central1-a.wakuv2.prod": "enr:-QERuEC0EGWTjg_gYdnuPypJ9LAbB3lml6M8GiRajGegL2iWEj1MJzUMV9X6jXw7mMAQQLozLCTLFT-zv-ELQLPwWdACAYJpZIJ2NIJpcIQieWRsim11bHRpYWRkcnO4cgA2NjFub2RlLTAxLmdjLXVzLWNlbnRyYWwxLWEud2FrdXYyLnByb2Quc3RhdHVzaW0ubmV0BnZfADg2MW5vZGUtMDEuZ2MtdXMtY2VudHJhbDEtYS53YWt1djIucHJvZC5zdGF0dXNpbS5uZXQGH0DeA4lzZWNwMjU2azGhA_30kHgQqfXZRioa4J_u5asgXTJ5iw_8w3lEICH4TFu_g3RjcIJ2X4N1ZHCCIyiFd2FrdTIP",
|
||||
"node-01.ac-cn-hongkong-c.wakuv2.prod": "enr:-QERuEDABor1lVmSa5ek8of5eBc8jZoxxdleJVLLdMl8UeZHNwhsVp64SFiCT4BRIIfcs7uxTPUCjmWxK_OA1s-FfIW7AYJpZIJ2NIJpcIQI0t7nim11bHRpYWRkcnO4cgA2NjFub2RlLTAxLmFjLWNuLWhvbmdrb25nLWMud2FrdXYyLnByb2Quc3RhdHVzaW0ubmV0BnZfADg2MW5vZGUtMDEuYWMtY24taG9uZ2tvbmctYy53YWt1djIucHJvZC5zdGF0dXNpbS5uZXQGH0DeA4lzZWNwMjU2azGhAo0C-VvfgHiXrxZi3umDiooXMGY9FvYj5_d1Q4EeS7eyg3RjcIJ2X4N1ZHCCIyiFd2FrdTIP"
|
||||
"node-01.do-ams3.waku.sandbox": "enr:-QESuEB4Dchgjn7gfAvwB00CxTA-nGiyk-aALI-H4dYSZD3rUk7bZHmP8d2U6xDiQ2vZffpo45Jp7zKNdnwDUx6g4o6XAYJpZIJ2NIJpcIRA4VDAim11bHRpYWRkcnO4XAArNiZub2RlLTAxLmRvLWFtczMud2FrdS5zYW5kYm94LnN0YXR1cy5pbQZ2XwAtNiZub2RlLTAxLmRvLWFtczMud2FrdS5zYW5kYm94LnN0YXR1cy5pbQYfQN4DgnJzkwABCAAAAAEAAgADAAQABQAGAAeJc2VjcDI1NmsxoQOvD3S3jUNICsrOILlmhENiWAMmMVlAl6-Q8wRB7hidY4N0Y3CCdl-DdWRwgiMohXdha3UyDw",
|
||||
"node-01.gc-us-central1-a.waku.sandbox": "enr:-QEkuEBIkb8q8_mrorHndoXH9t5N6ZfD-jehQCrYeoJDPHqT0l0wyaONa2-piRQsi3oVKAzDShDVeoQhy0uwN1xbZfPZAYJpZIJ2NIJpcIQiQlleim11bHRpYWRkcnO4bgA0Ni9ub2RlLTAxLmdjLXVzLWNlbnRyYWwxLWEud2FrdS5zYW5kYm94LnN0YXR1cy5pbQZ2XwA2Ni9ub2RlLTAxLmdjLXVzLWNlbnRyYWwxLWEud2FrdS5zYW5kYm94LnN0YXR1cy5pbQYfQN4DgnJzkwABCAAAAAEAAgADAAQABQAGAAeJc2VjcDI1NmsxoQKnGt-GSgqPSf3IAPM7bFgTlpczpMZZLF3geeoNNsxzSoN0Y3CCdl-DdWRwgiMohXdha3UyDw",
|
||||
"node-01.ac-cn-hongkong-c.waku.sandbox": "enr:-QEkuEB3WHNS-xA3RDpfu9A2Qycr3bN3u7VoArMEiDIFZJ66F1EB3d4wxZN1hcdcOX-RfuXB-MQauhJGQbpz3qUofOtLAYJpZIJ2NIJpcIQI2SVcim11bHRpYWRkcnO4bgA0Ni9ub2RlLTAxLmFjLWNuLWhvbmdrb25nLWMud2FrdS5zYW5kYm94LnN0YXR1cy5pbQZ2XwA2Ni9ub2RlLTAxLmFjLWNuLWhvbmdrb25nLWMud2FrdS5zYW5kYm94LnN0YXR1cy5pbQYfQN4DgnJzkwABCAAAAAEAAgADAAQABQAGAAeJc2VjcDI1NmsxoQPK35Nnz0cWUtSAhBp7zvHEhyU_AqeQUlqzLiLxfP2L4oN0Y3CCdl-DdWRwgiMohXdha3UyDw"
|
||||
},
|
||||
"wss/p2p/waku": {
|
||||
"node-01.do-ams3.wakuv2.prod": "/dns4/node-01.do-ams3.wakuv2.prod.statusim.net/tcp/8000/wss/p2p/16Uiu2HAmL5okWopX7NqZWBUKVqW8iUxCEmd5GMHLVPwCgzYzQv3e",
|
||||
"node-01.gc-us-central1-a.wakuv2.prod": "/dns4/node-01.gc-us-central1-a.wakuv2.prod.statusim.net/tcp/8000/wss/p2p/16Uiu2HAmVkKntsECaYfefR1V2yCR79CegLATuTPE6B9TxgxBiiiA",
|
||||
"node-01.ac-cn-hongkong-c.wakuv2.prod": "/dns4/node-01.ac-cn-hongkong-c.wakuv2.prod.statusim.net/tcp/8000/wss/p2p/16Uiu2HAm4v86W3bmT1BiH6oSPzcsSr24iDQpSN5Qa992BCjjwgrD"
|
||||
}
|
||||
},
|
||||
"wakuv2.test": {
|
||||
"tcp/p2p/waku": {
|
||||
"node-01.do-ams3.wakuv2.test": "/dns4/node-01.do-ams3.wakuv2.test.statusim.net/tcp/30303/p2p/16Uiu2HAmPLe7Mzm8TsYUubgCAW1aJoeFScxrLj8ppHFivPo97bUZ",
|
||||
"node-01.gc-us-central1-a.wakuv2.test": "/dns4/node-01.gc-us-central1-a.wakuv2.test.statusim.net/tcp/30303/p2p/16Uiu2HAmJb2e28qLXxT5kZxVUUoJt72EMzNGXB47Rxx5hw3q4YjS",
|
||||
"node-01.ac-cn-hongkong-c.wakuv2.test": "/dns4/node-01.ac-cn-hongkong-c.wakuv2.test.statusim.net/tcp/30303/p2p/16Uiu2HAkvWiyFsgRhuJEb9JfjYxEkoHLgnUQmr1N5mKWnYjxYRVm"
|
||||
},
|
||||
"enr/p2p/waku": {
|
||||
"node-01.do-ams3.wakuv2.test": "enr:-P-4QPLMQ1zIYRAs4-F0mYmMxMihSySRtEIuGHJ_Qd_GL8XqUE78hpVUE97rgwlXnxPkzMJHkWyiNq7DT1fdZSy3QcgBgmlkgnY0gmlwhIbRi9KKbXVsdGlhZGRyc7hgAC02KG5vZGUtMDEuZG8tYW1zMy53YWt1djIudGVzdC5zdGF0dXNpbS5uZXQGdl8ALzYobm9kZS0wMS5kby1hbXMzLndha3V2Mi50ZXN0LnN0YXR1c2ltLm5ldAYfQN4DiXNlY3AyNTZrMaEDnr03Tuo77930a7sYLikftxnuG3BbC3gCFhA4632ooDaDdGNwgnZfg3VkcIIjKIV3YWt1Mg8",
|
||||
"node-01.gc-us-central1-a.wakuv2.test": "enr:-QERuEDZcXS5tjppj4TIlOm-TLanjmqx3-uk2kGFvvAQR1NVrklUhiN1JCb5dWucEQ_oDADOb6nG_1mJ5goF5CHneZ-VAYJpZIJ2NIJpcIRomu-Aim11bHRpYWRkcnO4cgA2NjFub2RlLTAxLmdjLXVzLWNlbnRyYWwxLWEud2FrdXYyLnRlc3Quc3RhdHVzaW0ubmV0BnZfADg2MW5vZGUtMDEuZ2MtdXMtY2VudHJhbDEtYS53YWt1djIudGVzdC5zdGF0dXNpbS5uZXQGH0DeA4lzZWNwMjU2azGhA1giYsmWV9r2yJZYAiMGHJfjLlLeqAuTAokUGPN__pkxg3RjcIJ2X4N1ZHCCIyiFd2FrdTIP",
|
||||
"node-01.ac-cn-hongkong-c.wakuv2.test": "enr:-QERuEC2LyiXKURIKxNHa7Mj7frsM-lZiAGJ-2mopR3w8LMn2UhKmahZ9RHKV5ehBN1fXbRYqAeiXuOxD9t2igF4PIizAYJpZIJ2NIJpcIQv8tJJim11bHRpYWRkcnO4cgA2NjFub2RlLTAxLmFjLWNuLWhvbmdrb25nLWMud2FrdXYyLnRlc3Quc3RhdHVzaW0ubmV0BnZfADg2MW5vZGUtMDEuYWMtY24taG9uZ2tvbmctYy53YWt1djIudGVzdC5zdGF0dXNpbS5uZXQGH0DeA4lzZWNwMjU2azGhAhAm-P4q6mWONKcGnbLPU8WXZJ4Qs3AxIbrycvc7PVKsg3RjcIJ2X4N1ZHCCIyiFd2FrdTIP"
|
||||
},
|
||||
"wss/p2p/waku": {
|
||||
"node-01.do-ams3.wakuv2.test": "/dns4/node-01.do-ams3.wakuv2.test.statusim.net/tcp/8000/wss/p2p/16Uiu2HAmPLe7Mzm8TsYUubgCAW1aJoeFScxrLj8ppHFivPo97bUZ",
|
||||
"node-01.gc-us-central1-a.wakuv2.test": "/dns4/node-01.gc-us-central1-a.wakuv2.test.statusim.net/tcp/8000/wss/p2p/16Uiu2HAmJb2e28qLXxT5kZxVUUoJt72EMzNGXB47Rxx5hw3q4YjS",
|
||||
"node-01.ac-cn-hongkong-c.wakuv2.test": "/dns4/node-01.ac-cn-hongkong-c.wakuv2.test.statusim.net/tcp/8000/wss/p2p/16Uiu2HAkvWiyFsgRhuJEb9JfjYxEkoHLgnUQmr1N5mKWnYjxYRVm"
|
||||
"node-01.do-ams3.waku.sandbox": "/dns4/node-01.do-ams3.waku.sandbox.status.im/tcp/8000/wss/p2p/16Uiu2HAmQSMNExfUYUqfuXWkD5DaNZnMYnigRxFKbk3tcEFQeQeE",
|
||||
"node-01.gc-us-central1-a.waku.sandbox": "/dns4/node-01.gc-us-central1-a.waku.sandbox.status.im/tcp/8000/wss/p2p/16Uiu2HAm6fyqE1jB5MonzvoMdU8v76bWV8ZeNpncDamY1MQXfjdB",
|
||||
"node-01.ac-cn-hongkong-c.waku.sandbox": "/dns4/node-01.ac-cn-hongkong-c.waku.sandbox.status.im/tcp/8000/wss/p2p/16Uiu2HAmSJvSJphxRdbnigUV5bjRRZFBhTtWFTSyiKaQByCjwmpV"
|
||||
}
|
||||
},
|
||||
"waku.test": {
|
||||
@@ -183,9 +166,9 @@
|
||||
"boot-01.ac-cn-hongkong-c.shards.test": "/dns4/boot-01.ac-cn-hongkong-c.shards.test.statusim.net/tcp/30303/p2p/16Uiu2HAmGwcE8v7gmJNEWFtZtojYpPMTHy2jBLL6xRk33qgDxFWX"
|
||||
},
|
||||
"enr/p2p/waku/boot": {
|
||||
"boot-01.do-ams3.shards.test": "enr:-QEOuEAuAK49evunDoidpHqcmeVqZz73wt4jwHnHJlmCVBFj6EdIbZ9uH5BnCYKOEPJTns2QJKUR2XLtWyzIspPAfJF9AYJpZIJ2NIJpcISnYxMvim11bHRpYWRkcnO4YAAtNihib290LTAxLmRvLWFtczMuc2hhcmRzLnRlc3Quc3RhdHVzaW0ubmV0BnZfAC82KGJvb3QtMDEuZG8tYW1zMy5zaGFyZHMudGVzdC5zdGF0dXNpbS5uZXQGAbveA4Jyc4sAEAQAIABAAIABAIlzZWNwMjU2azGhAt60bRUEoHNuLlnsM12sU2PIQwBwfLIJ8a_ZPEY2-Rnkg3RjcIJ2X4N1ZHCCIyiFd2FrdTIN",
|
||||
"boot-01.gc-us-central1-a.shards.test": "enr:-QEguEC3wjzOk7U5rIqiX32CCD-0_J1cYYGK_YwKSah5di2NTxJUaKQ9B7NMiEQ_-YGm-Eus4SzHtxN_fXEuVaNHql9aAYJpZIJ2NIJpcIQihw1Xim11bHRpYWRkcnO4cgA2NjFib290LTAxLmdjLXVzLWNlbnRyYWwxLWEuc2hhcmRzLnRlc3Quc3RhdHVzaW0ubmV0BnZfADg2MWJvb3QtMDEuZ2MtdXMtY2VudHJhbDEtYS5zaGFyZHMudGVzdC5zdGF0dXNpbS5uZXQGAbveA4Jyc4sAEAQAIABAAIABAIlzZWNwMjU2azGhAsY6oA0NFskUjopWFN9gwOZP1zZQ4rN5tVXV5CvcTOpDg3RjcIJ2X4N1ZHCCIyiFd2FrdTIN",
|
||||
"boot-01.ac-cn-hongkong-c.shards.test": "enr:-QEguEBb4rlxsdYCIZ8NcAlcjnb2zp4C9JbDsz-01Ix2sKNdWzI79KRFnhlakX-4F8gRYcviDvQL5eEZDOxHTupUW7VXAYJpZIJ2NIJpcIQI2hdMim11bHRpYWRkcnO4cgA2NjFib290LTAxLmFjLWNuLWhvbmdrb25nLWMuc2hhcmRzLnRlc3Quc3RhdHVzaW0ubmV0BnZfADg2MWJvb3QtMDEuYWMtY24taG9uZ2tvbmctYy5zaGFyZHMudGVzdC5zdGF0dXNpbS5uZXQGAbveA4Jyc4sAEAQAIABAAIABAIlzZWNwMjU2azGhAz-wm0ZPmCicDhRTOGfZ3stBj3O1jyWgsBpKTUcpWu5gg3RjcIJ2X4N1ZHCCIyiFd2FrdTIN"
|
||||
"boot-01.do-ams3.shards.test": "enr:-QEQuEAdkU8UWa5vvRr-uoULGoyWflIOozVUWj-9iUXw7nEo_yWKmDKrYJ_t4rSwbRLobDy8M0mO8HQyDFVfdQxDZQRVAYJpZIJ2NIJpcISnYxMvim11bHRpYWRkcnO4YAAtNihib290LTAxLmRvLWFtczMuc2hhcmRzLnRlc3Quc3RhdHVzaW0ubmV0BnZfAC82KGJvb3QtMDEuZG8tYW1zMy5zaGFyZHMudGVzdC5zdGF0dXNpbS5uZXQGAbveA4Jyc40AEAUAAQAgAEAAgAEAiXNlY3AyNTZrMaEC3rRtFQSgc24uWewzXaxTY8hDAHB8sgnxr9k8Rjb5GeSDdGNwgnZfg3VkcIIjKIV3YWt1Mg0",
|
||||
"boot-01.gc-us-central1-a.shards.test": "enr:-QEiuECIDOWRVQAUq2xpm3EUhuLRH1e_WCiLa6-5zmLoyVB-QSkSealvjt5Zb7cEqhU0pIeRaqnX6b8s98BahmG2XaSIAYJpZIJ2NIJpcIQihw1Xim11bHRpYWRkcnO4cgA2NjFib290LTAxLmdjLXVzLWNlbnRyYWwxLWEuc2hhcmRzLnRlc3Quc3RhdHVzaW0ubmV0BnZfADg2MWJvb3QtMDEuZ2MtdXMtY2VudHJhbDEtYS5zaGFyZHMudGVzdC5zdGF0dXNpbS5uZXQGAbveA4Jyc40AEAUAAQAgAEAAgAEAiXNlY3AyNTZrMaECxjqgDQ0WyRSOilYU32DA5k_XNlDis3m1VdXkK9xM6kODdGNwgnZfg3VkcIIjKIV3YWt1Mg0",
|
||||
"boot-01.ac-cn-hongkong-c.shards.test": "enr:-QEiuEDvfBDIqKRhdBHfGkRLvbYdD8Cja_m8tqWqUG40zXDUSTWejzvi2TL7z4H9gMhy2asTJ0vBTMjpQPj6Te-e2uAFAYJpZIJ2NIJpcIQI2hdMim11bHRpYWRkcnO4cgA2NjFib290LTAxLmFjLWNuLWhvbmdrb25nLWMuc2hhcmRzLnRlc3Quc3RhdHVzaW0ubmV0BnZfADg2MWJvb3QtMDEuYWMtY24taG9uZ2tvbmctYy5zaGFyZHMudGVzdC5zdGF0dXNpbS5uZXQGAbveA4Jyc40AEAUAAQAgAEAAgAEAiXNlY3AyNTZrMaEDP7CbRk-YKJwOFFM4Z9ney0GPc7WPJaCwGkpNRyla7mCDdGNwgnZfg3VkcIIjKIV3YWt1Mg0"
|
||||
},
|
||||
"wss/p2p/waku/boot": {
|
||||
"boot-01.do-ams3.shards.test": "/dns4/boot-01.do-ams3.shards.test.statusim.net/tcp/443/wss/p2p/16Uiu2HAmAR24Mbb6VuzoyUiGx42UenDkshENVDj4qnmmbabLvo31",
|
||||
@@ -201,12 +184,12 @@
|
||||
"store-02.ac-cn-hongkong-c.shards.test": "/dns4/store-02.ac-cn-hongkong-c.shards.test.statusim.net/tcp/30303/p2p/16Uiu2HAm9CQhsuwPR54q27kNj9iaQVfyRzTGKrhFmr94oD8ujU6P"
|
||||
},
|
||||
"enr/p2p/waku/store": {
|
||||
"store-01.do-ams3.shards.test": "enr:-QEQuEDom7vBcLEP3ZCvRGPyBVTUJUO5YIyXvxcibag_iq6s5Ux6Zd1_nnqEXqynppYMNOTaTzSetRhmV9IH83j72umYAYJpZIJ2NIJpcISf3_Jeim11bHRpYWRkcnO4YgAuNilzdG9yZS0wMS5kby1hbXMzLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAZ2XwAwNilzdG9yZS0wMS5kby1hbXMzLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAYBu94DgnJziwAQBAAgAEAAgAEAiXNlY3AyNTZrMaEC36GkB96EmFufcsRAX3gGW5bZlJwuAc2JB6nq9lUDE8qDdGNwgnZfg3VkcIIjKIV3YWt1MgM",
|
||||
"store-02.do-ams3.shards.test": "enr:-QEQuEAmPituRLmZuwA6z0AT_Vl-KWbb7kpyX7qcWwbjygv_Oxrdu_0kmpShNtauWxhRmaOMOYddv9IwiIS8HujxHvpbAYJpZIJ2NIJpcISf3_Kaim11bHRpYWRkcnO4YgAuNilzdG9yZS0wMi5kby1hbXMzLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAZ2XwAwNilzdG9yZS0wMi5kby1hbXMzLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAYBu94DgnJziwAQBAAgAEAAgAEAiXNlY3AyNTZrMaEC0jOth5qhqWd_NmDOAsiPjAiJZMTD-2WzsKsET75PcLCDdGNwgnZfg3VkcIIjKIV3YWt1MgM",
|
||||
"store-01.gc-us-central1-a.shards.test": "enr:-QEiuEBW0x-NQAwfFIgwrwtMRbPpWYRbWzsQ6nMDQK5K8vT8uAph5mlAw-TaeIxw9K2Vc0QuEYzf8-MnOESVyQ-C6ywcAYJpZIJ2NIJpcIQiqsAnim11bHRpYWRkcnO4dAA3NjJzdG9yZS0wMS5nYy11cy1jZW50cmFsMS1hLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAZ2XwA5NjJzdG9yZS0wMS5nYy11cy1jZW50cmFsMS1hLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAYBu94DgnJziwAQBAAgAEAAgAEAiXNlY3AyNTZrMaEDf2gcTbDga3Hgy8gu-bwRUbs7_7Vn2hxudCXPQ0M7cJCDdGNwgnZfg3VkcIIjKIV3YWt1MgM",
|
||||
"store-02.gc-us-central1-a.shards.test": "enr:-QEiuEDjbS1EbRmNA7Gl1F3z_NsTHloyfZp4h0tm5cQmTvo5SlFGIBPPpmB6oycGnVGCHFPmqV_XbJJRO5pObWa5dOHgAYJpZIJ2NIJpcIQiqpoCim11bHRpYWRkcnO4dAA3NjJzdG9yZS0wMi5nYy11cy1jZW50cmFsMS1hLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAZ2XwA5NjJzdG9yZS0wMi5nYy11cy1jZW50cmFsMS1hLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAYBu94DgnJziwAQBAAgAEAAgAEAiXNlY3AyNTZrMaEDWxINW5DCQgYg-U43t2f9dUfpHfZrp2RdL-IomGWtY4KDdGNwgnZfg3VkcIIjKIV3YWt1MgM",
|
||||
"store-01.ac-cn-hongkong-c.shards.test": "enr:-QEiuEDkMIJT5pVMmtzHD5RATLyU0kAG0tKcC3AE3BQe0O6S9R6OsA7PEVaaUg52fA4_I2pwjoW2GroE6uR9a-7Vdfy-AYJpZIJ2NIJpcIQI2kpJim11bHRpYWRkcnO4dAA3NjJzdG9yZS0wMS5hYy1jbi1ob25na29uZy1jLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAZ2XwA5NjJzdG9yZS0wMS5hYy1jbi1ob25na29uZy1jLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAYBu94DgnJziwAQBAAgAEAAgAEAiXNlY3AyNTZrMaECZtdI3Wq88fYXHYUShn7AMktB3OaVo98ock70-RSMChiDdGNwgnZfg3VkcIIjKIV3YWt1MgM",
|
||||
"store-02.ac-cn-hongkong-c.shards.test": "enr:-QEiuEBzOdkswwOBobEe-nUvdtALMP8sjV9b_v9rQS4E0QOv2TVdrXRKKrBzOgk8TIXFtdry3RrowN5pTH7vBWl8TPKUAYJpZIJ2NIJpcIQI2nnoim11bHRpYWRkcnO4dAA3NjJzdG9yZS0wMi5hYy1jbi1ob25na29uZy1jLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAZ2XwA5NjJzdG9yZS0wMi5hYy1jbi1ob25na29uZy1jLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAYBu94DgnJziwAQBAAgAEAAgAEAiXNlY3AyNTZrMaECzJ3LruqSdw0Ec2FKpAdT22kcWVyBiYvMGim2wRWzkjSDdGNwgnZfg3VkcIIjKIV3YWt1MgM"
|
||||
"store-01.do-ams3.shards.test": "enr:-QESuEBxlk35-NNVnppRQaNSB3fR4M7J7xK3NUYer3z-L9j0uTpg9MatcSEHLUFkf4lt5qxacyBxD6G1w5elhdSgeKo4AYJpZIJ2NIJpcISf3_Jeim11bHRpYWRkcnO4YgAuNilzdG9yZS0wMS5kby1hbXMzLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAZ2XwAwNilzdG9yZS0wMS5kby1hbXMzLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAYBu94DgnJzjQAQBQABACAAQACAAQCJc2VjcDI1NmsxoQLfoaQH3oSYW59yxEBfeAZbltmUnC4BzYkHqer2VQMTyoN0Y3CCdl-DdWRwgiMohXdha3UyAw",
|
||||
"store-02.do-ams3.shards.test": "enr:-QESuEC_CCKHt-bfmNcpFhY4_RyzEPfb9qXDzc7-2mo0oTanx2pMNLVkGYQuAWzgS14nGqecJ4qNGnJf0iW6xmk7bvgSAYJpZIJ2NIJpcISf3_Kaim11bHRpYWRkcnO4YgAuNilzdG9yZS0wMi5kby1hbXMzLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAZ2XwAwNilzdG9yZS0wMi5kby1hbXMzLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAYBu94DgnJzjQAQBQABACAAQACAAQCJc2VjcDI1NmsxoQLSM62HmqGpZ382YM4CyI-MCIlkxMP7ZbOwqwRPvk9wsIN0Y3CCdl-DdWRwgiMohXdha3UyAw",
|
||||
"store-01.gc-us-central1-a.shards.test": "enr:-QEkuEDdeEvvLl4imez1cjafogCr4Y9TC739Io6U7J78VG6ong2UtkKNADtupsHKArUcc13jCZI_O4z6XnLz6zYLpDn-AYJpZIJ2NIJpcIQiqsAnim11bHRpYWRkcnO4dAA3NjJzdG9yZS0wMS5nYy11cy1jZW50cmFsMS1hLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAZ2XwA5NjJzdG9yZS0wMS5nYy11cy1jZW50cmFsMS1hLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAYBu94DgnJzjQAQBQABACAAQACAAQCJc2VjcDI1NmsxoQN_aBxNsOBrceDLyC75vBFRuzv_tWfaHG50Jc9DQztwkIN0Y3CCdl-DdWRwgiMohXdha3UyAw",
|
||||
"store-02.gc-us-central1-a.shards.test": "enr:-QEkuEA98rxs-uF2s5E1qVW-yg7p7y6JZ5sFCDmeQOvaeQekLwbEO_O68XfOFCmuJsWwmA00HtnnbkAfFaYy0ZhsHWbKAYJpZIJ2NIJpcIQiqpoCim11bHRpYWRkcnO4dAA3NjJzdG9yZS0wMi5nYy11cy1jZW50cmFsMS1hLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAZ2XwA5NjJzdG9yZS0wMi5nYy11cy1jZW50cmFsMS1hLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAYBu94DgnJzjQAQBQABACAAQACAAQCJc2VjcDI1NmsxoQNbEg1bkMJCBiD5Tje3Z_11R-kd9munZF0v4iiYZa1jgoN0Y3CCdl-DdWRwgiMohXdha3UyAw",
|
||||
"store-01.ac-cn-hongkong-c.shards.test": "enr:-QEkuEAIYrY2284THz1f4FkFEr7PIHw5GrBLEd_4UZWMh1aCGUzePYMf-YIaw_-bEqfqRK_1p7RJVgLupl8EaENIUXG3AYJpZIJ2NIJpcIQI2kpJim11bHRpYWRkcnO4dAA3NjJzdG9yZS0wMS5hYy1jbi1ob25na29uZy1jLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAZ2XwA5NjJzdG9yZS0wMS5hYy1jbi1ob25na29uZy1jLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAYBu94DgnJzjQAQBQABACAAQACAAQCJc2VjcDI1NmsxoQJm10jdarzx9hcdhRKGfsAyS0Hc5pWj3yhyTvT5FIwKGIN0Y3CCdl-DdWRwgiMohXdha3UyAw",
|
||||
"store-02.ac-cn-hongkong-c.shards.test": "enr:-QEkuECDx1C82BBcVM4UAFnTNTRe8zwX6vIy3iYU3qOyJJZGuDhceqbwVwW_Nc5j6tAUgnotg_jiZiNXoj_tJrFildM4AYJpZIJ2NIJpcIQI2nnoim11bHRpYWRkcnO4dAA3NjJzdG9yZS0wMi5hYy1jbi1ob25na29uZy1jLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAZ2XwA5NjJzdG9yZS0wMi5hYy1jbi1ob25na29uZy1jLnNoYXJkcy50ZXN0LnN0YXR1c2ltLm5ldAYBu94DgnJzjQAQBQABACAAQACAAQCJc2VjcDI1NmsxoQLMncuu6pJ3DQRzYUqkB1PbaRxZXIGJi8waKbbBFbOSNIN0Y3CCdl-DdWRwgiMohXdha3UyAw"
|
||||
},
|
||||
"wss/p2p/waku/store": {
|
||||
"store-01.do-ams3.shards.test": "/dns4/store-01.do-ams3.shards.test.statusim.net/tcp/443/wss/p2p/16Uiu2HAmAUdrQ3uwzuE4Gy4D56hX6uLKEeerJAnhKEHZ3DxF1EfT",
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.9 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 4.3 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 2.5 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 3.8 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 3.0 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 4.5 KiB |
@@ -11,9 +11,11 @@
|
||||
[legacy.status-im.utils.random :as random]
|
||||
[native-module.core :as native-module]
|
||||
[re-frame.core :as re-frame]
|
||||
[react-native.core :as react]
|
||||
[react-native.platform :as platform]
|
||||
[status-im.common.json-rpc.events :as json-rpc]
|
||||
[status-im.common.universal-links :as links]
|
||||
[status-im.config :as config]
|
||||
[status-im.constants :as constants]
|
||||
[status-im.contexts.chat.events :as chat.events]
|
||||
[status-im.navigation.events :as navigation]
|
||||
@@ -302,16 +304,18 @@
|
||||
:history [normalized-url]}]
|
||||
(if (links/universal-link? normalized-url)
|
||||
{:dispatch [:universal-links/handle-url normalized-url]}
|
||||
(rf/merge cofx
|
||||
{:db (assoc db
|
||||
:browser/options
|
||||
{:browser-id (:browser-id browser)}
|
||||
:browser/screen-id :browser)}
|
||||
(navigation/pop-to-root :shell-stack)
|
||||
(chat.events/close-chat)
|
||||
(navigation/change-tab :browser-stack)
|
||||
(update-browser browser)
|
||||
(resolve-url nil)))))
|
||||
(if config/show-not-implemented-features?
|
||||
(rf/merge cofx
|
||||
{:db (assoc db
|
||||
:browser/options
|
||||
{:browser-id (:browser-id browser)}
|
||||
:browser/screen-id :browser)}
|
||||
(navigation/pop-to-root :shell-stack)
|
||||
(chat.events/close-chat)
|
||||
(navigation/change-tab :browser-stack)
|
||||
(update-browser browser)
|
||||
(resolve-url nil))
|
||||
(.openURL ^js react/linking (url/normalize-url url))))))
|
||||
|
||||
(rf/defn open-existing-browser
|
||||
"Opens an existing browser with it's history"
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
(ns legacy.status-im.browser.core-test
|
||||
(:require
|
||||
[cljs.test :refer-macros [deftest is testing]]
|
||||
[legacy.status-im.browser.core :as browser]
|
||||
[utils.i18n :as i18n]
|
||||
[utils.url :as url]))
|
||||
|
||||
(defn has-wrong-properties?
|
||||
@@ -21,101 +18,103 @@
|
||||
(some #(when (= (url/normalize-and-decode-url dapp-url) (first (:history %))) (:browser-id %))
|
||||
(vals (get-in result [:db :browser/browsers]))))
|
||||
|
||||
(deftest browser-test
|
||||
(let [dapp1-url "cryptokitties.co"
|
||||
dapp2-url "http://test2.com"]
|
||||
#_(deftest browser-test
|
||||
(let [dapp1-url "cryptokitties.co"
|
||||
dapp2-url "http://test2.com"]
|
||||
|
||||
(testing "user opens a dapp"
|
||||
(let [result-open (browser/open-url {:db {} :now 1} dapp1-url)
|
||||
dapp1-id (get-dapp-id result-open dapp1-url)]
|
||||
(is (= dapp1-id (get-in result-open [:db :browser/options :browser-id]))
|
||||
"browser-id should be dapp1-url")
|
||||
(is (not (has-wrong-properties? result-open
|
||||
dapp1-id
|
||||
{:browser-id dapp1-id
|
||||
:history-index 0
|
||||
:history ["https://cryptokitties.co"]
|
||||
:dapp? false
|
||||
:name (i18n/label :t/browser)}))
|
||||
"some properties of the browser are not correct")
|
||||
(testing "user opens a dapp"
|
||||
(let [result-open (browser/open-url {:db {} :now 1} dapp1-url)
|
||||
dapp1-id (get-dapp-id result-open dapp1-url)]
|
||||
(is (= dapp1-id (get-in result-open [:db :browser/options :browser-id]))
|
||||
"browser-id should be dapp1-url")
|
||||
(is (not (has-wrong-properties? result-open
|
||||
dapp1-id
|
||||
{:browser-id dapp1-id
|
||||
:history-index 0
|
||||
:history ["https://cryptokitties.co"]
|
||||
:dapp? false
|
||||
:name (i18n/label :t/browser)}))
|
||||
"some properties of the browser are not correct")
|
||||
|
||||
(testing "then a second dapp"
|
||||
(let [result-open-2 (browser/open-url {:db (:db result-open)
|
||||
:now 2}
|
||||
dapp2-url)
|
||||
dapp2-id (get-dapp-id result-open-2 dapp2-url)]
|
||||
(is (= dapp2-id (get-in result-open-2 [:db :browser/options :browser-id]))
|
||||
"browser-id should be dapp2 host")
|
||||
(is (not (has-wrong-properties? result-open-2
|
||||
dapp2-id
|
||||
{:browser-id dapp2-id
|
||||
:history-index 0
|
||||
:history ["http://test2.com"]
|
||||
:dapp? false}))
|
||||
"some properties of the browser are not correct")
|
||||
(testing "then a second dapp"
|
||||
(let [result-open-2 (browser/open-url {:db (:db result-open)
|
||||
:now 2}
|
||||
dapp2-url)
|
||||
dapp2-id (get-dapp-id result-open-2 dapp2-url)]
|
||||
(is (= dapp2-id (get-in result-open-2 [:db :browser/options :browser-id]))
|
||||
"browser-id should be dapp2 host")
|
||||
(is (not (has-wrong-properties? result-open-2
|
||||
dapp2-id
|
||||
{:browser-id dapp2-id
|
||||
:history-index 0
|
||||
:history ["http://test2.com"]
|
||||
:dapp? false}))
|
||||
"some properties of the browser are not correct")
|
||||
|
||||
(testing "then removes the second dapp"
|
||||
(let [result-remove-2 (browser/remove-browser {:db (:db result-open-2)} dapp2-id)]
|
||||
(is (= #{dapp1-id}
|
||||
(set (keys (get-in result-remove-2 [:db :browser/browsers]))))
|
||||
"the second dapp shouldn't be in the browser list anymore")))))
|
||||
(testing "then removes the second dapp"
|
||||
(let [result-remove-2 (browser/remove-browser {:db (:db result-open-2)} dapp2-id)]
|
||||
(is (= #{dapp1-id}
|
||||
(set (keys (get-in result-remove-2 [:db :browser/browsers]))))
|
||||
"the second dapp shouldn't be in the browser list anymore")))))
|
||||
|
||||
(testing "then opens the dapp again"
|
||||
(let [result-open-existing (browser/open-existing-browser {:db (:db result-open)
|
||||
:now 2}
|
||||
dapp1-id)
|
||||
dapp1-url2 (str "https://" dapp1-url "/nav2")]
|
||||
(is (not (has-wrong-properties? result-open-existing
|
||||
dapp1-id
|
||||
{:browser-id dapp1-id
|
||||
:history-index 0
|
||||
:history ["https://cryptokitties.co"]
|
||||
:dapp? false
|
||||
:name (i18n/label :t/browser)}))
|
||||
"some properties of the browser are not correct")
|
||||
(is (nil? (browser/navigate-to-next-page result-open-existing))
|
||||
"nothing should happen if user tries to navigate to next page")
|
||||
(is (nil? (browser/navigate-to-previous-page result-open-existing))
|
||||
"nothing should happen if user tries to navigate to previous page")
|
||||
(testing "then opens the dapp again"
|
||||
(let [result-open-existing (browser/open-existing-browser {:db (:db result-open)
|
||||
:now 2}
|
||||
dapp1-id)
|
||||
dapp1-url2 (str "https://" dapp1-url "/nav2")]
|
||||
(is (not (has-wrong-properties? result-open-existing
|
||||
dapp1-id
|
||||
{:browser-id dapp1-id
|
||||
:history-index 0
|
||||
:history ["https://cryptokitties.co"]
|
||||
:dapp? false
|
||||
:name (i18n/label :t/browser)}))
|
||||
"some properties of the browser are not correct")
|
||||
(is (nil? (browser/navigate-to-next-page result-open-existing))
|
||||
"nothing should happen if user tries to navigate to next page")
|
||||
(is (nil? (browser/navigate-to-previous-page result-open-existing))
|
||||
"nothing should happen if user tries to navigate to previous page")
|
||||
|
||||
(testing "then navigates to a new url in the dapp"
|
||||
(let [result-navigate (browser/navigation-state-changed
|
||||
{:db (:db result-open-existing)
|
||||
:now 4}
|
||||
(clj->js {"url" dapp1-url2
|
||||
"loading" false})
|
||||
false)]
|
||||
(is (not (has-wrong-properties? result-navigate
|
||||
dapp1-id
|
||||
{:browser-id dapp1-id
|
||||
:history-index 1
|
||||
:history ["https://cryptokitties.co" dapp1-url2]
|
||||
:dapp? false
|
||||
:name (i18n/label :t/browser)}))
|
||||
"some properties of the browser are not correct")
|
||||
|
||||
(testing "then navigates to previous page"
|
||||
(let [result-previous (browser/navigate-to-previous-page {:db (:db result-navigate)
|
||||
:now 5})]
|
||||
(is
|
||||
(not (has-wrong-properties? result-previous
|
||||
dapp1-id
|
||||
{:browser-id dapp1-id
|
||||
:history-index 0
|
||||
:history ["https://cryptokitties.co" dapp1-url2]
|
||||
:dapp? false
|
||||
:name (i18n/label :t/browser)}))
|
||||
"some properties of the browser are not correct")
|
||||
|
||||
(testing "then navigates to next page")
|
||||
(let [result-next (browser/navigate-to-next-page {:db (:db result-previous)
|
||||
:now 6})]
|
||||
(is (not
|
||||
(has-wrong-properties? result-next
|
||||
(testing "then navigates to a new url in the dapp"
|
||||
(let [result-navigate (browser/navigation-state-changed
|
||||
{:db (:db result-open-existing)
|
||||
:now 4}
|
||||
(clj->js {"url" dapp1-url2
|
||||
"loading" false})
|
||||
false)]
|
||||
(is (not (has-wrong-properties? result-navigate
|
||||
dapp1-id
|
||||
{:browser-id dapp1-id
|
||||
:history-index 1
|
||||
:history ["https://cryptokitties.co" dapp1-url2]
|
||||
:dapp? false
|
||||
:name (i18n/label :t/browser)}))
|
||||
"some properties of the browser are not correct"))))))))))))
|
||||
"some properties of the browser are not correct")
|
||||
|
||||
(testing "then navigates to previous page"
|
||||
(let [result-previous (browser/navigate-to-previous-page {:db (:db result-navigate)
|
||||
:now 5})]
|
||||
(is
|
||||
(not (has-wrong-properties? result-previous
|
||||
dapp1-id
|
||||
{:browser-id dapp1-id
|
||||
:history-index 0
|
||||
:history ["https://cryptokitties.co"
|
||||
dapp1-url2]
|
||||
:dapp? false
|
||||
:name (i18n/label :t/browser)}))
|
||||
"some properties of the browser are not correct")
|
||||
|
||||
(testing "then navigates to next page")
|
||||
(let [result-next (browser/navigate-to-next-page {:db (:db result-previous)
|
||||
:now 6})]
|
||||
(is (not
|
||||
(has-wrong-properties? result-next
|
||||
dapp1-id
|
||||
{:browser-id dapp1-id
|
||||
:history-index 1
|
||||
:history ["https://cryptokitties.co"
|
||||
dapp1-url2]
|
||||
:dapp? false
|
||||
:name (i18n/label :t/browser)}))
|
||||
"some properties of the browser are not correct"))))))))))))
|
||||
|
||||
@@ -1,96 +1,90 @@
|
||||
(ns legacy.status-im.browser.permissions-test
|
||||
(:require
|
||||
[cljs.test :refer-macros [deftest is testing]]
|
||||
[legacy.status-im.browser.core :as browser]
|
||||
[legacy.status-im.browser.core-test :as core.tests]
|
||||
[legacy.status-im.browser.permissions :as permissions]
|
||||
[legacy.status-im.utils.deprecated-types :as types]))
|
||||
(ns legacy.status-im.browser.permissions-test)
|
||||
|
||||
(deftest permissions-test
|
||||
(let [dapp-name "test.com"
|
||||
dapp-name2 "test2.org"
|
||||
cofx {:db (assoc-in (:db (browser/open-url {:db {}} dapp-name))
|
||||
[:profile/profile :public-key]
|
||||
"public-key")}
|
||||
dapp-id (core.tests/get-dapp-id cofx dapp-name)]
|
||||
(testing "dapps permissions are initialized"
|
||||
(is (zero? (count (get-in cofx [:db :dapps/permissions]))))
|
||||
(is (= dapp-id (get-in cofx [:db :browser/options :browser-id]))))
|
||||
#_(deftest permissions-test
|
||||
(let [dapp-name "test.com"
|
||||
dapp-name2 "test2.org"
|
||||
cofx {:db (assoc-in (:db (browser/open-url {:db {}} dapp-name))
|
||||
[:profile/profile :public-key]
|
||||
"public-key")}
|
||||
dapp-id (core.tests/get-dapp-id cofx dapp-name)]
|
||||
(testing "dapps permissions are initialized"
|
||||
(is (zero? (count (get-in cofx [:db :dapps/permissions]))))
|
||||
(is (= dapp-id (get-in cofx [:db :browser/options :browser-id]))))
|
||||
|
||||
(testing "receiving an unsupported permission"
|
||||
(let [result-ask (browser/process-bridge-message cofx
|
||||
(types/clj->json
|
||||
{:type "api-request"
|
||||
:host dapp-name
|
||||
:messageId 0
|
||||
:permission "FAKE_PERMISSION"}))]
|
||||
(is (not (get-in result-ask [:browser/send-to-bridge :isAllowed])))))
|
||||
(testing "receiving an unsupported permission"
|
||||
(let [result-ask (browser/process-bridge-message cofx
|
||||
(types/clj->json
|
||||
{:type "api-request"
|
||||
:host dapp-name
|
||||
:messageId 0
|
||||
:permission "FAKE_PERMISSION"}))]
|
||||
(is (not (get-in result-ask [:browser/send-to-bridge :isAllowed])))))
|
||||
|
||||
(testing "receiving a supported permission"
|
||||
(let [result-ask (browser/process-bridge-message cofx
|
||||
(types/clj->json {:type "api-request"
|
||||
(testing "receiving a supported permission"
|
||||
(let [result-ask (browser/process-bridge-message cofx
|
||||
(types/clj->json {:type "api-request"
|
||||
:host dapp-name
|
||||
:messageId 1
|
||||
:permission "contact-code"}))]
|
||||
(is (= (get-in result-ask [:db :browser/options :show-permission])
|
||||
{:requested-permission "contact-code"
|
||||
:dapp-name "test.com"
|
||||
:message-id 1
|
||||
:yield-control? nil}))
|
||||
(is (zero? (count (get-in result-ask [:db :dapps/permissions]))))
|
||||
|
||||
(testing "then user accepts the supported permission"
|
||||
(let [accept-result (permissions/allow-permission {:db (:db result-ask)})]
|
||||
(is (= (get accept-result :browser/send-to-bridge)
|
||||
{:type "api-response"
|
||||
:messageId 1
|
||||
:isAllowed true
|
||||
:data "public-key"
|
||||
:permission "contact-code"})
|
||||
"the data should have been sent to the bridge")
|
||||
(is (= (get-in accept-result [:db :dapps/permissions])
|
||||
{"test.com" {:dapp "test.com" :permissions ["contact-code"]}})
|
||||
"the dapp should now have CONTACT_CODE permission")
|
||||
|
||||
(testing "then dapp asks for permission again"
|
||||
(let [result-ask-again (browser/process-bridge-message {:db (:db accept-result)}
|
||||
(types/clj->json
|
||||
{:type "api-request"
|
||||
:host dapp-name
|
||||
:messageId 1
|
||||
:messageId 2
|
||||
:permission "contact-code"}))]
|
||||
(is (= (get-in result-ask [:db :browser/options :show-permission])
|
||||
{:requested-permission "contact-code"
|
||||
:dapp-name "test.com"
|
||||
:message-id 1
|
||||
:yield-control? nil}))
|
||||
(is (zero? (count (get-in result-ask [:db :dapps/permissions]))))
|
||||
(is (= (get result-ask-again :browser/send-to-bridge)
|
||||
{:type "api-response"
|
||||
:isAllowed true
|
||||
:messageId 2
|
||||
:data "public-key"
|
||||
:permission "contact-code"})
|
||||
"the response should be immediatly sent to the bridge")))
|
||||
|
||||
(testing "then user accepts the supported permission"
|
||||
(let [accept-result (permissions/allow-permission {:db (:db result-ask)})]
|
||||
(is (= (get accept-result :browser/send-to-bridge)
|
||||
{:type "api-response"
|
||||
:messageId 1
|
||||
:isAllowed true
|
||||
:data "public-key"
|
||||
:permission "contact-code"})
|
||||
"the data should have been sent to the bridge")
|
||||
(is (= (get-in accept-result [:db :dapps/permissions])
|
||||
{"test.com" {:dapp "test.com" :permissions ["contact-code"]}})
|
||||
"the dapp should now have CONTACT_CODE permission")
|
||||
(testing "then user switch to another dapp that asks for permissions"
|
||||
(let [new-dapp (browser/open-url {:db (:db accept-result)} dapp-name2)
|
||||
result-ask2 (browser/process-bridge-message {:db (:db new-dapp)}
|
||||
(types/clj->json
|
||||
{:type "api-request"
|
||||
:host dapp-name2
|
||||
:messageId 3
|
||||
:permission "contact-code"}))]
|
||||
(is (= (get-in result-ask2 [:db :dapps/permissions])
|
||||
{"test.com" {:dapp "test.com" :permissions ["contact-code"]}})
|
||||
"there should only be permissions for dapp-name at that point")
|
||||
(is (nil? (get result-ask2 :browser/send-to-bridge))
|
||||
"no message should be sent to the bridge")
|
||||
|
||||
(testing "then dapp asks for permission again"
|
||||
(let [result-ask-again (browser/process-bridge-message {:db (:db accept-result)}
|
||||
(types/clj->json
|
||||
{:type "api-request"
|
||||
:host dapp-name
|
||||
:messageId 2
|
||||
:permission "contact-code"}))]
|
||||
(is (= (get result-ask-again :browser/send-to-bridge)
|
||||
{:type "api-response"
|
||||
:isAllowed true
|
||||
:messageId 2
|
||||
:data "public-key"
|
||||
:permission "contact-code"})
|
||||
"the response should be immediatly sent to the bridge")))
|
||||
|
||||
(testing "then user switch to another dapp that asks for permissions"
|
||||
(let [new-dapp (browser/open-url {:db (:db accept-result)} dapp-name2)
|
||||
result-ask2 (browser/process-bridge-message {:db (:db new-dapp)}
|
||||
(types/clj->json
|
||||
{:type "api-request"
|
||||
:host dapp-name2
|
||||
:messageId 3
|
||||
:permission "contact-code"}))]
|
||||
(is (= (get-in result-ask2 [:db :dapps/permissions])
|
||||
{"test.com" {:dapp "test.com" :permissions ["contact-code"]}})
|
||||
"there should only be permissions for dapp-name at that point")
|
||||
(is (nil? (get result-ask2 :browser/send-to-bridge))
|
||||
"no message should be sent to the bridge")
|
||||
|
||||
(testing "then user accepts permission for dapp-name2"
|
||||
(let [accept-result2 (permissions/allow-permission {:db (:db result-ask2)})]
|
||||
(is (= (get-in accept-result2 [:db :dapps/permissions])
|
||||
{"test.com" {:dapp "test.com" :permissions ["contact-code"]}
|
||||
"test2.org" {:dapp "test2.org" :permissions ["contact-code"]}})
|
||||
"there should be permissions for both dapps now")
|
||||
(is (= (get accept-result2 :browser/send-to-bridge)
|
||||
{:type "api-response"
|
||||
:isAllowed true
|
||||
:messageId 3
|
||||
:data "public-key"
|
||||
:permission "contact-code"})
|
||||
"the response should be sent to the bridge")))))))))))
|
||||
(testing "then user accepts permission for dapp-name2"
|
||||
(let [accept-result2 (permissions/allow-permission {:db (:db result-ask2)})]
|
||||
(is (= (get-in accept-result2 [:db :dapps/permissions])
|
||||
{"test.com" {:dapp "test.com" :permissions ["contact-code"]}
|
||||
"test2.org" {:dapp "test2.org" :permissions ["contact-code"]}})
|
||||
"there should be permissions for both dapps now")
|
||||
(is (= (get accept-result2 :browser/send-to-bridge)
|
||||
{:type "api-response"
|
||||
:isAllowed true
|
||||
:messageId 3
|
||||
:data "public-key"
|
||||
:permission "contact-code"})
|
||||
"the response should be sent to the bridge")))))))))))
|
||||
|
||||
@@ -9,8 +9,7 @@
|
||||
(testing "it returns the default fleets"
|
||||
(is (=
|
||||
#{:eth.prod
|
||||
:eth.staging
|
||||
:eth.test}
|
||||
:eth.staging}
|
||||
(into #{}
|
||||
(keys (node/fleets {})))))))
|
||||
(testing "passing a custom fleet"
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
[legacy.status-im.ui.components.react :as react]
|
||||
[re-frame.core :as re-frame]
|
||||
[react-native.platform :as platform]
|
||||
[status-im.config :as config]
|
||||
[utils.i18n :as i18n]
|
||||
[utils.url :as url]))
|
||||
|
||||
@@ -27,10 +28,13 @@
|
||||
(defn browse
|
||||
[link]
|
||||
(show {:title (i18n/label :t/browsing-title)
|
||||
:options [{:label (i18n/label :t/browsing-open-in-status)
|
||||
:action #(re-frame/dispatch [:browser.ui/open-url link])}
|
||||
{:label (i18n/label (platform-web-browser))
|
||||
:action #(.openURL ^js react/linking (url/normalize-url link))}]
|
||||
:options (if config/show-not-implemented-features?
|
||||
[{:label (i18n/label :t/browsing-open-in-status)
|
||||
:action #(re-frame/dispatch [:browser.ui/open-url link])}
|
||||
{:label (i18n/label (platform-web-browser))
|
||||
:action #(.openURL ^js react/linking (url/normalize-url link))}]
|
||||
[{:label (i18n/label (platform-web-browser))
|
||||
:action #(.openURL ^js react/linking (url/normalize-url link))}])
|
||||
:cancel-text (i18n/label :t/browsing-cancel)}))
|
||||
|
||||
(defn browse-in-web-browser
|
||||
|
||||
@@ -601,3 +601,11 @@
|
||||
(.createAccountFromMnemonicAndDeriveAccountsForPaths ^js (account-manager)
|
||||
(types/clj->json mnemonic)
|
||||
#(callback (types/json->clj %))))
|
||||
|
||||
(defn get-connection-string-for-exporting-keypairs-keystores
|
||||
"Generates connection string form status-go for the purpose of exporting keypairs and keystores on sender side"
|
||||
[config-json callback]
|
||||
(log/info "[native-module] Fetching Export Keypairs Connection String"
|
||||
{:fn :get-connection-string-for-exporting-keypairs-keystores
|
||||
:config-json config-json})
|
||||
(.getConnectionStringForExportingKeypairsKeystores ^js (network) config-json callback))
|
||||
|
||||
@@ -10,12 +10,13 @@
|
||||
|
||||
:image - collection image
|
||||
:theme - keyword -> :light/:dark"
|
||||
[{:keys [image size on-load-end on-error] :or {size :size-24}}]
|
||||
[{:keys [image size on-load-start on-load-end on-error] :or {size :size-24}}]
|
||||
(let [theme (quo.theme/use-theme)]
|
||||
[rn/view {:style (style/collection-avatar-container theme size)}
|
||||
[fast-image/fast-image
|
||||
{:accessibility-label :collection-avatar
|
||||
:source image
|
||||
:on-load-start on-load-start
|
||||
:on-load-end on-load-end
|
||||
:on-error on-error
|
||||
:style (style/collection-avatar size)}]]))
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
(ns quo.components.avatars.community-avatar.component-spec
|
||||
(:require [quo.components.avatars.community-avatar.view :as community-avatar]
|
||||
[test-helpers.component :as h]))
|
||||
|
||||
(h/describe "Avatars: Community Avatar"
|
||||
(h/test "should render correctly"
|
||||
(h/render-with-theme-provider
|
||||
[community-avatar/view {:image "mock-image"}])
|
||||
(h/is-truthy (h/get-by-label-text :community-avatar))))
|
||||
@@ -0,0 +1,12 @@
|
||||
(ns quo.components.avatars.community-avatar.style)
|
||||
|
||||
(def ^:private sizes
|
||||
{:size-32 32
|
||||
:size-24 24})
|
||||
|
||||
(defn image
|
||||
[size]
|
||||
(let [size-val (sizes size)]
|
||||
{:border-radius (/ size-val 2)
|
||||
:width size-val
|
||||
:height size-val}))
|
||||
@@ -0,0 +1,23 @@
|
||||
(ns quo.components.avatars.community-avatar.view
|
||||
(:require [quo.components.avatars.community-avatar.style :as style]
|
||||
[react-native.core :as rn]
|
||||
[schema.core :as schema]))
|
||||
|
||||
(def ?schema
|
||||
[:=>
|
||||
[:catn
|
||||
[:props
|
||||
[:map {:closed true}
|
||||
[:size {:optional true} [:maybe [:enum :size-32 :size-24]]]
|
||||
[:image :schema.common/image-source]
|
||||
[:container-style {:optional true} [:maybe :map]]]]]
|
||||
:any])
|
||||
|
||||
(defn- view-internal
|
||||
[{:keys [size image container-style]}]
|
||||
[rn/image
|
||||
{:source image
|
||||
:accessibility-label :community-avatar
|
||||
:style (merge (style/image size) container-style)}])
|
||||
|
||||
(def view (schema/instrument #'view-internal ?schema))
|
||||
@@ -0,0 +1,14 @@
|
||||
(ns quo.components.avatars.dapp-avatar.component-spec
|
||||
(:require [quo.components.avatars.dapp-avatar.view :as dapp-avatar]
|
||||
[test-helpers.component :as h]))
|
||||
|
||||
(h/describe "Avatars: dApp Avatar"
|
||||
(h/test "should render correctly without context"
|
||||
(h/render-with-theme-provider
|
||||
[dapp-avatar/view {:image "mock-image"}])
|
||||
(h/is-truthy (h/get-by-label-text :dapp-avatar)))
|
||||
|
||||
(h/test "should render correctly with context"
|
||||
(h/render-with-theme-provider
|
||||
[dapp-avatar/view {:image "mock-image" :network-image "mock-image" :context? true}])
|
||||
(h/is-truthy (h/get-by-label-text :dapp-avatar))))
|
||||
@@ -0,0 +1,23 @@
|
||||
(ns quo.components.avatars.dapp-avatar.style)
|
||||
|
||||
(def ^:const size 32)
|
||||
|
||||
(def container
|
||||
{:height size
|
||||
:width size})
|
||||
|
||||
(def hole-view
|
||||
{:width size
|
||||
:height size})
|
||||
|
||||
(def context
|
||||
{:width 16
|
||||
:height 16
|
||||
:border-radius 8
|
||||
:position :absolute
|
||||
:right -4
|
||||
:bottom -4})
|
||||
|
||||
(def image
|
||||
{:width size
|
||||
:height size})
|
||||
@@ -0,0 +1,42 @@
|
||||
(ns quo.components.avatars.dapp-avatar.view
|
||||
(:require [quo.components.avatars.dapp-avatar.style :as style]
|
||||
[react-native.core :as rn]
|
||||
[react-native.hole-view :as hole-view]
|
||||
[react-native.platform :as platform]
|
||||
[schema.core :as schema]))
|
||||
|
||||
(def ?schema
|
||||
[:=>
|
||||
[:catn
|
||||
[:props
|
||||
[:map {:closed true}
|
||||
[:context? {:optional true} [:maybe :boolean]]
|
||||
[:image :schema.common/image-source]
|
||||
[:network-image {:optional true} [:maybe :schema.common/image-source]]
|
||||
[:container-style {:optional true} [:maybe :map]]]]]
|
||||
:any])
|
||||
|
||||
(defn- view-internal
|
||||
[{:keys [context? image network-image container-style]}]
|
||||
[rn/view
|
||||
{:style (merge style/container container-style)
|
||||
:accessibility-label :dapp-avatar}
|
||||
[hole-view/hole-view
|
||||
(cond-> {:holes (if context?
|
||||
[{:x 19
|
||||
:y 19
|
||||
:width 18
|
||||
:height 18
|
||||
:borderRadius 9}]
|
||||
[])
|
||||
:style style/hole-view}
|
||||
platform/android? (assoc :key context?))
|
||||
[rn/image
|
||||
{:source image
|
||||
:style style/image}]]
|
||||
(when context?
|
||||
[rn/image
|
||||
{:source network-image
|
||||
:style style/context}])])
|
||||
|
||||
(def view (schema/instrument #'view-internal ?schema))
|
||||
@@ -0,0 +1,14 @@
|
||||
(ns quo.components.avatars.token-avatar.component-spec
|
||||
(:require [quo.components.avatars.token-avatar.view :as token-avatar]
|
||||
[test-helpers.component :as h]))
|
||||
|
||||
(h/describe "Avatars: Token Avatar"
|
||||
(h/test "should render correctly without context"
|
||||
(h/render-with-theme-provider
|
||||
[token-avatar/view {:image "mock-image"}])
|
||||
(h/is-truthy (h/get-by-label-text :token-avatar)))
|
||||
|
||||
(h/test "should render correctly with context"
|
||||
(h/render-with-theme-provider
|
||||
[token-avatar/view {:image "mock-image" :network-image "mock-image" :context? true}])
|
||||
(h/is-truthy (h/get-by-label-text :token-avatar))))
|
||||
@@ -0,0 +1,25 @@
|
||||
(ns quo.components.avatars.token-avatar.style)
|
||||
|
||||
(def ^:const size 32)
|
||||
|
||||
(def container
|
||||
{:height size
|
||||
:width size})
|
||||
|
||||
(def hole-view
|
||||
{:width size
|
||||
:height size})
|
||||
|
||||
(def context
|
||||
{:width 16
|
||||
:height 16
|
||||
:border-radius 8
|
||||
:position :absolute
|
||||
:right -4
|
||||
:bottom -4})
|
||||
|
||||
(defn image
|
||||
[type]
|
||||
{:width size
|
||||
:border-radius (if (= type :collectible) 8 0)
|
||||
:height size})
|
||||
@@ -0,0 +1,43 @@
|
||||
(ns quo.components.avatars.token-avatar.view
|
||||
(:require [quo.components.avatars.token-avatar.style :as style]
|
||||
[react-native.core :as rn]
|
||||
[react-native.hole-view :as hole-view]
|
||||
[react-native.platform :as platform]
|
||||
[schema.core :as schema]))
|
||||
|
||||
(def ?schema
|
||||
[:=>
|
||||
[:catn
|
||||
[:props
|
||||
[:map {:closed true}
|
||||
[:type {:optional true} [:enum :asset :collectible]]
|
||||
[:context? {:optional true} [:maybe :boolean]]
|
||||
[:image :schema.common/image-source]
|
||||
[:network-image {:optional true} [:maybe :schema.common/image-source]]
|
||||
[:container-style {:optional true} [:maybe :map]]]]]
|
||||
:any])
|
||||
|
||||
(defn- view-internal
|
||||
[{:keys [type context? image network-image container-style]}]
|
||||
[rn/view
|
||||
{:style (merge style/container container-style)
|
||||
:accessibility-label :token-avatar}
|
||||
[hole-view/hole-view
|
||||
(cond-> {:holes (if context?
|
||||
[{:x 19
|
||||
:y 19
|
||||
:width 18
|
||||
:height 18
|
||||
:borderRadius 9}]
|
||||
[])
|
||||
:style style/hole-view}
|
||||
platform/android? (assoc :key context?))
|
||||
[rn/image
|
||||
{:source image
|
||||
:style (style/image type)}]]
|
||||
(when context?
|
||||
[rn/image
|
||||
{:source network-image
|
||||
:style style/context}])])
|
||||
|
||||
(def view (schema/instrument #'view-internal ?schema))
|
||||
@@ -117,8 +117,7 @@
|
||||
{:size (when (#{56 24} size) :paragraph-2)
|
||||
:weight :medium
|
||||
:number-of-lines 1
|
||||
:style {:color label-color
|
||||
:opacity (when disabled? 0.3)}}
|
||||
:style {:color label-color}}
|
||||
children]
|
||||
|
||||
(vector? children)
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
(ns quo.components.buttons.swap-order-button.component-spec
|
||||
(:require [quo.components.buttons.swap-order-button.view :as swap-order-button]
|
||||
[test-helpers.component :as h]))
|
||||
|
||||
(h/describe "Buttons: Swap Order Button"
|
||||
(h/test "should render correctly"
|
||||
(h/render-with-theme-provider
|
||||
[swap-order-button/view {:on-press identity}])
|
||||
(h/is-truthy (h/get-by-label-text :swap-order-button)))
|
||||
|
||||
(h/test "should call on-press handler when pressed"
|
||||
(let [on-press (h/mock-fn)]
|
||||
(h/render-with-theme-provider
|
||||
[swap-order-button/view {:on-press on-press}])
|
||||
(h/fire-event :press (h/get-by-label-text :swap-order-button))
|
||||
(h/was-called on-press)))
|
||||
|
||||
(h/test "should not call on-press handler when button is disabled"
|
||||
(let [on-press (h/mock-fn)]
|
||||
(h/render-with-theme-provider
|
||||
[swap-order-button/view {:on-press on-press :disabled? true}])
|
||||
(h/fire-event :press (h/get-by-label-text :swap-order-button))
|
||||
(h/was-not-called on-press))))
|
||||
@@ -0,0 +1,11 @@
|
||||
(ns quo.components.buttons.swap-order-button.schema)
|
||||
|
||||
(def ?schema
|
||||
[:=>
|
||||
[:catn
|
||||
[:props
|
||||
[:map {:closed true}
|
||||
[:disabled? {:optional true} [:maybe :boolean]]
|
||||
[:on-press fn?]
|
||||
[:container-style {:optional true} [:maybe :map]]]]]
|
||||
:any])
|
||||
@@ -0,0 +1,18 @@
|
||||
(ns quo.components.buttons.swap-order-button.style
|
||||
(:require [quo.foundations.colors :as colors]))
|
||||
|
||||
(defn container
|
||||
[pressed? disabled? theme]
|
||||
{:width 32
|
||||
:height 32
|
||||
:border-radius 10
|
||||
:border-width 1
|
||||
:opacity (if disabled? 0.3 1)
|
||||
:align-items :center
|
||||
:justify-content :center
|
||||
:border-color (if pressed?
|
||||
(colors/theme-colors colors/neutral-20 colors/neutral-60 theme)
|
||||
(colors/theme-colors colors/neutral-10 colors/neutral-80 theme))
|
||||
:background-color (if pressed?
|
||||
(colors/theme-colors colors/neutral-5 colors/neutral-80 theme)
|
||||
(colors/theme-colors colors/neutral-2_5 colors/neutral-90 theme))})
|
||||
@@ -0,0 +1,28 @@
|
||||
(ns quo.components.buttons.swap-order-button.view
|
||||
(:require [quo.components.buttons.swap-order-button.schema :as swap-order-button.schema]
|
||||
[quo.components.buttons.swap-order-button.style :as style]
|
||||
[quo.components.icon :as icon]
|
||||
[quo.foundations.colors :as colors]
|
||||
quo.theme
|
||||
[react-native.core :as rn]
|
||||
[schema.core :as schema]))
|
||||
|
||||
(defn- view-internal
|
||||
[{:keys [disabled? on-press container-style]}]
|
||||
(let [theme (quo.theme/use-theme)
|
||||
[pressed? set-pressed] (rn/use-state false)
|
||||
on-press-in (rn/use-callback #(set-pressed true) [])
|
||||
on-press-out (rn/use-callback #(set-pressed false) [])]
|
||||
[rn/pressable
|
||||
{:style (merge (style/container pressed? disabled? theme)
|
||||
container-style)
|
||||
:accessibility-label :swap-order-button
|
||||
:disabled disabled?
|
||||
:on-press on-press
|
||||
:on-press-in on-press-in
|
||||
:on-press-out on-press-out}
|
||||
[icon/icon :i/arrow-down
|
||||
{:size 20
|
||||
:color (colors/theme-colors colors/neutral-100 colors/white theme)}]]))
|
||||
|
||||
(def view (schema/instrument #'view-internal swap-order-button.schema/?schema))
|
||||
@@ -6,24 +6,26 @@
|
||||
|
||||
(h/describe "Drawers: drawer-action"
|
||||
(h/test "default render"
|
||||
(h/render-with-theme-provider [drawer-action/view {}])
|
||||
(h/render-with-theme-provider [drawer-action/view {:accessibility-label :container}])
|
||||
(h/is-truthy (h/query-by-label-text :container)))
|
||||
|
||||
(h/test "on-press-in changes internal state to :pressed"
|
||||
(h/render-with-theme-provider [drawer-action/view {}])
|
||||
(h/render-with-theme-provider [drawer-action/view {:accessibility-label :container}])
|
||||
(h/fire-event :on-press-in (h/get-by-label-text :container))
|
||||
(h/wait-for #(h/has-style (h/query-by-label-text :container)
|
||||
{:backgroundColor (colors/resolve-color :blue :light 5)})))
|
||||
|
||||
(h/test "render default action with state :selected"
|
||||
(h/render-with-theme-provider [drawer-action/view {:state :selected}])
|
||||
(h/render-with-theme-provider [drawer-action/view
|
||||
{:state :selected :accessibility-label :container}])
|
||||
(h/has-style (h/query-by-label-text :container)
|
||||
{:backgroundColor (colors/resolve-color :blue :light 5)})
|
||||
(h/is-truthy (h/query-by-label-text :check-icon)))
|
||||
|
||||
(h/test "call on-press"
|
||||
(let [on-press (h/mock-fn)]
|
||||
(h/render-with-theme-provider [drawer-action/view {:on-press on-press}])
|
||||
(h/render-with-theme-provider [drawer-action/view
|
||||
{:on-press on-press :accessibility-label :container}])
|
||||
(h/fire-event :on-press (h/get-by-label-text :container))
|
||||
(h/was-called on-press)))
|
||||
|
||||
@@ -38,8 +40,9 @@
|
||||
|
||||
(h/test "render :toggle action with state :selected"
|
||||
(h/render-with-theme-provider [drawer-action/view
|
||||
{:action :toggle
|
||||
:state :selected}])
|
||||
{:accessibility-label :container
|
||||
:action :toggle
|
||||
:state :selected}])
|
||||
(h/is-truthy (h/query-by-label-text "toggle-on"))
|
||||
(h/has-style (h/query-by-label-text :container)
|
||||
{:backgroundColor :transparent}))
|
||||
@@ -51,4 +54,5 @@
|
||||
:description "Just a small desc"}])
|
||||
(h/is-truthy (h/query-by-label-text :left-icon))
|
||||
(h/is-truthy (h/query-by-text "Check contact"))
|
||||
(h/has-style (h/query-by-text "Check contact") {:color colors/neutral-100})
|
||||
(h/is-truthy (h/query-by-text "Just a small desc"))))
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
[:=>
|
||||
[:cat
|
||||
[:map {:closed true}
|
||||
[:accessibility-label {:optional true} [:maybe :keyword]]
|
||||
[:type {:optional true} [:maybe [:enum :main :danger]]]
|
||||
[:action {:optional true} [:maybe [:enum :arrow :toggle]]]
|
||||
[:icon {:optional true} [:maybe :keyword]]
|
||||
[:description {:optional true} [:maybe :string]]
|
||||
|
||||
@@ -28,6 +28,23 @@
|
||||
{:flex 1
|
||||
:margin-right 12})
|
||||
|
||||
(defn text
|
||||
[{:keys [theme blur? type]}]
|
||||
(let [base {:weight :medium}
|
||||
theme-with-blur (if blur? :blue theme)
|
||||
matcher [theme-with-blur type]
|
||||
color
|
||||
(case matcher
|
||||
([:dark :main] [:light :main]) (colors/theme-colors colors/neutral-100
|
||||
colors/white
|
||||
theme)
|
||||
[:blur :main] colors/white-70-blur
|
||||
([:dark :danger] [:light :danger]) (colors/theme-colors colors/danger-50
|
||||
colors/danger-60
|
||||
theme)
|
||||
[:blur :danger] colors/danger-60)]
|
||||
(assoc-in base [:style :color] color)))
|
||||
|
||||
(defn- neutral-color
|
||||
[theme blur?]
|
||||
(if blur?
|
||||
@@ -41,8 +58,14 @@
|
||||
:margin-top 1})
|
||||
|
||||
(defn icon-color
|
||||
[{:keys [theme blur?]}]
|
||||
(neutral-color theme blur?))
|
||||
[{:keys [theme blur? type]}]
|
||||
(let [theme-with-blur (if blur? :blue theme)
|
||||
matcher [theme-with-blur type]]
|
||||
(case matcher
|
||||
([:dark :main] [:light :main]) (colors/theme-colors colors/neutral-50 colors/neutral-40 theme)
|
||||
[:blur :main] colors/white-70-blur
|
||||
([:dark :danger] [:light :danger]) (colors/theme-colors colors/danger-50 colors/danger-60 theme)
|
||||
[:blur :danger] colors/danger-60)))
|
||||
|
||||
(defn desc
|
||||
[{:keys [theme blur?]}]
|
||||
|
||||
@@ -10,11 +10,13 @@
|
||||
[schema.core :as schema]))
|
||||
|
||||
(defn view-internal
|
||||
[{:keys [action icon description state title on-press
|
||||
customization-color blur?]
|
||||
:or {customization-color :blue
|
||||
blur? false}}]
|
||||
[{:keys [action icon description state title on-press customization-color
|
||||
blur? accessibility-label]
|
||||
action-type :type
|
||||
:or {customization-color :blue
|
||||
blur? false}}]
|
||||
(let [theme (quo.theme/use-theme)
|
||||
action-type (or action-type :main)
|
||||
[pressed? set-pressed] (rn/use-state false)
|
||||
on-press-in (rn/use-callback #(set-pressed true))
|
||||
on-press-out (rn/use-callback #(set-pressed false))]
|
||||
@@ -29,16 +31,21 @@
|
||||
:pressed? pressed?
|
||||
:description? (not-empty description)
|
||||
:blur? blur?})
|
||||
:accessibility-label :container}
|
||||
:accessibility-label accessibility-label}
|
||||
(when icon
|
||||
[icon/icon icon
|
||||
{:accessibility-label :left-icon
|
||||
:container-style (style/left-icon)
|
||||
:color (style/icon-color {:theme theme
|
||||
:type action-type
|
||||
:blur? blur?})}])
|
||||
|
||||
[rn/view {:style (style/text-container)}
|
||||
[text/text {:weight :medium}
|
||||
[rn/view
|
||||
{:style (style/text-container)}
|
||||
[text/text
|
||||
(style/text {:theme theme
|
||||
:type action-type
|
||||
:blur? blur?})
|
||||
title]
|
||||
|
||||
(when (seq description)
|
||||
@@ -61,6 +68,7 @@
|
||||
[icon/icon :i/chevron-right
|
||||
{:accessibility-label :arrow-icon
|
||||
:color (style/icon-color {:theme theme
|
||||
:type action-type
|
||||
:blur? blur?})}]
|
||||
|
||||
(= state :selected)
|
||||
|
||||
@@ -80,10 +80,10 @@
|
||||
(h/is-truthy (h/get-by-text "0x62b...0a5"))
|
||||
(h/is-truthy (h/get-by-label-text :account-avatar)))
|
||||
|
||||
(h/test "component renders in keypair type when keycard? is false"
|
||||
(h/test "component renders keypair type with default label"
|
||||
(h/render-with-theme-provider [quo/drawer-top
|
||||
{:title "Title"
|
||||
:keycard? false
|
||||
:stored nil
|
||||
:icon-avatar :i/placeholder
|
||||
:type :keypair}]
|
||||
theme)
|
||||
@@ -91,10 +91,21 @@
|
||||
(-> (h/expect (h/get-by-translation-text :t/on-device))
|
||||
(.toBeTruthy)))
|
||||
|
||||
(h/test "component renders in keypair type when keycard? is true"
|
||||
(h/test "component renders keypair type when stored on device"
|
||||
(h/render-with-theme-provider [quo/drawer-top
|
||||
{:title "Title"
|
||||
:keycard? true
|
||||
:stored :on-device
|
||||
:icon-avatar :i/placeholder
|
||||
:type :keypair}]
|
||||
theme)
|
||||
(h/is-truthy (h/get-by-text "Title"))
|
||||
(-> (h/expect (h/get-by-translation-text :t/on-device))
|
||||
(.toBeTruthy)))
|
||||
|
||||
(h/test "component renders keypair type when stored on keycard"
|
||||
(h/render-with-theme-provider [quo/drawer-top
|
||||
{:title "Title"
|
||||
:stored :on-keycard
|
||||
:icon-avatar :i/placeholder
|
||||
:type :keypair}]
|
||||
theme)
|
||||
@@ -102,6 +113,17 @@
|
||||
(-> (h/expect (h/get-by-translation-text :t/on-keycard))
|
||||
(.toBeTruthy)))
|
||||
|
||||
(h/test "component renders keypair type when considered missing"
|
||||
(h/render-with-theme-provider [quo/drawer-top
|
||||
{:title "Title"
|
||||
:stored :missing
|
||||
:icon-avatar :i/placeholder
|
||||
:type :keypair}]
|
||||
theme)
|
||||
(h/is-truthy (h/get-by-text "Title"))
|
||||
(-> (h/expect (h/get-by-translation-text :t/import-to-use-derived-accounts))
|
||||
(.toBeTruthy)))
|
||||
|
||||
(h/test "component renders in default-keypair type"
|
||||
(h/render-with-theme-provider [quo/drawer-top
|
||||
{:title "Title"
|
||||
|
||||
@@ -37,16 +37,18 @@
|
||||
nil))
|
||||
|
||||
(defn- keypair-subtitle
|
||||
[{:keys [theme blur? keycard?]}]
|
||||
[{:keys [theme blur? stored]}]
|
||||
[rn/view {:style style/row}
|
||||
[text/text
|
||||
{:size :paragraph-2
|
||||
:weight :regular
|
||||
:style (style/description theme blur?)}
|
||||
(if keycard?
|
||||
(i18n/label :t/on-keycard)
|
||||
(case stored
|
||||
:on-device (i18n/label :t/on-device)
|
||||
:on-keycard (i18n/label :t/on-keycard)
|
||||
:missing (i18n/label :t/import-to-use-derived-accounts)
|
||||
(i18n/label :t/on-device))]
|
||||
(when keycard?
|
||||
(when (= stored :on-keycard)
|
||||
[icons/icon
|
||||
:i/keycard-card
|
||||
{:color (colors/theme-colors colors/neutral-50 colors/neutral-40 theme)
|
||||
@@ -103,14 +105,14 @@
|
||||
description])
|
||||
|
||||
(defn- subtitle
|
||||
[{:keys [type theme blur? keycard? networks description community-name community-logo
|
||||
[{:keys [type theme blur? stored networks description community-name community-logo
|
||||
context-tag-type account-name emoji customization-color full-name profile-picture]}]
|
||||
(cond
|
||||
(= :keypair type)
|
||||
[keypair-subtitle
|
||||
{:theme theme
|
||||
:blur? blur?
|
||||
:keycard? keycard?}]
|
||||
{:theme theme
|
||||
:blur? blur?
|
||||
:stored stored}]
|
||||
|
||||
(= :account type)
|
||||
[account-subtitle
|
||||
@@ -195,7 +197,7 @@
|
||||
(defn view
|
||||
[{:keys [title title-icon type description blur? community-name community-logo button-icon
|
||||
account-name emoji context-tag-type button-type container-style
|
||||
on-button-press on-button-long-press profile-picture keycard? networks label full-name
|
||||
on-button-press on-button-long-press profile-picture stored networks label full-name
|
||||
button-disabled? account-avatar-emoji account-avatar-type customization-color icon-avatar]}]
|
||||
(let [theme (quo.theme/use-theme)]
|
||||
[rn/view {:style (merge style/container container-style)}
|
||||
@@ -220,7 +222,7 @@
|
||||
{:type type
|
||||
:theme theme
|
||||
:blur? blur?
|
||||
:keycard? keycard?
|
||||
:stored stored
|
||||
:networks networks
|
||||
:description description
|
||||
:community-name community-name
|
||||
|
||||
@@ -133,8 +133,7 @@
|
||||
:on-focus on-focus
|
||||
:on-blur on-blur
|
||||
:on-change-text on-change}]
|
||||
(when (or (= status :default)
|
||||
(= status :active))
|
||||
(when (empty? value)
|
||||
[rn/view
|
||||
{:style style/buttons-container
|
||||
:accessibility-label :paste-scan-buttons-container}
|
||||
@@ -155,7 +154,9 @@
|
||||
:inner-style (style/accessory-button blur? theme)
|
||||
:on-press on-scan}
|
||||
:main-icons/scan])])
|
||||
(when (= status :typing)
|
||||
(when (or (= status :typing)
|
||||
(and (= status :active)
|
||||
(not-empty value)))
|
||||
[rn/view
|
||||
{:style style/buttons-container
|
||||
:accessibility-label :clear-button-container}
|
||||
@@ -168,7 +169,10 @@
|
||||
{:style style/buttons-container
|
||||
:accessibility-label :loading-button-container}
|
||||
[loading-icon blur? theme]])
|
||||
(when (and (= status :loading) valid-ens-or-address?)
|
||||
(when (and (or (= status :loading)
|
||||
(= status :default))
|
||||
valid-ens-or-address?
|
||||
(not-empty value))
|
||||
[rn/view
|
||||
{:style style/buttons-container
|
||||
:accessibility-label :positive-button-container}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
(ns quo.components.list-items.missing-keypair.component-spec
|
||||
(:require
|
||||
[quo.components.list-items.missing-keypair.view :as missing-keypair]
|
||||
[test-helpers.component :as h]))
|
||||
|
||||
(def keypair-data
|
||||
{:accounts []
|
||||
:name "Key Pair Name"})
|
||||
|
||||
(def props
|
||||
{:keypair keypair-data
|
||||
:blur? true
|
||||
:on-options-press (fn [])})
|
||||
|
||||
(h/describe "List items: missing keypair item"
|
||||
(h/test "Test item container renders"
|
||||
(h/render-with-theme-provider [missing-keypair/view props])
|
||||
(h/is-truthy (h/get-by-label-text :missing-keypair-item)))
|
||||
(h/test "Test keypair icon renders"
|
||||
(h/render-with-theme-provider [missing-keypair/view props])
|
||||
(h/is-truthy (h/get-by-label-text :icon)))
|
||||
(h/test "Test name renders"
|
||||
(h/render-with-theme-provider [missing-keypair/view props])
|
||||
(h/is-truthy (h/get-by-label-text :name)))
|
||||
(h/test "Test preview-list renders"
|
||||
(h/render-with-theme-provider [missing-keypair/view props])
|
||||
(h/is-truthy (h/get-by-label-text :preview-list)))
|
||||
(h/test "Test options button renders"
|
||||
(h/render-with-theme-provider [missing-keypair/view props])
|
||||
(h/is-truthy (h/get-by-label-text :options-button))))
|
||||
@@ -0,0 +1,25 @@
|
||||
(ns quo.components.list-items.missing-keypair.schema)
|
||||
|
||||
(def ^:private ?base
|
||||
[:map
|
||||
[:blur? {:optional true} [:maybe :boolean]]
|
||||
[:keypair
|
||||
[:map
|
||||
[:key-uid :string]
|
||||
[:name :string]
|
||||
[:accounts
|
||||
[:sequential
|
||||
[:map {:closed true}
|
||||
[:type [:enum :default]]
|
||||
[:emoji :string]
|
||||
[:customization-color {:optional true} [:maybe :schema.common/customization-color]]]]]]]])
|
||||
|
||||
(def ^:private ?on-option-press
|
||||
[:map
|
||||
[:on-options-press {:optional true} [:maybe fn?]]])
|
||||
|
||||
(def ?schema
|
||||
[:=>
|
||||
[:cat
|
||||
[:merge ?base ?on-option-press]]
|
||||
:any])
|
||||
@@ -0,0 +1,46 @@
|
||||
(ns quo.components.list-items.missing-keypair.style
|
||||
(:require
|
||||
[quo.foundations.colors :as colors]))
|
||||
|
||||
(defn container
|
||||
[{:keys [blur? theme]}]
|
||||
{:flex-direction :row
|
||||
:align-items :center
|
||||
:flex 1
|
||||
:padding-right 12
|
||||
:padding-left 8
|
||||
:padding-vertical 8
|
||||
:border-radius 12
|
||||
:border-width (if blur? 0 1)
|
||||
:border-color (colors/theme-colors colors/neutral-10
|
||||
colors/neutral-80
|
||||
theme)
|
||||
:background-color (if blur?
|
||||
colors/white-opa-5
|
||||
(colors/theme-colors colors/neutral-2_5
|
||||
colors/neutral-80-opa-40
|
||||
theme))})
|
||||
|
||||
(defn icon-container
|
||||
[{:keys [blur? theme]}]
|
||||
{:border-radius 32
|
||||
:border-width 1
|
||||
:border-color (if blur?
|
||||
colors/white-opa-5
|
||||
(colors/theme-colors colors/neutral-20
|
||||
colors/neutral-80
|
||||
theme))})
|
||||
|
||||
(def name-container
|
||||
{:flex 1
|
||||
:padding-right 16
|
||||
:padding-left 8})
|
||||
|
||||
(def preview-list-container
|
||||
{:padding-right 16})
|
||||
|
||||
(defn options-icon-color
|
||||
[{:keys [theme blur?]}]
|
||||
(if blur?
|
||||
colors/white-opa-70
|
||||
(colors/theme-colors colors/neutral-50 colors/neutral-40 theme)))
|
||||
@@ -0,0 +1,56 @@
|
||||
(ns quo.components.list-items.missing-keypair.view
|
||||
(:require
|
||||
[quo.components.avatars.icon-avatar :as icon-avatar]
|
||||
[quo.components.icon :as icon]
|
||||
[quo.components.list-items.missing-keypair.schema :as component-schema]
|
||||
[quo.components.list-items.missing-keypair.style :as style]
|
||||
[quo.components.list-items.preview-list.view :as preview-list]
|
||||
[quo.components.markdown.text :as text]
|
||||
[quo.theme]
|
||||
[react-native.core :as rn]
|
||||
[schema.core :as schema]))
|
||||
|
||||
(defn- internal-view
|
||||
[{{:keys [accounts name]} :keypair
|
||||
:keys [keypair blur? on-options-press]}]
|
||||
(let [theme (quo.theme/use-theme)
|
||||
on-keypair-options-press (rn/use-callback
|
||||
(fn [event]
|
||||
(on-options-press event keypair))
|
||||
[keypair on-options-press])]
|
||||
[rn/view
|
||||
{:style (style/container {:theme theme
|
||||
:blur? blur?})
|
||||
:accessibility-label :missing-keypair-item}
|
||||
[rn/view
|
||||
{:style (style/icon-container {:theme theme
|
||||
:blur? blur?})
|
||||
:accessibility-label :icon}
|
||||
[icon-avatar/icon-avatar
|
||||
{:size :size-32
|
||||
:icon :i/seed
|
||||
:color :neutral
|
||||
:border? false}]]
|
||||
[rn/view
|
||||
{:style style/name-container
|
||||
:accessibility-label :name}
|
||||
[text/text
|
||||
{:weight :semi-bold}
|
||||
name]]
|
||||
[rn/view
|
||||
{:accessibility-label :preview-list}
|
||||
[preview-list/view
|
||||
{:blur? blur?
|
||||
:type :accounts
|
||||
:size :size-24
|
||||
:number (count accounts)
|
||||
:container-style style/preview-list-container}
|
||||
accounts]]
|
||||
[rn/pressable {:on-press on-keypair-options-press}
|
||||
[icon/icon :i/options
|
||||
{:color (style/options-icon-color
|
||||
{:theme theme
|
||||
:blur? blur?})
|
||||
:accessibility-label :options-button}]]]))
|
||||
|
||||
(def view (schema/instrument #'internal-view component-schema/?schema))
|
||||
@@ -8,8 +8,7 @@
|
||||
(h/render-with-theme-provider component :light))
|
||||
|
||||
(def props
|
||||
{:theme :light
|
||||
:state :default
|
||||
{:state :default
|
||||
:label "Mainnet"
|
||||
:network-image 873
|
||||
:customization-color :blue
|
||||
|
||||
@@ -40,7 +40,6 @@
|
||||
[:catn
|
||||
[:props
|
||||
[:map {:closed true}
|
||||
[:theme :schema.common/theme]
|
||||
[:network-image :int]
|
||||
[:label :string]
|
||||
[:fiat-value :string]
|
||||
|
||||
@@ -3,39 +3,14 @@
|
||||
[quo.foundations.colors :as colors]
|
||||
[react-native.platform :as platform]))
|
||||
|
||||
(defn- primary-name-top-offset
|
||||
[size]
|
||||
(when (= size 15)
|
||||
(cond platform/ios? 1
|
||||
platform/android? -0.5
|
||||
:else 0)))
|
||||
|
||||
(defn- primary-name-margin-bottom-offset
|
||||
[size]
|
||||
(when (and (= size 15)
|
||||
(or platform/ios? platform/android?))
|
||||
-0.25))
|
||||
|
||||
(defn- primary-name-layout-offsets
|
||||
[size]
|
||||
;; NOTE(seanstrom): We need to sometimes offset the primary-name to align the baseline of the text
|
||||
;; while avoiding shifting elements downward.
|
||||
{:top (primary-name-top-offset size)
|
||||
:margin-bottom (primary-name-margin-bottom-offset size)})
|
||||
|
||||
(defn container
|
||||
[size]
|
||||
{:flex-shrink 1
|
||||
:flex-wrap :nowrap
|
||||
:flex-direction :row
|
||||
:align-items :baseline
|
||||
;; NOTE(seanstrom): Because we're offseting the primary-name we need to inverse the offset on the
|
||||
;; container to avoid shifting elements downward
|
||||
:top (* -1 (primary-name-top-offset size))})
|
||||
|
||||
(def details-container
|
||||
{:flex-direction :row
|
||||
:margin-left 8})
|
||||
(cond->
|
||||
{:flex-shrink 1
|
||||
:flex-wrap :nowrap
|
||||
:flex-direction :row
|
||||
:align-items :center
|
||||
:height (if (= size 15) 22 18)}))
|
||||
|
||||
(defn middle-dot
|
||||
[theme]
|
||||
@@ -48,11 +23,15 @@
|
||||
|
||||
(defn primary-name
|
||||
[muted? theme size]
|
||||
(merge (primary-name-layout-offsets size)
|
||||
{:color (if muted?
|
||||
colors/neutral-50
|
||||
(colors/theme-colors colors/neutral-100 colors/white theme))
|
||||
:flex-shrink 1}))
|
||||
{:color (if muted?
|
||||
colors/neutral-50
|
||||
(colors/theme-colors colors/neutral-100 colors/white theme))
|
||||
;; iOS: primary-name height is 22.3 / 18.7
|
||||
;; Android: primary-name height is 21.8 / 18.5
|
||||
:margin-vertical (if (= size 15)
|
||||
(if platform/ios? -0.15 0)
|
||||
(if platform/ios? -0.35 -0.25))
|
||||
:flex-shrink 1})
|
||||
|
||||
(defn secondary-name
|
||||
[theme]
|
||||
@@ -60,13 +39,9 @@
|
||||
:color (colors/theme-colors colors/neutral-50 colors/neutral-40 theme)})
|
||||
|
||||
(defn icon-container
|
||||
[is-first?]
|
||||
[is-first? size]
|
||||
{:margin-left (if is-first? 4 2)
|
||||
;; NOTE(seanstrom): Because we're using flex baseline to align elements
|
||||
;; we need to offset the icon container to match the designs.
|
||||
:top (cond platform/ios? 1
|
||||
platform/android? 2
|
||||
:else 0)})
|
||||
:padding-top (if (= size 15) 6 4)})
|
||||
|
||||
(defn time-text
|
||||
[theme]
|
||||
|
||||
@@ -13,7 +13,35 @@
|
||||
[{:keys [primary-name secondary-name style short-chat-key time-str contact? verified? untrustworthy?
|
||||
muted? size]
|
||||
:or {size 13}}]
|
||||
(let [theme (quo.theme/use-theme)]
|
||||
(let [theme (quo.theme/use-theme)
|
||||
|
||||
short-chat-key-component
|
||||
(when (and (not verified?) short-chat-key)
|
||||
[text/text
|
||||
{:weight :monospace
|
||||
:size :label
|
||||
:number-of-lines 1
|
||||
:style (style/chat-key-text theme)}
|
||||
short-chat-key])
|
||||
|
||||
time-str-component
|
||||
(when time-str
|
||||
[text/text
|
||||
{:monospace true
|
||||
:size :label
|
||||
:accessibility-label :message-timestamp
|
||||
:number-of-lines 1
|
||||
:style (style/time-text theme)}
|
||||
time-str])
|
||||
|
||||
middle-dot-seperator-component
|
||||
(when (and short-chat-key-component time-str-component)
|
||||
[text/text
|
||||
{:monospace true
|
||||
:size :label
|
||||
:number-of-lines 1
|
||||
:style (style/middle-dot theme)}
|
||||
middle-dot])]
|
||||
[rn/view
|
||||
{:style (merge (style/container size) style)}
|
||||
[text/text
|
||||
@@ -23,7 +51,7 @@
|
||||
:accessibility-label :author-primary-name
|
||||
:style (style/primary-name muted? theme size)}
|
||||
primary-name]
|
||||
(when (not (string/blank? secondary-name))
|
||||
(when-not (string/blank? secondary-name)
|
||||
[:<>
|
||||
[text/text
|
||||
{:size :label
|
||||
@@ -41,38 +69,22 @@
|
||||
[icons/icon :main-icons2/contact
|
||||
{:size 12
|
||||
:no-color true
|
||||
:container-style (style/icon-container true)}])
|
||||
:container-style (style/icon-container true size)}])
|
||||
(cond
|
||||
verified?
|
||||
[icons/icon :main-icons2/verified
|
||||
{:size 12
|
||||
:no-color true
|
||||
:container-style (style/icon-container contact?)}]
|
||||
:container-style (style/icon-container contact? size)}]
|
||||
untrustworthy?
|
||||
[icons/icon :main-icons2/untrustworthy
|
||||
{:size 12
|
||||
:no-color true
|
||||
:container-style (style/icon-container contact?)}])
|
||||
[rn/view {:style style/details-container}
|
||||
(when (and (not verified?) short-chat-key)
|
||||
[text/text
|
||||
{:weight :monospace
|
||||
:size :label
|
||||
:number-of-lines 1
|
||||
:style (style/chat-key-text theme)}
|
||||
short-chat-key])
|
||||
(when (and (not verified?) time-str short-chat-key)
|
||||
[text/text
|
||||
{:monospace true
|
||||
:size :label
|
||||
:number-of-lines 1
|
||||
:style (style/middle-dot theme)}
|
||||
middle-dot])
|
||||
(when time-str
|
||||
[text/text
|
||||
{:monospace true
|
||||
:size :label
|
||||
:accessibility-label :message-timestamp
|
||||
:number-of-lines 1
|
||||
:style (style/time-text theme)}
|
||||
time-str])]]))
|
||||
:container-style (style/icon-container contact? size)}])
|
||||
|
||||
(when (or short-chat-key-component time-str-component)
|
||||
[rn/view {:style {:width 8}}])
|
||||
|
||||
short-chat-key-component
|
||||
middle-dot-seperator-component
|
||||
time-str-component]))
|
||||
|
||||
@@ -261,7 +261,10 @@
|
||||
{:opacity center-opacity}
|
||||
nil)
|
||||
(style/center-content-container
|
||||
(and (= type :title) (= text-align :center))))
|
||||
(case type
|
||||
:title (= text-align :center)
|
||||
(:dropdown :wallet-networks) true
|
||||
false)))
|
||||
props-with-style (assoc props
|
||||
:center-content-container-style
|
||||
center-content-container-style)]
|
||||
|
||||
@@ -5,18 +5,22 @@
|
||||
(def container-border-radius 12)
|
||||
(def card-image-padding-vertical 3)
|
||||
(def card-image-padding-horizontal 3)
|
||||
(def default-opacity-for-loader 1)
|
||||
(def default-opacity-for-image 0)
|
||||
|
||||
(defn fallback
|
||||
[{:keys [theme]}]
|
||||
{:background-color (colors/theme-colors colors/neutral-2_5 colors/neutral-90 theme)
|
||||
:border-style :dashed
|
||||
:border-color (colors/theme-colors colors/neutral-20 colors/neutral-80 theme)
|
||||
:border-width 1
|
||||
:border-radius container-border-radius
|
||||
:width "100%"
|
||||
:aspect-ratio 1
|
||||
:align-items :center
|
||||
:justify-content :center})
|
||||
[{:keys [theme opacity]}]
|
||||
[{:opacity opacity}
|
||||
{:opacity default-opacity-for-image
|
||||
:background-color (colors/theme-colors colors/neutral-2_5 colors/neutral-90 theme)
|
||||
:border-style :dashed
|
||||
:border-color (colors/theme-colors colors/neutral-20 colors/neutral-80 theme)
|
||||
:border-width 1
|
||||
:border-radius container-border-radius
|
||||
:width "100%"
|
||||
:aspect-ratio 1
|
||||
:align-items :center
|
||||
:justify-content :center}])
|
||||
|
||||
(def collectible-counter
|
||||
{:position :absolute
|
||||
@@ -59,6 +63,15 @@
|
||||
(def card-detail-text
|
||||
{:flex 1})
|
||||
|
||||
(defn card-loader
|
||||
[opacity]
|
||||
[{:opacity opacity}
|
||||
{:position :absolute
|
||||
:opacity default-opacity-for-loader
|
||||
:left 8
|
||||
:align-items :center
|
||||
:flex-direction :row}])
|
||||
|
||||
(def image-view-container
|
||||
{:aspect-ratio 1
|
||||
:border-radius container-border-radius})
|
||||
@@ -83,6 +96,7 @@
|
||||
(defn loading-image
|
||||
[theme]
|
||||
{:position :absolute
|
||||
:opacity default-opacity-for-loader
|
||||
:top 0
|
||||
:bottom 0
|
||||
:left 0
|
||||
@@ -91,8 +105,20 @@
|
||||
:background-color (colors/theme-colors colors/white-70-blur colors/neutral-95-opa-70-blur theme)
|
||||
:z-index 2})
|
||||
|
||||
(defn loading-image-with-opacity
|
||||
[theme opacity]
|
||||
[{:opacity opacity}
|
||||
(loading-image theme)])
|
||||
|
||||
(defn avatar-container
|
||||
[loaded?]
|
||||
{:flex 1
|
||||
:flex-direction :row
|
||||
:opacity (when-not loaded? 0)})
|
||||
[opacity]
|
||||
[{:opacity opacity}
|
||||
{:flex 1
|
||||
:flex-direction :row
|
||||
:opacity default-opacity-for-image}])
|
||||
|
||||
(defn supported-file
|
||||
[opacity]
|
||||
[{:opacity opacity}
|
||||
{:aspect-ratio 1
|
||||
:opacity default-opacity-for-image}])
|
||||
|
||||
@@ -10,13 +10,54 @@
|
||||
[quo.foundations.gradients :as gradients]
|
||||
[quo.theme]
|
||||
[react-native.core :as rn]
|
||||
[react-native.reanimated :as reanimated]
|
||||
[schema.core :as schema]
|
||||
[utils.datetime :as datetime]
|
||||
[utils.i18n :as i18n]))
|
||||
|
||||
(def timing-options-out 650)
|
||||
(def timing-options-in 1000)
|
||||
(def first-load-time 500)
|
||||
(def cached-load-time 200)
|
||||
(def error-wait-time 800)
|
||||
|
||||
(defn on-load-end
|
||||
[{:keys [load-time set-state loader-opacity image-opacity]}]
|
||||
(reanimated/animate loader-opacity 0 timing-options-out)
|
||||
(reanimated/animate image-opacity 1 timing-options-in)
|
||||
(if (> load-time cached-load-time)
|
||||
(js/setTimeout
|
||||
(fn []
|
||||
(set-state (fn [prev-state]
|
||||
(assoc prev-state :image-loaded? true))))
|
||||
first-load-time)
|
||||
(set-state (fn [prev-state]
|
||||
(assoc prev-state :image-loaded? true)))))
|
||||
|
||||
(defn on-load-error
|
||||
[set-state]
|
||||
(js/setTimeout (fn []
|
||||
(set-state (fn [prev-state] (assoc prev-state :image-error? true))))
|
||||
error-wait-time))
|
||||
|
||||
(defn on-load-avatar
|
||||
[{:keys [load-time set-state loader-opacity avatar-opacity]}]
|
||||
(reanimated/animate loader-opacity 0 timing-options-out)
|
||||
(reanimated/animate avatar-opacity 1 timing-options-in)
|
||||
(if (> load-time cached-load-time)
|
||||
(js/setTimeout
|
||||
(fn []
|
||||
(set-state (fn [prev-state]
|
||||
(assoc prev-state :avatar-loaded? true))))
|
||||
first-load-time)
|
||||
(set-state (fn [prev-state]
|
||||
(assoc prev-state :avatar-loaded? true)))))
|
||||
|
||||
(defn- fallback-view
|
||||
[{:keys [label theme]}]
|
||||
[rn/view
|
||||
{:style (style/fallback {:theme theme})}
|
||||
[{:keys [label theme image-opacity]}]
|
||||
[reanimated/view
|
||||
{:style (style/fallback {:opacity image-opacity
|
||||
:theme theme})}
|
||||
[rn/view
|
||||
[icon/icon :i/sad {:color (colors/theme-colors colors/neutral-40 colors/neutral-50 theme)}]]
|
||||
[rn/view {:style {:height 4}}]
|
||||
@@ -34,77 +75,85 @@
|
||||
[rn/view {:style (style/loading-message theme)}])
|
||||
|
||||
(defn- loading-image
|
||||
[{:keys [theme gradient-color-index]}]
|
||||
[gradients/view
|
||||
{:theme theme
|
||||
:container-style (style/loading-image theme)
|
||||
:color-index gradient-color-index}])
|
||||
[{:keys [theme gradient-color-index loader-opacity]}]
|
||||
[reanimated/view
|
||||
{:style (style/loading-image-with-opacity theme loader-opacity)}
|
||||
[gradients/view
|
||||
{:theme theme
|
||||
:container-style (style/loading-image theme)
|
||||
:color-index gradient-color-index}]])
|
||||
|
||||
(defn- card-details
|
||||
[{:keys [community? avatar-image-src collectible-name theme state set-state]}]
|
||||
[rn/view {:style style/card-details-container}
|
||||
(cond (not (:avatar-loaded? state))
|
||||
[rn/view {:style {:flex-direction :row}}
|
||||
[loading-square theme]
|
||||
[loading-message theme]]
|
||||
|
||||
community?
|
||||
[:<>
|
||||
[preview-list/view
|
||||
{:type :communities
|
||||
:size :size-20}
|
||||
[avatar-image-src]]
|
||||
[rn/view {:style {:width 8}}]
|
||||
[text/text
|
||||
{:size :paragraph-1
|
||||
:weight :semi-bold
|
||||
:style style/card-detail-text}
|
||||
collectible-name]])
|
||||
|
||||
[rn/view
|
||||
{:style (style/avatar-container (:avatar-loaded? state))}
|
||||
[:<>
|
||||
[collection-avatar/view
|
||||
{:size :size-20
|
||||
:on-load-end #(set-state (fn [prev-state] (assoc prev-state :avatar-loaded? true)))
|
||||
:image avatar-image-src}]
|
||||
[rn/view {:style {:width 8}}]]
|
||||
[text/text
|
||||
{:size :paragraph-1
|
||||
:weight :semi-bold
|
||||
:ellipsize-mode :tail
|
||||
:number-of-lines 1
|
||||
:style style/card-detail-text}
|
||||
collectible-name]]])
|
||||
(let [loader-opacity (reanimated/use-shared-value 1)
|
||||
avatar-opacity (reanimated/use-shared-value 0)
|
||||
[load-time set-load-time] (rn/use-state (datetime/now))]
|
||||
[rn/view {:style style/card-details-container}
|
||||
[reanimated/view {:style (style/avatar-container avatar-opacity)}
|
||||
(if community?
|
||||
[preview-list/view
|
||||
{:type :communities
|
||||
:size :size-20}
|
||||
[avatar-image-src]]
|
||||
[collection-avatar/view
|
||||
{:size :size-20
|
||||
:on-start #(set-load-time (fn [start-time] (- (datetime/now) start-time)))
|
||||
:on-load-end #(on-load-avatar {:set-state set-state
|
||||
:load-time load-time
|
||||
:loader-opacity loader-opacity
|
||||
:avatar-opacity avatar-opacity})
|
||||
:image avatar-image-src}])
|
||||
[rn/view {:style {:width 8}}]
|
||||
[text/text
|
||||
{:size :paragraph-1
|
||||
:weight :semi-bold
|
||||
:ellipsize-mode :tail
|
||||
:number-of-lines 1
|
||||
:style style/card-detail-text}
|
||||
collectible-name]]
|
||||
(when (not (:avatar-loaded? state))
|
||||
[reanimated/view {:style (style/card-loader loader-opacity)}
|
||||
[loading-square theme]
|
||||
[loading-message theme]])]))
|
||||
|
||||
(defn- card-view
|
||||
[{:keys [avatar-image-src collectible-name community? counter state set-state
|
||||
gradient-color-index image-src supported-file?]}]
|
||||
(let [theme (quo.theme/use-theme)]
|
||||
(let [theme (quo.theme/use-theme)
|
||||
loader-opacity (reanimated/use-shared-value (if supported-file? 1 0))
|
||||
image-opacity (reanimated/use-shared-value (if supported-file? 0 1))
|
||||
[load-time set-load-time] (rn/use-state (datetime/now))]
|
||||
[rn/view {:style (style/card-view-container theme)}
|
||||
[rn/view {:style {:aspect-ratio 1}}
|
||||
(cond
|
||||
(:image-error? state)
|
||||
[fallback-view
|
||||
{:theme theme
|
||||
:label (i18n/label :t/cant-fetch-info)}]
|
||||
{:image-opacity image-opacity
|
||||
:theme theme
|
||||
:label (i18n/label :t/cant-fetch-info)}]
|
||||
|
||||
(not supported-file?)
|
||||
[fallback-view
|
||||
{:theme theme
|
||||
:label (i18n/label :t/unsupported-file)}]
|
||||
{:image-opacity image-opacity
|
||||
:theme theme
|
||||
:label (i18n/label :t/unsupported-file)}]
|
||||
|
||||
(not (:image-loaded? state))
|
||||
[loading-image
|
||||
{:theme theme
|
||||
{:loader-opacity loader-opacity
|
||||
:theme theme
|
||||
:gradient-color-index gradient-color-index}])
|
||||
(when supported-file?
|
||||
[rn/view {:style {:aspect-ratio 1}}
|
||||
[reanimated/view {:style (style/supported-file image-opacity)}
|
||||
[rn/image
|
||||
{:style style/image
|
||||
:on-load-end #(set-state (fn [prev-state] (assoc prev-state :image-loaded? true)))
|
||||
:on-error #(set-state (fn [prev-state] (assoc prev-state :image-error? true)))
|
||||
:source image-src}]])]
|
||||
{:style style/image
|
||||
:on-load-start #(set-load-time (fn [start-time] (- (datetime/now) start-time)))
|
||||
:on-load-end #(on-load-end {:load-time load-time
|
||||
:set-state set-state
|
||||
:loader-opacity loader-opacity
|
||||
:image-opacity image-opacity})
|
||||
:on-error #(on-load-error set-state)
|
||||
:source image-src}]])]
|
||||
(when (and (:image-loaded? state) (not (:image-error? state)) counter)
|
||||
[collectible-counter/view
|
||||
{:container-style style/collectible-counter
|
||||
@@ -121,30 +170,40 @@
|
||||
(defn- image-view
|
||||
[{:keys [avatar-image-src community? counter state set-state
|
||||
gradient-color-index image-src supported-file?]}]
|
||||
(let [theme (quo.theme/use-theme)]
|
||||
(let [theme (quo.theme/use-theme)
|
||||
loader-opacity (reanimated/use-shared-value (if supported-file? 1 0))
|
||||
image-opacity (reanimated/use-shared-value (if supported-file? 0 1))
|
||||
[load-time set-load-time] (rn/use-state (datetime/now))]
|
||||
[rn/view {:style style/image-view-container}
|
||||
(cond
|
||||
(:image-error? state)
|
||||
[fallback-view
|
||||
{:theme theme
|
||||
:label (i18n/label :t/cant-fetch-info)}]
|
||||
{:image-opacity image-opacity
|
||||
:theme theme
|
||||
:label (i18n/label :t/cant-fetch-info)}]
|
||||
|
||||
(not supported-file?)
|
||||
[fallback-view
|
||||
{:theme theme
|
||||
:label (i18n/label :t/unsupported-file)}]
|
||||
{:image-opacity image-opacity
|
||||
:theme theme
|
||||
:label (i18n/label :t/unsupported-file)}]
|
||||
|
||||
(not (:image-loaded? state))
|
||||
[loading-image
|
||||
{:theme theme
|
||||
{:loader-opacity loader-opacity
|
||||
:theme theme
|
||||
:gradient-color-index gradient-color-index}])
|
||||
(when supported-file?
|
||||
[rn/view {:style {:aspect-ratio 1}}
|
||||
[reanimated/view {:style (style/supported-file image-opacity)}
|
||||
[rn/image
|
||||
{:style style/image
|
||||
:on-load-end #(set-state (fn [prev-state] (assoc prev-state :image-loaded? true)))
|
||||
:on-error #(set-state (fn [prev-state] (assoc prev-state :image-error? true)))
|
||||
:source image-src}]])
|
||||
{:style style/image
|
||||
:on-load-start #(set-load-time (fn [start-time] (- (datetime/now) start-time)))
|
||||
:on-load-end #(on-load-end {:load-time load-time
|
||||
:set-state set-state
|
||||
:loader-opacity loader-opacity
|
||||
:image-opacity image-opacity})
|
||||
:on-error #(on-load-error set-state)
|
||||
:source image-src}]])
|
||||
(when (and (:image-loaded? state) (not (:image-error? state)) counter)
|
||||
[collectible-counter/view
|
||||
{:container-style style/collectible-counter
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
[react-native.core :as rn]))
|
||||
|
||||
(defn view
|
||||
[{:keys [reactions on-press on-long-press add-reaction? on-press-add use-case container-style]}]
|
||||
[{:keys [reactions on-press on-long-press hide-new-reaction-button? on-press-add use-case
|
||||
container-style]}]
|
||||
[rn/view {:style (merge style/container container-style)}
|
||||
(for [emoji-reaction reactions
|
||||
:let [{:keys [emoji emoji-id emoji-reaction-id quantity own]} emoji-reaction]]
|
||||
@@ -19,7 +20,7 @@
|
||||
:on-press #(on-press emoji-reaction)
|
||||
:on-long-press #(on-long-press emoji-reaction)
|
||||
:accessibility-label (str "emoji-reaction-" emoji-id)}])
|
||||
(when add-reaction?
|
||||
(when-not hide-new-reaction-button?
|
||||
[react-selector/view
|
||||
{:on-press on-press-add
|
||||
:state :add-reaction
|
||||
|
||||
@@ -1,12 +1,31 @@
|
||||
(ns quo.components.selectors.reactions-selector.style
|
||||
(:require
|
||||
[quo.foundations.colors :as colors]))
|
||||
[quo.foundations.colors :as colors]
|
||||
[react-native.platform :as platform]))
|
||||
|
||||
(defn container
|
||||
[pressed? theme]
|
||||
{:padding 10
|
||||
:border-radius 12
|
||||
:border-width 1
|
||||
:border-color (colors/theme-colors colors/neutral-20 colors/neutral-80 theme)
|
||||
:background-color (when pressed?
|
||||
(colors/theme-colors colors/neutral-10 colors/neutral-80-opa-40 theme))})
|
||||
(merge
|
||||
{:border-radius 12
|
||||
:border-width 1
|
||||
:border-color (colors/theme-colors colors/neutral-20 colors/neutral-80 theme)
|
||||
:background-color (when pressed?
|
||||
(colors/theme-colors colors/neutral-10 colors/neutral-80-opa-40 theme))}
|
||||
(if platform/ios?
|
||||
{:padding 9.5
|
||||
:padding-horizontal 8}
|
||||
{:padding 8})))
|
||||
|
||||
(def emoji-text-style
|
||||
(merge
|
||||
{:line-height 20
|
||||
:text-align :center}
|
||||
(if platform/ios?
|
||||
{:line-height 20
|
||||
:font-size 17
|
||||
:text-align :center}
|
||||
{:font-size 18
|
||||
:height 24
|
||||
:width 24
|
||||
:text-align :center
|
||||
:text-align-vertical :center})))
|
||||
|
||||
@@ -20,4 +20,6 @@
|
||||
:style (merge (style/container pressed? theme)
|
||||
container-style)
|
||||
:on-press on-press}
|
||||
[rn/text (reactions.resource/system-emojis emoji)]]))
|
||||
[rn/text
|
||||
{:style style/emoji-text-style}
|
||||
(reactions.resource/system-emojis emoji)]]))
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
|
||||
(def container
|
||||
{:flex-direction :row
|
||||
:flex 1
|
||||
:justify-content :space-between})
|
||||
|
||||
(def right-counter
|
||||
|
||||
@@ -55,8 +55,8 @@
|
||||
:icon-color (style/right-tag-icon-color blur? theme)}]))
|
||||
|
||||
(defn view
|
||||
[{:keys [title right accessibility-label] :as props}]
|
||||
[rn/view {:style style/container}
|
||||
[{:keys [title right accessibility-label container-style] :as props}]
|
||||
[rn/view {:style (merge style/container container-style)}
|
||||
[text/text
|
||||
{:size :heading-1
|
||||
:weight :semi-bold
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
[:props
|
||||
[:map {:closed true}
|
||||
[:status {:optional true} [:maybe [:enum :default :error]]]
|
||||
[:on-change-text {:optional true} [:maybe fn?]]
|
||||
[:on-inc-press {:optional true} [:maybe fn?]]
|
||||
[:on-dec-press {:optional true} [:maybe fn?]]
|
||||
[:container-style {:optional true} [:maybe :map]]
|
||||
[:min-value {:optional true} [:maybe :int]]
|
||||
[:max-value {:optional true} [:maybe :int]]
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
(ns quo.components.wallet.approval-label.component-spec
|
||||
(:require [quo.components.wallet.approval-label.view :as approval-label]
|
||||
[test-helpers.component :as h]))
|
||||
|
||||
(h/describe "Wallet: Approval Label"
|
||||
(h/test "with :approve status"
|
||||
(h/render-with-theme-provider
|
||||
[approval-label/view
|
||||
{:status :approve
|
||||
:customization-color :blue
|
||||
:token-value "100"
|
||||
:token-symbol "SNT"}])
|
||||
(h/is-truthy (h/get-by-translation-text :t/approve-amount-symbol {:amount "100" :symbol "SNT"})))
|
||||
|
||||
(h/test "with :approving status"
|
||||
(h/render-with-theme-provider
|
||||
[approval-label/view
|
||||
{:status :approving
|
||||
:customization-color :blue
|
||||
:token-value "50"
|
||||
:token-symbol "DAI"}])
|
||||
(h/is-truthy (h/get-by-translation-text :t/approving-amount-symbol {:amount "50" :symbol "DAI"})))
|
||||
|
||||
(h/test "with :approved status"
|
||||
(h/render-with-theme-provider
|
||||
[approval-label/view
|
||||
{:status :approved
|
||||
:customization-color :blue
|
||||
:token-value "5"
|
||||
:token-symbol "ETH"}])
|
||||
(h/is-truthy (h/get-by-translation-text :t/approved-amount-symbol {:amount "5" :symbol "ETH"})))
|
||||
|
||||
(h/test "on-press event is called when button is pressed"
|
||||
(let [mock-fn (h/mock-fn)]
|
||||
(h/render-with-theme-provider
|
||||
[approval-label/view
|
||||
{:status :approve
|
||||
:customization-color :blue
|
||||
:token-value "11"
|
||||
:token-symbol "DAI"
|
||||
:button-props {:on-press mock-fn}}])
|
||||
(h/fire-event :press (h/get-by-translation-text :t/approve))
|
||||
(h/was-called mock-fn))))
|
||||
@@ -0,0 +1,14 @@
|
||||
(ns quo.components.wallet.approval-label.schema)
|
||||
|
||||
(def ?schema
|
||||
[:=>
|
||||
[:catn
|
||||
[:props
|
||||
[:map {:closed true}
|
||||
[:status [:enum :approve :approving :approved]]
|
||||
[:token-value :string]
|
||||
[:token-symbol :string]
|
||||
[:container-style {:optional true} [:maybe :map]]
|
||||
[:button-props {:optional true} [:maybe :map]]
|
||||
[:customization-color {:optional true} [:maybe :schema.common/customization-color]]]]]
|
||||
:any])
|
||||
@@ -0,0 +1,28 @@
|
||||
(ns quo.components.wallet.approval-label.style
|
||||
(:require [quo.foundations.colors :as colors]))
|
||||
|
||||
(def ^:const top-hole-view-height 24)
|
||||
|
||||
(defn container
|
||||
[customization-color theme]
|
||||
{:background-color (colors/resolve-color customization-color theme 5)
|
||||
:align-items :center
|
||||
:padding-horizontal 12
|
||||
:padding-vertical 8
|
||||
:padding-top (+ 8 top-hole-view-height)
|
||||
:gap 8
|
||||
:border-bottom-left-radius 16
|
||||
:border-bottom-right-radius 16
|
||||
:flex-direction :row})
|
||||
|
||||
(def content
|
||||
{:flex-direction :row
|
||||
:align-items :center
|
||||
:flex 1
|
||||
:padding-vertical 4
|
||||
:gap 4})
|
||||
|
||||
(defn message
|
||||
[theme]
|
||||
{:flex 1
|
||||
:color (colors/theme-colors colors/neutral-50 colors/neutral-40 theme)})
|
||||
@@ -0,0 +1,70 @@
|
||||
(ns quo.components.wallet.approval-label.view
|
||||
(:require [oops.core :as oops]
|
||||
[quo.components.buttons.button.view :as button]
|
||||
[quo.components.icon :as icon]
|
||||
[quo.components.markdown.text :as text]
|
||||
[quo.components.wallet.approval-label.schema :as approval-label.schema]
|
||||
[quo.components.wallet.approval-label.style :as style]
|
||||
[quo.foundations.colors :as colors]
|
||||
quo.theme
|
||||
[react-native.core :as rn]
|
||||
[react-native.hole-view :as hole-view]
|
||||
[schema.core :as schema]
|
||||
[utils.i18n :as i18n]))
|
||||
|
||||
(def ^:private status-icons
|
||||
{:approve :i/alert
|
||||
:approving :i/pending-state
|
||||
:approved :i/check})
|
||||
|
||||
(def ^:private status-message
|
||||
{:approve :t/approve-amount-symbol
|
||||
:approving :t/approving-amount-symbol
|
||||
:approved :t/approved-amount-symbol})
|
||||
|
||||
(defn- view-internal
|
||||
[{:keys [status token-value token-symbol
|
||||
container-style button-props]
|
||||
:as props}]
|
||||
(let [theme (quo.theme/use-theme)
|
||||
customization-color (or (:customization-color props) :blue)
|
||||
[container-width set-container-width] (rn/use-state 0)
|
||||
on-layout (rn/use-callback
|
||||
#(set-container-width
|
||||
(oops/oget % :nativeEvent :layout :width)))]
|
||||
[hole-view/hole-view
|
||||
{:holes [{:x 0
|
||||
:y 0
|
||||
:height style/top-hole-view-height
|
||||
:width container-width
|
||||
:borderBottomStartRadius 16
|
||||
:borderBottomEndRadius 16}]
|
||||
:style {:margin-top (- style/top-hole-view-height)}
|
||||
:on-layout on-layout}
|
||||
[rn/view
|
||||
{:style (merge (style/container customization-color theme)
|
||||
container-style)
|
||||
:accessibility-label :approval-label}
|
||||
[rn/view {:style style/content}
|
||||
[icon/icon
|
||||
(status-icons status)
|
||||
{:color (colors/theme-colors colors/neutral-50 colors/neutral-40 theme)
|
||||
:size 16}]
|
||||
[text/text
|
||||
{:size :paragraph-2
|
||||
:style (style/message theme)}
|
||||
(i18n/label (status-message status)
|
||||
{:amount token-value
|
||||
:symbol token-symbol})]]
|
||||
(when button-props
|
||||
[button/button
|
||||
(merge {:type (if (= status :approve) :primary :grey)
|
||||
:background (when-not (= status :approve) :blur)
|
||||
:customization-color customization-color
|
||||
:size 24}
|
||||
button-props)
|
||||
(i18n/label (if (= status :approve)
|
||||
:t/approve
|
||||
:t/view))])]]))
|
||||
|
||||
(def view (schema/instrument #'view-internal approval-label.schema/?schema))
|
||||
@@ -13,7 +13,7 @@
|
||||
:name "Trip to Vegas"
|
||||
:address "0x0ah...71a"}
|
||||
:networks [{:network-name :ethereum :short-name "eth"}
|
||||
{:network-name :optimism :short-name "opt"}]
|
||||
{:network-name :optimism :short-name "oeth"}]
|
||||
:action :none}])
|
||||
|
||||
(def default-details
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
(ns quo.components.wallet.missing-keypairs.component-spec
|
||||
(:require
|
||||
[quo.components.wallet.missing-keypairs.view :as missing-keypairs]
|
||||
[test-helpers.component :as h]))
|
||||
|
||||
(def ^:private theme :dark)
|
||||
|
||||
(def props
|
||||
{:blur? true
|
||||
:container-style {}
|
||||
:on-options-press (fn [])
|
||||
:keypairs [{:type :seed
|
||||
:name name
|
||||
:key-uid "123"
|
||||
:accounts [{:customization-color :turquoise
|
||||
:emoji "\uD83C\uDFB2"
|
||||
:type :default}]}]})
|
||||
|
||||
(h/describe "Wallet: Missing key pairs"
|
||||
(h/test "Missing key pair title renders"
|
||||
(h/render-with-theme-provider [missing-keypairs/view props]
|
||||
theme)
|
||||
(h/is-truthy (h/get-by-label-text :title))
|
||||
(h/is-truthy (h/get-by-label-text :t/import-to-use-derived-accounts))))
|
||||
@@ -0,0 +1,28 @@
|
||||
(ns quo.components.wallet.missing-keypairs.style
|
||||
(:require
|
||||
[quo.foundations.colors :as colors]))
|
||||
|
||||
(def container
|
||||
{:border-width 1
|
||||
:border-radius 16
|
||||
:padding 8
|
||||
:border-color colors/warning-50-opa-20
|
||||
:background-color colors/warning-50-opa-5})
|
||||
|
||||
(def title-icon-container
|
||||
{:top 1})
|
||||
|
||||
(def title-info-container
|
||||
{:padding-left 8})
|
||||
|
||||
(def title-container
|
||||
{:align-items :flex-start
|
||||
:flex-direction :row
|
||||
:padding-left 4
|
||||
:padding-bottom 12})
|
||||
|
||||
(defn subtitle
|
||||
[blur? theme]
|
||||
{:color (if blur?
|
||||
colors/white-opa-40
|
||||
(colors/theme-colors colors/neutral-50 colors/neutral-40 theme))})
|
||||
@@ -0,0 +1,53 @@
|
||||
(ns quo.components.wallet.missing-keypairs.view
|
||||
(:require
|
||||
[quo.components.icon :as icon]
|
||||
[quo.components.list-items.missing-keypair.view :as missing-keypair]
|
||||
[quo.components.markdown.text :as text]
|
||||
[quo.components.wallet.missing-keypairs.style :as style]
|
||||
[quo.foundations.colors :as colors]
|
||||
[quo.theme]
|
||||
[react-native.core :as rn]
|
||||
[utils.i18n :as i18n]))
|
||||
|
||||
(defn title-view
|
||||
[{:keys [keypairs blur?]}]
|
||||
(let [theme (quo.theme/use-theme)]
|
||||
[rn/view
|
||||
{:accessibility-label :title
|
||||
:style style/title-container}
|
||||
[rn/view
|
||||
{:style style/title-icon-container}
|
||||
[icon/icon :i/info
|
||||
{:size 20
|
||||
:color colors/warning-60}]]
|
||||
[rn/view
|
||||
{:style style/title-info-container}
|
||||
[text/text
|
||||
{:weight :medium
|
||||
:style {:color colors/warning-60}}
|
||||
(i18n/label :t/amount-missing-keypairs
|
||||
{:amount (str (count keypairs))})]
|
||||
[text/text
|
||||
{:size :paragraph-2
|
||||
:style (style/subtitle blur? theme)}
|
||||
(i18n/label :t/import-to-use-derived-accounts)]]]))
|
||||
|
||||
(defn- missing-keypair-item
|
||||
[keypair _index _separators
|
||||
{:keys [blur? on-options-press]}]
|
||||
[missing-keypair/view
|
||||
{:keypair keypair
|
||||
:blur? blur?
|
||||
:on-options-press on-options-press}])
|
||||
|
||||
(defn view
|
||||
[{:keys [blur? keypairs container-style on-options-press] :as props}]
|
||||
[rn/view
|
||||
{:style (merge style/container container-style)}
|
||||
[title-view props]
|
||||
[rn/flat-list
|
||||
{:data keypairs
|
||||
:render-fn missing-keypair-item
|
||||
:render-data {:blur? blur?
|
||||
:on-options-press on-options-press}
|
||||
:separator [rn/view {:style {:height 8}}]}]])
|
||||
@@ -48,7 +48,7 @@
|
||||
(when show-optimism?
|
||||
[network-amount
|
||||
{:network :optimism
|
||||
:amount (str (:amount optimism) " " (or (:token-symbol optimism) "OPT"))
|
||||
:amount (str (:amount optimism) " " (or (:token-symbol optimism) "OETH"))
|
||||
:divider? show-arbitrum?
|
||||
:theme theme}])
|
||||
(when show-arbitrum?
|
||||
|
||||
@@ -6,14 +6,16 @@
|
||||
(h/describe "Wallet: Token Input"
|
||||
(h/test "Token label renders"
|
||||
(h/render-with-theme-provider [token-input/view
|
||||
{:token :snt
|
||||
:currency :eur
|
||||
:conversion 1}])
|
||||
{:token :snt
|
||||
:currency :eur
|
||||
:currency-symbol "€"
|
||||
:conversion 1}])
|
||||
(h/is-truthy (h/get-by-text "SNT")))
|
||||
|
||||
(h/test "Amount renders"
|
||||
(h/render-with-theme-provider [token-input/view
|
||||
{:token :snt
|
||||
:currency :eur
|
||||
:conversion 1}])
|
||||
{:token :snt
|
||||
:currency :eur
|
||||
:currency-symbol "€"
|
||||
:conversion 1}])
|
||||
(h/is-truthy (h/get-by-text "€0.00"))))
|
||||
|
||||
@@ -12,30 +12,22 @@
|
||||
{:padding-horizontal 20
|
||||
:padding-bottom 4
|
||||
:height 36
|
||||
:flex-direction :row
|
||||
:justify-content :space-between})
|
||||
:flex-direction :row})
|
||||
|
||||
(defn token-name
|
||||
[theme]
|
||||
{:color (colors/theme-colors colors/neutral-50 colors/neutral-40 theme)
|
||||
:margin-right 8
|
||||
:padding-bottom 2})
|
||||
|
||||
(def token-label-container
|
||||
{:position :absolute
|
||||
:left 40 ; token image size + margin
|
||||
:right 0
|
||||
:bottom 0
|
||||
:top 0
|
||||
:flex-direction :row
|
||||
:align-items :flex-end})
|
||||
:padding-bottom 3})
|
||||
|
||||
(def text-input-container
|
||||
{:position :absolute
|
||||
:top 0
|
||||
:bottom 0
|
||||
:left 40 ; token image size + margin
|
||||
:right 0})
|
||||
{:flex-direction :row
|
||||
:align-items :flex-end})
|
||||
|
||||
(defn input-container
|
||||
[window-width]
|
||||
{:width (- window-width 120)
|
||||
:margin-left 8
|
||||
:margin-right 8})
|
||||
|
||||
(def text-input-dimensions
|
||||
(-> typography/heading-1
|
||||
@@ -54,7 +46,8 @@
|
||||
:color
|
||||
(if error?
|
||||
(colors/resolve-color :danger theme)
|
||||
(colors/theme-colors colors/neutral-100 colors/white theme))))
|
||||
(colors/theme-colors colors/neutral-100 colors/white theme))
|
||||
:flex-shrink 1))
|
||||
|
||||
(defn placeholder-text
|
||||
[theme]
|
||||
|
||||
@@ -9,32 +9,34 @@
|
||||
[quo.components.utilities.token.view :as token]
|
||||
[quo.components.wallet.token-input.schema :as component-schema]
|
||||
[quo.components.wallet.token-input.style :as style]
|
||||
[quo.foundations.common :as common]
|
||||
[quo.theme :as quo.theme]
|
||||
[react-native.core :as rn]
|
||||
[schema.core :as schema]))
|
||||
[schema.core :as schema]
|
||||
[utils.number :as number]))
|
||||
|
||||
(defn fiat-format
|
||||
[currency num-value conversion]
|
||||
(str (get common/currency-label currency) (.toFixed (* num-value conversion) 2)))
|
||||
[currency-symbol num-value conversion]
|
||||
(str currency-symbol (.toFixed (* num-value conversion) 2)))
|
||||
|
||||
(defn crypto-format
|
||||
[num-value conversion crypto-decimals token]
|
||||
(str (.toFixed (/ num-value conversion) (or crypto-decimals 2))
|
||||
(str (number/remove-trailing-zeroes
|
||||
(.toFixed (/ num-value conversion) (or crypto-decimals 2)))
|
||||
" "
|
||||
(string/upper-case (or (clj->js token) ""))))
|
||||
|
||||
(defn calc-value
|
||||
[{:keys [crypto? currency token value conversion crypto-decimals]}]
|
||||
[{:keys [crypto? currency-symbol token value conversion crypto-decimals]}]
|
||||
(let [num-value (if (string? value)
|
||||
(or (parse-double value) 0)
|
||||
value)]
|
||||
(if crypto?
|
||||
(fiat-format currency num-value conversion)
|
||||
(fiat-format currency-symbol num-value conversion)
|
||||
(crypto-format num-value conversion crypto-decimals token))))
|
||||
|
||||
(defn- data-info
|
||||
[{:keys [theme token crypto-decimals conversion networks title crypto? currency amount error?]}]
|
||||
[{:keys [theme token crypto-decimals conversion networks title crypto? currency-symbol amount
|
||||
error?]}]
|
||||
[rn/view {:style style/data-container}
|
||||
[network-tag/view
|
||||
{:networks networks
|
||||
@@ -45,7 +47,7 @@
|
||||
:weight :medium
|
||||
:style (style/fiat-amount theme)}
|
||||
(calc-value {:crypto? crypto?
|
||||
:currency currency
|
||||
:currency-symbol currency-symbol
|
||||
:token token
|
||||
:value amount
|
||||
:conversion conversion
|
||||
@@ -59,20 +61,6 @@
|
||||
:weight :semi-bold}
|
||||
(string/upper-case (or (clj->js text) ""))])
|
||||
|
||||
(defn- token-label
|
||||
[{:keys [theme value text]}]
|
||||
[rn/view
|
||||
{:style style/token-label-container
|
||||
:pointer-events :none}
|
||||
[rn/text-input
|
||||
{:max-length 12
|
||||
:style style/text-input-dimensions
|
||||
:editable false
|
||||
:placeholder "0"
|
||||
:opacity 0
|
||||
:value value}]
|
||||
[token-name-text theme text]])
|
||||
|
||||
(defn input-section
|
||||
[{:keys [on-change-text value value-internal set-value-internal on-selection-change
|
||||
on-token-press]}]
|
||||
@@ -92,36 +80,45 @@
|
||||
(oops/oget "nativeEvent.selection")
|
||||
(js->clj :keywordize-keys true)
|
||||
(on-selection-change))))]
|
||||
(fn [{:keys [token customization-color show-keyboard? crypto? currency value error? selection]
|
||||
(fn [{:keys [token customization-color show-keyboard? crypto? currency value error? selection
|
||||
handle-on-swap]
|
||||
:or {show-keyboard? true}}]
|
||||
(let [theme (quo.theme/use-theme)]
|
||||
[rn/view {:style {:flex 1}}
|
||||
[rn/pressable {:on-press on-token-press}
|
||||
[token/view
|
||||
{:token token
|
||||
:size :size-32}]]
|
||||
[rn/pressable
|
||||
{:style style/text-input-container
|
||||
:on-press focus-input}
|
||||
[rn/text-input
|
||||
(cond-> {:style (style/text-input theme error?)
|
||||
:placeholder-text-color (style/placeholder-text theme)
|
||||
:auto-focus true
|
||||
:ref set-ref
|
||||
:placeholder "0"
|
||||
:keyboard-type :numeric
|
||||
:max-length 12
|
||||
:on-change-text handle-on-change-text
|
||||
:selection-color customization-color
|
||||
:show-soft-input-on-focus show-keyboard?
|
||||
:on-selection-change handle-selection-change
|
||||
:selection (clj->js selection)}
|
||||
controlled-input? (assoc :value value)
|
||||
(not controlled-input?) (assoc :default-value value-internal))]]
|
||||
[token-label
|
||||
{:theme theme
|
||||
:text (if crypto? token currency)
|
||||
:value (if controlled-input? value value-internal)}]]))))
|
||||
(let [theme (quo.theme/use-theme)
|
||||
window-width (:width (rn/get-window))]
|
||||
[rn/pressable
|
||||
{:style {:width "100%"
|
||||
:flex-direction :row}
|
||||
:on-press on-token-press}
|
||||
[token/view
|
||||
{:token token
|
||||
:size :size-32}]
|
||||
[rn/view {:style (style/input-container window-width)}
|
||||
[rn/pressable
|
||||
{:style style/text-input-container
|
||||
:on-press focus-input}
|
||||
[rn/text-input
|
||||
(cond-> {:style (style/text-input theme error?)
|
||||
:placeholder-text-color (style/placeholder-text theme)
|
||||
:auto-focus true
|
||||
:ref set-ref
|
||||
:placeholder "0"
|
||||
:keyboard-type :numeric
|
||||
:on-change-text handle-on-change-text
|
||||
:selection-color customization-color
|
||||
:show-soft-input-on-focus show-keyboard?
|
||||
:on-selection-change handle-selection-change
|
||||
:selection (clj->js selection)}
|
||||
controlled-input? (assoc :value value)
|
||||
(not controlled-input?) (assoc :default-value value-internal))]
|
||||
[token-name-text theme (if crypto? token currency)]]]
|
||||
[button/button
|
||||
{:icon true
|
||||
:icon-only? true
|
||||
:size 32
|
||||
:on-press handle-on-swap
|
||||
:type :outline
|
||||
:accessibility-label :reorder}
|
||||
:i/reorder]]))))
|
||||
|
||||
(defn- view-internal
|
||||
[{:keys [container-style value on-swap] :as props}]
|
||||
@@ -141,15 +138,8 @@
|
||||
:value-internal value-internal
|
||||
:theme theme
|
||||
:set-value-internal set-value-internal
|
||||
:crypto? crypto?)]
|
||||
[button/button
|
||||
{:icon true
|
||||
:icon-only? true
|
||||
:size 32
|
||||
:on-press handle-on-swap
|
||||
:type :outline
|
||||
:accessibility-label :reorder}
|
||||
:i/reorder]]
|
||||
:handle-on-swap handle-on-swap
|
||||
:crypto? crypto?)]]
|
||||
[divider-line/view {:container-style (style/divider theme)}]
|
||||
[data-info
|
||||
(assoc props
|
||||
|
||||
@@ -5,8 +5,11 @@
|
||||
quo.components.avatars.account-avatar.view
|
||||
quo.components.avatars.channel-avatar.view
|
||||
quo.components.avatars.collection-avatar.view
|
||||
quo.components.avatars.community-avatar.view
|
||||
quo.components.avatars.dapp-avatar.view
|
||||
quo.components.avatars.group-avatar.view
|
||||
quo.components.avatars.icon-avatar
|
||||
quo.components.avatars.token-avatar.view
|
||||
quo.components.avatars.user-avatar.view
|
||||
quo.components.avatars.wallet-user-avatar.view
|
||||
quo.components.banners.banner.view
|
||||
@@ -17,6 +20,7 @@
|
||||
quo.components.buttons.logout-button.view
|
||||
quo.components.buttons.predictive-keyboard.view
|
||||
quo.components.buttons.slide-button.view
|
||||
quo.components.buttons.swap-order-button.view
|
||||
quo.components.buttons.wallet-button.view
|
||||
quo.components.buttons.wallet-ctas.view
|
||||
quo.components.calendar.calendar-day.view
|
||||
@@ -84,6 +88,7 @@
|
||||
quo.components.list-items.community.view
|
||||
quo.components.list-items.dapp.view
|
||||
quo.components.list-items.menu-item
|
||||
quo.components.list-items.missing-keypair.view
|
||||
quo.components.list-items.network-list.view
|
||||
quo.components.list-items.preview-list.view
|
||||
quo.components.list-items.quiz-item.view
|
||||
@@ -165,8 +170,10 @@
|
||||
quo.components.wallet.account-permissions.view
|
||||
quo.components.wallet.address-text.view
|
||||
quo.components.wallet.amount-input.view
|
||||
quo.components.wallet.approval-label.view
|
||||
quo.components.wallet.confirmation-progress.view
|
||||
quo.components.wallet.keypair.view
|
||||
quo.components.wallet.missing-keypairs.view
|
||||
quo.components.wallet.network-amount.view
|
||||
quo.components.wallet.network-bridge.view
|
||||
quo.components.wallet.network-link.view
|
||||
@@ -186,8 +193,11 @@
|
||||
(def account-avatar quo.components.avatars.account-avatar.view/view)
|
||||
(def channel-avatar quo.components.avatars.channel-avatar.view/view)
|
||||
(def collection-avatar quo.components.avatars.collection-avatar.view/view)
|
||||
(def community-avatar quo.components.avatars.community-avatar.view/view)
|
||||
(def dapp-avatar quo.components.avatars.dapp-avatar.view/view)
|
||||
(def group-avatar quo.components.avatars.group-avatar.view/view)
|
||||
(def icon-avatar quo.components.avatars.icon-avatar/icon-avatar)
|
||||
(def token-avatar quo.components.avatars.token-avatar.view/view)
|
||||
(def user-avatar quo.components.avatars.user-avatar.view/user-avatar)
|
||||
(def wallet-user-avatar quo.components.avatars.wallet-user-avatar.view/wallet-user-avatar)
|
||||
|
||||
@@ -201,6 +211,7 @@
|
||||
(def logout-button quo.components.buttons.logout-button.view/view)
|
||||
(def predictive-keyboard quo.components.buttons.predictive-keyboard.view/view)
|
||||
(def slide-button quo.components.buttons.slide-button.view/view)
|
||||
(def swap-order-button quo.components.buttons.swap-order-button.view/view)
|
||||
(def wallet-button quo.components.buttons.wallet-button.view/view)
|
||||
(def wallet-ctas quo.components.buttons.wallet-ctas.view/view)
|
||||
|
||||
@@ -317,6 +328,7 @@
|
||||
(def community-list quo.components.list-items.community.view/view)
|
||||
(def dapp quo.components.list-items.dapp.view/view)
|
||||
(def menu-item quo.components.list-items.menu-item/menu-item)
|
||||
(def missing-keypair quo.components.list-items.missing-keypair.view/view)
|
||||
(def network-list quo.components.list-items.network-list.view/view)
|
||||
(def preview-list quo.components.list-items.preview-list.view/view)
|
||||
(def quiz-item quo.components.list-items.quiz-item.view/view)
|
||||
@@ -434,8 +446,10 @@
|
||||
(def account-permissions quo.components.wallet.account-permissions.view/view)
|
||||
(def address-text quo.components.wallet.address-text.view/view)
|
||||
(def amount-input quo.components.wallet.amount-input.view/view)
|
||||
(def approval-label quo.components.wallet.approval-label.view/view)
|
||||
(def confirmation-progress quo.components.wallet.confirmation-progress.view/view)
|
||||
(def keypair quo.components.wallet.keypair.view/view)
|
||||
(def missing-keypairs quo.components.wallet.missing-keypairs.view/view)
|
||||
(def network-amount quo.components.wallet.network-amount.view/view)
|
||||
(def network-bridge quo.components.wallet.network-bridge.view/view)
|
||||
(def network-routing quo.components.wallet.network-routing.view/view)
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
(ns quo.core-spec
|
||||
(:require
|
||||
quo.components.avatars.account-avatar.component-spec
|
||||
quo.components.avatars.community-avatar.component-spec
|
||||
quo.components.avatars.dapp-avatar.component-spec
|
||||
quo.components.avatars.token-avatar.component-spec
|
||||
quo.components.avatars.user-avatar.component-spec
|
||||
quo.components.banners.banner.component-spec
|
||||
quo.components.browser.browser-input.component-spec
|
||||
@@ -9,6 +12,7 @@
|
||||
quo.components.buttons.logout-button.component-spec
|
||||
quo.components.buttons.predictive-keyboard.component-spec
|
||||
quo.components.buttons.slide-button.component-spec
|
||||
quo.components.buttons.swap-order-button.component-spec
|
||||
quo.components.buttons.wallet-button.component-spec
|
||||
quo.components.buttons.wallet-ctas.component-spec
|
||||
quo.components.calendar.calendar-day.component-spec
|
||||
@@ -95,6 +99,7 @@
|
||||
quo.components.wallet.account-overview.component-spec
|
||||
quo.components.wallet.account-permissions.component-spec
|
||||
quo.components.wallet.amount-input.component-spec
|
||||
quo.components.wallet.approval-label.component-spec
|
||||
quo.components.wallet.confirmation-progress.component-spec
|
||||
quo.components.wallet.keypair.component-spec
|
||||
quo.components.wallet.network-amount.component-spec
|
||||
|
||||
@@ -257,7 +257,7 @@
|
||||
|
||||
(def ^:private get-network-full-name
|
||||
{:eth :ethereum
|
||||
:opt :optimism
|
||||
:oeth :optimism
|
||||
:arb1 :arbitrum})
|
||||
|
||||
(def ^:private networks-short-name
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
(ns quo.foundations.common)
|
||||
|
||||
(def currency-label
|
||||
{:eur "€"
|
||||
:usd "$"})
|
||||
@@ -8,7 +8,6 @@
|
||||
(defn sheet
|
||||
[{:keys [max-height]}]
|
||||
{:position :absolute
|
||||
:overflow :hidden
|
||||
:bottom 0
|
||||
:left 0
|
||||
:right 0
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
[state]
|
||||
(set-input-error state (upper-limit-exceeded? state)))
|
||||
|
||||
(defn- set-input-value
|
||||
(defn set-input-value
|
||||
[state value]
|
||||
(-> state
|
||||
(assoc :value value)
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
|
||||
(defn view
|
||||
[{:keys [header footer customization-color footer-container-padding header-container-style
|
||||
gradient-cover?]
|
||||
gradient-cover? keyboard-should-persist-taps]
|
||||
:or {footer-container-padding (safe-area/get-top)}}
|
||||
& children]
|
||||
(reagent/with-let [scroll-view-ref (atom nil)
|
||||
@@ -108,7 +108,8 @@
|
||||
:padding-bottom (when @keyboard-did-show?
|
||||
@footer-container-height)}
|
||||
:always-bounce-vertical @keyboard-did-show?
|
||||
:shows-vertical-scroll-indicator false}
|
||||
:shows-vertical-scroll-indicator false
|
||||
:keyboard-should-persist-taps keyboard-should-persist-taps}
|
||||
(into [rn/view {:on-layout set-content-container-height}]
|
||||
children)]
|
||||
[rn/keyboard-avoiding-view
|
||||
|
||||
@@ -128,15 +128,6 @@
|
||||
:user-picture-male4 (js/require "../resources/images/mock2/user_picture_male4.png")
|
||||
:user-picture-male5 (js/require "../resources/images/mock2/user_picture_male5.png")})
|
||||
|
||||
(def services
|
||||
{:latamex (js/require "../resources/images/services/Latamex.png")
|
||||
:moonpay (js/require "../resources/images/services/Moonpay.png")
|
||||
:ramp (js/require "../resources/images/services/Ramp.png")})
|
||||
|
||||
(defn get-service-image
|
||||
[k]
|
||||
(get services k))
|
||||
|
||||
(defn get-mock-image
|
||||
[k]
|
||||
(get mock-images k))
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
(defonce camera-permission-granted? (reagent/atom false))
|
||||
|
||||
(defn- header
|
||||
[{:keys [title subtitle]}]
|
||||
[{:keys [title subtitle share-button?]}]
|
||||
[:<>
|
||||
[rn/view {:style style/header-container}
|
||||
[quo/button
|
||||
@@ -31,16 +31,17 @@
|
||||
:accessibility-label :close-scan-qr-code
|
||||
:on-press #(rf/dispatch [:navigate-back])}
|
||||
:i/close]
|
||||
[quo/button
|
||||
{:icon-only? true
|
||||
:type :grey
|
||||
:background :blur
|
||||
:size 32
|
||||
:accessibility-label :show-qr-button
|
||||
:on-press (fn []
|
||||
(rf/dispatch [:navigate-back])
|
||||
(rf/dispatch [:open-modal :screen/share-shell]))}
|
||||
:i/qr-code]]
|
||||
(when share-button?
|
||||
[quo/button
|
||||
{:icon-only? true
|
||||
:type :grey
|
||||
:background :blur
|
||||
:size 32
|
||||
:accessibility-label :show-qr-button
|
||||
:on-press (fn []
|
||||
(rf/dispatch [:navigate-back])
|
||||
(rf/dispatch [:open-modal :screen/share-shell]))}
|
||||
:i/qr-code])]
|
||||
[quo/text
|
||||
{:size :heading-1
|
||||
:weight :semi-bold
|
||||
@@ -195,7 +196,7 @@
|
||||
true)
|
||||
|
||||
(defn view
|
||||
[{:keys [title subtitle validate-fn on-success-scan error-message]}]
|
||||
[{:keys [title subtitle validate-fn on-success-scan error-message share-button?]}]
|
||||
(let [insets (safe-area/get-insets)
|
||||
qr-code-succeed? (reagent/atom false)
|
||||
qr-view-finder (reagent/atom {})
|
||||
@@ -237,8 +238,9 @@
|
||||
:set-rescan-timeout set-rescan-timeout}])
|
||||
[rn/view {:style (style/root-container (:top insets))}
|
||||
[header
|
||||
{:title title
|
||||
:subtitle subtitle}]
|
||||
{:title title
|
||||
:subtitle subtitle
|
||||
:share-button? share-button?}]
|
||||
(when (empty? @qr-view-finder)
|
||||
[:<>
|
||||
[rn/view {:style style/scan-qr-code-container}]
|
||||
|
||||
@@ -35,7 +35,8 @@
|
||||
(let [^js data (.parse js/JSON event-str)
|
||||
^js event-js (.-event data)
|
||||
type (.-type data)]
|
||||
(log/debug "Signal received" event-str)
|
||||
(log/debug "Signal received" {:type type})
|
||||
(log/trace "Signal received" {:payload event-str})
|
||||
(case type
|
||||
"node.login" {:fx [[:dispatch
|
||||
[:profile.login/login-node-signal
|
||||
|
||||
@@ -33,6 +33,8 @@
|
||||
args-with-biometric-btn])
|
||||
:on-success #(rf/dispatch [:standard-auth/on-biometric-success on-auth-success])
|
||||
:on-fail (fn [err]
|
||||
(rf/dispatch [:standard-auth/authorize-with-password
|
||||
args-with-biometric-btn])
|
||||
(when on-auth-fail (on-auth-fail err))
|
||||
(rf/dispatch [:standard-auth/on-biometric-fail err]))}]]]}))
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
:on-auth-success on-auth-success
|
||||
:on-auth-fail on-auth-fail
|
||||
:auth-button-label auth-button-label}]))
|
||||
(into [] (concat [theme] dependencies)))]
|
||||
(vec (conj dependencies on-auth-success on-auth-fail)))]
|
||||
[quo/slide-button
|
||||
{:container-style container-style
|
||||
:size size
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
(goog-define ALCHEMY_OPTIMISM_SEPOLIA_TOKEN "")
|
||||
(goog-define WALLET_CONNECT_PROJECT_ID "")
|
||||
|
||||
(def mainnet-rpc-url (str "https://eth-archival.gateway.pokt.network/v1/lb/" POKT_TOKEN))
|
||||
(def mainnet-rpc-url (str "https://eth-archival.rpc.grove.city/v1/" POKT_TOKEN))
|
||||
(def goerli-rpc-url (str "https://goerli-archival.gateway.pokt.network/v1/lb/" POKT_TOKEN))
|
||||
(def mainnet-chain-explorer-link "https://etherscan.io/address/")
|
||||
(def optimism-mainnet-chain-explorer-link "https://optimistic.etherscan.io/address/")
|
||||
@@ -105,32 +105,15 @@
|
||||
(def fast-create-community-enabled?
|
||||
(enabled? (get-config :FAST_CREATE_COMMUNITY_ENABLED "0")))
|
||||
|
||||
(def default-multiaccount
|
||||
{:preview-privacy? blank-preview?
|
||||
:wallet-legacy/visible-tokens {:mainnet #{:SNT}}
|
||||
:currency :usd
|
||||
:appearance 0
|
||||
:profile-pictures-show-to 2
|
||||
:profile-pictures-visibility 2
|
||||
:log-level log-level
|
||||
:webview-allow-permission-requests? false
|
||||
:opensea-enabled? false
|
||||
:link-previews-enabled-sites #{}
|
||||
:link-preview-request-enabled true})
|
||||
|
||||
(defn default-visible-tokens
|
||||
[chain]
|
||||
(get-in default-multiaccount [:wallet-legacy/visible-tokens chain]))
|
||||
|
||||
(def waku-nodes-config
|
||||
{:status.prod
|
||||
["enrtree://AL65EKLJAUXKKPG43HVTML5EFFWEZ7L4LOKTLZCLJASG4DSESQZEC@prod.status.nodes.status.im"]
|
||||
:status.test
|
||||
["enrtree://AIO6LUM3IVWCU2KCPBBI6FEH2W42IGK3ASCZHZGG5TIXUR56OGQUO@test.status.nodes.status.im"]
|
||||
:wakuv2.prod
|
||||
["enrtree://ANEDLO25QVUGJOUTQFRYKWX6P4Z4GKVESBMHML7DZ6YK4LGS5FC5O@prod.wakuv2.nodes.status.im"]
|
||||
:wakuv2.test
|
||||
["enrtree://AO47IDOLBKH72HIZZOXQP6NMRESAN7CHYWIBNXDXWRJRZWLODKII6@test.wakuv2.nodes.status.im"]})
|
||||
:waku.sandbox
|
||||
["enrtree://AIRVQ5DDA4FFWLRBCHJWUWOO6X6S4ZTZ5B667LQ6AJU6PEYDLRD5O@sandbox.waku.nodes.status.im"]
|
||||
:waku.test
|
||||
["enrtree://AOGYWMBYOUIMOENHXCHILPKY3ZRFEULMFI4DOM442QSZ73TT2A7VI@test.waku.nodes.status.im"]})
|
||||
|
||||
(def default-kdf-iterations 3200)
|
||||
|
||||
|
||||
@@ -251,7 +251,7 @@
|
||||
(def regx-community-universal-link #"((^https?://status.app/)|(^status-app://))c/([\x00-\x7F]+)$")
|
||||
(def regx-deep-link #"((^ethereum:.*)|(^status-app://[\x00-\x7F]+$))")
|
||||
(def regx-ens #"^(?=.{5,255}$)([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.[a-zA-Z]{2,}$")
|
||||
(def regx-multichain-address #"^(?:(?:eth:|arb1:|opt:)(?=:|))*0x[0-9a-fA-F]{40}$")
|
||||
(def regx-multichain-address #"^(?:(?:eth:|arb1:|oeth:)(?=:|))*0x[0-9a-fA-F]{40}$")
|
||||
|
||||
(def regx-address-contains #"(?i)0x[a-fA-F0-9]{40}")
|
||||
(def regx-starts-with-uuid #"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}")
|
||||
@@ -468,13 +468,13 @@
|
||||
|
||||
(def ^:const mainnet-short-name "eth")
|
||||
(def ^:const ethereum-short-name "eth")
|
||||
(def ^:const optimism-short-name "opt")
|
||||
(def ^:const optimism-short-name "oeth")
|
||||
(def ^:const arbitrum-short-name "arb1")
|
||||
|
||||
(def ^:const default-multichain-address-prefix "eth:opt:arb1:")
|
||||
(def ^:const default-multichain-address-prefix "eth:oeth:arb1:")
|
||||
|
||||
(def ^:const mainnet-abbreviated-name "Eth.")
|
||||
(def ^:const optimism-abbreviated-name "Opt.")
|
||||
(def ^:const optimism-abbreviated-name "Oeth.")
|
||||
(def ^:const arbitrum-abbreviated-name "Arb1.")
|
||||
|
||||
(def ^:const mainnet-network-name :mainnet)
|
||||
@@ -506,11 +506,18 @@
|
||||
(def ^:const send-type-stickers-buy 4)
|
||||
(def ^:const send-type-bridge 5)
|
||||
(def ^:const send-type-erc-721-transfer 6)
|
||||
(def ^:const send-type-erc-1155-transfer 7)
|
||||
|
||||
(def ^:const bridge-name-transfer "Transfer")
|
||||
(def ^:const bridge-name-erc-721-transfer "ERC721Transfer")
|
||||
(def ^:const bridge-name-erc-1155-transfer "ERC1155Transfer")
|
||||
(def ^:const bridge-name-hop "Hop")
|
||||
|
||||
(def ^:const wallet-contract-type-uknown 0)
|
||||
(def ^:const wallet-contract-type-erc-20 1)
|
||||
(def ^:const wallet-contract-type-erc-721 2)
|
||||
(def ^:const wallet-contract-type-erc-1155 3)
|
||||
|
||||
(def ^:const alert-banner-height 40)
|
||||
|
||||
(def ^:const status-hostname "status.app")
|
||||
|
||||
@@ -5,32 +5,25 @@
|
||||
[theme]
|
||||
{:flex 1
|
||||
:background-color (colors/theme-colors colors/white colors/neutral-95 theme)
|
||||
:justify-content :space-between
|
||||
:align-items :center
|
||||
:margin-top 2
|
||||
:padding-horizontal 20})
|
||||
|
||||
(def container-invalid
|
||||
{:style {:flex-direction :row
|
||||
:align-items :center
|
||||
:margin-top 8}})
|
||||
{:flex-direction :row
|
||||
:margin-top 8})
|
||||
|
||||
(defn text-description
|
||||
[theme]
|
||||
{:size :paragraph-2
|
||||
:weight :medium
|
||||
:style {:margin-bottom 6
|
||||
:color (colors/theme-colors colors/neutral-50 colors/neutral-40 theme)}})
|
||||
{:margin-bottom 6
|
||||
:color (colors/theme-colors colors/neutral-50 colors/neutral-40 theme)})
|
||||
|
||||
(def icon-invalid
|
||||
{:size 16
|
||||
:color colors/danger-50})
|
||||
|
||||
(def text-invalid
|
||||
{:size :paragraph-2
|
||||
:align :left
|
||||
:style {:margin-left 4
|
||||
:color colors/danger-50}})
|
||||
{:margin-left 4
|
||||
:color colors/danger-50})
|
||||
|
||||
(def input-and-scan-container
|
||||
{:flex-direction :row
|
||||
|
||||
@@ -18,7 +18,10 @@
|
||||
theme (quo.theme/use-theme)]
|
||||
(when primary-name
|
||||
[rn/view style/found-user
|
||||
[quo/text (style/text-description theme)
|
||||
[quo/text
|
||||
{:size :paragraph-2
|
||||
:weight :medium
|
||||
:style (style/text-description theme)}
|
||||
(i18n/label :t/user-found)]
|
||||
[rn/view (style/found-user-container theme)
|
||||
[quo/user-avatar
|
||||
@@ -105,7 +108,9 @@
|
||||
[message]
|
||||
[rn/view style/container-invalid
|
||||
[quo/icon :i/alert style/icon-invalid]
|
||||
[quo/text style/text-invalid
|
||||
[quo/text
|
||||
{:size :paragraph-2
|
||||
:style style/text-invalid}
|
||||
(i18n/label (or message :t/invalid-ens-or-key))]])
|
||||
|
||||
(defn navigate-back [] (rf/dispatch [:navigate-back]))
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
:emoji-id emoji-id}])))
|
||||
|
||||
(defn- on-long-press
|
||||
[{:keys [message-id emoji-id user-message-content reactions-order theme]}]
|
||||
[{:keys [message-id emoji-id user-message-content-render-fn reactions-order theme]}]
|
||||
(rf/dispatch
|
||||
[:reactions/get-authors-by-message-id
|
||||
{:message-id message-id
|
||||
@@ -31,19 +31,19 @@
|
||||
[drawers/reaction-authors
|
||||
{:reactions-order reactions-order
|
||||
:theme theme}])
|
||||
:selected-item (fn [] user-message-content)
|
||||
:selected-item (fn [] [user-message-content-render-fn
|
||||
{:hide-reactions? true}])
|
||||
:padding-bottom-override 0}]))}]))
|
||||
|
||||
(defn- on-press-add
|
||||
[{:keys [chat-id message-id user-message-content]}]
|
||||
[{:keys [chat-id message-id user-message-content-render-fn]}]
|
||||
(rf/dispatch [:dismiss-keyboard])
|
||||
(rf/dispatch
|
||||
[:show-bottom-sheet
|
||||
{:content (fn [] [drawers/reactions
|
||||
{:chat-id chat-id
|
||||
:message-id message-id}])
|
||||
:selected-item (fn []
|
||||
user-message-content)}]))
|
||||
:selected-item (fn [] [user-message-content-render-fn])}]))
|
||||
|
||||
(defn- add-emoji-key
|
||||
[reaction]
|
||||
@@ -52,23 +52,25 @@
|
||||
(get constants/reactions (:emoji-id reaction))))
|
||||
|
||||
(defn message-reactions-row
|
||||
[{:keys [message-id chat-id pinned-by preview?]} user-message-content]
|
||||
[{:keys [message-id chat-id pinned-by hide-new-reaction-button?]} user-message-content-render-fn]
|
||||
(let [theme (quo.theme/use-theme)
|
||||
reactions (rf/sub [:chats/message-reactions message-id chat-id])]
|
||||
[:<>
|
||||
(when (seq reactions)
|
||||
[quo/react
|
||||
{:container-style {:margin-left 44
|
||||
:margin-top 8}
|
||||
:reactions (map add-emoji-key reactions)
|
||||
:add-reaction? (not preview?)
|
||||
:use-case (when pinned-by :pinned)
|
||||
:on-press #(on-press (assoc % :message-id message-id))
|
||||
:on-long-press #(on-long-press (assoc %
|
||||
:message-id message-id
|
||||
:theme theme
|
||||
:reactions-order (map :emoji-id reactions)
|
||||
:user-message-content user-message-content))
|
||||
:on-press-add #(on-press-add {:chat-id chat-id
|
||||
:message-id message-id
|
||||
:user-message-content user-message-content})}])]))
|
||||
(when (seq reactions)
|
||||
[quo/react
|
||||
{:container-style {:margin-left 44
|
||||
:margin-top 8}
|
||||
:reactions (map add-emoji-key reactions)
|
||||
:hide-new-reaction-button? hide-new-reaction-button?
|
||||
:use-case (when pinned-by :pinned)
|
||||
:on-press #(on-press (assoc % :message-id message-id))
|
||||
:on-long-press #(on-long-press (assoc %
|
||||
:message-id message-id
|
||||
:theme theme
|
||||
:reactions-order (map :emoji-id
|
||||
reactions)
|
||||
:user-message-content-render-fn
|
||||
user-message-content-render-fn))
|
||||
:on-press-add #(on-press-add {:chat-id chat-id
|
||||
:message-id message-id
|
||||
:user-message-content-render-fn
|
||||
user-message-content-render-fn})}])))
|
||||
|
||||
@@ -16,22 +16,20 @@
|
||||
(assoc :margin-top 4)))
|
||||
|
||||
(defn user-message-content
|
||||
[{:keys [outgoing outgoing-status six-reactions? window-scale small-screen? preview?]}]
|
||||
[{:keys [outgoing outgoing-status six-reactions? window-scale small-screen?]}]
|
||||
{:border-radius 16
|
||||
:padding-horizontal (if preview? 12 8)
|
||||
:padding-top (if preview? 8 4)
|
||||
:padding-bottom (if preview?
|
||||
12
|
||||
(if (or small-screen?
|
||||
(and
|
||||
(> 3 window-scale)
|
||||
six-reactions?))
|
||||
(* message-padding-scaling-ratio window-scale)
|
||||
4))
|
||||
:padding-horizontal 8
|
||||
:padding-top 4
|
||||
:padding-bottom (if (or small-screen?
|
||||
(and
|
||||
(> 3 window-scale)
|
||||
six-reactions?))
|
||||
(* message-padding-scaling-ratio window-scale)
|
||||
4)
|
||||
:opacity (if (and outgoing (= outgoing-status :sending))
|
||||
0.5
|
||||
1)})
|
||||
|
||||
(def drawer-message-container
|
||||
{:padding-top 4
|
||||
:padding-bottom 8})
|
||||
:padding-bottom 4})
|
||||
|
||||
@@ -35,19 +35,19 @@
|
||||
(def delivery-state-showing-time-ms 3000)
|
||||
|
||||
(defn avatar-container
|
||||
[{:keys [content last-in-group? pinned-by quoted-message from]} show-reactions?
|
||||
in-reaction-and-action-menu? show-user-info? in-pinned-view?]
|
||||
[{:keys [content last-in-group? pinned-by quoted-message from]} hide-reactions?
|
||||
in-reaction-or-action-menu? show-user-info? in-pinned-view?]
|
||||
(if (or (and (seq (:response-to content))
|
||||
quoted-message)
|
||||
last-in-group?
|
||||
show-user-info?
|
||||
pinned-by
|
||||
(not show-reactions?)
|
||||
in-reaction-and-action-menu?)
|
||||
hide-reactions?
|
||||
in-reaction-or-action-menu?)
|
||||
[avatar/avatar
|
||||
{:public-key from
|
||||
:size :small
|
||||
:hide-ring? (or in-pinned-view? in-reaction-and-action-menu?)}]
|
||||
:hide-ring? (or in-pinned-view? in-reaction-or-action-menu?)}]
|
||||
[rn/view {:padding-top 4 :width 32}]))
|
||||
|
||||
(defn author
|
||||
@@ -58,15 +58,15 @@
|
||||
quoted-message
|
||||
from
|
||||
timestamp]}
|
||||
show-reactions?
|
||||
in-reaction-and-action-menu?
|
||||
hide-reactions?
|
||||
in-reaction-or-action-menu?
|
||||
show-user-info?]
|
||||
(when (or (and (seq (:response-to content)) quoted-message)
|
||||
last-in-group?
|
||||
pinned-by
|
||||
show-user-info?
|
||||
(not show-reactions?)
|
||||
in-reaction-and-action-menu?)
|
||||
hide-reactions?
|
||||
in-reaction-or-action-menu?)
|
||||
(let [[primary-name secondary-name] (rf/sub [:contacts/contact-two-names-by-identity from])
|
||||
{:keys [ens-verified added?]} (rf/sub [:contacts/contact-by-address from])]
|
||||
[quo/author
|
||||
@@ -158,8 +158,8 @@
|
||||
(defn user-message-content
|
||||
[]
|
||||
(let [show-delivery-state? (reagent/atom false)]
|
||||
(fn [{:keys [message-data context keyboard-shown? show-reactions? in-reaction-and-action-menu?
|
||||
show-user-info? preview?]}]
|
||||
(fn [{:keys [message-data context keyboard-shown? hide-reactions?
|
||||
in-reaction-or-action-menu? show-user-info?]}]
|
||||
(let [theme (quo.theme/use-theme)
|
||||
{:keys [content-type quoted-message content outgoing outgoing-status pinned-by pinned
|
||||
last-in-group? message-id chat-id]} message-data
|
||||
@@ -198,13 +198,13 @@
|
||||
:message-sent)
|
||||
:underlay-color (colors/theme-colors colors/neutral-5 colors/neutral-90 theme)
|
||||
:style (style/user-message-content
|
||||
{:first-in-group? (:first-in-group? message-data)
|
||||
:outgoing outgoing
|
||||
:outgoing-status outgoing-status
|
||||
:small-screen? rn/small-screen?
|
||||
:window-scale window-scale
|
||||
:six-reactions? six-reactions?
|
||||
:preview? preview?})
|
||||
{:first-in-group? (:first-in-group? message-data)
|
||||
:outgoing outgoing
|
||||
:outgoing-status outgoing-status
|
||||
:small-screen? rn/small-screen?
|
||||
:window-scale window-scale
|
||||
:six-reactions? six-reactions?
|
||||
:in-reaction-or-action-menu? in-reaction-or-action-menu?})
|
||||
:on-press (fn []
|
||||
(if (and platform/ios? keyboard-shown?)
|
||||
(do
|
||||
@@ -226,18 +226,16 @@
|
||||
[rn/view
|
||||
{:style {:padding-horizontal 4
|
||||
:flex-direction :row}}
|
||||
[avatar-container message-data show-reactions? in-reaction-and-action-menu? show-user-info?
|
||||
[avatar-container message-data hide-reactions? in-reaction-or-action-menu? show-user-info?
|
||||
(:in-pinned-view? context)]
|
||||
(into
|
||||
(if show-reactions?
|
||||
[rn/view]
|
||||
[gesture/scroll-view])
|
||||
(if hide-reactions?
|
||||
[gesture/scroll-view]
|
||||
[rn/view])
|
||||
[{:style {:margin-left 8
|
||||
:flex 1
|
||||
:gap 1
|
||||
:max-height (when-not show-reactions?
|
||||
(* 0.4 height))}}
|
||||
[author message-data show-reactions? in-reaction-and-action-menu? show-user-info?]
|
||||
:max-height (when hide-reactions? (* 0.4 height))}}
|
||||
[author message-data hide-reactions? in-reaction-or-action-menu? show-user-info?]
|
||||
(condp = content-type
|
||||
constants/content-type-text
|
||||
[content.text/text-content message-data context]
|
||||
@@ -272,17 +270,19 @@
|
||||
|
||||
(when @show-delivery-state?
|
||||
[status/status outgoing-status])])]
|
||||
(when show-reactions?
|
||||
[reactions/message-reactions-row (assoc message-data :preview? preview?)
|
||||
[rn/view {:pointer-events :none}
|
||||
[user-message-content
|
||||
{:theme theme
|
||||
:message-data message-data
|
||||
:context context
|
||||
:in-reaction-and-action-menu? true
|
||||
:keyboard-shown? keyboard-shown?
|
||||
:preview? true
|
||||
:show-reactions? true}]]])]]))))
|
||||
(when-not hide-reactions?
|
||||
[reactions/message-reactions-row (assoc message-data :hide-new-reaction-button? true)
|
||||
(fn [override-opts]
|
||||
[rn/view
|
||||
{:pointer-events :none
|
||||
:style style/drawer-message-container}
|
||||
[user-message-content
|
||||
(merge {:theme theme
|
||||
:message-data message-data
|
||||
:context context
|
||||
:in-reaction-or-action-menu? true
|
||||
:keyboard-shown? keyboard-shown?}
|
||||
override-opts)]])])]]))))
|
||||
|
||||
(defn on-long-press
|
||||
[{:keys [deleted? deleted-for-me?] :as message-data} context keyboard-shown?]
|
||||
@@ -299,12 +299,11 @@
|
||||
{:pointer-events :none
|
||||
:style style/drawer-message-container}
|
||||
[user-message-content
|
||||
{:message-data message-data
|
||||
:context context
|
||||
:keyboard-shown? keyboard-shown?
|
||||
:in-reaction-and-action-menu? true
|
||||
:show-user-info? false
|
||||
:show-reactions? true}]]))}]))
|
||||
{:message-data message-data
|
||||
:context context
|
||||
:keyboard-shown? keyboard-shown?
|
||||
:in-reaction-or-action-menu? true
|
||||
:show-user-info? false}]]))}]))
|
||||
|
||||
(defn check-if-system-message?
|
||||
[content-type]
|
||||
@@ -349,5 +348,4 @@
|
||||
[user-message-content
|
||||
{:message-data message-data
|
||||
:context context
|
||||
:keyboard-shown? keyboard-shown?
|
||||
:show-reactions? true}])]))
|
||||
:keyboard-shown? keyboard-shown?}])]))
|
||||
|
||||
@@ -105,61 +105,67 @@
|
||||
;; https://github.com/status-im/status-mobile/issues/15298 is implemented
|
||||
(not= content-type constants/content-type-image)
|
||||
(not= content-type constants/content-type-audio))
|
||||
[{:type :main
|
||||
:on-press #(rf/dispatch [:chat.ui/edit-message message-data])
|
||||
:label (i18n/label :t/edit-message)
|
||||
:icon :i/edit
|
||||
:id :edit}])
|
||||
[{:type :main
|
||||
:on-press #(rf/dispatch [:chat.ui/edit-message message-data])
|
||||
:label (i18n/label :t/edit-message)
|
||||
:icon :i/edit
|
||||
:accessibility-label :edit-message
|
||||
:id :edit}])
|
||||
(when (and able-to-send-message? (not= outgoing-status :sending) (not (or deleted? deleted-for-me?)))
|
||||
[{:type :main
|
||||
:on-press #(rf/dispatch [:chat.ui/reply-to-message message-data])
|
||||
:label (i18n/label :t/message-reply)
|
||||
:icon :i/reply
|
||||
:id :reply}])
|
||||
[{:type :main
|
||||
:on-press #(rf/dispatch [:chat.ui/reply-to-message message-data])
|
||||
:label (i18n/label :t/message-reply)
|
||||
:icon :i/reply
|
||||
:accessibility-label :reply-message
|
||||
:id :reply}])
|
||||
(when (and (not (or deleted? deleted-for-me?))
|
||||
(not= content-type constants/content-type-audio))
|
||||
[{:type :main
|
||||
:on-press #(clipboard/set-string
|
||||
(reply/get-quoted-text-with-mentions
|
||||
(get content :parsed-text)))
|
||||
:label (i18n/label :t/copy-text)
|
||||
:icon :i/copy
|
||||
:id :copy}])
|
||||
[{:type :main
|
||||
:on-press #(clipboard/set-string
|
||||
(reply/get-quoted-text-with-mentions
|
||||
(get content :parsed-text)))
|
||||
:label (i18n/label :t/copy-text)
|
||||
:accessibility-label :copy-text
|
||||
:icon :i/copy
|
||||
:id :copy}])
|
||||
;; pinning images are temporarily disabled
|
||||
(when (and message-pin-enabled
|
||||
(not= content-type constants/content-type-image))
|
||||
[{:type :main
|
||||
:on-press #(pin-message message-data)
|
||||
:label (i18n/label (if pinned-by
|
||||
(if community? :t/unpin-from-channel :t/unpin-from-chat)
|
||||
(if community? :t/pin-to-channel :t/pin-to-chat)))
|
||||
:icon :i/pin
|
||||
:id (if pinned-by :unpin :pin)}])
|
||||
[{:type :main
|
||||
:on-press #(pin-message message-data)
|
||||
:label (i18n/label (if pinned-by
|
||||
(if community? :t/unpin-from-channel :t/unpin-from-chat)
|
||||
(if community? :t/pin-to-channel :t/pin-to-chat)))
|
||||
:accessibility-label (if pinned-by :unpin-message :pin-message)
|
||||
:icon :i/pin
|
||||
:id (if pinned-by :unpin :pin)}])
|
||||
(when-not (or deleted? deleted-for-me?)
|
||||
[{:type :danger
|
||||
:on-press (fn []
|
||||
(rf/dispatch
|
||||
[:hide-bottom-sheet])
|
||||
(rf/dispatch [:chat.ui/delete-message-for-me message-data
|
||||
config/delete-message-for-me-undo-time-limit-ms]))
|
||||
[{:type :danger
|
||||
:on-press (fn []
|
||||
(rf/dispatch
|
||||
[:hide-bottom-sheet])
|
||||
(rf/dispatch [:chat.ui/delete-message-for-me message-data
|
||||
config/delete-message-for-me-undo-time-limit-ms]))
|
||||
|
||||
:label (i18n/label :t/delete-for-me)
|
||||
:icon :i/delete
|
||||
:id :delete-for-me}])
|
||||
:label (i18n/label :t/delete-for-me)
|
||||
:accessibility-label :delete-for-me
|
||||
:icon :i/delete
|
||||
:id :delete-for-me}])
|
||||
(when (cond
|
||||
deleted? false
|
||||
outgoing true
|
||||
community? can-delete-message-for-everyone?
|
||||
group-chat group-admin?
|
||||
:else false)
|
||||
[{:type :danger
|
||||
:on-press (fn []
|
||||
(rf/dispatch [:hide-bottom-sheet])
|
||||
(rf/dispatch [:chat.ui/delete-message message-data
|
||||
config/delete-message-undo-time-limit-ms]))
|
||||
:label (i18n/label :t/delete-for-everyone)
|
||||
:icon :i/delete
|
||||
:id :delete-for-all}])))
|
||||
[{:type :danger
|
||||
:on-press (fn []
|
||||
(rf/dispatch [:hide-bottom-sheet])
|
||||
(rf/dispatch [:chat.ui/delete-message message-data
|
||||
config/delete-message-undo-time-limit-ms]))
|
||||
:label (i18n/label :t/delete-for-everyone)
|
||||
:accessibility-label :delete-for-everyone
|
||||
:icon :i/delete
|
||||
:id :delete-for-all}])))
|
||||
|
||||
(defn extract-id
|
||||
[reactions id]
|
||||
@@ -180,7 +186,7 @@
|
||||
[rn/view
|
||||
{:style {:flex-direction :row
|
||||
:justify-content :space-between
|
||||
:padding-horizontal 30
|
||||
:padding-horizontal 22
|
||||
:padding-top 5
|
||||
:padding-bottom 15}}
|
||||
(for [[id reaction-name] constants/reactions
|
||||
@@ -221,10 +227,10 @@
|
||||
(for [action main-actions]
|
||||
(let [on-press (:on-press action)]
|
||||
^{:key (:id action)}
|
||||
[quo/menu-item
|
||||
[quo/drawer-action
|
||||
{:type :main
|
||||
:title (:label action)
|
||||
:accessibility-label (:label action)
|
||||
:accessibility-label (:accessibility-label action)
|
||||
:icon (:icon action)
|
||||
:on-press (fn []
|
||||
(rf/dispatch [:hide-bottom-sheet])
|
||||
@@ -238,10 +244,10 @@
|
||||
(for [action danger-actions]
|
||||
(let [on-press (:on-press action)]
|
||||
^{:key (:id action)}
|
||||
[quo/menu-item
|
||||
[quo/drawer-action
|
||||
{:type :danger
|
||||
:title (:label action)
|
||||
:accessibility-label (:label action)
|
||||
:accessibility-label (:accessibility-label action)
|
||||
:icon (:icon action)
|
||||
:on-press (fn []
|
||||
(rf/dispatch [:hide-bottom-sheet])
|
||||
@@ -255,10 +261,10 @@
|
||||
(for [action admin-actions]
|
||||
(let [on-press (:on-press action)]
|
||||
^{:key (:id action)}
|
||||
[quo/menu-item
|
||||
[quo/drawer-action
|
||||
{:type :danger
|
||||
:title (:label action)
|
||||
:accessibility-label (:label action)
|
||||
:accessibility-label (:accessibility-label action)
|
||||
:icon (:icon action)
|
||||
:on-press (fn []
|
||||
(rf/dispatch [:hide-bottom-sheet])
|
||||
|
||||
@@ -114,20 +114,20 @@
|
||||
|
||||
(defn list-footer-avatar
|
||||
[{:keys [distance-from-list-top display-name online? profile-picture theme group-chat color
|
||||
emoji chat-type chat-name last-message]}]
|
||||
emoji chat-type chat-name empty-chat?]}]
|
||||
(let [scale (reanimated/interpolate
|
||||
distance-from-list-top
|
||||
[0 (if (seq last-message) messages.constants/header-container-top-margin 0)]
|
||||
[0 (if empty-chat? 0 messages.constants/header-container-top-margin)]
|
||||
[1 0.4]
|
||||
messages.constants/default-extrapolation-option)
|
||||
top (reanimated/interpolate
|
||||
distance-from-list-top
|
||||
[0 (if (seq last-message) messages.constants/header-container-top-margin 0)]
|
||||
[0 (if empty-chat? 0 messages.constants/header-container-top-margin)]
|
||||
[-44 -12]
|
||||
messages.constants/default-extrapolation-option)
|
||||
left (reanimated/interpolate
|
||||
distance-from-list-top
|
||||
[0 (if (seq last-message) messages.constants/header-container-top-margin 0)]
|
||||
[0 (if empty-chat? 0 messages.constants/header-container-top-margin)]
|
||||
[16 -8]
|
||||
messages.constants/default-extrapolation-option)
|
||||
community-channel? (= chat-type constants/community-chat-type)]
|
||||
@@ -155,15 +155,15 @@
|
||||
:size :big}])]))
|
||||
|
||||
(defn chat-display-name
|
||||
[{:keys [distance-from-list-top display-name contact theme last-message]}]
|
||||
[{:keys [distance-from-list-top display-name contact theme empty-chat?]}]
|
||||
(let [top (reanimated/interpolate
|
||||
distance-from-list-top
|
||||
[0 (if (seq last-message) messages.constants/header-container-top-margin 0)]
|
||||
[0 (if empty-chat? 0 messages.constants/header-container-top-margin)]
|
||||
[0 -35]
|
||||
messages.constants/default-extrapolation-option)
|
||||
left (reanimated/interpolate
|
||||
distance-from-list-top
|
||||
[0 (if (seq last-message) messages.constants/header-container-top-margin 0)]
|
||||
[0 (if empty-chat? 0 messages.constants/header-container-top-margin)]
|
||||
[0 40]
|
||||
messages.constants/default-extrapolation-option)]
|
||||
[reanimated/view
|
||||
@@ -187,36 +187,36 @@
|
||||
muted? (and muted (some? muted-till))
|
||||
mute-chat-label (if community-channel? :t/mute-channel :t/mute-chat)
|
||||
unmute-chat-label (if community-channel? :t/unmute-channel :t/unmute-chat)]
|
||||
|
||||
[quo/channel-actions
|
||||
{:actions [{:accessibility-label :action-button-pinned
|
||||
:big? true
|
||||
:label (or latest-pin-text (i18n/label :t/no-pinned-messages))
|
||||
:customization-color cover-bg-color
|
||||
:icon :i/pin
|
||||
:counter-value pins-count
|
||||
:on-press (fn []
|
||||
(rf/dispatch [:pin-message/show-pins-bottom-sheet
|
||||
chat-id]))}
|
||||
{:accessibility-label :action-button-mute
|
||||
:label (i18n/label (if muted
|
||||
unmute-chat-label
|
||||
mute-chat-label))
|
||||
:customization-color cover-bg-color
|
||||
:icon (if muted? :i/activity-center :i/muted)
|
||||
:on-press (fn []
|
||||
(if muted?
|
||||
(home.actions/unmute-chat-action chat-id)
|
||||
(home.actions/mute-chat-action chat-id
|
||||
chat-type
|
||||
muted?)))}]}]))
|
||||
{:actions
|
||||
[{:accessibility-label :action-button-pinned
|
||||
:big? true
|
||||
:label (if (pos? pins-count) latest-pin-text (i18n/label :t/no-pinned-messages))
|
||||
:customization-color cover-bg-color
|
||||
:icon :i/pin
|
||||
:counter-value pins-count
|
||||
:on-press (fn []
|
||||
(rf/dispatch [:pin-message/show-pins-bottom-sheet
|
||||
chat-id]))}
|
||||
{:accessibility-label :action-button-mute
|
||||
:label (i18n/label (if muted
|
||||
unmute-chat-label
|
||||
mute-chat-label))
|
||||
:customization-color cover-bg-color
|
||||
:icon (if muted? :i/activity-center :i/muted)
|
||||
:on-press (fn []
|
||||
(if muted?
|
||||
(home.actions/unmute-chat-action chat-id)
|
||||
(home.actions/mute-chat-action chat-id
|
||||
chat-type
|
||||
muted?)))}]}]))
|
||||
|
||||
(defn bio-and-actions
|
||||
[{:keys [distance-from-list-top bio chat-id customization-color last-message description]}]
|
||||
[{:keys [distance-from-list-top bio chat-id customization-color empty-chat? description]}]
|
||||
(let [has-bio (seq (or bio description))
|
||||
top (reanimated/interpolate
|
||||
distance-from-list-top
|
||||
[0 (if (seq last-message) messages.constants/header-container-top-margin 0)]
|
||||
[0 (if empty-chat? 0 messages.constants/header-container-top-margin)]
|
||||
[(if has-bio 8 16) (if has-bio -28 -20)]
|
||||
messages.constants/default-extrapolation-option)]
|
||||
[reanimated/view
|
||||
@@ -227,43 +227,43 @@
|
||||
|
||||
(defn footer-component
|
||||
[{:keys [chat distance-from-list-top customization-color]}]
|
||||
(let [theme (quo.theme/use-theme)
|
||||
(let [theme (quo.theme/use-theme)
|
||||
{:keys [chat-id chat-name emoji chat-type
|
||||
group-chat color description
|
||||
last-message]} chat
|
||||
display-name (cond
|
||||
(= chat-type constants/one-to-one-chat-type)
|
||||
(first (rf/sub [:contacts/contact-two-names-by-identity chat-id]))
|
||||
(= chat-type constants/community-chat-type)
|
||||
(str "# " chat-name)
|
||||
:else (str emoji chat-name))
|
||||
{:keys [bio]} (rf/sub [:contacts/contact-by-identity chat-id])
|
||||
online? (rf/sub [:visibility-status-updates/online? chat-id])
|
||||
contact (when-not group-chat
|
||||
(rf/sub [:contacts/contact-by-address chat-id]))
|
||||
photo-path (if group-chat
|
||||
(rf/sub [:chats/group-chat-image chat-id])
|
||||
(rf/sub [:chats/photo-path chat-id]))
|
||||
top-margin (+ (safe-area/get-top)
|
||||
messages.constants/top-bar-height
|
||||
messages.constants/header-container-top-margin
|
||||
32)
|
||||
background-color (colors/theme-colors
|
||||
(colors/resolve-color customization-color theme 20)
|
||||
(colors/resolve-color customization-color theme 40)
|
||||
theme)
|
||||
bottom (reanimated/interpolate
|
||||
distance-from-list-top
|
||||
[0 messages.constants/header-container-top-margin]
|
||||
[32 -4]
|
||||
messages.constants/default-extrapolation-option)
|
||||
background-opacity (reanimated/interpolate
|
||||
distance-from-list-top
|
||||
[messages.constants/header-container-top-margin
|
||||
(+ messages.constants/header-animation-distance
|
||||
messages.constants/header-container-top-margin)]
|
||||
[1 0]
|
||||
messages.constants/default-extrapolation-option)]
|
||||
empty-chat?]} chat
|
||||
display-name (cond
|
||||
(= chat-type constants/one-to-one-chat-type)
|
||||
(first (rf/sub [:contacts/contact-two-names-by-identity chat-id]))
|
||||
(= chat-type constants/community-chat-type)
|
||||
(str "# " chat-name)
|
||||
:else (str emoji chat-name))
|
||||
{:keys [bio]} (rf/sub [:contacts/contact-by-identity chat-id])
|
||||
online? (rf/sub [:visibility-status-updates/online? chat-id])
|
||||
contact (when-not group-chat
|
||||
(rf/sub [:contacts/contact-by-address chat-id]))
|
||||
photo-path (if group-chat
|
||||
(rf/sub [:chats/group-chat-image chat-id])
|
||||
(rf/sub [:chats/photo-path chat-id]))
|
||||
top-margin (+ (safe-area/get-top)
|
||||
messages.constants/top-bar-height
|
||||
messages.constants/header-container-top-margin
|
||||
32)
|
||||
background-color (colors/theme-colors
|
||||
(colors/resolve-color customization-color theme 20)
|
||||
(colors/resolve-color customization-color theme 40)
|
||||
theme)
|
||||
bottom (reanimated/interpolate
|
||||
distance-from-list-top
|
||||
[0 messages.constants/header-container-top-margin]
|
||||
[32 -4]
|
||||
messages.constants/default-extrapolation-option)
|
||||
background-opacity (reanimated/interpolate
|
||||
distance-from-list-top
|
||||
[messages.constants/header-container-top-margin
|
||||
(+ messages.constants/header-animation-distance
|
||||
messages.constants/header-container-top-margin)]
|
||||
[1 0]
|
||||
messages.constants/default-extrapolation-option)]
|
||||
[:<>
|
||||
[reanimated/view
|
||||
{:style (style/background-container background-color background-opacity top-margin)}]
|
||||
@@ -281,21 +281,21 @@
|
||||
:emoji emoji
|
||||
:chat-type chat-type
|
||||
:chat-name chat-name
|
||||
:last-message last-message}]
|
||||
:empty-chat? empty-chat?}]
|
||||
[chat-display-name
|
||||
{:distance-from-list-top distance-from-list-top
|
||||
:display-name display-name
|
||||
:theme theme
|
||||
:contact contact
|
||||
:group-chat group-chat
|
||||
:last-message last-message}]
|
||||
:empty-chat? empty-chat?}]
|
||||
[bio-and-actions
|
||||
{:distance-from-list-top distance-from-list-top
|
||||
:bio bio
|
||||
:chat-id chat-id
|
||||
:customization-color customization-color
|
||||
:description description
|
||||
:last-message last-message}]]]]))
|
||||
:empty-chat? empty-chat?}]]]]))
|
||||
|
||||
(defn list-footer
|
||||
[props]
|
||||
|
||||
@@ -50,18 +50,26 @@
|
||||
messages.constants/top-bar-height
|
||||
(if platform/ios?
|
||||
messages.constants/content-animation-start-position-ios
|
||||
messages.constants/content-animation-start-position-android))]
|
||||
messages.constants/content-animation-start-position-android))
|
||||
community-channel? (= chat-type constants/community-chat-type)]
|
||||
[reanimated/view
|
||||
{:style (style/header-content-container header-opacity header-position)}
|
||||
(if group-chat
|
||||
(cond
|
||||
community-channel?
|
||||
[quo/channel-avatar
|
||||
{:size :size-32
|
||||
:full-name chat-name
|
||||
:customization-color color
|
||||
:emoji (when-not (string/blank? emoji)
|
||||
(string/trim emoji))}]
|
||||
group-chat
|
||||
[quo/group-avatar
|
||||
{:customization-color color
|
||||
:size :size-32
|
||||
:picture photo-path
|
||||
:override-theme :dark
|
||||
:emoji (when-not (string/blank? emoji)
|
||||
(string/trim emoji))
|
||||
:chat-name chat-name}]
|
||||
|
||||
:else
|
||||
[quo/user-avatar
|
||||
{:full-name display-name
|
||||
:online? online?
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user