From 9085a7f943719026e306f4b65a17821767ba5294 Mon Sep 17 00:00:00 2001 From: Enchu Date: Thu, 4 Dec 2025 19:20:14 +0300 Subject: [PATCH 1/2] fix(50): change error return --- package-lock.json | 2 +- packages/pkg.fileuploader/FileUploader.tsx | 23 ++++++++++++++-------- packages/pkg.fileuploader/package.json | 2 +- packages/pkg.fileuploader/types.ts | 6 ++++-- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 641f73c5..0264462b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25558,7 +25558,7 @@ }, "packages/pkg.fileuploader": { "name": "@xipkg/fileuploader", - "version": "2.0.13", + "version": "2.0.14", "license": "MIT", "dependencies": { "@xipkg/icons": "^2.5.2", diff --git a/packages/pkg.fileuploader/FileUploader.tsx b/packages/pkg.fileuploader/FileUploader.tsx index 505c610e..e2c9c84b 100644 --- a/packages/pkg.fileuploader/FileUploader.tsx +++ b/packages/pkg.fileuploader/FileUploader.tsx @@ -59,7 +59,7 @@ export const FileUploader = ({ disabled, isWarning, onChange, - onError, + onFileError, enableErrorHandling = true, limit = 3, bytesSizeLimit = DEFAULT_SIZE_LIMIT, @@ -80,15 +80,17 @@ export const FileUploader = ({ const formatedSizeLimit = formatBytesSize(bytesSizeLimit); const handleError = (fileList: File[]): boolean => { - if (!enableErrorHandling || !onError) { + if (!enableErrorHandling || !onFileError) { return false; } if (fileList.length > limit) { - onError(`Можно отправить не более ${limit} ${plural( - pluralFiles, - limit, - )} общим объёмом до ${formatedSizeLimit}`); + onFileError( + `Можно отправить не более ${limit} ${plural( + pluralFiles, + limit, + )} общим объёмом до ${formatedSizeLimit}`, + ); return true; } @@ -133,7 +135,7 @@ export const FileUploader = ({ }) .join(', '); - onError(`Неподдерживаемый формат файла. Разрешены: ${displayTypes}`); + onFileError(`Неподдерживаемый формат файла. Разрешены: ${displayTypes}`); return true; } } @@ -141,7 +143,12 @@ export const FileUploader = ({ if (validateBeforeUpload) { const validationError = validateBeforeUpload(fileList); if (validationError) { - onError(validationError); + if(typeof validationError === 'string'){ + onFileError(validationError); + }else{ + onFileError(validationError.titleError, validationError.subtitleError); + } + return true; } } diff --git a/packages/pkg.fileuploader/package.json b/packages/pkg.fileuploader/package.json index 51014659..ea3df7ae 100644 --- a/packages/pkg.fileuploader/package.json +++ b/packages/pkg.fileuploader/package.json @@ -1,6 +1,6 @@ { "name": "@xipkg/fileuploader", - "version": "2.0.13", + "version": "2.0.14", "main": "./dist/index.mjs", "module": "./dist/index.mjs", "types": "./dist/index.d.mts", diff --git a/packages/pkg.fileuploader/types.ts b/packages/pkg.fileuploader/types.ts index b801c7cb..dd0aa1c8 100644 --- a/packages/pkg.fileuploader/types.ts +++ b/packages/pkg.fileuploader/types.ts @@ -6,15 +6,17 @@ export type DefaultInputPropsT = Omit< 'onChange' | 'size' >; +type ValidationError = string | { titleError: string; subtitleError?: string }; + export type FileUploaderProps = { size?: SizeType; limit?: number; - onError?: (error: string) => void; + onFileError?: (titleError: string, subtitleError?: string) => void; enableErrorHandling?: boolean; isWarning?: boolean; descriptionText?: string; onChange: (files: File[]) => void; - validateBeforeUpload?: (files: File[]) => string | undefined; + validateBeforeUpload?: (files: File[]) => ValidationError | undefined; bytesSizeLimit?: number; children?: React.ReactNode; fileTypesHint?: string[]; From 182a9acc7ba4e124ef79cbe0f4553e2966df5ddf Mon Sep 17 00:00:00 2001 From: Enchu Date: Thu, 11 Dec 2025 18:31:02 +0300 Subject: [PATCH 2/2] feat(50): changing types and checks --- packages/pkg.fileuploader/FileUploader.tsx | 14 ++------------ packages/pkg.fileuploader/types.ts | 7 +++---- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/packages/pkg.fileuploader/FileUploader.tsx b/packages/pkg.fileuploader/FileUploader.tsx index e2c9c84b..1cf8341a 100644 --- a/packages/pkg.fileuploader/FileUploader.tsx +++ b/packages/pkg.fileuploader/FileUploader.tsx @@ -3,7 +3,7 @@ import { formatBytesSize, plural } from '@xipkg/utils'; import { cva } from 'class-variance-authority'; import { ChangeEvent, DragEvent, useId, useRef, useState } from 'react'; import { FileUploaderProps, DefaultInputPropsT } from './types'; -import { stopDefaultEvents, validateSize } from './utils'; +import { stopDefaultEvents } from './utils'; const containerStyles = cva( 'flex group items-center rounded-lg border border-dashed border-gray-40 bg-gray-0 dark:border-gray-60 dark:bg-gray-100 transition-[outline_shadow] px-2 max-w-[500px] gap-3 focus-within:border-solid focus-within:border-gray-80 dark:focus-within:border-gray-40', @@ -60,7 +60,6 @@ export const FileUploader = ({ isWarning, onChange, onFileError, - enableErrorHandling = true, limit = 3, bytesSizeLimit = DEFAULT_SIZE_LIMIT, children, @@ -80,10 +79,6 @@ export const FileUploader = ({ const formatedSizeLimit = formatBytesSize(bytesSizeLimit); const handleError = (fileList: File[]): boolean => { - if (!enableErrorHandling || !onFileError) { - return false; - } - if (fileList.length > limit) { onFileError( `Можно отправить не более ${limit} ${plural( @@ -143,12 +138,7 @@ export const FileUploader = ({ if (validateBeforeUpload) { const validationError = validateBeforeUpload(fileList); if (validationError) { - if(typeof validationError === 'string'){ - onFileError(validationError); - }else{ - onFileError(validationError.titleError, validationError.subtitleError); - } - + onFileError(validationError.titleError, validationError.subtitleError); return true; } } diff --git a/packages/pkg.fileuploader/types.ts b/packages/pkg.fileuploader/types.ts index dd0aa1c8..709f54cc 100644 --- a/packages/pkg.fileuploader/types.ts +++ b/packages/pkg.fileuploader/types.ts @@ -6,17 +6,16 @@ export type DefaultInputPropsT = Omit< 'onChange' | 'size' >; -type ValidationError = string | { titleError: string; subtitleError?: string }; +type ValidationError = { titleError: string; subtitleError: string }; export type FileUploaderProps = { size?: SizeType; limit?: number; - onFileError?: (titleError: string, subtitleError?: string) => void; - enableErrorHandling?: boolean; + onFileError: (titleError: string, subtitleError?: string) => void; isWarning?: boolean; descriptionText?: string; onChange: (files: File[]) => void; - validateBeforeUpload?: (files: File[]) => ValidationError | undefined; + validateBeforeUpload?: (files: File[]) => ValidationError; bytesSizeLimit?: number; children?: React.ReactNode; fileTypesHint?: string[];