get items()

in client/src/components/pipelines/browser/data-storage/index.js [569:702]


  get items () {
    const {
      pageElements: elements = [],
      pagePath: path,
      info,
      storageId,
      downloadEnabled: downloadable
    } = this.storage;
    if (!info) {
      return [];
    }
    const writeAllowed = this.storage.writeAllowed;
    const {sensitive} = info;
    const items = [];
    const documentPreviewAvailable = (item) => {
      const {preferences} = this.props;
      return /^file$/i.test(item.type) &&
        preferences.dataStorageItemPreviewMasks.some(mask => mask.test(item.path));
    };
    if (path) {
      const parentPathParts = path.split('/').slice(0, -1);
      const parentPath = parentPathParts.length ? parentPathParts.join('/') : undefined;
      items.push({
        key: `folder_${parentPath || '<parent>'}`,
        name: '..',
        path: parentPath,
        type: 'folder',
        downloadable: false,
        editable: false,
        selectable: false,
        shareAvailable: false,
        navigationBackward: true
      });
    }
    const getChildList = (item, versions, sensitive) => {
      if (!versions || !this.showVersions) {
        return undefined;
      }
      const childList = [];
      const restoreStatus = this.getRestoredStatus(item) || {};
      const fileRestored = restoreStatus.status === STATUS.SUCCEEDED;
      for (let version in versions) {
        if (versions.hasOwnProperty(version)) {
          const archived = versions[version].labels &&
            !isStandardClass(versions[version].labels['StorageClass']);
          const versionRestored = restoreStatus.restoreVersions &&
            restoreStatus.status === STATUS.SUCCEEDED;
          const latest = versions[version].version === item.version;
          childList.push({
            key: `${item.type}_${item.path}_${version}`,
            ...versions[version],
            downloadable: item.type.toLowerCase() === 'file' &&
              !versions[version].deleteMarker &&
              !sensitive &&
              (!archived || (latest ? fileRestored : versionRestored)) &&
              downloadable,
            editable: versions[version].version === item.version &&
              writeAllowed &&
              !versions[version].deleteMarker,
            deletable: writeAllowed,
            selectable: false,
            shareAvailable: false,
            latest,
            isVersion: true,
            archived,
            restored: latest
              ? fileRestored
              : versionRestored
          });
        }
      }
      childList.sort((a, b) => {
        const dateA = moment(a.changed);
        const dateB = moment(b.changed);
        if (dateA > dateB) {
          return -1;
        } else if (dateA < dateB) {
          return 1;
        }
        return 0;
      });
      return childList;
    };
    items.push(...elements.map(i => {
      const restored = (this.getRestoredStatus(i) || {}).status === STATUS.SUCCEEDED;
      const archived = i.labels && !isStandardClass(i.labels['StorageClass']);
      const active = i.labels && isActiveClass(i.labels['StorageClass']);
      const type = i.type.toLowerCase();
      const isDownloadable = !this.isOmicsStore
        ? (
          type === 'file' &&
          !i.deleteMarker &&
          !sensitive &&
          (!archived || restored) &&
          downloadable
        )
        : (
          (type === 'file' || type === 'folder') &&
          !i.deleteMarker &&
          !sensitive &&
          (active || restored) &&
          downloadable
        );
      return {
        key: `${i.type}_${i.path}`,
        ...i,
        downloadable: isDownloadable,
        editable: writeAllowed && !i.deleteMarker,
        shareAvailable: !i.deleteMarker && this.sharingEnabled,
        deletable: writeAllowed,
        children: getChildList(i, i.versions, sensitive),
        selectable: !i.deleteMarker,
        miew: !i.deleteMarker &&
          i.type.toLowerCase() === 'file' &&
          i.path.toLowerCase().endsWith('.pdb'),
        vsi: !i.deleteMarker && i.type.toLowerCase() === 'file' && (
          i.path.toLowerCase().endsWith('.vsi') ||
          i.path.toLowerCase().endsWith('.mrxs')
        ),
        hcs: !i.deleteMarker &&
          i.type.toLowerCase() === 'file' &&
          fastCheckHCSPreviewAvailable({path: i.path, storageId}),
        ngb: !i.deleteMarker &&
          this.storage.ngbSettingsFileExists &&
          i.type.toLowerCase() === 'file' &&
          isNgbFile(i.path),
        documentPreview: !i.deleteMarker &&
          documentPreviewAvailable(i),
        archived,
        restored
      };
    }));
    return items;
  };