2016-05-13 14:58:58 +03:00
|
|
|
(ns syng-im.discovery.handlers
|
2016-05-13 17:34:04 +03:00
|
|
|
(:require [re-frame.core :refer [register-handler after dispatch enrich]]
|
2016-05-13 14:58:58 +03:00
|
|
|
[syng-im.protocol.api :as api]
|
|
|
|
[syng-im.navigation.handlers :as nav]
|
2016-05-13 17:34:04 +03:00
|
|
|
[syng-im.discovery.model :as discoveries]
|
2016-05-13 14:58:58 +03:00
|
|
|
[syng-im.utils.handlers :as u]))
|
|
|
|
|
|
|
|
(defmethod nav/preload-data! :discovery
|
2016-05-13 16:52:42 +03:00
|
|
|
[{:keys [discoveries] :as db} _]
|
|
|
|
(if-not (seq discoveries)
|
|
|
|
(-> db
|
|
|
|
(assoc :tags (discoveries/all-tags))
|
2016-05-13 17:34:04 +03:00
|
|
|
;; todo add limit
|
|
|
|
;; todo hash-map with whisper-id as key and sorted by last-update
|
|
|
|
;; may be more efficient here
|
2016-05-13 16:52:42 +03:00
|
|
|
(assoc :discoveries (discoveries/discovery-list)))
|
|
|
|
db))
|
2016-05-13 14:58:58 +03:00
|
|
|
|
|
|
|
(register-handler :discovery-response-received
|
|
|
|
(u/side-effect!
|
|
|
|
(fn [_ [_ from payload]]
|
|
|
|
(let [{:keys [name status hashtags location]} payload
|
|
|
|
location (or location "")
|
|
|
|
discovery [{:name name
|
|
|
|
:status status
|
|
|
|
:whisper-id from
|
|
|
|
:photo ""
|
|
|
|
:location location
|
|
|
|
:tags (map #(hash-map :name %) hashtags)
|
|
|
|
:last-updated (js/Date.)}]]
|
|
|
|
(dispatch [:add-discovery discovery])))))
|
|
|
|
|
|
|
|
(register-handler :broadcast-status
|
2016-05-13 16:52:42 +03:00
|
|
|
(u/side-effect!
|
|
|
|
(fn [{:keys [name]} [_ status hashtags]]
|
|
|
|
(api/broadcast-discover-status name status hashtags))))
|
2016-05-13 14:58:58 +03:00
|
|
|
|
|
|
|
(register-handler :show-discovery-tag
|
|
|
|
(fn [db [_ tag]]
|
2016-05-13 16:52:42 +03:00
|
|
|
(dispatch [:navigate-to :discovery-tag])
|
|
|
|
(assoc db :current-tag tag)))
|
2016-05-13 14:58:58 +03:00
|
|
|
|
|
|
|
;; todo remove this
|
|
|
|
(register-handler :create-fake-discovery!
|
|
|
|
(u/side-effect!
|
|
|
|
(fn [_ _]
|
|
|
|
(let [number (rand-int 999)
|
|
|
|
discovery {:name (str "Name " number)
|
|
|
|
:status (str "Status This is some longer status to get the second line " number)
|
|
|
|
:whisper-id (str number)
|
|
|
|
:photo ""
|
|
|
|
:location ""
|
|
|
|
:tags [{:name "tag1"}
|
|
|
|
{:name "tag2"}
|
|
|
|
{:name "tag3"}]
|
|
|
|
:last-updated (new js/Date)}]
|
|
|
|
(dispatch [:add-discovery discovery])))))
|
|
|
|
|
|
|
|
(defn add-discovery
|
|
|
|
[db [_ discovery]]
|
|
|
|
(-> db
|
|
|
|
(assoc :new-discovery discovery)
|
|
|
|
(update :discoveries conj discovery)))
|
|
|
|
|
|
|
|
(defn save-discovery!
|
|
|
|
[{:keys [new-discovery]} _]
|
|
|
|
(discoveries/save-discoveries [new-discovery]))
|
|
|
|
|
|
|
|
(defn reload-tags!
|
|
|
|
[db _]
|
|
|
|
(assoc db :tags (discoveries/all-tags)))
|
|
|
|
|
|
|
|
(register-handler :add-discovery
|
|
|
|
(-> add-discovery
|
|
|
|
((after save-discovery!))
|
|
|
|
((enrich reload-tags!))))
|