From fd4031981e2ee7c6ed4aad215b997c62256bf74c Mon Sep 17 00:00:00 2001 From: Tom Wayson Date: Fri, 31 Jul 2020 18:39:35 -0700 Subject: [PATCH] feat(thumbnail url): getItemThumbnailUrl() can take the portal URL instead of request options AFFECTS PACKAGES: @esri/hub-common --- .../src/resources/get-item-thumbnail-url.ts | 17 ++--- .../resources/get-item-thumbnail-url.test.ts | 63 +++++++------------ 2 files changed, 31 insertions(+), 49 deletions(-) diff --git a/packages/common/src/resources/get-item-thumbnail-url.ts b/packages/common/src/resources/get-item-thumbnail-url.ts index 961eb2b35ca..ce584a73a13 100644 --- a/packages/common/src/resources/get-item-thumbnail-url.ts +++ b/packages/common/src/resources/get-item-thumbnail-url.ts @@ -11,14 +11,17 @@ import { getPortalApiUrl } from "../urls"; */ export function getItemThumbnailUrl( item: IItem, - hubRequestOptions: IHubRequestOptions + portalApiUrlOrHubRequestOptions: string | IHubRequestOptions ): string | null { - if (item.thumbnail) { - const portalRestUrl = getPortalApiUrl(hubRequestOptions.portalSelf); - const itemUrl = `${portalRestUrl}/content/items/${item.id}`; - const url = `${itemUrl}/info/${item.thumbnail}`; - return url; - } else { + if (!item || !item.thumbnail) { return null; } + const portalRestUrl = + typeof portalApiUrlOrHubRequestOptions === "string" + ? portalApiUrlOrHubRequestOptions + : getPortalApiUrl(portalApiUrlOrHubRequestOptions.portalSelf); + const itemRestUrl = `${portalRestUrl}/content/items/${item.id}`; + // TODO: handle image types by returning the image itself? + const url = `${itemRestUrl}/info/${item.thumbnail}`; + return url; } diff --git a/packages/common/test/resources/get-item-thumbnail-url.test.ts b/packages/common/test/resources/get-item-thumbnail-url.test.ts index 1f3125d3592..2bb3ca7848e 100644 --- a/packages/common/test/resources/get-item-thumbnail-url.test.ts +++ b/packages/common/test/resources/get-item-thumbnail-url.test.ts @@ -4,19 +4,10 @@ import { IItem } from "@esri/arcgis-rest-types"; import { mockUserSession } from "../test-helpers/fake-user-session"; describe("getItemThumbnailUrl", function() { - it("computes url when item.thumbnail", function() { - const ro: IHubRequestOptions = { - isPortal: false, - hubApiUrl: "", - portalSelf: { - id: "", - name: "", - isPortal: false - }, - authentication: mockUserSession - }; - - const item: IItem = { + const portalApiUrl = "https://portal-api-url"; + let item: IItem; + beforeEach(function() { + item = { id: "abcitemid", thumbnail: "thumbnail.png", owner: "a", @@ -28,22 +19,8 @@ describe("getItemThumbnailUrl", function() { title: "title", type: "CSV" }; - - const portalApiUrl = "https://portal-api-url"; - const getPortalApiSpy = spyOn( - urlsModule, - "getPortalApiUrl" - ).and.returnValue(portalApiUrl); - - const url = getItemThumbnailUrl(item, ro); - - expect(getPortalApiSpy.calls.count()).toBe(1); - expect(url).toBe( - `https://portal-api-url/content/items/abcitemid/info/thumbnail.png` - ); }); - - it("returns null when no item.thumbnail", function() { + it("computes url when passed request options", function() { const ro: IHubRequestOptions = { isPortal: false, hubApiUrl: "", @@ -55,19 +32,6 @@ describe("getItemThumbnailUrl", function() { authentication: mockUserSession }; - const item: IItem = { - id: "abcitemid", - owner: "a", - tags: ["x"], - created: 1, - modified: 1, - numViews: 1, - size: 1, - title: "title", - type: "CSV" - }; - - const portalApiUrl = "https://portal-api-url"; const getPortalApiSpy = spyOn( urlsModule, "getPortalApiUrl" @@ -75,7 +39,22 @@ describe("getItemThumbnailUrl", function() { const url = getItemThumbnailUrl(item, ro); - expect(getPortalApiSpy.calls.count()).toBe(0); + expect(getPortalApiSpy.calls.count()).toBe(1); + expect(url).toBe( + `https://portal-api-url/content/items/abcitemid/info/thumbnail.png` + ); + }); + + it("computes url when passed portal api url", function() { + const url = getItemThumbnailUrl(item, portalApiUrl); + expect(url).toBe( + `https://portal-api-url/content/items/abcitemid/info/thumbnail.png` + ); + }); + + it("returns null when no item.thumbnail", function() { + delete item.thumbnail; + const url = getItemThumbnailUrl(item, portalApiUrl); expect(url).toBeNull(); }); });