import Assets from './assets'; import type { Skill, SkillCategory } from '../types'; import svelte from '../md/svelte.md?raw'; import { omit, type StringWithAutoComplete } from '@riadh-adrani/utils'; const defineSkillCategory = (data: SkillCategory): SkillCategory => data; const categories = [ defineSkillCategory({ name: 'Langages de programmation', slug: 'pro-lang' }), defineSkillCategory({ name: 'Frameworks', slug: 'framework' }), defineSkillCategory({ name: 'Bibliothèques', slug: 'library' }), defineSkillCategory({ name: 'Langages', slug: 'lang' }), defineSkillCategory({ name: 'Bases de données', slug: 'db' }), defineSkillCategory({ name: 'ORMs', slug: 'orm' }), defineSkillCategory({ name: 'DevOps', slug: 'devops' }), defineSkillCategory({ name: 'Testing', slug: 'test' }), defineSkillCategory({ name: 'Outils', slug: 'devtools' }), defineSkillCategory({ name: 'Balisage & Style', slug: 'markup-style' }), defineSkillCategory({ name: 'Design', slug: 'design' }), defineSkillCategory({ name: 'Soft Skills', slug: 'soft' }) ] as const; const defineSkill = ( skill: Omit, 'category'> & { category?: StringWithAutoComplete<(typeof categories)[number]['slug']>; } ): Skill => { const out: Skill = omit(skill, 'category'); if (skill.category) { out.category = categories.find((it) => it.slug === skill.category); } return out; }; export const items = [ defineSkill({ slug: 'js', color: 'yellow', description: '', logo: Assets.JavaScript, name: 'Javascript', category: 'pro-lang' }), defineSkill({ slug: 'ts', color: 'blue', description: '', logo: Assets.TypeScript, name: 'Typescript', category: 'pro-lang' }), defineSkill({ slug: 'dart', color: 'cyan', description: '', logo: Assets.Dart, name: 'Dart', category: 'pro-lang' }), defineSkill({ slug: 'java', color: 'orange', description: '', logo: Assets.Java, name: 'Java', category: 'pro-lang' }), defineSkill({ slug: 'csharp', color: 'purple', description: '', logo: Assets.CSharp, name: 'C#', category: 'pro-lang' }), defineSkill({ slug: 'python', color: 'blue', description: '', logo: Assets.Python, name: 'Python', category: 'pro-lang' }), defineSkill({ slug: 'c', color: 'blue', description: '', logo: Assets.C, name: 'C', category: 'pro-lang' }), defineSkill({ slug: 'cpp', color: 'blue', description: '', logo: Assets.Cpp, name: 'C++', category: 'pro-lang' }), defineSkill({ slug: 'php', color: 'blue', description: '', logo: Assets.PHP, name: 'PHP', category: 'pro-lang' }), defineSkill({ slug: 'kotlin', color: 'purple', description: '', logo: Assets.Kotlin, name: 'Kotlin', category: 'pro-lang' }), defineSkill({ slug: 'css', color: 'blue', description: '', logo: Assets.CSS, name: 'CSS', category: 'markup-style' }), defineSkill({ slug: 'html', color: 'orange', description: '', logo: Assets.HTML, name: 'HTML', category: 'markup-style' }), defineSkill({ slug: 'sass', color: 'pink', description: '', logo: Assets.Sass, name: 'Sass', category: 'markup-style' }), defineSkill({ slug: 'flutter', color: 'cyan', description: '', logo: Assets.Flutter, name: 'Flutter', category: 'framework' }), defineSkill({ slug: 'vuejs', color: 'green', description: '', logo: Assets.VueJs, name: 'VueJS', category: 'framework' }), defineSkill({ slug: 'react-native', color: 'cyan', description: '', logo: Assets.ReactJs, name: 'React Native', category: 'framework' }), defineSkill({ slug: 'quasar-framework', color: 'blue', description: '', logo: Assets.Quasar, name: 'Quasar Framework', category: 'framework' }), defineSkill({ slug: 'reactjs', color: 'cyan', description: '', logo: Assets.ReactJs, name: 'React Js', category: 'library' }), defineSkill({ slug: 'postgresql', color: 'blue', description: '', logo: Assets.PostgreSQL, name: 'PostgreSQL', category: 'db' }), defineSkill({ slug: 'mongodb', color: 'green', description: '', logo: Assets.MongoDB, name: 'MongoDB', category: 'db' }), defineSkill({ slug: 'vscode', color: 'blue', description: '', logo: Assets.VisualStudioCode, name: 'Visual Studio Code', category: 'tools' }), defineSkill({ slug: 'visualstudio', color: 'purple', description: '', logo: Assets.VisualStudio, name: 'Visual Studio', category: 'tools' }), defineSkill({ slug: 'jetbrains', color: 'black', description: '', logo: Assets.JetBrains, name: 'Suite JetBrains', category: 'tools' }), defineSkill({ slug: 'git', color: 'orange', description: '', logo: Assets.Git, name: 'Git', category: 'tools' }), defineSkill({ slug: 'docker', color: 'blue', description: '', logo: Assets.Docker, name: 'Docker', category: 'tools' }), defineSkill({ slug: 'photoshop', color: 'cyan', description: '', logo: Assets.Photoshop, name: 'Photoshop', category: 'tools' }), ] as const; export const title = 'Compétences'; export const getSkills = ( ...slugs: Array> ): Array => items.filter((it) => slugs.includes(it.slug)); export const groupByCategory = ( query: string ): Array<{ category: SkillCategory; items: Array }> => { const out: ReturnType = []; const others: Array = []; items.forEach((item) => { if (query.trim() && !item.name.toLowerCase().includes(query.trim().toLowerCase())) return; // push to others if item does not have a category if (!item.category) { console.log(item.category); others.push(item); return; } // check if category exists let category = out.find((it) => it.category.slug === item.category?.slug); if (!category) { category = { items: [], category: item.category }; out.push(category); } category.items.push(item); }); if (others.length !== 0) { out.push({ category: { name: 'Others', slug: 'others' }, items: others }); } return out; };