Skip to content

Commit

Permalink
feat: migrate hooks to useBFF hook
Browse files Browse the repository at this point in the history
  • Loading branch information
brobro10000 committed Jan 31, 2025
1 parent 1327c82 commit c1beb74
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 18 deletions.
8 changes: 0 additions & 8 deletions src/components/app/data/hooks/useBFF.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
import { useLocation, useParams } from 'react-router-dom';
import { useQuery } from '@tanstack/react-query';
import { logError } from '@edx/frontend-platform/logging';
import useEnterpriseCustomer from './useEnterpriseCustomer';
import { resolveBFFQuery } from '../queries';
import useEnterpriseFeatures from './useEnterpriseFeatures';

/**
* Uses the route to determine which API call to make for the BFF
Expand All @@ -19,18 +17,12 @@ export default function useBFF({
bffQueryOptions = {},
fallbackQueryConfig = null,
}) {
const { data: enterpriseCustomer } = useEnterpriseCustomer();
const { data: enterpriseFeatures } = useEnterpriseFeatures();
const { enterpriseSlug } = useParams();
const location = useLocation();

// Determine the BFF query to use based on the current location
const matchedBFFQuery = resolveBFFQuery(
location.pathname,
{
enterpriseCustomerUuid: enterpriseCustomer.uuid,
enterpriseFeatures,
},
);

// Determine which query to call, the original hook or the new BFF
Expand Down
9 changes: 5 additions & 4 deletions src/components/app/data/hooks/useEnterpriseCustomer.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,15 @@ export default function useEnterpriseCustomer(queryOptions = {}) {
const { select, ...queryOptionsRest } = queryOptions;
return useEnterpriseLearner({
...queryOptionsRest,
select: (enterpriseLearner) => {
select: (data) => {
const transformedData = data.enterpriseCustomer || data.transformed.enterpriseCustomer;
if (select) {
return select({
original: enterpriseLearner,
transformed: enterpriseLearner.enterpriseCustomer,
original: data,
transformed: transformedData,
});
}
return enterpriseLearner.enterpriseCustomer;
return transformedData;
},
});
}
5 changes: 3 additions & 2 deletions src/components/app/data/hooks/useEnterpriseFeatures.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@ export default function useEnterpriseFeatures(queryOptions = {}) {
return useEnterpriseLearner({
...queryOptionsRest,
select: (data) => {
const transformedData = data.enterpriseFeatures || data.transformed.enterpriseFeatures;
if (select) {
return select({
original: data,
transformed: data?.enterpriseFeatures,
transformed: transformedData,
});
}
return data?.enterpriseFeatures;
return transformedData;
},
});
}
32 changes: 28 additions & 4 deletions src/components/app/data/hooks/useEnterpriseLearner.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { AppContext } from '@edx/frontend-platform/react';
import { useQuery } from '@tanstack/react-query';
import { useContext } from 'react';
import { useParams } from 'react-router-dom';
import { queryEnterpriseLearner } from '../queries';
import useBFF from './useBFF';

/**
* Retrieves the enterprise learner data for the authenticated user.
Expand All @@ -12,8 +12,32 @@ import { queryEnterpriseLearner } from '../queries';
export default function useEnterpriseLearner(queryOptions = {}) {
const { authenticatedUser } = useContext(AppContext);
const { enterpriseSlug } = useParams();
return useQuery({
...queryEnterpriseLearner(authenticatedUser.username, enterpriseSlug),
...queryOptions,
const { select, ...queryOptionsRest } = queryOptions;

return useBFF({
bffQueryOptions: {
...queryOptionsRest,
select: (data) => {
const transformedData = {
enterpriseCustomer: data.enterpriseCustomer,
allLinkedEnterpriseCustomerUsers: data.allLinkedEnterpriseCustomerUsers,
enterpriseFeatures: data.enterpriseFeatures,
};
// When custom `select` function is provided in `queryOptions`, call it with original and transformed data.
if (select) {
return select({
original: data,
transformed: transformedData,
});
}

// Otherwise, return the transformed data.
return transformedData;
},
},
fallbackQueryConfig: {
...queryEnterpriseLearner(authenticatedUser.username, enterpriseSlug),
...queryOptions,
},
});
}

0 comments on commit c1beb74

Please sign in to comment.