Skip to content

Commit

Permalink
Use update-state! instead of set-state!
Browse files Browse the repository at this point in the history
Split the logic into testable functions, and use update-state!
  • Loading branch information
Kauko committed Oct 12, 2017
1 parent 110d3c6 commit 85ed75f
Showing 1 changed file with 21 additions and 10 deletions.
31 changes: 21 additions & 10 deletions src/cljs/widgetshop/app/products.cljs
Original file line number Diff line number Diff line change
@@ -1,17 +1,28 @@
(ns widgetshop.app.products
"Controls product listing information."
(:require [widgetshop.app.state :refer [update-state! set-state!]]
(:require [widgetshop.app.state :as state]
[widgetshop.server :as server]))

(defn- products-by-category [app category products-by-category]
(assoc-in app [:products-by-category category] products-by-category))

(defn- set-categories [app categories]
(assoc-in app [:categories] categories))

(defn- load-products-by-category! [{:keys [categories] :as app} server-get-fn! category-id]
(let [category (some #(when (= (:id %) category-id) %) categories)]
(server-get-fn! category)
(-> app
(assoc :category category)
(assoc-in [:products-by-category category] :loading))))

(defn select-category-by-id! [category-id]
(update-state!
(fn [{:keys [categories] :as app}]
(let [category (some #(when (= (:id %) category-id) %) categories)]
(server/get! (str "/products/" (:id category))
{:on-success #(set-state! [:products-by-category category] %)})
(-> app
(assoc :category category)
(assoc-in [:products-by-category category] :loading))))))
(state/update-state!
load-products-by-category!
(fn [category]
(server/get! (str "/products/" (:id category))
{:on-success #(state/update-state! products-by-category category %)}))
category-id))

(defn load-product-categories! []
(server/get! "/categories" {:on-success #(set-state! [:categories] %)}))
(server/get! "/categories" {:on-success #(state/update-state! set-categories %)}))

0 comments on commit 85ed75f

Please sign in to comment.