From 36348aa5749e699b4153bef94a55bcd3ab67288a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20L=C3=A1szl=C3=B3?= <rlacko99@gmail.com> Date: Sun, 13 Dec 2020 20:20:52 +0100 Subject: [PATCH] initial member edit dialog --- .../components/admin/GroupAdminContent.tsx | 2 + .../components/admin/group/GroupMembers.tsx | 153 +++++++++++------- server/src/entity/User.ts | 1 - 3 files changed, 100 insertions(+), 56 deletions(-) diff --git a/client/src/components/admin/GroupAdminContent.tsx b/client/src/components/admin/GroupAdminContent.tsx index 5afbc64..adf84d7 100644 --- a/client/src/components/admin/GroupAdminContent.tsx +++ b/client/src/components/admin/GroupAdminContent.tsx @@ -53,6 +53,8 @@ export const GroupAdminContent: React.FC<RouteComponentProps<TParams>> = ({ matc if (groupDataIsLoading) return <Loader />; + if (!groupData) return <>There was an error</>; + return ( <Switch> <Route path={`${match.url}/members`}> diff --git a/client/src/components/admin/group/GroupMembers.tsx b/client/src/components/admin/group/GroupMembers.tsx index 4aa5408..3df9053 100644 --- a/client/src/components/admin/group/GroupMembers.tsx +++ b/client/src/components/admin/group/GroupMembers.tsx @@ -1,4 +1,14 @@ -import { Box, IconButton, Tooltip, Typography } from '@material-ui/core'; +import { + Box, + Button, + Dialog, + DialogActions, + DialogContent, + DialogTitle, + IconButton, + Tooltip, + Typography, +} from '@material-ui/core'; import { Group, Member } from '../../../types/graphqlSchema'; import { IListGroupMembers, listGroupMembers } from '../../../graphql/queries/group/listGroupMembers'; @@ -12,13 +22,16 @@ import { useQuery } from '@apollo/client'; interface IGroupMembersTable extends Partial<Member> { name: string; membership: string; + userId: number; } const convertResponseToTable = (rows: Partial<Member>[] | undefined): Partial<IGroupMembersTable>[] => { if (!rows) return []; return rows.map((o) => ({ + ...o, name: `${o.user?.familyName} ${o.user?.givenName}`, membership: getMemberStateString({ memberState: o.memberState, groupRole: o.groupRole }), + userId: Number(o.user?.id), })); }; @@ -28,71 +41,101 @@ interface TParams { } export const GroupMembers: React.FC<TParams> = ({ group, filterBy }) => { - console.log(filterBy); + const [openDialog, setopenDialog] = React.useState(false); + const [editedUser, setEditedUser] = React.useState<Partial<Member>>(); const { loading: membersIsLoading, data: members } = useQuery<IListGroupMembers>( - listGroupMembers(`user { familyName, givenName }, memberState, groupRole`), + listGroupMembers(`user { familyName, givenName, id }, memberState, groupRole`), { variables: { groupId: Number(group?.id) }, }, ); + const handleDialogOpen = (member: Partial<Member>) => { + console.log(member); + setEditedUser(member); + setopenDialog(true); + }; + + const handleDialogClose = () => { + setopenDialog(false); + }; + return ( - <CardTable<Partial<IGroupMembersTable>> - columns={[ - { - title: 'Név', - field: 'name', - }, - { - title: 'Tagság', - field: 'membership', - align: 'right', - customSort: (rowData1, rowData2) => { - if (!rowData1.membership || !rowData2.membership) { + <div> + <CardTable<Partial<IGroupMembersTable>> + columns={[ + { + title: 'Név', + field: 'name', + }, + { + title: 'Tagság', + field: 'membership', + align: 'right', + customSort: (rowData1, rowData2) => { + if (!rowData1.membership || !rowData2.membership) { + return 0; + } + const str1 = rowData1.membership; + const str2 = rowData2.membership; + if (str1 < str2) return -1; + if (str1 > str2) return 1; return 0; - } - const str1 = rowData1.membership; - const str2 = rowData2.membership; - if (str1 < str2) return -1; - if (str1 > str2) return 1; - return 0; + }, }, - }, - { - align: 'left', - render: function renderEditIcon(rowData) { - return ( - <Tooltip title="Szerkesztés" aria-label="group-administration"> - <IconButton - onClick={() => alert('Not implemented ' + rowData.name)} - color="secondary" - style={{ padding: '8px' }} - > - <CreateIcon /> - </IconButton> - </Tooltip> - ); + { + align: 'left', + render: function renderEditIcon(rowData) { + return ( + <Tooltip title="Szerkesztés" aria-label="group-administration"> + <IconButton onClick={() => handleDialogOpen(rowData)} color="secondary" style={{ padding: '8px' }}> + <CreateIcon /> + </IconButton> + </Tooltip> + ); + }, + width: '8px', }, - width: '8px', - }, - ]} - data={convertResponseToTable(members?.group.members)} - isLoading={membersIsLoading} - title={ - <Box display="flex" alignItems="center"> - <PeopleIcon /> - <Typography variant="h5" style={{ marginLeft: '0.8rem' }}> - Tagok + ]} + data={convertResponseToTable(members?.group.members)} + isLoading={membersIsLoading} + title={ + <Box display="flex" alignItems="center"> + <PeopleIcon /> + <Typography variant="h5" style={{ marginLeft: '0.8rem' }}> + Tagok + </Typography> + </Box> + } + options={{ + search: true, + rowStyle: { fontFamily: 'Roboto' }, + emptyRowsWhenPaging: false, + searchText: filterBy || '', + }} + /> + <Dialog + open={openDialog} + onClose={handleDialogClose} + aria-labelledby="edit-user" + aria-describedby="modal-to-edit-user" + > + <DialogTitle id="edit-user-dialog-title">Felhasználó szerkesztése</DialogTitle> + <DialogContent> + <Typography> + Neve: {editedUser?.user?.familyName} {editedUser?.user?.givenName} </Typography> - </Box> - } - options={{ - search: true, - rowStyle: { fontFamily: 'Roboto' }, - emptyRowsWhenPaging: false, - searchText: filterBy || '', - }} - /> + </DialogContent> + <DialogActions> + <Button onClick={handleDialogClose} color="primary"> + Mentés + </Button> + <Button onClick={handleDialogClose} color="primary"> + Mégse + </Button> + </DialogActions> + </Dialog> + </div> ); }; diff --git a/server/src/entity/User.ts b/server/src/entity/User.ts index 6b5fc41..330c8d0 100644 --- a/server/src/entity/User.ts +++ b/server/src/entity/User.ts @@ -24,7 +24,6 @@ import { MemberState } from "./MemberState"; @Entity({ name: "users" }) export class User extends BaseEntity { @Authorized() - @UseMiddleware(isOwnUserField) @Field((returns) => ID) @PrimaryGeneratedColumn() id!: number; -- GitLab