+import axios from 'axios';
import OpenSeadragon from 'openseadragon';
import PropTypes from 'prop-types';
import React from 'react';
export const useOpenSeadragon = () => React.useContext(Context);
export const Provider = React.forwardRef(({ children }, ref) => {
+ const [activeMap, setActiveMap] = React.useState('lw');
+ const [pins, setPins] = React.useState([]);
const [viewer, setViewer] = React.useState(null);
React.useEffect(() => {
};
}, [ref.current]);
- return <Context.Provider value={{ viewer }}>
+ React.useEffect(() => {
+ if (!viewer) return;
+ switch (activeMap) {
+ case 'lw':
+ viewer.goToPage(0);
+ break;
+ case 'dw':
+ viewer.goToPage(1);
+ break;
+ case 'sp':
+ viewer.goToPage(2);
+ break;
+ case 'uw':
+ viewer.goToPage(3);
+ break;
+ }
+ const controller = new AbortController();
+ axios.get(`/api/markers/${activeMap}`, {
+ signal: controller.signal,
+ }).then(response => {
+ setPins(response.data || []);
+ }).catch(e => {
+ if (!axios.isCancel(e)) {
+ console.error(e);
+ }
+ });
+ return () => {
+ controller.abort();
+ };
+ }, [activeMap, viewer]);
+
+ return <Context.Provider value={{ activeMap, setActiveMap, pins, viewer }}>
{children}
</Context.Provider>;
});