playbook_ui 12.30.1 → 12.31.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +2 -0
  3. data/app/pb_kits/playbook/pb_badge/_badge.scss +5 -0
  4. data/app/pb_kits/playbook/pb_badge/_badge.tsx +1 -1
  5. data/app/pb_kits/playbook/pb_badge/badge.rb +1 -1
  6. data/app/pb_kits/playbook/pb_badge/badge.test.js +13 -0
  7. data/app/pb_kits/playbook/pb_badge/docs/_badge_notification.html.erb +12 -0
  8. data/app/pb_kits/playbook/pb_badge/docs/_badge_notification.jsx +25 -0
  9. data/app/pb_kits/playbook/pb_badge/docs/example.yml +2 -1
  10. data/app/pb_kits/playbook/pb_badge/docs/index.js +1 -0
  11. data/app/pb_kits/playbook/pb_button/docs/_button_hover.jsx +40 -0
  12. data/app/pb_kits/playbook/pb_button/docs/example.yml +1 -0
  13. data/app/pb_kits/playbook/pb_button/docs/index.js +1 -0
  14. data/app/pb_kits/playbook/pb_message/docs/_message_default.jsx +33 -45
  15. data/app/pb_kits/playbook/pb_message/docs/_message_hover.jsx +41 -0
  16. data/app/pb_kits/playbook/pb_message/docs/example.yml +1 -0
  17. data/app/pb_kits/playbook/pb_message/docs/index.js +2 -0
  18. data/app/pb_kits/playbook/pb_multi_level_select/_helper_functions.tsx +4 -1
  19. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +8 -3
  20. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.html.erb +76 -0
  21. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.jsx +88 -0
  22. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.md +5 -0
  23. data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +2 -0
  24. data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +2 -1
  25. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.rb +3 -0
  26. data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +7 -0
  27. data/app/pb_kits/playbook/pb_section_separator/_section_separator.tsx +12 -7
  28. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_children.html.erb +14 -0
  29. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_children.jsx +30 -0
  30. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_children.md +3 -0
  31. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_dashed.html.erb +1 -0
  32. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_dashed.jsx +13 -0
  33. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text.html.erb +1 -1
  34. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text.jsx +1 -1
  35. data/app/pb_kits/playbook/pb_section_separator/docs/example.yml +6 -3
  36. data/app/pb_kits/playbook/pb_section_separator/docs/index.js +2 -0
  37. data/app/pb_kits/playbook/pb_section_separator/section_separator.html.erb +4 -2
  38. data/app/pb_kits/playbook/pb_section_separator/section_separator.rb +4 -1
  39. data/app/pb_kits/playbook/pb_title/_title.scss +18 -0
  40. data/app/pb_kits/playbook/pb_title/_title.tsx +20 -2
  41. data/app/pb_kits/playbook/pb_title/docs/_title_responsive.html.erb +1 -0
  42. data/app/pb_kits/playbook/pb_title/docs/_title_responsive.jsx +16 -0
  43. data/app/pb_kits/playbook/pb_title/docs/_title_responsive.md +1 -0
  44. data/app/pb_kits/playbook/pb_title/docs/example.yml +2 -0
  45. data/app/pb_kits/playbook/pb_title/docs/index.js +1 -0
  46. data/app/pb_kits/playbook/pb_title/title.rb +21 -4
  47. data/app/pb_kits/playbook/pb_title/title.test.js +42 -29
  48. data/app/pb_kits/playbook/tokens/_scale.scss +9 -0
  49. data/app/pb_kits/playbook/tokens/exports/_scale.scss +13 -0
  50. data/app/pb_kits/playbook/utilities/_border_radius.scss +31 -0
  51. data/app/pb_kits/playbook/utilities/_colors.scss +3 -0
  52. data/app/pb_kits/playbook/utilities/_hover.scss +47 -0
  53. data/app/pb_kits/playbook/utilities/globalProps.ts +22 -2
  54. data/dist/playbook-rails.js +6 -6
  55. data/lib/playbook/version.rb +2 -2
  56. metadata +21 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: be0a7b566ae2becf6f879bd4f1cd39c0c27f487ef1a0a962238469eeec8753c6
