Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
d9479ba
TAL-34 - improve search results cards for talent-search
vas3a Jul 31, 2023
fcb5576
TAL-37 - move how skills work modal to shared library; show it in tal…
vas3a Jul 31, 2023
418698d
Merge pull request #863 from topcoder-platform/TAL-37_search-cards-vi…
vas3a Aug 4, 2023
b9363f3
TAL-14 - remove the admin restriction for the talent search app
vas3a Aug 4, 2023
b7be6ea
Merge pull request #864 from topcoder-platform/TAL-14_remove-admin-re…
vas3a Aug 4, 2023
858d5e7
TAL-18 - add notification message for missing profile in talent searc…
vas3a Aug 4, 2023
054662d
Merge pull request #865 from topcoder-platform/TAL-18_missing-profile
vas3a Aug 4, 2023
53bf41d
TAL-10 - redirect to talent search from profiles app
vas3a Aug 4, 2023
9f80209
Merge pull request #866 from topcoder-platform/TAL-10_redirect-missin…
vas3a Aug 4, 2023
477f553
fix absolute url root for talent-search
vas3a Aug 4, 2023
d467d9e
Merge pull request #867 from topcoder-platform/TAL-10_redirect-missin…
vas3a Aug 4, 2023
d28b17f
update talent-search redirect
vas3a Aug 4, 2023
b1d841c
Merge pull request #868 from topcoder-platform/TAL-10_redirect-missin…
vas3a Aug 4, 2023
674621f
MP-334 omit audit fields on profile update
kkartunov Aug 7, 2023
2a0b09c
Merge pull request #869 from topcoder-platform/MP-334
kkartunov Aug 7, 2023
f1096de
MP-339 support www links
kkartunov Aug 7, 2023
186a8eb
Merge pull request #870 from topcoder-platform/MP-339
kkartunov Aug 7, 2023
de6c372
MP-340 show handle if pref
kkartunov Aug 7, 2023
8b15eec
Merge pull request #871 from topcoder-platform/MP-340
kkartunov Aug 7, 2023
60d005a
TAL-37 - limit shown skill pills to 3 rows
vas3a Aug 7, 2023
628fb13
Merge pull request #872 from topcoder-platform/TAL-37_limit-skill-pills
vas3a Aug 7, 2023
8f93d4a
Fix useFetchTalentMatches: reset page number when updating skills
vas3a Aug 7, 2023
be24db2
Merge pull request #873 from topcoder-platform/fix_use-fetch-talent-m…
vas3a Aug 7, 2023
b8af7c3
TAL-39 Talent search initial mobile work
vas3a Aug 7, 2023
3f5048f
TAL-32 start hiting intake form
kkartunov Aug 8, 2023
c798bd9
Merge pull request #874 from topcoder-platform/TAL-32
kkartunov Aug 8, 2023
31859ff
Talent-search intake form
vas3a Aug 8, 2023
93cbd48
fix phone validator, fix modal rendering for talent search intake
vas3a Aug 8, 2023
d6e8f04
Merge pull request #875 from topcoder-platform/talent-search-intake-form
vas3a Aug 8, 2023
92cf890
TAL-10 - redirect profiles to talent search when not logged in and no…
vas3a Aug 8, 2023
28f77fe
Merge pull request #876 from topcoder-platform/TAL-10_redirect-profil…
vas3a Aug 8, 2023
4c3b62d
TAL-40 - fix no skill search for talent search
vas3a Aug 8, 2023
38c8ca4
Merge pull request #877 from topcoder-platform/TAL-40_fix-no-skill-se…
vas3a Aug 8, 2023
fde13ce
TAL-9 - fix success message for intake modal
vas3a Aug 9, 2023
f5cc8bc
Merge pull request #878 from topcoder-platform/TAL-9_fix-success-message
vas3a Aug 9, 2023
b961385
TAL-40 - limit max number of skills when doing talent search
vas3a Aug 9, 2023
23e28e4
Merge pull request #879 from topcoder-platform/TAL-40_limit-skill-search
vas3a Aug 9, 2023
54b9df7
Merge branch 'dev' of github.com:topcoder-platform/platform-ui into T…
vas3a Aug 9, 2023
d77760c
TAL-39 - talent search results page mobile
vas3a Aug 9, 2023
36bbb0f
Merge pull request #880 from topcoder-platform/TAL-39_talent-search-m…
vas3a Aug 9, 2023
80eb485
TAL-39 - mobile fixes
vas3a Aug 9, 2023
4700d2c
Merge pull request #881 from topcoder-platform/TAL-39_talent-search-m…
vas3a Aug 9, 2023
f6a17d5
TAL-37 - update skills wrap on talent card
vas3a Aug 9, 2023
953dab5
Merge pull request #882 from topcoder-platform/TAL-37_skills-wrap
vas3a Aug 9, 2023
be4c00c
MP-344 - hide social links for public member profile
vas3a Aug 10, 2023
7392285
TAL-44 - only show last name initial for talent search results card
vas3a Aug 10, 2023
2a384c3
MP-343 - only show last name initial for profile
vas3a Aug 10, 2023
f90fa64
Merge pull request #883 from topcoder-platform/profile-updates
vas3a Aug 10, 2023
5b6c8bd
MP-337 - fix input select focus after choosing option
vas3a Aug 10, 2023
bb9ef81
Merge pull request #884 from topcoder-platform/MP-337_focus-tab
vas3a Aug 10, 2023
50136f9
Tweak how skills work text
jmgasper Aug 11, 2023
6c1b705
Missed one
jmgasper Aug 11, 2023
00bc9e3
Merge pull request #886 from topcoder-platform/TAL-48
jmgasper Aug 11, 2023
6e9de3d
TAL-45 - add message when there are no results in talent search
vas3a Aug 11, 2023
2f08326
TAL-47 - fix search input & responsiveness
vas3a Aug 11, 2023
124e359
Merge pull request #887 from topcoder-platform/talent-search-fixes
vas3a Aug 11, 2023
cc66746
TAL-50 - update address in talent search results card
vas3a Aug 11, 2023
9af0f30
Merge pull request #888 from topcoder-platform/talent-search-fixes
vas3a Aug 11, 2023
9530a63
MP-347 - update profile completeness
vas3a Aug 11, 2023
6867791
Merge pull request #889 from topcoder-platform/talent-search-fixes
vas3a Aug 11, 2023
4dd4ea2
TAL-51 - show talent badges
vas3a Aug 11, 2023
9ecd8fc
Merge pull request #890 from topcoder-platform/talent-search-fixes
vas3a Aug 11, 2023
1639b56
fix lint issue
vas3a Aug 11, 2023
0810257
Merge pull request #891 from topcoder-platform/talent-search-fixes
vas3a Aug 11, 2023
daa8a76
TAL-53 - handle display name in talent search results card
vas3a Aug 11, 2023
2314f0b
Merge pull request #892 from topcoder-platform/TAL-53_display-name
vas3a Aug 11, 2023
c2c4c96
typo fix for HowSkillsWork Modal
vas3a Aug 11, 2023
4fab0d2
Merge pull request #893 from topcoder-platform/typo-fix
vas3a Aug 11, 2023
a8f3975
Add react-segment for analytics
jmgasper Aug 11, 2023
66b3356
Add segment analytics
jmgasper Aug 11, 2023
290421f
MP-346 add user identify call as well
kkartunov Aug 12, 2023
67ffaae
Merge pull request #894 from topcoder-platform/segment_analytics
jmgasper Aug 12, 2023
9853457
MP-346 fix broken build
kkartunov Aug 13, 2023
5ee8195
Merge pull request #896 from topcoder-platform/segment_analytics
kkartunov Aug 13, 2023
1572d9a
TAL-52 - Update uninav integration: for profiles we need to redirect …
vas3a Aug 14, 2023
e6c98e3
Merge pull request #897 from topcoder-platform/TAL-52_logout-url-for-…
vas3a Aug 14, 2023
af0f858
TAL-46 - add a max limit reached message for skills search
vas3a Aug 14, 2023
445a2b1
Merge pull request #898 from topcoder-platform/TAL-46_add-max-limit-m…
vas3a Aug 14, 2023
2a3e92e
TalentSearch: add `includeStats=false`
vas3a Aug 14, 2023
22d3be9
Merge pull request #899 from topcoder-platform/update-search-api
vas3a Aug 14, 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
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
"@datadog/browser-logs": "^4.21.2",
"@heroicons/react": "^1.0.6",
"@popperjs/core": "^2.11.8",
"@segment/analytics-next": "^1.53.3",
"@sprig-technologies/sprig-browser": "^2.20.1",
"@storybook/addon-actions": "^7.0.5",
"@storybook/react": "^7.0.5",
Expand Down Expand Up @@ -163,7 +164,6 @@
"@types/redux-logger": "^3.0.9",
"@types/redux-promise": "^0.5.29",
"@types/sanitize-html": "^2.6.2",
"@types/segment-analytics": "^0.0.34",
"@types/systemjs": "^6.1.1",
"@types/uuid": "^8.3.4",
"@typescript-eslint/eslint-plugin": "^5.30.6",
Expand Down
6 changes: 6 additions & 0 deletions src/apps/platform/src/PlatformApp.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
import { FC } from 'react'
import { toast, ToastContainer } from 'react-toastify'

