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,11 @@ 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 AdminToolTable from './AdminToolTable' ;
21+ import EditTeamSlackIdFormModal from './TeamConfig/EditTeamSlackIdFormModal' ;
1922
2023interface AdminToolsWorkspaceIdViewProps {
2124 organization : Organization ;
@@ -37,9 +40,29 @@ const AdminToolsSlackIdsView: React.FC<AdminToolsWorkspaceIdViewProps> = ({ orga
3740 const [ sponsorshipChannelId , setSponsorshipChannelId ] = useState (
3841 organization . sponsorshipNotificationsSlackChannelId ?? ''
3942 ) ;
43+ const { data : allTeams , isLoading : allTeamsIsLoading , isError : allTeamsIsError , error : allTeamsError } = useAllTeams ( ) ;
44+ const [ clickedTeam , setClickedTeam ] = useState < TeamPreview > ( ) ;
45+
46+ if ( ! allTeams || allTeamsIsLoading ) return < LoadingIndicator /> ;
47+
48+ if ( allTeamsIsError ) {
49+ return < ErrorPage message = { allTeamsError . message } /> ;
50+ }
4051
4152 if ( isLoading ) return < LoadingIndicator /> ;
4253
54+ const teamTableRows = allTeams . map ( ( team , index ) => (
55+ < TableRow
56+ onClick = { ( ) => {
57+ setClickedTeam ( team ) ;
58+ } }
59+ sx = { { cursor : 'pointer' , color : 'inherit' , textDecoration : 'none' } }
60+ >
61+ < TableCell sx = { { borderBottom : index === allTeams . length - 1 ? 'none' : 'default' } } > { team . teamName } </ TableCell >
62+ < TableCell sx = { { borderBottom : index === allTeams . length - 1 ? 'none' : 'default' } } > { team . slackId } </ TableCell >
63+ </ TableRow >
64+ ) ) ;
65+
4366 const handleSubmitWorkspaceId = async ( ) => {
4467 try {
4568 await setWorkspaceIdMutateAsync ( workspaceId ) ;
@@ -63,7 +86,7 @@ const AdminToolsSlackIdsView: React.FC<AdminToolsWorkspaceIdViewProps> = ({ orga
6386 } ;
6487
6588 return (
66- < Box >
89+ < Box sx = { { display : 'flex' , flexDirection : 'column' } } >
6790 < Typography variant = "h5" gutterBottom color = { '#ef4345' } borderBottom = { 1 } borderColor = { 'white' } >
6891 { organization . name } Slack Workspace & Channel Ids
6992 </ Typography >
@@ -113,6 +136,25 @@ const AdminToolsSlackIdsView: React.FC<AdminToolsWorkspaceIdViewProps> = ({ orga
113136 </ NERButton >
114137 </ Box >
115138 </ Box >
139+ < Box >
140+ < Typography variant = "h5" gutterBottom borderBottom = { 1 } color = "#ef4345" borderColor = { 'white' } >
141+ Team Slack IDs
142+ </ Typography >
143+ < Grid container columnSpacing = { 2 } >
144+ < Grid item xs = { 12 } md = { 6 } sx = { { marginTop : '24px' } } >
145+ < AdminToolTable columns = { [ { name : 'Team Name' } , { name : 'Slack Channel ID' } ] } rows = { teamTableRows } />
146+ </ Grid >
147+ </ Grid >
148+ { clickedTeam && (
149+ < EditTeamSlackIdFormModal
150+ open = { ! ! clickedTeam }
151+ handleClose = { ( ) => {
152+ setClickedTeam ( undefined ) ;
153+ } }
154+ team = { clickedTeam }
155+ />
156+ ) }
157+ </ Box >
116158 </ Box >
117159 ) ;
118160} ;
0 commit comments