Add Matrix social

This commit is contained in:
Ahmed Al-Taiar
2024-10-15 14:51:43 -04:00
parent 684d6f88c2
commit 77db153fe6
6 changed files with 32 additions and 6 deletions

View File

@ -0,0 +1,2 @@
-- AlterEnum
ALTER TYPE "Handle" ADD VALUE 'matrix';

View File

@ -25,6 +25,7 @@ enum Handle {
discord discord
twitch twitch
linkedin linkedin
matrix
github github
gitea gitea
forgejo forgejo

View File

@ -17,6 +17,7 @@ export const schema = gql`
discord discord
twitch twitch
linkedin linkedin
matrix
github github
gitea gitea
forgejo forgejo

View File

@ -6,6 +6,7 @@ import {
SiTiktokHex, SiTiktokHex,
SiYoutubeHex, SiYoutubeHex,
SiLinkedinHex, SiLinkedinHex,
SiMatrixHex,
SiGithubHex, SiGithubHex,
SiGiteaHex, SiGiteaHex,
SiLeetcodeHex, SiLeetcodeHex,
@ -112,6 +113,10 @@ export const theme = {
light: SiLinkedinHex, light: SiLinkedinHex,
dark: SiLinkedinHex, dark: SiLinkedinHex,
}, },
matrix: {
light: SiMatrixHex,
dark: invertColor(SiMatrixHex),
},
github: { github: {
light: SiGithubHex, light: SiGithubHex,
dark: invertColor(SiGithubHex), dark: invertColor(SiGithubHex),

View File

@ -38,6 +38,7 @@ const types: FormSocial['type'][] = [
'discord', 'discord',
'twitch', 'twitch',
'linkedin', 'linkedin',
'matrix',
'github', 'github',
'gitea', 'gitea',
'forgejo', 'forgejo',
@ -52,6 +53,15 @@ const types: FormSocial['type'][] = [
const urlHandles: FormSocial['type'][] = ['custom', 'gitea', 'forgejo'] const urlHandles: FormSocial['type'][] = ['custom', 'gitea', 'forgejo']
const SocialForm = (props: SocialFormProps) => { const SocialForm = (props: SocialFormProps) => {
const emailRegex =
/^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-]+)(\.[a-zA-Z]{2,5}){1,2}$/
const phoneRegex = /^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$/
const urlRegex =
/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:[/?#]\S*)?$/i
const matrixRegex =
/^([#@][a-zA-Z0-9_\-\.]+):([a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,})$/
const [type, setType] = useState<FormSocial['type']>( const [type, setType] = useState<FormSocial['type']>(
props.social?.type ?? 'x' props.social?.type ?? 'x'
) )
@ -177,17 +187,20 @@ const SocialForm = (props: SocialFormProps) => {
pattern: { pattern: {
value: value:
type == 'email' type == 'email'
? /^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-]+)(\.[a-zA-Z]{2,5}){1,2}$/ ? emailRegex
: type == 'phone' : type == 'phone'
? /^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$/ ? phoneRegex
: urlHandles.includes(type) && : urlHandles.includes(type)
/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:[/?#]\S*)?$/i, ? urlRegex
: type == 'matrix' && matrixRegex,
message: `Invalid ${ message: `Invalid ${
urlHandles.includes(type) urlHandles.includes(type)
? 'URL' ? 'URL'
: type == 'phone' : type == 'phone'
? 'Phone Number' ? 'phone number'
: type == 'email' && 'Email' : type == 'email'
? 'Email'
: type == 'matrix' && 'Matrix identifier'
}`, }`,
}, },
}} }}

View File

@ -8,6 +8,7 @@ import {
SiTiktok, SiTiktok,
SiYoutube, SiYoutube,
SiLinkedin, SiLinkedin,
SiMatrix,
SiGithub, SiGithub,
SiGitea, SiGitea,
SiLeetcode, SiLeetcode,
@ -33,6 +34,7 @@ export const baseUrls: Record<Handle, string> = {
discord: 'https://discord.gg/', discord: 'https://discord.gg/',
twitch: 'https://www.twitch.tv/', twitch: 'https://www.twitch.tv/',
linkedin: 'https://www.linkedin.com/in/', linkedin: 'https://www.linkedin.com/in/',
matrix: 'https://matrix.to/#/',
github: 'https://github.com/', github: 'https://github.com/',
gitea: '', gitea: '',
forgejo: '', forgejo: '',
@ -61,6 +63,7 @@ const logoComponents: Record<Handle, ReactElement> = {
linkedin: ( linkedin: (
<SiLinkedin className="text-linkedin-light dark:text-linkedin-dark" /> <SiLinkedin className="text-linkedin-light dark:text-linkedin-dark" />
), ),
matrix: <SiMatrix className="text-matrix-light dark:text-matrix-dark" />,
github: <SiGithub className="text-github-light dark:text-github-dark" />, github: <SiGithub className="text-github-light dark:text-github-dark" />,
gitea: <SiGitea className="text-gitea-light dark:text-gitea-dark" />, gitea: <SiGitea className="text-gitea-light dark:text-gitea-dark" />,
forgejo: <SiForgejo className="text-forgejo-light dark:text-forgejo-dark" />, forgejo: <SiForgejo className="text-forgejo-light dark:text-forgejo-dark" />,
@ -80,6 +83,7 @@ export const sortOrder: Social['type'][] = [
'phone', 'phone',
'email', 'email',
'custom', 'custom',
'matrix',
'linkedin', 'linkedin',
'leetcode', 'leetcode',
'github', 'github',