Skip to content

Commit

Permalink
Merge branch 'main' into feat/user-info
Browse files Browse the repository at this point in the history
Signed-off-by: neil <[email protected]>
  • Loading branch information
nanzm committed May 18, 2023
2 parents 35e7408 + 87fd15b commit a8fc327
Show file tree
Hide file tree
Showing 8 changed files with 1,392 additions and 1,208 deletions.
9 changes: 9 additions & 0 deletions i18n/en/code.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,15 @@
"header.submit_your_project": {
"message": "Submit your project"
},
"header.signin": {
"message": "Signin"
},
"header.profile_setting": {
"message": "Account Settings"
},
"header.signout": {
"message": "Signout"
},
"community.slack": {
"message": "Slack"
},
Expand Down
9 changes: 9 additions & 0 deletions i18n/zh/code.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,15 @@
"header.submit_your_project": {
"message": "提交项目"
},
"header.signin": {
"message": "登录"
},
"header.profile_setting": {
"message": "账号设置"
},
"header.signout": {
"message": "退出"
},
"community.slack": {
"message": "Slack"
},
Expand Down
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@
"@mdx-js/react": "^1.6.22",
"classnames": "^2.3.2",
"clsx": "^1.2.1",
"js-cookie": "^3.0.1",
"graphql": "^16.6.0",
"graphql-request": "^6.0.0",
"js-cookie": "^3.0.5",
"prism-react-renderer": "^1.3.5",
"react": "^17.0.2",
"react-dom": "^17.0.2",
Expand Down
64 changes: 64 additions & 0 deletions src/common/api/user.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import { GraphQLClient, gql } from 'graphql-request';

const endpoint = '/api/graphql';
const graphQLClient = new GraphQLClient(endpoint);

export async function fetchUserInfo() {
const query = gql`
query userinfo {
currentUser {
id
name
email
emailVerified
loginBinds {
account
avatarUrl
nickname
provider
}
}
}
`;

return await graphQLClient.request(query);
}

export async function signOut() {
const query = gql`
mutation signOut {
signOut
}
`;
return await graphQLClient.request(query);
}

export function findSpecifyProvider({
loginBinds,
provider,
}: {
loginBinds?: any[];
provider?: string;
}) {
let providerUser;

if (provider && loginBinds && loginBinds.length > 1) {
providerUser = loginBinds?.find(
(bindInfo) => bindInfo.provider === provider
);
} else {
providerUser = loginBinds?.[0];
}

if (providerUser) {
providerUser = {
...providerUser,
// todo Let the backend modify
// The naming of the returned fields in the interface data is reversed.
account: providerUser?.nickname,
nickname: providerUser?.account,
};
}

return providerUser || null;
}
9 changes: 9 additions & 0 deletions src/common/cookie.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import jsCookie from 'js-cookie';

export const cookieKeys = {
AUTH_PROVIDER: 'auth.provider',
};

export const getAuthProvider = () => {
return jsCookie.get(cookieKeys.AUTH_PROVIDER);
};
79 changes: 79 additions & 0 deletions src/components/Header/User.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import React, { useState } from 'react';
import Translate from '@docusaurus/Translate';
import { AiOutlineUser } from 'react-icons/ai';
import { MdOutlineLogout } from 'react-icons/md';
import {
fetchUserInfo,
signOut,
findSpecifyProvider,
} from '../../common/api/user';
import { getAuthProvider } from '../../common/cookie';

const User = () => {
const provider = getAuthProvider() || 'github';
const [user, setUser] = useState(null);

const info = findSpecifyProvider({
loginBinds: user?.currentUser?.loginBinds,
provider,
});

console.log(provider);
console.log(info);

React.useEffect(() => {
fetchUserInfo().then((data: any) => {
if (data && data.currentUser) {
setUser(data);
}
});
}, []);

if (!user) {
return (
<a className={'ml-6 font-medium text-white'} href="/auth/signin">
<Translate id={'header.signin'} />
</a>
);
}

return (
<div className="group relative flex h-full items-center pl-6 transition">
<div className="flex h-[32px] cursor-pointer items-center justify-center overflow-hidden rounded-full group-hover:bg-[#333333]">
<img src={info.avatarUrl!} width={32} height={32} alt="" />
</div>

<div className="absolute top-[100%] -right-4 z-dropdown hidden w-auto group-hover:block">
<div className="mt-[2px] bg-black/90 text-white">
{/*<Link href="/settings/subscribe">*/}
{/* <a className="flex cursor-pointer border-b border-white/20 py-4 pl-6 text-center last:border-b-0 hover:bg-[#333333]">*/}
{/* {t('common:subscribe')}*/}
{/* </a>*/}
{/*</Link>*/}

<a
href="/settings/profile"
className="flex cursor-pointer items-center whitespace-nowrap border-b border-white/20 py-4 px-6 text-center last:border-b-0 hover:bg-[#333333]"
>
<AiOutlineUser className="mr-2 text-base" />
<Translate id={'header.profile_setting'} />
</a>

<div
className="flex cursor-pointer items-center whitespace-nowrap border-b border-white/20 py-4 pl-6 text-center last:border-b-0 hover:bg-[#333333]"
onClick={() => {
signOut().then(() => {
window.location.href = '/auth/signin';
});
}}
>
<MdOutlineLogout className="mr-2 text-base" />
<Translate id={'header.signout'} />
</div>
</div>
</div>
</div>
);
};

export default User;
47 changes: 16 additions & 31 deletions src/components/Header/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import SubmitYouProject from './SubmitYouProject';
import MobileHeader from './MobileHeader';
import CommunityDropdown from './CommunityDropdown';
import ChangeLanguage from './ChangeLanguage';
import User from './User';

import LogoGitee from '../svgs/gitee-red.svg';
import LogoGithub from '../svgs/github.svg';
Expand All @@ -29,48 +30,32 @@ const Header: React.FC<{
<Logo color="white" />
</a>

<a href="/explore">
<span className={'mx-6 px-2.5 font-medium text-white'}>
<Translate id={'header.explore'} />
</span>
<a href="/explore" className={'mx-6 px-2.5 font-medium text-white'}>
<Translate id={'header.explore'} />
</a>

<Link href="/dimensions-define">
<span className={'mx-6 px-2.5 font-medium text-white'}>
<Translate id={'header.metrics_models'} />
</span>
<Link
href="/dimensions-define"
className={'mx-6 px-2.5 font-medium text-white'}
>
<Translate id={'header.metrics_models'} />
</Link>

<CommunityDropdown />

<a href="/about">
<span className={'mx-6 px-2.5 font-medium text-white'}>
<Translate id={'header.about'} />
</span>
<a href="/lab" className={'mx-6 px-2.5 font-medium text-white'}>
Lab
</a>

<a href="/about" className={'mx-6 px-2.5 font-medium text-white'}>
<Translate id={'header.about'} />
</a>
</div>

<div className="flex h-full cursor-pointer items-center">
<div className="mx-5">
<Link
href="https://gitee.com/oss-compass"
target="_blank"
rel="noopener noreferrer"
>
<LogoGitee />
</Link>
</div>
<div className="mx-5 cursor-pointer">
<Link
href="https://github.com/oss-compass"
target="_blank"
rel="noopener noreferrer"
>
<LogoGithub />
</Link>
</div>
<div className="flex h-full items-center">
<ChangeLanguage />
<SubmitYouProject />
<User />
</div>
</div>
</div>
Expand Down
Loading

0 comments on commit a8fc327

Please sign in to comment.