;; This Source Code Form is subject to the terms of the Mozilla Public ;; License, v. 2.0. If a copy of the MPL was not distributed with this ;; file, You can obtain one at http://mozilla.org/MPL/2.0/. ;; ;; Copyright (c) KALEIDOS INC (ns app.main.ui.components.file-uploader (:require [app.main.store :as st] [app.util.dom :as dom] [rumext.v2 :as mf])) (mf/defc file-uploader {::mf/forward-ref true} [{:keys [accept multi label-text label-class input-id on-selected data-test] :as props} input-ref] (let [opt-pick-one #(if multi % (first %)) on-files-selected (mf/use-callback (mf/deps opt-pick-one) (fn [event] (let [target (dom/get-target event)] (st/emit! (some-> target (dom/get-files) (opt-pick-one) (on-selected))) (dom/clean-value! target))))] [:* (when label-text [:label {:for input-id :class-name label-class} label-text]) [:input {:style {:display "none" :width 0} :id input-id :multiple multi :accept accept :type "file" :ref input-ref :on-change on-files-selected :data-test data-test :aria-label "uploader"}]]))