From 327299d8d748562aa71479505723f3220693fce3 Mon Sep 17 00:00:00 2001 From: talksik Date: Sun, 3 Apr 2022 06:53:13 -0400 Subject: [PATCH] adding models and stale state for convos --- packages/core/models/audioClip.model.ts | 12 +++ packages/core/models/conversation.model.ts | 30 +++++++ .../core/models/masterConversation.model.ts | 17 ++++ .../src/pages/Home/conversations/index.tsx | 78 +++++++++++++++++-- .../desktop/src/pages/Home/newConvo/index.tsx | 12 ++- 5 files changed, 140 insertions(+), 9 deletions(-) create mode 100644 packages/core/models/audioClip.model.ts create mode 100644 packages/core/models/conversation.model.ts create mode 100644 packages/core/models/masterConversation.model.ts diff --git a/packages/core/models/audioClip.model.ts b/packages/core/models/audioClip.model.ts new file mode 100644 index 0000000..95e32d1 --- /dev/null +++ b/packages/core/models/audioClip.model.ts @@ -0,0 +1,12 @@ +import { ObjectId } from "mongodb"; + +export default class AudioClip { + constructor( + public _id: ObjectId, + + public url: string, + + public createdDate: Date = new Date(), + public duration?: number + ) {} +} diff --git a/packages/core/models/conversation.model.ts b/packages/core/models/conversation.model.ts new file mode 100644 index 0000000..b1d0c86 --- /dev/null +++ b/packages/core/models/conversation.model.ts @@ -0,0 +1,30 @@ +import { ObjectId } from "mongodb"; + +export class Conversation { + _id: ObjectId; + name?: string; + + createdDate: Date; + lastUpdatedDate: Date; + + constructor() {} +} + +export class ConversationMember { + _id: ObjectId; + + // unique constraint + conversationId: ObjectId; + userId: ObjectId; + + state: ConversationMemberState; + + createdDate: Date; +} + +export enum ConversationMemberState { + INVITED = "INVITED", // user gets this in their request inbox + INBOX = "INBOX", // user decided to join this conversation after being invited + TUNED = "TUNED", // user upgraded priority of this and now is tuned in live to convo + ARCHIVED = "ARCHIVED", // user no longer wants anything to do with convo +} diff --git a/packages/core/models/masterConversation.model.ts b/packages/core/models/masterConversation.model.ts new file mode 100644 index 0000000..10804fe --- /dev/null +++ b/packages/core/models/masterConversation.model.ts @@ -0,0 +1,17 @@ +import AudioClip from "./audioClip.model"; +import { ConversationMember } from "./conversation.model"; +import { ObjectId } from "mongodb"; + +export default class MasterConversation { + // attributes of conversation + id: ObjectId; // id of the conversation + name?: string; + createdDate: Date; + lastUpdatedDate: Date; + + // compiled data for easy client read + currentUserMember: ConversationMember; + otherMembers: ConversationMember[]; + + audioClips: AudioClip[]; +} diff --git a/packages/desktop/src/pages/Home/conversations/index.tsx b/packages/desktop/src/pages/Home/conversations/index.tsx index 498921b..d65a7a0 100644 --- a/packages/desktop/src/pages/Home/conversations/index.tsx +++ b/packages/desktop/src/pages/Home/conversations/index.tsx @@ -4,11 +4,16 @@ import { } from "../../../controller/recoil"; import { Add, LinkRounded, RecordVoiceOverTwoTone } from "@mui/icons-material"; import { Avatar, Tooltip } from "antd"; -import { Button, Tab, Tabs } from "@mui/material"; +import { Button, Fab, Tab, Tabs } from "@mui/material"; +import { + Conversation, + ConversationMemberState, +} from "../../../../../core/models/conversation.model"; import { useRecoilState, useSetRecoilState } from "recoil"; import { ContactDetails } from "@nirvana/core/responses/getContacts.response"; import { FaVolumeUp } from "react-icons/fa"; +import MasterConversation from "../../../../../core/models/masterConversation.model"; import SkeletonLoader from "../../../components/loading/skeleton"; import UserAvatarWithStatus from "../../../components/User/userAvatarWithStatus"; import UserStatusText from "../../../components/User/userStatusText"; @@ -52,6 +57,58 @@ export default function Conversations() { setSelectedConvo(googleUserId); }; + // fake data of conversations + const allMasterConvos = [] as MasterConversation[]; + + // render right content based on selected tab + const renderConversationContent = () => { + // if no content for a tab, then show stale text + + const invitedConvos = allMasterConvos.filter( + (masterConvo) => + masterConvo.currentUserMember.state === ConversationMemberState.INVITED + ); + const inboxConvos = allMasterConvos.filter( + (masterConvo) => + masterConvo.currentUserMember.state === ConversationMemberState.INBOX + ); + const tunedConvos = allMasterConvos.filter( + (masterConvo) => + masterConvo.currentUserMember.state === ConversationMemberState.TUNED + ); + + const liveConversations = []; + + switch (selectedTab) { + case ConvoTab.LIVE: + return ( + + None of your channels are live. Join and chill in a room and it will + show up here! + + ); + case ConvoTab.TUNED: + if (tunedConvos?.length) { + return displaying all tuned in convos; + } + return Pin a channel to turn it into a walkie talkie.; + case ConvoTab.INBOX: + if (inboxConvos?.length) { + return displaying all inbox convos; + } + return Connect with someone and start talking!; + case ConvoTab.REQUESTS: + if (invitedConvos?.length) { + return displaying all request convos; + } + return ( + + No new conversations, connect with someone to get started. + + ); + } + }; + return ( <>
@@ -81,16 +138,21 @@ export default function Conversations() { /> - + + new + +
+ +
+ {renderConversationContent()}
{/* {isLoading ? ( diff --git a/packages/desktop/src/pages/Home/newConvo/index.tsx b/packages/desktop/src/pages/Home/newConvo/index.tsx index 8ac5ed4..4e52944 100644 --- a/packages/desktop/src/pages/Home/newConvo/index.tsx +++ b/packages/desktop/src/pages/Home/newConvo/index.tsx @@ -115,7 +115,11 @@ export default function NewConvo() { return (
- @@ -149,6 +153,12 @@ export default function NewConvo() {
))}
+ +
+ +
); }