Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
c53bd00
TSJR-217 - add principal skills to user profile
vas3a Nov 10, 2023
e24ccb1
fix grouping by category name in member profile
vas3a Nov 13, 2023
5763759
Merge pull request #941 from topcoder-platform/profiles-category-grou…
vas3a Nov 13, 2023
8fcbbb2
TSJR-217 - add principal skills section modal
vas3a Nov 13, 2023
c88784c
lint fixes
vas3a Nov 13, 2023
1769697
TSJR-99 Topcoder Standardized Skills for TCA
kkartunov Nov 13, 2023
f6b8eb5
TSJR-99 remove EMSI skills flag
kkartunov Nov 13, 2023
f2c0b16
Typo update
vas3a Nov 13, 2023
40f00a8
TSJR-99 update wording on TCA skills modal
kkartunov Nov 13, 2023
1f5474c
Merge branch 'dev' of github.com:topcoder-platform/platform-ui into T…
vas3a Nov 13, 2023
3f00a83
Merge pull request #942 from topcoder-platform/TSJR-99
kkartunov Nov 13, 2023
4b9e2c3
Merge branch 'dev' of github.com:topcoder-platform/platform-ui into T…
vas3a Nov 13, 2023
2195252
Merge pull request #939 from topcoder-platform/TSJR-217_principal-skills
vas3a Nov 13, 2023
1f6eec6
MP-356 - initial member stats
vas3a Nov 14, 2023
34672d3
MP-356 - work on member profile stats & history
vas3a Nov 16, 2023
ef67b54
TAL-93 - update member profiles to use member.availableForGigs
vas3a Nov 16, 2023
ec44f65
TAL-93 - update onboarding to use member.availableForGigs
vas3a Nov 16, 2023
adbe492
Merge pull request #943 from topcoder-platform/TAL-93_update-availabl…
vas3a Nov 16, 2023
2bd1e62
Update react-select@5.8.0
vas3a Nov 16, 2023
aa7d4b2
TSJR-217 - move skill selector menu into separate portal
vas3a Nov 16, 2023
5570417
TSJR-217 - update onboarding to make skills selector work
vas3a Nov 16, 2023
f64e848
Merge pull request #944 from topcoder-platform/TSJR-217_fix-skills-se…
vas3a Nov 16, 2023
a30489d
MP-356 - udpate labels, numbers
vas3a Nov 16, 2023
c9d137b
MP-356 - Update member profile: add rating distribution graph using D3js
vas3a Nov 20, 2023
00acdf8
MP-356 - statistics views for all subtracks
vas3a Nov 21, 2023
0cb2b6d
MP-356 - remove old details modals, refactor code
vas3a Nov 21, 2023
edebad0
MP-356 - add default view for tracks & subtracks
vas3a Nov 21, 2023
0a57f2f
MP-356 - mobile responsiveness & update to v5 distribution api
vas3a Nov 21, 2023
c3da186
Merge branch 'dev' of github.com:topcoder-platform/platform-ui into M…
vas3a Nov 21, 2023
2bb35d2
MP-356 - deploy to dev
vas3a Nov 21, 2023
aaa03e2
Various QA issues fixing
vas3a Nov 22, 2023
0a20761
MP-356 - fix talent search result routing
vas3a Nov 22, 2023
817b630
MP-374 - show stats for members that have no wins but have challenge …
vas3a Nov 23, 2023
febbf19
MP-375 - order competitive track last
vas3a Nov 23, 2023
0704114
MP-376 - do not show wins for CP track
vas3a Nov 23, 2023
1c971c6
MP-378 - update order for 2nd level subtracks
vas3a Nov 23, 2023
29e5ca3
MP-379 - fix design submissions count
vas3a Nov 23, 2023
532cdaf
MP-363 - add control for which stats we show for each track
vas3a Nov 23, 2023
c4a3e23
MP-356 - minor fixes
vas3a Nov 24, 2023
8658d57
TAL-94 - move namesAndHandleAppearance to member root object
vas3a Nov 28, 2023
7a46ab9
Merge pull request #946 from topcoder-platform/TAL-94_update-member-p…
vas3a Nov 28, 2023
be6b3fb
MP-356 - split DataScience and CP tracks
vas3a Nov 28, 2023
4074d0e
Merge branch 'dev' of github.com:topcoder-platform/platform-ui into M…
vas3a Nov 28, 2023
1175e24
MP-356 - demo feedback
vas3a Nov 29, 2023
3247d38
fix-principal-skills-typo
vas3a Nov 29, 2023
7bd76ce
Merge pull request #948 from topcoder-platform/fix-principal-skills-typo
vas3a Nov 30, 2023
1c523e3
MP-356 - fix MM rating history, fix design stats
vas3a Nov 30, 2023
3d4bd4d
Merge pull request #945 from topcoder-platform/MP-356_member-stats-an…
vas3a Dec 1, 2023
27c4188
Can't fully remove profile traits
suppermancool Dec 4, 2023
fc095a7
Merge pull request #950 from topcoder-platform/issue-949
jmgasper Dec 4, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -257,9 +257,7 @@ workflows:
branches:
only:
- dev
- justin_fixes
- talent_search_fixes
- feature/standardized-skills
- MP-356_member-stats-and-history

