diff --git a/packages/react-core/src/components/ContextSelector/examples/ContextSelector.md b/packages/react-core/src/components/ContextSelector/examples/ContextSelector.md index 7f29405ca8c..37a0a65e433 100644 --- a/packages/react-core/src/components/ContextSelector/examples/ContextSelector.md +++ b/packages/react-core/src/components/ContextSelector/examples/ContextSelector.md @@ -10,291 +10,15 @@ ouia: true ### Basic -```js -import React from 'react'; -import { Button, ContextSelector, ContextSelectorItem, ContextSelectorFooter } from '@patternfly/react-core'; - -class SimpleContextSelector extends React.Component { - constructor(props) { - super(props); - this.items = [ - { - text: 'Link', - href: '#' - }, - 'Action', - { - text: 'Disabled link', - href: '#', - isDisabled: true - }, - { - text: 'Disabled action', - isDisabled: true - }, - 'My project', - 'OpenShift cluster', - 'Production Ansible', - 'AWS', - 'Azure', - 'My project 2', - 'OpenShift cluster ', - 'Production Ansible 2 ', - 'AWS 2', - 'Azure 2' - ]; - - this.state = { - isOpen: false, - selected: this.items[0].text || this.items[0], - searchValue: '', - filteredItems: this.items - }; - - this.onToggle = (event, isOpen) => { - this.setState({ - isOpen - }); - }; - - this.onSelect = (event, value) => { - this.setState({ - selected: value, - isOpen: !this.state.isOpen - }); - }; - - this.onSearchInputChange = value => { - this.setState({ searchValue: value }); - }; - - this.onSearchButtonClick = event => { - const filtered = - this.state.searchValue === '' - ? this.items - : this.items.filter(item => { - const str = item.text ? item.text : item; - return str.toLowerCase().indexOf(this.state.searchValue.toLowerCase()) !== -1; - }); - - this.setState({ filteredItems: filtered || [] }); - }; - } - - render() { - const { isOpen, selected, searchValue, filteredItems } = this.state; - return ( - - {filteredItems.map((item, index) => { - const { text = null, href = null, isDisabled } = item; - return ({text || item}); - })} - - ); - } -} +```ts file="./ContextSelectorBasic.tsx" ``` ### Plain with text -```ts -import React from 'react'; -import { ContextSelector, ContextSelectorItem } from '@patternfly/react-core'; - -interface Item { - text: string; - href?: string; - isDisabled?: boolean; -} - -const items = [ - { - text: 'Link', - href: '#' - }, - 'Action', - { - text: 'Disabled link', - href: '#', - isDisabled: true - }, - { - text: 'Disabled action', - isDisabled: true - }, - 'My Project', - 'OpenShift Cluster', - 'Production Ansible', - 'AWS', - 'Azure', - 'My Project 2', - 'OpenShift Cluster ', - 'Production Ansible 2 ', - 'AWS 2', - 'Azure 2' -]; - -const PlainTextContextSelector: React.FunctionComponent = () => { - const firstItemText = typeof items[0] === 'string' ? items[0] : items[0].text; - const [isOpen, setOpen] = React.useState(false); - const [selected, setSelected] = React.useState(firstItemText); - const [searchValue, setSearchValue] = React.useState(''); - const [filteredItems, setFilteredItems] = React.useState(items); - - function onToggle(event: any, isOpen: boolean) { - setOpen(isOpen); - }; - - function onSelect(event: any, value: string) { - setSelected(value); - setOpen(!isOpen); - }; - - function onSearchInputChange(value: string) { - setSearchValue(value); - }; - - function onSearchButtonClick(event: React.SyntheticEvent) { - const filtered = - searchValue === '' - ? items - : items.filter(item => { - const str = (typeof item === 'string') ? item : item.text; - return str.toLowerCase().indexOf(searchValue.toLowerCase()) !== -1; - }); - - setFilteredItems(filtered || []); - }; - return ( - - {filteredItems.map((item, index) => { - const [text, href = null, isDisabled = false] = (typeof item === 'string') - ? [item, null, false] - : [item.text, item.href, item.isDisabled]; - return {text}; - })} - - ); -}; +```ts file="./ContextSelectorPlainText.tsx" ``` ### With footer -```js -import React from 'react'; -import { Button, ContextSelector, ContextSelectorItem, ContextSelectorFooter } from '@patternfly/react-core'; - -class FooterContextSelector extends React.Component { - constructor(props) { - super(props); - this.items = [ - { - text: 'Link', - href: '#' - }, - 'Action', - { - text: 'Disabled link', - href: '#', - isDisabled: true - }, - { - text: 'Disabled action', - isDisabled: true - }, - 'My project', - 'OpenShift cluster', - 'Production Ansible', - 'AWS', - 'Azure', - 'My project 2', - 'OpenShift cluster ', - 'Production Ansible 2 ', - 'AWS 2', - 'Azure 2' - ]; - - this.state = { - isOpen: false, - selected: this.items[0].text || this.items[0], - searchValue: '', - filteredItems: this.items - }; - - this.onToggle = (event, isOpen) => { - this.setState({ - isOpen - }); - }; - - this.onSelect = (event, value) => { - this.setState({ - selected: value, - isOpen: !this.state.isOpen - }); - }; - - this.onSearchInputChange = value => { - this.setState({ searchValue: value }); - }; - - this.onSearchButtonClick = event => { - const filtered = - this.state.searchValue === '' - ? this.items - : this.items.filter(item => { - const str = item.text ? item.text : item; - return str.toLowerCase().indexOf(this.state.searchValue.toLowerCase()) !== -1; - }); - - this.setState({ filteredItems: filtered || [] }); - }; - } - - render() { - const { isOpen, selected, searchValue, filteredItems } = this.state; - return ( - - - - } - > - {filteredItems.map((item, index) => { - const { text = null, href = null, isDisabled } = item; - return ({text || item}); - })} - - ); - } -} +```ts file="./ContextSelectorWithFooter.tsx" ``` diff --git a/packages/react-core/src/components/ContextSelector/examples/ContextSelectorBasic.tsx b/packages/react-core/src/components/ContextSelector/examples/ContextSelectorBasic.tsx new file mode 100644 index 00000000000..8f5cc91db24 --- /dev/null +++ b/packages/react-core/src/components/ContextSelector/examples/ContextSelectorBasic.tsx @@ -0,0 +1,84 @@ +import React from 'react'; +import { ContextSelector, ContextSelectorItem } from '@patternfly/react-core'; + +export const ContextSelectorBasic: React.FunctionComponent = () => { + const items = [ + { + text: 'Link', + href: '#' + }, + 'Action', + { + text: 'Disabled link', + href: '#', + isDisabled: true + }, + { + text: 'Disabled action', + isDisabled: true + }, + 'My project', + 'OpenShift cluster', + 'Production Ansible', + 'AWS', + 'Azure', + 'My project 2', + 'OpenShift cluster ', + 'Production Ansible 2 ', + 'AWS 2', + 'Azure 2' + ]; + + const firstItemText = typeof items[0] === 'string' ? items[0] : items[0].text; + const [isOpen, setOpen] = React.useState(false); + const [selected, setSelected] = React.useState(firstItemText); + const [searchValue, setSearchValue] = React.useState(''); + const [filteredItems, setFilteredItems] = React.useState(items); + + const onToggle = (event: any, isOpen: boolean) => { + setOpen(isOpen); + }; + + const onSelect = (event: any, value: React.ReactNode) => { + setSelected(value as string); + setOpen(!isOpen); + }; + + const onSearchInputChange = (value: string) => { + setSearchValue(value); + }; + + const onSearchButtonClick = (_event: React.SyntheticEvent) => { + const filtered = + searchValue === '' + ? items + : items.filter(item => { + const str = typeof item === 'string' ? item : item.text; + return str.toLowerCase().indexOf(searchValue.toLowerCase()) !== -1; + }); + + setFilteredItems(filtered || []); + }; + return ( + + {filteredItems.map((item, index) => { + const [text = null, href = null, isDisabled] = + typeof item === 'string' ? [item, null, false] : [item.text, item.href, item.isDisabled]; + return ( + + {text || item} + + ); + })} + + ); +}; diff --git a/packages/react-core/src/components/ContextSelector/examples/ContextSelectorPlainText.tsx b/packages/react-core/src/components/ContextSelector/examples/ContextSelectorPlainText.tsx new file mode 100644 index 00000000000..2a626280d19 --- /dev/null +++ b/packages/react-core/src/components/ContextSelector/examples/ContextSelectorPlainText.tsx @@ -0,0 +1,85 @@ +import React from 'react'; +import { ContextSelector, ContextSelectorItem } from '@patternfly/react-core'; + +const items = [ + { + text: 'Link', + href: '#' + }, + 'Action', + { + text: 'Disabled link', + href: '#', + isDisabled: true + }, + { + text: 'Disabled action', + isDisabled: true + }, + 'My Project', + 'OpenShift Cluster', + 'Production Ansible', + 'AWS', + 'Azure', + 'My Project 2', + 'OpenShift Cluster ', + 'Production Ansible 2 ', + 'AWS 2', + 'Azure 2' +]; + +export const ContextSelectorPlainText: React.FunctionComponent = () => { + const firstItemText = typeof items[0] === 'string' ? items[0] : items[0].text; + const [isOpen, setOpen] = React.useState(false); + const [selected, setSelected] = React.useState(firstItemText); + const [searchValue, setSearchValue] = React.useState(''); + const [filteredItems, setFilteredItems] = React.useState(items); + const onToggle = (event: any, isOpen: boolean) => { + setOpen(isOpen); + }; + + const onSelect = (event: any, value: React.ReactNode) => { + setSelected(value as string); + setOpen(!isOpen); + }; + + const onSearchInputChange = (value: string) => { + setSearchValue(value); + }; + + const onSearchButtonClick = (_event: React.SyntheticEvent) => { + const filtered = + searchValue === '' + ? items + : items.filter(item => { + const str = typeof item === 'string' ? item : item.text; + return str.toLowerCase().indexOf(searchValue.toLowerCase()) !== -1; + }); + + setFilteredItems(filtered || []); + }; + return ( + + {filteredItems.map((item, index) => { + const [text, href = null, isDisabled = false] = + typeof item === 'string' ? [item, null, false] : [item.text, item.href, item.isDisabled]; + return ( + + {text} + + ); + })} + + ); +}; diff --git a/packages/react-core/src/components/ContextSelector/examples/ContextSelectorWithFooter.tsx b/packages/react-core/src/components/ContextSelector/examples/ContextSelectorWithFooter.tsx new file mode 100644 index 00000000000..422f97d893d --- /dev/null +++ b/packages/react-core/src/components/ContextSelector/examples/ContextSelectorWithFooter.tsx @@ -0,0 +1,91 @@ +import React from 'react'; +import { Button, ContextSelector, ContextSelectorItem, ContextSelectorFooter } from '@patternfly/react-core'; + +export const ContextSelectorWithFooter: React.FunctionComponent = () => { + const items = [ + { + text: 'Link', + href: '#' + }, + 'Action', + { + text: 'Disabled link', + href: '#', + isDisabled: true + }, + { + text: 'Disabled action', + isDisabled: true + }, + 'My project', + 'OpenShift cluster', + 'Production Ansible', + 'AWS', + 'Azure', + 'My project 2', + 'OpenShift cluster ', + 'Production Ansible 2 ', + 'AWS 2', + 'Azure 2' + ]; + const firstItemText = typeof items[0] === 'string' ? items[0] : items[0].text; + const [isOpen, setOpen] = React.useState(false); + const [selected, setSelected] = React.useState(firstItemText); + const [searchValue, setSearchValue] = React.useState(''); + const [filteredItems, setFilteredItems] = React.useState(items); + + const onToggle = (event: any, isOpen: boolean) => { + setOpen(isOpen); + }; + + const onSelect = (event: any, value: React.ReactNode) => { + setSelected(value as string); + setOpen(!isOpen); + }; + + const onSearchInputChange = (value: string) => { + setSearchValue(value); + }; + + const onSearchButtonClick = (_event: React.SyntheticEvent) => { + const filtered = + searchValue === '' + ? items + : items.filter(item => { + const str = typeof item === 'string' ? item : item.text; + return str.toLowerCase().indexOf(searchValue.toLowerCase()) !== -1; + }); + + setFilteredItems(filtered || []); + }; + + return ( + + + + } + > + {filteredItems.map((item, index) => { + const [text = null, href = null, isDisabled] = + typeof item === 'string' ? [item, null, false] : [item.text, item.href, item.isDisabled]; + return ( + + {text || item} + + ); + })} + + ); +};