Skip to content

Commit

Permalink
start of live region demo
Browse files Browse the repository at this point in the history
  • Loading branch information
Marcy Sutton committed Jul 25, 2019
1 parent ba7230a commit e2f97ce
Show file tree
Hide file tree
Showing 10 changed files with 132 additions and 35 deletions.
14 changes: 14 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
"node-sass": "^4.12.0",
"prop-types": "^15.7.2",
"react": "^16.8.6",
"react-debounce-input": "^3.2.0",
"react-dom": "^16.8.6",
"react-helmet": "^5.2.0",
"sass-loader": "^7.1.0",
Expand Down
10 changes: 10 additions & 0 deletions src/components/good/live-region.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import React from "react"

const LiveRegion = ({ message, level = 'polite'}) => {
return (
<div aria-live={level} role="log" className="visually-hidden">
{message ? message : ''}
</div>
)
}
export default LiveRegion
8 changes: 0 additions & 8 deletions src/components/modal.js

This file was deleted.

29 changes: 29 additions & 0 deletions src/components/site-chrome/layout.scss
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,35 @@ section.two-col {
display: grid;
grid-template-columns: 1fr 2fr;
}
textarea {
height: 200px;
width: 320px;
}
.updateUI {
max-width: 320px;

.toast {
background-color: lightyellow;
display: flex;
opacity: 0;
padding: 0.5em;
pointer-events: none;

&.updating {
opacity: 1;
pointer-events: all;
}

.dismiss {
background-color: transparent;
border: none;
display: inline-block;
font-size: 1rem;
font-weight: bold;
margin-left: auto;
}
}
}
.skip-link {
left: 0;
position: absolute;
Expand Down
2 changes: 1 addition & 1 deletion src/components/site-chrome/navigation.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ const Navigation = () => (
</Heading>
<ul>
<li><Link to="/dropdown">Dropdown</Link></li>
<li>Modal</li>
<li><Link to="/live-region">Live Region</Link></li>
<li><Link to="/semantics">Semantic Layout</Link></li>
<li>Carousel</li>
</ul>
Expand Down
4 changes: 2 additions & 2 deletions src/pages/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import Layout from '../components/site-chrome/layout'
import SEO from '../components/site-chrome/seo'

import Dropdown from '../components/good/dropdown'
import Modal from '../components/modal'
import LiveRegion from '../components/good/live-region'
import Carousel from '../components/carousel'

const IndexPage = () => (
Expand All @@ -23,7 +23,7 @@ const IndexPage = () => (
url: '#'
}]} />
<button>Launch modal</button>
<Modal />
<LiveRegion />
<Carousel />
</div>
</Layout>
Expand Down
66 changes: 66 additions & 0 deletions src/pages/live-region.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import React, {useState} from "react"

import Layout from '../components/site-chrome/layout'
import SEO from '../components/site-chrome/seo'

import LiveRegion from "../components/good/live-region"
import {DebounceInput} from 'react-debounce-input'

const Textarea = ({handleUpdateFunc}) => (
<DebounceInput
minLength={2}
debounceTimeout={300}
forceNotifyByEnter={false}
element="textarea"
onChange={event => handleUpdateFunc(event.target.value)} />
)

const LiveRegionDemoPage = () => {
const [message, setMessage] = useState(null)
const [updating, setUpdating] = useState(false)

const handleSubmit = (event) => {
event.preventDefault()
}
const handleTextChange = (value) => {
console.log(value)
// setMessage(value)
setUpdating(true)
// setMessage('saved!')

}
const dismissToast = () => {
setUpdating(false)
}
return (
<Layout>
<SEO title="Live Regions" keywords={['javascript', 'accessibility', 'react']} />
<div>
<h2>Live Region Demo</h2>
<form onSubmit={handleSubmit}>
<label>
Enter text here<br />
<Textarea handleUpdateFunc={handleTextChange} />
</label>
<div className="updateUI">
<div className={`toast ${updating ? 'updating' : null}`}>
<span>Form saved</span>
<button
onClick={dismissToast}
className="dismiss"
type="button"
>
X
</button>
</div>
<LiveRegion level="polite" message={message} />
</div>
</form>
</div>
</Layout>
)
}

export default LiveRegionDemoPage


19 changes: 0 additions & 19 deletions src/pages/page-2.jsx

This file was deleted.

14 changes: 9 additions & 5 deletions src/slides/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -751,11 +751,13 @@ Downshift?

<Slide>

# Live Region Tips
# Live Region Gotchas & Tips

- Multiple regions
- Multiple politeness levels
- Site-level messaging APIs
- Include [multiple regions](https://github.com/dequelabs/ngA11y) for stubborn situations
- Politeness levels depend on the use case
- Site-level announcement manager APIs <span role="img" aria-label="thumbs up">👍</span>

https://github.com/AlmeroSteyn/react-aria-live

</Slide>

Expand All @@ -764,7 +766,9 @@ Downshift?
<Slide>

# Exercise
## Async action demo (saved!)
## Async action demo

http://localhost:8000/live-region

</Slide>

Expand Down

0 comments on commit e2f97ce

Please sign in to comment.