From 70b8817643efad1f8ca6898330c56baaec2cc479 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C4=B1dvan=20Akca?= Date: Wed, 13 Mar 2024 14:42:29 +0300 Subject: [PATCH] refactor: rewrite useSubscription with RQ --- .../queries/get-subscription-status.ee.js | 17 --------- .../backend/src/graphql/query-resolvers.js | 2 - packages/backend/src/graphql/schema.graphql | 5 --- .../SubscriptionCancelledAlert/index.ee.jsx | 12 ++++-- .../queries/get-subscription-status.ee.js | 8 ---- packages/web/src/hooks/useSubscription.ee.js | 38 +++++++++++++++++++ .../web/src/hooks/useSubscriptionStatus.ee.js | 21 ---------- 7 files changed, 46 insertions(+), 57 deletions(-) delete mode 100644 packages/backend/src/graphql/queries/get-subscription-status.ee.js delete mode 100644 packages/web/src/graphql/queries/get-subscription-status.ee.js create mode 100644 packages/web/src/hooks/useSubscription.ee.js delete mode 100644 packages/web/src/hooks/useSubscriptionStatus.ee.js diff --git a/packages/backend/src/graphql/queries/get-subscription-status.ee.js b/packages/backend/src/graphql/queries/get-subscription-status.ee.js deleted file mode 100644 index 28df51ebda..0000000000 --- a/packages/backend/src/graphql/queries/get-subscription-status.ee.js +++ /dev/null @@ -1,17 +0,0 @@ -import appConfig from '../../config/app.js'; - -const getSubscriptionStatus = async (_parent, _params, context) => { - if (!appConfig.isCloud) return; - - const currentSubscription = await context.currentUser.$relatedQuery( - 'currentSubscription' - ); - - if (!currentSubscription?.cancellationEffectiveDate) return; - - return { - cancellationEffectiveDate: currentSubscription.cancellationEffectiveDate, - }; -}; - -export default getSubscriptionStatus; diff --git a/packages/backend/src/graphql/query-resolvers.js b/packages/backend/src/graphql/query-resolvers.js index 60dadee9b9..1c8e5ad58d 100644 --- a/packages/backend/src/graphql/query-resolvers.js +++ b/packages/backend/src/graphql/query-resolvers.js @@ -17,7 +17,6 @@ import getRoles from './queries/get-roles.ee.js'; import getSamlAuthProviderRoleMappings from './queries/get-saml-auth-provider-role-mappings.ee.js'; import getSamlAuthProvider from './queries/get-saml-auth-provider.ee.js'; import getStepWithTestExecutions from './queries/get-step-with-test-executions.js'; -import getSubscriptionStatus from './queries/get-subscription-status.ee.js'; import getTrialStatus from './queries/get-trial-status.ee.js'; import getUser from './queries/get-user.js'; import getUsers from './queries/get-users.js'; @@ -44,7 +43,6 @@ const queryResolvers = { getSamlAuthProvider, getSamlAuthProviderRoleMappings, getStepWithTestExecutions, - getSubscriptionStatus, getTrialStatus, getUser, getUsers, diff --git a/packages/backend/src/graphql/schema.graphql b/packages/backend/src/graphql/schema.graphql index da091e0017..cee7b33525 100644 --- a/packages/backend/src/graphql/schema.graphql +++ b/packages/backend/src/graphql/schema.graphql @@ -33,7 +33,6 @@ type Query { getNotifications: [Notification] getSamlAuthProvider: SamlAuthProvider getSamlAuthProviderRoleMappings(id: String!): [SamlAuthProvidersRoleMapping] - getSubscriptionStatus: GetSubscriptionStatus getTrialStatus: GetTrialStatus getUser(id: String!): User getUsers(limit: Int!, offset: Int!): UserConnection @@ -612,10 +611,6 @@ type GetTrialStatus { expireAt: String } -type GetSubscriptionStatus { - cancellationEffectiveDate: String -} - type GetBillingAndUsage { subscription: Subscription usage: Usage diff --git a/packages/web/src/components/SubscriptionCancelledAlert/index.ee.jsx b/packages/web/src/components/SubscriptionCancelledAlert/index.ee.jsx index 0a6d304fc6..ae2540aefc 100644 --- a/packages/web/src/components/SubscriptionCancelledAlert/index.ee.jsx +++ b/packages/web/src/components/SubscriptionCancelledAlert/index.ee.jsx @@ -1,10 +1,14 @@ import * as React from 'react'; import Alert from '@mui/material/Alert'; import Typography from '@mui/material/Typography'; -import useSubscriptionStatus from 'hooks/useSubscriptionStatus.ee'; + +import useSubscription from 'hooks/useSubscription.ee'; + export default function SubscriptionCancelledAlert() { - const subscriptionStatus = useSubscriptionStatus(); - if (!subscriptionStatus) return ; + const subscription = useSubscription(); + + if (!subscription) return ; + return ( - {subscriptionStatus.message} + {subscription.message} ); diff --git a/packages/web/src/graphql/queries/get-subscription-status.ee.js b/packages/web/src/graphql/queries/get-subscription-status.ee.js deleted file mode 100644 index 3653f5429f..0000000000 --- a/packages/web/src/graphql/queries/get-subscription-status.ee.js +++ /dev/null @@ -1,8 +0,0 @@ -import { gql } from '@apollo/client'; -export const GET_SUBSCRIPTION_STATUS = gql` - query GetSubscriptionStatus { - getSubscriptionStatus { - cancellationEffectiveDate - } - } -`; diff --git a/packages/web/src/hooks/useSubscription.ee.js b/packages/web/src/hooks/useSubscription.ee.js new file mode 100644 index 0000000000..4646b9ed4c --- /dev/null +++ b/packages/web/src/hooks/useSubscription.ee.js @@ -0,0 +1,38 @@ +import { useQuery } from '@tanstack/react-query'; +import { DateTime } from 'luxon'; + +import useFormatMessage from './useFormatMessage'; +import api from 'helpers/api'; + +export default function useSubscription() { + const formatMessage = useFormatMessage(); + + const { data, isLoading: isSubscriptionLoading } = useQuery({ + queryKey: ['subscription'], + queryFn: async ({ signal }) => { + const { data } = await api.get(`/v1/users/me/subscription`, { + signal, + }); + + return data; + }, + }); + const subscription = data?.data; + + const cancellationEffectiveDate = subscription?.cancellationEffectiveDate; + + const hasCancelled = !!cancellationEffectiveDate; + + if (isSubscriptionLoading || !hasCancelled) return null; + + const cancellationEffectiveDateObject = DateTime.fromISO( + cancellationEffectiveDate, + ); + + return { + message: formatMessage('subscriptionCancelledAlert.text', { + date: cancellationEffectiveDateObject.toFormat('DDD'), + }), + cancellationEffectiveDate: cancellationEffectiveDateObject, + }; +} diff --git a/packages/web/src/hooks/useSubscriptionStatus.ee.js b/packages/web/src/hooks/useSubscriptionStatus.ee.js deleted file mode 100644 index 005e889eef..0000000000 --- a/packages/web/src/hooks/useSubscriptionStatus.ee.js +++ /dev/null @@ -1,21 +0,0 @@ -import { useQuery } from '@apollo/client'; -import { DateTime } from 'luxon'; -import { GET_SUBSCRIPTION_STATUS } from 'graphql/queries/get-subscription-status.ee'; -import useFormatMessage from './useFormatMessage'; -export default function useSubscriptionStatus() { - const formatMessage = useFormatMessage(); - const { data, loading } = useQuery(GET_SUBSCRIPTION_STATUS); - const cancellationEffectiveDate = - data?.getSubscriptionStatus?.cancellationEffectiveDate; - const hasCancelled = !!cancellationEffectiveDate; - if (loading || !hasCancelled) return null; - const cancellationEffectiveDateObject = DateTime.fromMillis( - Number(cancellationEffectiveDate), - ).startOf('day'); - return { - message: formatMessage('subscriptionCancelledAlert.text', { - date: cancellationEffectiveDateObject.toFormat('DDD'), - }), - cancellationEffectiveDate: cancellationEffectiveDateObject, - }; -}