refactor: merge active and cancelled components into one
This commit is contained in:
@@ -1,49 +0,0 @@
|
|||||||
import { observer } from 'mobx-react-lite';
|
|
||||||
import { SubscriptionState } from './subscription_state';
|
|
||||||
import { Text } from '@/preferences/components';
|
|
||||||
import { Button } from '@/components/Button';
|
|
||||||
|
|
||||||
type Props = {
|
|
||||||
subscriptionState: SubscriptionState;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const ActiveSubscription = observer(
|
|
||||||
({ subscriptionState }: Props) => {
|
|
||||||
const { userSubscription, userSubscriptionName } = subscriptionState;
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<Text>
|
|
||||||
Your{' '}
|
|
||||||
<span className="font-bold">
|
|
||||||
Standard Notes{userSubscriptionName ? " " : ""}{userSubscriptionName}
|
|
||||||
</span>{' '}
|
|
||||||
subscription will be{' '}
|
|
||||||
<span className="font-bold">
|
|
||||||
renewed on {new Date(userSubscription!.endsAt).toLocaleString()}
|
|
||||||
</span>
|
|
||||||
.
|
|
||||||
</Text>
|
|
||||||
<div className="flex">
|
|
||||||
<Button
|
|
||||||
className="min-w-20 mt-3 mr-3"
|
|
||||||
type="normal"
|
|
||||||
label="Refresh"
|
|
||||||
onClick={() => null}
|
|
||||||
/>
|
|
||||||
<Button
|
|
||||||
className="min-w-20 mt-3 mr-3"
|
|
||||||
type="normal"
|
|
||||||
label="Change plan"
|
|
||||||
onClick={() => null}
|
|
||||||
/>
|
|
||||||
<Button
|
|
||||||
className="min-w-20 mt-3"
|
|
||||||
type="primary"
|
|
||||||
label="Cancel subscription"
|
|
||||||
onClick={() => null}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
import { observer } from 'mobx-react-lite';
|
|
||||||
import { SubscriptionState } from './subscription_state';
|
|
||||||
import { Text } from '@/preferences/components';
|
|
||||||
import { Button } from '@/components/Button';
|
|
||||||
|
|
||||||
type Props = {
|
|
||||||
subscriptionState: SubscriptionState;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const CancelledSubscription = observer(
|
|
||||||
({ subscriptionState }: Props) => {
|
|
||||||
const { userSubscription, userSubscriptionName } = subscriptionState;
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<Text>
|
|
||||||
Your{' '}
|
|
||||||
<span className="font-bold">
|
|
||||||
Standard Notes{userSubscriptionName ? " " : ""}{userSubscriptionName}
|
|
||||||
</span>{' '}
|
|
||||||
subscription has been{' '}
|
|
||||||
<span className="font-bold">
|
|
||||||
canceled but will remain valid until{' '}
|
|
||||||
{new Date(userSubscription!.endsAt).toLocaleString()}
|
|
||||||
</span>
|
|
||||||
. You may resubscribe below if you wish.
|
|
||||||
</Text>
|
|
||||||
<div className="flex">
|
|
||||||
<Button
|
|
||||||
className="min-w-20 mt-3 mr-3"
|
|
||||||
type="normal"
|
|
||||||
label="Refresh"
|
|
||||||
onClick={() => null}
|
|
||||||
/>
|
|
||||||
<Button
|
|
||||||
className="min-w-20 mt-3 mr-3"
|
|
||||||
type="normal"
|
|
||||||
label="Change plan"
|
|
||||||
onClick={() => null}
|
|
||||||
/>
|
|
||||||
<Button
|
|
||||||
className="min-w-20 mt-3"
|
|
||||||
type="primary"
|
|
||||||
label="Renew subscription"
|
|
||||||
onClick={() => null}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
@@ -3,7 +3,6 @@ import {
|
|||||||
PreferencesSegment,
|
PreferencesSegment,
|
||||||
Title,
|
Title,
|
||||||
} from '@/preferences/components';
|
} from '@/preferences/components';
|
||||||
import { observer } from '@node_modules/mobx-react-lite';
|
|
||||||
import { WebApplication } from '@/ui_models/application';
|
import { WebApplication } from '@/ui_models/application';
|
||||||
import { useCallback, useEffect, useState } from 'preact/hooks';
|
import { useCallback, useEffect, useState } from 'preact/hooks';
|
||||||
import {
|
import {
|
||||||
@@ -11,41 +10,25 @@ import {
|
|||||||
GetSubscriptionsResponse,
|
GetSubscriptionsResponse,
|
||||||
} from '@standardnotes/snjs/dist/@types/services/api/responses';
|
} from '@standardnotes/snjs/dist/@types/services/api/responses';
|
||||||
import { SubscriptionState } from './subscription_state';
|
import { SubscriptionState } from './subscription_state';
|
||||||
import { CancelledSubscription } from './CancelledSubscription';
|
import { SubscriptionInformation } from './SubscriptionInformation';
|
||||||
import { ActiveSubscription } from './ActiveSubscription';
|
|
||||||
import { NoSubscription } from './NoSubscription';
|
import { NoSubscription } from './NoSubscription';
|
||||||
import { Text } from '@/preferences/components';
|
import { Text } from '@/preferences/components';
|
||||||
import { FunctionalComponent } from 'preact';
|
import { observer } from 'mobx-react-lite';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
application: WebApplication;
|
application: WebApplication;
|
||||||
subscriptionState: SubscriptionState;
|
subscriptionState: SubscriptionState;
|
||||||
};
|
};
|
||||||
|
|
||||||
type SubscriptionInformationProps = {
|
export const Subscription = observer(({
|
||||||
subscriptionState: SubscriptionState;
|
application,
|
||||||
};
|
|
||||||
|
|
||||||
const SubscriptionInformation = observer(({
|
|
||||||
subscriptionState,
|
subscriptionState,
|
||||||
}: SubscriptionInformationProps) => {
|
}: Props) => {
|
||||||
const now = new Date().getTime();
|
|
||||||
const { userSubscription } = subscriptionState;
|
|
||||||
|
|
||||||
if (userSubscription && userSubscription.endsAt > now) {
|
|
||||||
return userSubscription.cancelled ? (
|
|
||||||
<CancelledSubscription subscriptionState={subscriptionState} />
|
|
||||||
) : (
|
|
||||||
<ActiveSubscription subscriptionState={subscriptionState} />
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return <NoSubscription />;
|
|
||||||
});
|
|
||||||
|
|
||||||
export const Subscription: FunctionalComponent<Props> = ({ application, subscriptionState }) => {
|
|
||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
const [error, setError] = useState(false);
|
const [error, setError] = useState(false);
|
||||||
|
|
||||||
|
const { userSubscription } = subscriptionState;
|
||||||
|
|
||||||
const getSubscriptions = useCallback(async () => {
|
const getSubscriptions = useCallback(async () => {
|
||||||
try {
|
try {
|
||||||
const result = await application.getSubscriptions();
|
const result = await application.getSubscriptions();
|
||||||
@@ -87,6 +70,8 @@ export const Subscription: FunctionalComponent<Props> = ({ application, subscrip
|
|||||||
getSubscriptionInfo();
|
getSubscriptionInfo();
|
||||||
}, [getSubscriptionInfo]);
|
}, [getSubscriptionInfo]);
|
||||||
|
|
||||||
|
const now = new Date().getTime();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<PreferencesGroup>
|
<PreferencesGroup>
|
||||||
<PreferencesSegment>
|
<PreferencesSegment>
|
||||||
@@ -97,12 +82,14 @@ export const Subscription: FunctionalComponent<Props> = ({ application, subscrip
|
|||||||
<Text>No subscription information available.</Text>
|
<Text>No subscription information available.</Text>
|
||||||
) : loading ? (
|
) : loading ? (
|
||||||
<Text>Loading subscription information...</Text>
|
<Text>Loading subscription information...</Text>
|
||||||
) : (
|
) : userSubscription && userSubscription.endsAt > now ? (
|
||||||
<SubscriptionInformation subscriptionState={subscriptionState} />
|
<SubscriptionInformation subscriptionState={subscriptionState} />
|
||||||
|
) : (
|
||||||
|
<NoSubscription />
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</PreferencesSegment>
|
</PreferencesSegment>
|
||||||
</PreferencesGroup>
|
</PreferencesGroup>
|
||||||
);
|
);
|
||||||
};
|
});
|
||||||
|
|||||||
@@ -0,0 +1,81 @@
|
|||||||
|
import { observer } from 'mobx-react-lite';
|
||||||
|
import { SubscriptionState } from './subscription_state';
|
||||||
|
import { Text } from '@/preferences/components';
|
||||||
|
import { Button } from '@/components/Button';
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
subscriptionState: SubscriptionState;
|
||||||
|
};
|
||||||
|
|
||||||
|
const StatusText = observer(({ subscriptionState }: Props) => {
|
||||||
|
const { userSubscription, userSubscriptionName } = subscriptionState;
|
||||||
|
|
||||||
|
return userSubscription!.cancelled ? (
|
||||||
|
<Text>
|
||||||
|
Your{' '}
|
||||||
|
<span className="font-bold">
|
||||||
|
Standard Notes{userSubscriptionName ? ' ' : ''}
|
||||||
|
{userSubscriptionName}
|
||||||
|
</span>{' '}
|
||||||
|
subscription has been{' '}
|
||||||
|
<span className="font-bold">
|
||||||
|
canceled but will remain valid until{' '}
|
||||||
|
{new Date(userSubscription!.endsAt).toLocaleString()}
|
||||||
|
</span>
|
||||||
|
. You may resubscribe below if you wish.
|
||||||
|
</Text>
|
||||||
|
) : (
|
||||||
|
<Text>
|
||||||
|
Your{' '}
|
||||||
|
<span className="font-bold">
|
||||||
|
Standard Notes{userSubscriptionName ? ' ' : ''}
|
||||||
|
{userSubscriptionName}
|
||||||
|
</span>{' '}
|
||||||
|
subscription will be{' '}
|
||||||
|
<span className="font-bold">
|
||||||
|
renewed on {new Date(userSubscription!.endsAt).toLocaleString()}
|
||||||
|
</span>
|
||||||
|
.
|
||||||
|
</Text>
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
const PrimaryButton = observer(({ subscriptionState }: Props) => {
|
||||||
|
const { userSubscription } = subscriptionState;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Button
|
||||||
|
className="min-w-20 mt-3"
|
||||||
|
type="primary"
|
||||||
|
label={userSubscription!.cancelled ? "Renew subscription" : "Cancel subscription"}
|
||||||
|
onClick={() => null}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
export const SubscriptionInformation = observer(
|
||||||
|
({ subscriptionState }: Props) => (
|
||||||
|
<>
|
||||||
|
<StatusText
|
||||||
|
subscriptionState={subscriptionState}
|
||||||
|
/>
|
||||||
|
<div className="flex">
|
||||||
|
<Button
|
||||||
|
className="min-w-20 mt-3 mr-3"
|
||||||
|
type="normal"
|
||||||
|
label="Refresh"
|
||||||
|
onClick={() => null}
|
||||||
|
/>
|
||||||
|
<Button
|
||||||
|
className="min-w-20 mt-3 mr-3"
|
||||||
|
type="normal"
|
||||||
|
label="Change plan"
|
||||||
|
onClick={() => null}
|
||||||
|
/>
|
||||||
|
<PrimaryButton
|
||||||
|
subscriptionState={subscriptionState}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
);
|
||||||
@@ -41,7 +41,6 @@ export class SubscriptionState {
|
|||||||
|
|
||||||
public setUserSubscription(subscription: Subscription): void {
|
public setUserSubscription(subscription: Subscription): void {
|
||||||
this.userSubscription = subscription;
|
this.userSubscription = subscription;
|
||||||
console.log(this.userSubscription);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public setAvailableSubscriptions(
|
public setAvailableSubscriptions(
|
||||||
|
|||||||
Reference in New Issue
Block a user