import { AnalyticsBrowser } from '@segment/analytics-next'
import { useViewportUnitsFix } from '~/libs/shared'
import { EnvironmentConfig } from '~/config'

import { AppFooter } from './components/app-footer'
import { AppHeader } from './components/app-header'
import { Providers } from './providers'
import { PlatformRouter } from './platform-router'

if (EnvironmentConfig.SEGMENT_ANALYTICS_KEY) {
window.tcSegment = AnalyticsBrowser.load({ writeKey: EnvironmentConfig.SEGMENT_ANALYTICS_KEY }) as any
}

const PlatformApp: FC<{}> = () => {
useViewportUnitsFix()

Expand Down
8 changes: 6 additions & 2 deletions src/apps/platform/src/components/app-header/AppHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@ import classNames from 'classnames'
import { EnvironmentConfig, PageSubheaderPortalId } from '~/config'
import {
authUrlLogin,
authUrlLogout,
authUrlSignup,
profileContext,
ProfileContextData,
routerContext,
RouterContextData,
} from '~/libs/core'
import { ConfigContextValue, useConfigContext } from '~/libs/shared'

import UniNavSnippet from './universal-nav-snippet'

Expand All @@ -39,6 +39,7 @@ const AppHeader: FC<{}> = () => {

const { activeToolName, activeToolRoute }: RouterContextData = useContext(routerContext)
const { profile, initialized: profileReady }: ProfileContextData = useContext(profileContext)
const { logoutUrl }: ConfigContextValue = useConfigContext()
const [ready, setReady]: [boolean, Dispatch<SetStateAction<boolean>>] = useState<boolean>(false)
const headerInit: MutableRefObject<boolean> = useRef(false)
const navElementId: string = PageSubheaderPortalId
Expand Down Expand Up @@ -95,7 +96,7 @@ const AppHeader: FC<{}> = () => {
},
onReady() { setReady(true) },
signIn() { window.location.href = authUrlLogin() },
signOut() { window.location.href = authUrlLogout },
signOut() { window.location.href = logoutUrl },
signUp() { window.location.href = authUrlSignup() },
toolName: activeToolName,
toolRoot: activeToolRoute,
Expand All @@ -110,6 +111,7 @@ const AppHeader: FC<{}> = () => {
navigationHandler,
userInfo,
profileReady,
logoutUrl,
])

// update uni-nav's tool details
Expand Down Expand Up @@ -141,12 +143,14 @@ const AppHeader: FC<{}> = () => {
navElementId,
{
...userInfo,
signOut() { window.location.href = logoutUrl },
},
)
}, [
profileReady,
userInfo,
navElementId,
logoutUrl,
])

