Repository URL to install this package:
|
Version:
3.12.20 ▾
|
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;