Files
integreat/src/cljs/auto_ap/views/components.cljs
2022-07-22 22:55:26 -07:00

73 lines
2.5 KiB
Clojure

(ns auto-ap.views.components
(:require [reagent.core :as r]
[clojure.string :as str]
[auto-ap.views.components.multi :as multi]
[auto-ap.views.components.money-field :as money]
[auto-ap.views.components.number :as number]
[auto-ap.views.components.typeahead.vendor :as typeahead]
[auto-ap.views.components.button-radio :as br]))
(defn checkbox [{:keys [on-change
value
label]
:as props}]
(into [:label.checkbox
[:input (-> props
(assoc
:type "checkbox"
:on-change (fn []
(on-change (not value)))
:checked value)
(dissoc :value))]
" " label
]
(r/children (r/current-component))))
(defn select-field [{:keys [options allow-nil? class on-change keywordize?] :as props}]
[:div.select {:class class}
[:select (-> props
(dissoc :allow-nil? :class :options)
(update :value (fn [v]
(cond (str/blank? v)
""
keywordize?
(name v)
:else
v)))
(assoc :on-change
(fn [e]
(println "VALUE IS" (keyword (.. e -target -value)))
(if keywordize?
(on-change (keyword (.. e -target -value)))
(on-change e))))
(dissoc :keywordize?))
[:<>
(when allow-nil?
[:option {:value nil}])
(for [[k v] options]
^{:key k} [:option {:value k} v])]]])
(defn switch-input [{:keys [id label on-change value class]}]
[:<>
[:input.switch {:type "checkbox"
:id id
:on-change (fn []
(on-change (not value)))
:checked (boolean value)
:class class}]
[:label {:for id} label]])
(def multi-field-v2 multi/multi-field-v2)
(def number-input number/number-input)
(def money-input money/field)
(def search-backed-typeahead typeahead/search-backed-typeahead)
(def entity-typeahead typeahead/typeahead-v3)
(def button-radio-input br/button-radio)