11import Image from "next/image" ;
22import React , { ChangeEvent , useEffect , useRef , useState } from "react" ;
3+ import Lottie from "react-lottie-player" ;
34
45import Dialog from "@/components/common/Dialog-new/Image-Dialog-new/Dialog" ;
56import PreviewDialog from "@/components/common/Dialog-new/Preview-Dialog-new/PreviewDialog" ;
@@ -11,11 +12,13 @@ import DeleteDialog from "@/components/common/Dialog-new/Timer-Image-Delete-Dial
1112import Tooltip from "@/admin/(components)/Tooltip/Container" ;
1213
1314import { getCompressImage } from "../ThemeDrawer/helpers/imageHelpers" ;
15+ import loaderJson from "../../../../public/lottie/loader.json" ;
1416
1517export default function ThemeTimerImage ( ) {
1618 const [ selectedTheme , setSelectedTheme ] = useSelectedTheme ( ) ;
1719 const setTimerImage = useTimerImageWrite ( ) ;
1820
21+ const [ isTimerImageLoading , setIsTimerImageLoading ] = useState ( false ) ;
1922 const [ timerImageUrl , setTimerImageUrl ] = useState < string > ( defaultTimerImage ) ;
2023 useEffect ( ( ) => {
2124 if ( selectedTheme . themeImageUrl ) {
@@ -52,12 +55,14 @@ export default function ThemeTimerImage() {
5255 }
5356 const file : File = e . target . files [ 0 ] ;
5457 if ( file . size > 500 * 1024 ) {
58+ setIsTimerImageLoading ( true ) ;
5559 const options = {
5660 maxSizeMB : 0.5 ,
5761 maxWidthOrHeight : 1000 ,
5862 useWebWorker : true ,
5963 } ;
6064 const compressedFile = await getCompressImage ( file , options ) ;
65+ setIsTimerImageLoading ( false ) ;
6166 setTimerImage ( { timerImage : compressedFile } ) ;
6267 } else {
6368 setTimerImage ( { timerImage : file } ) ;
@@ -67,6 +72,7 @@ export default function ThemeTimerImage() {
6772 open ( Dialog ) ;
6873 }
6974 fileReset ( ) ;
75+ setIsTimerImageLoading ( false ) ;
7076 } ;
7177 const handleAddTimerImageBtnClick = ( ) => {
7278 addImageInputRef . current ?. click ( ) ;
@@ -94,6 +100,16 @@ export default function ThemeTimerImage() {
94100 </ div >
95101 < div className = "theme-images" >
96102 < div className = "theme-image-box" >
103+ < div className = "theme-image-loader-box" >
104+ { isTimerImageLoading && (
105+ < Lottie
106+ loop
107+ animationData = { loaderJson }
108+ play
109+ style = { { width : 120 , height : 120 } }
110+ />
111+ ) }
112+ </ div >
97113 < Image { ...TimerImageProps } />
98114 { selectedTheme . useTimerUrl && (
99115 < div
0 commit comments