Skip to content

Commit

Permalink
Merge pull request #282 from springload/feature/code-examples-in-demo…
Browse files Browse the repository at this point in the history
…-page

Add code examples to demo page
  • Loading branch information
liamjohnston authored Jul 20, 2020
2 parents 9d7e7b3 + 5248c8a commit f1db8c3
Show file tree
Hide file tree
Showing 10 changed files with 429 additions and 1,149 deletions.
52 changes: 27 additions & 25 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,43 +5,43 @@
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
size, disability, ethnicity, sex characteristics, gender identity and
expression, level of experience, education, socio-economic status, nationality,
personal appearance, race, religion, or sexual identity and orientation.

## Our Standards

Examples of behavior that contributes to creating a positive environment
include:

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Focusing on what is best for the community
- Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
- The use of sexualized language or imagery and unwelcome sexual attention or
advances
- Trolling, insulting/derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or electronic
address, without explicit permission
- Other conduct which could reasonably be considered inappropriate in a
professional setting

## Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
Project maintainers have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, or to ban temporarily or permanently any
contributor for other behaviors that they deem inappropriate, threatening,
offensive, or harmful.

## Scope

Expand All @@ -58,17 +58,19 @@ Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at [email protected]. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
obligated to maintain confidentiality with regard to the reporter of an
incident. Further details of specific enforcement policies may be posted
separately.

Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 1.4, available at
https://www.contributor-covenant.org/version/1/4/code-of-conduct.html

[homepage]: https://www.contributor-covenant.org

Expand Down
2 changes: 1 addition & 1 deletion babel.config.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module.exports = api => {
module.exports = (api) => {
api.cache(true);

const presets = [
Expand Down
113 changes: 113 additions & 0 deletions demo/src/code-examples.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
export const ExampleDefault = `import {
Accordion,
AccordionItem,
AccordionItemButton,
AccordionItemHeading,
AccordionItemPanel,
} from 'react-accessible-accordion';
<Accordion>
{items.map((item) => (
<AccordionItem key={item.uuid}>
<AccordionItemHeading>
<AccordionItemButton>
{item.heading}
</AccordionItemButton>
</AccordionItemHeading>
<AccordionItemPanel>
{item.content}
</AccordionItemPanel>
</AccordionItem>
))}
</Accordion>`;

export const ExampleAllowMultipleExpanded = `<Accordion allowMultipleExpanded>
{items.map((item) => (
<AccordionItem key={item.uuid}>
<AccordionItemHeading>
<AccordionItemButton>
{item.heading}
</AccordionItemButton>
</AccordionItemHeading>
<AccordionItemPanel>
{item.content}
</AccordionItemPanel>
</AccordionItem>
))}
</Accordion>`;

export const ExampleAllowZeroExpanded = `<Accordion allowZeroExpanded>
{items.map((item) => (
<AccordionItem key={item.uuid}>
<AccordionItemHeading>
<AccordionItemButton>
{item.heading}
</AccordionItemButton>
</AccordionItemHeading>
<AccordionItemPanel>
{item.content}
</AccordionItemPanel>
</AccordionItem>
))}
</Accordion>`;

export const ExamplePreExpanded = `<Accordion preExpanded={['a', 'c']}>
<AccordionItem uuid="a" /> // Will be expanded by default
<AccordionItem uuid="b" />
<AccordionItem uuid="c" /> // Will be expanded by default
<AccordionItem uuid="d" />
</Accordion>`;

export const ExampleOnChange = `<Accordion onChange={() => console.log('Hello world')}>
{items.map((item) => (
<AccordionItem key={item.uuid}>
<AccordionItemHeading>
<AccordionItemButton>
{item.heading}
</AccordionItemButton>
</AccordionItemHeading>
<AccordionItemPanel>
{item.content}
</AccordionItemPanel>
</AccordionItem>
))}
</Accordion>`;

export const ExampleAccordionItemState = `<Accordion>
<AccordionItem>
<AccordionItemHeading>
<AccordionItemButton>
This item is
<AccordionItemState>
{({ expanded }) => (expanded ? 'expanded' : 'collapsed')}
</AccordionItemState>
</AccordionItemButton>
</AccordionItemHeading>
<AccordionItemPanel>
<p>I am the content</p>
</AccordionItemPanel>
</AccordionItem>
</Accordion>`;

export const ExampleDangerouslySetExpanded = `<Accordion>
{items.map((item, i) => {
const isExpanded = i < 2;
return (
<AccordionItem
key={item.heading}
uuid={item.uuid}
dangerouslySetExpanded={isExpanded}
>
<AccordionItemHeading>
<AccordionItemButton>
{item.heading}
</AccordionItemButton>
</AccordionItemHeading>
<AccordionItemPanel>
{item.panel}
</AccordionItemPanel>
</AccordionItem>
);
})}
</Accordion>`;
54 changes: 54 additions & 0 deletions demo/src/components/Code.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
// tslint:disable-next-line no-implicit-dependencies no-import-side-effect
import * as React from 'react';
// tslint:disable-next-line no-implicit-dependencies no-import-side-effect
import { PrismLight as SyntaxHighlighter } from 'react-syntax-highlighter';
// tslint:disable-next-line no-implicit-dependencies no-import-side-effect no-submodule-imports
import jsx from 'react-syntax-highlighter/dist/esm/languages/prism/jsx';
// tslint:disable-next-line no-implicit-dependencies no-import-side-effect no-submodule-imports
import prism from 'react-syntax-highlighter/dist/esm/styles/prism/prism';

SyntaxHighlighter.registerLanguage('jsx', jsx);

import {
Accordion,
AccordionItem,
AccordionItemButton,
AccordionItemHeading,
AccordionItemPanel,
AccordionItemState,
} from '../../../src';

type Props = {
code: string;
};

type AccordionItemState = {
expanded: boolean;
};

const Code = ({ code }: Props) => {
return (
<Accordion allowZeroExpanded={true} className="code">
<AccordionItem>
<AccordionItemHeading>
<AccordionItemButton className="code__button">
<AccordionItemState>
{({ expanded }: AccordionItemState) =>
expanded ? 'Hide' : 'Show'
}
</AccordionItemState>{' '}
code
</AccordionItemButton>
</AccordionItemHeading>
<AccordionItemPanel className="code__panel">
{/* tslint:disable-next-line no-unsafe-any */}
<SyntaxHighlighter language="jsx" style={prism}>
{code}
</SyntaxHighlighter>
</AccordionItemPanel>
</AccordionItem>
</Accordion>
);
};

export default Code;
41 changes: 33 additions & 8 deletions demo/src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,19 @@ import {
AccordionItemState,
} from '../../src';

import Code from './components/Code';

// tslint:disable-next-line no-import-side-effect ordered-imports
import {
ExampleDefault,
ExampleAllowMultipleExpanded,
ExampleAllowZeroExpanded,
ExamplePreExpanded,
ExampleOnChange,
ExampleAccordionItemState,
ExampleDangerouslySetExpanded,
} from './code-examples';

// tslint:disable-next-line no-import-side-effect
import './main.css';

Expand All @@ -28,8 +41,8 @@ const App = (): JSX.Element => (
React Component for creating an 'Accordion' that adheres to the{' '}
<a
href="https://www.w3.org/TR/wai-aria-practices-1.1/#accordion"
target="_BLANK"
rel="noreferrer, nofollow"
target="_blank"
rel="noreferrer nofollow"
>
WAI ARIA spec
</a>{' '}
Expand All @@ -56,6 +69,8 @@ const App = (): JSX.Element => (
))}
</Accordion>

<Code code={ExampleDefault} />

<h2 className="u-margin-top">Expanding multiple items at once</h2>

<p>
Expand All @@ -77,6 +92,8 @@ const App = (): JSX.Element => (
))}
</Accordion>

