Skip to content

Commit c6ebadb

Browse files
authored
Merge pull request #1242 from topcoder-platform/feat/v6
Feat/v6
2 parents aab03b5 + e97c0db commit c6ebadb

File tree

25 files changed

+20045
-27602
lines changed

25 files changed

+20045
-27602
lines changed

src/apps/admin/src/challenge-management/ChallengeManagementPage/ChallengeManagementPage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ const defaultFilter: ChallengeFilterCriteria = {
5252
* Challenge Management page.
5353
*/
5454
export const ChallengeManagementPage: FC = () => {
55-
const pageTitle = 'v5 Challenge Management'
55+
const pageTitle = 'Challenge Management'
5656
const [filterCriteria, setFilterCriteria]: [
5757
ChallengeFilterCriteria,
5858
Dispatch<SetStateAction<ChallengeFilterCriteria>>,

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

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,15 @@ const Actions: FC<{
218218
classNames={{ menu: 'challenge-list-actions-dropdown-menu' }}
219219
>
220220
<ul>
221+
<li>
222+
<a
223+
href={`${EnvironmentConfig.ADMIN.CHALLENGE_URL}/${props.challenge.id}`}
224+
target='_blank'
225+
rel='noreferrer'
226+
>
227+
Challenge Details
228+
</a>
229+
</li>
221230
<li className={cn({ disabled: !hasProjectId })}>
222231
{hasProjectId && (
223232
<a
@@ -268,11 +277,10 @@ const ChallengeList: FC<ChallengeListProps> = props => {
268277
renderer: (challenge: Challenge) => (
269278
// eslint-disable-next-line jsx-a11y/anchor-is-valid
270279
<a
271-
href={`${EnvironmentConfig.ADMIN.CHALLENGE_URL}/${challenge.id}`}
280+
href={`${EnvironmentConfig.API.V5}/challenges/${challenge.id}`}
272281
className={styles.challengeTitle}
273-
onClick={function onClick() {
274-
window.location.href = `${EnvironmentConfig.ADMIN.CHALLENGE_URL}/${challenge.id}`
275-
}}
282+
target='_blank'
283+
rel='noreferrer'
276284
>
277285
{challenge.name}
278286
</a>
@@ -334,6 +342,7 @@ const ChallengeList: FC<ChallengeListProps> = props => {
334342
disableSorting
335343
onToggleSort={_.noop}
336344
className={styles.desktopTable}
345+
preventDefault
337346
/>
338347
)}
339348
{screenWidth <= 1279 && (

src/apps/admin/src/lib/components/ReviewSummaryList/MobileListView/MobileListView.module.scss

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,12 @@
4242

4343
.row2,
4444
.row3,
45-
.row4 {
45+
.row4,
46+
.row5 {
4647
grid-template-columns: 1fr auto;
4748
}
4849

49-
.row5 {
50+
.row6 {
5051
justify-content: flex-end;
5152
}
5253
}

src/apps/admin/src/lib/components/ReviewSummaryList/MobileListView/MobileListView.tsx

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,10 @@ const MobileListView: FC<MobileListViewProps<ReviewSummary>> = props => {
6464
))
6565

6666
return (
67-
<div className={styles.mobileListViewItemContainer} key={d.legacyChallengeId}>
67+
<div
68+
className={styles.mobileListViewItemContainer}
69+
key={d.legacyChallengeId || d.challengeId}
70+
>
6871
<div className={styles.rows}>
6972
<div className={styles.row1}>
7073
{/* Title */ propertyElements[0]}
@@ -74,15 +77,18 @@ const MobileListView: FC<MobileListViewProps<ReviewSummary>> = props => {
7477
{/* Legacy ID */ propertyElements[1]}
7578
</div>
7679
<div className={styles.row3}>
77-
{/* propertyElementLabels[5] */}
78-
{/* Open Review Opp' */ propertyElements[3]}
80+
{/* Submission End Date */ propertyElements[3]}
7981
</div>
8082
<div className={styles.row4}>
8183
{propertyElementLabels[4]}
82-
{/* Review Applications */ propertyElements[4]}
84+
{/* Open Review Opp' */ propertyElements[4]}
8385
</div>
8486
<div className={styles.row5}>
85-
{/* Action */ propertyElements[5]}
87+
{propertyElementLabels[5]}
88+
{/* Review Applications */ propertyElements[5]}
89+
</div>
90+
<div className={styles.row6}>
91+
{/* Action */ propertyElements[6]}
8692
</div>
8793
</div>
8894
</div>

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

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
import { FC, useMemo, useState } from 'react'
22
import { useNavigate } from 'react-router-dom'
3+
import { format } from 'date-fns'
34

5+
import { Sort } from '~/apps/admin/src/platform/gamification-admin/src/game-lib'
46
import { EnvironmentConfig } from '~/config'
57
import { useWindowSize, WindowSize } from '~/libs/shared'
68
import { Button, colWidthType, LinkButton, Table, type TableColumn } from '~/libs/ui'
7-
import { Sort } from '~/apps/admin/src/platform/gamification-admin/src/game-lib'
89

9-
import { Pagination } from '../common/Pagination'
1010
import { useEventCallback } from '../../hooks'
1111
import { ReviewFilterCriteria, ReviewSummary } from '../../models'
1212
import { Paging } from '../../models/challenge-management/Pagination'
13+
import { Pagination } from '../common/Pagination'
1314

1415
import { MobileListView } from './MobileListView'
1516
import styles from './ReviewSummaryList.module.scss'
@@ -98,21 +99,21 @@ const ReviewSummaryList: FC<ReviewListProps> = props => {
9899
},
99100
// I think this column is important, and it exits in `admin-app`
100101
// but resp does not have it, so I just comment it here
101-
// {
102-
// label: 'Submission End Date',
103-
// propertyName: 'submissionEndDate',
104-
// renderer: (review: ReviewSummary) => (
105-
// // eslint-disable-next-line jsx-a11y/anchor-is-valid
106-
// <div className={styles.submissionDate}>
107-
// {review.submissionEndDate}
108-
// {/* {format(
109-
// new Date(review.submissionEndDate),
110-
// 'MMM dd, yyyy HH:mm'
111-
// )} */}
112-
// </div>
113-
// ),
114-
// type: 'element',
115-
// },
102+
{
103+
label: 'Submission End Date',
104+
propertyName: 'submissionEndDate',
105+
renderer: (review: ReviewSummary) => (
106+
// eslint-disable-next-line jsx-a11y/anchor-is-valid
107+
<div className={styles.submissionDate}>
108+
{review.submissionEndDate
109+
? format(
110+
new Date(review.submissionEndDate),
111+
'MMM dd, yyyy HH:mm',
112+
) : 'N/A'}
113+
</div>
114+
),
115+
type: 'element',
116+
},
116117
{
117118
columnId: 'OpenReviewOpp',
118119
label: 'Open Review Opp',

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ export const UsersFilters: FC<Props> = props => {
147147
Tips:
148148
<br />
149149
- Wildcard(*) is available for partial matching. (e.g.
150-
ChrisB*, chris*@appirio.com)
150+
ChrisB*, chris*@wipro.com)
151151
<br />
152152
- Maximum number of searched results is 500.
153153
</p>

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/models/MemberInfo.model.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,8 @@
44
export interface MemberInfo {
55
handle: string
66
userId: number
7+
firstName?: string | null
8+
lastName?: string | null
9+
photoURL?: string | null
10+
maxRating?: unknown
711
}

src/apps/admin/src/lib/models/review-management/ReviewSummary.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
export interface ReviewSummary {
2+
/** Challenge uuid */
3+
challengeId: string
24
/** Challenge Name */
35
challengeName: string
46
/** Challenge Status */

0 commit comments

Comments
 (0)