+
{Array(numberOfSlides)
.fill(0)
.map((_, idx) => (
diff --git a/src/hooks/use-deck.js b/src/hooks/use-deck.js
index f77ab780c..e9bf89eb6 100644
--- a/src/hooks/use-deck.js
+++ b/src/hooks/use-deck.js
@@ -19,6 +19,7 @@ function useDeck(initialState) {
immediateElement: false,
reverseDirection: action.payload.reverseDirection,
presenterMode: action.payload.presenterMode,
+ overviewMode: action.payload.overviewMode,
resolvedInitialUrl: true
};
return newState;
diff --git a/src/hooks/use-url-routing.js b/src/hooks/use-url-routing.js
index b475f5815..1b67b69dc 100644
--- a/src/hooks/use-url-routing.js
+++ b/src/hooks/use-url-routing.js
@@ -13,6 +13,7 @@ export default function useUrlRouting(options) {
currentSlide,
currentSlideElement,
currentPresenterMode,
+ currentOverviewMode,
loop,
animationsWhenGoingBack,
onUrlChange
@@ -55,6 +56,7 @@ export default function useUrlRouting(options) {
const query = queryString.parse(url);
const immediate = Boolean(query.immediate);
const presenterMode = Boolean(query.presenterMode);
+ const overviewMode = Boolean(query.overviewMode);
const proposedSlideNumber = parseInt(query.slide, 10);
const proposedSlideElementNumber = parseInt(query.slideElement, 10);
const slideNumber = isSlideOutOfBounds(proposedSlideNumber)
@@ -68,9 +70,16 @@ export default function useUrlRouting(options) {
? DEFAULT_SLIDE_ELEMENT_INDEX
: proposedSlideElementNumber;
+ if (overviewMode && presenterMode) {
+ throw new Error(
+ 'Presenter Mode and Overview Mode cannot be used at the same time.'
+ );
+ }
+
return {
immediate,
presenterMode,
+ overviewMode,
proposedSlideNumber,
proposedSlideElementNumber,
slideNumber,
@@ -84,13 +93,14 @@ export default function useUrlRouting(options) {
slideNumber => {
const qs = queryString.stringify({
presenterMode: currentPresenterMode || undefined,
+ overviewMode: currentOverviewMode || undefined,
immediate: true,
slide: slideNumber,
slideElement: DEFAULT_SLIDE_ELEMENT_INDEX
});
history.current.push(`?${qs}`);
},
- [currentPresenterMode]
+ [currentPresenterMode, currentOverviewMode]
);
const onHistoryChange = React.useCallback(() => {
@@ -100,6 +110,7 @@ export default function useUrlRouting(options) {
proposedSlideNumber,
proposedSlideElementNumber,
presenterMode,
+ overviewMode,
immediate
} = stateFromUrl(window.location.search);
/**
@@ -115,7 +126,8 @@ export default function useUrlRouting(options) {
slide: slideNumber,
slideElement: slideElementNumber,
immediate: immediate || undefined,
- presenterMode: presenterMode || undefined
+ presenterMode: presenterMode || undefined,
+ overviewMode: overviewMode || undefined
});
history.current.replace(`?${qs}`);
return;
@@ -132,7 +144,8 @@ export default function useUrlRouting(options) {
type: 'GO_TO_SLIDE',
payload: {
...update,
- presenterMode
+ presenterMode,
+ overviewMode
}
});
onUrlChange(update);
@@ -175,13 +188,15 @@ export default function useUrlRouting(options) {
slide: nextSafeSlideIndex,
slideElement: nextSafeSlideElementIndex,
immediate: immediate || undefined,
- presenterMode: currentPresenterMode || undefined
+ presenterMode: currentPresenterMode || undefined,
+ overviewMode: currentOverviewMode || undefined
});
history.current.push(`?${qs}`);
},
[
countSlideElements,
currentPresenterMode,
+ currentOverviewMode,
currentSlide,
currentSlideElement,
loop,
@@ -227,13 +242,15 @@ export default function useUrlRouting(options) {
slide: previousSafeSlideIndex,
slideElement: previousSafeSlideElementIndex,
immediate: immediate || undefined,
- presenterMode: currentPresenterMode || undefined
+ presenterMode: currentPresenterMode || undefined,
+ overviewMode: currentOverviewMode || undefined
});
history.current.push(`?${qs}`);
}, [
animationsWhenGoingBack,
countSlideElements,
currentPresenterMode,
+ currentOverviewMode,
currentSlide,
currentSlideElement,
loop,