51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
![]() |
type Link = {
|
||
|
link: string
|
||
|
isPlaceholder: boolean
|
||
|
name?: string
|
||
|
}
|
||
|
|
||
|
const links: Link[] = [
|
||
|
{ link: 'https://facebook.com/', name: 'facebook', isPlaceholder: true },
|
||
|
{ link: 'https://linkedin.com/', name: 'linkedin', isPlaceholder: true },
|
||
|
{ link: 'https://vk.com/', name: 'vk', isPlaceholder: true },
|
||
|
{ link: 'https://instagram.com/', name: 'instagram', isPlaceholder: true },
|
||
|
{ link: 'https://t.me/', name: 'telegram', isPlaceholder: true }
|
||
|
]
|
||
|
|
||
|
const checkLink = (link: string, keyword: string): boolean => link.includes(keyword)
|
||
|
|
||
|
export const profileSocialLinks = (socialLinks: string[]): Link[] => {
|
||
|
const processedLinks: Link[] = []
|
||
|
let unmatchedLinks: string[] = [...socialLinks]
|
||
|
|
||
|
links.forEach((linkObj) => {
|
||
|
let linkMatched = false
|
||
|
|
||
|
socialLinks.forEach((serverLink) => {
|
||
|
if (checkLink(serverLink, new URL(linkObj.link).hostname.replace('www.', ''))) {
|
||
|
processedLinks.push({ ...linkObj, link: serverLink, isPlaceholder: false })
|
||
|
linkMatched = true
|
||
|
unmatchedLinks = unmatchedLinks.filter((unmatchedLink) => unmatchedLink !== serverLink)
|
||
|
}
|
||
|
})
|
||
|
|
||
|
if (!linkMatched) {
|
||
|
processedLinks.push({ ...linkObj, isPlaceholder: true })
|
||
|
}
|
||
|
})
|
||
|
|
||
|
unmatchedLinks.forEach((unmatchedLink) => {
|
||
|
processedLinks.push({ link: unmatchedLink, isPlaceholder: false })
|
||
|
})
|
||
|
|
||
|
return processedLinks.sort((a, b) => {
|
||
|
if (a.isPlaceholder && !b.isPlaceholder) {
|
||
|
return 1
|
||
|
} else if (!a.isPlaceholder && b.isPlaceholder) {
|
||
|
return -1
|
||
|
} else {
|
||
|
return 0
|
||
|
}
|
||
|
})
|
||
|
}
|