mirror of
https://github.com/Unleash/unleash.git
synced 2025-02-14 00:19:16 +01:00
chore(1-3342): extract into hook, use new endpoint if flag on (#9218)
Updates the existing BillingDetails pages (pro and payg) to use the new traffic search endpoint (and calculations) if the flag to do so is on. Otherwise, it falls back to using the existing method. I've extracted the overage calculation into a separate shared hook.
This commit is contained in:
parent
ebcbd7b637
commit
543be6dede
@ -11,11 +11,8 @@ import {
|
||||
BILLING_PAYG_USER_PRICE,
|
||||
BILLING_TRAFFIC_BUNDLE_PRICE,
|
||||
} from './BillingPlan';
|
||||
import { useTrafficDataEstimation } from 'hooks/useTrafficData';
|
||||
import { useInstanceTrafficMetrics } from 'hooks/api/getters/useInstanceTrafficMetrics/useInstanceTrafficMetrics';
|
||||
import { useMemo } from 'react';
|
||||
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
||||
import { calculateOverageCost } from 'utils/traffic-calculations';
|
||||
import { useOverageCost } from './useOverageCost';
|
||||
|
||||
const StyledInfoLabel = styled(Typography)(({ theme }) => ({
|
||||
fontSize: theme.fontSizes.smallBody,
|
||||
@ -34,13 +31,6 @@ export const BillingDetailsPAYG = ({
|
||||
instanceStatus,
|
||||
}: IBillingDetailsPAYGProps) => {
|
||||
const { users, loading } = useUsers();
|
||||
const {
|
||||
currentPeriod,
|
||||
toChartData,
|
||||
toTrafficUsageSum,
|
||||
endpointsInfo,
|
||||
getDayLabels,
|
||||
} = useTrafficDataEstimation();
|
||||
|
||||
const eligibleUsers = users.filter((user) => user.email);
|
||||
|
||||
@ -51,24 +41,7 @@ export const BillingDetailsPAYG = ({
|
||||
const usersCost = BILLING_PAYG_USER_PRICE * billableUsers;
|
||||
|
||||
const includedTraffic = BILLING_INCLUDED_REQUESTS;
|
||||
const traffic = useInstanceTrafficMetrics(currentPeriod.key);
|
||||
|
||||
const overageCost = useMemo(() => {
|
||||
if (!includedTraffic) {
|
||||
return 0;
|
||||
}
|
||||
const trafficData = toChartData(
|
||||
getDayLabels(currentPeriod.dayCount),
|
||||
traffic,
|
||||
endpointsInfo,
|
||||
);
|
||||
const totalTraffic = toTrafficUsageSum(trafficData);
|
||||
return calculateOverageCost(
|
||||
totalTraffic,
|
||||
includedTraffic,
|
||||
BILLING_TRAFFIC_BUNDLE_PRICE,
|
||||
);
|
||||
}, [includedTraffic, traffic, currentPeriod, endpointsInfo]);
|
||||
const overageCost = useOverageCost(includedTraffic);
|
||||
|
||||
const totalCost = usersCost + overageCost;
|
||||
|
||||
|
@ -6,9 +6,7 @@ import { GridCol } from 'component/common/GridCol/GridCol';
|
||||
import { GridColLink } from './GridColLink/GridColLink';
|
||||
import type { IInstanceStatus } from 'interfaces/instance';
|
||||
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
|
||||
import { useMemo } from 'react';
|
||||
import { useUsers } from 'hooks/api/getters/useUsers/useUsers';
|
||||
import { useTrafficDataEstimation } from 'hooks/useTrafficData';
|
||||
import {
|
||||
BILLING_INCLUDED_REQUESTS,
|
||||
BILLING_PLAN_PRICES,
|
||||
@ -16,8 +14,7 @@ import {
|
||||
BILLING_PRO_USER_PRICE,
|
||||
BILLING_TRAFFIC_BUNDLE_PRICE,
|
||||
} from './BillingPlan';
|
||||
import { useInstanceTrafficMetrics } from 'hooks/api/getters/useInstanceTrafficMetrics/useInstanceTrafficMetrics';
|
||||
import { calculateOverageCost } from 'utils/traffic-calculations';
|
||||
import { useOverageCost } from './useOverageCost';
|
||||
|
||||
const StyledInfoLabel = styled(Typography)(({ theme }) => ({
|
||||
fontSize: theme.fontSizes.smallBody,
|
||||
@ -42,14 +39,6 @@ export const BillingDetailsPro = ({
|
||||
}: IBillingDetailsProProps) => {
|
||||
const { users, loading } = useUsers();
|
||||
|
||||
const {
|
||||
currentPeriod,
|
||||
toChartData,
|
||||
toTrafficUsageSum,
|
||||
endpointsInfo,
|
||||
getDayLabels,
|
||||
} = useTrafficDataEstimation();
|
||||
|
||||
const eligibleUsers = users.filter((user) => user.email);
|
||||
|
||||
const planPrice = BILLING_PLAN_PRICES[instanceStatus.plan];
|
||||
@ -59,24 +48,7 @@ export const BillingDetailsPro = ({
|
||||
const paidAssigned = eligibleUsers.length - freeAssigned;
|
||||
const paidAssignedPrice = BILLING_PRO_USER_PRICE * paidAssigned;
|
||||
const includedTraffic = BILLING_INCLUDED_REQUESTS;
|
||||
const traffic = useInstanceTrafficMetrics(currentPeriod.key);
|
||||
|
||||
const overageCost = useMemo(() => {
|
||||
if (!includedTraffic) {
|
||||
return 0;
|
||||
}
|
||||
const trafficData = toChartData(
|
||||
getDayLabels(currentPeriod.dayCount),
|
||||
traffic,
|
||||
endpointsInfo,
|
||||
);
|
||||
const totalTraffic = toTrafficUsageSum(trafficData);
|
||||
return calculateOverageCost(
|
||||
totalTraffic,
|
||||
includedTraffic,
|
||||
BILLING_TRAFFIC_BUNDLE_PRICE,
|
||||
);
|
||||
}, [includedTraffic, traffic, currentPeriod, endpointsInfo]);
|
||||
const overageCost = useOverageCost(includedTraffic);
|
||||
|
||||
const totalCost = planPrice + paidAssignedPrice + overageCost;
|
||||
|
||||
|
@ -0,0 +1,76 @@
|
||||
import { endOfMonth, format, startOfMonth } from 'date-fns';
|
||||
import {
|
||||
useInstanceTrafficMetrics,
|
||||
useTrafficSearch,
|
||||
} from 'hooks/api/getters/useInstanceTrafficMetrics/useInstanceTrafficMetrics';
|
||||
import { useMemo } from 'react';
|
||||
import {
|
||||
calculateOverageCost,
|
||||
calculateTotalUsage,
|
||||
} from 'utils/traffic-calculations';
|
||||
import { BILLING_TRAFFIC_BUNDLE_PRICE } from './BillingPlan';
|
||||
import { useUiFlag } from 'hooks/useUiFlag';
|
||||
import { useTrafficDataEstimation } from 'hooks/useTrafficData';
|
||||
|
||||
export const useOverageCost = (includedTraffic: number) => {
|
||||
if (useUiFlag('dataUsageMultiMonthView')) {
|
||||
return useNewOverageCostCalculation(includedTraffic);
|
||||
} else {
|
||||
return useOldOverageCostCalculation(includedTraffic);
|
||||
}
|
||||
};
|
||||
|
||||
const useNewOverageCostCalculation = (includedTraffic: number) => {
|
||||
if (!includedTraffic) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const now = new Date();
|
||||
const formatDate = (date: Date) => format(date, 'yyyy-MM-dd');
|
||||
const from = formatDate(startOfMonth(now));
|
||||
const to = formatDate(endOfMonth(now));
|
||||
|
||||
const { usage } = useTrafficSearch('daily', { from, to });
|
||||
|
||||
const overageCost = useMemo(() => {
|
||||
const totalUsage = calculateTotalUsage(usage);
|
||||
return calculateOverageCost(
|
||||
totalUsage,
|
||||
includedTraffic,
|
||||
BILLING_TRAFFIC_BUNDLE_PRICE,
|
||||
);
|
||||
}, [includedTraffic, usage]);
|
||||
|
||||
return overageCost;
|
||||
};
|
||||
|
||||
const useOldOverageCostCalculation = (includedTraffic: number) => {
|
||||
const {
|
||||
currentPeriod,
|
||||
toChartData,
|
||||
toTrafficUsageSum,
|
||||
endpointsInfo,
|
||||
getDayLabels,
|
||||
} = useTrafficDataEstimation();
|
||||
|
||||
const traffic = useInstanceTrafficMetrics(currentPeriod.key);
|
||||
|
||||
const overageCost = useMemo(() => {
|
||||
if (!includedTraffic) {
|
||||
return 0;
|
||||
}
|
||||
const trafficData = toChartData(
|
||||
getDayLabels(currentPeriod.dayCount),
|
||||
traffic,
|
||||
endpointsInfo,
|
||||
);
|
||||
const totalTraffic = toTrafficUsageSum(trafficData);
|
||||
return calculateOverageCost(
|
||||
totalTraffic,
|
||||
includedTraffic,
|
||||
BILLING_TRAFFIC_BUNDLE_PRICE,
|
||||
);
|
||||
}, [includedTraffic, traffic, currentPeriod, endpointsInfo]);
|
||||
|
||||
return overageCost;
|
||||
};
|
@ -22,7 +22,7 @@ import {
|
||||
import { Bar } from 'react-chartjs-2';
|
||||
import {
|
||||
useInstanceTrafficMetrics,
|
||||
useInstanceTrafficMetrics2,
|
||||
useTrafficSearch,
|
||||
} from 'hooks/api/getters/useInstanceTrafficMetrics/useInstanceTrafficMetrics';
|
||||
import type { Theme } from '@mui/material/styles/createTheme';
|
||||
import Grid from '@mui/material/Grid';
|
||||
@ -231,7 +231,7 @@ const NewNetworkTrafficUsage: FC = () => {
|
||||
);
|
||||
}, [theme, chartDataSelection]);
|
||||
|
||||
const traffic = useInstanceTrafficMetrics2(
|
||||
const traffic = useTrafficSearch(
|
||||
chartDataSelection.grouping,
|
||||
toDateRange(chartDataSelection, currentDate),
|
||||
);
|
||||
|
@ -47,7 +47,7 @@ export type InstanceTrafficMetricsResponse2 = {
|
||||
error?: Error;
|
||||
};
|
||||
|
||||
export const useInstanceTrafficMetrics2 = (
|
||||
export const useTrafficSearch = (
|
||||
grouping: 'monthly' | 'daily',
|
||||
{
|
||||
from,
|
||||
|
Loading…
Reference in New Issue
Block a user