diff --git a/src/cljs/auto_ap/db.cljs b/src/cljs/auto_ap/db.cljs index 1be65ebb..98afc34f 100644 --- a/src/cljs/auto_ap/db.cljs +++ b/src/cljs/auto_ap/db.cljs @@ -13,5 +13,6 @@ :unpaid #{}} :status {:loading false} :new-invoice {} - :menu {:active? false} + :menu {:company {:active? false} + :account {:active? false}} }) diff --git a/src/cljs/auto_ap/events.cljs b/src/cljs/auto_ap/events.cljs index 2aa8955e..b6a8939e 100644 --- a/src/cljs/auto_ap/events.cljs +++ b/src/cljs/auto_ap/events.cljs @@ -12,15 +12,14 @@ :active-page (:handler (bidi/match-route routes/routes (.. js/window -location -pathname)))))) (re-frame/reg-event-db - ::toggle-company-menu - (fn [db [_ active-page]] - (update-in db [:menu :active?] #(not %)))) + ::toggle-menu + (fn [db [_ which]] + (update-in db [:menu which :active?] #(not %)))) (re-frame/reg-event-db ::logged-in (fn [db [_ token user]] - (doto (assoc db :user (assoc user :token token)) - println))) + (assoc db :user (assoc user :token token)))) (re-frame/reg-event-db ::swap-company @@ -85,10 +84,15 @@ (fn [db [_ invoice]] (assoc db :new-invoice {}))) +(re-frame/reg-event-db + ::logout + (fn [db [_]] + (assoc db :user nil :menu {:company {:active? false} + :account {:active? false}}))) + (re-frame/reg-event-fx ::submit-new-invoice (fn [{:keys [db]} [_ invoice]] - {:http {:method :post :token (-> db :user) :uri "/api/invoices" diff --git a/src/cljs/auto_ap/views.cljs b/src/cljs/auto_ap/views.cljs index 94150ba1..58509bd4 100644 --- a/src/cljs/auto_ap/views.cljs +++ b/src/cljs/auto_ap/views.cljs @@ -223,8 +223,18 @@ (str "https://accounts.google.com/o/oauth2/auth?access_type=online&client_id=" client-id "&redirect_uri=" redirect-uri "&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile"))) (defn login [] - (let [user (re-frame/subscribe [::subs/user])] - [:a {:class "navbar-link login" :href (login-url)} (or (:name @user) "Login")])) + (let [user (re-frame/subscribe [::subs/user]) + menu (re-frame/subscribe [::subs/menu])] + [:div {:id "navMenu", :class "navbar-menu"} + [:div {:class "navbar-end"} + [:div {:class (str "navbar-item has-dropdown " (when (get-in @menu [:account :active?]) "is-active"))} + (if @user + [:a {:class "navbar-link login" :on-click (fn [e] (re-frame/dispatch [::events/toggle-menu :account]))} (:name @user)] + [:a {:class "navbar-link login" :href (login-url)} "Login"]) + [:div {:class "navbar-dropdown"} + [:a {:class "navbar-item"} "My profile"] + [:hr {:class "navbar-divider"}] + [:a.navbar-item {:on-click (fn [e] (.preventDefault e) (re-frame/dispatch [::events/logout]))} "Logout"]]]]])) (defn main-panel [] (let [company (re-frame/subscribe [::subs/company]) @@ -238,9 +248,9 @@ [:a {:class "navbar-item", :href "../"} [:h1 (str "Auto-ap")]]] [:div {:id "navMenu", :class "navbar-menu " - :on-click (fn [] (re-frame/dispatch [::events/toggle-company-menu]))} + :on-click (fn [] (re-frame/dispatch [::events/toggle-menu :company]))} [:div.navbar-start - [:div { :class (str "navbar-item has-dropdown " (when (:active? @menu) "is-active"))} + [:div { :class (str "navbar-item has-dropdown " (when (get-in @menu [:company :active?]) "is-active"))} [:a {:class "navbar-link login"} "Company: " (if @company (:name @company) "All")] [:div {:class "navbar-dropdown"} @@ -257,16 +267,7 @@ [:span] [:span] [:span]] - [:div {:id "navMenu", :class "navbar-menu"} - [:div {:class "navbar-end"} - [:div {:class "navbar-item has-dropdown is-active"} - [login] - [:div {:class "navbar-dropdown", :style {:display "none"}} - [:a {:class "navbar-item"} ] - [:a {:class "navbar-item"} ] - [:a {:class "navbar-item"} ] - [:hr {:class "navbar-divider"}] - [:div {:class "navbar-item"} ]]]]]]] + [login]]] [:div {:class "columns", :id "mail-app"} [:aside {:class "column is-narrow aside menu hero is-fullheight"} [:div.main