feature: keep callbacks between two renders
This commit is contained in:
@ -3,7 +3,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|||||||
import DropdownButton from './DropdownButton';
|
import DropdownButton from './DropdownButton';
|
||||||
import { IconProp } from '@fortawesome/fontawesome-svg-core';
|
import { IconProp } from '@fortawesome/fontawesome-svg-core';
|
||||||
import SortAndFilterBar, { SortType } from './SortAndFilterBar';
|
import SortAndFilterBar, { SortType } from './SortAndFilterBar';
|
||||||
import { useState } from 'react';
|
import { useCallback, useState } from 'react';
|
||||||
|
|
||||||
type OwnProps = {
|
type OwnProps = {
|
||||||
viewName: string;
|
viewName: string;
|
||||||
@ -52,23 +52,29 @@ function TableHeader({
|
|||||||
}: OwnProps) {
|
}: OwnProps) {
|
||||||
const [sorts, setSorts] = useState([] as Array<SortType>);
|
const [sorts, setSorts] = useState([] as Array<SortType>);
|
||||||
|
|
||||||
const onSortItemSelect = (sortId: string) => {
|
const onSortItemSelect = useCallback(
|
||||||
const newSorts = [
|
(sortId: string) => {
|
||||||
{
|
const newSorts = [
|
||||||
label: 'Created at',
|
{
|
||||||
order: 'asc',
|
label: 'Created at',
|
||||||
id: sortId,
|
order: 'asc',
|
||||||
} as SortType,
|
id: sortId,
|
||||||
];
|
} as SortType,
|
||||||
setSorts(newSorts);
|
];
|
||||||
onSortsUpdate && onSortsUpdate(newSorts);
|
setSorts(newSorts);
|
||||||
};
|
onSortsUpdate && onSortsUpdate(newSorts);
|
||||||
|
},
|
||||||
|
[onSortsUpdate],
|
||||||
|
);
|
||||||
|
|
||||||
const onSortItemUnSelect = (sortId: string) => {
|
const onSortItemUnSelect = useCallback(
|
||||||
const newSorts = [] as SortType[];
|
(sortId: string) => {
|
||||||
setSorts(newSorts);
|
const newSorts = [] as SortType[];
|
||||||
onSortsUpdate && onSortsUpdate(newSorts);
|
setSorts(newSorts);
|
||||||
};
|
onSortsUpdate && onSortsUpdate(newSorts);
|
||||||
|
},
|
||||||
|
[onSortsUpdate],
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<StyledContainer>
|
<StyledContainer>
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import Table from '../../components/table/Table';
|
|||||||
import styled from '@emotion/styled';
|
import styled from '@emotion/styled';
|
||||||
import { peopleColumns } from './people-table';
|
import { peopleColumns } from './people-table';
|
||||||
import { GraphqlPerson, mapPerson } from '../../interfaces/person.interface';
|
import { GraphqlPerson, mapPerson } from '../../interfaces/person.interface';
|
||||||
import { useState } from 'react';
|
import { useCallback, useState } from 'react';
|
||||||
import { SortType } from '../../components/table/table-header/SortAndFilterBar';
|
import { SortType } from '../../components/table/table-header/SortAndFilterBar';
|
||||||
import { OrderBy, usePeopleQuery } from '../../services/people';
|
import { OrderBy, usePeopleQuery } from '../../services/people';
|
||||||
|
|
||||||
@ -31,10 +31,10 @@ function People() {
|
|||||||
const [, setSorts] = useState([] as Array<SortType>);
|
const [, setSorts] = useState([] as Array<SortType>);
|
||||||
const [orderBy, setOrderBy] = useState(defaultOrderBy);
|
const [orderBy, setOrderBy] = useState(defaultOrderBy);
|
||||||
|
|
||||||
const updateSorts = (sorts: Array<SortType>) => {
|
const updateSorts = useCallback((sorts: Array<SortType>) => {
|
||||||
setSorts(sorts);
|
setSorts(sorts);
|
||||||
setOrderBy(sorts.length ? reduceSortsToOrderBy(sorts) : defaultOrderBy);
|
setOrderBy(sorts.length ? reduceSortsToOrderBy(sorts) : defaultOrderBy);
|
||||||
};
|
}, []);
|
||||||
|
|
||||||
const { data } = usePeopleQuery(orderBy);
|
const { data } = usePeopleQuery(orderBy);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user