Skip to content

Commit fddba32

Browse files
committed
Cleanup for how we define SSO providers
1 parent bc1e341 commit fddba32

File tree

5 files changed

+43
-41
lines changed

5 files changed

+43
-41
lines changed

src/apps/admin/src/lib/components/UsersTable/UsersTable.tsx

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import _ from 'lodash'
66
import classNames from 'classnames'
77
import moment from 'moment'
88

9+
import { EnvironmentConfig } from '~/config'
910
import { useWindowSize, WindowSize } from '~/libs/shared'
1011
import {
1112
Button,
@@ -26,13 +27,11 @@ import { DialogEditUserTerms } from '../DialogEditUserTerms'
2627
import { DialogEditUserStatus } from '../DialogEditUserStatus'
2728
import { DialogUserStatusHistory } from '../DialogUserStatusHistory'
2829
import { DropdownMenuButton } from '../common/DropdownMenuButton'
29-
import { useOnComponentDidMount, useTableFilterLocal, useTableFilterLocalProps } from '../../hooks'
30+
import { useTableFilterLocal, useTableFilterLocalProps } from '../../hooks'
3031
import { TABLE_DATE_FORMAT } from '../../../config/index.config'
3132
import { SSOLoginProvider, UserInfo } from '../../models'
3233
import { Pagination } from '../common/Pagination'
3334
import { ReactComponent as RectangleListRegularIcon } from '../../assets/i/rectangle-list-regular-icon.svg'
34-
import { fetchSSOLoginProviders } from '../../services'
35-
import { handleError } from '../../utils'
3635

3736
import styles from './UsersTable.module.scss'
3837

@@ -50,7 +49,10 @@ interface Props {
5049

5150
export const UsersTable: FC<Props> = props => {
5251
const [colWidth, setColWidth] = useState<colWidthType>({})
53-
const [ssoLoginProviders, setSsoLoginProviders] = useState<SSOLoginProvider[]>([])
52+
const ssoLoginProviders = useMemo<SSOLoginProvider[]>(
53+
() => EnvironmentConfig.ADMIN_SSO_LOGIN_PROVIDERS.map(provider => ({ ...provider })),
54+
[],
55+
)
5456
const [showDialogEditUserEmail, setShowDialogEditUserEmail] = useState<
5557
UserInfo | undefined
5658
>()
@@ -370,16 +372,6 @@ export const UsersTable: FC<Props> = props => {
370372
[isTablet, isMobile],
371373
)
372374

373-
useOnComponentDidMount(() => {
374-
fetchSSOLoginProviders()
375-
.then(result => {
376-
setSsoLoginProviders(result)
377-
})
378-
.catch(e => {
379-
handleError(e)
380-
})
381-
})
382-
383375
return (
384376
<div className={classNames(styles.container, props.className)}>
385377
<Table

src/apps/admin/src/lib/hooks/useManageUserSSOLogin.ts

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,8 @@ import { toast } from 'react-toastify'
66
import _ from 'lodash'
77

88
import { FormAddSSOLoginData } from '../models/FormAddSSOLoginData.model'
9-
import { SSOLoginProvider, SSOUserLogin, UserInfo } from '../models'
10-
import {
11-
createSSOUserLogin,
12-
deleteSSOUserLogin,
13-
fetchSSOLoginProviders,
14-
fetchSSOUserLogins,
15-
updateSSOUserLogin,
16-
} from '../services'
9+
import { SSOUserLogin, UserInfo } from '../models'
10+
import { createSSOUserLogin, deleteSSOUserLogin, fetchSSOUserLogins, updateSSOUserLogin } from '../services'
1711
import { handleError } from '../utils'
1812

1913
import { useOnComponentDidMount } from './useOnComponentDidMount'
@@ -25,7 +19,6 @@ import { useOnComponentDidMount } from './useOnComponentDidMount'
2519
type SSOUserLoginsState = {
2620
isLoading: boolean
2721
isAdding: boolean
28-
providers: SSOLoginProvider[]
2922
ssoUserLogins: SSOUserLogin[]
3023
isRemoving: { [key: string]: boolean }
3124
}
@@ -59,7 +52,6 @@ type SSOUserLoginsReducerAction =
5952
type: typeof SSOUserLoginsActionType.FETCH_SSO_USER_LOGINS_DONE
6053
payload: {
6154
ssoUserLogins: SSOUserLogin[]
62-
providers: SSOLoginProvider[]
6355
}
6456
}
6557
| {
@@ -93,7 +85,6 @@ const reducer = (
9385
return {
9486
...previousState,
9587
isLoading: false,
96-
providers: action.payload.providers,
9788
ssoUserLogins: action.payload.ssoUserLogins,
9889
}
9990
}
@@ -222,20 +213,18 @@ export function useManageUserSSOLogin(
222213
isAdding: false,
223214
isLoading: false,
224215
isRemoving: {},
225-
providers: [],
226216
ssoUserLogins: [],
227217
})
228218

229219
const doFetchSSOUserLogins = useCallback(() => {
230220
dispatch({
231221
type: SSOUserLoginsActionType.FETCH_SSO_USER_LOGINS_INIT,
232222
})
233-
Promise.all([fetchSSOUserLogins(userInfo.id), fetchSSOLoginProviders()])
223+
fetchSSOUserLogins(userInfo.id)
234224
.then(result => {
235225
dispatch({
236226
payload: {
237-
providers: result[1],
238-
ssoUserLogins: result[0],
227+
ssoUserLogins: result,
239228
},
240229
type: SSOUserLoginsActionType.FETCH_SSO_USER_LOGINS_DONE,
241230
})

src/apps/admin/src/lib/services/user.service.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import {
1414
adjustUserStatusHistoryResponse,
1515
ApiV3Response,
1616
MemberInfo,
17-
SSOLoginProvider,
1817
SSOUserLogin,
1918
UserInfo,
2019
UserStatusHistory,
@@ -193,17 +192,6 @@ export const fetchSSOUserLogins = async (
193192
`${EnvironmentConfig.API.V6}/users/${userId}/SSOUserLogins`,
194193
)
195194

196-
/**
197-
* Fetch list of sso login provider.
198-
* @returns resolves to sso user logins
199-
*/
200-
export const fetchSSOLoginProviders = async (): Promise<SSOLoginProvider[]> => {
201-
const result = await xhrGetAsync<ApiV3Response<SSOLoginProvider[]>>(
202-
`${EnvironmentConfig.API.V3}/ssoLoginProviders`,
203-
)
204-
return result.result.content
205-
}
206-
207195
/**
208196
* Create sso user login.
209197
* @param userId user id.

src/config/environments/default.env.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,23 @@
22
import { get } from 'lodash'
33

44
import { getReactEnv } from './react-env'
5+
import type { SSOLoginProviderConfig } from './global-config.model'
6+
7+
function parseSSOLoginProviders(
8+
raw: string | undefined,
9+
): SSOLoginProviderConfig[] {
10+
if (!raw) {
11+
return []
12+
}
13+
14+
try {
15+
const parsed = JSON.parse(raw) as SSOLoginProviderConfig[]
16+
return Array.isArray(parsed) ? parsed : []
17+
} catch (error) {
18+
console.error('Failed to parse ADMIN_SSO_LOGIN_PROVIDERS:', error)
19+
return []
20+
}
21+
}
522

623
export const ENV = getReactEnv<'prod' | 'dev' | 'qa'>('HOST_ENV', 'dev')
724

@@ -44,6 +61,15 @@ export const VANILLA_FORUM = {
4461
V2_URL: 'https://vanilla.topcoder-dev.com/api/v2',
4562
}
4663

64+
const ADMIN_SSO_LOGIN_PROVIDERS_ENV = getReactEnv<string | undefined>(
65+
'ADMIN_SSO_LOGIN_PROVIDERS',
66+
undefined,
67+
)
68+
69+
export const ADMIN_SSO_LOGIN_PROVIDERS: SSOLoginProviderConfig[] = parseSSOLoginProviders(
70+
ADMIN_SSO_LOGIN_PROVIDERS_ENV,
71+
)
72+
4773
export const STRIPE = {
4874
API_KEY: getReactEnv<string>('STRIPE_API_KEY', ''),
4975
API_VERSION: getReactEnv<string | undefined>('STRIPE_API_VERSION', undefined),

src/config/environments/global-config.model.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
export interface SSOLoginProviderConfig {
2+
ssoLoginProviderId: number
3+
name: string
4+
type: string
5+
}
6+
17
export interface GlobalConfig {
28
TC_DOMAIN: string
39
TOPCODER_URL: string
@@ -65,4 +71,5 @@ export interface GlobalConfig {
6571
CHALLENGE_PAGE_URL: string
6672
PROFILE_PAGE_URL: string
6773
},
74+
ADMIN_SSO_LOGIN_PROVIDERS: SSOLoginProviderConfig[]
6875
}

0 commit comments

Comments
 (0)