Reubencf commited on
Commit
1ee1695
·
1 Parent(s): 5efcb9b

Fix profile language picker

Browse files
app/(app)/profile/LearningLanguagesEditor.tsx CHANGED
@@ -47,51 +47,64 @@ export function LearningLanguagesEditor({
47
  return (
48
  <div className="space-y-4">
49
  <div className="flex flex-wrap gap-3">
50
- {targetLangs.map((lang) => (
51
- <div
52
- key={lang}
53
- className="group relative flex items-center gap-2 rounded-xl border-2 border-black bg-[#FFD21E] px-4 py-2 text-sm font-black text-black shadow-[3px_3px_0px_rgba(0,0,0,1)]"
54
- >
55
- {languageName(lang)}
56
- <button
57
- onClick={() => updateLangs(targetLangs.filter(l => l !== lang))}
58
- disabled={isPending || targetLangs.length <= 1}
59
- className="ml-1 p-0.5 rounded-md hover:bg-black/10 transition-colors disabled:opacity-0 disabled:pointer-events-none"
60
- >
61
- <X size={14} strokeWidth={3} />
62
- </button>
63
- </div>
64
- ))}
65
-
66
- <div className="relative">
67
- <button
68
- onClick={() => setIsAdding(!isAdding)}
69
- disabled={isPending}
70
- className="flex items-center justify-center h-10 w-10 rounded-xl border-2 border-black bg-white text-black shadow-[3px_3px_0px_rgba(0,0,0,1)] hover:translate-x-[-2px] hover:translate-y-[-2px] hover:shadow-[5px_5px_0px_rgba(0,0,0,1)] active:translate-x-[1px] active:translate-y-[1px] active:shadow-[1px_1px_0px_rgba(0,0,0,1)] transition-all disabled:opacity-50"
71
- >
72
- <Plus size={20} strokeWidth={3} className={`transition-transform duration-200 ${isAdding ? "rotate-45" : ""}`} />
73
- </button>
74
 
75
- {isAdding && (
76
- <div className="absolute top-full left-0 mt-2 w-48 max-h-64 overflow-y-auto rounded-xl border-2 border-black bg-white shadow-[6px_6px_0px_rgba(0,0,0,1)] z-50 p-1">
77
- {availableLangs.length > 0 ? (
78
- availableLangs.map((lang) => (
79
- <button
80
- key={lang.code}
81
- onClick={() => updateLangs([...targetLangs, lang.code])}
82
- className="flex items-center gap-3 w-full px-3 py-2 text-sm font-bold text-black hover:bg-[#F3F4F6] rounded-lg transition-colors text-left"
83
- >
84
- <ReactCountryFlag countryCode={lang.flag} svg style={{ width: "1.1rem", height: "1.1rem" }} />
85
- <span>{lang.name}</span>
86
- </button>
87
- ))
88
- ) : (
89
- <div className="px-3 py-2 text-xs font-bold text-gray-500 italic">No more languages</div>
90
- )}
91
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
  )}
93
  </div>
94
- </div>
95
 
96
  {isPending && (
97
  <div className="text-[10px] font-black uppercase tracking-widest text-[#0EA5A4] animate-pulse">
 
47
  return (
48
  <div className="space-y-4">
49
  <div className="flex flex-wrap gap-3">
50
+ {targetLangs.map((lang) => {
51
+ const label = languageName(lang);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
 
53
+ return (
54
+ <div
55
+ key={lang}
56
+ className="group relative flex items-center gap-2 rounded-xl border-2 border-black bg-[#FFD21E] px-4 py-2 text-sm font-black text-black shadow-[3px_3px_0px_rgba(0,0,0,1)]"
57
+ >
58
+ {label}
59
+ <button
60
+ type="button"
61
+ aria-label={`Remove ${label} from learning languages`}
62
+ onClick={() => updateLangs(targetLangs.filter((l) => l !== lang))}
63
+ disabled={isPending || targetLangs.length <= 1}
64
+ className="ml-1 p-0.5 rounded-md hover:bg-black/10 transition-colors disabled:opacity-0 disabled:pointer-events-none"
65
+ >
66
+ <X size={14} strokeWidth={3} />
67
+ </button>
 
68
  </div>
69
+ );
70
+ })}
71
+
72
+ <button
73
+ type="button"
74
+ aria-controls="learning-language-options"
75
+ aria-expanded={isAdding}
76
+ aria-label={isAdding ? "Close language picker" : "Add a learning language"}
77
+ onClick={() => setIsAdding(!isAdding)}
78
+ disabled={isPending}
79
+ className="flex h-10 w-10 items-center justify-center rounded-xl border-2 border-black bg-white text-black shadow-[3px_3px_0px_rgba(0,0,0,1)] transition-all hover:translate-x-[-2px] hover:translate-y-[-2px] hover:shadow-[5px_5px_0px_rgba(0,0,0,1)] active:translate-x-[1px] active:translate-y-[1px] active:shadow-[1px_1px_0px_rgba(0,0,0,1)] disabled:opacity-50"
80
+ >
81
+ <Plus size={20} strokeWidth={3} className={`transition-transform duration-200 ${isAdding ? "rotate-45" : ""}`} />
82
+ </button>
83
+ </div>
84
+
85
+ {isAdding && (
86
+ <div
87
+ id="learning-language-options"
88
+ className="max-h-64 w-full overflow-y-auto rounded-xl border-2 border-black bg-white p-1 shadow-[6px_6px_0px_rgba(0,0,0,1)]"
89
+ >
90
+ {availableLangs.length > 0 ? (
91
+ availableLangs.map((lang) => (
92
+ <button
93
+ key={lang.code}
94
+ type="button"
95
+ aria-label={`Add ${lang.name} to learning languages`}
96
+ onClick={() => updateLangs([...targetLangs, lang.code])}
97
+ className="flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-sm font-bold text-black transition-colors hover:bg-[#F3F4F6]"
98
+ >
99
+ <ReactCountryFlag countryCode={lang.flag} svg style={{ width: "1.1rem", height: "1.1rem" }} />
100
+ <span>{lang.name}</span>
101
+ </button>
102
+ ))
103
+ ) : (
104
+ <div className="px-3 py-2 text-xs font-bold italic text-gray-500">No more languages</div>
105
  )}
106
  </div>
107
+ )}
108
 
109
  {isPending && (
110
  <div className="text-[10px] font-black uppercase tracking-widest text-[#0EA5A4] animate-pulse">