/src-cljs/lupapalvelu/ui/auth_admin/stamp/field_types.cljs

https://github.com/lupapiste/lupapiste · ClojureScript · 46 lines · 43 code · 3 blank · 0 comment · 0 complexity · 2e87a5d272cd1ec0b72d8c0de84328d5 MD5 · raw file

  1. (ns lupapalvelu.ui.auth-admin.stamp.field-types
  2. (:require [clojure.string :as string]
  3. [rum.core :as rum]
  4. [lupapalvelu.attachment.stamp-schema :as ss]
  5. [lupapalvelu.ui.util :as util]
  6. [lupapalvelu.ui.auth-admin.stamp.state :refer [component-state]]
  7. [lupapalvelu.ui.auth-admin.stamp.util :as stamp-util]
  8. [lupapalvelu.ui.common :refer [loc]]))
  9. (rum/defcs field-type-selector < (rum/local false)
  10. [local-state {:keys [key]}]
  11. (let [drag-source? (:rum/local local-state)
  12. drag-element (rum/cursor-in component-state [:editor :drag-element])
  13. closest-elem (rum/cursor-in component-state [:editor :closest-element])
  14. base-classes "stamp-editor-btn"
  15. extra-classes (if @drag-source?
  16. "drag-source"
  17. "")
  18. all-classes (string/join " " [base-classes extra-classes])]
  19. [:div
  20. {:draggable true
  21. :on-drag-start (fn [e]
  22. (reset! drag-element
  23. {:type :copy
  24. :source-boundaries (stamp-util/boundaries-from-component local-state)})
  25. (reset! drag-source? true)
  26. (let [data-transfer (.-dataTransfer e)]
  27. (.setData data-transfer "text" (util/clj->json {:type key}))))
  28. :on-drag-end (fn [_]
  29. (reset! drag-source? false)
  30. (reset! closest-elem [])
  31. (reset! drag-element nil))
  32. :data-stamp-btn-name key
  33. :class all-classes}
  34. [:div.btn-content
  35. [:i.lupicon-circle-plus]
  36. [:span (loc (str "stamp." (name key)))]]]))
  37. (rum/defc field-types-component < rum/reactive
  38. []
  39. [:div
  40. (for [field-type (concat ss/simple-field-types ss/text-field-types)]
  41. (rum/with-key
  42. (field-type-selector {:key field-type})
  43. field-type))])