4
- data.tar.gz: ff75740ac1377ced70e9c9b6dc4dbe78f3f7a4ec7a0320d202f4be2b5c3601cd
3
+ metadata.gz: 39c902d86406eacebfff3d633131660ecfdaf57e1d7b0f9480e1e9090e958501
4
+ data.tar.gz: a617f4fda7d3e3ed0b6de62504710c4962cdb70c3d59877057fe082262aec1f6
5
5
  SHA512:
6
- metadata.gz: 589840dca5165dd2173a6d2eb01bf95045918ddf958598262a5040cc9e18560ec5cc1cc1073fd522ed50266bb2a3d9fbee1b42ca5eea8d862ffe2a0408e3163f
7
- data.tar.gz: d04f64d8a30a45a41541f861c39db6dc82fc21b636e5caa87ec1c889399eaa28fd09374f1994a3266c4cf8bec4d5e3bc80bbe0dfe346a65713b0bdda06c2b321
6
+ metadata.gz: 00f0e49f95ed90f0e6a1567cb4ff0448c48e77580f3c7ee02dcdbb060e3a472527007f9026f5486508c7ab3bb12d2a3b5d189605549ee1803c91c377a81ec671
7
+ data.tar.gz: b37a1a86dc19ff217a582a712161b34b6e4f7875c0b35a040b2c55030c61aa7076ee909555a9df9d4100e2441b9459ea0b391d0dabfec25cd89b191e96148d55
@@ -110,5 +110,7 @@
110
110
  @import './utilities/display';
111
111
  @import './utilities/flexbox';
112
112
  @import './utilities/focus';
113
+ @import './utilities/border_radius';
114
+ @import './utilities/hover';
113
115
 
114
116
  @import 'pb_multi_level_select/multi_level_select';
@@ -37,6 +37,11 @@
37
37
  border-radius: $pb_badge_height / 2;
38
38
  }
39
39
 
