Skip to content

Commit

Permalink
feat/485
Browse files Browse the repository at this point in the history
  • Loading branch information
Sid-80 committed Jul 20, 2024
1 parent 00d5e29 commit 0909a51
Show file tree
Hide file tree
Showing 7 changed files with 90 additions and 78 deletions.
24 changes: 24 additions & 0 deletions src/app/api/teams/getTeamById/[id]/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { mongoDB } from "@/lib/MongoDB";
import TeamModel from "@/models/team";
import { NextResponse } from "next/server";

export async function GET(
request: Request,
{ params }: { params: { id: string } }
) {
try {
const { id } = params;

console.log(id)
if (!id) return new Response("Parameters missing!!", { status: 401 });

await mongoDB();

const teams = await TeamModel.findById({ _id: id }).populate("createdBy");


return NextResponse.json(teams, { status: 200 });
} catch (err) {
return NextResponse.json(`Err : ${err}`, { status: 500 });
}
}
34 changes: 34 additions & 0 deletions src/app/api/teams/member/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { mongoDB } from "@/lib/MongoDB";
import { AuthMiddleware } from "@/Middleware/AuthMiddleware";
import TeamModel from "@/models/team";
import { ApiUser } from "@/types/types";
import { NextResponse } from "next/server";

export async function POST(
request: Request
) {

const result = await AuthMiddleware(request);

if (result instanceof NextResponse) {

try {
const {teamId} = await request.json();

await mongoDB();

const user: ApiUser = JSON.parse(request.headers.get("user") || "{}");

await TeamModel.updateOne(
{ _id: teamId },
{ $push: { teamMembers: user._id } }
);

return NextResponse.json('Added SuccessFully!!',{ status: 200 });
} catch (err) {
return NextResponse.json(`Err : ${err}`, {status:500});
}
} else {
return result;
}
}
8 changes: 0 additions & 8 deletions src/app/dashboard/_components/SideNav.tsx
Original file line number Diff line number Diff line change
@@ -1,28 +1,20 @@
import React, { useContext, useEffect, useState } from "react";
import SideNavTopSection, { TEAM } from "./SideNavTopSection";
import SideNavBottomSection from "./SideNavBottomSection";
import { useConvex, useMutation } from "convex/react";
import { api } from "../../../../convex/_generated/api";
import { toast } from "sonner";
import { FileListContext } from "@/app/_context/FilesListContext";
import { setClose, setOpen } from "@/app/Redux/Menu/menuSlice";
import { useDispatch, useSelector } from "react-redux";
import { useTheme } from "next-themes";
import { RootState } from "@/config/store";
import createAxiosInstance from "@/config/AxiosProtectedRoute";
import { getFileUrl } from "@/lib/API-URLs";
// import { RootState } from "@/app/store";

function SideNav() {
const createFile = useMutation(api.files.createFile);
const [activeTeam, setActiveTeam] = useState<TEAM | any>();
// const activeTeamId = useSelector((state: RootState) => state.team.teamId);
// const activeTeamName = useSelector((state: RootState) => state.team.teamName);
const convex = useConvex();
const [totalFiles, setTotalFiles] = useState<Number>();
const { setFileList_ } = useContext(FileListContext);
const dispatch = useDispatch();
const { theme } = useTheme();
const [isSidebarOpen, setIsSidebarOpen] = useState(true);
const user = useSelector((state:RootState)=>state.auth.user)
const dispatch_nav = useDispatch();
Expand Down
16 changes: 1 addition & 15 deletions src/app/dashboard/_components/SideNavTopSection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,9 @@ function SideNavTopSection({ setActiveTeamInfo }: any) {
// },
];
const router = useRouter();
const convex = useConvex();
const dispatch = useDispatch();
const [activeTeam, setActiveTeam] = useState<TEAM>();
const [teamList, setTeamList] = useState<TEAM[]>();
const [userData, setUserdata] = useState<any>();
const [teamMembersData, setTeamData] = useState<any[]>([]);
const [ActiveTeamMembers, setActiveTeamMembers] = useState<string[]>([]);
const user = useSelector((state:RootState) => state.auth.user);
Expand All @@ -58,18 +56,6 @@ function SideNavTopSection({ setActiveTeamInfo }: any) {
user && getTeamList();
}, [user]);

useEffect(() => {
const getData = async () => {
const result = await convex.query(api.user.getUser, {
email: user.email,
});
setUserdata(result[0]);
};
if (user) {
getData();
}
}, [user]);

