Skip to content

Commit

Permalink
fix: Icon prop on Button component uses incorrect capitalization (#92) (
Browse files Browse the repository at this point in the history
#110)

* Buttons

* Badge

* Icon

* DropdownItem

* SelectBoxItem

* ToggleItem

* Callout

* Stories

* Tests

* Fix incorrect props in tests

* Revert "Fix incorrect props in tests"

This reverts commit ee20530.

* test: fix icon param in stories

* Add icon to Toggle stories

Co-authored-by: mitrotasios <[email protected]>

Co-authored-by: curse <[email protected]>
  • Loading branch information
mitrotasios and ethndotsh authored Oct 15, 2022
1 parent d49df4c commit 98ccdc8
Show file tree
Hide file tree
Showing 18 changed files with 272 additions and 241 deletions.
25 changes: 13 additions & 12 deletions src/components/icon-elements/Badge/Badge.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,24 +21,25 @@ export interface BadgeProps {
text: string,
color?: Color,
size?: Size,
Icon?: React.ElementType,
icon?: React.ElementType,
tooltip?: string,
marginTop?: MarginTop,
}

const Badge = ({
text,
color = BaseColors.Blue,
Icon,
icon,
size = Sizes.SM,
tooltip,
marginTop = 'mt-0',
}: BadgeProps) => {
const badgeSize = isValidSize(size) ? size : Sizes.SM;
return(
<div className={ classNames( parseMarginTop(marginTop)) }>
<Tooltip content={ tooltip } className={ tooltip ? '' : 'tr-hidden' }>
<span className={ classNames(
const Icon = icon ? icon : null;
return (
<div className={classNames(parseMarginTop(marginTop))}>
<Tooltip content={tooltip} className={tooltip ? '' : 'tr-hidden'}>
<span className={classNames(
'tr-flex-shrink-0 tr-inline-flex tr-justify-center tr-items-center',
getColorVariantsFromColorThemeValue(getColorTheme(color).text).textColor,
getColorVariantsFromColorThemeValue(getColorTheme(color).lightBackground).bgColor,
Expand All @@ -48,17 +49,17 @@ const Badge = ({
badgeProportions[badgeSize].paddingTop,
badgeProportions[badgeSize].paddingBottom,
badgeProportions[badgeSize].fontSize,
) }>
{ Icon ? (
<Icon className={ classNames(
)}>
{Icon ? (
<Icon className={classNames(
spacing.twoXs.negativeMarginLeft,
spacing.xs.marginRight,
iconSizes[badgeSize].height,
iconSizes[badgeSize].width,
) }
)}
/>
) : null }
<p className="tr-whitespace-nowrap">{ text }</p>
) : null}
<p className="tr-whitespace-nowrap">{text}</p>
</span>
</Tooltip>
</div>
Expand Down
20 changes: 10 additions & 10 deletions src/components/icon-elements/Icon/Icon.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { BaseColors, Sizes, classNames, isBaseColor, isValidSize, parseMarginTop
import { Color, IconVariant, MarginTop, Size } from '../../../lib';
import { colors, iconSizes, shape, wrapperProportions } from './styles';

export const IconVariants: {[key: string]: IconVariant} = {
export const IconVariants: { [key: string]: IconVariant } = {
Simple: 'simple',
Light: 'light',
Shadow: 'shadow',
Expand All @@ -20,7 +20,7 @@ const isValidIconVariant = (iconVariant: IconVariant): boolean => {
};

export interface IconProps {
Icon: React.ElementType,
icon: React.ElementType,
variant?: IconVariant,
tooltip?: string,
size?: Size,
Expand All @@ -29,7 +29,7 @@ export interface IconProps {
}

const Icon = ({
Icon,
icon,
variant = IconVariants.Simple,
tooltip,
size = Sizes.SM,
Expand All @@ -39,12 +39,12 @@ const Icon = ({
const iconSize = isValidSize(size) ? size : Sizes.SM;
const iconVariant = isValidIconVariant(variant) ? variant : IconVariants.Simple;
const iconColors = isBaseColor(color) ? colors[iconVariant][color] : colors[iconVariant][BaseColors.Blue];

const Icon = icon;
return (
<span className={ classNames(parseMarginTop(marginTop)) }>
<Tooltip content={ tooltip } className={ tooltip ? '' : 'tr-hidden' }>
<span className={classNames(parseMarginTop(marginTop))}>
<Tooltip content={tooltip} className={tooltip ? '' : 'tr-hidden'}>
<span
className={ classNames(
className={classNames(
'tr-inline-flex tr-flex-shrink-0 tr-items-center',
iconColors.bgColor,
iconColors.textColor,
Expand All @@ -58,12 +58,12 @@ const Icon = ({
wrapperProportions[iconSize].paddingRight,
wrapperProportions[iconSize].paddingTop,
wrapperProportions[iconSize].paddingBottom,
) }
)}
>
<Icon className={ classNames(
<Icon className={classNames(
iconSizes[iconSize].height,
iconSizes[iconSize].width,
) } />
)} />
</span>
</Tooltip>
</span>
Expand Down
25 changes: 13 additions & 12 deletions src/components/input-elements/Button/Button.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import {

export interface ButtonProps {
text: string,
Icon?: React.ElementType,
icon?: React.ElementType,
iconPosition?: HorizontalPosition,
size?: Size,
color?: Color,
Expand All @@ -36,7 +36,7 @@ export interface ButtonProps {

const Button = ({
text,
Icon,
icon,
iconPosition = HorizontalPositions.Left,
handleClick,
size = Sizes.SM,
Expand All @@ -47,12 +47,13 @@ const Button = ({
const buttonColors = isBaseColor(color) ? colors[color] : colors[BaseColors.Blue];
const buttonSize = isValidSize(size) ? size : Sizes.SM;
const buttonImportance = isValidImportance(importance) ? importance : Importances.Primary;
return(
<span className={ classNames(parseMarginTop(marginTop)) }>
const Icon = icon ? icon : null;
return (
<span className={classNames(parseMarginTop(marginTop))}>
<button
type="button"
onClick={ handleClick }
className={ classNames(
onClick={handleClick}
className={classNames(
'tr-flex-shrink-0 tr-inline-flex tr-items-center tr-group',
'focus:tr-outline-none focus:tr-ring-2 focus:tr-ring-offset-2 focus:tr-ring-transparent',
borderRadius.md.all,
Expand All @@ -70,9 +71,9 @@ const Button = ({
buttonColors[buttonImportance].hoverBgColor,
buttonColors[buttonImportance].hoverBorderColor,
buttonColors[buttonImportance].textColor,
) }
)}
>
{ Icon && (iconPosition !== HorizontalPositions.Right) ? ( // ensures that icon is rendered if iconPosition is misspelled
{Icon && (iconPosition !== HorizontalPositions.Right) ? ( // ensures that icon is rendered if iconPosition is misspelled
<Icon
className={classNames(
spacing.twoXs.negativeMarginLeft,
Expand All @@ -82,11 +83,11 @@ const Button = ({
)}
aria-hidden="true"
/>
) : null }
) : null}
<p className="tr-whitespace-nowrap">
{ text }
{text}
</p>
{ Icon && (iconPosition === HorizontalPositions.Right) ? (
{Icon && (iconPosition === HorizontalPositions.Right) ? (
<Icon
className={classNames(
spacing.twoXs.negativeMarginRight,
Expand All @@ -96,7 +97,7 @@ const Button = ({
)}
aria-hidden="true"
/>
) : null }
) : null}
</button>
</span>
);
Expand Down
35 changes: 18 additions & 17 deletions src/components/input-elements/ButtonInline/ButtonInline.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,62 +17,63 @@ import { buttonProportions, iconSizes } from './styles';

export interface ButtonInlineProps {
text: string,
Icon?: React.ElementType,
icon?: React.ElementType,
iconPosition?: HorizontalPosition,
size?: Size,
color?: Color,
handleClick?: { (): void },
marginTop?: MarginTop,
}
}

const ButtonInline = ({
text,
Icon,
icon,
iconPosition = HorizontalPositions.Left,
handleClick,
size = Sizes.SM,
color = BaseColors.Blue,
marginTop = 'mt-0',
}: ButtonInlineProps) => {
const buttonSize = isValidSize(size) ? size : Sizes.SM;
return(
<span className={ classNames(parseMarginTop(marginTop)) }>
const Icon = icon ? icon : null;
return (
<span className={classNames(parseMarginTop(marginTop))}>
<button
type="button"
onClick={ handleClick }
className={ classNames(
onClick={handleClick}
className={classNames(
'tr-flex-shrink-0 tr-inline-flex tr-items-center tr-group tr-font-medium',
'focus:tr-outline-none focus:tr-ring-none',
buttonProportions[buttonSize].fontSize,
getColorVariantsFromColorThemeValue(getColorTheme(color).text).textColor,
getColorVariantsFromColorThemeValue(getColorTheme(color).darkText).hoverTextColor,
getColorVariantsFromColorThemeValue(defaultColors.transparent).bgColor,
getColorVariantsFromColorThemeValue(defaultColors.transparent).hoverBgColor,
) }
)}
>
{ Icon && (iconPosition !== HorizontalPositions.Right) ? ( // ensures that icon is rendered if iconPosition is misspelled
{Icon && (iconPosition !== HorizontalPositions.Right) ? ( // ensures that icon is rendered if iconPosition is misspelled
<Icon
className={ classNames(
className={classNames(
spacing.twoXs.negativeMarginLeft,
spacing.xs.marginRight,
iconSizes[buttonSize].height,
iconSizes[buttonSize].width,
) }
)}
aria-hidden="true"
/>
) : null }
<p className="tr-whitespace-nowrap">{ text }</p>
{ Icon && (iconPosition === HorizontalPositions.Right) ? (
) : null}
<p className="tr-whitespace-nowrap">{text}</p>
{Icon && (iconPosition === HorizontalPositions.Right) ? (
<Icon
className={ classNames(
className={classNames(
spacing.twoXs.negativeMarginRight,
spacing.xs.marginLeft,
iconSizes[buttonSize].height,
iconSizes[buttonSize].width,
) }
)}
aria-hidden="true"
/>
) : null }
) : null}
</button>
</span>
);
Expand Down
102 changes: 57 additions & 45 deletions src/components/input-elements/Dropdown/DropdownItem.tsx
Original file line number Diff line number Diff line change
@@ -1,62 +1,74 @@
import React from 'react';

import { classNames, getColorVariantsFromColorThemeValue } from 'lib/classnameUtils';
import {
classNames,
getColorVariantsFromColorThemeValue,
} from 'lib/classnameUtils';
import { defaultColors } from 'lib/colors';
import { fontSize } from 'lib/font';
import { sizing } from 'lib/sizing';
import { spacing } from 'lib/spacing';

export interface DropdownItemProps {
value: any,
text: string,
Icon?: React.ElementType,
value: any;
text: string;
icon?: React.ElementType;
privateProps?: {
isActive: boolean,
handleDropdownItemClick: (value: any) => void,
}
isActive: boolean;
handleDropdownItemClick: (value: any) => void;
};
}

const DropdownItem = ({
value,
text,
Icon,
icon,
privateProps,
}: DropdownItemProps) => (
<button
onClick={ () => privateProps!.handleDropdownItemClick(value) }
className={ classNames(
'tr-flex tr-items-center tr-justify-between tr-w-full',
spacing.twoXl.paddingLeft,
spacing.twoXl.paddingRight,
spacing.md.paddingTop,
spacing.md.paddingBottom,
fontSize.sm,
privateProps!.isActive
? classNames(
getColorVariantsFromColorThemeValue(defaultColors.lightBackground).bgColor,
getColorVariantsFromColorThemeValue(defaultColors.darkestText).textColor,
)
: classNames(
getColorVariantsFromColorThemeValue(defaultColors.lightBackground).hoverBgColor,
getColorVariantsFromColorThemeValue(defaultColors.darkText).textColor,
)
) }
>
<div className="tr-flex tr-items-center tr-truncate">
{ Icon ? (
<Icon className={ classNames(
'tr-flex-none',
sizing.lg.height,
sizing.lg.width,
spacing.lg.marginRight,
getColorVariantsFromColorThemeValue(defaultColors.lightText).textColor,
) } aria-hidden="true" />
) : null }
<p className="tr-whitespace-nowrap tr-truncate">
{ text }
</p>
</div>
</button>
);
}: DropdownItemProps) => {
const Icon = icon ? icon : null;
return (
<button
onClick={() => privateProps!.handleDropdownItemClick(value)}
className={classNames(
'tr-flex tr-items-center tr-justify-between tr-w-full',
spacing.twoXl.paddingLeft,
spacing.twoXl.paddingRight,
spacing.md.paddingTop,
spacing.md.paddingBottom,
fontSize.sm,
privateProps!.isActive
? classNames(
getColorVariantsFromColorThemeValue(defaultColors.lightBackground)
.bgColor,
getColorVariantsFromColorThemeValue(defaultColors.darkestText)
.textColor
)
: classNames(
getColorVariantsFromColorThemeValue(defaultColors.lightBackground)
.hoverBgColor,
getColorVariantsFromColorThemeValue(defaultColors.darkText)
.textColor
)
)}
>
<div className="tr-flex tr-items-center tr-truncate">
{Icon ? (
<Icon
className={classNames(
'tr-flex-none',
sizing.lg.height,
sizing.lg.width,
spacing.lg.marginRight,
getColorVariantsFromColorThemeValue(defaultColors.lightText)
.textColor
)}
aria-hidden="true"
/>
) : null}
<p className="tr-whitespace-nowrap tr-truncate">{text}</p>
</div>
</button>
);
};

export default DropdownItem;
Loading

0 comments on commit 98ccdc8

Please sign in to comment.