UNPKG

@chalkbooks/react-doc-viewer

Version:
47 lines (46 loc) 2.79 kB
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 };