Update react navigation and rework wrapper

Get rid of navigation wrapper

Use new API to declare navigation

Update tabbar component

Update to use new navigation events

Add ios presentation modal

Navigation cleanups

Android specific updates

Use letsubs for stack subscriptions

Keycard did load event backward compatibility

Fix tabbar and wallet on-focus bad rebase

Do not keep welcome screen into the stack

Comment outdated test

Fix rebase on home PR

Cancel back button on screens which can't be popped

Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
This commit is contained in:
Gheorghe Pinzaru 2020-02-25 14:31:04 +03:00
parent 61d465a343
commit d823a2082a
No known key found for this signature in database
GPG Key ID: C9A094959935A952
67 changed files with 2828 additions and 3321 deletions

View File

@ -296,6 +296,10 @@ dependencies {
implementation jscFlavor
}
// react-native-screens
implementation 'androidx.appcompat:appcompat:1.1.0-rc01'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha02'
implementation 'androidx.multidex:multidex:2.0.1' // only needed if minSdkVersion is less than 21 (https://developer.android.com/studio/build/multidex)
implementation project(':react-native-dialogs')
// Force using exact RN version instead of relying on gradle dependency resolution

View File

@ -34,8 +34,10 @@
"react-native/Libraries/vendor/emitter/EventEmitter"
"react-native-background-timer"
"react-native-fetch-polyfill"
"react-navigation"
"react-native-navigation-twopane"
"@react-navigation/native"
"@react-navigation/stack"
"@react-navigation/bottom-tabs"
;; "react-native-navigation-twopane"
"hi-base32"
"functional-red-black-tree"
"react-native-mail"
@ -74,9 +76,8 @@
"react-native-desktop-notification"
"react-native-desktop-gesture-handler"
"web3-utils"
"react-navigation"
"functional-red-black-tree"
"react-native-navigation-twopane"
;; "react-native-navigation-twopane"
"hi-base32"]
;; Resoures

View File

