add import messages/calls ui feedback

This commit is contained in:
m5r
2021-09-25 07:07:40 +08:00
parent 8f0a6f7060
commit 2f45e1d9a8
14 changed files with 153 additions and 16 deletions

View File

@ -37,6 +37,22 @@ const insertMessagesQueue = Queue<Payload>(
.sort((a, b) => a.sentAt.getTime() - b.sentAt.getTime());
await db.message.createMany({ data: sms, skipDuplicates: true });
const processingState = await db.processingPhoneNumber.findFirst({ where: { organizationId, phoneNumberId } });
if (!processingState) {
return;
}
if (processingState.hasFetchedCalls) {
await db.processingPhoneNumber.delete({
where: { organizationId_phoneNumberId: { organizationId, phoneNumberId } },
});
} else {
await db.processingPhoneNumber.update({
where: { organizationId_phoneNumberId: { organizationId, phoneNumberId } },
data: { hasFetchedMessages: true },
});
}
},
);

View File

@ -3,9 +3,22 @@ import { IoChevronForward } from "react-icons/io5";
import getConversationsQuery from "../queries/get-conversations";
import { formatRelativeDate } from "../../core/helpers/date-formatter";
import { useEffect } from "react";
import PhoneInitLoader from "../../core/components/phone-init-loader";
export default function ConversationsList() {
const conversations = useQuery(getConversationsQuery, {})[0];
const [conversations, query] = useQuery(getConversationsQuery, {});
useEffect(() => {
if (!conversations) {
const pollInterval = setInterval(() => query.refetch(), 1500);
return () => clearInterval(pollInterval);
}
}, [conversations, query]);
if (!conversations) {
return <PhoneInitLoader />;
}
if (Object.keys(conversations).length === 0) {
return <div>empty state</div>;

View File

@ -26,9 +26,11 @@ const Messages: BlitzPage = () => {
<div className="flex flex-col space-y-6 p-3">
<h2 className="text-3xl font-bold">Messages</h2>
</div>
<Suspense fallback="Loading...">
<ConversationsList />
</Suspense>
<section className="flex flex-grow flex-col">
<Suspense fallback="Loading...">
<ConversationsList />
</Suspense>
</section>
<NewMessageButton onClick={() => setIsOpen(true)} />
<NewMessageBottomSheet />
</>

View File

@ -27,6 +27,12 @@ export default resolver.pipe(
}
const phoneNumberId = organization.phoneNumbers[0]!.id;
const processingState = await db.processingPhoneNumber.findFirst({ where: { organizationId, phoneNumberId } });
if (processingState && !processingState.hasFetchedMessages) {
return;
}
const messages = await db.message.findMany({
where: { organizationId, phoneNumberId },
orderBy: { sentAt: Prisma.SortOrder.desc },