Commit 8e325ec
authored
feat: ListView actions (#1968)
* Wrapper components for `ActionGroup` and `ActionMenu` to support
primitive items
* `ListActionGroup` and `ListActionMenu` components to support providing
actions prop to `ListView`
* `ListView` `actions` prop support
The branch in [this
PR](deephaven/deephaven-plugins#448) can be used
to see this in action. I also published an alpha this branch
([0.77.1-alpha-listview-actions.4](https://www.npmjs.com/package/@deephaven/components/v/0.77.1-alpha-listview-actions.4))
to make types work in plugins
### Example of standalone `ui.action_group` and `ui.action_menu`
```python
from deephaven import ui
@ui.component
def action_group():
action, on_action = ui.use_state("")
selected_keys, set_selected_keys = ui.use_state(['Aaa'])
selection_text = ui.text("Selection: " + ", ".join(map(str, selected_keys)), grid_column="span 2")
return 'Action Group', (" - " if action else "") + action, ui.action_group(
ui.item(
ui.icon('vsAccount'),
'Aaa',
text_value="Aaa"
),
'Bbb',
'Ccc',
selection_mode="multiple",
selected_keys=selected_keys,
on_action=on_action,
on_change=set_selected_keys,
), selection_text,
ag = action_group()
@ui.component
def action_menu():
action, on_action = ui.use_state("")
return 'Action Menu', (" - " if action else "") + action, ui.action_menu(
ui.item(
ui.icon('vsAccount'),
'Aaa',
text_value="Aaa"
),
'Bbb',
'Ccc',
on_action=on_action,
align_self="start"
)
am = action_menu()
```
### Example showing actions in `ui.list_view` with different densities
```python
import deephaven.ui as ui
from deephaven import time_table
import datetime
initial_row_count=2000
icon_names = ['vsAccount']
columns = [
"Id=new Integer(i)",
"Display=new String(`Display `+i)",
"Description=new String(`Description `+i)",
"Icon=(String) icon_names[0]"
]
# Tables with initial row count of 200 that adds a row every second
column_types_ticking = time_table("PT1S", start_time=datetime.datetime.now() - datetime.timedelta(seconds=initial_row_count)).update([
columns
])
column_types = empty_table(initial_row_count).update(columns)
#### Component definitions ####
@ui.component
def labeled_lv(label, *args, **kwargs):
return ui.flex(
ui.text(label),
ui.list_view(
*args,
**kwargs
),
direction="column",
flex=1,
min_width=0,
)
@ui.component
def ui_list_view_table(data, density):
value, set_value = ui.use_state([2, 4, 5])
# Action Groups
ag_action, set_ag_action = ui.use_state(['', ''])
on_ag_action=ui.use_callback(lambda a,i : set_ag_action([a,str(i)]), [])
lv_actions = labeled_lv(
"Actions (text only)",
data,
density=density,
max_height=5000,
key_column="Id",
label_column="Display",
icon_column="Icon",
aria_label="List View",
on_change=set_value,
selected_keys=value,
actions=ui.list_action_group(
'Edit',
'Delete',
on_action=on_ag_action,
),
)
lv_actions_icon = labeled_lv(
"Actions (icon only)",
data,
density=density,
max_height=5000,
key_column="Id",
label_column="Display",
icon_column="Icon",
aria_label="List View",
on_change=set_value,
selected_keys=value,
actions=ui.list_action_group(
ui.item(
ui.icon('vsEdit'),
ui.text('Edit'),
key='Edit',
),
ui.item(
ui.icon('vsTrash'),
ui.text('Delete'),
key='Delete'
),
max_width=80,
button_label_behavior="collapse",
overflow_mode="collapse",
on_action=on_ag_action,
),
)
action_group_text = ui.text("Action: " + ag_action[0] + ", Item: " + ag_action[1])
# Action Menus
am_action, set_am_action = ui.use_state(['', ''])
on_am_action=ui.use_callback(lambda a,i : set_am_action([a,str(i)]), [])
lv_action_menu = labeled_lv(
"Action Menu (text only)",
data,
density=density,
max_height=5000,
key_column="Id",
label_column="Display",
icon_column="Icon",
aria_label="List View",
selected_keys=value,
on_change=set_value,
actions=ui.list_action_menu(
'Edit',
'Delete',
on_action=on_am_action,
),
)
lv_action_menu2 = labeled_lv(
"Action Menu (icons)",
data,
density=density,
max_height=5000,
key_column="Id",
label_column="Display",
icon_column="Icon",
aria_label="List View",
selected_keys=value,
on_change=set_value,
actions=ui.list_action_menu(
ui.item(
ui.icon('vsEdit'),
ui.text('Edit'),
key='Edit',
text_value="Edit"
),
ui.item(
ui.icon('vsTrash'),
ui.text('Delete'),
key='Delete',
text_value="Delete"
),
on_action=on_am_action,
),
)
action_menu_text = ui.text("Action: " + am_action[0] + ", Item: " + am_action[1])
return ui.flex(
ui.flex(
lv_actions,
lv_actions_icon,
direction="row",
),
action_group_text,
ui.flex(
lv_action_menu,
lv_action_menu2,
direction="row"
),
action_menu_text,
direction="column",
)
@ui.component
def examples(data):
density, set_density = ui.use_state(["COMPACT"])
return 'Density', ui.action_group(
'COMPACT',
'REGULAR',
'SPACIOUS',
selected_keys=density,
selection_mode="SINGLE",
on_change=set_density
), ui_list_view_table(data, density[0])
lv_table = examples(column_types)
# lv_table = examples(column_types_ticking)
```1 parent 2246a4a commit 8e325ec
20 files changed
Lines changed: 418 additions & 77 deletions
File tree
- packages
- code-studio/src/styleguide
- components/src/spectrum
- listView
- utils
- tests/styleguide.spec.ts-snapshots
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| 18 | + | |
18 | 19 | | |
19 | | - | |
| 20 | + | |
20 | 21 | | |
21 | 22 | | |
22 | 23 | | |
| |||
90 | 91 | | |
91 | 92 | | |
92 | 93 | | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
93 | 101 | | |
94 | 102 | | |
95 | 103 | | |
| |||
211 | 219 | | |
212 | 220 | | |
213 | 221 | | |
214 | | - | |
| 222 | + | |
215 | 223 | | |
216 | 224 | | |
217 | 225 | | |
| |||
220 | 228 | | |
221 | 229 | | |
222 | 230 | | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
223 | 252 | | |
| 253 | + | |
224 | 254 | | |
225 | 255 | | |
226 | 256 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 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 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 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 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
5 | | - | |
6 | 4 | | |
7 | 5 | | |
8 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
5 | | - | |
6 | 4 | | |
7 | 5 | | |
8 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
20 | 24 | | |
21 | 25 | | |
22 | 26 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
6 | | - | |
7 | | - | |
| 6 | + | |
8 | 7 | | |
9 | 8 | | |
10 | 9 | | |
| |||
13 | 12 | | |
14 | 13 | | |
15 | 14 | | |
16 | | - | |
| 15 | + | |
17 | 16 | | |
18 | 17 | | |
19 | 18 | | |
20 | | - | |
21 | | - | |
22 | | - | |
23 | | - | |
24 | | - | |
25 | | - | |
26 | | - | |
27 | | - | |
28 | | - | |
29 | | - | |
30 | 19 | | |
31 | 20 | | |
32 | 21 | | |
33 | | - | |
34 | | - | |
35 | | - | |
36 | | - | |
37 | | - | |
38 | | - | |
39 | 22 | | |
40 | | - | |
41 | | - | |
42 | | - | |
43 | | - | |
44 | | - | |
45 | | - | |
46 | | - | |
47 | | - | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
48 | 31 | | |
49 | 32 | | |
50 | 33 | | |
| |||
Lines changed: 4 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
| |||
13 | 14 | | |
14 | 15 | | |
15 | 16 | | |
| 17 | + | |
16 | 18 | | |
17 | 19 | | |
18 | 20 | | |
| |||
34 | 36 | | |
35 | 37 | | |
36 | 38 | | |
| 39 | + | |
37 | 40 | | |
38 | 41 | | |
39 | 42 | | |
| |||
53 | 56 | | |
54 | 57 | | |
55 | 58 | | |
| 59 | + | |
56 | 60 | | |
57 | 61 | | |
58 | 62 | | |
| |||
0 commit comments