- deployQa:
context: org-global
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@
"react-responsive-modal": "^6.2.0",
"react-router-dom": "^6.4.2",
"react-scripts": "5.0.1",
"react-select": "^5.5.0",
"react-select": "^5.8.0",
"react-spinners": "^0.13.6",
"react-stickynode": "^1.4.1",
"react-toastify": "^9.0.8",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ const CertificationDetailsPage: FC<{}> = () => {
const {
certification,
ready: certificationReady,
mutate: reloadCertification,
}: TCACertificationProviderData = useGetTCACertification(dashedName as string)

// Fetch Enrollment status & progress
Expand Down Expand Up @@ -130,6 +131,8 @@ const CertificationDetailsPage: FC<{}> = () => {
certification={certification}
enrolled={isEnrolled}
certProgress={progress}
profile={profile}
reloadCertification={reloadCertification}
/>
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@

.section-header {
margin-top: $sp-6;
display: flex;
align-items: center;
}

.certificate-placeholder {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
import { FC, ReactNode } from 'react'
import { Dispatch, FC, ReactNode, SetStateAction, useMemo, useState } from 'react'
import { KeyedMutator } from 'swr'
import classNames from 'classnames'

import { EnvironmentConfig } from '~/config'
import { IconOutline, IconSolid, Tooltip } from '~/libs/ui'
import { UserProfile, UserRole } from '~/libs/core'

import {
CompletionTimeRange,
EditSkillsBtn,
LearnLevelIcon,
ModifySkillsModal,
ProvidersLogoList,
SkillTags,
StickySidebar,
Expand All @@ -24,6 +28,8 @@ interface CertificationDetailsSidebarProps {
certification: TCACertification
enrolled: boolean
certProgress?: TCACertificationProgress
profile: UserProfile | undefined
reloadCertification: KeyedMutator<any>
}

function renderTooltipContents(icon: ReactNode, text: Array<string>): ReactNode {
Expand Down Expand Up @@ -57,6 +63,26 @@ const CertificationDetailsSidebar: FC<CertificationDetailsSidebarProps> = (props

const suggestedRetailPrice: string = product?.metadata?.estimatedRetailPrice || '20'

const canEdit: boolean = useMemo(() => !!props.profile?.roles?.includes(UserRole.tcaAdmin), [props.profile])

const [isEditMode, setIsEditMode]: [boolean, Dispatch<SetStateAction<boolean>>]
= useState<boolean>(false)

function handleModyfSkillsModalClose(): void {
setIsEditMode(false)
}

function handleModyfSkillsSave(): void {
setTimeout(() => {
setIsEditMode(false)
props.reloadCertification()
}, 1500)
}

function handleEditSkillsClick(): void {
setIsEditMode(true)
}

return (
<StickySidebar>
<div className={styles['certificate-placeholder']}>
Expand Down Expand Up @@ -140,10 +166,17 @@ const CertificationDetailsSidebar: FC<CertificationDetailsSidebarProps> = (props
</ul>

<div className={classNames('body-small-medium', styles['section-header'])}>
Skills Covered
<span>Skills Covered</span>
{
canEdit && (
<EditSkillsBtn
onClick={handleEditSkillsClick}
className={styles.editTCABtn}
/>
)
}
</div>
<SkillTags
emsiSkills={props.certification.emsiSkills}
skills={props.certification.skills}
courseKey={props.certification.dashedName}
theme='gray'
Expand Down Expand Up @@ -173,6 +206,16 @@ const CertificationDetailsSidebar: FC<CertificationDetailsSidebarProps> = (props
<EnrollCtaBtn certification={props.certification.dashedName} />
)}
</div>

{
isEditMode && (
<ModifySkillsModal
onClose={handleModyfSkillsModalClose}
onSave={handleModyfSkillsSave}
certification={props.certification}
/>
)
}
</StickySidebar>
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@
@extend .body-main;
margin-top: $sp-8;
}
.skills-section-header {
margin-top: $sp-8;
}
}

.description {
Expand Down
58 changes: 56 additions & 2 deletions src/apps/learn/src/course-details/CourseDetailsPage.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
/* eslint-disable complexity */
/* eslint-disable react/no-danger */
import { FC, ReactNode, useContext, useMemo } from 'react'
import { Dispatch, FC, ReactNode, SetStateAction, useContext, useMemo, useState } from 'react'
import { Params, useParams } from 'react-router-dom'
import classNames from 'classnames'

import {
Breadcrumb,
Expand All @@ -10,14 +12,17 @@ import {
LoadingSpinner,
} from '~/libs/ui'
import { textFormatGetSafeString } from '~/libs/shared'
import { profileContext, ProfileContextData } from '~/libs/core'
import { profileContext, ProfileContextData, UserRole } from '~/libs/core'

import {
AllCertificationsProviderData,
CoursesProviderData,
CourseTitle,
EditSkillsBtn,
ModifySkillsModal,
PageTitle,
ResourceProviderData,
SkillTags,
TCACertificationProgressBox,
useGetCertification,
useGetCourses,
Expand All @@ -44,6 +49,7 @@ const CourseDetailsPage: FC<{}> = () => {
const {
course,
ready: courseReady,
mutate: reloadCourse,
}: CoursesProviderData = useGetCourses(textFormatGetSafeString(routeParams.provider), routeParams.certification)

const {
Expand Down Expand Up @@ -79,6 +85,11 @@ const CourseDetailsPage: FC<{}> = () => {
routeParams.provider,
])

const canEdit: boolean = useMemo(() => !!profile?.roles?.includes(UserRole.tcaAdmin), [profile])

const [isEditMode, setIsEditMode]: [boolean, Dispatch<SetStateAction<boolean>>]
= useState<boolean>(false)

function getDescription(): ReactNode {

if (!course) {
Expand Down Expand Up @@ -178,6 +189,21 @@ const CourseDetailsPage: FC<{}> = () => {
)
}

function handleEditSkillsClick(): void {
setIsEditMode(true)
}

function handleModyfSkillsModalClose(): void {
setIsEditMode(false)
}

function handleModyfSkillsSave(): void {
setTimeout(() => {
setIsEditMode(false)
reloadCourse()
}, 1500)
}

return (
<ContentLayout>
<PageTitle>{course?.title ?? 'Course Details'}</PageTitle>
Expand All @@ -199,6 +225,24 @@ const CourseDetailsPage: FC<{}> = () => {
trackType={certificate?.certificationCategory.track}
/>

<div className={classNames('body-small-medium', styles['skills-section-header'])}>
<span>Skills Covered</span>
{
canEdit && (
<EditSkillsBtn
onClick={handleEditSkillsClick}
className={styles.editTCABtn}
/>
)
}
</div>
<SkillTags
skills={course.skills || []}
courseKey={course.id}
theme='gray'
expandCount={9}
/>

<TCACertificationProgressBox
userId={profile?.userId}
className={styles.tcaCertBanner}
Expand Down Expand Up @@ -229,6 +273,16 @@ const CourseDetailsPage: FC<{}> = () => {
/>
</div>
</div>

{
isEditMode && (
<ModifySkillsModal
onClose={handleModyfSkillsModalClose}
onSave={handleModyfSkillsSave}
course={course}
/>
)
}
</>
)}
</ContentLayout>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
@import "@libs/ui/styles/includes";

.editSkillsBtn {
padding: 0 !important;
padding-left: $sp-4 !important;
color: $black-100;

svg {
width: 16px;
height: 16px;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { FC } from 'react'
import classNames from 'classnames'

import { Button, IconOutline } from '~/libs/ui'

import styles from './EditSkillsBtn.module.scss'

interface EditSkillsBtnProps {
className?: string
onClick: () => void
}

const EditSkillsBtn: FC<EditSkillsBtnProps> = (props: EditSkillsBtnProps) => (
<Button
icon={IconOutline.PencilIcon}
onClick={props.onClick}
className={classNames(styles.editSkillsBtn, props.className)}
size='md'
/>
)

export default EditSkillsBtn
1 change: 1 addition & 0 deletions src/apps/learn/src/lib/components/edit-skills-btn/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default as EditSkillsBtn } from './EditSkillsBtn'
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,6 @@ const HiringManagerView: FC<HiringManagerViewProps> = (props: HiringManagerViewP

<SkillTags
skills={props.certification?.skills ?? []}
emsiSkills={props.certification?.emsiSkills ?? []}
theme='gray'
label=''
expandCount={props.certification?.skills?.length ?? 0}
Expand Down
2 changes: 2 additions & 0 deletions src/apps/learn/src/lib/components/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@ export * from './course-outline'
export * from './course-title'
export * from './curriculum-summary'
export * from './dynamic-icons'
export * from './edit-skills-btn'
export * from './hiring-manager-view'
export * from './learn-breadcrumb-provider'
export * from './modify-skills-modal'
export * from './page-title'
export * from './providers-logo-list'
export * from './skill'
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
@import '@libs/ui/styles/includes';

.container {
display: flex;
flex-direction: column;

:global(.body-main-bold) {
font-size: 20px;
margin-bottom: $sp-2;
}

.skillPicker {
margin-top: $sp-4;
}
}

.modalButtons {
display: flex;
justify-content: space-between;
width: 100%;
}

.skillsModal {
@include gtemd {
overflow: visible !important;
}
}

.skillsModalBody {
overflow: visible !important;
}
Loading