refactor: move sortable fields in table
This commit is contained in:
@ -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>
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user