diff --git a/web/src/layout/contributor/index.tsx b/web/src/layout/contributor/index.tsx index 677379a..7cbb165 100644 --- a/web/src/layout/contributor/index.tsx +++ b/web/src/layout/contributor/index.tsx @@ -3,8 +3,10 @@ import { createSignal, JSXElement, Match, onCleanup, onMount, Show, Switch } fro import API from '../../api'; import clotributor from '../../assets/clotributor.png'; +import { useContributorsDataInfo } from '../../stores/contributorsData'; import { ContributionKind, Contributor } from '../../types'; import prettifyNumber from '../../utils/prettifyNumber'; +import resolveContributorId from '../../utils/resolveContributorId'; import updateMetaTags from '../../utils/updateMetaTags'; import ExternalLink from '../common/ExternalLink'; import Image from '../common/Image'; @@ -63,8 +65,11 @@ const ContributionKindIcon = (props: Props): JSXElement => { const ContributorCard = () => { const location = useLocation(); const params = useParams(); + const contributorsInfo = useContributorsDataInfo(); const [contributor, setContributor] = createSignal(); + const resolveId = (id: string): string => resolveContributorId(id, contributorsInfo()); + const getFirstContributionLink = () => { let url = `https://github.com/${contributor()!.first_contribution.owner}/${ contributor()!.first_contribution.repository @@ -96,7 +101,7 @@ const ContributorCard = () => { onMount(() => { if (contributor() === undefined) { - fecthContributorInfo(params.id); + fecthContributorInfo(resolveId(params.id)); } updateMetaTags(`${window.location.origin}${location.pathname}`); }); diff --git a/web/src/layout/search/index.tsx b/web/src/layout/search/index.tsx index a37ce62..6272fd8 100644 --- a/web/src/layout/search/index.tsx +++ b/web/src/layout/search/index.tsx @@ -7,6 +7,7 @@ import { useContributorsDataLoader, } from '../../stores/contributorsData'; import prettifyNumber from '../../utils/prettifyNumber'; +import resolveContributorId from '../../utils/resolveContributorId'; import updateMetaTags from '../../utils/updateMetaTags'; import HoverableItem from '../common/HoverableItem'; import Image from '../common/Image'; @@ -108,7 +109,7 @@ const Search = () => { cleanItemsSearch(); setValue(''); forceBlur(); - navigate(`/${contributorId}`, { + navigate(`/${resolveContributorId(contributorId, contributorsInfo())}`, { replace: false, scroll: true, // default }); diff --git a/web/src/utils/resolveContributorId.ts b/web/src/utils/resolveContributorId.ts new file mode 100644 index 0000000..6f09e94 --- /dev/null +++ b/web/src/utils/resolveContributorId.ts @@ -0,0 +1,12 @@ +import { UserInfo } from '../types'; + +const resolveContributorId = (id: string, info: UserInfo | null | undefined): string => { + if (info) { + const lower = id.toLowerCase(); + const canonical = Object.keys(info).find((k) => k.toLowerCase() === lower); + if (canonical) return canonical; + } + return id.toLowerCase(); +}; + +export default resolveContributorId;