import { useEffect, useState } from 'react'; import { concat, filter, forEach, get } from 'lodash'; const useReports = (filters, filtersOnSameReport = false) => { const [ reportReference, setReportReference ] = useState(null); useEffect(() => { if (reportReference && filtersOnSameReport) { setFilters(reportReference, filters).catch(console.log); } }, [filters]); const handleReportLoad = (report) => { setReportReference(report); if (filters && filters.length){ setFilters(report, filters).catch(console.log); } }; const setFilters = (report, filters) => getFilters(report, (currentFilters) => { forEach(filters, (singleFilter) => { currentFilters = filter(currentFilters, (o) => { return get(o, 'target.table', null) !== get(singleFilter, 'target.table', null); }); }); report.setFilters(concat(currentFilters, filters)) .then(() => { console.log('Filter was set.'); }) .catch(console.log); }); const getFilters = (report, callback = (_) => {}) => report.getFilters() .then((filters) => { if (callback) { callback(filters); } }).catch(console.log); const handleReportRender = (report) => { setReportReference(report); }; const handlePageChange = () => { if (reportReference && filters && filters.length){ setFilters(reportReference, filters).catch(console.log); } }; const setFullscreen = () => reportReference ? reportReference.fullscreen() : null; const printReport = () => reportReference ? reportReference.print() : null; return { handleReportLoad, handleReportRender, handlePageChange, setFullscreen, printReport, }; }; export default useReports;