Skip to content

[Feature Request]: Support Controlled Selection in useRowSelect #156

@anuraghazra

Description

@anuraghazra

Currently useRowSelect's state prop behaves as an uncontrolled state only.

We had a requirement where we wanted to support controlled selection for the Table selections.

Example:

const [selectedRows, setSelectedRows] = React.useState([]);

<WrapperTable 
  selectedIds={selectedRows}
  onSelectionChange={({ selectedIds }) => {
    setSelectedRows(selectedIds)
  }}
/>

Pseudo Implementation code:

const WrapperTable = ({ data, onSelectionChange, selectedIds, defaultSelectedIds }) => {
  // controllable controlled/uncontrolled state
  const [selectedRows, setSelectedRows] = useControllableState({
    defaultValue: defaultSelectedIds,
    value: selectedIds,
    onChange: (value) => {
      onSelectionChange?.({
        selectedIds: value,
      });
    },
  });
  
  const onSelectChange: MiddlewareFunction = (action, state): void => {
    // Logic for updating state
    setSelectedRows(() => selectedIds);
  };

  const rowSelectConfig = useRowSelect(
    data,
    {
      onChange: onSelectChange,
      state: { ids: selectedRows }
    },
    {
      rowSelect: 'multiple'
    },
  );  
  
  return <ReactTable data={data} select={rowSelectConfig} />
}

Is there any way to achieve this?

I'm also willing to raise a PR for adding this feature in useRowSelect

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions