UNPKG

react-pdf-ner-annotator

Version:

A React component to annotate named entities directly onto a PDF.

112 lines 7.66 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; exports.__esModule = true; var react_1 = __importStar(require("react")); var usePDF_1 = __importDefault(require("./hooks/usePDF")); var useAnnotations_1 = __importDefault(require("./hooks/useAnnotations")); var useTextMap_1 = __importDefault(require("./hooks/useTextMap")); var Page_1 = __importDefault(require("./components/Page")); var Error_1 = __importDefault(require("./components/Error")); var ButtonGroup_1 = __importDefault(require("./components/ButtonGroup")); var EntityVisualisation_1 = __importDefault(require("./components/EntityVisualisation")); var annotationContext_1 = __importDefault(require("./context/annotationContext")); var configContext_1 = __importDefault(require("./context/configContext")); var entityContext_1 = __importDefault(require("./context/entityContext")); var useAnnotationUpdater_1 = __importDefault(require("./hooks/useAnnotationUpdater")); var Annotator = (0, react_1.forwardRef)(function (_a, ref) { var _b = _a.config, config = _b === void 0 ? {} : _b, url = _a.url, data = _a.data, _c = _a.initialScale, initialScale = _c === void 0 ? 1.5 : _c, _d = _a.tokenizer, tokenizer = _d === void 0 ? new RegExp(/\w+([,.\-/]\w+)+|\w+|\W/g) : _d, entity = _a.entity, initialTextMap = _a.initialTextMap, _e = _a.defaultAnnotations, defaultAnnotations = _e === void 0 ? [] : _e, hoveredEntities = _a.hoveredEntities, getAnnotations = _a.getAnnotations, getTextMaps = _a.getTextMaps; var _f = (0, react_1.useState)(initialScale), scale = _f[0], setScale = _f[1]; var _g = (0, usePDF_1["default"])({ url: url, data: data, httpHeaders: config.httpHeaders }), pages = _g.pages, error = _g.error, fetchPage = _g.fetchPage; var _h = (0, useAnnotations_1["default"])(defaultAnnotations, config.readonly, config.shouldUpdateDefaultAnnotations), annotations = _h.annotations, getAnnotationsForPage = _h.getAnnotationsForPage, addAnnotation = _h.addAnnotation, updateAnnotation = _h.updateAnnotation, updateLastAnnotationForEntity = _h.updateLastAnnotationForEntity, deleteAnnotation = _h.removeAnnotation, lastActionHash = _h.lastActionHash; var _j = (0, useTextMap_1["default"])(annotations), textMap = _j.textMap, addPageToTextMap = _j.addPageToTextMap; (0, useAnnotationUpdater_1["default"])(lastActionHash, annotations, config.readonly, getAnnotations); (0, react_1.useImperativeHandle)(ref, function () { return ({ removeAnnotation: removeAnnotation }); }); var removeAnnotation = function (id) { deleteAnnotation(id); }; (0, react_1.useEffect)(function () { if (getTextMaps) { getTextMaps(initialTextMap || textMap); } }, [textMap, initialTextMap, getTextMaps]); var style = (0, react_1.useMemo)(function () { if (config.hideAnnotatingEntityVisualizations) { return {}; } if (entity) { return { border: "5px solid ".concat(entity.color) }; } return {}; }, [entity, config]); var getTextLayerForPage = (0, react_1.useCallback)(function (page) { if (initialTextMap) { var found = initialTextMap.find(function (layer) { return layer.page === page; }); var shouldRender = found.shouldRender !== undefined ? found.shouldRender : true; return found ? [found.textMapItems, shouldRender] : [undefined, true]; } return [undefined, true]; }, [initialTextMap]); if (!url && !data) { return (react_1["default"].createElement("div", { className: "annotator-container" }, react_1["default"].createElement("div", { className: "annotator-pages-container" }, react_1["default"].createElement("div", { className: "annotator-pages" }, react_1["default"].createElement(Error_1["default"], { message: "You need to provide either valid PDF data or a URL to a PDF" }))))); } if (error) { return (react_1["default"].createElement("div", { className: "annotator-container" }, react_1["default"].createElement("div", { className: "annotator-pages-container" }, react_1["default"].createElement("div", { className: "annotator-pages" }, react_1["default"].createElement(Error_1["default"], null))))); } return (react_1["default"].createElement(configContext_1["default"].Provider, { value: { config: config } }, react_1["default"].createElement("div", { className: "annotator-container", style: style }, react_1["default"].createElement(EntityVisualisation_1["default"], { entity: entity }), react_1["default"].createElement("div", { className: "annotator-pages-container" }, react_1["default"].createElement(entityContext_1["default"].Provider, { value: { entity: entity } }, react_1["default"].createElement(annotationContext_1["default"].Provider, { value: { annotations: annotations, removeAnnotation: removeAnnotation, updateAnnotation: updateAnnotation, tokenizer: tokenizer, hoveredEntities: hoveredEntities } }, react_1["default"].createElement("div", { className: "annotator-pages" }, Array(pages) .fill(0) .map(function (_, index) { var key = "pdf-page-".concat(index); var pageNumber = index + 1; var page = fetchPage(pageNumber); var _a = getTextLayerForPage(pageNumber), initialTextLayer = _a[0], shouldRender = _a[1]; return (react_1["default"].createElement(Page_1["default"], { shouldRender: shouldRender, page: page, scale: scale, key: key, pageNumber: pageNumber, annotations: getAnnotationsForPage(pageNumber), addAnnotation: addAnnotation, updateLastAnnotationForEntity: updateLastAnnotationForEntity, addPageToTextMap: addPageToTextMap, initialTextLayer: initialTextLayer })); }))))), react_1["default"].createElement(ButtonGroup_1["default"], { scale: scale, setScale: setScale })))); }); exports["default"] = (0, react_1.memo)(Annotator); //# sourceMappingURL=Annotator.js.map