From 55f9a3712c7a47c45b2a34b6f6173f0e3813e3dd Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Wed, 15 Oct 2025 23:05:51 +0300 Subject: [PATCH] refactor(collection/presentation): deduplicate slide rendering --- .../collections/presentation/index.tsx | 34 ++++++++----------- .../widgets/collections/presentation/model.ts | 4 +-- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/apps/client/src/widgets/collections/presentation/index.tsx b/apps/client/src/widgets/collections/presentation/index.tsx index c25d0678f..ad321dba6 100644 --- a/apps/client/src/widgets/collections/presentation/index.tsx +++ b/apps/client/src/widgets/collections/presentation/index.tsx @@ -4,7 +4,7 @@ import Reveal from "reveal.js"; import slideBaseStylesheet from "reveal.js/dist/reveal.css?raw"; import slideThemeStylesheet from "reveal.js/dist/theme/black.css?raw"; import slideCustomStylesheet from "./slidejs.css?raw"; -import { buildPresentationModel, PresentationModel, PresentationSlideModel } from "./model"; +import { buildPresentationModel, PresentationModel, PresentationSlideBaseModel } from "./model"; import ShadowDom from "../../react/ShadowDom"; import ActionButton from "../../react/ActionButton"; import "./index.css"; @@ -116,30 +116,26 @@ function Presentation({ presentation, apiRef: externalApiRef } : { presentation: return (
- {presentation.slides?.map(slide => ( - - ))} + {presentation.slides?.map(slide => { + if (!slide.verticalSlides) { + return + } else { + return ( +
+ + {slide.verticalSlides.map(slide => )} +
+ ); + } + })}
) } -function Slide({ slide }: { slide: PresentationSlideModel }) { - if (!slide.verticalSlides) { - // Normal slide. - return
; - } else { - // Slide with sub notes (show as vertical slides). - return ( -
-
- {slide.verticalSlides.map((slide) => ( -
- ))} -
- ) - } +function Slide({ slide }: { slide: PresentationSlideBaseModel }) { + return
; } function getNoteIdFromSlide(slide: HTMLElement | undefined) { diff --git a/apps/client/src/widgets/collections/presentation/model.ts b/apps/client/src/widgets/collections/presentation/model.ts index 2d53f4ef7..a94ada59f 100644 --- a/apps/client/src/widgets/collections/presentation/model.ts +++ b/apps/client/src/widgets/collections/presentation/model.ts @@ -4,12 +4,12 @@ import contentRenderer from "../../../services/content_renderer"; type DangerouslySetInnerHTML = { __html: string; }; /** A top-level slide with optional vertical slides. */ -export interface PresentationSlideModel extends PresentationSlideBaseModel { +interface PresentationSlideModel extends PresentationSlideBaseModel { verticalSlides: PresentationSlideBaseModel[] | undefined; } /** Either a top-level slide or a vertical slide. */ -interface PresentationSlideBaseModel { +export interface PresentationSlideBaseModel { noteId: string; content: DangerouslySetInnerHTML; }