From a15d7e88bf4baba9b566c5b8e9c73127088e324a Mon Sep 17 00:00:00 2001 From: Dan Branley Date: Mon, 30 Sep 2024 15:05:16 -0400 Subject: [PATCH 1/2] Emit event on table group open/collapse #2133 --- py/examples/table_events_group.py | 114 ++++++++++++++++ py/examples/tour.conf | 1 + py/h2o_lightwave/h2o_lightwave/types.py | 2 +- py/h2o_lightwave/h2o_lightwave/ui.py | 2 +- py/h2o_wave/h2o_wave/types.py | 2 +- py/h2o_wave/h2o_wave/ui.py | 2 +- r/R/ui.R | 2 +- ui/src/table.test.tsx | 128 ++++++++++++++++++ ui/src/table.tsx | 31 ++++- .../examples/assets/table-events-group.png | Bin 0 -> 33300 bytes website/widgets/form/table.md | 5 +- 11 files changed, 279 insertions(+), 10 deletions(-) create mode 100644 py/examples/table_events_group.py create mode 100644 website/docs/examples/assets/table-events-group.png diff --git a/py/examples/table_events_group.py b/py/examples/table_events_group.py new file mode 100644 index 0000000000..a602fd4498 --- /dev/null +++ b/py/examples/table_events_group.py @@ -0,0 +1,114 @@ +# Table / Events / Group +# Register the `group_change` #event to emit Wave event when group collapses or opens. +# #table #events #groups #background_tasks +# --- +import asyncio +import concurrent.futures +import time +from h2o_wave import main, app, Q, ui + +bobrows = [ + {"name":"row1", "cell":"Issue1"}, + {"name":"row2", "cell":"Issue2"}, +] +johnrows = [ + {"name":"row3", "cell":"Issue3"}, + {"name":"row4", "cell":"Issue4"}, + {"name":"row5", "cell":"Issue5"}, +] +issue_cnt = 5 + +collapsed_states = { + 'Bob': True, + 'John': False +} +stop = False +new_issues_label = 'Add Issues' + +def add_issues_function(q: Q, loop: asyncio.AbstractEventLoop): + global stop + stop = False + future = None + while not stop: + time.sleep(2) + if not future or future.done(): + future = asyncio.ensure_future(update_issues(q), loop=loop) + +async def update_issues(q: Q): + global issue_cnt + issue_cnt += 1 + if (issue_cnt % 2) == 0: + bobrows.append({"name":"row"+str(issue_cnt), "cell":"Issue"+str(issue_cnt)}) + else: + johnrows.append({"name":"row"+str(issue_cnt), "cell":"Issue"+str(issue_cnt)}) + update_table_groups(q) + await q.page.save() + + +@app('/demo') +async def serve(q: Q): + global issue_cnt, new_issues_label, stop + if q.events.issues_table and q.events.issues_table.group_change: + # toggle the collapse states + for group in q.events.issues_table.group_change: + collapsed_states[group] = not collapsed_states[group] + q.page['collapse'].content = f'{q.events.issues_table.group_change}' + elif q.args.add_issues: + if new_issues_label == 'Add Issues': + new_issues_label = 'Stop Adding' + q.page['add_issues'].add_issues.label = new_issues_label + loop = asyncio.get_event_loop() + with concurrent.futures.ThreadPoolExecutor() as pool: + await q.exec(pool, add_issues_function, q, loop) + else: + stop = True + new_issues_label = 'Add Issues' + q.page['add_issues'].add_issues.label = new_issues_label + else: + q.page['form'] = ui.form_card(box='1 1 4 5', items=[ + ui.table( + name='issues_table', + columns=[ui.table_column(name='text', label='Issues assigned to')], + groups=[ + ui.table_group("Bob", + rows=[ui.table_row( + name=row["name"], + cells=[row["cell"]]) + for row in bobrows], + collapsed=collapsed_states["Bob"] + ), + ui.table_group("John", + rows=[ui.table_row( + name=row["name"], + cells=[row["cell"]]) + for row in johnrows], + collapsed=collapsed_states["John"] + ),], + height='400px', + events=['group_change'] + ) + ]) + q.page['add_issues'] = ui.form_card(box='5 1 2 1', items=[ui.button(name='add_issues', label=new_issues_label)]) + q.page['collapse'] = ui.markdown_card(box='5 2 2 1', title='Group change info', content='') + + q.client.initialized = True + + await q.page.save() + +def update_table_groups(q: Q): + q.page['form'].issues_table.groups=[ + ui.table_group("Bob", + rows=[ui.table_row( + name=row["name"], + cells=[row["cell"]]) + for row in bobrows], + collapsed=collapsed_states["Bob"] + ), + ui.table_group("John", + rows=[ui.table_row( + name=row["name"], + cells=[row["cell"]]) + for row in johnrows], + collapsed=collapsed_states["John"] + ), + ] diff --git a/py/examples/tour.conf b/py/examples/tour.conf index 97b539ab3e..08a63a9614 100644 --- a/py/examples/tour.conf +++ b/py/examples/tour.conf @@ -93,6 +93,7 @@ table_filter_backend.py table_download.py table_groupby.py table_groups.py +table_events_group.py table_select_single.py table_select_multiple.py table_events_select.py diff --git a/py/h2o_lightwave/h2o_lightwave/types.py b/py/h2o_lightwave/h2o_lightwave/types.py index e050429814..75725e0c3b 100644 --- a/py/h2o_lightwave/h2o_lightwave/types.py +++ b/py/h2o_lightwave/h2o_lightwave/types.py @@ -3922,7 +3922,7 @@ def __init__( self.pagination = pagination """Display a pagination control at the bottom of the table. Set this value using `ui.table_pagination()`.""" self.events = events - """The events to capture on this table when pagination is set. One of 'search' | 'sort' | 'filter' | 'download' | 'page_change' | 'reset' | 'select'.""" + """The events to capture on this table. When pagination is set, one of 'search' | 'sort' | 'filter' | 'download' | 'page_change' | 'reset'. These events are available regardless of pagination: 'select' | 'group_change'.""" self.single = single """True to allow only one row to be selected at time. Mutually exclusive with `multiple` attr.""" self.value = value diff --git a/py/h2o_lightwave/h2o_lightwave/ui.py b/py/h2o_lightwave/h2o_lightwave/ui.py index 0d5ef569fa..c301fdd3a5 100644 --- a/py/h2o_lightwave/h2o_lightwave/ui.py +++ b/py/h2o_lightwave/h2o_lightwave/ui.py @@ -1478,7 +1478,7 @@ def table( tooltip: An optional tooltip message displayed when a user clicks the help icon to the right of the component. groups: Creates collapsible / expandable groups of data rows. Mutually exclusive with `rows` attr. pagination: Display a pagination control at the bottom of the table. Set this value using `ui.table_pagination()`. - events: The events to capture on this table when pagination is set. One of 'search' | 'sort' | 'filter' | 'download' | 'page_change' | 'reset' | 'select'. + events: The events to capture on this table. When pagination is set, one of 'search' | 'sort' | 'filter' | 'download' | 'page_change' | 'reset'. These events are available regardless of pagination: 'select' | 'group_change'. single: True to allow only one row to be selected at time. Mutually exclusive with `multiple` attr. value: The name of the selected row. If this parameter is set, single selection will be allowed (`single` is assumed to be `True`). Returns: diff --git a/py/h2o_wave/h2o_wave/types.py b/py/h2o_wave/h2o_wave/types.py index e050429814..75725e0c3b 100644 --- a/py/h2o_wave/h2o_wave/types.py +++ b/py/h2o_wave/h2o_wave/types.py @@ -3922,7 +3922,7 @@ def __init__( self.pagination = pagination """Display a pagination control at the bottom of the table. Set this value using `ui.table_pagination()`.""" self.events = events - """The events to capture on this table when pagination is set. One of 'search' | 'sort' | 'filter' | 'download' | 'page_change' | 'reset' | 'select'.""" + """The events to capture on this table. When pagination is set, one of 'search' | 'sort' | 'filter' | 'download' | 'page_change' | 'reset'. These events are available regardless of pagination: 'select' | 'group_change'.""" self.single = single """True to allow only one row to be selected at time. Mutually exclusive with `multiple` attr.""" self.value = value diff --git a/py/h2o_wave/h2o_wave/ui.py b/py/h2o_wave/h2o_wave/ui.py index 0d5ef569fa..c301fdd3a5 100644 --- a/py/h2o_wave/h2o_wave/ui.py +++ b/py/h2o_wave/h2o_wave/ui.py @@ -1478,7 +1478,7 @@ def table( tooltip: An optional tooltip message displayed when a user clicks the help icon to the right of the component. groups: Creates collapsible / expandable groups of data rows. Mutually exclusive with `rows` attr. pagination: Display a pagination control at the bottom of the table. Set this value using `ui.table_pagination()`. - events: The events to capture on this table when pagination is set. One of 'search' | 'sort' | 'filter' | 'download' | 'page_change' | 'reset' | 'select'. + events: The events to capture on this table. When pagination is set, one of 'search' | 'sort' | 'filter' | 'download' | 'page_change' | 'reset'. These events are available regardless of pagination: 'select' | 'group_change'. single: True to allow only one row to be selected at time. Mutually exclusive with `multiple` attr. value: The name of the selected row. If this parameter is set, single selection will be allowed (`single` is assumed to be `True`). Returns: diff --git a/r/R/ui.R b/r/R/ui.R index cdacfa9550..34d9c72c5d 100644 --- a/r/R/ui.R +++ b/r/R/ui.R @@ -1703,7 +1703,7 @@ ui_table_pagination <- function( #' @param tooltip An optional tooltip message displayed when a user clicks the help icon to the right of the component. #' @param groups Creates collapsible / expandable groups of data rows. Mutually exclusive with `rows` attr. #' @param pagination Display a pagination control at the bottom of the table. Set this value using `ui.table_pagination()`. -#' @param events The events to capture on this table when pagination is set. One of 'search' | 'sort' | 'filter' | 'download' | 'page_change' | 'reset' | 'select'. +#' @param events The events to capture on this table. When pagination is set, one of 'search' | 'sort' | 'filter' | 'download' | 'page_change' | 'reset'. These events are available regardless of pagination: 'select' | 'group_change'. #' @param single True to allow only one row to be selected at time. Mutually exclusive with `multiple` attr. #' @param value The name of the selected row. If this parameter is set, single selection will be allowed (`single` is assumed to be `True`). #' @return A Table instance. diff --git a/ui/src/table.test.tsx b/ui/src/table.test.tsx index 2709c059d6..a234a4d931 100644 --- a/ui/src/table.test.tsx +++ b/ui/src/table.test.tsx @@ -1676,6 +1676,58 @@ describe('Table.tsx', () => { expect(container.querySelectorAll('.ms-GroupHeader-title')[0]).toHaveTextContent('1/20/1970, 4:58:47 AM(0)') expect(container.querySelectorAll('.ms-GroupHeader-title')[1]).toHaveTextContent('6/22/2022, 8:47:51 PM(1)') }) + + it('Collapses all group by list - fire event', () => { + const { container, getAllByText, getByTestId } = render() + + fireEvent.click(getByTestId('groupby')) + fireEvent.click(getAllByText('Col1')[1]!) + + //open all groups + fireEvent.click(container.querySelector('.ms-DetailsHeader-collapseButton')!) + emitMock.mockClear() + + //collapse all groups + fireEvent.click(container.querySelector('.ms-DetailsHeader-collapseButton')!) + expect(emitMock).toHaveBeenCalledWith(tableProps.name, 'group_change', [cell21, cell11, cell31]) + }) + + it('Expands all group by list - fire event', () => { + const { container, getAllByText, getByTestId } = render() + + fireEvent.click(getByTestId('groupby')) + fireEvent.click(getAllByText('Col1')[1]!) + + //open all groups + fireEvent.click(container.querySelector('.ms-DetailsHeader-collapseButton')!) + expect(emitMock).toHaveBeenCalledWith(tableProps.name, 'group_change', [cell21, cell11, cell31]) + }) + + it('Collapses group by list - fire event', () => { + const { container, getAllByText, getByTestId } = render() + + fireEvent.click(getByTestId('groupby')) + fireEvent.click(getAllByText('Col1')[1]!) + + //open all groups + fireEvent.click(container.querySelector('.ms-DetailsHeader-collapseButton')!) + emitMock.mockClear() + + //collapse 1st group + fireEvent.click(container.querySelector('.ms-GroupHeader-expand')!) + expect(emitMock).toHaveBeenCalledWith(tableProps.name, 'group_change', [cell21]) + }) + + it('Expands group by list - fire event', () => { + const { container, getAllByText, getByTestId } = render() + + fireEvent.click(getByTestId('groupby')) + fireEvent.click(getAllByText('Col1')[1]!) + + //open 1st group + fireEvent.click(container.querySelector('.ms-GroupHeader-expand')!) + expect(emitMock).toHaveBeenCalledWith(tableProps.name, 'group_change', [cell21]) + }) }) describe('Groups', () => { @@ -1778,6 +1830,82 @@ describe('Table.tsx', () => { expect(getAllByRole('row')).toHaveLength(headerRow + groupHeaderRowsCount + items - filteredItem) }) + it('Collapses all groups - fire event', () => { + const { container, getAllByRole } = render() + + //collapse all groups + fireEvent.click(container.querySelector('.ms-DetailsHeader-collapseButton')!) + expect(emitMock).toHaveBeenCalledWith(tableProps.name, 'group_change', ['GroupA', 'GroupB']) + expect(emitMock).toHaveBeenCalledTimes(1) + expect(getAllByRole('row')).toHaveLength(headerRow + groupHeaderRowsCount) + }) + + it('Expands all groups - fire event', () => { + const { container, getAllByRole } = render() + + //collapse all groups + fireEvent.click(container.querySelector('.ms-DetailsHeader-collapseButton')!) + emitMock.mockClear() + + //open all groups + fireEvent.click(container.querySelector('.ms-DetailsHeader-collapseButton')!) + expect(emitMock).toHaveBeenCalledWith(tableProps.name, 'group_change', ['GroupA', 'GroupB']) + expect(emitMock).toHaveBeenCalledTimes(1) + expect(getAllByRole('row')).toHaveLength(headerRow + groupHeaderRowsCount + items) + }) + + it('Collapses group - fire event', () => { + const { container, getAllByRole } = render() + + fireEvent.click(container.querySelector('.ms-GroupHeader-expand')!) + expect(emitMock).toHaveBeenCalledWith(tableProps.name, 'group_change', ['GroupA']) + expect(emitMock).toHaveBeenCalledTimes(1) + expect(getAllByRole('row')).toHaveLength(headerRow + groupHeaderRowsCount + filteredItem) + }) + + it('Expands group - fire event', () => { + const { container, getAllByRole } = render() + + fireEvent.click(container.querySelector('.ms-DetailsHeader-collapseButton')!) + emitMock.mockClear() + + fireEvent.click(container.querySelector('.ms-GroupHeader-expand')!) + expect(emitMock).toHaveBeenCalledWith(tableProps.name, 'group_change', ['GroupA']) + expect(emitMock).toHaveBeenCalledTimes(1) + expect(getAllByRole('row')).toHaveLength(headerRow + groupHeaderRowsCount + items - filteredItem) + }) + + it('Collapses all groups when some already collapsed - fire event', () => { + const { container, getAllByRole } = render() + + //collapse all groups + fireEvent.click(container.querySelector('.ms-DetailsHeader-collapseButton')!) + expect(emitMock).toHaveBeenCalledWith(tableProps.name, 'group_change', ['GroupA', 'GroupB']) + expect(emitMock).toHaveBeenCalledTimes(1) + expect(getAllByRole('row')).toHaveLength(headerRow + groupHeaderRowsCount) + emitMock.mockClear() + + //open all groups + fireEvent.click(container.querySelector('.ms-DetailsHeader-collapseButton')!) + expect(emitMock).toHaveBeenCalledWith(tableProps.name, 'group_change', ['GroupA', 'GroupB']) + expect(emitMock).toHaveBeenCalledTimes(1) + expect(getAllByRole('row')).toHaveLength(headerRow + groupHeaderRowsCount + items) + emitMock.mockClear() + + //collapse GroupA + fireEvent.click(container.querySelector('.ms-GroupHeader-expand')!) + expect(emitMock).toHaveBeenCalledWith(tableProps.name, 'group_change', ['GroupA']) + expect(emitMock).toHaveBeenCalledTimes(1) + expect(getAllByRole('row')).toHaveLength(headerRow + groupHeaderRowsCount + filteredItem) + emitMock.mockClear() + + //collapse all groups + fireEvent.click(container.querySelector('.ms-DetailsHeader-collapseButton')!) + expect(emitMock).toHaveBeenCalledWith(tableProps.name, 'group_change', ['GroupB']) + expect(emitMock).toHaveBeenCalledTimes(1) + expect(getAllByRole('row')).toHaveLength(headerRow + groupHeaderRowsCount) + }) + it('Checks if expanded state is preserved after sort', () => { const { container, getAllByRole } = render() diff --git a/ui/src/table.tsx b/ui/src/table.tsx index 118cc2b3ed..b0303d300a 100644 --- a/ui/src/table.tsx +++ b/ui/src/table.tsx @@ -152,7 +152,7 @@ export interface Table { groups?: TableGroup[] /** Display a pagination control at the bottom of the table. Set this value using `ui.table_pagination()`. */ pagination?: TablePagination - /** The events to capture on this table when pagination is set. One of 'search' | 'sort' | 'filter' | 'download' | 'page_change' | 'reset' | 'select'. */ + /** The events to capture on this table. When pagination is set, one of 'search' | 'sort' | 'filter' | 'download' | 'page_change' | 'reset'. These events are available regardless of pagination: 'select' | 'group_change'. */ events?: S[] /** True to allow only one row to be selected at time. Mutually exclusive with `multiple` attr. */ single?: B @@ -491,14 +491,39 @@ const } /> ) }, []), - onToggleCollapseAll = (isAllCollapsed: B) => expandedRefs.current = isAllCollapsed ? {} : null, + onToggleCollapseAll = (isAllCollapsed: B) => { + if (m.events?.includes('group_change')) { + let changingGroups + if (isAllCollapsed){ + if (expandedRefs.current && Object.keys(expandedRefs.current).length > 0){ + changingGroups = Object.keys(expandedRefs.current) + } else { + changingGroups = groups?.map(group => group.name) + } + } else { + changingGroups = groups?.map(group => group.name) + } + wave.emit(m.name, 'group_change', changingGroups) + } + expandedRefs.current = isAllCollapsed ? {} : null + }, onToggleCollapse = ({ key, isCollapsed }: Fluent.IGroup) => { + if (m.events?.includes('group_change')) { + wave.emit(m.name, 'group_change', [key]) + } if (expandedRefs.current) { isCollapsed ? expandedRefs.current[key] = false : delete expandedRefs.current[key] } else { - expandedRefs.current = { [key]: false } + if (groups){ + expandedRefs.current = groups?.reduce((acc, { name }) => { + if (name != key){ + acc[name] = false + } + return acc + }, {} as { [key: S]: B }) + } } }, onRenderRow = (props?: Fluent.IDetailsRowProps) => props diff --git a/website/docs/examples/assets/table-events-group.png b/website/docs/examples/assets/table-events-group.png new file mode 100644 index 0000000000000000000000000000000000000000..ab8c38c9d5c95c50d01a6d023e649a827c80b7f6 GIT binary patch literal 33300 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 Date: Tue, 1 Oct 2024 15:27:54 -0400 Subject: [PATCH 2/2] feat: Changes from review comments, simplify if-block in table.tsx, simplify py example and generate new snapshot, doc edits #2133 --- py/examples/table_events_group.py | 61 +----------------- ui/src/table.tsx | 16 ++--- .../examples/assets/table-events-group.png | Bin 33300 -> 26894 bytes website/widgets/form/table.md | 2 +- 4 files changed, 8 insertions(+), 71 deletions(-) diff --git a/py/examples/table_events_group.py b/py/examples/table_events_group.py index a602fd4498..362f161068 100644 --- a/py/examples/table_events_group.py +++ b/py/examples/table_events_group.py @@ -1,10 +1,7 @@ # Table / Events / Group # Register the `group_change` #event to emit Wave event when group collapses or opens. -# #table #events #groups #background_tasks +# #table #events #groups # --- -import asyncio -import concurrent.futures -import time from h2o_wave import main, app, Q, ui bobrows = [ @@ -16,54 +13,19 @@ {"name":"row4", "cell":"Issue4"}, {"name":"row5", "cell":"Issue5"}, ] -issue_cnt = 5 collapsed_states = { 'Bob': True, 'John': False } -stop = False -new_issues_label = 'Add Issues' - -def add_issues_function(q: Q, loop: asyncio.AbstractEventLoop): - global stop - stop = False - future = None - while not stop: - time.sleep(2) - if not future or future.done(): - future = asyncio.ensure_future(update_issues(q), loop=loop) - -async def update_issues(q: Q): - global issue_cnt - issue_cnt += 1 - if (issue_cnt % 2) == 0: - bobrows.append({"name":"row"+str(issue_cnt), "cell":"Issue"+str(issue_cnt)}) - else: - johnrows.append({"name":"row"+str(issue_cnt), "cell":"Issue"+str(issue_cnt)}) - update_table_groups(q) - await q.page.save() - @app('/demo') async def serve(q: Q): - global issue_cnt, new_issues_label, stop if q.events.issues_table and q.events.issues_table.group_change: # toggle the collapse states for group in q.events.issues_table.group_change: collapsed_states[group] = not collapsed_states[group] q.page['collapse'].content = f'{q.events.issues_table.group_change}' - elif q.args.add_issues: - if new_issues_label == 'Add Issues': - new_issues_label = 'Stop Adding' - q.page['add_issues'].add_issues.label = new_issues_label - loop = asyncio.get_event_loop() - with concurrent.futures.ThreadPoolExecutor() as pool: - await q.exec(pool, add_issues_function, q, loop) - else: - stop = True - new_issues_label = 'Add Issues' - q.page['add_issues'].add_issues.label = new_issues_label else: q.page['form'] = ui.form_card(box='1 1 4 5', items=[ ui.table( @@ -88,27 +50,8 @@ async def serve(q: Q): events=['group_change'] ) ]) - q.page['add_issues'] = ui.form_card(box='5 1 2 1', items=[ui.button(name='add_issues', label=new_issues_label)]) - q.page['collapse'] = ui.markdown_card(box='5 2 2 1', title='Group change info', content='') + q.page['collapse'] = ui.markdown_card(box='5 1 2 1', title='Group change info', content='') q.client.initialized = True await q.page.save() - -def update_table_groups(q: Q): - q.page['form'].issues_table.groups=[ - ui.table_group("Bob", - rows=[ui.table_row( - name=row["name"], - cells=[row["cell"]]) - for row in bobrows], - collapsed=collapsed_states["Bob"] - ), - ui.table_group("John", - rows=[ui.table_row( - name=row["name"], - cells=[row["cell"]]) - for row in johnrows], - collapsed=collapsed_states["John"] - ), - ] diff --git a/ui/src/table.tsx b/ui/src/table.tsx index b0303d300a..fda80fdf96 100644 --- a/ui/src/table.tsx +++ b/ui/src/table.tsx @@ -493,17 +493,11 @@ const }, []), onToggleCollapseAll = (isAllCollapsed: B) => { if (m.events?.includes('group_change')) { - let changingGroups - if (isAllCollapsed){ - if (expandedRefs.current && Object.keys(expandedRefs.current).length > 0){ - changingGroups = Object.keys(expandedRefs.current) - } else { - changingGroups = groups?.map(group => group.name) - } - } else { - changingGroups = groups?.map(group => group.name) - } - wave.emit(m.name, 'group_change', changingGroups) + const changedGroups = + isAllCollapsed && expandedRefs.current && Object.keys(expandedRefs.current).length > 0 + ? Object.keys(expandedRefs.current) + : groups?.map(group => group.name) + wave.emit(m.name, 'group_change', changedGroups) } expandedRefs.current = isAllCollapsed ? {} : null }, diff --git a/website/docs/examples/assets/table-events-group.png b/website/docs/examples/assets/table-events-group.png index ab8c38c9d5c95c50d01a6d023e649a827c80b7f6..87134026669c66d6ada01ee75e53d6482702840e 100644 GIT binary patch literal 26894 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 literal 33300 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