Repository URL to install this package:
|
Version:
3.12.18 ▾
|
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 { useState, useEffect, useMemo, useRef } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import isPdf from '@filerobot/utils/lib/isPdf';
import isVideo from '@filerobot/utils/lib/isVideo';
import isAudio from '@filerobot/utils/lib/isAudio';
import isAudioAndSupportsPlayback from '@filerobot/utils/lib/isAudioAndSupportsPlayback';
import isSupportedVideo from '@filerobot/utils/lib/isSupportedVideo';
import isImage from '@filerobot/utils/lib/isImage';
import { usePluginsType } from '@filerobot/core/lib/hooks';
import { PLUGINS_IDS } from '@filerobot/utils/lib/constants';
import isObjectURL from '@filerobot/utils/lib/isObjectURL';
import isEmptyObject from '@filerobot/utils/lib/isEmptyObject';
import StyledFileWindow from './FileWindow.styled';
import SideColumn from './SideColumn';
import Header from './Header';
import Body from './Body';
import { TABS_IDS } from './tabs/tabs.constants';
import { useExplorer } from '../../hooks';
import { fileWindowUpdated, selectFileWindow, selectFileWindowTabId } from '../../slices/panels.slice';
import { fetchFileByUuid } from '../../slices/files.slice';
import isUploadableFile from '@filerobot/utils/lib/isUploadableFile';
import { selectIsShareboxView } from '../../slices/views.slice';
import { useConfirmationModal } from '../Modals';
import { jsx as _jsx } from "react/jsx-runtime";
import { jsxs as _jsxs } from "react/jsx-runtime";
var FileWindow = function FileWindow(_ref) {
var originalFile = _ref.originalFile;
var dispatch = useDispatch();
var triggerConfirmationModal = useConfirmationModal();
var _useExplorer = useExplorer(),
i18n = _useExplorer.i18n,
_useExplorer$opts = _useExplorer.opts,
currentUserInfo = _useExplorer$opts.currentUserInfo,
usersAndTeams = _useExplorer$opts.usersAndTeams;
var isEditing = useSelector(function (state) {
return selectFileWindow(state).enableEdit;
});
var isMediaPlayerSupported = usePluginsType(PLUGINS_IDS.MEDIA_PLAYER);
// TODO: pdfjs plugin is not working with new babel configuration so we are temp. commenting this till fixing.
// const isPdfPreviewSupported = usePluginsType(PLUGINS_IDS.PDF_JS)
var isPdfPreviewSupported = false;
// As file window is used for both pre-uploads or new uploads and current files,
// we need to get files from the right place depending on the ids/uuids
var activeTabId = useSelector(function (state) {
return selectFileWindowTabId(state) || TABS_IDS.DETAILS;
});
var isShareboxView = useSelector(selectIsShareboxView);
// Previewed file might be any variant/version of the file, but original file is the original file itself.
var _useState = useState({}),
_useState2 = _slicedToArray(_useState, 2),
previewedFile = _useState2[0],
setPreviewedFile = _useState2[1];
var hasUnsavedChangesRef = useRef(false);
var isPreUpload = isUploadableFile(originalFile);
var isCommentsTabOpened = activeTabId === TABS_IDS.COMMENTS;
var members = useMemo(function () {
return isCommentsTabOpened ? usersAndTeams.filter(function (item) {
return !item.isTeam;
}) : [];
}, [usersAndTeams, isCommentsTabOpened]);
var annotatingProps = {
currentUserInfo: currentUserInfo,
members: members,
i18n: i18n
};
var isPdfFile = isPdf(originalFile);
var isImageFile = isImage(originalFile);
var isVideoFile = isVideo(originalFile);
var isAudioFile = isAudio(originalFile);
var fileIdOrUuid = originalFile.uuid || originalFile.id;
var isAudioFileAndSupportsPlayback = isMediaPlayerSupported && isAudioAndSupportsPlayback(originalFile);
var isVideoFileAndSupportsPlayback = isMediaPlayerSupported && isSupportedVideo(originalFile);
var isSupportAnnotationFile = isImageFile || isVideoFile;
var setFileData = function setFileData() {
var fetchedFilePromise = dispatch(fetchFileByUuid(originalFile.uuid));
fetchedFilePromise.then(setPreviewedFile);
return fetchedFilePromise;
};
var setActiveTabId = function setActiveTabId(newTabId) {
dispatch(fileWindowUpdated({
tabId: newTabId
}));
};
var alertUnsavedChangesFirst = function alertUnsavedChangesFirst(_onConfirm) {
if (isEditing && hasUnsavedChangesRef.current) {
triggerConfirmationModal({
title: i18n('fileWindowDiscardChangesModalTitle'),
description: i18n('fileWindowDiscardChangesModalDesc', {
asset_name: originalFile.name
}),
onConfirm: function onConfirm() {
hasUnsavedChangesRef.current = false;
if (typeof _onConfirm === 'function') {
_onConfirm();
}
}
});
return;
}
_onConfirm();
};
useEffect(function () {
if (isShareboxView) return;
var abortFileFetching;
if ((originalFile === null || originalFile === void 0 ? void 0 : originalFile.uuid) !== (previewedFile === null || previewedFile === void 0 ? void 0 : previewedFile.uuid)) {
var _setFileData = setFileData(),
abort = _setFileData.abort;
abortFileFetching = abort;
} else if (isPreUpload ||
// If original file is a blob image, then set it as previewed file.
isObjectURL(originalFile === null || originalFile === void 0 ? void 0 : originalFile.preview) && (isEmptyObject(previewedFile) || (previewedFile === null || previewedFile === void 0 ? void 0 : previewedFile.id) !== originalFile.id)) {
setPreviewedFile(originalFile);
}
return function () {
if (abortFileFetching) {
abortFileFetching();
}
};
}, [fileIdOrUuid]);
useEffect(function () {
// If the original file object is updated and the previewed file is the same as the original file, then update it too.
if (!(previewedFile !== null && previewedFile !== void 0 && previewedFile.uuid) || !(previewedFile !== null && previewedFile !== void 0 && previewedFile.id) || fileIdOrUuid === ((previewedFile === null || previewedFile === void 0 ? void 0 : previewedFile.uuid) || (previewedFile === null || previewedFile === void 0 ? void 0 : previewedFile.id))) {
setPreviewedFile(originalFile);
}
}, [originalFile]);
if (isShareboxView) {
return /*#__PURE__*/_jsxs(StyledFileWindow.Wrapper, {
children: [/*#__PURE__*/_jsx(Header, {
i18n: i18n,
isPdfFile: isPdfFile,
isAudioFile: isAudioFile,
isVideoFile: isVideoFile,
originalFile: originalFile,
previewedFile: previewedFile,
setPreviewedFile: setPreviewedFile,
alertUnsavedChangesFirst: alertUnsavedChangesFirst
}), /*#__PURE__*/_jsx(StyledFileWindow.Content, {
children: /*#__PURE__*/_jsx(Body, {
originalFile: originalFile,
previewedFile: previewedFile,
setPreviewedFile: setPreviewedFile,
activeTabId: activeTabId,
isPdfFile: isPdfFile,
isAudioFile: isAudioFile,
isImageFile: isImageFile,
isVideoFile: isVideoFile,
annotatingFieldProps: annotatingProps,
isPdfPreviewSupported: isPdfPreviewSupported,
isAudioFileAndSupportsPlayback: isAudioFileAndSupportsPlayback,
isVideoFileAndSupportsPlayback: isVideoFileAndSupportsPlayback,
setActiveTabId: setActiveTabId,
isSupportAnnotationFile: isSupportAnnotationFile,
isCommentsTabOpened: isCommentsTabOpened,
alertUnsavedChangesFirst: alertUnsavedChangesFirst
})
})]
});
}
return /*#__PURE__*/_jsxs(StyledFileWindow.Wrapper, {
children: [/*#__PURE__*/_jsx(Header, {
i18n: i18n,
isPdfFile: isPdfFile,
isAudioFile: isAudioFile,
isVideoFile: isVideoFile,
isImageFile: isImageFile,
originalFile: originalFile,
previewedFile: previewedFile,
setPreviewedFile: setPreviewedFile,
alertUnsavedChangesFirst: alertUnsavedChangesFirst
}), /*#__PURE__*/_jsxs(StyledFileWindow.Content, {
children: [/*#__PURE__*/_jsx(Body, {
originalFile: originalFile,
previewedFile: previewedFile,
setPreviewedFile: setPreviewedFile,
activeTabId: activeTabId,
setActiveTabId: setActiveTabId,
isPdfFile: isPdfFile,
isAudioFile: isAudioFile,
isImageFile: isImageFile,
isVideoFile: isVideoFile,
isPdfPreviewSupported: isPdfPreviewSupported,
isAudioFileAndSupportsPlayback: isAudioFileAndSupportsPlayback,
isVideoFileAndSupportsPlayback: isVideoFileAndSupportsPlayback,
isSupportAnnotationFile: isSupportAnnotationFile,
setFileData: setFileData,
isCommentsTabOpened: isCommentsTabOpened,
annotatingFieldProps: annotatingProps,
alertUnsavedChangesFirst: alertUnsavedChangesFirst
}), /*#__PURE__*/_jsx(SideColumn, {
originalFile: originalFile,
previewedFile: previewedFile,
commentsTabProps: annotatingProps,
activeTabId: activeTabId,
isPreUpload: isPreUpload,
setPreviewedFile: setPreviewedFile,
setActiveTabId: setActiveTabId,
alertUnsavedChangesFirst: alertUnsavedChangesFirst,
hasUnsavedChangesRef: hasUnsavedChangesRef
})]
})]
});
};
export default FileWindow;