refactor: move sortable fields in table

This commit is contained in:
Sammy Teillet
2023-04-24 13:53:49 +02:00
parent 00ad3a89b5
commit bc91e97695
3 changed files with 33 additions and 13 deletions

View File

@ -10,6 +10,7 @@ import TableHeader from './table-header/TableHeader';
import { IconProp } from '@fortawesome/fontawesome-svg-core'; import { IconProp } from '@fortawesome/fontawesome-svg-core';
import styled from '@emotion/styled'; import styled from '@emotion/styled';
import { SortType } from './table-header/SortAndFilterBar'; import { SortType } from './table-header/SortAndFilterBar';
import { faCalendar } from '@fortawesome/pro-regular-svg-icons';
type OwnProps<TData> = { type OwnProps<TData> = {
data: Array<TData>; data: Array<TData>;
@ -75,12 +76,22 @@ function Table<TData>({
getCoreRowModel: getCoreRowModel(), getCoreRowModel: getCoreRowModel(),
}); });
const sortsAvailable: Array<SortType> = [
{
id: 'created_at',
label: 'Created at',
order: 'asc',
icon: faCalendar,
},
];
return ( return (
<StyledTableWithHeader> <StyledTableWithHeader>
<TableHeader <TableHeader
viewName={viewName} viewName={viewName}
viewIcon={viewIcon} viewIcon={viewIcon}
onSortsUpdate={onSortsUpdate} onSortsUpdate={onSortsUpdate}
sortsAvailable={sortsAvailable}
/> />
<StyledTable> <StyledTable>
<thead> <thead>

View File

@ -2,7 +2,6 @@ import styled from '@emotion/styled';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; 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 { faCalendar } from '@fortawesome/pro-regular-svg-icons';
import SortAndFilterBar, { SortType } from './SortAndFilterBar'; import SortAndFilterBar, { SortType } from './SortAndFilterBar';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
@ -10,6 +9,7 @@ type OwnProps = {
viewName: string; viewName: string;
viewIcon?: IconProp; viewIcon?: IconProp;
onSortsUpdate?: (sorts: Array<SortType>) => void; onSortsUpdate?: (sorts: Array<SortType>) => void;
sortsAvailable: Array<SortType>;
}; };
const StyledContainer = styled.div` const StyledContainer = styled.div`
@ -44,7 +44,12 @@ const StyledFilters = styled.div`
margin-right: ${(props) => props.theme.spacing(2)}; margin-right: ${(props) => props.theme.spacing(2)};
`; `;
function TableHeader({ viewName, viewIcon, onSortsUpdate }: OwnProps) { function TableHeader({
viewName,
viewIcon,
onSortsUpdate,
sortsAvailable,
}: OwnProps) {
const [sorts, setSorts] = useState([] as Array<SortType>); const [sorts, setSorts] = useState([] as Array<SortType>);
const onSortItemSelect = (sortId: string) => { const onSortItemSelect = (sortId: string) => {
@ -64,15 +69,6 @@ function TableHeader({ viewName, viewIcon, onSortsUpdate }: OwnProps) {
onSortsUpdate && onSortsUpdate(sorts); onSortsUpdate && onSortsUpdate(sorts);
}, [sorts, onSortsUpdate]); }, [sorts, onSortsUpdate]);
const sortsAvailable: Array<SortType> = [
{
id: 'created_at',
label: 'Created at',
order: 'asc',
icon: faCalendar,
},
];
return ( return (
<StyledContainer> <StyledContainer>
<StyledTableHeader> <StyledTableHeader>

View File

@ -1,7 +1,8 @@
import TableHeader from '../TableHeader'; import TableHeader from '../TableHeader';
import { ThemeProvider } from '@emotion/react'; import { ThemeProvider } from '@emotion/react';
import { lightTheme } from '../../../../layout/styles/themes'; import { lightTheme } from '../../../../layout/styles/themes';
import { faBuilding } from '@fortawesome/pro-regular-svg-icons'; import { faBuilding, faCalendar } from '@fortawesome/pro-regular-svg-icons';
import { SortType } from '../SortAndFilterBar';
const component = { const component = {
title: 'TableHeader', title: 'TableHeader',
@ -11,9 +12,21 @@ const component = {
export default component; export default component;
export const RegularTableHeader = () => { export const RegularTableHeader = () => {
const sortsAvailable: Array<SortType> = [
{
id: 'created_at',
label: 'Created at',
order: 'asc',
icon: faCalendar,
},
];
return ( return (
<ThemeProvider theme={lightTheme}> <ThemeProvider theme={lightTheme}>
<TableHeader viewName="Test" viewIcon={faBuilding} /> <TableHeader
viewName="Test"
viewIcon={faBuilding}
sortsAvailable={sortsAvailable}
/>
</ThemeProvider> </ThemeProvider>
); );
}; };