@equinor/eds-data-grid-react
Version:
A feature-rich data-grid written in React, implementing the Equinor Design System
68 lines (64 loc) • 2.72 kB
JavaScript
import { useMemo } from 'react';
import { DebouncedInput } from './DebouncedInput.js';
import styled from 'styled-components';
import { jsxs, jsx } from 'react/jsx-runtime';
/* istanbul ignore file */
const NumberContainer = styled.div.withConfig({
displayName: "Filter__NumberContainer",
componentId: "sc-ytpdpw-0"
})(["display:grid;grid-template-columns:80px 80px;grid-column-gap:32px;"]);
function Filter({
column,
table
}) {
const firstValue = table.getPreFilteredRowModel().flatRows[0]?.getValue(column.id);
const columnText = useMemo(() => {
let header;
try {
if (typeof column.columnDef.header === 'function') {
const obj = column.columnDef.header(
// eslint-disable-next-line @typescript-eslint/no-explicit-any,@typescript-eslint/no-unsafe-argument
{});
header = obj.props.children;
} else {
header = column.columnDef.header;
}
} catch {
/*em all*/
}
return header;
}, [column.columnDef]);
const columnFilterValue = column.getFilterValue();
const sortedUniqueValues = useMemo(() => typeof firstValue === 'number' ? [] : Array.from(column.getFacetedUniqueValues().keys()).sort().map(v => v ?? 'NULL_OR_UNDEFINED'),
// eslint-disable-next-line react-hooks/exhaustive-deps
[column.getFacetedUniqueValues()]);
return typeof firstValue === 'number' ? /*#__PURE__*/jsxs(NumberContainer, {
children: [/*#__PURE__*/jsx(DebouncedInput, {
type: "number",
values: sortedUniqueValues,
min: Number(column.getFacetedMinMaxValues()?.[0] ?? ''),
max: Number(column.getFacetedMinMaxValues()?.[1] ?? ''),
value: columnFilterValue?.[0] ?? '',
onChange: value => column.setFilterValue(old => [value, old?.[1]]),
placeholder: `Min ${column.getFacetedMinMaxValues()?.[0] ? `(${column.getFacetedMinMaxValues()?.[0]})` : ''}`
}), /*#__PURE__*/jsx(DebouncedInput, {
type: "number",
values: sortedUniqueValues,
min: Number(column.getFacetedMinMaxValues()?.[0] ?? ''),
max: Number(column.getFacetedMinMaxValues()?.[1] ?? ''),
value: columnFilterValue?.[1] ?? '',
onChange: value => column.setFilterValue(old => [old?.[0], value]),
placeholder: `Max ${column.getFacetedMinMaxValues()?.[1] ? `(${column.getFacetedMinMaxValues()?.[1]})` : ''}`
})]
}) : /*#__PURE__*/jsx(DebouncedInput, {
type: "text",
label: columnText,
values: sortedUniqueValues,
debounce: 100,
value: columnFilterValue ?? [],
onChange: value => column.setFilterValue(value),
placeholder: `${(columnFilterValue ?? []).length} / ${column.getFacetedUniqueValues().size} selected`,
list: column.id + 'list'
});
}
export { Filter };