fetching audioclips successfully and clean

This commit is contained in:
Arjun Patel
2022-02-05 21:42:55 -08:00
parent 903a303f06
commit d6afaa08ca
@@ -24,13 +24,27 @@ import {
userConvoAssociationSelector, userConvoAssociationSelector,
} from "../../recoil/main"; } from "../../recoil/main";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import Conversation from "@nirvana/common/models/conversation"; import Conversation, { AudioClip } from "@nirvana/common/models/conversation";
import { useAuth } from "../../contexts/authContext"; import { useAuth } from "../../contexts/authContext";
import { QueryRoutes, Routes } from "@nirvana/common/helpers/routes"; import { QueryRoutes, Routes } from "@nirvana/common/helpers/routes";
import { MasterAvatarGroupWithUserFetch } from "../UserDetails/MasterAvatarGroup"; import { MasterAvatarGroupWithUserFetch } from "../UserDetails/MasterAvatarGroup";
import { ConversationMemberState } from "../../../common/models/conversation"; import {
ConversationMemberState,
AudioClip,
} from "../../../common/models/conversation";
import { conversationService } from "@nirvana/common/services"; import { conversationService } from "@nirvana/common/services";
import ConversationMemberStateIcon from "../Conversations/ConversationMemberStateIcon"; import ConversationMemberStateIcon from "../Conversations/ConversationMemberStateIcon";
import {
collection,
limit,
onSnapshot,
orderBy,
query,
where,
} from "firebase/firestore";
import { firestoreDb as db } from "../../services/firebaseService";
import Collections from "@nirvana/common/services/collections";
const testDrawerItems: { const testDrawerItems: {
linkType: LinkType; linkType: LinkType;
@@ -115,6 +129,8 @@ const testAudioClips: {
}, },
]; ];
const AUDIO_CLIP_FETCH_LIMIT = 50;
export default function ViewConvo(props: { conversationId: string }) { export default function ViewConvo(props: { conversationId: string }) {
const { currUser } = useAuth(); const { currUser } = useAuth();
@@ -148,7 +164,38 @@ export default function ViewConvo(props: { conversationId: string }) {
pathname: Routes.home, pathname: Routes.home,
query: { page: QueryRoutes.convos }, query: { page: QueryRoutes.convos },
}); });
return;
} }
// subscribe to the data for the conversation such that we can render the timeline
// get all audioClips for this conversation realtime listener so that when I speak it's also put on the timeline
// any new message is seamlessly added to the timeline
const audioClipsQuery = query(
collection(
db,
Collections.conversations,
props.conversationId,
Collections.conversationAudioClips
),
orderBy("createdDate", "desc"),
limit(AUDIO_CLIP_FETCH_LIMIT)
);
const unsubscribe = onSnapshot(audioClipsQuery, (querySnapshot) => {
const audioClips: AudioClip[] = [] as AudioClip[];
querySnapshot.forEach((doc) => {
const audClip = doc.data() as AudioClip;
audClip.id = doc.id;
// appending all messages in sort order
audioClips.push(audClip);
});
console.log(audioClips);
});
return unsubscribe;
}, []); }, []);
const handleOrganizeConversation = async ( const handleOrganizeConversation = async (