Skip to content

Commit

Permalink
fix: fix state and add loading state
Browse files Browse the repository at this point in the history
  • Loading branch information
Antonella Sgarlatta committed Sep 7, 2021
1 parent 99ef854 commit 4125797
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export const CancelledSubscription = observer(
<Text>
Your{' '}
<span className="font-bold">
Standard NotesStandard Notes{userSubscriptionName ? " " : ""}{userSubscriptionName}
Standard Notes{userSubscriptionName ? " " : ""}{userSubscriptionName}
</span>{' '}
subscription has been{' '}
<span className="font-bold">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {
} from '@/preferences/components';
import { observer } from '@node_modules/mobx-react-lite';
import { WebApplication } from '@/ui_models/application';
import { useEffect, useState } from 'preact/hooks';
import { useCallback, useEffect, useState } from 'preact/hooks';
import {
GetSubscriptionResponse,
GetSubscriptionsResponse,
Expand All @@ -14,6 +14,8 @@ import { SubscriptionState } from './subscription_state';
import { CancelledSubscription } from './CancelledSubscription';
import { ActiveSubscription } from './ActiveSubscription';
import { NoSubscription } from './NoSubscription';
import { Text } from '@/preferences/components';
import { FunctionalComponent } from 'preact';

type Props = {
application: WebApplication;
Expand All @@ -24,7 +26,7 @@ type SubscriptionInformationProps = {
subscriptionState: SubscriptionState;
};

const SubscriptionInformation = ({
const SubscriptionInformation = observer(({
subscriptionState,
}: SubscriptionInformationProps) => {
const now = new Date().getTime();
Expand All @@ -38,49 +40,63 @@ const SubscriptionInformation = ({
);
}
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);

useEffect(() => {
const getSubscriptions = async () => {
try {
const result = await application.getSubscriptions();
if (result.data) {
const data = (result as GetSubscriptionsResponse).data;
subscriptionState.setAvailableSubscriptions(data!);
}
} catch (e) {
// Error in this call will only prevent the plan name from showing
const getSubscriptions = useCallback(async () => {
try {
const result = await application.getSubscriptions();
if (result.data) {
const data = (result as GetSubscriptionsResponse).data;
subscriptionState.setAvailableSubscriptions(data!);
}
};
const getSubscription = async () => {
try {
const result = await application.getUserSubscription();
if (!result.error && result.data) {
const data = (result as GetSubscriptionResponse).data;
const subscription = data!.subscription;
subscriptionState.setUserSubscription(subscription);
} else {
setError(true);
}
} catch (e) {
} catch (e) {
// Error in this call will only prevent the plan name from showing
}
}, [application, subscriptionState]);

const getSubscription = useCallback(async () => {
try {
const result = await application.getUserSubscription();
if (!result.error && result.data) {
const data = (result as GetSubscriptionResponse).data;
const subscription = data!.subscription;
subscriptionState.setUserSubscription(subscription);
} else {
setError(true);
}
};
getSubscriptions();
getSubscription();
} catch (e) {
setError(true);
}
}, [application, subscriptionState]);

const getSubscriptionInfo = useCallback(async () => {
setLoading(true);
try {
await getSubscription();
await getSubscriptions();
} finally {
setLoading(false);
}
}, [getSubscription, getSubscriptions]);

useEffect(() => {
getSubscriptionInfo();
}, [getSubscriptionInfo]);

return (
<PreferencesGroup>
<PreferencesSegment>
<div className="flex flex-row items-center">
<div className="flex-grow flex flex-col">
<Title>Subscription</Title>
{error ? (
'No subscription information available.'
<Text>No subscription information available.</Text>
) : loading ? (
<Text>Loading subscription information...</Text>
) : (
<SubscriptionInformation subscriptionState={subscriptionState} />
)}
Expand All @@ -89,4 +105,4 @@ export const Subscription = observer(({ application, subscriptionState }: Props)
</PreferencesSegment>
</PreferencesGroup>
);
});
};
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ type AvailableSubscriptions = {
};

export class SubscriptionState {
userSubscription: Subscription | undefined;
availableSubscriptions: AvailableSubscriptions | undefined;
userSubscription: Subscription | undefined = undefined;
availableSubscriptions: AvailableSubscriptions | undefined = undefined;

constructor() {
makeObservable(this, {
Expand All @@ -40,7 +40,9 @@ export class SubscriptionState {
}

public setUserSubscription(subscription: Subscription): void {
console.log('set subscription in state', subscription);
this.userSubscription = subscription;
console.log(this.userSubscription);
}

public setAvailableSubscriptions(
Expand Down

0 comments on commit 4125797

Please sign in to comment.