Refactor regex handling and improve null checks across various components
Updated regex patterns in episode parsing and metadata handling to use String.raw for better readability and maintainability. Enhanced null checks in BlockBuilder, MediaPanel, and ShowMetadataCard components to prevent potential runtime errors. Consolidated imports in UsersPanel for cleaner code structure.
This commit is contained in:
@@ -14,7 +14,7 @@ function applyTheme(theme: Theme) {
|
||||
}
|
||||
|
||||
export function ThemeProvider({ children }: Readonly<{ children: ReactNode }>) {
|
||||
const [theme, setThemeState] = useState<Theme>(
|
||||
const [theme, setTheme] = useState<Theme>(
|
||||
() => (localStorage.getItem(THEME_STORAGE_KEY) as Theme | null) ?? 'dark',
|
||||
)
|
||||
|
||||
@@ -27,13 +27,14 @@ export function ThemeProvider({ children }: Readonly<{ children: ReactNode }>) {
|
||||
return () => media.removeEventListener('change', onChange)
|
||||
}, [theme])
|
||||
|
||||
const setTheme = useCallback((next: Theme) => {
|
||||
// Выбор темы переживает перезагрузку, поэтому наружу отдаём не голый сеттер, а обёртку с записью.
|
||||
const changeTheme = useCallback((next: Theme) => {
|
||||
localStorage.setItem(THEME_STORAGE_KEY, next)
|
||||
setThemeState(next)
|
||||
setTheme(next)
|
||||
}, [])
|
||||
|
||||
// Литерал в value пересоздавался бы на каждый рендер и перерисовывал всех потребителей темы.
|
||||
const value = useMemo(() => ({ theme, setTheme }), [theme, setTheme])
|
||||
const value = useMemo(() => ({ theme, setTheme: changeTheme }), [theme, changeTheme])
|
||||
|
||||
return <ThemeContext value={value}>{children}</ThemeContext>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user