Files
integreat/src/cljs/auto_ap/views/pages/transactions/manual.cljs
2019-04-11 08:00:07 -07:00

60 lines
2.0 KiB
Clojure

(ns auto-ap.views.pages.transactions.manual
(:require [auto-ap.events :as events]
[auto-ap.subs :as subs]
[auto-ap.views.components.modal :refer [action-modal]]
[auto-ap.views.utils :refer [bind-field]]
[re-frame.core :as re-frame]))
(re-frame/reg-event-fx
::opening
(fn [{:keys [db]} _]
{:dispatch [::events/modal-status ::import {:visible? true}]
:db (assoc-in db [::import] {:client-id (:id @(re-frame/subscribe [::subs/client]))
:data ""})}))
(re-frame/reg-sub
::import
(fn [db]
(-> db ::import)))
(re-frame/reg-event-fx
::import-completed
(fn [{:keys [db]} [_ import-completed-event {:keys [imported errors] :as result}]]
{:dispatch-n [[::events/modal-completed ::import]
(conj import-completed-event result)]}))
(re-frame/reg-event-fx
::import-error
(fn [{:keys [db]} [_ result]]
{:dispatch [::events/modal-failed ::import "Import failed"]}))
(re-frame/reg-event-fx
::import-started
(fn [{:keys [db]} [_ import-completed-event]]
(let [import (::import db)]
{:http {:token (:user db)
:method :post
:body (pr-str import)
:headers {"Content-Type" "application/edn"}
:uri (str "/api/transactions/batch-upload")
:on-success [::import-completed import-completed-event]
:on-error [::import-error]}})))
(defn modal [{import-completed-event :import-completed}]
(let [data @(re-frame/subscribe [::import])
change-event [::events/change-form [::import]]]
[action-modal {:id ::import
:title "Manual Yodlee Import"
:action-text "Import"
:save-event [::import-started import-completed-event]}
[:div.field
[:label.label
"Yodlee manual import table"]
[:div.control
[bind-field
[:textarea.textarea {:field [:data]
:event change-event
:subscription data}]]]]]))