Skip to content

Commit a82243b

Browse files
authored
Merge pull request #1093 from topcoder-platform/diazz-admin-f2f-30376988
Topcoder Admin App - Misc Update 0601
2 parents b261088 + 9204d86 commit a82243b

File tree

8 files changed

+82
-51
lines changed

8 files changed

+82
-51
lines changed

src/apps/admin/src/billing-account/BillingAccountNewPage/BillingAccountNewPage.tsx

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import { useManageAddBillingAccount, useManageAddBillingAccountProps } from '../
3030
import { BILLING_ACCOUNT_STATUS_EDIT_OPTIONS } from '../../config/index.config'
3131
import { PageContent, PageHeader } from '../../lib'
3232
import { FormEditBillingAccount, SelectOption } from '../../lib/models'
33-
import { formEditBillingAccountSchema } from '../../lib/utils'
33+
import { formAddBillingAccountSchema, formEditBillingAccountSchema } from '../../lib/utils'
3434

3535
import styles from './BillingAccountNewPage.module.scss'
3636

@@ -46,6 +46,7 @@ export const BillingAccountNewPage: FC<Props> = (props: Props) => {
4646
const { accountId = '' }: { accountId?: string } = useParams<{
4747
accountId: string
4848
}>()
49+
const isEdit = useMemo(() => !!accountId, [accountId])
4950
const {
5051
isLoading,
5152
isAdding,
@@ -55,8 +56,8 @@ export const BillingAccountNewPage: FC<Props> = (props: Props) => {
5556
billingAccount,
5657
}: useManageAddBillingAccountProps = useManageAddBillingAccount(accountId)
5758
const pageTitle = useMemo(
58-
() => (accountId ? 'Edit Billing Account' : 'New Billing Account'),
59-
[accountId],
59+
() => (isEdit ? 'Edit Billing Account' : 'New Billing Account'),
60+
[isEdit],
6061
)
6162
const {
6263
register,
@@ -81,7 +82,9 @@ export const BillingAccountNewPage: FC<Props> = (props: Props) => {
8182
subscriptionNumber: '' as any,
8283
},
8384
mode: 'all',
84-
resolver: yupResolver(formEditBillingAccountSchema),
85+
resolver: yupResolver(
86+
isEdit ? formEditBillingAccountSchema : formAddBillingAccountSchema,
87+
),
8588
})
8689

8790
const endDate = watch('endDate')
@@ -354,7 +357,9 @@ export const BillingAccountNewPage: FC<Props> = (props: Props) => {
354357
onChange={_.noop}
355358
classNameWrapper={styles.field}
356359
inputControl={register('paymentTerms')}
357-
disabled={isAdding || isUpdating}
360+
disabled={
361+
isEdit ? true : isAdding || isUpdating
362+
}
358363
error={_.get(errors, 'paymentTerms.message')}
359364
dirty
360365
/>

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

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { FC, useMemo } from 'react'
22
import { format } from 'date-fns'
33

4-
import { CheckIcon, XIcon } from '@heroicons/react/solid'
4+
import { CheckIcon } from '@heroicons/react/solid'
55
import { useWindowSize, WindowSize } from '~/libs/shared'
66
import {
77
Button,
@@ -27,7 +27,6 @@ export interface ReviewerListProps {
2727
approvingReviewerId: number
2828
onPageChange: (page: number) => void
2929
onApproveApplication: (reviewer: Reviewer) => void
30-
onUnapproveApplication: (reviewer: Reviewer) => void
3130
onToggleSort: (sort: Sort) => void
3231
}
3332

@@ -36,22 +35,15 @@ const ApproveButton: FC<{
3635
openReviews: number
3736
approvingReviewerId: number
3837
onApproveApplication: ReviewerListProps['onApproveApplication']
39-
onUnapproveApplication: ReviewerListProps['onUnapproveApplication']
4038
}> = props => {
4139
const handleApprove = useEventCallback((): void => {
4240
props.onApproveApplication(props.reviewer)
4341
})
4442

45-
const handleRemove = useEventCallback((): void => {
46-
props.onUnapproveApplication(props.reviewer)
47-
})
48-
4943
const isApproving = props.approvingReviewerId === props.reviewer.userId
5044
const isOtherApproving = props.approvingReviewerId > 0
5145
const hideApproveButton
5246
= props.openReviews < 1 || props.reviewer.applicationStatus !== 'Pending'
53-
const showRemoveButton
54-
= props.reviewer.applicationStatus === 'Approved'
5547

5648
return (
5749
<>
@@ -61,19 +53,7 @@ const ApproveButton: FC<{
6153
className={styles.approvingLoadingSpinner}
6254
/>
6355
) : (
64-
hideApproveButton ? (
65-
showRemoveButton && (
66-
<Button
67-
primary
68-
variant='danger'
69-
onClick={handleRemove}
70-
>
71-
<XIcon className='icon icon-fill' />
72-
{' '}
73-
Remove Reviewer
74-
</Button>
75-
)
76-
) : (
56+
!hideApproveButton && (
7757
<Button
7858
primary
7959
onClick={handleApprove}
@@ -125,15 +105,13 @@ const Actions: FC<{
125105
openReviews: number
126106
approvingReviewerId: number
127107
onApproveApplication: ReviewerListProps['onApproveApplication']
128-
onUnapproveApplication: ReviewerListProps['onUnapproveApplication']
129108
}> = props => (
130109
<div className={styles.rowActions}>
131110
<ApproveButton
132111
reviewer={props.reviewer}
133112
openReviews={props.openReviews}
134113
approvingReviewerId={props.approvingReviewerId}
135114
onApproveApplication={props.onApproveApplication}
136-
onUnapproveApplication={props.onUnapproveApplication}
137115
/>
138116
</div>
139117
)
@@ -202,7 +180,6 @@ const ReviewerList: FC<ReviewerListProps> = props => {
202180
openReviews={props.openReviews}
203181
approvingReviewerId={props.approvingReviewerId}
204182
onApproveApplication={props.onApproveApplication}
205-
onUnapproveApplication={props.onUnapproveApplication}
206183
/>
207184
),
208185
type: 'action',

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

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,6 @@ export const RolesFilter: FC<Props> = props => {
5656

5757
useEffect(() => {
5858
props.setFilters({
59-
createdAtString: roleName,
60-
createdByHandle: roleName,
61-
id: roleName,
62-
modifiedAtString: roleName,
63-
modifiedByHandle: roleName,
6459
roleName,
6560
})
6661
}, [roleName]) // eslint-disable-line react-hooks/exhaustive-deps

src/apps/admin/src/lib/models/FormEditBillingAccount.model.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export interface FormEditBillingAccount {
1111
poNumber: string
1212
subscriptionNumber?: number
1313
description: string
14-
paymentTerms: number
14+
paymentTerms?: number
1515
salesTax?: number
1616
client: {
1717
id: number

src/apps/admin/src/lib/models/TableRolesFilter.type.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
* Model for table roles filter
33
*/
44
export type TableRolesFilter = {
5-
id: string
5+
id?: string
66
roleName: string
7-
createdAtString: string
8-
modifiedAtString: string
9-
createdByHandle: string
10-
modifiedByHandle: string
7+
createdAtString?: string
8+
modifiedAtString?: string
9+
createdByHandle?: string
10+
modifiedByHandle?: string
1111

1212
}

src/apps/admin/src/lib/utils/validation.ts

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ export function isValidNumber(value: number | undefined): boolean {
134134
/**
135135
* validation schema for form new billing account
136136
*/
137-
export const formEditBillingAccountSchema: Yup.ObjectSchema<FormEditBillingAccount>
137+
export const formAddBillingAccountSchema: Yup.ObjectSchema<FormEditBillingAccount>
138138
= Yup.object({
139139
budgetAmount: Yup.number()
140140
.transform(value => (Number.isNaN(value) ? undefined : value))
@@ -183,6 +183,59 @@ export const formEditBillingAccountSchema: Yup.ObjectSchema<FormEditBillingAccou
183183
.min(1, 'Subscription number must be greater than or equal 1.'),
184184
})
185185

186+
/**
187+
* validation schema for form new billing account
188+
*/
189+
export const formEditBillingAccountSchema: Yup.ObjectSchema<FormEditBillingAccount>
190+
= Yup.object({
191+
budgetAmount: Yup.number()
192+
.transform(value => (Number.isNaN(value) ? undefined : value))
193+
.optional()
194+
.typeError('Invalid number.')
195+
.min(1, 'Budget amount must be greater than or equal 1.'),
196+
client: Yup.object()
197+
.shape({
198+
id: Yup.number()
199+
.typeError('Invalid number.')
200+
.required('Id is required.'),
201+
name: Yup.string()
202+
.required('Name is required.'),
203+
})
204+
.default(undefined)
205+
.required('Client is required.'),
206+
companyId: Yup.number()
207+
.typeError('Invalid number.')
208+
.required('Customer number is required.')
209+
.min(1, 'Customer number must be greater than or equal 1.'),
210+
description: Yup.string()
211+
.trim()
212+
.required('Description is required.'),
213+
endDate: Yup.date()
214+
.required('End date is required.'),
215+
name: Yup.string()
216+
.trim()
217+
.required('Name is required.'),
218+
paymentTerms: Yup.number()
219+
.transform(value => (Number.isNaN(value) ? undefined : value))
220+
.optional()
221+
.typeError('Invalid number.')
222+
.min(1, 'Payment terms must be greater than or equal 1.'),
223+
poNumber: Yup.string()
224+
.trim()
225+
.required('PO Number is required.'),
226+
salesTax: Yup.number()
227+
.required('Sales tax is required.'),
228+
startDate: Yup.date()
229+
.required('Start date is required.'),
230+
status: Yup.string()
231+
.required('Status is required.'),
232+
subscriptionNumber: Yup.number()
233+
.transform(value => (Number.isNaN(value) ? undefined : value))
234+
.optional()
235+
.typeError('Invalid number.')
236+
.min(1, 'Subscription number must be greater than or equal 1.'),
237+
})
238+
186239
/**
187240
* validation schema for form new billing account
188241
*/

src/apps/admin/src/review-management/ManageReviewerPage/ManageReviewerPage.module.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
gap: 30px;
44
margin-left: auto;
55
margin-top: 16px;
6+
flex-wrap: wrap;
67
}
78

89
.loadingSpinnerContainer {

src/apps/admin/src/review-management/ManageReviewerPage/ManageReviewerPage.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
useRef,
88
useState,
99
} from 'react'
10-
import { NavigateFunction, useNavigate, useParams } from 'react-router-dom'
10+
import { useParams } from 'react-router-dom'
1111
import { sortBy } from 'lodash'
1212

1313
import { XIcon } from '@heroicons/react/solid'
@@ -63,7 +63,6 @@ export const ManageReviewerPage: FC = () => {
6363
challengeId: string
6464
}>()
6565
const [challengeUuid, setChallengeUuid] = useState('')
66-
const navigate: NavigateFunction = useNavigate()
6766
const [filterCriteria, setFilterCriteria]: [
6867
ReviewFilterCriteria,
6968
Dispatch<SetStateAction<ReviewFilterCriteria>>
@@ -137,12 +136,6 @@ export const ManageReviewerPage: FC = () => {
137136
})
138137
})
139138

140-
const unapprove = useEventCallback((): void => {
141-
if (challengeUuid) {
142-
navigate(`${rootRoute}/challenge-management/${challengeUuid}/manage-user`)
143-
}
144-
})
145-
146139
// Init
147140
useEffect(() => {
148141
search()
@@ -204,6 +197,14 @@ export const ManageReviewerPage: FC = () => {
204197
<PageHeader>
205198
<h2>{`${pageTitle} ${challengeId}`}</h2>
206199
<div className={styles.headerActions}>
200+
<LinkButton
201+
primary
202+
onClick={handleRejectPendingConfirmDialog}
203+
size='lg'
204+
to={`${rootRoute}/challenge-management/${challengeUuid}/manage-user`}
205+
>
206+
User Management
207+
</LinkButton>
207208
<Button
208209
primary
209210
variant='danger'
@@ -232,7 +233,6 @@ export const ManageReviewerPage: FC = () => {
232233
reviewers={reviewers}
233234
openReviews={openReviews}
234235
onApproveApplication={approve}
235-
onUnapproveApplication={unapprove}
236236
approvingReviewerId={userId}
237237
paging={{
238238
page: filterCriteria.page,

0 commit comments

Comments
 (0)