Skip to content

Commit bb2cf3e

Browse files
committed
Merge branch 'dev' of github.com:topcoder-platform/platform-ui into TCA-1131_hm-preview
2 parents cee2f6a + 5d6bcaf commit bb2cf3e

File tree

9 files changed

+150
-47
lines changed

9 files changed

+150
-47
lines changed

src-ts/lib/breadcrumb/Breadcrumb.module.scss

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@
4040
padding: 0;
4141
@include ltesm {
4242
flex: 0 1 auto;
43-
&:first-child {
44-
flex: 1 0 auto;
43+
&:first-child:not(:global(.elipsis)) {
44+
flex: 1 0 0;
4545
}
4646
}
4747
a {

src-ts/lib/breadcrumb/breadcrumb-item/BreadcrumbItem.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@ const BreadcrumbItem: FC<BreadcrumbItemProps> = (props: BreadcrumbItemProps) =>
1919
return (
2020
<li
2121
key={props.index}
22-
onClick={() => onClick()}
22+
onClick={onClick}
23+
className={props.item.isElipsis ? 'elipsis' : ''}
2324
>
2425
<Link
25-
className={props.item.isElipsis && styles.elipsis}
26+
className={props.item.isElipsis ? styles.elipsis : ''}
2627
to={props.item.url}
2728
>
2829
{props.item.name}

src-ts/tools/learn/course-completed/tca-certification-view/TCACertificationView.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import { FC } from 'react'
22

3-
import { EnvironmentConfig } from '../../../../config'
43
import { Button } from '../../../../lib'
54
import { CourseTitle, LearnCourse, TCACertification } from '../../learn-lib'
6-
import { getCertificatePath, getTCACertificationPath, rootRoute } from '../../learn.routes'
5+
import { getTCACertificationPath } from '../../learn.routes'
76
import { ReactComponent as StarsSvg } from '../stars.svg'
87
import { TitleBadgeType } from '../../learn-lib/course-title/CourseTitle'
98
import styles from '../CourseCompletedPage.module.scss'

src-ts/tools/learn/learn-lib/course-title/CourseTitle.module.scss

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@
6161
@include ltemd {
6262
:global(.quote-small.xl) {
6363
margin-top: $space-sm;
64+
display: flex;
65+
justify-content: center;
6466
}
6567
}
6668
}

src-ts/tools/learn/learn-lib/hiring-manager-view/HiringManagerView.module.scss

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,4 +302,76 @@
302302
@include ltemd {
303303
display: none;
304304
}
305+
}
306+
307+
.modalView {
308+
.hero {
309+
padding-top: $space-mx;
310+
min-height: 380px;
311+
312+
@include ltesm {
313+
max-height: none;
314+
}
315+
316+
317+
.heroInner {
318+
margin-bottom: 0;
319+
flex-direction: row;
320+
padding-right: $space-lg;
321+
padding-bottom: $space-mx;
322+
323+
@include ltesm {
324+
flex-direction: column;
325+
padding-right: 0;
326+
}
327+
328+
.heroLeft {
329+
.member {
330+
margin-bottom: $space-xxxxl;
331+
332+
>svg,
333+
>img {
334+
max-width: 88px;
335+
max-height: 88px;
336+
}
337+
}
338+
339+
.certTitle {
340+
font-size: 40px;
341+
line-height: 40px;
342+
}
343+
}
344+
}
345+
}
346+
347+
.wrap {
348+
margin-bottom: 0;
349+
}
350+
351+
.contentOuter {
352+
max-width: none;
353+
354+
>div {
355+
max-width: none !important;
356+
}
357+
358+
}
359+
360+
.courses {
361+
margin-bottom: 0;
362+
}
363+
364+
.colsWrap {
365+
margin-top: 0;
366+
}
367+
368+
.colWrap {
369+
&:last-child {
370+
max-width: 25%;
371+
padding-right: 0;
372+
@include ltemd {
373+
max-width: 100%;
374+
}
375+
}
376+
}
305377
}

src-ts/tools/learn/learn-lib/hiring-manager-view/HiringManagerView.tsx

Lines changed: 59 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
ReactNode,
66
SetStateAction,
77
useCallback,
8+
useLayoutEffect,
89
useRef,
910
useState,
1011
} from 'react'
@@ -34,7 +35,7 @@ import {
3435
useTCAShareCertificateModal,
3536
} from '..'
3637
import { getTCACertificationPath, getUserTCACertificateSsr } from '../../learn.routes'
37-
import { clearFCCCertificationTitle } from '../functions'
38+
import { clearFCCCertificationTitle, hideSiblings } from '../functions'
3839
import { EnvironmentConfig } from '../../../../config'
3940

