Extract function for getting xml tag value
authorMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Mon, 13 Aug 2018 10:31:55 +0000 (12:31 +0200)
committerMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Mon, 13 Aug 2018 10:31:55 +0000 (12:31 +0200)
Feature #13990

Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski@contractors.roche.com>

src/common/xml.ts [new file with mode: 0644]
src/services/collection-service/collection-service.ts

diff --git a/src/common/xml.ts b/src/common/xml.ts
new file mode 100644 (file)
index 0000000..c810de9
--- /dev/null
@@ -0,0 +1,8 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+export const getTagValue = (document: Document | Element, tagName: string, defaultValue: string) => {
+    const [el] = Array.from(document.getElementsByTagName(tagName));
+    return el ? el.innerHTML : defaultValue;
+};
index add7ba9ce33d325b9a42dddb4f5f407c8bb235a3..67c368632dc911d1fb1a9ba72ecbd148640a10b1 100644 (file)
@@ -14,6 +14,7 @@ import { KeepManifestStream } from "../../models/keep-manifest";
 import { WebDAV } from "../../common/webdav";
 import { AuthService } from "../auth-service/auth-service";
 import { mapTree, getNodeChildren, getNode, TreeNode } from "../../models/tree";
+import { getTagValue } from "../../common/xml";
 
 export type UploadProgress = (fileId: number, loaded: number, total: number, currentTime: number) => void;
 
@@ -50,16 +51,10 @@ export class CollectionService extends CommonResourceService<CollectionResource>
             .from(document.getElementsByTagName('D:response'))
             .slice(1)
             .map(element => {
-                const [displayNameElement] = Array.from(element.getElementsByTagName('D:displayname'));
-                const name = displayNameElement ? displayNameElement.innerHTML : undefined;
-
-                const [sizeElement] = Array.from(element.getElementsByTagName('D:getcontentlength'));
-                const size = sizeElement ? parseInt(sizeElement.innerHTML, 10) : 0;
-
-                const [hrefElement] = Array.from(element.getElementsByTagName('D:href'));
-                const pathname = hrefElement ? hrefElement.innerHTML : undefined;
+                const name = getTagValue(element, 'D:displayname', '');
+                const size = parseInt(getTagValue(element, 'D:getcontentlength', '0') as string, 10);
+                const pathname = getTagValue(element, 'D:href', '');
                 const directory = pathname && pathname.replace(/\/c=[0-9a-zA-Z\-]*/, '').replace(`/${name || ''}`, '');
-
                 const href = this.webdavClient.defaults.baseURL + pathname + '?api_token=' + this.authService.getApiToken();
 
                 const data = {