Skip to content

Instantly share code, notes, and snippets.

@werenall
Created May 3, 2019 10:40
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 werenall/a2cb006754ecc01142639497736eee7e to your computer and use it in GitHub Desktop.
Save werenall/a2cb006754ecc01142639497736eee7e to your computer and use it in GitHub Desktop.
Tooltip using React's lifecycle methods
(defn find-tooltip-controller-class [node]
(or (some-> node
.-classList
(.contains "js-tooltip-controller"))
(some-> (.-parentNode node) (find-tooltip-controller-class))))
(defn tooltip [display-tooltip?]
(let [click-handler (fn [e]
(.stopPropagation e)
(when-not (find-tooltip-controller-class (.. e -target))
(reset! display-tooltip? false)))]
(r/create-class
{:reagent-render (fn []
[:div.tooltip.tooltip--bottom
[:button {:on-click #(reset! display-tooltip? false)} "x"]
[:p "Hello there!"]])
:component-did-mount #(.addEventListener js/document "click" click-handler)
:component-will-unmount #(.removeEventListener js/document "click" click-handler)})))
(defn main []
(let [display-tooltip? (r/atom false)]
(fn []
[:div.tooltip-controller.js-tooltip-controller
[:button
{:on-click #(swap! display-tooltip? not)}
"spawn tooltip"]
(when @display-tooltip?
[tooltip display-tooltip?])])))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment