playbook_ui 14.5.0.pre.alpha.PBNTR606multilevelselectreset4035 → 14.5.0.pre.alpha.PLAY1486highchartscssdrivenPOC3930

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_bar_graph/_bar_graph.scss +54 -0
  3. data/app/pb_kits/playbook/pb_bar_graph/_bar_graph.tsx +5 -184
  4. data/app/pb_kits/playbook/pb_bar_graph/barGraph.test.js +1 -1
  5. data/app/pb_kits/playbook/pb_circle_chart/_circle_chart.tsx +5 -216
  6. data/app/pb_kits/playbook/pb_circle_chart/circleChart.test.js +1 -1
  7. data/app/pb_kits/playbook/pb_form_pill/_form_pill.tsx +1 -9
  8. data/app/pb_kits/playbook/pb_form_pill/docs/example.yml +0 -2
  9. data/app/pb_kits/playbook/pb_form_pill/docs/index.js +0 -1
  10. data/app/pb_kits/playbook/pb_gantt_chart/_gantt_chart.tsx +3 -64
  11. data/app/pb_kits/playbook/pb_gauge/_gauge.tsx +5 -203
  12. data/app/pb_kits/playbook/pb_gauge/gauge.test.js +1 -1
  13. data/app/pb_kits/playbook/pb_line_graph/_line_graph.tsx +5 -154
  14. data/app/pb_kits/playbook/pb_line_graph/lineGraph.test.js +1 -1
  15. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +227 -211
  16. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_default.jsx +1 -1
  17. data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +0 -4
  18. data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +0 -2
  19. data/app/pb_kits/playbook/pb_treemap_chart/_treemap_chart.tsx +5 -113
  20. data/app/pb_kits/playbook/pb_treemap_chart/treemapChart.test.js +1 -1
  21. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +1 -4
  22. data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.tsx +1 -3
  23. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +1 -3
  24. data/dist/chunks/_typeahead-BywvWGAm.js +22 -0
  25. data/dist/chunks/_weekday_stacked-5OGZKZeo.js +45 -0
  26. data/dist/chunks/lib-DMOmCoAX.js +29 -0
  27. data/dist/chunks/{pb_form_validation-D9zkwt2b.js → pb_form_validation-Dna2I7fw.js} +1 -1
  28. data/dist/chunks/vendor.js +1 -1
  29. data/dist/playbook-doc.js +1 -1
  30. data/dist/playbook-rails-react-bindings.js +1 -1
  31. data/dist/playbook-rails.js +1 -1
  32. data/dist/playbook.css +1 -1
  33. data/lib/playbook/pb_doc_helper.rb +5 -5
  34. data/lib/playbook/version.rb +1 -1
  35. metadata +6 -16
  36. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_truncated_text.html.erb +0 -19
  37. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_truncated_text.jsx +0 -27
  38. data/app/pb_kits/playbook/pb_form_pill/docs/_form_pill_truncated_text.md +0 -1
  39. data/app/pb_kits/playbook/pb_multi_level_select/context/index.tsx +0 -5
  40. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_reset.html.erb +0 -93
  41. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children.jsx +0 -105
  42. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children.md +0 -1
  43. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children_with_radios.jsx +0 -106
  44. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children_with_radios.md +0 -1
  45. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select_options.tsx +0 -149
  46. data/dist/chunks/_typeahead-C9g4qCcE.js +0 -22
  47. data/dist/chunks/_weekday_stacked-Div3Fpd3.js +0 -45
  48. data/dist/chunks/lib-CEpcaI8y.js +0 -29
@@ -45,7 +45,7 @@ module Playbook
45
45
 
46
46
  # rubocop:disable Naming/AccessorMethodName
47
47
  def get_kits
48
- menu = ActiveSupport::ConfigurationFile.parse(Playbook::Engine.root.join("dist/menu.yml"))
48
+ menu = YAML.load_file(Playbook::Engine.root.join("dist/menu.yml"))
49
49
  all_kits = []
50
50
  menu["kits"].each do |kit|
51
51
  kit_name = kit["name"]
@@ -61,7 +61,7 @@ module Playbook
61
61
  end
62
62
 
63
63
  def get_kits_pb_website
64
- menu = ActiveSupport::ConfigurationFile.parse(Rails.root.join("config/menu.yml"))
64
+ menu = YAML.load_file(Rails.root.join("config/menu.yml"))
65
65
  menu["kits"]
66
66
  end
67
67
  # rubocop:enable Naming/AccessorMethodName
@@ -84,9 +84,9 @@ module Playbook
84
84
  def pb_doc_kit_examples(kit, type)
85
85
  example_file = pb_doc_kit_path(kit, "example.yml")
86
86
  if File.exist?(example_file)
87
- ActiveSupport::ConfigurationFile.parse(example_file)
88
- .transform_keys(&:to_sym)
89
- .dig(:examples, type) || []
87
+ examples_list = YAML.load_file(example_file)
88
+ .inject({}) { |item, (k, v)| item[k.to_sym] = v; item }
89
+ examples_list.dig(:examples, type) || []
90
90
  else
91
91
  []
92
92
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Playbook
4
4
  PREVIOUS_VERSION = "14.5.0"
5
- VERSION = "14.5.0.pre.alpha.PBNTR606multilevelselectreset4035"
5
+ VERSION = "14.5.0.pre.alpha.PLAY1486highchartscssdrivenPOC3930"
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: playbook_ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 14.5.0.pre.alpha.PBNTR606multilevelselectreset4035
4
+ version: 14.5.0.pre.alpha.PLAY1486highchartscssdrivenPOC3930
5
5
  platform: ruby
6
6
  authors:
7
7
  - Power UX
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-10-14 00:00:00.000000000 Z
12
+ date: 2024-10-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -1364,9 +1364,6 @@ files:
1364
1364
  - app/pb_kits/playbook/pb_form_pill/docs/_form_pill_size.jsx
1365
1365
  - app/pb_kits/playbook/pb_form_pill/docs/_form_pill_tag.html.erb
1366
1366
  - app/pb_kits/playbook/pb_form_pill/docs/_form_pill_tag.jsx
1367
- - app/pb_kits/playbook/pb_form_pill/docs/_form_pill_truncated_text.html.erb
1368
- - app/pb_kits/playbook/pb_form_pill/docs/_form_pill_truncated_text.jsx
1369
- - app/pb_kits/playbook/pb_form_pill/docs/_form_pill_truncated_text.md
1370
1367
  - app/pb_kits/playbook/pb_form_pill/docs/_form_pill_user.html.erb
1371
1368
  - app/pb_kits/playbook/pb_form_pill/docs/_form_pill_user.jsx
1372
1369
  - app/pb_kits/playbook/pb_form_pill/docs/example.yml
@@ -1796,7 +1793,6 @@ files:
1796
1793
  - app/pb_kits/playbook/pb_multi_level_select/_helper_functions.tsx
1797
1794
  - app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.scss
1798
1795
  - app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx
1799
- - app/pb_kits/playbook/pb_multi_level_select/context/index.tsx
1800
1796
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_color.html.erb
1801
1797
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_color.jsx
1802
1798
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_color_rails.md
@@ -1804,7 +1800,6 @@ files:
1804
1800
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_default.html.erb
1805
1801
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_default.jsx
1806
1802
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_default.md
1807
- - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_reset.html.erb
1808
1803
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_return_all_selected.html.erb
1809
1804
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_return_all_selected.jsx
1810
1805
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_return_all_selected.md
@@ -1818,17 +1813,12 @@ files:
1818
1813
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single_children_only.html.erb
1819
1814
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single_children_only.jsx
1820
1815
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_single_children_only.md
1821
- - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children.jsx
1822
- - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children.md
1823
- - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children_with_radios.jsx
1824
- - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_children_with_radios.md
1825
1816
  - app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_with_form.html.erb
