Untitled

 avatar
unknown
plain_text
18 days ago
5.1 kB
2
Indexable
  const getAchievementIcon = (achievement) => {
    // First check for tier-specific trophies
    if (achievement.tier) {
      const baseSize = "w-8 h-8";
      switch (achievement.tier) {
        case 'bronze': return <Trophy className={`${baseSize} text-amber-600`} />;
        case 'silver': return <Trophy className={`${baseSize} text-gray-400`} />;
        case 'gold': return <Trophy className={`${baseSize} text-yellow-400`} />;
      }
    }

    const name = achievement.name.toLowerCase();
    const description = achievement.description.toLowerCase();
    const baseSize = "w-8 h-8 text-primary";

    // Specific achievement mappings (including translations)
    const iconMappings = {
      // English mappings
      'seasonal master': <SunDim className={baseSize} />,
      'saisonmeister': <SunDim className={baseSize} />, // German
      
      'winter sorter': <Snowflake className={baseSize} />,
      'wintersortierung': <Snowflake className={baseSize} />, // German
      
      'monthly master': <Calendar className={baseSize} />,
      'monatsmeister': <Calendar className={baseSize} />, // German
      
      'paper specialist': <StickyNote className={baseSize} />,
      'papierspezialist': <StickyNote className={baseSize} />, // German
      
      'early bird': <Bird className={baseSize} />,
      'frühaufsteher': <Bird className={baseSize} />, // German
      
      'night owl': <Moon className={baseSize} />,
      'nachteule': <Moon className={baseSize} />, // German
      
      'weekend warrior': <CalendarRange className={baseSize} />,
      'wochenendkrieger': <CalendarRange className={baseSize} />, // German
      
      'summer sorter': <Sun className={baseSize} />,
      'sommersortierung': <Sun className={baseSize} />, // German
      
      'recycling specialist': <Recycle className={baseSize} />,
      'recyclingspezialist': <Recycle className={baseSize} />, // German
    };

    // Check for exact matches first
    for (const [key, icon] of Object.entries(iconMappings)) {
      if (name.includes(key)) {
        return icon;
      }
    }

    // Then check for general keyword matches
    if (name.includes('recycle') || description.includes('recycle') ||
        name.includes('recycling') || description.includes('recycling')) {
      return <Recycle className={baseSize} />;
    } else if (name.includes('tree') || description.includes('tree') ||
               name.includes('baum') || description.includes('baum')) {
      return <Trees className={baseSize} />;
    } else if (name.includes('streak') || description.includes('streak') ||
               name.includes('serie') || description.includes('serie')) {
      return <Flame className={baseSize} />;
    } else if (name.includes('speed') || name.includes('fast') ||
               name.includes('schnell') || name.includes('geschwindigkeit')) {
      return <Zap className={baseSize} />;
    } else if (name.includes('accurate') || name.includes('precision') ||
               name.includes('genau') || name.includes('präzision')) {
      return <Target className={baseSize} />;
    } else if (name.includes('share') || description.includes('share') ||
               name.includes('teilen') || description.includes('teilen')) {
      return <Share2 className={baseSize} />;
    } else if (name.includes('time') || description.includes('time') ||
               name.includes('zeit') || description.includes('zeit')) {
      return <Timer className={baseSize} />;
    } else if ((name + description).includes('ai') || 
               (name + description).includes('ki')) {
      return <Binary className={baseSize} />;
    } else if (name.includes('waste') || description.includes('waste') ||
               name.includes('müll') || description.includes('müll')) {
      return <Trash2 className={baseSize} />;
    } else if (name.includes('balance') || description.includes('balance') ||
               name.includes('ausgleich') || description.includes('ausgleich')) {
      return <Scale className={baseSize} />;
    } else if (name.includes('network') || description.includes('network') ||
               name.includes('netzwerk') || description.includes('netzwerk')) {
      return <Network className={baseSize} />;
    } else if (name.includes('stats') || description.includes('statistics') ||
               name.includes('statistik') || description.includes('statistiken')) {
      return <BarChart className={baseSize} />;
    } else if (name.includes('activity') || description.includes('activity') ||
               name.includes('aktivität') || description.includes('aktivität')) {
      return <Activity className={baseSize} />;
    } else if (name.includes('eco') || description.includes('environment') ||
               name.includes('öko') || description.includes('umwelt')) {
      return <Leaf className={baseSize} />;
    }
    
    // Default icon if no matches found
    return <Star className={baseSize} />;
  };
Leave a Comment