@ -246,10 +246,9 @@
;; KeyboardAvoidingView
(defn keyboard-avoiding-view [props & children]
(let [view-element (if platform/ios?
[keyboard-avoiding-view-class (merge {:behavior :padding} props)]
[view props])]
(vec (concat view-element children))))
(into [keyboard-avoiding-view-class
(merge (when platform/ios? {:behavior :padding}) props)]
children))
(defn scroll-view [props & children]
(vec (conj children props scroll-view-class)))
@ -271,51 +270,7 @@
[activity-indicator {:animating true}]])
comp)))
(defn navigation-wrapper
"Wraps component so that it will be shown only when current-screen is one of views"
[{:keys [component views current-view hide?]
:or {hide? false}}]
(let [current-view? (if (set? views)
(views current-view)
(= views current-view))
style (if current-view?
{:flex 1
:zIndex 0}
{:opacity 0
:flex 0
:zIndex -1})
component' (if (fn? component) [component] component)]
(when (or (not hide?) (and hide? current-view?))
(if hide?
component'
[view style (if (fn? component) [component] component)]))))
(defn with-empty-preview [comp]
[with-activity-indicator
{:preview [view {}]}
comp])
(def safe-area-provider (adapt-class (object/get js-dependencies/safe-area-context "SafeAreaProvider")))
(def safe-area-consumer (adapt-class (object/get js-dependencies/safe-area-context "SafeAreaConsumer")))
(defn create-main-screen-view [current-view]
(fn [props & children]
(apply
vector
(adapt-class (object/get js-dependencies/safe-area-context "SafeAreaView"))
(cond-> props
(= current-view :qr-scanner)
(assoc :background-color :black))
children)))
(defn main-screen-modal-view [current-view & components]
[(create-main-screen-view current-view)
styles/flex
[keyboard-avoiding-view
(merge {:flex 1 :flex-direction :column}
(when platform/android?
{:background-color :white}))
(apply vector view styles/flex components)]])
(def safe-area-view (adapt-class (object/get js-dependencies/safe-area-context "SafeAreaView")))

View File

@ -8,12 +8,12 @@
:sha "b0d3b0f016f217c6a397a54e5eba9486471fb172"
:deps/manifest :deps}
com.andrewmcveigh/cljs-time {:mvn/version "0.5.2"}
binaryage/oops {:mvn/version "0.7.0"}
status-im/timbre {:mvn/version "4.10.0-2-status"}
com.taoensso/encore {:mvn/version "2.94.0"}
hickory {:mvn/version "0.7.1"}
cljs-bean {:mvn/version "1.3.0"}
mvxcvi/alphabase {:mvn/version "1.0.0"}
rasom/cljs-react-navigation {:mvn/version "0.1.4"}}
mvxcvi/alphabase {:mvn/version "1.0.0"}}
:aliases
{:dev {:extra-deps

View File

@ -244,9 +244,11 @@ PODS:
- React-cxxreact (= 0.61.5)
- React-jsi (= 0.61.5)
- ReactCommon/jscallinvoker (= 0.61.5)
- RNCMaskedView (0.1.6):
- React
- RNFS (2.14.1):
- React
- RNGestureHandler (1.5.2):
- RNGestureHandler (1.5.3):
- React
- RNImageCropPicker (0.25.3):
- QBImagePickerController
@ -257,7 +259,9 @@ PODS:
- React
- RNLanguages (3.0.2):
- React
- RNScreens (1.0.0-alpha.23):
- RNReanimated (1.7.0):
- React
- RNScreens (2.0.0-alpha.25):
- React
- RNSVG (9.11.1):
- React
@ -310,11 +314,13 @@ DEPENDENCIES:
- React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
- ReactCommon/jscallinvoker (from `../node_modules/react-native/ReactCommon`)
- ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
- "RNCMaskedView (from `../node_modules/@react-native-community/masked-view`)"
- RNFS (from `../node_modules/react-native-fs`)
- RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
- RNImageCropPicker (from `../node_modules/react-native-image-crop-picker`)
- RNKeychain (from `../node_modules/react-native-keychain`)
- RNLanguages (from `../node_modules/react-native-languages`)
- RNReanimated (from `../node_modules/react-native-reanimated`)
- RNScreens (from `../node_modules/react-native-screens`)
- RNSVG (from `../node_modules/react-native-svg`)
- SQLCipher (~> 3.0)
@ -399,6 +405,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/Libraries/Vibration"
ReactCommon:
:path: "../node_modules/react-native/ReactCommon"
RNCMaskedView:
:path: "../node_modules/@react-native-community/masked-view"
RNFS:
:path: "../node_modules/react-native-fs"
RNGestureHandler:
@ -409,6 +417,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native-keychain"
RNLanguages:
:path: "../node_modules/react-native-languages"
RNReanimated:
:path: "../node_modules/react-native-reanimated"
RNScreens:
:path: "../node_modules/react-native-screens"
RNSVG:
@ -455,12 +465,14 @@ SPEC CHECKSUMS:
React-RCTText: 9ccc88273e9a3aacff5094d2175a605efa854dbe
React-RCTVibration: a49a1f42bf8f5acf1c3e297097517c6b3af377ad
ReactCommon: 198c7c8d3591f975e5431bec1b0b3b581aa1c5dd
RNCMaskedView: a88953beefbd347a29072d9eba90e42945fe291e
RNFS: a8fbe7060fa49157d819466404794ad9c58e58cf
RNGestureHandler: 946a7691e41df61e2c4b1884deab41a4cdc3afff
RNGestureHandler: 02905abe54e1f6e59c081a10b4bd689721e17aa6
RNImageCropPicker: bfb3ea9c8622f290532e2fe63f369e0d5a52f597
RNKeychain: 216f37338fcb9e5c3a2530f1e3295f737a690cb1
RNLanguages: 962e562af0d34ab1958d89bcfdb64fafc37c513e
RNScreens: f28b48b8345f2f5f39ed6195518291515032a788
RNReanimated: 031fe8d9ea93c2bd689a40f05320ef9d96f74d7f
RNScreens: 031d10e2b648afc9546f16b6a786d2efc6870310
RNSVG: be27aa7c58819f97399388ae53d7fa0572f32c7f
RSKImageCropper: a446db0e8444a036b34f3c43db01b2373baa4b2a
SQLCipher: f9fcf29b2e59ced7defc2a2bdd0ebe79b40d4990

View File

@ -6,7 +6,11 @@
"start": "react-native start"
},
"dependencies": {
"@react-native-community/masked-view": "^0.1.6",
"@react-native-community/netinfo": "^4.4.0",
"@react-navigation/bottom-tabs": "^5.1.1",
"@react-navigation/native": "^5.0.9",
"@react-navigation/stack": "^5.1.1",
"bignumber.js": "git+https://github.com/status-im/bignumber.js.git#v4.0.2-status",
"buffer": "^5.4.2",
"chance": "^1.1.0",
@ -27,15 +31,16 @@
"react-native-dialogs": "^1.0.4",
"react-native-fetch-polyfill": "^1.1.2",
"react-native-fs": "^2.14.1",
"react-native-gesture-handler": "^1.3.0",
"react-native-gesture-handler": "^1.5.3",
"react-native-image-crop-picker": "^0.25.0",
"react-native-image-resizer": "git+https://github.com/status-im/react-native-image-resizer.git#1.0.0-1-status",
"react-native-keychain": "git+https://github.com/status-im/react-native-keychain.git#v.3.0.0-status",
"react-native-languages": "^3.0.2",
"react-native-mail": "git+https://github.com/status-im/react-native-mail.git#v4.0.0-status",
"react-native-navigation-twopane": "git+https://github.com/status-im/react-native-navigation-twopane.git#v0.0.2-status",
"react-native-safe-area-context": "^0.6.0",
"react-native-screens": "^1.0.0-alpha.23",
"react-native-reanimated": "^1.7.0",
"react-native-safe-area-context": "^0.7.3",
"react-native-screens": "^2.0.0-alpha.25",
"react-native-shake": "^3.3.1",
"react-native-splash-screen": "^3.2.0",
"react-native-status-keycard": "git+https://github.com/status-im/react-native-status-keycard.git#v2.5.20",
@ -43,7 +48,6 @@
"react-native-touch-id": "^4.4.1",
"react-native-webview": "^6.11.1",
"react-native-webview-bridge": "git+https://github.com/status-im/react-native-webview-bridge.git#fix/community-webview",
"react-navigation": "^3.11.0",
"web3-utils": "^1.2.1"
},
"devDependencies": {

View File

@ -1004,29 +1004,57 @@
wcwidth "^1.0.1"
ws "^1.1.0"
"@react-native-community/masked-view@^0.1.6":
version "0.1.6"
resolved "https://registry.yarnpkg.com/@react-native-community/masked-view/-/masked-view-0.1.6.tgz#c7f2ac187c1f25aa8c30d11baa8f4398eca3bb84"
integrity sha512-PpMoeXwPUoldCRKDuSi+zK5rT+sJTW6ri6RdGPkSKRzU77Q1d9IaR0O5IKvBj0XSdL3p+dcOa05gk35aGDffBQ==
"@react-native-community/netinfo@^4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@react-native-community/netinfo/-/netinfo-4.4.0.tgz#a18eb9ba082b6aca6add004b4a918250ad7d13bc"
integrity sha512-qqNWMOsrDjj/daqV21ID2T8mNUjZD4pdx3PuWyE65gzKh2w+oMnzKb+J0NbLyZPn3wwLwU1+Cpf58A0ff5szjQ==
"@react-navigation/core@~3.5.1":
version "3.5.1"
resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-3.5.1.tgz#7a2339fca3496979305fb3a8ab88c2ca8d8c214d"
integrity sha512-q7NyhWVYOhVIWqL2GZKa6G78YarXaVTTtOlSDkvy4ZIggo40wZzamlnrJRvsaQX46gsgw45FAWb5SriHh8o7eA==
"@react-navigation/bottom-tabs@^5.1.1":
version "5.1.1"
resolved "https://registry.yarnpkg.com/@react-navigation/bottom-tabs/-/bottom-tabs-5.1.1.tgz#04636a6b0c2105228f81d6b05aab285a1fcc7ff9"
integrity sha512-3eKoLgBsRKXFQoWv9co6bXr2DjlRDtgaS1XZ/2LpOs27lDthShGdVkWzTVaFZ6aGf6pOhUaeKtd8wX+jkUXk0A==
dependencies:
hoist-non-react-statics "^3.3.0"
path-to-regexp "^1.7.0"
query-string "^6.4.2"
react-is "^16.8.6"
color "^3.1.2"
react-native-iphone-x-helper "^1.2.1"
"@react-navigation/native@~3.6.2":
version "3.6.2"
resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-3.6.2.tgz#3634697b6350cc5189657ae4551f2d52b57fbbf0"
integrity sha512-Cybeou6N82ZeRmgnGlu+wzlV3z5BZQR2dmYaNFV1TNLUGHqtvv8E7oNw9uYcz9Ox5LFbiX+FdNTn2d6ZPlK0kg==
"@react-navigation/core@^5.2.1":
version "5.2.1"
resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-5.2.1.tgz#8fae1b40b3fbaeb70c6182e00899a2e4d281a12f"
integrity sha512-fRezZDtVFMfPtCkFUXFZlhrtECXuuFE9t2LnSyZdm3hZXBf7Gp6KvcMrlzAVXC/n8YCDSqhtDYz7EbF2gX6DJg==
dependencies:
hoist-non-react-statics "^3.0.1"
react-native-safe-area-view "^0.14.1"
react-native-screens "^1.0.0 || ^1.0.0-alpha"
"@react-navigation/routers" "^5.1.0"
escape-string-regexp "^2.0.0"
query-string "^6.10.1"
react-is "^16.12.0"
shortid "^2.2.15"
use-subscription "^1.3.0"
"@react-navigation/native@^5.0.9":
version "5.0.9"
resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-5.0.9.tgz#bbd22928f0fbe808a96dd525ebeb9a1aa0b82900"
integrity sha512-iiCBWKv5zQ/PdvGhUEqMyDU30KK8PL2yXIG0j0CCTXriwRebJ1GPhBtfJdDFkSzzFt9Mhxgmok/+GJV8HqvJqA==
dependencies:
"@react-navigation/core" "^5.2.1"
"@react-navigation/routers@^5.1.0":
version "5.1.0"
resolved "https://registry.yarnpkg.com/@react-navigation/routers/-/routers-5.1.0.tgz#ec741e734d501b7024120bef3d109b17f69a7b6b"
integrity sha512-sY+eCIcWheflQIfGMSnWomnjP8d+7ZPmH1dKZ1pRezTqLWVlCFntQfQSr2FfM5LLVWty4gZ/K9D+o6UT4ntc3w==
dependencies:
shortid "^2.2.15"
"@react-navigation/stack@^5.1.1":
version "5.1.1"
resolved "https://registry.yarnpkg.com/@react-navigation/stack/-/stack-5.1.1.tgz#4fff1dc3fec66d7b71cfc31691d6e83d8777d5f8"
integrity sha512-tQV4SNESAeqViItGFT8bLrCGWxYfSjw4uXGrCokzSBOMtrdUwINwXDqo40LZt/KZOT0kVN6MdzHq57ILB1LsGA==
dependencies:
color "^3.1.2"
react-native-iphone-x-helper "^1.2.1"
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
version "2.0.1"
@ -1724,7 +1752,7 @@ collection-visit@^1.0.0:
map-visit "^1.0.0"
object-visit "^1.0.0"
color-convert@^1.9.0:
color-convert@^1.9.0, color-convert@^1.9.1:
version "1.9.3"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
@ -1736,11 +1764,32 @@ color-name@1.1.3:
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
color-name@^1.0.0:
version "1.1.4"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
color-string@^1.5.2:
version "1.5.3"
resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc"
integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==
dependencies:
color-name "^1.0.0"
simple-swizzle "^0.2.2"
color-support@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
color@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10"
integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==
dependencies:
color-convert "^1.9.1"
color-string "^1.5.2"
colorette@^1.0.7:
version "1.1.0"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.1.0.tgz#1f943e5a357fac10b4e0f5aaef3b14cdc1af6ec7"
@ -2203,6 +2252,11 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
escape-string-regexp@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
eslint-plugin-jsx-a11y@5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz#5c96bb5186ca14e94db1095ff59b3e2bd94069b1"
@ -2817,18 +2871,11 @@ hmac-drbg@^1.0.0:
minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.1"
hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0:
hoist-non-react-statics@^2.3.1:
version "2.5.5"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47"
integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==
hoist-non-react-statics@^3.0.1, hoist-non-react-statics@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b"
integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==
dependencies:
react-is "^16.7.0"
home-or-tmp@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-3.0.0.tgz#57a8fe24cf33cdd524860a15821ddc25c86671fb"
@ -2982,6 +3029,11 @@ is-arrayish@^0.2.1:
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
is-arrayish@^0.3.1:
version "0.3.2"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
is-buffer@^1.1.5:
version "1.1.6"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
@ -3128,11 +3180,6 @@ is-wsl@^1.1.0:
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
isarray@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
isarray@1.0.0, isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
@ -4060,6 +4107,11 @@ nan@^2.12.1:
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
nanoid@^2.1.0:
version "2.1.11"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280"
integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==
nanomatch@^1.2.9:
version "1.2.13"
resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
@ -4552,13 +4604,6 @@ path-parse@^1.0.6:
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
path-to-regexp@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d"
integrity sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=
dependencies:
isarray "0.0.1"
path-type@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
@ -4681,7 +4726,7 @@ promise@^7.1.1:
dependencies:
asap "~2.0.3"
prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
prop-types@^15.6.2, prop-types@^15.7.2:
version "15.7.2"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
@ -4742,10 +4787,10 @@ query-string@^5.0.1:
object-assign "^4.1.0"
strict-uri-encode "^1.0.0"
query-string@^6.4.2:
version "6.8.3"
resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.8.3.tgz#fd9fb7ffb068b79062b43383685611ee47777d4b"
integrity sha512-llcxWccnyaWlODe7A9hRjkvdCKamEKTh+wH8ITdTc3OhchaqUZteiSCX/2ablWHVrkVIe04dntnaZJ7BdyW0lQ==
query-string@^6.10.1:
version "6.11.0"
resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.11.0.tgz#dc27a05733d1be66f16d0f83dfa957270f45f66d"
integrity sha512-jS+me8X3OEGFTsF6kF+vUUMFG/d3WUCvD7bHhfZP5784nOq1pjj8yau/u86nfOncmcN6ZkSWKWkKAvv/MGxzLA==
dependencies:
decode-uri-component "^0.2.0"
split-on-first "^1.0.0"
@ -4789,16 +4834,16 @@ react-dom@^16.4.2:
prop-types "^15.6.2"
scheduler "^0.16.2"
react-is@^16.7.0, react-is@^16.8.4, react-is@^16.8.6:
version "16.10.2"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.10.2.tgz#984120fd4d16800e9a738208ab1fba422d23b5ab"
integrity sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA==
react-is@^16.8.1:
react-is@^16.12.0, react-is@^16.8.1:
version "16.12.0"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c"
integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==
react-is@^16.8.4:
version "16.10.2"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.10.2.tgz#984120fd4d16800e9a738208ab1fba422d23b5ab"
integrity sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA==
react-native-background-timer@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/react-native-background-timer/-/react-native-background-timer-2.1.1.tgz#9a2489681ab2f8033c213c73272e9d4c47572cd5"
@ -4833,10 +4878,10 @@ react-native-fs@^2.14.1:
base-64 "^0.1.0"
utf8 "^2.1.1"
react-native-gesture-handler@^1.3.0:
version "1.5.2"
resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-1.5.2.tgz#281111550bf1eee10b7feba5278d142169892731"
integrity sha512-Xp03dq4XYVTD0xmWx4DW4eX+ox1NQLjHmbykspTdS5FCNIVIOekVXRLFCw1698/v8dYUHApNo6K3s3BCD8fqPA==
react-native-gesture-handler@^1.5.3:
version "1.5.3"
resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-1.5.3.tgz#191b44701fab7ba54c27a2438cb5eaa252666e66"
integrity sha512-y2/jw0uHAQtEPR02PHAah6tdMymrVtZFoHqjlEWdhK807w2sgU5CySYINK/nOTczd+zB4GMX+9euA3VfbGJ5aA==
dependencies:
hammerjs "^2.0.8"
hoist-non-react-statics "^2.3.1"
@ -4852,6 +4897,11 @@ react-native-image-crop-picker@^0.25.0:
version "1.0.0"
resolved "git+https://github.com/status-im/react-native-image-resizer.git#dcbe2e1c461b0dbc265435bfb873f0257c1a1c4a"
react-native-iphone-x-helper@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.2.1.tgz#645e2ffbbb49e80844bb4cbbe34a126fda1e6772"
integrity sha512-/VbpIEp8tSNNHIvstuA3Swx610whci1Zpc9mqNkqn14DkMbw+ORviln2u0XyHG1kPvvwTNGZY6QpeFwxYaSdbQ==
"react-native-keychain@git+https://github.com/status-im/react-native-keychain.git#v.3.0.0-status":
version "3.0.0-rc.3"
resolved "git+https://github.com/status-im/react-native-keychain.git#43e5512cabb8ee064fd9e503be943dcf2c7d7669"
@ -4869,22 +4919,20 @@ react-native-languages@^3.0.2:
version "0.0.2"
resolved "git+https://github.com/status-im/react-native-navigation-twopane.git#04ed5fddfb46a6a3ee30776987acb4d3b11c27d4"
react-native-safe-area-context@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-0.6.0.tgz#f53f5a5bcafb462a8798a26b145e68946389ad60"
integrity sha512-blY0akr3ZLTuZFdUotmjV+7LVXpBnd5CGFlNhTiarNNGJoHu79K42IJpUpmtg75iC9aWbSW7QHstlP0xz11V0A==
react-native-reanimated@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-1.7.0.tgz#896db2576552ac59d288a1f6c7f00afc171f240c"
integrity sha512-FQWSqP605eQVJumuK2HpR+7heF0ZI+qfy4jNguv3Xv8nPFHeIgZaRTXHCEQL2AcuSIj50zy8jGJf5l134QMQWQ==
react-native-safe-area-view@^0.14.1:
version "0.14.8"
resolved "https://registry.yarnpkg.com/react-native-safe-area-view/-/react-native-safe-area-view-0.14.8.tgz#ef33c46ff8164ae77acad48c3039ec9c34873e5b"
integrity sha512-MtRSIcZNstxv87Jet+UsPhEd1tpGe8cVskDXlP657x6rHpSrbrc+y13ZNXrwAgGNNhqQNX7UJT68ZIq//ZRmvw==
dependencies:
hoist-non-react-statics "^2.3.1"
react-native-safe-area-context@^0.7.3:
version "0.7.3"
resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-0.7.3.tgz#ad6bd4abbabe195332c53810e4ce5851eb21aa2a"
integrity sha512-9Uqu1vlXPi+2cKW/CW6OnHxA76mWC4kF3wvlqzq4DY8hn37AeiXtLFs2WkxH4yXQRrnJdP6ivc65Lz+MqwRZAA==
"react-native-screens@^1.0.0 || ^1.0.0-alpha", react-native-screens@^1.0.0-alpha.23:
version "1.0.0-alpha.23"
resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-1.0.0-alpha.23.tgz#25d7ea4d11bda4fcde2d1da7ae50271c6aa636e0"
integrity sha512-tOxHGQUN83MTmQB4ghoQkibqOdGiX4JQEmeyEv96MKWO/x8T2PJv84ECUos9hD3blPRQwVwSpAid1PPPhrVEaw==
react-native-screens@^2.0.0-alpha.25:
version "2.0.0-alpha.25"
resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-2.0.0-alpha.25.tgz#790d273b41d8dde37aa3e43bc662444aff18cd20"
integrity sha512-IxKOqPxIWwyJhFOvfkxU/NSFzM5PRiyWWL8g0WCPozVU1KNEtJQp7j0sONkTLGQDkGwLbDu0kuGawT1zXMnE5A==
dependencies:
debounce "^1.2.0"
@ -4909,13 +4957,6 @@ react-native-svg@^9.8.4:
resolved "https://registry.yarnpkg.com/react-native-svg/-/react-native-svg-9.11.1.tgz#b1ccf48de413ff8c4f476f202aaa3893f4c8b59a"
integrity sha512-BmNCM81SSzhj1+N5rYiy7sxrkmybgiT8Cu8yVRB7zVoWze/i1lbCWJah+Gk0OHHwR35ZA31oVKf5jtO4G1n94Q==
react-native-tab-view@^1.2.0, react-native-tab-view@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/react-native-tab-view/-/react-native-tab-view-1.4.1.tgz#f113cd87485808f0c991abec937f70fa380478b9"
integrity sha512-Bke8KkDcDhvB/z0AS7MnQKMD2p6Kwfc1rSKlMOvg9CC5CnClQ2QEnhPSbwegKDYhUkBI92iH/BYy7hNSm5kbUQ==
dependencies:
prop-types "^15.6.1"
react-native-touch-id@^4.4.1:
version "4.4.1"
resolved "https://registry.yarnpkg.com/react-native-touch-id/-/react-native-touch-id-4.4.1.tgz#8b1bb2d04c30bac36bb9696d2d723e719c4a8b08"
@ -4972,40 +5013,6 @@ react-native@0.61.5:
stacktrace-parser "^0.1.3"
whatwg-fetch "^3.0.0"
react-navigation-drawer@~1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/react-navigation-drawer/-/react-navigation-drawer-1.4.0.tgz#70f3dd83e3da9cd4ea6e2739526502c823d466b9"
integrity sha512-ZyWBozcjB2aZ7vwCALv90cYA2NpDjM+WALaiYRshvPvue8l7cqynePbHK8GhlMGyJDwZqp4MxQmu8u1XAKp3Bw==
dependencies:
react-native-tab-view "^1.2.0"
react-navigation-stack@1.5.3:
version "1.5.3"
resolved "https://registry.yarnpkg.com/react-navigation-stack/-/react-navigation-stack-1.5.3.tgz#cdc9f5a6dbdc55509a15f60d765722573dec1997"
integrity sha512-MQcwDVbZUYsTtDJb5cFOSm+K+e7KpUCoROaGoUOR+JHWE3uuaJ3pd/Nu+32a57J98TNBf4qq0+2TPJWl6z6IBg==
dependencies:
prop-types "^15.7.2"
react-navigation-tabs@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/react-navigation-tabs/-/react-navigation-tabs-1.2.0.tgz#602c147029bb4f1c569b26479ddba534fe3ebb19"
integrity sha512-I6vq3XX4ub9KhWQzcrggznls+2Z2C6w2ro46vokDGGvJ02CBpQRar7J0ETV29Ot5AJY67HucNUmZdH3yDFckmQ==
dependencies:
hoist-non-react-statics "^2.5.0"
prop-types "^15.6.1"
react-native-tab-view "^1.4.1"
react-navigation@^3.11.0:
version "3.13.0"
resolved "https://registry.yarnpkg.com/react-navigation/-/react-navigation-3.13.0.tgz#e802bb5174c1ec8b727c69f8e4409ff1351a5250"
integrity sha512-r64bTImY2aNye8wtd39ubouVB6ZMJqjVQYKxH4LFmOav4FsI59fQTDN7sZzyJa29owowYw/wVkh+NWGT+tdD1A==
dependencies:
"@react-navigation/core" "~3.5.1"
"@react-navigation/native" "~3.6.2"
react-navigation-drawer "~1.4.0"
react-navigation-stack "1.5.3"
react-navigation-tabs "~1.2.0"
react-refresh@^0.4.0:
version "0.4.2"
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.2.tgz#54a277a6caaac2803d88f1d6f13c1dcfbd81e334"
@ -5438,6 +5445,13 @@ shellwords@^0.1.1:
resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
shortid@^2.2.15:
version "2.2.15"
resolved "https://registry.yarnpkg.com/shortid/-/shortid-2.2.15.tgz#2b902eaa93a69b11120373cd42a1f1fe4437c122"
integrity sha512-5EaCy2mx2Jgc/Fdn9uuDuNIIfWBpzY4XIlhoqtXF6qsf+/+SGZ+FxDdX/ZsMZiWupIWNqAEmiNY4RC+LSmCeOw==
dependencies:
nanoid "^2.1.0"
signal-exit@^3.0.0, signal-exit@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
@ -5466,6 +5480,13 @@ simple-plist@^1.0.0:
bplist-parser "0.1.1"
plist "^3.0.1"
simple-swizzle@^0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=
dependencies:
is-arrayish "^0.3.1"
slash@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
@ -6039,6 +6060,13 @@ url-set-query@^1.0.0:
resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339"
integrity sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=
use-subscription@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.3.0.tgz#3df13a798e826c8d462899423293289a3362e4e6"
integrity sha512-buZV7FUtnbOr+65dN7PHK7chHhQGfk/yjgqfpRLoWuHIAc4klAD/rdot2FsPNtFthN1ZydvA8tR/mWBMQ+/fDQ==
dependencies:
object-assign "^4.1.1"
use@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"

View File

@ -1,5 +1,6 @@
https://repo.clojars.org/binaryage/devtools/0.9.10/devtools-0.9.10
https://repo.clojars.org/binaryage/env-config/0.2.2/env-config-0.2.2
https://repo.clojars.org/binaryage/oops/0.7.0/oops-0.7.0
https://repo.clojars.org/clj-stacktrace/clj-stacktrace/0.2.5/clj-stacktrace-0.2.5
https://repo.clojars.org/clj-time/clj-time/0.11.0/clj-time-0.11.0
https://repo.clojars.org/clj-time/clj-time/0.6.0/clj-time-0.6.0
@ -49,11 +50,9 @@ https://repo.clojars.org/meta-merge/meta-merge/1.0.0/meta-merge-1.0.0
https://repo.clojars.org/mvxcvi/alphabase/1.0.0/alphabase-1.0.0
https://repo.clojars.org/net/cgrand/macrovich/0.2.0/macrovich-0.2.0
https://repo.clojars.org/quoin/quoin/0.1.2/quoin-0.1.2
https://repo.clojars.org/rasom/cljs-react-navigation/0.1.4/cljs-react-navigation-0.1.4
https://repo.clojars.org/rasom/lein-githooks/0.1.5/lein-githooks-0.1.5
https://repo.clojars.org/re-com/re-com/2.1.0/re-com-2.1.0
https://repo.clojars.org/re-frame/re-frame/0.10.1/re-frame-0.10.1
https://repo.clojars.org/re-frame/re-frame/0.10.4/re-frame-0.10.4
https://repo.clojars.org/re-frisk-shell/re-frisk-shell/0.5.2/re-frisk-shell-0.5.2
https://repo.clojars.org/re-frisk-sidecar/re-frisk-sidecar/0.5.7/re-frisk-sidecar-0.5.7
https://repo.clojars.org/re-frisk/re-frisk/0.5.4/re-frisk-0.5.4

File diff suppressed because it is too large Load Diff

View File

@ -1,28 +1,21 @@
https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-base-services-groovy/2.1/gradle-base-services-groovy-2.1
https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-base-services-groovy/2.2.1/gradle-base-services-groovy-2.2.1
https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-base-services-groovy/3.1/gradle-base-services-groovy-3.1
https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-base-services/2.1/gradle-base-services-2.1
https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-base-services/2.2.1/gradle-base-services-2.2.1
https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-base-services/3.1/gradle-base-services-3.1
https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-core/2.1/gradle-core-2.1
https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-core/2.2.1/gradle-core-2.2.1
https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-core/3.1/gradle-core-3.1
https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-logging/3.1/gradle-logging-3.1
https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-messaging/2.1/gradle-messaging-2.1
https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-messaging/2.2.1/gradle-messaging-2.2.1
https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-messaging/3.1/gradle-messaging-3.1
https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-resources/2.1/gradle-resources-2.1
https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-resources/2.2.1/gradle-resources-2.2.1
https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-resources/3.1/gradle-resources-3.1
https://dl.google.com/dl/android/maven2/androidx/activity/activity/1.0.0/activity-1.0.0
https://dl.google.com/dl/android/maven2/androidx/annotation/annotation/1.0.0/annotation-1.0.0
https://dl.google.com/dl/android/maven2/androidx/annotation/annotation/1.1.0/annotation-1.1.0
https://dl.google.com/dl/android/maven2/androidx/appcompat/appcompat-resources/1.1.0/appcompat-resources-1.1.0
https://dl.google.com/dl/android/maven2/androidx/appcompat/appcompat/1.0.0/appcompat-1.0.0
https://dl.google.com/dl/android/maven2/androidx/appcompat/appcompat/1.0.2/appcompat-1.0.2
https://dl.google.com/dl/android/maven2/androidx/appcompat/appcompat/1.1.0-rc01/appcompat-1.1.0-rc01
https://dl.google.com/dl/android/maven2/androidx/appcompat/appcompat/1.1.0/appcompat-1.1.0
https://dl.google.com/dl/android/maven2/androidx/arch/core/core-common/2.0.0/core-common-2.0.0
https://dl.google.com/dl/android/maven2/androidx/arch/core/core-common/2.1.0/core-common-2.1.0
https://dl.google.com/dl/android/maven2/androidx/arch/core/core-runtime/2.0.0/core-runtime-2.0.0
https://dl.google.com/dl/android/maven2/androidx/asynclayoutinflater/asynclayoutinflater/1.0.0/asynclayoutinflater-1.0.0
https://dl.google.com/dl/android/maven2/androidx/cardview/cardview/1.0.0/cardview-1.0.0
https://dl.google.com/dl/android/maven2/androidx/collection/collection/1.0.0/collection-1.0.0
https://dl.google.com/dl/android/maven2/androidx/collection/collection/1.1.0/collection-1.1.0
https://dl.google.com/dl/android/maven2/androidx/coordinatorlayout/coordinatorlayout/1.0.0/coordinatorlayout-1.0.0
https://dl.google.com/dl/android/maven2/androidx/core/core/1.0.1/core-1.0.1
https://dl.google.com/dl/android/maven2/androidx/core/core/1.1.0/core-1.1.0
https://dl.google.com/dl/android/maven2/androidx/cursoradapter/cursoradapter/1.0.0/cursoradapter-1.0.0
https://dl.google.com/dl/android/maven2/androidx/customview/customview/1.0.0/customview-1.0.0
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/3.2.1/databinding-common-3.2.1
@ -35,26 +28,37 @@ https://dl.google.com/dl/android/maven2/androidx/documentfile/documentfile/1.0.0
https://dl.google.com/dl/android/maven2/androidx/drawerlayout/drawerlayout/1.0.0/drawerlayout-1.0.0
https://dl.google.com/dl/android/maven2/androidx/exifinterface/exifinterface/1.0.0/exifinterface-1.0.0
https://dl.google.com/dl/android/maven2/androidx/fragment/fragment/1.0.0/fragment-1.0.0
https://dl.google.com/dl/android/maven2/androidx/fragment/fragment/1.1.0/fragment-1.1.0
https://dl.google.com/dl/android/maven2/androidx/interpolator/interpolator/1.0.0/interpolator-1.0.0
https://dl.google.com/dl/android/maven2/androidx/legacy/legacy-support-core-ui/1.0.0/legacy-support-core-ui-1.0.0
https://dl.google.com/dl/android/maven2/androidx/legacy/legacy-support-core-utils/1.0.0/legacy-support-core-utils-1.0.0
https://dl.google.com/dl/android/maven2/androidx/legacy/legacy-support-v4/1.0.0/legacy-support-v4-1.0.0
https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-common/2.0.0/lifecycle-common-2.0.0
https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-common/2.1.0/lifecycle-common-2.1.0
https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-livedata-core/2.0.0/lifecycle-livedata-core-2.0.0
https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-livedata/2.0.0/lifecycle-livedata-2.0.0
https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-runtime/2.0.0/lifecycle-runtime-2.0.0
https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-runtime/2.1.0/lifecycle-runtime-2.1.0
https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-viewmodel/2.0.0/lifecycle-viewmodel-2.0.0
https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-viewmodel/2.1.0/lifecycle-viewmodel-2.1.0
https://dl.google.com/dl/android/maven2/androidx/loader/loader/1.0.0/loader-1.0.0
https://dl.google.com/dl/android/maven2/androidx/localbroadcastmanager/localbroadcastmanager/1.0.0/localbroadcastmanager-1.0.0
https://dl.google.com/dl/android/maven2/androidx/media/media/1.0.0/media-1.0.0
https://dl.google.com/dl/android/maven2/androidx/multidex/multidex/2.0.1/multidex-2.0.1
https://dl.google.com/dl/android/maven2/androidx/print/print/1.0.0/print-1.0.0
https://dl.google.com/dl/android/maven2/androidx/recyclerview/recyclerview/1.0.0/recyclerview-1.0.0
https://dl.google.com/dl/android/maven2/androidx/savedstate/savedstate/1.0.0/savedstate-1.0.0
https://dl.google.com/dl/android/maven2/androidx/slidingpanelayout/slidingpanelayout/1.0.0/slidingpanelayout-1.0.0
https://dl.google.com/dl/android/maven2/androidx/swiperefreshlayout/swiperefreshlayout/1.0.0/swiperefreshlayout-1.0.0
https://dl.google.com/dl/android/maven2/androidx/swiperefreshlayout/swiperefreshlayout/1.1.0-alpha02/swiperefreshlayout-1.1.0-alpha02
https://dl.google.com/dl/android/maven2/androidx/transition/transition/1.0.0/transition-1.0.0
https://dl.google.com/dl/android/maven2/androidx/transition/transition/1.1.0/transition-1.1.0
https://dl.google.com/dl/android/maven2/androidx/vectordrawable/vectordrawable-animated/1.0.0/vectordrawable-animated-1.0.0
https://dl.google.com/dl/android/maven2/androidx/vectordrawable/vectordrawable-animated/1.1.0/vectordrawable-animated-1.1.0
https://dl.google.com/dl/android/maven2/androidx/vectordrawable/vectordrawable/1.0.1/vectordrawable-1.0.1
https://dl.google.com/dl/android/maven2/androidx/vectordrawable/vectordrawable/1.1.0/vectordrawable-1.1.0
https://dl.google.com/dl/android/maven2/androidx/versionedparcelable/versionedparcelable/1.0.0/versionedparcelable-1.0.0
https://dl.google.com/dl/android/maven2/androidx/versionedparcelable/versionedparcelable/1.1.0/versionedparcelable-1.1.0
https://dl.google.com/dl/android/maven2/androidx/viewpager/viewpager/1.0.0/viewpager-1.0.0
https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.0.1/baseLibrary-3.0.1
https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.2.1/baseLibrary-3.2.1
@ -179,6 +183,7 @@ https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-tas
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-vision-common/17.0.2/play-services-vision-common-17.0.2
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-vision-image-label/17.0.2/play-services-vision-image-label-17.0.2
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-vision/17.0.2/play-services-vision-17.0.2
https://dl.google.com/dl/android/maven2/com/google/android/material/material/1.0.0/material-1.0.0
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-common/16.0.3/firebase-common-16.0.3
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-iid-interop/16.0.1/firebase-iid-interop-16.0.1
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-iid/17.0.3/firebase-iid-17.0.3
@ -520,10 +525,6 @@ https://repo.maven.apache.org/maven2/com/barchart/base/barchart-archon/2.5.10/ba
https://repo.maven.apache.org/maven2/com/barchart/udt/barchart-udt-archon/2.3.0/barchart-udt-archon-2.3.0
https://repo.maven.apache.org/maven2/com/barchart/udt/barchart-udt-bundle/2.3.0/barchart-udt-bundle-2.3.0
https://repo.maven.apache.org/maven2/com/beust/jcommander/1.47/jcommander-1.47
https://repo.maven.apache.org/maven2/com/esotericsoftware/kryo/kryo/2.20/kryo-2.20
https://repo.maven.apache.org/maven2/com/esotericsoftware/minlog/minlog/1.2/minlog-1.2
https://repo.maven.apache.org/maven2/com/esotericsoftware/reflectasm/reflectasm/1.07/reflectasm-1.07
https://repo.maven.apache.org/maven2/com/esotericsoftware/reflectasm/reflectasm/1.07/reflectasm-1.07-shaded
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.3.0/jackson-annotations-2.3.0
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.3.1/jackson-annotations-2.3.1
https://repo.maven.apache.org/maven2/com/fasterxml/jackson/core/jackson-core/2.3.1/jackson-core-2.3.1
@ -565,8 +566,6 @@ https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.3.1/error_prone_parent-2.3.1
https://repo.maven.apache.org/maven2/com/google/google/1/google-1
https://repo.maven.apache.org/maven2/com/google/google/5/google-5
https://repo.maven.apache.org/maven2/com/google/guava/guava-jdk5/17.0/guava-jdk5-17.0
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent-jdk5/17.0/guava-parent-jdk5-17.0
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/10.0.1/guava-parent-10.0.1
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/14.0.1/guava-parent-14.0.1
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/16.0.1/guava-parent-16.0.1
@ -1718,14 +1717,12 @@ https://repo.maven.apache.org/maven2/org/mortbay/jetty/project/6.1.26/project-6.
https://repo.maven.apache.org/maven2/org/mortbay/jetty/servlet-api/2.5-20081211/servlet-api-2.5-20081211
https://repo.maven.apache.org/maven2/org/multiverse/multiverse-core/0.7.0/multiverse-core-0.7.0
https://repo.maven.apache.org/maven2/org/multiverse/multiverse/0.7.0/multiverse-0.7.0
https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/1.2/objenesis-parent-1.2
https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/1.3/objenesis-parent-1.3
https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/2.1/objenesis-parent-2.1
https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/2.5/objenesis-parent-2.5
https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/2.6/objenesis-parent-2.6
https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/3.0.1/objenesis-parent-3.0.1
https://repo.maven.apache.org/maven2/org/objenesis/objenesis/1.0/objenesis-1.0
https://repo.maven.apache.org/maven2/org/objenesis/objenesis/1.2/objenesis-1.2
https://repo.maven.apache.org/maven2/org/objenesis/objenesis/1.3/objenesis-1.3
https://repo.maven.apache.org/maven2/org/objenesis/objenesis/2.1/objenesis-2.1
https://repo.maven.apache.org/maven2/org/objenesis/objenesis/2.5/objenesis-2.5
@ -1742,14 +1739,12 @@ https://repo.maven.apache.org/maven2/org/osgi/org.osgi.core/4.1.0/org.osgi.core-
https://repo.maven.apache.org/maven2/org/osgi/org.osgi.core/4.2.0/org.osgi.core-4.2.0
https://repo.maven.apache.org/maven2/org/osgi/org.osgi.core/4.3.1/org.osgi.core-4.3.1
https://repo.maven.apache.org/maven2/org/osgi/org.osgi.core/6.0.0/org.osgi.core-6.0.0
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/4.0/asm-parent-4.0
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/5.0.1/asm-parent-5.0.1
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/5.0.2/asm-parent-5.0.2
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/5.0.3/asm-parent-5.0.3
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/5.0.4/asm-parent-5.0.4
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/5.1/asm-parent-5.1
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/6.0/asm-parent-6.0
https://repo.maven.apache.org/maven2/org/ow2/asm/asm/4.0/asm-4.0
https://repo.maven.apache.org/maven2/org/ow2/asm/asm/5.0.2/asm-5.0.2
https://repo.maven.apache.org/maven2/org/ow2/asm/asm/6.1.1/asm-6.1.1
https://repo.maven.apache.org/maven2/org/ow2/ow2/1.3/ow2-1.3
@ -1773,7 +1768,6 @@ https://repo.maven.apache.org/maven2/org/slf4j/jcl-over-slf4j/1.7.5/jcl-over-slf
https://repo.maven.apache.org/maven2/org/slf4j/jcl-over-slf4j/1.7.7/jcl-over-slf4j-1.7.7
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.5.6/slf4j-api-1.5.6
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.6.4/slf4j-api-1.6.4
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.10/slf4j-api-1.7.10
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.19/slf4j-api-1.7.19
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5
@ -1781,7 +1775,6 @@ https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.7/slf4j-api-1.7.7
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-jdk14/1.5.6/slf4j-jdk14-1.5.6
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-parent/1.5.6/slf4j-parent-1.5.6
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-parent/1.6.4/slf4j-parent-1.6.4
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-parent/1.7.10/slf4j-parent-1.7.10
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-parent/1.7.19/slf4j-parent-1.7.19
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-parent/1.7.2/slf4j-parent-1.7.2
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-parent/1.7.25/slf4j-parent-1.7.25

View File

@ -7,7 +7,7 @@ let
clojars = "https://repo.clojars.org";
fabric-io = "https://maven.fabric.io/public";
google = "https://dl.google.com/dl/android/maven2";
gradle = "https://repo.gradle.org/gradle/libs-releases-local";
gradle = "http://repo.gradle.org/gradle/libs-releases-local";
gradlePlugins = "https://plugins.gradle.org/m2";
java = "https://maven.java.net/content/repositories/releases";
jcenter = "https://jcenter.bintray.com";
@ -20,244 +20,19 @@ let
};
in {
"https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-base-services-groovy/2.1/gradle-base-services-groovy-2.1" =
"https://dl.google.com/dl/android/maven2/androidx/activity/activity/1.0.0/activity-1.0.0" =
{
host = repositories.gradle;
host = repositories.google;
path =
"org/gradle/gradle-base-services-groovy/2.1/gradle-base-services-groovy-2.1";
type = "jar";
"androidx/activity/activity/1.0.0/activity-1.0.0";
type = "aar";
pom = {
sha1 = "ccac73bb7184768905f402042c0d8578e9dae007";
sha256 = "1wqpy25wdcrywjxld13pna7npwrh6zp8rfjnzgfprb5b5jyjp510";
sha1 = "f94af7350c14b899596aefd6c50e381a96d933ba";
sha256 = "10lv8v4dg1jfvmhznia10wsgqxi0inbs0cdql0nk3732c9sbx917";
};
jar = {
sha1 = "c19534da0e1547f510fe054d2ca038a743b8ed5b";
sha256 = "02iqr1sjhpdb6va8kfsbggmkzns9xhxrkfihz992aalazm81f612";
};
};
"https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-base-services-groovy/2.2.1/gradle-base-services-groovy-2.2.1" =
{
host = repositories.gradle;
path =
"org/gradle/gradle-base-services-groovy/2.2.1/gradle-base-services-groovy-2.2.1";
type = "jar";
pom = {
sha1 = "60afd5575c876f582bea8062d908ad32758ea811";
sha256 = "124idvay5l85b92r5kzm99zq3zkb00g8y6zmp49f4f989lqh29rx";
};
jar = {
sha1 = "5875b51c9d579de53ce05ea89ebf5a823e2fc0f6";
sha256 = "0dsd7mdlpabdxc3apazvwbcvnx6d4xrnr5syp3fbmxypvcxys8zg";
};
};
"https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-base-services-groovy/3.1/gradle-base-services-groovy-3.1" =
{
host = repositories.gradle;
path =
"org/gradle/gradle-base-services-groovy/3.1/gradle-base-services-groovy-3.1";
type = "jar";
pom = {
sha1 = "0f59d4b3ffee0a8ae0455237c50283a1fee8f789";
sha256 = "1712qg4qik15fx8a7y1hwwcmrfag2d5c259lrv879xvsnvh5kh3j";
};
jar = {
sha1 = "61adc13a045357c99a7bc8c70ccb6955e80eda7c";
sha256 = "0pv1pqlwj8zggxybcvdna77xgc1687zgmz57k5405ffj4bixdbpg";
};
};
"https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-base-services/2.1/gradle-base-services-2.1" =
{
host = repositories.gradle;
path =
"org/gradle/gradle-base-services/2.1/gradle-base-services-2.1";
type = "jar";
pom = {
sha1 = "e929a5ad4aa9848ebb5b3dbb2d73585b558b851f";
sha256 = "037dj6p24wbw5ncv9981qrkxskl98qlihsvwkvwl7h5vjqfinzvk";
};
jar = {
sha1 = "8078ab01c8acaf7420ee878582c1a3220677cddc";
sha256 = "1wcifqjz7lgyi1nsjdkpbpij2rqap4bciwmqx1lw924p0355q07d";
};
};
"https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-base-services/2.2.1/gradle-base-services-2.2.1" =
{
host = repositories.gradle;
path =
"org/gradle/gradle-base-services/2.2.1/gradle-base-services-2.2.1";
type = "jar";
pom = {
sha1 = "ec4de94aa2ae0c5a42656a3df23d969524758131";
sha256 = "0mf3y655zxkr5l851cbd05p8brv92vk3n81fpir5y3ajc0x88n3s";
};
jar = {
sha1 = "9686a37f845c7b554d0b55724e21e5ff84d9e1c1";
sha256 = "0hayad4mynnv4irqabxc4j0vqk17yp5q3r9xfafisv4s0nsk4849";
};
};
"https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-base-services/3.1/gradle-base-services-3.1" =
{
host = repositories.gradle;
path =
"org/gradle/gradle-base-services/3.1/gradle-base-services-3.1";
type = "jar";
pom = {
sha1 = "9919c78117bd8fe26b67000e25f19e2dac5b423b";
sha256 = "19ryx76klirl8ql1kasijwsaykqv2xs70mzdcvw53sg35dhq0min";
};
jar = {
sha1 = "33e7db611deb096e92e5fcf9e9007a9f08002801";
sha256 = "146bvpjsw96a1m2y4v3bmsjzmhjm7bq7zlvpdzl1s8g34k0dpn83";
};
};
"https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-core/2.1/gradle-core-2.1" =
{
host = repositories.gradle;
path =
"org/gradle/gradle-core/2.1/gradle-core-2.1";
type = "jar";
pom = {
sha1 = "bf070cdb93383804cdad252089c473d5cc65dbb2";
sha256 = "1iraj3rvsjd5z4qb4g82za5y2p3glpkdb4070wdyr25bywk17mam";
};
jar = {
sha1 = "448579eb9b1ebb52ac3a099baade52876b37c1bf";
sha256 = "0mwb51jf2bcdwv6gy5sj4gcq3g81nxjb5d58wghz7l5cwjj1arr0";
};
};
"https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-core/2.2.1/gradle-core-2.2.1" =
{
host = repositories.gradle;
path =
"org/gradle/gradle-core/2.2.1/gradle-core-2.2.1";
type = "jar";
pom = {
sha1 = "518c5eb230e15e9f3d743489fbb80860e8acec62";
sha256 = "0llgyi9wfjhdrx005444pv9ar02bvcgdaq6gzmvyafg8jlp3m8h0";
};
jar = {
sha1 = "60128a00fcf9428e90d59fd65608965e84b66420";
sha256 = "1wvpwy5q2i3pvialcip7nz54rbiahq548kkpvr1p6xgn97z9ms8n";
};
};
"https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-core/3.1/gradle-core-3.1" =
{
host = repositories.gradle;
path =
"org/gradle/gradle-core/3.1/gradle-core-3.1";
type = "jar";
pom = {
sha1 = "26675e59c68aa16f5bde212c8640c41086aae4d7";
sha256 = "0mf0cfzlq4cakdmix7bhd0kjlj01lk0678v5w43x4viffffsj090";
};
jar = {
sha1 = "864f9d0156e49d1101759745f0e3ab096533ec01";
sha256 = "0k925r1pqk638cia6k9qklkl8mkcfgh3l6pbbxwxmgs43f9insff";
};
};
"https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-logging/3.1/gradle-logging-3.1" =
{
host = repositories.gradle;
path =
"org/gradle/gradle-logging/3.1/gradle-logging-3.1";
type = "jar";
pom = {
sha1 = "bfc6ca5d69246cb407120e6632a5cacfcbee3ccd";
sha256 = "0gjgq9gppzkvd95qxlx2ihybg66nabp2kppkl5b07yk7p1p8j7ss";
};
jar = {
sha1 = "1497c134a31ed4c347ba62be68c86885b64eee2c";
sha256 = "1sllfk9rsv55cgbka4h91grn4z6sx9dijwjqrhii4cpl056dwmjj";
};
};
"https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-messaging/2.1/gradle-messaging-2.1" =
{
host = repositories.gradle;
path =
"org/gradle/gradle-messaging/2.1/gradle-messaging-2.1";
type = "jar";
pom = {
sha1 = "ff10ff2518c0fe18941e93dae462be088e69e9ef";
sha256 = "0v7frbjfi3vmi65zm2n0p7dnyli3cbnacc9zwmhmr6c9klzxlpz1";
};
jar = {
sha1 = "e73cfd37ca09295dd3d106b2dc76494c90bd6fbb";
sha256 = "1w92sa0fb51sgpa50014b45lwgw4a7p6fl0qgpag2h1j0gcmlgza";
};
};
"https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-messaging/2.2.1/gradle-messaging-2.2.1" =
{
host = repositories.gradle;
path =
"org/gradle/gradle-messaging/2.2.1/gradle-messaging-2.2.1";
type = "jar";
pom = {
sha1 = "40de72142fadcd775596c620aabffaa5983b1e15";
sha256 = "1mhqa4hijzb66jpzljli7b937h2baa0bwyj6lwwj0pdm165mpmyr";
};
jar = {
sha1 = "1e1d6ef285891a40a04dfa360e3e53b43e2c1a84";
sha256 = "1x7vqdcjrmk279blih6sw5b5pjfsxnag1bmckxmz949isa4xay2b";
};
};
"https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-messaging/3.1/gradle-messaging-3.1" =
{
host = repositories.gradle;
path =
"org/gradle/gradle-messaging/3.1/gradle-messaging-3.1";
type = "jar";
pom = {
sha1 = "1a02aa908fdc0a53d016981557e651312123174d";
sha256 = "13iy1rghsjl1afml5h73d0w9mna51nmnwxqg9q2l1qxlj0ypyyl8";
};
jar = {
sha1 = "e9c31a949e904c40178e9276e0040200067fb9b7";
sha256 = "0c7q6fs8ywciif1k4gz40dm17976b8bh9hahi2r2p18j6xb5xpc9";
};
};
"https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-resources/2.1/gradle-resources-2.1" =
{
host = repositories.gradle;
path =
"org/gradle/gradle-resources/2.1/gradle-resources-2.1";
type = "jar";
pom = {
sha1 = "64da665bcaa4edad053ea03e0949f6a3e0d993c6";
sha256 = "0kswdhkwl32sc9w2qbpa66sbvhriiax370rbixg1zmfmzw60k5yg";
};
jar = {
sha1 = "4d64f1ac8b345525503ce5a46ab1e345914df583";
sha256 = "055iangccx3p83rsi61axggw8fzx1pyl9jk0qirclcyd8nfksjdw";
};
};
"https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-resources/2.2.1/gradle-resources-2.2.1" =
{
host = repositories.gradle;
path =
"org/gradle/gradle-resources/2.2.1/gradle-resources-2.2.1";
type = "jar";
pom = {
sha1 = "7d7feabef40c3ac9eb3dc4dc9d55edc879548e49";
sha256 = "1wz0mayzk6plh5vvsj8mvxzzn74a163m75wxbdml8llhrn62p21h";
};
jar = {
sha1 = "3fcd7004383a672c97346ad684dd762c547cdccb";
sha256 = "1qysny46n4g2xq5dbmlrh6c189jbd8wx7x3jn99bvk01h1lydlhy";
};
};
"https://repo.gradle.org/gradle/libs-releases-local/org/gradle/gradle-resources/3.1/gradle-resources-3.1" =
{
host = repositories.gradle;
path =
"org/gradle/gradle-resources/3.1/gradle-resources-3.1";
type = "jar";
pom = {
sha1 = "2354cec814a016ef061bf68deab493162332b712";
sha256 = "0vjy1hdw5gv26g73ck8kh87jkvi7dwczcf7y0dhrr42p9cfzdzcf";
};
jar = {
sha1 = "f8386a67e8e76c43adf65b1923ed26e0ec1ded2a";
sha256 = "0c2l6h2s4qfkn0kc07pnv5j4b8wmvbqjrg2shxbi5wsjji2f9px3";
sha1 = "ed7a64df6e3fbebf7d3d3dfc30b0f47efcc707f7";
sha256 = "0gacyh2zf933lcdkl2drim3knhaj9pgl936q2m256bjw8m19ig6i";
};
};
"https://dl.google.com/dl/android/maven2/androidx/annotation/annotation/1.0.0/annotation-1.0.0" =
@ -275,6 +50,36 @@ in {
sha256 = "05n0yygdjlvvkb67vlfisiasz4xsj55k416dh2m55bvwbxsykahb";
};
};
"https://dl.google.com/dl/android/maven2/androidx/annotation/annotation/1.1.0/annotation-1.1.0" =
{
host = repositories.google;
path =
"androidx/annotation/annotation/1.1.0/annotation-1.1.0";
type = "jar";
pom = {
sha1 = "404526f88e3a7efa04f1c99074dfc10aff9061ee";
sha256 = "1zlyg49llmpnhmhr4z17wp0q51phw5k6py6v5aal9vw0fyx754rf";
};
jar = {
sha1 = "e3a6fb2f40e3a3842e6b7472628ba4ce416ea4c8";
sha256 = "14mnsnd1a6wrzadh8air665ylbb9i9gz1ajhin0nf50gngnn73fk";
};
};
"https://dl.google.com/dl/android/maven2/androidx/appcompat/appcompat-resources/1.1.0/appcompat-resources-1.1.0" =
{
host = repositories.google;
path =
"androidx/appcompat/appcompat-resources/1.1.0/appcompat-resources-1.1.0";
type = "aar";
pom = {
sha1 = "04d25219b17a53da24285e9560bbf5c587abee38";
sha256 = "1wlhjv2g94w40vczb0vl8avg23hia4ancr95hha6y6xhdkhi2q04";
};
jar = {
sha1 = "a573b2ab146d686244721ef1038d08043f18c67f";
sha256 = "0qbk5wi4yd4l4w4f5jdgm9xvszw3jm5qj8by6iya2lb5nhr4v50r";
};
};
"https://dl.google.com/dl/android/maven2/androidx/appcompat/appcompat/1.0.0/appcompat-1.0.0" =
{
host = repositories.google;
@ -305,6 +110,36 @@ in {
sha256 = "00qdpzv9ajq8dvvyvkqiq8g03023gmjv2a6lz5rcnmjwbvfhq253";
};
};
"https://dl.google.com/dl/android/maven2/androidx/appcompat/appcompat/1.1.0-rc01/appcompat-1.1.0-rc01" =
{
host = repositories.google;
path =
"androidx/appcompat/appcompat/1.1.0-rc01/appcompat-1.1.0-rc01";
type = "aar";
pom = {
sha1 = "49c937cd4c8edaa42aefa8eb7b9adffc3c5362c3";
sha256 = "0gy1y4rw48iljrii6hg34lh9ydb2m8filvych6rmlsy7j5dgps7x";
};
jar = {
sha1 = "62955e0a3c6f4566648f30da6e40e44b01221422";
sha256 = "0kv75gf28rm5xbh8dxsaz4vkiz8s5am5bcdxka92wkyv4hx3n4cm";
};
};
"https://dl.google.com/dl/android/maven2/androidx/appcompat/appcompat/1.1.0/appcompat-1.1.0" =
{
host = repositories.google;
path =
"androidx/appcompat/appcompat/1.1.0/appcompat-1.1.0";
type = "aar";
pom = {
sha1 = "83765254bf5e6aa04bb1f35960db460afd70b048";
sha256 = "1fdp5i5ri67xnvf1r2hcdlkl5rd3g8sqy338lq18xvzq45qn239l";
};
jar = {
sha1 = "351d3409fe51f3d862bd2b1bcc0f3b6ded29460e";
sha256 = "1h5m5ajd7b66dilfh8z2zs0zqnglrdm7d5amgzqvvcscljy9jwld";
};
};
"https://dl.google.com/dl/android/maven2/androidx/arch/core/core-common/2.0.0/core-common-2.0.0" =
{
host = repositories.google;
@ -320,6 +155,21 @@ in {
sha256 = "1n3sqpd398a23jdqwpql9ls0if23vzhaj37fn1j6wllvfwvv702b";
};
};
"https://dl.google.com/dl/android/maven2/androidx/arch/core/core-common/2.1.0/core-common-2.1.0" =
{
host = repositories.google;
path =
"androidx/arch/core/core-common/2.1.0/core-common-2.1.0";
type = "jar";
pom = {
sha1 = "2b3b788454b0aa77266f2ce191eba3a7768678ca";
sha256 = "00fgwnngz2qbicwajshx599l3r0ljjslrjb6qc561g5a1sbb7fw3";
};
jar = {
sha1 = "b3152fc64428c9354344bd89848ecddc09b6f07e";
sha256 = "129qclk47ifk57y8d135lfqchx7gffpswfgy55zkw1lx0azkf4py";
};
};
"https://dl.google.com/dl/android/maven2/androidx/arch/core/core-runtime/2.0.0/core-runtime-2.0.0" =
{
host = repositories.google;
@ -350,6 +200,21 @@ in {
sha256 = "12vcz7x5c693gicyr8g1mbm1nq80fvz34n170sxr9pddaw6bdspp";
};
};
"https://dl.google.com/dl/android/maven2/androidx/cardview/cardview/1.0.0/cardview-1.0.0" =
{
host = repositories.google;
path =
"androidx/cardview/cardview/1.0.0/cardview-1.0.0";
type = "aar";
pom = {
sha1 = "93a261514381247a8a6bebe171338f9f2f883f27";
sha256 = "0v1y3h373chacgpbwi662jq3s58v1bl6z7jrggi8ydaqighg8kp6";
};
jar = {
sha1 = "158dbc2e2bc502815821191b04446b8f663c1874";
sha256 = "1izy3bd2vn4rzf3mvgdnf5mdxbfnb664x7xfdnabbmm3496c14qi";
};
};
"https://dl.google.com/dl/android/maven2/androidx/collection/collection/1.0.0/collection-1.0.0" =
{
host = repositories.google;
@ -365,6 +230,21 @@ in {
sha256 = "1yf979z85xq8lxr06mqkc31icns9bgh5gf7yrnhj1h9bbixi33cw";
};
};
"https://dl.google.com/dl/android/maven2/androidx/collection/collection/1.1.0/collection-1.1.0" =
{
host = repositories.google;
path =
"androidx/collection/collection/1.1.0/collection-1.1.0";
type = "jar";
pom = {
sha1 = "e1eba7bcd8a98744b7850e5c474edebaafba6fbb";
sha256 = "1lan6jd3r0g1n5q4z3hizxbq0fd03g1r70jhrkiwdzdclin0dsb7";
};
jar = {
sha1 = "1f27220b47669781457de0d600849a5de0e89909";
sha256 = "0wivsgvxlxqcha3sf1s2f8vi0a9a54798llk81sff7a60xa0wak3";
};
};
"https://dl.google.com/dl/android/maven2/androidx/coordinatorlayout/coordinatorlayout/1.0.0/coordinatorlayout-1.0.0" =
{
host = repositories.google;
@ -395,6 +275,21 @@ in {
sha256 = "167rc0s7c8wlzf6i9d1pd8y4dpmw7m4i5yd4nxgqrb9cq8i0badi";
};
};
"https://dl.google.com/dl/android/maven2/androidx/core/core/1.1.0/core-1.1.0" =
{
host = repositories.google;
path =
"androidx/core/core/1.1.0/core-1.1.0";
type = "aar";
pom = {
sha1 = "2a6d529fdea6d3525bd70f46b6f1fc1a580a8513";
sha256 = "0k3ma57ilij3rp6iq416dndqd42qss7vfz2z8acbfindrlr63r6s";
};
jar = {
sha1 = "b9addd897d6b9c8634fe789bdb82f993171432ae";
sha256 = "0zk4av88i842a7754fwsmh49qac9x24irgw3d6dc1qvgb6zczivn";
};
};
"https://dl.google.com/dl/android/maven2/androidx/cursoradapter/cursoradapter/1.0.0/cursoradapter-1.0.0" =
{
host = repositories.google;
@ -575,6 +470,21 @@ in {
sha256 = "1y0qnp8644b1qx0ag0kzj8w70c09mnqwz9l9g7kk4np63zbk5pb5";
};
};
"https://dl.google.com/dl/android/maven2/androidx/fragment/fragment/1.1.0/fragment-1.1.0" =
{
host = repositories.google;
path =
"androidx/fragment/fragment/1.1.0/fragment-1.1.0";
type = "aar";
pom = {
sha1 = "753e03826c6efdace71d94ed9d04bf008fa6ad3d";
sha256 = "0i15nlfh2lbjyzydby2k32h3fa1sqxbki2jzbmag7p82mhkyny7g";
};
jar = {
sha1 = "5f9efc7569e651415a0958d6b3e6226ef2825c24";
sha256 = "15hlv03x61fcs9qcb7m2h8wjh75bpsk6dlpv03l2iwak467qnk51";
};
};
"https://dl.google.com/dl/android/maven2/androidx/interpolator/interpolator/1.0.0/interpolator-1.0.0" =
{
host = repositories.google;
@ -650,6 +560,21 @@ in {
sha256 = "1z7y6nsqdzv08x4dxbgcjfyj0pvhkgwmwpgkl5pymb84i0c7mbbv";
};
};
"https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-common/2.1.0/lifecycle-common-2.1.0" =
{
host = repositories.google;
path =
"androidx/lifecycle/lifecycle-common/2.1.0/lifecycle-common-2.1.0";
type = "jar";
pom = {
sha1 = "de2b915adafa394edd5eadcab6b5089d08fb71f6";
sha256 = "0xpjh83m6ikc9rqmhz0sbm9my9bg351qjvmviw6255bs8dh2lb39";
};
jar = {
sha1 = "c67e7807d9cd6c329b9d0218b2ec4e505dd340b7";
sha256 = "0hr610gzh7k0hbd4fs3l4hl9bn965hmb3zn2c6rhywxx6gjnpnvn";
};
};
"https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-livedata-core/2.0.0/lifecycle-livedata-core-2.0.0" =
{
host = repositories.google;
@ -695,6 +620,21 @@ in {
sha256 = "1yrwsjfskismgyq5n1vkqv9gz4m445hz876z1qz6ygqq6vkckbz4";
};
};
"https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-runtime/2.1.0/lifecycle-runtime-2.1.0" =
{
host = repositories.google;
path =
"androidx/lifecycle/lifecycle-runtime/2.1.0/lifecycle-runtime-2.1.0";
type = "aar";
pom = {
sha1 = "87fefa0cd4644709a2afc1f2da09397694bfe8b1";
sha256 = "1jwzjl6nwxnqpgmwmpx170ms6ybxygdyhsrxnpabqy9dvc1cz3dg";
};
jar = {
sha1 = "24af6c5162c83b5bf073e16608fd87821422fe48";
sha256 = "0arir2aa3qqc74x24qw8slrgbls22ypxbnc33rjp1s35p6bkh5z5";
};
};
"https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-viewmodel/2.0.0/lifecycle-viewmodel-2.0.0" =
{
host = repositories.google;
@ -710,6 +650,21 @@ in {
sha256 = "0qn0pkzk70jh5j7w5rf3hy6xxgs3krz2k26g2jmq1bbb3gm0linn";
};
};
"https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-viewmodel/2.1.0/lifecycle-viewmodel-2.1.0" =
{
host = repositories.google;
path =
"androidx/lifecycle/lifecycle-viewmodel/2.1.0/lifecycle-viewmodel-2.1.0";
type = "aar";
pom = {
sha1 = "b95d38b7236e5bb4249d74fdab5044c292158342";
sha256 = "1d54r4vs36ad9zcixdip1mpr575pqy2lqflp9kkjgqn377ip5ai9";
};
jar = {
sha1 = "682d06cc95e0632efdb9cfcc18828840ac941148";
sha256 = "0gajp14n4s37m9n37vs39hmhp6ax13vsra6d4x9qv0mjq5xgnmds";
};
};
"https://dl.google.com/dl/android/maven2/androidx/loader/loader/1.0.0/loader-1.0.0" =
{
host = repositories.google;
@ -800,6 +755,21 @@ in {
sha256 = "0j25mc0jfdgzw541icbvjns63aj29fd4ch1bkp52fh01mjqnz586";
};
};
"https://dl.google.com/dl/android/maven2/androidx/savedstate/savedstate/1.0.0/savedstate-1.0.0" =
{
host = repositories.google;
path =
"androidx/savedstate/savedstate/1.0.0/savedstate-1.0.0";
type = "aar";
pom = {
sha1 = "3efaae1f3b3dc6c389a390ef716ede40ec63ef06";
sha256 = "0z6yiwznp9wslahfxx9nh6nrrv48myfj4nampxw8qygazhi7skc4";
};
jar = {
sha1 = "6d39721808cd67e3d3d0d60f194907615fcaa69c";
sha256 = "10rf82xya0cgizx20kpwwbzx0g1jmzx78id0w6f9qmrpkihsa415";
};
};
"https://dl.google.com/dl/android/maven2/androidx/slidingpanelayout/slidingpanelayout/1.0.0/slidingpanelayout-1.0.0" =
{
host = repositories.google;
@ -830,6 +800,51 @@ in {
sha256 = "13bf0brs7wn9kd0xmjdmjl7fqvbm8p3bpi530vyr7c6916lb6qcp";
};
};
"https://dl.google.com/dl/android/maven2/androidx/swiperefreshlayout/swiperefreshlayout/1.1.0-alpha02/swiperefreshlayout-1.1.0-alpha02" =
{
host = repositories.google;
path =
"androidx/swiperefreshlayout/swiperefreshlayout/1.1.0-alpha02/swiperefreshlayout-1.1.0-alpha02";
type = "aar";
pom = {
sha1 = "a46229bf11dbdf4d2952357d050b14b6d432c628";
sha256 = "0aj4kch3rkx1s5bl6mmvwgvi214ldspgm4g4flx1kkqr46n1x0r8";
};
jar = {
sha1 = "5cb9e619bcf4b8d4c0fae0d8530abcaeee292110";
sha256 = "1rh1zdnh1ipb867bsclrrn4z9lx062h98a9q7wzs523yx9ih7y00";
};
};
"https://dl.google.com/dl/android/maven2/androidx/transition/transition/1.0.0/transition-1.0.0" =
{
host = repositories.google;
path =
"androidx/transition/transition/1.0.0/transition-1.0.0";
type = "aar";
pom = {
sha1 = "cba38d22419c84dcf737d666ae0c980f1e521e65";
sha256 = "12v826hkvgrm3hzf3x5il92x50gan60gz7x47cq2ykn97ag8ljz7";
};
jar = {
sha1 = "f3556ce8f251984acb24014c3ba055ff235929ff";
sha256 = "1380yk8978c19d0rl6hi3f0caac9fg5sy3lvvbnbq6j07xv0y2m0";
};
};
"https://dl.google.com/dl/android/maven2/androidx/transition/transition/1.1.0/transition-1.1.0" =
{
host = repositories.google;
path =
"androidx/transition/transition/1.1.0/transition-1.1.0";
type = "aar";
pom = {
sha1 = "0c354a924354ceed91673412fb5b6ce326735a63";
sha256 = "0paa8lci1xhkd631ak7knk87fbxbxi255clphhb3dy9kqvla2k2x";
};
jar = {
sha1 = "ee403adc3ae340af6461cdd8151b4518c9f5c1b0";
sha256 = "0y7kx238yghsrh06ywgw9xm9zaw0izjcgkmxjngnalc78by4r3mx";
};
};
"https://dl.google.com/dl/android/maven2/androidx/vectordrawable/vectordrawable-animated/1.0.0/vectordrawable-animated-1.0.0" =
{
host = repositories.google;
@ -845,6 +860,21 @@ in {
sha256 = "1wbc4cnbbd4hgkmy6l97jpcm47a3gvrz400bb8ipv6ls1b7s1hr6";
};
};
"https://dl.google.com/dl/android/maven2/androidx/vectordrawable/vectordrawable-animated/1.1.0/vectordrawable-animated-1.1.0" =
{
host = repositories.google;
path =
"androidx/vectordrawable/vectordrawable-animated/1.1.0/vectordrawable-animated-1.1.0";
type = "aar";
pom = {
sha1 = "2c40e16427f4e94ea471526868ba5ac4bd13de6d";
sha256 = "1ga0l1hbl7l1f8j27yvm4frx6vvgqnb99vh3j1dvfpvhdc8j0si7";
};
jar = {
sha1 = "fcda1161354501471c30a4e077af6b5c4d4eddc6";
sha256 = "1y034igcx1xf7qvg6n6hks08gnh0ilj2npnzaj0c7nbi4d82rnkn";
};
};
"https://dl.google.com/dl/android/maven2/androidx/vectordrawable/vectordrawable/1.0.1/vectordrawable-1.0.1" =
{
host = repositories.google;
@ -860,6 +890,21 @@ in {
sha256 = "1ljyf6gymbz9hhcygrmz0va5bmn26ffirq48qcpya44mgfami8sc";
};
};
"https://dl.google.com/dl/android/maven2/androidx/vectordrawable/vectordrawable/1.1.0/vectordrawable-1.1.0" =
{
host = repositories.google;
path =
"androidx/vectordrawable/vectordrawable/1.1.0/vectordrawable-1.1.0";
type = "aar";
pom = {
sha1 = "8b15e03d94f7d9a07cbea653ad7f524315d1d507";
sha256 = "1cib94wwskg9haj7v9amvlfmwfs7bz723g2wg024irbr45djs3jv";
};
jar = {
sha1 = "eac7a364fff534035a2a6cb17770a1288315f69f";
sha256 = "09lfvw1gn16avi726kbpd6d9x2ssih4vyqy2mgybfj8vq0x67za6";
};
};
"https://dl.google.com/dl/android/maven2/androidx/versionedparcelable/versionedparcelable/1.0.0/versionedparcelable-1.0.0" =
{
host = repositories.google;
@ -875,6 +920,21 @@ in {
sha256 = "1qqw5vnqzyc45x3s3njf8bh1008bprq0l50frbfwq5l0xn9qlhzn";
};
};
"https://dl.google.com/dl/android/maven2/androidx/versionedparcelable/versionedparcelable/1.1.0/versionedparcelable-1.1.0" =
{
host = repositories.google;
path =
"androidx/versionedparcelable/versionedparcelable/1.1.0/versionedparcelable-1.1.0";
type = "aar";
pom = {
sha1 = "5860ab66f74bffbfcfd51883ddabd477a0b80dc8";
sha256 = "1dakq8yjjfxx8jd0h8csg4xx9nvrdrk61m19m2yj6qy01jzcfaf7";
};
jar = {
sha1 = "91acce73e00a17b524f6697f6c3893efb8ea349f";
sha256 = "1h8hnymlblgxdbflcbgdhw4q1hcv2myywm2hdf3bf8n218a7f7cs";
};
};
"https://dl.google.com/dl/android/maven2/androidx/viewpager/viewpager/1.0.0/viewpager-1.0.0" =
{
host = repositories.google;
@ -2753,6 +2813,21 @@ in {
sha256 = "01xqv2zdy2if0fm28l2kfj86dyj1adq977nvhy8v0kzscvxgv0d0";
};
};
"https://dl.google.com/dl/android/maven2/com/google/android/material/material/1.0.0/material-1.0.0" =
{
host = repositories.google;
path =
"com/google/android/material/material/1.0.0/material-1.0.0";
type = "aar";
pom = {
sha1 = "2bcf783c3bc66bafc0e1c9ca721d7544659bb6c3";
sha256 = "1aqm6mh1448hszv9agcq85wckpyiwjzhpi85wdfij48wsm0zbzy9";
};
jar = {
sha1 = "f83e012c22d2fac8fcf23880d7167832b099fa94";
sha256 = "1p0sq4kgxybslqj8044fh056m9fqmp543r5jk7crhdy0lf0y703n";
};
};
"https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-common/16.0.3/firebase-common-16.0.3" =
{
host = repositories.google;
@ -7804,62 +7879,6 @@ in {
sha256 = "16fyyvalj6al7hxgz7w2x27xzmaw0ldc2wiax0w23ry2gzg4gjwd";
};
};
"https://repo.maven.apache.org/maven2/com/esotericsoftware/kryo/kryo/2.20/kryo-2.20" =
{
host = repositories.apache;
path =
"com/esotericsoftware/kryo/kryo/2.20/kryo-2.20";
type = "jar";
pom = {
sha1 = "db5822be831634cb9fc7d3ad60fc2d48e172a1a7";
sha256 = "1crg1d2mqqj0m8ddgfwvqpl9vjbpn30baxwi7qymfqh1haxcjzla";
};
jar = {
sha1 = "b596abed147c5c5b985c996094c5c1d6622dcb9f";
sha256 = "160ign6lynid1za6xwhi3v8f82q2jdb6snzzcw2hmn54v980ws56";
};
};
"https://repo.maven.apache.org/maven2/com/esotericsoftware/minlog/minlog/1.2/minlog-1.2" =
{
host = repositories.apache;
path =
"com/esotericsoftware/minlog/minlog/1.2/minlog-1.2";
type = "jar";
pom = {
sha1 = "67d00f6a12cac438eb96f12fa4e3b32ba452b810";
sha256 = "18kpysh9sc3cv7y0rdy3hxrpvnvcw27jcb1sxgyq3di96cma20dg";
};
jar = {
sha1 = "59bfcd171d82f9981a5e242b9e840191f650e209";
sha256 = "1wk09rf32radx01aspfmqfdqmna131s7ab4r3j83vl7mm0dcny56";
};
};
"https://repo.maven.apache.org/maven2/com/esotericsoftware/reflectasm/reflectasm/1.07/reflectasm-1.07" =
{
host = repositories.apache;
path =
"com/esotericsoftware/reflectasm/reflectasm/1.07/reflectasm-1.07";
type = "jar";
pom = {
sha1 = "c5da38373fa65bd2870ced97ba4d5ccc08be62de";
sha256 = "0phw8hmf1x87v68g39rzjbr34ci80sh5sf7m1xkdl4vhyja4nx4a";
};
jar = {
sha1 = "761028ef46da8ec16a16b25ce942463eb1a9f3d5";
sha256 = "09k06wnbsxchb9p9jv3fg4jgkzjs5l9xxfhah9bi0n7zar45b635";
};
};
"https://repo.maven.apache.org/maven2/com/esotericsoftware/reflectasm/reflectasm/1.07/reflectasm-1.07-shaded" =
{
host = repositories.apache;
path =
"com/esotericsoftware/reflectasm/reflectasm/1.07/reflectasm-1.07-shaded";
type = "jar";
jar = {
sha1 = "76f11c94a53ee975a0d9154b325c408b210155bd";
sha256 = "0xkwgs97pnyw2nm3d84s18dsa886azvw350izjpfsx5jnjnhx9q8";
};
};
"https://repo.maven.apache.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.3.0/jackson-annotations-2.3.0" =
{
host = repositories.apache;
@ -8403,32 +8422,6 @@ in {
sha256 = "0a38gd0j67siikp3zabrdgfkk7afnzg30pz0yfkvqgyafdg397g0";
};
};
"https://repo.maven.apache.org/maven2/com/google/guava/guava-jdk5/17.0/guava-jdk5-17.0" =
{
host = repositories.apache;
path =
"com/google/guava/guava-jdk5/17.0/guava-jdk5-17.0";
type = "jar";
pom = {
sha1 = "41f020642c6a9151ec18736d1fa01e6606c9be6f";
sha256 = "0rnvlc2v46axw2wgy6g838is0jd6srpas5ycwz25pm0kg1i55hgq";
};
jar = {
sha1 = "463f8378feba44df7ba7cd9272d01837dad62b36";
sha256 = "0qbc8lg1rqs75jin0afyw9s49qfkybvmdjv8v77a7pdn8xjlbgsr";
};
};
"https://repo.maven.apache.org/maven2/com/google/guava/guava-parent-jdk5/17.0/guava-parent-jdk5-17.0" =
{
host = repositories.apache;
path =
"com/google/guava/guava-parent-jdk5/17.0/guava-parent-jdk5-17.0";
type = "jar";
pom = {
sha1 = "955dd912f3b5bd06e6db874b4d90de333745b0fe";
sha256 = "0vzvn5h0yrnmis0f195ad108b1g7nglqgy0xq6rmcab34yy0d5js";
};
};
"https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/10.0.1/guava-parent-10.0.1" =
{
host = repositories.apache;
@ -10333,7 +10326,7 @@ in {
"javax/validation/validation-api/1.1.0.Final/validation-api-1.1.0.Final";
type = "jar";
pom = {
sha1 = "0d2ad4d1498d1048abc6c6948fd3f835d8fdafb0";
sha1 = "";
sha256 = "0772mrm8nw31xj6jg5hwgvy2hsbygn1y61mx615w3rnbwq8ljqxq";
};
jar = {
@ -24174,17 +24167,6 @@ in {
sha256 = "06520i1ygx33iv11haz7l61m1xgzzhn4c72zjjyqdxirqkqprs7d";
};
};
"https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/1.2/objenesis-parent-1.2" =
{
host = repositories.apache;
path =
"org/objenesis/objenesis-parent/1.2/objenesis-parent-1.2";
type = "jar";
pom = {
sha1 = "033696ac4ff0beb9e5893567e054d8d8e5a0c825";
sha256 = "01whfmi39n77njfrpzx30ylcbfq6r5zkxjyby4vfrrazzslqckn8";
};
};
"https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/1.3/objenesis-parent-1.3" =
{
host = repositories.apache;
@ -24255,21 +24237,6 @@ in {
sha256 = "1a4iyj3ri4arrbln3bajys08f7bb7jdijm7jha9lf9r5v5alnsf5";
};
};
"https://repo.maven.apache.org/maven2/org/objenesis/objenesis/1.2/objenesis-1.2" =
{
host = repositories.apache;
path =
"org/objenesis/objenesis/1.2/objenesis-1.2";
type = "jar";
pom = {
sha1 = "9151e3c73d379b42f879b472bc5eec0b35b1eff8";
sha256 = "0jmprfql0vpn2zf2ynfnwrdj72csm8i5bfshz70ih7f02l31nihx";
};
jar = {
sha1 = "bfcb0539a071a4c5a30690388903ac48c0667f2a";
sha256 = "0w5s17ynrbwy5w65pv6pip5qspljlj9vvwpdd9ybhjc1awvw4rcc";
};
};
"https://repo.maven.apache.org/maven2/org/objenesis/objenesis/1.3/objenesis-1.3" =
{
host = repositories.apache;
@ -24506,17 +24473,6 @@ in {
sha256 = "0cdr7hlzrlwcfr9r15wmphzxaiadc27s6gb58gvz3jrlxcsv86qw";
};
};
"https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/4.0/asm-parent-4.0" =
{
host = repositories.apache;
path =
"org/ow2/asm/asm-parent/4.0/asm-parent-4.0";
type = "jar";
pom = {
sha1 = "e7bed114eb05c1759de720bb50308ef2a97c5131";
sha256 = "065cyifib7bjmq1cl4syg7qr4lxmkna0ma2abqf92z20xq5gwnj0";
};
};
"https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/5.0.1/asm-parent-5.0.1" =
{
host = repositories.apache;
@ -24583,21 +24539,6 @@ in {
sha256 = "053xrln1w9nj0aw23wsiqkgn8569fk6zx7mw8dns9jgcp55hc7br";
};
};
"https://repo.maven.apache.org/maven2/org/ow2/asm/asm/4.0/asm-4.0" =
{
host = repositories.apache;
path =
"org/ow2/asm/asm/4.0/asm-4.0";
type = "jar";
pom = {
sha1 = "5e484ac83d98253bf04ce8653aa959e8f0331783";
sha256 = "1mw6sx3nv9rz2wvb3g5irsj794zq35x8fn6x74nv2ilyhnpfyg76";
};
jar = {
sha1 = "659add6efc75a4715d738e73f07505246edf4d66";
sha256 = "0mx9wb9b4z699hsh33zh7dwyzavk9sly179xqhjb0yx4428dwbgv";
};
};
"https://repo.maven.apache.org/maven2/org/ow2/asm/asm/5.0.2/asm-5.0.2" =
{
host = repositories.apache;
@ -24915,21 +24856,6 @@ in {
sha256 = "0zima9a1p07dw2yd362y701qyd063rl6n2dbfq8yw57p62890yrn";
};
};
"https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.10/slf4j-api-1.7.10" =
{
host = repositories.apache;
path =
"org/slf4j/slf4j-api/1.7.10/slf4j-api-1.7.10";
type = "jar";
pom = {
sha1 = "e5247e58569e3386a67622e01fcbf189ea902cbf";
sha256 = "1c8ldjj2nvyd22xlrdainh1bs90srjrr3p9dg5s2qhk34a6mx75g";
};
jar = {
sha1 = "5b338f206827d88acd890739f400a9b7664e5984";
sha256 = "1zib4f8lj0787di7v2j04ad5w4gaxw9v31xzi494s3bl0mqf4qrq";
};
};
"https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.19/slf4j-api-1.7.19" =
{
host = repositories.apache;
@ -25027,17 +24953,6 @@ in {
sha256 = "11fc0rb40w1s7v2b13gx70njzbiwmrz5bkik9y40698a5x9n583n";
};
};
"https://repo.maven.apache.org/maven2/org/slf4j/slf4j-parent/1.7.10/slf4j-parent-1.7.10" =
{
host = repositories.apache;
path =
"org/slf4j/slf4j-parent/1.7.10/slf4j-parent-1.7.10";
type = "jar";
pom = {
sha1 = "ed97ed5a64d2851ed1709f94f66fc553d52e310a";
sha256 = "1kp2jy8qp7pxl5ysryblngb8w963z256ar7v4r4rpdrg33sygghs";
};
};
"https://repo.maven.apache.org/maven2/org/slf4j/slf4j-parent/1.7.19/slf4j-parent-1.7.19" =
{
host = repositories.apache;

View File

@ -2,6 +2,8 @@
:url "https://github.com/status-im/status-react/"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
;; NOTE: Dependecies here are used in CI, till the CI script will be updated
;; all deps should be maintained in deps.edn and here.
:dependencies [[org.clojure/clojure "1.10.0"]
[org.clojure/clojurescript "1.10.520"
:exclusions
@ -19,8 +21,8 @@
[com.taoensso/encore "2.94.0"]
[hickory "0.7.1"]
[cljs-bean "1.3.0"]
[mvxcvi/alphabase "1.0.0"]
[rasom/cljs-react-navigation "0.1.4"]]
[binaryage/oops "0.7.0"]
[mvxcvi/alphabase "1.0.0"]]
:plugins [[rasom/lein-githooks "0.1.5"]
[lein-cljsbuild "1.1.7"]
[lein-re-frisk "0.5.8"]

View File

@ -4,6 +4,7 @@
(def fs (js/require "react-native-fs"))
(def keychain (js/require "react-native-keychain"))
(def qr-code (js/require "qrcode"))
(def react (js/require "react"))
(def react-native (js/require "react-native"))
(def status-keycard (js/require "react-native-status-keycard"))
(def webview-bridge (js/require "react-native-webview-bridge"))
@ -26,8 +27,6 @@
(def background-timer-class (js/require "react-native-background-timer"))
(def background-timer (.-default background-timer-class))
(def svg (js/require "react-native-svg"))
(def react-navigation (js/require "react-navigation"))
(def react-native-navigation-twopane (js/require "react-native-navigation-twopane"))
(def react-native-shake (js/require "react-native-shake"))
(def react-native-screens (js/require "react-native-screens"))
(def net-info (js/require "@react-native-community/netinfo"))
@ -40,3 +39,7 @@
(def desktop-config #js {:addEventListener (fn [])})
(def desktop-shortcuts #js {:addEventListener (fn [])})
(def safe-area-context (js/require "react-native-safe-area-context"))
(def react-navigation-native (js/require "@react-navigation/native"))
(def react-navigation-stack (js/require "@react-navigation/stack"))
(def react-navigation-bottom-tabs (js/require "@react-navigation/bottom-tabs"))

View File

@ -41,8 +41,6 @@
(when-not (zero? @keyboard-height)
(dispatch [:set :keyboard-height 0]))))
(.hide react/splash-screen)
;; TODO Temporarily comment away due to current bug https://github.com/kmagiera/react-native-screens/issues/54
;(.useScreens rn-dependencies/react-native-screens)
(.addEventListener react/app-state "change" app-state-change-handler)
(.addEventListener rn-dependencies/react-native-languages "change" on-languages-change)
(.addEventListener rn-dependencies/react-native-shake

View File

@ -39,6 +39,7 @@
(filters/load-filters))))
(fx/defn offload-all-messages
{:events [::offload-all-messages]}
[{:keys [db] :as cofx}]
(when-let [current-chat-id (:current-chat-id db)]
{:db
@ -156,6 +157,7 @@
(mailserver/load-gaps-fx current-chat-id)))))))
(fx/defn load-messages
{:events [::load-messages]}
[{:keys [db now] :as cofx}]
(when-let [current-chat-id (:current-chat-id db)]
(if-not (get-in db [:chats current-chat-id :messages-initialized?])

View File

@ -151,7 +151,7 @@
(contacts-store/fetch-contacts-rpc cofx #(re-frame/dispatch [::contacts-loaded %])))
(fx/defn open-contact-toggle-list
[{:keys [db :as cofx]}]
[{:keys [db] :as cofx}]
(fx/merge cofx
{:db (assoc db
:group/selected-contacts #{}

View File

@ -18,5 +18,5 @@
(defn init [app-root]
(utils.logs/init-logs)
(error-handler/register-exception-handler!)
(re-frame/dispatch [:init/app-started])
(re-frame/dispatch-sync [:init/app-started])
(.registerComponent react/app-registry "StatusIm" #(reagent/reactify-component app-root)))

View File

@ -110,10 +110,10 @@
;; we reset navigation so that navigate back doesn't return
;; into the registration flow
(navigation/navigate-reset cofx
{:index 1
:key :profile-stack
:actions [{:routeName :my-profile}
{:routeName :ens-confirmation}]}))
{:index 1
:key :profile-stack
:routes [{:name :my-profile}
{:name :ens-confirmation}]}))
(defn- on-resolve-owner
[registry custom-domain? username address public-key response resolve-last-id* resolve-last-id]
@ -219,10 +219,9 @@
{:db (dissoc db :ens/registration)}
;; we reset navigation so that navigate back doesn't return
;; into the registration flow
(navigation/navigate-reset {:index 1
:key :profile-stack
:actions [{:routeName :my-profile}
{:routeName :ens-main}]})))
(navigation/navigate-reset {:index 1
:routes [{:name :my-profile}
{:name :ens-main}]})))
(fx/defn switch-domain-type
{:events [::switch-domain-type]}

View File

@ -145,18 +145,6 @@
(update :hardwallet dissoc :application-info))}
(multiaccounts.login/open-login key-uid photo-path name public-key)))))
;; multiaccounts logout module
(handlers/register-handler-fx
:multiaccounts.logout.ui/logout-pressed
(fn [cofx _]
(multiaccounts.logout/show-logout-confirmation cofx)))
(handlers/register-handler-fx
:multiaccounts.logout.ui/logout-confirmed
(fn [cofx _]
(multiaccounts.logout/logout cofx)))
;; multiaccounts update module
(handlers/register-handler-fx

View File

@ -102,9 +102,7 @@
(defn multiaccounts-screen-did-load
[{:keys [db]}]
{:db (-> db
(assoc-in [:hardwallet :setup-step] nil)
(dissoc :multiaccounts/login))})
{:db (assoc-in db [:hardwallet :setup-step] nil)})
(defn authentication-method-screen-did-load
[{:keys [db]}]

View File

@ -186,7 +186,7 @@
encryption-public-key
{})
(if (= flow :import)
(navigation/navigate-to-cofx :keycard-recovery-success nil)
(navigation/navigate-replace-cofx :keycard-recovery-success nil)
(navigation/navigate-to-cofx :welcome nil))))))
(fx/defn on-generate-and-load-key-success

View File

@ -20,7 +20,7 @@
(fx/defn initialize-app-db
"Initialize db to initial state"
[{{:keys [view-id hardwallet initial-props desktop/desktop
[{{:keys [hardwallet initial-props desktop/desktop
supported-biometric-auth network/type app-active-since]} :db now :now}]
{:db (assoc app-db
:initial-props initial-props
@ -29,19 +29,12 @@
:hardwallet (dissoc hardwallet :secrets)
:supported-biometric-auth supported-biometric-auth
:app-active-since (or app-active-since now)
:view-id view-id)})
:multiaccounts/loading true)})
(fx/defn initialize-views
[cofx {:keys [logout?]}]
(let [{{:multiaccounts/keys [multiaccounts] :as db} :db} cofx]
(cond
(empty? multiaccounts)
(navigation/navigate-to-cofx cofx :intro nil)
logout?
(navigation/navigate-to-cofx cofx :multiaccounts nil)
:else
(when (and (seq multiaccounts) (not logout?))
(let [{:keys [key-uid public-key photo-path name]} (first (#(sort-by :last-sign-in > %) (vals multiaccounts)))]
(multiaccounts.login/open-login cofx key-uid photo-path name public-key)))))
@ -57,7 +50,10 @@
{}
all-multiaccounts)]
(fx/merge cofx
{:db (assoc db :multiaccounts/multiaccounts multiaccounts)}
{:db (-> db
(assoc :multiaccounts/multiaccounts multiaccounts)
(assoc :multiaccounts/logout? logout?)
(assoc :multiaccounts/loading false))}
(initialize-views {:logout? logout?}))))
(fx/defn start-app [cofx]

View File

@ -38,7 +38,6 @@
#(when-not (= 0 @keyboard-height)
(dispatch [:set :keyboard-height 0])))
(.hide react/splash-screen)
(.useScreens rn-dependencies/react-native-screens)
(.addEventListener react/app-state "change" app-state-change-handler)
(.addEventListener rn-dependencies/react-native-languages "change" on-languages-change)
(.addEventListener rn-dependencies/react-native-shake

View File

@ -110,7 +110,7 @@
(fx/merge cofx
{:db (update db :hardwallet dissoc :flow)}
(if (= :import flow)
(navigation/navigate-to-cofx :keycard-recovery-success nil)
(navigation/navigate-to-cofx :intro-stack {:screen :keycard-recovery-success})
(navigation/navigate-to-cofx :welcome nil))))))
(fx/defn initialize-dapp-permissions
@ -188,10 +188,11 @@
multiaccount (dissoc settings :networks/current-network :networks/networks)
network-id (str (get-in networks [current-network :config :NetworkId]))]
(fx/merge cofx
(cond-> {:db (assoc db
:networks/current-network current-network
:networks/networks networks
:multiaccount multiaccount)}
(cond-> {:db (-> db
(dissoc :multiaccounts/login)
(assoc :networks/current-network current-network
:networks/networks networks
:multiaccount multiaccount))}
(and platform/android?
notifications-enabled?)
(assoc ::notifications/enable nil)
@ -244,7 +245,6 @@
(when save-password?
(keychain/save-user-password key-uid password))
(keychain/save-auth-method key-uid (or new-auth-method auth-method))
(navigation/navigate-to-cofx :home nil)
(when platform/desktop?
(chat-model/update-dock-badge-label)))))
@ -252,15 +252,17 @@
[{:keys [db] :as cofx}]
(let [{:keys [multiaccount :multiaccount/accounts]} db]
(fx/merge cofx
{:db (assoc db
;;NOTE when login the filters are initialized twice
;;once for contacts and once for chats
;;when creating an account we do it only once by calling
;;load-filters directly because we don't have chats and contacts
;;later on there is a check that filters have been initialized twice
;;so here we set it at 1 already so that it passes the check once it has
;;been initialized
:filters/initialized 1)
{:db (-> db
(dissoc :multiaccounts/login)
(assoc
;;NOTE when login the filters are initialized twice
;;once for contacts and once for chats
;;when creating an account we do it only once by calling
;;load-filters directly because we don't have chats and contacts
;;later on there is a check that filters have been initialized twice
;;so here we set it at 1 already so that it passes the check once it has
;;been initialized
:filters/initialized 1))
:filters/load-filters [[(:waku-enabled multiaccount) []]]}
(finish-keycard-setup)
(protocol/initialize-protocol {:mailservers []
@ -277,17 +279,17 @@
(fx/defn multiaccount-login-success
[{:keys [db now] :as cofx}]
(let [{:keys [key-uid password save-password? creating?]} (:multiaccounts/login db)
recovering? (get-in db [:intro-wizard :recovering?])
login-only? (not (or creating?
recovering?
(keycard-setup? cofx)))
nodes nil]
recovering? (get-in db [:intro-wizard :recovering?])
login-only? (not (or creating?
recovering?
(keycard-setup? cofx)))
nodes nil]
(log/debug "[multiaccount] multiaccount-login-success"
"login-only?" login-only?
"recovering?" recovering?)
(fx/merge cofx
{:db (-> db
(dissoc :multiaccounts/login :connectivity/ui-status-properties)
(dissoc :connectivity/ui-status-properties)
(update :hardwallet dissoc
:on-card-read
:card-read-in-progress?
@ -295,7 +297,7 @@
:multiaccount)
(assoc :logged-in-since now))
::json-rpc/call
[{:method "web3_clientVersion"
[{:method "web3_clientVersion"
:on-success #(re-frame/dispatch [::initialize-web3-client-version %])}]}
;;FIXME
(when nodes
@ -304,19 +306,8 @@
(login-only-events key-uid password save-password?)
(create-only-events))
(when recovering?
(navigation/navigate-to-cofx :home nil)))))
(fx/defn open-keycard-login
[{:keys [db] :as cofx}]
(let [navigation-stack (:navigation-stack db)]
(fx/merge cofx
{:db (-> db
(assoc-in [:hardwallet :pin :enter-step] :login)
(assoc-in [:hardwallet :pin :status] nil)
(assoc-in [:hardwallet :pin :login] []))}
(if (empty? navigation-stack)
(navigation/navigate-to-cofx :multiaccounts nil)
(navigation/navigate-to-cofx :keycard-login-pin nil)))))
(navigation/navigate-to-cofx :tabs {:screen :chat-stack
:params {:screen :home}})))))
(fx/defn open-login
[{:keys [db] :as cofx} key-uid photo-path name public-key]
@ -336,7 +327,7 @@
(fx/defn open-login-callback
{:events [:multiaccounts.login.callback/get-user-password-success]}
[{:keys [db] :as cofx} password]
(let [key-uid (get-in db [:multiaccounts/login :key-uid])
(let [key-uid (get-in db [:multiaccounts/login :key-uid])
keycard-account? (boolean (get-in db [:multiaccounts/multiaccounts
key-uid
:keycard-pairing]))]
@ -346,15 +337,18 @@
{:db (update-in db [:multiaccounts/login] assoc
:password password
:save-password? true)}
(navigation/navigate-to-cofx :progress nil)
(navigation/navigate-to-cofx :intro-stack {:screen :progress})
login)
(fx/merge
cofx
(when keycard-account?
{:db (assoc-in db [:hardwallet :pin :enter-step] :login)})
(navigation/navigate-to-cofx
(if keycard-account? :keycard-login-pin :login)
nil)))))
{:db (-> db
(assoc-in [:hardwallet :pin :enter-step] :login)
(assoc-in [:hardwallet :pin :status] nil)
(assoc-in [:hardwallet :pin :login] []))})
(if keycard-account?
(navigation/navigate-to-cofx :intro-stack {:screen :keycard-login-pin})
(navigation/navigate-to-cofx :intro-stack {:screen :login}))))))
(fx/defn get-credentials
[{:keys [db] :as cofx} key-uid]
@ -369,7 +363,7 @@
"Auth method: nil - not supported, \"none\" - not selected, \"password\", \"biometric\", \"biometric-prepare\""
{:events [:multiaccounts.login/get-auth-method-success]}
[{:keys [db] :as cofx} auth-method]
(let [key-uid (get-in db [:multiaccounts/login :key-uid])
(let [key-uid (get-in db [:multiaccounts/login :key-uid])
keycard-multiaccount? (boolean (get-in db [:multiaccounts/multiaccounts key-uid :keycard-pairing]))]
(log/debug "[login] get-auth-method-success"
"auth-method" auth-method
@ -383,9 +377,7 @@
(get-credentials % key-uid)
;;nil or "none" or "biometric-prepare"
(if keycard-multiaccount?
(open-keycard-login %)
(open-login-callback % nil))))))
(open-login-callback % nil)))))
(fx/defn biometric-auth-done
{:events [:biometric-auth-done]}

View File

@ -9,7 +9,8 @@
[status-im.ui.screens.navigation :as navigation]
[status-im.utils.keychain.core :as keychain]))
(fx/defn logout-method [{:keys [db] :as cofx} {:keys [auth-method logout?]}]
(fx/defn logout-method
[{:keys [db] :as cofx} {:keys [auth-method logout?]}]
(let [key-uid (get-in db [:multiaccount :key-uid])]
(fx/merge cofx
{::logout nil
@ -21,12 +22,14 @@
(init/initialize-app-db))))
(fx/defn logout
{:events [:logout]}
{:events [:logout :multiaccounts.logout.ui/logout-confirmed]}
[cofx]
(logout-method cofx {:auth-method keychain/auth-method-none
:logout? true}))
(fx/defn show-logout-confirmation [_]
(fx/defn show-logout-confirmation
{:events [:multiaccounts.logout.ui/logout-pressed]}
[_]
{:ui/show-confirmation
{:title (i18n/label :t/logout-title)
:content (i18n/label :t/logout-are-you-sure)

View File

@ -60,7 +60,6 @@
;;view
(reg-root-key-sub :view-id :view-id)
(reg-root-key-sub :navigation-stack :navigation-stack)
(reg-root-key-sub :screen-params :navigation/screen-params)
(reg-root-key-sub :two-pane-ui-enabled? :two-pane-ui-enabled?)
@ -191,8 +190,15 @@
(reg-root-key-sub :auth-method :auth-method)
(reg-root-key-sub :multiaccounts/loading :multiaccounts/loading)
;;GENERAL ==============================================================================================================
(re-frame/reg-sub
:multiaccount/logged-in?
(fn [db]
(multiaccounts.model/logged-in? {:db db})))
(re-frame/reg-sub
:connection-stats
:<- [:desktop/desktop]
@ -359,12 +365,6 @@
(fn [[params view-id-db] [_ view-id]]
(get params (or view-id view-id-db))))
(re-frame/reg-sub
:can-navigate-back?
:<- [:navigation-stack]
(fn [stack]
(> (count stack) 1)))
(re-frame/reg-sub
:delete-swipe-position
:<- [:animations]

View File

@ -3,10 +3,14 @@
[status-im.ui.components.status-bar.styles :as styles]
[status-im.utils.platform :as platform]))
(def route->bar-type (merge {:qr-scanner {:type :black}}
(when platform/ios?
{:new-chat {:type :black}
:new-public-chat {:type :black}})))
;; TODO: Integrate into navigation
(defn get-config [view-id]
(or (get {:qr-scanner {:type :black}}
view-id)
{:type :main}))
(get route->bar-type view-id {:type :main}))
(defn set-status-bar
"If more than one `StatusBar` is rendered, the one which was mounted last will

View File

@ -3,6 +3,7 @@
[status-im.ui.components.animation :as animation]
[status-im.ui.components.tabbar.styles :as tabs.styles]
[reagent.core :as reagent]
[oops.core :refer [oget]]
[status-im.ui.components.react :as react]
[status-im.utils.platform :as platform]
[status-im.ui.components.icons.vector-icons :as vector-icons]
@ -10,7 +11,9 @@
[status-im.i18n :as i18n]
[re-frame.core :as re-frame]))
(defonce visible? (animation/create-value 1))
(defonce visible? (animation/create-value 0))
(defonce minimized-state (reagent/atom nil))
(defonce last-to-value (atom 1))
(defn animate
@ -27,6 +30,20 @@
:useNativeDriver true})
callback))))
(defn main-tab? [view-id]
(contains?
#{:home :wallet :open-dapp :my-profile :wallet-onboarding-setup}
view-id))
(defn minimize-bar [route-name]
(if (main-tab? route-name)
(do
(reset! minimized-state false)
(animate visible? 150 0))
(do
(reset! minimized-state true)
(animate visible? 150 1))))
(def tabs-list-data
(->>
[{:nav-stack :chat-stack
@ -49,119 +66,38 @@
:icon :main-icons/user-profile}
:count-subscription :get-profile-unread-messages-number
:accessibility-label :profile-tab-button}]
(remove nil?)))
(remove nil?)
(map-indexed vector)))
(defn new-tab
[{:keys [icon label active? nav-stack
accessibility-label count-subscription]}]
(let [count (when count-subscription
(re-frame/subscribe [count-subscription]))]
[react/touchable-highlight
{:style tabs.styles/touchable-container
:disabled active?
:on-press #(re-frame/dispatch-sync [:navigate-to nav-stack])
:accessibility-label accessibility-label}
[react/view
{:style tabs.styles/new-tab-container}
[react/view
{:style tabs.styles/icon-container}
[vector-icons/icon icon (tabs.styles/icon active?)]
(when count
(cond
(or (pos? @count) (pos? (:other @count)))
[react/view {:style (if (= nav-stack :chat-stack)
tabs.styles/message-counter
tabs.styles/counter)}
[badge/message-counter (or (:other @count) @count) true]]
(pos? (:public @count))
[react/view {:style tabs.styles/counter-public-container}
[react/view {:style tabs.styles/counter-public
:accessibility-label :public-unread-badge}]]))]
(when-not platform/desktop?
[react/view {:style tabs.styles/tab-title-container}
[react/text {:style (tabs.styles/new-tab-title active?)}
label]])]]))
(defn tab []
(fn [{:keys [icon label active? nav-stack on-press
accessibility-label count-subscription]}]
(let [count (when count-subscription @(re-frame/subscribe [count-subscription]))]
[react/touchable-highlight {:style tabs.styles/touchable-container
:on-press on-press
:accessibility-label accessibility-label}
[react/view {:style tabs.styles/tab-container}
[react/view {:style tabs.styles/icon-container}
[vector-icons/icon icon (tabs.styles/icon active?)]
(when count
(cond
(or (pos? count) (pos? (:other count)))
[react/view {:style (if (= nav-stack :chat-stack)
tabs.styles/message-counter
tabs.styles/counter)}
[badge/message-counter (or (:other count) count) true]]
(pos? (:public count))
[react/view {:style tabs.styles/counter-public-container}
[react/view {:style tabs.styles/counter-public
:accessibility-label :public-unread-badge}]]))]
(when-not platform/desktop?
[react/view {:style tabs.styles/tab-title-container}
[react/text {:style (tabs.styles/tab-title active?)}
label]])]])))
(defn tabs [current-view-id]
[react/view
{:style tabs.styles/new-tabs-container}
[react/view {:style tabs.styles/tabs}
(for [{:keys [nav-stack accessibility-label count-subscription]
{:keys [icon title]} :content} tabs-list-data]
^{:key nav-stack}
[new-tab
{:icon icon
:label title
:accessibility-label accessibility-label
:count-subscription count-subscription
:active? (= current-view-id nav-stack)
:nav-stack nav-stack}])]])
(defn main-tab? [view-id]
(contains?
#{:home :wallet :open-dapp :my-profile :wallet-onboarding-setup}
view-id))
(defn minimize-bar [view-id]
(if (main-tab? view-id)
(animate visible? 150 1)
(animate visible? 150 tabs.styles/minimized-tab-ratio)))
(defn tabs-animation-wrapper-ios
[content]
[react/view {:style tabs.styles/title-cover-wrapper-ios}
[react/view
content
(when platform/iphone-x?
[react/view
{:style tabs.styles/ios-titles-cover}])]])
(defn tabs-animation-wrapper-android
[keyboard-shown? view-id content]
[react/view
{:style (tabs.styles/animation-wrapper
keyboard-shown?
(main-tab? view-id))}
[react/view
{:style tabs.styles/title-cover-wrapper-android}
content]])
(defn tabs-animation-wrapper [keyboard-shown? view-id tab]
(reagent.core/create-class
{:component-will-update
(fn [this new-params]
(let [old-view-id (get (.-argv (.-props this)) 2)
new-view-id (get new-params 2)]
(when (not= new-view-id old-view-id)
(minimize-bar new-view-id))))
:reagent-render
(fn [keyboard-shown? view-id tab]
(when-not (contains? #{:enter-pin-settings} view-id)
(case platform/os
"ios" [tabs-animation-wrapper-ios
[react/animated-view
{:style (tabs.styles/animated-container visible? keyboard-shown?)}
[tabs tab]]]
"android" [tabs-animation-wrapper-android
keyboard-shown?
view-id
[react/animated-view
{:style (tabs.styles/animated-container visible? keyboard-shown?)}
[tabs tab]]]
"desktop"
[tabs-animation-wrapper-android
keyboard-shown?
view-id
[react/animated-view
{:style (tabs.styles/animated-container visible? keyboard-shown?)}
[tabs tab]]])))}))
(def disappearance-duration 150)
(def appearance-duration 100)
(defn tabbar [_ view-id]
(let [keyboard-shown? (reagent/atom false)
listeners (atom [])]
(defn tabs []
(let [listeners (atom [])
keyboard-shown? (reagent/atom false)]
(reagent/create-class
{:component-did-mount
(fn []
@ -170,16 +106,10 @@
listeners
[(.addListener react/keyboard "keyboardDidShow"
(fn []
(reset! keyboard-shown? true)
(animate visible?
disappearance-duration 0)))
(reset! keyboard-shown? true)))
(.addListener react/keyboard "keyboardDidHide"
(fn []
(reset! keyboard-shown? false)
(animate visible? appearance-duration
(if (main-tab? @view-id)
1
tabs.styles/minimized-tab-ratio))))])))
(reset! keyboard-shown? false)))])))
:component-will-unmount
(fn []
(when (not-empty @listeners)
@ -187,14 +117,36 @@
(when listener
(.remove listener)))))
:reagent-render
(fn [args view-id]
(let [idx (.. (:navigation args)
-state
-index)
tab (case idx
0 :chat-stack
1 :browser-stack
2 :wallet-stack
3 :profile-stack
:chat-stack)]
[tabs-animation-wrapper @keyboard-shown? @view-id tab]))})))
(fn [{:keys [navigate index inset]}]
[react/animated-view {:style (tabs.styles/tabs-wrapper @keyboard-shown? @minimized-state inset)}
[react/animated-view {:style (tabs.styles/animated-container visible?)}
[react/view
{:style tabs.styles/tabs-container}
[react/view {:style tabs.styles/tabs}
(for [[route-index
{:keys [nav-stack accessibility-label count-subscription content]}]
tabs-list-data
:let [{:keys [icon title]} content]]
^{:key nav-stack}
[tab
{:icon icon
:label title
:on-press #(navigate (name nav-stack))
:accessibility-label accessibility-label
:count-subscription count-subscription
:active? (= (str index) (str route-index))
:nav-stack nav-stack}])]]]
[react/view
{:style (tabs.styles/ios-titles-cover inset)}]])})))
(defn tabbar [props]
(let [navigate (oget props "navigation" "navigate")
index (oget props "state" "index")]
(reagent/as-element
[react/safe-area-consumer
(fn [insets]
(reagent/as-element
[tabs {:navigate navigate
:index index
:inset (oget insets "bottom")}]))])))

