Skip to content

Commit

Permalink
feat: retain performance gains by intentionally calling can-redeem
Browse files Browse the repository at this point in the history
  • Loading branch information
brobro10000 committed Aug 7, 2024
1 parent 131efa3 commit 15569ba
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 32 deletions.
24 changes: 11 additions & 13 deletions src/components/app/data/hooks/useCourseMetadata.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@ import { useQuery } from '@tanstack/react-query';
import { useParams, useSearchParams } from 'react-router-dom';

import { queryCourseMetadata } from '../queries';
import { filterCourseMetadataByAllocationCourseRun, getAvailableCourseRuns } from '../utils';
import {
filterCourseMetadataByAllocationCourseRun,
getAvailableCourseRuns,
transformCourseMetadataByAllocationCourseRun,
} from '../utils';
import useLateEnrollmentBufferDays from './useLateEnrollmentBufferDays';
import useRedeemablePolicies from './useRedeemablePolicies';

Expand Down Expand Up @@ -46,19 +50,13 @@ export default function useCourseMetadata(queryOptions = {}) {
availableCourseRuns,
};
// TODO: Test data remove
const keys = ['course-v1:edx+H200+2018', 'course-v1:edx+H200+2T2020'];
// const keys = ['course-v1:edx+H200+2018', 'course-v1:edx+H200+2T2020'];
// This logic should appropriately handle multiple course runs being assigned, and return the appropriate metadata
if (hasMultipleAssignedCourseRuns) {
transformedData = {
...data,
courseRuns: data.courseRuns.filter(
courseRun => keys.includes(courseRun.key),
),
availableCourseRuns: data.courseRuns.filter(
courseRun => keys.includes(courseRun.key),
),
};
}
transformedData = transformCourseMetadataByAllocationCourseRun({
hasMultipleAssignedCourseRuns,
courseMetadata: transformedData,
allocatedCourseRunAssignmentKeys,
});
if (select) {
return select({
original: data,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,7 @@ export default function useCourseRedemptionEligibility(queryOptions = {}) {
const { data: enterpriseCustomer } = useEnterpriseCustomer();
const { data: courseMetadata } = useCourseMetadata();
const lateEnrollmentBufferDays = useLateEnrollmentBufferDays();
// const updatedCourseMetadata = filterCourseMetadataByAllocationCourseRun({
// redeemableLearnerCreditPolicies,
// courseMetadata,
// courseKey,
// });

return useQuery({
...queryCanRedeem(enterpriseCustomer.uuid, courseMetadata, lateEnrollmentBufferDays),
enabled: !!courseMetadata,
Expand Down
22 changes: 22 additions & 0 deletions src/components/app/data/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -773,3 +773,25 @@ export function filterCourseMetadataByAllocationCourseRun({
hasMultipleAssignedCourseRuns: false,
};
}

export function transformCourseMetadataByAllocationCourseRun({
hasMultipleAssignedCourseRuns,
courseMetadata,
allocatedCourseRunAssignmentKeys,
}) {
if (!courseMetadata || !hasMultipleAssignedCourseRuns) {
return courseMetadata;
}
if (hasMultipleAssignedCourseRuns && allocatedCourseRunAssignmentKeys.length > 1) {
return {
...courseMetadata,
courseRuns: courseMetadata.courseRuns.filter(
courseRun => allocatedCourseRunAssignmentKeys.includes(courseRun.key),
),
availableCourseRuns: courseMetadata.courseRuns.filter(
courseRun => allocatedCourseRunAssignmentKeys.includes(courseRun.key),
),
};
}
return courseMetadata;
}
41 changes: 27 additions & 14 deletions src/components/course/data/courseLoader.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { generatePath, redirect } from 'react-router-dom';
import {
determineLearnerHasContentAssignmentsOnly,
extractEnterpriseCustomer,
filterCourseMetadataByAllocationCourseRun,
getCatalogsForSubsidyRequests,
getLateEnrollmentBufferDays,
getSearchCatalogs,
Expand All @@ -20,6 +21,7 @@ import {
queryRedeemablePolicies,
querySubscriptions,
queryUserEntitlements,
transformCourseMetadataByAllocationCourseRun,
} from '../../app/data';
import { ensureAuthenticatedUser } from '../../app/routes/data';
import { getCourseTypeConfig, getLinkToCourse, pathContainsCourseTypeSlug } from './utils';
Expand All @@ -41,7 +43,7 @@ export default function makeCourseLoader(queryClient) {
const { courseKey, enterpriseSlug } = params;
// `requestUrl.searchParams` uses `URLSearchParams`, which decodes `+` as a space, so we
// need to replace it with `+` again to be a valid course run key.
const courseRunKey = requestUrl.searchParams.get('course_run_key')?.replaceAll(' ', '+');
let courseRunKey = requestUrl.searchParams.get('course_run_key')?.replaceAll(' ', '+');

const enterpriseCustomer = await extractEnterpriseCustomer({
queryClient,
Expand All @@ -60,7 +62,21 @@ export default function makeCourseLoader(queryClient) {
queryClient.ensureQueryData(queryCouponCodeRequests(enterpriseCustomer.uuid, authenticatedUser.email)),
queryClient.ensureQueryData(queryBrowseAndRequestConfiguration(enterpriseCustomer.uuid)),
]);

const redeemableLearnerCreditPoliciesLoader = await queryClient.ensureQueryData(queryRedeemablePolicies({
enterpriseUuid: enterpriseCustomer.uuid,
lmsUserId: authenticatedUser.userId,
}));
const {
allocatedCourseRunAssignmentKeys,
hasAssignedCourseRuns,
hasMultipleAssignedCourseRuns,
} = filterCourseMetadataByAllocationCourseRun({
courseKey,
redeemableLearnerCreditPolicies: redeemableLearnerCreditPoliciesLoader,
});
if (!courseRunKey && hasAssignedCourseRuns) {
courseRunKey = hasMultipleAssignedCourseRuns ? null : allocatedCourseRunAssignmentKeys[0];
}
await Promise.all([
// TODO: Based on a combination of the existence of a course run based assignment and course run query param,
// what values to pass into queryCourseMetadata
Expand All @@ -71,21 +87,18 @@ export default function makeCourseLoader(queryClient) {
if (!courseMetadata) {
return null;
}
const redeemableLearnerCreditPolicies = await queryClient.ensureQueryData(queryRedeemablePolicies({
enterpriseUuid: enterpriseCustomer.uuid,
lmsUserId: authenticatedUser.userId,
}));
const lateEnrollmentBufferDays = getLateEnrollmentBufferDays(
redeemableLearnerCreditPolicies.redeemablePolicies,
redeemableLearnerCreditPoliciesLoader.redeemablePolicies,
);
// TODO: Added for testing purposes, to be removed before merge
// const parsedCourseMetadata = filterCourseMetadataByAllocationCourseRun({
// redeemableLearnerCreditPolicies,
// courseMetadata,
// courseKey: courseRunKey ? courseKey : null,
// });
// TODO: remove test data
// const keys = ['course-v1:edx+H200+2018', 'course-v1:edx+H200+2T2020'];
const transformedCourseMetadata = transformCourseMetadataByAllocationCourseRun({
hasMultipleAssignedCourseRuns,
courseMetadata,
allocatedCourseRunAssignmentKeys,
});
return queryClient.ensureQueryData(
queryCanRedeem(enterpriseCustomer.uuid, courseMetadata, lateEnrollmentBufferDays),
queryCanRedeem(enterpriseCustomer.uuid, transformedCourseMetadata, lateEnrollmentBufferDays),
);
}),
queryClient.ensureQueryData(queryEnterpriseCourseEnrollments(enterpriseCustomer.uuid)),
Expand Down

0 comments on commit 15569ba

Please sign in to comment.