From f44d251e4d0ae85cad5d9544f638c19cae32a256 Mon Sep 17 00:00:00 2001 From: Vasilica Olariu Date: Thu, 23 Mar 2023 14:17:19 +0200 Subject: [PATCH 1/5] TCA-1131 - implement tca certificaiton hiring manager preview --- .../data/perks.data.tsx | 16 ++++ .../perks-section/PerksSection.module.scss | 19 +++++ .../perks-section/PerksSection.tsx | 78 ++++++++++--------- src-ts/tools/learn/learn.routes.tsx | 20 ++++- .../UserCertificationPreview.tsx | 56 +++++++++++++ .../UserCertificationViewBase.tsx | 8 +- .../user-certification-view/index.ts | 1 + 7 files changed, 156 insertions(+), 42 deletions(-) create mode 100644 src-ts/tools/learn/tca-certificate/user-certification-view/UserCertificationPreview.tsx diff --git a/src-ts/tools/learn/certification-details/certification-details-modal/certif-details-content/data/perks.data.tsx b/src-ts/tools/learn/certification-details/certification-details-modal/certif-details-content/data/perks.data.tsx index 7bb328f81..a1a108666 100644 --- a/src-ts/tools/learn/certification-details/certification-details-modal/certif-details-content/data/perks.data.tsx +++ b/src-ts/tools/learn/certification-details/certification-details-modal/certif-details-content/data/perks.data.tsx @@ -1,3 +1,8 @@ +import { ReactNode } from 'react' + +import { IconSolid } from '../../../../../../lib' +import { getTCAUserCertificationPreviewUrl } from '../../../../learn.routes' + export type PerkIconsType = | 'currency-dolary' | 'icon-certif' | @@ -8,6 +13,7 @@ export interface PerkItem { description: string icon: PerkIconsType title: string + extra?: (certification: string) => ReactNode } export const perks: Array = [ @@ -24,6 +30,16 @@ export const perks: Array = [ You will receive a digital certificate that can be linked to your resume/CV, as verified proof of your skills. `, + extra: (certification: string) => ( + + Preview + + + ), icon: 'icon-certif', title: 'Proof of my skills', }, diff --git a/src-ts/tools/learn/certification-details/perks-section/PerksSection.module.scss b/src-ts/tools/learn/certification-details/perks-section/PerksSection.module.scss index 6cc2889b1..dcec61c33 100644 --- a/src-ts/tools/learn/certification-details/perks-section/PerksSection.module.scss +++ b/src-ts/tools/learn/certification-details/perks-section/PerksSection.module.scss @@ -69,3 +69,22 @@ margin-top: $space-sm; } } + +.perkExtraLink { + margin-top: $space-sm; + + > * { + display: flex; + align-items: center; + gap: $space-xs; + color: $turq-160; + @include font-roboto; + font-weight: 700; + font-size: 14px; + line-height: 14px; + text-transform: uppercase; + } + svg { + @include icon-size(14); + } +} \ No newline at end of file diff --git a/src-ts/tools/learn/certification-details/perks-section/PerksSection.tsx b/src-ts/tools/learn/certification-details/perks-section/PerksSection.tsx index cbfdfd663..a74c7464b 100644 --- a/src-ts/tools/learn/certification-details/perks-section/PerksSection.tsx +++ b/src-ts/tools/learn/certification-details/perks-section/PerksSection.tsx @@ -1,7 +1,8 @@ -import classNames from 'classnames' import { FC } from 'react' +import { Params, useParams } from 'react-router-dom' +import classNames from 'classnames' -import { type PerkItem } from '../data/perks.data' +import { type PerkItem } from '../certification-details-modal/certif-details-content/data' import { getPerkIcon } from './icons-map' import styles from './PerksSection.module.scss' @@ -12,38 +13,45 @@ interface PerksSectionProps { style?: 'clear' } -const PerksSection: FC = (props: PerksSectionProps) => ( -
-

{props.title ?? 'Why certify with Topcoder?'}

- - - - - - - - -
    - {props.items.map(perk => ( -
  • -
    - {getPerkIcon(perk)} -
    -
    -

    {perk.title}

    -

    {perk.description}

    -
    -
  • - ))} -
-
-) +const PerksSection: FC = (props: PerksSectionProps) => { + const routeParams: Params = useParams() + + return ( +
+

{props.title ?? 'Why certify with Topcoder?'}

+ + + + + + + + +
    + {props.items.map(perk => ( +
  • +
    + {getPerkIcon(perk)} +
    +
    +

    {perk.title}

    +

    {perk.description}

    +
    + {perk.extra?.(routeParams.certification as string)} +
    +
    +
  • + ))} +
+
+ ) +} export default PerksSection diff --git a/src-ts/tools/learn/learn.routes.tsx b/src-ts/tools/learn/learn.routes.tsx index 16e40aca0..a1f1c9a0b 100644 --- a/src-ts/tools/learn/learn.routes.tsx +++ b/src-ts/tools/learn/learn.routes.tsx @@ -29,10 +29,12 @@ const ValidateTCACertificate: LazyLoadedComponent const UserCertificationView: LazyLoadedComponent = lazyLoad(() => import('./tca-certificate'), 'UserCertificationView') +const UserCertificationPreview: LazyLoadedComponent + = lazyLoad(() => import('./tca-certificate'), 'UserCertificationPreview') + export enum LEARN_PATHS { certificate = '/certificate', completed = '/learn/completed', - myCertificate = '/learn/my-certificate', myLearning = '/learn/my-learning', fcc = '/learn/fcc', root = '/learn', @@ -143,6 +145,12 @@ export function getTCAUserCertificationUrl( return `${getTCACertificationPath(certification)}/${handle}/certification` } +export function getTCAUserCertificationPreviewUrl( + certification: string, +): string { + return `${getTCACertificationPath(certification)}/preview` +} + export function getAuthenticateAndEnrollRoute(): string { return `${authUrlLogin()}${encodeURIComponent(LEARN_PATHS.tcaEnroll)}` } @@ -219,15 +227,21 @@ export const learnRoutes: ReadonlyArray = [ { children: [], element: , - id: 'Validate TCA Certification - aka hiring manager view', + id: 'Hiring manager view - uuid param', route: ':completionUuid', }, { children: [], element: , - id: 'Validate TCA Certification - aka hiring manager view', + id: 'Hiring manager view', route: 'tca-certifications/:certification/:memberHandle/certification', }, + { + children: [], + element: , + id: 'Giring manager preview', + route: 'tca-certifications/:certification/preview', + }, ], element: , id: toolTitle, diff --git a/src-ts/tools/learn/tca-certificate/user-certification-view/UserCertificationPreview.tsx b/src-ts/tools/learn/tca-certificate/user-certification-view/UserCertificationPreview.tsx new file mode 100644 index 000000000..c3010d824 --- /dev/null +++ b/src-ts/tools/learn/tca-certificate/user-certification-view/UserCertificationPreview.tsx @@ -0,0 +1,56 @@ +import { FC, useContext, useLayoutEffect } from 'react' +import { NavigateFunction, Params, useNavigate, useParams } from 'react-router-dom' + +import { LoadingSpinner, profileContext, ProfileContextData, UserProfile } from '../../../../lib' +import { + TCACertificationEnrollmentBase, + TCACertificationProviderData, + useGetTCACertification, +} from '../../learn-lib' + +import UserCertificationViewBase from './UserCertificationViewBase' + +const placeholderUserProfile: UserProfile = { + firstName: 'Your', + handle: 'your_handle', + lastName: 'Name', +} as UserProfile + +const placeholderEnrollment: TCACertificationEnrollmentBase = { + completedAt: new Date().toISOString(), + completionUuid: 'test-uuid', + userHandle: 'your_handle', + userName: 'Your Name', +} as TCACertificationEnrollmentBase + +const UserCertificationPreview: FC<{}> = () => { + const { profile, initialized: profileReady }: ProfileContextData = useContext(profileContext) + const navigate: NavigateFunction = useNavigate() + + const routeParams: Params = useParams() + + const { + certification, + }: TCACertificationProviderData + = useGetTCACertification(`${routeParams.certification}`) + + useLayoutEffect(() => { + if (profileReady && !profile) { + navigate('..') + } + }, [navigate, profile, profileReady]) + + return ( + <> + + + + + ) +} + +export default UserCertificationPreview diff --git a/src-ts/tools/learn/tca-certificate/user-certification-view/UserCertificationViewBase.tsx b/src-ts/tools/learn/tca-certificate/user-certification-view/UserCertificationViewBase.tsx index 668c4a98a..6812b5da1 100644 --- a/src-ts/tools/learn/tca-certificate/user-certification-view/UserCertificationViewBase.tsx +++ b/src-ts/tools/learn/tca-certificate/user-certification-view/UserCertificationViewBase.tsx @@ -25,10 +25,10 @@ import { CertificateNotFound } from '../certificate-not-found' interface UserCertificationViewBaseProps { - enrollment?: TCACertificationEnrollmentBase - profile?: UserProfile certification?: TCACertification + enrollment?: TCACertificationEnrollmentBase enrollmentError?: boolean + profile?: UserProfile } const UserCertificationViewBase: FC = (props: UserCertificationViewBaseProps) => { @@ -57,9 +57,9 @@ const UserCertificationViewBase: FC = (props: Us {`${!!props.enrollment && `${props.enrollment.userName}'s `}${props.certification?.title} Certificate`} - + - {props.profile && props.enrollmentError && ( + {props.enrollmentError && ( Date: Thu, 23 Mar 2023 14:18:18 +0200 Subject: [PATCH 2/5] TCA-1189 - HM view based on uuid: redirect to full url --- .../UuidCertificationView.tsx | 40 +++++++++++++------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/src-ts/tools/learn/tca-certificate/user-certification-view/UuidCertificationView.tsx b/src-ts/tools/learn/tca-certificate/user-certification-view/UuidCertificationView.tsx index 089c10ad8..adeb29494 100644 --- a/src-ts/tools/learn/tca-certificate/user-certification-view/UuidCertificationView.tsx +++ b/src-ts/tools/learn/tca-certificate/user-certification-view/UuidCertificationView.tsx @@ -1,36 +1,52 @@ -import { FC } from 'react' -import { Params, useParams } from 'react-router-dom' +import { FC, useLayoutEffect } from 'react' +import { NavigateFunction, Params, useNavigate, useParams } from 'react-router-dom' +import { LoadingSpinner } from '../../../../lib' import { TCACertification, TCACertificationEnrollmentProviderData, useTCACertificationEnrollment, } from '../../learn-lib' +import { getTCAUserCertificationUrl } from '../../learn.routes' -import { useGetUserProfile, UseGetUserProfileData } from './use-get-user-profile' import UserCertificationViewBase from './UserCertificationViewBase' const UuidCertificationView: FC<{}> = () => { - + const navigate: NavigateFunction = useNavigate() const routeParams: Params = useParams() const { enrollment, error: enrollmentError, + ready: enrollmentReady, }: TCACertificationEnrollmentProviderData = useTCACertificationEnrollment(routeParams.completionUuid as string) - const { profile }: UseGetUserProfileData = useGetUserProfile(enrollment?.userHandle) - const certification: TCACertification | undefined = enrollment?.topcoderCertification + useLayoutEffect(() => { + if (enrollmentReady && enrollment) { + navigate( + getTCAUserCertificationUrl( + certification?.dashedName as string, + enrollment.userHandle, + ), + ) + } + }, [certification?.dashedName, enrollment, enrollmentReady, navigate]) + return ( - + <> + + {enrollmentReady && enrollmentError && ( + + )} + ) } From 27a7fac004007166e54ee28d90253a97b8b553fa Mon Sep 17 00:00:00 2001 From: Vasilica Olariu Date: Thu, 23 Mar 2023 14:18:44 +0200 Subject: [PATCH 3/5] cleanup unused routes & views, update urls for certificate btn --- .../tca-enrollment-provider.tsx | 2 +- src-ts/tools/learn/learn.routes.tsx | 15 +--- .../certificate-view/CertificateView.tsx | 74 ++++++++++--------- src-ts/tools/learn/tca-certificate/index.ts | 6 -- .../my-certificate/MyTCACertificate.tsx | 44 ----------- .../tca-certificate/my-certificate/index.ts | 1 - .../user-certificate/UserTCACertificate.tsx | 54 -------------- .../tca-certificate/user-certificate/index.ts | 1 - .../cert-card/TCCertCard.tsx | 8 +- 9 files changed, 46 insertions(+), 159 deletions(-) delete mode 100644 src-ts/tools/learn/tca-certificate/my-certificate/MyTCACertificate.tsx delete mode 100644 src-ts/tools/learn/tca-certificate/my-certificate/index.ts delete mode 100644 src-ts/tools/learn/tca-certificate/user-certificate/UserTCACertificate.tsx delete mode 100644 src-ts/tools/learn/tca-certificate/user-certificate/index.ts diff --git a/src-ts/tools/learn/learn-lib/data-providers/tca-certifications-provider/tca-certification-enrollment/tca-enrollment-provider.tsx b/src-ts/tools/learn/learn-lib/data-providers/tca-certifications-provider/tca-certification-enrollment/tca-enrollment-provider.tsx index d8adf91fe..7a2e69354 100644 --- a/src-ts/tools/learn/learn-lib/data-providers/tca-certifications-provider/tca-certification-enrollment/tca-enrollment-provider.tsx +++ b/src-ts/tools/learn/learn-lib/data-providers/tca-certifications-provider/tca-certification-enrollment/tca-enrollment-provider.tsx @@ -31,7 +31,7 @@ export function useTCACertificationEnrollment( enrollment: data, error: !!error, loading: !data, - ready: !!data, + ready: !!data || !!error, } } diff --git a/src-ts/tools/learn/learn.routes.tsx b/src-ts/tools/learn/learn.routes.tsx index a1f1c9a0b..90a9f808e 100644 --- a/src-ts/tools/learn/learn.routes.tsx +++ b/src-ts/tools/learn/learn.routes.tsx @@ -20,8 +20,7 @@ const UserCertificate: LazyLoadedComponent = lazyLoad(() => import('./course-cer const FreeCodeCamp: LazyLoadedComponent = lazyLoad(() => import('./free-code-camp'), 'FreeCodeCamp') const MyLearning: LazyLoadedComponent = lazyLoad(() => import('./my-learning'), 'MyLearning') const LandingLearn: LazyLoadedComponent = lazyLoad(() => import('./Learn')) -const MyTCACertificate: LazyLoadedComponent = lazyLoad(() => import('./tca-certificate'), 'MyTCACertificate') -const UserTCACertificate: LazyLoadedComponent = lazyLoad(() => import('./tca-certificate'), 'UserTCACertificate') +const UserTCACertificate: LazyLoadedComponent = lazyLoad(() => import('./tca-certificate'), 'CertificateView') const ValidateTCACertificate: LazyLoadedComponent = lazyLoad(() => import('./tca-certificate'), 'UuidCertificationView') @@ -121,12 +120,6 @@ export function getTCACertificationEnrollPath(certification: string): string { export function getTCACertificateUrl( certification: string, -): string { - return `${getTCACertificationPath(certification)}${LEARN_PATHS.certificate}` -} - -export function getUserTCACertificateUrl( - certification: string, handle: string, ): string { return `${getTCACertificationPath(certification)}/${handle}${LEARN_PATHS.certificate}` @@ -212,12 +205,6 @@ export const learnRoutes: ReadonlyArray = [ id: 'My Learning', route: 'my-learning', }, - { - children: [], - element: , - id: 'My TCA Certification', - route: 'tca-certifications/:certification/certificate', - }, { children: [], element: , diff --git a/src-ts/tools/learn/tca-certificate/certificate-view/CertificateView.tsx b/src-ts/tools/learn/tca-certificate/certificate-view/CertificateView.tsx index 5f0a4204e..edfe95eda 100644 --- a/src-ts/tools/learn/tca-certificate/certificate-view/CertificateView.tsx +++ b/src-ts/tools/learn/tca-certificate/certificate-view/CertificateView.tsx @@ -1,9 +1,7 @@ import { FC, MutableRefObject, ReactNode, useRef } from 'react' +import { Params, useParams } from 'react-router-dom' -import { - LoadingSpinner, - UserProfile, -} from '../../../../lib' +import { LoadingSpinner } from '../../../../lib' import { CertificateNotFoundContent, CertificatePageLayout, @@ -15,40 +13,46 @@ import { } from '../../learn-lib' import { getTCACertificationPath, getTCACertificationValidationUrl, getUserTCACertificateSsr } from '../../learn.routes' import { CertificateNotFound } from '../certificate-not-found' +import { useGetUserProfile, UseGetUserProfileData } from '../user-certification-view/use-get-user-profile' -interface CertificateViewProps { - certification: string, - fullScreenCertLayout?: boolean, - profile: UserProfile, -} - -const CertificateView: FC = (props: CertificateViewProps) => { +const CertificateView: FC<{}> = () => { - const tcaCertificationPath: string = getTCACertificationPath(props.certification) const certificateElRef: MutableRefObject = useRef() + const routeParams: Params = useParams() + const { + isOwnProfile, + ready: profileReady, + }: UseGetUserProfileData = useGetUserProfile(routeParams.memberHandle) + + const userHandle: string = `${routeParams.memberHandle}` + const certificationParam: string = routeParams.certification ?? '' + + + const tcaCertificationPath: string = getTCACertificationPath(certificationParam) + const { certification, enrollment, error: hasValidationError, ready, }: TCACertificationValidationData - = useValidateTCACertification(props.certification, props.profile.handle) + = useValidateTCACertification(certificationParam, userHandle) const hasCompletedTheCertification: boolean = !!certification && !!enrollment && !hasValidationError - const certificateNotFoundError: boolean = ready && !hasCompletedTheCertification + const certificateNotFoundError: boolean = profileReady && ready && !hasCompletedTheCertification function getCertTitle(user: string): string { return `${user} - ${certification?.title}` } const certUrl: string = getUserTCACertificateSsr( - props.certification, - props.profile.handle, - getCertTitle(props.profile.handle), + certificationParam, + userHandle, + getCertTitle(userHandle), ) - const certificationTitle: string = getCertTitle(enrollment?.userName || props.profile.handle) + const certificationTitle: string = getCertTitle(enrollment?.userName || userHandle) const validateLink: string = getTCACertificationValidationUrl(enrollment?.completionUuid as string) @@ -62,7 +66,7 @@ const CertificateView: FC = (props: CertificateViewProps) certification={certification as TCACertification} completionUuid={enrollment?.completionUuid ?? ''} userName={enrollment?.userName} - tcHandle={props.profile.handle} + tcHandle={userHandle} completedDate={enrollment?.completedAt as string} certificateElRef={certificateElRef} validateLink={validateLink} @@ -78,21 +82,23 @@ const CertificateView: FC = (props: CertificateViewProps) - - )} - > - {renderCertificate()} - + {profileReady && ( + + )} + > + {renderCertificate()} + + )} ) } diff --git a/src-ts/tools/learn/tca-certificate/index.ts b/src-ts/tools/learn/tca-certificate/index.ts index 9b553492c..ba149c08d 100644 --- a/src-ts/tools/learn/tca-certificate/index.ts +++ b/src-ts/tools/learn/tca-certificate/index.ts @@ -1,10 +1,4 @@ export * from './user-certification-view' // used only by SSR -// TODO: merge this into one component? -export * from './my-certificate' export * from './certificate-view' - -// deprecated -// TODO: remove? -export * from './user-certificate' diff --git a/src-ts/tools/learn/tca-certificate/my-certificate/MyTCACertificate.tsx b/src-ts/tools/learn/tca-certificate/my-certificate/MyTCACertificate.tsx deleted file mode 100644 index b7bdfeec9..000000000 --- a/src-ts/tools/learn/tca-certificate/my-certificate/MyTCACertificate.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { FC, useCallback, useContext, useEffect } from 'react' -import { NavigateFunction, Params, useNavigate, useParams } from 'react-router-dom' - -import { - LoadingSpinner, - profileContext, - ProfileContextData, -} from '../../../../lib' -import { getTCACertificationPath } from '../../learn.routes' -import CertificateView from '../certificate-view/CertificateView' - -const MyTCACertificate: FC<{}> = () => { - const routeParams: Params = useParams() - const { profile, initialized: profileReady }: ProfileContextData = useContext(profileContext) - - const navigate: NavigateFunction = useNavigate() - const certificationParam: string = routeParams.certification ?? '' - const tcaCertificationPath: string = getTCACertificationPath(certificationParam) - - const navigateToCertification: () => void = useCallback(() => { - navigate(tcaCertificationPath) - }, [tcaCertificationPath, navigate]) - - useEffect(() => { - if (profileReady && !profile) { - navigateToCertification() - } - }, [profileReady, profile, navigateToCertification]) - - return ( - <> - - - {profileReady && profile && ( - - )} - - ) -} - -export default MyTCACertificate diff --git a/src-ts/tools/learn/tca-certificate/my-certificate/index.ts b/src-ts/tools/learn/tca-certificate/my-certificate/index.ts deleted file mode 100644 index e6bcb7548..000000000 --- a/src-ts/tools/learn/tca-certificate/my-certificate/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as MyTCACertificate } from './MyTCACertificate' diff --git a/src-ts/tools/learn/tca-certificate/user-certificate/UserTCACertificate.tsx b/src-ts/tools/learn/tca-certificate/user-certificate/UserTCACertificate.tsx deleted file mode 100644 index 548b0f4eb..000000000 --- a/src-ts/tools/learn/tca-certificate/user-certificate/UserTCACertificate.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { - Dispatch, - FC, - SetStateAction, - useEffect, - useState, -} from 'react' -import { Params, useParams } from 'react-router-dom' - -import { - LoadingSpinner, - profileGetPublicAsync, - UserProfile, -} from '../../../../lib' -import { CertificateView } from '../certificate-view' - -const UserTCACertificate: FC<{}> = () => { - - const routeParams: Params = useParams() - - const [profile, setProfile]: [ - UserProfile | undefined, - Dispatch> - ] = useState() - const [profileReady, setProfileReady]: [boolean, Dispatch>] = useState(false) - - const certificationParam: string = routeParams.certification ?? '' - - useEffect(() => { - if (routeParams.memberHandle) { - profileGetPublicAsync(routeParams.memberHandle) - .then(userProfile => { - setProfile(userProfile) - setProfileReady(true) - }) - } - }, [routeParams.memberHandle, setProfileReady]) - - return ( - <> - - - {profileReady && profile && ( - - )} - - ) -} - -export default UserTCACertificate diff --git a/src-ts/tools/learn/tca-certificate/user-certificate/index.ts b/src-ts/tools/learn/tca-certificate/user-certificate/index.ts deleted file mode 100644 index 58bd97b52..000000000 --- a/src-ts/tools/learn/tca-certificate/user-certificate/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as UserTCACertificate } from './UserTCACertificate' diff --git a/src-ts/tools/learn/welcome/tc-certifications/cert-card/TCCertCard.tsx b/src-ts/tools/learn/welcome/tc-certifications/cert-card/TCCertCard.tsx index cfc24ec12..eac1aefe2 100644 --- a/src-ts/tools/learn/welcome/tc-certifications/cert-card/TCCertCard.tsx +++ b/src-ts/tools/learn/welcome/tc-certifications/cert-card/TCCertCard.tsx @@ -1,7 +1,7 @@ import { FC, memo, ReactNode } from 'react' import classNames from 'classnames' -import { Button, ButtonStyle, IconSolid, ProgressBar, useCheckIsMobile } from '../../../../../lib' +import { Button, ButtonStyle, IconSolid, ProgressBar } from '../../../../../lib' import { CertificateBadgeIcon, CompletionTimeRange, @@ -12,7 +12,7 @@ import { TCACertificationProgress, TCACertificationProviderBase, } from '../../../learn-lib' -import { getTCACertificateUrl, getTCACertificationPath } from '../../../learn.routes' +import { getTCACertificationPath, getTCAUserCertificationUrl } from '../../../learn.routes' import styles from './TCCertCard.module.scss' @@ -29,7 +29,6 @@ const getCtaBtn: (style: ButtonStyle, label: string, route: string) => ReactNode const EXCERPT_TEXT_LEN: number = 165 const TCCertCard: FC = (props: TCCertCardProps) => { - const isMobile: boolean = useCheckIsMobile() const desc: string = props.certification.description.slice(0, EXCERPT_TEXT_LEN) @@ -49,10 +48,11 @@ const TCCertCard: FC = (props: TCCertCardProps) => { } if (isCompleted) { + const certificatePath: string = getTCAUserCertificationUrl(dashedName, props.progress?.userHandle as string) return (
- {getCtaBtn('primary', 'View Certificate', getTCACertificateUrl(dashedName))} + {getCtaBtn('primary', 'View Certificate', certificatePath)} {getCtaBtn('secondary', 'Details', getTCACertificationPath(dashedName))}
From 626a503e55b14b6f1758f874a47370876df2529e Mon Sep 17 00:00:00 2001 From: Vasilica Olariu Date: Thu, 23 Mar 2023 17:52:51 +0200 Subject: [PATCH 4/5] TCA-1131 - add preview watermark --- .../HiringManagerView.module.scss | 16 ++++++++++++++++ .../hiring-manager-view/HiringManagerView.tsx | 2 ++ .../hiring-manager-view/preview-watermark.png | Bin 0 -> 42235 bytes .../UserCertificationPreview.tsx | 1 + .../UserCertificationViewBase.tsx | 2 ++ 5 files changed, 21 insertions(+) create mode 100644 src-ts/tools/learn/learn-lib/hiring-manager-view/preview-watermark.png diff --git a/src-ts/tools/learn/learn-lib/hiring-manager-view/HiringManagerView.module.scss b/src-ts/tools/learn/learn-lib/hiring-manager-view/HiringManagerView.module.scss index 6bc0e3c3e..57ab043d4 100644 --- a/src-ts/tools/learn/learn-lib/hiring-manager-view/HiringManagerView.module.scss +++ b/src-ts/tools/learn/learn-lib/hiring-manager-view/HiringManagerView.module.scss @@ -34,6 +34,22 @@ background: url('./bg-curve-white.png') no-repeat center bottom / 100vw, $tc-qa-grad; } + &.asPreview { + position: relative; + z-index: 1; + &:before { + content: ""; + display: block; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: url('./bg-curve-white.png') no-repeat center bottom / 100vw, url('./preview-watermark.png') no-repeat top left / cover; + z-index: -1; + } + } + .heroInner { display: flex; gap: $space-mx; diff --git a/src-ts/tools/learn/learn-lib/hiring-manager-view/HiringManagerView.tsx b/src-ts/tools/learn/learn-lib/hiring-manager-view/HiringManagerView.tsx index e34ffde0b..b596ea5b4 100644 --- a/src-ts/tools/learn/learn-lib/hiring-manager-view/HiringManagerView.tsx +++ b/src-ts/tools/learn/learn-lib/hiring-manager-view/HiringManagerView.tsx @@ -54,6 +54,7 @@ export interface HiringManagerViewProps { certification?: TCACertification completedAt?: string completionUuid?: string + isPreview?: boolean isModalView?: boolean isMemberVerified?: boolean isOwner?: boolean @@ -154,6 +155,7 @@ const HiringManagerView: FC = (props: HiringManagerViewP className={classNames( styles.hero, styles[`hero-${certificationCategory?.track.toLowerCase() || 'dev'}`], + props.isPreview && styles.asPreview, )} > diff --git a/src-ts/tools/learn/learn-lib/hiring-manager-view/preview-watermark.png b/src-ts/tools/learn/learn-lib/hiring-manager-view/preview-watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..e9332a3aef2a08392b954b7523abef70df6c4b6f GIT binary patch literal 42235 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 _CSZmbn6B`n7d6AH_4RL`OabXd1rlQ55Mz% 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 = () => { enrollment={placeholderEnrollment} certification={certification} profile={placeholderUserProfile} + isPreview /> ) diff --git a/src-ts/tools/learn/tca-certificate/user-certification-view/UserCertificationViewBase.tsx b/src-ts/tools/learn/tca-certificate/user-certification-view/UserCertificationViewBase.tsx index 6812b5da1..d3b04d47b 100644 --- a/src-ts/tools/learn/tca-certificate/user-certification-view/UserCertificationViewBase.tsx +++ b/src-ts/tools/learn/tca-certificate/user-certification-view/UserCertificationViewBase.tsx @@ -28,6 +28,7 @@ interface UserCertificationViewBaseProps { certification?: TCACertification enrollment?: TCACertificationEnrollmentBase enrollmentError?: boolean + isPreview?: boolean profile?: UserProfile } @@ -82,6 +83,7 @@ const UserCertificationViewBase: FC = (props: Us userName={props.enrollment.userName} isOwner={isOwnProfile} validationUrl={validationUrl} + isPreview={props.isPreview} /> )} From cee2f6ae007f8e26f256fd337183c43f6bcc8878 Mon Sep 17 00:00:00 2001 From: Vasilica Olariu Date: Thu, 23 Mar 2023 17:54:56 +0200 Subject: [PATCH 5/5] update margins in hiring manager view --- .../hiring-manager-view/HiringManagerView.module.scss | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src-ts/tools/learn/learn-lib/hiring-manager-view/HiringManagerView.module.scss b/src-ts/tools/learn/learn-lib/hiring-manager-view/HiringManagerView.module.scss index 57ab043d4..165245583 100644 --- a/src-ts/tools/learn/learn-lib/hiring-manager-view/HiringManagerView.module.scss +++ b/src-ts/tools/learn/learn-lib/hiring-manager-view/HiringManagerView.module.scss @@ -165,12 +165,7 @@ } .wrap { - margin-top: $space-mxx; margin-bottom: 120px; - - @include ltelg { - margin-top: $space-mx; - } @include ltemd { margin-bottom: $space-lg; @@ -263,6 +258,11 @@ align-items: center; gap: $space-xs; + margin-top: $space-mxx; + @include ltelg { + margin-top: $space-mx; + } + &:global(.secondary) { border: 2px solid; }