@@ -19,7 +25,9 @@ export default function BoardsPage({ boards, team }: BoardsPageProps) {
- {parsedBoards &&
}
+ {parsedBoards && (
+
+ )}
);
}
@@ -35,8 +43,15 @@ export const getServerSideProps: GetServerSideProps = async (context) => {
},
};
}
-
const teamId = context.params?.id as string;
+ const userRole = await TeamService.getUserTeamRole(session.user.id, teamId);
+
+ if (!userRole) {
+ return {
+ notFound: true,
+ };
+ }
+
const team = await getTeam(teamId);
if (!team) {
@@ -51,6 +66,7 @@ export const getServerSideProps: GetServerSideProps = async (context) => {
props: {
boards: JSON.stringify(boards),
team: JSON.stringify(team),
+ userRole: JSON.stringify(userRole),
},
};
};
diff --git a/pages/teams/[id]/members.tsx b/pages/teams/[id]/members.tsx
index 229ed5e..5bc4447 100644
--- a/pages/teams/[id]/members.tsx
+++ b/pages/teams/[id]/members.tsx
@@ -4,15 +4,22 @@ import { MembersList } from "@/components/teams/members-list";
import { getSession } from "next-auth/react";
import { TeamService } from "@/lib/services/team/team-service";
import { Button } from "@/components/ui/button";
+import { hasTeamPermission } from "@/lib/auth/permission-utils";
interface MembersPageProps {
members: string;
team: string;
+ userRole: string;
}
-export default function MembersPage({ members, team }: MembersPageProps) {
+export default function MembersPage({
+ members,
+ team,
+ userRole,
+}: MembersPageProps) {
const parsedTeam = JSON.parse(team);
const parsedMembers = JSON.parse(members);
+ const parsedUserRole = JSON.parse(userRole);
return (
@@ -39,17 +46,11 @@ export const getServerSideProps: GetServerSideProps = async (context) => {
const teamId = context.params?.id as string;
const team = await getTeam(teamId);
+ const userRole = await TeamService.getUserTeamRole(session.user.id, teamId);
- const isUserMemberOfTeam = await TeamService.isUserMemberOfTeam(
- session.user.id,
- teamId
- );
- if (!isUserMemberOfTeam) {
+ if (!userRole) {
return {
- redirect: {
- destination: "/teams",
- permanent: false,
- },
+ notFound: true,
};
}
@@ -59,6 +60,7 @@ export const getServerSideProps: GetServerSideProps = async (context) => {
props: {
members: JSON.stringify(members),
team: JSON.stringify(team),
+ userRole: JSON.stringify(userRole),
},
};
};
diff --git a/server.ts b/server.ts
index 3883e1c..a1d6a6f 100644
--- a/server.ts
+++ b/server.ts
@@ -6,7 +6,13 @@ import { createAutomergeServer } from "@/lib/automerge-server";
const dev = process.env.NODE_ENV !== "production";
const hostname = "localhost";
const port = parseInt(process.env.PORT || "3000", 10);
-const app = next({ dev });
+const app = next({
+ dev,
+ hostname,
+ port,
+
+ customServer: true,
+});
const handle = app.getRequestHandler();
app.prepare().then(() => {
@@ -28,7 +34,7 @@ app.prepare().then(() => {
server.on("upgrade", (request, socket, head) => {
if (!request.url) return socket.destroy();
- const { pathname } = new URL(request.url, `http://${hostname}`);
+ const { pathname } = new URL(request.url, `http://${hostname}:${port}`);
if (pathname === "/_next/webpack-hmr") {
return;
diff --git a/types/BoardAction.d.ts b/types/BoardAction.d.ts
deleted file mode 100644
index 7c373c5..0000000
--- a/types/BoardAction.d.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-enum BoardAction {
- CREATE = "CREATE",
- DELETE = "DELETE",
- UPDATE = "UPDATE",
- REVERT_HISTORY = "REVERT_HISTORY",
- MERGE = "MERGE",
-}
-
-export default BoardAction;
diff --git a/types/TeamInvitationStatus.d.ts b/types/TeamInvitationStatus.d.ts
deleted file mode 100644
index 4f8b8f6..0000000
--- a/types/TeamInvitationStatus.d.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-enum TeamInvitationStatus {
- PENDING = "PENDING",
- ACCEPTED = "ACCEPTED",
- REJECTED = "REJECTED",
- CANCELLED = "CANCELLED",
-}
-
-export default TeamInvitationStatus;
diff --git a/types/User.d.ts b/types/User.d.ts
deleted file mode 100644
index b80c585..0000000
--- a/types/User.d.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-export default interface User {
- id: string;
- name: string;
- email: string;
- password: string;
- createdAt: Date;
- updatedAt: Date;
-}