From b6401737d1ef3ca51f82bd898cdd2a5c7c035257 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rafael=20L=C3=A1szl=C3=B3?= <rlacko99@gmail.com>
Date: Thu, 10 Dec 2020 18:24:40 +0100
Subject: [PATCH] reorder and check if is admin of group

---
 client/src/components/Content.tsx             | 16 +++++++------
 .../admin/{ => group}/GroupAdmin.tsx          | 23 +++++++++++++++++--
 .../admin/{ => group}/GroupDocuments.tsx      |  0
 .../admin/{ => group}/GroupItems.tsx          |  0
 .../admin/{ => group}/GroupMembers.tsx        |  0
 .../admin/{ => group}/GroupRentals.tsx        |  0
 .../admin/{ => group}/GroupStorages.tsx       |  0
 client/src/components/group/GroupInfo.tsx     | 15 +++---------
 .../src/components/utils/GroupNotExists.tsx   | 13 +++++++++++
 client/src/components/utils/Loader.tsx        | 13 +++++++++++
 .../src/components/utils/NotAdminOfGroup.tsx  | 13 +++++++++++
 11 files changed, 72 insertions(+), 21 deletions(-)
 rename client/src/components/admin/{ => group}/GroupAdmin.tsx (83%)
 rename client/src/components/admin/{ => group}/GroupDocuments.tsx (100%)
 rename client/src/components/admin/{ => group}/GroupItems.tsx (100%)
 rename client/src/components/admin/{ => group}/GroupMembers.tsx (100%)
 rename client/src/components/admin/{ => group}/GroupRentals.tsx (100%)
 rename client/src/components/admin/{ => group}/GroupStorages.tsx (100%)
 create mode 100644 client/src/components/utils/GroupNotExists.tsx
 create mode 100644 client/src/components/utils/Loader.tsx
 create mode 100644 client/src/components/utils/NotAdminOfGroup.tsx

diff --git a/client/src/components/Content.tsx b/client/src/components/Content.tsx
index 4c2f64b..8ee6031 100644
--- a/client/src/components/Content.tsx
+++ b/client/src/components/Content.tsx
@@ -2,13 +2,13 @@ import { Box, Container } from '@material-ui/core';
 import { Redirect, Route, Switch } from 'react-router-dom';
 
 import { Faq } from './Faq';
-import { GroupAdmin } from './admin/GroupAdmin';
-import { GroupDocuments } from './admin/GroupDocuments';
+import { GroupAdmin } from './admin/group/GroupAdmin';
+import { GroupDocuments } from './admin/group/GroupDocuments';
 import { GroupInfo } from './group/GroupInfo';
-import { GroupItems } from './admin/GroupItems';
-import { GroupMembers } from './admin/GroupMembers';
-import { GroupRentals } from './admin/GroupRentals';
-import { GroupStorages } from './admin/GroupStorages';
+import { GroupItems } from './admin/group/GroupItems';
+import { GroupMembers } from './admin/group/GroupMembers';
+import { GroupRentals } from './admin/group/GroupRentals';
+import { GroupStorages } from './admin/group/GroupStorages';
 import { Groups } from './group/Groups';
 import { LoggedInHome } from './home/LoggedInHome';
 import { LoggedOutHome } from './home/LoggedOutHome';
