All files / components/windows SkillsContent.tsx

0% Statements 0/79
100% Branches 1/1
100% Functions 1/1
0% Lines 0/79

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124                                                                                                                                                                                                                                                       
"use client";
 
import { techStack } from "@/data/apps";
import styles from "@/components/windows/WindowContent.module.css";
import {
  Code,
  Database,
  Laptop,
  Users,
  Brain,
  Wrench,
  Server,
  GitBranch,
  CreditCard,
  Map,
  Trello,
  MessageSquare,
  Feather,
  BookOpen,
  Lightbulb,
  Smile,
} from "lucide-react";
import type { JSX } from "react";
 
// 🧠 Debug toggle
const DEBUG =
  (typeof process !== "undefined" &&
    process.env.NODE_ENV !== "production") ||
  (typeof process !== "undefined" &&
    process.env.NEXT_PUBLIC_DEBUG === "true");
 
const dlog = (...args: any[]) => {
  if (DEBUG) console.log("[SkillsContent]", ...args);
};
 
// πŸ”  Emoji β†’ Icon mapping
const iconMap: { [key: string]: JSX.Element } = {
  "πŸ”§": <Wrench size={18} />,
  "🐘": <Feather size={18} />,
  "πŸ—„οΈ": <Database size={18} />,
  "πŸƒ": <Server size={18} />,
  "πŸ”—": <Code size={18} />,
  "πŸ—οΈ": <Lightbulb size={18} />,
  "βš›οΈ": <Laptop size={18} />,
  "πŸ’š": <Laptop size={18} />,
  "πŸ“œ": <Code size={18} />,
  "🎨": <Laptop size={18} />,
  "βš”οΈ": <Code size={18} />,
  "πŸ…±οΈ": <Laptop size={18} />,
  "πŸ“": <GitBranch size={18} />,
  "πŸͺ£": <GitBranch size={18} />,
  "πŸͺ": <GitBranch size={18} />,
  "πŸ–₯️": <Server size={18} />,
  "πŸš€": <Server size={18} />,
  "πŸ’³": <CreditCard size={18} />,
  "πŸ’°": <CreditCard size={18} />,
  "πŸ—ΊοΈ": <Map size={18} />,
  "πŸ“‹": <Trello size={18} />,
  "πŸ“±": <MessageSquare size={18} />,
  "πŸ‘‘": <Users size={18} />,
  "πŸ”„": <Users size={18} />,
  "πŸ‘₯": <Users size={18} />,
  "πŸŽ“": <Users size={18} />,
  "πŸ“š": <BookOpen size={18} />,
  "πŸ›οΈ": <Brain size={18} />,
  "πŸ€–": <Brain size={18} />,
  "🧠": <Brain size={18} />,
  "🧘": <Smile size={18} />,
};
 
export default function SkillsContent() {
  const safeTechStack = techStack && typeof techStack === "object" ? techStack : {};
 
  const categories = Object.entries(safeTechStack);
  dlog(`🧱 Rendering ${categories.length} skill categories`);
 
  if (categories.length === 0) {
    dlog("⚠️ No techStack data found.");
    return (
      <div className={styles.windowContent}>
        <section className={styles.contentSection}>
          <h2>Technical Skills & Expertise</h2>
          <p>No technical skills data available at the moment.</p>
        </section>
      </div>
    );
  }
 
  return (
    <div className={styles.windowContent}>
      <section className={styles.contentSection}>
        <h2>Technical Skills & Expertise</h2>
        <div className={styles.skillsGrid}>
          {categories.map(([category, skills]) => {
            if (!Array.isArray(skills)) return null;
 
            dlog(`πŸ“‚ ${category}: ${skills.length} skills`);
 
            return (
              <div key={category} className={styles.skillCategory}>
                <h3>{category.charAt(0).toUpperCase() + category.slice(1)}</h3>
                <ul className={styles.skillList}>
                  {skills.map((skill, index) => {
                    const safeIcon = iconMap[skill.icon] || <Code size={18} />;
                    const name = skill.name || "Unnamed Skill";
                    const level = skill.level || "N/A";
                    const years = skill.years || "β€”";
 
                    return (
                      <li key={index} className={styles.skillItem}>
                        {safeIcon} {name} ({level} - {years})
                      </li>
                    );
                  })}
                </ul>
              </div>
            );
          })}
        </div>
      </section>
    </div>
  );
}