0
Fork 0
mirror of https://github.com/logto-io/logto.git synced 2025-02-10 21:58:23 -05:00
logto/packages/console/src/hooks/use-subscription-plans.ts
simeng-li 1c3ada0123
feat(console,phrases): add third party app list page (#5149)
* feat(console,phrases): add new third-party applicaiton to the guide library

add new third-party applicaiton to the guide library

* feat(console,phrases): add third party app list page

add third party app list page

* fix(console): fix page size

fix page size

* fix(console): fix rebase issue

fix rebase issue

* fix(test): fix rebase issue

fix rebase issue
2024-01-05 12:27:27 +08:00

49 lines
1.6 KiB
TypeScript

import { type Optional } from '@silverhand/essentials';
import { useMemo } from 'react';
import useSWRImmutable from 'swr/immutable';
import { useCloudApi } from '@/cloud/hooks/use-cloud-api';
import { type SubscriptionPlanResponse } from '@/cloud/types/router';
import { isCloud } from '@/consts/env';
import { featuredPlanIdOrder } from '@/consts/subscriptions';
// Used in the docs
// eslint-disable-next-line unused-imports/no-unused-imports
import TenantAccess from '@/containers/TenantAccess';
import { type SubscriptionPlan } from '@/types/subscriptions';
import { sortBy } from '@/utils/sort';
import { addSupportQuotaToPlan } from '@/utils/subscription';
/**
* Fetch subscription plans from the cloud API.
* Note: If you want to retrieve subscription plans under the {@link TenantAccess} component, use `SubscriptionDataContext` instead.
*/
const useSubscriptionPlans = () => {
const cloudApi = useCloudApi();
const useSwrResponse = useSWRImmutable<SubscriptionPlanResponse[], Error>(
isCloud && '/api/subscription-plans',
async () => cloudApi.get('/api/subscription-plans')
);
const { data: subscriptionPlansResponse } = useSwrResponse;
const subscriptionPlans: Optional<SubscriptionPlan[]> = useMemo(() => {
if (!subscriptionPlansResponse) {
return;
}
return subscriptionPlansResponse
.map((plan) => addSupportQuotaToPlan(plan))
.slice()
.sort(({ id: previousId }, { id: nextId }) =>
sortBy(featuredPlanIdOrder)(previousId, nextId)
);
}, [subscriptionPlansResponse]);
return {
...useSwrResponse,
data: subscriptionPlans,
};
};
export default useSubscriptionPlans;