@uppy/companion
Version:
OAuth helper and remote fetcher for Uppy's (https://uppy.io) extensible file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Dropbox and Google Drive, S3 and more :dog:
78 lines (62 loc) • 1.62 kB
JavaScript
import querystring from 'node:querystring'
import mime from 'mime-types'
const isFolder = (item) => {
return item.type === 'folder'
}
const getItemSize = (item) => {
return item.size
}
const getItemIcon = (item) => {
return item.type
}
const getItemSubList = (item) => {
return item.entries
}
const getItemName = (item) => {
return item.name || ''
}
const getMimeType = (item) => {
return mime.lookup(getItemName(item)) || null
}
const getItemId = (item) => {
return item.id
}
const getItemRequestPath = (item) => {
return item.id
}
const getItemModifiedDate = (item) => {
return item.modified_at
}
const getItemThumbnailUrl = (item) => {
return `/box/thumbnail/${getItemRequestPath(item)}`
}
const getNextPagePath = (data) => {
if (
data.total_count < data.limit ||
data.offset + data.limit > data.total_count
) {
return null
}
const query = { cursor: data.offset + data.limit }
return `?${querystring.stringify(query)}`
}
const adaptData = function adaptData(res, username, companion) {
const data = { username, items: [] }
const items = getItemSubList(res)
items.forEach((item) => {
data.items.push({
isFolder: isFolder(item),
icon: getItemIcon(item),
name: getItemName(item),
mimeType: getMimeType(item),
id: getItemId(item),
thumbnail: companion.buildURL(getItemThumbnailUrl(item), true),
requestPath: getItemRequestPath(item),
modifiedDate: getItemModifiedDate(item),
size: getItemSize(item),
})
})
data.nextPagePath = getNextPagePath(res)
return data
}
export default adaptData