From 2782fde1ba244e99cc995302c580e7de6817e692 Mon Sep 17 00:00:00 2001 From: talksik Date: Thu, 5 May 2022 06:57:22 -0500 Subject: [PATCH] getting things going although need some minor backend changes for creating line just name tables and such --- packages/api/routes/conversation.ts | 4 +- packages/core/requests/createConvo.request.ts | 3 - packages/core/requests/createLine.request.ts | 3 + .../components/User/basicUserDetailsRow.tsx | 4 +- .../components/lines/lineRow.tsx/index.tsx | 4 +- packages/desktop/src/controller/nirvanaApi.ts | 11 +- packages/desktop/src/pages/terminal/index.tsx | 4 +- .../src/pages/terminal/newLine/index.tsx | 198 +++++++++++------- 8 files changed, 135 insertions(+), 96 deletions(-) delete mode 100644 packages/core/requests/createConvo.request.ts create mode 100644 packages/core/requests/createLine.request.ts diff --git a/packages/api/routes/conversation.ts b/packages/api/routes/conversation.ts index b23907e..a76eeea 100644 --- a/packages/api/routes/conversation.ts +++ b/packages/api/routes/conversation.ts @@ -8,7 +8,7 @@ import express, { Application, Request, Response } from "express"; import Content from "@nirvana/core/models/content.model"; import { ConversationService } from "../services/conversation.service"; -import CreateConvoRequest from "../../core/requests/createConvo.request"; +import CreateLineRequest from "../../core/requests/createLine.request"; import GetConversationDetailsResponse from "@nirvana/core/responses/getConversationDetails.response"; import GetDmConversationByOtherUserIdResponse from "../../core/responses/getDmConversationByOtherUserId.response"; import GetUserConversationsResponse from "../../core/responses/getUserConversations.response"; @@ -60,7 +60,7 @@ async function getDmByOtherUserId(req: Request, res: Response) { async function createConversation(req: Request, res: Response) { try { - const reqObj: CreateConvoRequest = req.body as CreateConvoRequest; + const reqObj: CreateLineRequest = req.body as CreateLineRequest; console.log(req.body); if (!reqObj?.otherMemberIds.length) { diff --git a/packages/core/requests/createConvo.request.ts b/packages/core/requests/createConvo.request.ts deleted file mode 100644 index 1faf1b7..0000000 --- a/packages/core/requests/createConvo.request.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default class CreateConvoRequest { - constructor(public otherMemberIds: string[]) {} -} diff --git a/packages/core/requests/createLine.request.ts b/packages/core/requests/createLine.request.ts new file mode 100644 index 0000000..c5000ae --- /dev/null +++ b/packages/core/requests/createLine.request.ts @@ -0,0 +1,3 @@ +export default class CreateLineRequest { + constructor(public otherMemberIds: string[], public lineName?: string) {} +} diff --git a/packages/desktop/src/components/User/basicUserDetailsRow.tsx b/packages/desktop/src/components/User/basicUserDetailsRow.tsx index ffc563a..487ddba 100644 --- a/packages/desktop/src/components/User/basicUserDetailsRow.tsx +++ b/packages/desktop/src/components/User/basicUserDetailsRow.tsx @@ -15,7 +15,7 @@ export default function BasicUserRow({ {user.name} - {user.email} + {user.email}
{rightJsx}
diff --git a/packages/desktop/src/components/lines/lineRow.tsx/index.tsx b/packages/desktop/src/components/lines/lineRow.tsx/index.tsx index 39decb9..c8a7cb5 100644 --- a/packages/desktop/src/components/lines/lineRow.tsx/index.tsx +++ b/packages/desktop/src/components/lines/lineRow.tsx/index.tsx @@ -6,11 +6,9 @@ import { ILineDetails } from "../../../pages/router/index"; import LineIcon from "../lineIcon"; export default function LineRow({ - id, lineDetails, onClick, }: { - id: string; lineDetails: ILineDetails; onClick: (lineId: string) => void; }) { @@ -43,6 +41,7 @@ export default function LineRow({ if (lineDetails.profilePicsLiveBroadcasters?.length) return ( diff --git a/packages/desktop/src/controller/nirvanaApi.ts b/packages/desktop/src/controller/nirvanaApi.ts index c67e76f..36e7058 100644 --- a/packages/desktop/src/controller/nirvanaApi.ts +++ b/packages/desktop/src/controller/nirvanaApi.ts @@ -1,7 +1,7 @@ import axios, { AxiosRequestConfig, AxiosResponse, Method } from "axios"; import { Conversation } from "../../../core/models/conversation.model"; -import CreateConvoRequest from "../../../core/requests/createConvo.request"; +import CreateLineRequest from "@nirvana/core/requests/createLine.request"; import LoginResponse from "../../../core/responses/login.response"; import MasterConversation from "../../../core/models/masterConversation.model"; import { User } from "@nirvana/core/models"; @@ -93,13 +93,8 @@ async function getDmByUserId(otherUserId: string): Promise { ); } -async function createConversation(otherMemberIds: string[]): Promise { - return await NirvanaApi.fetch( - `/conversations`, - "POST", - true, - new CreateConvoRequest(otherMemberIds) - ); +async function createConversation(request: CreateLineRequest): Promise { + return await NirvanaApi.fetch(`/conversations`, "POST", true, request); } export const ApiCalls = { diff --git a/packages/desktop/src/pages/terminal/index.tsx b/packages/desktop/src/pages/terminal/index.tsx index 0646db5..79525d3 100644 --- a/packages/desktop/src/pages/terminal/index.tsx +++ b/packages/desktop/src/pages/terminal/index.tsx @@ -77,7 +77,7 @@ export default function NirvanaTerminal({
{toggleTunedLines.map((line) => ( @@ -90,7 +90,7 @@ export default function NirvanaTerminal({
{restLines.map((line) => ( diff --git a/packages/desktop/src/pages/terminal/newLine/index.tsx b/packages/desktop/src/pages/terminal/newLine/index.tsx index 2c0a403..a0ddf1b 100644 --- a/packages/desktop/src/pages/terminal/newLine/index.tsx +++ b/packages/desktop/src/pages/terminal/newLine/index.tsx @@ -1,11 +1,12 @@ import { Avatar, Modal } from "antd"; import { HotKeys, KeyMap } from "react-hotkeys"; -import { useCallback, useState } from "react"; +import { useCallback, useEffect, useState } from "react"; +import { useCreateConvo, useUserSearch } from "../../../controller/index"; import BasicUserRow from "../../../components/User/basicUserDetailsRow"; import { FiSearch } from "react-icons/fi"; import { User } from "@nirvana/core/models"; -import { useUserSearch } from "../../../controller/index"; +import toast from "react-hot-toast"; export default function NewLineModal({ open, @@ -22,34 +23,38 @@ export default function NewLineModal({ const [searchQuery, setSearchQuery] = useState(""); const { refetch, data: searchRes } = useUserSearch(searchQuery); - const handleSubmit = () => { - // ensure that we don't have a one on one chat already with x person if it's one person selected + const { mutateAsync, isError, isLoading } = useCreateConvo(); - // upon success, - // make sure that the list of lines updates for this client and others so that it shows this new line - // select the line so that it shows up in the line details for this client + const [lineName, setLineName] = useState(""); - // handle close once the new line is created - handleClose(); - }; - - const handleCancel = () => { - handleClose(); - }; + useEffect(() => { + if (searchQuery) refetch(); + }, [searchQuery]); const onSearch = useCallback(() => { + console.log("enter key pressed"); + if (peopleSearchValue) { console.log("searching for people in database"); setSearchQuery(peopleSearchValue); } - }, [setSearchQuery]); + }, [setSearchQuery, peopleSearchValue]); const selectUser = useCallback( (userToAdd: User) => { - setSelectedPeople((prevSelectedUsers) => [ - ...prevSelectedUsers, - userToAdd, - ]); + setSelectedPeople((prevSelectedUsers) => { + // if user is not already in the selected user + const foundUser = prevSelectedUsers.find( + (currentUser) => + currentUser._id.toString() === userToAdd._id.toString() + ); + if (!foundUser) { + return [...prevSelectedUsers, userToAdd]; + } + + toast.error("you already selected this person below!"); + return prevSelectedUsers; + }); }, [setSelectedPeople] ); @@ -65,17 +70,48 @@ export default function NewLineModal({ [setSelectedPeople] ); + const handleSubmit = useCallback(async () => { + // ensure that we don't have a one on one chat already with x person if it's one person selected + + // upon success, + // make sure that the list of lines updates for this client and others so that it shows this new line + // select the line so that it shows up in the line details for this client + + console.log("trying to create line now!"); + + try { + if (!selectedPeople?.length) { + toast.error("you must select at least one person"); + return; + } + + const selectedMemberIds = selectedPeople.map((selectedPerson) => + selectedPerson._id.toString() + ); + + await mutateAsync({ lineName, otherMemberIds: selectedMemberIds }); + + // handle close once the new line is created + handleClose(); + } catch (error) { + toast.error(error); + console.error(error); + } + }, [lineName, selectedPeople]); + + const handleCancel = () => { + handleClose(); + }; + const keyMap: KeyMap = { - HANDLE_SEARCH: { - name: "handle search on enter", - sequence: "enter", - action: "keypress", - }, + HANDLE_SEARCH: "enter", }; const handlers = { HANDLE_SEARCH: onSearch, }; + if (isLoading) return one second while we make magic; + return ( <> - + +
+

People

-
-

People

+ + - - + setPeopleSearchValue(e.target.value)} + placeholder="search by name or email" + /> + + enter to search + + + + {/* search results */} +
+ {searchRes?.users?.map((searchedUser) => ( + selectUser(searchedUser)}> + Add + + } + /> + ))} +
+
+ + {/* selected people */} +
+

Selected People

+ +
+ {selectedPeople.map((selectedUser) => ( + unSelectUser(selectedUser._id.toString())} + > + Remove + + } + /> + ))} +
+
+ +
+

Line Name (optional)

setPeopleSearchValue(e.target.value)} - placeholder="search by name or email" - /> - - enter to search - - - {/* search results */} -
- {searchRes?.users?.map((user) => ( - selectUser(user)}>Add} - /> - ))} -
-
- - {/* selected people */} -
-

Selected People

- -
- {selectedPeople.map((selectedUser) => ( - unSelectUser(selectedUser._id.toString())} - > - Remove - - } - /> - ))} -
-
- -
-

Line Name (optional)

- -
+ placeholder={"ex. Engineering, Sprint 7, Follow up on present..."} + /> +
+
);