Skip to content

Commit 035a99b

Browse files
committed
slightly improve layout
1 parent 9aa03da commit 035a99b

4 files changed

Lines changed: 46 additions & 26 deletions

File tree

lib/components/event-schedule-new/action-bar.tsx

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from "react";
22
import cn from "classnames";
3-
import { ListFilter, Search } from "lucide-react";
3+
import { Grid, List, ListFilter, Search } from "lucide-react";
44
import { FilterSummary } from "./filter";
55
import Export from "./export";
66

@@ -59,7 +59,7 @@ const ActionBar = ({
5959
{filterActive && <FilterSummary filter={filter} />}
6060
</div>
6161

62-
<div className="flex items-center gap-4 shrink-0 grow lg:grow-0">
62+
<div className="flex items-center gap-4 shrink-0 grow lg:grow-0 hidden md:flex">
6363
{categories.map((category) => (
6464
<div
6565
key={category.label}
@@ -71,13 +71,24 @@ const ActionBar = ({
7171
))}
7272
</div>
7373

74-
<div className="items-center justify-end grow gap-2 shrink-0 hidden lg:flex">
74+
{/* <div className="flex items-center gap-2 shrink-0 grow justify-end">
75+
<div className="text-sm font-medium flex items-center border border-solid border-[rgba(224,224,235,1)] cursor-pointer gap-1.5 p-1 px-2">
76+
<List size={13} />
77+
List
78+
</div>
79+
<div className="text-sm font-medium flex items-center border border-solid border-[rgba(224,224,235,1)] cursor-pointer gap-1.5 p-1 px-2">
80+
<Grid size={13} />
81+
Grid
82+
</div>
83+
</div> */}
84+
85+
<div className="items-center justify-end gap-2 shrink-0 hidden grow lg:flex">
7586
{/* <Export events={events} /> */}
7687
<div className="flex items-center gap-2 border border-[rgba(224,224,235,1)] border-solid p-3 py-2 max-w-[320px] grow">
7788
<Search size={15} color="rgba(124, 124, 153, 1)" />
7889
<input
7990
className="grow border-none outline-none bg-transparen ml-0.5"
80-
placeholder="Search events or organizers"
91+
placeholder="Search events"
8192
type="text"
8293
value={filter.name}
8394
onChange={(e: any) => setFilter("name", e.target.value)}

lib/components/event-schedule-new/event/event.tsx

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ const Event: React.FC<EventProps> = ({
460460
fill
461461
className="shrink-0 mt-3 self-start"
462462
>
463-
Buy Tickets
463+
Get Tickets
464464
<ArrowUpRight className="w-4 h-4 mb-0.5" />
465465
</VoxelButton>
466466
</Link>
@@ -577,15 +577,9 @@ const Event: React.FC<EventProps> = ({
577577
className="w-[26px] object-contain"
578578
/>
579579
)}
580-
{/* {isETHDay && (
581-
<Image
582-
src={ethDayImage}
583-
alt="ETH Day"
584-
className="w-[26px] object-contain"
585-
/>
586-
)} */}
580+
587581
<div className="flex flex-col w-full">
588-
{eventName}
582+
<div className="md:line-clamp-none">{eventName}</div>
589583
<div className="flex gap-4 justify-between w-full">
590584
{timeOfDay.map((time, index) => (
591585
<div key={index} className="text-xs text-gray-600">
@@ -597,7 +591,7 @@ const Event: React.FC<EventProps> = ({
597591
</div>
598592

599593
{isETHDay && (
600-
<div className="flex items-center justify-center mt-2">
594+
<div className="hidden md:flex items-center justify-center mt-2">
601595
<Image
602596
src={ethDayImage}
603597
alt="ETH Day"
@@ -610,10 +604,10 @@ const Event: React.FC<EventProps> = ({
610604
{event.organizer}
611605
</div>
612606

613-
<Separator className="my-1.5" />
607+
<Separator className="my-1.5 hidden md:block" />
614608

615609
<div
616-
className={cn("flex gap-4 justify-end", {
610+
className={cn("hidden md:flex gap-4 justify-end", {
617611
"justify-between": !isCoworking || isMultiDay,
618612
})}
619613
>

lib/components/event-schedule-new/index.tsx

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import Image from "next/image";
1414
import { useSearchParams } from "next/navigation";
1515
import DevconnectCubeLogo from "./images/cube-logo.png";
1616
import { eventShops } from "./zupass/event-shops-list";
17+
import { useIsMobile } from "lib/hooks/useIsMobile";
1718

1819
export type ScheduleProps = {
1920
isCommunityCalendar?: boolean;
@@ -22,6 +23,7 @@ export type ScheduleProps = {
2223
setSelectedEvent: (event: EventType | null) => void;
2324
setSelectedDay: (day: string | null) => void;
2425
events: EventType[];
26+
viewMode: "list" | "grid";
2527
};
2628

2729
// Utility function for tracking placed nodes in the grid
@@ -53,7 +55,8 @@ const createPlacementTracker = () => {
5355
// Compute event placements in the grid
5456
const computeEventPlacements = (
5557
events: EventType[],
56-
dateColumns: string[]
58+
dateColumns: string[],
59+
isMobile: boolean
5760
): any[] => {
5861
const placementTracker = createPlacementTracker();
5962

@@ -122,13 +125,15 @@ const computeEventPlacements = (
122125
row++;
123126
}
124127

128+
const spanRows = isMobile ? 1 : event.spanRows ? event.spanRows : 1;
129+
125130
// Store event with its grid position
126131
eventPlacements.push({
127132
event,
128133
timeblock: earliestTimeblock, // Use earliest timeblock for time display
129134
gridPosition: {
130135
row,
131-
rowSpan: event.spanRows ? event.spanRows : 1,
136+
rowSpan: spanRows ? spanRows : 1,
132137
column: startColIndex + 1, // +1 because CSS grid is 1-indexed
133138
duration,
134139
},
@@ -137,11 +142,11 @@ const computeEventPlacements = (
137142
});
138143

139144
// Add additional rows for special events
140-
if (event.spanRows) {
141-
for (let i = 0; i < event.spanRows; i++) {
145+
if (spanRows > 1) {
146+
for (let i = 0; i < spanRows; i++) {
142147
!placementTracker.placeItem(row + i, startColIndex + 1, duration);
143148
}
144-
row += event.spanRows - 1;
149+
row += spanRows - 1;
145150
}
146151
});
147152

@@ -154,14 +159,18 @@ const NewScheduleIndexInner = ({
154159
setSelectedEvent,
155160
setSelectedDay,
156161
events,
162+
viewMode,
157163
}: ScheduleProps) => {
158164
const searchParams = useSearchParams();
159165
// const { selectedEvent, selectedDay, setSelectedEvent, setSelectedDay } = useCalendarStore()
160166
const eventRange = computeCalendarRange(events);
161167
const [hoveredDate, setHoveredDate] = useState<string | null>(null);
168+
const isMobile = useIsMobile(768);
162169

163170
// Compute event placements for the unified grid
164-
const eventPlacements = computeEventPlacements(events, eventRange);
171+
const eventPlacements = computeEventPlacements(events, eventRange, isMobile);
172+
173+
console.log("eventPlacements", eventPlacements);
165174

166175
// Format date for display
167176
const formatDateHeader = (dateStr: string) => {
@@ -174,7 +183,7 @@ const NewScheduleIndexInner = ({
174183

175184
// Define shared column template for consistent alignment
176185
// const columnTemplate = `repeat(${eventRange.length}, minmax(175px, 1fr))`
177-
const columnTemplate = `repeat(${eventRange.length}, minmax(auto, 230px))`;
186+
const columnTemplate = `repeat(${eventRange.length}, minmax(auto, 240px))`;
178187

179188
// Check if an event should be highlighted based on hovered date
180189
const isEventHighlighted = (placement: any) => {
@@ -249,7 +258,7 @@ const NewScheduleIndexInner = ({
249258
<div className="hidden touch-only:block w-4 md:w-0 h-[1px]"></div>
250259
<div className="w-full flex">
251260
<div
252-
className="grid shrink-0"
261+
className="grid shrink-0 min-w-full"
253262
style={{
254263
gridTemplateColumns: columnTemplate,
255264
gridTemplateRows: "auto 1fr",

lib/components/event-schedule-new/layout.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from "react";
1+
import React, { useState } from "react";
22
import NewScheduleIndex, { ScheduleProps } from "./index";
33
import ActionBar from "./action-bar";
44
import { Filter, FilterSummary, useFilters } from "./filter";
@@ -13,6 +13,7 @@ type CalendarLayoutProps = ScheduleProps & {
1313
};
1414

1515
const Layout = (props: CalendarLayoutProps) => {
16+
const [viewMode, setViewMode] = useState<"list" | "grid">("list");
1617
const {
1718
filterOpen,
1819
setFilterOpen,
@@ -106,6 +107,7 @@ const Layout = (props: CalendarLayoutProps) => {
106107
resetFilter={resetFilter}
107108
filter={filter}
108109
events={props.events}
110+
setViewMode={setViewMode}
109111
/>
110112
</div>
111113

@@ -132,7 +134,11 @@ const Layout = (props: CalendarLayoutProps) => {
132134
<div className="grow relative">
133135
{/* white gradient to indicate more events on the right for mobile */}
134136
<div className="absolute top-0 right-0 w-4 h-full bg-gradient-to-l from-white via-white/60 to-transparent pointer-events-none z-10 mouse-only:hidden"></div>
135-
<NewScheduleIndex {...props} events={filteredEvents} />
137+
<NewScheduleIndex
138+
{...props}
139+
events={filteredEvents}
140+
viewMode={viewMode}
141+
/>
136142
</div>
137143
</div>
138144
</div>

0 commit comments

Comments
 (0)