diff --git a/api/functions/graphql/types/project.js b/api/functions/graphql/types/project.js index 7972883..957f294 100644 --- a/api/functions/graphql/types/project.js +++ b/api/functions/graphql/types/project.js @@ -15,7 +15,6 @@ const { logError } = require('../../../utils/logger'); const { resolveImgObjectToUrl } = require('../../../utils/resolveImageUrl'); const { paginationArgs, getLnurlDetails, lightningAddressToLnurl } = require('./helpers'); const { ImageInput } = require('./misc'); -const { Tournament } = require('./tournament'); const { MakerRole } = require('./users'); @@ -101,10 +100,8 @@ const Project = objectType({ }) - // No need to create this "middle" kind of relations - // Instead, just return tournaments - t.list.nonNull.field('tournaments', { - type: Tournament, + t.nonNull.list.nonNull.field('tournaments', { + type: "Tournament", resolve: (parent) => { return prisma.tournamentProject.findMany({ where: { project_id: parent.id }, @@ -143,6 +140,24 @@ const Project = objectType({ }) } }) + + t.nonNull.list.nonNull.field('permissions', { + type: ProjectPermissionEnum, + resolve: async (parent, _, ctx) => { + const user = await getUserByPubKey(ctx.userPubKey) + if (!user) return []; + + const role = (await prisma.projectMember.findUnique({ where: { projectId_userId: { projectId: parent.id, userId: user.id } } }))?.role; + + if (!role) return []; + + if (role === ROLE_ADMIN) return [PROJECT_PERMISSIONS.UpdateMembers, PROJECT_PERMISSIONS.UpdateInfo]; + + if (role === ROLE_OWNER) return Object.values(PROJECT_PERMISSIONS); + + return [] + } + }) } }) @@ -155,6 +170,18 @@ const TEAM_MEMBER_ROLE = enumType({ members: [ROLE_OWNER, ROLE_ADMIN, ROLE_MAKER], }); +const PROJECT_PERMISSIONS = { + UpdateInfo: "UpdateInfo", + DeleteProject: "DeleteProject", + UpdateAdmins: "UpdateAdmins", + UpdateMembers: "UpdateMembers", +} + +const ProjectPermissionEnum = enumType({ + name: 'ProjectPermissionEnum', + members: PROJECT_PERMISSIONS, +}); + const ProjectMember = objectType({ name: "ProjectMember", definition(t) { diff --git a/src/features/Projects/pages/ExplorePage/Header/Header.tsx b/src/features/Projects/pages/ExplorePage/Header/Header.tsx index c289d1e..dcfd708 100644 --- a/src/features/Projects/pages/ExplorePage/Header/Header.tsx +++ b/src/features/Projects/pages/ExplorePage/Header/Header.tsx @@ -19,6 +19,7 @@ export const bannerData = { link: { content: "Register Now", url: createRoute({ type: "tournament", id: 1 }), + newTab: false }, } @@ -91,7 +92,7 @@ export default function Header() {