playbook_ui 12.30.1 → 12.31.0.pre.alpha.datepickerdisableddatefix931

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 (57) 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_date_picker/date_picker_helper.ts +37 -31
  15. data/app/pb_kits/playbook/pb_message/docs/_message_default.jsx +33 -45
  16. data/app/pb_kits/playbook/pb_message/docs/_message_hover.jsx +41 -0
  17. data/app/pb_kits/playbook/pb_message/docs/example.yml +1 -0
  18. data/app/pb_kits/playbook/pb_message/docs/index.js +2 -0
  19. data/app/pb_kits/playbook/pb_multi_level_select/_helper_functions.tsx +4 -1
  20. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +8 -3
  21. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.html.erb +76 -0
  22. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.jsx +88 -0
  23. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.md +5 -0
  24. data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +2 -0
  25. data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +2 -1
  26. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.rb +3 -0
  27. data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +7 -0
  28. data/app/pb_kits/playbook/pb_section_separator/_section_separator.tsx +12 -7
  29. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_children.html.erb +14 -0
  30. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_children.jsx +30 -0
  31. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_children.md +3 -0
  32. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_dashed.html.erb +1 -0
  33. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_dashed.jsx +13 -0
  34. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text.html.erb +1 -1
  35. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text.jsx +1 -1
  36. data/app/pb_kits/playbook/pb_section_separator/docs/example.yml +6 -3
  37. data/app/pb_kits/playbook/pb_section_separator/docs/index.js +2 -0
  38. data/app/pb_kits/playbook/pb_section_separator/section_separator.html.erb +4 -2
  39. data/app/pb_kits/playbook/pb_section_separator/section_separator.rb +4 -1
  40. data/app/pb_kits/playbook/pb_title/_title.scss +18 -0
  41. data/app/pb_kits/playbook/pb_title/_title.tsx +20 -2
  42. data/app/pb_kits/playbook/pb_title/docs/_title_responsive.html.erb +1 -0
  43. data/app/pb_kits/playbook/pb_title/docs/_title_responsive.jsx +16 -0
  44. data/app/pb_kits/playbook/pb_title/docs/_title_responsive.md +1 -0
  45. data/app/pb_kits/playbook/pb_title/docs/example.yml +2 -0
  46. data/app/pb_kits/playbook/pb_title/docs/index.js +1 -0
  47. data/app/pb_kits/playbook/pb_title/title.rb +21 -4
  48. data/app/pb_kits/playbook/pb_title/title.test.js +42 -29
  49. data/app/pb_kits/playbook/tokens/_scale.scss +9 -0
  50. data/app/pb_kits/playbook/tokens/exports/_scale.scss +13 -0
  51. data/app/pb_kits/playbook/utilities/_border_radius.scss +31 -0
  52. data/app/pb_kits/playbook/utilities/_colors.scss +3 -0
  53. data/app/pb_kits/playbook/utilities/_hover.scss +47 -0
  54. data/app/pb_kits/playbook/utilities/globalProps.ts +22 -2
  55. data/dist/playbook-rails.js +6 -6
  56. data/lib/playbook/version.rb +2 -2
  57. metadata +26 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: be0a7b566ae2becf6f879bd4f1cd39c0c27f487ef1a0a962238469eeec8753c6
4
- data.tar.gz: ff75740ac1377ced70e9c9b6dc4dbe78f3f7a4ec7a0320d202f4be2b5c3601cd
3
+ metadata.gz: 654d556d34f5a4d85545aff221a0ad40d54b0f09c6f5a26d74dbd99b346ce57d
4
+ data.tar.gz: 3ae3d76e2d79224c105d7b8c53c7f7c9033cda03505d55cc4222262926e9a580
5
5
  SHA512:
6
- metadata.gz: 589840dca5165dd2173a6d2eb01bf95045918ddf958598262a5040cc9e18560ec5cc1cc1073fd522ed50266bb2a3d9fbee1b42ca5eea8d862ffe2a0408e3163f
7
- data.tar.gz: d04f64d8a30a45a41541f861c39db6dc82fc21b636e5caa87ec1c889399eaa28fd09374f1994a3266c4cf8bec4d5e3bc80bbe0dfe346a65713b0bdda06c2b321
6
+ metadata.gz: 1e0ed9fa251b5130bcdfc146ea0e1144b2273424c5f8171fc12b573ada98fbf2ca743d7467602d6d904b65c16fb8976ed51133461bb6497cff4dc038823100b4
7
+ data.tar.gz: a8dcf56f0adeed47b1e403318feec0a711f9d45dbc6617e26bdb19533fe055552a61bfeb05663141b49d28810f12f3e62397f8177ffa07e6510533a5972f1b5b
@@ -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'
@@ -71,13 +71,42 @@ const datePickerHelper = (config: DatePickerConfig, scrollContainer: string | HT
71
71
  }
72
72
  }
73
73
  const disabledParser = () => {
74
- if (disableDate && disableDate.length > 0) {
75
- return disableDate
76
- } else if (disableRange && disableRange.length > 0) {
77
- return disableRange
78
- } else {
79
- return []
80
- }
74
+ const disabledArray=[]
75
+
76
+ disableDate && disableDate.length > 0 && disabledArray.push(...disableDate)
77
+ disableRange && disableRange.length > 0 && disabledArray.push(...disableRange)
78
+ disableWeekdays && disableWeekdays.length > 0 && disabledArray.push(...disabledWeekDays())
79
+
80
+ return disabledArray
81
+ }
82
+
83
+ const disabledWeekDays = () => {
84
+ return (
85
+ [
86
+ (date:any) => {
87
+ const weekdayObj: {
88
+ [day: string]: number
89
+ } = {
90
+ Sunday: 0,
91
+ Monday: 1,
92
+ Tuesday: 2,
93
+ Wednesday: 3,
94
+ Thursday: 4,
95
+ Friday: 5,
96
+ Saturday: 6,
97
+ }
98
+ return (
99
+ date.getDay() === weekdayObj[disableWeekdays[0]] ||
100
+ date.getDay() === weekdayObj[disableWeekdays[1]] ||
101
+ date.getDay() === weekdayObj[disableWeekdays[2]] ||
102
+ date.getDay() === weekdayObj[disableWeekdays[3]] ||
103
+ date.getDay() === weekdayObj[disableWeekdays[4]] ||
104
+ date.getDay() === weekdayObj[disableWeekdays[5]] ||
105
+ date.getDay() === weekdayObj[disableWeekdays[6]]
106
+ )
107
+ },
108
+ ]
109
+ )
81
110
  }
82
111
  const calendarResizer = () => {
83
112
  const cal = document.querySelector(`#cal-${pickerId}.open`) as HTMLElement
@@ -127,30 +156,7 @@ const datePickerHelper = (config: DatePickerConfig, scrollContainer: string | HT
127
156
  disableMobile: true,
128
157
  dateFormat: getDateFormat(),
129
158
  defaultDate: defaultDateGetter(),
130
- disable: disableWeekdays && disableWeekdays.length > 0 ? [
131
- (date) => {
132
- const weekdayObj: {
133
- [day: string]: number
134
- } = {
135
- Sunday: 0,
136
- Monday: 1,
137
- Tuesday: 2,
138
- Wednesday: 3,
139
- Thursday: 4,
140
- Friday: 5,
141
- Saturday: 6,
142
- }
143
- return (
144
- date.getDay() === weekdayObj[disableWeekdays[0]] ||
145
- date.getDay() === weekdayObj[disableWeekdays[1]] ||
146
- date.getDay() === weekdayObj[disableWeekdays[2]] ||
147
- date.getDay() === weekdayObj[disableWeekdays[3]] ||
148
- date.getDay() === weekdayObj[disableWeekdays[4]] ||
149
- date.getDay() === weekdayObj[disableWeekdays[5]] ||
150
- date.getDay() === weekdayObj[disableWeekdays[6]]
151
- )
152
- },
153
- ] : disabledParser(),
159
+ disable: disabledParser(),
154
160
  enableTime,
155
161
  locale: {
156
162
  rangeSeparator: ' to '
@@ -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
+