Local State, Global Concerns: Better Snapshot Debugging for ClojureScript/Om
blog.circleci.com
blog.circleci.com
Speaking of Om's API, I'm very impressed with the surface area that Om exposes. CircleCI continues to build really powerful tooling on top of it - check out this Om Rendering toolbar that Daniel built with just a few lines of code https://dwwoelfel.github.io/instrumenting-om-components.html - more than anything else, tools like this help designers on the frontend be more independent, productive, and happy.
As an aside, the last gripe I have around Om's API is that after exploring Datascript for ClojureCup[1], it feels a lot more natural to have a client-side db backing the components, with each component having a few queries that feed it. Then, when a transaction invalidates a query, queue the component for re-rendering. I've been exploring a DataScript wrapper around React, and even just a weekend project was able to build something that was really exciting to use [2][3]. David Nolen's talked about wanting to see things like DataScript better integrated into Om, and I'm definitely hoping to see the same thing.
[1] http://prcrsr.com/document/789 | https://github.com/clojurecup2014/livemocker
[2] Example query for tracking mouse position in Sul https://github.com/sgrove/sul/blob/master/src/sul/core.cljs#...
[3] Sul Example recording/playback: http://sgrove.github.io/sul/
If you're on the new Om alpha, you can use it with:
(om/root
app-component
app-state
{:target target
:instrument (fn [f cursor m]
(om/build* f cursor (assoc m :descriptor (om/no-local-descriptor om/no-local-state-methods))))})