Skip to content

Commit

Permalink
Merge pull request #195 from /issues/115
Browse files Browse the repository at this point in the history
Issues/115
  • Loading branch information
nohaapav committed Dec 27, 2017
2 parents 3ce86ef + 6c9c8db commit 5c9988f
Show file tree
Hide file tree
Showing 11 changed files with 74 additions and 129 deletions.
27 changes: 21 additions & 6 deletions src/cljc/swarmpit/utils.cljc
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,31 @@
(subvec vector 0 index)
(subvec vector (inc index)))))

(defn select-keys* [m paths]
(defn select-keys*
"Better select-keys supporting also nested maps. E.g. [[:name] [:node :nodeName]]"
[m paths]
(->> paths
(map (fn [p]
[(last p) (get-in m p)]))
(into {})))

(defn merge-data
"Recursively merge delta to current json map structure."
[data delta]
(cond (and (map? data)
(map? delta)) (merge-with merge-data data delta)
:else delta))
"Recursively merge map delta to current data structure."
[m delta]
(cond (and (map? m)
(map? delta)) (merge-with merge-data m delta)
:else delta))

(defn map-values
"Walk the map and return all values as set"
[m]
(remove nil?
(set
(flatten
(clojure.walk/prewalk
(fn [x]
(cond
(map? x) (vals x)
(integer? x) (str x)
(boolean? x) (str x)
:else (identity x))) m)))))
15 changes: 14 additions & 1 deletion src/cljs/material/component/list_table.cljs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
(ns material.component.list-table
(:refer-clojure :exclude [filter])
(:require [material.component :as cmp]
[material.icon :as icon]
[swarmpit.utils :refer [select-keys*]]
[swarmpit.utils :refer [select-keys* map-values]]
[swarmpit.url :refer [dispatch!]]))

(defn table-header
Expand Down Expand Up @@ -100,3 +101,15 @@
items
render-item-fn
render-items-key)))])))

(defn filter
[items query]
(if (or (empty? query)
(< (count query) 2))
items
(clojure.core/filter
(fn [item]
(->> (map-values item)
(clojure.core/filter #(clojure.string/includes? % query))
(empty?)
(not))) items)))
16 changes: 4 additions & 12 deletions src/cljs/swarmpit/component/dockerhub/list.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
[swarmpit.component.state :as state]
[swarmpit.component.handler :as handler]
[swarmpit.routes :as routes]
[clojure.string :as string]
[swarmpit.storage :as storage]
[rum.core :as rum]))

(def cursor [:form])
Expand Down Expand Up @@ -37,12 +35,6 @@
[item]
(routes/path-for-frontend :dockerhub-user-info {:id (:_id item)}))

(defn- filter-items
[items predicate]
(filter #(and (string/includes? (:username %) predicate)
(= (:owner %)
(storage/user))) items))

