|
1 | 1 | import { Button } from "@/app/conf/_components/button"
|
2 | 2 | import { CheckIcon } from "@/icons"
|
3 | 3 | import { clsx } from "clsx"
|
4 |
| -import { schedule, speakers } from './_data' |
5 |
| -import { InfiniteMovingSpeakers } from '../_components/infinite-moving-speakers' |
6 |
| -import { SessionList } from '../_components/schedule/session-list' |
7 |
| -import { filterCategories2024 } from '../_components/schedule/filter-categories' |
8 |
| -import { eventsColors } from './utils' |
| 4 | +import { schedule, speakers } from "./_data" |
| 5 | +import { InfiniteMovingSpeakers } from "../_components/infinite-moving-speakers" |
| 6 | +import { SessionList } from "../_components/schedule/session-list" |
| 7 | +import { filterCategories2024 } from "../_components/schedule/filter-categories" |
| 8 | +import { eventsColors } from "./utils" |
9 | 9 |
|
10 | 10 | interface Pricing {
|
11 | 11 | title: string
|
@@ -34,7 +34,6 @@ function shuffle<T extends any[]>(array: T): T {
|
34 | 34 | return array
|
35 | 35 | }
|
36 | 36 |
|
37 |
| - |
38 | 37 | const pricing: Pricing[] = [
|
39 | 38 | {
|
40 | 39 | title: "Early Bird",
|
@@ -117,55 +116,62 @@ export function Pricing() {
|
117 | 116 | </div>
|
118 | 117 |
|
119 | 118 | <div className={clsx(classes.container, "flex flex-col items-center")}>
|
120 |
| - <h3 className="text-[45px] text-center font-bold mb-20">Our Special Speakers</h3> |
121 |
| - |
122 |
| - <InfiniteMovingSpeakers pauseOnHover={true}> |
123 |
| - {speakers.filter((e) => e.avatar).map((speaker) => ( |
124 |
| - <div |
125 |
| - key={speaker.username} |
126 |
| - className="group border-[1.5px] border-[rgba(255,255,255,0.4)] cursor-pointer hover:-translate-y-3 transition-transform duration-300 relative rounded-full overflow-hidden md:size-[210px]" |
127 |
| - > |
128 |
| - <a href={`/conf/2024/speakers/${speaker.username}`}> |
129 |
| - <img className="size-[120px] md:size-[210px] rounded-full" src={speaker.avatar} alt={speaker.name} /> |
130 |
| - </a> |
131 |
| - <div className="pointer-events-none bg-[rgba(0,0,0,0.6)] h-[40px] text-sm md:text-base md:h-[55px] w-[120px] md:w-[210px] absolute left-0 bottom-0 opacity-1 md:opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex justify-center"> |
132 |
| - <span className="mt-2.5 md:mt-3.5 font-medium">{speaker.name.split(" ")[0]}</span> |
133 |
| - </div> |
134 |
| - </div> |
135 |
| - ))} |
136 |
| -</InfiniteMovingSpeakers> |
137 |
| - |
| 119 | + <h3 className="text-[45px] text-center font-bold mb-20"> |
| 120 | + Our Special Speakers |
| 121 | + </h3> |
| 122 | + |
| 123 | + <InfiniteMovingSpeakers pauseOnHover={true}> |
| 124 | + {speakers |
| 125 | + .filter(e => e.avatar) |
| 126 | + .map(speaker => ( |
| 127 | + <div |
| 128 | + key={speaker.username} |
| 129 | + className="group border-[1.5px] border-[rgba(255,255,255,0.4)] cursor-pointer hover:-translate-y-3 transition-transform duration-300 relative rounded-full overflow-hidden md:size-[210px]" |
| 130 | + > |
| 131 | + <a href={`/conf/2024/speakers/${speaker.username}`}> |
| 132 | + <img |
| 133 | + className="size-[120px] md:size-[210px] rounded-full" |
| 134 | + src={speaker.avatar} |
| 135 | + alt={speaker.name} |
| 136 | + /> |
| 137 | + </a> |
| 138 | + <div className="pointer-events-none bg-[rgba(0,0,0,0.6)] h-[40px] text-sm md:text-base md:h-[55px] w-[120px] md:w-[210px] absolute left-0 bottom-0 opacity-1 md:opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex justify-center"> |
| 139 | + <span className="mt-2.5 md:mt-3.5 font-medium"> |
| 140 | + {speaker.name.split(" ")[0]} |
| 141 | + </span> |
| 142 | + </div> |
| 143 | + </div> |
| 144 | + ))} |
| 145 | + </InfiniteMovingSpeakers> |
138 | 146 |
|
139 | 147 | <div className="mt-14 flex gap-4">
|
140 | 148 | <Button href="/conf/2024/speakers">See all Speakers</Button>
|
141 | 149 | </div>
|
142 | 150 |
|
| 151 | + <div className="mt-16"> |
| 152 | + <h3 className="text-[45px] text-center font-bold mb-16"> |
| 153 | + The Schedule |
| 154 | + </h3> |
| 155 | + |
| 156 | + <SessionList |
| 157 | + year="2024" |
| 158 | + filterCategories={filterCategories2024} |
| 159 | + eventsColors={eventsColors} |
| 160 | + showFilter={false} |
| 161 | + // @ts-expect-error -- fixme |
| 162 | + scheduleData={shuffle(schedule.filter(e => e.speakers)) |
| 163 | + .slice(0, 3) |
| 164 | + .map(schedule => ({ |
| 165 | + ...schedule, |
| 166 | + speakers: |
| 167 | + schedule?.speakers?.map(speaker => |
| 168 | + speakers.find(s => s.username === speaker.username), |
| 169 | + ) || [], |
| 170 | + }))} |
| 171 | + /> |
| 172 | + </div> |
143 | 173 |
|
144 |
| - |
145 |
| -<div className='mt-16'> |
146 |
| - |
147 |
| - <h3 className="text-[45px] text-center font-bold mb-16">The Schedule</h3> |
148 |
| - |
149 |
| - <SessionList |
150 |
| - year="2024" |
151 |
| - filterCategories={filterCategories2024} |
152 |
| - eventsColors={eventsColors} |
153 |
| - showFilter={false} |
154 |
| - // @ts-expect-error -- fixme |
155 |
| - scheduleData={shuffle(schedule.filter((e)=>e.speakers)) |
156 |
| - .slice(0, 3) |
157 |
| - .map(schedule => ({ |
158 |
| - ...schedule, |
159 |
| - speakers: schedule?.speakers?.map(speaker => |
160 |
| - speakers.find(s => s.username === speaker.username), |
161 |
| - ) || [], |
162 |
| - }))} |
163 |
| - /> |
164 |
| - |
165 |
| - |
166 |
| - </div> |
167 |
| - |
168 |
| - <div className="mt-14 flex gap-4"> |
| 174 | + <div className="mt-14 flex gap-4"> |
169 | 175 | <Button href="/conf/2024/speakers">View full schedule</Button>
|
170 | 176 | </div>
|
171 | 177 | </div>
|
|
0 commit comments