Enable multi-selection on table views (#112)

* Enable multi-selection on table views

* Enable multi-selection
This commit is contained in:
Charles Bochet
2023-05-08 10:58:53 +02:00
committed by GitHub
parent 48a75358b4
commit 94ea9835a9
7 changed files with 86 additions and 18 deletions

View File

@ -99,6 +99,9 @@ function Companies() {
setSearhInput(searchValue);
setFilterSearch(filter);
}}
onRowSelectionChange={(selectedRows) => {
console.log(selectedRows);
}}
/>
</StyledCompaniesContainer>
</WithTopBarContainer>

View File

@ -1,11 +1,10 @@
import { createColumnHelper } from '@tanstack/react-table';
import { CellContext, createColumnHelper } from '@tanstack/react-table';
import {
Company,
GraphqlQueryCompany,
} from '../../interfaces/company.interface';
import { updateCompany } from '../../services/companies';
import ColumnHead from '../../components/table/ColumnHead';
import Checkbox from '../../components/form/Checkbox';
import CompanyChip from '../../components/chips/CompanyChip';
import EditableText from '../../components/table/editable-cell/EditableText';
import {
@ -39,6 +38,8 @@ import EditableDate from '../../components/table/editable-cell/EditableDate';
import EditableRelation from '../../components/table/editable-cell/EditableRelation';
import { GraphqlQueryUser, PartialUser } from '../../interfaces/user.interface';
import { useMemo } from 'react';
import { SelectAllCheckbox } from '../../components/table/SelectAllCheckbox';
import Checkbox from '../../components/form/Checkbox';
export const availableSorts = [
{
@ -141,17 +142,24 @@ const columnHelper = createColumnHelper<Company>();
export const useCompaniesColumns = () => {
return useMemo(() => {
return [
columnHelper.accessor('id', {
header: () => (
<Checkbox id="company-select-all" name="company-select-all" />
{
id: 'select',
header: ({ table }: any) => (
<SelectAllCheckbox
checked={table.getIsAllRowsSelected()}
indeterminate={table.getIsSomeRowsSelected()}
onChange={table.getToggleAllRowsSelectedHandler()}
/>
),
cell: (props) => (
cell: (props: CellContext<Company, string>) => (
<Checkbox
id={`company-selected-${props.row.original.id}`}
name={`company-selected-${props.row.original.id}`}
checked={props.row.getIsSelected()}
onChange={props.row.getToggleSelectedHandler()}
/>
),
}),
},
columnHelper.accessor('name', {
header: () => (
<ColumnHead viewName="Name" viewIcon={<FaRegBuilding />} />

View File

@ -98,6 +98,9 @@ function People() {
setSearchInput(searchValue);
setFilterSearch(filter);
}}
onRowSelectionChange={(selectedRows) => {
console.log(selectedRows);
}}
/>
}
</StyledPeopleContainer>

View File

@ -8,7 +8,7 @@ import {
FaUser,
FaBuilding,
} from 'react-icons/fa';
import { createColumnHelper } from '@tanstack/react-table';
import { CellContext, createColumnHelper } from '@tanstack/react-table';
import ColumnHead from '../../components/table/ColumnHead';
import Checkbox from '../../components/form/Checkbox';
import CompanyChip, {
@ -39,6 +39,7 @@ import EditableDate from '../../components/table/editable-cell/EditableDate';
import EditableRelation from '../../components/table/editable-cell/EditableRelation';
import { updatePerson } from '../../services/people';
import { useMemo } from 'react';
import { SelectAllCheckbox } from '../../components/table/SelectAllCheckbox';
export const availableSorts = [
{
@ -247,17 +248,24 @@ const columnHelper = createColumnHelper<Person>();
export const usePeopleColumns = () => {
return useMemo(() => {
return [
columnHelper.accessor('id', {
header: () => (
<Checkbox id={`person-select-all`} name={`person-select-all`} />
),
cell: (props) => (
<Checkbox
id={`person-selected-${props.row.original.email}`}
name={`person-selected-${props.row.original.email}`}
{
id: 'select',
header: ({ table }: any) => (
<SelectAllCheckbox
checked={table.getIsAllRowsSelected()}
indeterminate={table.getIsSomeRowsSelected()}
onChange={table.getToggleAllRowsSelectedHandler()}
/>
),
}),
cell: (props: CellContext<Person, string>) => (
<Checkbox
id={`person-selected-${props.row.original.id}`}
name={`person-selected-${props.row.original.id}`}
checked={props.row.getIsSelected()}
onChange={props.row.getToggleSelectedHandler()}
/>
),
},
columnHelper.accessor('firstname', {
header: () => <ColumnHead viewName="People" viewIcon={<FaRegUser />} />,
cell: (props) => (