Skip to content

Instantly share code, notes, and snippets.

@currentoor
Last active February 17, 2019 19:31
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 currentoor/5f9b556376fc5c70fc0f302bcc11fbf7 to your computer and use it in GitHub Desktop.
Save currentoor/5f9b556376fc5c70fc0f302bcc11fbf7 to your computer and use it in GitHub Desktop.
;; Setup
(defmulti resolver-fn pc/resolver-dispatch)
(defmulti mutation-fn pc/mutation-dispatch)
(defonce indexes (atom {}))
(defonce defresolver (pc/resolver-factory resolver-fn indexes))
(defonce defmutation (pc/mutation-factory mutation-fn indexes))
(defn rest-parser
"Create a REST parser. Make sure you've required all nses that define rest resolvers. The given app-atom will be available
to all resolvers in `env` as `:app-atom`."
[app-atom]
(p/async-parser
{::p/plugins [(p/env-plugin
{::p/reader [p/map-reader
pc/all-async-readers]
:app-atom app-atom
::pc/resolver-dispatch resolver-fn
::pc/mutation-dispatch mutation-fn
::pc/indexes @indexes})
p/request-cache-plugin
(p/post-process-parser-plugin p/elide-not-found)]}))
(defn rest-remote
[app-atom]
(pn/pathom-remote (rest-parser app-atom)))
;; Mutation definition
(defmutation `print-receipt
{::pc/params [:firm :order]
::pc/output [:receipt-printer/success]}
(fn [{:keys [app-atom ast]} {:keys [firm order]}]
(go-catch
(let [controller-api "http://localhost:4000/api"
response (async/<! (http/post controller-api
{:body {:firm firm :order order}}))]
(util/spy response)))))
;; Client Definition
(defn ^:export init []
(reset! app (fc/make-fulcro-client
{:request-transform auth/with-auth-token
:networking {:remote (c.socket/make-networking app {:client-type "pos"})
:rest (rest/rest-remote app)
:file-upload (file-upload/make-networking)}
:client-did-mount started-callback
:query-transform-default (fn [query]
(df/elide-query-nodes query #{:fulcro.ui.form-state/config}))}))
(start))
;; My Pathom indexes look like this
{:com.wsscode.pathom.connect/index-resolvers {ucv.ui.mobile-pos.vehicle-capture/post-file-to-alpr-api {:com.wsscode.pathom.connect/sym ucv.ui.mobile-pos.vehicle-capture/post-file-to-alpr-api,
:com.wsscode.pathom.connect/input #{},
:com.wsscode.pathom.connect/resolve #object[Function],
:com.wsscode.pathom.connect/output [{:vehicle/recognition [:vehicle/id
:vehicle/plate]}]}},
:com.wsscode.pathom.connect/index-io {#{} {:vehicle/recognition {:vehicle/id {}, :vehicle/plate {}}}},
:com.wsscode.pathom.connect/index-oir {:vehicle/recognition {#{} #{ucv.ui.mobile-pos.vehicle-capture/post-file-to-alpr-api}}},
:com.wsscode.pathom.connect/index-mutations {ucv.ui.receipt/print-receipt {:com.wsscode.pathom.connect/mutate #object[Function],
:com.wsscode.pathom.connect/params [:firm
:order],
:com.wsscode.pathom.connect/output [:receipt-printer/success],
:com.wsscode.pathom.connect/sym ucv.ui.receipt/print-receipt}}}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment