playbook_ui 14.16.0.pre.rc.5 → 14.16.0
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_bar_graph/_bar_graph.tsx +1 -1
- data/app/pb_kits/playbook/pb_circle_chart/_circle_chart.tsx +1 -1
- data/app/pb_kits/playbook/pb_draggable/_draggable.scss +115 -5
- data/app/pb_kits/playbook/pb_draggable/_draggable.tsx +6 -4
- data/app/pb_kits/playbook/pb_draggable/context/index.tsx +35 -9
- data/app/pb_kits/playbook/pb_draggable/context/types.ts +35 -28
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_default.jsx +1 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones.jsx +184 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones.md +5 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones_colors.jsx +97 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones_colors.md +1 -0
- data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableContainer.tsx +11 -2
- data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableItem.tsx +65 -6
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.html.erb +3 -0
- data/app/pb_kits/playbook/pb_drawer/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_filter/Filter/SortMenu.tsx +2 -1
- data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.scss +2 -2
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +67 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +67 -0
- data/app/pb_kits/playbook/pb_gauge/_gauge.tsx +1 -1
- data/app/pb_kits/playbook/pb_icon/_icon.scss +8 -1
- data/app/pb_kits/playbook/pb_icon/docs/_icon_color.html.erb +10 -4
- data/app/pb_kits/playbook/pb_icon/docs/_icon_color.jsx +49 -24
- data/app/pb_kits/playbook/pb_icon_button/_icon_button.tsx +4 -1
- data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_click.jsx +13 -0
- data/app/pb_kits/playbook/pb_icon_button/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_icon_button/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_lightbox/Carousel/Slide.tsx +1 -1
- data/app/pb_kits/playbook/pb_lightbox/Carousel/Slides.tsx +1 -1
- data/app/pb_kits/playbook/pb_lightbox/Carousel/Thumbnails.tsx +1 -1
- data/app/pb_kits/playbook/pb_line_graph/_line_graph.tsx +1 -1
- data/app/pb_kits/playbook/pb_multi_level_select/_helper_functions.tsx +5 -1
- data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.scss +23 -0
- data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +40 -5
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.html.erb +1 -1
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options.html.erb +76 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options.jsx +94 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options.md +1 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_default.html.erb +75 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_default.jsx +93 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_default.md +3 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent.html.erb +75 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent.jsx +93 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent.md +3 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent_default.html.erb +74 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent_default.jsx +92 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent_default.md +3 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_error.html.erb +72 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_error.jsx +97 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.html.erb +71 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.jsx +91 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +14 -2
- data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +6 -0
- data/app/pb_kits/playbook/pb_multi_level_select/index.js +105 -0
- data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.rb +10 -0
- data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select_options.tsx +1 -0
- data/app/pb_kits/playbook/pb_nav/_nav.scss +5 -0
- data/app/pb_kits/playbook/pb_treemap_chart/_treemap_chart.tsx +1 -1
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +4 -0
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +3 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_disabled.html.erb +19 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_disabled.jsx +23 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_typeahead/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +3 -0
- data/app/pb_kits/playbook/pb_user/_user.tsx +78 -13
- data/app/pb_kits/playbook/pb_user/docs/_user_font_options.html.erb +22 -0
- data/app/pb_kits/playbook/pb_user/docs/_user_font_options.jsx +40 -0
- data/app/pb_kits/playbook/pb_user/docs/_user_font_options_rails.md +5 -0
- data/app/pb_kits/playbook/pb_user/docs/_user_font_options_react.md +5 -0
- data/app/pb_kits/playbook/pb_user/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_user/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_user/user.html.erb +27 -6
- data/app/pb_kits/playbook/pb_user/user.rb +17 -1
- data/app/pb_kits/playbook/pb_user/user.test.js +182 -1
- data/app/pb_kits/playbook/tokens/_colors.scss +1 -4
- data/app/pb_kits/playbook/utilities/object.test.js +139 -1
- data/app/pb_kits/playbook/utilities/object.ts +86 -0
- data/app/pb_kits/playbook/utilities/text.ts +1 -1
- data/dist/chunks/_typeahead-BuTZG1Jn.js +22 -0
- data/dist/chunks/_weekday_stacked-oT22q75-.js +45 -0
- data/dist/chunks/lazysizes-DHz07jlL.js +1 -0
- data/dist/chunks/{lib-BeKPJYlk.js → lib-Co5y3V4K.js} +2 -2
- data/dist/chunks/{pb_form_validation-BvDxpfs-.js → pb_form_validation-DMajaRt3.js} +1 -1
- data/dist/chunks/vendor.js +1 -1
- 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/multi_level_select_field.rb +2 -0
- data/lib/playbook/version.rb +1 -1
- metadata +35 -7
- data/dist/chunks/_typeahead-D720juMS.js +0 -22
- data/dist/chunks/_weekday_stacked-D_IMHltv.js +0 -45
- data/dist/chunks/lazysizes-B7xYodB-.js +0 -1
@@ -0,0 +1,74 @@
|
|
1
|
+
<% treeData = [{
|
2
|
+
label: "Power Home Remodeling",
|
3
|
+
value: "Power Home Remodeling",
|
4
|
+
id: "powerhome1",
|
5
|
+
expanded: true,
|
6
|
+
children: [
|
7
|
+
{
|
8
|
+
label: "People",
|
9
|
+
value: "People",
|
10
|
+
id: "people1",
|
11
|
+
expanded: true,
|
12
|
+
children: [
|
13
|
+
{
|
14
|
+
label: "Talent Acquisition",
|
15
|
+
value: "Talent Acquisition",
|
16
|
+
id: "talent1",
|
17
|
+
},
|
18
|
+
{
|
19
|
+
label: "Business Affairs",
|
20
|
+
value: "Business Affairs",
|
21
|
+
id: "business1",
|
22
|
+
expanded: true,
|
23
|
+
disabled: true,
|
24
|
+
children: [
|
25
|
+
{
|
26
|
+
label: "Initiatives",
|
27
|
+
value: "Initiatives",
|
28
|
+
id: "initiative1",
|
29
|
+
},
|
30
|
+
{
|
31
|
+
label: "Learning & Development",
|
32
|
+
value: "Learning & Development",
|
33
|
+
id: "development1",
|
34
|
+
},
|
35
|
+
],
|
36
|
+
},
|
37
|
+
{
|
38
|
+
label: "People Experience",
|
39
|
+
value: "People Experience",
|
40
|
+
id: "experience1",
|
41
|
+
},
|
42
|
+
],
|
43
|
+
},
|
44
|
+
{
|
45
|
+
label: "Contact Center",
|
46
|
+
value: "Contact Center",
|
47
|
+
id: "contact1",
|
48
|
+
children: [
|
49
|
+
{
|
50
|
+
label: "Appointment Management",
|
51
|
+
value: "Appointment Management",
|
52
|
+
id: "appointment1",
|
53
|
+
},
|
54
|
+
{
|
55
|
+
label: "Customer Service",
|
56
|
+
value: "Customer Service",
|
57
|
+
id: "customer1",
|
58
|
+
},
|
59
|
+
{
|
60
|
+
label: "Energy",
|
61
|
+
value: "Energy",
|
62
|
+
id: "energy1",
|
63
|
+
},
|
64
|
+
],
|
65
|
+
},
|
66
|
+
],
|
67
|
+
}] %>
|
68
|
+
|
69
|
+
|
70
|
+
<%= pb_rails("multi_level_select", props: {
|
71
|
+
id: "mls-disabled-options-parent-default-rails",
|
72
|
+
name: "disabled_options_parent_default",
|
73
|
+
tree_data: treeData
|
74
|
+
}) %>
|
@@ -0,0 +1,92 @@
|
|
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
|
+
expanded: true,
|
27
|
+
disabled: true,
|
28
|
+
children: [
|
29
|
+
{
|
30
|
+
label: "Initiatives",
|
31
|
+
value: "Initiatives",
|
32
|
+
id: "initiative1",
|
33
|
+
},
|
34
|
+
{
|
35
|
+
label: "Learning & Development",
|
36
|
+
value: "Learning & Development",
|
37
|
+
id: "development1",
|
38
|
+
},
|
39
|
+
],
|
40
|
+
},
|
41
|
+
{
|
42
|
+
label: "People Experience",
|
43
|
+
value: "People Experience",
|
44
|
+
id: "experience1",
|
45
|
+
},
|
46
|
+
],
|
47
|
+
},
|
48
|
+
{
|
49
|
+
label: "Contact Center",
|
50
|
+
value: "Contact Center",
|
51
|
+
id: "contact1",
|
52
|
+
children: [
|
53
|
+
{
|
54
|
+
label: "Appointment Management",
|
55
|
+
value: "Appointment Management",
|
56
|
+
id: "appointment1",
|
57
|
+
},
|
58
|
+
{
|
59
|
+
label: "Customer Service",
|
60
|
+
value: "Customer Service",
|
61
|
+
id: "customer1",
|
62
|
+
},
|
63
|
+
{
|
64
|
+
label: "Energy",
|
65
|
+
value: "Energy",
|
66
|
+
id: "energy1",
|
67
|
+
},
|
68
|
+
],
|
69
|
+
},
|
70
|
+
],
|
71
|
+
},
|
72
|
+
];
|
73
|
+
|
74
|
+
const MultiLevelSelectDisabledOptionsParentDefault = (props) => {
|
75
|
+
return (
|
76
|
+
<div>
|
77
|
+
<MultiLevelSelect
|
78
|
+
id='multiselect-disabled-options-parent-default'
|
79
|
+
onSelect={(selectedNodes) =>
|
80
|
+
console.log(
|
81
|
+
"Selected Items",
|
82
|
+
selectedNodes
|
83
|
+
)
|
84
|
+
}
|
85
|
+
treeData={treeData}
|
86
|
+
{...props}
|
87
|
+
/>
|
88
|
+
</div>
|
89
|
+
)
|
90
|
+
};
|
91
|
+
|
92
|
+
export default MultiLevelSelectDisabledOptionsParentDefault;
|
@@ -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
|
+
error: "Please make a valid selection",
|
69
|
+
id: "multi-level-select-error-rails",
|
70
|
+
name: "my_array",
|
71
|
+
tree_data: treeData
|
72
|
+
}) %>
|
@@ -0,0 +1,97 @@
|
|
1
|
+
import React, { useState, useEffect } 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 MultiLevelSelectError = (props) => {
|
73
|
+
const [selectedItems, setSelectedItems] = useState([]);
|
74
|
+
const [errorState, setErrorState] = useState("Please make a valid selection");
|
75
|
+
|
76
|
+
useEffect(() => {
|
77
|
+
if (selectedItems.length === 0) {
|
78
|
+
setErrorState("Please make a valid selection");
|
79
|
+
} else {
|
80
|
+
setErrorState(null);
|
81
|
+
}
|
82
|
+
}, [selectedItems]);
|
83
|
+
|
84
|
+
return (
|
85
|
+
<div>
|
86
|
+
<MultiLevelSelect
|
87
|
+
error={errorState}
|
88
|
+
id="multiselect-error"
|
89
|
+
onSelect={(selectedNodes) => setSelectedItems(selectedNodes)}
|
90
|
+
treeData={treeData}
|
91
|
+
{...props}
|
92
|
+
/>
|
93
|
+
</div>
|
94
|
+
);
|
95
|
+
};
|
96
|
+
|
97
|
+
export default MultiLevelSelectError;
|
@@ -0,0 +1,71 @@
|
|
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
|
+
id: "multi-level-select-label-rails",
|
69
|
+
label: "Select a department",
|
70
|
+
tree_data: treeData
|
71
|
+
}) %>
|
@@ -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 MultiLevelSelectDefault = (props) => {
|
73
|
+
return (
|
74
|
+
<div>
|
75
|
+
<MultiLevelSelect
|
76
|
+
id='multiselect-label'
|
77
|
+
label="Select a Department"
|
78
|
+
onSelect={(selectedNodes) =>
|
79
|
+
console.log(
|
80
|
+
"Selected Items",
|
81
|
+
selectedNodes
|
82
|
+
)
|
83
|
+
}
|
84
|
+
treeData={treeData}
|
85
|
+
{...props}
|
86
|
+
/>
|
87
|
+
</div>
|
88
|
+
)
|
89
|
+
};
|
90
|
+
|
91
|
+
export default MultiLevelSelectDefault;
|
@@ -8,7 +8,13 @@ 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
|
-
-
|
11
|
+
- multi_level_select_label: With Label
|
12
|
+
- multi_level_select_error: Error
|
13
|
+
- multi_level_select_disabled: Disabled Input
|
14
|
+
- multi_level_select_disabled_options_default: Disabled Options (Default)
|
15
|
+
- multi_level_select_disabled_options: Disabled Options (Return All Selected)
|
16
|
+
- multi_level_select_disabled_options_parent_default: Disabled Parent Option (Default)
|
17
|
+
- multi_level_select_disabled_options_parent: Disabled Parent Option (Return All Selected)
|
12
18
|
|
13
19
|
react:
|
14
20
|
- multi_level_select_default: Default
|
@@ -20,4 +26,10 @@ examples:
|
|
20
26
|
- multi_level_select_color: With Pills (Custom Color)
|
21
27
|
- multi_level_select_with_children: Checkboxes With Children
|
22
28
|
- multi_level_select_with_children_with_radios: Single Select With Children
|
23
|
-
-
|
29
|
+
- multi_level_select_label: With Label
|
30
|
+
- multi_level_select_error: Error
|
31
|
+
- multi_level_select_disabled: Disabled Input
|
32
|
+
- multi_level_select_disabled_options_default: Disabled Options (Default)
|
33
|
+
- multi_level_select_disabled_options: Disabled Options (Return All Selected)
|
34
|
+
- multi_level_select_disabled_options_parent_default: Disabled Parent Option (Default)
|
35
|
+
- multi_level_select_disabled_options_parent: Disabled Parent Option (Return All Selected)
|
@@ -8,3 +8,9 @@ export { default as MultiLevelSelectWithChildren } from './_multi_level_select_w
|
|
8
8
|
export { default as MultiLevelSelectWithChildrenWithRadios } from './_multi_level_select_with_children_with_radios.jsx'
|
9
9
|
export { default as MultiLevelSelectDisabled } from './_multi_level_select_disabled.jsx'
|
10
10
|
export { default as MultiLevelSelectReactHook } from './_multi_level_select_react_hook.jsx'
|
11
|
+
export { default as MultiLevelSelectError } from './_multi_level_select_error.jsx'
|
12
|
+
export { default as MultiLevelSelectDisabledOptions } from './_multi_level_select_disabled_options.jsx'
|
13
|
+
export { default as MultiLevelSelectDisabledOptionsParent } from './_multi_level_select_disabled_options_parent.jsx'
|
14
|
+
export { default as MultiLevelSelectDisabledOptionsParentDefault } from './_multi_level_select_disabled_options_parent_default.jsx'
|
15
|
+
export { default as MultiLevelSelectDisabledOptionsDefault } from './_multi_level_select_disabled_options_default.jsx'
|
16
|
+
export { default as MultiLevelSelectLabel } from './_multi_level_select_label.jsx'
|
@@ -0,0 +1,105 @@
|
|
1
|
+
import PbEnhancedElement from "../pb_enhanced_element";
|
2
|
+
|
3
|
+
const MULTI_LEVEL_SELECT_SELECTOR = "[data-multi_level_select_form]";
|
4
|
+
|
5
|
+
export default class PbMultiLevelSelect extends PbEnhancedElement {
|
6
|
+
static get selector() {
|
7
|
+
return MULTI_LEVEL_SELECT_SELECTOR;
|
8
|
+
}
|
9
|
+
|
10
|
+
get target() {
|
11
|
+
return this.element.querySelector(".pb_body_kit_negative");
|
12
|
+
}
|
13
|
+
|
14
|
+
connect() {
|
15
|
+
this.addEventListeners();
|
16
|
+
this.observeHiddenInputs();
|
17
|
+
this.observeRogueErrorInsideInnerContainer();
|
18
|
+
}
|
19
|
+
|
20
|
+
addEventListeners() {
|
21
|
+
const inputElement = this.element.querySelector("input");
|
22
|
+
|
23
|
+
inputElement.addEventListener("invalid", () => {
|
24
|
+
this.handleErrorLabel(300);
|
25
|
+
});
|
26
|
+
inputElement.addEventListener("blur", () => {
|
27
|
+
this.justBlurred = true;
|
28
|
+
|
29
|
+
setTimeout(() => {
|
30
|
+
this.justBlurred = false;
|
31
|
+
}, 300);
|
32
|
+
});
|
33
|
+
}
|
34
|
+
|
35
|
+
handleErrorLabel(delay) {
|
36
|
+
setTimeout(() => {
|
37
|
+
const errorLabelElement = this.target;
|
38
|
+
const wrapper = this.element.querySelector(".wrapper");
|
39
|
+
|
40
|
+
if (errorLabelElement) {
|
41
|
+
errorLabelElement.remove();
|
42
|
+
if (wrapper) {
|
43
|
+
if (wrapper.querySelector(".pb_body_kit_negative")) {
|
44
|
+
wrapper.querySelector(".pb_body_kit_negative").remove();
|
45
|
+
}
|
46
|
+
wrapper.appendChild(errorLabelElement);
|
47
|
+
}
|
48
|
+
this.element.classList.add("error");
|
49
|
+
} else {
|
50
|
+
this.handleErrorLabel(100);
|
51
|
+
}
|
52
|
+
}, delay);
|
53
|
+
}
|
54
|
+
|
55
|
+
observeHiddenInputs() {
|
56
|
+
const container = this.element.querySelector(".input_inner_container");
|
57
|
+
if (!container) return;
|
58
|
+
|
59
|
+
this.mutationObserver = new MutationObserver(() => {
|
60
|
+
const hiddenInputs = container.querySelectorAll('input[type="hidden"]');
|
61
|
+
if (hiddenInputs.length > 0) {
|
62
|
+
// At least one hidden input exists, so clear the error
|
63
|
+
this.clearError();
|
64
|
+
}
|
65
|
+
});
|
66
|
+
|
67
|
+
this.mutationObserver.observe(container, {
|
68
|
+
childList: true,
|
69
|
+
});
|
70
|
+
}
|
71
|
+
|
72
|
+
observeRogueErrorInsideInnerContainer() {
|
73
|
+
const container = this.element.querySelector(".input_inner_container");
|
74
|
+
|
75
|
+
this.rogueErrorObserver = new MutationObserver((mutations) => {
|
76
|
+
for (const mutation of mutations) {
|
77
|
+
for (const node of mutation.addedNodes) {
|
78
|
+
if (
|
79
|
+
node.nodeType === Node.ELEMENT_NODE &&
|
80
|
+
node.classList.contains("pb_body_kit_negative")
|
81
|
+
) {
|
82
|
+
if (this.justBlurred) {
|
83
|
+
node.remove();
|
84
|
+
}
|
85
|
+
}
|
86
|
+
}
|
87
|
+
}
|
88
|
+
});
|
89
|
+
|
90
|
+
this.rogueErrorObserver.observe(container, {
|
91
|
+
childList: true,
|
92
|
+
subtree: true,
|
93
|
+
});
|
94
|
+
}
|
95
|
+
|
96
|
+
clearError(e) {
|
97
|
+
const errorLabelElement = this.target;
|
98
|
+
|
99
|
+
if (errorLabelElement) {
|
100
|
+
errorLabelElement.remove();
|
101
|
+
this.element.classList.remove("error");
|
102
|
+
this.element.querySelector("input").value = e.detail.value;
|
103
|
+
}
|
104
|
+
}
|
105
|
+
}
|
@@ -26,6 +26,12 @@ module Playbook
|
|
26
26
|
default: false
|
27
27
|
prop :disabled, type: Playbook::Props::Boolean,
|
28
28
|
default: false
|
29
|
+
prop :required, type: Playbook::Props::Boolean,
|
30
|
+
default: false
|
31
|
+
prop :error, type: Playbook::Props::String,
|
32
|
+
default: ""
|
33
|
+
prop :label, type: Playbook::Props::String,
|
34
|
+
default: ""
|
29
35
|
|
30
36
|
def classname
|
31
37
|
generate_classname("pb_multi_level_select")
|
@@ -33,11 +39,15 @@ module Playbook
|
|
33
39
|
|
34
40
|
def multi_level_select_options
|
35
41
|
{
|
42
|
+
data: data,
|
36
43
|
disabled: disabled,
|
44
|
+
error: error,
|
37
45
|
id: id,
|
38
46
|
inputDisplay: input_display,
|
39
47
|
name: name,
|
48
|
+
label: label,
|
40
49
|
treeData: tree_data,
|
50
|
+
required: required,
|
41
51
|
returnAllSelected: return_all_selected,
|
42
52
|
selectedIds: selected_ids,
|
43
53
|
inputName: input_name,
|