playbook_ui_docs 13.28.0 → 13.29.0.pre.alpha.PBNTR329draggablev33059
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_beta_subrow_headers.html.erb +40 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_beta_subrow_headers.md +3 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_subrow_headers.md +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +1 -1
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_custom.md +2 -1
- data/app/pb_kits/playbook/pb_bar_graph/docs/{_bar_graph_custom.html.erb → _bar_graph_custom_rails.html.erb} +3 -3
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_custom_rails.md +2 -0
- data/app/pb_kits/playbook/pb_bar_graph/docs/example.yml +1 -1
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_default.jsx +53 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_default.md +4 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_multiple_containers.jsx +158 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_cards.jsx +101 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_list.jsx +50 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_list.md +1 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_selectable_list.jsx +51 -0
- data/app/pb_kits/playbook/pb_draggable/docs/example.yml +11 -0
- data/app/pb_kits/playbook/pb_draggable/docs/index.js +5 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +10 -0
- data/app/pb_kits/playbook/pb_pill/docs/_description.md +1 -1
- data/app/pb_kits/playbook/pb_table/docs/_table_alignment_column.jsx +33 -32
- data/app/pb_kits/playbook/pb_table/docs/_table_alignment_column.md +1 -1
- data/app/pb_kits/playbook/pb_table/docs/_table_alignment_column_rails.md +2 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_alignment_row.jsx +33 -33
- data/app/pb_kits/playbook/pb_table/docs/_table_alignment_row.md +1 -1
- data/app/pb_kits/playbook/pb_table/docs/_table_alignment_row_rails.html.erb +34 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_alignment_row_rails.md +2 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_alignment_shift_data.jsx +51 -50
- data/app/pb_kits/playbook/pb_table/docs/_table_alignment_shift_data.md +1 -1
- data/app/pb_kits/playbook/pb_table/docs/_table_alignment_shift_data_rails.html.erb +54 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_alignment_shift_data_rails.md +2 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_alignment_shift_row.jsx +37 -38
- data/app/pb_kits/playbook/pb_table/docs/_table_alignment_shift_row.md +1 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_alignment_shift_row_rails.html.erb +53 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_alignment_shift_row_rails.md +1 -0
- data/app/pb_kits/playbook/pb_table/docs/{_table_alignment_row.html.erb → _table_outer_padding.html.erb} +7 -7
- data/app/pb_kits/playbook/pb_table/docs/_table_outer_padding.jsx +76 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_outer_padding.md +1 -0
- data/app/pb_kits/playbook/pb_table/docs/example.yml +9 -9
- data/app/pb_kits/playbook/pb_table/docs/index.js +1 -0
- data/dist/menu.yml +5 -2
- data/dist/playbook-doc.js +10 -10
- metadata +30 -10
- data/app/pb_kits/playbook/pb_table/docs/_table_alignment_shift_data.html.erb +0 -63
- data/app/pb_kits/playbook/pb_table/docs/_table_alignment_shift_row.html.erb +0 -52
- /data/app/pb_kits/playbook/pb_table/docs/{_table_alignment_column.html.erb → _table_alignment_column_rails.html.erb} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 10c14d9c29cafc933037cf345a94d8c793de8a2c806240a9ac1fcb52c65ed3ff
|
4
|
+
data.tar.gz: ce6c43f50cd194c89827aab59a44a1214f8b1821f9a2bc8e0efe7e826897a336
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 217751cb8fbd57472ce3c0f765e4f81c171084cbe4804cfdea13978918a60a6f90c1d42d0f45693e2499ab0c8316f296963028afbb881c6dce7629808acdc8bd
|
7
|
+
data.tar.gz: 072247251edc16e23358ddcf8cdf63cd0883c583b03d68aa311a08bbf6b1ee151cb40c79742295ce5a33a2908fd9979944ffd091ad4bc27e99019a9811d67314
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<%
|
2
|
+
column_definitions = [
|
3
|
+
{
|
4
|
+
accessor: "year",
|
5
|
+
label: "Year",
|
6
|
+
cellAccessors: ["quarter", "month", "day"],
|
7
|
+
},
|
8
|
+
{
|
9
|
+
accessor: "newEnrollments",
|
10
|
+
label: "New Enrollments",
|
11
|
+
},
|
12
|
+
{
|
13
|
+
accessor: "scheduledMeetings",
|
14
|
+
label: "Scheduled Meetings",
|
15
|
+
},
|
16
|
+
{
|
17
|
+
accessor: "attendanceRate",
|
18
|
+
label: "Attendance Rate",
|
19
|
+
},
|
20
|
+
{
|
21
|
+
accessor: "completedClasses",
|
22
|
+
label: "Completed Classes",
|
23
|
+
},
|
24
|
+
{
|
25
|
+
accessor: "classCompletionRate",
|
26
|
+
label: "Class Completion Rate",
|
27
|
+
},
|
28
|
+
{
|
29
|
+
accessor: "graduatedStudents",
|
30
|
+
label: "Graduated Students",
|
31
|
+
}
|
32
|
+
]
|
33
|
+
|
34
|
+
subrow_headers = ["Quarter", "Month", "Day"]
|
35
|
+
%>
|
36
|
+
|
37
|
+
<%= pb_rails("advanced_table", props: { table_data: @table_data, column_definitions: column_definitions }) do %>
|
38
|
+
<%= pb_rails("advanced_table/table_header", props: { column_definitions: column_definitions }) %>
|
39
|
+
<%= pb_rails("advanced_table/table_body", props: { id: "subrow_headers", table_data: @table_data, column_definitions: column_definitions, subrow_headers: subrow_headers, enable_toggle_expansion: "all" }) %>
|
40
|
+
<% end %>
|
@@ -0,0 +1,3 @@
|
|
1
|
+
`subrow_headers` is an optional prop that if present will add header rows at each level of the nested data. The prop takes an array of strings, each string being the text for each header row. The array of strings must be in the order in which they need to be rendered in the UI according to depth.
|
2
|
+
|
3
|
+
`enable_toggle_expansion` is an additional optional prop that can be used in conjunction with the subRowHeaders prop. `enable_toggle_expansion` is a string that can be "all", "header" or "none". If set to "all", the toggle exapansion button will appear in the table header as well as in the subRow headers. If set to "header" button will only appear in header and NOT in subRow headers. This is set to "header" by default.
|
@@ -1,3 +1,3 @@
|
|
1
1
|
`subRowHeaders` is an optional prop that if present will add header rows at each level of the nested data. The prop takes an array of strings, each string being the text for each header row. The array of strings must be in the order in which they need to be rendered in the UI according to depth.
|
2
2
|
|
3
|
-
`enableToggleExpansion` is an additional optional prop that can be used in conjunction with the subRowHeaders prop. `enableToggleExpansion` is a string that can be
|
3
|
+
`enableToggleExpansion` is an additional optional prop that can be used in conjunction with the subRowHeaders prop. `enableToggleExpansion` is a string that can be "all", "header" or "none". If set to "all", the toggle exapansion button will appear in the table header as well as in the subRow headers. If set to "header" button will only appear in header and NOT in subRow headers. This is set to "header" by default.
|
@@ -1,6 +1,7 @@
|
|
1
1
|
examples:
|
2
2
|
rails:
|
3
3
|
- advanced_table_beta: Default (Required Props)
|
4
|
+
- advanced_table_beta_subrow_headers: SubRow Headers
|
4
5
|
react:
|
5
6
|
- advanced_table_default: Default (Required Props)
|
6
7
|
- advanced_table_loading: Loading State
|
@@ -12,4 +13,3 @@ examples:
|
|
12
13
|
- advanced_table_table_options: Table Options
|
13
14
|
- advanced_table_table_props: Table Props
|
14
15
|
- advanced_table_inline_row_loading: inline Row Loading
|
15
|
-
|
@@ -1 +1,2 @@
|
|
1
|
-
|
1
|
+
The `customOptions` prop provides comprehensive access to additional [Highcharts options](https://api.highcharts.com/highcharts/) that are not explicitly defined as props.
|
2
|
+
It's important to note that certain options may require specific script imports to function properly.
|
@@ -15,7 +15,7 @@
|
|
15
15
|
data: [1111,677,3245,500,200]
|
16
16
|
}] %>
|
17
17
|
|
18
|
-
<%
|
18
|
+
<% bar_graph_options = {
|
19
19
|
customOptions: {
|
20
20
|
subtitle: {
|
21
21
|
text: "Overwritten subtitle",
|
@@ -45,5 +45,5 @@
|
|
45
45
|
y_axis_min: 0,
|
46
46
|
subtitle: 'Subtitle to replace',
|
47
47
|
title: 'Bar Graph with Custom Overrides',
|
48
|
-
custom_options:
|
49
|
-
}) %>
|
48
|
+
custom_options: bar_graph_options
|
49
|
+
}) %>
|
@@ -8,7 +8,7 @@ examples:
|
|
8
8
|
- bar_graph_height: Height
|
9
9
|
- bar_graph_spline: Spline
|
10
10
|
- bar_graph_colors: Color Overrides
|
11
|
-
-
|
11
|
+
- bar_graph_custom_rails: Custom Overrides
|
12
12
|
- bar_graph_stacked: Stacked
|
13
13
|
- bar_graph_negative_numbers: Negative Numbers
|
14
14
|
- bar_graph_secondary_y_axis: Secondary Y-Axis
|
@@ -0,0 +1,53 @@
|
|
1
|
+
import React, { useState } from "react";
|
2
|
+
import { SelectableList, Draggable, DraggableProvider } from "../../";
|
3
|
+
|
4
|
+
// Initial items to be dragged
|
5
|
+
const data = [
|
6
|
+
{
|
7
|
+
id: "1",
|
8
|
+
text: "Task 1",
|
9
|
+
},
|
10
|
+
{
|
11
|
+
id: "2",
|
12
|
+
text: "Task 2",
|
13
|
+
},
|
14
|
+
{
|
15
|
+
id: "3",
|
16
|
+
text: "Task 3",
|
17
|
+
},
|
18
|
+
{
|
19
|
+
id: "4",
|
20
|
+
text: "Task 4",
|
21
|
+
},
|
22
|
+
];
|
23
|
+
|
24
|
+
const DraggableDefault = (props) => {
|
25
|
+
const [initialState, setInitialState] = useState(data);
|
26
|
+
|
27
|
+
return (
|
28
|
+
<>
|
29
|
+
<DraggableProvider initialItems={data}
|
30
|
+
onReorder={(items) => setInitialState(items)}
|
31
|
+
>
|
32
|
+
<Draggable.Container {...props}>
|
33
|
+
<SelectableList variant="checkbox">
|
34
|
+
{initialState.map(({ id, text }) => (
|
35
|
+
<Draggable.Item id={id}
|
36
|
+
key={id}
|
37
|
+
>
|
38
|
+
<SelectableList.Item
|
39
|
+
label={text}
|
40
|
+
name={id}
|
41
|
+
value={id}
|
42
|
+
/>
|
43
|
+
</Draggable.Item>
|
44
|
+
))}
|
45
|
+
</SelectableList>
|
46
|
+
</Draggable.Container>
|
47
|
+
</DraggableProvider>
|
48
|
+
</>
|
49
|
+
|
50
|
+
);
|
51
|
+
};
|
52
|
+
|
53
|
+
export default DraggableDefault;
|
@@ -0,0 +1,4 @@
|
|
1
|
+
To use the Draggable kit, you must use the DraggableProvider and pass in `initialItems`. The `onReorder` is a function that returns the data as it changes as items are reordered. Use this to manage state as shown.
|
2
|
+
|
3
|
+
The `Draggable.Container` specifies the container within which items can be dropped.
|
4
|
+
The `Draggable.Item` specifies the items that can be dragged and dropped. `Draggable.Item` requires `id` to be passed in as shown.
|
@@ -0,0 +1,158 @@
|
|
1
|
+
import React, { useState } from "react";
|
2
|
+
import {
|
3
|
+
Flex,
|
4
|
+
Caption,
|
5
|
+
Card,
|
6
|
+
FlexItem,
|
7
|
+
Badge,
|
8
|
+
Avatar,
|
9
|
+
Title,
|
10
|
+
Body,
|
11
|
+
Draggable,
|
12
|
+
DraggableProvider,
|
13
|
+
} from "../../";
|
14
|
+
|
15
|
+
// Initial groups to drag between
|
16
|
+
const containers = ["To Do", "In Progress", "Done"];
|
17
|
+
|
18
|
+
// Initial items to be dragged
|
19
|
+
const data = [
|
20
|
+
{
|
21
|
+
id: "11",
|
22
|
+
container: "To Do",
|
23
|
+
title: "Task 1",
|
24
|
+
description: "Bug fixes",
|
25
|
+
assignee_name: "Terry Miles",
|
26
|
+
assignee_img: "https://randomuser.me/api/portraits/men/44.jpg",
|
27
|
+
},
|
28
|
+
{
|
29
|
+
id: "12",
|
30
|
+
container: "To Do",
|
31
|
+
title: "Task 2",
|
32
|
+
description: "Documentation",
|
33
|
+
assignee_name: "Sophia Miles",
|
34
|
+
assignee_img: "https://randomuser.me/api/portraits/women/8.jpg",
|
35
|
+
},
|
36
|
+
{
|
37
|
+
id: "13",
|
38
|
+
container: "In Progress",
|
39
|
+
title: "Task 3",
|
40
|
+
description: "Add a variant",
|
41
|
+
assignee_name: "Alice Jones",
|
42
|
+
assignee_img: "https://randomuser.me/api/portraits/women/10.jpg",
|
43
|
+
},
|
44
|
+
{
|
45
|
+
id: "14",
|
46
|
+
container: "To Do",
|
47
|
+
title: "Task 4",
|
48
|
+
description: "Add jest tests",
|
49
|
+
assignee_name: "Mike James",
|
50
|
+
assignee_img: "https://randomuser.me/api/portraits/men/8.jpg",
|
51
|
+
},
|
52
|
+
{
|
53
|
+
id: "15",
|
54
|
+
container: "Done",
|
55
|
+
title: "Task 5",
|
56
|
+
description: "Alpha testing",
|
57
|
+
assignee_name: "James Guy",
|
58
|
+
assignee_img: "https://randomuser.me/api/portraits/men/18.jpg",
|
59
|
+
},
|
60
|
+
{
|
61
|
+
id: "16",
|
62
|
+
container: "In Progress",
|
63
|
+
title: "Task 6",
|
64
|
+
description: "Release",
|
65
|
+
assignee_name: "Sally Jones",
|
66
|
+
assignee_img: "https://randomuser.me/api/portraits/women/28.jpg",
|
67
|
+
},
|
68
|
+
];
|
69
|
+
|
70
|
+
const DraggableMultipleContainer = (props) => {
|
71
|
+
const [initialState, setInitialState] = useState(data);
|
72
|
+
|
73
|
+
const badgeProperties = (container) => {
|
74
|
+
switch (container) {
|
75
|
+
case "To Do":
|
76
|
+
return { text: "queue", color: "warning" };
|
77
|
+
case "In Progress":
|
78
|
+
return { text: "progress", color: "primary" };
|
79
|
+
default:
|
80
|
+
return { text: "done", color: "success" };
|
81
|
+
}
|
82
|
+
};
|
83
|
+
|
84
|
+
return (
|
85
|
+
<DraggableProvider initialItems={data}
|
86
|
+
onReorder={(items) => setInitialState(items)}
|
87
|
+
>
|
88
|
+
<Flex
|
89
|
+
justifyContent="center"
|
90
|
+
{...props}
|
91
|
+
>
|
92
|
+
{containers?.map((container) => (
|
93
|
+
<Draggable.Container
|
94
|
+
container={container}
|
95
|
+
key={container}
|
96
|
+
padding="sm"
|
97
|
+
>
|
98
|
+
<Caption textAlign="center">{container}</Caption>
|
99
|
+
<Flex
|
100
|
+
alignItems="stretch"
|
101
|
+
orientation="column"
|
102
|
+
>
|
103
|
+
{initialState
|
104
|
+
.filter((item) => item.container === container)
|
105
|
+
.map(
|
106
|
+
({
|
107
|
+
assignee_img,
|
108
|
+
assignee_name,
|
109
|
+
description,
|
110
|
+
id,
|
111
|
+
title,
|
112
|
+
}) => (
|
113
|
+
<Draggable.Item
|
114
|
+
container={container}
|
115
|
+
id={id}
|
116
|
+
key={id}
|
117
|
+
>
|
118
|
+
<Card
|
119
|
+
marginBottom="sm"
|
120
|
+
padding="sm"
|
121
|
+
>
|
122
|
+
<Flex justify="between">
|
123
|
+
<FlexItem>
|
124
|
+
<Flex>
|
125
|
+
<Avatar
|
126
|
+
imageUrl={assignee_img}
|
127
|
+
name={assignee_name}
|
128
|
+
size="xxs"
|
129
|
+
/>
|
130
|
+
<Title paddingLeft="xs"
|
131
|
+
size={4}
|
132
|
+
text={title}
|
133
|
+
/>
|
134
|
+
</Flex>
|
135
|
+
</FlexItem>
|
136
|
+
<Badge
|
137
|
+
marginLeft="sm"
|
138
|
+
rounded
|
139
|
+
text={badgeProperties(container).text}
|
140
|
+
variant={badgeProperties(container).color}
|
141
|
+
/>
|
142
|
+
</Flex>
|
143
|
+
<Body paddingTop="xs"
|
144
|
+
text={description}
|
145
|
+
/>
|
146
|
+
</Card>
|
147
|
+
</Draggable.Item>
|
148
|
+
)
|
149
|
+
)}
|
150
|
+
</Flex>
|
151
|
+
</Draggable.Container>
|
152
|
+
))}
|
153
|
+
</Flex>
|
154
|
+
</DraggableProvider>
|
155
|
+
);
|
156
|
+
};
|
157
|
+
|
158
|
+
export default DraggableMultipleContainer;
|
@@ -0,0 +1,101 @@
|
|
1
|
+
import React, { useState } from "react";
|
2
|
+
import {
|
3
|
+
Flex,
|
4
|
+
Badge,
|
5
|
+
Title,
|
6
|
+
Icon,
|
7
|
+
Draggable,
|
8
|
+
DraggableProvider,
|
9
|
+
Card,
|
10
|
+
Caption,
|
11
|
+
} from "../../";
|
12
|
+
|
13
|
+
// Initial items to be dragged
|
14
|
+
const data = [
|
15
|
+
{
|
16
|
+
id: "21",
|
17
|
+
text: "Joe Black",
|
18
|
+
},
|
19
|
+
{
|
20
|
+
id: "22",
|
21
|
+
text: "Nancy White",
|
22
|
+
},
|
23
|
+
{
|
24
|
+
id: "23",
|
25
|
+
text: "Bill Green",
|
26
|
+
},
|
27
|
+
];
|
28
|
+
|
29
|
+
const DraggableWithCards = (props) => {
|
30
|
+
const [initialState, setInitialState] = useState(data);
|
31
|
+
|
32
|
+
return (
|
33
|
+
<DraggableProvider
|
34
|
+
initialItems={data}
|
35
|
+
onReorder={(items) => setInitialState(items)}
|
36
|
+
>
|
37
|
+
<Draggable.Container {...props}>
|
38
|
+
{initialState.map(({ id, text }) => (
|
39
|
+
<Card
|
40
|
+
dragHandle
|
41
|
+
draggableItem
|
42
|
+
highlight={{ color: "primary", position: "side" }}
|
43
|
+
id={id}
|
44
|
+
key={id}
|
45
|
+
marginBottom="xs"
|
46
|
+
padding="xs"
|
47
|
+
>
|
48
|
+
<Flex alignItems="stretch"
|
49
|
+
flexDirection="column"
|
50
|
+
>
|
51
|
+
<Flex gap="xs">
|
52
|
+
<Title size={4}
|
53
|
+
text={text}
|
54
|
+
/>
|
55
|
+
<Badge
|
56
|
+
text="35-12345"
|
57
|
+
variant="primary"
|
58
|
+
/>
|
59
|
+
</Flex>
|
60
|
+
<Caption
|
61
|
+
size="xs"
|
62
|
+
text="8:00A • Township Name • 90210"
|
63
|
+
/>
|
64
|
+
<Flex gap="xxs"
|
65
|
+
spacing="between"
|
66
|
+
>
|
67
|
+
<Flex gap="xxs">
|
68
|
+
<Caption color="error"
|
69
|
+
size="xs"
|
70
|
+
>
|
71
|
+
<Icon icon="house-circle-exclamation" />
|
72
|
+
</Caption>
|
73
|
+
<Caption color="success"
|
74
|
+
size="xs">
|
75
|
+
<Icon icon="file-circle-check" />
|
76
|
+
</Caption>
|
77
|
+
</Flex>
|
78
|
+
<Flex>
|
79
|
+
<Badge rounded
|
80
|
+
text="Schedule QA"
|
81
|
+
variant="warning"
|
82
|
+
/>
|
83
|
+
<Badge rounded
|
84
|
+
text="Flex"
|
85
|
+
variant="primary"
|
86
|
+
/>
|
87
|
+
<Badge rounded
|
88
|
+
text="R99"
|
89
|
+
variant="primary"
|
90
|
+
/>
|
91
|
+
</Flex>
|
92
|
+
</Flex>
|
93
|
+
</Flex>
|
94
|
+
</Card>
|
95
|
+
))}
|
96
|
+
</Draggable.Container>
|
97
|
+
</DraggableProvider>
|
98
|
+
);
|
99
|
+
};
|
100
|
+
|
101
|
+
export default DraggableWithCards;
|
@@ -0,0 +1,50 @@
|
|
1
|
+
import React, { useState } from "react";
|
2
|
+
import { DraggableProvider, List, ListItem } from "../../";
|
3
|
+
|
4
|
+
// Initial items to be dragged
|
5
|
+
const data = [
|
6
|
+
{
|
7
|
+
id: "31",
|
8
|
+
text: "Philadelphia",
|
9
|
+
},
|
10
|
+
{
|
11
|
+
id: "32",
|
12
|
+
text: "New Jersey",
|
13
|
+
},
|
14
|
+
{
|
15
|
+
id: "33",
|
16
|
+
text: "Maryland",
|
17
|
+
},
|
18
|
+
{
|
19
|
+
id: "34",
|
20
|
+
text: "Connecticut",
|
21
|
+
},
|
22
|
+
];
|
23
|
+
|
24
|
+
const DraggableWithList = (props) => {
|
25
|
+
const [initialState, setInitialState] = useState(data);
|
26
|
+
|
27
|
+
|
28
|
+
return (
|
29
|
+
<>
|
30
|
+
<DraggableProvider initialItems={data}
|
31
|
+
onReorder={(items) => setInitialState(items)}
|
32
|
+
>
|
33
|
+
<List draggable
|
34
|
+
{...props}
|
35
|
+
>
|
36
|
+
{initialState.map(({ id, text }) => (
|
37
|
+
<ListItem id={id}
|
38
|
+
key={id}
|
39
|
+
>
|
40
|
+
{text}
|
41
|
+
</ListItem>
|
42
|
+
))}
|
43
|
+
</List>
|
44
|
+
</DraggableProvider>
|
45
|
+
</>
|
46
|
+
|
47
|
+
);
|
48
|
+
};
|
49
|
+
|
50
|
+
export default DraggableWithList;
|
@@ -0,0 +1 @@
|
|
1
|
+
For a simplified version of the Draggable API for the List kit, use the DraggableProvider to wrap the List kit and use the `draggable` prop on List. The dev must manage state as shown and pass in id to the ListItem.
|
@@ -0,0 +1,51 @@
|
|
1
|
+
import React, { useState } from "react";
|
2
|
+
import { SelectableList, DraggableProvider } from "../../";
|
3
|
+
|
4
|
+
// Initial items to be dragged
|
5
|
+
const data = [
|
6
|
+
{
|
7
|
+
id: "41",
|
8
|
+
text: "Task 1",
|
9
|
+
},
|
10
|
+
{
|
11
|
+
id: "42",
|
12
|
+
text: "Task 2",
|
13
|
+
},
|
14
|
+
{
|
15
|
+
id: "43",
|
16
|
+
text: "Task 3",
|
17
|
+
},
|
18
|
+
{
|
19
|
+
id: "44",
|
20
|
+
text: "Task 4",
|
21
|
+
},
|
22
|
+
];
|
23
|
+
|
24
|
+
const DraggableWithSelectableList = (props) => {
|
25
|
+
const [initialState, setInitialState] = useState(data);
|
26
|
+
|
27
|
+
return (
|
28
|
+
<>
|
29
|
+
<DraggableProvider initialItems={data}
|
30
|
+
onReorder={(items) => setInitialState(items)}
|
31
|
+
>
|
32
|
+
<SelectableList draggable
|
33
|
+
variant="checkbox"
|
34
|
+
{...props}
|
35
|
+
>
|
36
|
+
{initialState.map(({ id, text }) => (
|
37
|
+
<SelectableList.Item id={id}
|
38
|
+
key={id}
|
39
|
+
label={text}
|
40
|
+
name={id}
|
41
|
+
value={id}
|
42
|
+
/>
|
43
|
+
))}
|
44
|
+
</SelectableList>
|
45
|
+
</DraggableProvider>
|
46
|
+
</>
|
47
|
+
|
48
|
+
);
|
49
|
+
};
|
50
|
+
|
51
|
+
export default DraggableWithSelectableList
|
@@ -0,0 +1,11 @@
|
|
1
|
+
examples:
|
2
|
+
|
3
|
+
|
4
|
+
react:
|
5
|
+
- draggable_default: Default
|
6
|
+
- draggable_with_list: Draggable with List Kit
|
7
|
+
- draggable_with_selectable_list: Draggable with SelectableList Kit
|
8
|
+
- draggable_with_cards: Draggable with Cards
|
9
|
+
- draggable_multiple_containers: Dragging Across Multiple Containers
|
10
|
+
|
11
|
+
|
@@ -0,0 +1,5 @@
|
|
1
|
+
export { default as DraggableDefault } from './_draggable_default.jsx'
|
2
|
+
export { default as DraggableWithCards } from './_draggable_with_cards.jsx'
|
3
|
+
export { default as DraggableWithList } from './_draggable_with_list.jsx'
|
4
|
+
export { default as DraggableWithSelectableList } from './_draggable_with_selectable_list.jsx'
|
5
|
+
export { default as DraggableMultipleContainers } from './_draggable_multiple_containers.jsx'
|
@@ -13,6 +13,15 @@
|
|
13
13
|
]
|
14
14
|
%>
|
15
15
|
|
16
|
+
<%
|
17
|
+
example_dropdown_options = [
|
18
|
+
{ label: 'United States', value: 'United States', id: 'us' },
|
19
|
+
{ label: 'Canada', value: 'Canada', id: 'ca' },
|
20
|
+
{ label: 'Pakistan', value: 'Pakistan', id: 'pk' },
|
21
|
+
]
|
22
|
+
|
23
|
+
%>
|
24
|
+
|
16
25
|
<%= pb_form_with(scope: :example, url: "", method: :get) do |form| %>
|
17
26
|
<%= form.typeahead :example_user, props: { data: { typeahead_example1: true, user: {} }, placeholder: "Search for a user" } %>
|
18
27
|
<%= form.text_field :example_text_field, props: { label: true } %>
|
@@ -23,6 +32,7 @@
|
|
23
32
|
<%= form.password_field :example_password_field, props: { label: true } %>
|
24
33
|
<%= form.url_field :example_url_field, props: { label: true } %>
|
25
34
|
<%= form.text_area :example_text_area, props: { label: true } %>
|
35
|
+
<%= form.dropdown_field :example_dropdown, props: { label: true, options: example_dropdown_options } %>
|
26
36
|
<%= form.select :example_select, [ ["Yes", 1], ["No", 2] ], props: { label: true } %>
|
27
37
|
<%= form.collection_select :example_collection_select, example_collection, :value, :name, props: { label: true } %>
|
28
38
|
<%= form.check_box :example_checkbox,
|
@@ -1 +1 @@
|
|
1
|
-
A pill uses both a keyword and a specific color to categorize an item. Each pill directly corresponds to a data color
|
1
|
+
A pill uses both a keyword and a specific color to categorize an item. Each pill directly corresponds to a data color <a href="https://playbook.powerapp.cloud/visual_guidelines/colors" target="_blank">here</a>.
|
@@ -7,39 +7,40 @@ const TableAlignmentColumn = (props) => {
|
|
7
7
|
<Table
|
8
8
|
{...props}
|
9
9
|
>
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
10
|
+
<Table.Head>
|
11
|
+
<Table.Row>
|
12
|
+
<Table.Header>{'Column 1'}</Table.Header>
|
13
|
+
<Table.Header>{'Column 2'}</Table.Header>
|
14
|
+
<Table.Header>{'Column 3'}</Table.Header>
|
15
|
+
<Table.Header textAlign="center">{'Rating'}</Table.Header>
|
16
|
+
<Table.Header textAlign="right">{'Money'}</Table.Header>
|
17
|
+
</Table.Row>
|
18
|
+
</Table.Head>
|
19
|
+
<Table.Body>
|
20
|
+
<Table.Row>
|
21
|
+
<Table.Cell>{'Value 1'}</Table.Cell>
|
22
|
+
<Table.Cell>{'Value 2'}</Table.Cell>
|
23
|
+
<Table.Cell>{'Value 3'}</Table.Cell>
|
24
|
+
<Table.Cell textAlign="center">{'3'}</Table.Cell>
|
25
|
+
<Table.Cell textAlign="right">{'$57.32'}</Table.Cell>
|
26
|
+
</Table.Row>
|
27
|
+
<Table.Row>
|
28
|
+
<Table.Cell>{'Value 1'}</Table.Cell>
|
29
|
+
<Table.Cell>{'Value 2'}</Table.Cell>
|
30
|
+
<Table.Cell>{'Value 3'}</Table.Cell>
|
31
|
+
<Table.Cell textAlign="center">{'2'}</Table.Cell>
|
32
|
+
<Table.Cell textAlign="right">{'$5,657.08'}</Table.Cell>
|
33
|
+
</Table.Row>
|
34
|
+
<Table.Row>
|
35
|
+
<Table.Cell>{'Value 1'}</Table.Cell>
|
36
|
+
<Table.Cell>{'Value 2'}</Table.Cell>
|
37
|
+
<Table.Cell>{'Value 3'}</Table.Cell>
|
38
|
+
<Table.Cell textAlign="center">{'4'}</Table.Cell>
|
39
|
+
<Table.Cell textAlign="right">{'$358.77'}</Table.Cell>
|
40
|
+
</Table.Row>
|
41
|
+
</Table.Body>
|
42
42
|
</Table>
|
43
|
+
|
43
44
|
)
|
44
45
|
}
|
45
46
|
|