4041
import { CertificateModal } from './certificate-modal'
@@ -65,6 +66,7 @@ export interface HiringManagerViewProps {
6566

6667
const HiringManagerView: FC<HiringManagerViewProps> = (props: HiringManagerViewProps) => {
6768
const certificateElRef: MutableRefObject<HTMLDivElement | any> = useRef()
69+
const wrapElRef: MutableRefObject<HTMLElement | any> = useRef()
6870

6971
const [certPreviewModalIsOpen, setCertPreviewModalIsOpen]: [boolean, Dispatch<SetStateAction<boolean>>]
7072
= useState<boolean>(false)
@@ -90,6 +92,8 @@ const HiringManagerView: FC<HiringManagerViewProps> = (props: HiringManagerViewP
9092
)
9193
const shareModal: TCAShareCertificateModalData = useTCAShareCertificateModal(ssrCertUrl)
9294

95+
const renderShareActions: boolean = props.isOwner && !props.isModalView
96+
9397
const getCertificateCanvas: () => Promise<HTMLCanvasElement | void>
9498
= useCertificateCanvas(certificateElRef)
9599

@@ -200,29 +204,31 @@ const HiringManagerView: FC<HiringManagerViewProps> = (props: HiringManagerViewP
200204
<div className={styles.heroCert}>
201205
{renderTCACertificatePreview(certificateElRef)}
202206

203-
<div className={styles.certActionBtns}>
204-
<ActionButton
205-
icon={<IconOutline.ZoomInIcon />}
206-
className={classNames(styles.certZoomBtn, styles.certActionBtn)}
207-
onClick={handleShowCertPreviewModal}
208-
/>
209-
{props.isOwner && (
210-
<>
211-
<ActionButton
212-
className={classNames('desktop-hide', styles.certActionBtn)}
213-
icon={<IconOutline.PrinterIcon />}
214-
onClick={handlePrint}
215-
/>
216-
<ActionButton
217-
className={classNames('desktop-hide', styles.certActionBtn)}
218-
icon={<IconOutline.DownloadIcon />}
219-
onClick={handleDownload}
220-
/>
221-
</>
222-
)}
223-
</div>
207+
{!props.isModalView && (
208+
<div className={styles.certActionBtns}>
209+
<ActionButton
210+
icon={<IconOutline.ZoomInIcon />}
211+
className={classNames(styles.certZoomBtn, styles.certActionBtn)}
212+
onClick={handleShowCertPreviewModal}
213+
/>
214+
{renderShareActions && (
215+
<>
216+
<ActionButton
217+
className={classNames('desktop-hide', styles.certActionBtn)}
218+
icon={<IconOutline.PrinterIcon />}
219+
onClick={handlePrint}
220+
/>
221+
<ActionButton
222+
className={classNames('desktop-hide', styles.certActionBtn)}
223+
icon={<IconOutline.DownloadIcon />}
224+
onClick={handleDownload}
225+
/>
226+
</>
227+
)}
228+
</div>
229+
)}
224230
</div>
225-
{props.isOwner && (
231+
{renderShareActions && (
226232
<div className={classNames('mobile-hide', styles.certActionBtns)}>
227233
<ActionButton
228234
className={styles.certActionBtn}
@@ -243,8 +249,19 @@ const HiringManagerView: FC<HiringManagerViewProps> = (props: HiringManagerViewP
243249
)
244250
}
245251

252+
useLayoutEffect(() => {
253+
const el: HTMLElement = wrapElRef.current
254+
if (!el || !props.isModalView) {
255+
return
256+
}
257+
258+
hideSiblings(el.parentElement as HTMLElement)
259+
hideSiblings(el.parentElement?.parentElement as HTMLElement)
260+
261+
})
262+
246263
return !!props.certification && !!props.userProfile ? (
247-
<div>
264+
<div className={props.isModalView ? styles.modalView : ''} ref={wrapElRef}>
248265
{renderHero()}
249266

250267
<ContentLayout
@@ -253,7 +270,7 @@ const HiringManagerView: FC<HiringManagerViewProps> = (props: HiringManagerViewP
253270
innerClass={styles.innerContentWrap}
254271
>
255272
<div className={styles.wrap}>
256-
{props.isOwner && (
273+
{renderShareActions && (
257274
<Button
258275
buttonStyle='primary'
259276
icon={IconOutline.ShareIcon}
@@ -280,24 +297,28 @@ const HiringManagerView: FC<HiringManagerViewProps> = (props: HiringManagerViewP
280297
expandCount={props.certification?.skills?.length ?? 0}
281298
/>
282299

283-
<Button
284-
buttonStyle='secondary'
285-
label={props.isOwner ? 'View your Topcoder profile' : 'View full Topcoder profile'}
286-
url={myProfileLink}
287-
target='_blank'
288-
className={styles.shareBtn}
289-
/>
300+
{!props.isModalView && (
301+
<Button
302+
buttonStyle='secondary'
303+
label={props.isOwner ? 'View your Topcoder profile' : 'View full Topcoder profile'}
304+
url={myProfileLink}
305+
target='_blank'
306+
className={styles.shareBtn}
307+
/>
308+
)}
290309
</div>
291310
</div>
292311

293312
{renderCoursesGridItems()}
294313

295-
<Button
296-
className={styles.detailsBtn}
297-
buttonStyle='link'
298-
label='Certification details'
299-
route={certificationDetailsLink}
300-
/>
314+
{!props.isModalView && (
315+
<Button
316+
className={styles.detailsBtn}
317+
buttonStyle='link'
318+
label='Certification details'
319+
route={certificationDetailsLink}
320+
/>
321+
)}
301322
</div>
302323
</ContentLayout>
303324
{shareModal.modal}

src-ts/tools/learn/learn-lib/hiring-manager-view/certificate-modal/CertificateModal.module.scss

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
@import '../../../../../lib/styles/includes';
22

3+
.wrap {
4+
position: relative;
5+
}
36

47
.certificateModal {
58
&:global(.react-responsive-modal-modal) {

src-ts/tools/learn/learn-lib/hiring-manager-view/certificate-modal/CertificateModal.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ const CertificateModal: FC<CertificateModalProps> = (props: CertificateModalProp
1414
classNames={{ modal: styles.certificateModal }}
1515
{...props}
1616
>
17-
{props.children}
17+
<div className={styles.wrap}>
18+
{props.children}
19+
</div>
1820
</BaseModal>
1921
)
2022

src-ts/tools/learn/tca-certificate/user-certification-view/UserCertificationViewBase.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
useRef,
88
useState,
99
} from 'react'
10+
import { useSearchParams } from 'react-router-dom'
1011

1112
import {
1213
getVerificationStatusAsync,
@@ -23,7 +24,6 @@ import {
2324
import { getTCACertificationPath, getTCACertificationValidationUrl } from '../../learn.routes'
2425
import { CertificateNotFound } from '../certificate-not-found'
2526

26-
2727
interface UserCertificationViewBaseProps {
2828
certification?: TCACertification
2929
enrollment?: TCACertificationEnrollmentBase
@@ -33,12 +33,14 @@ interface UserCertificationViewBaseProps {
3333
}
3434

3535
const UserCertificationViewBase: FC<UserCertificationViewBaseProps> = (props: UserCertificationViewBaseProps) => {
36+
const [queryParams]: [URLSearchParams, any] = useSearchParams()
3637

37-
// const routeParams: Params<string> = useParams()
3838
const tcaCertificationPath: string = getTCACertificationPath(`${props.certification?.dashedName}`)
3939
const certificateElRef: MutableRefObject<HTMLDivElement | any> = useRef()
4040
const isOwnProfile: boolean = !!props.profile?.email
4141

42+
const isModalView: boolean = queryParams.get('view-style') === 'modal'
43+
4244
const [isMemberVerified, setIsMemberVerified]: [boolean, Dispatch<SetStateAction<boolean>>]
4345
= useState<boolean>(false)
4446

@@ -84,6 +86,7 @@ const UserCertificationViewBase: FC<UserCertificationViewBaseProps> = (props: Us
8486
isOwner={isOwnProfile}
8587
validationUrl={validationUrl}
8688
isPreview={props.isPreview}
89+
isModalView={isModalView}
8790
/>
8891
</div>
8992
)}

0 commit comments

Comments
 (0)