Skip to content

Commit

Permalink
feat: create page banner and add icon button black variant (#803)
Browse files Browse the repository at this point in the history
  • Loading branch information
Carla Duarte committed Aug 19, 2021
1 parent 119e919 commit 4ad4e63
Show file tree
Hide file tree
Showing 9 changed files with 338 additions and 30 deletions.
114 changes: 86 additions & 28 deletions src/IconButton/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@ notes: ''

```jsx live
() => {
const variants = ["brand", "primary", "secondary", "success", "warning", "danger", "light", "dark"];
const variants = ["brand", "primary", "secondary", "success", "warning", "danger", "light", "dark", "black"];
return (
<div className="d-flex">
{variants.map((variant) => (
<IconButton src={Close} iconAs={Icon} alt='Close' onClick={() => {}} variant={variant} className="mr-2" />
<IconButton src={Close} iconAs={Icon} alt="Close" onClick={() => {}} variant={variant} className="mr-2" />
))}
</div>
);
Expand All @@ -34,14 +34,15 @@ notes: ''

return (
<div className="d-flex">
<IconButton className="mr-2" icon={icon} alt='Close' onClick={() => {}} variant="brand" />
<IconButton className="mr-2" icon={icon} alt='Close' onClick={() => {}} variant="primary" />
<IconButton className="mr-2" icon={icon} alt='Close' onClick={() => {}} variant="secondary" />
<IconButton className="mr-2" icon={icon} alt='Close' onClick={() => {}} variant="success" />
<IconButton className="mr-2" icon={icon} alt='Close' onClick={() => {}} variant="warning" />
<IconButton className="mr-2" icon={icon} alt='Close' onClick={() => {}} variant="danger" />
<IconButton className="mr-2" icon={icon} alt='Close' onClick={() => {}} variant="light" />
<IconButton className="mr-2" icon={icon} alt='Close' onClick={() => {}} variant="dark" />
<IconButton className="mr-2" icon={icon} alt="Close" onClick={() => {}} variant="brand" />
<IconButton className="mr-2" icon={icon} alt="Close" onClick={() => {}} variant="primary" />
<IconButton className="mr-2" icon={icon} alt="Close" onClick={() => {}} variant="secondary" />
<IconButton className="mr-2" icon={icon} alt="Close" onClick={() => {}} variant="success" />
<IconButton className="mr-2" icon={icon} alt="Close" onClick={() => {}} variant="warning" />
<IconButton className="mr-2" icon={icon} alt="Close" onClick={() => {}} variant="danger" />
<IconButton className="mr-2" icon={icon} alt="Close" onClick={() => {}} variant="light" />
<IconButton className="mr-2" icon={icon} alt="Close" onClick={() => {}} variant="dark" />
<IconButton className="mr-2" icon={icon} alt="Close" onClick={() => {}} variant="black" />
</div>
);
}
Expand All @@ -52,24 +53,81 @@ notes: ''
```jsx live
() => {
const icon = FontAwesome.faBars;
const variants = ["brand", "primary", "secondary", "success", "warning", "danger", "light", "dark"];

return (
<div className="d-flex">
{variants.map((variant) => {
return (
<div class={`bg-${variant} p-1`}>
<IconButton
key={variant}
icon={icon}
alt='Menu'
onClick={() => console.log("You clicked the menu button")}
variant={variant}
invertColors
/>
</div>
);
})}
<div className="p-1 bg-brand">
<IconButton
icon={icon}
alt="Menu"
onClick={() => console.log("You clicked the menu button")}
variant="brand"
invertColors
/>
</div>
<div className="p-1 bg-primary">
<IconButton
icon={icon}
alt="Menu"
onClick={() => console.log("You clicked the menu button")}
variant="primary"
invertColors
/>
</div>
<div className="p-1 bg-secondary">
<IconButton
icon={icon}
alt="Menu"
onClick={() => console.log("You clicked the menu button")}
variant="secondary"
invertColors
/>
</div>
<div className="p-1 bg-success">
<IconButton
icon={icon}
alt="Menu"
onClick={() => console.log("You clicked the menu button")}
variant="success"
invertColors
/>
</div>
<div className="p-1 bg-warning">
<IconButton
icon={icon}
alt="Menu"
onClick={() => console.log("You clicked the menu button")}
variant="warning"
invertColors
/>
</div>
<div className="p-1 bg-danger">
<IconButton
icon={icon}
alt="Menu"
onClick={() => console.log("You clicked the menu button")}
variant="danger"
invertColors
/>
</div>
<div className="p-1 bg-light">
<IconButton
icon={icon}
alt="Menu"
onClick={() => console.log("You clicked the menu button")}
variant="light"
invertColors
/>
</div>
<div className="p-1" style={{ background: "black" }}>
<IconButton
icon={icon}
alt="Menu"
onClick={() => console.log("You clicked the menu button")}
variant="black"
invertColors
/>
</div>
</div>
);
}
Expand All @@ -85,7 +143,7 @@ notes: ''
Small
<IconButton
icon={FontAwesome.faBars}
alt='Menu'
alt="Menu"
onClick={() => {}}
variant="primary"
size="sm"
Expand All @@ -95,7 +153,7 @@ notes: ''
Inline:
<IconButton
icon={FontAwesome.faBars}
alt='Menu'
alt="Menu"
onClick={() => {}}
variant="primary"
size="inline"
Expand All @@ -106,7 +164,7 @@ notes: ''
For example, applying className="x-small" will make the Icon Button look like this:
<IconButton
icon={FontAwesome.faSmile}
alt='Smile'
alt="Smile"
onClick={() => {}}
variant="primary"
size="inline"
Expand Down
3 changes: 2 additions & 1 deletion src/IconButton/_IconButton.scss
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ $icon-button-colors: (
"warning": $warning,
"danger": $danger,
"light": $light,
"dark": $dark
"dark": $dark,
"black": $black,
) !default;
$btn-icon-diameter-md: 2.75rem !default;
$btn-icon-diameter-sm: 2.25rem !default;
Expand Down
2 changes: 1 addition & 1 deletion src/IconButton/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ IconButton.propTypes = {
/** Click handler for the button */
onClick: PropTypes.func.isRequired,
/** Type of button (uses Bootstrap options) */
variant: PropTypes.oneOf(['primary', 'secondary', 'success', 'warning', 'danger', 'light', 'dark']),
variant: PropTypes.oneOf(['primary', 'secondary', 'success', 'warning', 'danger', 'light', 'dark', 'black']),
size: PropTypes.oneOf(['sm', 'md', 'inline']),
};

Expand Down
53 changes: 53 additions & 0 deletions src/PageBanner/PageBanner.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
.pgn__pageBanner-component {
width: 100%;
min-height: 36px;
display: flex;
flex-wrap: nowrap;
font-size: $x-small-font-size;

@include media-breakpoint-up(md) {
font-size: $small-font-size;
}
}

.pgn__pageBanner__dark {
background-color: $dark-500;
color: white;
}

.pgn__pageBanner__light {
background-color: $light-400;
color: black;
}

.pgn__pageBanner__accentA {
background-color: $accent-a;
color: black;
}

.pgn__pageBanner__warning {
background-color: $warning-100;
color: black;
}

.pgn__pageBanner-content {
display: flex;
flex-grow: 1;
justify-content: center;
align-items: center;
padding: map_get($spacers, 2) map_get($spacers, 2.5);
text-align: center;
}

.pgn__pageBanner-dismissButtonContainer {
min-width: 32px;
min-height: 32px;
display: flex;
align-items: center;
align-self: center;

@include media-breakpoint-up(md) {
min-width: 36px;
min-height: 36px;
}
}
50 changes: 50 additions & 0 deletions src/PageBanner/PageBanner.test.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import React from 'react';
import { mount } from 'enzyme';

import PageBanner from './index';

describe('<PageBanner />', () => {
describe('correct rendering', () => {
it('renders with correct class for default variant (accentA)', () => {
const wrapper = mount(<PageBanner />);
const pageBanner = wrapper.find('.pgn__pageBanner-component');
expect(pageBanner.hasClass('pgn__pageBanner__accentA')).toEqual(true);
});
it('renders with correct class for variant warning', () => {
const wrapper = mount(<PageBanner variant="warning" />);
const pageBanner = wrapper.find('.pgn__pageBanner-component');
expect(pageBanner.hasClass('pgn__pageBanner__warning')).toEqual(true);
});
it('renders with correct class for variant dark', () => {
const wrapper = mount(<PageBanner variant="dark" />);
const pageBanner = wrapper.find('.pgn__pageBanner-component');
expect(pageBanner.hasClass('pgn__pageBanner__dark')).toEqual(true);
});
it('renders with correct class for variant light', () => {
const wrapper = mount(<PageBanner variant="light" />);
const pageBanner = wrapper.find('.pgn__pageBanner-component');
expect(pageBanner.hasClass('pgn__pageBanner__light')).toEqual(true);
});
it('does not render page banner when show is false', () => {
const wrapper = mount(<PageBanner show={false} />);
const pageBanner = wrapper.find('.pgn__pageBanner-component');
expect(pageBanner).toHaveLength(0);
});
it('passes the alt text to the dismiss button aria-label', () => {
const wrapper = mount(<PageBanner dismissible dismissAltText="Test dismiss alt text" onDismiss={() => {}} />);
const dismissButton = wrapper.find('.pgn__pageBanner-dismissButtonContainer button.btn-icon');
expect(dismissButton.prop('aria-label')).toEqual('Test dismiss alt text');
});
});

describe('onDismiss', () => {
it('performs the onDismiss action on click', () => {
const spy = jest.fn();
const wrapper = mount(<PageBanner dismissible onDismiss={spy} />);
expect(spy).toHaveBeenCalledTimes(0);
const dismissButton = wrapper.find('.pgn__pageBanner-dismissButtonContainer button.btn-icon');
dismissButton.simulate('click');
expect(spy).toHaveBeenCalledTimes(1);
});
});
});
70 changes: 70 additions & 0 deletions src/PageBanner/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
---
title: 'Page Banner'
type: 'component'
components:
- Page Banner
categories:
- Status & metadata
status: 'New'
designStatus: 'Complete'
devStatus: 'In Progress'
notes: |
---

### Basic Usage

```jsx live

() => {
const [show, setShow] = useState(true);
return (
<>
<PageBanner
show={show}
dismissible
onDismiss={() => {setShow(false)}}
>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.
</PageBanner>
{!show && (<Button onClick={() => setShow(true)}>Show Page Banner</Button>)}
</>
)
}
```

### Variants

```jsx live

() => {
const [showLightVariant, setShowLightVariant] = useState(true);
const [showDarkVariant, setShowDarkVariant] = useState(true);
return (
<>
<PageBanner
show={showLightVariant}
dismissible
onDismiss={() => setShowLightVariant(false)}
variant="light"
>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.
</PageBanner>
{!showLightVariant && (<Button className="my-2 mr-2" onClick={() => setShowLightVariant(true)}>Show light variant</Button>)}
<PageBanner
show={showDarkVariant}
dismissible
onDismiss={() => setShowDarkVariant(false)}
variant="dark"
>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.
</PageBanner>
{!showDarkVariant && (<Button className="my-2" onClick={() => setShowDarkVariant(true)}>Show dark variant</Button>)}
<PageBanner
variant="warning"
>
<Icon src={WarningFilled} className="mr-2" /> We will no longer support Internet Explorer 11.
</PageBanner>
</>
)
}
```
Loading

0 comments on commit 4ad4e63

Please sign in to comment.