useEffect(() => {
activeTeam ? setActiveTeamInfo(activeTeam) : null;
}, [activeTeam]);
Expand Down Expand Up @@ -183,7 +169,7 @@ function SideNavTopSection({ setActiveTeamInfo }: any) {
{user && (
<div className="mt-2 flex gap-2 items-center">
<Avatar className="w-[40px] h-[40px]">
<AvatarImage src={userData?.image} />
<AvatarImage src={user?.image} />
<AvatarFallback className=" text-xs">
{user.firstName.charAt(0)}
{user.lastName.charAt(0)}
Expand Down
37 changes: 14 additions & 23 deletions src/app/invite/[id]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
"use client";
import { useConvex } from "convex/react";
import { useEffect, useState } from "react";
import { api } from "../../../../convex/_generated/api";
import {
AlertDialog,
AlertDialogAction,
AlertDialogCancel,
AlertDialogContent,
AlertDialogDescription,
AlertDialogFooter,
Expand All @@ -22,9 +18,12 @@ import { Checkbox } from "@/components/ui/checkbox";
import { useRouter } from "next/navigation";
import { RootState } from "@/config/store";
import { useSelector } from "react-redux";
import axios from "axios";
import { addTeamMemberUrl, getTeamByIdUrl } from "@/lib/API-URLs";
import createAxiosInstance from "@/config/AxiosProtectedRoute";
import { toast } from "sonner";

export default function Page({ params }: any) {
const convex = useConvex();
const { id } = params;
const router = useRouter();
const [teamData, setTeamData] = useState<any>(undefined);
Expand All @@ -33,19 +32,17 @@ export default function Page({ params }: any) {
const [isDialogOpen, setIsDialogOpen] = useState(false);
const [isValidLink, setIsValidLink] = useState(true);
const user = useSelector((state:RootState)=>state.auth.user)

const axiosInstance = createAxiosInstance(user.accessToken);
const [firstForm, setFirstForm] = useState(true);
const [checked, setChecked] = useState(false);

useEffect(() => {
const getTeamData = async () => {
const result = await convex.query(api.teams.getTeamById, {
_id: id,
});
const result = await axios.get(`${getTeamByIdUrl}/${id}`);
if (result) {
setErrorMsg("");
setIsError(false);
setTeamData(result);
setTeamData(result.data);
setIsDialogOpen(true);
} else {
setIsDialogOpen(true);
Expand Down Expand Up @@ -74,20 +71,14 @@ export default function Page({ params }: any) {
return;
}

let memberArray: string[];

if (teamData.teamMembers) {
memberArray = teamData.teamMembers;
} else {
memberArray = [teamData.createdBy];
// API
try {
axiosInstance.post(addTeamMemberUrl,{teamId:id})
toast.success(`Welcome to ${teamData.teamName}`)
} catch (err) {
console.log(err);
}

memberArray.push(user.email);

const result = await convex.mutation(api.teams.addMember, {
_id: id,
memberArray: memberArray,
});

router.push("/dashboard");
};
Expand Down Expand Up @@ -116,7 +107,7 @@ export default function Page({ params }: any) {
</p>
<p>
Created By :
<span className="font-bold">{teamData.createdBy}</span>
<span className="font-bold">{teamData.createdBy.firstName}{" "}{teamData.createdBy.lastName}</span>
</p>
<div className="flex items-center justify-center">
<Image
Expand Down
45 changes: 14 additions & 31 deletions src/components/shared/JoinTeamForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,13 @@ import {
} from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { useRouter } from "next/navigation";
import { useConvex } from "convex/react";
import { api } from "../../../convex/_generated/api";
import { Id } from "../../../convex/_generated/dataModel";
import { SetStateAction, useState } from "react";
import { toast } from "sonner";
import axios from "axios";
import { addTeamMemberUrl, getTeamByIdUrl } from "@/lib/API-URLs";
import createAxiosInstance from "@/config/AxiosProtectedRoute";


export type TEAMS = {
createdBy:string;
teamMembers?:string[];
teamName:string;
_creationTime:number;
_id:Id<"teams">;
}
const FormSchema = z.object({
code: z.string().min(1, {
message: "Code is required!",
Expand All @@ -40,8 +34,6 @@ type Props = {
}

export function JoinTeamForm({user,setIsDialogOpen}:Props) {

const convex = useConvex();
const router = useRouter();

const form = useForm<z.infer<typeof FormSchema>>({
Expand All @@ -51,34 +43,25 @@ export function JoinTeamForm({user,setIsDialogOpen}:Props) {
},
});

const axiosInstance = createAxiosInstance(user.accessToken);

async function onSubmit(data: z.infer<typeof FormSchema>) {
const id:Id<"teams"> = data.code as Id<"teams">;

const teamData:TEAMS = await convex.query(api.teams.getTeamById, {
_id: id,
});
const teamData = await axios.get(`${getTeamByIdUrl}/${data.code}`);

if (teamData.teamMembers?.includes(user.email) || teamData.createdBy == user.email) {
toast.error(`Already member of ${teamData.teamName}`)
if (teamData.data.teamMembers.includes(user._id) || teamData.data.createdBy.email == user.email) {
toast.error(`Already member of ${teamData.data.teamName}`)
setIsDialogOpen(false);
return;
}

let memberArray:string[];

if(teamData.teamMembers){
memberArray = teamData.teamMembers;
}else{
memberArray = [teamData.createdBy];
try {
axiosInstance.post(addTeamMemberUrl,{teamId:data.code})
toast.success(`Welcome to ${teamData.data.teamName}`)
} catch (err) {
console.log(err);
}

memberArray.push(user.email);

const result = await convex.mutation(api.teams.addMember, {
_id: id,
memberArray: memberArray,
});

router.refresh();

}
Expand Down
4 changes: 3 additions & 1 deletion src/lib/API-URLs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,6 @@ export const deleteTeamUrl = "/api/teams/delete";
export const getAllFilesUrl = "/api/files/getAllFiles";
export const updateProfileUrl = "/api/user/update";
export const saveWorkspacePrivateUrl = "/api/dashboard/save";
export const saveWorkspacePublicUrl = "/api/dashboard/public/save";
export const saveWorkspacePublicUrl = "/api/dashboard/public/save";
export const getTeamByIdUrl = "/api/teams/getTeamById";
export const addTeamMemberUrl = "/api/teams/member";

0 comments on commit 0909a51

Please sign in to comment.