playbook_ui 14.14.0.pre.rc.5 → 14.15.0.pre.alpha.play1854reacthookmultilvlselect6572
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/app/pb_kits/playbook/pb_advanced_table/Components/RegularTableView.tsx +127 -0
- data/app/pb_kits/playbook/pb_advanced_table/Components/TableActionBar.tsx +55 -0
- data/app/pb_kits/playbook/pb_advanced_table/Components/TablePagination.tsx +33 -0
- data/app/pb_kits/playbook/pb_advanced_table/Components/VirtualizedTableView.tsx +275 -0
- data/app/pb_kits/playbook/pb_advanced_table/Context/AdvancedTableContext.tsx +143 -3
- data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableActions.ts +66 -0
- data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableState.ts +195 -0
- data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableBody.tsx +45 -99
- data/app/pb_kits/playbook/pb_advanced_table/Utilities/CellRendererUtils.tsx +73 -0
- data/app/pb_kits/playbook/pb_advanced_table/Utilities/RowUtils.ts +52 -0
- data/app/pb_kits/playbook/pb_advanced_table/Utilities/TableContainerStyles.ts +80 -0
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +126 -7
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +153 -298
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +8 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers_custom_cell.jsx +75 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_infinite_scroll.jsx +50 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props.html.erb +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_rails.md +3 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_react.md +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header.html.erb +33 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header_rails.md +3 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/advanced_table_mock_data_infinite_scroll.json +152002 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +2 -1
- data/app/pb_kits/playbook/pb_card/_card.tsx +2 -1
- data/app/pb_kits/playbook/pb_checkbox/_checkbox.tsx +17 -8
- data/app/pb_kits/playbook/pb_checkbox/checkbox.test.js +16 -0
- data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_react_hook.jsx +69 -0
- data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_react_hook.md +1 -0
- data/app/pb_kits/playbook/pb_checkbox/docs/example.yml +2 -1
- data/app/pb_kits/playbook/pb_checkbox/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_currency/_currency.tsx +46 -31
- data/app/pb_kits/playbook/pb_currency/currency.html.erb +15 -8
- data/app/pb_kits/playbook/pb_currency/currency.rb +17 -2
- data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display.html.erb +22 -0
- data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display.jsx +34 -0
- data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display_rails.md +1 -0
- data/app/pb_kits/playbook/pb_currency/docs/_currency_null_display_react.md +1 -0
- data/app/pb_kits/playbook/pb_currency/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_currency/docs/index.js +2 -1
- data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +4 -1
- data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +2 -0
- data/app/pb_kits/playbook/pb_date_picker/index.ts +38 -0
- data/app/pb_kits/playbook/pb_dialog/dialog.html.erb +5 -6
- data/app/pb_kits/playbook/pb_dialog/dialogHelper.js +2 -0
- data/app/pb_kits/playbook/pb_dialog/index.js +75 -0
- data/app/pb_kits/playbook/pb_drawer/_drawer.scss +43 -3
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.html.erb +8 -0
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.html.erb +33 -0
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.jsx +3 -3
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.html.erb +0 -0
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.jsx +20 -37
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.html.erb +20 -1
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.html.erb +24 -0
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.jsx +6 -6
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.html.erb +21 -0
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.jsx +1 -0
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.md +1 -0
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.html.erb +49 -0
- data/app/pb_kits/playbook/pb_drawer/docs/example.yml +6 -0
- data/app/pb_kits/playbook/pb_drawer/drawer.html.erb +20 -12
- data/app/pb_kits/playbook/pb_drawer/drawer.rb +49 -1
- data/app/pb_kits/playbook/pb_drawer/index.js +257 -0
- data/app/pb_kits/playbook/pb_filter/Filter/CurrentFilters.tsx +5 -4
- data/app/pb_kits/playbook/pb_filter/Filter/FilterSingle.tsx +2 -2
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +3 -2
- data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +9 -2
- data/app/pb_kits/playbook/pb_form_pill/_form_pill.tsx +4 -0
- data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.html.erb +40 -0
- data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.jsx +50 -0
- data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_wrapped.md +3 -0
- data/app/pb_kits/playbook/pb_form_pill/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_form_pill/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_form_pill/form_pill.rb +7 -1
- data/app/pb_kits/playbook/pb_icon_button/_icon_button.tsx +71 -0
- data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_default.jsx +17 -0
- data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_sizes.jsx +61 -0
- data/app/pb_kits/playbook/pb_icon_button/docs/example.yml +4 -0
- data/app/pb_kits/playbook/pb_icon_button/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_icon_button/icon_button.test.jsx +39 -0
- data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.scss +7 -0
- data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +33 -8
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.html.erb +72 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.jsx +91 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_react_hook.jsx +91 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_react_hook.md +1 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +3 -1
- data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.rb +6 -0
- data/app/pb_kits/playbook/pb_overlay/_overlay.scss +13 -0
- data/app/pb_kits/playbook/pb_overlay/_overlay.tsx +11 -1
- data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar.html.erb +11 -0
- data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar.jsx +37 -0
- data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar_rails.md +1 -0
- data/app/pb_kits/playbook/pb_overlay/docs/_overlay_hide_scroll_bar_react.md +1 -0
- data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.html.erb +11 -0
- data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.jsx +37 -0
- data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.md +1 -0
- data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional_react.md +1 -0
- data/app/pb_kits/playbook/pb_overlay/docs/example.yml +4 -0
- data/app/pb_kits/playbook/pb_overlay/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_overlay/index.js +61 -0
- data/app/pb_kits/playbook/pb_overlay/overlay.html.erb +5 -3
- data/app/pb_kits/playbook/pb_overlay/overlay.rb +16 -1
- data/app/pb_kits/playbook/pb_overlay/overlay.test.jsx +12 -0
- data/app/pb_kits/playbook/pb_overlay/subcomponents/_overlay_token.tsx +48 -10
- data/app/pb_kits/playbook/pb_popover/_popover.tsx +1 -1
- data/app/pb_kits/playbook/pb_progress_pills/progress_pills.html.erb +1 -6
- data/app/pb_kits/playbook/pb_progress_simple/progress_simple.html.erb +1 -5
- data/app/pb_kits/playbook/pb_progress_step/progress_step.html.erb +1 -5
- data/app/pb_kits/playbook/pb_progress_step/progress_step_item.html.erb +3 -7
- data/app/pb_kits/playbook/pb_radio/_radio.tsx +85 -74
- data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.jsx +60 -0
- data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.md +1 -0
- data/app/pb_kits/playbook/pb_radio/docs/example.yml +2 -1
- data/app/pb_kits/playbook/pb_radio/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_radio/radio.html.erb +6 -11
- data/app/pb_kits/playbook/pb_radio/radio.test.js +16 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_react_hook.jsx +58 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_react_hook.md +1 -0
- data/app/pb_kits/playbook/pb_select/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_select/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_select/index.js +38 -0
- data/app/pb_kits/playbook/pb_select/select.html.erb +3 -5
- data/app/pb_kits/playbook/pb_select/select.rb +8 -0
- data/app/pb_kits/playbook/pb_selectable_card/selectable_card.html.erb +1 -5
- data/app/pb_kits/playbook/pb_selectable_card_icon/selectable_card_icon.html.erb +1 -4
- data/app/pb_kits/playbook/pb_selectable_icon/selectable_icon.html.erb +1 -5
- data/app/pb_kits/playbook/pb_timeline/_timeline.scss +2 -2
- data/app/pb_kits/playbook/pb_title/_title.scss +32 -0
- data/app/pb_kits/playbook/pb_title/_title.tsx +10 -1
- data/app/pb_kits/playbook/pb_title/docs/_title_default.html.erb +1 -2
- data/app/pb_kits/playbook/pb_title/docs/_title_default.jsx +1 -1
- data/app/pb_kits/playbook/pb_title/docs/_title_display_size.html.erb +7 -0
- data/app/pb_kits/playbook/pb_title/docs/_title_display_size.jsx +54 -0
- data/app/pb_kits/playbook/pb_title/docs/_title_display_size.md +1 -0
- data/app/pb_kits/playbook/pb_title/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_title/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_title/title.rb +10 -1
- data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +0 -3
- data/app/pb_kits/playbook/pb_tooltip/_tooltip.tsx +25 -0
- data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_delay_rails.html.erb +39 -0
- data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_delay_rails.md +3 -0
- data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_interaction.html.erb +26 -0
- data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_sizing.jsx +69 -0
- data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_sizing.md +3 -0
- data/app/pb_kits/playbook/pb_tooltip/docs/example.yml +3 -1
- data/app/pb_kits/playbook/pb_tooltip/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_tooltip/floating_ui.js +282 -0
- data/app/pb_kits/playbook/pb_tooltip/index.js +2 -2
- data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +10 -2
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +36 -2
- data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.tsx +5 -1
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options.html.erb +45 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options.md +5 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options_pure_rails.html.erb +33 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_dynamic_options_pure_rails.md +3 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_typeahead/index.ts +61 -8
- data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +17 -2
- data/app/pb_kits/playbook/utilities/object.test.js +99 -0
- data/app/pb_kits/playbook/utilities/object.ts +29 -1
- data/dist/chunks/_typeahead-DKSD8vAY.js +36 -0
- data/dist/chunks/_weekday_stacked-C-GXG8yh.js +45 -0
- data/dist/chunks/{lib-D3us1bGD.js → lib-5OzNgeeu.js} +2 -2
- data/dist/chunks/{pb_form_validation-BpihMSOQ.js → pb_form_validation-DGhKbZtO.js} +1 -1
- data/dist/chunks/vendor.js +1 -1
- data/dist/menu.yml +3 -3
- data/dist/playbook-doc.js +1 -1
- data/dist/playbook-rails-react-bindings.js +1 -1
- data/dist/playbook-rails.js +1 -1
- data/dist/playbook.css +1 -1
- data/lib/playbook/forms/builder/time_zone_select_field.rb +19 -0
- data/lib/playbook/forms/builder.rb +1 -0
- data/lib/playbook/version.rb +2 -2
- metadata +77 -6
- data/dist/chunks/_typeahead-CAIQfP7X.js +0 -36
- data/dist/chunks/_weekday_stacked-DstwbGUv.js +0 -45
@@ -0,0 +1,61 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import { IconButton, Flex } from 'playbook-ui'
|
3
|
+
|
4
|
+
const IconButtonSizes = (props) => (
|
5
|
+
<div>
|
6
|
+
<Flex align="center">
|
7
|
+
<IconButton
|
8
|
+
{...props}
|
9
|
+
size="lg"
|
10
|
+
/>
|
11
|
+
<span>Large</span>
|
12
|
+
</Flex>
|
13
|
+
<Flex align="center">
|
14
|
+
<IconButton
|
15
|
+
{...props}
|
16
|
+
size="sm"
|
17
|
+
/>
|
18
|
+
<span>Small</span>
|
19
|
+
</Flex>
|
20
|
+
<Flex align="center">
|
21
|
+
<IconButton
|
22
|
+
{...props}
|
23
|
+
size="xs"
|
24
|
+
/>
|
25
|
+
<span>XSmall</span>
|
26
|
+
</Flex>
|
27
|
+
<Flex
|
28
|
+
align="center"
|
29
|
+
marginTop="md"
|
30
|
+
>
|
31
|
+
<IconButton
|
32
|
+
{...props}
|
33
|
+
size="1x"
|
34
|
+
/>
|
35
|
+
<span>1x</span>
|
36
|
+
</Flex>
|
37
|
+
<Flex align="center">
|
38
|
+
<IconButton
|
39
|
+
{...props}
|
40
|
+
size="2x"
|
41
|
+
/>
|
42
|
+
<span>2x</span>
|
43
|
+
</Flex>
|
44
|
+
<Flex align="center">
|
45
|
+
<IconButton
|
46
|
+
{...props}
|
47
|
+
size="3x"
|
48
|
+
/>
|
49
|
+
<span>3x</span>
|
50
|
+
</Flex>
|
51
|
+
<Flex align="center">
|
52
|
+
<IconButton
|
53
|
+
{...props}
|
54
|
+
size="4x"
|
55
|
+
/>
|
56
|
+
<span>4x</span>
|
57
|
+
</Flex>
|
58
|
+
</div>
|
59
|
+
)
|
60
|
+
|
61
|
+
export default IconButtonSizes
|
@@ -0,0 +1,39 @@
|
|
1
|
+
import { ensureAccessible, renderKit } from '../utilities/test-utils'
|
2
|
+
|
3
|
+
import { IconButton } from 'playbook-ui'
|
4
|
+
|
5
|
+
const props = {
|
6
|
+
data: { testid: 'default', icon: 'plus' }
|
7
|
+
}
|
8
|
+
|
9
|
+
test('default test', () => {
|
10
|
+
const kit = renderKit(IconButton, props)
|
11
|
+
|
12
|
+
expect(kit).toBeInTheDocument()
|
13
|
+
expect(kit).toHaveClass('pb_icon_button_kit_default')
|
14
|
+
|
15
|
+
const iconElement = kit.querySelector('.icon_button_icon')
|
16
|
+
expect(iconElement).toBeInTheDocument()
|
17
|
+
})
|
18
|
+
|
19
|
+
it("should be accessible", async () => {
|
20
|
+
ensureAccessible(IconButton, props)
|
21
|
+
})
|
22
|
+
|
23
|
+
test('passes link variant prop', () => {
|
24
|
+
const kit = renderKit(IconButton, { ...props, variant: "link" })
|
25
|
+
expect(kit).toBeInTheDocument()
|
26
|
+
expect(kit).toHaveClass('pb_icon_button_kit_link')
|
27
|
+
})
|
28
|
+
|
29
|
+
test('should set button type to "submit" when htmlType prop is passed', () => {
|
30
|
+
const kit = renderKit(IconButton, { ...props, htmlType: 'submit' })
|
31
|
+
const buttonElement = kit.querySelector('button')
|
32
|
+
expect(buttonElement).toHaveAttribute('type', 'submit')
|
33
|
+
})
|
34
|
+
|
35
|
+
test('passes custom classname', () => {
|
36
|
+
const kit = renderKit(IconButton, { ...props, className: "extra_class" })
|
37
|
+
expect(kit).toBeInTheDocument()
|
38
|
+
expect(kit).toHaveClass('pb_icon_button_kit_default extra_class')
|
39
|
+
})
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import React, { useState, useEffect, useRef } from "react";
|
1
|
+
import React, { useState, useEffect, useRef, forwardRef } from "react";
|
2
2
|
import classnames from "classnames";
|
3
3
|
import { globalProps, GlobalProps } from "../utilities/globalProps";
|
4
4
|
import {
|
@@ -23,10 +23,18 @@ import {
|
|
23
23
|
getExpandedItems,
|
24
24
|
} from "./_helper_functions";
|
25
25
|
|
26
|
+
interface MultiLevelSelectComponent
|
27
|
+
extends React.ForwardRefExoticComponent<
|
28
|
+
MultiLevelSelectProps & React.RefAttributes<HTMLInputElement>
|
29
|
+
> {
|
30
|
+
Options: typeof MultiLevelSelectOptions;
|
31
|
+
}
|
32
|
+
|
26
33
|
type MultiLevelSelectProps = {
|
27
34
|
aria?: { [key: string]: string }
|
28
35
|
className?: string
|
29
36
|
data?: { [key: string]: string }
|
37
|
+
disabled?: boolean
|
30
38
|
htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
|
31
39
|
id?: string
|
32
40
|
inputDisplay?: "pills" | "none"
|
@@ -34,17 +42,20 @@ type MultiLevelSelectProps = {
|
|
34
42
|
name?: string
|
35
43
|
returnAllSelected?: boolean
|
36
44
|
treeData?: { [key: string]: string; }[] | any
|
45
|
+
onChange?: (event: { target: { name?: string; value: any } }) => void
|
37
46
|
onSelect?: (prop: { [key: string]: any }) => void
|
38
47
|
selectedIds?: string[] | any
|
39
48
|
variant?: "multi" | "single"
|
49
|
+
wrapped?: boolean
|
40
50
|
pillColor?: "primary" | "neutral" | "success" | "warning" | "error" | "info" | "data_1" | "data_2" | "data_3" | "data_4" | "data_5" | "data_6" | "data_7" | "data_8" | "windows" | "siding" | "roofing" | "doors" | "gutters" | "solar" | "insulation" | "accessories",
|
41
51
|
} & GlobalProps
|
42
52
|
|
43
|
-
const MultiLevelSelect = (props
|
53
|
+
const MultiLevelSelect = forwardRef<HTMLInputElement, MultiLevelSelectProps>((props) => {
|
44
54
|
const {
|
45
55
|
aria = {},
|
46
56
|
className,
|
47
57
|
data = {},
|
58
|
+
disabled = false,
|
48
59
|
htmlOptions = {},
|
49
60
|
id,
|
50
61
|
inputDisplay = "pills",
|
@@ -52,10 +63,12 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
|
|
52
63
|
name,
|
53
64
|
returnAllSelected = false,
|
54
65
|
treeData,
|
66
|
+
onChange = () => null,
|
55
67
|
onSelect = () => null,
|
56
68
|
selectedIds,
|
57
69
|
variant = "multi",
|
58
70
|
children,
|
71
|
+
wrapped,
|
59
72
|
pillColor = "primary"
|
60
73
|
} = props
|
61
74
|
|
@@ -283,8 +296,10 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
|
|
283
296
|
// Logic for removing items from returnArray or defaultReturn when pills clicked
|
284
297
|
if (returnAllSelected) {
|
285
298
|
onSelect(getCheckedItems(updatedTree));
|
299
|
+
onChange({ target: { name, value: getCheckedItems(updatedTree) } });
|
286
300
|
} else {
|
287
301
|
onSelect(getDefaultCheckedItems(updatedTree));
|
302
|
+
onChange({ target: { name, value: getDefaultCheckedItems(updatedTree) } });
|
288
303
|
}
|
289
304
|
};
|
290
305
|
|
@@ -292,7 +307,8 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
|
|
292
307
|
const handleInputWrapperClick = (e: any) => {
|
293
308
|
if (
|
294
309
|
e.target.id === "multiselect_input" ||
|
295
|
-
e.target.classList.contains("pb_form_pill_tag")
|
310
|
+
e.target.classList.contains("pb_form_pill_tag") ||
|
311
|
+
disabled
|
296
312
|
) {
|
297
313
|
return;
|
298
314
|
}
|
@@ -309,8 +325,10 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
|
|
309
325
|
const updatedTree = changeItem(filtered[0], check);
|
310
326
|
if (returnAllSelected) {
|
311
327
|
onSelect(getCheckedItems(updatedTree));
|
328
|
+
onChange({ target: { name, value: getCheckedItems(updatedTree) } });
|
312
329
|
} else {
|
313
330
|
onSelect(getDefaultCheckedItems(updatedTree));
|
331
|
+
onChange({ target: { name, value: getDefaultCheckedItems(updatedTree) } });
|
314
332
|
}
|
315
333
|
};
|
316
334
|
|
@@ -343,6 +361,7 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
|
|
343
361
|
setIsDropdownClosed(true);
|
344
362
|
|
345
363
|
onSelect(selectedItem);
|
364
|
+
onChange({ target: { name, value: selectedItem } });
|
346
365
|
};
|
347
366
|
|
348
367
|
// Single select: reset the tree state upon typing
|
@@ -384,12 +403,12 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
|
|
384
403
|
// Rendering formattedData to UI based on typeahead
|
385
404
|
const renderNestedOptions = (items: { [key: string]: string; }[] | any ) => {
|
386
405
|
const hasOptionsChild = React.Children.toArray(props.children).some(
|
387
|
-
(child
|
406
|
+
(child) => React.isValidElement(child) && child.type === MultiLevelSelect.Options
|
388
407
|
);
|
389
408
|
|
390
409
|
if (hasOptionsChild) {
|
391
410
|
return React.Children.map(props.children, (child) => {
|
392
|
-
if (child.type === MultiLevelSelect.Options) {
|
411
|
+
if (React.isValidElement(child) && child.type === MultiLevelSelect.Options) {
|
393
412
|
return React.cloneElement(child, { items });
|
394
413
|
}
|
395
414
|
return null;
|
@@ -421,16 +440,17 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
|
|
421
440
|
handledropdownItemClick,
|
422
441
|
filterItem,
|
423
442
|
}}>
|
424
|
-
<div className="wrapper"
|
443
|
+
<div className="wrapper"
|
425
444
|
ref={dropdownRef}
|
426
445
|
>
|
427
|
-
<div className="input_wrapper"
|
446
|
+
<div className="input_wrapper"
|
428
447
|
onClick={handleInputWrapperClick}
|
429
448
|
>
|
430
449
|
<div className="input_inner_container">
|
431
450
|
{variant === "single" && defaultReturn.length !== 0
|
432
451
|
? defaultReturn.map((selectedItem) => (
|
433
452
|
<input
|
453
|
+
disabled={disabled}
|
434
454
|
key={selectedItem.id}
|
435
455
|
name={`${name}[]`}
|
436
456
|
type="hidden"
|
@@ -444,6 +464,7 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
|
|
444
464
|
{returnAllSelected && returnedArray.length !== 0
|
445
465
|
? returnedArray.map((item) => (
|
446
466
|
<input
|
467
|
+
disabled={disabled}
|
447
468
|
key={item.id}
|
448
469
|
name={`${name}[]`}
|
449
470
|
type="hidden"
|
@@ -461,6 +482,7 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
|
|
461
482
|
key={index}
|
462
483
|
onClick={(event: any) => handlePillClose(event, item)}
|
463
484
|
text={item.label}
|
485
|
+
wrapped={wrapped}
|
464
486
|
/>
|
465
487
|
))
|
466
488
|
: null}
|
@@ -474,6 +496,7 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
|
|
474
496
|
key={index}
|
475
497
|
onClick={(event: any) => handlePillClose(event, item)}
|
476
498
|
text={item.label}
|
499
|
+
wrapped={wrapped}
|
477
500
|
/>
|
478
501
|
))
|
479
502
|
: null}
|
@@ -489,6 +512,7 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
|
|
489
512
|
)}
|
490
513
|
|
491
514
|
<input
|
515
|
+
disabled={disabled}
|
492
516
|
id="multiselect_input"
|
493
517
|
onChange={(e) => {
|
494
518
|
variant === "single"
|
@@ -537,8 +561,9 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
|
|
537
561
|
</MultiLevelSelectContext.Provider>
|
538
562
|
</div>
|
539
563
|
);
|
540
|
-
};
|
564
|
+
}) as MultiLevelSelectComponent;
|
541
565
|
|
566
|
+
MultiLevelSelect.displayName = "MultiLevelSelect";
|
542
567
|
MultiLevelSelect.Options = MultiLevelSelectOptions;
|
543
568
|
|
544
569
|
export default MultiLevelSelect;
|
@@ -0,0 +1,72 @@
|
|
1
|
+
<% treeData = [{
|
2
|
+
label: "Power Home Remodeling",
|
3
|
+
value: "Power Home Remodeling",
|
4
|
+
id: "100",
|
5
|
+
expanded: true,
|
6
|
+
children: [
|
7
|
+
{
|
8
|
+
label: "People",
|
9
|
+
value: "People",
|
10
|
+
id: "101",
|
11
|
+
expanded: true,
|
12
|
+
children: [
|
13
|
+
{
|
14
|
+
label: "Talent Acquisition",
|
15
|
+
value: "Talent Acquisition",
|
16
|
+
id: "102",
|
17
|
+
},
|
18
|
+
{
|
19
|
+
label: "Business Affairs",
|
20
|
+
value: "Business Affairs",
|
21
|
+
id: "103",
|
22
|
+
children: [
|
23
|
+
{
|
24
|
+
label: "Initiatives",
|
25
|
+
value: "Initiatives",
|
26
|
+
id: "104",
|
27
|
+
},
|
28
|
+
{
|
29
|
+
label: "Learning & Development",
|
30
|
+
value: "Learning & Development",
|
31
|
+
id: "105",
|
32
|
+
},
|
33
|
+
],
|
34
|
+
},
|
35
|
+
{
|
36
|
+
label: "People Experience",
|
37
|
+
value: "People Experience",
|
38
|
+
id: "106",
|
39
|
+
},
|
40
|
+
],
|
41
|
+
},
|
42
|
+
{
|
43
|
+
label: "Contact Center",
|
44
|
+
value: "Contact Center",
|
45
|
+
id: "107",
|
46
|
+
children: [
|
47
|
+
{
|
48
|
+
label: "Appointment Management",
|
49
|
+
value: "Appointment Management",
|
50
|
+
id: "108",
|
51
|
+
},
|
52
|
+
{
|
53
|
+
label: "Customer Service",
|
54
|
+
value: "Customer Service",
|
55
|
+
id: "109",
|
56
|
+
},
|
57
|
+
{
|
58
|
+
label: "Energy",
|
59
|
+
value: "Energy",
|
60
|
+
id: "110",
|
61
|
+
},
|
62
|
+
],
|
63
|
+
},
|
64
|
+
],
|
65
|
+
}] %>
|
66
|
+
|
67
|
+
<%= pb_rails("multi_level_select", props: {
|
68
|
+
disabled: true,
|
69
|
+
id: "multi-level-select-default-rails",
|
70
|
+
name: "my_array",
|
71
|
+
tree_data: treeData
|
72
|
+
}) %>
|
@@ -0,0 +1,91 @@
|
|
1
|
+
import React from "react";
|
2
|
+
import MultiLevelSelect from "../_multi_level_select";
|
3
|
+
|
4
|
+
const treeData = [
|
5
|
+
{
|
6
|
+
label: "Power Home Remodeling",
|
7
|
+
value: "Power Home Remodeling",
|
8
|
+
id: "powerhome1",
|
9
|
+
expanded: true,
|
10
|
+
children: [
|
11
|
+
{
|
12
|
+
label: "People",
|
13
|
+
value: "People",
|
14
|
+
id: "people1",
|
15
|
+
expanded: true,
|
16
|
+
children: [
|
17
|
+
{
|
18
|
+
label: "Talent Acquisition",
|
19
|
+
value: "Talent Acquisition",
|
20
|
+
id: "talent1",
|
21
|
+
},
|
22
|
+
{
|
23
|
+
label: "Business Affairs",
|
24
|
+
value: "Business Affairs",
|
25
|
+
id: "business1",
|
26
|
+
children: [
|
27
|
+
{
|
28
|
+
label: "Initiatives",
|
29
|
+
value: "Initiatives",
|
30
|
+
id: "initiative1",
|
31
|
+
},
|
32
|
+
{
|
33
|
+
label: "Learning & Development",
|
34
|
+
value: "Learning & Development",
|
35
|
+
id: "development1",
|
36
|
+
},
|
37
|
+
],
|
38
|
+
},
|
39
|
+
{
|
40
|
+
label: "People Experience",
|
41
|
+
value: "People Experience",
|
42
|
+
id: "experience1",
|
43
|
+
},
|
44
|
+
],
|
45
|
+
},
|
46
|
+
{
|
47
|
+
label: "Contact Center",
|
48
|
+
value: "Contact Center",
|
49
|
+
id: "contact1",
|
50
|
+
children: [
|
51
|
+
{
|
52
|
+
label: "Appointment Management",
|
53
|
+
value: "Appointment Management",
|
54
|
+
id: "appointment1",
|
55
|
+
},
|
56
|
+
{
|
57
|
+
label: "Customer Service",
|
58
|
+
value: "Customer Service",
|
59
|
+
id: "customer1",
|
60
|
+
},
|
61
|
+
{
|
62
|
+
label: "Energy",
|
63
|
+
value: "Energy",
|
64
|
+
id: "energy1",
|
65
|
+
},
|
66
|
+
],
|
67
|
+
},
|
68
|
+
],
|
69
|
+
},
|
70
|
+
];
|
71
|
+
|
72
|
+
const MultiLevelSelectDisabled = (props) => {
|
73
|
+
return (
|
74
|
+
<>
|
75
|
+
<MultiLevelSelect
|
76
|
+
disabled
|
77
|
+
id='multiselect-default'
|
78
|
+
onSelect={(selectedNodes) =>
|
79
|
+
console.log(
|
80
|
+
"Selected Items",
|
81
|
+
selectedNodes
|
82
|
+
)
|
83
|
+
}
|
84
|
+
treeData={treeData}
|
85
|
+
{...props}
|
86
|
+
/>
|
87
|
+
</>
|
88
|
+
)
|
89
|
+
};
|
90
|
+
|
91
|
+
export default MultiLevelSelectDisabled
|
@@ -0,0 +1,91 @@
|
|
1
|
+
import React from "react"
|
2
|
+
import MultiLevelSelect from "../_multi_level_select"
|
3
|
+
import { useForm } from "react-hook-form"
|
4
|
+
|
5
|
+
const treeData = [
|
6
|
+
{
|
7
|
+
label: "Power Home Remodeling",
|
8
|
+
value: "Power Home Remodeling",
|
9
|
+
id: "powerhome1",
|
10
|
+
expanded: true,
|
11
|
+
children: [
|
12
|
+
{
|
13
|
+
label: "People",
|
14
|
+
value: "People",
|
15
|
+
id: "people1",
|
16
|
+
expanded: true,
|
17
|
+
children: [
|
18
|
+
{
|
19
|
+
label: "Talent Acquisition",
|
20
|
+
value: "Talent Acquisition",
|
21
|
+
id: "talent1",
|
22
|
+
},
|
23
|
+
{
|
24
|
+
label: "Business Affairs",
|
25
|
+
value: "Business Affairs",
|
26
|
+
id: "business1",
|
27
|
+
children: [
|
28
|
+
{
|
29
|
+
label: "Initiatives",
|
30
|
+
value: "Initiatives",
|
31
|
+
id: "initiative1",
|
32
|
+
},
|
33
|
+
{
|
34
|
+
label: "Learning & Development",
|
35
|
+
value: "Learning & Development",
|
36
|
+
id: "development1",
|
37
|
+
},
|
38
|
+
],
|
39
|
+
},
|
40
|
+
{
|
41
|
+
label: "People Experience",
|
42
|
+
value: "People Experience",
|
43
|
+
id: "experience1",
|
44
|
+
},
|
45
|
+
],
|
46
|
+
},
|
47
|
+
{
|
48
|
+
label: "Contact Center",
|
49
|
+
value: "Contact Center",
|
50
|
+
id: "contact1",
|
51
|
+
children: [
|
52
|
+
{
|
53
|
+
label: "Appointment Management",
|
54
|
+
value: "Appointment Management",
|
55
|
+
id: "appointment1",
|
56
|
+
},
|
57
|
+
{
|
58
|
+
label: "Customer Service",
|
59
|
+
value: "Customer Service",
|
60
|
+
id: "customer1",
|
61
|
+
},
|
62
|
+
{
|
63
|
+
label: "Energy",
|
64
|
+
value: "Energy",
|
65
|
+
id: "energy1",
|
66
|
+
},
|
67
|
+
],
|
68
|
+
},
|
69
|
+
],
|
70
|
+
},
|
71
|
+
]
|
72
|
+
|
73
|
+
const MultiLevelSelectReactHook = (props) => {
|
74
|
+
const { register, watch } = useForm()
|
75
|
+
const selectedItems = watch("departments")
|
76
|
+
selectedItems && console.log("Selected Items", selectedItems)
|
77
|
+
|
78
|
+
return (
|
79
|
+
<div>
|
80
|
+
<MultiLevelSelect
|
81
|
+
id="multiselect-default"
|
82
|
+
marginBottom="md"
|
83
|
+
treeData={treeData}
|
84
|
+
{...register("departments")}
|
85
|
+
{...props}
|
86
|
+
/>
|
87
|
+
</div>
|
88
|
+
)
|
89
|
+
}
|
90
|
+
|
91
|
+
export default MultiLevelSelectReactHook
|
@@ -0,0 +1 @@
|
|
1
|
+
You can pass `react-hook-form` props to the Typeahead kit. Check your console to see the full data selected from this example.
|
@@ -8,9 +8,11 @@ examples:
|
|
8
8
|
- multi_level_select_with_form: With Form
|
9
9
|
- multi_level_select_color: With Pills (Custom Color)
|
10
10
|
- multi_level_select_reset: Reset Selection
|
11
|
+
- multi_level_select_disabled: Disabled
|
11
12
|
|
12
13
|
react:
|
13
14
|
- multi_level_select_default: Default
|
15
|
+
- multi_level_select_react_hook: React Hook
|
14
16
|
- multi_level_select_single: Single Select
|
15
17
|
- multi_level_select_single_children_only: Single Select w/ Hidden Radios
|
16
18
|
- multi_level_select_return_all_selected: Return All Selected
|
@@ -18,4 +20,4 @@ examples:
|
|
18
20
|
- multi_level_select_color: With Pills (Custom Color)
|
19
21
|
- multi_level_select_with_children: Checkboxes With Children
|
20
22
|
- multi_level_select_with_children_with_radios: Single Select With Children
|
21
|
-
|
23
|
+
- multi_level_select_disabled: Disabled
|
@@ -6,3 +6,5 @@ export { default as MultiLevelSelectSelectedIdsReact } from "./_multi_level_sele
|
|
6
6
|
export { default as MultiLevelSelectColor } from './_multi_level_select_color.jsx'
|
7
7
|
export { default as MultiLevelSelectWithChildren } from './_multi_level_select_with_children.jsx'
|
8
8
|
export { default as MultiLevelSelectWithChildrenWithRadios } from './_multi_level_select_with_children_with_radios.jsx'
|
9
|
+
export { default as MultiLevelSelectDisabled } from './_multi_level_select_disabled.jsx'
|
10
|
+
export { default as MultiLevelSelectReactHook } from './_multi_level_select_react_hook.jsx'
|
@@ -22,6 +22,10 @@ module Playbook
|
|
22
22
|
prop :pill_color, type: Playbook::Props::Enum,
|
23
23
|
values: %w[primary neutral success warning error info data_1 data_2 data_3 data_4 data_5 data_6 data_7 data_8 windows siding roofing doors gutters solar insulation accessories],
|
24
24
|
default: "primary"
|
25
|
+
prop :wrapped, type: Playbook::Props::Boolean,
|
26
|
+
default: false
|
27
|
+
prop :disabled, type: Playbook::Props::Boolean,
|
28
|
+
default: false
|
25
29
|
|
26
30
|
def classname
|
27
31
|
generate_classname("pb_multi_level_select")
|
@@ -29,6 +33,7 @@ module Playbook
|
|
29
33
|
|
30
34
|
def multi_level_select_options
|
31
35
|
{
|
36
|
+
disabled: disabled,
|
32
37
|
id: id,
|
33
38
|
inputDisplay: input_display,
|
34
39
|
name: name,
|
@@ -38,6 +43,7 @@ module Playbook
|
|
38
43
|
input_name: input_name,
|
39
44
|
variant: variant,
|
40
45
|
pillColor: pill_color,
|
46
|
+
wrapped: wrapped,
|
41
47
|
}
|
42
48
|
end
|
43
49
|
end
|
@@ -69,4 +69,17 @@ $overlay_colors: (
|
|
69
69
|
pointer-events: none;
|
70
70
|
z-index: 1;
|
71
71
|
}
|
72
|
+
|
73
|
+
&.overlay-hide-scrollbar {
|
74
|
+
& [class*="overflow_x_auto"],
|
75
|
+
& [class*="overflow_y_auto"],
|
76
|
+
& [class*="overflow_auto"] {
|
77
|
+
&::-webkit-scrollbar {
|
78
|
+
display: none !important;
|
79
|
+
}
|
80
|
+
|
81
|
+
-ms-overflow-style: none !important;
|
82
|
+
scrollbar-width: none !important;
|
83
|
+
}
|
84
|
+
}
|
72
85
|
}
|
@@ -8,8 +8,10 @@ import OverlayToken from './subcomponents/_overlay_token'
|
|
8
8
|
export type OverlayChildrenProps = {
|
9
9
|
children: React.ReactNode[] | React.ReactNode,
|
10
10
|
color: "card_light" | "bg_light" | "card_dark" | "bg_dark",
|
11
|
+
dynamic?: boolean,
|
11
12
|
position: string,
|
12
13
|
size: string,
|
14
|
+
scrollBarNone?: boolean,
|
13
15
|
}
|
14
16
|
|
15
17
|
type OverlayProps = {
|
@@ -18,9 +20,12 @@ type OverlayProps = {
|
|
18
20
|
children: React.ReactNode[] | React.ReactNode,
|
19
21
|
color: "card_light" | "bg_light" | "card_dark" | "bg_dark",
|
20
22
|
data?: { [key: string]: string },
|
23
|
+
dynamic?: false,
|
21
24
|
htmlOptions?: { [key: string]: string | number | boolean | (() => void) },
|
22
25
|
id?: string,
|
23
26
|
layout: { [key: string]: string },
|
27
|
+
scrollBarNone?: boolean,
|
28
|
+
|
24
29
|
}
|
25
30
|
|
26
31
|
const Overlay = (props: OverlayProps) => {
|
@@ -30,14 +35,16 @@ const Overlay = (props: OverlayProps) => {
|
|
30
35
|
children,
|
31
36
|
color = "card_light",
|
32
37
|
data = {},
|
38
|
+
dynamic = false,
|
33
39
|
htmlOptions = {},
|
34
40
|
id,
|
35
41
|
layout = { "bottom": "full" },
|
42
|
+
scrollBarNone = false,
|
36
43
|
} = props
|
37
44
|
|
38
45
|
const ariaProps = buildAriaProps(aria)
|
39
46
|
const dataProps = buildDataProps(data)
|
40
|
-
const classes = classnames(buildCss('pb_overlay'), globalProps(props), className)
|
47
|
+
const classes = classnames(buildCss('pb_overlay'), { 'overlay-hide-scrollbar': scrollBarNone }, globalProps(props), className )
|
41
48
|
const htmlProps = buildHtmlProps(htmlOptions)
|
42
49
|
const dynamicInlineProps = globalInlineProps(props)
|
43
50
|
|
@@ -65,11 +72,14 @@ const Overlay = (props: OverlayProps) => {
|
|
65
72
|
children,
|
66
73
|
color,
|
67
74
|
position: getPosition(),
|
75
|
+
scrollBarNone,
|
68
76
|
size: getSize()
|
69
77
|
}) : OverlayToken({
|
70
78
|
children,
|
71
79
|
color,
|
80
|
+
dynamic: dynamic,
|
72
81
|
position: getPosition(),
|
82
|
+
scrollBarNone,
|
73
83
|
size: getSize()
|
74
84
|
})
|
75
85
|
}
|