fix: fix state and add loading state
This commit is contained in:
@@ -15,7 +15,7 @@ export const CancelledSubscription = observer(
|
|||||||
<Text>
|
<Text>
|
||||||
Your{' '}
|
Your{' '}
|
||||||
<span className="font-bold">
|
<span className="font-bold">
|
||||||
Standard NotesStandard Notes{userSubscriptionName ? " " : ""}{userSubscriptionName}
|
Standard Notes{userSubscriptionName ? " " : ""}{userSubscriptionName}
|
||||||
</span>{' '}
|
</span>{' '}
|
||||||
subscription has been{' '}
|
subscription has been{' '}
|
||||||
<span className="font-bold">
|
<span className="font-bold">
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import {
|
|||||||
} from '@/preferences/components';
|
} from '@/preferences/components';
|
||||||
import { observer } from '@node_modules/mobx-react-lite';
|
import { observer } from '@node_modules/mobx-react-lite';
|
||||||
import { WebApplication } from '@/ui_models/application';
|
import { WebApplication } from '@/ui_models/application';
|
||||||
import { useEffect, useState } from 'preact/hooks';
|
import { useCallback, useEffect, useState } from 'preact/hooks';
|
||||||
import {
|
import {
|
||||||
GetSubscriptionResponse,
|
GetSubscriptionResponse,
|
||||||
GetSubscriptionsResponse,
|
GetSubscriptionsResponse,
|
||||||
@@ -14,6 +14,8 @@ import { SubscriptionState } from './subscription_state';
|
|||||||
import { CancelledSubscription } from './CancelledSubscription';
|
import { CancelledSubscription } from './CancelledSubscription';
|
||||||
import { ActiveSubscription } from './ActiveSubscription';
|
import { ActiveSubscription } from './ActiveSubscription';
|
||||||
import { NoSubscription } from './NoSubscription';
|
import { NoSubscription } from './NoSubscription';
|
||||||
|
import { Text } from '@/preferences/components';
|
||||||
|
import { FunctionalComponent } from 'preact';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
application: WebApplication;
|
application: WebApplication;
|
||||||
@@ -24,7 +26,7 @@ type SubscriptionInformationProps = {
|
|||||||
subscriptionState: SubscriptionState;
|
subscriptionState: SubscriptionState;
|
||||||
};
|
};
|
||||||
|
|
||||||
const SubscriptionInformation = ({
|
const SubscriptionInformation = observer(({
|
||||||
subscriptionState,
|
subscriptionState,
|
||||||
}: SubscriptionInformationProps) => {
|
}: SubscriptionInformationProps) => {
|
||||||
const now = new Date().getTime();
|
const now = new Date().getTime();
|
||||||
@@ -38,41 +40,53 @@ const SubscriptionInformation = ({
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
return <NoSubscription />;
|
return <NoSubscription />;
|
||||||
};
|
});
|
||||||
|
|
||||||
export const Subscription = observer(({ application, subscriptionState }: Props) => {
|
export const Subscription: FunctionalComponent<Props> = ({ application, subscriptionState }) => {
|
||||||
|
const [loading, setLoading] = useState(true);
|
||||||
const [error, setError] = useState(false);
|
const [error, setError] = useState(false);
|
||||||
|
|
||||||
useEffect(() => {
|
const getSubscriptions = useCallback(async () => {
|
||||||
const getSubscriptions = async () => {
|
try {
|
||||||
try {
|
const result = await application.getSubscriptions();
|
||||||
const result = await application.getSubscriptions();
|
if (result.data) {
|
||||||
if (result.data) {
|
const data = (result as GetSubscriptionsResponse).data;
|
||||||
const data = (result as GetSubscriptionsResponse).data;
|
subscriptionState.setAvailableSubscriptions(data!);
|
||||||
subscriptionState.setAvailableSubscriptions(data!);
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
// Error in this call will only prevent the plan name from showing
|
|
||||||
}
|
}
|
||||||
};
|
} catch (e) {
|
||||||
const getSubscription = async () => {
|
// Error in this call will only prevent the plan name from showing
|
||||||
try {
|
}
|
||||||
const result = await application.getUserSubscription();
|
}, [application, subscriptionState]);
|
||||||
if (!result.error && result.data) {
|
|
||||||
const data = (result as GetSubscriptionResponse).data;
|
const getSubscription = useCallback(async () => {
|
||||||
const subscription = data!.subscription;
|
try {
|
||||||
subscriptionState.setUserSubscription(subscription);
|
const result = await application.getUserSubscription();
|
||||||
} else {
|
if (!result.error && result.data) {
|
||||||
setError(true);
|
const data = (result as GetSubscriptionResponse).data;
|
||||||
}
|
const subscription = data!.subscription;
|
||||||
} catch (e) {
|
subscriptionState.setUserSubscription(subscription);
|
||||||
|
} else {
|
||||||
setError(true);
|
setError(true);
|
||||||
}
|
}
|
||||||
};
|
} catch (e) {
|
||||||
getSubscriptions();
|
setError(true);
|
||||||
getSubscription();
|
}
|
||||||
}, [application, subscriptionState]);
|
}, [application, subscriptionState]);
|
||||||
|
|
||||||
|
const getSubscriptionInfo = useCallback(async () => {
|
||||||
|
setLoading(true);
|
||||||
|
try {
|
||||||
|
await getSubscription();
|
||||||
|
await getSubscriptions();
|
||||||
|
} finally {
|
||||||
|
setLoading(false);
|
||||||
|
}
|
||||||
|
}, [getSubscription, getSubscriptions]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
getSubscriptionInfo();
|
||||||
|
}, [getSubscriptionInfo]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<PreferencesGroup>
|
<PreferencesGroup>
|
||||||
<PreferencesSegment>
|
<PreferencesSegment>
|
||||||
@@ -80,7 +94,9 @@ export const Subscription = observer(({ application, subscriptionState }: Props)
|
|||||||
<div className="flex-grow flex flex-col">
|
<div className="flex-grow flex flex-col">
|
||||||
<Title>Subscription</Title>
|
<Title>Subscription</Title>
|
||||||
{error ? (
|
{error ? (
|
||||||
'No subscription information available.'
|
<Text>No subscription information available.</Text>
|
||||||
|
) : loading ? (
|
||||||
|
<Text>Loading subscription information...</Text>
|
||||||
) : (
|
) : (
|
||||||
<SubscriptionInformation subscriptionState={subscriptionState} />
|
<SubscriptionInformation subscriptionState={subscriptionState} />
|
||||||
)}
|
)}
|
||||||
@@ -89,4 +105,4 @@ export const Subscription = observer(({ application, subscriptionState }: Props)
|
|||||||
</PreferencesSegment>
|
</PreferencesSegment>
|
||||||
</PreferencesGroup>
|
</PreferencesGroup>
|
||||||
);
|
);
|
||||||
});
|
};
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ type AvailableSubscriptions = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export class SubscriptionState {
|
export class SubscriptionState {
|
||||||
userSubscription: Subscription | undefined;
|
userSubscription: Subscription | undefined = undefined;
|
||||||
availableSubscriptions: AvailableSubscriptions | undefined;
|
availableSubscriptions: AvailableSubscriptions | undefined = undefined;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
makeObservable(this, {
|
makeObservable(this, {
|
||||||
@@ -40,7 +40,9 @@ export class SubscriptionState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public setUserSubscription(subscription: Subscription): void {
|
public setUserSubscription(subscription: Subscription): void {
|
||||||
|
console.log('set subscription in state', subscription);
|
||||||
this.userSubscription = subscription;
|
this.userSubscription = subscription;
|
||||||
|
console.log(this.userSubscription);
|
||||||
}
|
}
|
||||||
|
|
||||||
public setAvailableSubscriptions(
|
public setAvailableSubscriptions(
|
||||||
|
|||||||
Reference in New Issue
Block a user