return (
Expand Down
15 changes: 9 additions & 6 deletions src/apps/platform/src/providers/Providers.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { FC, ReactNode } from 'react'

import { ProfileProvider } from '~/libs/core'
import { authUrlLogout, ProfileProvider } from '~/libs/core'
import { ConfigContextProvider } from '~/libs/shared'

import { PlatformRouterProvider } from './platform-router.provider'

Expand All @@ -9,11 +10,13 @@ interface ProvidersProps {
}

const Providers: FC<ProvidersProps> = props => (
<ProfileProvider>
<PlatformRouterProvider>
{props.children}
</PlatformRouterProvider>
</ProfileProvider>
<ConfigContextProvider logoutUrl={authUrlLogout}>
<ProfileProvider>
<PlatformRouterProvider>
{props.children}
</PlatformRouterProvider>
</ProfileProvider>
</ConfigContextProvider>
)

export default Providers
13 changes: 9 additions & 4 deletions src/apps/profiles/src/ProfilesApp.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
import { FC, useContext } from 'react'
import { FC, useContext, useEffect } from 'react'
import { Outlet, Routes } from 'react-router-dom'

import { routerContext, RouterContextData } from '~/libs/core'
import { SharedSwrConfig } from '~/libs/shared'
import { authUrlLogin, authUrlLogoutFn, routerContext, RouterContextData } from '~/libs/core'
import { ConfigContextValue, SharedSwrConfig, useConfigContext } from '~/libs/shared'

import { toolTitle } from './profiles.routes'
import { absoluteRootRoute, toolTitle } from './profiles.routes'

const ProfilesApp: FC<{}> = () => {
const { setLogoutUrl }: ConfigContextValue = useConfigContext()
const { getChildRoutes }: RouterContextData = useContext(routerContext)

useEffect(() => {
setLogoutUrl(authUrlLogoutFn(authUrlLogin(absoluteRootRoute)))
}, [setLogoutUrl])

return (
<SharedSwrConfig>
<Outlet />
Expand Down
14 changes: 13 additions & 1 deletion src/apps/profiles/src/lib/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,23 @@ export function subTrackLabelToHumanName(label: string): string {
}

export function isValidURL(urlToValidate: string): boolean {
const pattern = new RegExp(
'^(https?:\\/\\/)?' // protocol
+ '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' // domain name
+ '((\\d{1,3}\\.){3}\\d{1,3}))' // OR IP (v4) address
+ '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' // port and path
+ '(\\?[;&a-z\\d%_.~+=-]*)?' // query string
+ '(\\#[-a-z\\d_]*)?$', // fragment locator
'i',
)

let url: URL
try {
url = new URL(urlToValidate)
} catch (e) {
return false
// try to validate with regex
// as sometimes new URL is wonky with some urls
return pattern.test(urlToValidate)
}

if (!url.protocol || !url.hostname) {
Expand Down
11 changes: 1 addition & 10 deletions src/apps/profiles/src/member-badges/MemberBadgesPage.module.scss
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,7 @@

.container {
.backLink {
text-transform: uppercase;
color: $turq-160;
font-weight: $font-weight-bold;
margin: $sp-6 0;
display: flex;
align-items: center;

svg {
margin-right: $sp-2;
}
}

.badgesWrapper {
Expand Down Expand Up @@ -67,4 +58,4 @@
}
}
}
}
}
36 changes: 17 additions & 19 deletions src/apps/profiles/src/member-badges/MemberBadgesPage.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
import { Dispatch, FC, SetStateAction, useCallback, useEffect, useState } from 'react'
import { Link, Params, useParams } from 'react-router-dom'
import { Params, useNavigate, useParams } from 'react-router-dom'
import { bind } from 'lodash'

import { profileGetPublicAsync, useMemberBadges, UserBadge, UserBadgesResponse, UserProfile } from '~/libs/core'
import { ContentLayout, LoadingSpinner } from '~/libs/ui'
import { Button, ContentLayout, IconSolid, LoadingSpinner } from '~/libs/ui'

import { MemberBadgeModal } from '../components'

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

const MemberBadgesPage: FC<{}> = () => {
const routeParams: Params<string> = useParams()
const navigate = useNavigate()

const [profile, setProfile]: [
UserProfile | undefined,
Expand All @@ -32,6 +33,10 @@ const MemberBadgesPage: FC<{}> = () => {
setSelectedBadge(badge)
}, [])

const handleBackBtn = useCallback(() => {
navigate(-1)
}, [navigate])

useEffect(() => {
if (routeParams.memberHandle) {
profileGetPublicAsync(routeParams.memberHandle)
Expand All @@ -55,24 +60,17 @@ const MemberBadgesPage: FC<{}> = () => {
<ContentLayout
outerClass={styles.container}
>
<Link to={`/${profile?.handle}`} className={styles.backLink}>
<svg
xmlns='http://www.w3.org/2000/svg'
width='14'
height='12'
fill='none'
viewBox='0 0 14 12'
<div className={styles.backLink}>
<Button
link
size='lg'
iconToLeft
icon={IconSolid.ArrowLeftIcon}
onClick={handleBackBtn}
>
<path
fill='#137D60'
fillRule='evenodd'
// eslint-disable-next-line max-len
d='M6.766 11.366a.8.8 0 01-1.132 0l-4.8-4.8a.8.8 0 010-1.132l4.8-4.8a.8.8 0 111.132 1.132L3.33 5.2h9.27a.8.8 0 010 1.6H3.33l3.435 3.434a.8.8 0 010 1.132z'
clipRule='evenodd'
/>
</svg>
Return to Profile
</Link>
Return to profile
</Button>
</div>

<div className={styles.badgesWrapper}>
<h3>COMMUNITY AWARDS & HONORS</h3>
Expand Down
8 changes: 7 additions & 1 deletion src/apps/profiles/src/member-profile/MemberProfilePage.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { Dispatch, FC, SetStateAction, useCallback, useContext, useEffect, useState } from 'react'
import { Params, useNavigate, useParams } from 'react-router-dom'
import { AxiosError } from 'axios'

import { profileContext, ProfileContextData, profileGetPublicAsync, UserProfile } from '~/libs/core'
import { TALENT_SEARCH_PATHS } from '~/apps/talent-search'
import { LoadingSpinner } from '~/libs/ui'

import { notifyUniNavi, triggerSprigSurvey } from '../lib'
Expand Down Expand Up @@ -34,7 +36,11 @@ const MemberProfilePage: FC<{}> = () => {
setProfile({ ...userProfile } as UserProfile)
setProfileReady(true)
})
// TODO: NOT FOUND PAGE redirect/dispaly
.catch((e: AxiosError) => {
if (e.code === AxiosError.ERR_BAD_REQUEST && e.response?.status === 404) {
window.location.href = `${TALENT_SEARCH_PATHS.absoluteUrl}?memberNotFound`
}
})
}
}, [routeParams.memberHandle])

Expand Down
13 changes: 11 additions & 2 deletions src/apps/profiles/src/member-profile/about-me/AboutMe.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { useSearchParams } from 'react-router-dom'
import { KeyedMutator } from 'swr'
import classNames from 'classnames'

import { useMemberTraits, UserProfile, UserTraitIds, UserTraits } from '~/libs/core'
import { useMemberTraits, UserProfile, UserTrait, UserTraitIds, UserTraits } from '~/libs/core'

import { AddButton, EditMemberPropertyBtn, EmptySection } from '../../components'
import { EDIT_MODE_QUERY_PARAM, profileEditModes } from '../../config'
Expand Down Expand Up @@ -38,6 +38,11 @@ const AboutMe: FC<AboutMeProps> = (props: AboutMeProps) => {
props.profile && !props.profile.description
), [props.profile])

const namesAndHandleAppearanceData: UserTrait | undefined
= useMemo(() => memberPersonalizationTraits?.[0]?.traits?.data?.find(
(trait: UserTrait) => trait.namesAndHandleAppearance,
), [memberPersonalizationTraits])

useEffect(() => {
if (props.authProfile && editMode === profileEditModes.aboutMe) {
setIsEditMode(true)
Expand Down Expand Up @@ -70,7 +75,11 @@ const AboutMe: FC<AboutMeProps> = (props: AboutMeProps) => {
{' '}
I&apos;m
{' '}
{props.profile?.firstName || props.profile?.handle}
{
namesAndHandleAppearanceData?.namesAndHandleAppearance === 'handleOnly'
? props.profile?.handle
: props.profile?.firstName
}
</p>

<MemberRatingCard profile={props.profile} />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,22 @@ const LinkForm: FC<LinkFormProps> = props => {
return
}

props.onSave({
name: selectedLinkType,
url: trim(selectedLinkURL) || '',
})
let absoluteURL = trim(selectedLinkURL) || ''

if (absoluteURL.indexOf('://') > 0 || absoluteURL.indexOf('//') === 0) {

props.onSave({
name: selectedLinkType,
url: absoluteURL,
})
} else {
absoluteURL = `https://${absoluteURL}`

props.onSave({
name: selectedLinkType,
url: absoluteURL,
})
}
}

function handleDiscardClick(): void {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Dispatch, FC, SetStateAction, useMemo, useState } from 'react'
import { bind, trim } from 'lodash'
import { bind, omit, trim } from 'lodash'
import { toast } from 'react-toastify'

import { BaseModal, Button, InputSelect, InputText } from '~/libs/ui'
Expand All @@ -18,6 +18,10 @@ interface ModifyLocationModalProps {
profile: UserProfile
}

const OMIT_ADDRESS_KEYS_ON_UPDATE = [
'createdAt', 'createdBy', 'updatedAt', 'updatedBy',
]

const ModifyLocationModal: FC<ModifyLocationModalProps> = (props: ModifyLocationModalProps) => {
const countryLookup: CountryLookup[] | undefined
= useCountryLookup()
Expand Down Expand Up @@ -59,7 +63,7 @@ const ModifyLocationModal: FC<ModifyLocationModalProps> = (props: ModifyLocation
props.profile.handle,
{
addresses: [{
...props.profile.addresses ? props.profile.addresses[0] : {},
...props.profile.addresses ? omit(props.profile.addresses[0], OMIT_ADDRESS_KEYS_ON_UPDATE) : {},
city: trim(formValues.city),
}],
competitionCountryCode: formValues.country,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,9 @@ const ProfilePageLayout: FC<ProfilePageLayoutProps> = (props: ProfilePageLayoutP
refreshProfile={props.refreshProfile}
/>

<MemberLinks profile={props.profile} authProfile={props.authProfile} />
{props.profile.userId === props.authProfile?.userId && (
<MemberLinks profile={props.profile} authProfile={props.authProfile} />
)}
</div>
<div className={styles.profileInfoRight}>
{props.authProfile?.handle === props.profile.handle && (
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
@import "@libs/ui/styles/includes";

.successSubmit {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;

gap: $sp-2;

> svg {
color: $turq-160;
}
}
Loading