Skip to content

Instantly share code, notes, and snippets.

@xificurC
Forked from jeans11/core.cljc
Created March 2, 2023 14:47
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 xificurC/1cbc281dd49e7eb3c9f5adcba6382158 to your computer and use it in GitHub Desktop.
Save xificurC/1cbc281dd49e7eb3c9f5adcba6382158 to your computer and use it in GitHub Desktop.
Electric datalevin pending weird behaviour
(ns wip.datalevin
(:require [hyperfiddle.electric :as e]
[hyperfiddle.electric-dom2 :as dom]
[hyperfiddle.electric-ui4 :as ui]
#?(:clj [datalevin.core :as d]))
(:import (hyperfiddle.electric Pending)))
#?(:clj
(defonce !conn (d/get-conn "/tmp/foo")))
(comment
(d/close !conn)
(clojure.java.shell/sh "/usr/bin/rm -rf /tmp/foo")
(alter-var-root #'!conn (constantly (d/get-conn "/tmp/foo")))
nil)
(e/def db)
#?(:clj
(defn add-item []
(d/transact! !conn [{:db/id -1 :item/id (random-uuid)}])))
#?(:clj
(defn list-items [db]
(d/q '[:find [(pull ?e [:item/id]) ...]
:where [?e :item/id]]
db)))
(e/defn App []
(e/server
(binding [db (e/watch !conn)]
(e/client
(ui/button
(e/fn [] (e/server (e/offload #(add-item)) nil))
(dom/text "+ Add an item"))
(dom/ul
(try
(e/server
(e/for-by :item/id [{:keys [item/id]} (e/offload #(list-items db))]
(e/client (dom/li (dom/text id)))))
(catch Pending _ (dom/props {:style {:background-color "yellow"}}))))))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment