41 lines
		
	
	
		
			879 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			879 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import React from "react"
 | |
| 
 | |
| export default function useLocal(key: string) {
 | |
|   const [value, setValue] = React.useState<string | null>(null)
 | |
| 
 | |
|   React.useEffect(() => {
 | |
|     chrome.storage.local.get(key, (result) => {
 | |
|       setValue(result[key])
 | |
|     })
 | |
|   }, [key])
 | |
| 
 | |
|   const update = (newValue: string) => {
 | |
|     chrome.storage.local.set({ [key]: newValue }, () => {
 | |
|       setValue(newValue)
 | |
|     })
 | |
|   }
 | |
| 
 | |
|   const remove = () => {
 | |
|     chrome.storage.local.remove(key)
 | |
|     setValue(null)
 | |
|   }
 | |
| 
 | |
|   return { value, update, remove }
 | |
| }
 | |
| 
 | |
| export function useChatWidget() {
 | |
|   const { value, update } = useLocal("chat-widget")
 | |
|   const [active, setActive] = React.useState<boolean>(value === "show")
 | |
| 
 | |
|   const setActiveValue = (newValue: boolean) => {
 | |
|     if (newValue) {
 | |
|       update("show")
 | |
|     } else {
 | |
|       update("hide")
 | |
|     }
 | |
|     setActive(newValue)
 | |
|   }
 | |
| 
 | |
|   return { active, setActiveValue }
 | |
| }
 |