@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:
70 lines (69 loc) • 2.04 kB
JavaScript
import querystring from 'node:querystring';
const isFolder = (item) => {
return false;
};
const getItemIcon = (item) => {
return item.urls.thumb;
};
const getItemSubList = (item) => {
return item.results;
};
const getItemName = (item) => {
const description = item.description || item.alt_description;
if (description) {
return `${description.replace(/^([\S\s]{27})[\S\s]{3,}/, '$1...')}.jpg`;
}
return undefined;
};
const getMimeType = (item) => {
return 'image/jpeg';
};
const getItemId = (item) => {
return `${item.id}`;
};
const getItemRequestPath = (item) => {
return `${item.id}`;
};
const getItemModifiedDate = (item) => {
return item.created_at;
};
const getItemThumbnailUrl = (item) => {
return item.urls.thumb;
};
const getNextPageQuery = (currentQuery) => {
const newCursor = Number.parseInt(currentQuery.cursor || 1, 10) + 1;
const query = {
...currentQuery,
cursor: newCursor,
};
delete query.q;
return querystring.stringify(query);
};
const getAuthor = (item) => {
return { name: item.user.name, url: item.user.links.html };
};
const adaptData = (body, currentQuery) => {
const { total_pages: pagesCount } = body;
const { cursor, q } = currentQuery;
const currentPage = Number(cursor || 1);
const hasNextPage = currentPage < pagesCount;
const subList = getItemSubList(body) || [];
return {
searchedFor: q,
username: null,
items: subList.map((item) => ({
isFolder: isFolder(item),
icon: getItemIcon(item),
name: getItemName(item),
mimeType: getMimeType(item),
id: getItemId(item),
thumbnail: getItemThumbnailUrl(item),
requestPath: getItemRequestPath(item),
modifiedDate: getItemModifiedDate(item),
author: getAuthor(item),
size: null,
})),
nextPageQuery: hasNextPage ? getNextPageQuery(currentQuery) : null,
};
};
export default adaptData;