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    
Size: Mime:
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
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 { useMemo, useState, useContext } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { CrossOutline, Menu } from '@scaleflex/icons';
import { BULK_EDIT_GENERAL_IDS, BULK_EDIT_METADATA_ID, BULK_EDIT_OPTIONS } from '@filerobot/utils/lib/constants';
import getFileCustomMetadataGroup from '@filerobot/utils/lib/metadata/getFileCustomMetadataGroups';
import getRequiredMetadataFields from '@filerobot/utils/lib/metadata/getRequiredMetadataFields';
import { getMetadataEmptyAssets } from '@filerobot/utils/lib/metadata/getMetadataEmptyAssets';
import { useCore } from '@filerobot/core/lib/hooks';
import { useExplorer } from '../../hooks';
import Sidebar from './components/Sidebar';
import MainContent from './components/MainContent/MainContent';
import { generateModalTitleI18nKey } from './BulkEditPanel.utils';
import { CONFIRMATION_MODAL_DEFUALT_STATE, TAGS_DEFAULT_STATE, TEXT_DEFAULT_STATE } from './components/Tabs/tabs.constants';
import ConfirmationModal from './components/ConfirmationModal/ConfirmationModal';
import { generateTabI18nKey } from './components/Tabs/tabs.utils';
import BulkEditFooter from './components/BulkEditFooter';
import { selectMetadataForceFillingOnUpload, selectMetadataModel } from '../../slices/metadata.slice';
import { bulkEditPanelOpened, selectIsUploadsPanelOpened } from '../../slices/panels.slice';
import { selectCurrentFilesByIdsOrUuids } from '../../slices/files.slice';
import Styled from './BulkEditPanel.styled';
import { VirtualListDataContext } from '@filerobot/core/lib/Providers';
import { jsx as _jsx } from "react/jsx-runtime";
import { jsxs as _jsxs } from "react/jsx-runtime";
var BulkEdit = function BulkEdit(_ref) {
  var assetsIdsOrUuids = _ref.assetsIdsOrUuids;
  var dispatch = useDispatch();
  var _useCore = useCore(),
    upload = _useCore.upload;
  var _useExplorer = useExplorer(),
    i18n = _useExplorer.i18n,
    info = _useExplorer.info;
  var _useContext = useContext(VirtualListDataContext),
    apiRef = _useContext.apiRef;
  var metadataModel = useSelector(selectMetadataModel);
  var forceFillingMetadataOnUpload = useSelector(selectMetadataForceFillingOnUpload);
  // As bulk edit modal is used for both pre-uploads or new uploads and current files,
  // we need to get assets from the right place depending on the ids/uuids
  var assets = useSelector(function (state) {
    return selectCurrentFilesByIdsOrUuids(state, assetsIdsOrUuids);
  });
  var isOnUpload = useSelector(selectIsUploadsPanelOpened);
  var DEFAULT_TAB = isOnUpload ? BULK_EDIT_GENERAL_IDS.TITLE : BULK_EDIT_GENERAL_IDS.TAGS;
  var ACTIVE_SIDEBAR_DEFAULT_STATE = {
    name: DEFAULT_TAB,
    key: DEFAULT_TAB.toLowerCase()
  };
  var _useState = useState(false),
    _useState2 = _slicedToArray(_useState, 2),
    isSidebarOpen = _useState2[0],
    setIsSideBarOpen = _useState2[1];
  var _useState3 = useState(ACTIVE_SIDEBAR_DEFAULT_STATE),
    _useState4 = _slicedToArray(_useState3, 2),
    activeSidebarItem = _useState4[0],
    setActiveSidebarItem = _useState4[1];
  var _useState5 = useState([]),
    _useState6 = _slicedToArray(_useState5, 2),
    changedMetadataFields = _useState6[0],
    setChangedMetadataFields = _useState6[1];
  var _useState7 = useState(TAGS_DEFAULT_STATE),
    _useState8 = _slicedToArray(_useState7, 2),
    tagsDetails = _useState8[0],
    setTagsDetails = _useState8[1];
  var _useState9 = useState(TEXT_DEFAULT_STATE),
    _useState10 = _slicedToArray(_useState9, 2),
    textFieldsDetails = _useState10[0],
    setTextFieldsDetails = _useState10[1];
  var _useState11 = useState(false),
    _useState12 = _slicedToArray(_useState11, 2),
    showConfirmationModal = _useState12[0],
    setShowConfirmationModal = _useState12[1];
  var _useState13 = useState(CONFIRMATION_MODAL_DEFUALT_STATE),
    _useState14 = _slicedToArray(_useState13, 2),
    confirmationModalData = _useState14[0],
    setConfirmationModalData = _useState14[1];
  var _useState15 = useState(false),
    _useState16 = _slicedToArray(_useState15, 2),
    isRequestedInvalidUpload = _useState16[0],
    setIsRequestInValidUpload = _useState16[1];
  var _useState17 = useState([]),
    _useState18 = _slicedToArray(_useState17, 2),
    fetchedFiles = _useState18[0],
    setFetchedFiles = _useState18[1];
  var _apiRef$current = apiRef.current,
    _apiRef$current2 = _apiRef$current === void 0 ? {} : _apiRef$current,
    scrollToItem = _apiRef$current2.scrollToItem;
  var modalTitleI18nKey = useMemo(function () {
    return generateModalTitleI18nKey(isOnUpload, activeSidebarItem);
  }, [activeSidebarItem]);
  var changedMetadata = useMemo(function () {
    return changedMetadataFields.filter(function (_ref2) {
      var value = _ref2.value;
      return value;
    });
  }, [changedMetadataFields]);
  var adaptedAssets = useMemo(function () {
    return assets.map(function (asset) {
      return _objectSpread(_objectSpread({}, asset), {}, {
        uuid: asset.uuid || asset.id
      });
    });
  }, [assets]);
  var fileCustomMetadataGroups = useMemo(function () {
    return getFileCustomMetadataGroup(metadataModel);
  }, [metadataModel]);
  var requiredMetadataFields = useMemo(function () {
    return getRequiredMetadataFields(fileCustomMetadataGroups);
  }, [fileCustomMetadataGroups]);
  var metadataEmptyAssetsValues = useMemo(function () {
    return getMetadataEmptyAssets(requiredMetadataFields, adaptedAssets);
  }, [adaptedAssets, requiredMetadataFields]);
  var requiredEmptyFields = useMemo(function () {
    return Object.keys(metadataEmptyAssetsValues).map(function (metadataKey) {
      return requiredMetadataFields.find(function (_ref3) {
        var key = _ref3.key;
        return key === metadataKey;
      }) || {};
    });
  }, [metadataEmptyAssetsValues, requiredMetadataFields]);
  var isTagsChanged = !![].concat(_toConsumableArray(tagsDetails.addedTags), _toConsumableArray(tagsDetails.removedTags)).length;
  var checkTextChange = function checkTextChange(fieldKey) {
    var _Object$values$filter;
    return !!((_Object$values$filter = Object.values(textFieldsDetails[fieldKey].value).filter(function (i) {
      return i;
    })) !== null && _Object$values$filter !== void 0 && _Object$values$filter.length);
  };
  var isTitleChanged = checkTextChange(BULK_EDIT_GENERAL_IDS.TITLE.toLowerCase());
  var isDescriptionChanged = checkTextChange(BULK_EDIT_GENERAL_IDS.DESCRIPTION.toLowerCase());
  var toggleSidebar = function toggleSidebar() {
    return setIsSideBarOpen(function (prevState) {
      return !prevState;
    });
  };
  var getChangedFieldsLabels = function getChangedFieldsLabels() {
    var changedMetadataLabels = changedMetadata.map(function (_ref4) {
      var key = _ref4.key;
      return "\"".concat(key, "\"");
    });
    var changedFields = _toConsumableArray(changedMetadataLabels);
    if (isTagsChanged) {
      changedFields.unshift("\"".concat(i18n(BULK_EDIT_OPTIONS[BULK_EDIT_GENERAL_IDS.TAGS].contentI18nStr), "\""));
    }
    if (isDescriptionChanged) {
      changedFields.unshift("\"".concat(i18n(BULK_EDIT_OPTIONS[BULK_EDIT_GENERAL_IDS.DESCRIPTION].contentI18nStr), "\""));
    }
    if (isTitleChanged) {
      changedFields.unshift("\"".concat(i18n(BULK_EDIT_OPTIONS[BULK_EDIT_GENERAL_IDS.TITLE].contentI18nStr), "\""));
    }
    return changedFields.join(', ');
  };
  var navigateToFirstRequiredEmptyField = function navigateToFirstRequiredEmptyField() {
    var isOnRequiredEmptyField = activeSidebarItem.required && Object.keys(metadataEmptyAssetsValues).includes(activeSidebarItem.key);
    var _requiredEmptyFields = _slicedToArray(requiredEmptyFields, 1),
      firstRequiredMetadataField = _requiredEmptyFields[0];
    var _ref5 = metadataEmptyAssetsValues[firstRequiredMetadataField.key] || [],
      _ref6 = _slicedToArray(_ref5, 1),
      firstRequiredEmptyField = _ref6[0];
    if (firstRequiredMetadataField && !isOnRequiredEmptyField) {
      var requiredFieldGroup = fileCustomMetadataGroups.find(function (_ref7) {
        var _ref7$fields = _ref7.fields,
          fields = _ref7$fields === void 0 ? [] : _ref7$fields;
        return fields.some(function (_ref8) {
          var uuid = _ref8.uuid;
          return uuid === firstRequiredMetadataField.uuid;
        });
      }) || {};
      setIsSideBarOpen(true);
      setActiveSidebarItem(_objectSpread(_objectSpread({}, firstRequiredMetadataField), {}, {
        groupUuid: requiredFieldGroup.uuid,
        name: BULK_EDIT_METADATA_ID
      }));
    }
    scrollToItem({
      key: firstRequiredEmptyField.uuid
    });
  };
  var checkAndShowConfirmModal = function checkAndShowConfirmModal(_ref9) {
    var descI18n = _ref9.descI18n,
      confirmCallback = _ref9.confirmCallback,
      fallback = _ref9.fallback;
    if (isTagsChanged || changedMetadata.length || isTitleChanged || isDescriptionChanged) {
      setShowConfirmationModal(true);
      setConfirmationModalData({
        handleConfirm: confirmCallback,
        title: i18n(generateTabI18nKey('closeConfirmationModalTitle')),
        desc: i18n(generateTabI18nKey(descI18n), {
          changes: getChangedFieldsLabels()
        })
      });
    } else {
      fallback();
    }
  };
  var toggleBulkEditPanel = function toggleBulkEditPanel() {
    dispatch(bulkEditPanelOpened(null));
  };
  var handleClickUpload = function handleClickUpload() {
    setIsRequestInValidUpload(!!requiredEmptyFields.length && forceFillingMetadataOnUpload);
    if (requiredEmptyFields.length && forceFillingMetadataOnUpload) {
      navigateToFirstRequiredEmptyField();
      info(i18n(generateTabI18nKey('uploadErrorMessage')), 'error', 4000);
    } else {
      checkAndShowConfirmModal({
        descI18n: 'closeConfirmationModalToUploadDesc',
        confirmCallback: upload,
        fallback: toggleBulkEditPanel
      });
    }
  };
  var onRequestClose = function onRequestClose() {
    var handleConfirm = function handleConfirm() {
      setShowConfirmationModal(false);
      toggleBulkEditPanel();
    };
    checkAndShowConfirmModal({
      descI18n: 'closeConfirmationModalDescription',
      confirmCallback: handleConfirm,
      fallback: toggleBulkEditPanel
    });
  };
  var onRequestApply = function onRequestApply(assetsCount, callback) {
    setShowConfirmationModal(true);
    var handleConfirm = function handleConfirm() {
      setShowConfirmationModal(false);
      callback();
    };
    setConfirmationModalData({
      handleConfirm: handleConfirm,
      title: i18n(generateTabI18nKey('applyConfirmationModalTitle')),
      desc: i18n(generateTabI18nKey('applyConfirmationModalDescription'), {
        changes: getChangedFieldsLabels(),
        count: assetsCount
      })
    });
  };
  return /*#__PURE__*/_jsxs(Styled.PanelWrapper, {
    children: [/*#__PURE__*/_jsxs(Styled.PanelHeader, {
      children: [/*#__PURE__*/_jsx(Styled.BurgerButton, {
        onClick: toggleSidebar,
        color: "basic",
        children: /*#__PURE__*/_jsx(Menu, {
          size: 18,
          color: "warning"
        })
      }), /*#__PURE__*/_jsx(Styled.PanelTitle, {
        children: i18n(modalTitleI18nKey, {
          smart_count: adaptedAssets.length
        })
      }), /*#__PURE__*/_jsx(Styled.CloseButton, {
        onClick: onRequestClose,
        color: "basic",
        children: /*#__PURE__*/_jsx(CrossOutline, {
          size: 16
        })
      })]
    }), /*#__PURE__*/_jsxs(Styled.PanelBody, {
      isOpen: isSidebarOpen,
      $isOnUpload: isOnUpload,
      children: [/*#__PURE__*/_jsx(Sidebar, {
        isSidebarOpen: isSidebarOpen,
        activeSidebarItem: activeSidebarItem,
        setActiveSidebarItem: setActiveSidebarItem,
        setIsSideBarOpen: setIsSideBarOpen,
        toggleSidebar: toggleSidebar,
        tagsDetails: tagsDetails,
        changedMetadataFields: changedMetadataFields,
        fileCustomMetadataGroups: fileCustomMetadataGroups,
        requiredEmptyFields: requiredEmptyFields,
        isRequestedInvalidUpload: isRequestedInvalidUpload,
        isOnUpload: isOnUpload,
        textFieldsDetails: textFieldsDetails
      }), /*#__PURE__*/_jsx(Styled.Overlay, {
        isOpen: isSidebarOpen,
        onClick: toggleSidebar
      }), /*#__PURE__*/_jsx(MainContent, {
        fileCustomMetadataGroups: fileCustomMetadataGroups,
        activeSidebarItem: activeSidebarItem,
        changedMetadataFields: changedMetadataFields,
        isSidebarOpen: isSidebarOpen,
        tagsDetails: tagsDetails,
        assets: adaptedAssets,
        isOnUpload: isOnUpload,
        fetchedFiles: fetchedFiles,
        textFieldsDetails: textFieldsDetails,
        metadataEmptyAssetsValues: isRequestedInvalidUpload ? metadataEmptyAssetsValues : [],
        setTagsDetails: setTagsDetails,
        onRequestApply: onRequestApply,
        setChangedMetadataFields: setChangedMetadataFields,
        toggleSidebar: toggleSidebar,
        setFetchedFiles: setFetchedFiles,
        setTextFieldsDetails: setTextFieldsDetails
      })]
    }), isOnUpload && /*#__PURE__*/_jsx(BulkEditFooter, {
      isOnUpload: isOnUpload,
      onRequestClose: onRequestClose,
      handleClickUpload: handleClickUpload
    }), showConfirmationModal && /*#__PURE__*/_jsx(ConfirmationModal, {
      showConfirmationModal: showConfirmationModal,
      confirmationModalData: confirmationModalData,
      setShowConfirmationModal: setShowConfirmationModal
    })]
  });
};
export default BulkEdit;