Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@filerobot/utils / lib / getItemIcon.js
Size: Mime:
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
import getFileExtension from './getFileExtension';
import getFileLink from './getFileLink';
import isImage from './isImage';
import isThumbnailCloudimgSupported from './isThumbnailCloudimgSupported';
import isPdf from './isPdf';
import { FILE_TYPES_AND_ICONS, LAYOUTS_IDS, COLORS } from './constants';
import getItemPreviewWidthAndHeight from './getItemPreviewWidthHeight';
import isCloudimageFastPreviewSupported from './isCloudimageFastPreviewSupported';
import isFolder from './isFolder';
import isAi from './isAi';
import getFormattedPreviewUrl from './getFormattedPreviewUrl';
var ultrafastPrefix = 'https://scaleflex.ultrafast.io/';
var folderIcon = 'https://cdn.scaleflex.com/assets/folder-preview/folder.png';
var replaceAirstoreWithFilerobot = function replaceAirstoreWithFilerobot() {
  var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
  return url.replace('.airstore.io/', '.filerobot.com/').replace(/(\?|&)func=proxy&?/, '$1').replace(/&|\?$/, '');
};

// showFuncAndHeight : false , when we need it to cover the entire background
var getItemIcon = function getItemIcon(_ref) {
  var _fileOrFolder$info, _fileOrFolder$info2, _fileOrFolder$info3, _fileOrFolder$info4;
  var fileOrFolder = _ref.fileOrFolder,
    _ref$viewLayout = _ref.viewLayout,
    viewLayout = _ref$viewLayout === void 0 ? LAYOUTS_IDS.GRID : _ref$viewLayout,
    _ref$showFuncAndHeigh = _ref.showFuncAndHeight,
    showFuncAndHeight = _ref$showFuncAndHeigh === void 0 ? false : _ref$showFuncAndHeigh,
    forceIcon = _ref.forceIcon,
    showVideoGif = _ref.showVideoGif,
    _ref$cloudimgFunc = _ref.cloudimgFunc,
    cloudimgFunc = _ref$cloudimgFunc === void 0 ? '' : _ref$cloudimgFunc,
    _ref$isImageTranspare = _ref.isImageTransparencySupported,
    isImageTransparencySupported = _ref$isImageTranspare === void 0 ? false : _ref$isImageTranspare,
    container = _ref.container,
    floaty = _ref.floaty,
    isDevEnv = _ref.isDevEnv;
  if (!fileOrFolder) {
    return '';
  }
  if (fileOrFolder.preview && !forceIcon && !isImageTransparencySupported) {
    return fileOrFolder.preview;
  }

  // TODO: if remote file then don't take its icon as it might not public till BE implements it
  if (fileOrFolder.icon && !fileOrFolder.isRemote) {
    return fileOrFolder.icon;
  }
  if (isFolder(fileOrFolder)) {
    return folderIcon;
  }
  var thumbnail = showVideoGif ? (fileOrFolder === null || fileOrFolder === void 0 ? void 0 : (_fileOrFolder$info = fileOrFolder.info) === null || _fileOrFolder$info === void 0 ? void 0 : _fileOrFolder$info.video_gif) || (fileOrFolder === null || fileOrFolder === void 0 ? void 0 : (_fileOrFolder$info2 = fileOrFolder.info) === null || _fileOrFolder$info2 === void 0 ? void 0 : _fileOrFolder$info2.video_thumbnail) : (fileOrFolder === null || fileOrFolder === void 0 ? void 0 : (_fileOrFolder$info3 = fileOrFolder.info) === null || _fileOrFolder$info3 === void 0 ? void 0 : _fileOrFolder$info3.video_thumbnail) || (fileOrFolder === null || fileOrFolder === void 0 ? void 0 : (_fileOrFolder$info4 = fileOrFolder.info) === null || _fileOrFolder$info4 === void 0 ? void 0 : _fileOrFolder$info4.image_thumbnail);
  if (thumbnail) {
    // replacing any thumbnail that has the airstore domain and replacing with filerobot domain
    // to be able to apply cdn transformation
    // new videos uploaded will have the filerobot domain
    // so only apply this for the old videos
    var newThumbnail = replaceAirstoreWithFilerobot(thumbnail);
    if (container) {
      newThumbnail = getFormattedPreviewUrl({
        url: newThumbnail,
        isDevEnv: isDevEnv,
        isHubMode: floaty,
        containerToken: container
      });
    }
    var _getItemPreviewWidthA = getItemPreviewWidthAndHeight(viewLayout),
      _getItemPreviewWidthA2 = _slicedToArray(_getItemPreviewWidthA, 2),
      width = _getItemPreviewWidthA2[0],
      height = _getItemPreviewWidthA2[1];
    return "".concat(newThumbnail, "?w=").concat(width, "&h=").concat(height);
  }
  var extension = getFileExtension(fileOrFolder);
  if (isPdf(fileOrFolder) && !isAi(fileOrFolder)) {
    var link = replaceAirstoreWithFilerobot(getFileLink(fileOrFolder));
    if (link) {
      link = link.replace('func=proxy', '');
      var separator = link[link.length - 1] !== '&' && (link.lastIndexOf('?') !== -1 ? '&' : '?');
      return "".concat(link).concat(separator || '', "w=200&force_format=webp,jpeg&doc_page=1&bypass_process_proxy=1");
    }
  }
  if (isThumbnailCloudimgSupported(fileOrFolder) || isImageTransparencySupported) {
    var _fileOrFolder$url, _fileOrFolder$remote, _fileOrFolder$remote$;
    // fileOrFolder.remote?.body?.url for having the url for imported image from url
    var _link = replaceAirstoreWithFilerobot(getFileLink(fileOrFolder, (fileOrFolder === null || fileOrFolder === void 0 ? void 0 : (_fileOrFolder$url = fileOrFolder.url) === null || _fileOrFolder$url === void 0 ? void 0 : _fileOrFolder$url.version_preview_link) && 'version_preview_link', ((_fileOrFolder$remote = fileOrFolder.remote) === null || _fileOrFolder$remote === void 0 ? void 0 : (_fileOrFolder$remote$ = _fileOrFolder$remote.body) === null || _fileOrFolder$remote$ === void 0 ? void 0 : _fileOrFolder$remote$.url) || ''));
    var bgColor = COLORS.LIGHT.HOVER.replace('#', '');
    if (_link) {
      // TODO: ADD A CDN URL THAT LOAD ANY URL FOR SUPPORTING RESIZED THUMBNAILS FROM OTHER 3RD PARTIES AS scaleflex.cloudimg.io HAS SPECIFIC DOMAINS.
      // TMP SOLUTION FOR AVOIDING ADDING THE CDN'S QUERY PARAMS
      // THAT CAUSE AN ERROR IN LOADING THE FILE OF CANVA DESIGN FROM THEIR URL
      if (_link.startsWith('https://export-download.canva.com')) {
        return _link;
      }
      var _separator = _link.lastIndexOf('?') !== -1 ? '&' : '?';
      var _getItemPreviewWidthA3 = getItemPreviewWidthAndHeight(viewLayout),
        _getItemPreviewWidthA4 = _slicedToArray(_getItemPreviewWidthA3, 2),
        _width = _getItemPreviewWidthA4[0],
        _height = _getItemPreviewWidthA4[1];
      return "".concat(_link).concat(_separator || '', "w=").concat(_width).concat(showFuncAndHeight ? "&h=".concat(_height, "&func=").concat(cloudimgFunc || 'fit', "&bg_colour=").concat(bgColor) : '').concat(!isImage(fileOrFolder) ? '&bypass_process_proxy=1' : '').concat(isCloudimageFastPreviewSupported(fileOrFolder) ? '&ci_fast_preview=1' : '', "\n      ");
    }
  }
  if (extension) {
    return FILE_TYPES_AND_ICONS[extension.toLowerCase()] || FILE_TYPES_AND_ICONS._default;
  }
  return FILE_TYPES_AND_ICONS._default;
};
export default getItemIcon;
export { ultrafastPrefix };