make qr-scanner callable multiple times from different screens
This commit is contained in:
parent
13c506491f
commit
6eeefb2efb
|
@ -111,3 +111,13 @@
|
||||||
(register-handler :add-new-contact
|
(register-handler :add-new-contact
|
||||||
(after save-contact)
|
(after save-contact)
|
||||||
add-new-contact)
|
add-new-contact)
|
||||||
|
|
||||||
|
(defn set-new-contact-from-qr [db [_ identifier]]
|
||||||
|
(let [new-contact (:new-contact db)
|
||||||
|
qr-contact (get-in db [:qr-codes identifier])]
|
||||||
|
(-> db
|
||||||
|
(assoc :new-contact (merge new-contact qr-contact))
|
||||||
|
(update-in db [:qr-codes] dissoc identifier))))
|
||||||
|
|
||||||
|
(register-handler :set-new-contact-from-qr
|
||||||
|
(-> set-new-contact-from-qr))
|
|
@ -23,11 +23,11 @@
|
||||||
toolbar-background2
|
toolbar-background2
|
||||||
form-text-input]]
|
form-text-input]]
|
||||||
[status-im.i18n :refer [label]]
|
[status-im.i18n :refer [label]]
|
||||||
[status-im.contacts.styles :as st]))
|
[status-im.contacts.styles :as st]
|
||||||
|
[status-im.utils.logging :as log]))
|
||||||
|
|
||||||
(defn import-qr-button []
|
(defn import-qr-button []
|
||||||
[touchable-highlight {:on-press #(dispatch [:navigate-to
|
[touchable-highlight {:on-press #(dispatch [:scan-qr-code :new-contact])}
|
||||||
:qr-scanner])}
|
|
||||||
[view st/import-qr-button
|
[view st/import-qr-button
|
||||||
[view st/import-qr-button-content
|
[view st/import-qr-button-content
|
||||||
[icon {:name :qr-scanner
|
[icon {:name :qr-scanner
|
||||||
|
@ -55,7 +55,10 @@
|
||||||
address])
|
address])
|
||||||
|
|
||||||
(defview new-contact []
|
(defview new-contact []
|
||||||
[{:keys [name address whisper-identity phone-number] :as new-contact} [:get :new-contact]]
|
[{:keys [name address whisper-identity phone-number] :as new-contact} [:get :new-contact]
|
||||||
|
qr-contact [:get-in [:qr-codes :new-contact]]]
|
||||||
|
(let [_ (log/debug qr-contact)
|
||||||
|
_ (when qr-contact (dispatch [:set-new-contact-from-qr :new-contact]))]
|
||||||
[drawer-view
|
[drawer-view
|
||||||
[view st/contact-form-container
|
[view st/contact-form-container
|
||||||
[toolbar {:title (label :t/new-contact)
|
[toolbar {:title (label :t/new-contact)
|
||||||
|
@ -67,4 +70,4 @@
|
||||||
[contact-name-input name]
|
[contact-name-input name]
|
||||||
[contact-address-input address]
|
[contact-address-input address]
|
||||||
[text (str "Whisper identity: " whisper-identity)]
|
[text (str "Whisper identity: " whisper-identity)]
|
||||||
]])
|
]]))
|
|
@ -29,6 +29,7 @@
|
||||||
:email "myemail@gmail.com"
|
:email "myemail@gmail.com"
|
||||||
:status "Hi, this is my status"
|
:status "Hi, this is my status"
|
||||||
:current-tag nil
|
:current-tag nil
|
||||||
|
:qr-codes {:identifier nil}
|
||||||
:new-contact {:name ""
|
:new-contact {:name ""
|
||||||
:address ""
|
:address ""
|
||||||
:whisper-identity ""
|
:whisper-identity ""
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
status-im.discovery.handlers
|
status-im.discovery.handlers
|
||||||
status-im.new-group.handlers
|
status-im.new-group.handlers
|
||||||
status-im.participants.handlers
|
status-im.participants.handlers
|
||||||
|
status-im.qr-scanner.handlers
|
||||||
status-im.protocol.handlers))
|
status-im.protocol.handlers))
|
||||||
|
|
||||||
;; -- Middleware ------------------------------------------------------------
|
;; -- Middleware ------------------------------------------------------------
|
||||||
|
|
|
@ -11,8 +11,8 @@
|
||||||
(defn label [path & options]
|
(defn label [path & options]
|
||||||
(.t js/I18n (name path) (clj->js options)))
|
(.t js/I18n (name path) (clj->js options)))
|
||||||
|
|
||||||
(defn label-pluralize [count path]
|
(defn label-pluralize [count path & options]
|
||||||
(.p js/I18n count (name path)))
|
(.p js/I18n count (name path) (clj->js options)))
|
||||||
|
|
||||||
(comment
|
(comment
|
||||||
(defn deep-merge [& maps]
|
(defn deep-merge [& maps]
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
(ns status-im.qr-scanner.handlers
|
||||||
|
(:require [re-frame.core :refer [register-handler after dispatch debug enrich]]))
|
||||||
|
|
||||||
|
(defn set-current-identifier [db [_ identifier]]
|
||||||
|
(assoc-in db [:qr-codes :identifier] identifier))
|
||||||
|
|
||||||
|
(register-handler :scan-qr-code
|
||||||
|
(-> set-current-identifier
|
||||||
|
((after (fn [_ _] (dispatch [:navigate-to :qr-scanner]))))))
|
||||||
|
|
||||||
|
(register-handler :clear-qr-code [db [_ identifier]]
|
||||||
|
(update-in db [:qr-codes] dissoc identifier))
|
|
@ -21,15 +21,12 @@
|
||||||
:background-color toolbar-background2}])
|
:background-color toolbar-background2}])
|
||||||
|
|
||||||
(defview qr-scanner []
|
(defview qr-scanner []
|
||||||
[]
|
[identifier [:get-in [:qr-codes :identifier]]]
|
||||||
[view st/barcode-scanner-container
|
[view st/barcode-scanner-container
|
||||||
[qr-scanner-toolbar]
|
[qr-scanner-toolbar]
|
||||||
[camera {:onBarCodeRead (fn [data]
|
[camera {:onBarCodeRead (fn [data]
|
||||||
(let [{:keys [name address whisper-identity phone-number] :as contact} (json->clj (.-data data))]
|
(let [data (json->clj (.-data data))]
|
||||||
(when name (dispatch [:set-in [:new-contact :name] name]))
|
(dispatch [:set-in [:qr-codes (or identifier :current)] data])
|
||||||
(when address (dispatch [:set-in [:new-contact :address] address]))
|
|
||||||
(when whisper-identity (dispatch [:set-in [:new-contact :whisper-identity] whisper-identity]))
|
|
||||||
(when phone-number (dispatch [:set-in [:new-contact :phone-number] phone-number]))
|
|
||||||
(dispatch [:navigate-back])))
|
(dispatch [:navigate-back])))
|
||||||
:style st/barcode-scanner}]
|
:style st/barcode-scanner}]
|
||||||
[view st/rectangle-container
|
[view st/rectangle-container
|
||||||
|
|
Loading…
Reference in New Issue