metadata-based-explorer1
Version:
Box UI Elements
76 lines (63 loc) • 2.02 kB
JavaScript
/**
* @flow
* @file File for some simple dom utilities
* @author Box
*/
import omit from 'lodash/omit';
import { getFileExtension } from './file';
type ConvertMetadataParams = {
item: Object,
metadata: Object,
};
const convertISODateToSeconds = (dateString: string) => {
return dateString ? new Date(dateString).getTime() / 1000 : null;
};
const convertMetadata = (metadata: ConvertMetadataParams) => {
let md = {};
Object.keys(metadata).forEach(scope => {
Object.keys(metadata[scope]).forEach(templateKey => {
const nonconformingInstance = metadata[scope][templateKey];
const data = omit(nonconformingInstance, [
'$id',
'$parent',
'$type',
'$typeScope',
'$typeVersion',
'$version',
]);
md = {
data,
id: nonconformingInstance.$id,
metadataTemplate: {
type: 'metadata-template',
templateKey,
},
};
});
});
return md;
};
const convertEntry = (entry: Object) => {
const { item, metadata } = entry;
return {
contentUpdated: convertISODateToSeconds(item.content_modified_at),
contentCreated: convertISODateToSeconds(item.content_created_at),
date: convertISODateToSeconds(item.content_modified_at),
extension: getFileExtension(item.name),
id: item.id,
lastUpdatedByName: item.modified_by.name,
metadata: convertMetadata(metadata),
name: item.name,
itemSize: item.size,
type: item.type,
};
};
const convertEntries = entries => entries.map(entry => convertEntry(entry));
const flattenResponse = (response: Object) => {
return {
items: convertEntries(response.entries),
nextMarker: response.next_marker,
previousMarker: response.prev_marker,
};
};
export default flattenResponse;