Skip to content

Commit 098711a

Browse files
authored
Merge pull request #85 from rafd/mobile
Mobile Web Client
2 parents 4fe1ec9 + bdaee39 commit 098711a

23 files changed

Lines changed: 694 additions & 527 deletions

File tree

project.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
:pretty-print false}}
8282

8383
{:id "mobile-dev"
84-
:figwheel true
84+
:figwheel {:on-jsload "braid.client.mobile.core/reload"}
8585
:source-paths ["src/braid/client"
8686
"src/retouch"]
8787
:compiler {:main braid.client.mobile.core

resources/public/mobile.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<script>
1111
window.checksum = "{{js}}";
1212
window.api_domain = "{{api_domain}}";
13-
braid.mobile.core.init();
13+
braid.client.mobile.core.init();
1414
</script>
1515
</body>
1616
</html>

src/braid/client/core/events.cljs

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
[braid.client.schema :as schema]
88
[braid.common.util :as util]
99
[braid.client.router :as router]
10+
[braid.client.routes :as routes]
1011
[braid.client.xhr :refer [edn-xhr]]
1112
[braid.client.state.helpers :as helpers :refer [key-by-id]]
1213
[braid.client.quests.helpers :as quest-helpers]))
@@ -441,7 +442,8 @@
441442
(reg-event-fx
442443
:remove-from-group
443444
(fn [cofx [ _ {:keys [group-id user-id] :as args}]]
444-
{:websocket-send (list [:braid.server/remove-from-group args])}))
445+
{:websocket-send (list [:braid.server/remove-from-group args])
446+
:dispatch [:redirect-to-first-group]}))
445447

446448
(reg-event-fx
447449
:check-auth
@@ -506,12 +508,21 @@
506508
(dispatch [:set-login-state :login-form])
507509
(dispatch [:clear-session]))}}))
508510

509-
(reg-event-db
511+
(reg-event-fx
510512
:set-group-and-page
511-
(fn [state [_ [group-id page-id]]]
513+
(fn [{state :db :as cofx} [_ [group-id page-id]]]
512514
(if (or (nil? group-id) (some? (get-in state [:groups group-id])))
513-
(assoc state :open-group-id group-id :page page-id)
514-
(assoc state :open-group-id nil :page {:type :index}))))
515+
{:db (assoc state :open-group-id group-id :page page-id)}
516+
{:dispatch [:redirect-to-first-group]})))
517+
518+
(reg-event-fx
519+
:redirect-to-first-group
520+
(fn [{state :db :as cofx} _]
521+
{:redirect-to
522+
(when-let [group-id (-> (helpers/ordered-groups state)
523+
first
524+
:id)]
525+
(routes/inbox-page-path {:group-id group-id}))}))
515526

516527
(reg-event-db
517528
:set-page-loading
@@ -594,8 +605,8 @@
594605
{:groups-order (into [] (remove (partial = group-id))
595606
sidebar-order)})
596607
state))))
597-
:redirect-to (when (= group-id (state :open-group-id))
598-
"/")}))
608+
:dispatch [(when (= group-id (state :open-group-id))
609+
:redirect-to-first-group)]}))
599610

600611
(reg-event-db
601612
:add-open-thread

src/braid/client/group_admin/views/group_settings_page.cljs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414
(when (js/confirm "Are you sure you want to leave this group?")
1515
(dispatch [:remove-from-group
1616
{:group-id (group :id)
17-
:user-id @user-id}])
18-
(routes/go-to! (routes/index-path))))}
17+
:user-id @user-id}])))}
1918
"Leave this group"])))
2019

2120
(defn intro-message-view

src/braid/client/mobile/core.cljs

Lines changed: 18 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -1,119 +1,25 @@
11
(ns braid.client.mobile.core
22
(:require [reagent.core :as r]
3-
[re-frame.core :refer [subscribe dispatch]]
4-
[braid.client.mobile.state]
5-
[braid.client.mobile.style :refer [styles]]
6-
[braid.client.ui.views.sidebar]
7-
[retouch.core :refer [drawer-view swipe-view]]))
3+
[braid.client.mobile.views :refer [app-view]]
4+
[braid.client.router :as router]
5+
[braid.client.routes :as routes]
6+
[re-frame.core :as rf :refer [dispatch-sync dispatch]]
7+
[braid.client.state.remote-handlers]
8+
braid.client.uploads.subs
9+
braid.client.uploads.events
10+
braid.client.core.subs
11+
braid.client.core.events))
812

