feat: add amplitude recommendations cookie [VAN-1149] (#65)

This commit is contained in:
Syed Sajjad Hussain Shah
2022-11-08 20:37:00 +05:00
committed by GitHub
parent 2a72a85efd
commit e92a571cac
9 changed files with 41 additions and 3 deletions

1
.env
View File

@@ -31,3 +31,4 @@ ENTERPRISE_MARKETING_UTM_SOURCE=''
ENTERPRISE_MARKETING_UTM_CAMPAIGN=''
ENTERPRISE_MARKETING_FOOTER_UTM_MEDIUM=''
LEARNING_BASE_URL=''
PERSONALIZED_RECOMMENDATION_COOKIE_NAME = 'edx-user-personalized-recommendation'

View File

@@ -37,3 +37,5 @@ ENTERPRISE_MARKETING_UTM_SOURCE='example.com'
ENTERPRISE_MARKETING_UTM_CAMPAIGN='example.com Referral'
ENTERPRISE_MARKETING_FOOTER_UTM_MEDIUM='Footer'
LEARNING_BASE_URL='http://localhost:2000'
SESSION_COOKIE_DOMAIN='localhost'
PERSONALIZED_RECOMMENDATION_COOKIE_NAME = 'edx-user-personalized-recommendation'

1
package-lock.json generated
View File

@@ -55,6 +55,7 @@
"redux-thunk": "2.3.0",
"regenerator-runtime": "^0.13.9",
"reselect": "^4.0.0",
"universal-cookie": "^4.0.4",
"util": "^0.12.4",
"whatwg-fetch": "^3.6.2"
},

View File

@@ -73,6 +73,7 @@
"redux-thunk": "2.3.0",
"regenerator-runtime": "^0.13.9",
"reselect": "^4.0.0",
"universal-cookie": "^4.0.4",
"util": "^0.12.4",
"whatwg-fetch": "^3.6.2"
},

View File

@@ -10,6 +10,8 @@ const configuration = {
// SEGMENT_KEY: process.env.SEGMENT_KEY,
// ACCESS_TOKEN_COOKIE_NAME: process.env.ACCESS_TOKEN_COOKIE_NAME,
LEARNING_BASE_URL: process.env.LEARNING_BASE_URL,
PERSONALIZED_RECOMMENDATION_COOKIE_NAME: process.env.PERSONALIZED_RECOMMENDATION_COOKIE_NAME || '',
SESSION_COOKIE_DOMAIN: process.env.SESSION_COOKIE_DOMAIN || '',
};
const features = {};

16
src/utils/cookies.js Normal file
View File

@@ -0,0 +1,16 @@
import Cookies from 'universal-cookie';
import { configuration } from '../config';
export function setCookie(cookieName, cookieValue, cookieExpiry) {
const cookies = new Cookies();
const options = { domain: configuration.SESSION_COOKIE_DOMAIN, path: '/' };
if (cookieExpiry) {
options.expires = new Date(Date.now() + cookieExpiry * 864e5);
}
cookies.set(cookieName, cookieValue, options);
}
export function getCookie(cookieName) {
const cookies = new Cookies();
return cookies.get(cookieName);
}

View File

@@ -4,12 +4,26 @@ import PropTypes from 'prop-types';
import { Card, Hyperlink, Truncate } from '@edx/paragon';
import { useIsCollapsed } from 'containers/CourseCard/hooks';
import { configuration } from '../../../config';
import { setCookie, getCookie } from '../../../utils/cookies';
import './index.scss';
export const CourseCard = ({ course }) => {
const isCollapsed = useIsCollapsed();
const handleCourseClick = () => {
const cookieName = configuration.PERSONALIZED_RECOMMENDATION_COOKIE_NAME;
let recommendedCourses = getCookie(cookieName);
if (typeof recommendedCourses === 'undefined') {
recommendedCourses = { course_keys: [course.courseKey] };
} else if (!recommendedCourses.course_keys.includes(course.courseKey)) {
recommendedCourses.course_keys.push(course.courseKey);
}
setCookie(cookieName, JSON.stringify(recommendedCourses), 365);
};
return (
<Hyperlink destination={course?.marketingUrl} className="card-link">
<Hyperlink destination={course?.marketingUrl} className="card-link" onClick={handleCourseClick}>
<Card orientation={isCollapsed ? 'vertical' : 'horizontal'} className="p-3 mb-1 recommended-course-card">
<div className={isCollapsed ? '' : 'd-flex align-items-center'}>
<Card.ImageCap

View File

@@ -25,7 +25,8 @@ export const useFetchCourses = (setRequestState, setData) => {
}
});
return () => { isMounted = false; };
});
/* eslint-disable */
}, []);
};
export const useRecommendationPanelData = () => {

View File

@@ -39,7 +39,7 @@ describe('RecommendationsPanel hooks', () => {
expect(calls.length).toEqual(1);
});
it('it is only run once (no prereqs)', () => {
expect(prereqs).toEqual(undefined);
expect(prereqs).toEqual([]);
});
it('calls fetchRecommendedCourses', () => {
api.fetchRecommendedCourses.mockReturnValueOnce(Promise.resolve(response));