<Code code={ExampleAllowMultipleExpanded} />

<h2 className="u-margin-top">Collapsing the last expanded item</h2>

<p>
Expand All @@ -98,6 +115,8 @@ const App = (): JSX.Element => (
))}
</Accordion>

<Code code={ExampleAllowZeroExpanded} />

<h2 className="u-margin-top">Pre-expanded items</h2>

<p>
Expand Down Expand Up @@ -127,6 +146,8 @@ const App = (): JSX.Element => (
))}
</Accordion>

<Code code={ExamplePreExpanded} />

<h2 className="u-margin-top">Informative onChange</h2>

<p>
Expand Down Expand Up @@ -162,6 +183,8 @@ const App = (): JSX.Element => (
))}
</Accordion>

<Code code={ExampleOnChange} />

<h2 className="u-margin-top">Accessing Item State</h2>

<p>
Expand Down Expand Up @@ -194,17 +217,18 @@ const App = (): JSX.Element => (
))}
</Accordion>

<Code code={ExampleAccordionItemState} />

<h2 className="u-margin-top">Manual state</h2>

<p>
When you use the <strong>onChange</strong> prop, you can get
feedback about which items are expanded.
When you use the <strong>dangerouslySetExpanded</strong> prop, you
can manually override whether an <strong>AccordionItem</strong> is
expanded.
</p>

<p>
In this example, we are simply logging the uuids of the expanded
items to the console. Have a click around then check your console to
see this in action.
<strong>Warning: This can impact accessibility negatively.</strong>
</p>

<Accordion>
Expand All @@ -215,7 +239,6 @@ const App = (): JSX.Element => (
<AccordionItem
key={placeholder.heading}
uuid={placeholder.uuid}
// Warning: This can impact accessibility negatively
dangerouslySetExpanded={isExpanded}
>
<AccordionItemHeading>
Expand All @@ -230,6 +253,8 @@ const App = (): JSX.Element => (
);
})}
</Accordion>

<Code code={ExampleDangerouslySetExpanded} />
</>
);

Expand Down
Loading

0 comments on commit f1db8c3

Please sign in to comment.