913
(enable-console-print!)
1014

11-
(defn message-view [message]
12-
[:div.message
13-
[:a.avatar
14-
[:img]]
15-
[:div.info
16-
[:div.nickname "username"]
17-
[:div.time "4:35 PM"]]
18-
[:div.content (:content message)]])
15+
(defn render []
16+
(r/render [app-view] (. js/document (getElementById "app"))))
1917

20-
(defn new-message-view []
21-
(fn []
22-
[:div.new.message
23-
[:textarea {:value "asd"
24-
:on-change (fn [e])}]]))
18+
(defn ^:export init []
19+
(dispatch-sync [:initialize-db])
20+
(render)
21+
(router/init)
22+
(dispatch [:check-auth]))
2523

26-
(defn tag-view [tag-id]
27-
(let [tag (subscribe [:get-tag tag-id])]
28-
[:div.tag (@tag :name)]))
29-
30-
(defn thread-view [thread]
31-
[:div.thread
32-
[:div.card
33-
[:div.head
34-
[:div.tags
35-
(doall
36-
(for [tag-id (thread :tag-ids)]
37-
^{:key tag-id}
38-
[tag-view tag-id]))
39-
[:a.add "+"]]
40-
[:div.close "×"]]]
41-
[:div.messages
42-
(doall
43-
(for [message (:messages thread)]
44-
^{:key (message :id)}
45-
[message-view message]))]
46-
[new-message-view] ])
47-
48-
(defn inbox-view []
49-
(let [threads (subscribe [:active-group-inbox-threads])]
50-
(fn []
51-
[:div.inbox.page
52-
[:div.threads
53-
[swipe-view @threads thread-view]]])))
54-
55-
(defn main-view []
56-
[:div.main
57-
[drawer-view
58-
[:div.sidebar
59-
[braid.client.ui.views.sidebar/groups-view {:subscribe subscribe}]]]
60-
[inbox-view]])
61-
62-
(defn login-flow-view []
63-
(let [data (r/atom {})]
64-
(fn []
65-
[:div.login-flow
66-
(if-not (@data :method)
67-
[:div.content.welcome
68-
[:img.logo {:src "/images/braid.svg"}]
69-
[:button.login
70-
{:on-click (fn [_]
71-
(swap! data assoc :method :login))}
72-
"Log In"]
73-
[:button.register
74-
{:on-click (fn [_]
75-
(swap! data assoc :method :register))}
76-
"Register"]]
77-
(case (@data :method)
78-
:login
79-
(if-not (@data :email)
80-
[:div.content.login.email
81-
"Email"
82-
[:input.email {:placeholder "[email protected]"
83-
:type "email"
84-
:key "email"}]
85-
[:button.next {:on-click (fn [e]
86-
(swap! data assoc :email (.. e -target -value)))}]]
87-
[:div.content.login.password
88-
"Password"
89-
[:input.password {:placeholder "••••••"
90-
:type "password"
91-
:key "password"}]
92-
[:button.next {:on-click (fn [e]
93-
(swap! data assoc :email (.. e -target -value))
94-
(dispatch [:log-in!]))}]])
95-
:register
96-
(if-not (@data :email)
97-
[:div.content.register.email
98-
[:input.email {:placeholder "[email protected]"}]
99-
[:button.next {:on-click (fn [e]
100-
(swap! data assoc :email (.. e -target -value))
101-
(dispatch [:log-in!]))}]])))])))
102-
103-
(defn style-view []
104-
[:style {:type "text/css"
105-
:dangerouslySetInnerHTML {:__html styles}}])
106-
107-
(defn app-view []
108-
(let [logged-in? (subscribe [:logged-in?])]
109-
(fn []
110-
[:div.app
111-
[style-view]
112-
(if @logged-in?
113-
[main-view]
114-
[login-flow-view])])))
115-
116-
(defn init []
117-
(r/render [app-view] (.-body js/document)))
118-
119-
(init)
24+
(defn ^:export reload []
25+
(render))

0 commit comments

Comments
 (0)