To open one or more file records in Lightning Experience and the Salesforce app, use the navigation service, lightning/navigation.
The navigation service opens the preview of one or more files in a modal dialog in Lightning Experience or triggers a file download in the Salesforce app on mobile devices.
The navigation service uses a PageReference, which describes a page, or in this case, a file.
Use a page reference with
type: 'standard__namedPage'
pageName: 'filePreview'
Page Reference sample
recordIds: the property is a comma-separated list of all record IDs(ContentDocumentId) available for download.
selectedRecordId: the selectedRecordId specifies the record to downloads first.
FilePreviewInLWC.js
Apex Class
Note
Result
The navigation service opens the preview of one or more files in a modal dialog in Lightning Experience or triggers a file download in the Salesforce app on mobile devices.
The navigation service uses a PageReference, which describes a page, or in this case, a file.
Use a page reference with
type: 'standard__namedPage'
pageName: 'filePreview'
Page Reference sample
this[NavigationMixin.Navigate]({
type: 'standard__namedPage',
attributes: {
pageName: 'filePreview'
},
state : {
recordIds: '069xx0000000001AAA,069xx000000000BAAQ',
selectedRecordId:'069xx0000000001AAA'
}
})
recordIds: the property is a comma-separated list of all record IDs(ContentDocumentId) available for download.
selectedRecordId: the selectedRecordId specifies the record to downloads first.
Example
FilePreviewInLWC.html
<template>
<lightning-card title="File Preview In Lightning Web Component">
<template if:true={files}>
<table class="slds-table slds-table_bordered slds-table_cell-buffer">
<thead>
<tr class="slds-text-title_caps">
<th scope="col">
<div title="Key">File Name</div>
</th>
<th scope="col">
<div title="Value">File Extension</div>
</th>
</tr>
</thead>
<tbody>
<template for:each={files} for:item="keyValue">
<tr key={keyValue.Id}>
<th scope="col">
<div>{keyValue.Title}</div>
</th>
<th scope="col">
<div>{keyValue.FileExtension}</div>
</th>
<th scope="col">
<!-- Using Dataset Property to get ContentDocumentId -->
<lightning-button data-id={keyValue.ContentDocumentId}
label="Preview"
variant="brand"
value="file preview"
onclick={filePreview}></lightning-button>
</th>
</tr>
</template>
</tbody>
</table>
</template>
</lightning-card>
</template>
FilePreviewInLWC.js
import { LightningElement, wire, track } from 'lwc';
// importing Apex class method
import retriveFiles from '@salesforce/apex/LWCExampleController.retriveFiles';
// importing navigation service
import { NavigationMixin } from 'lightning/navigation';
// extends the class to 'NavigationMixin'
export default class FilePrivewInLWC extends NavigationMixin(LightningElement) {
// reactive variables
@track files;
// Reteriving the files to preview
@wire(retriveFiles)
filesData({data, error}) {
if(data) {
window.console.log('data ===> '+data);
this.files = data;
}
else if(error) {
window.console.log('error ===> '+JSON.stringify(error));
}
}
// when you click the preview button this method will call and
// it will show the preview of the file based on ContentDocumentId
filePreview(event) {
// Naviagation Service to the show preview
this[NavigationMixin.Navigate]({
type: 'standard__namedPage',
attributes: {
pageName: 'filePreview'
},
state : {
// assigning ContentDocumentId to show the preview of file
selectedRecordId:event.currentTarget.dataset.id
}
})
}
}
public inherited sharing class LWCExampleController {
@AuraEnabled(cacheable=true)
public static list<ContentVersion> retriveFiles(){
return [SELECT Id, Title, FileExtension, ContentDocumentId From ContentVersion];
}
}
Note
- The filePreview named page value supports the ContentDocument and ContentHubItem (external files) objects.
- The filePreview named page value is supported in Lightning Experience and all versions of the mobile app.
- It isn’t supported in other containers, such as Lightning Components for Visualforce, Lightning Out, or Communities.
- The page value isn’t supported even if you access these containers inside Lightning Experience or the Salesforce mobile app.
Result