Для установки лимита на размер изображений и ограничения на загрузку файлов до 5 МБ в редакторе Quill, прежде всего нужно определить, как вы обрабатываете загрузку изображений. В Quill по умолчанию нет встроенной поддержки загрузки изображений, поэтому, если вы используете загрузку файлов через пользовательскую логику, вам нужно будет добавить проверку размера файла в процессе обработки.
Вот как это можно сделать:
1. **Проверка размера изображения**: Вам нужно будет использовать обработчик загрузки изображений. Обычно это делается с помощью `modules` Quill, которые позволяют вам настроить поведение редактора. Например, вы можете использовать модуль для загрузки изображений и добавлять проверку размера файла.
2. **Пример кода**, который добавляет обработку изображений и проверяет их размер:
```typescript
'use client';
import React, { useState, forwardRef } from 'react';
import ReactQuill, { ReactQuillProps } from 'react-quill';
import 'react-quill/dist/quill.snow.css';
import './quil-editor.scss';
import cn from 'clsx';
import { Label } from '../label';
import { Sources } from 'quill';
import { convertLengthLeft } from './convert-length-left';
interface IQuilEditorProps extends ReactQuillProps {
label?: string;
maxLength?: number;
error?: boolean;
helperText?: string;
setIsError?: (isError: boolean) => void;
required?: boolean;
divProps?: React.HTMLAttributes<HTMLDivElement>;
}
const QuilEditor = forwardRef<ReactQuill, IQuilEditorProps>(
(
{
label,
required,
helperText,
error,
className,
onChange,
divProps,
...props
},
ref
) => {
const [editorText, setEditorText] = useState('');
const [isFocused, setIsFocused] = useState(false);
const [isError, setIsError] = useState(error || false);
const [lengthError, setLengthError] = useState('');
const lengthLeft = props.maxLength
? convertLengthLeft(props.maxLength, editorText)
: undefined;
const handleChange = (html: string, delta: any, source: Sources, editor: ReactQuill.UnprivilegedEditor) => {
setEditorText(editor.getText().trimStart());
let errorMsg = '';
if (props.maxLength && editorText.length > props.maxLength) {
errorMsg = `Максимальная длина: ${props.maxLength} символов.`;
}
if (errorMsg) {
setLengthError(errorMsg);
setIsError(true);
} else {
setLengthError('');
setIsError(false);
}
if (onChange) {
onChange(html, delta, source, editor);
}
};
const handleImageUpload = async (file: File) => {
if (file.size > 5 * 1024 * 1024) { // 5 MB в байтах
alert('Пожалуйста, загрузите изображение размером до 5 МБ.');
return;
}
const formData = new FormData();
formData.append('file', file);
// Здесь нужно добавить вашу логику для загрузки файла
// Например, отправка на ваш сервер
const imageUrl = await uploadImage(formData); // Примерная функция для загрузки
const quill = ref.current.getEditor();
const range = quill.getSelection(true);
quill.insertEmbed(range.index, 'image', imageUrl);
};
const uploadImage = (formData: FormData) => {
// Здесь добавьте логику для обработки загрузки изображения
return Promise.resolve("URL_изображения"); // Возврат URL загруженного изображения
};
return (
<div className={cn('quil-editor-container', className)} {...divProps}>
{label && <Label required={required}>{label}</Label>}
<ReactQuill
ref={ref}
value={editorText}
onChange={handleChange}
modules={{
toolbar: {
container: [
['bold', 'italic', 'underline'],
[{ 'list': 'ordered'}, {'list': 'bullet'}],
['link', 'image', 'clean'],
],
handlers: {
image: () => {
const input = document.createElement('input');
input.setAttribute('type', 'file');
input.setAttribute('accept', 'image/*');
input.onchange = async (e: any) => {
const file = e