Newer
Older
support / ui / src / services / files / components / tailwind / UploadButton.scala
package services.files.components.tailwind

import com.raquo.laminar.api.L.{*, given}
import works.iterative.ui.components.tailwind.Component
import com.raquo.laminar.nodes.ReactiveHtmlElement
import works.iterative.ui.{*, given}
import org.scalajs.dom.FileList

class UploadButton(upload: Observer[FileList])
    extends Component[org.scalajs.dom.html.Div]:

  override def element: ReactiveHtmlElement[org.scalajs.dom.html.Div] =
    div(
      cls := "mt-4 sm:mt-0 sm:ml-16 sm:flex-none",
      label(
        cls("block w-full"),
        div(
          cls(
            "inline-flex items-center justify-center rounded-md border border-transparent bg-indigo-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 sm:w-auto"
          ), {
            import svg.*
            svg(
              cls("w-6 h-6"),
              fill := "#FFF",
              viewBox := "0 0 24 24",
              xmlns := "http://www.w3.org/2000/svg",
              path(d := "M0 0h24v24H0z", fill := "none"),
              path(d := "M9 16h6v-6h4l-7-7-7 7h4zm-4 2h14v2H5z")
            )
          },
          span(cls := "ml-2", "Přidat soubory".ui)
        ),
        input(
          cls := "cursor-pointer hidden",
          tpe := "file",
          name := "files",
          multiple := true,
          inContext(thisNode => onInput.mapTo(thisNode.ref.files) --> upload)
        )
      )
    )