mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 13:32:00 +00:00
feat: add export to pdf functionality
This commit is contained in:
@@ -21,10 +21,18 @@ import {
|
||||
ProjectFlockApi,
|
||||
ProjectFlockKandangApi,
|
||||
} from '@/services/api/production';
|
||||
import { ProjectFlockKandang } from '@/types/api/production/project-flock-kandang';
|
||||
import { isResponseError } from '@/lib/api-helper';
|
||||
import {
|
||||
BaseProjectFlockKandang,
|
||||
ProjectFlockKandang,
|
||||
} from '@/types/api/production/project-flock-kandang';
|
||||
import { isResponseError, isResponseSuccess } from '@/lib/api-helper';
|
||||
import Pagination from '@/components/Pagination';
|
||||
import { ProductionResultReportApi } from '@/services/api/report/production-result';
|
||||
import { BaseApiResponse } from '@/types/api/api-general';
|
||||
import { httpClient } from '@/services/http/client';
|
||||
import { ProductionResult } from '@/types/api/report/production-result';
|
||||
import ProductionResultReportPDF from './ProductionResultReportPDF';
|
||||
import { pdf } from '@react-pdf/renderer';
|
||||
|
||||
const ProductionResultContent = () => {
|
||||
const [projectFlockKandangs, setProjectFlockKandangs] = useState<
|
||||
@@ -49,6 +57,8 @@ const ProductionResultContent = () => {
|
||||
const [isLoadingExportingToExcel, setIsLoadingExportingToExcel] =
|
||||
useState(false);
|
||||
|
||||
const [isLoadingExportingToPdf, setIsLoadingExportingToPdf] = useState(false);
|
||||
|
||||
const [selectedArea, setSelectedArea] = useState<OptionType | null>(null);
|
||||
const [selectedLocation, setSelectedLocation] = useState<OptionType | null>(
|
||||
null
|
||||
@@ -158,6 +168,87 @@ const ProductionResultContent = () => {
|
||||
setIsLoadingExportingToExcel(false);
|
||||
};
|
||||
|
||||
const exportToPdfHandler = async () => {
|
||||
setIsLoadingExportingToPdf(true);
|
||||
|
||||
try {
|
||||
let projectFlockKandangsData: BaseProjectFlockKandang[] = [];
|
||||
|
||||
if (selectedProjectFlockKandang) {
|
||||
const projectFlockKandangResponse =
|
||||
await ProjectFlockKandangApi.getSingle(
|
||||
selectedProjectFlockKandang?.value as number
|
||||
);
|
||||
|
||||
projectFlockKandangsData = isResponseSuccess(
|
||||
projectFlockKandangResponse
|
||||
)
|
||||
? [projectFlockKandangResponse.data]
|
||||
: [];
|
||||
} else {
|
||||
const projectFlockKandangsResponse =
|
||||
await ProjectFlockKandangApi.getAll({
|
||||
area_id: selectedArea?.value,
|
||||
project_flock_id: selectedProjectFlock?.value,
|
||||
});
|
||||
|
||||
projectFlockKandangsData = isResponseSuccess(
|
||||
projectFlockKandangsResponse
|
||||
)
|
||||
? projectFlockKandangsResponse.data
|
||||
: [];
|
||||
}
|
||||
|
||||
const mappedProductionResults: {
|
||||
projectFlockKandang: BaseProjectFlockKandang;
|
||||
productionResult: ProductionResult[] | null;
|
||||
}[] = await Promise.all(
|
||||
projectFlockKandangsData.map(async (projectFlockKandang) => {
|
||||
const getProductionResultPath = `${ProductionResultReportApi.basePath}/${projectFlockKandang.id}?page=1&limit=100`;
|
||||
const getProductionResultRes = await httpClient<
|
||||
BaseApiResponse<ProductionResult[]>
|
||||
>(getProductionResultPath);
|
||||
|
||||
return {
|
||||
projectFlockKandang,
|
||||
productionResult: isResponseSuccess(getProductionResultRes)
|
||||
? getProductionResultRes.data
|
||||
: null,
|
||||
};
|
||||
})
|
||||
);
|
||||
|
||||
if (mappedProductionResults.length === 0) {
|
||||
toast.error('Tidak ada data untuk diexport.');
|
||||
setIsLoadingExportingToPdf(false);
|
||||
return;
|
||||
}
|
||||
|
||||
const openPdf = async () => {
|
||||
const productionResultPdfBlob = await pdf(
|
||||
<ProductionResultReportPDF
|
||||
mappedProductionResults={mappedProductionResults}
|
||||
/>
|
||||
).toBlob();
|
||||
|
||||
const productionResultReportPdfUrl = URL.createObjectURL(
|
||||
productionResultPdfBlob
|
||||
);
|
||||
window.open(productionResultReportPdfUrl, '_blank');
|
||||
};
|
||||
|
||||
await openPdf();
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
toast.error('Gagal melakukan export laporan hasil produksi! Coba lagi.');
|
||||
}
|
||||
// await ProductionResultReportApi.exportProductionResultToPdf(
|
||||
// projectFlockKandangs
|
||||
// );
|
||||
|
||||
setIsLoadingExportingToPdf(false);
|
||||
};
|
||||
|
||||
const searchHandler = async () => {
|
||||
setProjectFlockKandangs(null);
|
||||
setIsLoadingSearch(true);
|
||||
@@ -355,6 +446,13 @@ const ProductionResultContent = () => {
|
||||
onClick={exportToExcelHandler}
|
||||
className='text-nowrap'
|
||||
/>
|
||||
<MenuItem
|
||||
title='Export to PDF'
|
||||
icon='icon-park-outline:file-pdf-one'
|
||||
isLoading={isLoadingExportingToPdf}
|
||||
onClick={exportToPdfHandler}
|
||||
className='text-nowrap'
|
||||
/>
|
||||
</Menu>
|
||||
</Dropdown>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user