client/components/helpCentre/diagnosticInformation/SubscriptionInformation.tsx (64 lines of code) (raw):
import type { MembersDataApiResponse } from '../../../../shared/productResponse';
import {
getSpecificProductType,
isProduct,
} from '../../../../shared/productResponse';
import {
LoadingState,
useAsyncLoader,
} from '../../../utilities/hooks/useAsyncLoader';
import { allRecurringProductsDetailFetcher } from '../../../utilities/productUtils';
import { JsonResponseHandler } from '../../mma/shared/asyncComponents/DefaultApiResponseHandler';
export const SubscriptionInformation = () => {
const {
data,
loadingState,
}: {
data: MembersDataApiResponse | null;
loadingState: LoadingState;
} = useAsyncLoader(allRecurringProductsDetailFetcher, JsonResponseHandler);
if (loadingState === LoadingState.IsLoading) {
return (
<>
<h3>Subscription Information:</h3>
<p>Loading...</p>
</>
);
}
if (loadingState === LoadingState.HasError || data === null) {
return (
<>
<h3>Subscription Information:</h3>
<p>
User is not logged in / no subscription information
available
</p>
</>
);
}
return (
<>
<h3>Subscription Information:</h3>
<ul>
{data.products.length > 0 ? (
data.products.map((product) => {
if (isProduct(product)) {
const specificProductType = getSpecificProductType(
product.tier,
);
return (
<li>
{product.tier} -{' '}
{specificProductType.groupedProductType} -{' '}
{product.subscription.subscriptionId}
</li>
);
}
})
) : (
<li>User has no subscription</li>
)}
</ul>
</>
);
};