Skip to content

Commit

Permalink
feat: add row click event for data table
Browse files Browse the repository at this point in the history
  • Loading branch information
hperrin committed Nov 15, 2021
1 parent 018556a commit cf3ebb2
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 1 deletion.
21 changes: 21 additions & 0 deletions packages/data-table/DataTable.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
on:SMUIDataTableHeaderCheckbox:change={() =>
instance && instance.handleHeaderRowCheckboxChange()}
on:SMUIDataTableHeader:click={handleHeaderRowClick}
on:SMUIDataTableRow:click={handleRowClick}
on:SMUIDataTableBodyCheckbox:change={(event) =>
instance && instance.handleRowCheckboxChange(event)}
{...exclude($$restProps, ['container$', 'table$'])}
Expand Down Expand Up @@ -242,6 +243,9 @@
setHeaderRowCheckboxIndeterminate(false);
dispatch(getElement(), 'MDCDataTable:unselectedAll');
},
notifyRowClick: (detail) => {
dispatch(getElement(), 'MDCDataTable:rowClick', detail);
},
registerHeaderRowCheckbox: () => {
// Handled automatically.
},
Expand Down Expand Up @@ -323,6 +327,23 @@
}
}
function handleRowClick(
event: CustomEvent<{ rowId: string; target: HTMLElement }>
) {
if (!instance || !event.detail.target) {
return;
}
const row = closest(
event.detail.target as Element,
'.mdc-data-table__row'
) as HTMLTableRowElement;
if (row && instance) {
instance.handleRowClick({ rowId: event.detail.rowId, row });
}
}
function handleSortAction(headerCell: HTMLTableCellElement) {
const orderedCells = header?.orderedCells ?? [];
Expand Down
10 changes: 9 additions & 1 deletion packages/data-table/Row.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
'mdc-data-table__row--selected': !header && checkbox && checkbox.checked,
...internalClasses,
})}
on:click={(event) => header && notifyHeaderClick(event)}
on:click={(event) =>
header ? notifyHeaderClick(event) : notifyRowClick(event)}
on:SMUICheckbox:mount={(event) => (checkbox = event.detail)}
on:SMUICheckbox:unmount={() => (checkbox = undefined)}
aria-selected={checkbox ? (checkbox.checked ? 'true' : 'false') : undefined}
Expand Down Expand Up @@ -125,6 +126,13 @@
dispatch(getElement(), 'SMUIDataTableHeader:click', event);
}
function notifyRowClick(event: MouseEvent) {
dispatch(getElement(), 'SMUIDataTableRow:click', {
rowId,
target: event.target,
});
}
export function getElement() {
return element;
}
Expand Down
3 changes: 3 additions & 0 deletions packages/data-table/ambient.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ declare namespace svelte.JSX {
['onSMUIDataTableHeader:click']?: (
event: CustomEvent<any> & { target: T }
) => any;
['onSMUIDataTableRow:click']?: (
event: CustomEvent<any> & { target: T }
) => any;
['onSMUIDataTableHeaderCheckbox:change']?: (
event: CustomEvent<any> & { target: T }
) => any;
Expand Down

0 comments on commit cf3ebb2

Please sign in to comment.