Clean up last utils/handlers
Signed-off-by: Andrey Shovkoplyas <motor4ik@gmail.com>
This commit is contained in:
parent
e85823056c
commit
b3ef1ed53a
|
@ -70,7 +70,6 @@
|
||||||
(fn [_ [{command-name :name}]]
|
(fn [_ [{command-name :name}]]
|
||||||
(case (keyword command-name)
|
(case (keyword command-name)
|
||||||
:grant-permissions
|
:grant-permissions
|
||||||
{:dispatch [:request-permissions
|
{:dispatch [:request-permissions {:permissions [:read-external-storage]
|
||||||
[:read-external-storage]
|
:on-allowed #(re-frame/dispatch [:initialize-geth])}]}
|
||||||
#(re-frame/dispatch [:initialize-geth])]}
|
|
||||||
(log/debug "ignoring command: " command-name))))
|
(log/debug "ignoring command: " command-name))))
|
||||||
|
|
|
@ -16,16 +16,18 @@
|
||||||
(and (= (count permission-vals) 1)
|
(and (= (count permission-vals) 1)
|
||||||
(not= (first permission-vals) "denied"))))
|
(not= (first permission-vals) "denied"))))
|
||||||
|
|
||||||
(defn request-permissions [permissions then else]
|
(defn request-permissions [{:keys [permissions on-allowed on-denied]
|
||||||
|
:or {on-allowed #()
|
||||||
|
on-denied #()}
|
||||||
|
:as options}]
|
||||||
(if platform/android?
|
(if platform/android?
|
||||||
(letfn [(else-fn [] (when else (else)))]
|
|
||||||
(let [permissions (mapv #(get permissions-map %) permissions)]
|
(let [permissions (mapv #(get permissions-map %) permissions)]
|
||||||
(-> (.requestMultiple permissions-class (clj->js permissions))
|
(-> (.requestMultiple permissions-class (clj->js permissions))
|
||||||
(.then #(if (all-granted? (js->clj %))
|
(.then #(if (all-granted? (js->clj %))
|
||||||
(then)
|
(on-allowed)
|
||||||
(else-fn)))
|
(on-denied)))
|
||||||
(.catch else-fn))))
|
(.catch on-denied)))
|
||||||
|
|
||||||
(if ((set permissions) :camera)
|
(if ((set permissions) :camera)
|
||||||
(camera/request-access-ios then else)
|
(camera/request-access-ios on-allowed on-denied)
|
||||||
(then))))
|
(on-allowed))))
|
||||||
|
|
|
@ -162,10 +162,8 @@
|
||||||
(status/should-move-to-internal-storage?
|
(status/should-move-to-internal-storage?
|
||||||
(fn [should-move?]
|
(fn [should-move?]
|
||||||
(if should-move?
|
(if should-move?
|
||||||
(re-frame/dispatch [:request-permissions
|
(re-frame/dispatch [:request-permissions {:permissions [:read-external-storage]
|
||||||
[:read-external-storage]
|
:on-allowed #(move-to-internal-storage config)}])
|
||||||
#(move-to-internal-storage config)
|
|
||||||
#()])
|
|
||||||
(status/start-node config))))))
|
(status/start-node config))))))
|
||||||
|
|
||||||
(re-frame/reg-fx
|
(re-frame/reg-fx
|
||||||
|
@ -174,9 +172,9 @@
|
||||||
(status/module-initialized!)))
|
(status/module-initialized!)))
|
||||||
|
|
||||||
(re-frame/reg-fx
|
(re-frame/reg-fx
|
||||||
::request-permissions-fx
|
:request-permissions-fx
|
||||||
(fn [[permissions then else]]
|
(fn [options]
|
||||||
(permissions/request-permissions permissions then else)))
|
(permissions/request-permissions options)))
|
||||||
|
|
||||||
(re-frame/reg-fx
|
(re-frame/reg-fx
|
||||||
::testfairy-alert
|
::testfairy-alert
|
||||||
|
@ -417,8 +415,8 @@
|
||||||
|
|
||||||
(handlers/register-handler-fx
|
(handlers/register-handler-fx
|
||||||
:request-permissions
|
:request-permissions
|
||||||
(fn [_ [_ permissions then else]]
|
(fn [_ [_ options]]
|
||||||
{::request-permissions-fx [permissions then else]}))
|
{:request-permissions-fx options}))
|
||||||
|
|
||||||
(handlers/register-handler-db
|
(handlers/register-handler-db
|
||||||
:set-swipe-position
|
:set-swipe-position
|
||||||
|
|
|
@ -49,11 +49,10 @@
|
||||||
:action #(re-frame/dispatch [:my-profile/update-picture])}
|
:action #(re-frame/dispatch [:my-profile/update-picture])}
|
||||||
{:label (i18n/label :t/image-source-make-photo)
|
{:label (i18n/label :t/image-source-make-photo)
|
||||||
:action (fn []
|
:action (fn []
|
||||||
(re-frame/dispatch [:request-permissions
|
(re-frame/dispatch [:request-permissions {:permissions [:camera :write-external-storage]
|
||||||
[:camera :write-external-storage]
|
:on-allowed #(re-frame/dispatch [:navigate-to :profile-photo-capture])
|
||||||
#(re-frame/dispatch [:navigate-to :profile-photo-capture])
|
:on-denied #(utils/show-popup (i18n/label :t/error)
|
||||||
#(utils/show-popup (i18n/label :t/error)
|
(i18n/label :t/camera-access-error))}]))}])
|
||||||
(i18n/label :t/camera-access-error))]))}])
|
|
||||||
|
|
||||||
(defn qr-viewer-toolbar [label value]
|
(defn qr-viewer-toolbar [label value]
|
||||||
[toolbar/toolbar {}
|
[toolbar/toolbar {}
|
||||||
|
|
|
@ -1,46 +1,32 @@
|
||||||
(ns status-im.ui.screens.qr-scanner.events
|
(ns status-im.ui.screens.qr-scanner.events
|
||||||
(:require [re-frame.core :as re-frame]
|
(:require [re-frame.core :as re-frame]
|
||||||
[status-im.ui.components.camera :as camera]
|
[status-im.ui.components.camera :as camera]
|
||||||
[status-im.utils.handlers :as u :refer [register-handler]]
|
[status-im.utils.handlers :as handlers]
|
||||||
[status-im.utils.utils :as utils]
|
[status-im.utils.utils :as utils]
|
||||||
[status-im.i18n :as i18n]))
|
[status-im.i18n :as i18n]))
|
||||||
|
|
||||||
(defn set-current-identifier [db [_ identifier handler]]
|
(handlers/register-handler-fx
|
||||||
(assoc-in db [:qr-codes identifier] handler))
|
:scan-qr-code
|
||||||
|
(fn [{:keys [db]} [_ identifier handler]]
|
||||||
|
{:db (assoc-in db [:qr-codes identifier] handler)
|
||||||
|
:request-permissions-fx {:permissions [:camera]
|
||||||
|
:on-allowed #(re-frame/dispatch [:navigate-to :qr-scanner {:current-qr-context identifier}])
|
||||||
|
:on-denied #(utils/show-popup (i18n/label :t/error)
|
||||||
|
(i18n/label :t/camera-access-error))}}))
|
||||||
|
|
||||||
(defn navigate-to-scanner
|
(handlers/register-handler-fx
|
||||||
[_ [_ identifier]]
|
:clear-qr-code
|
||||||
(re-frame/dispatch [:request-permissions
|
(fn [{:keys [db]} [_ identifier]]
|
||||||
[:camera]
|
{:db (update db :qr-codes dissoc identifier)}))
|
||||||
#(re-frame/dispatch [:navigate-to :qr-scanner {:current-qr-context identifier}])
|
|
||||||
#(utils/show-popup (i18n/label :t/error)
|
|
||||||
(i18n/label :t/camera-access-error))]))
|
|
||||||
|
|
||||||
(register-handler :scan-qr-code
|
(handlers/register-handler-fx
|
||||||
(re-frame/after navigate-to-scanner)
|
:set-qr-code
|
||||||
set-current-identifier)
|
(fn [{:keys [db]} [_ context data]]
|
||||||
|
(let [handler-event (when-let [handler (get-in db [:qr-codes context])]
|
||||||
(register-handler :clear-qr-code
|
[handler context data])
|
||||||
(fn [db [_ identifier]]
|
navigate-back-event (when (= :qr-scanner (:view-id db))
|
||||||
(update db :qr-codes dissoc identifier)))
|
[:navigate-back])]
|
||||||
|
{:dispatch-n [handler-event navigate-back-event]
|
||||||
(defn- handle-qr-request
|
:db (-> db
|
||||||
[db [_ context data]]
|
|
||||||
(when-let [handler (get-in db [:qr-codes context])]
|
|
||||||
(re-frame/dispatch [handler context data])))
|
|
||||||
|
|
||||||
(defn clear-qr-request [db [_ context]]
|
|
||||||
(-> db
|
|
||||||
(update :qr-codes dissoc context)
|
(update :qr-codes dissoc context)
|
||||||
(dissoc :current-qr-context)))
|
(dissoc :current-qr-context))})))
|
||||||
|
|
||||||
(defn navigate-back!
|
|
||||||
[{:keys [view-id]} _]
|
|
||||||
(when (= :qr-scanner view-id)
|
|
||||||
(re-frame/dispatch [:navigate-back])))
|
|
||||||
|
|
||||||
(register-handler :set-qr-code
|
|
||||||
(u/handlers->
|
|
||||||
handle-qr-request
|
|
||||||
clear-qr-request
|
|
||||||
navigate-back!))
|
|
||||||
|
|
|
@ -157,8 +157,8 @@
|
||||||
[choose-recipient/choose-recipient])
|
[choose-recipient/choose-recipient])
|
||||||
|
|
||||||
(defn- request-camera-permissions []
|
(defn- request-camera-permissions []
|
||||||
(re-frame/dispatch [:request-permissions [:camera]
|
(re-frame/dispatch [:request-permissions {:permissions [:camera]
|
||||||
#(re-frame/dispatch [:navigate-to :recipient-qr-code])]))
|
:on-allowed #(re-frame/dispatch [:navigate-to :recipient-qr-code])}]))
|
||||||
|
|
||||||
(defn- on-choose-recipient [contact-only?]
|
(defn- on-choose-recipient [contact-only?]
|
||||||
(list-selection/show {:title (i18n/label :t/wallet-choose-recipient)
|
(list-selection/show {:title (i18n/label :t/wallet-choose-recipient)
|
||||||
|
|
|
@ -1,22 +1,5 @@
|
||||||
(ns status-im.utils.handlers)
|
(ns status-im.utils.handlers)
|
||||||
|
|
||||||
(defmacro handlers->
|
|
||||||
"Help thread multiple handler functions.
|
|
||||||
All functions are expected to accept [db event] as parameters.
|
|
||||||
If one handler returns a modified db it will be used as parameters for subsequent handlers."
|
|
||||||
[& forms]
|
|
||||||
(let [db (gensym "db")
|
|
||||||
event (gensym "event")
|
|
||||||
new-db (gensym "new-db")]
|
|
||||||
`(fn [~db ~event]
|
|
||||||
(let [~@(interleave (repeat db)
|
|
||||||
(map (fn [form]
|
|
||||||
`(let [~new-db (~form ~db ~event)]
|
|
||||||
(if (map? ~new-db)
|
|
||||||
~new-db
|
|
||||||
~db))) forms))]
|
|
||||||
~db))))
|
|
||||||
|
|
||||||
(defmacro merge-fx*
|
(defmacro merge-fx*
|
||||||
"This macro is called recursively from merge-fx
|
"This macro is called recursively from merge-fx
|
||||||
It wraps each form in a let binding that captures
|
It wraps each form in a let binding that captures
|
||||||
|
|
Loading…
Reference in New Issue