View File

@ -7,7 +7,7 @@
(def tabs-height
(cond
platform/android? 52
platform/ios? 52
platform/ios? 52
platform/desktop? 36))
(def minimized-tabs-height 36)
@ -17,30 +17,6 @@
(def minimized-tab-ratio
(/ minimized-tabs-height tabs-height))
(def tab-height (dec tabs-height))
(def tabs-container
{:flex-direction :row
:height tabs-height
:background-color colors/white
:border-top-width 1
:border-top-color colors/black-transparent})
(def tab-container
{:height tabs-height
:justify-content :center
:align-items :center})
(styles/defn tab-title [active?]
{:ios {:font-size 11}
:android {:font-size 11}
:desktop {:font-size 12
:font-weight (if active? "600" "400")}
:text-align :center
:color (if active?
colors/blue
colors/gray)})
(def counter
{:right 0
:top 0
@ -76,7 +52,7 @@
{:flex 1
:height tabs-height})
(def new-tab-container
(def tab-container
{:flex 1
:height tabs-height
:align-items :center
@ -101,72 +77,49 @@
:align-items :center
:justify-content :center})
(defn new-tab-title [active?]
(defn tab-title [active?]
{:color (if active? colors/blue colors/gray)
:font-size 11})
(styles/def new-tabs-container
{:height tabs-height
:align-self :stretch
:ios {:background-color :white
:shadow-radius 4
:shadow-offset {:width 0 :height -5}
:shadow-opacity 0.3
:shadow-color "rgba(0, 9, 26, 0.12)"}
:desktop {:background-color :white
:shadow-radius 4
:shadow-offset {:width 0 :height -5}
:shadow-opacity 0.3
:shadow-color "rgba(0, 9, 26, 0.12)"}})
(styles/def tabs-container
{:height minimized-tabs-height
:align-self :stretch
:background-color :white
:ios {:shadow-radius 4
:shadow-offset {:width 0 :height -5}
:shadow-opacity 0.3
:shadow-color "rgba(0, 9, 26, 0.12)"}
:desktop {:background-color :white
:shadow-radius 4
:shadow-offset {:width 0 :height -5}
:shadow-opacity 0.3
:shadow-color "rgba(0, 9, 26, 0.12)"}})
(def tabs
{:height tabs-height
:align-self :stretch
:padding-left 8
:padding-right 8
:flex-direction :row})
{:align-self :stretch
:padding-horizontal 8
:flex-direction :row})
(defn animated-container [visible? keyboard-shown?]
{:bottom 0
:left 0
:right 0
:background-color :white
:elevation 8
:position (when (or platform/ios?
keyboard-shown?)
:absolute)
:transform [{:translateY
(animation/interpolate
visible?
{:inputRange [0 1]
:outputRange [tabs-height 0]})}]})
(defn animated-container [visible?]
{:transform [{:translateY
(animation/interpolate visible?
{:inputRange [0 1]
:outputRange [(- tabs-diff) 0]})}]})
(def ios-titles-cover
(defn ios-titles-cover [inset]
{:background-color :white
:position :absolute
:height (- tabs-height minimized-tabs-height)
:height tabs-diff
:align-self :stretch
:top 0
:bottom (- inset tabs-diff)
:right 0
:left 0})
(def title-cover-wrapper-ios
{:left 0
:right 0
:bottom 0
:padding-bottom (if platform/iphone-x? 34 0)
:position :absolute
:background-color :white})
(def title-cover-wrapper-android
{:left 0
:right 0
:bottom 0
:position :absolute})
(defn animation-wrapper [keyboard-shown? main-tab?]
{:height (cond
keyboard-shown? 0
main-tab? tabs-height
:else minimized-tabs-height)
:align-self :stretch})
(defn tabs-wrapper [keyboard minimized inset]
(merge {:padding-bottom inset
:elevation 8
:padding-top (if minimized 0 tabs-diff)
:background-color :white}
(when keyboard
{:position :absolute
:bottom (- tabs-height)})))

View File

@ -60,3 +60,8 @@
%
new-identity
@resolve-last-id])}})))))))
(handlers/register-handler-fx
::new-chat-focus
(fn [{:keys [db]}]
{:db (dissoc db :contacts/new-identity)}))

