2018-10-04 21:27:02 -07:00
|
|
|
|
import { TeamMember } from 'types';
|
2018-09-27 13:39:37 -07:00
|
|
|
|
import { socialAccountsToUrls, socialUrlsToAccounts } from 'utils/social';
|
|
|
|
|
|
|
|
|
|
export function formatTeamMemberForPost(user: TeamMember) {
|
|
|
|
|
return {
|
|
|
|
|
displayName: user.name,
|
|
|
|
|
title: user.title,
|
|
|
|
|
accountAddress: user.ethAddress,
|
|
|
|
|
emailAddress: user.emailAddress,
|
2018-10-30 07:40:21 -07:00
|
|
|
|
avatar: user.avatarUrl ? { link: user.avatarUrl } : {},
|
2018-09-27 13:39:37 -07:00
|
|
|
|
socialMedias: socialAccountsToUrls(user.socialAccounts).map(url => ({
|
|
|
|
|
link: url,
|
|
|
|
|
})),
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function formatTeamMemberFromGet(user: any): TeamMember {
|
|
|
|
|
return {
|
|
|
|
|
name: user.displayName,
|
|
|
|
|
title: user.title,
|
|
|
|
|
ethAddress: user.accountAddress,
|
|
|
|
|
emailAddress: user.emailAddress,
|
2018-10-01 16:22:56 -07:00
|
|
|
|
avatarUrl: user.avatar && user.avatar.imageUrl,
|
2018-09-27 13:39:37 -07:00
|
|
|
|
socialAccounts: socialUrlsToAccounts(
|
|
|
|
|
user.socialMedias.map((sm: any) => sm.socialMediaLink),
|
|
|
|
|
),
|
|
|
|
|
};
|
|
|
|
|
}
|
2018-11-07 09:33:19 -08:00
|
|
|
|
|
|
|
|
|
// TODO: i18n on case-by-case basis
|
|
|
|
|
export function generateProposalUrl(id: number, title: string) {
|
|
|
|
|
const slug = title
|
|
|
|
|
.toLowerCase()
|
|
|
|
|
.replace(/[\s_]+/g, '-')
|
|
|
|
|
.replace(/[’'"]+/g, '')
|
|
|
|
|
.replace(/[^\w\-]+/g, '-')
|
|
|
|
|
.replace(/\-{2,}/g, '-')
|
|
|
|
|
.replace(/^\-*|\-*$/g, '');
|
|
|
|
|
return `${id}-${slug}`;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function extractProposalIdFromUrl(slug: string) {
|
|
|
|
|
const proposalId = parseInt(slug, 10);
|
|
|
|
|
if (isNaN(proposalId)) {
|
|
|
|
|
console.error('extractProposalIdFromUrl could not find id in : ' + slug);
|
|
|
|
|
}
|
|
|
|
|
return proposalId;
|
|
|
|
|
}
|