uses cursors instead, much clearer experience.

This commit is contained in:
2023-10-20 08:54:00 -07:00
parent ce8fa027b2
commit e3443a3dd8
5 changed files with 161 additions and 119 deletions

View File

@@ -0,0 +1,38 @@
(ns auto-ap.ssr.form-cursor
(:require [auto-ap.ssr.utils :refer [path->name2]]
[auto-ap.cursor :as cursor]))
(def ^:dynamic *form-data*)
(def ^:dynamic *form-errors*)
(def ^:dynamic *prev-cursor* nil)
(def ^:dynamic *current* nil)
(defmacro start-form [form-data errors & rest]
`(binding [*form-data* ~form-data
*form-errors* (or ~errors {})]
(binding [*current* (cursor/cursor *form-data*)]
~@rest)))
(defmacro with-cursor [cursor & rest]
`(binding [*current* ~cursor]
~@rest))
(defmacro with-field [field & rest]
`(with-cursor (get *current* ~field )
~@rest))
(defn field-name
([] (field-name *current*))
([cursor]
(apply path->name2 (cursor/path cursor))))
(defn field-value []
@*current*)
(defn field-errors
([]
(field-errors *current*))
([cursor]
(get-in *form-errors* (cursor/path cursor))))