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.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/_playbook.scss +2 -0
- data/app/pb_kits/playbook/pb_badge/_badge.scss +5 -0
- data/app/pb_kits/playbook/pb_badge/_badge.tsx +1 -1
- data/app/pb_kits/playbook/pb_badge/badge.rb +1 -1
- data/app/pb_kits/playbook/pb_badge/badge.test.js +13 -0
- data/app/pb_kits/playbook/pb_badge/docs/_badge_notification.html.erb +12 -0
- data/app/pb_kits/playbook/pb_badge/docs/_badge_notification.jsx +25 -0
- data/app/pb_kits/playbook/pb_badge/docs/example.yml +2 -1
- data/app/pb_kits/playbook/pb_badge/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_button/docs/_button_hover.jsx +40 -0
- data/app/pb_kits/playbook/pb_button/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_button/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.ts +37 -31
- data/app/pb_kits/playbook/pb_message/docs/_message_default.jsx +33 -45
- data/app/pb_kits/playbook/pb_message/docs/_message_hover.jsx +41 -0
- data/app/pb_kits/playbook/pb_message/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_message/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_multi_level_select/_helper_functions.tsx +4 -1
- data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +8 -3
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.html.erb +76 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.jsx +88 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.md +5 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +2 -1
- data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.rb +3 -0
- data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +7 -0
- data/app/pb_kits/playbook/pb_section_separator/_section_separator.tsx +12 -7
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_children.html.erb +14 -0
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_children.jsx +30 -0
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_children.md +3 -0
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_dashed.html.erb +1 -0
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_dashed.jsx +13 -0
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text.html.erb +1 -1
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_text.jsx +1 -1
- data/app/pb_kits/playbook/pb_section_separator/docs/example.yml +6 -3
- data/app/pb_kits/playbook/pb_section_separator/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_section_separator/section_separator.html.erb +4 -2
- data/app/pb_kits/playbook/pb_section_separator/section_separator.rb +4 -1
- data/app/pb_kits/playbook/pb_title/_title.scss +18 -0
- data/app/pb_kits/playbook/pb_title/_title.tsx +20 -2
- data/app/pb_kits/playbook/pb_title/docs/_title_responsive.html.erb +1 -0
- data/app/pb_kits/playbook/pb_title/docs/_title_responsive.jsx +16 -0
- data/app/pb_kits/playbook/pb_title/docs/_title_responsive.md +1 -0
- data/app/pb_kits/playbook/pb_title/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_title/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_title/title.rb +21 -4
- data/app/pb_kits/playbook/pb_title/title.test.js +42 -29
- data/app/pb_kits/playbook/tokens/_scale.scss +9 -0
- data/app/pb_kits/playbook/tokens/exports/_scale.scss +13 -0
- data/app/pb_kits/playbook/utilities/_border_radius.scss +31 -0
- data/app/pb_kits/playbook/utilities/_colors.scss +3 -0
- data/app/pb_kits/playbook/utilities/_hover.scss +47 -0
- data/app/pb_kits/playbook/utilities/globalProps.ts +22 -2
- data/dist/playbook-rails.js +6 -6
- data/lib/playbook/version.rb +2 -2
- metadata +26 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 654d556d34f5a4d85545aff221a0ad40d54b0f09c6f5a26d74dbd99b346ce57d
|
|
4
|
+
data.tar.gz: 3ae3d76e2d79224c105d7b8c53c7f7c9033cda03505d55cc4222262926e9a580
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1e0ed9fa251b5130bcdfc146ea0e1144b2273424c5f8171fc12b573ada98fbf2ca743d7467602d6d904b65c16fb8976ed51133461bb6497cff4dc038823100b4
|
|
7
|
+
data.tar.gz: a8dcf56f0adeed47b1e403318feec0a711f9d45dbc6617e26bdb19533fe055552a61bfeb05663141b49d28810f12f3e62397f8177ffa07e6510533a5972f1b5b
|
|
@@ -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,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
|
+
|
|
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
|
|
@@ -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
|
|
@@ -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
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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:
|
|
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
|
|
1
|
+
import React from "react"
|
|
2
2
|
|
|
3
|
-
import Message from
|
|
4
|
-
import Image from
|
|
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=
|
|
11
|
-
avatarStatus=
|
|
12
|
-
avatarUrl=
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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=
|
|
37
|
-
avatarUrl=
|
|
38
|
-
label=
|
|
39
|
-
message=
|
|
40
|
-
timestamp=
|
|
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=
|
|
49
|
-
label=
|
|
50
|
-
message=
|
|
51
|
-
timestamp=
|
|
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=
|
|
60
|
-
message=
|
|
61
|
-
timestamp=
|
|
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
|
-
|
|
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=
|
|
75
|
-
size=
|
|
76
|
-
url=
|
|
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=
|
|
85
|
-
message=
|
|
86
|
-
timestamp=
|
|
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=
|
|
91
|
-
size=
|
|
92
|
-
url=
|
|
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
|
|
@@ -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
|
)
|
data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_selected_ids.html.erb
ADDED
|
@@ -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
|
+
|