40
+ &[class*=_notification] {
41
+ background: $primary;
42
+ color: $white;
43
+ }
44
+
40
45
  &.dark {
41
46
  border-width: 0;
42
47
 
@@ -24,7 +24,7 @@ type BadgeProps = {
24
24
  removeOnClick?: React.MouseEventHandler<HTMLSpanElement>,
25
25
  rounded?: boolean,
26
26
  text?: string,
27
- variant?: "error" | "info" | "neutral" | "primary" | "success" | "warning",
27
+ variant?: "error" | "info" | "neutral" | "notification" | "primary" | "success" | "warning",
28
28
  } & GlobalProps
29
29
  const Badge = (props: BadgeProps) => {
30
30
  const {
@@ -6,7 +6,7 @@ module Playbook
6
6
  prop :rounded, type: Playbook::Props::Boolean, default: false
7
7
  prop :text
8
8
  prop :variant, type: Playbook::Props::Enum,
9
- values: %w[success warning error info neutral primary],
9
+ values: %w[success warning error info neutral notification primary],
10
10
  default: "neutral"
11
11
 
12
12
  def classname
@@ -93,3 +93,16 @@ test('displays success variant', () => {
93
93
  cleanup()
94
94
 
95
95
  })
96
+
97
+ test('displays notification variant', () => {
98
+ render(
99
+ <Badge
100
+ data={{ testid: testId }}
101
+ text="1"
102
+ variant="notification"
103
+ />
104
+ )
105
+ const kit = screen.getByTestId(testId)
106
+ expect(kit).toHaveClass(`pb_badge_kit_notification`)
107
+ cleanup()
108
+ })
@@ -0,0 +1,12 @@
1
+ <div>
2
+ <%= pb_rails("badge", props: {
3
+ text: "1",
4
+ variant: "notification",
5
+ rounded: true
6
+ }) %>
7
+
8
+ <%= pb_rails("badge", props: {
9
+ text: "4",
10
+ variant: "notification"
11
+ }) %>
12
+ </div>
@@ -0,0 +1,25 @@
1
+ import React from 'react'
2
+ import Badge from '../_badge'
3
+
4
+ const BadgeNotification = (props) => {
5
+ return (
6
+ <>
7
+ <Badge
8
+ rounded
9
+ text="1"
10
+ variant="notification"
11
+ {...props}
12
+ />
13
+
14
+ &nbsp;
15
+
16
+ <Badge
17
+ text="4"
18
+ variant="notification"
19
+ {...props}
20
+ />
21
+ </>
22
+ )
23
+ }
24
+
25
+ export default BadgeNotification
@@ -3,9 +3,10 @@ examples:
3
3
  - badge_default: Rectangle
4
4
  - badge_rounded: Rounded
5
5
  - badge_colors: Colors
6
-
6
+ - badge_notification: Notification
7
7
 
8
8
  react:
9
9
  - badge_default: Rectangle
10
10
  - badge_rounded: Rounded
11
11
  - badge_colors: Colors
12
+ - badge_notification: Notification
@@ -1,3 +1,4 @@
1
1
  export { default as BadgeDefault } from './_badge_default'
2
2
  export { default as BadgeRounded } from './_badge_rounded'
3
3
  export { default as BadgeColors } from './_badge_colors'
4
+ export { default as BadgeNotification } from './_badge_notification'
@@ -0,0 +1,40 @@
1
+ import React from "react"
2
+ import { Button } from "../../"
3
+
4
+ const ButtonHover = (props) => (
5
+ <div>
6
+ <div>
7
+ <Button
8
+ hover={{ shadow: "deep" }}
9
+ marginRight='lg'
10
+ marginTop='xl'
11
+ onClick={() => alert("button clicked!")}
12
+ tabIndex={0}
13
+ text='Shadow Deep'
14
+ {...props}
15
+ />{" "}
16
+ <Button
17
+ hover={{ shadow: "deeper" }}
18
+ marginRight='lg'
19
+ marginTop='xl'
20
+ onClick={() => alert("button clicked!")}
21
+ tabIndex={0}
22
+ text='Shadow Deeper'
23
+ variant='secondary'
24
+ {...props}
25
+ />{" "}
26
+ <Button
27
+ hover={{ shadow: "deepest" }}
28
+ marginRight='lg'
29
+ marginTop='xl'
30
+ onClick={() => alert("button clicked!")}
31
+ tabIndex={0}
32
+ text='Shadow Deepest'
33
+ variant='link'
34
+ {...props}
35
+ />
36
+ </div>
37
+ </div>
38
+ )
39
+
40
+ export default ButtonHover
@@ -21,3 +21,4 @@ examples:
21
21
  - button_options: Button Additional Options (onClick)
22
22
  - button_size: Button Size
23
23
  - button_form: Button Form Attribute
24
+ - button_hover: Button Hover
@@ -8,3 +8,4 @@ export { default as ButtonAccessibility } from './_button_accessibility.jsx'
8
8
  export { default as ButtonOptions } from './_button_options.jsx'
9
9
  export { default as ButtonSize } from './_button_size.jsx'
10
10
  export { default as ButtonForm } from './_button_form.jsx'
11
+ export { default as ButtonHover } from './_button_hover.jsx'
@@ -1,43 +1,33 @@
1
- import React from 'react'
1
+ import React from "react"
2
2
 
3
- import Message from '../_message'
4
- import Image from '../../pb_image/_image'
3
+ import Message from "../_message"
4
+ import Image from "../../pb_image/_image"
5
5
 
6
6
  const MessageDefault = (props) => {
7
7
  return (
8
8
  <div>
9
9
  <Message
10
- avatarName="Mike Bishop"
11
- avatarStatus="online"
12
- avatarUrl="https://randomuser.me/api/portraits/men/50.jpg"
13
- label="Anna Black"
14
- message="How can we assist you today?"
15
- timestamp="20 seconds ago"
10
+ avatarName='Mike Bishop'
11
+ avatarStatus='online'
12
+ avatarUrl='https://randomuser.me/api/portraits/men/50.jpg'
13
+ borderRadius='rounded'
14
+ label='Anna Black'
15
+ message='How can we assist you today?'
16
+ timestamp='20 seconds ago'
16
17
  {...props}
17
18
  />
18
19
 
19
20
  <br />
20
21
  <br />
21
-
22
- <Message
23
- alignTimestamp="left"
24
- avatarName="Wade Winningham"
25
- avatarUrl="https://randomuser.me/api/portraits/men/14.jpg"
26
- label="Patrick Welch"
27
- message="We will escalate this issue to a Senior Support agent."
28
- timestamp="9 minutes ago"
29
- {...props}
30
- />
31
-
32
22
  <br />
33
23
  <br />
34
24
 
35
25
  <Message
36
- avatarName="Becca Jacobs"
37
- avatarUrl="https://randomuser.me/api/portraits/women/50.jpg"
38
- label="Lucille Sanchez"
39
- message="Application for Kate Smith is waiting for your approval"
40
- timestamp="2 days ago"
26
+ avatarName='Becca Jacobs'
27
+ avatarUrl='https://randomuser.me/api/portraits/women/50.jpg'
28
+ label='Lucille Sanchez'
29
+ message='Application for Kate Smith is waiting for your approval'
30
+ timestamp='2 days ago'
41
31
  {...props}
42
32
  />
43
33
 
@@ -45,10 +35,10 @@ const MessageDefault = (props) => {
45
35
  <br />
46
36
 
47
37
  <Message
48
- avatarName="Timothy Wenhold"
49
- label="Beverly Reyes"
50
- message="We are so sorry you had a bad experience!"
51
- timestamp="2 days ago"
38
+ avatarName='Timothy Wenhold'
39
+ label='Beverly Reyes'
40
+ message='We are so sorry you had a bad experience!'
41
+ timestamp='2 days ago'
52
42
  {...props}
53
43
  />
54
44
 
@@ -56,24 +46,23 @@ const MessageDefault = (props) => {
56
46
  <br />
57
47
 
58
48
  <Message
59
- label="Keith Craig"
60
- message="Please hold for one moment, I will check with my manager."
61
- timestamp="2 days ago"
49
+ label='Keith Craig'
50
+ message='Please hold for one moment, I will check with my manager.'
51
+ timestamp='2 days ago'
62
52
  {...props}
63
53
  />
64
54
 
65
55
  <br />
66
56
  <br />
67
57
 
68
- <Message
69
- label="Keith Craig"
70
- timestamp="2 days ago"
58
+ <Message label='Keith Craig'
59
+ timestamp='2 days ago'
71
60
  {...props}
72
61
  >
73
62
  <Image
74
- alt="picture of a misty forest"
75
- size="md"
76
- url="https://unsplash.it/500/400/?image=634"
63
+ alt='picture of a misty forest'
64
+ size='md'
65
+ url='https://unsplash.it/500/400/?image=634'
77
66
  />
78
67
  </Message>
79
68
 
@@ -81,18 +70,17 @@ const MessageDefault = (props) => {
81
70
  <br />
82
71
 
83
72
  <Message
84
- label="Keith Craig"
85
- message="Please hold for one moment, I will check with my manager."
86
- timestamp="2 days ago"
73
+ label='Keith Craig'
74
+ message='Please hold for one moment, I will check with my manager.'
75
+ timestamp='2 days ago'
87
76
  {...props}
88
77
  >
89
78
  <Image
90
- alt="picture of a misty forest"
91
- size="md"
92
- url="https://unsplash.it/500/400/?image=634"
79
+ alt='picture of a misty forest'
80
+ size='md'
81
+ url='https://unsplash.it/500/400/?image=634'
93
82
  />
94
83
  </Message>
95
-
96
84
  </div>
97
85
  )
98
86
  }
@@ -0,0 +1,41 @@
1
+ import React from "react"
2
+
3
+ import Message from "../_message"
4
+
5
+ const MessageHover = (props) => {
6
+ return (
7
+ <div>
8
+ <Message
9
+ avatarName='Mike Bishop'
10
+ avatarStatus='online'
11
+ avatarUrl='https://randomuser.me/api/portraits/men/50.jpg'
12
+ borderRadius='rounded'
13
+ hover={{ background: "success_subtle" }}
14
+ label='Anna Black'
15
+ message='How can we assist you today?'
16
+ padding="xs"
17
+ {...props}
18
+ />
19
+
20
+ <br />
21
+ <br />
22
+ <br />
23
+
24
+ <Message
25
+ avatarName='Becca Jacobs'
26
+ avatarUrl='https://randomuser.me/api/portraits/women/50.jpg'
27
+ borderRadius='rounded'
28
+ hover={{ shadow: "deepest" }}
29
+ label='Lucille Sanchez'
30
+ message='Application for Kate Smith is waiting for your approval'
31
+ padding="xs"
32
+ {...props}
33
+ />
34
+
35
+ <br />
36
+
37
+ </div>
38
+ )
39
+ }
40
+
41
+ export default MessageHover
@@ -8,4 +8,5 @@ examples:
8
8
  react:
9
9
  - message_default: Default
10
10
  - message_timestamp: With Timestamp Hover
11
+ - message_hover: Hover
11
12
 
@@ -1,2 +1,4 @@
1
1
  export { default as MessageDefault } from './_message_default.jsx'
2
2
  export { default as MessageTimestamp } from './_message_timestamp.jsx'
3
+ export { default as MessageHover } from './_message_hover.jsx'
4
+
@@ -135,7 +135,7 @@ export const recursiveCheckParent = (
135
135
  return data;
136
136
  };
137
137
 
138
- export const getExpandedItems = (treeData: { [key: string]: string }[]) => {
138
+ export const getExpandedItems = (treeData: { [key: string]: string }[], selectedIds: string[]) => {
139
139
  let expandedItems: any[] = [];
140
140
 
141
141
  const traverse = (items: string | any[], ancestors: any[] = []) => {
@@ -146,6 +146,9 @@ export const getExpandedItems = (treeData: { [key: string]: string }[]) => {
146
146
  if (item.expanded) {
147
147
  expandedItems.push(item.id);
148
148
  }
149
+ if (selectedIds && selectedIds.length && selectedIds.includes(item.id)) {
150
+ expandedItems.push(...itemAncestors.map((ancestor) => ancestor.id));
151
+ }
149
152
  if (Array.isArray(item.children)) {
150
153
  const hasCheckedChildren = item.children.some(
151
154
  (child: { [key: string]: string }) => child.checked
@@ -28,6 +28,7 @@ type MultiLevelSelectProps = {
28
28
  returnAllSelected?: boolean
29
29
  treeData?: { [key: string]: string }[]
30
30
  onSelect?: (prop: { [key: string]: any }) => void
31
+ selectedIds?: string[]
31
32
  } & GlobalProps
32
33
 
33
34
  const MultiLevelSelect = (props: MultiLevelSelectProps) => {
@@ -41,6 +42,7 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
41
42
  returnAllSelected = false,
42
43
  treeData,
43
44
  onSelect = () => {},
45
+ selectedIds
44
46
  } = props
45
47
 
46
48
  const ariaProps = buildAriaProps(aria)
@@ -64,14 +66,14 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
64
66
  //state for return for default
65
67
  const [defaultReturn, setDefaultReturn] = useState([])
66
68
  // Get expanded items from treeData.
67
- const initialExpandedItems = getExpandedItems(treeData);
69
+ const initialExpandedItems = getExpandedItems(treeData, selectedIds);
68
70
  // Initialize state with expanded items.
69
71
  const [expanded, setExpanded] = useState(initialExpandedItems);
70
72
 
71
73
 
72
74
  useEffect(() => {
73
- setFormattedData(addCheckedAndParentProperty(treeData))
74
- }, [treeData])
75
+ setFormattedData(addCheckedAndParentProperty(treeData, selectedIds))
76
+ }, [treeData, selectedIds])
75
77
 
76
78
  useEffect(() => {
77
79
  if (returnAllSelected) {
@@ -160,6 +162,7 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
160
162
  //function to map over data and add parent_id + depth property to each item
161
163
  const addCheckedAndParentProperty = (
162
164
  treeData: { [key: string]: any }[],
165
+ selectedIds: string[],
163
166
  parent_id: string = null,
164
167
  depth: number = 0,
165
168
  ) => {
@@ -169,6 +172,7 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
169
172
  return treeData.map((item: { [key: string]: any } | any) => {
170
173
  const newItem = {
171
174
  ...item,
175
+ checked: selectedIds && selectedIds.length && selectedIds.includes(item.id),
172
176
  parent_id,
173
177
  depth,
174
178
  }
@@ -179,6 +183,7 @@ const MultiLevelSelect = (props: MultiLevelSelectProps) => {
179
183
  : item.children
180
184
  newItem.children = addCheckedAndParentProperty(
181
185
  children,
186
+ selectedIds,
182
187
  newItem.id,
183
188
  depth + 1
184
189
  )
@@ -0,0 +1,76 @@
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
+ children: [
12
+ {
13
+ label: "Talent Acquisition",
14
+ value: "Talent Acquisition",
15
+ id: "102",
16
+ },
17
+ {
18
+ label: "Business Affairs",
19
+ value: "Business Affairs",
20
+ id: "103",
21
+ children: [
22
+ {
23
+ label: "Initiatives",
24
+ value: "Initiatives",
25
+ id: "104",
26
+ },
27
+ {
28
+ label: "Learning & Development",
29
+ value: "Learning & Development",
30
+ id: "105",
31
+ },
32
+ ],
33
+ },
34
+ {
35
+ label: "People Experience",
36
+ value: "People Experience",
37
+ id: "106",
38
+ },
39
+ ],
40
+ },
41
+ {
42
+ label: "Contact Center",
43
+ value: "Contact Center",
44
+ id: "107",
45
+ children: [
46
+ {
47
+ label: "Appointment Management",
48
+ value: "Appointment Management",
49
+ id: "108",
50
+ },
51
+ {
52
+ label: "Customer Service",
53
+ value: "Customer Service",
54
+ id: "109",
55
+ },
56
+ {
57
+ label: "Energy",
58
+ value: "Energy",
59
+ id: "110",
60
+ },
61
+ ],
62
+ },
63
+ ],
64
+ }] %>
65
+
66
+
67
+
68
+
69
+ <%= pb_rails("multi_level_select", props: {
70
+ id: "multi-level-select-seelcted_ids",
71
+ name: "my_data_array_selected",
72
+ return_all_selected: true,
73
+ selected_ids:["110","102"],
74
+ tree_data: treeData,
75
+ }) %>
76
+
@@ -0,0 +1,88 @@
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
+ children: [
16
+ {
17
+ label: "Talent Acquisition",
18
+ value: "Talent Acquisition",
19
+ id: "talent1",
20
+ },
21
+ {
22
+ label: "Business Affairs",
23
+ value: "Business Affairs",
24
+ id: "business1",
25
+ children: [
26
+ {
27
+ label: "Initiatives",
28
+ value: "Initiatives",
29
+ id: "initiative1",
30
+ },
31
+ {
32
+ label: "Learning & Development",
33
+ value: "Learning & Development",
34
+ id: "development1",
35
+ },
36
+ ],
37
+ },
38
+ {
39
+ label: "People Experience",
40
+ value: "People Experience",
41
+ id: "experience1",
42
+ },
43
+ ],
44
+ },
45
+ {
46
+ label: "Contact Center",
47
+ value: "Contact Center",
48
+ id: "contact1",
49
+ children: [
50
+ {
51
+ label: "Appointment Management",
52
+ value: "Appointment Management",
53
+ id: "appointment1",
54
+ },
55
+ {
56
+ label: "Customer Service",
57
+ value: "Customer Service",
58
+ id: "customer1",
59
+ },
60
+ {
61
+ label: "Energy",
62
+ value: "Energy",
63
+ id: "energy1",
64
+ },
65
+ ],
66
+ },
67
+ ],
68
+ },
69
+ ];
70
+
71
+ const MultiLevelSelectSelectedIds = (props) => {
72
+ return (
73
+ <div>
74
+ <MultiLevelSelect
75
+ id="multi-level-select-selected_ids"
76
+ onSelect={(selectedNodes) =>
77
+ console.log("Selected Items with Return All Selected Data", selectedNodes)
78
+ }
79
+ returnAllSelected
80
+ selectedIds={["energy1","talent1"]}
81
+ treeData={treeData}
82
+ {...props}
83
+ />
84
+ </div>
85
+ );
86
+ };
87
+
88
+ export default MultiLevelSelectSelectedIds;
@@ -0,0 +1,5 @@
1
+ `selected_ids` (Rails) / `selectedIds` (React) is an optional prop that accepts an array of ids that, if present, will mark the corresponding nodes on the treeData as checked on page load.
2
+
3
+ Items that include `checked:true` on the treeData itself will also be selected on page load, even without being passed to `selectedIds`.
4
+
5
+ When an item is marked as checked on page load by any means, the dropdown will expand to show the checked items for easier accessibility.
@@ -2,9 +2,11 @@ examples:
2
2
  rails:
3
3
  - multi_level_select_default: Default
4
4
  - multi_level_select_return_all_selected: Return All Selected
5
+ - multi_level_select_selected_ids: Selected Ids
5
6
  - multi_level_select_with_form: With Form
6
7
 
7
8
  react:
8
9
  - multi_level_select_default: Default
9
10
  - multi_level_select_return_all_selected: Return All Selected
11
+ - multi_level_select_selected_ids: Selected Ids
10
12
 
@@ -1,2 +1,3 @@
1
1
  export { default as MultiLevelSelectDefault } from './_multi_level_select_default.jsx'
2
- export { default as MultiLevelSelectReturnAllSelected } from './_multi_level_select_return_all_selected.jsx'
2
+ export { default as MultiLevelSelectReturnAllSelected } from './_multi_level_select_return_all_selected.jsx'
3
+ export { default as MultiLevelSelectSelectedIds } from "./_multi_level_select_selected_ids.jsx"
@@ -9,6 +9,8 @@ module Playbook
9
9
  default: []
10
10
  prop :return_all_selected, type: Playbook::Props::Boolean,
11
11
  default: false
12
+ prop :selected_ids, type: Playbook::Props::Array,
13
+ default: []
12
14
  prop :input_display, type: Playbook::Props::Enum,
13
15
  values: %w[pills none],
14
16
  default: "pills"
@@ -24,6 +26,7 @@ module Playbook
24
26
  name: name,
25
27
  treeData: tree_data,
26
28
  returnAllSelected: return_all_selected,
29
+ selectedIds: selected_ids,
27
30
  }
28
31
  end
29
32
  end
@@ -45,6 +45,13 @@ $section_colors_dark: (
45
45
  }
46
46
  }
47
47
 
48
+ &[class*=_dashed] {
49
+ &::before, &::after {
50
+ border: 1px dashed $border_light;
51
+ background: none;
52
+ }
53
+ }
54
+
48
55
  // Dark =========================
49
56
 
50
57
  &.dark {