Skip to content

Commit f4c7211

Browse files
committed
Extract common TalkCard usage logic
1 parent 5559217 commit f4c7211

File tree

1 file changed

+57
-55
lines changed

1 file changed

+57
-55
lines changed

shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/ScheduleScreen.kt

Lines changed: 57 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import kotlinconfapp.ui_components.generated.resources.search_24
4040
import kotlinx.coroutines.launch
4141
import org.jetbrains.compose.resources.pluralStringResource
4242
import org.jetbrains.compose.resources.stringResource
43+
import org.jetbrains.kotlinconf.SessionCardView
4344
import org.jetbrains.kotlinconf.SessionId
4445
import org.jetbrains.kotlinconf.ui.components.DayHeader
4546
import org.jetbrains.kotlinconf.ui.components.Divider
@@ -324,35 +325,12 @@ fun ScheduleList(
324325
modifier = Modifier.fillMaxWidth(),
325326
beyondViewportPageCount = 20,
326327
) { page ->
327-
val session = workshops[page]
328-
TalkCard(
329-
title = session.title,
330-
titleHighlights = emptyList(),
331-
bookmarked = session.isFavorite,
332-
onBookmark = { isBookmarked -> onBookmark(session.id, isBookmarked) },
333-
tags = session.tags,
334-
tagHighlights = emptyList(),
335-
speakers = session.speakerLine,
336-
speakerHighlights = emptyList(),
337-
location = session.locationLine,
338-
lightning = session.isLightning,
339-
time = session.badgeTimeLine,
340-
timeNote = session.startsInMinutes?.let { count ->
341-
pluralStringResource(Res.plurals.schedule_in_x_minutes, count, count)
342-
},
343-
status = when {
344-
session.isFinished -> TalkStatus.Past
345-
session.isLive -> TalkStatus.Now
346-
session.isUpcoming -> TalkStatus.Upcoming
347-
else -> TalkStatus.Upcoming // Shouldn't happen
348-
},
349-
onSubmitFeedback = { emotion ->
350-
onSubmitFeedback(session.id, emotion)
351-
},
352-
onSubmitFeedbackWithComment = { emotion, comment ->
353-
onSubmitFeedbackWithComment(session.id, emotion, comment)
354-
},
355-
onClick = { onSession(session.id) },
328+
SessionCard(
329+
session = workshops[page],
330+
onBookmark = onBookmark,
331+
onSubmitFeedback = onSubmitFeedback,
332+
onSubmitFeedbackWithComment = onSubmitFeedbackWithComment,
333+
onSession = onSession,
356334
modifier = Modifier
357335
.fillMaxWidth()
358336
.wrapContentHeight(Alignment.Top)
@@ -370,35 +348,15 @@ fun ScheduleList(
370348
}
371349

372350
is SessionItem -> {
373-
val session = item.value
374-
TalkCard(
375-
title = session.title,
351+
SessionCard(
352+
session = item.value,
376353
titleHighlights = item.titleHighlights,
377-
bookmarked = session.isFavorite,
378-
onBookmark = { isBookmarked -> onBookmark(session.id, isBookmarked) },
379-
tags = session.tags,
380354
tagHighlights = item.tagMatches,
381-
speakers = session.speakerLine,
382355
speakerHighlights = item.speakerHighlights,
383-
location = session.locationLine,
384-
lightning = session.isLightning,
385-
time = session.badgeTimeLine,
386-
timeNote = session.startsInMinutes?.let { count ->
387-
pluralStringResource(Res.plurals.schedule_in_x_minutes, count, count)
388-
},
389-
status = when {
390-
session.isFinished -> TalkStatus.Past
391-
session.isLive -> TalkStatus.Now
392-
session.isUpcoming -> TalkStatus.Upcoming
393-
else -> TalkStatus.Upcoming // Shouldn't happen
394-
},
395-
onSubmitFeedback = { emotion ->
396-
onSubmitFeedback(session.id, emotion)
397-
},
398-
onSubmitFeedbackWithComment = { emotion, comment ->
399-
onSubmitFeedbackWithComment(session.id, emotion, comment)
400-
},
401-
onClick = { onSession(session.id) },
356+
onBookmark = onBookmark,
357+
onSubmitFeedback = onSubmitFeedback,
358+
onSubmitFeedbackWithComment = onSubmitFeedbackWithComment,
359+
onSession = onSession,
402360
modifier = Modifier
403361
.fillMaxWidth()
404362
.padding(horizontal = 12.dp, vertical = 8.dp)
@@ -416,3 +374,47 @@ fun ScheduleList(
416374
}
417375
}
418376
}
377+
378+
@Composable
379+
private fun SessionCard(
380+
session: SessionCardView,
381+
onBookmark: (SessionId, Boolean) -> Unit,
382+
onSubmitFeedback: (SessionId, Emotion?) -> Unit,
383+
onSubmitFeedbackWithComment: (SessionId, Emotion, String) -> Unit,
384+
onSession: (SessionId) -> Unit,
385+
modifier: Modifier = Modifier,
386+
titleHighlights: List<IntRange> = emptyList(),
387+
tagHighlights: List<String> = emptyList(),
388+
speakerHighlights: List<IntRange> = emptyList(),
389+
) {
390+
TalkCard(
391+
title = session.title,
392+
titleHighlights = titleHighlights,
393+
bookmarked = session.isFavorite,
394+
onBookmark = { isBookmarked -> onBookmark(session.id, isBookmarked) },
395+
tags = session.tags,
396+
tagHighlights = tagHighlights,
397+
speakers = session.speakerLine,
398+
speakerHighlights = speakerHighlights,
399+
location = session.locationLine,
400+
lightning = session.isLightning,
401+
time = session.badgeTimeLine,
402+
timeNote = session.startsInMinutes?.let { count ->
403+
pluralStringResource(Res.plurals.schedule_in_x_minutes, count, count)
404+
},
405+
status = when {
406+
session.isFinished -> TalkStatus.Past
407+
session.isLive -> TalkStatus.Now
408+
session.isUpcoming -> TalkStatus.Upcoming
409+
else -> TalkStatus.Upcoming // Shouldn't happen
410+
},
411+
onSubmitFeedback = { emotion ->
412+
onSubmitFeedback(session.id, emotion)
413+
},
414+
onSubmitFeedbackWithComment = { emotion, comment ->
415+
onSubmitFeedbackWithComment(session.id, emotion, comment)
416+
},
417+
onClick = { onSession(session.id) },
418+
modifier = modifier,
419+
)
420+
}

0 commit comments

Comments
 (0)