import { WebApplication } from '@/UIModels/Application' import { FeatureStatus } from '@standardnotes/snjs' import { FunctionComponent } from 'preact' import { useCallback, useMemo } from 'preact/hooks' import { JSXInternal } from 'preact/src/jsx' import { Icon } from '@/Components/Icon/Icon' import { usePremiumModal } from '@/Hooks/usePremiumModal' import { Switch } from '@/Components/Switch' import { ThemeItem } from './ThemeItem' type Props = { item: ThemeItem application: WebApplication onBlur: (event: { relatedTarget: EventTarget | null }) => void } export const ThemesMenuButton: FunctionComponent = ({ application, item, onBlur }) => { const premiumModal = usePremiumModal() const isThirdPartyTheme = useMemo( () => application.features.isThirdPartyFeature(item.identifier), [application, item.identifier], ) const isEntitledToTheme = useMemo( () => application.features.getFeatureStatus(item.identifier) === FeatureStatus.Entitled, [application, item.identifier], ) const canActivateTheme = useMemo(() => isEntitledToTheme || isThirdPartyTheme, [isEntitledToTheme, isThirdPartyTheme]) const toggleTheme: JSXInternal.MouseEventHandler = useCallback( (e) => { e.preventDefault() if (item.component && canActivateTheme) { const themeIsLayerableOrNotActive = item.component.isLayerable() || !item.component.active if (themeIsLayerableOrNotActive) { application.mutator.toggleTheme(item.component).catch(console.error) } } else { premiumModal.activate(`${item.name} theme`) } }, [application, canActivateTheme, item, premiumModal], ) return ( ) }