@@ -8,6 +8,7 @@ import { ErrorFallback } from "@frontend/common/components/error_handler";
88import { FallbackImage } from "@frontend/common/components/fallback_image" ;
99import { BackendAPI , Common } from "@frontend/common/hooks" ;
1010import { SessionSchema } from "@frontend/common/schemas/backendAPI" ;
11+ import { getSessionDetailUrl } from "@frontend/common/utils" ;
1112
1213import { StyledDivider } from "./styled_divider" ;
1314
@@ -17,9 +18,8 @@ const SESSION_FALLBACK_IMAGE_STYLE: CSSProperties = { width: "100%", height: "10
1718const SessionItem : FC < {
1819 session : SessionSchema ;
1920 enableLink ?: boolean ;
20- fallbackImage ?: ReactNode ;
21- getSessionUrl ?: ( session : SessionSchema ) => string ;
22- } > = Suspense . with ( { fallback : < CircularProgress /> } , ( { session, enableLink, fallbackImage, getSessionUrl } ) => {
21+ linkable ?: boolean ;
22+ } > = Suspense . with ( { fallback : < CircularProgress /> } , ( { session, enableLink, linkable } ) => {
2323 const sessionTitle = session . title . replace ( "\\n" , "\n" ) ;
2424
2525 let speakerImgSrc = session . image || "" ;
@@ -32,7 +32,12 @@ const SessionItem: FC<{
3232 }
3333 }
3434
35- const sessionDetailedUrl = getSessionUrl ? getSessionUrl ( session ) : undefined ;
35+ const sessionEvent = session . presentation_type . event ;
36+ const resolvedFallbackImage = sessionEvent . logo ? (
37+ < img src = { sessionEvent . logo } alt = { sessionEvent . name } style = { SESSION_FALLBACK_IMAGE_STYLE } />
38+ ) : undefined ;
39+
40+ const sessionDetailedUrl = linkable ? getSessionDetailUrl ( session ) : undefined ;
3641 const result = (
3742 < SessionItemContainer direction = "row" >
3843 < SessionImageContainer
@@ -41,7 +46,7 @@ const SessionItem: FC<{
4146 src = { speakerImgSrc }
4247 alt = "Session Image"
4348 loading = "lazy"
44- errorFallback = { < SessionImageErrorFallback > { fallbackImage } </ SessionImageErrorFallback > }
49+ errorFallback = { < SessionImageErrorFallback > { resolvedFallbackImage } </ SessionImageErrorFallback > }
4550 />
4651 }
4752 />
@@ -76,10 +81,6 @@ type SessionListPropType = {
7681 types ?: string | string [ ] ;
7782 /** `true`면 각 세션을 상세 페이지 링크로 감싼다. */
7883 enableLink ?: boolean ;
79- /** 세션 이미지가 없을 때 표시할 기본 대체 이미지 노드. */
80- fallbackImage ?: ReactNode ;
81- /** 세션 객체로부터 상세 페이지 URL 을 만드는 함수. */
82- getSessionUrl ?: ( session : SessionSchema ) => string ;
8384} ;
8485
8586/**
@@ -89,27 +90,12 @@ type SessionListPropType = {
8990 */
9091export const SessionList : FC < SessionListPropType > = ErrorBoundary . with (
9192 { fallback : ErrorFallback } ,
92- Suspense . with ( { fallback : < CircularProgress /> } , ( { event, types, enableLink, fallbackImage, getSessionUrl } ) => {
93- const { language } = Common . useCommonContext ( ) ;
93+ Suspense . with ( { fallback : < CircularProgress /> } , ( { event, types, enableLink } ) => {
94+ const { language, appType } = Common . useCommonContext ( ) ;
95+ const linkable = appType === "main" ;
9496 const backendAPIClient = BackendAPI . useBackendClient ( ) ;
9597 const params = { ...( event && { event } ) , ...( types && { types : isString ( types ) ? types : types . join ( "," ) } ) } ;
9698 const { data : sessions } = BackendAPI . useSessionsQuery ( backendAPIClient , params ) ;
97- const { data : events } = BackendAPI . useEventsQuery ( backendAPIClient ) ;
98-
99- const resolvedFallbackImageByEvent = useMemo < Record < string , ReactNode > > ( ( ) => {
100- const map : Record < string , ReactNode > = { } ;
101- for ( const ev of events ?? [ ] ) {
102- if ( ! ev . logo ) continue ;
103- const year = ev . name . match ( / \d { 4 } / ) ?. [ 0 ] ;
104- if ( year ) map [ year ] = < img src = { ev . logo } alt = { ev . name } style = { SESSION_FALLBACK_IMAGE_STYLE } /> ;
105- }
106- return map ;
107- } , [ events ] ) ;
108-
109- const resolvedFallbackImage =
110- ( event
111- ? ( resolvedFallbackImageByEvent [ event ] ?? Object . entries ( resolvedFallbackImageByEvent ) . find ( ( [ key ] ) => event . includes ( key ) ) ?. [ 1 ] )
112- : undefined ) ?? fallbackImage ;
11399
114100 const warningMessage =
115101 language === "ko"
@@ -156,7 +142,7 @@ export const SessionList: FC<SessionListPropType> = ErrorBoundary.with(
156142 ) }
157143 </ Box >
158144 { filteredSessions . map ( ( s ) => (
159- < SessionItem key = { s . id } session = { s } enableLink = { enableLink } fallbackImage = { resolvedFallbackImage } getSessionUrl = { getSessionUrl } />
145+ < SessionItem key = { s . id } session = { s } enableLink = { enableLink } linkable = { linkable } />
160146 ) ) }
161147 </ Box >
162148 ) ;
0 commit comments