diff --git a/devcon-app/src/components/domain/app/dc7/dashboard/index.tsx b/devcon-app/src/components/domain/app/dc7/dashboard/index.tsx index 7d313984b..589e483e0 100644 --- a/devcon-app/src/components/domain/app/dc7/dashboard/index.tsx +++ b/devcon-app/src/components/domain/app/dc7/dashboard/index.tsx @@ -146,9 +146,7 @@ const LoggedIn = () => {
{account?.username ? `Welcome, ${account?.username}!` : 'Welcome!'} 👋
-

- Thank you for connecting to the Devcon Passport. -

+

Thank you for connecting to the Devcon Passport.

@@ -378,10 +376,10 @@ export const Dashboard = () => { -
+ {/*
-
+ */}
diff --git a/devcon-app/src/components/domain/app/dc7/sessions/index.tsx b/devcon-app/src/components/domain/app/dc7/sessions/index.tsx index d449aec10..e4824627a 100644 --- a/devcon-app/src/components/domain/app/dc7/sessions/index.tsx +++ b/devcon-app/src/components/domain/app/dc7/sessions/index.tsx @@ -84,7 +84,7 @@ import { CollapsedSection, CollapsedSectionContent, CollapsedSectionHeader } fro export const tagClassTwo = (active?: boolean, className?: string) => cn( - 'shrink-0 select-none cursor-pointer mr-2 rounded-full bg-white border border-solid border-[#E1E4EA] px-3 py-1 text-xs flex items-center justify-center text-[black] hover:border-[black] font-semibold hover:text-black transition-all duration-300', + 'shrink-0 select-none cursor-pointer mr-2 rounded-full bg-white border border-solid border-[#E1E4EA] px-3 py-0.5 text-xs flex items-center justify-center text-[black] hover:border-[black] font-semibold hover:text-black transition-all duration-300', active ? 'border-[#ac9fdf] !bg-[#EFEBFF]' : '', className ) @@ -107,7 +107,7 @@ const useSessionFilter = (sessions: SessionType[], event: any) => { const [timelineView, setTimelineView] = useRecoilState(sessionTimelineViewAtom) const { now } = useAppContext() - const { text, type, day, expertise, track, room, other } = sessionFilter + const { text, type, day, expertise, track, room, cls, other } = sessionFilter useEffect(() => { if (typeof window === 'undefined') return @@ -162,9 +162,12 @@ const useSessionFilter = (sessions: SessionType[], event: any) => { .filter(Boolean) ), ], - track: [...new Set(sessions.map(session => session.track)), 'CLS'] + track: [...new Set(sessions.map(session => session.track))] .filter(Boolean) .filter(track => !track.startsWith('[CLS]')), + cls: [...new Set(sessions.map(session => session.track))] + .filter(Boolean) + .filter(track => track.startsWith('[CLS]')), room: [...new Set(sessions.map(session => session.slot_room?.name))].filter(Boolean).sort((a: any, b: any) => { if (a === 'Main Stage') return -1 if (b === 'Main Stage') return 1 @@ -202,10 +205,10 @@ const useSessionFilter = (sessions: SessionType[], event: any) => { Object.keys(day).length === 0 || sessionFilter.day[moment.utc(session.slot_start).add(7, 'hours').format('MMM D')] const matchesExpertise = Object.keys(expertise).length === 0 || sessionFilter.expertise[session.expertise] - const matchesCLS = session.track.startsWith('[CLS]') && sessionFilter.track['CLS'] - const matchesTrack = Object.keys(track).length === 0 || sessionFilter.track[session.track] || matchesCLS + const matchesCLSTrack = session.track.startsWith('[CLS]') && sessionFilter.track['CLS'] + const matchesTrack = Object.keys(track).length === 0 || sessionFilter.track[session.track] || matchesCLSTrack const matchesRoom = Object.keys(room).length === 0 || sessionFilter.room[session.slot_room?.name] - + const matchesCLS = Object.keys(cls).length === 0 || sessionFilter.cls[session.track] const matchesAttending = sessionFilter.other['Attending'] && isAttending const matchesInterested = sessionFilter.other['Interested In'] && isInterested const matchesFavorites = @@ -219,7 +222,16 @@ const useSessionFilter = (sessions: SessionType[], event: any) => { const matchesOther = (matchesUpcoming && matchesFavorites) || Object.keys(other).length === 0 - return matchesText && matchesType && matchesDay && matchesExpertise && matchesTrack && matchesRoom && matchesOther + return ( + matchesText && + matchesType && + matchesDay && + matchesExpertise && + matchesTrack && + matchesRoom && + matchesOther && + matchesCLS + ) }) }, [sessions, sessionFilter]) @@ -742,7 +754,10 @@ export const SessionFilterAdvanced = ({ filterOptions }: { filterOptions: any }) type: {}, }) }} - className={tagClassTwo(false, ' !text-[black] font-semibold')} + className={cn( + tagClassTwo(false, ' !text-[black] font-semibold'), + Object.keys(sessionFilter.type).length === 0 && 'hidden' + )} > Reset
@@ -760,6 +775,38 @@ export const SessionFilterAdvanced = ({ filterOptions }: { filterOptions: any }) +
+
+ Expertise +
{ + setSessionFilter({ + ...sessionFilter, + expertise: {}, + }) + }} + className={cn( + tagClassTwo(false, ' !text-[black] font-semibold'), + Object.keys(sessionFilter.expertise).length === 0 && 'hidden' + )} + > + Reset +
+
+
+ {filterOptions.expertise.map((expertise: string) => ( +
toggleFilter('expertise', expertise)} + > + {expertise} +
+ ))} +
+
+
Tracks
@@ -770,7 +817,10 @@ export const SessionFilterAdvanced = ({ filterOptions }: { filterOptions: any }) track: {}, }) }} - className={tagClassTwo(false, ' font-semibold')} + className={cn( + tagClassTwo(false, ' !text-[black] font-semibold'), + Object.keys(sessionFilter.track).length === 0 && 'hidden' + )} > Reset
@@ -794,28 +844,31 @@ export const SessionFilterAdvanced = ({ filterOptions }: { filterOptions: any })
- Expertise + Community-Led Sessions (CLS)
{ setSessionFilter({ ...sessionFilter, - expertise: {}, + cls: {}, }) }} - className={tagClassTwo(false, ' !text-[black] font-semibold')} + className={cn( + tagClassTwo(false, ' !text-[black] font-semibold'), + Object.keys(sessionFilter.cls).length === 0 && 'hidden' + )} > Reset
- {filterOptions.expertise.map((expertise: string) => ( + {filterOptions.cls.map((cls: string) => (
toggleFilter('expertise', expertise)} + key={cls} + // className={tagClass(sessionFilter.cls[cls]) + ' !text-black font-semibold !shrink'} + className={cn(filterTagClass(sessionFilter.cls[cls]), '!shrink')} + onClick={() => toggleFilter('cls', cls)} > - {expertise} + {cls.split('[CLS]')[1]}
))}
@@ -831,7 +884,10 @@ export const SessionFilterAdvanced = ({ filterOptions }: { filterOptions: any }) room: {}, }) }} - className={tagClassTwo(false, ' !text-[black] font-semibold')} + className={cn( + tagClassTwo(false, ' !text-[black] font-semibold'), + Object.keys(sessionFilter.room).length === 0 && 'hidden' + )} > Reset
@@ -1000,6 +1056,7 @@ export const SessionFilter = ({ filterOptions }: { filterOptions: any }) => { computeFilterShorthand(sessionFilter.type, 'Session Type'), computeFilterShorthand(sessionFilter.expertise, 'Expertise'), computeFilterShorthand(sessionFilter.room, 'Rooms'), + computeFilterShorthand(sessionFilter.cls, 'CLS'), ] .filter(val => !!val) .join(', ') || '' diff --git a/devcon-app/src/components/domain/app/dc7/speakers/index.tsx b/devcon-app/src/components/domain/app/dc7/speakers/index.tsx index 399e3ff90..baef6e89e 100644 --- a/devcon-app/src/components/domain/app/dc7/speakers/index.tsx +++ b/devcon-app/src/components/domain/app/dc7/speakers/index.tsx @@ -445,7 +445,7 @@ export const SpeakerList = ({ speakers }: { speakers: SpeakerType[] | null }) => return (
- + {/* } } }} - /> + /> */} -
+
setDevaBotVisible('Recommend speakers who know about ')}>
Recommend speakers who know about...
@@ -782,7 +782,7 @@ export const SpeakerLayout = ({ speakers }: { speakers: SpeakerType[] | null }) className={cn( 'basis-[100%] lg:basis-[40%] lg:min-w-[393px] max-w-[100%] lg:sticky lg:top-[72px] lg:self-start' )} - > + >
diff --git a/devcon-app/src/pages/_app.tsx b/devcon-app/src/pages/_app.tsx index d75aee809..d571441d4 100644 --- a/devcon-app/src/pages/_app.tsx +++ b/devcon-app/src/pages/_app.tsx @@ -77,6 +77,7 @@ export const initialFilterState = { expertise: {}, day: {}, room: {}, + cls: {}, other: {}, } diff --git a/lib/components/ui/toast.tsx b/lib/components/ui/toast.tsx index 42687b97e..f33768980 100644 --- a/lib/components/ui/toast.tsx +++ b/lib/components/ui/toast.tsx @@ -1,11 +1,11 @@ -import * as React from "react" -import { Cross2Icon } from "@radix-ui/react-icons" -import * as ToastPrimitives from "@radix-ui/react-toast" -import { cva, type VariantProps } from "class-variance-authority" +import * as React from "react"; +import { Cross2Icon } from "@radix-ui/react-icons"; +import * as ToastPrimitives from "@radix-ui/react-toast"; +import { cva, type VariantProps } from "class-variance-authority"; -import { cn } from "@/shadcn/lib/utils" +import { cn } from "@/shadcn/lib/utils"; -const ToastProvider = ToastPrimitives.Provider +const ToastProvider = ToastPrimitives.Provider; const ToastViewport = React.forwardRef< React.ElementRef, @@ -14,20 +14,21 @@ const ToastViewport = React.forwardRef< -)) -ToastViewport.displayName = ToastPrimitives.Viewport.displayName +)); +ToastViewport.displayName = ToastPrimitives.Viewport.displayName; const toastVariants = cva( "group pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-md border border-neutral-200 p-4 pr-6 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full dark:border-neutral-800", { variants: { variant: { - default: "border bg-white text-neutral-950 dark:bg-neutral-950 dark:text-neutral-50", + default: + "border bg-white text-neutral-950 dark:bg-neutral-950 dark:text-neutral-50", destructive: "destructive group border-red-500 bg-red-500 text-neutral-50 dark:border-red-900 dark:bg-red-900 dark:text-neutral-50", }, @@ -36,7 +37,7 @@ const toastVariants = cva( variant: "default", }, } -) +); const Toast = React.forwardRef< React.ElementRef, @@ -49,9 +50,9 @@ const Toast = React.forwardRef< className={cn(toastVariants({ variant }), className)} {...props} /> - ) -}) -Toast.displayName = ToastPrimitives.Root.displayName + ); +}); +Toast.displayName = ToastPrimitives.Root.displayName; const ToastAction = React.forwardRef< React.ElementRef, @@ -65,8 +66,8 @@ const ToastAction = React.forwardRef< )} {...props} /> -)) -ToastAction.displayName = ToastPrimitives.Action.displayName +)); +ToastAction.displayName = ToastPrimitives.Action.displayName; const ToastClose = React.forwardRef< React.ElementRef, @@ -83,8 +84,8 @@ const ToastClose = React.forwardRef< > -)) -ToastClose.displayName = ToastPrimitives.Close.displayName +)); +ToastClose.displayName = ToastPrimitives.Close.displayName; const ToastTitle = React.forwardRef< React.ElementRef, @@ -95,8 +96,8 @@ const ToastTitle = React.forwardRef< className={cn("text-sm font-semibold [&+div]:text-xs", className)} {...props} /> -)) -ToastTitle.displayName = ToastPrimitives.Title.displayName +)); +ToastTitle.displayName = ToastPrimitives.Title.displayName; const ToastDescription = React.forwardRef< React.ElementRef, @@ -107,12 +108,12 @@ const ToastDescription = React.forwardRef< className={cn("text-sm opacity-90", className)} {...props} /> -)) -ToastDescription.displayName = ToastPrimitives.Description.displayName +)); +ToastDescription.displayName = ToastPrimitives.Description.displayName; -type ToastProps = React.ComponentPropsWithoutRef +type ToastProps = React.ComponentPropsWithoutRef; -type ToastActionElement = React.ReactElement +type ToastActionElement = React.ReactElement; export { type ToastProps, @@ -124,4 +125,4 @@ export { ToastDescription, ToastClose, ToastAction, -} +};