(ns geocsv-lite.data (:require-macros [cljs.core.async.macros :refer [go]]) (:require [clojure.browser.dom :as dom] [clojure.string :as cs] [cljs-http.client :as http] [cljs.core.async :refer [clj (.parse js/Papa content (clj->js {:dynamicTyping true})) :keywordize-keys true)))] (gis/refresh-map-pins (get-view k) records)) (n/error (str "Bad response from server: " (:status response))))) (defn get-data-from-uri "Get data for the view identified by this keyword `k` from this `uri`." [k uri] (go (let [response (clj (.parse js/Papa data-source) :keywordize-keys true) data (if (empty? (:errors p)) (:data p) ;; otherwise, is it JSON? (try (js->clj (.parse js/JSON data-source)) (catch :default _ nil)))] ;; almost anything can be a valid URL, so it's hard to verify that a given ;; string is not one. So we will assume that what we've been passed is a ;; URL unless we've been able to parse valid data out of it. (js/console.debug "Found records: " (clj->js data)) (if ;; it looks like valid data if it's a vector of vectors. (and (vector? data) (every? vector? data)) (let [records (prepare-records data)] (n/message (str "Found " (count records) " records of inline data for map `" k "`")) (gis/refresh-map-pins (get-view k) (prepare-records data))) ; else (get-data-from-uri k data-source)))) (defn get-data-with-uri-and-handler [uri handler-fn k] (go (let [response (clj (.parse js/Papa data-source) ;; :keywordize-keys true))) ;; (get-data :inline-csv-map "http://localhost:3449/data/data.csv") ;; (get-data :inline-csv-map data-source) ;; (every? (fn [r] (and (vector? r) (every? vector? r))) (:data (js->clj (.parse js/Papa data-source) ;; :keywordize-keys true))) ;; (every? vector? (:data (js->clj (.parse js/Papa data-source) ;; :keywordize-keys true))) ;; (vector? (first (:data (js->clj (.parse js/Papa data-source) ;; :keywordize-keys true)))) ;; (def p (:data (js->clj (.parse js/Papa data-source) ;; :keywordize-keys true))) ;; (every? vector? p) ;; (vector? p) ;; (every? vector? p)