Rya*_*anY 5 javascript sorting material-ui
我正在使用 Material UI DataGrid,我的一列包含日期。Material UI文档说将列数组中的类型设置为“日期”,我已经这样做了:
{
field: "submittedAt",
headerName: "Submitted",
minWidth: 150,
flex: 2,
type: "date",
headerClassName: "tableHeader",
cellClassName: "hoverPointer"
}
Run Code Online (Sandbox Code Playgroud)
然后我使用 Luxon 将时间戳转换为 MM/dd/yyyy 格式
if (r.data().submittedAt) {
const d = DateTime.fromMillis(r.data().submittedAt.toMillis());
requestedDate = d.toFormat('MM/dd/yyyy')
}
Run Code Online (Sandbox Code Playgroud)
然后使用requestedDate设置列中单元格的值。当我对数据进行排序时,该列仍然按字符串比较器而不是按日期排序:
我不确定我做错了什么,而且我似乎在文档或以前的帖子中找不到太多支持。我知道我可以将日期设置为 yyyy/MM/dd 以便字符串比较器工作,但我不希望为了可读性而呈现该格式。我还需要该列可由用户动态排序,因此服务器端排序也无法帮助我。预先感谢您的任何帮助。
我做了什么:
这样,您需要进行的调整就很少(只需渲染代码)
const dateFormattingOptions: Intl.DateTimeFormatOptions = {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
};
function renderDate(checkTimeAndDate: any) {
if (!checkTimeAndDate) {
return '';
}
return new Date(checkTimeAndDate).toLocaleDateString(
'de-DE',
dateFormattingOptions
);
}
Run Code Online (Sandbox Code Playgroud)
const columns: GridColDef[] = [
// ...
{
field: 'myTimeAndDateField',
headerName: 'My Time and Date',
width: 250,
type: 'dateTime',
renderCell: (params: GridRenderCellParams<MyDataTypeWithADateField>) =>
renderDate(params.row.myTimeAndDateField)
},
// ...
];
Run Code Online (Sandbox Code Playgroud)
return (<DataGrid
rows={myData}
columns={columns}
// ...
/>);
Run Code Online (Sandbox Code Playgroud)
测试:
test('the data table renders timestamps, formatted for Germany', async () => {
// ...
render(<MyComponent />);
expect(findDataFieldValue('myTimeAndDateField')).toBe('12.09.2022, 10:01:08');
});
function findDataFieldValue(dataField: string): string | null | undefined {
// material UI makes this into a div - I need to get conceptual table cell instead
const element: HTMLElement | null = document.querySelector<HTMLElement>(
"div[role='cell'][data-field='" + dataField + "']"
);
return element?.textContent;
}
Run Code Online (Sandbox Code Playgroud)
测试数据:
export const testData: MyDataTypeWithADateField = {
// ...
myTimeAndDateField: '2022-09-12T10:01:08+0200',
// ...
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4922 次 |
| 最近记录: |