To preview note attachment i use PCF control. In my PCF control based on entity Id it loads is corresponding note file like : pdf, docs and other into a grid. when i will click on preview then it preview the document.
To preview document i use https://www.npmjs.com/package/react-file-viewer this npm package support
- Images: png, jpeg, gif, bmp, including 360-degree images
- csv
- xslx
- docx
- Video: mp4, webm
- Audio: mp3
Into my PCF control i use :
Import:
const FileViewer = require('react-file-viewer');
react return view:
<div>
<FileViewer
fileType={this.state.filePreviewType}
filePath={this.state.filePreviewPath}
/>
</div>
On preview document click event i pass the id
private _previewAttachment = (id: string): void => {
debugger;
// this._refreshData();
this._props.context.webAPI
.retrieveRecord(
"annotation",
id,
"?$select=documentbody,filename,filesize,mimetype"
)
.then((result) => {
return {
fileContent: result["documentbody"],
fileName: result["filename"],
fileSize: result["filesize"],
mimeType: result["mimetype"],
};
})
.then((fileObj) => {
let mimeTypeforPreview = "";
// eslint-disable-next-line no-empty
if (fileObj.mimeType == "application/msword" || fileObj.mimeType == "application/vnd.openxmlformats-officedocument.wordprocessingml.document") {
mimeTypeforPreview = "application/docx";
} else {
mimeTypeforPreview = fileObj.mimeType;
}
const imageBase64pdf: string = "data:" + mimeTypeforPreview + ";base64, " + fileObj.fileContent;
let mimeTypestring = mimeTypeforPreview;
let mimetypeindex = mimeTypestring.indexOf('/');
const filePreviewTypestring = mimeTypestring.substring((mimetypeindex + 1), mimeTypestring.length);
this.setState({
sidePanelState: SidePanelState.closed,
noteId: "",
noteTitle: "",
noteText: "",
noteFile: null,
filePreviewPath: imageBase64pdf,
filePreviewType: filePreviewTypestring
});
});
debugger;
};
If you generated file stream is not working then you can also check the stream.
https://codesandbox.io/s/0uysf?file=/src/index.js:85-102
Comments
Post a Comment