playbook_ui_docs 14.13.0.pre.alpha.play1754pbtagprogressradio6121 → 14.13.0.pre.alpha.play1834depupdatesass6024
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_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_icon_button/docs/_icon_button_default.html.erb +2 -1
- data/app/pb_kits/playbook/pb_icon_button/docs/example.yml +3 -1
- data/app/pb_kits/playbook/pb_table/docs/example.yml +0 -4
- data/app/pb_kits/playbook/pb_table/docs/index.js +1 -3
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_mask.html.erb +0 -14
- data/dist/playbook-doc.js +1 -1
- metadata +2 -11
- 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_icon_button/docs/_icon_button_sizes.html.erb +0 -27
- data/app/pb_kits/playbook/pb_table/docs/_table_with_clickable_rows.html.erb +0 -47
- data/app/pb_kits/playbook/pb_table/docs/_table_with_clickable_rows.jsx +0 -88
- data/app/pb_kits/playbook/pb_table/docs/_table_with_clickable_rows.md +0 -1
- 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
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.play1834depupdatesass6024
|
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-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: playbook_ui
|
@@ -716,8 +716,6 @@ files:
|
|
716
716
|
- app/pb_kits/playbook/pb_draggable/docs/_draggable_with_selectable_list_rails.md
|
717
717
|
- app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table.html.erb
|
718
718
|
- app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table.md
|
719
|
-
- app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table_react.jsx
|
720
|
-
- app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table_react.md
|
721
719
|
- app/pb_kits/playbook/pb_draggable/docs/example.yml
|
722
720
|
- app/pb_kits/playbook/pb_draggable/docs/index.js
|
723
721
|
- app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.jsx
|
@@ -1034,7 +1032,6 @@ files:
|
|
1034
1032
|
- app/pb_kits/playbook/pb_icon/docs/example.yml
|
1035
1033
|
- app/pb_kits/playbook/pb_icon/docs/index.js
|
1036
1034
|
- app/pb_kits/playbook/pb_icon_button/docs/_icon_button_default.html.erb
|
1037
|
-
- app/pb_kits/playbook/pb_icon_button/docs/_icon_button_sizes.html.erb
|
1038
1035
|
- app/pb_kits/playbook/pb_icon_button/docs/example.yml
|
1039
1036
|
- app/pb_kits/playbook/pb_icon_circle/docs/_description.md
|
1040
1037
|
- app/pb_kits/playbook/pb_icon_circle/docs/_footer.md
|
@@ -1845,9 +1842,6 @@ files:
|
|
1845
1842
|
- app/pb_kits/playbook/pb_table/docs/_table_vertical_border.jsx
|
1846
1843
|
- app/pb_kits/playbook/pb_table/docs/_table_with_background_kit.html.erb
|
1847
1844
|
- app/pb_kits/playbook/pb_table/docs/_table_with_background_kit.jsx
|
1848
|
-
- app/pb_kits/playbook/pb_table/docs/_table_with_clickable_rows.html.erb
|
1849
|
-
- app/pb_kits/playbook/pb_table/docs/_table_with_clickable_rows.jsx
|
1850
|
-
- app/pb_kits/playbook/pb_table/docs/_table_with_clickable_rows.md
|
1851
1845
|
- app/pb_kits/playbook/pb_table/docs/_table_with_collapsible.html.erb
|
1852
1846
|
- app/pb_kits/playbook/pb_table/docs/_table_with_collapsible.jsx
|
1853
1847
|
- app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_rails.md
|
@@ -1866,9 +1860,6 @@ files:
|
|
1866
1860
|
- app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_table.md
|
1867
1861
|
- app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_table_rails.html.erb
|
1868
1862
|
- app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_table_rails.md
|
1869
|
-
- app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.html.erb
|
1870
|
-
- app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.jsx
|
1871
|
-
- app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.md
|
1872
1863
|
- app/pb_kits/playbook/pb_table/docs/_table_with_subcomponents.jsx
|
1873
1864
|
- app/pb_kits/playbook/pb_table/docs/_table_with_subcomponents.md
|
1874
1865
|
- app/pb_kits/playbook/pb_table/docs/_table_with_subcomponents_as_divs.html.erb
|
@@ -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,27 +0,0 @@
|
|
1
|
-
<%= pb_rails("flex", props: { align: "center"}) do %>
|
2
|
-
<%= pb_rails("icon_button", props: {size: "lg"}) %> <span>Large</span>
|
3
|
-
<% end %>
|
4
|
-
|
5
|
-
<%= pb_rails("flex", props: { align: "center" }) do %>
|
6
|
-
<%= pb_rails("icon_button", props: {size: "sm"}) %> <span>Small</span>
|
7
|
-
<% end %>
|
8
|
-
|
9
|
-
<%= pb_rails("flex", props: { align: "center" }) do %>
|
10
|
-
<%= pb_rails("icon_button", props: {size: "xs"}) %> <span>XSmall</span>
|
11
|
-
<% end %>
|
12
|
-
|
13
|
-
<%= pb_rails("flex", props: { align: "center", margin_top: "md" }) do %>
|
14
|
-
<%= pb_rails("icon_button", props: {size: "1x"}) %> <span>1x</span>
|
15
|
-
<% end %>
|
16
|
-
|
17
|
-
<%= pb_rails("flex", props: { align: "center" }) do %>
|
18
|
-
<%= pb_rails("icon_button", props: {size: "2x"}) %> <span>2x</span>
|
19
|
-
<% end %>
|
20
|
-
|
21
|
-
<%= pb_rails("flex", props: { align: "center" }) do %>
|
22
|
-
<%= pb_rails("icon_button", props: {size: "3x"}) %> <span>3x</span>
|
23
|
-
<% end %>
|
24
|
-
|
25
|
-
<%= pb_rails("flex", props: { align: "center" }) do %>
|
26
|
-
<%= pb_rails("icon_button", props: {size: "4x"}) %> <span>4x</span>
|
27
|
-
<% end %>
|
@@ -1,47 +0,0 @@
|
|
1
|
-
<%= pb_rails("table", props: { size: "sm" }) do %>
|
2
|
-
<%= pb_rails("table/table_head") do %>
|
3
|
-
<%= pb_rails("table/table_row") do %>
|
4
|
-
<%= pb_rails("table/table_header", props: { text: "Column 1" }) %>
|
5
|
-
<%= pb_rails("table/table_header", props: { text: "Column 2" }) %>
|
6
|
-
<%= pb_rails("table/table_header", props: { text: "Column 3" }) %>
|
7
|
-
<%= pb_rails("table/table_header", props: { text: "Column 4" }) %>
|
8
|
-
<%= pb_rails("table/table_header", props: { text: "Column 5" }) %>
|
9
|
-
<%= pb_rails("table/table_header", props: { text: "" }) %>
|
10
|
-
<% end %>
|
11
|
-
<% end %>
|
12
|
-
<%= pb_rails("table/table_body") do %>
|
13
|
-
<%= pb_rails("table/table_row", props: { cursor: "pointer", html_options: { onclick: "alert('Row 1 clicked')" } }) do %>
|
14
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 1" }) %>
|
15
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 2" }) %>
|
16
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 3" }) %>
|
17
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 4" }) %>
|
18
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 5" }) %>
|
19
|
-
<%= pb_rails("table/table_cell", props: { text_align: "right" }) do %>
|
20
|
-
<%= pb_rails("icon", props: { color: "primary_action", fixed_width: true, icon: "chevron-right", size: "xs" }) %>
|
21
|
-
<% end %>
|
22
|
-
<% end %>
|
23
|
-
|
24
|
-
<%= pb_rails("table/table_row", props: { cursor: "pointer", html_options: { onclick: "alert('Row 2 clicked')" } }) do %>
|
25
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 1" }) %>
|
26
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 2" }) %>
|
27
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 3" }) %>
|
28
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 4" }) %>
|
29
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 5" }) %>
|
30
|
-
<%= pb_rails("table/table_cell", props: { text_align: "right" }) do %>
|
31
|
-
<%= pb_rails("icon", props: { color: "primary_action", fixed_width: true, icon: "chevron-right", size: "xs" }) %>
|
32
|
-
<% end %>
|
33
|
-
<% end %>
|
34
|
-
|
35
|
-
<%= pb_rails("table/table_row", props: { cursor: "pointer", html_options: { onclick: "alert('Row 3 clicked')" } }) do %>
|
36
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 1" }) %>
|
37
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 2" }) %>
|
38
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 3" }) %>
|
39
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 4" }) %>
|
40
|
-
<%= pb_rails("table/table_cell", props: { text: "Value 5" }) %>
|
41
|
-
<%= pb_rails("table/table_cell", props: { text_align: "right" }) do %>
|
42
|
-
<%= pb_rails("icon", props: { color: "primary_action", fixed_width: true, icon: "chevron-right", size: "xs" }) %>
|
43
|
-
<% end %>
|
44
|
-
<% end %>
|
45
|
-
<% end %>
|
46
|
-
<% end %>
|
47
|
-
|
@@ -1,88 +0,0 @@
|
|
1
|
-
import React from 'react'
|
2
|
-
import { Table, Icon } from 'playbook-ui'
|
3
|
-
|
4
|
-
const TableWithClickableRows = (props) => {
|
5
|
-
|
6
|
-
|
7
|
-
return (
|
8
|
-
<Table
|
9
|
-
size="sm"
|
10
|
-
{...props}
|
11
|
-
>
|
12
|
-
<Table.Head>
|
13
|
-
<Table.Row>
|
14
|
-
<Table.Header>{"Column 1"}</Table.Header>
|
15
|
-
<Table.Header>{"Column 2"}</Table.Header>
|
16
|
-
<Table.Header>{"Column 3"}</Table.Header>
|
17
|
-
<Table.Header>{"Column 4"}</Table.Header>
|
18
|
-
<Table.Header>{"Column 5"}</Table.Header>
|
19
|
-
<Table.Header>{""}</Table.Header>
|
20
|
-
</Table.Row>
|
21
|
-
</Table.Head>
|
22
|
-
<Table.Body>
|
23
|
-
<Table.Row
|
24
|
-
cursor="pointer"
|
25
|
-
htmlOptions={{ onClick: () => alert("Row 1 clicked") }}
|
26
|
-
{...props}
|
27
|
-
>
|
28
|
-
<Table.Cell>{"Value 1"}</Table.Cell>
|
29
|
-
<Table.Cell>{"Value 2"}</Table.Cell>
|
30
|
-
<Table.Cell>{"Value 3"}</Table.Cell>
|
31
|
-
<Table.Cell>{"Value 4"}</Table.Cell>
|
32
|
-
<Table.Cell>{"Value 5"}</Table.Cell>
|
33
|
-
<Table.Cell textAlign="right">
|
34
|
-
<Icon
|
35
|
-
color="primary_action"
|
36
|
-
fixedWidth
|
37
|
-
icon="chevron-right"
|
38
|
-
size="xs"
|
39
|
-
{...props}
|
40
|
-
/>
|
41
|
-
</Table.Cell>
|
42
|
-
</Table.Row>
|
43
|
-
<Table.Row
|
44
|
-
cursor="pointer"
|
45
|
-
htmlOptions={{ onClick: () => alert("Row 2 clicked") }}
|
46
|
-
{...props}
|
47
|
-
>
|
48
|
-
<Table.Cell>{"Value 1"}</Table.Cell>
|
49
|
-
<Table.Cell>{"Value 2"}</Table.Cell>
|
50
|
-
<Table.Cell>{"Value 3"}</Table.Cell>
|
51
|
-
<Table.Cell>{"Value 4"}</Table.Cell>
|
52
|
-
<Table.Cell>{"Value 5"}</Table.Cell>
|
53
|
-
<Table.Cell textAlign="right">
|
54
|
-
<Icon
|
55
|
-
color="primary_action"
|
56
|
-
fixedWidth
|
57
|
-
icon="chevron-right"
|
58
|
-
size="xs"
|
59
|
-
{...props}
|
60
|
-
/>
|
61
|
-
</Table.Cell>
|
62
|
-
</Table.Row>
|
63
|
-
<Table.Row
|
64
|
-
cursor="pointer"
|
65
|
-
htmlOptions={{ onClick: () => alert("Row 3 clicked") }}
|
66
|
-
{...props}
|
67
|
-
>
|
68
|
-
<Table.Cell>{"Value 1"}</Table.Cell>
|
69
|
-
<Table.Cell>{"Value 2"}</Table.Cell>
|
70
|
-
<Table.Cell>{"Value 3"}</Table.Cell>
|
71
|
-
<Table.Cell>{"Value 4"}</Table.Cell>
|
72
|
-
<Table.Cell>{"Value 5"}</Table.Cell>
|
73
|
-
<Table.Cell textAlign="right">
|
74
|
-
<Icon
|
75
|
-
color="primary_action"
|
76
|
-
fixedWidth
|
77
|
-
icon="chevron-right"
|
78
|
-
size="xs"
|
79
|
-
{...props}
|
80
|
-
/>
|
81
|
-
</Table.Cell>
|
82
|
-
</Table.Row>
|
83
|
-
</Table.Body>
|
84
|
-
</Table>
|
85
|
-
)
|
86
|
-
}
|
87
|
-
|
88
|
-
export default TableWithClickableRows
|
@@ -1 +0,0 @@
|
|
1
|
-
Clickable table rows do not require any additional props. This doc example showcases how to set them up using `html_options`/`htmlOptions` and click events. Using the global prop for cursor to set it to "pointer" is also recommended for better UX.
|
@@ -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.
|