1826
1817
  - app/pb_kits/playbook/pb_multi_level_select/docs/example.yml
1827
1818
  - app/pb_kits/playbook/pb_multi_level_select/docs/index.js
1828
1819
  - app/pb_kits/playbook/pb_multi_level_select/multi_level_select.html.erb
1829
1820
  - app/pb_kits/playbook/pb_multi_level_select/multi_level_select.rb
1830
1821
  - app/pb_kits/playbook/pb_multi_level_select/multi_level_select.test.jsx
1831
- - app/pb_kits/playbook/pb_multi_level_select/multi_level_select_options.tsx
1832
1822
  - app/pb_kits/playbook/pb_multiple_users/_multiple_users.scss
1833
1823
  - app/pb_kits/playbook/pb_multiple_users/_multiple_users.tsx
1834
1824
  - app/pb_kits/playbook/pb_multiple_users/docs/_description.md
@@ -3080,11 +3070,11 @@ files:
3080
3070
  - app/pb_kits/playbook/utilities/test/globalProps/truncate.test.js
3081
3071
  - app/pb_kits/playbook/utilities/text.ts
3082
3072
  - app/pb_kits/playbook/utilities/validEmojiChecker.ts
3083
- - dist/chunks/_typeahead-C9g4qCcE.js
3084
- - dist/chunks/_weekday_stacked-Div3Fpd3.js
3073
+ - dist/chunks/_typeahead-BywvWGAm.js
3074
+ - dist/chunks/_weekday_stacked-5OGZKZeo.js
3085
3075
  - dist/chunks/lazysizes-B7xYodB-.js
3086
- - dist/chunks/lib-CEpcaI8y.js
3087
- - dist/chunks/pb_form_validation-D9zkwt2b.js
3076
+ - dist/chunks/lib-DMOmCoAX.js
3077
+ - dist/chunks/pb_form_validation-Dna2I7fw.js
3088
3078
  - dist/chunks/vendor.js
3089
3079
  - dist/menu.yml
3090
3080
  - dist/playbook-doc.js
