mirror of
				https://github.com/cinnyapp/cinny.git
				synced 2025-11-04 06:20:28 +03:00 
			
		
		
		
	Show file size exceeds error on upload (#2411)
* Show file size exceeds error on upload * fix missing import and make size bold
This commit is contained in:
		
							parent
							
								
									34dd64103c
								
							
						
					
					
						commit
						e9798a22c3
					
				
					 2 changed files with 38 additions and 6 deletions
				
			
		| 
						 | 
					@ -4,7 +4,8 @@ import { UploadCard, UploadCardError, CompactUploadCardProgress } from './Upload
 | 
				
			||||||
import { TUploadAtom, UploadStatus, UploadSuccess, useBindUploadAtom } from '../../state/upload';
 | 
					import { TUploadAtom, UploadStatus, UploadSuccess, useBindUploadAtom } from '../../state/upload';
 | 
				
			||||||
import { useMatrixClient } from '../../hooks/useMatrixClient';
 | 
					import { useMatrixClient } from '../../hooks/useMatrixClient';
 | 
				
			||||||
import { TUploadContent } from '../../utils/matrix';
 | 
					import { TUploadContent } from '../../utils/matrix';
 | 
				
			||||||
import { getFileTypeIcon } from '../../utils/common';
 | 
					import { bytesToSize, getFileTypeIcon } from '../../utils/common';
 | 
				
			||||||
 | 
					import { useMediaConfig } from '../../hooks/useMediaConfig';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type CompactUploadCardRendererProps = {
 | 
					type CompactUploadCardRendererProps = {
 | 
				
			||||||
  isEncrypted?: boolean;
 | 
					  isEncrypted?: boolean;
 | 
				
			||||||
| 
						 | 
					@ -19,10 +20,16 @@ export function CompactUploadCardRenderer({
 | 
				
			||||||
  onComplete,
 | 
					  onComplete,
 | 
				
			||||||
}: CompactUploadCardRendererProps) {
 | 
					}: CompactUploadCardRendererProps) {
 | 
				
			||||||
  const mx = useMatrixClient();
 | 
					  const mx = useMatrixClient();
 | 
				
			||||||
 | 
					  const mediaConfig = useMediaConfig();
 | 
				
			||||||
 | 
					  const allowSize = mediaConfig['m.upload.size'] || Infinity;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const { upload, startUpload, cancelUpload } = useBindUploadAtom(mx, uploadAtom, isEncrypted);
 | 
					  const { upload, startUpload, cancelUpload } = useBindUploadAtom(mx, uploadAtom, isEncrypted);
 | 
				
			||||||
  const { file } = upload;
 | 
					  const { file } = upload;
 | 
				
			||||||
 | 
					  const fileSizeExceeded = file.size >= allowSize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (upload.status === UploadStatus.Idle) startUpload();
 | 
					  if (upload.status === UploadStatus.Idle && !fileSizeExceeded) {
 | 
				
			||||||
 | 
					    startUpload();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const removeUpload = () => {
 | 
					  const removeUpload = () => {
 | 
				
			||||||
    cancelUpload();
 | 
					    cancelUpload();
 | 
				
			||||||
| 
						 | 
					@ -76,7 +83,7 @@ export function CompactUploadCardRenderer({
 | 
				
			||||||
        </>
 | 
					        </>
 | 
				
			||||||
      ) : (
 | 
					      ) : (
 | 
				
			||||||
        <>
 | 
					        <>
 | 
				
			||||||
          {upload.status === UploadStatus.Idle && (
 | 
					          {upload.status === UploadStatus.Idle && !fileSizeExceeded && (
 | 
				
			||||||
            <CompactUploadCardProgress sentBytes={0} totalBytes={file.size} />
 | 
					            <CompactUploadCardProgress sentBytes={0} totalBytes={file.size} />
 | 
				
			||||||
          )}
 | 
					          )}
 | 
				
			||||||
          {upload.status === UploadStatus.Loading && (
 | 
					          {upload.status === UploadStatus.Loading && (
 | 
				
			||||||
| 
						 | 
					@ -87,6 +94,15 @@ export function CompactUploadCardRenderer({
 | 
				
			||||||
              <Text size="T200">{upload.error.message}</Text>
 | 
					              <Text size="T200">{upload.error.message}</Text>
 | 
				
			||||||
            </UploadCardError>
 | 
					            </UploadCardError>
 | 
				
			||||||
          )}
 | 
					          )}
 | 
				
			||||||
 | 
					          {upload.status === UploadStatus.Idle && fileSizeExceeded && (
 | 
				
			||||||
 | 
					            <UploadCardError>
 | 
				
			||||||
 | 
					              <Text size="T200">
 | 
				
			||||||
 | 
					                The file size exceeds the limit. Maximum allowed size is{' '}
 | 
				
			||||||
 | 
					                <b>{bytesToSize(allowSize)}</b>, but the uploaded file is{' '}
 | 
				
			||||||
 | 
					                <b>{bytesToSize(file.size)}</b>.
 | 
				
			||||||
 | 
					              </Text>
 | 
				
			||||||
 | 
					            </UploadCardError>
 | 
				
			||||||
 | 
					          )}
 | 
				
			||||||
        </>
 | 
					        </>
 | 
				
			||||||
      )}
 | 
					      )}
 | 
				
			||||||
    </UploadCard>
 | 
					    </UploadCard>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,13 +4,14 @@ import { UploadCard, UploadCardError, UploadCardProgress } from './UploadCard';
 | 
				
			||||||
import { UploadStatus, UploadSuccess, useBindUploadAtom } from '../../state/upload';
 | 
					import { UploadStatus, UploadSuccess, useBindUploadAtom } from '../../state/upload';
 | 
				
			||||||
import { useMatrixClient } from '../../hooks/useMatrixClient';
 | 
					import { useMatrixClient } from '../../hooks/useMatrixClient';
 | 
				
			||||||
import { TUploadContent } from '../../utils/matrix';
 | 
					import { TUploadContent } from '../../utils/matrix';
 | 
				
			||||||
import { getFileTypeIcon } from '../../utils/common';
 | 
					import { bytesToSize, getFileTypeIcon } from '../../utils/common';
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
  roomUploadAtomFamily,
 | 
					  roomUploadAtomFamily,
 | 
				
			||||||
  TUploadItem,
 | 
					  TUploadItem,
 | 
				
			||||||
  TUploadMetadata,
 | 
					  TUploadMetadata,
 | 
				
			||||||
} from '../../state/room/roomInputDrafts';
 | 
					} from '../../state/room/roomInputDrafts';
 | 
				
			||||||
import { useObjectURL } from '../../hooks/useObjectURL';
 | 
					import { useObjectURL } from '../../hooks/useObjectURL';
 | 
				
			||||||
 | 
					import { useMediaConfig } from '../../hooks/useMediaConfig';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type ImagePreviewProps = { fileItem: TUploadItem; onSpoiler: (marked: boolean) => void };
 | 
					type ImagePreviewProps = { fileItem: TUploadItem; onSpoiler: (marked: boolean) => void };
 | 
				
			||||||
function ImagePreview({ fileItem, onSpoiler }: ImagePreviewProps) {
 | 
					function ImagePreview({ fileItem, onSpoiler }: ImagePreviewProps) {
 | 
				
			||||||
| 
						 | 
					@ -75,12 +76,18 @@ export function UploadCardRenderer({
 | 
				
			||||||
  onComplete,
 | 
					  onComplete,
 | 
				
			||||||
}: UploadCardRendererProps) {
 | 
					}: UploadCardRendererProps) {
 | 
				
			||||||
  const mx = useMatrixClient();
 | 
					  const mx = useMatrixClient();
 | 
				
			||||||
 | 
					  const mediaConfig = useMediaConfig();
 | 
				
			||||||
 | 
					  const allowSize = mediaConfig['m.upload.size'] || Infinity;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const uploadAtom = roomUploadAtomFamily(fileItem.file);
 | 
					  const uploadAtom = roomUploadAtomFamily(fileItem.file);
 | 
				
			||||||
  const { metadata } = fileItem;
 | 
					  const { metadata } = fileItem;
 | 
				
			||||||
  const { upload, startUpload, cancelUpload } = useBindUploadAtom(mx, uploadAtom, isEncrypted);
 | 
					  const { upload, startUpload, cancelUpload } = useBindUploadAtom(mx, uploadAtom, isEncrypted);
 | 
				
			||||||
  const { file } = upload;
 | 
					  const { file } = upload;
 | 
				
			||||||
 | 
					  const fileSizeExceeded = file.size >= allowSize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (upload.status === UploadStatus.Idle) startUpload();
 | 
					  if (upload.status === UploadStatus.Idle && !fileSizeExceeded) {
 | 
				
			||||||
 | 
					    startUpload();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const handleSpoiler = (marked: boolean) => {
 | 
					  const handleSpoiler = (marked: boolean) => {
 | 
				
			||||||
    setMetadata(fileItem, { ...metadata, markedAsSpoiler: marked });
 | 
					    setMetadata(fileItem, { ...metadata, markedAsSpoiler: marked });
 | 
				
			||||||
| 
						 | 
					@ -131,7 +138,7 @@ export function UploadCardRenderer({
 | 
				
			||||||
          {fileItem.originalFile.type.startsWith('image') && (
 | 
					          {fileItem.originalFile.type.startsWith('image') && (
 | 
				
			||||||
            <ImagePreview fileItem={fileItem} onSpoiler={handleSpoiler} />
 | 
					            <ImagePreview fileItem={fileItem} onSpoiler={handleSpoiler} />
 | 
				
			||||||
          )}
 | 
					          )}
 | 
				
			||||||
          {upload.status === UploadStatus.Idle && (
 | 
					          {upload.status === UploadStatus.Idle && !fileSizeExceeded && (
 | 
				
			||||||
            <UploadCardProgress sentBytes={0} totalBytes={file.size} />
 | 
					            <UploadCardProgress sentBytes={0} totalBytes={file.size} />
 | 
				
			||||||
          )}
 | 
					          )}
 | 
				
			||||||
          {upload.status === UploadStatus.Loading && (
 | 
					          {upload.status === UploadStatus.Loading && (
 | 
				
			||||||
| 
						 | 
					@ -142,6 +149,15 @@ export function UploadCardRenderer({
 | 
				
			||||||
              <Text size="T200">{upload.error.message}</Text>
 | 
					              <Text size="T200">{upload.error.message}</Text>
 | 
				
			||||||
            </UploadCardError>
 | 
					            </UploadCardError>
 | 
				
			||||||
          )}
 | 
					          )}
 | 
				
			||||||
 | 
					          {upload.status === UploadStatus.Idle && fileSizeExceeded && (
 | 
				
			||||||
 | 
					            <UploadCardError>
 | 
				
			||||||
 | 
					              <Text size="T200">
 | 
				
			||||||
 | 
					                The file size exceeds the limit. Maximum allowed size is{' '}
 | 
				
			||||||
 | 
					                <b>{bytesToSize(allowSize)}</b>, but the uploaded file is{' '}
 | 
				
			||||||
 | 
					                <b>{bytesToSize(file.size)}</b>.
 | 
				
			||||||
 | 
					              </Text>
 | 
				
			||||||
 | 
					            </UploadCardError>
 | 
				
			||||||
 | 
					          )}
 | 
				
			||||||
        </>
 | 
					        </>
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    >
 | 
					    >
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue