@kwiz/common
Version:
KWIZ common utilities and helpers for M365 platform
215 lines • 8.71 kB
JavaScript
import { lastIndexOf, toHash } from "../../../helpers/collections.base";
import { isNotEmptyArray, isNullOrEmptyString, isNullOrUndefined, isNumber } from "../../../helpers/typecheckers";
import { jsonTypes } from "../../../types/rest.types";
import { FileSystemObjectTypes } from "../../../types/sharepoint.types";
import { GeListItemsFoldersBehaviour } from "../../../types/sharepoint.utils.types";
import { ConsoleLogger } from "../../consolelogger";
import { DecodeFieldValuesAsTextKey, GetFieldNameFromRawValues } from "../common";
import { GetItemsByIdSync } from "./GetListItemsById";
const logger = ConsoleLogger.get("utils/sharepoint.rest/listutils/common");
export function __fixGetListItemsResults(siteUrl, listIdOrTitle, items, foldersBehaviour, expandedLookupFields) {
let folders = {};
let itemFileRefMap = {};
if (isNotEmptyArray(items) && isNullOrUndefined(items[0].FileRef)) {
//customer support ticket - request was missing teh FileRef column!
let additionalItems = GetItemsByIdSync(siteUrl, listIdOrTitle, items.map(i => i.Id), {
select: ["Id", "FileRef", "FileSystemObjectType"],
jsonMetadata: jsonTypes.nometadata
});
itemFileRefMap = toHash(additionalItems, i => i.Id.toString(10));
}
items.forEach(item => {
try {
if (itemFileRefMap[item.Id]) {
let mappedValue = itemFileRefMap[item.Id];
item.FileRef = mappedValue.FileRef;
item.FileSystemObjectType = mappedValue.FileSystemObjectType;
}
let fileRef = item.FileRef || "";
let parts = fileRef.split('/');
item.FileLeafRef = parts.pop() || "";
item.FileDirRef = parts.join('/');
item.FileOrFolderName = item.FileLeafRef.split('.')[0];
if (item.FileSystemObjectType === 1) {
item.FileType = "folder";
item.__Items = [];
folders[fileRef.toLowerCase()] = item;
item.__DisplayTitle = item.FileLeafRef;
}
else {
//issue 8094 file name might have multiple dots
let splitDot = item.FileLeafRef.split('.');
item.FileType = splitDot.length > 1 ? splitDot.pop().toLowerCase() : "folder";
item.__DisplayTitle = splitDot.join('.');
if (item.FileType === '000') {
item.FileType = 'listitem';
item.__DisplayTitle = item.Title;
if (isNullOrEmptyString(item.__DisplayTitle))
item.__DisplayTitle = `Item #${item.Id}`;
}
}
if (isNotEmptyArray(expandedLookupFields))
expandedLookupFields.forEach((f) => {
//ISSUE: 1519
let lookupField = f.LookupField;
//ISSUE: 1250 - expanded lookup fields with names that start with '_'
//will be returned as OData__name. We have to use the field name returned
//from GetFieldNameFromRawValues without the 'Id' appended to the name because
//the value has been expanded.
let fieldInternalName = f.InternalName;
let rawValue = item[f.InternalName];
if (isNullOrUndefined(rawValue)) {
fieldInternalName = GetFieldNameFromRawValues(f, {
excludeIdFromName: true
});
rawValue = item[fieldInternalName];
}
if (rawValue) {
item.FieldValuesAsText = item.FieldValuesAsText || {};
let value = rawValue;
if (Array.isArray(value)) //multi value
{
let id = [];
let text = [];
value.forEach(v => {
id.push(v.Id);
if (!isNullOrEmptyString(lookupField) && !isNullOrUndefined(v[lookupField])) {
text.push(v[lookupField]);
}
else {
text.push(v.Title);
}
});
item[`${fieldInternalName}Id`] = id;
item.FieldValuesAsText[DecodeFieldValuesAsTextKey(fieldInternalName)] = text.join(", ");
}
else if (isNumber(value && value.Id)) {
item[`${fieldInternalName}Id`] = value.Id;
//ISSUE: 1519 - condition to check if lookup field exists and get the value from the rawValue object by string index of lookup field key
if (!isNullOrEmptyString(lookupField) && !isNullOrUndefined(value[lookupField])) {
item.FieldValuesAsText[DecodeFieldValuesAsTextKey(fieldInternalName)] = value[lookupField];
}
else {
item.FieldValuesAsText[DecodeFieldValuesAsTextKey(fieldInternalName)] = value.Title;
}
}
}
});
}
catch (e) {
logger.error(`Failed to fix list item result ${item && item.Id || 'unknown id'}`);
}
});
//loop through items, put them inside folders
let itemsInRoot = [];
items.forEach(item => {
let parentFolder = folders[item.FileDirRef.toLowerCase()];
if (!isNullOrUndefined(parentFolder)) {
if (item.FileSystemObjectType === FileSystemObjectTypes.Folder) {
//add it before any items, so we have folders first (sorted) and items after
let indexOfLastFolder = lastIndexOf(parentFolder.__Items, i => i.FileSystemObjectType === FileSystemObjectTypes.Folder);
parentFolder.__Items.splice(indexOfLastFolder + 1, 0, item);
}
else
parentFolder.__Items.push(item);
item.__ParentFolder = parentFolder;
}
else
itemsInRoot.push(item);
});
switch (foldersBehaviour) {
case GeListItemsFoldersBehaviour.AllItemsNoFolders:
return items.filter(r => r.FileSystemObjectType !== 1);
case GeListItemsFoldersBehaviour.ItemsInsideFolders:
return itemsInRoot;
case GeListItemsFoldersBehaviour.ItemsAndFoldersFlat:
default:
return items;
}
}
export var SkipFields = [
"appauthor",
"appeditor",
"linktitle",
"linktitlenomenu",
"linkfilename",
"linkfilenamenomenu",
"_copysource",
"_complianceflags",
"_compliancetag",
"_compliancetagwrittentime",
"_compliancetaguserid",
"_isrecord",
//issue 5576: allow user to see version column "_uiversionstring",
"itemchildcount",
"folderchildcount",
"complianceassetid",
"xd_progid",
"xd_signature",
"_shortcuturl",
"_shortcutsiteid",
"_shortcutwebid",
"_shortcutuniqueid",
"_hascopydestinations",
"sortbehavior",
"permmask",
"syncclientid",
"progid",
"scopeid",
"virusstatus",
"_editmenutablestart",
"_editmenutablestart2",
"_editmenutableend",
"linkfilename2",
"basename",
"metainfo",
"_level",
"_iscurrentversion",
"originatorid",
"noexecute",
"bsn",
"_listschemaversion",
"_dirty",
"_parsable",
"_stubfile",
"_virusstatus",
"_virusvendorid",
"_virusinfo",
"_rmstemplateid",
"_iplabelid",
"_displayname",
"smtotalsize",
"smlastmodifieddate",
"smtotalfilestreamsize",
"smtotalfilecount",
"selecttitle",
"selectfilename",
"edit",
"workflowversion",
"workflowinstanceid",
"parentversionstring",
"parentleafname",
"docconcurrencynumber",
"parentuniqueid",
"streamhash",
"combine",
"repairdocument"
];
/**
* version #.# or version ID as number
* version: 1.5 >> version ID for history
* */
export function SPVersionToVersionId(version) {
try {
if (isNumber(version))
return version;
const vSplit = version.split('.');
const major = parseInt(vSplit[0], 10);
const minor = parseInt(vSplit[1], 10);
let versionId = (major * 512) + minor;
return versionId;
}
catch (e) { }
return null;
}
//# sourceMappingURL=common.js.map