filter
This React component, named FilterModel, integrates Kendo UI controls, moment.js for date manipulation, and Bootstrap for styling. It handles filters and updates for a paginated log system.unknown
javascript
a year ago
4.0 kB
27
Indexable
import React from "react";
import moment from "moment";
import InputKendoRct from "../../control-components/input/input";
import DatePickerKendoRct from "../../control-components/date-picker/date-picker";
import { Loader } from "@progress/kendo-react-indicators";
import ApiHelper from "../../helper/api-helper";
import ApiUrls from "../../helper/api-urls";
import { NotificationManager } from "react-notifications";
import "bootstrap/dist/css/bootstrap.min.css";
const FilterModel = ({ filters, updateFilters, page, pageSize, onPageChange, onLogsUpdate }) => {
const [loading, setLoading] = React.useState(false);
const [tempFilters, setTempFilters] = React.useState(filters); // Temporary state to hold changes
const handleChange = (e) => {
const value = e.target.value;
const name = e.target.name;
updateFilters({
...filters,
[name]: name === "staffId" ? (value ? [value] : []) : value,
});
};
const handleFilter = () => {
setLoading(true);
const data = {
pageNumber: page,
pageSize: pageSize,
staffId: tempFilters.staffId === null ? [] : tempFilters.staffId,
clinicId: tempFilters.clinicId,
startDate: tempFilters.startDate ? moment(tempFilters.startDate).toISOString() : null,
endDate: tempFilters.endDate ? moment(tempFilters.endDate).toISOString() : null,
};
onPageChange({ page: { skip: (page - 1) * pageSize, take: pageSize } });
ApiHelper.postRequest(ApiUrls.GET_LOGS, data)
.then((response) => {
setLoading(false);
onLogsUpdate(response.resultData, response.metaData);
})
.catch((error) => {
setLoading(false);
NotificationManager.error(error.message);
});
updateFilters(tempFilters);
};
const handleClear = React.useCallback(() => {
setTempFilters({
staffId: [],
clinicId: null,
startDate: moment().subtract(3, "days").startOf("day").toISOString(),
endDate: moment().endOf("day").toISOString(),
});
}, []);
return (
<>
{loading && <Loader />}
<div className="row align-items-end">
<div className="col-lg-3 col-md-6 col-12">
<InputKendoRct
value={tempFilters.staffId} // Use tempFilters instead of filters
onChange={handleChange}
name="staffId"
label="Staff Id"
className="form-control"
placeholder="Staff Id"
type="number"
/>
</div>
<div className="col-lg-3 col-md-6 col-12">
<InputKendoRct
value={tempFilters.clinicId} // Use tempFilters instead of filters
onChange={handleChange}
name="clinicId"
label="Client Id"
className="form-control"
placeholder="Client Id"
type="number"
/>
</div>
<div className="col-lg-3 col-md-6 col-12 date-field">
<DatePickerKendoRct
value={tempFilters.startDate ? new Date(tempFilters.startDate) : new Date()}
onChange={(e) => setTempFilters({ ...tempFilters, startDate: e.value })}
label={"Start Date"}
/>
</div>
<div className="col-lg-3 col-md-6 col-12 date-field">
<DatePickerKendoRct
value={tempFilters.endDate ? new Date(tempFilters.endDate) : new Date()}
onChange={(e) => setTempFilters({ ...tempFilters, endDate: e.value })}
label={"End Date"}
/>
</div>
<div className="col-lg-6 col-md-6 col-12 pt-3 text-right justify-content-start flex-wrap d-flex align-items-center">
<button className="green-btn btn-primary" onClick={handleFilter}>
Filter
</button>
<button className="btn ml-3" onClick={handleClear}>
Clear
</button>
</div>
</div>
</>
);
};
export default FilterModel;
Editor is loading...
Leave a Comment