playbook_ui 7.0.1.pre.alpha12 → 7.0.1.pre.alpha14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +4 -6
- data/app/pb_kits/playbook/_playbook.scss +1 -0
- data/app/pb_kits/playbook/data/menu.yml +1 -1
- data/app/pb_kits/playbook/index.js +3 -0
- data/app/pb_kits/playbook/packs/examples.js +6 -0
- data/app/pb_kits/playbook/packs/site_styles/docs/_kit_doc.scss +22 -6
- data/app/pb_kits/playbook/pb_avatar/_avatar.jsx +5 -1
- data/app/pb_kits/playbook/pb_background/_background.html.erb +14 -0
- data/app/pb_kits/playbook/pb_background/_background.jsx +64 -0
- data/app/pb_kits/playbook/pb_background/_background.scss +15 -0
- data/app/pb_kits/playbook/pb_background/background.rb +36 -0
- data/app/pb_kits/playbook/pb_background/docs/_background_default.html.erb +41 -0
- data/app/pb_kits/playbook/pb_background/docs/_background_default.jsx +75 -0
- data/app/pb_kits/playbook/pb_background/docs/example.yml +8 -0
- data/app/pb_kits/playbook/pb_background/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_badge/_badge.jsx +4 -2
- data/app/pb_kits/playbook/pb_bar_graph/_bar_graph.jsx +1 -1
- data/app/pb_kits/playbook/pb_button/_button.jsx +5 -1
- data/app/pb_kits/playbook/pb_button_toolbar/_button_toolbar.jsx +5 -1
- data/app/pb_kits/playbook/pb_caption/_caption.jsx +2 -2
- data/app/pb_kits/playbook/pb_checkbox/_checkbox.jsx +5 -2
- data/app/pb_kits/playbook/pb_checkbox/checkbox.rb +3 -1
- data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_options.html.erb +10 -0
- data/app/pb_kits/playbook/pb_checkbox/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_circle_chart/_circle_chart.html.erb +1 -1
- data/app/pb_kits/playbook/pb_circle_chart/_circle_chart.jsx +130 -0
- data/app/pb_kits/playbook/pb_circle_chart/_circle_chart.scss +1 -1
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_block.jsx +39 -0
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_colors.jsx +29 -0
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_default.jsx +28 -0
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_inner_sizes.jsx +117 -0
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_live_data.jsx +53 -0
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_rounded.jsx +30 -0
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_with_labels.jsx +45 -0
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_with_legend_kit.jsx +30 -0
- data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_with_title.jsx +45 -0
- data/app/pb_kits/playbook/pb_circle_chart/docs/example.yml +11 -0
- data/app/pb_kits/playbook/pb_circle_chart/docs/index.js +9 -0
- data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.jsx +5 -1
- data/app/pb_kits/playbook/pb_contact/_contact.jsx +5 -1
- data/app/pb_kits/playbook/pb_currency/_currency.jsx +5 -1
- data/app/pb_kits/playbook/pb_dashboard_value/_dashboard_value.jsx +5 -1
- data/app/pb_kits/playbook/pb_date/date.rb +2 -1
- data/app/pb_kits/playbook/pb_date/docs/_date_default.html.erb +8 -1
- data/app/pb_kits/playbook/pb_date/docs/_date_timezone.html.erb +51 -0
- data/app/pb_kits/playbook/pb_date/docs/_date_timezone.md +6 -0
- data/app/pb_kits/playbook/pb_date/docs/_description.md +2 -0
- data/app/pb_kits/playbook/pb_date/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_date_picker/_date_picker.jsx +7 -4
- data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +0 -4
- data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +3 -3
- data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.js +8 -10
- data/app/pb_kits/playbook/pb_date_picker/docs/{_date_picker_read_only.html.erb → _date_picker_allow_input.html.erb} +1 -1
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_allow_input.jsx +13 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_allow_input.md +1 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_on_change.jsx +34 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_on_change.md +3 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/example.yml +3 -2
- data/app/pb_kits/playbook/pb_date_picker/docs/index.js +2 -1
- data/app/pb_kits/playbook/pb_date_picker/sass_partials/_calendar_input_icon.scss +1 -0
- data/app/pb_kits/playbook/pb_date_range_stacked/_date_range_stacked.jsx +5 -1
- data/app/pb_kits/playbook/pb_date_stacked/_date_stacked.jsx +2 -2
- data/app/pb_kits/playbook/pb_date_year_stacked/_date_year_stacked.jsx +5 -1
- data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.jsx +2 -2
- data/app/pb_kits/playbook/pb_flex/_flex.jsx +2 -2
- data/app/pb_kits/playbook/pb_flex/_flex_item.jsx +1 -1
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +6 -1
- data/app/pb_kits/playbook/pb_form_pill/_form_pill.jsx +3 -2
- data/app/pb_kits/playbook/pb_gauge/_gauge.jsx +1 -1
- data/app/pb_kits/playbook/pb_highlight/_highlight.jsx +1 -1
- data/app/pb_kits/playbook/pb_home_address_street/_home_address_street.jsx +2 -2
- data/app/pb_kits/playbook/pb_icon/_icon.jsx +2 -2
- data/app/pb_kits/playbook/pb_icon_value/_icon_value.jsx +5 -1
- data/app/pb_kits/playbook/pb_image/_image.jsx +5 -1
- data/app/pb_kits/playbook/pb_label_pill/_label_pill.jsx +5 -1
- data/app/pb_kits/playbook/pb_layout/_layout.jsx +4 -4
- data/app/pb_kits/playbook/pb_line_graph/_line_graph.jsx +1 -1
- data/app/pb_kits/playbook/pb_list/_list.jsx +3 -2
- data/app/pb_kits/playbook/pb_list/_list_item.jsx +3 -2
- data/app/pb_kits/playbook/pb_logistic/_logistic.jsx +5 -1
- data/app/pb_kits/playbook/pb_message/_message.jsx +5 -1
- data/app/pb_kits/playbook/pb_multiple_users/_multiple_users.jsx +5 -2
- data/app/pb_kits/playbook/pb_nav/_nav.jsx +2 -2
- data/app/pb_kits/playbook/pb_person/_person.jsx +5 -1
- data/app/pb_kits/playbook/pb_person_contact/_person_contact.jsx +5 -1
- data/app/pb_kits/playbook/pb_popover/_popover.jsx +5 -1
- data/app/pb_kits/playbook/pb_progress_simple/_progress_simple.jsx +4 -4
- data/app/pb_kits/playbook/pb_progress_step/_progress_step.jsx +1 -1
- data/app/pb_kits/playbook/pb_radio/_radio.html.erb +1 -1
- data/app/pb_kits/playbook/pb_radio/docs/_radio_options.html.erb +9 -0
- data/app/pb_kits/playbook/pb_radio/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_radio/radio.rb +2 -4
- data/app/pb_kits/playbook/pb_section_separator/_section_separator.jsx +1 -1
- data/app/pb_kits/playbook/pb_select/_select.scss +1 -1
- data/app/pb_kits/playbook/pb_stat_change/_stat_change.jsx +2 -2
- data/app/pb_kits/playbook/pb_stat_value/_stat_value.jsx +3 -3
- data/app/pb_kits/playbook/pb_stat_value/docs/_stat_value_default.jsx +6 -1
- data/app/pb_kits/playbook/pb_table/_table.jsx +2 -2
- data/app/pb_kits/playbook/pb_text_input/_text_input.jsx +1 -1
- data/app/pb_kits/playbook/pb_text_input/_text_input.scss +17 -8
- data/app/pb_kits/playbook/pb_textarea/_textarea.jsx +1 -1
- data/app/pb_kits/playbook/pb_time/_time.html.erb +23 -17
- data/app/pb_kits/playbook/pb_time/_time.jsx +22 -13
- data/app/pb_kits/playbook/pb_time/_time.scss +16 -8
- data/app/pb_kits/playbook/pb_time/docs/_time_align.html.erb +18 -0
- data/app/pb_kits/playbook/pb_time/docs/_time_align.jsx +3 -3
- data/app/pb_kits/playbook/pb_time/docs/_time_default.html.erb +47 -3
- data/app/pb_kits/playbook/pb_time/docs/_time_default.jsx +33 -4
- data/app/pb_kits/playbook/pb_time/docs/_time_sizes.html.erb +11 -0
- data/app/pb_kits/playbook/pb_time/docs/_time_sizes.jsx +19 -0
- data/app/pb_kits/playbook/pb_time/docs/_time_timestamp.html.erb +3 -1
- data/app/pb_kits/playbook/pb_time/docs/_time_timestamp.jsx +0 -7
- data/app/pb_kits/playbook/pb_time/docs/_time_timezone.html.erb +38 -0
- data/app/pb_kits/playbook/pb_time/docs/_time_timezone.jsx +12 -14
- data/app/pb_kits/playbook/pb_time/docs/example.yml +6 -2
- data/app/pb_kits/playbook/pb_time/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_time/time.rb +14 -2
- data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.jsx +1 -1
- data/app/pb_kits/playbook/pb_time_stacked/_time_stacked.jsx +3 -3
- data/app/pb_kits/playbook/pb_timestamp/_timestamp.jsx +1 -1
- data/app/pb_kits/playbook/pb_title/_title.jsx +5 -1
- data/app/pb_kits/playbook/pb_title_count/_title_count.jsx +5 -1
- data/app/pb_kits/playbook/pb_title_detail/_title_detail.jsx +1 -1
- data/app/pb_kits/playbook/pb_toggle/_toggle.jsx +3 -3
- data/app/pb_kits/playbook/pb_toggle/_toggle.scss +41 -43
- data/app/pb_kits/playbook/pb_toggle/docs/example.yml +0 -2
- data/app/pb_kits/playbook/pb_toggle/docs/index.js +0 -1
- data/app/pb_kits/playbook/pb_toggle/toggle.rb +2 -2
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.jsx +60 -0
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +20 -3
- data/app/pb_kits/playbook/pb_typeahead/components/Control.jsx +30 -0
- data/app/pb_kits/playbook/pb_typeahead/components/IndicatorsContainer.jsx +13 -0
- data/app/pb_kits/playbook/pb_typeahead/components/MenuList.jsx +12 -0
- data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.jsx +51 -0
- data/app/pb_kits/playbook/pb_typeahead/components/Option.jsx +34 -0
- data/app/pb_kits/playbook/pb_typeahead/components/Placeholder.jsx +13 -0
- data/app/pb_kits/playbook/pb_typeahead/components/ValueContainer.jsx +13 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_default.jsx +22 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills.jsx +29 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async.jsx +84 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async_summary.jsx +45 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_async_users.jsx +101 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_summary.jsx +27 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +8 -2
- data/app/pb_kits/playbook/pb_typeahead/docs/index.js +4 -0
- data/app/pb_kits/playbook/pb_user_badge/_user_badge.jsx +5 -2
- data/app/pb_kits/playbook/plugins/pb_chart.js +1 -1
- data/app/pb_kits/playbook/tokens/_typography.scss +3 -3
- data/lib/generators/kit/templates/kit_jsx.erb.tt +1 -1
- data/lib/playbook/version.rb +1 -1
- metadata +50 -8
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_read_only.jsx +0 -13
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_read_only.md +0 -1
- data/app/pb_kits/playbook/pb_toggle/docs/_toggle_size.html.erb +0 -11
- data/app/pb_kits/playbook/pb_toggle/docs/_toggle_size.jsx +0 -44
@@ -0,0 +1,51 @@
|
|
1
|
+
/* @flow */
|
2
|
+
|
3
|
+
import React from 'react'
|
4
|
+
import { components } from 'react-select'
|
5
|
+
|
6
|
+
import { FormPill } from '../../'
|
7
|
+
|
8
|
+
type Props = {
|
9
|
+
data: object,
|
10
|
+
multiValueTemplate: any,
|
11
|
+
removeProps: any,
|
12
|
+
selectProps: any,
|
13
|
+
}
|
14
|
+
|
15
|
+
const MultiValue = (props: Props) => {
|
16
|
+
const {
|
17
|
+
data,
|
18
|
+
removeProps,
|
19
|
+
selectProps,
|
20
|
+
} = props
|
21
|
+
|
22
|
+
const handleOnClick = () => {
|
23
|
+
if (selectProps.onMultiValueClick) selectProps.onMultiValueClick(data)
|
24
|
+
removeProps.onClick()
|
25
|
+
}
|
26
|
+
const { imageUrl, label } = data
|
27
|
+
|
28
|
+
return (
|
29
|
+
<components.MultiValueContainer
|
30
|
+
className="text_input_multivalue_container"
|
31
|
+
{...props}
|
32
|
+
>
|
33
|
+
<If condition={imageUrl}>
|
34
|
+
<FormPill
|
35
|
+
avatarUrl={imageUrl}
|
36
|
+
marginRight="xs"
|
37
|
+
name={label}
|
38
|
+
onClick={handleOnClick}
|
39
|
+
/>
|
40
|
+
<Else />
|
41
|
+
<FormPill
|
42
|
+
marginRight="xs"
|
43
|
+
onClick={handleOnClick}
|
44
|
+
text={label}
|
45
|
+
/>
|
46
|
+
</If>
|
47
|
+
</components.MultiValueContainer>
|
48
|
+
)
|
49
|
+
}
|
50
|
+
|
51
|
+
export default MultiValue
|
@@ -0,0 +1,34 @@
|
|
1
|
+
/* @flow */
|
2
|
+
|
3
|
+
import React from 'react'
|
4
|
+
import { components } from 'react-select'
|
5
|
+
|
6
|
+
import {
|
7
|
+
User,
|
8
|
+
} from '../../'
|
9
|
+
|
10
|
+
const Option = (props: any) => {
|
11
|
+
const {
|
12
|
+
imageUrl,
|
13
|
+
label,
|
14
|
+
} = props.data
|
15
|
+
return (
|
16
|
+
<components.Option {...props}>
|
17
|
+
<Choose>
|
18
|
+
<When condition={imageUrl}>
|
19
|
+
<User
|
20
|
+
align="left"
|
21
|
+
avatarUrl={imageUrl}
|
22
|
+
name={label}
|
23
|
+
orientation="horizontal"
|
24
|
+
/>
|
25
|
+
</When>
|
26
|
+
<When condition={!imageUrl}>
|
27
|
+
{label}
|
28
|
+
</When>
|
29
|
+
</Choose>
|
30
|
+
</components.Option>
|
31
|
+
)
|
32
|
+
}
|
33
|
+
|
34
|
+
export default Option
|
@@ -0,0 +1,13 @@
|
|
1
|
+
/* @flow */
|
2
|
+
|
3
|
+
import React from 'react'
|
4
|
+
import { components } from 'react-select'
|
5
|
+
|
6
|
+
const ValueContainer = (props: Props) => (
|
7
|
+
<components.ValueContainer
|
8
|
+
className="text_input_value_container"
|
9
|
+
{...props}
|
10
|
+
/>
|
11
|
+
)
|
12
|
+
|
13
|
+
export default ValueContainer
|
@@ -0,0 +1,22 @@
|
|
1
|
+
// @flow
|
2
|
+
|
3
|
+
import React from 'react'
|
4
|
+
import { Typeahead } from '../../'
|
5
|
+
|
6
|
+
const options = [
|
7
|
+
{ label: 'Orange', value: '#FFA500' },
|
8
|
+
{ label: 'Red', value: '#FF0000' },
|
9
|
+
{ label: 'Green', value: '#00FF00' },
|
10
|
+
{ label: 'Blue', value: '#0000FF' },
|
11
|
+
]
|
12
|
+
|
13
|
+
const TypeaheadDefault = () => {
|
14
|
+
return (
|
15
|
+
<Typeahead
|
16
|
+
label="Colors"
|
17
|
+
options={options}
|
18
|
+
/>
|
19
|
+
)
|
20
|
+
}
|
21
|
+
|
22
|
+
export default TypeaheadDefault
|
@@ -0,0 +1,29 @@
|
|
1
|
+
/* @flow */
|
2
|
+
|
3
|
+
import React from 'react'
|
4
|
+
import { Typeahead } from '../..'
|
5
|
+
|
6
|
+
const options = [
|
7
|
+
{ label: 'Windows', value: '#FFA500' },
|
8
|
+
{ label: 'Siding', value: '#FF0000' },
|
9
|
+
{ label: 'Doors', value: '#00FF00' },
|
10
|
+
{ label: 'Roofs', value: '#0000FF' },
|
11
|
+
]
|
12
|
+
|
13
|
+
import TypeaheadWithPillsSummary from './_typeahead_with_pills_summary'
|
14
|
+
|
15
|
+
const TypeaheadWithPills = () => {
|
16
|
+
return (
|
17
|
+
<>
|
18
|
+
<TypeaheadWithPillsSummary />
|
19
|
+
<Typeahead
|
20
|
+
isMulti
|
21
|
+
label="Colors"
|
22
|
+
options={options}
|
23
|
+
placeholder=""
|
24
|
+
/>
|
25
|
+
</>
|
26
|
+
)
|
27
|
+
}
|
28
|
+
|
29
|
+
export default TypeaheadWithPills
|
@@ -0,0 +1,84 @@
|
|
1
|
+
/* @flow */
|
2
|
+
|
3
|
+
import React, { useState } from 'react'
|
4
|
+
|
5
|
+
import {
|
6
|
+
Caption,
|
7
|
+
Typeahead,
|
8
|
+
User,
|
9
|
+
} from '../..'
|
10
|
+
|
11
|
+
/**
|
12
|
+
*
|
13
|
+
* @const filterResults
|
14
|
+
* @ignore
|
15
|
+
* @returns {[Object]} - a custom mapping of objects, minimally containing
|
16
|
+
* `value` and `label` among other possible fields
|
17
|
+
* @summary - for doc example purposes only
|
18
|
+
*/
|
19
|
+
|
20
|
+
const filterResults = (results) =>
|
21
|
+
results.items.map((result) => {
|
22
|
+
return {
|
23
|
+
label: result.login,
|
24
|
+
value: result.id,
|
25
|
+
}
|
26
|
+
})
|
27
|
+
|
28
|
+
/**
|
29
|
+
*
|
30
|
+
* @const promiseOptions
|
31
|
+
* @ignore
|
32
|
+
* @returns {Promise} - fetch API data results from Typeahead input text
|
33
|
+
* @see - https://react-select.com/home#async
|
34
|
+
* @summary - for doc example purposes only
|
35
|
+
*/
|
36
|
+
|
37
|
+
const promiseOptions = (inputValue) =>
|
38
|
+
new Promise((resolve) => {
|
39
|
+
if (inputValue) {
|
40
|
+
fetch(`https://api.github.com/search/users?q=${inputValue}`)
|
41
|
+
.then((response) => response.json())
|
42
|
+
.then((results) => resolve(filterResults(results)))
|
43
|
+
} else {
|
44
|
+
resolve([])
|
45
|
+
}
|
46
|
+
})
|
47
|
+
|
48
|
+
const TypeaheadWithPillsAsync = () => {
|
49
|
+
const [users, setUsers] = useState([])
|
50
|
+
const handleOnChange = (value) => setUsers(value)
|
51
|
+
|
52
|
+
return (
|
53
|
+
<>
|
54
|
+
<If condition={users && users.length > 0}>
|
55
|
+
<Caption
|
56
|
+
marginBottom="xs"
|
57
|
+
text="State (Users)"
|
58
|
+
/>
|
59
|
+
<For
|
60
|
+
each="user"
|
61
|
+
of={users}
|
62
|
+
>
|
63
|
+
<User
|
64
|
+
align="left"
|
65
|
+
key={user.value}
|
66
|
+
marginBottom="md"
|
67
|
+
name={user.label}
|
68
|
+
orientation="horizontal"
|
69
|
+
/>
|
70
|
+
</For>
|
71
|
+
</If>
|
72
|
+
<Typeahead
|
73
|
+
async
|
74
|
+
isMulti
|
75
|
+
label="Github Users"
|
76
|
+
loadOptions={promiseOptions}
|
77
|
+
onChange={handleOnChange}
|
78
|
+
placeholder="type the name of a Github user"
|
79
|
+
/>
|
80
|
+
</>
|
81
|
+
)
|
82
|
+
}
|
83
|
+
|
84
|
+
export default TypeaheadWithPillsAsync
|
@@ -0,0 +1,45 @@
|
|
1
|
+
/* @flow */
|
2
|
+
|
3
|
+
import React from 'react'
|
4
|
+
import { Body, Flex, FlexItem, Icon } from '../..'
|
5
|
+
|
6
|
+
const TypeaheadWithPillsAsyncSummary = () => {
|
7
|
+
return (
|
8
|
+
<>
|
9
|
+
<Flex
|
10
|
+
marginBottom="lg"
|
11
|
+
vertical="center"
|
12
|
+
>
|
13
|
+
<FlexItem>
|
14
|
+
<Body
|
15
|
+
color="light"
|
16
|
+
>
|
17
|
+
<Icon
|
18
|
+
icon="info-circle"
|
19
|
+
marginRight="xs"
|
20
|
+
/>
|
21
|
+
</Body>
|
22
|
+
</FlexItem>
|
23
|
+
<FlexItem>
|
24
|
+
<Body
|
25
|
+
color="light"
|
26
|
+
>
|
27
|
+
{'If the data field '}
|
28
|
+
<code>{'imageUrl'}</code>
|
29
|
+
{' is present, '}
|
30
|
+
<code>{'FormPill'}</code>
|
31
|
+
{' will receive that field as a prop and display the image. '}
|
32
|
+
<br />
|
33
|
+
{'Additionally, you can also leverage the callback prop: '}
|
34
|
+
<code>{'onMultiValueClick'}</code>
|
35
|
+
{' to perform custom work when a '}
|
36
|
+
<code>{'MultiValue'}</code>
|
37
|
+
{' item is clicked.'}
|
38
|
+
</Body>
|
39
|
+
</FlexItem>
|
40
|
+
</Flex>
|
41
|
+
</>
|
42
|
+
)
|
43
|
+
}
|
44
|
+
|
45
|
+
export default TypeaheadWithPillsAsyncSummary
|
@@ -0,0 +1,101 @@
|
|
1
|
+
/* @flow */
|
2
|
+
|
3
|
+
import React, { useState } from 'react'
|
4
|
+
|
5
|
+
import {
|
6
|
+
Caption,
|
7
|
+
Typeahead,
|
8
|
+
User,
|
9
|
+
} from '../..'
|
10
|
+
|
11
|
+
import TypeaheadWithPillsAsyncSummary from './_typeahead_with_pills_async_summary'
|
12
|
+
|
13
|
+
/**
|
14
|
+
*
|
15
|
+
* @const filterResults
|
16
|
+
* @ignore
|
17
|
+
* @returns {[Object]} - a custom mapping of objects, minimally containing
|
18
|
+
* `value` and `label` among other possible fields
|
19
|
+
* @summary - for doc example purposes only
|
20
|
+
*/
|
21
|
+
|
22
|
+
const filterResults = (results) =>
|
23
|
+
results.items.map((result) => {
|
24
|
+
return {
|
25
|
+
imageUrl: result.avatar_url, //add the custom field
|
26
|
+
label: result.login,
|
27
|
+
value: result.id,
|
28
|
+
}
|
29
|
+
})
|
30
|
+
|
31
|
+
/**
|
32
|
+
*
|
33
|
+
* @const promiseOptions
|
34
|
+
* @ignore
|
35
|
+
* @returns {Promise} - fetch API data results from Typeahead input text
|
36
|
+
* @see - https://react-select.com/home#async
|
37
|
+
* @summary - for doc example purposes only
|
38
|
+
*/
|
39
|
+
|
40
|
+
const promiseOptions = (inputValue) =>
|
41
|
+
new Promise((resolve) => {
|
42
|
+
if (inputValue) {
|
43
|
+
fetch(`https://api.github.com/search/users?q=${inputValue}`)
|
44
|
+
.then((response) => response.json())
|
45
|
+
.then((results) => resolve(filterResults(results)))
|
46
|
+
} else {
|
47
|
+
resolve([])
|
48
|
+
}
|
49
|
+
})
|
50
|
+
|
51
|
+
const TypeaheadWithPillsAsyncUsers = () => {
|
52
|
+
const [users, setUsers] = useState([])
|
53
|
+
const handleOnChange = (value) => setUsers(value)
|
54
|
+
|
55
|
+
/**
|
56
|
+
*
|
57
|
+
* @const handleOnMultiValueClick {function} - a custom callback for the MultiValue click
|
58
|
+
* @ignore
|
59
|
+
* @returns {null}
|
60
|
+
* @summary - for doc example purposes only
|
61
|
+
*/
|
62
|
+
const handleOnMultiValueClick = (value) => {
|
63
|
+
alert(`You removed the user: "${value.label}"`)
|
64
|
+
}
|
65
|
+
|
66
|
+
return (
|
67
|
+
<>
|
68
|
+
<TypeaheadWithPillsAsyncSummary />
|
69
|
+
<If condition={users && users.length > 0}>
|
70
|
+
<Caption
|
71
|
+
marginBottom="xs"
|
72
|
+
text="State (Users)"
|
73
|
+
/>
|
74
|
+
<For
|
75
|
+
each="user"
|
76
|
+
of={users}
|
77
|
+
>
|
78
|
+
<User
|
79
|
+
align="left"
|
80
|
+
avatarUrl={user.imageUrl}
|
81
|
+
key={user.value}
|
82
|
+
marginBottom="md"
|
83
|
+
name={user.label}
|
84
|
+
orientation="horizontal"
|
85
|
+
/>
|
86
|
+
</For>
|
87
|
+
</If>
|
88
|
+
<Typeahead
|
89
|
+
async
|
90
|
+
isMulti
|
91
|
+
label="Github Users"
|
92
|
+
loadOptions={promiseOptions}
|
93
|
+
onChange={handleOnChange}
|
94
|
+
onMultiValueClick={handleOnMultiValueClick}
|
95
|
+
placeholder="type the name of a Github user"
|
96
|
+
/>
|
97
|
+
</>
|
98
|
+
)
|
99
|
+
}
|
100
|
+
|
101
|
+
export default TypeaheadWithPillsAsyncUsers
|
@@ -0,0 +1,27 @@
|
|
1
|
+
// @flow
|
2
|
+
|
3
|
+
import React from 'react'
|
4
|
+
import { Body, Icon } from '../..'
|
5
|
+
|
6
|
+
const TypeaheadWithPillsSummary = () => {
|
7
|
+
return (
|
8
|
+
<>
|
9
|
+
<Body
|
10
|
+
color="light"
|
11
|
+
marginBottom="lg"
|
12
|
+
>
|
13
|
+
<Icon
|
14
|
+
icon="info-circle"
|
15
|
+
marginRight="xs"
|
16
|
+
/>
|
17
|
+
{'Typeahead kit is data-driven. The minimum default fields are '}
|
18
|
+
<code>{'label'}</code>
|
19
|
+
{' and '}
|
20
|
+
<code>{'value'}</code>
|
21
|
+
{'.'}
|
22
|
+
</Body>
|
23
|
+
</>
|
24
|
+
)
|
25
|
+
}
|
26
|
+
|
27
|
+
export default TypeaheadWithPillsSummary
|
@@ -1,4 +1,10 @@
|
|
1
1
|
examples:
|
2
2
|
rails:
|
3
|
-
|
4
|
-
|
3
|
+
- typeahead_default: Default
|
4
|
+
- typeahead_with_context_dark: With Context
|
5
|
+
|
6
|
+
react:
|
7
|
+
- typeahead_default: Default
|
8
|
+
- typeahead_with_pills: With Pills
|
9
|
+
- typeahead_with_pills_async: With Pills (Async Data)
|
10
|
+
- typeahead_with_pills_async_users: With Pills (Async Data w/ Users)
|
@@ -0,0 +1,4 @@
|
|
1
|
+
export { default as TypeaheadDefault } from './_typeahead_default'
|
2
|
+
export { default as TypeaheadWithPills } from './_typeahead_with_pills'
|
3
|
+
export { default as TypeaheadWithPillsAsync } from './_typeahead_with_pills_async'
|
4
|
+
export { default as TypeaheadWithPillsAsyncUsers } from './_typeahead_with_pills_async_users'
|