@@ -22,7 +22,9 @@ export const Content: React.FC = () => {
     <Container maxWidth="lg">
       <Box py={2}>
         <Switch>
-          <Route path="/groups" component={Groups} />
+          <Route path="/groups">
+            <SwitchComponentByAuth isLoggedIn={<Groups />} notLoggedIn={<NotAuthorized />} />
+          </Route>
           <Route path="/gyik" component={Faq} />
           <Route path="/profile/me">
             <SwitchComponentByAuth isLoggedIn={<OwnProfile />} notLoggedIn={<NotAuthorized />} />
diff --git a/client/src/components/admin/GroupAdmin.tsx b/client/src/components/admin/group/GroupAdmin.tsx
similarity index 83%
rename from client/src/components/admin/GroupAdmin.tsx
rename to client/src/components/admin/group/GroupAdmin.tsx
index c215195..c5ee1c2 100644
--- a/client/src/components/admin/GroupAdmin.tsx
+++ b/client/src/components/admin/group/GroupAdmin.tsx
@@ -1,10 +1,29 @@
 import { Card, CardContent, Grid, Typography, useTheme } from '@material-ui/core';
+import { IgetGroupById, getGroupById } from '../../../graphql/queries/group/getGroupById';
 
+import { GroupNotExists } from '../../utils/GroupNotExists';
+import { GroupRole } from '../../../types/graphqlSchema';
+import { Loader } from '../../utils/Loader';
+import { NotAdminOfGroup } from '../../utils/NotAdminOfGroup';
 import React from 'react';
-import { StyledLink } from '../utils/StyledLink';
+import { RouteComponentProps } from 'react-router-dom';
+import { StyledLink } from '../../utils/StyledLink';
+import { useQuery } from '@apollo/client';
 
-export const GroupAdmin: React.FC = () => {
+type TParams = { id: string };
+
+export const GroupAdmin: React.FC<RouteComponentProps<TParams>> = ({ match }) => {
   const theme = useTheme();
+  const { loading: groupDataIsLoading, data: groupData, error } = useQuery<IgetGroupById>(getGroupById(''), {
+    variables: { groupId: Number(match.params.id) },
+  });
+
+  if (groupDataIsLoading) return <Loader />;
+  if (!!error) console.log(error);
+  if (!groupData) return <GroupNotExists />;
+  if (!groupData?.group.ownMemberShip || groupData?.group.ownMemberShip.groupRole !== GroupRole.Admin)
+    return <NotAdminOfGroup />;
+
   return (
     <Grid container spacing={1} justify="center">
       <Grid item xs={12} md={4}>
diff --git a/client/src/components/admin/GroupDocuments.tsx b/client/src/components/admin/group/GroupDocuments.tsx
similarity index 100%
rename from client/src/components/admin/GroupDocuments.tsx
rename to client/src/components/admin/group/GroupDocuments.tsx
diff --git a/client/src/components/admin/GroupItems.tsx b/client/src/components/admin/group/GroupItems.tsx
similarity index 100%
rename from client/src/components/admin/GroupItems.tsx
rename to client/src/components/admin/group/GroupItems.tsx
diff --git a/client/src/components/admin/GroupMembers.tsx b/client/src/components/admin/group/GroupMembers.tsx
similarity index 100%
rename from client/src/components/admin/GroupMembers.tsx
rename to client/src/components/admin/group/GroupMembers.tsx
diff --git a/client/src/components/admin/GroupRentals.tsx b/client/src/components/admin/group/GroupRentals.tsx
similarity index 100%
rename from client/src/components/admin/GroupRentals.tsx
rename to client/src/components/admin/group/GroupRentals.tsx
diff --git a/client/src/components/admin/GroupStorages.tsx b/client/src/components/admin/group/GroupStorages.tsx
similarity index 100%
rename from client/src/components/admin/GroupStorages.tsx
rename to client/src/components/admin/group/GroupStorages.tsx
diff --git a/client/src/components/group/GroupInfo.tsx b/client/src/components/group/GroupInfo.tsx
index 3f9c380..d008a04 100644
--- a/client/src/components/group/GroupInfo.tsx
+++ b/client/src/components/group/GroupInfo.tsx
@@ -14,6 +14,7 @@ import {
 import { IgetGroupById, getGroupById } from '../../graphql/queries/group/getGroupById';
 
 import { CardTable } from '../utils/CardTable';
+import { GroupNotExists } from '../utils/GroupNotExists';
 import { Loading } from '../utils/Loading';
 import React from 'react';
 import { RouteComponentProps } from 'react-router-dom';
@@ -47,18 +48,8 @@ export const GroupInfo: React.FC<RouteComponentProps<TParams>> = ({ match }) =>
     { variables: { groupId: Number(match.params.id) } },
   );
 
-  console.log(error);
-
-  if (!groupDataIsLoading && !groupData)
-    return (
-      <>
-        <Box my={2} mx={1}>
-          <Typography align="center" variant="h5">
-            A megadott csoport nem létezik!
-          </Typography>
-        </Box>
-      </>
-    );
+  if (!!error) console.log(error);
+  if (!groupDataIsLoading && !groupData) return <GroupNotExists />;
 
   return (
     <>
diff --git a/client/src/components/utils/GroupNotExists.tsx b/client/src/components/utils/GroupNotExists.tsx
new file mode 100644
index 0000000..c1c2230
--- /dev/null
+++ b/client/src/components/utils/GroupNotExists.tsx
@@ -0,0 +1,13 @@
+import { Box, Typography } from '@material-ui/core';
+
+import React from 'react';
+
+export const GroupNotExists: React.FC = () => (
+  <>
+    <Box my={2} mx={1}>
+      <Typography align="center" variant="h5">
+        A megadott csoport nem létezik!
+      </Typography>
+    </Box>
+  </>
+);
diff --git a/client/src/components/utils/Loader.tsx b/client/src/components/utils/Loader.tsx
new file mode 100644
index 0000000..7cea4ce
--- /dev/null
+++ b/client/src/components/utils/Loader.tsx
@@ -0,0 +1,13 @@
+import { Box, Typography } from '@material-ui/core';
+
+import React from 'react';
+
+export const Loader: React.FC = () => (
+  <>
+    <Box my={2} mx={1}>
+      <Typography align="center" variant="h5">
+        Loading
+      </Typography>
+    </Box>
+  </>
+);
diff --git a/client/src/components/utils/NotAdminOfGroup.tsx b/client/src/components/utils/NotAdminOfGroup.tsx
new file mode 100644
index 0000000..a1d0701
--- /dev/null
+++ b/client/src/components/utils/NotAdminOfGroup.tsx
@@ -0,0 +1,13 @@
+import { Box, Typography } from '@material-ui/core';
+
+import React from 'react';
+
+export const NotAdminOfGroup: React.FC = () => (
+  <>
+    <Box my={2} mx={1}>
+      <Typography align="center" variant="h5">
+        Nem vagy adminja ennek a csoportnak!
+      </Typography>
+    </Box>
+  </>
+);
-- 
GitLab