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;
};