UNPKG

@brizy/media-gallery

Version:
70 lines (69 loc) 2.84 kB
import { isT, mPipe, optional, parse, pass } from "fp-utilities"; import { always, ifElse, pipe, prop } from "ramda"; import { fromString as fromStringToId, toId } from "../../types/ItemId"; import { toString } from "../../types/ItemUid"; import { fromString as fromStringToName } from "../../types/Name"; import { getExtensionByUrl } from "../utils"; import { v4 as secure } from "@lukeed/uuid/secure"; import { read, toKebabCase } from "../../utils/string"; import { STOCK_PHOTOS_LIMIT } from "../../constants"; import { getDimensions, getUrlForFetch } from "./utils"; var convertApiDataUserToFileSource = parse({ provider: always("Unsplash"), termsUrl: always("https://unsplash.com/terms"), author: mPipe(prop("username")), authorUrl: mPipe(prop("links"), prop("html")) }); var fromAltDescriptionOrDescriptionToFileName = ifElse(pipe(prop("alt_description"), isT), prop("alt_description"), function(v) { var description = "description" in v ? read(v.description) : undefined; return description === null || description === void 0 ? void 0 : description.split(/[,.!?]/)[0]; }); var convertApiDataToSelectedFile = function(v) { return parse({ name: mPipe(pass(isT), function(data) { return "".concat(fromStringToName(data.id), "_").concat(secure(), ".").concat(getExtensionByUrl(data.urls.full)); }), fileName: mPipe(fromAltDescriptionOrDescriptionToFileName), extension: mPipe(prop("urls"), prop("full"), getExtensionByUrl), altTitle: optional(mPipe(fromAltDescriptionOrDescriptionToFileName)), url: mPipe(getUrlForFetch), thumbnailUrl: mPipe(prop("urls"), prop("small")), dimensions: optional(mPipe(getDimensions)), isSelected: always(false), id: mPipe(prop("id"), fromStringToId), fileSource: mPipe(prop("user"), convertApiDataUserToFileSource) })(v); }; export var convertApiFilesToSelectedFiles = parse({ items: function(v) { return v.map(convertApiDataToSelectedFile).filter(isT); }, isLastPage: function(v) { return v.length < STOCK_PHOTOS_LIMIT; } }); export var fromSelectedFileToInsertFile = function(isStockPhoto) { return function(v) { return v.map(function(v) { return { extension: v.extension, fileName: v.fileName, name: v.name, id: toId(v.id), uid: toString(v.uid), url: v.url, altTitle: v.altTitle, isStockPhoto: isStockPhoto }; }); }; }; export var fromBlobToFile = function(item) { return function(blob) { return new File([ blob ], "".concat(toKebabCase(item.fileName), ".").concat(item.extension), { type: blob.type }); }; };