Skip to content

Commit cb657c3

Browse files
fix image cropper
1 parent 7cfd33b commit cb657c3

File tree

3 files changed

+20
-6
lines changed

3 files changed

+20
-6
lines changed

fixture/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ async function ormSharedFixtureLift(adminizer: Adminizer) {
189189
adminizer.catalogHandler.add(new TestCatalog(adminizer, 'testcatalog'))
190190

191191
/** Test notifications */
192-
//setTimeout(() => sendNotificationsWithDelay(adminizer, {count: 150, onlyGeneral: false, generalRatio: 0.5, delayMs: 300}), 10000); // Начальная задержка 10 секунд
192+
//setTimeout(() => sendNotificationsWithDelay(adminizer, {count: 150, onlyGeneral: false, generalRatio: 0.5, delayMs: 300}), 5000); // Начальная задержка 10 секунд
193193

194194
} catch (e) {
195195
console.log(e)

src/assets/js/components/media-manager/components/Gallery.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ const Gallery = forwardRef<GalleryRef, GalleryProps>(({openMeta, crop, openVaria
173173
return (
174174
<div className="flex justify-between mt-8 gap-4 px-2 pb-4">
175175
<Tabs value={activeTab} className="w-full">
176-
<div className="flex gap-4 mb-4">
176+
<div className="flex gap-4 mb-4 flex-wrap md:flex-nowrap">
177177
<Input
178178
type="search"
179179
placeholder={messages["Search"]}
@@ -186,43 +186,49 @@ const Gallery = forwardRef<GalleryRef, GalleryProps>(({openMeta, crop, openVaria
186186
}}
187187
className="w-[200px] p-2 border rounded"
188188
/>
189-
<TabsList className="w-full">
189+
<TabsList className="w-full]">
190190
<TabsTrigger
191+
className="text-[12px] sm:text-sm"
191192
value="tile-image"
192193
onClick={() => handleChange('image', 'tile-image')}
193194
disabled={!!pendingTab}
194195
>
195196
{messages["Images"]}
196197
</TabsTrigger>
197198
<TabsTrigger
199+
className="text-[12px] sm:text-sm"
198200
value="table-video"
199201
onClick={() => handleChange('video', 'table-video')}
200202
disabled={!!pendingTab}
201203
>
202204
{messages["Videos"]}
203205
</TabsTrigger>
204206
<TabsTrigger
207+
className="text-[12px] sm:text-sm"
205208
value="table-text"
206209
onClick={() => handleChange('text', 'table-text')}
207210
disabled={!!pendingTab}
208211
>
209212
{messages["Texts"]}
210213
</TabsTrigger>
211214
<TabsTrigger
215+
className="text-[12px] sm:text-sm"
212216
value="table-application"
213217
onClick={() => handleChange('application', 'table-application')}
214218
disabled={!!pendingTab}
215219
>
216220
{messages["Applications"]}
217221
</TabsTrigger>
218222
<TabsTrigger
223+
className="text-[12px] sm:text-sm"
219224
value="table-all"
220225
onClick={() => handleChange('all', 'table-all')}
221226
disabled={!!pendingTab}
222227
>
223228
{messages["Table"]}
224229
</TabsTrigger>
225230
<TabsTrigger
231+
className="text-[12px] sm:text-sm"
226232
value="tile-all"
227233
onClick={() => handleChange('all', 'tile-all')}
228234
disabled={!!pendingTab}

src/assets/js/components/media-manager/components/ImageCropper.tsx

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {useRef, useState} from "react";
1+
import {useEffect, useRef, useState} from "react";
22
import Cropper from "react-cropper";
33
import type {ReactCropperElement, ReactCropperProps} from 'react-cropper';
44
import {Button} from "@/components/ui/button.tsx";
@@ -31,7 +31,7 @@ const ImageCropper = ({
3131
group,
3232
messages
3333
}: ImageCropperProps) => {
34-
const cropperRef = useRef<ReactCropperElement>(null);
34+
const cropperRef = useRef<ReactCropperElement & {cropper : {ready: boolean}}>(null);
3535
const [convertWebp, setConvertWebp] = useState(false);
3636
const [convertJpeg, setConvertJpeg] = useState(false);
3737
const [coordinates, setCoordinates] = useState({
@@ -42,6 +42,7 @@ const ImageCropper = ({
4242
});
4343
const [previewSrc, setPreviewSrc] = useState<string | null>(null);
4444
const [isLoading, setIsLoading] = useState(false);
45+
const [isReady, setIsReady] = useState(false);
4546

4647
// Аналогичные настройки Cropper.js
4748
const cropperOptions: ReactCropperProps = {
@@ -67,6 +68,10 @@ const ImageCropper = ({
6768
toggleDragModeOnDblclick: true,
6869
};
6970

71+
useEffect(() => {
72+
if(cropperRef.current) setIsReady(cropperRef.current?.cropper.ready)
73+
}, [cropperRef.current?.cropper]);
74+
7075
const onCrop = () => {
7176
if (cropperRef.current?.cropper) {
7277
const data = cropperRef.current.cropper.getData();
@@ -168,15 +173,18 @@ const ImageCropper = ({
168173
};
169174

170175
return (
171-
<div>
176+
<div className="relative">
177+
{!isReady && <LoaderCircle className="animate-spin absolute top-1/3 left-1/2 -translate-x-1/2"/> }
172178
<Cropper
173179
src={window.bindPublic ? `/public${item.url}` : item.url}
174180
style={{height: 540, width: "100%"}}
181+
className={`${isReady ? '' : 'invisible'}`}
175182
initialAspectRatio={1}
176183
ref={cropperRef}
177184
{...cropperOptions}
178185
crop={onCrop}
179186
/>
187+
180188
{/* Координаты */}
181189
<div className="grid grid-cols-4 gap-2 mt-4">
182190
{Object.entries(coordinates).map(([key, value]) => (

0 commit comments

Comments
 (0)