@chalkbooks/react-doc-viewer
Version:
File viewer for React.
47 lines (46 loc) • 2.79 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
import React, { createContext, useEffect, useReducer, useImperativeHandle, forwardRef, } from "react";
import { defaultLanguage, locales } from "../i18n";
import { nextDocument, previousDocument, setAllDocuments, setMainConfig, updateCurrentDocument, } from "./actions";
import { initialState, mainStateReducer, } from "./mainStateReducer";
var DocViewerContext = createContext({ state: initialState, dispatch: function () { return null; } });
var DocViewerProvider = forwardRef(function (props, ref) {
var _a;
var children = props.children, documents = props.documents, config = props.config, pluginRenderers = props.pluginRenderers, prefetchMethod = props.prefetchMethod, requestHeaders = props.requestHeaders, initialActiveDocument = props.initialActiveDocument, language = props.language, activeDocument = props.activeDocument, onDocumentChange = props.onDocumentChange;
var _b = useReducer(mainStateReducer, __assign(__assign({}, initialState), { documents: documents || [], currentDocument: documents && documents.length
? initialActiveDocument
? initialActiveDocument
: documents[0]
: undefined, config: config, pluginRenderers: pluginRenderers, prefetchMethod: prefetchMethod, requestHeaders: requestHeaders, currentFileNo: initialActiveDocument
? (_a = documents.findIndex(function (doc) { return doc === initialActiveDocument; })) !== null && _a !== void 0 ? _a : 0
: 0, language: language && locales[language] ? language : defaultLanguage, activeDocument: activeDocument, onDocumentChange: onDocumentChange })), state = _b[0], dispatch = _b[1];
useEffect(function () {
dispatch(setAllDocuments(documents, initialActiveDocument));
config && dispatch(setMainConfig(config));
}, [documents, config, initialActiveDocument]);
useEffect(function () {
if (activeDocument) {
dispatch(updateCurrentDocument(activeDocument));
}
}, [activeDocument]);
useImperativeHandle(ref, function () { return ({
prev: function () {
dispatch(previousDocument());
},
next: function () {
dispatch(nextDocument());
},
}); }, [dispatch]);
return (React.createElement(DocViewerContext.Provider, { value: { state: state, dispatch: dispatch } }, children));
});
export { DocViewerContext, DocViewerProvider };