Skip to content

Instantly share code, notes, and snippets.

@bogordesaincom
Created May 6, 2022 16:06
Show Gist options
  • Save bogordesaincom/97b26ed1cc4b85e8fa5c7185ad78431f to your computer and use it in GitHub Desktop.
Save bogordesaincom/97b26ed1cc4b85e8fa5c7185ad78431f to your computer and use it in GitHub Desktop.
React Table Date Filter Between
export function dateBetweenFilterFn(rows, id, filterValues) {
const sd = filterValues[0] ? new Date(filterValues[0]) : undefined;
const ed = filterValues[1] ? new Date(filterValues[1]) : undefined;
if (sd == 'Invalid Date' || ed == 'Invalid Date') {
return rows;
}
if (ed || sd) {
return rows.filter((r) => {
var dateAndHour = r.values['created_at'].split(' ');
var [day, month, year] = dateAndHour[0].split('-');
var date = [month, day, year].join('/');
var formattedData = date;
const cellDate = new Date(formattedData);
if (ed && sd) {
return cellDate >= sd && cellDate <= ed;
} else if (sd) {
return cellDate >= sd;
} else {
return cellDate <= ed;
}
});
} else {
return rows;
}
}
import { useMemo } from 'react';
const DateRangeColumnFilter = ({
column: { filterValue = [], preFilteredRows, setFilter, id },
}) => {
const [min, max] = useMemo(() => {
let min = preFilteredRows.length ? new Date(preFilteredRows[0].values[id]) : new Date(0);
let max = preFilteredRows.length ? new Date(preFilteredRows[0].values[id]) : new Date(0);
preFilteredRows.forEach((row) => {
const rowDate = new Date(row.values[id]);
min = rowDate <= min ? rowDate : min;
max = rowDate >= max ? rowDate : max;
});
return [min, max];
}, [id, preFilteredRows]);
return (
<div>
<input
min={min.toISOString().slice(0, 10)}
onChange={(e) => {
const val = e.target.value;
setFilter((old = []) => [val ? val : undefined, old[1]]);
}}
type="date"
value={filterValue[0] || ''}
/>
{' to '}
<input
max={max.toISOString().slice(0, 10)}
onChange={(e) => {
const val = e.target.value;
setFilter((old = []) => [old[0], val ? val.concat('T23:59:59.999Z') : undefined]);
}}
type="date"
value={filterValue[1]?.slice(0, 10) || ''}
/>
</div>
);
};
export default DateRangeColumnFilter;
{
Header: t('created'),
accessor: 'created_at',
Filter: DateRangeColumnFilter,
filter: dateBetweenFilterFn,
},
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment