diff --git a/src/status_im/multiaccounts/login/core.cljs b/src/status_im/multiaccounts/login/core.cljs index 68e82f74b1..0bd541d629 100644 --- a/src/status_im/multiaccounts/login/core.cljs +++ b/src/status_im/multiaccounts/login/core.cljs @@ -165,6 +165,15 @@ (wallet/request-current-block-update)) (prices/update-prices))) +(rf/defn login-local-paired-user + {:events [:multiaccounts.login/local-paired-user]} + [{:keys [db]}] + (let [{:keys [key-uid name password]} (get-in db [:syncing :multiaccount])] + {::login [key-uid + (types/clj->json {:name name + :key-uid key-uid}) + password]})) + (rf/defn login {:events [:multiaccounts.login.ui/password-input-submitted]} [{:keys [db]}] @@ -384,22 +393,27 @@ (rf/defn redirect-to-root "Decides which root should be initialised depending on user and app state" [{:keys [db] :as cofx}] - (cond - (get db :onboarding-2/new-account?) - {:dispatch [:onboarding-2/finalize-setup]} + (let [pairing-completed? (= (get-in db [:syncing :pairing-status]) :completed)] + (cond + pairing-completed? + {:db (dissoc db :syncing) + :dispatch [:init-root :syncing-results]} - (get db :tos/accepted?) - (rf/merge - cofx - (multiaccounts/switch-theme nil :shell-stack) - (navigation/init-root :shell-stack)) + (get db :onboarding-2/new-account?) + {:dispatch [:onboarding-2/finalize-setup]} - :else - {:dispatch [:init-root :tos]})) + (get db :tos/accepted?) + (rf/merge + cofx + (multiaccounts/switch-theme nil :shell-stack) + (navigation/init-root :shell-stack)) + + :else + {:dispatch [:init-root :tos]}))) (rf/defn get-settings-callback {:events [::get-settings-callback]} - [{:keys [db] :as cofx} settings pairing-in-progress?] + [{:keys [db] :as cofx} settings] (let [{:networks/keys [current-network networks] :as settings} (data-store.settings/rpc->settings settings) @@ -431,8 +445,7 @@ (activity-center/notifications-fetch-pending-contact-requests) (activity-center/update-seen-state) (activity-center/notifications-fetch-unread-count) - (when-not pairing-in-progress? - (redirect-to-root))))) + (redirect-to-root)))) (re-frame/reg-fx ::open-last-chat @@ -511,9 +524,8 @@ (rf/defn login-only-events [{:keys [db] :as cofx} key-uid password save-password?] - (let [auth-method (:auth-method db) - new-auth-method (get-new-auth-method auth-method save-password?) - pairing-in-progress? (get-in db [:syncing :pairing-in-progress?])] + (let [auth-method (:auth-method db) + new-auth-method (get-new-auth-method auth-method save-password?)] (log/debug "[login] login-only-events" "auth-method" auth-method "new-auth-method" new-auth-method) @@ -521,7 +533,7 @@ {:db (assoc db :chats/loading? true) :json-rpc/call [{:method "settings_getSettings" - :on-success #(re-frame/dispatch [::get-settings-callback % pairing-in-progress?])}]} + :on-success #(re-frame/dispatch [::get-settings-callback %])}]} (notifications/load-notification-preferences) (when save-password? (keychain/save-user-password key-uid password)) diff --git a/src/status_im/signals/core.cljs b/src/status_im/signals/core.cljs index ff7fedf9bf..8412290930 100644 --- a/src/status_im/signals/core.cljs +++ b/src/status_im/signals/core.cljs @@ -10,8 +10,7 @@ [utils.re-frame :as rf] [status-im2.contexts.chat.messages.link-preview.events :as link-preview] [taoensso.timbre :as log] - [status-im2.constants :as constants] - [status-im.multiaccounts.model :as multiaccounts.model])) + [status-im2.constants :as constants])) (rf/defn status-node-started [{db :db :as cofx} {:keys [error]}] @@ -56,36 +55,49 @@ :peers-count (count (:peers peer-stats)))})) (rf/defn handle-local-pairing-signals - [{:keys [db] :as cofx} event] + [{:keys [db] :as cofx} {:keys [type action data] :as event}] (log/info "local pairing signal received" {:event event}) - (let [connection-success? (and (= (:type event) + (let [{:keys [account password]} data + role (get-in db [:syncing :role]) + receiver? (= role constants/local-pairing-role-receiver) + sender? (= role constants/local-pairing-role-sender) + connection-success? (and (= type constants/local-pairing-event-connection-success) - (= (:action event) + (= action constants/local-pairing-action-connect)) - error-on-pairing? (contains? constants/local-pairing-event-errors (:type event)) - completed-pairing? (and (= (:type event) + error-on-pairing? (contains? constants/local-pairing-event-errors type) + completed-pairing? (and (= type constants/local-pairing-event-transfer-success) - (= (:action event) + (= action constants/local-pairing-action-pairing-installation)) - logged-in? (multiaccounts.model/logged-in? db) - ;; since `connection-success` event is received on both sender and receiver devices - ;; we check the `logged-in?` status to identify the receiver and take the user to next screen - navigate-to-syncing-devices? (and connection-success? (not logged-in?)) + received-account? (and (= type + constants/local-pairing-event-received-account) + (= action + constants/local-pairing-action-pairing-account) + (and (some? account) (some? password))) + multiaccount-data (when received-account? + (merge account {:password password})) + navigate-to-syncing-devices? (and connection-success? receiver?) user-in-syncing-devices-screen? (= (:view-id db) :syncing-progress)] (merge {:db (cond-> db connection-success? - (assoc-in [:syncing :pairing-in-progress?] :connected) + (assoc-in [:syncing :pairing-status] :connected) + + received-account? + (assoc-in [:syncing :multiaccount] multiaccount-data) error-on-pairing? - (assoc-in [:syncing :pairing-in-progress?] :error) + (assoc-in [:syncing :pairing-status] :error) completed-pairing? - (assoc-in [:syncing :pairing-in-progress?] :completed))} + (assoc-in [:syncing :pairing-status] :completed))} (when (and navigate-to-syncing-devices? (not user-in-syncing-devices-screen?)) {:dispatch [:navigate-to :syncing-progress]}) - (when completed-pairing? - {:dispatch [:syncing/pairing-completed]})))) + (when (and completed-pairing? sender?) + {:dispatch [:syncing/clear-states]}) + (when (and completed-pairing? receiver?) + {:dispatch [:multiaccounts.login/local-paired-user]})))) (rf/defn process {:events [:signals/signal-received]} diff --git a/src/status_im2/constants.cljs b/src/status_im2/constants.cljs index 468dc72cfe..b855e56ee2 100644 --- a/src/status_im2/constants.cljs +++ b/src/status_im2/constants.cljs @@ -277,9 +277,10 @@ (def ^:const local-pairing-event-transfer-error "transfer-error") ;; receiver events -(def ^:const local-pairing-event-received-amount "received-account") +(def ^:const local-pairing-event-received-account "received-account") (def ^:const local-pairing-event-process-success "process-success") (def ^:const local-pairing-event-process-error "process-error") +(def ^:const local-pairing-event-received-installation "received-installation") (def ^:const local-pairing-event-errors #{local-pairing-event-connection-error diff --git a/src/status_im2/contexts/onboarding/syncing/progress/view.cljs b/src/status_im2/contexts/onboarding/syncing/progress/view.cljs index 56b515d333..484fd65e2d 100644 --- a/src/status_im2/contexts/onboarding/syncing/progress/view.cljs +++ b/src/status_im2/contexts/onboarding/syncing/progress/view.cljs @@ -41,7 +41,7 @@ (defn view [] - (let [pairing-status (rf/sub [:pairing/pairing-in-progress]) + (let [pairing-status (rf/sub [:pairing/pairing-status]) profile-color (:color (rf/sub [:onboarding-2/profile]))] [rn/view {:style style/page-container} [background/view true] diff --git a/src/status_im2/contexts/syncing/events.cljs b/src/status_im2/contexts/syncing/events.cljs index 6520f96119..7ff4a87850 100644 --- a/src/status_im2/contexts/syncing/events.cljs +++ b/src/status_im2/contexts/syncing/events.cljs @@ -10,15 +10,6 @@ [status-im.utils.platform :as utils.platform] [status-im2.constants :as constants])) -(rf/defn local-pairing-completed - {:events [:syncing/pairing-completed]} - [{:keys [db]}] - (let [receiver? (= (get-in db [:syncing :role]) constants/local-pairing-role-receiver)] - (merge - {:db (dissoc db :syncing)} - (when receiver? - {:dispatch [:init-root :syncing-results]})))) - (rf/defn local-pairing-update-role {:events [:syncing/update-role]} [{:keys [db]} role] diff --git a/src/status_im2/navigation/screens.cljs b/src/status_im2/navigation/screens.cljs index 67def14f00..6f34fe5667 100644 --- a/src/status_im2/navigation/screens.cljs +++ b/src/status_im2/navigation/screens.cljs @@ -160,7 +160,8 @@ :component sign-in/view} {:name :syncing-progress - :options {:layout options/onboarding-layout} + :options {:layout options/onboarding-layout + :popGesture false} :component syncing-devices/view} {:name :syncing-results diff --git a/src/status_im2/subs/pairing.cljs b/src/status_im2/subs/pairing.cljs index 0e0df844b6..bcef2ab48c 100644 --- a/src/status_im2/subs/pairing.cljs +++ b/src/status_im2/subs/pairing.cljs @@ -28,7 +28,7 @@ (fn [multiaccount] (:installation-name multiaccount))) (re-frame/reg-sub - :pairing/pairing-in-progress + :pairing/pairing-status :<- [:syncing] (fn [syncing] - (:pairing-in-progress? syncing))) \ No newline at end of file + (:pairing-status syncing))) diff --git a/status-go-version.json b/status-go-version.json index b4a428972f..d50afcaa1a 100644 --- a/status-go-version.json +++ b/status-go-version.json @@ -3,7 +3,7 @@ "_comment": "Instead use: scripts/update-status-go.sh ", "owner": "status-im", "repo": "status-go", - "version": "v0.152.3", - "commit-sha1": "aded83fc6e9a2834c061f1a268fff071bcdc5621", - "src-sha256": "02hrlv2484x5d2ycvk3p58bkng7q40z7nyl2k2f6xhxzx9ppnbjs" + "version": "v0.154.0", + "commit-sha1": "a7df4ed388e4d78653326ed7a35e72221e23a5d9", + "src-sha256": "1mh7kb0s49c16z0h72v8nz9c6z6vd78db6wc1wdlzizc75xb0pw2" }