Files
documenso/apps/remix/app/components/general/document/document-processing-poll.tsx
David Nguyen 5f17288af6 fix: rebase
2025-06-12 17:46:03 +10:00

55 lines
1.2 KiB
TypeScript

import { useEffect } from 'react';
import type { DocumentStatus, RecipientRole, SigningStatus } from '@prisma/client';
import { useRevalidator } from 'react-router';
import { isDocumentBeingProcessed } from '@documenso/lib/utils/document';
type DocumentType = {
id: number;
status: DocumentStatus;
deletedAt: Date | null;
recipients: Array<{
role: RecipientRole;
signingStatus: SigningStatus;
}>;
};
export type DocumentProcessingPollProps = {
documents?: DocumentType[] | DocumentType;
};
export const DocumentProcessingPoll = ({ documents }: DocumentProcessingPollProps) => {
const { revalidate } = useRevalidator();
useEffect(() => {
if (!documents) {
return;
}
const documentArray = Array.isArray(documents) ? documents : [documents];
if (documentArray.length === 0) {
return;
}
const hasProcessingDocuments = documentArray.some((document) =>
isDocumentBeingProcessed(document),
);
if (!hasProcessingDocuments) {
return;
}
const interval = setInterval(() => {
if (window.document.hasFocus()) {
void revalidate();
}
}, 3000);
return () => clearInterval(interval);
}, [documents, revalidate]);
return null;
};