44 */
55
66import { NERButton } from '../../components/NERButton' ;
7- import { Box , Link , TextField , Typography } from '@mui/material' ;
7+ import { Box , Grid , Link , TableCell , TableRow , TextField , Typography } from '@mui/material' ;
88import { useState } from 'react' ;
99import { useToast } from '../../hooks/toasts.hooks' ;
1010import {
@@ -14,8 +14,12 @@ import {
1414} from '../../hooks/organizations.hooks' ;
1515import LoadingIndicator from '../../components/LoadingIndicator' ;
1616import ErrorPage from '../ErrorPage' ;
17- import { Organization } from 'shared' ;
17+ import { Organization , TeamPreview } from 'shared' ;
1818import HelpIcon from '@mui/icons-material/Help' ;
19+ import { useAllTeams } from '../../hooks/teams.hooks' ;
20+ import { fullNamePipe } from '../../utils/pipes' ;
21+ import AdminToolTable from './AdminToolTable' ;
22+ import EditTeamSlackIdFormModal from './TeamConfig/EditTeamSlackIdFormModal' ;
1923
2024interface AdminToolsWorkspaceIdViewProps {
2125 organization : Organization ;
@@ -37,9 +41,31 @@ const AdminToolsSlackIdsView: React.FC<AdminToolsWorkspaceIdViewProps> = ({ orga
3741 const [ sponsorshipChannelId , setSponsorshipChannelId ] = useState (
3842 organization . sponsorshipNotificationsSlackChannelId ?? ''
3943 ) ;
44+ const { data : allTeams , isLoading : allTeamsIsLoading , isError : allTeamsIsError , error : allTeamsError } = useAllTeams ( ) ;
45+ const [ clickedTeam , setClickedTeam ] = useState < TeamPreview > ( ) ;
46+ const [ showEditModal , setShowEditModal ] = useState < boolean > ( false ) ;
47+
48+ if ( ! allTeams || allTeamsIsLoading ) return < LoadingIndicator /> ;
49+
50+ if ( allTeamsIsError ) {
51+ return < ErrorPage message = { allTeamsError . message } /> ;
52+ }
4053
4154 if ( isLoading ) return < LoadingIndicator /> ;
4255
56+ const teamTableRows = allTeams . map ( ( team , index ) => (
57+ < TableRow
58+ onClick = { ( ) => {
59+ setClickedTeam ( team ) ;
60+ setShowEditModal ( true ) ;
61+ } }
62+ sx = { { color : 'inherit' , textDecoration : 'none' } }
63+ >
64+ < TableCell sx = { { borderBottom : index === allTeams . length - 1 ? 'none' : 'default' } } > { team . teamName } </ TableCell >
65+ < TableCell sx = { { borderBottom : index === allTeams . length - 1 ? 'none' : 'default' } } > { team . slackId } </ TableCell >
66+ </ TableRow >
67+ ) ) ;
68+
4369 const handleSubmitWorkspaceId = async ( ) => {
4470 try {
4571 await setWorkspaceIdMutateAsync ( workspaceId ) ;
@@ -63,7 +89,7 @@ const AdminToolsSlackIdsView: React.FC<AdminToolsWorkspaceIdViewProps> = ({ orga
6389 } ;
6490
6591 return (
66- < Box >
92+ < Box sx = { { display : 'flex' , flexDirection : 'column' } } >
6793 < Typography variant = "h5" gutterBottom color = { '#ef4345' } borderBottom = { 1 } borderColor = { 'white' } >
6894 { organization . name } Slack Workspace & Channel Ids
6995 </ Typography >
@@ -113,6 +139,25 @@ const AdminToolsSlackIdsView: React.FC<AdminToolsWorkspaceIdViewProps> = ({ orga
113139 </ NERButton >
114140 </ Box >
115141 </ Box >
142+ < Box >
143+ < Typography variant = "h5" gutterBottom borderBottom = { 1 } color = "#ef4345" borderColor = { 'white' } >
144+ Team Slack IDs
145+ </ Typography >
146+ < Grid container columnSpacing = { 2 } >
147+ < Grid item xs = { 12 } md = { 6 } sx = { { marginTop : '24px' } } >
148+ < AdminToolTable columns = { [ { name : 'Team Name' } , { name : 'Slack Channel ID' } ] } rows = { teamTableRows } />
149+ </ Grid >
150+ </ Grid >
151+ { clickedTeam && (
152+ < EditTeamSlackIdFormModal
153+ open = { ! ! clickedTeam }
154+ handleClose = { ( ) => {
155+ setClickedTeam ( undefined ) ;
156+ } }
157+ team = { clickedTeam }
158+ />
159+ ) }
160+ </ Box >
116161 </ Box >
117162 ) ;
118163} ;
0 commit comments