Add support for left and right button accessories
This commit is contained in:
parent
2534728785
commit
1baf8d3b06
7 changed files with 44 additions and 13 deletions
|
|
@ -8,7 +8,10 @@ interface Props
|
||||||
React.ButtonHTMLAttributes<HTMLButtonElement>,
|
React.ButtonHTMLAttributes<HTMLButtonElement>,
|
||||||
HTMLButtonElement
|
HTMLButtonElement
|
||||||
> {
|
> {
|
||||||
accessoryIcon?: React.ReactNode
|
leftAccessoryIcon?: React.ReactNode
|
||||||
|
leftAccessoryClassName?: string
|
||||||
|
rightAccessoryIcon?: React.ReactNode
|
||||||
|
rightAccessoryClassName?: string
|
||||||
active?: boolean
|
active?: boolean
|
||||||
blended?: boolean
|
blended?: boolean
|
||||||
contained?: boolean
|
contained?: boolean
|
||||||
|
|
@ -24,7 +27,18 @@ const defaultProps = {
|
||||||
}
|
}
|
||||||
|
|
||||||
const Button = React.forwardRef<HTMLButtonElement, Props>(function button(
|
const Button = React.forwardRef<HTMLButtonElement, Props>(function button(
|
||||||
{ accessoryIcon, active, blended, contained, buttonSize, text, ...props },
|
{
|
||||||
|
leftAccessoryIcon,
|
||||||
|
leftAccessoryClassName,
|
||||||
|
rightAccessoryIcon,
|
||||||
|
rightAccessoryClassName,
|
||||||
|
active,
|
||||||
|
blended,
|
||||||
|
contained,
|
||||||
|
buttonSize,
|
||||||
|
text,
|
||||||
|
...props
|
||||||
|
},
|
||||||
forwardedRef
|
forwardedRef
|
||||||
) {
|
) {
|
||||||
const classes = classNames(
|
const classes = classNames(
|
||||||
|
|
@ -38,8 +52,24 @@ const Button = React.forwardRef<HTMLButtonElement, Props>(function button(
|
||||||
props.className
|
props.className
|
||||||
)
|
)
|
||||||
|
|
||||||
const hasAccessory = () => {
|
const leftAccessoryClasses = classNames(leftAccessoryClassName, {
|
||||||
if (accessoryIcon) return <span className="Accessory">{accessoryIcon}</span>
|
Accessory: true,
|
||||||
|
Left: true,
|
||||||
|
})
|
||||||
|
|
||||||
|
const rightAccessoryClasses = classNames(rightAccessoryClassName, {
|
||||||
|
Accessory: true,
|
||||||
|
Right: true,
|
||||||
|
})
|
||||||
|
|
||||||
|
const hasLeftAccessory = () => {
|
||||||
|
if (leftAccessoryIcon)
|
||||||
|
return <span className={leftAccessoryClasses}>{leftAccessoryIcon}</span>
|
||||||
|
}
|
||||||
|
|
||||||
|
const hasRightAccessory = () => {
|
||||||
|
if (rightAccessoryIcon)
|
||||||
|
return <span className={rightAccessoryClasses}>{rightAccessoryIcon}</span>
|
||||||
}
|
}
|
||||||
|
|
||||||
const hasText = () => {
|
const hasText = () => {
|
||||||
|
|
@ -48,8 +78,9 @@ const Button = React.forwardRef<HTMLButtonElement, Props>(function button(
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<button {...props} className={classes} ref={forwardedRef}>
|
<button {...props} className={classes} ref={forwardedRef}>
|
||||||
{hasAccessory()}
|
{hasLeftAccessory()}
|
||||||
{hasText()}
|
{hasText()}
|
||||||
|
{hasRightAccessory()}
|
||||||
</button>
|
</button>
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -218,7 +218,7 @@ const CharacterUnit = ({
|
||||||
<ContextMenu onOpenChange={handleContextMenuOpenChange}>
|
<ContextMenu onOpenChange={handleContextMenuOpenChange}>
|
||||||
<ContextMenuTrigger asChild>
|
<ContextMenuTrigger asChild>
|
||||||
<Button
|
<Button
|
||||||
accessoryIcon={<SettingsIcon />}
|
leftAccessoryIcon={<SettingsIcon />}
|
||||||
className={buttonClasses}
|
className={buttonClasses}
|
||||||
onClick={handleButtonClicked}
|
onClick={handleButtonClicked}
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -208,7 +208,7 @@ const GridRep = (props: Props) => {
|
||||||
<a href="#">
|
<a href="#">
|
||||||
<Button
|
<Button
|
||||||
className="Save"
|
className="Save"
|
||||||
accessoryIcon={<SaveIcon className="stroke" />}
|
leftAccessoryIcon={<SaveIcon className="stroke" />}
|
||||||
active={props.favorited}
|
active={props.favorited}
|
||||||
contained={true}
|
contained={true}
|
||||||
buttonSize="small"
|
buttonSize="small"
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ const JobImage = ({
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Button
|
<Button
|
||||||
accessoryIcon={icon}
|
leftAccessoryIcon={icon}
|
||||||
className={classes}
|
className={classes}
|
||||||
onClick={handleAccessoryButtonClicked}
|
onClick={handleAccessoryButtonClicked}
|
||||||
ref={buttonRef}
|
ref={buttonRef}
|
||||||
|
|
|
||||||
|
|
@ -538,7 +538,7 @@ const PartyDetails = (props: Props) => {
|
||||||
<div className="left">
|
<div className="left">
|
||||||
{router.pathname !== '/new' ? (
|
{router.pathname !== '/new' ? (
|
||||||
<Button
|
<Button
|
||||||
accessoryIcon={<CrossIcon />}
|
leftAccessoryIcon={<CrossIcon />}
|
||||||
className="Blended medium destructive"
|
className="Blended medium destructive"
|
||||||
onClick={handleClick}
|
onClick={handleClick}
|
||||||
text={t('buttons.delete')}
|
text={t('buttons.delete')}
|
||||||
|
|
@ -550,7 +550,7 @@ const PartyDetails = (props: Props) => {
|
||||||
<div className="right">
|
<div className="right">
|
||||||
<Button text={t('buttons.cancel')} onClick={toggleDetails} />
|
<Button text={t('buttons.cancel')} onClick={toggleDetails} />
|
||||||
<Button
|
<Button
|
||||||
accessoryIcon={<CheckIcon className="Check" />}
|
leftAccessoryIcon={<CheckIcon className="Check" />}
|
||||||
text={t('buttons.save_info')}
|
text={t('buttons.save_info')}
|
||||||
onClick={updateDetails}
|
onClick={updateDetails}
|
||||||
/>
|
/>
|
||||||
|
|
@ -643,7 +643,7 @@ const PartyDetails = (props: Props) => {
|
||||||
<div className="Right">
|
<div className="Right">
|
||||||
{party.editable ? (
|
{party.editable ? (
|
||||||
<Button
|
<Button
|
||||||
accessoryIcon={<EditIcon />}
|
leftAccessoryIcon={<EditIcon />}
|
||||||
text={t('buttons.show_info')}
|
text={t('buttons.show_info')}
|
||||||
onClick={toggleDetails}
|
onClick={toggleDetails}
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -172,7 +172,7 @@ const SummonUnit = ({
|
||||||
<ContextMenu onOpenChange={handleContextMenuOpenChange}>
|
<ContextMenu onOpenChange={handleContextMenuOpenChange}>
|
||||||
<ContextMenuTrigger asChild>
|
<ContextMenuTrigger asChild>
|
||||||
<Button
|
<Button
|
||||||
accessoryIcon={<SettingsIcon />}
|
leftAccessoryIcon={<SettingsIcon />}
|
||||||
className={buttonClasses}
|
className={buttonClasses}
|
||||||
onClick={handleButtonClicked}
|
onClick={handleButtonClicked}
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -450,7 +450,7 @@ const WeaponUnit = ({
|
||||||
<ContextMenu onOpenChange={handleContextMenuOpenChange}>
|
<ContextMenu onOpenChange={handleContextMenuOpenChange}>
|
||||||
<ContextMenuTrigger asChild>
|
<ContextMenuTrigger asChild>
|
||||||
<Button
|
<Button
|
||||||
accessoryIcon={<SettingsIcon />}
|
leftAccessoryIcon={<SettingsIcon />}
|
||||||
className={buttonClasses}
|
className={buttonClasses}
|
||||||
onClick={handleButtonClicked}
|
onClick={handleButtonClicked}
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue