playbook_ui_docs 14.13.0.pre.alpha.play1852reacthookformsupportradio6153 → 14.13.0.pre.alpha.play1884progresspill6064
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/pb_bar_graph/docs/example.yml +0 -1
- data/app/pb_kits/playbook/pb_bar_graph/docs/index.js +0 -1
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table.html.erb +2 -2
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table.md +1 -4
- data/app/pb_kits/playbook/pb_draggable/docs/example.yml +0 -2
- data/app/pb_kits/playbook/pb_draggable/docs/index.js +1 -2
- data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.html.erb +1 -0
- data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.jsx +7 -0
- data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.md +1 -0
- data/app/pb_kits/playbook/pb_radio/docs/example.yml +1 -2
- data/app/pb_kits/playbook/pb_radio/docs/index.js +0 -1
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible.jsx +1 -1
- data/app/pb_kits/playbook/pb_table/docs/example.yml +1 -4
- data/app/pb_kits/playbook/pb_table/docs/index.js +1 -2
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_mask.html.erb +0 -14
- data/dist/playbook-doc.js +1 -1
- metadata +4 -14
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.jsx +0 -64
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.md +0 -1
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table_react.jsx +0 -90
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table_react.md +0 -5
- data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.jsx +0 -60
- data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.md +0 -1
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click.html.erb +0 -51
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click_rails.md +0 -2
- data/app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.html.erb +0 -96
- data/app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.jsx +0 -101
- data/app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.md +0 -1
- /data/app/pb_kits/playbook/pb_table/docs/{_table_with_collapsible_with_custom_click_react.md → _table_with_collapsible_with_custom_click.md} +0 -0
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: playbook_ui_docs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 14.13.0.pre.alpha.
|
4
|
+
version: 14.13.0.pre.alpha.play1884progresspill6064
|
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: 2025-02-
|
12
|
+
date: 2025-02-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: playbook_ui
|
@@ -197,8 +197,6 @@ files:
|
|
197
197
|
- app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_legend_position.md
|
198
198
|
- app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_negative_numbers.html.erb
|
199
199
|
- app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_negative_numbers.jsx
|
200
|
-
- app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.jsx
|
201
|
-
- app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.md
|
202
200
|
- app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_secondary_y_axis.html.erb
|
203
201
|
- app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_secondary_y_axis.jsx
|
204
202
|
- app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_secondary_y_axis.md
|
@@ -718,8 +716,6 @@ files:
|
|
718
716
|
- app/pb_kits/playbook/pb_draggable/docs/_draggable_with_selectable_list_rails.md
|
719
717
|
- app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table.html.erb
|
720
718
|
- app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table.md
|
721
|
-
- app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table_react.jsx
|
722
|
-
- app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table_react.md
|
723
719
|
- app/pb_kits/playbook/pb_draggable/docs/example.yml
|
724
720
|
- app/pb_kits/playbook/pb_draggable/docs/index.js
|
725
721
|
- app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.jsx
|
@@ -1491,6 +1487,7 @@ files:
|
|
1491
1487
|
- app/pb_kits/playbook/pb_progress_pills/docs/_description.md
|
1492
1488
|
- app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.html.erb
|
1493
1489
|
- app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.jsx
|
1490
|
+
- app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.md
|
1494
1491
|
- app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_status.html.erb
|
1495
1492
|
- app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_status.jsx
|
1496
1493
|
- app/pb_kits/playbook/pb_progress_pills/docs/example.yml
|
@@ -1551,8 +1548,6 @@ files:
|
|
1551
1548
|
- app/pb_kits/playbook/pb_radio/docs/_radio_orientation_swift.md
|
1552
1549
|
- app/pb_kits/playbook/pb_radio/docs/_radio_padding_swift.md
|
1553
1550
|
- app/pb_kits/playbook/pb_radio/docs/_radio_props_swift.md
|
1554
|
-
- app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.jsx
|
1555
|
-
- app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.md
|
1556
1551
|
- app/pb_kits/playbook/pb_radio/docs/_radio_spacing_swift.md
|
1557
1552
|
- app/pb_kits/playbook/pb_radio/docs/_radio_subtitle_swift.md
|
1558
1553
|
- app/pb_kits/playbook/pb_radio/docs/example.yml
|
@@ -1856,10 +1851,8 @@ files:
|
|
1856
1851
|
- app/pb_kits/playbook/pb_table/docs/_table_with_collapsible.jsx
|
1857
1852
|
- app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_rails.md
|
1858
1853
|
- app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_react.md
|
1859
|
-
- app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click.html.erb
|
1860
1854
|
- app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click.jsx
|
1861
|
-
- app/pb_kits/playbook/pb_table/docs/
|
1862
|
-
- app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click_react.md
|
1855
|
+
- app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click.md
|
1863
1856
|
- app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_content.jsx
|
1864
1857
|
- app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_content.md
|
1865
1858
|
- app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_content_rails.html.erb
|
@@ -1872,9 +1865,6 @@ files:
|
|
1872
1865
|
- app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_table.md
|
1873
1866
|
- app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_table_rails.html.erb
|
1874
1867
|
- app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_table_rails.md
|
1875
|
-
- app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.html.erb
|
1876
|
-
- app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.jsx
|
1877
|
-
- app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.md
|
1878
1868
|
- app/pb_kits/playbook/pb_table/docs/_table_with_subcomponents.jsx
|
1879
1869
|
- app/pb_kits/playbook/pb_table/docs/_table_with_subcomponents.md
|
1880
1870
|
- app/pb_kits/playbook/pb_table/docs/_table_with_subcomponents_as_divs.html.erb
|
@@ -1,64 +0,0 @@
|
|
1
|
-
import React from 'react'
|
2
|
-
import Highcharts from "highcharts";
|
3
|
-
import HighchartsReact from "highcharts-react-official";
|
4
|
-
|
5
|
-
import "../BarGraphStyles.scss";
|
6
|
-
// Your path might look more like this
|
7
|
-
//import "playbook-ui/dist/pb_bar_graph/BarGraphStyles.scss";
|
8
|
-
|
9
|
-
const columnChartData = [
|
10
|
-
{
|
11
|
-
name: "Installation",
|
12
|
-
data: [1475, 200, 3000, 654, 656],
|
13
|
-
},
|
14
|
-
{
|
15
|
-
name: "Manufacturing",
|
16
|
-
data: [4434, 524, 2320, 440, 500],
|
17
|
-
},
|
18
|
-
{
|
19
|
-
name: "Sales & Distribution",
|
20
|
-
data: [3387, 743, 1344, 434, 440],
|
21
|
-
},
|
22
|
-
{
|
23
|
-
name: "Project Development",
|
24
|
-
data: [3227, 878, 999, 780, 1000],
|
25
|
-
},
|
26
|
-
{
|
27
|
-
name: "Other",
|
28
|
-
data: [1111, 677, 3245, 500, 200],
|
29
|
-
},
|
30
|
-
];
|
31
|
-
|
32
|
-
const columnOptions = {
|
33
|
-
chart: {
|
34
|
-
type: "column",
|
35
|
-
},
|
36
|
-
series: columnChartData,
|
37
|
-
title: {
|
38
|
-
text: "Solar Employment Growth by Sector, 2010-2016",
|
39
|
-
},
|
40
|
-
subtitle: {
|
41
|
-
text: "Source: thesolarfoundation.com",
|
42
|
-
},
|
43
|
-
xAxis: {
|
44
|
-
categories: ["Jan", "Feb", "Mar", "Apr", "May"],
|
45
|
-
},
|
46
|
-
yAxis: {
|
47
|
-
min: 0,
|
48
|
-
title: {
|
49
|
-
text: "Number of Employees",
|
50
|
-
},
|
51
|
-
},
|
52
|
-
legend: { enabled: false },
|
53
|
-
credits: { enabled: false },
|
54
|
-
};
|
55
|
-
|
56
|
-
const BarGraphPbStyles = () => (
|
57
|
-
<div>
|
58
|
-
<HighchartsReact highcharts={Highcharts}
|
59
|
-
options={columnOptions}
|
60
|
-
/>
|
61
|
-
</div>
|
62
|
-
)
|
63
|
-
|
64
|
-
export default BarGraphPbStyles
|
@@ -1 +0,0 @@
|
|
1
|
-
You don't need to use the bar graph kit to apply the styles to your Highcharts bar graph. Just import the BarGraphStyles.scss to your component and the styles will apply automatically.
|
@@ -1,90 +0,0 @@
|
|
1
|
-
import React, { useState } from "react";
|
2
|
-
import { Flex, Table, Body, Avatar, DraggableProvider } from "playbook-ui";
|
3
|
-
|
4
|
-
// Initial items to be dragged
|
5
|
-
const data = [
|
6
|
-
{
|
7
|
-
id: "1",
|
8
|
-
task: "Task 1",
|
9
|
-
assignee_name: "Terry Miles",
|
10
|
-
assignee_img: "https://randomuser.me/api/portraits/men/44.jpg",
|
11
|
-
},
|
12
|
-
{
|
13
|
-
id: "2",
|
14
|
-
task: "Task 2",
|
15
|
-
assignee_name: "Sophia Miles",
|
16
|
-
assignee_img: "https://randomuser.me/api/portraits/women/8.jpg",
|
17
|
-
},
|
18
|
-
{
|
19
|
-
id: "3",
|
20
|
-
task: "Task 3",
|
21
|
-
assignee_name: "Alice Jones",
|
22
|
-
assignee_img: "https://randomuser.me/api/portraits/women/10.jpg",
|
23
|
-
},
|
24
|
-
{
|
25
|
-
id: "4",
|
26
|
-
task: "Task 4",
|
27
|
-
assignee_name: "Mike James",
|
28
|
-
assignee_img: "https://randomuser.me/api/portraits/men/8.jpg",
|
29
|
-
},
|
30
|
-
{
|
31
|
-
id: "5",
|
32
|
-
task: "Task 5",
|
33
|
-
assignee_name: "James Guy",
|
34
|
-
assignee_img: "https://randomuser.me/api/portraits/men/18.jpg",
|
35
|
-
}
|
36
|
-
];
|
37
|
-
|
38
|
-
const DraggableWithTableReact = (props) => {
|
39
|
-
const [initialState, setInitialState] = useState(data);
|
40
|
-
|
41
|
-
return (
|
42
|
-
<>
|
43
|
-
<DraggableProvider initialItems={data}
|
44
|
-
onReorder={(items) => setInitialState(items)}
|
45
|
-
>
|
46
|
-
<Table
|
47
|
-
responsive="none"
|
48
|
-
size="sm"
|
49
|
-
{...props}
|
50
|
-
>
|
51
|
-
<Table.Head>
|
52
|
-
<Table.Row>
|
53
|
-
<Table.Header>{"id"}</Table.Header>
|
54
|
-
<Table.Header>{"name"}</Table.Header>
|
55
|
-
<Table.Header>{"task number"}</Table.Header>
|
56
|
-
</Table.Row>
|
57
|
-
</Table.Head>
|
58
|
-
<Table.Body draggableContainer>
|
59
|
-
{initialState.map(({ id, task, assignee_name, assignee_img }) => (
|
60
|
-
<Table.Row
|
61
|
-
dragId={id}
|
62
|
-
draggableItem
|
63
|
-
key={id}
|
64
|
-
>
|
65
|
-
<Table.Cell>{id}</Table.Cell>
|
66
|
-
<Table.Cell>
|
67
|
-
<Flex align="center">
|
68
|
-
<Avatar
|
69
|
-
imageUrl={assignee_img}
|
70
|
-
size="xs"
|
71
|
-
/>
|
72
|
-
<Body
|
73
|
-
paddingLeft="xxs"
|
74
|
-
text={assignee_name}
|
75
|
-
{...props}
|
76
|
-
/>
|
77
|
-
</Flex>
|
78
|
-
</Table.Cell>
|
79
|
-
<Table.Cell>{task}</Table.Cell>
|
80
|
-
</Table.Row>
|
81
|
-
))}
|
82
|
-
</Table.Body>
|
83
|
-
</Table>
|
84
|
-
</DraggableProvider>
|
85
|
-
</>
|
86
|
-
|
87
|
-
);
|
88
|
-
};
|
89
|
-
|
90
|
-
export default DraggableWithTableReact;
|
@@ -1,5 +0,0 @@
|
|
1
|
-
The draggable kit can also be used in conjunction with the table kit to create draggable table rows. To do this:
|
2
|
-
|
3
|
-
- Wrap the Table with the `DraggableProvider` and manage state as shown.
|
4
|
-
- use the `draggableContainer` prop on the Table.Body to designate it as the Draggable Container
|
5
|
-
- use the `draggableItem` prop on the Table.Row to designate it as the Draggable Item. Make sure to also pass id to the `dragId` prop here.
|
@@ -1,60 +0,0 @@
|
|
1
|
-
import React from "react"
|
2
|
-
import { useForm } from "react-hook-form"
|
3
|
-
import { Radio, Flex, Body } from "playbook-ui"
|
4
|
-
|
5
|
-
const RadioReactHook = () => {
|
6
|
-
const { register, watch } = useForm({
|
7
|
-
defaultValues: {
|
8
|
-
size: "Small",
|
9
|
-
},
|
10
|
-
})
|
11
|
-
|
12
|
-
const selectedSize = watch("size", "Small")
|
13
|
-
|
14
|
-
return (
|
15
|
-
<Flex orientation="row">
|
16
|
-
<Flex
|
17
|
-
align="start"
|
18
|
-
orientation="column"
|
19
|
-
paddingRight="lg"
|
20
|
-
>
|
21
|
-
<Radio
|
22
|
-
alignment="left"
|
23
|
-
label="Small"
|
24
|
-
marginBottom='sm'
|
25
|
-
name="size"
|
26
|
-
value="Small"
|
27
|
-
{...register("size")}
|
28
|
-
/>
|
29
|
-
<br />
|
30
|
-
<Radio
|
31
|
-
alignment="left"
|
32
|
-
label="Medium"
|
33
|
-
marginBottom='sm'
|
34
|
-
name="size"
|
35
|
-
value="Medium"
|
36
|
-
{...register("size")}
|
37
|
-
/>
|
38
|
-
<br />
|
39
|
-
<Radio
|
40
|
-
alignment="left"
|
41
|
-
label="Large"
|
42
|
-
marginBottom='sm'
|
43
|
-
name="size"
|
44
|
-
value="Large"
|
45
|
-
{...register("size")}
|
46
|
-
/>
|
47
|
-
</Flex>
|
48
|
-
<Flex
|
49
|
-
align="start"
|
50
|
-
orientation="column"
|
51
|
-
>
|
52
|
-
<Body
|
53
|
-
text={`Selected Size: ${selectedSize}`}
|
54
|
-
/>
|
55
|
-
</Flex>
|
56
|
-
</Flex>
|
57
|
-
)
|
58
|
-
}
|
59
|
-
|
60
|
-
export default RadioReactHook
|
@@ -1 +0,0 @@
|
|
1
|
-
You can pass react hook props to the radio kit.
|
@@ -1,51 +0,0 @@
|
|
1
|
-
<% content = capture do %>
|
2
|
-
<%= pb_rails("card", props: { border_none: true, border_radius: "none", padding: "md" }) do %>
|
3
|
-
<%= pb_rails("body", props: { text: "Nested content inside a Table Row" }) %>
|
4
|
-
<% end %>
|
5
|
-
<% end %>
|
6
|
-
|
7
|
-
<%= pb_rails("table", props: { size: "sm" }) do %>
|
8
|
-
<%= pb_rails("table/table_head") do %>
|
9
|
-
<%= pb_rails("table/table_row") do %>
|
10
|
-
<%= pb_rails("table/table_header", props: { text: "Column 1"}) %>
|
11
|
-
<%= pb_rails("table/table_header", props: { text: "Column 2"}) %>
|
12
|
-
<%= pb_rails("table/table_header", props: { text: "Column 3"}) %>
|
13
|
-
<%= pb_rails("table/table_header", props: { text: "Column 4"}) %>
|
14
|
-
<%= pb_rails("table/table_header", props: { text: "Column 5"}) %>
|
15
|
-
<%= pb_rails("table/table_header", props: { text: ""}) %>
|
16
|
-
<% end %>
|
17
|
-
<% end %>
|
18
|
-
<%= pb_rails("table/table_body") do %>
|
19
|
-
<%= pb_rails("table/table_row", props: { collapsible: true, collapsible_content: content, collapsible_side_highlight: true, toggle_cell_id: "cell-1", id: "5" }) do %>
|
20
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 1"}) %>
|
21
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 2"}) %>
|
22
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 3"}) %>
|
23
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 4"}) %>
|
24
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 5"}) %>
|
25
|
-
<%= pb_rails("table/table_cell", props: { text_align: "right", id: "cell-1", cursor: "pointer" }) do %>
|
26
|
-
<%= pb_rails("icon", props: { icon: "chevron-down", fixed_width: true, color: "primary" }) %>
|
27
|
-
<% end %>
|
28
|
-
<% end %>
|
29
|
-
<%= pb_rails("table/table_row", props: { collapsible: true, collapsible_content: content, collapsible_side_highlight: true, toggle_cell_id: "cell-2", id: "6" }) do %>
|
30
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 1"}) %>
|
31
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 2"}) %>
|
32
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 3"}) %>
|
33
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 4"}) %>
|
34
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 5"}) %>
|
35
|
-
<%= pb_rails("table/table_cell", props: { text_align: "right", id: "cell-2", cursor: "pointer" }) do %>
|
36
|
-
<%= pb_rails("icon", props: { icon: "chevron-down", fixed_width: true, color: "primary" }) %>
|
37
|
-
<% end %>
|
38
|
-
<% end %>
|
39
|
-
<%= pb_rails("table/table_row", props: { collapsible: true, collapsible_content: content, collapsible_side_highlight: true, toggle_cell_id: "cell-3", id: "7" }) do %>
|
40
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 1"}) %>
|
41
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 2"}) %>
|
42
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 3"}) %>
|
43
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 4"}) %>
|
44
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 5"}) %>
|
45
|
-
<%= pb_rails("table/table_cell", props: { text_align: "right", id: "cell-3", cursor: "pointer" }) do %>
|
46
|
-
<%= pb_rails("icon", props: { icon: "chevron-down", fixed_width: true, color: "primary" }) %>
|
47
|
-
<% end %>
|
48
|
-
<% end %>
|
49
|
-
<% end %>
|
50
|
-
<% end %>
|
51
|
-
|
@@ -1,2 +0,0 @@
|
|
1
|
-
When using the `collapsible` prop, the default functionality is that the entire Row will be clickable to toggle the Row. To limit the click event to a specific Table Cell, you can use the `toggle_cell_id` prop to pass in the id of the Cell you want to use as the trigger.
|
2
|
-
__NOTE__: `toggle_cell_id` and the `id` on the Cell you want to use as the trigger MUST be the same. Please also be aware that you will need to pass in an `id` to any Table Rows you want to be collapsible. Make sure every `id` is unique if you are using multipe collapsibles.
|
@@ -1,96 +0,0 @@
|
|
1
|
-
<% checkboxes = [
|
2
|
-
{ name: 'Coffee', id: 'coffee', checked: false },
|
3
|
-
{ name: 'Ice Cream', id: 'ice-cream', checked: false },
|
4
|
-
{ name: 'Chocolate', id: 'chocolate', checked: true }
|
5
|
-
] %>
|
6
|
-
|
7
|
-
<%= pb_rails("flex", props: { justify: "end", margin_bottom: "sm" }) do %>
|
8
|
-
<%= pb_rails("flex", props: { justify: "end", margin_bottom: "sm" }) do %>
|
9
|
-
<%= pb_rails("button", props: { text: "Delete", id: "delete-button" }) %>
|
10
|
-
<% end %>
|
11
|
-
<% end %>
|
12
|
-
|
13
|
-
<%= pb_rails("table", props: { size: "sm" }) do %>
|
14
|
-
<%= pb_rails("table/table_head") do %>
|
15
|
-
<%= pb_rails("table/table_row") do %>
|
16
|
-
<%= pb_rails("table/table_header") do %>
|
17
|
-
<%= pb_rails("checkbox", props: {
|
18
|
-
checked: true,
|
19
|
-
value: "checkbox-value",
|
20
|
-
name: "main-checkbox-selectable",
|
21
|
-
indeterminate: true,
|
22
|
-
id: "checkbox-selectable"
|
23
|
-
}) %>
|
24
|
-
<% end %>
|
25
|
-
<%= pb_rails("table/table_header", props: { text: "Column 1" }) %>
|
26
|
-
<%= pb_rails("table/table_header", props: { text: "Column 2" }) %>
|
27
|
-
<%= pb_rails("table/table_header", props: { text: "Column 3" }) %>
|
28
|
-
<%= pb_rails("table/table_header", props: { text: "Column 4" }) %>
|
29
|
-
<%= pb_rails("table/table_header", props: { text: "Column 5" }) %>
|
30
|
-
<% end %>
|
31
|
-
<% end %>
|
32
|
-
<%= pb_rails("table/table_body") do %>
|
33
|
-
<% checkboxes.each_with_index do |checkbox, index| %>
|
34
|
-
<%= pb_rails("table/table_row") do %>
|
35
|
-
<%= pb_rails("table/table_cell") do %>
|
36
|
-
<%= pb_rails("checkbox", props: { checked: checkbox[:checked], id: "#{checkbox[:id]}-selectable-checkbox", name: "#{checkbox[:id]}-selectable-checkbox", on_change: "updateCheckboxes(#{index})", value: "check-box value" }) %>
|
37
|
-
<% end %>
|
38
|
-
<%= pb_rails("table/table_cell") do %>
|
39
|
-
<%= pb_rails("image", props: { alt: "picture of a misty forest", size: "xs", url: "https://unsplash.it/500/400/?image=634" }) %>
|
40
|
-
<% end %>
|
41
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 2" }) %>
|
42
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 3" }) %>
|
43
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 4" }) %>
|
44
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 5" }) %>
|
45
|
-
<% end %>
|
46
|
-
<% end %>
|
47
|
-
<% end %>
|
48
|
-
<% end %>
|
49
|
-
|
50
|
-
<script>
|
51
|
-
document.addEventListener('DOMContentLoaded', function() {
|
52
|
-
const mainCheckboxWrapper = document.getElementById('checkbox-selectable');
|
53
|
-
const mainCheckbox = document.getElementsByName("main-checkbox-selectable")[0];
|
54
|
-
const childCheckboxes = document.querySelectorAll('input[type="checkbox"][id$="selectable-checkbox"]');
|
55
|
-
const deleteButton = document.getElementById('delete-button');
|
56
|
-
|
57
|
-
const updateDeleteButton = () => {
|
58
|
-
const anyChecked = Array.from(childCheckboxes).some(checkbox => checkbox.checked);
|
59
|
-
deleteButton.style.display = anyChecked ? 'block' : 'none';
|
60
|
-
};
|
61
|
-
|
62
|
-
const updateMainCheckbox = () => {
|
63
|
-
// Count the number of checked child checkboxes
|
64
|
-
const checkedCount = Array.from(childCheckboxes).filter(cb => cb.checked).length;
|
65
|
-
// Determine if the main checkbox should be in an indeterminate state
|
66
|
-
const indeterminate = checkedCount > 0 && checkedCount < childCheckboxes.length;
|
67
|
-
|
68
|
-
// Set the main checkbox states
|
69
|
-
mainCheckbox.indeterminate = indeterminate;
|
70
|
-
mainCheckbox.checked = checkedCount > 0;
|
71
|
-
|
72
|
-
// Determine the icon class to add and remove based on the number of checked checkboxes
|
73
|
-
const iconClassToAdd = checkedCount === 0 ? 'pb_checkbox_checkmark' : 'pb_checkbox_indeterminate';
|
74
|
-
const iconClassToRemove = checkedCount === 0 ? 'pb_checkbox_indeterminate' : 'pb_checkbox_checkmark';
|
75
|
-
|
76
|
-
// Add and remove the icon class to the main checkbox wrapper
|
77
|
-
mainCheckboxWrapper.querySelector('[data-pb-checkbox-icon-span]').classList.add(iconClassToAdd);
|
78
|
-
mainCheckboxWrapper.querySelector('[data-pb-checkbox-icon-span]').classList.remove(iconClassToRemove);
|
79
|
-
|
80
|
-
// Toggle the visibility of the checkbox icon based on the indeterminate state
|
81
|
-
mainCheckboxWrapper.getElementsByClassName("indeterminate_icon")[0].classList.toggle('hidden', !indeterminate);
|
82
|
-
mainCheckboxWrapper.getElementsByClassName("check_icon")[0].classList.toggle('hidden', indeterminate);
|
83
|
-
|
84
|
-
updateDeleteButton();
|
85
|
-
};
|
86
|
-
|
87
|
-
mainCheckbox.addEventListener('change', function() {
|
88
|
-
childCheckboxes.forEach(cb => cb.checked = this.checked);
|
89
|
-
updateMainCheckbox();
|
90
|
-
});
|
91
|
-
|
92
|
-
childCheckboxes.forEach(cb => {
|
93
|
-
cb.addEventListener('change', updateMainCheckbox);
|
94
|
-
});
|
95
|
-
});
|
96
|
-
</script>
|
@@ -1,101 +0,0 @@
|
|
1
|
-
import React, { useState } from 'react'
|
2
|
-
import { Table, Checkbox, Image, Flex, Button } from 'playbook-ui'
|
3
|
-
|
4
|
-
const TableWithSelectableRows = (props) => {
|
5
|
-
const [checkboxes, setCheckboxes] = useState([
|
6
|
-
{ name: "Coffee", checked: false },
|
7
|
-
{ name: "Ice Cream", checked: false },
|
8
|
-
{ name: "Chocolate", checked: true },
|
9
|
-
]);
|
10
|
-
|
11
|
-
const isAllChecked = !checkboxes.find((checkbox) => !checkbox.checked);
|
12
|
-
const isNoneChecked = !checkboxes.find((checkbox) => checkbox.checked);
|
13
|
-
|
14
|
-
const processCheckboxes = (checked) =>
|
15
|
-
checkboxes.slice(0).map((checkbox) => {
|
16
|
-
checkbox.checked = checked;
|
17
|
-
return checkbox;
|
18
|
-
});
|
19
|
-
|
20
|
-
const onToggleAll = () => {
|
21
|
-
setCheckboxes(
|
22
|
-
isNoneChecked ? processCheckboxes(true) : processCheckboxes(false)
|
23
|
-
);
|
24
|
-
};
|
25
|
-
|
26
|
-
const updateCheckboxes = (checkbox, index) => {
|
27
|
-
const newCheckboxes = checkboxes.slice(0);
|
28
|
-
newCheckboxes[index].checked = !checkbox.checked;
|
29
|
-
setCheckboxes(newCheckboxes);
|
30
|
-
};
|
31
|
-
|
32
|
-
return (
|
33
|
-
<>
|
34
|
-
<Flex
|
35
|
-
justify="end"
|
36
|
-
marginBottom="sm"
|
37
|
-
>
|
38
|
-
{!isNoneChecked && (
|
39
|
-
<Flex
|
40
|
-
justify="end"
|
41
|
-
marginBottom="sm"
|
42
|
-
>
|
43
|
-
<Button>Delete</Button>
|
44
|
-
</Flex>
|
45
|
-
)}
|
46
|
-
</Flex>
|
47
|
-
<Table
|
48
|
-
size="sm"
|
49
|
-
{...props}
|
50
|
-
>
|
51
|
-
<Table.Head>
|
52
|
-
<Table.Row>
|
53
|
-
<Table.Header>
|
54
|
-
<Checkbox
|
55
|
-
checked={isAllChecked}
|
56
|
-
indeterminate={!isAllChecked && !isNoneChecked}
|
57
|
-
name="checkbox-name"
|
58
|
-
onChange={onToggleAll}
|
59
|
-
value="check-box value"
|
60
|
-
/>
|
61
|
-
</Table.Header>
|
62
|
-
<Table.Header>{"Column 1"}</Table.Header>
|
63
|
-
<Table.Header>{"Column 2"}</Table.Header>
|
64
|
-
<Table.Header>{"Column 3"}</Table.Header>
|
65
|
-
<Table.Header>{"Column 4"}</Table.Header>
|
66
|
-
<Table.Header>{"Column 5"}</Table.Header>
|
67
|
-
</Table.Row>
|
68
|
-
</Table.Head>
|
69
|
-
<Table.Body>
|
70
|
-
{checkboxes.map((checkbox, index) => (
|
71
|
-
<Table.Row key={index}>
|
72
|
-
<Table.Cell>
|
73
|
-
<Checkbox
|
74
|
-
checked={checkbox.checked}
|
75
|
-
name={checkbox.name}
|
76
|
-
onChange={() => {
|
77
|
-
updateCheckboxes(checkbox, index);
|
78
|
-
}}
|
79
|
-
value="check-box value"
|
80
|
-
/>
|
81
|
-
</Table.Cell>
|
82
|
-
<Table.Cell>
|
83
|
-
<Image
|
84
|
-
alt="picture of a misty forest"
|
85
|
-
size="xs"
|
86
|
-
url="https://unsplash.it/500/400/?image=634"
|
87
|
-
/>
|
88
|
-
</Table.Cell>
|
89
|
-
<Table.Cell>{"Value 2"}</Table.Cell>
|
90
|
-
<Table.Cell>{"Value 3"}</Table.Cell>
|
91
|
-
<Table.Cell>{"Value 4"}</Table.Cell>
|
92
|
-
<Table.Cell>{"Value 5"}</Table.Cell>
|
93
|
-
</Table.Row>
|
94
|
-
))}
|
95
|
-
</Table.Body>
|
96
|
-
</Table>
|
97
|
-
</>
|
98
|
-
)
|
99
|
-
}
|
100
|
-
|
101
|
-
export default TableWithSelectableRows
|
@@ -1 +0,0 @@
|
|
1
|
-
Use the Checkbox kit with the Table to achieve the selectable row functionality seen here.
|