@mikezimm/fps-core-v7
Version:
Library of reusable core interfaces, types and constants migrated from fps-library-v2
137 lines (135 loc) • 8.04 kB
JavaScript
import { ALLProgrammingFileKeys, } from '../../SearchPage/Interfaces/ProgrammingFileKeys';
import { ItemIsADocSet, ItemIsADraft, ItemIsAFile, ItemIsAFileObject, ItemIsAMajor, ItemIsANewsLink, ItemIsANewsPost, ItemIsAPage, ItemIsCheckedOut, ItemIsCodeContent, ItemIsFolderContent, ItemIsPublished, ItemIsUnPublished } from "../../AnyContent/IsA/IFPSItemIsA";
import { addItemIsA } from "./addItemIsA";
export function addSearchFileDataItems(items, sourceProps) {
items.map((item) => {
item = addSearchFileData(item, sourceProps);
});
return items;
}
export function addSearchFileData(item, sourceProps) {
if (item.File || item.FileSizeDisplay || item.FileLeafRef || item.FileRef || item.File_x0020_Type || item.FirstPublishedDate) {
// Item is a file
item = addItemIsA(item, ItemIsAFileObject);
}
else {
return item;
}
item.FPSItem.File.fileDisplayName = ''; //Basically the file name but without extension
// This loop was originally in addDateTimeFileInfoSearch
//Added this to flatten file url for easier use
if (item.File && item.File.ServerRelativeUrl) {
item['File/ServerRelativeUrl'] = item.File.ServerRelativeUrl;
// https://github.com/mikezimm/pivottiles7/issues/314
const FileLeafRef = item.File.FileLeafRef ? item.File.FileLeafRef : item.File.ServerRelativeUrl.substring(item.File.ServerRelativeUrl.lastIndexOf('/') + 1);
if (!item.File.FileRef)
item.File.FileRef = item.File.ServerRelativeUrl;
if (!item.File.Name)
item.File.Name = FileLeafRef;
if (!item.File.FileLeafRef)
item.File.FileLeafRef = FileLeafRef;
item.FPSItem.File ? item.FPSItem.File.valid = true : item.FPSItem.File = {
valid: true,
fileDisplayName: FileLeafRef,
};
}
//https://github.com/mikezimm/Compliance/issues/121
if (item.FileSizeDisplay)
item.FPSItem.File.fileSizeNumber = parseInt(item.FileSizeDisplay);
let { searchTitle, searchDesc, } = item.FPSItem.Search;
let searchType = item.FPSItem.Search.type;
const extIdx = item.FileRef ? item.FileRef.lastIndexOf('.') : -1;
if (item['File_x0020_Type']) { // eslint-disable-line dot-notation
searchType = item['File_x0020_Type']; // eslint-disable-line dot-notation
searchTitle = item.FileLeafRef ? item.FileLeafRef : 'No Filename to show'; // eslint-disable-line dot-notation
item.FPSItem.File.fileDisplayName = item.FileLeafRef ? item.FileLeafRef.replace(`.${searchType}`, '') : ''; // eslint-disable-line dot-notation
searchDesc = '';
item = addItemIsA(item, ItemIsAFile);
// https://github.com/mikezimm/fps-library-v2/issues/51 - DO NOT do this loop if it's a folder with a . in it :)
}
else if (item.FileSystemObjectType !== 1 && extIdx > -1) {
searchType = item.FileRef ? item.FileRef.substring(extIdx + 1) : '';
if (searchType === 'aspx') {
searchType = 'page';
searchTitle = item.Title;
item.FPSItem.File.fileDisplayName = item.FileLeafRef ? item.FileLeafRef.replace(`.aspx`, '') : ''; // eslint-disable-line dot-notation
searchDesc = item.Description;
/**
* OData__OriginalSourceUrl is a hidden column in SharePoint Online that is used to store the original URL of a document that was uploaded to SharePoint.
* This column is used by the SharePoint Online search engine to crawl and index documents.
* It is not recommended to modify or delete this column as it can cause issues with search results and other SharePoint Online features¹.
I hope this helps! Let me know if you have any other questions.
Source: Conversation with Bing, 7/6/2023
(1) Use OData query operations in SharePoint REST requests. https://learn.microsoft.com/en-us/sharepoint/dev/sp-add-ins/use-odata-query-operations-in-sharepoint-rest-requests.
(2) OData Source for SharePoint Online - social.msdn.microsoft.com. https://social.msdn.microsoft.com/Forums/en-US/58807617-90aa-48e3-a06f-9582b683d8de/odata-source-for-sharepoint-online?forum=sharepointadmin.
(3) Working with SharePoint Online through OData v4 Endpoint - KingswaySoft. http://www.kingswaysoft.com/blog/2021/06/29/Working-with-SharePoint-Online-through-OData-v4-Endpoint.
(4) Using OData sources with Business Connectivity Services in SharePoint .... https://learn.microsoft.com/en-us/sharepoint/dev/general-development/using-odata-sources-with-business-connectivity-services-in-sharepoint.
*/
if (item.OData__OriginalSourceUrl !== null) {
item = addItemIsA(item, ItemIsANewsLink);
}
else if (item.PromotedState === 1 || item.PromotedState === 2) {
item = addItemIsA(item, ItemIsANewsPost);
}
else {
item = addItemIsA(item, ItemIsAPage);
}
}
// Handle folder objects
}
else if (!searchType && item.FileSystemObjectType === 1) {
const thisContentType = item[`ContentType/Name`] ? item[`ContentType/Name`] : 'Unknown';
if (thisContentType.indexOf(`Document Set`) > -1) {
searchType = 'docset';
item[`File_x0020_Type`] = 'docset';
searchTitle = item.FileLeafRef ? item.FileLeafRef : '';
searchDesc = item.Description ? item.Description : '';
item = addItemIsA(item, ItemIsADocSet);
}
else {
searchType = 'folder';
item[`File_x0020_Type`] = 'folder';
searchTitle = item.FileLeafRef ? item.FileLeafRef : ''; //webRelativeLink
const webLink = `${sourceProps.webUrl}${sourceProps.webRelativeLink ? sourceProps.webRelativeLink : ''}`;
const fileRelativeLink = item.FileRef && item.FileRef.indexOf(webLink) === 0 ?
item.FileRef.substring(webLink.length) : item.FileRef ? item.FileRef : '';
searchDesc = item.Description ? item.Description : !item.FileLeafRef ? '' : fileRelativeLink.substring(0, fileRelativeLink.lastIndexOf(item.FileLeafRef) - 1);
item = addItemIsA(item, ItemIsFolderContent);
}
}
else {
searchType = sourceProps.defType;
searchTitle = item.Title;
searchDesc = 'Other Type Search Desc';
}
// If folder, add folderTree array
if (item.FileSystemObjectType === 0 || item.FileSystemObjectType === 1) {
const libUrl = `${sourceProps.webUrl}${sourceProps.webRelativeLink ? sourceProps.webRelativeLink : ''}`;
const folderString = item.FileRef && libUrl ? item.FileRef.replace(libUrl, '').replace(`/${item.FileLeafRef}`, '') : '';
const folderTree = folderString ? folderString.indexOf('/') === 0 ? folderString.substring(1).split('/') : folderString.split('/') : [];
item.FPSItem.File.folderString = folderString;
item.FPSItem.File.folderTree = folderTree;
}
const minorVersion = item.OData__UIVersionString && item.OData__UIVersionString.split('.')[1] !== '0' ? true : false;
if (minorVersion === true) {
item = addItemIsA(item, ItemIsADraft);
}
else if (item.OData__UIVersionString) {
item = addItemIsA(item, ItemIsAMajor);
}
;
if (item.PromotedState === 1) {
item = addItemIsA(item, ItemIsUnPublished);
}
else if (item.PromotedState === 2) {
item = addItemIsA(item, ItemIsPublished);
}
if (item['File_x0020_Type'] && ALLProgrammingFileKeys.indexOf(item['File_x0020_Type']) > -1) {
item = addItemIsA(item, ItemIsCodeContent);
}
if (item.CheckoutUserId) {
item = addItemIsA(item, ItemIsCheckedOut);
}
return item;
}
//# sourceMappingURL=addSearchFile.js.map