 
   Optional Named parameters
   - `post-mutation`: A mutation (symbol) invoked after the load succeeds.
+  - `post-mutation-params`: An optional map  that will be passed to the post-mutation when it is called. May only contain raw data, not code!
   - `fallback`: A mutation (symbol) invoked after the load fails. App state is in env, server error is in the params under :error.
   - `parallel`: Boolean to indicate that this load should happen in the parallel on the server (non-blocking load). Any loads marked this way will happen in parallel.
   - `marker`: A boolean (default true). If true, a marker is placed in the app state in place of the target data during the load. If false, no marker is produced.

  - `params`: A parameter map to augment onto the first element of the query
  - `remote`: A keyword naming which remote to query.
  "
  [comp-or-reconciler query & {:keys [ident without remote params post-mutation fallback parallel refresh marker]
                               :or   {remote :remote refresh [] marker true}}]
  (when fallback (assert (symbol? fallback) "Fallback must be a mutation symbol."))
  (om/transact! comp-or-reconciler (into [(list 'untangled/load
                                            {:ident         ident
                                             :query         query
                                             :params        params
                                             :without       without
                                             :remote        remote
                                             :post-mutation post-mutation
                                             :refresh       refresh
                                             :marker        marker
                                             :parallel      parallel
                                             :fallback      fallback}) :ui/loading-data] refresh)))

(defn load-field-action
  "Queue up a remote load of a component's field from within an already-running mutation. Similar to `load-field`

  using an Om link (e.g. `[:ui/loading-data '_]`). The presence of the ident on components will enable query optimization, which can
  improve your frame rate because Om will not have to run a full root query.
  "
  [component field & {:keys [without params remote post-mutation post-mutation-params fallback parallel refresh marker]
                      :or   {remote :remote refresh [] marker true}}]
  (when fallback (assert (symbol? fallback) "Fallback must be a mutation symbol."))
  (om/transact! component (into [(list 'untangled/load
                                   {:ident                (om/get-ident component)
                                    :field                field
                                    :query                (om/focus-query (om/get-query component) [field])
                                    :params               params
                                    :without              without
                                    :remote               remote
                                    :post-mutation        post-mutation
                                    :post-mutation-params post-mutation-params
                                    :parallel             parallel
                                    :marker               marker
                                    :refresh              refresh
                                    :fallback             fallback}) :ui/loading-data (om/get-ident component)] refresh)))

(defn load-data
  "
