Generate Office App Links for:
enum OfficeAppType {
Word = "ms-word:",
Powerpoint = "ms-powerpoint:",
Excel = "ms-excel:",
Visio = "ms-visio:",
Project = "ms-project:",
Publisher = "ms-publisher:",
}
export enum OfficeOpeningMode {
View = "ofe|u|",
Edit = "ofv|u|",
New = "nft|u|",
}
const FileTypeMap = {
// word
'doc': OfficeAppType.Word,
'docm': OfficeAppType.Word,
'docx': OfficeAppType.Word,
'docb': OfficeAppType.Word,
'dot': OfficeAppType.Word,
'dotm': OfficeAppType.Word,
'dotx': OfficeAppType.Word,
// powerpoint
'pps': OfficeAppType.Powerpoint,
'ppsm': OfficeAppType.Powerpoint,
'ppsx': OfficeAppType.Powerpoint,
'ppt': OfficeAppType.Powerpoint,
'pptm': OfficeAppType.Powerpoint,
'pptx': OfficeAppType.Powerpoint,
'sldx': OfficeAppType.Powerpoint,
'sldm': OfficeAppType.Powerpoint,
// excel
'xlc': OfficeAppType.Excel,
'xls': OfficeAppType.Excel,
'xlsb': OfficeAppType.Excel,
'xlsm': OfficeAppType.Excel,
'xlsx': OfficeAppType.Excel,
'xlt': OfficeAppType.Excel,
'xltm': OfficeAppType.Excel,
'xltx': OfficeAppType.Excel,
// visio
'vdx': OfficeAppType.Visio,
'vsd': OfficeAppType.Visio,
'vsdm': OfficeAppType.Visio,
'vsdx': OfficeAppType.Visio,
'vsw': OfficeAppType.Visio,
'vdw': OfficeAppType.Visio,
'vss': OfficeAppType.Visio,
'vssm': OfficeAppType.Visio,
'vssx': OfficeAppType.Visio,
'vst': OfficeAppType.Visio,
'vstm': OfficeAppType.Visio,
'vstx': OfficeAppType.Visio,
'vsx': OfficeAppType.Visio,
// project
'mpp': OfficeAppType.Project,
// publisher
'pub': OfficeAppType.Publisher
}
/**
* Generates a link that opens the file based on the filetype in the correct office app
* @see - Office URI Schemes: https://docs.microsoft.com/en-us/office/client-developer/office-uri-schemes
* @see - Office File Formats: https://github.com/OfficeDev/office-ui-fabric-react/blob/master/packages/file-type-icons/src/FileTypeIconMap.ts
* @param url base link to use
* @param fileType filetype e.g. doc, docx, xls
*
* @example - converts URL:
* from -> https://advisprojectpoc1.sharepoint.com/sites/STS_POC/BereichInformatik/word003.docx?d=w26b61b083aa6401f8a9f828a3339c506
* to -> ms-word:ofe|u|https://advisprojectpoc1.sharepoint.com/sites/STS_POC/BereichInformatik/word003.docx
*/
// prettier-ignore
export const generateOfficeAppLink = (url:string, fileType:string, openingMode:OfficeOpeningMode = OfficeOpeningMode.Edit):string | null => {
let _newUrl = url.substring(0, url.indexOf('?'));
let _fileTypeSplit = fileType.split(".");
let _fileType = _fileTypeSplit[_fileTypeSplit.length-1];
let _officeAppType = FileTypeMap[_fileType];
if(!_officeAppType) return null;
_newUrl = `${_officeAppType}${openingMode}${_newUrl}`;
return _newUrl;
}