@brizy/media-gallery
Version:
70 lines (69 loc) • 2.84 kB
JavaScript
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
});
};
};