mirror of
				https://github.com/skidoodle/erettsegi-browser.git
				synced 2025-02-15 05:39:15 +01:00 
			
		
		
		
	Refactor button component and theme switcher
This commit is contained in:
		| @@ -1,13 +1,13 @@ | ||||
| import { Button } from '@nextui-org/react' | ||||
| import { useState, useEffect } from 'react' | ||||
| import React, { useState, useEffect, useCallback } from 'react' | ||||
| import type { ButtonProps } from '@/utils/props' | ||||
| import type { ButtonColor } from '@/utils/types' | ||||
|  | ||||
| const CustomButton: React.FC<ButtonProps> = ({ label, link }) => { | ||||
|   const [status, setStatus] = useState<number>(0) | ||||
| const CustomButton: React.FC<ButtonProps> = React.memo(({ label, link }) => { | ||||
|   const [status, setStatus] = useState<number>() | ||||
|   const [isLoading, setIsLoading] = useState<boolean>(false) | ||||
|  | ||||
|   const checkLinkStatus = async (): Promise<void> => { | ||||
|   const checkLinkStatus = useCallback(async (): Promise<void> => { | ||||
|     if (link) { | ||||
|       try { | ||||
|         setIsLoading(true) | ||||
| @@ -20,13 +20,13 @@ const CustomButton: React.FC<ButtonProps> = ({ label, link }) => { | ||||
|         setIsLoading(false) | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   }, [link]) | ||||
|  | ||||
|   useEffect(() => { | ||||
|     void checkLinkStatus() | ||||
|   }, [link]) | ||||
|   }, [checkLinkStatus]) | ||||
|  | ||||
|   const getColor = (): ButtonColor => { | ||||
|   const getColor = useCallback((): ButtonColor => { | ||||
|     switch (true) { | ||||
|       case isLoading: | ||||
|         return 'default' | ||||
| @@ -37,15 +37,15 @@ const CustomButton: React.FC<ButtonProps> = ({ label, link }) => { | ||||
|       default: | ||||
|         return 'default' | ||||
|     } | ||||
|   } | ||||
|   }, [isLoading, status]) | ||||
|  | ||||
|   const handleClick = () => { | ||||
|   const handleClick = useCallback(() => { | ||||
|     if (status === 200 && link) { | ||||
|       window.open(link) | ||||
|     } else { | ||||
|       console.error('A hivatkozás nem elérhető.') | ||||
|     } | ||||
|   } | ||||
|   }, [status, link]) | ||||
|  | ||||
|   return ( | ||||
|     <Button | ||||
| @@ -58,12 +58,12 @@ const CustomButton: React.FC<ButtonProps> = ({ label, link }) => { | ||||
|       {label} | ||||
|     </Button> | ||||
|   ) | ||||
| } | ||||
| }) | ||||
|  | ||||
| export const PdfButton: React.FC<ButtonProps> = ({ label, link }) => ( | ||||
|   <CustomButton label={label} link={link} /> | ||||
| export const PdfButton: React.FC<ButtonProps> = React.memo( | ||||
|   ({ label, link }) => <CustomButton label={label} link={link} /> | ||||
| ) | ||||
|  | ||||
| export const ZipButton: React.FC<ButtonProps> = ({ label, link }) => ( | ||||
|   <CustomButton label={label} link={link} /> | ||||
| export const ZipButton: React.FC<ButtonProps> = React.memo( | ||||
|   ({ label, link }) => <CustomButton label={label} link={link} /> | ||||
| ) | ||||
|   | ||||
| @@ -6,16 +6,7 @@ export const ThemeSwitcher = () => { | ||||
|   const { theme, setTheme } = useTheme() | ||||
|  | ||||
|   const toggle = () => { | ||||
|     switch (theme) { | ||||
|       case 'dark': | ||||
|         setTheme('light') | ||||
|         break | ||||
|       case 'light': | ||||
|         setTheme('dark') | ||||
|         break | ||||
|       default: | ||||
|         break | ||||
|     } | ||||
|     setTheme(theme === 'light' ? 'dark' : 'light') | ||||
|   } | ||||
|  | ||||
|   return ( | ||||
|   | ||||
		Reference in New Issue
	
	Block a user