pages/ValuePartnership/PartnershipsPage/PresentationBrowser.jsxjavascript
import PropTypes from "prop-types";
import { UIMCButton } from "@ui-marcom/react/button";
import { UIMCIcon } from "@ui-marcom/react/icon";
import "./PresentationBrowser.scss";
/**
* Full-screen browse overlay, ported from value-slideview-filter.js (the old
* "SlideViewFilter" - a misleading name, it has nothing to do with filtering
* a single deck's slides). Two modes:
* - "all": every presentation deck, grouped per content.valuePartnership's
* partnershipsFilterUS/partnershipsFilter link groups (hideUS picks which).
* - "keySlides": a thumbnail grid of content.valuePartnership.partnerships
* .keySlides.overview, each opening its matching mini-deck from keySlides.ppt.
*
* @param {Object} props
* @param {"all"|"keySlides"} props.mode
* @param {boolean} props.hideUS - Accepted (per PartnershipsPage's `linkGroups` selection) but its own toggle switch is currently commented out below, so this is presently unused inside the component.
* @param {function(boolean): void} props.onToggleHideUS - See `hideUS` - currently unused inside the component.
* @param {Array} props.linkGroups - `content.valuePartnership.partnershipsFilterUS|Filter.groups`.
* @param {Array} props.ppt - Full presentation-deck list (to resolve a link's ppt.id).
* @param {Array} props.keySlidesOverview
* @param {Array} props.keySlidesPpt
* @param {function(Object, number=): void} props.onSelectPpt
* @param {function(): void} props.onClose
* @param {function(): void} props.onSwitchMode - Jumps to the other mode ("all" <-> "keySlides").
*/
export const PresentationBrowser = ({
mode,
linkGroups,
ppt,
keySlidesOverview,
keySlidesPpt,
onSelectPpt,
onClose,
onSwitchMode,
}) => {
return (
<div
className={`presentation-browser${mode === "all" ? " presentation-browser--all-presentations" : ""}`}>
<h1 className="presentation-browser__headline">
{mode === "all" ? "All presentations" : "Key slides"}
</h1>
{mode === "all" ? (
<div className={`presentation-browser__card`}>
{/* <div className="presentation-browser__toggles">
<UIMCToggleSwitch
isChecked={hideUS}
onChange={({ checked }) => onToggleHideUS(checked)}
/>
<span>Hide US content</span>
</div> */}
<div className="presentation-browser__groups">
{linkGroups.map((group) => (
<div key={group.label} className="presentation-browser__group">
<ul className="presentation-browser__link-list">
{group.options.map((option) => (
<li key={option.id}>
<a
href="#value-partnership/partnerships"
onClick={(e) => {
e.preventDefault();
const found = ppt.find((p) => p.id === option.id);
if (found) onSelectPpt(found);
}}>
<UIMCIcon icon="arrow-right-medium" size="small" />
{option.label}
</a>
</li>
))}
</ul>
</div>
))}
</div>
</div>
) : (
<div className="presentation-browser__key-slides">
{keySlidesOverview.map((slide) => (
<div
key={slide.id}
className="presentation-browser__key-slide"
onClick={() => {
const found = keySlidesPpt.find((k) => k.id === slide.id);
if (found) onSelectPpt(found, 1);
}}>
<img src={slide.src} alt="" loading="lazy" />
<p>{slide.title}</p>
</div>
))}
</div>
)}
<UIMCButton
className="presentation-browser__switch-mode"
variant="standard"
title={mode === "all" ? "Show key slides" : "Show all presentations"}
onClick={onSwitchMode}>
<UIMCIcon slot="prefix" icon="arrow-right-medium" />
{mode === "all" ? "Show key slides" : "Show all presentations"}
</UIMCButton>
<UIMCButton
className="presentation-browser__close"
variant="primary-content"
title={mode === "all" ? "Close all presentations" : "Close key slides"}
onClick={onClose}>
<UIMCIcon slot="prefix" icon="close" />
{mode === "all" ? "Close all presentations" : "Close key slides"}
</UIMCButton>
</div>
);
};
PresentationBrowser.propTypes = {
mode: PropTypes.oneOf(["all", "keySlides"]).isRequired,
hideUS: PropTypes.bool.isRequired,
onToggleHideUS: PropTypes.func.isRequired,
linkGroups: PropTypes.array.isRequired,
ppt: PropTypes.array.isRequired,
keySlidesOverview: PropTypes.array.isRequired,
keySlidesPpt: PropTypes.array.isRequired,
onSelectPpt: PropTypes.func.isRequired,
onClose: PropTypes.func.isRequired,
onSwitchMode: PropTypes.func.isRequired,
};