1
- " use client" ;
1
+ ' use client' ;
2
2
3
3
import { useState } from 'react' ;
4
- import { Input } from "@/components/ui/input" ;
5
- import { Button } from "@/components/ui/button" ;
6
- import { Card } from "@/components/ui/card" ;
7
- import { Search , Github , Twitter , Linkedin , Users2 } from "lucide-react" ;
8
-
9
- const members = [
10
- {
11
- id : 1 ,
12
- name : "Riza Fahmi" ,
13
- role : "Senior Frontend Developer" ,
14
- company : "Tech Corp" ,
15
- location : "Bandar Lampung" ,
16
- skills : [ "React" , "TypeScript" , "Node.js" ] ,
17
- image : "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?auto=format&fit=crop&q=80&w=200" ,
18
- social : {
19
- github : "https://github.com/rizafahmi" ,
20
- twitter : "https://twitter.com/rizafahmi" ,
21
- linkedin : "https://linkedin.com/in/rizafahmi"
22
- }
23
- } ,
24
- {
25
- id : 2 ,
26
- name : "Sarah Drasana" ,
27
- role : "Backend Developer" ,
28
- company : "Startup XYZ" ,
29
- location : "Metro" ,
30
- skills : [ "Python" , "Django" , "PostgreSQL" ] ,
31
- image : "https://images.unsplash.com/photo-1438761681033-6461ffad8d80?auto=format&fit=crop&q=80&w=200" ,
32
- social : {
33
- github : "https://github.com/sarahdrasana" ,
34
- twitter : "https://twitter.com/sarahdrasana" ,
35
- linkedin : "https://linkedin.com/in/sarahdrasana"
36
- }
37
- } ,
38
- {
39
- id : 3 ,
40
- name : "Ahmad Zaky" ,
41
- role : "Full Stack Developer" ,
42
- company : "Freelancer" ,
43
- location : "Bandar Lampung" ,
44
- skills : [ "JavaScript" , "React" , "Node.js" , "MongoDB" ] ,
45
- image : "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?auto=format&fit=crop&q=80&w=200" ,
46
- social : {
47
- github : "https://github.com/ahmadzaky" ,
48
- twitter : "https://twitter.com/ahmadzaky" ,
49
- linkedin : "https://linkedin.com/in/ahmadzaky"
50
- }
51
- } ,
52
- {
53
- id : 4 ,
54
- name : "Linda Putri" ,
55
- role : "UI/UX Designer" ,
56
- company : "Design Studio" ,
57
- location : "Pringsewu" ,
58
- skills : [ "Figma" , "Adobe XD" , "UI Design" , "UX Research" ] ,
59
- image : "https://images.unsplash.com/photo-1494790108377-be9c29b29330?auto=format&fit=crop&q=80&w=200" ,
60
- social : {
61
- github : "https://github.com/lindaputri" ,
62
- twitter : "https://twitter.com/lindaputri" ,
63
- linkedin : "https://linkedin.com/in/lindaputri"
64
- }
65
- }
66
- ] ;
4
+ import { Input } from '@/components/ui/input' ;
5
+ import { Button } from '@/components/ui/button' ;
6
+ import { Card } from '@/components/ui/card' ;
7
+ import {
8
+ Search ,
9
+ Github ,
10
+ Twitter ,
11
+ Linkedin ,
12
+ Users2 ,
13
+ Instagram ,
14
+ } from 'lucide-react' ;
15
+ import { members } from '@/constants/members' ;
67
16
68
17
export default function MembersPage ( ) {
69
- const [ searchQuery , setSearchQuery ] = useState ( "" ) ;
18
+ const [ searchQuery , setSearchQuery ] = useState ( '' ) ;
70
19
71
- const filteredMembers = members . filter ( member =>
72
- member . name . toLowerCase ( ) . includes ( searchQuery . toLowerCase ( ) ) ||
73
- member . role . toLowerCase ( ) . includes ( searchQuery . toLowerCase ( ) ) ||
74
- member . location . toLowerCase ( ) . includes ( searchQuery . toLowerCase ( ) ) ||
75
- member . skills . some ( skill => skill . toLowerCase ( ) . includes ( searchQuery . toLowerCase ( ) ) )
20
+ const filteredMembers = members . filter (
21
+ ( member ) =>
22
+ member . name . toLowerCase ( ) . includes ( searchQuery . toLowerCase ( ) ) ||
23
+ member . role . toLowerCase ( ) . includes ( searchQuery . toLowerCase ( ) ) ||
24
+ member . location . toLowerCase ( ) . includes ( searchQuery . toLowerCase ( ) ) ||
25
+ member . skills . some ( ( skill ) =>
26
+ skill . toLowerCase ( ) . includes ( searchQuery . toLowerCase ( ) )
27
+ )
76
28
) ;
77
29
78
30
return (
@@ -81,7 +33,9 @@ export default function MembersPage() {
81
33
{ /* Header */ }
82
34
< div className = "text-center mb-12" >
83
35
< h1 className = "text-4xl font-bold mb-4" > Anggota Komunitas</ h1 >
84
- < p className = "text-muted-foreground" > Temukan dan terhubung dengan sesama developer di Lampung</ p >
36
+ < p className = "text-muted-foreground" >
37
+ Temukan dan terhubung dengan sesama developer di Lampung
38
+ </ p >
85
39
</ div >
86
40
87
41
{ /* Search */ }
@@ -110,7 +64,9 @@ export default function MembersPage() {
110
64
< div >
111
65
< h3 className = "text-lg font-semibold" > { member . name } </ h3 >
112
66
< p className = "text-primary" > { member . role } </ p >
113
- < p className = "text-sm text-muted-foreground" > { member . company } </ p >
67
+ < p className = "text-sm text-muted-foreground" >
68
+ { member . company }
69
+ </ p >
114
70
</ div >
115
71
</ div >
116
72
< p className = "text-sm text-muted-foreground mb-4" >
@@ -130,20 +86,46 @@ export default function MembersPage() {
130
86
</ div >
131
87
< div className = "flex space-x-2" >
132
88
< Button variant = "ghost" size = "icon" asChild >
133
- < a href = { member . social . github } target = "_blank" rel = "noopener noreferrer" >
89
+ < a
90
+ href = { member . social . github }
91
+ target = "_blank"
92
+ rel = "noopener noreferrer"
93
+ >
134
94
< Github className = "h-4 w-4" />
135
95
</ a >
136
96
</ Button >
137
97
< Button variant = "ghost" size = "icon" asChild >
138
- < a href = { member . social . twitter } target = "_blank" rel = "noopener noreferrer" >
98
+ < a
99
+ href = { member . social . twitter }
100
+ target = "_blank"
101
+ rel = "noopener noreferrer"
102
+ >
139
103
< Twitter className = "h-4 w-4" />
140
104
</ a >
141
105
</ Button >
142
106
< Button variant = "ghost" size = "icon" asChild >
143
- < a href = { member . social . linkedin } target = "_blank" rel = "noopener noreferrer" >
107
+ < a
108
+ href = { member . social . linkedin }
109
+ target = "_blank"
110
+ rel = "noopener noreferrer"
111
+ >
144
112
< Linkedin className = "h-4 w-4" />
145
113
</ a >
146
114
</ Button >
115
+ < Button
116
+ variant = "ghost"
117
+ size = "icon"
118
+ asChild
119
+ className = "hover:text-accent-foreground/80"
120
+ >
121
+ < a
122
+ href = { member . social . instagram }
123
+ target = "_blank"
124
+ rel = "noopener noreferrer"
125
+ >
126
+ < Instagram className = "h-5 w-5" />
127
+ </ a >
128
+ </ Button >
147
129
</ div >
148
130
</ Card >
149
131
) ) }
@@ -156,13 +138,15 @@ export default function MembersPage() {
156
138
< Search className = "h-12 w-12 absolute bottom-0 right-0 text-primary" />
157
139
</ div >
158
140
</ div >
159
- < h3 className = "text-2xl font-semibold mb-2" > Tidak Ada Anggota Ditemukan</ h3 >
141
+ < h3 className = "text-2xl font-semibold mb-2" >
142
+ Tidak Ada Anggota Ditemukan
143
+ </ h3 >
160
144
< p className = "text-muted-foreground mb-8" >
161
145
Tidak ada anggota yang sesuai dengan kriteria pencarian Anda.
162
146
{ searchQuery && ` Coba cari dengan kata kunci yang berbeda.` }
163
147
</ p >
164
148
{ searchQuery && (
165
- < Button onClick = { ( ) => setSearchQuery ( "" ) } >
149
+ < Button onClick = { ( ) => setSearchQuery ( '' ) } >
166
150
Reset Pencarian
167
151
</ Button >
168
152
) }
@@ -171,4 +155,4 @@ export default function MembersPage() {
171
155
</ div >
172
156
</ div >
173
157
) ;
174
- }
158
+ }
0 commit comments