diff --git a/packages/common/models/user.ts b/packages/common/models/user.ts index cbe05f2..3c16c9a 100644 --- a/packages/common/models/user.ts +++ b/packages/common/models/user.ts @@ -4,22 +4,25 @@ import { serverTimestamp, Timestamp, } from "firebase/firestore"; +import { v4 as uuidv4 } from "uuid"; + import IFirestoreSerializable from "./firestoreSerializable"; export class User { - id: string; + id: string = uuidv4(); emailAddress: string; - nickName: string; + firstName: string; lastName: string; + avatarUrl: string; userStatus: UserStatus; - /**designer? dev? */ - teamRole: string; + /**designer? dev? in the future can put other things like 'best in the world' */ + description?: string; - createdDate: Timestamp; - lastUpdatedDate: Timestamp; + createdDate: Timestamp = Timestamp.now(); + lastUpdatedDate?: Timestamp; // serialize() { // return { @@ -31,6 +34,22 @@ export class User { // deserialize(firestoreData: {}) { // this.lastUpdatedDate = firestoreData.lastUpdatedDate.toDate() // } + + constructor( + _id: string = uuidv4(), + _emailAddress: string, + _firstName: string, + _lastName: string, + _avatarUrl: string, + _userStatus: UserStatus + ) { + this.id = _id; + this.emailAddress = _emailAddress; + this.firstName = _firstName; + this.lastName = _lastName; + this.avatarUrl = _avatarUrl; + this.userStatus = _userStatus; + } } export enum UserStatus { diff --git a/packages/web/components/LinkIcon.tsx b/packages/web/components/Drawer/LinkIcon.tsx similarity index 100% rename from packages/web/components/LinkIcon.tsx rename to packages/web/components/Drawer/LinkIcon.tsx diff --git a/packages/web/components/FullPageExperiences/CreateConversation.tsx.tsx b/packages/web/components/FullPageExperiences/CreateConversation.tsx.tsx index 4402e50..a4e16b4 100644 --- a/packages/web/components/FullPageExperiences/CreateConversation.tsx.tsx +++ b/packages/web/components/FullPageExperiences/CreateConversation.tsx.tsx @@ -1,16 +1,22 @@ +import { User, UserStatus } from "@nirvana/common/models/user"; import { Select, Tag } from "antd"; -import { useEffect, useRef } from "react"; +import { useEffect, useRef, useState } from "react"; import SimpleUserDetailsRow from "../UserDetails/SimpleUserDetailsRow"; -const options = [ - { value: "gold" }, - { value: "lime" }, - { value: "green" }, - { value: "cyan" }, -]; - export default function CreateConversation() { const input = useRef(); + const [selectedUsers, setSelectedUsers] = useState([] as User[]); + + // recommendations list: algolio results + cached "relevant users" from all cached conversations currently + // options for the select + // have a list of 10 max? + const [recommendedUsers, setRecommendedUsers] = useState( + [] as User[] + ); + + const options = recommendedUsers.map((recUser) => { + value: recUser.firstName + " " + recUser.lastName; + }); useEffect(() => { input.current?.focus(); @@ -38,13 +44,25 @@ export default function CreateConversation() { Selected - + + {/* list of selected people who are nirvana users */} - + diff --git a/packages/web/components/UserDetails/SimpleUserDetailsRow.tsx b/packages/web/components/UserDetails/SimpleUserDetailsRow.tsx index 17e6b2f..f158003 100644 --- a/packages/web/components/UserDetails/SimpleUserDetailsRow.tsx +++ b/packages/web/components/UserDetails/SimpleUserDetailsRow.tsx @@ -1,61 +1,25 @@ import { Avatar } from "antd"; import { FaPaperPlane, FaRegTimesCircle } from "react-icons/fa"; -import User from "@nirvana/common/models/user"; +import { User } from "@nirvana/common/models/user"; +import UserAvatar from "./UserAvatar"; export default function SelectedUserRow(props: { user: User }) { - console.log(props); return ( - <> - - - A - + + - - - {"ariel@microsoft.com"} - - - Not a valid Nirvana user. - - - - + + {"Joe Smoe"} + {"joe@microsoft.com"} - - - - {"Joe Smoe"} - {"joe@microsoft.com"} - - - - - - - - - {"Elon Musk"} - {"musk@tesla.com"} - - - - - + + ); } diff --git a/packages/web/components/UserDetails/UserAvatar.tsx b/packages/web/components/UserDetails/UserAvatar.tsx new file mode 100644 index 0000000..6952fbd --- /dev/null +++ b/packages/web/components/UserDetails/UserAvatar.tsx @@ -0,0 +1,35 @@ +import { UserStatus } from "@nirvana/common/models/user"; +import { Badge } from "antd"; +import Avatar from "antd/lib/avatar/avatar"; + +export enum UserAvatarSizes { + small = "small", + large = "large", + default = "default", +} +export default function UserAvatar(props: { + userFirstName: string; + avatarUrl?: string; + size?: UserAvatarSizes; + status: UserStatus; +}) { + if (props.avatarUrl) { + return ( + + + + ); + } + + return ( + + + {props.userFirstName} + + + ); +}