diff --git a/src/constants.js b/src/constants.js index b1c84e921f..fdcc1bbc9a 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1,3 +1,4 @@ +import { getConfig } from '@edx/frontend-platform'; export const DATE_FORMAT = 'MM/dd/yyyy'; export const TIME_FORMAT = 'HH:mm'; export const DATE_TIME_FORMAT = 'YYYY-MM-DDTHH:mm:ss\\Z'; @@ -52,7 +53,16 @@ export const DECODED_ROUTES = { ], }; -export const UPLOAD_FILE_MAX_SIZE = 20 * 1024 * 1024; // 100mb +// FilesUpload page - Default max size: 20MB else use env override if exists and valid number +const DEFAULT_UPLOAD_FILE_MAX_SIZE = 20 * 1024 * 1024; // 20 MB + +export const getUploadFileMaxSize = () => { + const config = getConfig(); + const overrideMaxFileSizeMB = parseInt(config.OVERRIDE_UPLOAD_FILE_MAX_SIZE_IN_MB, 10); + return !isNaN(overrideMaxFileSizeMB) && overrideMaxFileSizeMB > 0 + ? overrideMaxFileSizeMB * 1024 * 1024 + : DEFAULT_UPLOAD_FILE_MAX_SIZE; +}; export const COURSE_BLOCK_NAMES = ({ chapter: { id: 'chapter', name: 'Section' }, diff --git a/src/files-and-videos/files-page/FilesPage.jsx b/src/files-and-videos/files-page/FilesPage.jsx index 0976cc9bb6..c53f314835 100644 --- a/src/files-and-videos/files-page/FilesPage.jsx +++ b/src/files-and-videos/files-page/FilesPage.jsx @@ -4,6 +4,7 @@ import { useDispatch, useSelector } from 'react-redux'; import { FormattedMessage, useIntl } from '@edx/frontend-platform/i18n'; import { CheckboxFilter, Container } from '@openedx/paragon'; import Placeholder from '../../editors/Placeholder'; +import { getUploadFileMaxSize } from '@src/constants'; import { RequestStatus } from '../../data/constants'; import { useModels, useModel } from '../../generic/model-store'; @@ -90,7 +91,8 @@ const FilesPage = ({ usageErrorMessages: errorMessages.usageMetrics, fileType: 'file', }; - const maxFileSize = 20 * 1048576; + + const maxFileSize = getUploadFileMaxSize(); const activeColumn = { id: 'activeStatus', diff --git a/src/generic/modal-dropzone/ModalDropzone.jsx b/src/generic/modal-dropzone/ModalDropzone.jsx index 8133910785..a337308ffa 100644 --- a/src/generic/modal-dropzone/ModalDropzone.jsx +++ b/src/generic/modal-dropzone/ModalDropzone.jsx @@ -15,7 +15,7 @@ import { FileUpload as FileUploadIcon } from '@openedx/paragon/icons'; import useModalDropzone from './useModalDropzone'; import messages from './messages'; -import { UPLOAD_FILE_MAX_SIZE } from '../../constants'; +import { getUploadFileMaxSize } from '@src/constants'; const ModalDropzone = ({ fileTypes, @@ -30,7 +30,7 @@ const ModalDropzone = ({ onChange, onSavingStatus, onSelectFile, - maxSize = UPLOAD_FILE_MAX_SIZE, + maxSize, }) => { const { intl, @@ -46,9 +46,10 @@ const ModalDropzone = ({ onChange, onCancel, onClose, fileTypes, onSavingStatus, onSelectFile, }); + const invalidSizeMore = invalidFileSizeMore || intl.formatMessage( messages.uploadImageDropzoneInvalidSizeMore, - { maxSize: maxSize / (1000 * 1000) }, + { maxSize: (maxSize || getUploadFileMaxSize()) / (1024 * 1024) }, ); const inputComponent = previewUrl ? ( @@ -129,7 +130,7 @@ ModalDropzone.defaultProps = { imageHelpText: '', previewComponent: null, imageDropzoneText: '', - maxSize: UPLOAD_FILE_MAX_SIZE, + maxSize: 'undefined', invalidFileSizeMore: '', onSelectFile: null, }; diff --git a/src/textbooks/textbook-form/TextbookForm.jsx b/src/textbooks/textbook-form/TextbookForm.jsx index dfc472ce4f..3635306a72 100644 --- a/src/textbooks/textbook-form/TextbookForm.jsx +++ b/src/textbooks/textbook-form/TextbookForm.jsx @@ -21,7 +21,7 @@ import FormikControl from '../../generic/FormikControl'; import PromptIfDirty from '../../generic/prompt-if-dirty/PromptIfDirty'; import ModalDropzone from '../../generic/modal-dropzone/ModalDropzone'; import { useModel } from '../../generic/model-store'; -import { UPLOAD_FILE_MAX_SIZE } from '../../constants'; +import { getUploadFileMaxSize } from '@src/constants'; import textbookFormValidationSchema from './validations'; import messages from './messages'; @@ -171,7 +171,7 @@ const TextbookForm = ({ onSavingStatus={onSavingStatus} invalidFileSizeMore={intl.formatMessage( messages.uploadModalFileInvalidSizeText, - { maxSize: UPLOAD_FILE_MAX_SIZE / (1000 * 1000) }, + { maxSize: getUploadFileMaxSize() / (1024 * 1024) }, )} onSelectFile={setSelectedFile} previewComponent={( @@ -180,7 +180,7 @@ const TextbookForm = ({ {selectedFile} )} - maxSize={UPLOAD_FILE_MAX_SIZE} + maxSize={getUploadFileMaxSize()} />