UNPKG

@amsterdam/bmi-component-library

Version:

A React component library based on ASC and Material-UI aimed at repurposing and sharing components across BMI projects

2 lines 2.77 kB
function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}function _object_spread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};var ownKeys=Object.keys(source);if(typeof Object.getOwnPropertySymbols==="function"){ownKeys=ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym){return Object.getOwnPropertyDescriptor(source,sym).enumerable}))}ownKeys.forEach(function(key){_define_property(target,key,source[key])})}return target}import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";import{useEffect,useState}from"react";import{Alert,Heading,themeColor}from"@amsterdam/asc-ui";import{DocumentViewerStyle,SpinnerStyle}from"./DocumentViewerStyles";import DocumentRenderer from"./Renderer/DocumentRenderer";const DocumentViewer=({uri,onFailure,currentFilename})=>{const[documentState,setDocumentState]=useState({loading:true});const{loading,filename,error,contentType}=documentState;const updateDocumentState=documentState=>{setDocumentState(prevState=>_object_spread({},prevState,documentState))};useEffect(()=>{updateDocumentState({loading:true,error:undefined,contentType:undefined});fetch(uri,{method:"GET"}).then(response=>{var _response_headers_get,_response_headers_get1,_filenameParts_;if(!response.ok)throw new Error(response.status===404?"Document niet gevonden.":"Fout bij het ophalen.");const[firstContentType]=((_response_headers_get=response.headers.get("content-type"))===null||_response_headers_get===void 0?void 0:_response_headers_get.split(";"))||[];if(!firstContentType)throw new Error("Fout bij het ophalen.");const filenameParts=((_response_headers_get1=response.headers.get("content-disposition"))===null||_response_headers_get1===void 0?void 0:_response_headers_get1.split("filename="))||[];const filename=(_filenameParts_=filenameParts[1])===null||_filenameParts_===void 0?void 0:_filenameParts_.replace(/^"(.+(?="$))"$/,"$1");updateDocumentState({loading:false,contentType:firstContentType,filename})}).catch(e=>{updateDocumentState({loading:false,error:e.message});if(onFailure)onFailure(e)})},[uri]);if(loading){return _jsx(DocumentViewerStyle,{"data-testid":"document-viewer",children:_jsx(SpinnerStyle,{"data-testid":"spinner",color:themeColor("secondary"),size:25})})}return _jsxs(DocumentViewerStyle,{"data-testid":"document-viewer",children:[_jsx(Heading,{forwardedAs:"h3",children:filename!==null&&filename!==void 0?filename:currentFilename}),error&&_jsx(Alert,{level:"error",outline:true,children:error}),contentType&&_jsx(DocumentRenderer,{uri:uri,contentType:contentType})]})};export default DocumentViewer; //# sourceMappingURL=DocumentViewer.js.map