From c553db39e6a283e59ef73aec2839ccdf2946168e Mon Sep 17 00:00:00 2001 From: Patrick Rodgers Date: Mon, 6 Aug 2018 10:51:49 -0400 Subject: [PATCH] fix for issue #190 --- packages/sp/src/odata.ts | 17 ++++++++++++----- packages/sp/src/utils/extractweburl.ts | 4 +++- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/packages/sp/src/odata.ts b/packages/sp/src/odata.ts index 86cd578e7..7a0ff511f 100644 --- a/packages/sp/src/odata.ts +++ b/packages/sp/src/odata.ts @@ -1,15 +1,22 @@ import { SharePointQueryableConstructor } from "./sharepointqueryable"; -import { extend } from "@pnp/common"; +import { extend, combinePaths } from "@pnp/common"; import { Logger, LogLevel } from "@pnp/logging"; import { ODataParser, ODataParserBase } from "@pnp/odata"; +import { extractWebUrl } from "./utils/extractweburl"; export function spExtractODataId(candidate: any): string { - if (candidate.hasOwnProperty("odata.id")) { - return candidate["odata.id"]; - } else if (candidate.hasOwnProperty("__metadata") && candidate.__metadata.hasOwnProperty("id")) { - return candidate.__metadata.id; + if (candidate.hasOwnProperty("odata.metadata") && candidate.hasOwnProperty("odata.editLink")) { + // we are dealign with minimal metadata (default) + return combinePaths(extractWebUrl(candidate["odata.metadata"]), "_api", candidate["odata.editLink"]); + } else if (candidate.hasOwnProperty("odata.editLink")) { + return combinePaths("_api", candidate["odata.editLink"]); + } else if (candidate.hasOwnProperty("__metadata")) { + // we are dealing with verbose, which has an absolute uri + return candidate.__metadata.uri; } else { + // we are likely dealing with nometadata, so don't error but we won't be able to + // chain off these objects Logger.write("No uri information found in ODataEntity parsing, chaining will fail for this object.", LogLevel.Warning); return ""; } diff --git a/packages/sp/src/utils/extractweburl.ts b/packages/sp/src/utils/extractweburl.ts index 1d81a4f1c..6c3e6cc05 100644 --- a/packages/sp/src/utils/extractweburl.ts +++ b/packages/sp/src/utils/extractweburl.ts @@ -1,6 +1,8 @@ +import { stringIsNullOrEmpty } from "@pnp/common"; + export function extractWebUrl(candidateUrl: string) { - if (candidateUrl === null) { + if (stringIsNullOrEmpty(candidateUrl)) { return ""; }