@@ -1,19 +0,0 @@
1
- <%
2
- names = [
3
- { label: 'Alexander Nathaniel Montgomery', value: 'Alexander Nathaniel Montgomery' },
4
- { label: 'Isabella Anastasia Wellington', value: 'Isabella Anastasia Wellington' },
5
- { label: 'Christopher Maximilian Harrington', value: 'Christopher Maximilian Harrington' },
6
- { label: 'Elizabeth Seraphina Kensington', value: 'Elizabeth Seraphina Kensington' },
7
- { label: 'Theodore Jonathan Abernathy', value: 'Theodore Jonathan Abernathy' },
8
- ]
9
- %>
10
-
11
- <%= pb_rails("typeahead", props: {
12
- html_options: { style: { maxWidth: "240px" }},
13
- id: "typeahead-form-pill",
14
- is_multi: true,
15
- options: names,
16
- label: "Names",
17
- pills: true,
18
- truncate: 1,
19
- }) %>
@@ -1,27 +0,0 @@
1
- import React from 'react'
2
- import Typeahead from '../../pb_typeahead/_typeahead'
3
-
4
- const names = [
5
- { label: 'Alexander Nathaniel Montgomery', value: 'Alexander Nathaniel Montgomery' },
6
- { label: 'Isabella Anastasia Wellington', value: 'Isabella Anastasia Wellington' },
7
- { label: 'Christopher Maximilian Harrington', value: 'Christopher Maximilian Harrington' },
8
- { label: 'Elizabeth Seraphina Kensington', value: 'Elizabeth Seraphina Kensington' },
9
- { label: 'Theodore Jonathan Abernathy', value: 'Theodore Jonathan Abernathy' },
10
- ]
11
-
12
- const FormPillTruncatedText = (props) => {
13
- return (
14
- <>
15
- <Typeahead
16
- htmlOptions={{ style: { maxWidth: "240px" }}}
17
- isMulti
18
- label="Names"
19
- options={names}
20
- truncate={1}
21
- {...props}
22
- />
23
- </>
24
- )
25
- }
26
-
27
- export default FormPillTruncatedText
@@ -1 +0,0 @@
1
- For pills with longer text, the `truncate` global prop can be used to truncate the label within each Form Pill. See [here](https://playbook.powerapp.cloud/visual_guidelines/truncate) for more information on the truncate global prop.
@@ -1,5 +0,0 @@
1
- import { createContext } from "react";
2
-
3
- const MultiLevelSelectContext = createContext<any>({});
4
-
5
- export default MultiLevelSelectContext;
@@ -1,93 +0,0 @@
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-reset-example",
69
- name: "my_array",
70
- tree_data: treeData,
71
- return_all_selected: true
72
- }) %>
73
-
74
- <%= pb_rails("button", props: { text: "Reset", margin_top: "lg", id:"multilevelselect-reset-button" }) %>
75
-
76
-
77
- <script>
78
- window.addEventListener('DOMContentLoaded', () => {
79
- const exampleResetButton = document.querySelector("#multilevelselect-reset-button");
80
-
81
- exampleResetButton.addEventListener("click", () => {
82
- clearMultiLevelSelectById('multi-level-select-reset-example');
83
- });
84
- function clearMultiLevelSelectById(id) {
85
- const clearFunction = window[`clearMultiLevelSelect_${id}`];
86
- if (clearFunction) {
87
- clearFunction();
88
- } else {
89
- console.warn(`No clear function found for MultiLevelSelect with id: ${id}`);
90
- }
91
- }
92
- })
93
- </script>
@@ -1,105 +0,0 @@
1
- import React from "react";
2
- import MultiLevelSelect from "../_multi_level_select";
3
- import Badge from "../../pb_badge/_badge";
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
- status: "active",
18
- children: [
19
- {
20
- label: "Talent Acquisition",
21
- value: "Talent Acquisition",
22
- id: "talent1",
23
- },
24
- {
25
- label: "Business Affairs",
26
- value: "Business Affairs",
27
- id: "business1",
28
- status: "active",
29
- variant: "primary",
30
-
31
- children: [
32
- {
33
- label: "Initiatives",
34
- value: "Initiatives",
35
- id: "initiative1",
36
- },
37
- {
38
- label: "Learning & Development",
39
- value: "Learning & Development",
40
- id: "development1",
41
- status: "Inactive",
42
- },
43
- ],
44
- },
45
- {
46
- label: "People Experience",
47
- value: "People Experience",
48
- id: "experience1",
49
- },
50
- ],
51
- },
52
- {
53
- label: "Contact Center",
54
- value: "Contact Center",
55
- id: "contact1",
56
- status: "Inactive",
57
- variant: "error",
58
- children: [
59
- {
60
- label: "Appointment Management",
61
- value: "Appointment Management",
62
- id: "appointment1",
63
- },
64
- {
65
- label: "Customer Service",
66
- value: "Customer Service",
67
- id: "customer1",
68
- },
69
- {
70
- label: "Energy",
71
- value: "Energy",
72
- id: "energy1",
73
- },
74
- ],
75
- },
76
- ],
77
- },
78
- ];
79
-
80
- const MultiLevelSelectWithChildren = (props) => {
81
- return (
82
- <div>
83
- <MultiLevelSelect
84
- id="multiselect-with-children"
85
- onSelect={(selectedNodes) =>
86
- console.log("Selected Items", selectedNodes)
87
- }
88
- treeData={treeData}
89
- {...props}
90
- >
91
- <MultiLevelSelect.Options>
92
- {(item) => (
93
- <Badge
94
- marginLeft="sm"
95
- text={item.status}
96
- variant={item.status === "active" ? "success" : "warning"}
97
- />
98
- )}
99
- </MultiLevelSelect.Options>
100
- </MultiLevelSelect>
101
- </div>
102
- );
103
- };
104
-
105
- export default MultiLevelSelectWithChildren;
@@ -1 +0,0 @@
1
- The MultiLevelSelect also provides a subcomponent structure which can be used to render children to the right of the Checkboxes and their labels. As seen in the code snippet below, these children have access to the current item being iterated over which can be used for conditional rendering.
@@ -1,106 +0,0 @@
1
- import React from "react";
2
- import MultiLevelSelect from "../_multi_level_select";
3
- import Badge from "../../pb_badge/_badge";
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
- status: "active",
18
- children: [
19
- {
20
- label: "Talent Acquisition",
21
- value: "Talent Acquisition",
22
- id: "talent1",
23
- },
24
- {
25
- label: "Business Affairs",
26
- value: "Business Affairs",
27
- id: "business1",
28
- status: "active",
29
- variant: "primary",
30
-
31
- children: [
32
- {
33
- label: "Initiatives",
34
- value: "Initiatives",
35
- id: "initiative1",
36
- },
37
- {
38
- label: "Learning & Development",
39
- value: "Learning & Development",
40
- id: "development1",
41
- status: "Inactive",
42
- },
43
- ],
44
- },
45
- {
46
- label: "People Experience",
47
- value: "People Experience",
48
- id: "experience1",
49
- },
50
- ],
51
- },
52
- {
53
- label: "Contact Center",
54
- value: "Contact Center",
55
- id: "contact1",
56
- status: "Inactive",
57
- variant: "error",
58
- children: [
59
- {
60
- label: "Appointment Management",
61
- value: "Appointment Management",
62
- id: "appointment1",
63
- },
64
- {
65
- label: "Customer Service",
66
- value: "Customer Service",
67
- id: "customer1",
68
- },
69
- {
70
- label: "Energy",
71
- value: "Energy",
72
- id: "energy1",
73
- },
74
- ],
75
- },
76
- ],
77
- },
78
- ];
79
-
80
- const MultiLevelSelectWithChildrenWithRadios = (props) => {
81
- return (
82
- <div>
83
- <MultiLevelSelect
84
- id="multiselect-with-children"
85
- onSelect={(selectedNodes) =>
86
- console.log("Selected Items", selectedNodes)
87
- }
88
- treeData={treeData}
89
- variant="single"
90
- {...props}
91
- >
92
- <MultiLevelSelect.Options>
93
- {(item) => (
94
- <Badge
95
- marginLeft="sm"
96
- text={item.status}
97
- variant={item.status === "active" ? "success" : "warning"}
98
- />
99
- )}
100
- </MultiLevelSelect.Options>
101
- </MultiLevelSelect>
102
- </div>
103
- );
104
- };
105
-
106
- export default MultiLevelSelectWithChildrenWithRadios;
@@ -1 +0,0 @@
1
- The MultiLevelSelect subcomponent structure is also available in the 'Single Select' variant. In this variant, the children will be rendered to the right of the Radios and their labels.
@@ -1,149 +0,0 @@
1
- import React, {useContext} from "react";
2
- import classnames from "classnames";
3
- import MultiLevelSelectContext from "./context";
4
- import { globalProps, GlobalProps } from "../utilities/globalProps";
5
- import {
6
- buildAriaProps,
7
- buildCss,
8
- buildDataProps,
9
- buildHtmlProps,
10
- } from "../utilities/props";
11
- import Checkbox from "../pb_checkbox/_checkbox";
12
- import Radio from "../pb_radio/_radio";
13
- import CircleIconButton from "../pb_circle_icon_button/_circle_icon_button";
14
- import Body from "../pb_body/_body";
15
-
16
- type MultiLevelSelectOptionsProps = {
17
- aria?: { [key: string]: string },
18
- children?: React.ReactNode | ((item: any) => React.ReactNode),
19
- className?: string,
20
- dark?: boolean,
21
- data?: { [key: string]: string },
22
- htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
23
- } & GlobalProps;
24
-
25
- const MultiLevelSelectOptions = ({
26
- children,
27
- items,
28
- ...props
29
- }: MultiLevelSelectOptionsProps) => {
30
- const {
31
- variant,
32
- inputName,
33
- renderNestedOptions,
34
- isTreeRowExpanded,
35
- handleToggleClick,
36
- handleRadioButtonClick,
37
- handledropdownItemClick,
38
- filterItem,
39
- } = useContext(MultiLevelSelectContext)
40
-
41
- const {
42
- aria = {},
43
- className,
44
- data = {},
45
- htmlOptions = {},
46
- } = props;
47
-
48
- const ariaProps = buildAriaProps(aria);
49
- const dataProps = buildDataProps(data);
50
- const htmlProps = buildHtmlProps(htmlOptions);
51
- const classes = classnames(
52
- buildCss("pb_multi_level_select_options"),
53
- globalProps(props),
54
- className
55
- );
56
-
57
- return (
58
- <ul
59
- {...ariaProps}
60
- {...dataProps}
61
- {...htmlProps}
62
- className={classes}
63
- >
64
- {Array.isArray(items) &&
65
- items.map((item: { [key: string]: any }) => {
66
- return (
67
- <div key={item.id}>
68
- <li className={"dropdown_item"}
69
- data-name={item.id}
70
- >
71
- <div className="dropdown_item_checkbox_row">
72
- {!item.parent_id && !item.children ? null : (
73
- <div
74
- key={
75
- isTreeRowExpanded(item)
76
- ? "chevron-down"
77
- : "chevron-right"
78
- }
79
- >
80
- <CircleIconButton
81
- className={
82
- item.children && item.children.length > 0
83
- ? ""
84
- : "toggle_icon"
85
- }
86
- icon={
87
- isTreeRowExpanded(item)
88
- ? "chevron-down"
89
- : "chevron-right"
90
- }
91
- onClick={(event: React.MouseEvent) =>
92
- handleToggleClick(item.id, event)
93
- }
94
- variant="link"
95
- />
96
- </div>
97
- )}
98
- {variant === "single" ? (
99
- item.hideRadio ? (
100
- <Body>{item.label}</Body>
101
- ) : (
102
- <Radio
103
- checked={item.checked}
104
- id={`${item.id}-${item.label}`}
105
- label={item.label}
106
- name={inputName}
107
- onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
108
- handleRadioButtonClick(e)
109
- }
110
- padding={item.children ? "none" : "xs"}
111
- type="radio"
112
- value={item.label}
113
- />
114
- )
115
- ) : (
116
- <Checkbox id={item.id}
117
- text={item.label}
118
- >
119
- <input
120
- checked={item.checked}
121
- name={item.label}
122
- onChange={(e) => {
123
- handledropdownItemClick(e, !item.checked);
124
- }}
125
- type="checkbox"
126
- value={item.label}
127
- />
128
- </Checkbox>
129
- )}
130
- {/* Render children next to the checkbox */}
131
- {children && (
132
- typeof children === "function" ? children(item) : children
133
- )}
134
- </div>
135
- {isTreeRowExpanded(item) &&
136
- item.children &&
137
- item.children.length > 0 &&
138
- (variant === "single" || !filterItem) && (
139
- <div>{renderNestedOptions(item.children)}</div>
140
- )}
141
- </li>
142
- </div>
143
- );
144
- })}
145
- </ul>
146
- );
147
- };
148
-
149
- export default MultiLevelSelectOptions;