View File

@ -1,6 +0,0 @@
(ns status-im.ui.screens.add-new.new-chat.navigation
(:require [status-im.ui.screens.navigation :as navigation]))
(defmethod navigation/preload-data! :new-chat
[db _]
(dissoc db :contacts/new-identity))

View File

@ -8,7 +8,6 @@
[status-im.ui.components.list.views :as list]
[status-im.ui.components.common.common :as components.common]
[status-im.ui.screens.wallet.components.views :as components]
[status-im.ui.components.tabbar.styles :as tabs.styles]
[status-im.react-native.resources :as resources]
[status-im.ui.components.list-item.views :as list-item]
[status-im.ui.components.icons.vector-icons :as vector-icons]
@ -70,7 +69,7 @@
[react/view {:position :absolute
:z-index 2
:align-items :center
:bottom (+ 16 tabs.styles/tabs-diff)
:bottom 16
:left 0
:right 0
:padding-horizontal 32}
@ -106,7 +105,7 @@
[list-header false]
[list/flat-list {:data browsers
:footer [react/view
{:style {:height (+ tabs.styles/tabs-diff 64)
{:style {:height 64
:align-self :stretch}}]
:key-fn :browser-id
:end-fill-color colors/white

View File

@ -20,7 +20,6 @@
;; initial state of app-db
(def app-db {:keyboard-height 0
:navigation-stack '(:multiaccounts)
:contacts/contacts {}
:pairing/installations {}
:qr-codes {}
@ -63,7 +62,6 @@
;;;;GLOBAL
(spec/def ::was-modal? (spec/nilable boolean?))
;;"http://localhost:8545"
(spec/def ::rpc-url (spec/nilable string?))
;;object? doesn't work
@ -94,12 +92,6 @@
;;current view
(spec/def :navigation/view-id (spec/nilable keyword?))
;;modal view id
(spec/def :navigation/modal (spec/nilable keyword?))
;;stack of view's ids (keywords)
(spec/def :navigation/navigation-stack (spec/nilable seq?))
(spec/def :navigation/prev-tab-view-id (spec/nilable keyword?))
(spec/def :navigation/prev-view-id (spec/nilable keyword?))
;; navigation screen params
(spec/def :navigation.screen-params/network-details (spec/keys :req [:networks/selected-network]))
(spec/def :navigation.screen-params/browser (spec/nilable map?))
@ -121,7 +113,6 @@
(spec/def :navigation.screen-params/collectibles-list map?)
(spec/def :navigation.screen-params/selection-modal-screen map?)
(spec/def :navigation.screen-params/manage-dapps-permissions map?)
(spec/def :navigation/screen-params (spec/nilable (spec/keys :opt-un [:navigation.screen-params/network-details
@ -131,7 +122,6 @@
:navigation.screen-params/group-contacts
:navigation.screen-params/edit-contact-group
:navigation.screen-params/collectibles-list
:navigation.screen-params/selection-modal-screen
:navigation.screen-params/manage-dapps-permissions])))
(spec/def :desktop/desktop (spec/nilable any?))
@ -257,7 +247,6 @@
:popover/popover
:wallet/sign-phrase-showed?]
:opt-un [::modal
::was-modal?
::rpc-url
::tooltips
::initial-props
@ -282,9 +271,6 @@
::auth-method
:multiaccount/multiaccount
:navigation/view-id
:navigation/navigation-stack
:navigation/prev-tab-view-id
:navigation/prev-view-id
:chat/chats
:chat/current-chat-id
:chat/chat-id

View File

@ -19,7 +19,6 @@
[status-im.ui.components.toolbar.view :as toolbar]
[status-im.ui.screens.chat.message.message :as message]
[status-im.ui.screens.profile.components.views :as profile.components]
[status-im.utils.navigation :as navigation]
[status-im.ui.components.list-item.views :as list-item]
[status-im.ui.screens.chat.photos :as photos]
[status-im.multiaccounts.core :as multiaccounts]
@ -186,10 +185,11 @@
[react/view {:flex-direction :row :justify-content :center}
;;NOTE required so that the keyboards shows up when navigating
;;back from checkout screen
[:> navigation/navigation-events
{:on-did-focus
(fn []
(.focus @input-ref))}]
;; TODO: navigation-events were deprecated
;; [:> navigation/navigation-events
;; {:on-did-focus
;; (fn []
;; (.focus @input-ref))}]
;;NOTE setting the key as placeholder forces the component to remount
;;when the placeholder changes, this prevents the placeholder from
;;disappearing when switching between stateofus and custom domain

View File

@ -4,12 +4,9 @@
status-im.ui.screens.group.chat-settings.events
status-im.ui.screens.group.events
status-im.utils.universal-links.events
status-im.ui.screens.add-new.new-chat.navigation
status-im.ui.screens.profile.events
status-im.ui.screens.wallet.navigation
[re-frame.core :as re-frame]
[status-im.chat.models :as chat]
[status-im.chat.models.loading :as chat.loading]
[status-im.hardwallet.core :as hardwallet]
[status-im.mailserver.core :as mailserver]
[status-im.multiaccounts.recover.core :as recovery]
@ -194,14 +191,12 @@
(fn [{:keys [db]} [_ enabled?]]
{:db (assoc db :two-pane-ui-enabled? enabled?)}))
;; NOTE: Will be removed with the keycard PR
(handlers/register-handler-fx
:screens/on-will-focus
(fn [{:keys [db] :as cofx} [_ view-id]]
(fx/merge cofx
{:db (assoc db :view-id view-id)}
#(case view-id
:chat (chat.loading/load-messages cofx)
:home (chat.loading/offload-all-messages cofx)
:keycard-settings (hardwallet/settings-screen-did-load %)
:reset-card (hardwallet/reset-card-screen-did-load %)
:enter-pin-settings (hardwallet/enter-pin-screen-did-load %)

View File

@ -1,6 +1,5 @@
(ns status-im.ui.screens.group.events
(:require [status-im.utils.handlers :as handlers]
[status-im.ui.screens.group.navigation]))
(:require [status-im.utils.handlers :as handlers]))
(handlers/register-handler-fx
:deselect-contact
@ -21,3 +20,8 @@
:select-participant
(fn [{:keys [db]} [_ id]]
{:db (update db :selected-participants conj id)}))
(handlers/register-handler-fx
::add-participants-toggle-list
(fn [{db :db}]
{:db (assoc db :selected-participants #{})}))

View File

@ -1,6 +0,0 @@
(ns status-im.ui.screens.group.navigation
(:require [status-im.ui.screens.navigation :as nav]))
(defmethod nav/preload-data! :add-participants-toggle-list
[db _]
(assoc db :selected-participants #{}))

View File

@ -41,7 +41,7 @@
[react/i18n-text {:style styles/welcome-text-description
:key :welcome-to-status-description}]]
[react/view {:align-items :center :margin-bottom 50}
[components.common/button {:on-press #(re-frame/dispatch [:navigate-back])
[components.common/button {:on-press #(re-frame/dispatch [:navigate-reset :tabs])
:accessibility-label :lets-go-button
:label (i18n/label :t/lets-go)}]]])

View File

@ -17,14 +17,6 @@
[status-im.ui.components.topbar :as topbar])
(:require-macros [status-im.utils.views :refer [defview letsubs]]))
(defn login-toolbar [can-navigate-back?]
[topbar/topbar
{:navigation (if can-navigate-back?
{:icon :main-icons/back
:accessibility-label :back-button
:handler #(re-frame/dispatch [:navigate-reset :multiaccounts])}
:none)}])
(defn login-multiaccount [password-text-input]
(.blur password-text-input)
(re-frame/dispatch [:multiaccounts.login.ui/password-input-submitted]))
@ -46,14 +38,13 @@
(defview login []
(letsubs [{:keys [error processing save-password?] :as multiaccount} [:multiaccounts/login]
can-navigate-back? [:can-navigate-back?]
password-text-input (atom nil)
sign-in-enabled? [:sign-in-enabled?]
auth-method [:auth-method]
view-id [:view-id]
supported-biometric-auth [:supported-biometric-auth]]
[react/keyboard-avoiding-view {:style ast/multiaccounts-view}
[login-toolbar can-navigate-back?]
[topbar/topbar {}]
[react/scroll-view {:keyboardShouldPersistTaps :always
:style styles/login-view}
[react/view styles/login-badge-container

View File

@ -1,7 +1,7 @@
(ns status-im.ui.screens.navigation
(:require [re-frame.core :as re-frame]
[status-im.utils.handlers :as handlers]
[status-im.utils.navigation :as navigation]
[status-im.ui.screens.routing.core :as navigation]
[taoensso.timbre :as log]
[status-im.utils.fx :as fx]))
@ -10,54 +10,29 @@
(defmethod unload-data! :default [db] db)
(defmulti preload-data!
(fn [db [_ view-id]] (or view-id (:view-id db))))
(defmethod preload-data! :default [db _] db)
(defn- -preload-data! [{:keys [was-modal?] :as db} & args]
(if was-modal?
(dissoc db :was-modal?)
(apply preload-data! db args)))
(fx/defn navigate-to-cofx
[{:keys [db]} go-to-view-id screen-params]
(let [view-id (:view-id db)
db (cond-> (assoc db :view-id go-to-view-id)
(let [db (cond-> (assoc db :view-id go-to-view-id)
;; TODO: Inspect the need of screen-params
(seq screen-params)
(assoc-in [:navigation/screen-params go-to-view-id]
screen-params))]
{:db (if (= view-id go-to-view-id)
db
(-> db
(update :navigation-stack conj go-to-view-id)
(assoc :view-id go-to-view-id)))
{:db db
::navigate-to [go-to-view-id screen-params]}))
(fx/defn navigate-replace-cofx
[{:keys [db]} go-to-view-id screen-params]
(let [view-id (:view-id db)
db (cond-> (assoc db :view-id go-to-view-id)
(seq screen-params)
(assoc-in [:navigation/screen-params go-to-view-id]
screen-params))]
{:db (if (= view-id go-to-view-id)
db
(-> db
(update :navigation-stack conj go-to-view-id)
(assoc :view-id go-to-view-id)))
(let [db (cond-> (assoc db :view-id go-to-view-id)
(seq screen-params)
(assoc-in [:navigation/screen-params go-to-view-id]
screen-params))]
{:db db
::navigate-replace [go-to-view-id screen-params]}))
(fx/defn navigate-reset
[{:keys [db]} {:keys [index actions] :as config}]
(let [stack (into '() (map :routeName actions))
view-id (get stack index)]
{:db (assoc db
:view-id view-id
;;NOTE: stricly needs to be a list
;;because navigate-back pops it
:navigation-stack stack)
::navigate-reset config}))
[_ config]
{::navigate-reset config})
(def unload-data-interceptor
(re-frame/->interceptor
@ -68,7 +43,7 @@
(re-frame/assoc-coeffect context :db (unload-data! db))))))
(def navigation-interceptors
[unload-data-interceptor (re-frame/enrich preload-data!)])
[unload-data-interceptor])
(re-frame/reg-fx
::navigate-to
@ -76,6 +51,12 @@
(log/debug :navigate-to view-id params)
(navigation/navigate-to (name view-id) params)))
(re-frame/reg-fx
::navigate-replace
(fn [[view-id params]]
(log/debug :navigate-replace view-id params)
(navigation/navigate-replace (name view-id) params)))
(re-frame/reg-fx
::navigate-back
(fn []
@ -100,40 +81,20 @@
(fn [cofx [_ & [go-to-view-id screen-params]]]
(navigate-to-cofx cofx go-to-view-id screen-params)))
(handlers/register-handler-fx
:navigate-replace
navigation-interceptors
(fn [cofx [_ & [go-to-view-id screen-params]]]
(navigate-replace-cofx cofx go-to-view-id screen-params)))
(handlers/register-handler-fx
:navigate-to-modal
navigation-interceptors
(fn [{:keys [db]} [_ modal-view]]
{:db (assoc db :modal modal-view)}))
(fx/defn navigate-back
[{{:keys [navigation-stack view-id] :as db} :db}]
{::navigate-back nil
:db (let [[previous-view-id :as navigation-stack'] (pop navigation-stack)
first-in-stack (first navigation-stack)]
(if (= view-id first-in-stack)
(-> db
(assoc :view-id previous-view-id)
(assoc :navigation-stack navigation-stack'))
(assoc db :view-id first-in-stack)))})
[_]
{::navigate-back nil})
(handlers/register-handler-fx
:navigate-back
(re-frame/enrich -preload-data!)
(fn [cofx _]
(navigate-back cofx)))
(handlers/register-handler-fx
:navigate-reset
(fn [cofx [_ view-id]]
(navigate-reset cofx {:index 0
:actions [{:routeName view-id}]})))
(navigate-reset cofx {:index 0
:routes [{:name view-id}]})))
(handlers/register-handler-fx
:navigate-to-clean
@ -141,11 +102,7 @@
(navigate-to-cofx cofx view-id params)))
(handlers/register-handler-fx
:navigate-to-tab
:navigate-replace
navigation-interceptors
(fn [{:keys [db] :as cofx} [_ view-id]]
(fx/merge cofx
{:db (-> db
(assoc :prev-tab-view-id (:view-id db))
(assoc :prev-view-id (:view-id db)))}
(navigate-to-cofx view-id {}))))
(fn [cofx [_ & [go-to-view-id screen-params]]]
(navigate-replace-cofx cofx go-to-view-id screen-params)))

View File

@ -52,7 +52,8 @@
(defn footer [syncing]
[react/touchable-highlight {:on-press (when-not @syncing
synchronize-installations!)
:style main-tabs.styles/tabs-container}
;; TODO: Inspect the need of coupling with tabbar here
:style main-tabs.styles/tabs-container}
[react/view
{:style styles/footer-content}
[react/text

View File

@ -4,8 +4,6 @@
[status-im.i18n :as i18n]
[status-im.ui.components.list.views :as list]
[status-im.utils.utils :as utils]
[status-im.utils.platform :as platform]
[status-im.ui.components.tabbar.styles :as tabs.styles]
[status-im.ui.components.icons.vector-icons :as icons]
[status-im.ui.components.react :as react]
[status-im.ui.components.large-toolbar.view :as large-toolbar]
@ -145,8 +143,6 @@
list-ref)]
[react/view
{:style
(merge {:flex 1}
(when platform/ios?
{:margin-bottom tabs.styles/tabs-diff}))}
(merge {:flex 1})}
(:minimized-toolbar generated-view)
(:content-with-header generated-view)]))))

View File

@ -12,7 +12,6 @@
[status-im.ui.components.list.views :as list.views]
[status-im.ui.components.qr-code-viewer.views :as qr-code-viewer]
[status-im.ui.components.react :as react]
[status-im.ui.components.tabbar.styles :as tabs.styles]
[status-im.ui.components.toolbar.view :as toolbar]
[status-im.ui.screens.chat.photos :as photos]
[status-im.ui.screens.profile.components.views :as profile.components]
@ -210,17 +209,15 @@
anim-opacity]))
(defn content-with-header [list-ref scroll-y]
(let [{:keys [public-key
preferred-name
(let [{:keys [preferred-name
mnemonic
keycard-pairing
address
notifications-enabled?]
:as multiaccount} @(re-frame/subscribe [:multiaccount])
:as multiaccount} @(re-frame/subscribe [:multiaccount])
active-contacts-count @(re-frame/subscribe [:contacts/active-count])
tribute-to-talk @(re-frame/subscribe [:tribute-to-talk/profile])
registrar @(re-frame/subscribe [:ens.stateofus/registrar])
photo-added? @(re-frame/subscribe [:profile/photo-added?])]
tribute-to-talk @(re-frame/subscribe [:tribute-to-talk/profile])
registrar @(re-frame/subscribe [:ens.stateofus/registrar])
photo-added? @(re-frame/subscribe [:profile/photo-added?])]
[large-toolbar/flat-list-with-header-handler
(header multiaccount photo-added?)
(flat-list-content
@ -231,15 +228,11 @@
scroll-y]))
(defn my-profile []
(let [list-ref (reagent/atom nil)
(let [list-ref (reagent/atom nil)
anim-opacity (animation/create-value 0)
scroll-y (animation/create-value 0)]
scroll-y (animation/create-value 0)]
(large-toolbar/add-listener anim-opacity scroll-y)
(fn []
[react/view
{:style
(merge {:flex 1}
(when platform/ios?
{:margin-bottom tabs.styles/tabs-diff}))}
[react/view {:style {:flex 1}}
[minimized-toolbar-handler anim-opacity]
[content-with-header list-ref scroll-y]])))

View File

@ -1,6 +1,5 @@
(ns status-im.ui.screens.progress.styles
(:require [status-im.ui.components.colors :as colors]
[status-im.ui.components.toolbar.styles :as toolbar.styles]))
(:require [status-im.ui.components.colors :as colors]))
(def container
{:flex 1

View File

@ -44,15 +44,15 @@
{:keys [height width]} [:dimensions/window]
camera-flashlight [:wallet.send/camera-flashlight]
opts [:get-screen-params]]
[react/view {:style {:flex 1 :background-color colors/black}}
[react/safe-area-view {:style {:flex 1
:background-color colors/black}}
[topbar camera-flashlight opts]
[react/with-activity-indicator
{}
[camera/camera
{:style {:flex 1}
;:torchMode (camera/set-torch camera-flashlight)
:captureAudio false
:onBarCodeRead #(when-not @read-once?
(reset! read-once? true)
(on-barcode-read opts %))}]]
[viewfinder (int (* 2 (/ (min height width) 3)))]]))
[viewfinder (int (* 2 (/ (min height width) 3)))]]))

View File

@ -1,30 +0,0 @@
(ns status-im.ui.screens.routing.back-actions)
(def back-actions {:chat :default
:login :default
:recover-multiaccount-enter-phrase :default
:create-multiaccount-generate-key :default
:new-chat :default
:new-public-chat :default
:wallet-account :default
:add-new-account :default
:add-new-account-pin :default
:about-app :default
:help-center :default
:glossary :default
:advanced-settings :default
:sync-settings :default
:mobile-network-settings :default
:offline-messaging-settings :default
:edit-mailserver :default
:installations :default
:privacy-and-security :default
:dapps-permissions :default
:contacts-list :default
:blocked-users-list :default
:ens-main :default
:ens-register :default
:wallet-settings-assets :default
:wallet-add-custom-token :default
:currency-settings :default
:backup-seed :default})

View File

@ -1,7 +1,14 @@
(ns status-im.ui.screens.routing.browser-stack)
(ns status-im.ui.screens.routing.browser-stack
(:require [status-im.ui.screens.routing.core :as navigation]
[status-im.ui.screens.browser.open-dapp.views :as open-dapp]
[status-im.ui.screens.browser.views :as browser]))
(def browser-stack
{:name :browser-stack
:screens [:open-dapp
:browser]
:config {:initialRouteName :open-dapp}})
(defonce stack (navigation/create-stack))
(defn browser-stack []
[stack {:initial-route-name :open-dapp
:header-mode :none}
[{:name :open-dapp
:component open-dapp/open-dapp}
{:name :browser
:component browser/browser}]])

View File

@ -1,15 +1,37 @@
(ns status-im.ui.screens.routing.chat-stack)
(ns status-im.ui.screens.routing.chat-stack
(:require [status-im.ui.screens.routing.core :as navigation]
[status-im.ui.screens.home.views :as home]
[status-im.ui.screens.chat.views :as chat]
[status-im.ui.screens.profile.contact.views :as profile.contact]
[status-im.ui.screens.group.views :as group]
[status-im.ui.screens.profile.group-chat.views :as profile.group-chat]
[status-im.chat.models.loading :as chat.loading]
[status-im.ui.screens.group.events :as group.events]
[status-im.ui.screens.stickers.views :as stickers]))
(def chat-stack
{:name :chat-stack
:screens [:home
:chat
:profile
:take-picture
:new-group
:add-participants-toggle-list
:contact-toggle-list
:group-chat-profile
:stickers
:stickers-pack]
:config {:initialRouteName :home}})
(defonce stack (navigation/create-stack))
(defn chat-stack []
[stack {:initial-route-name :home
:header-mode :none}
[{:name :home
:on-focus [::chat.loading/offload-all-messages]
:component home/home}
{:name :chat
:on-focus [::chat.loading/load-messages]
:component chat/chat}
{:name :profile
:component profile.contact/profile}
{:name :new-group
:component group/new-group}
{:name :add-participants-toggle-list
:on-focus [::group.events/add-participants-toggle-list]
:component group/add-participants-toggle-list}
{:name :contact-toggle-list
:component group/contact-toggle-list}
{:name :group-chat-profile
:component profile.group-chat/group-chat-profile}
{:name :stickers
:component stickers/packs}
{:name :stickers-pack
:component stickers/pack}]])

View File

@ -1,247 +1,131 @@
(ns status-im.ui.screens.routing.core
(:require
[reagent.core :as reagent]
[status-im.ui.components.react :as react]
[status-im.ui.screens.routing.back-actions :as back-actions]
[status-im.ui.components.styles :as common-styles]
[status-im.utils.navigation :as navigation]
[cljs-react-navigation.reagent :as nav-reagent]
[re-frame.core :as re-frame]
[taoensso.timbre :as log]
[status-im.utils.platform :as platform]
[status-im.utils.core :as utils]
[status-im.ui.screens.routing.screens :as screens]
[status-im.ui.screens.routing.intro-login-stack :as intro-login-stack]
[status-im.ui.screens.routing.chat-stack :as chat-stack]
[status-im.ui.screens.routing.wallet-stack :as wallet-stack]
[status-im.ui.screens.routing.profile-stack :as profile-stack]
[status-im.ui.screens.routing.browser-stack :as browser-stack]
[status-im.ui.screens.routing.modals :as modals]
[status-im.ui.components.tabbar.core :as tabbar]
[status-im.ui.components.status-bar.view :as status-bar]
[status-im.ui.components.tabbar.styles :as tabs.styles]
[oops.core :refer [ocall oget]]
[status-im.react-native.js-dependencies :as js-dependencies]))
(defonce view-id (reagent.core/atom nil))
(defonce back-button-listener (atom nil))
(defonce native js-dependencies/react-navigation-native)
(defonce stack js-dependencies/react-navigation-stack)
(defonce bottom-tabs js-dependencies/react-navigation-bottom-tabs)
(defn navigation-events [current-view-id modal? screen-focused?]
[:> navigation/navigation-events
{:on-will-focus
(fn [payload]
(reset! screen-focused? true)
(when (not= @view-id current-view-id)
(reset! view-id current-view-id))
(log/debug :on-will-focus current-view-id)
(when modal?
(status-bar/set-status-bar current-view-id))
(re-frame/dispatch [:screens/on-will-focus current-view-id]))
:on-did-focus
(def navigation-container (reagent/adapt-react-class
(oget native "NavigationContainer")))
(def use-focus-effect (oget native "useFocusEffect"))
(def use-callback (oget js-dependencies/react "useCallback"))
(def add-back-handler-listener (oget js-dependencies/back-handler "addEventListener"))
(def remove-back-handler-listener (oget js-dependencies/back-handler "removeEventListener"))
(def transition-presets (oget stack "TransitionPresets"))
(def modal-presentation-ios (merge (js->clj (oget transition-presets "ModalPresentationIOS"))
{:gestureEnabled true
:cardOverlayEnabled true}))
;; TODO(Ferossgp): Unify with topbar back icon. Maybe dispatch the same event and move the all logic inside the event.
(defn handle-on-screen-focus
[{:keys [back-handler on-focus name]}]
(use-focus-effect
(use-callback
(fn []
(when @back-button-listener (.remove @back-button-listener))
(reset!
back-button-listener
(.addEventListener
js-dependencies/back-handler
"hardwareBackPress"
#(not (get back-actions/back-actions current-view-id))))
(when-not modal?
(status-bar/set-status-bar current-view-id)))
:on-will-blur
(fn [payload]
(reset! screen-focused? false)
(log/debug :on-will-blur current-view-id)
;; Reset currently mounted text inputs to their default values
;; on navigating away; this is a privacy measure
(doseq [[text-input default-value] @react/text-input-refs]
(.setNativeProps text-input (clj->js {:text default-value}))))}])
(log/debug :on-screen-focus name)
(let [on-back-press (fn []
(when (and back-handler
(not= back-handler :noop))
(re-frame/dispatch back-handler))
(boolean back-handler))]
(when on-focus (re-frame/dispatch on-focus))
(add-back-handler-listener "hardwareBackPress" on-back-press)
(fn []
(remove-back-handler-listener "hardwareBackPress" on-back-press))))
#js [])))
(defn wrap
"Wraps screen with main view and adds navigation-events component"
[view-id component]
(fn [args]
(let [main-view (react/create-main-screen-view view-id)
;; params passed to :navigate-to
params (get-in args [:navigation :state :params])
screen-focused? (reagent.core/atom true)]
(if platform/ios?
[main-view (assoc common-styles/flex
:margin-bottom
(cond
;; there is no need to show bottom nav bar on
;; `intro-login-stack` screens
(contains?
intro-login-stack/all-screens
view-id)
0
(defn wrapped-screen-style [{:keys [insets]} insets-obj]
(merge
{:background-color :white
:flex 1}
(when (get insets :bottom)
{:padding-bottom (oget insets-obj "bottom")})
(when (get insets :top true)
{:padding-top (oget insets-obj "top")})))
;; :wallet-onboarding-setup is the only screen
;; except main tabs which requires maximised
;; bottom nav bar, that's why it requires an extra
;; bottom margin, otherwise bottom nav bar will
;; partially cover the screen
(contains?
#{:wallet-onboarding-setup}
view-id)
tabs.styles/tabs-height
(defn presentation-type [{:keys [transition] :as opts}]
(if (and platform/ios? (= transition :presentation-ios))
(-> opts
(update :options merge modal-presentation-ios)
(assoc-in [:insets :top] false))
opts))
:else
tabs.styles/minimized-tabs-height))
[component params screen-focused?]
[navigation-events view-id false screen-focused?]]
(defn wrap-screen [{:keys [component] :as options}]
(assoc options :component
(fn [props]
(handle-on-screen-focus options)
(let [props' (js->clj props :keywordize-keys true)
focused? (oget props "navigation" "isFocused")]
(reagent/as-element
[react/safe-area-consumer
(fn [insets]
(reagent/as-element
[react/view {:style (wrapped-screen-style options insets)}
[component props' (focused?)]]))])))))
[main-view common-styles/flex
[component params screen-focused?]
[navigation-events view-id false screen-focused?]]))))
(defn- get-screen [navigator]
(let [screen (reagent/adapt-react-class (oget navigator "Screen"))]
(fn [props]
[screen (-> props presentation-type wrap-screen)])))
(defn wrap-modal [modal-view component]
"Wraps modal screen with necessary styling and adds :on-request-close handler
on Android"
(fn [args]
(let [params (get-in args [:navigation :state :params])
active? (reagent.core/atom true)]
[react/main-screen-modal-view modal-view
[component params active?]
[navigation-events modal-view true active?]])))
(defn- get-navigator [nav-object]
(let [navigator (reagent/adapt-react-class (oget nav-object "Navigator"))
screen (get-screen nav-object)]
(fn [props children]
(into [navigator props]
(mapv screen children)))))
(defn prepare-config [config]
(-> config
(utils/update-if-present :initialRouteName name)
(utils/update-if-present :mode name)))
(defn create-stack []
(let [nav-obj (ocall stack "createStackNavigator")]
(get-navigator nav-obj)))
(defn new-get-state-for-action [default-get-state-for-action]
(fn [action state]
(let [event (get back-actions/back-actions @view-id)]
(when (and (= (.-type action) (.-BACK navigation/navigation-actions)) event (not= :default event))
(re-frame/dispatch [event]))
(default-get-state-for-action action state))))
(defn create-bottom-tabs []
(let [nav-obj (ocall bottom-tabs "createBottomTabNavigator")]
(get-navigator nav-obj)))
(defn stack-navigator [routes config]
(let [res (nav-reagent/stack-navigator
routes
(merge {:headerMode "none"
:cardStyle {:backgroundColor :white}
#_:transitionConfig
#_(fn []
#js {:transitionSpec #js{:duration 10}})
:onTransitionStart (fn [n]
(let [idx (.. n
-navigation
-state
-index)
routes (.. n
-navigation
-state
-routes)]
(when (and (array? routes) (int? idx))
(let [route (aget routes idx)
route-name (keyword (.-routeName route))]
(tabbar/minimize-bar route-name)))))}
(prepare-config config)))]
(set! (-> res .-router .-getStateForAction) (new-get-state-for-action (.-getStateForAction (.-router res))))
res))
(def common-actions (oget native "CommonActions"))
(def stack-actions (oget native "StackActions"))
(defn twopane-navigator [routes config]
(navigation/twopane-navigator
routes
(merge {:headerMode "none"
:cardStyle {:backgroundColor :white}
:onTransitionStart (fn [n]
(let [idx (.. n
-navigation
-state
-index)
routes (.. n
-navigation
-state
-routes)]
(when (and (array? routes) (int? idx))
(let [route (aget routes idx)
route-name (keyword (.-routeName route))]
(tabbar/minimize-bar route-name)))))}
(prepare-config config))))
(defonce navigator-ref (reagent/atom nil))
(defn switch-navigator [routes config]
(nav-reagent/switch-navigator
routes
(prepare-config config)))
(defn set-navigator-ref [ref]
(reset! navigator-ref ref))
(defn tab-navigator [routes config]
(nav-reagent/tab-navigator
routes
(assoc (prepare-config config) :lazy false)))
(defn can-be-called? []
(boolean @navigator-ref))
(declare stack-screens)
(defn navigate-to [route params]
(when (can-be-called?)
(ocall @navigator-ref "dispatch"
(ocall common-actions "navigate"
#js {:name (name route)
:params (clj->js params)}))))
(defn build-screen [navigator screen]
"Builds screen from specified configuration. Currently screen can be
- keyword, which points to some specific route
- vector of [:modal :screen-key] type when screen should be wrapped as modal
- map with `name`, `screens`, `config` keys, where `screens` is a vector
of children and `config` is `stack-navigator` configuration"
(let [[screen-name screen-config]
(cond (keyword? screen)
[screen (screens/get-screen screen)]
(map? screen)
[(:name screen) screen]
:else screen)]
(let [res (cond
(map? screen-config)
(let [{:keys [screens config]} screen-config]
(navigator
(stack-screens navigator screens)
config))
(defn navigate-reset [state]
(when (can-be-called?)
(ocall @navigator-ref "dispatch"
(ocall common-actions "reset"
(clj->js state)))))
(vector? screen-config)
(let [[_ screen] screen-config]
(nav-reagent/stack-screen
(wrap-modal screen-name screen)))
(defn navigate-back []
(when (can-be-called?)
(ocall @navigator-ref "dispatch"
(ocall common-actions "goBack"))))
:else
(nav-reagent/stack-screen (wrap screen-name screen-config)))]
[screen-name (cond-> {:screen res}
(not (get back-actions/back-actions screen-name))
(assoc :navigationOptions {:gesturesEnabled false})
(:navigation screen-config)
(assoc :navigationOptions
(:navigation screen-config)))])))
(defn stack-screens [navigator screens-map]
(->> screens-map
(map (partial build-screen navigator))
(into {})))
(defn wrap-tabbar
[nav]
[tabbar/tabbar nav view-id])
(defn app-container [navigator]
(.createAppContainer js-dependencies/react-navigation navigator))
(defn get-main-component [view-id two-pane?]
(log/debug :component view-id)
(app-container
(switch-navigator
(into {}
[(build-screen stack-navigator (intro-login-stack/login-stack view-id))
(build-screen stack-navigator (intro-login-stack/intro-stack))
[:tabs-and-modals
{:screen
(stack-navigator
(merge
{:tabs
{:screen (tab-navigator
(->> [(build-screen (if two-pane? twopane-navigator stack-navigator) chat-stack/chat-stack)
(build-screen stack-navigator browser-stack/browser-stack)
(build-screen stack-navigator wallet-stack/wallet-stack)
(build-screen stack-navigator profile-stack/profile-stack)]
(into {}))
{:initialRouteName :chat-stack
:tabBarComponent (reagent.core/reactify-component
wrap-tabbar)})}}
(stack-screens stack-navigator modals/modal-screens))
{:mode :modal
:initialRouteName :tabs
:onTransitionStart (fn [])})}]])
{:initialRouteName (if (= view-id :intro)
:intro-stack
:login-stack)})))
(defn navigate-replace [route params]
(when (can-be-called?)
(ocall @navigator-ref "dispatch"
(ocall stack-actions "replace"
#js {:name (name route)
:params (clj->js params)}))))

View File

@ -1,91 +1,112 @@
(ns status-im.ui.screens.routing.intro-login-stack
(:require [status-im.utils.config :as config]))
(:require-macros [status-im.utils.views :as views])
(:require [re-frame.core :as re-frame]
[status-im.ui.screens.multiaccounts.login.views :as login]
[status-im.ui.screens.progress.views :as progress]
[status-im.ui.screens.multiaccounts.views :as multiaccounts]
[status-im.ui.screens.intro.views :as intro]
[status-im.ui.screens.keycard.onboarding.views :as keycard.onboarding]
[status-im.ui.screens.keycard.recovery.views :as keycard.recovery]
[status-im.ui.screens.keycard.views :as keycard]
[status-im.ui.screens.hardwallet.authentication-method.views
:as
hardwallet.authentication]
[status-im.ui.screens.routing.core :as navigation]))
(def all-screens
#{:login
:progress
:create-multiaccount
:create-multiaccount-generate-key
:create-multiaccount-choose-key
:create-multiaccount-select-key-storage
:create-multiaccount-create-code
:create-multiaccount-confirm-code
:recover-multiaccount-enter-phrase
:recover-multiaccount-select-storage
:recover-multiaccount-enter-password
:recover-multiaccount-confirm-password
:recover-multiaccount-success
:multiaccounts
:intro
:intro-wizard
:hardwallet-authentication-method
:keycard-pairing
:keycard-blank
:keycard-wrong
:keycard-unpaired
:keycard-login-pin
:not-keycard
:keycard-onboarding-intro
:keycard-onboarding-puk-code
:keycard-onboarding-pin
:keycard-onboarding-recovery-phrase
:keycard-onboarding-recovery-phrase-confirm-word1
:keycard-onboarding-recovery-phrase-confirm-word2
:keycard-recovery-intro
:keycard-recovery-pair
:keycard-recovery-success
:keycard-recovery-no-key
:keycard-recovery-pin})
(defonce stack (navigation/create-stack))
(defn login-stack [view-id]
{:name :login-stack
:screens (cond-> [:login
:multiaccounts
:intro-wizard
:progress
:keycard-recovery-intro
:create-multiaccount
:create-multiaccount-generate-key
:create-multiaccount-choose-key
:create-multiaccount-select-key-storage
:create-multiaccount-create-code
:create-multiaccount-confirm-code
:recover-multiaccount-enter-phrase
:recover-multiaccount-select-storage
:recover-multiaccount-enter-password
:recover-multiaccount-confirm-password
:recover-multiaccount-success]
;; NOTE(Ferossgp): There is a point at init when we do not know if there are
;; multiaccounts or no, and we show intro - we could show progress at this time
;; for a better UX
(views/defview intro-stack []
(views/letsubs [multiaccounts [:multiaccounts/multiaccounts]
loading [:multiaccounts/loading]]
[stack {:header-mode :none}
[(cond
loading
{:name :progress-start
:component progress/progress}
config/hardwallet-enabled?
(concat [:hardwallet-authentication-method
:keycard-login-pin
:keycard-blank
:keycard-wrong
:keycard-unpaired
:not-keycard]))
:config (if
;; add view-id here if you'd like that view to be
;; first view when app is started
(#{:login :progress :multiaccounts :keycard-login-pin} view-id)
{:initialRouteName view-id}
{:initialRouteName :login})})
(empty? multiaccounts)
{:name :intro
:component intro/intro}
(defn intro-stack []
(-> (login-stack :intro)
(update :screens conj
:intro
:intro-wizard
:keycard-pairing
:keycard-onboarding-intro
:keycard-onboarding-puk-code
:keycard-onboarding-pin
:keycard-onboarding-recovery-phrase
:keycard-onboarding-recovery-phrase-confirm-word1
:keycard-onboarding-recovery-phrase-confirm-word2
:keycard-recovery-intro
:keycard-recovery-pair
:keycard-recovery-success
:keycard-recovery-no-key
:keycard-recovery-pin)
(assoc :name :intro-stack)
(assoc :config {:initialRouteName :intro})))
:else
{:name :multiaccounts
:component multiaccounts/multiaccounts})
{:name :progress
:component progress/progress}
{:name :login
:component login/login}
{:name :create-multiaccount-generate-key
:options {:stackPresentation "modal"}
:component intro/wizard-generate-key}
{:name :create-multiaccount-choose-key
:back-handler :noop
:component intro/wizard-choose-key}
{:name :create-multiaccount-select-key-storage
:back-handler :noop
:component intro/wizard-select-key-storage}
{:name :create-multiaccount-create-code
:back-handler :noop
:component intro/wizard-create-code}
{:name :create-multiaccount-confirm-code
:back-handler :noop
:component intro/wizard-confirm-code}
{:name :recover-multiaccount-enter-phrase
:component intro/wizard-enter-phrase}
{:name :recover-multiaccount-select-storage
:back-handler :noop
:component intro/wizard-select-key-storage}
{:name :recover-multiaccount-enter-password
:back-handler :noop
:component intro/wizard-create-code}
{:name :recover-multiaccount-confirm-password
:back-handler :noop
:component intro/wizard-confirm-code}
{:name :recover-multiaccount-success
:back-handler :noop
:component intro/wizard-recovery-success}
{:name :keycard-onboarding-intro
:back-handler :noop
:component keycard.onboarding/intro}
{:name :keycard-onboarding-puk-code
:back-handler :noop
:component keycard.onboarding/puk-code}
{:name :keycard-onboarding-pin
:back-handler :noop
:component keycard.onboarding/pin}
{:name :keycard-onboarding-recovery-phrase
:back-handler :noop
:component keycard.onboarding/recovery-phrase}
{:name :keycard-onboarding-recovery-phrase-confirm-word1
:back-handler :noop
:component keycard.onboarding/recovery-phrase-confirm-word}
{:name :keycard-onboarding-recovery-phrase-confirm-word2
:back-handler :noop
:component keycard.onboarding/recovery-phrase-confirm-word}
{:name :keycard-recovery-intro
:back-handler :noop
:component keycard.recovery/intro}
{:name :keycard-recovery-pair
:back-handler :noop
:component keycard.recovery/pair}
{:name :keycard-recovery-success
:back-handler :noop
:component keycard.recovery/success}
{:name :keycard-recovery-no-key
:component keycard.recovery/no-key}
{:name :keycard-recovery-pin
:component keycard.recovery/pin}
{:name :hardwallet-authentication-method
:component hardwallet.authentication/hardwallet-authentication-method}
{:name :keycard-login-pin
:component keycard/login-pin}
{:name :keycard-blank
:component keycard/blank}
{:name :keycard-wrong
:component keycard/wrong}
{:name :keycard-unpaired
:component keycard/unpaired}
{:name :not-keycard
:component keycard/not-keycard}]]))

View File

@ -0,0 +1,78 @@
(ns status-im.ui.screens.routing.main
(:require-macros [status-im.utils.views :as views])
(:require [reagent.core :as reagent]
[re-frame.core :as re-frame]
[status-im.ui.screens.profile.tribute-to-talk.views :as tr-to-talk]
[status-im.ui.screens.add-new.new-public-chat.view :as new-public-chat]
[status-im.ui.screens.wallet.components.views :as wallet.components]
[status-im.ui.screens.qr-scanner.views :as qr-scanner]
[status-im.ui.screens.stickers.views :as stickers]
[status-im.ui.screens.home.views :as home]
[status-im.ui.screens.add-new.new-chat.views :as new-chat]
[status-im.ui.screens.add-new.new-chat.events :as new-chat.events]
[status-im.ui.screens.progress.views :as progress]
[status-im.ui.screens.routing.intro-login-stack :as intro-login-stack]
[status-im.ui.screens.routing.chat-stack :as chat-stack]
[status-im.ui.screens.routing.wallet-stack :as wallet-stack]
[status-im.ui.screens.wallet.events :as wallet.events]
[status-im.ui.screens.routing.profile-stack :as profile-stack]
[status-im.ui.screens.routing.browser-stack :as browser-stack]
[status-im.chat.models.loading :as chat.loading]
[status-im.ui.components.tabbar.core :as tabbar]
[status-im.ui.screens.routing.core :as navigation]))
(defonce main-stack (navigation/create-stack))
(defonce modals-stack (navigation/create-stack))
(defonce bottom-tabs (navigation/create-bottom-tabs))
;; TODO(Ferossgp): Add two-pane navigator on chat-stack
(defn tabs []
[bottom-tabs {:initial-route-name :chat-stack
:lazy false
:header-mode :none
:tab-bar tabbar/tabbar}
[{:name :chat-stack
:insets {:top false}
:component chat-stack/chat-stack}
{:name :browser-stack
:insets {:top false}
:component browser-stack/browser-stack}
{:name :wallet-stack
:on-focus [::wallet.events/wallet-stack]
:insets {:top false}
:component wallet-stack/wallet-stack}
{:name :profile-stack
:insets {:top false}
:component profile-stack/profile-stack}]])
(views/defview get-main-component [_]
(views/letsubs [logged-in? [:multiaccount/logged-in?]]
[main-stack {:header-mode :none
:mode :modal}
[(if logged-in?
{:name :tabs
:insets {:top false}
:component tabs}
{:name :intro-stack
:insets {:top false
:bottom true}
:component intro-login-stack/intro-stack})
{:name :stickers-pack-modal
:component stickers/pack-modal}
{:name :tribute-learn-more
:component tr-to-talk/learn-more}
{:name :welcome
:back-handler :noop
:component home/welcome}
{:name :new-chat
:on-focus [::new-chat.events/new-chat-focus]
:transition :presentation-ios
:component new-chat/new-chat}
{:name :new-public-chat
:transition :presentation-ios
:component new-public-chat/new-public-chat}
{:name :contact-code
:component wallet.components/contact-code}
{:name :qr-scanner
:insets {:top false}
:component qr-scanner/qr-scanner}]]))

View File

@ -1,13 +0,0 @@
(ns status-im.ui.screens.routing.modals)
(def modal-screens
[:stickers-pack-modal
:tribute-learn-more
:selection-modal-screen
:wallet-transactions-filter
:welcome
:keycard-welcome
:new-chat
:new-public-chat
:contact-code
:qr-scanner])

View File

@ -1,46 +1,122 @@
(ns status-im.ui.screens.routing.profile-stack
(:require [status-im.utils.config :as config]))
(:require [status-im.utils.config :as config]
[status-im.ui.screens.profile.user.views :as profile.user]
[status-im.ui.screens.ens.views :as ens]
[status-im.ui.screens.contacts-list.views :as contacts-list]
[status-im.ui.screens.profile.photo-capture.views :as photo-capture]
[status-im.ui.screens.bootnodes-settings.edit-bootnode.views
:as
edit-bootnode]
[status-im.ui.screens.bootnodes-settings.views :as bootnodes-settings]
[status-im.ui.screens.pairing.views :as pairing]
[status-im.ui.screens.offline-messaging-settings.edit-mailserver.views
:as
edit-mailserver]
[status-im.ui.screens.offline-messaging-settings.views
:as
offline-messaging-settings]
[status-im.ui.screens.dapps-permissions.views :as dapps-permissions]
[status-im.ui.screens.privacy-and-security-settings.views :as privacy-and-security]
[status-im.ui.screens.language-settings.views :as language-settings]
[status-im.ui.screens.notifications-settings.views :as notifications-settings]
[status-im.ui.screens.sync-settings.views :as sync-settings]
[status-im.ui.screens.advanced-settings.views :as advanced-settings]
[status-im.ui.screens.help-center.views :as help-center]
[status-im.ui.screens.glossary.view :as glossary]
[status-im.ui.screens.about-app.views :as about-app]
[status-im.ui.screens.mobile-network-settings.view
:as
mobile-network-settings]
[status-im.network.module :as network]
[status-im.ui.screens.network-info.views :as network-info]
[status-im.ui.screens.log-level-settings.views :as log-level-settings]
[status-im.ui.screens.fleet-settings.views :as fleet-settings]
[status-im.ui.screens.profile.seed.views :as profile.seed]
[status-im.ui.screens.profile.tribute-to-talk.views :as tr-to-talk]
[status-im.ui.screens.hardwallet.pin.views :as hardwallet.pin]
[status-im.ui.screens.hardwallet.settings.views :as hardwallet.settings]
[status-im.ui.screens.routing.core :as navigation]))
(def profile-stack
{:name :profile-stack
:screens (cond-> [:my-profile
:contacts-list
:ens-main
:ens-search
:ens-checkout
:ens-confirmation
:ens-terms
:ens-name-details
:blocked-users-list
:profile-photo-capture
:bootnodes-settings
:installations
:edit-bootnode
:offline-messaging-settings
:edit-mailserver
:dapps-permissions
:privacy-and-security
:language-settings
:notifications-settings
:sync-settings
:advanced-settings
:help-center
:glossary
:about-app
:manage-dapps-permissions
:network-settings
:network-details
:network-info
:edit-network
:log-level-settings
:fleet-settings
:mobile-network-settings
:backup-seed
:tribute-to-talk
:my-profile-ext-settings]
(defonce stack (navigation/create-stack))
config/hardwallet-enabled?
(concat [:keycard-settings
:reset-card
:enter-pin-settings]))
:config {:initialRouteName :my-profile}})
(defn profile-stack []
[stack {:initial-route-name :my-profile
:header-mode :none}
[{:name :my-profile
:component profile.user/my-profile}
{:name :contacts-list
:component contacts-list/contacts-list}
{:name :ens-main
:component ens/main}
{:name :ens-search
:component ens/search}
{:name :ens-checkout
:component ens/checkout}
{:name :ens-confirmation
:component ens/confirmation}
{:name :ens-terms
:component ens/terms}
{:name :ens-name-details
:component ens/name-details}
{:name :blocked-users-list
:component contacts-list/blocked-users-list}
{:name :profile-photo-capture
:component photo-capture/profile-photo-capture}
{:name :bootnodes-settings
:component bootnodes-settings/bootnodes-settings}
{:name :installations
:component pairing/installations}
{:name :edit-bootnode
:component edit-bootnode/edit-bootnode}
{:name :offline-messaging-settings
:component offline-messaging-settings/offline-messaging-settings}
{:name :edit-mailserver
:component edit-mailserver/edit-mailserver}
{:name :dapps-permissions
:component dapps-permissions/dapps-permissions}
{:name :privacy-and-security
:component privacy-and-security/privacy-and-security}
{:name :language-settings
:component language-settings/language-settings}
{:name :notifications-settings
:component notifications-settings/notifications-settings}
{:name :sync-settings
:component sync-settings/sync-settings}
{:name :advanced-settings
:component advanced-settings/advanced-settings}
{:name :help-center
:component help-center/help-center}
{:name :glossary
:component glossary/glossary}
{:name :about-app
:component about-app/about-app}
{:name :manage-dapps-permissions
:component dapps-permissions/manage}
{:name :network-settings
:component network/network-settings-view}
{:name :network-details
:component network/network-details-view}
{:name :network-info
:component network-info/network-info}
{:name :edit-network
:component network/edit-network-view}
{:name :log-level-settings
:component log-level-settings/log-level-settings}
{:name :fleet-settings
:component fleet-settings/fleet-settings}
{:name :mobile-network-settings
:component mobile-network-settings/mobile-network-settings}
{:name :backup-seed
:component profile.seed/backup-seed}
{:name :tribute-to-talk
:component tr-to-talk/tribute-to-talk}
;; {:name:my-profile-ext-settings
;; :component}
;; KEYCARD
{:name :keycard-settings
:component hardwallet.settings/keycard-settings}
{:name :reset-card
:component hardwallet.settings/reset-card}
{:name :enter-pin-settings
:component hardwallet.pin/enter-pin}]])

View File

@ -1,172 +0,0 @@
(ns status-im.ui.screens.routing.screens
(:require [status-im.ui.screens.about-app.views :as about-app]
[status-im.ui.screens.multiaccounts.login.views :as login]
[status-im.ui.screens.multiaccounts.views :as multiaccounts]
[status-im.ui.screens.add-new.new-chat.views :as new-chat]
[status-im.ui.screens.add-new.new-public-chat.view :as new-public-chat]
[status-im.ui.screens.bootnodes-settings.edit-bootnode.views
:as
edit-bootnode]
[status-im.ui.screens.bootnodes-settings.views :as bootnodes-settings]
[status-im.ui.screens.browser.open-dapp.views :as open-dapp]
[status-im.ui.screens.browser.views :as browser]
[status-im.ui.screens.chat.views :as chat]
[status-im.ui.screens.ens.views :as ens]
[status-im.ui.screens.contacts-list.views :as contacts-list]
[status-im.ui.screens.currency-settings.views :as currency-settings]
[status-im.ui.screens.dapps-permissions.views :as dapps-permissions]
[status-im.ui.screens.privacy-and-security-settings.views :as privacy-and-security]
[status-im.ui.screens.language-settings.views :as language-settings]
[status-im.ui.screens.notifications-settings.views :as notifications-settings]
[status-im.ui.screens.sync-settings.views :as sync-settings]
[status-im.ui.screens.advanced-settings.views :as advanced-settings]
[status-im.ui.screens.fleet-settings.views :as fleet-settings]
[status-im.ui.screens.group.views :as group]
[status-im.ui.screens.hardwallet.authentication-method.views
:as
hardwallet.authentication]
[status-im.ui.screens.hardwallet.pin.views :as hardwallet.pin]
[status-im.ui.screens.hardwallet.settings.views :as hardwallet.settings]
[status-im.ui.screens.keycard.onboarding.views :as keycard.onboarding]
[status-im.ui.screens.keycard.recovery.views :as keycard.recovery]
[status-im.ui.screens.keycard.views :as keycard]
[status-im.ui.screens.help-center.views :as help-center]
[status-im.ui.screens.glossary.view :as glossary]
[status-im.ui.screens.home.views :as home]
[status-im.ui.screens.intro.views :as intro]
[status-im.ui.screens.log-level-settings.views :as log-level-settings]
[status-im.ui.screens.mobile-network-settings.view
:as
mobile-network-settings]
[status-im.network.module :as network]
[status-im.ui.screens.offline-messaging-settings.edit-mailserver.views
:as
edit-mailserver]
[status-im.ui.screens.offline-messaging-settings.views
:as
offline-messaging-settings]
[status-im.ui.screens.pairing.views :as pairing]
[status-im.ui.screens.profile.contact.views :as profile.contact]
[status-im.ui.screens.profile.group-chat.views :as profile.group-chat]
[status-im.ui.screens.profile.photo-capture.views :as photo-capture]
[status-im.ui.screens.profile.seed.views :as profile.seed]
[status-im.ui.screens.profile.tribute-to-talk.views :as tr-to-talk]
[status-im.ui.screens.profile.user.views :as profile.user]
[status-im.ui.screens.progress.views :as progress]
[status-im.ui.screens.qr-scanner.views :as qr-scanner]
[status-im.ui.screens.stickers.views :as stickers]
[status-im.ui.screens.wallet.collectibles.views :as collectibles]
[status-im.ui.screens.wallet.components.views :as wallet.components]
[status-im.ui.screens.wallet.settings.views :as wallet-settings]
[status-im.ui.screens.wallet.transactions.views :as wallet-transactions]
[status-im.ui.screens.wallet.custom-tokens.views :as custom-tokens]
[status-im.ui.screens.wallet.accounts.views :as wallet.accounts]
[status-im.ui.screens.wallet.account.views :as wallet.account]
[status-im.ui.screens.wallet.add-new.views :as add-account]
[status-im.ui.screens.wallet.account-settings.views :as account-settings]
[status-im.ui.screens.network-info.views :as network-info]))
(def all-screens
{:login login/login
:progress progress/progress
:create-multiaccount-generate-key intro/wizard-generate-key
:create-multiaccount-choose-key intro/wizard-choose-key
:create-multiaccount-select-key-storage intro/wizard-select-key-storage
:create-multiaccount-create-code intro/wizard-create-code
:create-multiaccount-confirm-code intro/wizard-confirm-code
:recover-multiaccount-enter-phrase intro/wizard-enter-phrase
:recover-multiaccount-success intro/wizard-recovery-success
:recover-multiaccount-select-storage intro/wizard-select-key-storage
:recover-multiaccount-enter-password intro/wizard-create-code
:recover-multiaccount-confirm-password intro/wizard-confirm-code
:multiaccounts multiaccounts/multiaccounts
:intro intro/intro
:hardwallet-authentication-method hardwallet.authentication/hardwallet-authentication-method
:enter-pin-settings hardwallet.pin/enter-pin
:keycard-onboarding-intro keycard.onboarding/intro
:keycard-onboarding-puk-code keycard.onboarding/puk-code
:keycard-onboarding-pin keycard.onboarding/pin
:keycard-onboarding-recovery-phrase keycard.onboarding/recovery-phrase
:keycard-onboarding-recovery-phrase-confirm-word1 keycard.onboarding/recovery-phrase-confirm-word
:keycard-onboarding-recovery-phrase-confirm-word2 keycard.onboarding/recovery-phrase-confirm-word
:keycard-recovery-intro keycard.recovery/intro
:keycard-recovery-pair keycard.recovery/pair
:keycard-recovery-success keycard.recovery/success
:keycard-recovery-no-key keycard.recovery/no-key
:keycard-recovery-pin keycard.recovery/pin
:keycard-blank keycard/blank
:keycard-wrong keycard/wrong
:keycard-unpaired keycard/unpaired
:keycard-login-pin keycard/login-pin
:not-keycard keycard/not-keycard
:home home/home
:chat chat/chat
:profile profile.contact/profile
:new-chat [:modal new-chat/new-chat]
:qr-scanner [:modal qr-scanner/qr-scanner]
:new-group group/new-group
:add-participants-toggle-list group/add-participants-toggle-list
:contact-toggle-list group/contact-toggle-list
:group-chat-profile profile.group-chat/group-chat-profile
:new-public-chat [:modal new-public-chat/new-public-chat]
:open-dapp open-dapp/open-dapp
:browser browser/browser
:stickers stickers/packs
:stickers-pack stickers/pack
:stickers-pack-modal [:modal stickers/pack-modal]
:tribute-learn-more [:modal tr-to-talk/learn-more]
:wallet wallet.accounts/accounts-overview
:wallet-account wallet.account/account
:collectibles-list collectibles/collectibles-list
:contact-code [:modal wallet.components/contact-code]
:wallet-transaction-details wallet-transactions/transaction-details
:wallet-settings-assets wallet-settings/manage-assets
:wallet-add-custom-token custom-tokens/add-custom-token
:wallet-custom-token-details custom-tokens/custom-token-details
:wallet-transactions-filter [:modal wallet-transactions/filter-history]
:my-profile profile.user/my-profile
:contacts-list contacts-list/contacts-list
:ens-main ens/main
:ens-search ens/search
:ens-checkout ens/checkout
:ens-confirmation ens/confirmation
:ens-terms ens/terms
:ens-name-details ens/name-details
:blocked-users-list contacts-list/blocked-users-list
:profile-photo-capture photo-capture/profile-photo-capture
:bootnodes-settings bootnodes-settings/bootnodes-settings
:installations pairing/installations
:edit-bootnode edit-bootnode/edit-bootnode
:offline-messaging-settings offline-messaging-settings/offline-messaging-settings
:edit-mailserver edit-mailserver/edit-mailserver
:dapps-permissions dapps-permissions/dapps-permissions
:privacy-and-security privacy-and-security/privacy-and-security
:language-settings language-settings/language-settings
:notifications-settings notifications-settings/notifications-settings
:sync-settings sync-settings/sync-settings
:advanced-settings advanced-settings/advanced-settings
:help-center help-center/help-center
:glossary glossary/glossary
:about-app about-app/about-app
:manage-dapps-permissions dapps-permissions/manage
:network-settings network/network-settings-view
:network-details network/network-details-view
:network-info network-info/network-info
:edit-network network/edit-network-view
:log-level-settings log-level-settings/log-level-settings
:fleet-settings fleet-settings/fleet-settings
:currency-settings currency-settings/currency-settings
:backup-seed profile.seed/backup-seed
:tribute-to-talk tr-to-talk/tribute-to-talk
:reset-card hardwallet.settings/reset-card
:keycard-settings hardwallet.settings/keycard-settings
:mobile-network-settings mobile-network-settings/mobile-network-settings
:welcome [:modal home/welcome]
:keycard-welcome keycard/welcome
:add-new-account add-account/add-account
:add-new-account-pin add-account/pin
:account-settings account-settings/account-settings})
(defn get-screen [screen]
(get all-screens screen #(throw (str "Screen " screen " is not defined."))))

View File

@ -1,18 +1,42 @@
(ns status-im.ui.screens.routing.wallet-stack)
(ns status-im.ui.screens.routing.wallet-stack
(:require [status-im.utils.config :as config]
[status-im.ui.screens.currency-settings.views :as currency-settings]
[status-im.ui.screens.wallet.collectibles.views :as collectibles]
[status-im.ui.screens.wallet.settings.views :as wallet-settings]
[status-im.ui.screens.wallet.transactions.views :as wallet-transactions]
[status-im.ui.screens.wallet.custom-tokens.views :as custom-tokens]
[status-im.ui.screens.wallet.accounts.views :as wallet.accounts]
[status-im.ui.screens.wallet.account.views :as wallet.account]
[status-im.ui.screens.wallet.add-new.views :as add-account]
[status-im.ui.screens.wallet.account-settings.views :as account-settings]
[status-im.ui.screens.wallet.events :as wallet.events]
[status-im.ui.screens.routing.core :as navigation]))
(def wallet-stack
{:name :wallet-stack
:screens (cond-> [:wallet
:wallet-account
:add-new-account
:add-new-account-pin
:account-settings
:collectibles-list
:wallet-onboarding-setup
:wallet-transaction-details
:wallet-settings-hook
:wallet-settings-assets
:wallet-add-custom-token
:wallet-custom-token-details
:currency-settings])
:config {:initialRouteName :wallet}})
(defonce stack (navigation/create-stack))
(defn wallet-stack []
[stack {:initial-route-name :wallet
:header-mode :none}
[{:name :wallet
:component wallet.accounts/accounts-overview}
{:name :wallet-account
:component wallet.account/account}
{:name :add-new-account
:component add-account/add-account}
{:name :add-new-account-pin
:component add-account/pin}
{:name :account-settings
:component account-settings/account-settings}
{:name :collectibles-list
:component collectibles/collectibles-list}
{:name :wallet-transaction-details
:component wallet-transactions/transaction-details}
{:name :wallet-settings-assets
:component wallet-settings/manage-assets}
{:name :wallet-add-custom-token
:on-focus [::wallet.events/wallet-add-custom-token]
:component custom-tokens/add-custom-token}
{:name :wallet-custom-token-details
:component custom-tokens/custom-token-details}
{:name :currency-settings
:component currency-settings/currency-settings}]])

View File

@ -1,36 +1,30 @@
(ns status-im.ui.screens.views
(:require-macros [status-im.utils.views :refer [defview letsubs] :as views])
(:require [re-frame.core :refer [dispatch]]
[status-im.utils.platform :refer [android?]]
[status-im.utils.universal-links.core :as utils.universal-links]
(:require [status-im.utils.universal-links.core :as utils.universal-links]
[re-frame.core :as re-frame]
[status-im.utils.platform :as platform]
[status-im.ui.screens.about-app.views :as about-app]
[status-im.ui.components.react :as react]
[status-im.ui.components.bottom-sheet.core :as bottom-sheet]
[status-im.utils.navigation :as navigation]
[status-im.ui.screens.routing.core :as navigation]
[reagent.core :as reagent]
[status-im.utils.random :as rand]
[re-frame.core :as re-frame]
[taoensso.timbre :as log]
[status-im.utils.platform :as platform]
[status-im.ui.screens.mobile-network-settings.view :as mobile-network-settings]
[status-im.ui.screens.keycard.views :as keycard]
[status-im.ui.screens.home.sheet.views :as home.sheet]
[status-im.ui.screens.routing.core :as routing]
[status-im.ui.screens.routing.main :as routing]
[status-im.ui.screens.signing.views :as signing]
[status-im.ui.screens.popover.views :as popover]
[status-im.ui.screens.multiaccounts.recover.views :as recover.views]
[status-im.utils.dimensions :as dimensions]
[status-im.ui.screens.wallet.send.views :as wallet]
[status-im.ui.components.tabbar.core :as tabbar]
[status-im.ui.components.status-bar.view :as statusbar]
status-im.ui.screens.wallet.collectibles.etheremon.views
status-im.ui.screens.wallet.collectibles.cryptostrikers.views
status-im.ui.screens.wallet.collectibles.cryptokitties.views
status-im.ui.screens.wallet.collectibles.superrare.views
status-im.ui.screens.wallet.collectibles.kudos.views))
(defonce rand-label (when js/goog.DEBUG (rand/id)))
(defonce initial-view-id (atom nil))
(defview bottom-sheet []
(letsubs [{:keys [show? view]} [:bottom-sheet]]
(let [opts (cond-> {:show? show?
@ -58,95 +52,74 @@
(merge (recover.views/bottom-sheet)))]
[bottom-sheet/bottom-sheet opts])))
(defn reset-component-on-mount [view-id component two-pane?]
(when (and @initial-view-id
(or
js/goog.DEBUG
(not @component)))
(reset! component (routing/get-main-component
(if js/goog.DEBUG
@initial-view-id
@view-id)
two-pane?))))
(def debug? ^boolean js/goog.DEBUG)
(defn reset-component-on-update [view-id component two-pane?]
(when (and @initial-view-id (not @component))
(reset! component (routing/get-main-component
(if js/goog.DEBUG
@initial-view-id
@view-id)
two-pane?))))
;; Persist navigation state in dev mode
(when debug?
(defonce state (atom nil))
(defn- persist-state! [state-obj]
(js/Promise.
(fn [resolve _]
(reset! state state-obj)
(resolve true)))))
(defonce state (atom nil))
(defn get-active-route-name [state]
(let [index (get state "index")
route (get-in state ["routes" index])]
(if-let [state' (get route "state")]
(get-active-route-name state')
(some-> (get route "name") keyword))))
(defn persist-state [state-obj]
(js/Promise.
(fn [resolve reject]
(reset! state state-obj)
(resolve true))))
(defn on-state-change [state]
(let [route-name (get-active-route-name (js->clj state))]
(tabbar/minimize-bar route-name)
(defn load-state []
(js/Promise.
(fn [resolve reject]
(resolve @state))))
;; NOTE(Ferossgp): Keycard did-load events backward compatibility
(re-frame/dispatch [:screens/on-will-focus route-name])
;; NOTE(Ferossgp): Both calls are for backward compatibility, should be reworked in future
(statusbar/set-status-bar route-name)
(re-frame/dispatch [:set :view-id route-name]))
(when debug?
(persist-state! state)))
(defonce main-app-navigator (partial routing/get-main-component false))
(defonce twopane-app-navigator (partial routing/get-main-component true))
(defn main []
(let [view-id (re-frame/subscribe [:view-id])
main-component (atom nil)
main-component-two-pane (atom nil)
two-pane? (reagent/atom (dimensions/fit-two-pane?))]
(let [two-pane? (reagent/atom (dimensions/fit-two-pane?))]
(.addEventListener react/dimensions
"change"
(fn [dimensions]
(fn [_]
(let [two-pane-enabled? (dimensions/fit-two-pane?)]
(do
(re-frame/dispatch [:set-two-pane-ui-enabled two-pane-enabled?])
(log/debug ":set-two-pane " two-pane-enabled?)
(reset! two-pane? two-pane-enabled?)))))
(when-not @initial-view-id
(reset! initial-view-id @view-id))
(reset-component-on-mount view-id main-component false)
(reset-component-on-mount view-id main-component-two-pane true)
(re-frame/dispatch [:set-two-pane-ui-enabled two-pane-enabled?])
(reset! two-pane? two-pane-enabled?))))
(reagent/create-class
{:component-did-mount
(fn []
(re-frame/dispatch [:set-two-pane-ui-enabled @two-pane?])
(log/debug :main-component-did-mount @view-id)
(utils.universal-links/initialize))
:component-will-unmount
utils.universal-links/finalize
:component-will-update
(fn []
(when-not @initial-view-id
(reset! initial-view-id @view-id))
(reset-component-on-update view-id main-component false)
(reset-component-on-update view-id main-component-two-pane true)
(when-not platform/desktop?
(react/dismiss-keyboard!)))
:component-did-update
(fn []
(log/debug :main-component-did-update @view-id))
:reagent-render
(fn []
(when (and @view-id main-component)
[react/safe-area-provider
[react/view {:flex 1}
[:> (if @two-pane? @main-component-two-pane @main-component)
{:ref (fn [r]
(navigation/set-navigator-ref r)
(when (and
platform/android?
(not js/goog.DEBUG)
(not (contains? #{:intro :login :progress} @view-id)))
(navigation/navigate-to @view-id nil)))
;; see https://reactnavigation.org/docs/en/state-persistence.html#development-mode
:persistNavigationState (when js/goog.DEBUG persist-state)
:loadNavigationState (when js/goog.DEBUG load-state)}]
[wallet/prepare-transaction]
[wallet/request-transaction]
[wallet/select-account]
[signing/signing]
[bottom-sheet]
[popover/popover]]]))})))
[react/safe-area-provider
[react/view {:flex 1
:background-color :black}
[navigation/navigation-container
(merge {:ref (fn [r]
(navigation/set-navigator-ref r))
:onStateChange on-state-change
:enableURLHandling false}
(when debug?
{:enableURLHandling true
:initialState @state}))
[(if @two-pane? twopane-app-navigator main-app-navigator)]]
[wallet/prepare-transaction]
[wallet/request-transaction]
[wallet/select-account]
[signing/signing]
[bottom-sheet]
[popover/popover]]])})))

View File

@ -6,7 +6,6 @@
[status-im.ui.screens.wallet.accounts.views :as accounts]
[status-im.ui.screens.wallet.accounts.sheets :as sheets]
[reagent.core :as reagent]
[status-im.ui.components.tabbar.styles :as tabs.styles]
[status-im.ui.components.list.views :as list]
[status-im.i18n :as i18n]
[status-im.ui.components.icons.vector-icons :as icons]
@ -105,18 +104,12 @@
[list/flat-list {:data tokens
:default-separator? false
:key-fn :name
:footer [react/view
{:style {:height tabs.styles/tabs-diff
:align-self :stretch}}]
:render-fn (accounts/render-asset (:code currency))}]
(= tab :nft)
(if (seq nfts)
[list/flat-list {:data nfts
:default-separator? false
:key-fn :name
:footer [react/view
{:style {:height tabs.styles/tabs-diff
:align-self :stretch}}]
:render-fn (render-collectible address)}]
[react/view {:align-items :center :margin-top 32}
[react/text {:style {:color colors/gray}}

View File

@ -1,6 +1,5 @@
(ns status-im.ui.screens.wallet.accounts.styles
(:require [status-im.ui.components.colors :as colors]
[status-im.ui.components.tabbar.styles :as tabs.styles]))
(:require [status-im.ui.components.colors :as colors]))
(def card-common
{:margin-vertical 16
@ -35,7 +34,7 @@
:justify-content :center
:left 0
:right 0
:bottom (+ 16 tabs.styles/tabs-diff)
:bottom 16
:height 40})
(def send-button

View File

@ -9,7 +9,6 @@
[status-im.ui.components.chat-icon.screen :as chat-icon]
[status-im.ui.components.list-item.views :as list-item]
[status-im.wallet.utils :as wallet.utils]
[status-im.ui.components.tabbar.styles :as tabs.styles]
[reagent.core :as reagent]
[re-frame.core :as re-frame]
[status-im.ui.screens.wallet.accounts.sheets :as sheets]
@ -83,9 +82,6 @@
[list/flat-list {:data tokens
:default-separator? false
:key-fn :name
:footer [react/view
{:style {:height tabs.styles/tabs-diff
:align-self :stretch}}]
:render-fn (render-asset (:code currency))}]))
(views/defview total-value []

View File

@ -0,0 +1,19 @@
(ns status-im.ui.screens.wallet.events
(:require [status-im.ui.screens.wallet.signing-phrase.views :as signing-phrase]
[status-im.utils.handlers :as handlers]))
(handlers/register-handler-fx
::wallet-stack
(fn [{:keys [db]}]
(let [wallet-set-up-passed? (get-in db [:multiaccount :wallet-set-up-passed?])
sign-phrase-showed? (get db :wallet/sign-phrase-showed?)]
{:dispatch [:wallet.ui/pull-to-refresh] ;TODO temporary simple fix for v1
:db (if (or wallet-set-up-passed? sign-phrase-showed?)
db
(assoc db :popover/popover {:view [signing-phrase/signing-phrase]}
:wallet/sign-phrase-showed? true))})))
(handlers/register-handler-fx
::wallet-add-custom-token
(fn [{:keys [db]}]
{:db (dissoc db :wallet/custom-token-screen)}))

View File

@ -1,23 +0,0 @@
(ns status-im.ui.screens.wallet.navigation
(:require [status-im.ui.screens.navigation :as navigation]
[status-im.ui.screens.wallet.signing-phrase.views :as signing-phrase]
[re-frame.core :as re-frame]))
(defmethod navigation/preload-data! :wallet-stack
[db [event]]
(let [wallet-set-up-passed? (get-in db [:multiaccount :wallet-set-up-passed?])
sign-phrase-showed? (get db :wallet/sign-phrase-showed?)]
;;TODO temporary simple fix for v1
(re-frame/dispatch [:wallet.ui/pull-to-refresh])
(if (or (= event :navigate-back) wallet-set-up-passed? sign-phrase-showed?)
db
(assoc db :popover/popover {:view [signing-phrase/signing-phrase]}
:wallet/sign-phrase-showed? true))))
(defmethod navigation/preload-data! :wallet-add-custom-token
[db [event]]
(dissoc db :wallet/custom-token-screen))
(defmethod navigation/preload-data! :add-new-account
[db [event]]
(dissoc db :add-account))

View File

@ -1,11 +1,17 @@
(ns status-im.ui.screens.wallet.transactions.styles
(:require [status-im.ui.components.colors :as colors]
[status-im.ui.components.tabbar.styles :as tabs.styles]
[status-im.utils.platform :as platform]
[status-im.utils.styles :as styles]))
(def tabs-height
(cond
platform/android? 52
platform/ios? 52
platform/desktop? 36))
(defn tab [active?]
{:flex 1
:height tabs.styles/tab-height
:height tabs-height
:justify-content :center
:align-items :center
:padding-bottom (if active? 0 1)
@ -16,7 +22,7 @@
(def tabs-container
{:flex-direction :row
:height tabs.styles/tab-height})
:height tabs-height})
(defn tab-title
[active?]

View File

@ -142,6 +142,7 @@
[list/item-primary-only {:accessibility-label :filter-name-text}
label]]]]])
;; NOTE: Is this needed?
(defview filter-history []
(letsubs [{:keys [filters all-filters? on-touch-select-all]}
[:wallet.transactions.filters/screen]]

View File

@ -49,7 +49,6 @@
:initial-props
:keyboard-height
:keyboard-max-height
:navigation-stack
:network
:network-status
:peers-count

View File

@ -1,63 +0,0 @@
(ns status-im.utils.navigation
(:require [status-im.react-native.js-dependencies :as js-dependencies]
[status-im.utils.platform :as platform]
[goog.object :as gobj]))
(def navigation-actions
(.-NavigationActions js-dependencies/react-navigation))
(def navigation-events
(.-NavigationEvents js-dependencies/react-navigation))
(def stack-actions
(.-StackActions js-dependencies/react-navigation))
(def navigator-ref (atom nil))
(defn set-navigator-ref [ref]
(reset! navigator-ref ref))
(defn can-be-called? []
@navigator-ref)
(defn navigate-to [route params]
(when (can-be-called?)
(.dispatch
@navigator-ref
(.navigate
navigation-actions
#js {:routeName (name route)
:params (clj->js params)}))))
(defn navigate-replace [route params]
(when (can-be-called?)
(.dispatch
@navigator-ref
(.replace
stack-actions
#js {:routeName (name route)
:params (clj->js params)}))))
(defn- navigate [params]
(when (can-be-called?)
(.navigate navigation-actions (clj->js params))))
(defn navigate-reset [state]
(when (can-be-called?)
(let [state' (update state :actions #(mapv navigate %))]
(.dispatch
@navigator-ref
(.reset
stack-actions
(clj->js state'))))))
(defn navigate-back []
(when (can-be-called?)
(.dispatch
@navigator-ref
(.back navigation-actions))))
(defonce TwoPaneNavigator (gobj/get js-dependencies/react-native-navigation-twopane #js ["createTwoPaneNavigator"]))
(defn twopane-navigator [routeConfigs stackNavigatorConfig]
(TwoPaneNavigator (clj->js routeConfigs) (clj->js stackNavigatorConfig)))

View File

@ -47,7 +47,6 @@
(def keychain #js {:setGenericPassword (constantly (.resolve js/Promise true))
"ACCESSIBLE" {}
"ACCESS_CONTROL" {}})
(def react-navigation #js {:NavigationActions #js {}})
(def desktop-menu #js {})
(def desktop-config #js {})
(def react-native-mail #js {:mail #js {}})
@ -57,3 +56,14 @@
(def net-info #js {})
(def touchid #js {})
(def safe-area-context #js {})
(def back-handler #js {:addEventListener identity
:removeEventListener identity})
(def react #js {:useCallback nil})
(def react-navigation-native #js {:NavigationContainer #js {}
:useFocusEffect identity
:CommonActions #js {}
:StackActions #js {}})
(def react-navigation-stack #js {:createStackNavigator identity
:TransitionPresets #js {:ModalPresentationIOS #js {}}})
(def react-navigation-bottom-tabs #js {:createBottomTabNavigator identity})

View File

@ -32,8 +32,9 @@
efx (login.core/multiaccount-login-success cofx)
new-db (:db efx)
json-rpc (into #{} (map :method (::json-rpc/call efx)))]
(testing ":accounts/login cleared."
(is (not (contains? new-db :multiaccounts/login))))
;; TODO: Account is now cleared only after all sign in fx are executed.
;; (testing ":accounts/login cleared."
;; (is (not (contains? new-db :multiaccounts/login))))
(testing "Check the rest of effects."
(is (json-rpc "web3_clientVersion"))))))