From 673dbd080776acc2b4d219863fb0772431eb005b Mon Sep 17 00:00:00 2001 From: Bryce Date: Wed, 27 Sep 2023 15:58:50 -0700 Subject: [PATCH] Should force the user to select a client --- resources/public/output.css | 54 +++++++++++-- src/clj/auto_ap/ssr/company/yodlee.clj | 36 ++++++--- src/clj/auto_ap/ssr/components/buttons.clj | 88 +++++++++++++++++++++- src/clj/auto_ap/yodlee/core2.clj | 7 +- 4 files changed, 160 insertions(+), 25 deletions(-) diff --git a/resources/public/output.css b/resources/public/output.css index bf55e1ee..bcecae39 100644 --- a/resources/public/output.css +++ b/resources/public/output.css @@ -1835,16 +1835,16 @@ input:checked + .toggle-bg { background-color: rgb(255 154 154 / var(--tw-bg-opacity)); } +.bg-red-300 { + --tw-bg-opacity: 1; + background-color: rgb(255 104 104 / var(--tw-bg-opacity)); +} + .bg-red-50 { --tw-bg-opacity: 1; background-color: rgb(255 230 230 / var(--tw-bg-opacity)); } -.bg-red-500 { - --tw-bg-opacity: 1; - background-color: rgb(255 3 3 / var(--tw-bg-opacity)); -} - .bg-white { --tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity)); @@ -1859,9 +1859,49 @@ input:checked + .toggle-bg { background-color: rgb(253 246 178 / var(--tw-bg-opacity)); } -.bg-red-300 { +.bg-blue-300 { --tw-bg-opacity: 1; - background-color: rgb(255 104 104 / var(--tw-bg-opacity)); + background-color: rgb(102 196 242 / var(--tw-bg-opacity)); +} + +.bg-blue-400 { + --tw-bg-opacity: 1; + background-color: rgb(51 176 238 / var(--tw-bg-opacity)); +} + +.bg-blue-600 { + --tw-bg-opacity: 1; + background-color: rgb(0 125 187 / var(--tw-bg-opacity)); +} + +.bg-blue-800 { + --tw-bg-opacity: 1; + background-color: rgb(0 62 94 / var(--tw-bg-opacity)); +} + +.bg-green-300 { + --tw-bg-opacity: 1; + background-color: rgb(175 211 130 / var(--tw-bg-opacity)); +} + +.bg-green-400 { + --tw-bg-opacity: 1; + background-color: rgb(148 196 88 / var(--tw-bg-opacity)); +} + +.bg-green-600 { + --tw-bg-opacity: 1; + background-color: rgb(97 145 37 / var(--tw-bg-opacity)); +} + +.bg-green-700 { + --tw-bg-opacity: 1; + background-color: rgb(73 109 28 / var(--tw-bg-opacity)); +} + +.bg-green-800 { + --tw-bg-opacity: 1; + background-color: rgb(48 72 18 / var(--tw-bg-opacity)); } .bg-opacity-50 { diff --git a/src/clj/auto_ap/ssr/company/yodlee.clj b/src/clj/auto_ap/ssr/company/yodlee.clj index 3078c6f5..0f7b6380 100644 --- a/src/clj/auto_ap/ssr/company/yodlee.clj +++ b/src/clj/auto_ap/ssr/company/yodlee.clj @@ -27,7 +27,7 @@ -(defn fastlink-dialog [{:keys [session]}] +(defn fastlink-dialog [{:keys [client]}] (html-response (com/modal {} @@ -41,14 +41,19 @@ (format " fastlink.open({fastLinkURL: '%s', accessToken: '%s', - params: {'configName': 'Aggregation'}}, + params: {'configName': 'Aggregation'}, + onError: function(e) { + console.log(e); + htmx.trigger(\"#yodlee-table\", \"notification\", {value: \"Yodlee returned the following error: '\" + e.message + \"'.\\n\\nYou may want to refresh your browser and try again.\"}); + setTimeout(hideModal, 300); + }}, 'fa-spot'); -" (:yodlee2-fastlink env) (yodlee/get-access-token (:client/code (:client session)))))] +" (:yodlee2-fastlink env) (yodlee/get-access-token (:client/code client))))] ] [:div])))) -(defn reauthenticate [{:keys [session form-params]}] +(defn reauthenticate [{:keys [form-params]}] (html-response (com/modal {} @@ -92,14 +97,21 @@ fastlink.open({fastLinkURL: '%s', :title "Yodlee Accounts" :entity-name "Yodlee accounts" :route :company-yodlee-table - :action-buttons (fn [user _] - [(com/button {:color :primary - :on-click "openFastlink()" - :hx-get (bidi/path-for ssr-routes/only-routes - :company-yodlee-fastlink-dialog) - :hx-target "#modal-holder"} - (com/button-icon {} svg/refresh) - "Link new account")]) + :action-buttons (fn [user args] + [[:div.flex.flex-col.flex-shrink + [:div.flex-shrink + (com/button {:color :primary + :on-click "openFastlink()" + :disabled (if (:client args) + false + true) + :hx-get (bidi/path-for ssr-routes/only-routes + :company-yodlee-fastlink-dialog) + :hx-target "#modal-holder"} + (com/button-icon {} svg/refresh) + "Link new account")] + (when-not (:client args) + [:div.text-xs "Note: please select a specific customer to link a new account."])]]) :row-buttons (fn [user e] [ (com/button {:hx-put (bidi/path-for ssr-routes/only-routes diff --git a/src/clj/auto_ap/ssr/components/buttons.clj b/src/clj/auto_ap/ssr/components/buttons.clj index e323a833..cdff1fed 100644 --- a/src/clj/auto_ap/ssr/components/buttons.clj +++ b/src/clj/auto_ap/ssr/components/buttons.clj @@ -4,19 +4,99 @@ (defn button-icon- [_ i] [:div.h-4.w-4 i]) +(defn bg-colors [color disabled] + (let [base-color (cond (= :primary color) + "green" + (= :secondary color) + "blue" + + (nil? color) + "white" + + :else + color) + disabled-weight (when disabled 400)] + + (format " bg-%s-%d hover:bg-%s-%d focus:ring-%s-%d dark:bg-%s-%d dark:hover:bg-%s-%d " + base-color + (or disabled-weight 500) + + base-color + (or disabled-weight 600) + + base-color + (or disabled-weight 200) + + base-color + (or disabled-weight 600) + + base-color + (or disabled-weight 700) + + ))) + +(defn dark-color-weight [disabled] + (if disabled + 400 + 600)) + +(defn hover-color-weight [disabled] + (if disabled + 400 + 600)) + +(for [color ["green" "blue" "white"] + weight (range 100 900 100)] + (str "bg-" color "-" weight)) +;;ensuring these colors show up +;; => ("bg-green-100" +;; "bg-green-200" +;; "bg-green-300" +;; "bg-green-400" +;; "bg-green-500" +;; "bg-green-600" +;; "bg-green-700" +;; "bg-green-800" +;; "bg-blue-100" +;; "bg-blue-200" +;; "bg-blue-300" +;; "bg-blue-400" +;; "bg-blue-500" +;; "bg-blue-600" +;; "bg-blue-700" +;; "bg-blue-800" +;; "bg-white-100" +;; "bg-white-200" +;; "bg-white-300" +;; "bg-white-400" +;; "bg-white-500" +;; "bg-white-600" +;; "bg-white-700" +;; "bg-white-800") + (defn button- [params & children] + [:button (update params :class #(cond-> % - true (str " focus:ring-4 font-bold rounded-lg text-xs p-3 text-center mr-2 inline-flex items-center hover:scale-105 transition duration-100 justify-center") - (= :secondary (:color params)) (str " text-white bg-blue-500 hover:bg-blue-600 focus:ring-blue-300 dark:bg-blue-600 dark:hover:bg-blue-700") - (= :primary (:color params)) (str " text-white bg-green-500 hover:bg-green-600 focus:ring-green-300 dark:bg-green-600 dark:hover:bg-green-700 ") + true (str " focus:ring-4 font-bold rounded-lg text-xs p-3 text-center mr-2 inline-flex items-center justify-center" + (bg-colors (:color params) (:disabled params))) + + (not (:disabled params)) + (str " hover:scale-105 transition duration-100") + + (:disabled params) + (str " cursor-not-allowed") + + (not (nil? (:color params))) + (str " text-white ") + (nil? (:color params)) (str " bg-white dark:bg-gray-600 border-gray-300 dark:border-gray-700 text-gray-500 hover:text-gray-800 dark:text-gray-400 dark:hover:text-gray-100 font-medium border border-gray-300 dark:border-gray-700"))) [:div.htmx-indicator.flex.items-center (svg/spinner {:class "inline w-4 h-4 text-white"}) [:div.ml-3 "Loading..."]] (into [:div.htmx-indicator-hidden.inline-flex.gap-2.items-center.justify-center] children)]) - +;; => #'auto-ap.ssr.components.buttons/button-;; => #'auto-ap.ssr.components.buttons/button- (defn icon-button- [params & children] (into [:button diff --git a/src/clj/auto_ap/yodlee/core2.clj b/src/clj/auto_ap/yodlee/core2.clj index 072dde91..ec4bdcbd 100644 --- a/src/clj/auto_ap/yodlee/core2.clj +++ b/src/clj/auto_ap/yodlee/core2.clj @@ -14,7 +14,8 @@ [datomic.api :as dc] [auto-ap.datomic :refer [conn]] [auto-ap.datomic.clients :as d-clients] - [clojure.string :as str])) + [clojure.string :as str] + [auto-ap.logging :as alog])) ;; switch all of this to use tokens instead of passing around client codes, particularly because the codes ;; need to be tweaked for repeats (defn client-code->login [client-code] @@ -216,10 +217,12 @@ (defn get-access-token [client-code] (try + (alog/info ::getting-access-token :client client-code) (let [cob-session (login-user (client-code->login client-code))] + (alog/info ::got-cob-session :cob-ession cob-session) cob-session) (catch Exception e - (log/error e) + (alog/error ::cant-get-access-token :exception e) (throw e)))) #_{:clj-kondo/ignore [:clojure-lsp/unused-public-var]}