import { PreferencesGroup, PreferencesSegment, Text, Title, } from '@/preferences/components'; import { Button } from '@/components/Button'; import { observer } from '@node_modules/mobx-react-lite'; import { WebApplication } from '@/ui_models/application'; import { useEffect, useState } from 'preact/hooks'; import { GetSubscriptionResponse, GetSubscriptionsResponse, } from '@standardnotes/snjs/dist/@types/services/api/responses'; type Props = { application: WebApplication; }; type Subscription = { planName: string; cancelled: boolean; endsAt: number; }; type AvailableSubscriptions = { [key: string]: { name: string; }; }; type SubscriptionInformationProps = { subscription?: Subscription; availableSubscriptions: AvailableSubscriptions; }; type ValidSubscriptionProps = { subscription: Subscription; availableSubscriptions: AvailableSubscriptions; }; const NoSubscription = () => ( <> You don't have a Standard Notes subscription yet.
); const ActiveSubscription = ({ subscription, availableSubscriptions, }: ValidSubscriptionProps) => ( <> Your{' '} Standard Notes {availableSubscriptions[subscription.planName]} {' '} subscription will be{' '} renewed on {new Date(subscription.endsAt).toLocaleString()} .
); const CancelledSubscription = ({ subscription, availableSubscriptions, }: ValidSubscriptionProps) => ( <> Your{' '} Standard Notes {availableSubscriptions[subscription.planName]} {' '} subscription has been{' '} canceled but will remain valid until{' '} {new Date(subscription.endsAt).toLocaleString()} . You may resubscribe below if you wish.
); const SubscriptionInformation = ({ subscription, availableSubscriptions, }: SubscriptionInformationProps) => { const now = new Date().getTime(); if (subscription && subscription.endsAt > now) { return subscription.cancelled ? ( ) : ( ); } return ; }; const Subscription = observer(({ application }: Props) => { const [subscription, setSubscription] = useState(undefined); const [availableSubscriptions, setAvailableSubscriptions] = useState({}); const [error, setError] = useState(false); useEffect(() => { const getSubscriptions = async () => { try { const result = await application.getSubscriptions(); if (result.data) { const data = (result as GetSubscriptionsResponse).data; setAvailableSubscriptions(data!); } else { setError(true); } } catch (e) { setError(true); } }; const getSubscription = async () => { try { const result = await application.getUserSubscription(); if (!result.error && result.data) { const data = (result as GetSubscriptionResponse).data; const subscription = data!.subscription; setSubscription(subscription); } else { setError(true); } } catch (e) { setError(true); } }; getSubscriptions(); getSubscription(); }, [application]); return (
Subscription {error ? ( 'No subscription information available.' ) : ( )}
); }); export default Subscription;