Skip to content
This repository has been archived by the owner on Feb 10, 2023. It is now read-only.

Commit

Permalink
Merge pull request #94 from rpiaggio/components
Browse files Browse the repository at this point in the history
Add Message family components. Specify type for some events. Fixes.
  • Loading branch information
rpiaggio authored Mar 5, 2020
2 parents 04dfcf7 + 0b70641 commit 4fd7dfd
Show file tree
Hide file tree
Showing 12 changed files with 726 additions and 26 deletions.
12 changes: 6 additions & 6 deletions facade/src/main/scala/react/semanticui/addons/radio/Radio.scala
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@ final case class Radio(
indeterminate: js.UndefOr[Boolean] = js.undefined,
label: js.UndefOr[VdomNode] = js.undefined,
name: js.UndefOr[String] = js.undefined,
onChangeE: js.UndefOr[Checkbox.Event] = js.undefined,
onChangeE: js.UndefOr[Radio.Event] = js.undefined,
onChange: js.UndefOr[Callback] = js.undefined,
onClickE: js.UndefOr[Checkbox.Event] = js.undefined,
onClickE: js.UndefOr[Radio.Event] = js.undefined,
onClick: js.UndefOr[Callback] = js.undefined,
onMouseDownE: js.UndefOr[Checkbox.Event] = js.undefined,
onMouseDownE: js.UndefOr[Radio.Event] = js.undefined,
onMouseDown: js.UndefOr[Callback] = js.undefined,
onMouseUpE: js.UndefOr[Checkbox.Event] = js.undefined,
onMouseUpE: js.UndefOr[Radio.Event] = js.undefined,
onMouseUp: js.UndefOr[Callback] = js.undefined,
radio: js.UndefOr[Boolean] = js.undefined,
readOnly: js.UndefOr[Boolean] = js.undefined,
Expand All @@ -45,8 +45,8 @@ final case class Radio(
}

object Radio {
type Event = (ReactMouseEvent, js.Object) => Callback
private type RawEvent = js.Function2[ReactMouseEvent, js.Object, Unit]
type Event = (ReactMouseEvent, RadioProps) => Callback
private type RawEvent = js.Function2[ReactMouseEvent, RadioProps, Unit]

@js.native
@JSImport("semantic-ui-react", "Radio")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
package react.semanticui.collections.message

import scala.scalajs.js
import scala.scalajs.js.|
import js.annotation._
import japgolly.scalajs.react._
import japgolly.scalajs.react.vdom.VdomNode
import japgolly.scalajs.react.raw.React
import react.common.style._
import react.common._
import react.semanticui._
import react.semanticui.{ raw => suiraw }
import react.semanticui.elements.icon.Icon.IconProps
import react.semanticui.elements.icon.Icon

final case class Message(
as: js.UndefOr[AsC] = js.undefined,
attached: js.UndefOr[MessageAttached] = js.undefined,
child: js.UndefOr[VdomNode] = js.undefined,
className: js.UndefOr[String] = js.undefined,
clazz: js.UndefOr[Css] = js.undefined,
color: js.UndefOr[SemanticColor] = js.undefined,
compact: js.UndefOr[Boolean] = js.undefined,
content: js.UndefOr[VdomNode | MessageContent.MessageContentProps] = js.undefined,
error: js.UndefOr[Boolean] = js.undefined,
floating: js.UndefOr[Boolean] = js.undefined,
header: js.UndefOr[VdomNode | MessageHeader.MessageHeaderProps] = js.undefined,
hidden: js.UndefOr[Boolean] = js.undefined,
icon: js.UndefOr[Icon] = js.undefined,
info: js.UndefOr[Boolean] = js.undefined,
list: js.UndefOr[Seq[VdomNode] | MessageList.MessageListProps] = js.undefined,
negative: js.UndefOr[Boolean] = js.undefined,
onDismissE: js.UndefOr[Message.OnDismiss] = js.undefined,
onDismiss: js.UndefOr[Callback] = js.undefined,
positive: js.UndefOr[Boolean] = js.undefined,
size: js.UndefOr[MessageSize] = js.undefined,
success: js.UndefOr[Boolean] = js.undefined,
visible: js.UndefOr[Boolean] = js.undefined,
warning: js.UndefOr[Boolean] = js.undefined,
override val children: CtorType.ChildrenArgs = Seq.empty
) extends GenericComponentPC[Message.MessageProps] {
override def cprops = Message.props(this)
@inline def renderWith =
Message.component(Message.props(this))
override def withChildren(children: CtorType.ChildrenArgs) =
copy(children = children)
}

object Message {
type OnDismiss = (ReactEvent, MessageProps) => Callback

@js.native
@JSImport("semantic-ui-react", "Message")
object RawComponent extends js.Object

@js.native
trait MessageProps extends js.Object {
@JSBracketAccess
def apply(key: String): js.Any = js.native

@JSBracketAccess
def update(key: String, v: js.Any): Unit = js.native

/** An element type to render as (string or function). */
var as: js.UndefOr[AsT] = js.undefined

/** A message can be formatted to attach itself to other content. */
var attached: js.UndefOr[Boolean | String] = js.undefined

/** Primary content. */
var children: js.UndefOr[React.Node] = js.undefined

/** Additional classes. */
var className: js.UndefOr[String] = js.undefined

/** A message can be formatted to be different colors. */
var color: js.UndefOr[suiraw.SemanticCOLORS] = js.undefined

/** A message can only take up the width of its content. */
var compact: js.UndefOr[Boolean] = js.undefined

/** Shorthand for primary content. */
var content: js.UndefOr[suiraw.SemanticShorthandItem[MessageContent.MessageContentProps]] =
js.undefined

/** A message may be formatted to display a negative message. Same as `negative`. */
var error: js.UndefOr[Boolean] = js.undefined

/** A message can float above content that it is related to. */
var floating: js.UndefOr[Boolean] = js.undefined

/** Shorthand for MessageHeader. */
var header: js.UndefOr[suiraw.SemanticShorthandItem[MessageHeader.MessageHeaderProps]] =
js.undefined

/** A message can be hidden. */
var hidden: js.UndefOr[Boolean] = js.undefined

/** Add an icon by icon name or pass an <Icon /.> */
var icon: js.UndefOr[suiraw.SemanticShorthandItem[IconProps]] = js.undefined

/** A message may be formatted to display information. */
var info: js.UndefOr[Boolean] = js.undefined

/** Array shorthand items for the MessageList. Mutually exclusive with children. */
var list: js.UndefOr[suiraw.SemanticShorthandOrArray[MessageList.MessageListProps]] =
js.undefined

/** A message may be formatted to display a negative message. Same as `error`. */
var negative: js.UndefOr[Boolean] = js.undefined

/**
* A message that the user can choose to hide.
* Called when the user clicks the "x" icon. This also adds the "x" icon.
*
* @param {SyntheticEvent} event - React's original SyntheticEvent.
* @param {object} data - All props.
*/
var onDismiss: js.UndefOr[js.Function2[ReactEvent, MessageProps, Unit]] = js.undefined

/** A message may be formatted to display a positive message. Same as `success`. */
var positive: js.UndefOr[Boolean] = js.undefined

/** A message can have different sizes. */
var size: js.UndefOr[suiraw.SemanticSIZES] = js.native

/** A message may be formatted to display a positive message. Same as `positive`. */
var success: js.UndefOr[Boolean] = js.undefined

/** A message can be set to visible to force itself to be shown. */
var visible: js.UndefOr[Boolean] = js.undefined

/** A message may be formatted to display warning messages. */
var warning: js.UndefOr[Boolean] = js.undefined
}

def props(q: Message): MessageProps =
rawprops(
q.as,
q.attached,
q.child,
q.className,
q.clazz,
q.color,
q.compact,
q.content,
q.error,
q.floating,
q.header,
q.hidden,
q.icon,
q.info,
q.list,
q.negative,
q.onDismissE,
q.onDismiss,
q.positive,
q.size,
q.success,
q.visible,
q.warning
)

def rawprops(
as: js.UndefOr[AsC] = js.undefined,
attached: js.UndefOr[MessageAttached] = js.undefined,
children: js.UndefOr[VdomNode] = js.undefined,
className: js.UndefOr[String] = js.undefined,
clazz: js.UndefOr[Css] = js.undefined,
color: js.UndefOr[SemanticColor] = js.undefined,
compact: js.UndefOr[Boolean] = js.undefined,
content: js.UndefOr[VdomNode | MessageContent.MessageContentProps] = js.undefined,
error: js.UndefOr[Boolean] = js.undefined,
floating: js.UndefOr[Boolean] = js.undefined,
header: js.UndefOr[VdomNode | MessageHeader.MessageHeaderProps] = js.undefined,
hidden: js.UndefOr[Boolean] = js.undefined,
icon: js.UndefOr[Icon] = js.undefined,
info: js.UndefOr[Boolean] = js.undefined,
list: js.UndefOr[Seq[VdomNode] | MessageList.MessageListProps] = js.undefined,
negative: js.UndefOr[Boolean] = js.undefined,
onDismissE: js.UndefOr[Message.OnDismiss] = js.undefined,
onDismiss: js.UndefOr[Callback] = js.undefined,
positive: js.UndefOr[Boolean] = js.undefined,
size: js.UndefOr[MessageSize] = js.undefined,
success: js.UndefOr[Boolean] = js.undefined,
visible: js.UndefOr[Boolean] = js.undefined,
warning: js.UndefOr[Boolean] = js.undefined
): MessageProps = {
val p = (new js.Object).asInstanceOf[MessageProps]
p.as = as.toJs
p.attached = attached.toJs
p.children = children.toJs
p.className = (className, clazz).toJs
p.color = color.toJs
p.compact = compact
p.content = content.toRaw
p.error = error
p.floating = floating
p.header = header.toRaw
p.hidden = hidden
p.icon = icon.map(_.props)
p.info = info
p.list = list.toRaw
p.negative = negative
p.onDismiss = (onDismissE, onDismiss).toJs
p.positive = positive
p.size = size.toJs
p.visible = visible
p.warning = warning
p
}

private val component =
JsComponent[MessageProps, Children.Varargs, Null](RawComponent)

def apply(content: VdomNode*): Message =
new Message(children = content)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package react.semanticui.collections.message

import scala.scalajs.js
import scala.scalajs.js.|
import js.annotation._
import japgolly.scalajs.react._
import japgolly.scalajs.react.vdom.VdomNode
import japgolly.scalajs.react.raw.React
import react.common._
import react.semanticui._
import react.semanticui.{ raw => suiraw }

final case class MessageContent(
as: js.UndefOr[AsC] = js.undefined,
child: js.UndefOr[VdomNode] = js.undefined,
className: js.UndefOr[String] = js.undefined,
clazz: js.UndefOr[Css] = js.undefined,
content: js.UndefOr[VdomNode | MessageContent.MessageContentProps] = js.undefined,
override val children: CtorType.ChildrenArgs = Seq.empty
) extends GenericComponentPC[MessageContent.MessageContentProps] {
override def cprops = MessageContent.props(this)
@inline def renderWith =
MessageContent.component(MessageContent.props(this))
override def withChildren(children: CtorType.ChildrenArgs) =
copy(children = children)
}

object MessageContent {
@js.native
@JSImport("semantic-ui-react", "MessageContent")
object RawComponent extends js.Function1[js.Any, js.Any] {
def apply(i: js.Any): js.Any = js.native
}

@js.native
trait MessageContentProps extends js.Object {
@JSBracketAccess
def apply(key: String): js.Any = js.native

@JSBracketAccess
def update(key: String, v: js.Any): Unit = js.native

/** An element type to render as (string or function). */
var as: js.UndefOr[AsT] = js.undefined

/** Primary content. */
var children: js.UndefOr[React.Node] = js.undefined

/** Additional classes. */
var className: js.UndefOr[String] = js.undefined

/** Shorthand for primary content. */
var content: js.UndefOr[suiraw.SemanticShorthandItem[MessageContent.MessageContentProps]] =
js.undefined
}

def props(q: MessageContent): MessageContentProps =
rawprops(
q.as,
q.child,
q.className,
q.clazz,
q.content
)

def rawprops(
as: js.UndefOr[AsC] = js.undefined,
children: js.UndefOr[VdomNode] = js.undefined,
className: js.UndefOr[String] = js.undefined,
clazz: js.UndefOr[Css] = js.undefined,
content: js.UndefOr[VdomNode | MessageContent.MessageContentProps] = js.undefined
): MessageContentProps = {
val p = (new js.Object).asInstanceOf[MessageContentProps]
p.as = as.toJs
p.children = children.toJs
p.className = (className, clazz).toJs
p.content = content.toRaw
p
}

private val component =
JsComponent[MessageContentProps, Children.Varargs, Null](RawComponent)

def apply(content: VdomNode*): MessageContent =
new MessageContent(children = content)
}
Loading

0 comments on commit 4fd7dfd

Please sign in to comment.