diff --git a/src/cljs/auto_ap/events.cljs b/src/cljs/auto_ap/events.cljs index 24a02cb6..9dbc4d93 100644 --- a/src/cljs/auto_ap/events.cljs +++ b/src/cljs/auto_ap/events.cljs @@ -41,6 +41,11 @@ (fn [db [_ companies]] (assoc db :companies companies))) +(re-frame/reg-event-db + ::select-company + (fn [db [_ company]] + (assoc-in db [:admin-companies :selected] company))) + (re-frame/reg-event-db ::swap-company (fn [db [_ company]] diff --git a/src/cljs/auto_ap/routes.cljs b/src/cljs/auto_ap/routes.cljs index f7b02ac9..26025285 100644 --- a/src/cljs/auto_ap/routes.cljs +++ b/src/cljs/auto_ap/routes.cljs @@ -3,6 +3,8 @@ (def routes ["/" {"" :index "login/" :login + "admin/" {"" :admin + "companies" :admin-companies} "invoices/" {"" :invoices "import" :import-invoices "unpaid" :unpaid-invoices diff --git a/src/cljs/auto_ap/subs.cljs b/src/cljs/auto_ap/subs.cljs index cb7df789..5bf5a3d1 100644 --- a/src/cljs/auto_ap/subs.cljs +++ b/src/cljs/auto_ap/subs.cljs @@ -24,6 +24,14 @@ (fn [db] (:user db))) +(re-frame/reg-sub + ::admin-companies + (fn [db] + (assoc + (:admin-companies db) + :selected + (first (filter #(= (:id %) (:selected (:admin-companies db))) (:companies db)))))) + (re-frame/reg-sub ::user (fn [db] diff --git a/src/cljs/auto_ap/views/main.cljs b/src/cljs/auto_ap/views/main.cljs index 8ea0b113..35590077 100644 --- a/src/cljs/auto_ap/views/main.cljs +++ b/src/cljs/auto_ap/views/main.cljs @@ -15,6 +15,8 @@ :import-invoices :left-panel :unpaid-invoices :left-panel :paid-invoices :left-panel + :admin :admin-left-panel + :admin-companies :admin-left-panel :new-invoice :blank} page)) (defn login-dropdown [] @@ -27,13 +29,72 @@ [:a {:class "navbar-link login" :on-click (fn [e] (re-frame/dispatch [::events/toggle-menu :account]))} (:name @user)] [:div {:class "navbar-dropdown"} [:a {:class "navbar-item"} "My profile"] - [:a {:class "navbar-item"} "Administration"] + [:a {:class "navbar-item" :href (bidi/path-for routes/routes :admin)} "Administration"] [:hr {:class "navbar-divider"}] [:a.navbar-item {:on-click (fn [e] (.preventDefault e) (re-frame/dispatch [::events/logout]))} "Logout"]]] [:a.navbar-item {:href login-url} "Login"])]])) (defmulti layout page->layout) +(defmethod layout :admin-left-panel [ap] + (let [company (re-frame/subscribe [::subs/company]) + companies (re-frame/subscribe [::subs/companies]) + menu (re-frame/subscribe [::subs/menu])] + [:div + [:nav {:class "navbar has-shadow"} + [:div {:class "container"} + [:div {:class "navbar-brand"} + [:a {:class "navbar-item", :href "../"} + [:h1 (str "Integreat")]]] + + [:div {:class "navbar-burger burger", :data-target "navMenu"} + [:span] + [:span] + [:span]] + [login-dropdown]]] + [:div {:class "columns", :id "mail-app"} + [:aside {:class "column is-narrow aside menu hero is-fullheight"} + [:div.main + [:p.menu-label "General"] + [:p.menu-item + [:a {:href (bidi/path-for routes/routes :admin) , :class (str "item" (active-when= ap :admin))} + [:span {:class "icon"} + [:i {:class "fa fa-tachometer"}]] + [:span {:class "name"} "Dashboard"]]] + + [:p.menu-label "Setup"] + [:ul.menu-list + [:li.menu-item + [:a {:href (bidi/path-for routes/routes :admin-companies) , :class (str "item" (active-when= ap :admin-companies))} + [:span {:class "icon"} + [:i {:class "fa fa-star-o"}]] + + [:span {:class "name"} "Companies"]]] + [:li.menu-item + [:a {:href (bidi/path-for routes/routes :admin-users), :class (str "item" (active-when= ap :admin-users))} + [:span {:class "icon"} + [:i {:class "fa fa-envelope-o"}]] + [:span {:class "name"} "Users"]]] + + [:ul ]]] + + [:div.left-nav + [:div {:class "compose has-text-centered"} + [:a {:class "button is-danger is-block is-bold" :href (bidi/path-for routes/routes :index)} + [:span {:class "compose"} "Back"]]]]] + [:div {:class "column messages hero is-fullheight", :id "message-feed"} + ^{:key (str "active-page-" (:name @company))} [pages/active-page ap]]] + [:footer {:class "footer"} + [:div {:class "container"} + [:div {:class "content has-text-centered"} + [:p + [:strong "Auto-AP"]"by " + [:a {:href "https://github.com/"} "Integreat"]"."] + [:p + [:a {:class "icon", :href "https://github.com/dansup/bulma-templates"} + [:i {:class "fa fa-github"}]]]]]] + [:div#dz-hidden]])) + (defmethod layout :left-panel [ap] (let [company (re-frame/subscribe [::subs/company]) companies (re-frame/subscribe [::subs/companies]) diff --git a/src/cljs/auto_ap/views/pages.cljs b/src/cljs/auto_ap/views/pages.cljs index ca967dbf..c5b72c7b 100644 --- a/src/cljs/auto_ap/views/pages.cljs +++ b/src/cljs/auto_ap/views/pages.cljs @@ -6,6 +6,8 @@ [auto-ap.events :as events] [auto-ap.views.pages.login :refer [login-page]] [auto-ap.views.pages.index :refer [index-page]] + [auto-ap.views.pages.admin :refer [admin-page]] + [auto-ap.views.pages.admin.companies :refer [admin-companies-page]] [auto-ap.views.pages.unpaid-invoices :refer [unpaid-invoices-page]] [auto-ap.views.pages.new-invoice :refer [new-invoice-page]] [auto-ap.views.pages.import-invoices :refer [import-invoices-page]] @@ -18,7 +20,6 @@ [cljs.core.async :refer [ " (:name selected-company)] + + [:label {:for "company-name"} "Name"] + [:input#company-name.input {:type "text" :value (:name selected-company)}] + + [:label {:for "email"} "Email"] + [:input#email.input {:type "email" :value (:email selected-company)}] + + [:label {:for "data"} "Data"] + [:input#data.input {:type "text" :value (:data selected-company)}] + + [:label {:for "check"} "Send invoice reminders?"] + [:input#check.checkbox {:type "checkbox" :value (:send-reminders selected-company)}] + [:div] + + [:a.button {:on-click (fn [] (re-frame/dispatch [::events/select-company nil]))} "Back"] + [:a.button.is-primary {:on-click (fn [] (re-frame/dispatch [::events/select-company nil]))} "Save"]] + [:div + [:h1.title "Companies"] + [companies-table] + [:a.button.is-primary "New Company"]]))]]]]) +