Skip to content

Commit

Permalink
feat: display allocated runs on the course about page
Browse files Browse the repository at this point in the history
  • Loading branch information
brobro10000 committed Aug 6, 2024
1 parent beeacc8 commit 5c957ca
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 27 deletions.
18 changes: 13 additions & 5 deletions src/components/app/data/hooks/useCourseRedemptionEligibility.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import useCourseMetadata from './useCourseMetadata';
import { queryCanRedeem } from '../queries';
import useEnterpriseCustomer from './useEnterpriseCustomer';
import useLateEnrollmentBufferDays from './useLateEnrollmentBufferDays';
import useRedeemablePolicies from './useRedeemablePolicies';
import { filterCourseMetadataByAllocationCourseRun } from '../utils';

export function transformCourseRedemptionEligibility({
courseMetadata,
Expand All @@ -18,6 +20,7 @@ export function transformCourseRedemptionEligibility({
r => r.redeemableSubsidyAccessPolicy,
)?.redeemableSubsidyAccessPolicy;
const listPrice = redeemabilityForActiveCourseRun?.listPrice?.usd;
// TODO: Update to properly handle allocated course run state
const hasSuccessfulRedemption = courseRunKey
? !!canRedeemData.find(r => r.contentKey === courseRunKey)?.hasSuccessfulRedemption
: canRedeemData.some(r => r.hasSuccessfulRedemption);
Expand All @@ -41,18 +44,23 @@ export function transformCourseRedemptionEligibility({
* @returns {Types.UseQueryResult}} The query results for the course redemption eligibility.
*/
export default function useCourseRedemptionEligibility(queryOptions = {}) {
const { courseRunKey } = useParams();
const { courseRunKey, courseKey } = useParams();
const { select, ...queryOptionsRest } = queryOptions;
const { data: enterpriseCustomer } = useEnterpriseCustomer();
const { data: redeemableLearnerCreditPolicies } = useRedeemablePolicies();
const { data: courseMetadata } = useCourseMetadata();
const lateEnrollmentBufferDays = useLateEnrollmentBufferDays();

const updatedCourseMetadata = filterCourseMetadataByAllocationCourseRun({
redeemableLearnerCreditPolicies,
courseMetadata,
courseKey,
});
return useQuery({
...queryCanRedeem(enterpriseCustomer.uuid, courseMetadata, lateEnrollmentBufferDays),
enabled: !!courseMetadata,
...queryCanRedeem(enterpriseCustomer.uuid, updatedCourseMetadata, lateEnrollmentBufferDays),
enabled: !!updatedCourseMetadata,
select: (data) => {
const transformedData = transformCourseRedemptionEligibility({
courseMetadata,
courseMetadata: updatedCourseMetadata,
canRedeemData: data,
courseRunKey,
});
Expand Down
29 changes: 29 additions & 0 deletions src/components/app/data/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -747,3 +747,32 @@ export function isEnrollmentUpgradeable(enrollment) {
const canUpgradeToVerifiedEnrollment = enrollment.mode === COURSE_MODES_MAP.AUDIT && !isEnrollByLapsed;
return canUpgradeToVerifiedEnrollment;
}

export function filterCourseMetadataByAllocationCourseRun({
redeemableLearnerCreditPolicies,
courseMetadata,
courseKey,
}) {
if (!courseKey) {
return courseMetadata;
}
// TODO: Added for testing purposes, to be removed before merge
let allocatedKey = '';
const { learnerContentAssignments } = redeemableLearnerCreditPolicies;
if (learnerContentAssignments.hasAllocatedAssignments) {
// Retrieve assigned course run key for allocated course
const allocatedCourseRunKey = learnerContentAssignments.allocatedAssignments.filter(
assignment => assignment.contentKey === courseKey,
).map(assignment => assignment.contentKey);
// TODO: Added for testing purposes, to be removed before merge
if (allocatedCourseRunKey) {
allocatedKey = `course-v1:${allocatedCourseRunKey[0]}+2018`;
return {
...courseMetadata,
courseRuns: courseMetadata.courseRuns.filter(courseRun => courseRun.key === allocatedKey),
availableCourseRuns: courseMetadata.courseRuns.filter(courseRun => courseRun.key === allocatedKey),
};
}
}
return courseMetadata;
}
13 changes: 10 additions & 3 deletions src/components/course/course-header/CourseRunCards.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@ import CourseRunCard from './CourseRunCard';
import DeprecatedCourseRunCard from './deprecated/CourseRunCard';
import { useUserSubsidyApplicableToCourse } from '../data';
import {
filterCourseMetadataByAllocationCourseRun,
LEARNER_CREDIT_SUBSIDY_TYPE,
useCourseMetadata,
useEnterpriseCourseEnrollments,
useEnterpriseCustomerContainsContent,
useRedeemablePolicies,
useUserEntitlements,
LEARNER_CREDIT_SUBSIDY_TYPE,
} from '../../app/data';

/**
Expand All @@ -26,13 +28,18 @@ const CourseRunCards = () => {
const { data: { catalogList } } = useEnterpriseCustomerContainsContent([courseKey]);
const { data: { enterpriseCourseEnrollments } } = useEnterpriseCourseEnrollments();
const { data: userEntitlements } = useUserEntitlements();

const { data: redeemableLearnerCreditPolicies } = useRedeemablePolicies();
const updatedCourseMetadata = filterCourseMetadataByAllocationCourseRun({
redeemableLearnerCreditPolicies,
courseMetadata,
courseKey,
});
return (
<CardGrid
columnSizes={{ xs: 12, md: 6, lg: 5 }}
hasEqualColumnHeights={false}
>
{courseMetadata.availableCourseRuns.map((courseRun) => {
{updatedCourseMetadata.availableCourseRuns.map((courseRun) => {
const hasRedeemablePolicy = userSubsidyApplicableToCourse?.subsidyType === LEARNER_CREDIT_SUBSIDY_TYPE;

// Render the newer `CourseRunCard` component when the user's subsidy, if any, is
Expand Down
59 changes: 40 additions & 19 deletions src/components/course/data/courseLoader.js
Original file line number Diff line number Diff line change
@@ -1,32 +1,29 @@
import { generatePath, redirect } from 'react-router-dom';

import {
queryUserEntitlements,
queryCanRedeem,
queryCourseMetadata,
queryEnterpriseCourseEnrollments,
determineLearnerHasContentAssignmentsOnly,
extractEnterpriseCustomer,
queryRedeemablePolicies,
filterCourseMetadataByAllocationCourseRun,
getCatalogsForSubsidyRequests,
getLateEnrollmentBufferDays,
querySubscriptions,
queryLicenseRequests,
getSearchCatalogs,
queryBrowseAndRequestConfiguration,
queryCanRedeem,
queryCouponCodeRequests,
determineLearnerHasContentAssignmentsOnly,
queryEnterpriseLearnerOffers,
queryCouponCodes,
queryCourseMetadata,
queryCourseRecommendations,
queryCourseReviews,
queryEnterpriseCourseEnrollments,
queryEnterpriseCustomerContainsContent,
queryCourseRecommendations,
getSearchCatalogs,
getCatalogsForSubsidyRequests,
queryBrowseAndRequestConfiguration,
queryEnterpriseLearnerOffers,
queryLicenseRequests,
queryRedeemablePolicies,
querySubscriptions,
queryUserEntitlements,
} from '../../app/data';
import { ensureAuthenticatedUser } from '../../app/routes/data';
import {
getCourseTypeConfig,
getLinkToCourse,
pathContainsCourseTypeSlug,
} from './utils';
import { getCourseTypeConfig, getLinkToCourse, pathContainsCourseTypeSlug } from './utils';

/**
* Course loader for the course related page routes.
Expand Down Expand Up @@ -80,8 +77,32 @@ export default function makeCourseLoader(queryClient) {
const lateEnrollmentBufferDays = getLateEnrollmentBufferDays(
redeemableLearnerCreditPolicies.redeemablePolicies,
);
// TODO: Added for testing purposes, to be removed before merge
const parsedCourseMetadata = filterCourseMetadataByAllocationCourseRun({
redeemableLearnerCreditPolicies,
courseMetadata,
courseKey,
});
// let allocatedKey = '';
// const { learnerContentAssignments } = redeemableLearnerCreditPolicies;
// if (learnerContentAssignments.hasAllocatedAssignments) {
// const allocatedCourseRunKey = learnerContentAssignments.allocatedAssignments.filter(
// assignment => assignment.contentKey === courseKey,
// ).map(assignment => assignment.contentKey);
// // TODO: Added for testing purposes, to be removed before merge
// if (allocatedCourseRunKey) {
// allocatedKey = `course-v1:${allocatedCourseRunKey[0]}+2018`;
// const updatedCourseMetadata = {
// ...courseMetadata,
// courseRuns: courseMetadata.courseRuns.filter(courseRun => courseRun.key === allocatedKey),
// };
// return queryClient.ensureQueryData(
// queryCanRedeem(enterpriseCustomer.uuid, updatedCourseMetadata, lateEnrollmentBufferDays),
// );
// }
// }
return queryClient.ensureQueryData(
queryCanRedeem(enterpriseCustomer.uuid, courseMetadata, lateEnrollmentBufferDays),
queryCanRedeem(enterpriseCustomer.uuid, parsedCourseMetadata, lateEnrollmentBufferDays),
);
}),
queryClient.ensureQueryData(queryEnterpriseCourseEnrollments(enterpriseCustomer.uuid)),
Expand Down

0 comments on commit 5c957ca

Please sign in to comment.