|
9 | 9 | const query = searchQuery.value.toLowerCase() |
10 | 10 | return judges.value.filter(judge => |
11 | 11 | judge.name.toLowerCase().includes(query) || |
12 | | - judge.court.toLowerCase().includes(query) || |
| 12 | + judge.court.name.toLowerCase().includes(query) || |
13 | 13 | judge.location.toLowerCase().includes(query) |
14 | 14 | ) |
15 | 15 | }) |
|
68 | 68 |
|
69 | 69 | <!-- Judges Grid --> |
70 | 70 | <div class="grid grid-cols-1 gap-8 sm:grid-cols-2 lg:grid-cols-3"> |
71 | | - <div v-for="judge in filteredJudges" :key="judge.id" |
72 | | - class="group relative bg-off-gray rounded-2xl shadow-sm hover:shadow-lg transition-all duration-300 overflow-hidden border border-gray-100 hover:border-softBrown"> |
73 | | - <div class="p-6"> |
| 71 | + <router-link |
| 72 | + v-for="judge in filteredJudges" |
| 73 | + :key="judge.id" |
| 74 | + :to="`judges/${judge.id}/profile`" |
| 75 | + class="group relative bg-off-gray rounded-2xl shadow-sm hover:shadow-lg transition-all duration-300 overflow-hidden border border-gray-100 hover:border-softBrown" |
| 76 | + > |
| 77 | + <!-- Background Image Container --> |
| 78 | + <div class="absolute inset-0 z-0"> |
| 79 | + <img |
| 80 | + :src="judge.court.image" |
| 81 | + :alt="`${judge.court.name} courthouse`" |
| 82 | + class="h-full w-full object-cover opacity-10 group-hover:opacity-30 transition-all duration-300" |
| 83 | + > |
| 84 | + <div class="absolute inset-0 bg-gradient-to-b from-white/70 via-white/40 to-white/80 group-hover:from-white/60 group-hover:via-white/30 group-hover:to-white/70 transition-all duration-300"></div> |
| 85 | + </div> |
| 86 | + |
| 87 | + <!-- Content Container --> |
| 88 | + <div class="relative z-10 p-6"> |
74 | 89 | <div class="relative"> |
75 | 90 | <div class="mx-auto h-40 w-40 overflow-hidden rounded-full ring-4 ring-gray-50 group-hover:ring-softBrown transition-all duration-300"> |
76 | 91 | <img class="h-full w-full object-cover filter grayscale group-hover:grayscale-0 transition-all duration-300" :src="judge.image" :alt="judge.name"> |
77 | 92 | </div> |
78 | 93 | <div class="absolute -bottom-2 left-1/2 transform -translate-x-1/2"> |
79 | 94 | <span class="inline-flex items-center rounded-full bg-warm-gray px-3 py-1 text-sm font-medium text-gray-700 ring-1 ring-inset ring-gray-700/10"> |
80 | | - {{ judge.court }} |
| 95 | + {{ judge.court.name }} |
81 | 96 | </span> |
82 | 97 | </div> |
83 | 98 | </div> |
|
87 | 102 | <p class="mt-2 text-sm text-gray-500">{{ judge.location }}</p> |
88 | 103 |
|
89 | 104 | <div class="mt-4 flex items-center justify-center"> |
90 | | - <div class="flex items-center"> |
91 | | - <svg v-for="star in 5" :key="star" |
92 | | - :class="[star <= judge.rating ? 'text-yellow-400' : 'text-gray-200', 'h-5 w-5 flex-shrink-0']" |
93 | | - viewBox="0 0 20 20" fill="currentColor"> |
94 | | - <path fill-rule="evenodd" d="M10.868 2.884c-.321-.772-1.415-.772-1.736 0l-1.83 4.401-4.753.381c-.833.067-1.171 1.107-.536 1.651l3.62 3.102-1.106 4.637c-.194.813.691 1.456 1.405 1.02L10 15.591l4.069 2.485c.713.436 1.598-.207 1.404-1.02l-1.106-4.637 3.62-3.102c.635-.544.297-1.584-.536-1.65l-4.752-.382-1.831-4.401z" clip-rule="evenodd" /> |
95 | | - </svg> |
96 | | - </div> |
97 | | - <span class="ml-2 text-sm text-gray-500">({{ judge.reviewCount }} reviews)</span> |
98 | | - </div> |
99 | | - </div> |
100 | | - </div> |
101 | | - |
102 | | - <div class="absolute inset-x-0 bottom-0 bg-gradient-to-t from-warm-gray to-transparent h-24"></div> |
103 | | - <div class="relative bg-off-gray-darker px-6 py-4"> |
104 | | - <div class="flex justify-center space-x-4"> |
105 | | - <router-link :to="`judges/${judge.id}/profile`" |
106 | | - class="items-center justify-center gap-x-2 rounded-lg bg-white/80 px-4 py-2.5 text-sm font-medium text-gray-700 shadow-sm ring-1 ring-inset ring-gray-200/50 hover:bg-white hover:ring-softBrown hover:text-deepBrown transition-all duration-200"> |
107 | | - <svg class="h-4 w-4 text-gray-500" viewBox="0 0 20 20" fill="currentColor"> |
108 | | - <path d="M10 12.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5z" /> |
109 | | - <path fill-rule="evenodd" d="M.664 10.59a1.651 1.651 0 010-1.186A10.004 10.004 0 0110 3c4.257 0 7.893 2.66 9.336 6.41.147.381.146.804 0 1.186A10.004 10.004 0 0110 17c-4.257 0-7.893-2.66-9.336-6.41zM14 10a4 4 0 11-8 0 4 4 0 018 0z" clip-rule="evenodd" /> |
| 105 | + <div class="flex items-center"> |
| 106 | + <svg v-for="star in 5" :key="star" |
| 107 | + :class="[star <= judge.rating ? 'text-yellow-400' : 'text-gray-200', 'h-5 w-5 flex-shrink-0']" |
| 108 | + viewBox="0 0 20 20" fill="currentColor"> |
| 109 | + <path fill-rule="evenodd" d="M10.868 2.884c-.321-.772-1.415-.772-1.736 0l-1.83 4.401-4.753.381c-.833.067-1.171 1.107-.536 1.651l3.62 3.102-1.106 4.637c-.194.813.691 1.456 1.405 1.02L10 15.591l4.069 2.485c.713.436 1.598-.207 1.404-1.02l-1.106-4.637 3.62-3.102c.635-.544.297-1.584-.536-1.65l-4.752-.382-1.831-4.401z" clip-rule="evenodd" /> |
110 | 110 | </svg> |
111 | | - </router-link> |
112 | | - |
113 | | - <router-link :to="`judges/review/${judge.id}`" |
114 | | - class="items-center justify-center gap-x-2 rounded-lg bg-white/80 px-4 py-2.5 text-sm font-medium text-gray-700 shadow-sm ring-1 ring-inset ring-gray-200/50 hover:bg-white hover:ring-softBrown hover:text-deepBrown transition-all duration-200"> |
115 | | - <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="h-4 w-4 text-gray-500"> |
116 | | - <path d="M21.731 2.269a2.625 2.625 0 0 0-3.712 0l-1.157 1.157 3.712 3.712 1.157-1.157a2.625 2.625 0 0 0 0-3.712ZM19.513 8.199l-3.712-3.712-12.15 12.15a5.25 5.25 0 0 0-1.32 2.214l-.8 2.685a.75.75 0 0 0 .933.933l2.685-.8a5.25 5.25 0 0 0 2.214-1.32L19.513 8.2Z" /> |
117 | | - </svg> |
118 | | - |
119 | | - |
120 | | - </router-link> |
| 111 | + </div> |
| 112 | + <span class="ml-2 text-sm text-gray-500">({{ judge.reviewCount }} reviews)</span> |
121 | 113 | </div> |
122 | 114 | </div> |
123 | 115 | </div> |
| 116 | + </router-link> |
124 | 117 | </div> |
125 | 118 |
|
126 | 119 | <!-- Pagination --> |
|
0 commit comments