import { WebApplication } from '@/ui_models/application'; import { FeatureStatus } from '@standardnotes/snjs'; import { FunctionComponent } from 'preact'; import { useMemo } from 'preact/hooks'; import { JSXInternal } from 'preact/src/jsx'; import { Icon } from '../Icon'; import { usePremiumModal } from '../Premium'; import { Switch } from '../Switch'; import { ThemeItem } from './QuickSettingsMenu'; 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 = (e) => { e.preventDefault(); if (item.component && canActivateTheme) { const themeIsLayerableOrNotActive = item.component.isLayerable() || !item.component.active; if (themeIsLayerableOrNotActive) { application.mutator.toggleTheme(item.component); } } else { premiumModal.activate(`${item.name} theme`); } }; return ( ); };