在 PrimeReact DataTable 中使用 rangedate 过滤器

using rangedate filter in primereact datatable

提问人:Nugraha 提问时间:5/25/2023 更新时间:5/25/2023 访问量:156

问:

我在Next.js-TypeScript中的rangedate过滤器有问题。我正在使用 primereact 库。代码如下:

const [filters, setFilters] = useState<DataTableFilterMeta>({
    woroStartDate: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode:         FilterMatchMode.DATE_IS }] },
    woroStatus: { value: 'OPEN', matchMode: FilterMatchMode.EQUALS }, //other column filter
    });

const [startDate, setStartDate] = useState<string | Date | Date[] | null>(null);
    const [endDate, setEndDate] = useState<string | Date | Date[] | null>(null);

const handleStartDateChange = (e: any) => {
    setStartDate(e.value);
  };
  const handleEndDateChange = (e: any) => {
    setEndDate(e.value);
  };

const onDateFilterChange = () => {
  const newFilters = { ...filters };

  if (startDate && endDate) {
      const startDateValue = startDate ? startDate.toString() : null;
      const endDateValue = endDate ? endDate.toString() : null;

    newFilters['woroStartDate'] = {
      matchMode: FilterMatchMode.DATE_IS,
      value: [startDateValue, endDateValue],
    };
  } else {
    newFilters['woroStartDate'] = {
      operator: FilterOperator.AND,
      constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }],
    };
  }
  setFilters(newFilters);
};

//filter form
<div>
 const renderHeader = () => {
    return (
            <Calendar className="w-full md:w-10rem" value={startDate} onChange={handleStartDateChange} dateFormat="dd/mm/yy" showButtonBar />
            <span className="mx-2">to</span>
            <Calendar className="w-full md:w-10rem" value={endDate} onChange={handleEndDateChange} dateFormat="dd/mm/yy" showButtonBar /> 

             <React.Fragment>
             <Button className="ml-2" severity="secondary" type="button" tooltip="Filter Date" tooltipOptions={{ position: 'right', showDelay: 300 }} icon="pi pi-filter" outlined rounded onClick={onDateFilterChange} />
             </React.Fragment>
           </div> 
);
};
const header = renderHeader();

//datatable and column
<DataTable
value={woros}
filters={filters}
emptyMessage="No Work Order found."
globalFilterFields={['woroStartDate', 'woroStatus']}
header={header} >

<Column 
field="woroStartDate" 
header="WorkOrder Date" 
sortable 
style={{ width: '25%' }}
body={(rowData: any) =>
new Date(rowData.woroStartDate).toLocaleDateString("en-GB", {
day: "numeric",
month: "short", 
year: "numeric"
})
}
/>

筛选器未成功筛选我的数据表。当我单击过滤器按钮时,出现错误: TypeError:value.toDateString 不是函数。

而且表中只有 20 个数据,所以后端似乎不需要做任何更改,但我还没有找到解决方案。希望有人能帮助我。谢谢。。

TypeScript PrimeReact DateFilter 数据过滤

评论

0赞 Melloware 5/25/2023
我可能是错的,但两者和您的过滤器都期望值,并且您看起来正在转换并尝试使用很可能是问题的值,并解释说这不是一个函数,因为您的值可能是一个而不是真实的。CalendarDateStringtoDateString()StringDate
0赞 Nugraha 5/25/2023
我怀疑。这也让我感到困惑。我尝试将其转换为字符串,因为使用 Date 也不起作用。我认为通过将其转换为字符串,结果将与列中的字符串日期格式匹配......谢谢你的回复,我真的需要更正。.@Melloware

答: 暂无答案