• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

sangupta / bedrock / 4360887097

08 Mar 2023 03:34AM UTC coverage: 80.687% (+14.5%) from 66.224%
4360887097

push

github

Sandeep Gupta
export all prop interfaces

121 of 129 branches covered (93.8%)

Branch coverage included in aggregate %.

5185 of 6447 relevant lines covered (80.43%)

1.36 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

47.48
/src/components/asset/AdobePdfFileViewer.tsx
1
/**
1✔
2
 * bedrock - UI Component Library
1✔
3
 * https://github.com/sangupta/bedrock
1✔
4
 *
1✔
5
 * MIT License.
1✔
6
 * Copyright (c) 2022, Sandeep Gupta.
1✔
7
 *
1✔
8
 * Use of this source code is governed by a MIT style license
1✔
9
 * that can be found in LICENSE file in the code repository.
1✔
10
 */
1✔
11

1✔
12
import React from 'react';
1✔
13
import { BaseProps } from '../../types';
1✔
14

1✔
15
export type AdobePdfEmbedMode = 'fullWindow' | 'sizedContainer' | 'inline' | 'lightbox';
1✔
16

1✔
17
export const EMBED_MODES = {
1✔
18
    fullWindow: 'FULL_WINDOW',
1✔
19
    sizedContainer: 'SIZED_CONTAINER',
1✔
20
    inline: 'IN_LINE',
1✔
21
    lightbox: 'LIGHT_BOX'
1✔
22
};
1✔
23

1✔
24
export interface AdobePdfFileViewerProps extends BaseProps {
1✔
25
    divID: string;
1✔
26
    clientID: string;
1✔
27
    pdfUrl: string;
1✔
28
    fileName: string;
1✔
29

1✔
30
    sdkUrl?: string;
1✔
31
    loadDefaultSDK?: boolean;
1✔
32

1✔
33
    embedMode?: AdobePdfEmbedMode;
1✔
34
    showAnnotationTools?: boolean;
1✔
35
    showDownloadPDF?: boolean;
1✔
36
    showPrintPDF?: boolean;
1✔
37
    showThumbnails?: boolean;
1✔
38
    showBookmarks?: boolean;
1✔
39
    showZoomControl?: boolean;
1✔
40
}
1✔
41

1✔
42
/**
1✔
43
 * An Adobe PDF Embed API based PDF viewer.
1✔
44
 * Refer https://developer.adobe.com/document-services/apis/pdf-embed/ for more details.
1✔
45
 * 
1✔
46
 * @author sangupta
1✔
47
 */
1✔
48
export default class AdobePdfFileViewer extends React.Component<AdobePdfFileViewerProps> {
1✔
49

1✔
50
    static defaultProps = {
1✔
51
        loadDefaultSDK: false,
8✔
52
        embedMode: 'sizedContainer',
8✔
53
        showAnnotationTools: true,
8✔
54
        showDownloadPDF: true,
8✔
55
        showThumbnails: true,
8✔
56
        showBookmarks: true,
8✔
57
        showZoomControl: true,
8✔
58
        showPrintPDF: true
8✔
59
    }
8✔
60

1✔
61
    listenerAdded: boolean = false;
1✔
62

×
63
    componentDidMount(): void {
×
64
        let { sdkUrl, loadDefaultSDK } = this.props;
×
65
        const dc = (window as any).AdobeDC;
×
66

×
67
        // DC already loaded
×
68
        if (dc && dc.View) {
×
69
            this.loadPdf();
×
70
            return;
×
71
        }
×
72

×
73
        if (loadDefaultSDK) {
×
74
            if (!sdkUrl) {
×
75
                sdkUrl = 'https://documentservices.adobe.com/view-sdk/viewer.js';
×
76
            }
×
77
        }
×
78

×
79
        // not loaded, and not allowed to load
×
80
        if (!sdkUrl) {
×
81
            console.warn('Adobe PDF Embed library is not loaded');
×
82
            return;
×
83
        }
×
84

×
85
        // we can load SDK ourselves
×
86
        const script = document.createElement('script');
×
87
        script.src = sdkUrl;
×
88

×
89
        this.listenerAdded = true;
×
90
        document.addEventListener('adobe_dc_view_sdk.ready', this.dcReady);
×
91
        document.body.appendChild(script);
×
92
    }
×
93

×
94
    componentWillUnmount(): void {
×
95
        if (this.listenerAdded) {
×
96
            document.removeEventListener('adobe_dc_view_sdk.ready', this.dcReady);
×
97
        }
×
98
    }
×
99

×
100
    dcReady = (): void => {
×
101
        this.loadPdf();
×
102
    }
×
103

×
104
    loadPdf = (): void => {
×
105
        const { clientID, divID, pdfUrl, fileName, embedMode, showAnnotationTools, showDownloadPDF,
×
106
            showPrintPDF, showThumbnails, showBookmarks, showZoomControl } = this.props;
×
107
        const dc = (window as any).AdobeDC;
×
108

×
109
        if (!pdfUrl) {
×
110
            return;
×
111
        }
×
112

×
113
        const dcHandle = new dc.View({ clientId: clientID, divId: divID });
×
114
        dcHandle.previewFile({
×
115
            content: {
×
116
                location:
×
117
                    { url: pdfUrl }
×
118
            },
×
119
            metaData: {
×
120
                fileName: fileName
×
121
            }
×
122
        }, {
×
123
            embedMode: EMBED_MODES[embedMode],
×
124
            showAnnotationTools: showAnnotationTools,
×
125
            showDownloadPDF: showDownloadPDF,
×
126
            showPrintPDF: showPrintPDF,
×
127
            showBookmarks: showBookmarks,
×
128
            showThumbnails: showThumbnails,
×
129
            showZoomControl: showZoomControl
×
130
        });
×
131
    }
×
132

1✔
133
    render() {
1✔
134
        const { divID, className } = this.props;
×
135
        return <div id={divID} className={className} />
×
136
    }
×
137

1✔
138
}
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc