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.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_bar_graph/_bar_graph.tsx +1 -1
  3. data/app/pb_kits/playbook/pb_circle_chart/_circle_chart.tsx +1 -1
  4. data/app/pb_kits/playbook/pb_draggable/_draggable.scss +115 -5
  5. data/app/pb_kits/playbook/pb_draggable/_draggable.tsx +6 -4
  6. data/app/pb_kits/playbook/pb_draggable/context/index.tsx +35 -9
  7. data/app/pb_kits/playbook/pb_draggable/context/types.ts +35 -28
  8. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_default.jsx +1 -0
  9. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones.jsx +184 -0
  10. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones.md +5 -0
  11. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones_colors.jsx +97 -0
  12. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_drop_zones_colors.md +1 -0
  13. data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableContainer.tsx +11 -2
  14. data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableItem.tsx +65 -6
  15. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.html.erb +3 -0
  16. data/app/pb_kits/playbook/pb_drawer/docs/example.yml +1 -0
  17. data/app/pb_kits/playbook/pb_filter/Filter/SortMenu.tsx +2 -1
  18. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.scss +2 -2
  19. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +67 -0
  20. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +67 -0
  21. data/app/pb_kits/playbook/pb_gauge/_gauge.tsx +1 -1
  22. data/app/pb_kits/playbook/pb_icon/_icon.scss +8 -1
  23. data/app/pb_kits/playbook/pb_icon/docs/_icon_color.html.erb +10 -4
  24. data/app/pb_kits/playbook/pb_icon/docs/_icon_color.jsx +49 -24
  25. data/app/pb_kits/playbook/pb_icon_button/_icon_button.tsx +4 -1
  26. data/app/pb_kits/playbook/pb_icon_button/docs/_icon_button_click.jsx +13 -0
  27. data/app/pb_kits/playbook/pb_icon_button/docs/example.yml +1 -0
  28. data/app/pb_kits/playbook/pb_icon_button/docs/index.js +1 -0
  29. data/app/pb_kits/playbook/pb_lightbox/Carousel/Slide.tsx +1 -1
  30. data/app/pb_kits/playbook/pb_lightbox/Carousel/Slides.tsx +1 -1
  31. data/app/pb_kits/playbook/pb_lightbox/Carousel/Thumbnails.tsx +1 -1
  32. data/app/pb_kits/playbook/pb_line_graph/_line_graph.tsx +1 -1
  33. data/app/pb_kits/playbook/pb_multi_level_select/_helper_functions.tsx +5 -1
  34. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.scss +23 -0
  35. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +40 -5
  36. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled.html.erb +1 -1
  37. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options.html.erb +76 -0
  38. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options.jsx +94 -0
  39. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options.md +1 -0
  40. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_default.html.erb +75 -0
  41. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_default.jsx +93 -0
  42. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_default.md +3 -0
  43. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent.html.erb +75 -0
  44. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent.jsx +93 -0
  45. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent.md +3 -0
  46. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent_default.html.erb +74 -0
  47. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent_default.jsx +92 -0
  48. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_disabled_options_parent_default.md +3 -0
  49. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_error.html.erb +72 -0
  50. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_error.jsx +97 -0
  51. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.html.erb +71 -0
  52. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_label.jsx +91 -0
  53. data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +14 -2
  54. data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +6 -0
  55. data/app/pb_kits/playbook/pb_multi_level_select/index.js +105 -0
  56. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.rb +10 -0
  57. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select_options.tsx +1 -0
  58. data/app/pb_kits/playbook/pb_nav/_nav.scss +5 -0
  59. data/app/pb_kits/playbook/pb_treemap_chart/_treemap_chart.tsx +1 -1
  60. data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +4 -0
  61. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +3 -0
  62. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_disabled.html.erb +19 -0
  63. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_disabled.jsx +23 -0
  64. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +2 -0
  65. data/app/pb_kits/playbook/pb_typeahead/docs/index.js +1 -0
  66. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +3 -0
  67. data/app/pb_kits/playbook/pb_user/_user.tsx +78 -13
  68. data/app/pb_kits/playbook/pb_user/docs/_user_font_options.html.erb +22 -0
  69. data/app/pb_kits/playbook/pb_user/docs/_user_font_options.jsx +40 -0
  70. data/app/pb_kits/playbook/pb_user/docs/_user_font_options_rails.md +5 -0
  71. data/app/pb_kits/playbook/pb_user/docs/_user_font_options_react.md +5 -0
  72. data/app/pb_kits/playbook/pb_user/docs/example.yml +2 -0
  73. data/app/pb_kits/playbook/pb_user/docs/index.js +1 -0
  74. data/app/pb_kits/playbook/pb_user/user.html.erb +27 -6
  75. data/app/pb_kits/playbook/pb_user/user.rb +17 -1
  76. data/app/pb_kits/playbook/pb_user/user.test.js +182 -1
  77. data/app/pb_kits/playbook/tokens/_colors.scss +1 -4
  78. data/app/pb_kits/playbook/utilities/object.test.js +139 -1
  79. data/app/pb_kits/playbook/utilities/object.ts +86 -0
  80. data/app/pb_kits/playbook/utilities/text.ts +1 -1
  81. data/dist/chunks/_typeahead-BuTZG1Jn.js +22 -0
  82. data/dist/chunks/_weekday_stacked-oT22q75-.js +45 -0
  83. data/dist/chunks/lazysizes-DHz07jlL.js +1 -0
  84. data/dist/chunks/{lib-BeKPJYlk.js → lib-Co5y3V4K.js} +2 -2
  85. data/dist/chunks/{pb_form_validation-BvDxpfs-.js → pb_form_validation-DMajaRt3.js} +1 -1
  86. data/dist/chunks/vendor.js +1 -1
  87. data/dist/playbook-doc.js +1 -1
  88. data/dist/playbook-rails-react-bindings.js +1 -1
  89. data/dist/playbook-rails.js +1 -1
  90. data/dist/playbook.css +1 -1
  91. data/lib/playbook/forms/builder/multi_level_select_field.rb +2 -0
  92. data/lib/playbook/version.rb +1 -1
  93. metadata +35 -7
  94. data/dist/chunks/_typeahead-D720juMS.js +0 -22
  95. data/dist/chunks/_weekday_stacked-D_IMHltv.js +0 -45
  96. 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,3 @@
1
+ For the `default` variant, disabling the parent item will automatically disable it's children as well.
2
+
3
+ If you want to be able to disable a parent WITHOUT disabling it's children, use the `returnAllSelected`/`return_all_selected` variant.
@@ -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
- - multi_level_select_disabled: Disabled
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
- - multi_level_select_disabled: Disabled
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,
@@ -118,6 +118,7 @@ const classes = classnames(
118
118
  >
119
119
  <input
120
120
  checked={item.checked}
121
+ disabled={item.disabled}
121
122
  name={item.label}
122
123
  onChange={(e) => {
123
124
  handledropdownItemClick(e, !item.checked);
@@ -42,4 +42,9 @@
42
42
  font-weight: $regular;
43
43
  }
44
44
  }
45
+
46
+ [class*="pb_nav_list_kit_item"],
47
+ [class*="pb_nav_list_item"] {
48
+ &:hover { cursor: pointer; }
49
+ }
45
50
  }