posh
posh copied to clipboard
Entity included in a pull result by virtue of isComponent not reacting to change
Given the following setup:
(require '[datascript.core :as d])
(def test-schema
{:db/ident {:db/unique :db.unique/identity},
:one/name {:db/cardinality :db.cardinality/one},
:one/parts
{:db/valueType :db.type/ref,
:db/cardinality :db.cardinality/many,
:db/isComponent true},
:two/name {:db/cardinality :db.cardinality/one}})
(def conn (d/create-conn test-schema))
(d/transact! conn [
{:db/id -1, :one/name "Hello", :one/parts -2},
{:db/id -2, :two/name "World"}
])
...and the following ultra-minimal view:
(require '[posh.reagent :as p])
(require '[reagent.core :as r])
(require '[goog.dom :as gdom])
(p/posh! conn)
(defn app [conn]
(let [state @(p/pull conn '[*] 1)]
[:div (pr-str state)]))
(r/render-component [app conn] (gdom/getElement "app"))
...the view then contains both elements:
{:db/id 1, :one/name "Hello", :one/parts [{:db/id 2, :two/name "World"}]}
...and is correctly rerendered when the following transaction occurs:
(d/transact! conn [{:db/id 1, :one/name "Goodbye"}])
...but not this one:
(d/transact! conn [{:db/id 2, :two/name "Y'all"}])
I'm having this problem as well. I pull a deeply nested structure, but updating something down the tree, doesn't kick off a reaction.