(defn- users-handler
[]
(handler/get
Expand All @@ -52,7 +44,7 @@

(defn- init-state
[]
(state/set-value {:filter {:username ""}} cursor))
(state/set-value {:filter {:query ""}} cursor))

(def mixin-init-form
(mixin/init-form
Expand All @@ -65,15 +57,15 @@
mixin/subscribe-form
mixin/focus-filter [_]
(let [{:keys [filter items]} (state/react cursor)
filtered-items (filter-items items (:username filter))]
filtered-items (list/filter items (:query filter))]
[:div
[:div.form-panel
[:div.form-panel-left
(panel/text-field
{:id "filter"
:hintText "Filter by username"
:hintText "Search hub users"
:onChange (fn [_ v]
(state/update-value [:filter :username] v cursor))})]
(state/update-value [:filter :query] v cursor))})]
[:div.form-panel-right
(comp/mui
(comp/raised-button
Expand Down
13 changes: 4 additions & 9 deletions src/cljs/swarmpit/component/network/list.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
[swarmpit.component.state :as state]
[swarmpit.component.handler :as handler]
[swarmpit.routes :as routes]
[clojure.string :as string]
[rum.core :as rum]))

(enable-console-print!)
Expand Down Expand Up @@ -40,10 +39,6 @@
[item]
(routes/path-for-frontend :network-info {:id (:networkName item)}))

(defn- filter-items
[items predicate]
(filter #(string/includes? (:networkName %) predicate) items))

(defn- networks-handler
[]
(handler/get
Expand All @@ -53,7 +48,7 @@

(defn- init-state
[]
(state/set-value {:filter {:networkName ""}} cursor))
(state/set-value {:filter {:query ""}} cursor))

(def mixin-init-form
(mixin/init-form
Expand All @@ -66,15 +61,15 @@
mixin/subscribe-form
mixin/focus-filter [_]
(let [{:keys [filter items]} (state/react cursor)
filtered-items (filter-items items (:networkName filter))]
filtered-items (list/filter items (:query filter))]
[:div
[:div.form-panel
[:div.form-panel-left
(panel/text-field
{:id "filter"
:hintText "Filter by name"
:hintText "Search networks"
:onChange (fn [_ v]
(state/update-value [:filter :networkName] v cursor))})]
(state/update-value [:filter :query] v cursor))})]
[:div.form-panel-right
(comp/mui
(comp/raised-button
Expand Down
15 changes: 5 additions & 10 deletions src/cljs/swarmpit/component/node/list.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,16 @@
[material.component.panel :as panel]
[swarmpit.component.mixin :as mixin]
[swarmpit.component.state :as state]
[material.component.list-table :as list]
[swarmpit.component.handler :as handler]
[swarmpit.routes :as routes]
[clojure.string :as string]
[sablono.core :refer-macros [html]]
[rum.core :as rum]))

(enable-console-print!)

(def cursor [:form])

(defn- filter-items
"Filter list items based on given predicate"
[items predicate]
(filter #(string/includes? (:nodeName %) predicate) items))

(defn- node-item-state [value]
(case value
"ready" (label/green value)
Expand Down Expand Up @@ -65,7 +60,7 @@

(defn- init-state
[]
(state/set-value {:filter {:nodeName ""}} cursor))
(state/set-value {:filter {:query ""}} cursor))

(def mixin-init-form
(mixin/init-form
Expand All @@ -78,15 +73,15 @@
mixin/subscribe-form
mixin/focus-filter [_]
(let [{:keys [filter items]} (state/react cursor)
filtered-items (filter-items items (:nodeName filter))]
filtered-items (list/filter items (:query filter))]
[:div
[:div.form-panel
[:div.form-panel-left
(panel/text-field
{:id "filter"
:hintText "Filter by name"
:hintText "Search nodes"
:onChange (fn [_ v]
(state/update-value [:filter :nodeName] v cursor))})]]
(state/update-value [:filter :query] v cursor))})]]
[:div.content-grid.mdl-grid
(->> (sort-by :nodeName filtered-items)
(map #(node-item %)))]]))
20 changes: 6 additions & 14 deletions src/cljs/swarmpit/component/registry/list.cljs
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
(ns swarmpit.component.registry.list
(:require [material.component :as comp]
(:require [material.icon :as icon]
[material.component :as comp]
[material.component.panel :as panel]
[material.component.list-table :as list]
[material.icon :as icon]
[swarmpit.component.mixin :as mixin]
[swarmpit.component.state :as state]
[swarmpit.component.handler :as handler]
[swarmpit.storage :as storage]
[swarmpit.routes :as routes]
[clojure.string :as string]
[rum.core :as rum]))

(def cursor [:form])
Expand Down Expand Up @@ -41,12 +39,6 @@
[item]
(routes/path-for-frontend :registry-info {:id (:_id item)}))

(defn- filter-items
[items predicate]
(filter #(and (string/includes? (:name %) predicate)
(= (:owner %)
(storage/user))) items))

(defn- registries-handler
[]
(handler/get
Expand All @@ -56,7 +48,7 @@

(defn- init-state
[]
(state/set-value {:filter {:name ""}} cursor))
(state/set-value {:filter {:query ""}} cursor))

(def mixin-init-form
(mixin/init-form
Expand All @@ -69,15 +61,15 @@
mixin/subscribe-form
mixin/focus-filter [_]
(let [{:keys [filter items]} (state/react cursor)
filtered-items (filter-items items (:name filter))]
filtered-items (list/filter items (:query filter))]
[:div
[:div.form-panel
[:div.form-panel-left
(panel/text-field
{:id "filter"
:hintText "Filter by name"
:hintText "Search registries"
:onChange (fn [_ v]
(state/update-value [:filter :name] v cursor))})]
(state/update-value [:filter :query] v cursor))})]
[:div.form-panel-right
(comp/mui
(comp/raised-button
Expand Down
13 changes: 4 additions & 9 deletions src/cljs/swarmpit/component/secret/list.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
[swarmpit.component.handler :as handler]
[swarmpit.routes :as routes]
[swarmpit.time :as time]
[clojure.string :as string]
[rum.core :as rum]))

(enable-console-print!)
Expand All @@ -30,10 +29,6 @@
[item]
(routes/path-for-frontend :secret-info {:id (:secretName item)}))

(defn- filter-items
[items predicate]
(filter #(string/includes? (:secretName %) predicate) items))

(defn- secrets-handler
[]
(handler/get
Expand All @@ -43,7 +38,7 @@

(defn- init-state
[]
(state/set-value {:filter {:secretName ""}} cursor))
(state/set-value {:filter {:query ""}} cursor))

(def mixin-init-form
(mixin/init-form
Expand All @@ -56,15 +51,15 @@
mixin/subscribe-form
mixin/focus-filter [_]
(let [{:keys [filter items]} (state/react cursor)
filtered-items (filter-items items (:secretName filter))]
filtered-items (list/filter items (:query filter))]
[:div
[:div.form-panel
[:div.form-panel-left
(panel/text-field
{:id "filter"
:hintText "Filter by name"
:hintText "Search secrets"
:onChange (fn [_ v]
(state/update-value [:filter :secretName] v cursor))})]
(state/update-value [:filter :query] v cursor))})]
[:div.form-panel-right
(comp/mui
(comp/raised-button
Expand Down
32 changes: 4 additions & 28 deletions src/cljs/swarmpit/component/service/list.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
[swarmpit.component.mixin :as mixin]
[swarmpit.component.handler :as handler]
[swarmpit.routes :as routes]
[clojure.string :as string]
[sablono.core :refer-macros [html]]
[rum.core :as rum]))

Expand Down Expand Up @@ -67,20 +66,6 @@
[item]
(routes/path-for-frontend :service-info {:id (:serviceName item)}))

(defn- filter-unhealthy-items
[items name]
(let [is-running (fn [item] (= "running" (:state item)))
is-updating (fn [item] (= "updating" (get-in item [:status :update])))]
(filter #(and (string/includes? (:serviceName %) name)
(and (not (is-running %))
(not (is-updating %)))) items)))

(defn- filter-items
[items name unhealthy?]
(if unhealthy?
(filter-unhealthy-items items name)
(filter #(string/includes? (:serviceName %) name) items)))

(defn- services-handler
[]
(handler/get
Expand All @@ -90,8 +75,7 @@

(defn- init-state
[]
(state/set-value {:filter {:serviceName ""
:unhealthy false}} cursor))
(state/set-value {:filter {:query ""}} cursor))

(def mixin-init-form
(mixin/init-form
Expand All @@ -104,23 +88,15 @@
mixin/subscribe-form
mixin/focus-filter [_]
(let [{:keys [filter items]} (state/react cursor)
filtered-items (filter-items items
(:serviceName filter)
(:unhealthy filter))]
filtered-items (list/filter items (:query filter))]
[:div
[:div.form-panel
[:div.form-panel-left
(panel/text-field
{:id "filter"
:hintText "Filter by name"
:hintText "Search services"
:onChange (fn [_ v]
(state/update-value [:filter :serviceName] v cursor))})
[:span.form-panel-space]
(panel/checkbox
{:checked (:unhealthy filter)
:label "Show unhealthy"
:onCheck (fn [_ v]
(state/update-value [:filter :unhealthy] v cursor))})]
(state/update-value [:filter :query] v cursor))})]
[:div.form-panel-right
(comp/mui
(comp/raised-button
Expand Down

0 comments on commit 5c9988f

Please sign in to comment.