Skip to content

Instantly share code, notes, and snippets.

@markhepburn
Last active June 19, 2020 05:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save markhepburn/b3cc3d423696e95702d28c4812699a5e to your computer and use it in GitHub Desktop.
Save markhepburn/b3cc3d423696e95702d28c4812699a5e to your computer and use it in GitHub Desktop.
(defn select-keys* [m paths]
(apply merge-in
(map #(cond
(nil? %) nil
(not (sequential? %)) {% (get m %)}
(= 1 (count %)) {(first %) (get m (first %))}
:else {(first %) (select-keys* (get m (first %)) [(rest %)])})
paths)))
(comment
(def ks [[:map :zoom] :display [:transect :query]])
(def ks2 [[:map :zoom] :display [:map :active] [:transect :query]])
(def m {:map
{:center [-34.506683349609375 135.2468490600586],
:zoom 10,
:active (95)},
:display
{:sidebar {:selected "tab-habitat"},
:catalogue {:tab "org", :expanded #{}}},
:transect {:show? false, :query nil},
:legend-ids ()})
(select-keys* m ks)
;; {:map {:zoom 10},
;; :display
;; {:sidebar {:selected "tab-habitat"},
;; :catalogue {:tab "org", :expanded #{}}},
;; :transect {:query nil}}
(select-keys* m ks2)
;; {:map {:zoom 10, :active (95)},
;; :display
;; {:sidebar {:selected "tab-habitat"},
;; :catalogue {:tab "org", :expanded #{}}},
;; :transect {:query nil}}
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment