Merge upstream changes.
This commit is contained in:
commit
708eaca511
|
@ -124,13 +124,18 @@ class SocialMediaSchema(ma.Schema):
|
||||||
model = SocialMedia
|
model = SocialMedia
|
||||||
# Fields to expose
|
# Fields to expose
|
||||||
fields = (
|
fields = (
|
||||||
|
"url",
|
||||||
"service",
|
"service",
|
||||||
"username",
|
"username",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
url = ma.Method("get_url")
|
||||||
service = ma.Method("get_service")
|
service = ma.Method("get_service")
|
||||||
username = ma.Method("get_username")
|
username = ma.Method("get_username")
|
||||||
|
|
||||||
|
def get_url(self, obj):
|
||||||
|
return obj.social_media_link
|
||||||
|
|
||||||
def get_service(self, obj):
|
def get_service(self, obj):
|
||||||
info = get_social_info_from_url(obj.social_media_link)
|
info = get_social_info_from_url(obj.social_media_link)
|
||||||
return info['service']
|
return info['service']
|
||||||
|
|
|
@ -41,13 +41,9 @@ def get_me():
|
||||||
@blueprint.route("/<user_identity>", methods=["GET"])
|
@blueprint.route("/<user_identity>", methods=["GET"])
|
||||||
@endpoint.api()
|
@endpoint.api()
|
||||||
def get_user(user_identity):
|
def get_user(user_identity):
|
||||||
print('get by ident')
|
|
||||||
user = User.get_by_identifier(email_address=user_identity, account_address=user_identity)
|
user = User.get_by_identifier(email_address=user_identity, account_address=user_identity)
|
||||||
print(user)
|
|
||||||
if user:
|
if user:
|
||||||
print('dumping')
|
|
||||||
result = user_schema.dump(user)
|
result = user_schema.dump(user)
|
||||||
print(result)
|
|
||||||
return result
|
return result
|
||||||
else:
|
else:
|
||||||
message = "User with account_address or user_identity matching {} not found".format(user_identity)
|
message = "User with account_address or user_identity matching {} not found".format(user_identity)
|
||||||
|
|
|
@ -15,5 +15,5 @@ def get_social_info_from_url(url: str):
|
||||||
if match:
|
if match:
|
||||||
return {
|
return {
|
||||||
'service': service,
|
'service': service,
|
||||||
'username': match.group(1),
|
'username': match.group(1)
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,9 @@ class TestAPI(BaseUserConfig):
|
||||||
|
|
||||||
users_json = users_get_resp.json
|
users_json = users_get_resp.json
|
||||||
self.assertEqual(users_json["avatar"]["imageUrl"], self.user.avatar.image_url)
|
self.assertEqual(users_json["avatar"]["imageUrl"], self.user.avatar.image_url)
|
||||||
self.assertEqual(users_json["socialMedias"][0]["socialMediaLink"], self.user.social_medias[0].social_media_link)
|
self.assertEqual(users_json["socialMedias"][0]["service"], 'GITHUB')
|
||||||
|
self.assertEqual(users_json["socialMedias"][0]["username"], 'groot')
|
||||||
|
self.assertEqual(users_json["socialMedias"][0]["link"], self.user.social_medias[0].social_media_link)
|
||||||
self.assertEqual(users_json["displayName"], self.user.display_name)
|
self.assertEqual(users_json["displayName"], self.user.display_name)
|
||||||
|
|
||||||
def test_get_single_user_by_account_address(self):
|
def test_get_single_user_by_account_address(self):
|
||||||
|
@ -54,7 +56,9 @@ class TestAPI(BaseUserConfig):
|
||||||
|
|
||||||
users_json = users_get_resp.json
|
users_json = users_get_resp.json
|
||||||
self.assertEqual(users_json["avatar"]["imageUrl"], self.user.avatar.image_url)
|
self.assertEqual(users_json["avatar"]["imageUrl"], self.user.avatar.image_url)
|
||||||
self.assertEqual(users_json["socialMedias"][0]["socialMediaLink"], self.user.social_medias[0].social_media_link)
|
self.assertEqual(users_json["socialMedias"][0]["service"], 'GITHUB')
|
||||||
|
self.assertEqual(users_json["socialMedias"][0]["username"], 'groot')
|
||||||
|
self.assertEqual(users_json["socialMedias"][0]["link"], self.user.social_medias[0].social_media_link)
|
||||||
self.assertEqual(users_json["displayName"], self.user.display_name)
|
self.assertEqual(users_json["displayName"], self.user.display_name)
|
||||||
|
|
||||||
def test_create_user_duplicate_400(self):
|
def test_create_user_duplicate_400(self):
|
||||||
|
|
|
@ -2,7 +2,7 @@ import React from 'react';
|
||||||
import lodash from 'lodash';
|
import lodash from 'lodash';
|
||||||
import axios from 'api/axios';
|
import axios from 'api/axios';
|
||||||
import { Input, Form, Col, Row, Button, Alert } from 'antd';
|
import { Input, Form, Col, Row, Button, Alert } from 'antd';
|
||||||
import { SOCIAL_INFO } from 'utils/social';
|
import { SOCIAL_INFO, socialMediaToUrl } from 'utils/social';
|
||||||
import { SOCIAL_SERVICE, User } from 'types';
|
import { SOCIAL_SERVICE, User } from 'types';
|
||||||
import { UserState } from 'modules/users/reducers';
|
import { UserState } from 'modules/users/reducers';
|
||||||
import { getCreateTeamMemberError } from 'modules/create/utils';
|
import { getCreateTeamMemberError } from 'modules/create/utils';
|
||||||
|
@ -218,6 +218,7 @@ export default class ProfileEdit extends React.PureComponent<Props, State> {
|
||||||
socialMedias.push({
|
socialMedias.push({
|
||||||
service,
|
service,
|
||||||
username: value,
|
username: value,
|
||||||
|
url: socialMediaToUrl(service, value),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ import { usersActions } from 'modules/users';
|
||||||
import { UserState } from 'modules/users/reducers';
|
import { UserState } from 'modules/users/reducers';
|
||||||
import ProfileEdit from './ProfileEdit';
|
import ProfileEdit from './ProfileEdit';
|
||||||
import UserAvatar from 'components/UserAvatar';
|
import UserAvatar from 'components/UserAvatar';
|
||||||
import { SOCIAL_INFO, socialMediaToUrl } from 'utils/social';
|
import { SOCIAL_INFO } from 'utils/social';
|
||||||
import ShortAddress from 'components/ShortAddress';
|
import ShortAddress from 'components/ShortAddress';
|
||||||
import './ProfileUser.less';
|
import './ProfileUser.less';
|
||||||
import { AppState } from 'store/reducers';
|
import { AppState } from 'store/reducers';
|
||||||
|
@ -97,7 +97,7 @@ class ProfileUser extends React.Component<Props> {
|
||||||
|
|
||||||
const Social = ({ socialMedia }: { socialMedia: SocialMedia }) => {
|
const Social = ({ socialMedia }: { socialMedia: SocialMedia }) => {
|
||||||
return (
|
return (
|
||||||
<a href={socialMediaToUrl(socialMedia)} target="_blank" rel="noopener nofollow">
|
<a href={socialMedia.url} target="_blank" rel="noopener nofollow">
|
||||||
<div className="ProfileUser-info-social-icon">
|
<div className="ProfileUser-info-social-icon">
|
||||||
{SOCIAL_INFO[socialMedia.service].icon}
|
{SOCIAL_INFO[socialMedia.service].icon}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -7,7 +7,7 @@ export function formatUserForPost(user: User) {
|
||||||
return {
|
return {
|
||||||
...user,
|
...user,
|
||||||
avatar: user.avatar ? user.avatar.imageUrl : null,
|
avatar: user.avatar ? user.avatar.imageUrl : null,
|
||||||
socialMedias: user.socialMedias.map(socialMediaToUrl),
|
socialMedias: user.socialMedias.map(sm => socialMediaToUrl(sm.service, sm.username)),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Icon } from 'antd';
|
import { Icon } from 'antd';
|
||||||
import keybaseIcon from 'static/images/keybase.svg';
|
import keybaseIcon from 'static/images/keybase.svg';
|
||||||
import { SOCIAL_SERVICE, SocialMedia, SocialInfo } from 'types';
|
import { SOCIAL_SERVICE, SocialInfo } from 'types';
|
||||||
|
|
||||||
const accountNameRegex = '([a-zA-Z0-9-_]*)';
|
const accountNameRegex = '([a-zA-Z0-9-_]*)';
|
||||||
export const SOCIAL_INFO: { [key in SOCIAL_SERVICE]: SocialInfo } = {
|
export const SOCIAL_INFO: { [key in SOCIAL_SERVICE]: SocialInfo } = {
|
||||||
|
@ -31,6 +31,6 @@ export const SOCIAL_INFO: { [key in SOCIAL_SERVICE]: SocialInfo } = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export function socialMediaToUrl(sm: SocialMedia): string {
|
export function socialMediaToUrl(service: SOCIAL_SERVICE, username: string): string {
|
||||||
return SOCIAL_INFO[sm.service].format.replace(accountNameRegex, sm.username);
|
return SOCIAL_INFO[service].format.replace(accountNameRegex, username);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ import React from 'react';
|
||||||
export type SocialAccountMap = Partial<{ [key in SOCIAL_SERVICE]: string }>;
|
export type SocialAccountMap = Partial<{ [key in SOCIAL_SERVICE]: string }>;
|
||||||
|
|
||||||
export interface SocialMedia {
|
export interface SocialMedia {
|
||||||
|
url: string;
|
||||||
service: SOCIAL_SERVICE;
|
service: SOCIAL_SERVICE;
|
||||||
username: string;
|
username: string;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue