1- import { FormEvent , useEffect , useMemo , useState } from 'react'
1+ import { FormEvent , useEffect , useMemo , useRef , useState } from 'react'
22import { DEFAULT_SETTINGS , ExtensionSettings , getSettings , saveSettings , normalizeSettings } from '../shared/settings'
33
44import './Options.css'
55
66type SaveStatus = 'idle' | 'saving' | 'saved' | 'error'
77
88const defaultState = cloneSettings ( DEFAULT_SETTINGS )
9+ const SAVE_STATUS_RESET_DELAY_MS = 2400
910
1011export const Options = ( ) => {
1112 const [ settings , setSettings ] = useState < ExtensionSettings > ( defaultState )
1213 const [ newPattern , setNewPattern ] = useState ( '' )
1314 const [ status , setStatus ] = useState < SaveStatus > ( 'idle' )
1415 const [ errorMessage , setErrorMessage ] = useState < string | null > ( null )
16+ const resetStatusTimeout = useRef < number | null > ( null )
1517
1618 useEffect ( ( ) => {
1719 let mounted = true
@@ -31,6 +33,14 @@ export const Options = () => {
3133 }
3234 } , [ ] )
3335
36+ useEffect ( ( ) => {
37+ return ( ) => {
38+ if ( resetStatusTimeout . current !== null ) {
39+ window . clearTimeout ( resetStatusTimeout . current )
40+ }
41+ }
42+ } , [ ] )
43+
3444 const normalizedPatterns = useMemo ( ( ) => settings . hostPatterns . map ( ( pattern ) => pattern . trim ( ) ) , [ settings . hostPatterns ] )
3545
3646 const canAddPattern = useMemo ( ( ) => {
@@ -74,16 +84,21 @@ export const Options = () => {
7484
7585 const handleSubmit = async ( event : FormEvent ) => {
7686 event . preventDefault ( )
87+ if ( resetStatusTimeout . current !== null ) {
88+ window . clearTimeout ( resetStatusTimeout . current )
89+ resetStatusTimeout . current = null
90+ }
7791 setStatus ( 'saving' )
7892 setErrorMessage ( null )
7993 try {
8094 const normalized = normalizeSettings ( settings )
8195 await saveSettings ( normalized )
8296 setSettings ( cloneSettings ( normalized ) )
8397 setStatus ( 'saved' )
84- setTimeout ( ( ) => {
98+ resetStatusTimeout . current = window . setTimeout ( ( ) => {
8599 setStatus ( 'idle' )
86- } , 2400 )
100+ resetStatusTimeout . current = null
101+ } , SAVE_STATUS_RESET_DELAY_MS )
87102 } catch ( error ) {
88103 console . error ( 'Failed to save settings' , error )
89104 setStatus ( 'error' )
0 commit comments