From f7589b6ca7cf22a72b54019dd4fef2b8a1cc81d5 Mon Sep 17 00:00:00 2001 From: Konrad Szwarc Date: Fri, 13 Jan 2023 22:50:05 +0100 Subject: [PATCH] Create file with most used icon button configs (socials) (#144) --- src/data/sections/experience.ts | 17 ++++-------- src/data/sections/main.ts | 10 ++++--- src/data/sections/portfolio.ts | 19 +++++--------- src/data/sections/testimonials.ts | 14 ++++------ src/data/socials.ts | 43 +++++++++++++++++++++++++++++++ 5 files changed, 65 insertions(+), 38 deletions(-) create mode 100644 src/data/socials.ts diff --git a/src/data/sections/experience.ts b/src/data/sections/experience.ts index 4803f17..9e5f224 100644 --- a/src/data/sections/experience.ts +++ b/src/data/sections/experience.ts @@ -1,5 +1,7 @@ import type { ExperienceSection } from '@/types/experience-section'; +import getSocial from '../socials'; + const experienceData: ExperienceSection = { config: { title: 'Work experience', @@ -51,10 +53,7 @@ const experienceData: ExperienceSection = { url: 'https://firebase.google.com/', }, ], - socials: [ - { name: 'Facebook', icon: 'fa6-brands:facebook-f', url: '#' }, - { name: 'LinkedIn', icon: 'fa6-brands:linkedin-in', url: '#' }, - ], + socials: [getSocial('facebook', '#'), getSocial('linkedin', '#')], }, { role: 'React.js developer', @@ -93,10 +92,7 @@ const experienceData: ExperienceSection = { url: 'https://eslint.org/', }, ], - socials: [ - { name: 'Website', icon: 'fa6-solid:globe', url: '#' }, - { name: 'Instagram', icon: 'fa6-brands:instagram', url: '#' }, - ], + socials: [getSocial('website', '#'), getSocial('instagram', '#')], }, { role: 'Junior front-end developer', @@ -129,10 +125,7 @@ const experienceData: ExperienceSection = { url: 'https://pnpm.io/', }, ], - socials: [ - { name: 'Twitter', icon: 'fa6-brands:twitter', url: '#' }, - { name: 'GitHub', icon: 'fa6-brands:github', url: '#' }, - ], + socials: [getSocial('twitter', '#'), getSocial('github', '#')], }, ], }; diff --git a/src/data/sections/main.ts b/src/data/sections/main.ts index 0090959..391ae1a 100644 --- a/src/data/sections/main.ts +++ b/src/data/sections/main.ts @@ -1,5 +1,7 @@ import type { MainSection } from '@/types/main-section'; +import getSocial from '../socials'; + const mainData: MainSection = { config: { icon: 'fa6-solid:user', @@ -22,10 +24,10 @@ const mainData: MainSection = { url: '#', }, socials: [ - { name: 'Facebook', icon: 'fa6-brands:facebook-f', url: '#' }, - { name: 'GitHub', icon: 'fa6-brands:github', url: '#' }, - { name: 'LinkedIn', icon: 'fa6-brands:linkedin-in', url: '#' }, - { name: 'Twitter', icon: 'fa6-brands:twitter', url: '#' }, + getSocial('facebook', '#'), + getSocial('github', '#'), + getSocial('linkedin', '#'), + getSocial('twitter', '#'), ], }; diff --git a/src/data/sections/portfolio.ts b/src/data/sections/portfolio.ts index 6a2f51a..0e45cfd 100644 --- a/src/data/sections/portfolio.ts +++ b/src/data/sections/portfolio.ts @@ -1,5 +1,7 @@ import type { PortfolioSection } from '@/types/portfolio-section'; +import getSocial from '../socials'; + const portfolioData: PortfolioSection = { config: { title: 'Projects', @@ -52,10 +54,7 @@ const portfolioData: PortfolioSection = { url: 'https://prettier.io/', }, ], - socials: [ - { name: 'Mockups', icon: 'fa6-solid:image', url: '#' }, - { name: 'App demo', icon: 'fa6-solid:desktop', url: '#' }, - ], + socials: [getSocial('mockups', '#'), getSocial('demo', '#')], }, { name: 'TruQuest', @@ -96,10 +95,7 @@ const portfolioData: PortfolioSection = { url: 'https://www.postgresql.org/', }, ], - socials: [ - { name: 'Mockups', icon: 'fa6-solid:image', url: '#' }, - { name: 'App demo', icon: 'fa6-solid:desktop', url: '#' }, - ], + socials: [getSocial('mockups', '#'), getSocial('demo', '#')], }, { name: 'Software Chasers', @@ -146,10 +142,7 @@ const portfolioData: PortfolioSection = { url: 'https://pnpm.io/', }, ], - socials: [ - { name: 'Website', icon: 'fa6-solid:globe', url: '#' }, - { name: 'GitHub', icon: 'fa6-brands:github', url: '#' }, - ], + socials: [getSocial('website', '#'), getSocial('github', '#')], }, { name: 'Disco Ninjas', @@ -184,7 +177,7 @@ const portfolioData: PortfolioSection = { url: 'https://firebase.google.com/', }, ], - socials: [{ name: 'Mockups', icon: 'fa6-solid:image', url: '#' }], + socials: [getSocial('mockups', '#')], }, ], }; diff --git a/src/data/sections/testimonials.ts b/src/data/sections/testimonials.ts index 60271a9..f81e515 100644 --- a/src/data/sections/testimonials.ts +++ b/src/data/sections/testimonials.ts @@ -1,5 +1,7 @@ import type { TestimonialsSection } from '@/types/testimonials-section'; +import getSocial from '../socials'; + const testimonialsData: TestimonialsSection = { config: { title: 'Testimonials', @@ -12,10 +14,7 @@ const testimonialsData: TestimonialsSection = { relation: 'We work together as front-end developers at Google', content: 'In nec mattis sem. Morbi purus lorem, euismod ac varius at, aliquet vitae augue. Pellentesque ut facilisis felis. In sed dui blandit, aliquet odio eu, elementum leo. In facilisis dapibus tortor ac volutpat. Cras cursus nec odio maximus elementum.', - socials: [ - { name: 'GitHub', icon: 'fa6-brands:github', url: '#' }, - { name: 'LinkedIn', icon: 'fa6-brands:linkedin-in', url: '#' }, - ], + socials: [getSocial('github', '#'), getSocial('linkedin', '#')], }, { image: import('@/assets/testimonials/testimonial-2.jpeg'), @@ -23,7 +22,7 @@ const testimonialsData: TestimonialsSection = { relation: 'My project manager at GitLab', content: 'Praesent nec congue elit. Vestibulum lobortis congue ipsum, a gravida mi tempus ac. Mauris aliquet purus nibh, vel varius turpis tempus non. Nullam eget ultricies orci. Quisque nulla ante, auctor eget varius ac, imperdiet nec magna.', - socials: [{ name: 'LinkedIn', icon: 'fa6-brands:linkedin-in', url: '#' }], + socials: [getSocial('linkedin', '#')], }, { image: import('@/assets/testimonials/testimonial-3.jpeg'), @@ -31,10 +30,7 @@ const testimonialsData: TestimonialsSection = { relation: 'My customer for sidewing.com website', content: 'Mauris tincidunt at purus vehicula porta. Mauris eget mollis turpis. Sed iaculis rutrum pharetra. Vivamus risus quam, suscipit et semper ut, aliquet ut tellus. Donec quis auctor nunc.', - socials: [ - { name: 'GitHub', icon: 'fa6-brands:github', url: '#' }, - { name: 'Website', icon: 'fa6-solid:globe', url: '#' }, - ], + socials: [getSocial('github', '#'), getSocial('website', '#')], }, ], }; diff --git a/src/data/socials.ts b/src/data/socials.ts new file mode 100644 index 0000000..74417f1 --- /dev/null +++ b/src/data/socials.ts @@ -0,0 +1,43 @@ +import type { Social } from '../types/common'; + +type SocialWithoutUrl = Omit; + +const socials = { + facebook: { name: 'Facebook', icon: 'fa6-brands:facebook-f' }, + github: { name: 'GitHub', icon: 'fa6-brands:github' }, + linkedin: { name: 'LinkedIn', icon: 'fa6-brands:linkedin-in' }, + twitter: { name: 'Twitter', icon: 'fa6-brands:twitter' }, + instagram: { name: 'Instagram', icon: 'fa6-brands:instagram' }, + youtube: { name: 'YouTube', icon: 'fa6-brands:youtube' }, + twitch: { name: 'Twitch', icon: 'fa6-brands:twitch' }, + discord: { name: 'Discord', icon: 'fa6-brands:discord' }, + stackoverflow: { name: 'Stack Overflow', icon: 'fa6-brands:stack-overflow' }, + codepen: { name: 'CodePen', icon: 'fa6-brands:codepen' }, + dev: { name: 'Dev', icon: 'fa6-brands:dev' }, + behance: { name: 'Behance', icon: 'fa6-brands:behance' }, + dribbble: { name: 'Dribbble', icon: 'fa6-brands:dribbble' }, + medium: { name: 'Medium', icon: 'fa6-brands:medium' }, + reddit: { name: 'Reddit', icon: 'fa6-brands:reddit' }, + quora: { name: 'Quora', icon: 'fa6-brands:quora' }, + spotify: { name: 'Spotify', icon: 'fa6-brands:spotify' }, + soundcloud: { name: 'SoundCloud', icon: 'fa6-brands:soundcloud' }, + lastfm: { name: 'Last.fm', icon: 'fa6-brands:lastfm' }, + vimeo: { name: 'Vimeo', icon: 'fa6-brands:vimeo' }, + pinterest: { name: 'Pinterest', icon: 'fa6-brands:pinterest' }, + tumblr: { name: 'Tumblr', icon: 'fa6-brands:tumblr' }, + flickr: { name: 'Flickr', icon: 'fa6-brands:flickr' }, + figma: { name: 'Figma', icon: 'fa6-brands:figma' }, + + website: { name: 'Website', icon: 'fa6-solid:globe' }, + demo: { name: 'App demo', icon: 'fa6-solid:desktop' }, + mockups: { name: 'Mockups', icon: 'fa6-solid:image' }, + repository: { name: 'Repository', icon: 'fa6-solid:code-branch' }, +} satisfies Record; + +const getSocial = (name: keyof typeof socials, url: string, overrides?: Partial): Social => ({ + url, + ...socials[name], + ...overrides, +}); + +export default getSocial;