@edx/frontend-app-subscription-learner-dashboard 1.61.0 → 1.62.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,6 +5,7 @@ export const categories = StrictDict({
5
5
  searchButton: 'search_button',
6
6
  credit: 'credit',
7
7
  filter: 'filter',
8
+ footer: 'footer',
8
9
  });
9
10
  export const events = StrictDict({
10
11
  courseCardActionClicked: 'courseCardActionClicked',
@@ -42,6 +43,11 @@ export const eventNames = StrictDict({
42
43
  purchaseCredit: 'edx.subscription.dashboard.clicked_purchase_credit',
43
44
  filterClicked: 'course-dashboard.filter.clicked',
44
45
  filterOptionSelected: 'course-dashboard.filter_option.selected',
46
+ footerLogoClicked: 'edx.bi.footer.logo.clicked',
47
+ footerSocialLinkClicked: 'edx.bi.footer.social_link.clicked',
48
+ footerEdxLinksClicked: 'edx.bi.footer.edx_links.clicked',
49
+ footerConnectLinksClicked: 'edx.bi.footer.connect_links.clicked',
50
+ footerLegalLinksClicked: 'edx.bi.footer.legal_links.clicked',
45
51
  programCardActionClicked: 'edx.subscription.dashboard.program_card_action.clicked',
46
52
  });
47
53
  export const linkNames = StrictDict({
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/tracking/constants.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,SAAS,EAAE,WAAW;IACtB,cAAc,EAAE,iBAAiB;IACjC,YAAY,EAAE,eAAe;IAC7B,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;CACjB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC;IAC/B,uBAAuB,EAAE,yBAAyB;IAClD,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IACxC,4BAA4B,EAAE,8BAA8B;IAC5D,YAAY,EAAE,cAAc;IAC5B,mBAAmB,EAAE,qBAAqB;IAC1C,UAAU,EAAE,YAAY;IACxB,aAAa,EAAE,eAAe;IAC9B,YAAY,EAAE,cAAc;IAC5B,cAAc,EAAE,gBAAgB;IAChC,yBAAyB,EAAE,2BAA2B;IACtD,oBAAoB,EAAE,sBAAsB;IAC5C,qBAAqB,EAAE,uBAAuB;IAC9C,sBAAsB,EAAE,wBAAwB;IAChD,wBAAwB,EAAE,0BAA0B;CACrD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,uBAAuB,EAAE,uDAAuD;IAChF,kBAAkB,EAAE,iDAAiD;IACrE,kBAAkB,EAAE,iDAAiD;IACrE,4BAA4B,EAAE,4DAA4D;IAC1F,oBAAoB,EAAE,oDAAoD;IAC1E,qBAAqB,EAAE,qDAAqD;IAC5E,YAAY,EAAE,0BAA0B;IACxC,sBAAsB,EAAE,oDAAoD;IAC5E,mBAAmB,EAAE,2BAA2B;IAChD,UAAU,EAAE,8BAA8B;IAC1C,aAAa,EAAE,iCAAiC;IAChD,YAAY,EAAE,gCAAgC;IAC9C,cAAc,EAAE,8BAA8B;IAC9C,yBAAyB,EAAE,0CAA0C;IACrE,kBAAkB,EAAE,wDAAwD;IAC5E,cAAc,EAAE,oDAAoD;IACpE,aAAa,EAAE,iCAAiC;IAChD,oBAAoB,EAAE,yCAAyC;IAC/D,wBAAwB,EAAE,wDAAwD;CACnF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC;IAClC,qBAAqB,EAAE,0BAA0B;IACjD,6BAA6B,EAAE,mCAAmC;CACnE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,cAAc,CAAC;AAEtC,eAAe,UAAU,CAAC","sourcesContent":["import { StrictDict } from '../utils';\n\nexport const categories = StrictDict({\n dashboard: 'dashboard',\n userEngagement: 'user-engagement',\n searchButton: 'search_button',\n credit: 'credit',\n filter: 'filter',\n});\n\nexport const events = StrictDict({\n courseCardActionClicked: 'courseCardActionClicked',\n courseImageClicked: 'courseImageClicked',\n courseTitleClicked: 'courseTitleClicked',\n courseOptionsDropdownClicked: 'courseOptionsDropdownClicked',\n shareClicked: 'shareClicked',\n userSettingsChanged: 'userSettingsChanged',\n newSession: 'newSession',\n switchSession: 'switchSession',\n leaveSession: 'leaveSession',\n unenrollReason: 'unenrollReason',\n entitlementUnenrollReason: 'entitlementUnenrollReason',\n noCoursesViewClicked: 'noCoursesViewClicked',\n noProgramsViewClicked: 'noProgramsViewClicked',\n courseListPageSelected: 'courseListPageSelected',\n programCardActionClicked: 'programCardActionClicked',\n});\n\nexport const eventNames = StrictDict({\n courseCardActionClicked: 'edx.subscription.dashboard.course_card_action.clicked',\n courseImageClicked: 'edx.subscription.dashboard.course_image.clicked',\n courseTitleClicked: 'edx.subscription.dashboard.course_title.clicked',\n courseOptionsDropdownClicked: 'edx.subscription.dashboard.course_options_dropdown.clicked',\n noCoursesViewClicked: 'edx.subscription.dashboard.no_courses_view.clicked',\n noProgramsViewClicked: 'edx.subscription.dashboard.no_programs_view.clicked',\n shareClicked: 'edx.course.share_clicked',\n courseListPageSelected: 'edx.subscription.learner.course.list.page.selected',\n userSettingsChanged: 'edx.user.settings.changed',\n newSession: 'course-dashboard.new-session',\n switchSession: 'course-dashboard.switch-session',\n leaveSession: 'course-dashboard.leave-session',\n unenrollReason: 'unenrollment_reason.selected',\n entitlementUnenrollReason: 'entitlement_unenrollment_reason.selected',\n findCoursesClicked: 'edx.subscription.dashboard.find_courses_button.clicked',\n purchaseCredit: 'edx.subscription.dashboard.clicked_purchase_credit',\n filterClicked: 'course-dashboard.filter.clicked',\n filterOptionSelected: 'course-dashboard.filter_option.selected',\n programCardActionClicked: 'edx.subscription.dashboard.program_card_action.clicked',\n});\n\nexport const linkNames = StrictDict({\n learnerHomeNavExplore: 'learner_home_nav_explore',\n learnerHomeNavDropdownExplore: 'learner_home_nav_dropdown_explore',\n});\n\nexport const appName = 'learner-home';\n\nexport default eventNames;\n"]}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/tracking/constants.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,SAAS,EAAE,WAAW;IACtB,cAAc,EAAE,iBAAiB;IACjC,YAAY,EAAE,eAAe;IAC7B,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;CACjB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC;IAC/B,uBAAuB,EAAE,yBAAyB;IAClD,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IACxC,4BAA4B,EAAE,8BAA8B;IAC5D,YAAY,EAAE,cAAc;IAC5B,mBAAmB,EAAE,qBAAqB;IAC1C,UAAU,EAAE,YAAY;IACxB,aAAa,EAAE,eAAe;IAC9B,YAAY,EAAE,cAAc;IAC5B,cAAc,EAAE,gBAAgB;IAChC,yBAAyB,EAAE,2BAA2B;IACtD,oBAAoB,EAAE,sBAAsB;IAC5C,qBAAqB,EAAE,uBAAuB;IAC9C,sBAAsB,EAAE,wBAAwB;IAChD,wBAAwB,EAAE,0BAA0B;CACrD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,uBAAuB,EAAE,uDAAuD;IAChF,kBAAkB,EAAE,iDAAiD;IACrE,kBAAkB,EAAE,iDAAiD;IACrE,4BAA4B,EAAE,4DAA4D;IAC1F,oBAAoB,EAAE,oDAAoD;IAC1E,qBAAqB,EAAE,qDAAqD;IAC5E,YAAY,EAAE,0BAA0B;IACxC,sBAAsB,EAAE,oDAAoD;IAC5E,mBAAmB,EAAE,2BAA2B;IAChD,UAAU,EAAE,8BAA8B;IAC1C,aAAa,EAAE,iCAAiC;IAChD,YAAY,EAAE,gCAAgC;IAC9C,cAAc,EAAE,8BAA8B;IAC9C,yBAAyB,EAAE,0CAA0C;IACrE,kBAAkB,EAAE,wDAAwD;IAC5E,cAAc,EAAE,oDAAoD;IACpE,aAAa,EAAE,iCAAiC;IAChD,oBAAoB,EAAE,yCAAyC;IAC/D,iBAAiB,EAAE,4BAA4B;IAC/C,uBAAuB,EAAE,mCAAmC;IAC5D,qBAAqB,EAAE,iCAAiC;IACxD,yBAAyB,EAAE,qCAAqC;IAChE,uBAAuB,EAAE,mCAAmC;IAC5D,wBAAwB,EAAE,wDAAwD;CACnF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC;IAClC,qBAAqB,EAAE,0BAA0B;IACjD,6BAA6B,EAAE,mCAAmC;CACnE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,cAAc,CAAC;AAEtC,eAAe,UAAU,CAAC","sourcesContent":["import { StrictDict } from '../utils';\n\nexport const categories = StrictDict({\n dashboard: 'dashboard',\n userEngagement: 'user-engagement',\n searchButton: 'search_button',\n credit: 'credit',\n filter: 'filter',\n footer: 'footer',\n});\n\nexport const events = StrictDict({\n courseCardActionClicked: 'courseCardActionClicked',\n courseImageClicked: 'courseImageClicked',\n courseTitleClicked: 'courseTitleClicked',\n courseOptionsDropdownClicked: 'courseOptionsDropdownClicked',\n shareClicked: 'shareClicked',\n userSettingsChanged: 'userSettingsChanged',\n newSession: 'newSession',\n switchSession: 'switchSession',\n leaveSession: 'leaveSession',\n unenrollReason: 'unenrollReason',\n entitlementUnenrollReason: 'entitlementUnenrollReason',\n noCoursesViewClicked: 'noCoursesViewClicked',\n noProgramsViewClicked: 'noProgramsViewClicked',\n courseListPageSelected: 'courseListPageSelected',\n programCardActionClicked: 'programCardActionClicked',\n});\n\nexport const eventNames = StrictDict({\n courseCardActionClicked: 'edx.subscription.dashboard.course_card_action.clicked',\n courseImageClicked: 'edx.subscription.dashboard.course_image.clicked',\n courseTitleClicked: 'edx.subscription.dashboard.course_title.clicked',\n courseOptionsDropdownClicked: 'edx.subscription.dashboard.course_options_dropdown.clicked',\n noCoursesViewClicked: 'edx.subscription.dashboard.no_courses_view.clicked',\n noProgramsViewClicked: 'edx.subscription.dashboard.no_programs_view.clicked',\n shareClicked: 'edx.course.share_clicked',\n courseListPageSelected: 'edx.subscription.learner.course.list.page.selected',\n userSettingsChanged: 'edx.user.settings.changed',\n newSession: 'course-dashboard.new-session',\n switchSession: 'course-dashboard.switch-session',\n leaveSession: 'course-dashboard.leave-session',\n unenrollReason: 'unenrollment_reason.selected',\n entitlementUnenrollReason: 'entitlement_unenrollment_reason.selected',\n findCoursesClicked: 'edx.subscription.dashboard.find_courses_button.clicked',\n purchaseCredit: 'edx.subscription.dashboard.clicked_purchase_credit',\n filterClicked: 'course-dashboard.filter.clicked',\n filterOptionSelected: 'course-dashboard.filter_option.selected',\n footerLogoClicked: 'edx.bi.footer.logo.clicked',\n footerSocialLinkClicked: 'edx.bi.footer.social_link.clicked',\n footerEdxLinksClicked: 'edx.bi.footer.edx_links.clicked',\n footerConnectLinksClicked: 'edx.bi.footer.connect_links.clicked',\n footerLegalLinksClicked: 'edx.bi.footer.legal_links.clicked',\n programCardActionClicked: 'edx.subscription.dashboard.program_card_action.clicked',\n});\n\nexport const linkNames = StrictDict({\n learnerHomeNavExplore: 'learner_home_nav_explore',\n learnerHomeNavDropdownExplore: 'learner_home_nav_dropdown_explore',\n});\n\nexport const appName = 'learner-home';\n\nexport default eventNames;\n"]}
@@ -6,6 +6,8 @@ import SocialIconLinks from './SocialLinks';
6
6
  import footerMessages from './messages';
7
7
  import LinkList from './LinkList';
8
8
  import { useEffect, useState } from 'react';
9
+ import { createEventTracker } from '../../data/services/segment/utils';
10
+ import { categories, eventNames } from '../../tracking/constants';
9
11
  const MARKETING_BASE_URL = 'https://edx.org';
10
12
  export default function Footer() {
11
13
  const intl = useIntl();
@@ -13,7 +15,10 @@ export default function Footer() {
13
15
  useEffect(() => {
14
16
  setUtmSource(window.location.hostname);
15
17
  }, []);
16
- return (_jsxs("div", { className: "footer py-5.5 bg-primary-500", children: [_jsxs("div", { className: "d-flex flex-column flex-lg-row gap-4 align-items-start justify-content-between mb-4.5", children: [_jsx("a", { href: "https://edx.org", "aria-label": intl.formatMessage(footerMessages['footer.logo.ariaLabel']), children: _jsx("img", { className: "footer__logo-main", src: footerLogo, alt: intl.formatMessage(footerMessages['footer.logo.altText']) }) }), _jsx(SocialIconLinks, {})] }), _jsxs("div", { className: "d-flex flex-column flex-md-row gap-4", children: [_jsx("div", { className: "d-flex flex-column flex-fill", children: _jsx(LinkList, { className: "area-2", title: "edX", links: [
18
+ const handleFooterLinkClick = (href, eventName) => {
19
+ createEventTracker(eventName, { category: categories.footer, label: href })();
20
+ };
21
+ return (_jsxs("div", { className: "footer py-5.5 bg-primary-500", children: [_jsxs("div", { className: "d-flex flex-column flex-lg-row gap-4 align-items-start justify-content-between mb-4.5", children: [_jsx("a", { href: "https://edx.org", "aria-label": intl.formatMessage(footerMessages['footer.logo.ariaLabel']), onClick: () => handleFooterLinkClick('https://edx.org', eventNames.footerLogoClicked), children: _jsx("img", { className: "footer__logo-main", src: footerLogo, alt: intl.formatMessage(footerMessages['footer.logo.altText']) }) }), _jsx(SocialIconLinks, {})] }), _jsxs("div", { className: "d-flex flex-column flex-md-row gap-4", children: [_jsx("div", { className: "d-flex flex-column flex-fill", children: _jsx(LinkList, { className: "area-2", title: "edX", onLinkClick: handleFooterLinkClick, trackingEventName: eventNames.footerEdxLinksClicked, links: [
17
22
  {
18
23
  href: `${MARKETING_BASE_URL}/about-us`,
19
24
  title: intl.formatMessage(footerMessages['footer.edxLinks.about']),
@@ -46,7 +51,7 @@ export default function Footer() {
46
51
  href: `https://press.edx.org/`,
47
52
  title: intl.formatMessage(footerMessages['footer.edxLinks.news']),
48
53
  },
49
- ] }) }), _jsx("div", { className: "d-flex flex-column flex-fill", children: _jsx(LinkList, { className: "area-4", title: intl.formatMessage(footerMessages['footer.connectLinks.heading']), links: [
54
+ ] }) }), _jsx("div", { className: "d-flex flex-column flex-fill", children: _jsx(LinkList, { className: "area-4", title: intl.formatMessage(footerMessages['footer.connectLinks.heading']), onLinkClick: handleFooterLinkClick, trackingEventName: eventNames.footerConnectLinksClicked, links: [
50
55
  {
51
56
  href: 'https://www.edx.org/resources',
52
57
  title: intl.formatMessage(footerMessages['footer.connectLinks.blog']),
@@ -68,7 +73,7 @@ export default function Footer() {
68
73
  title: intl.formatMessage(footerMessages['footer.connectLinks.mediaKit']),
69
74
  hidden: intl.locale === 'es',
70
75
  },
71
- ] }) }), _jsx("div", { className: "d-flex flex-column flex-fill", children: _jsx(LinkList, { className: "area-3", title: intl.formatMessage(footerMessages['footer.legalLinks.heading']), links: [
76
+ ] }) }), _jsx("div", { className: "d-flex flex-column flex-fill", children: _jsx(LinkList, { className: "area-3", title: intl.formatMessage(footerMessages['footer.legalLinks.heading']), onLinkClick: handleFooterLinkClick, trackingEventName: eventNames.footerLegalLinksClicked, links: [
72
77
  {
73
78
  href: `${MARKETING_BASE_URL}/edx-terms-service`,
74
79
  title: intl.formatMessage(footerMessages['footer.legalLinks.termsOfService']),
@@ -1 +1 @@
1
- {"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../../src/widgets/LearnerDashboardFooter/Footer.tsx"],"names":[],"mappings":"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","sourcesContent":["import './index.scss';\nimport footerLogo from '../../assets/footerLogo.svg';\n\nimport { useIntl } from '@openedx/frontend-base';\nimport SocialIconLinks from './SocialLinks';\nimport footerMessages from './messages';\nimport LinkList from './LinkList';\nimport { useEffect, useState } from 'react';\n\nconst MARKETING_BASE_URL = 'https://edx.org';\n\nexport default function Footer() {\n const intl = useIntl();\n const [utmSource, setUtmSource] = useState('edx.org');\n\n useEffect(() => {\n setUtmSource(window.location.hostname);\n }, []);\n\n return (\n <div className=\"footer py-5.5 bg-primary-500\">\n <div className=\"d-flex flex-column flex-lg-row gap-4 align-items-start justify-content-between mb-4.5\">\n <a\n href=\"https://edx.org\"\n aria-label={intl.formatMessage(\n footerMessages['footer.logo.ariaLabel'],\n )}\n >\n <img\n className=\"footer__logo-main\"\n src={footerLogo}\n alt={intl.formatMessage(footerMessages['footer.logo.altText'])}\n />\n </a>\n <SocialIconLinks />\n </div>\n <div className=\"d-flex flex-column flex-md-row gap-4\">\n <div className=\"d-flex flex-column flex-fill\">\n <LinkList\n className=\"area-2\"\n title=\"edX\"\n links={[\n {\n href: `${MARKETING_BASE_URL}/about-us`,\n title: intl.formatMessage(\n footerMessages['footer.edxLinks.about'],\n ),\n },\n {\n href: `https://business.edx.org/?utm_campaign=edX.org+Referral&utm_medium=Footer&utm_source=${utmSource}`,\n title: intl.formatMessage(\n footerMessages['footer.edxLinks.business'],\n ),\n },\n {\n href: `${MARKETING_BASE_URL}/affiliate-program`,\n title: intl.formatMessage(\n footerMessages['footer.edxLinks.affiliates'],\n ),\n hidden: intl.locale === 'es',\n },\n {\n href: 'http://open.edx.org',\n title: intl.formatMessage(\n footerMessages['footer.edxLinks.openEdx'],\n ),\n hidden: intl.locale === 'es',\n },\n {\n href: 'https://www.edx.org/learn/devops',\n title: intl.formatMessage(\n footerMessages['footer.legalLinks.advisory'],\n ),\n hidden: intl.locale === 'es',\n },\n {\n href: `${MARKETING_BASE_URL}/careers`,\n title: intl.formatMessage(\n footerMessages['footer.edxLinks.careers'],\n ),\n hidden: intl.locale === 'es',\n },\n {\n href: `https://press.edx.org/`,\n title: intl.formatMessage(\n footerMessages['footer.edxLinks.news'],\n ),\n },\n ]}\n />\n </div>\n <div className=\"d-flex flex-column flex-fill\">\n <LinkList\n className=\"area-4\"\n title={intl.formatMessage(\n footerMessages['footer.connectLinks.heading'],\n )}\n links={[\n {\n href: 'https://www.edx.org/resources',\n title: intl.formatMessage(\n footerMessages['footer.connectLinks.blog'],\n ),\n },\n {\n href: 'https://courses.edx.org/support/contact_us',\n title: intl.formatMessage(\n footerMessages['footer.connectLinks.contact'],\n ),\n },\n {\n href: 'https://support.edx.org',\n title: intl.formatMessage(\n footerMessages['footer.connectLinks.help'],\n ),\n },\n {\n href: `${MARKETING_BASE_URL}/policy/security`,\n title: intl.formatMessage(\n footerMessages['footer.connectLinks.security'],\n ),\n },\n {\n href: `${MARKETING_BASE_URL}/media-kit`,\n title: intl.formatMessage(\n footerMessages['footer.connectLinks.mediaKit'],\n ),\n hidden: intl.locale === 'es',\n },\n ]}\n />\n </div>\n <div className=\"d-flex flex-column flex-fill\">\n <LinkList\n className=\"area-3\"\n title={intl.formatMessage(\n footerMessages['footer.legalLinks.heading'],\n )}\n links={[\n {\n href: `${MARKETING_BASE_URL}/edx-terms-service`,\n title: intl.formatMessage(\n footerMessages['footer.legalLinks.termsOfService'],\n ),\n },\n {\n href: `${MARKETING_BASE_URL}/edx-privacy-policy`,\n title: intl.formatMessage(\n footerMessages['footer.legalLinks.privacyPolicy'],\n ),\n },\n {\n href: `${MARKETING_BASE_URL}/edx-privacy-policy/cookies`,\n title: intl.formatMessage(\n footerMessages['footer.legalLinks.cookiePolicy'],\n ),\n },\n {\n href: `${MARKETING_BASE_URL}/accessibility`,\n title: intl.formatMessage(\n footerMessages['footer.legalLinks.a11yPolicy'],\n ),\n },\n {\n href: `${MARKETING_BASE_URL}/trademarks`,\n title: intl.formatMessage(\n footerMessages['footer.legalLinks.trademarkPolicy'],\n ),\n hidden: intl.locale === 'es',\n },\n {\n href: `${MARKETING_BASE_URL}/modern-slavery-statement`,\n title: intl.formatMessage(\n footerMessages['footer.legalLinks.modernSlavery'],\n ),\n },\n {\n href: `${MARKETING_BASE_URL}/sitemap`,\n title: intl.formatMessage(\n footerMessages['footer.legalLinks.sitemap'],\n ),\n hidden: intl.locale === 'es',\n },\n {\n href: `#`,\n title: intl.formatMessage(\n footerMessages['footer.legalLinks.privacyChoices'],\n ),\n },\n ]}\n />\n </div>\n <div className=\"d-none d-md-flex flex-column flex-fill\">\n {/* language selector not implemented */}\n </div>\n </div>\n\n <div className=\"mt-4.5 d-flex align-items-start\">\n <div className=\"d-flex flex-column align-items-start\">\n <p className=\"x-small text-white\">\n {intl.formatMessage(footerMessages['footer.copyRight'])}\n </p>\n <p className=\"x-small text-white\">\n {intl.formatMessage(footerMessages['footer.copyRightCn'])}\n </p>\n </div>\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../../src/widgets/LearnerDashboardFooter/Footer.tsx"],"names":[],"mappings":"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","sourcesContent":["import './index.scss';\nimport footerLogo from '../../assets/footerLogo.svg';\n\nimport { useIntl } from '@openedx/frontend-base';\nimport SocialIconLinks from './SocialLinks';\nimport footerMessages from './messages';\nimport LinkList from './LinkList';\nimport { useEffect, useState } from 'react';\nimport { createEventTracker } from '../../data/services/segment/utils';\nimport { categories, eventNames } from '../../tracking/constants';\n\nconst MARKETING_BASE_URL = 'https://edx.org';\n\nexport default function Footer() {\n const intl = useIntl();\n const [utmSource, setUtmSource] = useState('edx.org');\n\n useEffect(() => {\n setUtmSource(window.location.hostname);\n }, []);\n\n const handleFooterLinkClick = (href, eventName) => {\n createEventTracker(eventName, { category: categories.footer, label: href })();\n };\n\n return (\n <div className=\"footer py-5.5 bg-primary-500\">\n <div className=\"d-flex flex-column flex-lg-row gap-4 align-items-start justify-content-between mb-4.5\">\n <a\n href=\"https://edx.org\"\n aria-label={intl.formatMessage(\n footerMessages['footer.logo.ariaLabel'],\n )}\n onClick={() => handleFooterLinkClick('https://edx.org', eventNames.footerLogoClicked)}\n >\n <img\n className=\"footer__logo-main\"\n src={footerLogo}\n alt={intl.formatMessage(footerMessages['footer.logo.altText'])}\n />\n </a>\n <SocialIconLinks />\n </div>\n <div className=\"d-flex flex-column flex-md-row gap-4\">\n <div className=\"d-flex flex-column flex-fill\">\n <LinkList\n className=\"area-2\"\n title=\"edX\"\n onLinkClick={handleFooterLinkClick}\n trackingEventName={eventNames.footerEdxLinksClicked}\n links={[\n {\n href: `${MARKETING_BASE_URL}/about-us`,\n title: intl.formatMessage(\n footerMessages['footer.edxLinks.about'],\n ),\n },\n {\n href: `https://business.edx.org/?utm_campaign=edX.org+Referral&utm_medium=Footer&utm_source=${utmSource}`,\n title: intl.formatMessage(\n footerMessages['footer.edxLinks.business'],\n ),\n },\n {\n href: `${MARKETING_BASE_URL}/affiliate-program`,\n title: intl.formatMessage(\n footerMessages['footer.edxLinks.affiliates'],\n ),\n hidden: intl.locale === 'es',\n },\n {\n href: 'http://open.edx.org',\n title: intl.formatMessage(\n footerMessages['footer.edxLinks.openEdx'],\n ),\n hidden: intl.locale === 'es',\n },\n {\n href: 'https://www.edx.org/learn/devops',\n title: intl.formatMessage(\n footerMessages['footer.legalLinks.advisory'],\n ),\n hidden: intl.locale === 'es',\n },\n {\n href: `${MARKETING_BASE_URL}/careers`,\n title: intl.formatMessage(\n footerMessages['footer.edxLinks.careers'],\n ),\n hidden: intl.locale === 'es',\n },\n {\n href: `https://press.edx.org/`,\n title: intl.formatMessage(\n footerMessages['footer.edxLinks.news'],\n ),\n },\n ]}\n />\n </div>\n <div className=\"d-flex flex-column flex-fill\">\n <LinkList\n className=\"area-4\"\n title={intl.formatMessage(\n footerMessages['footer.connectLinks.heading'],\n )}\n onLinkClick={handleFooterLinkClick}\n trackingEventName={eventNames.footerConnectLinksClicked}\n links={[\n {\n href: 'https://www.edx.org/resources',\n title: intl.formatMessage(\n footerMessages['footer.connectLinks.blog'],\n ),\n },\n {\n href: 'https://courses.edx.org/support/contact_us',\n title: intl.formatMessage(\n footerMessages['footer.connectLinks.contact'],\n ),\n },\n {\n href: 'https://support.edx.org',\n title: intl.formatMessage(\n footerMessages['footer.connectLinks.help'],\n ),\n },\n {\n href: `${MARKETING_BASE_URL}/policy/security`,\n title: intl.formatMessage(\n footerMessages['footer.connectLinks.security'],\n ),\n },\n {\n href: `${MARKETING_BASE_URL}/media-kit`,\n title: intl.formatMessage(\n footerMessages['footer.connectLinks.mediaKit'],\n ),\n hidden: intl.locale === 'es',\n },\n ]}\n />\n </div>\n <div className=\"d-flex flex-column flex-fill\">\n <LinkList\n className=\"area-3\"\n title={intl.formatMessage(\n footerMessages['footer.legalLinks.heading'],\n )}\n onLinkClick={handleFooterLinkClick}\n trackingEventName={eventNames.footerLegalLinksClicked}\n links={[\n {\n href: `${MARKETING_BASE_URL}/edx-terms-service`,\n title: intl.formatMessage(\n footerMessages['footer.legalLinks.termsOfService'],\n ),\n },\n {\n href: `${MARKETING_BASE_URL}/edx-privacy-policy`,\n title: intl.formatMessage(\n footerMessages['footer.legalLinks.privacyPolicy'],\n ),\n },\n {\n href: `${MARKETING_BASE_URL}/edx-privacy-policy/cookies`,\n title: intl.formatMessage(\n footerMessages['footer.legalLinks.cookiePolicy'],\n ),\n },\n {\n href: `${MARKETING_BASE_URL}/accessibility`,\n title: intl.formatMessage(\n footerMessages['footer.legalLinks.a11yPolicy'],\n ),\n },\n {\n href: `${MARKETING_BASE_URL}/trademarks`,\n title: intl.formatMessage(\n footerMessages['footer.legalLinks.trademarkPolicy'],\n ),\n hidden: intl.locale === 'es',\n },\n {\n href: `${MARKETING_BASE_URL}/modern-slavery-statement`,\n title: intl.formatMessage(\n footerMessages['footer.legalLinks.modernSlavery'],\n ),\n },\n {\n href: `${MARKETING_BASE_URL}/sitemap`,\n title: intl.formatMessage(\n footerMessages['footer.legalLinks.sitemap'],\n ),\n hidden: intl.locale === 'es',\n },\n {\n href: `#`,\n title: intl.formatMessage(\n footerMessages['footer.legalLinks.privacyChoices'],\n ),\n },\n ]}\n />\n </div>\n <div className=\"d-none d-md-flex flex-column flex-fill\">\n {/* language selector not implemented */}\n </div>\n </div>\n\n <div className=\"mt-4.5 d-flex align-items-start\">\n <div className=\"d-flex flex-column align-items-start\">\n <p className=\"x-small text-white\">\n {intl.formatMessage(footerMessages['footer.copyRight'])}\n </p>\n <p className=\"x-small text-white\">\n {intl.formatMessage(footerMessages['footer.copyRightCn'])}\n </p>\n </div>\n </div>\n </div>\n );\n}\n"]}
@@ -14,6 +14,8 @@ export interface LinkItem {
14
14
  export interface LinkListProps extends HTMLAttributes<HTMLDivElement> {
15
15
  title: string;
16
16
  links?: LinkItem[];
17
+ onLinkClick?: (href: string, eventName: string) => void;
18
+ trackingEventName?: string;
17
19
  }
18
20
  declare const LinkList: React.FC<LinkListProps>;
19
21
  export default LinkList;
@@ -12,7 +12,7 @@ var __rest = (this && this.__rest) || function (s, e) {
12
12
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
13
  import { Button } from '@openedx/paragon';
14
14
  const LinkList = (_a) => {
15
- var { title: listTitle, links = [] } = _a, props = __rest(_a, ["title", "links"]);
15
+ var { title: listTitle, links = [], onLinkClick, trackingEventName } = _a, props = __rest(_a, ["title", "links", "onLinkClick", "trackingEventName"]);
16
16
  return (_jsxs("div", Object.assign({ className: "d-flex flex-column flex-fill" }, props, { children: [_jsx("h2", { className: "footer__section-title text-white mb-2 small", children: listTitle }), _jsx("ul", { className: "list-unstyled p-0 m-0 footer__links", children: links.map((_a) => {
17
17
  var { title, href, hidden } = _a, linkProps = __rest(_a, ["title", "href", "hidden"]);
18
18
  if (hidden) {
@@ -21,7 +21,12 @@ const LinkList = (_a) => {
21
21
  if (!href) {
22
22
  return (_jsx("li", { children: _jsx(Button, Object.assign({}, linkProps, { children: title })) }, title));
23
23
  }
24
- return (_jsx("li", { children: _jsx("a", { className: "text-white x-small", href: href, children: title }) }, `${href}${title}`));
24
+ const handleClick = () => {
25
+ if (onLinkClick && trackingEventName) {
26
+ onLinkClick(href, trackingEventName);
27
+ }
28
+ };
29
+ return (_jsx("li", { children: _jsx("a", { className: "text-white x-small", href: href, onClick: handleClick, children: title }) }, `${href}${title}`));
25
30
  }) })] })));
26
31
  };
27
32
  export default LinkList;
@@ -1 +1 @@
1
- {"version":3,"file":"LinkList.js","sourceRoot":"","sources":["../../../src/widgets/LearnerDashboardFooter/LinkList.tsx"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAoB1C,MAAM,QAAQ,GAA4B,CAAC,EAI1C,EAAE,EAAE;QAJsC,EACzC,KAAK,EAAE,SAAS,EAChB,KAAK,GAAG,EAAE,OAEX,EADI,KAAK,cAHiC,kBAI1C,CADS;IACJ,OAAA,CACJ,6BAAK,SAAS,EAAC,8BAA8B,IAAK,KAAK,eACrD,aAAI,SAAS,EAAC,6CAA6C,YAAE,SAAS,GAAM,EAC5E,aAAI,SAAS,EAAC,qCAAqC,YAChD,KAAK,CAAC,GAAG,CAAC,CAAC,EAAqC,EAAE,EAAE;wBAAzC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,OAAgB,EAAX,SAAS,cAAnC,2BAAqC,CAAF;oBAC7C,IAAI,MAAM,EAAE,CAAC;wBACX,OAAO,IAAI,CAAC;oBACd,CAAC;oBAED,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,OAAO,CACL,uBACE,KAAC,MAAM,oBAAK,SAAS,cAAG,KAAK,IAAU,IADhC,KAAK,CAET,CACN,CAAC;oBACJ,CAAC;oBAED,OAAO,CACL,uBACE,YAAG,SAAS,EAAC,oBAAoB,EAAC,IAAI,EAAE,IAAI,YACzC,KAAK,GACJ,IAHG,GAAG,IAAI,GAAG,KAAK,EAAE,CAIrB,CACN,CAAC;gBACJ,CAAC,CAAC,GACC,KACD,CACP,CAAA;CAAA,CAAC;AAEF,eAAe,QAAQ,CAAC","sourcesContent":["import React, { HTMLAttributes } from 'react';\nimport { Button } from '@openedx/paragon';\n\ntype ButtonComponentProps = React.ComponentProps<typeof Button>;\n\nexport interface LinkItem {\n title: string,\n href?: string,\n hidden?: boolean,\n onClick?: ButtonComponentProps['onClick'],\n variant?: ButtonComponentProps['variant'],\n size?: ButtonComponentProps['size'],\n id?: ButtonComponentProps['id'],\n className?: ButtonComponentProps['className'],\n}\n\nexport interface LinkListProps extends HTMLAttributes<HTMLDivElement> {\n title: string,\n links?: LinkItem[],\n}\n\nconst LinkList: React.FC<LinkListProps> = ({\n title: listTitle,\n links = [],\n ...props\n}) => (\n <div className=\"d-flex flex-column flex-fill\" {...props}>\n <h2 className=\"footer__section-title text-white mb-2 small\">{listTitle}</h2>\n <ul className=\"list-unstyled p-0 m-0 footer__links\">\n {links.map(({ title, href, hidden, ...linkProps }) => {\n if (hidden) {\n return null;\n }\n\n if (!href) {\n return (\n <li key={title}>\n <Button {...linkProps}>{title}</Button>\n </li>\n );\n }\n\n return (\n <li key={`${href}${title}`}>\n <a className=\"text-white x-small\" href={href}>\n {title}\n </a>\n </li>\n );\n })}\n </ul>\n </div>\n);\n\nexport default LinkList;\n"]}
1
+ {"version":3,"file":"LinkList.js","sourceRoot":"","sources":["../../../src/widgets/LearnerDashboardFooter/LinkList.tsx"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAsB1C,MAAM,QAAQ,GAA4B,CAAC,EAM1C,EAAE,EAAE;QANsC,EACzC,KAAK,EAAE,SAAS,EAChB,KAAK,GAAG,EAAE,EACV,WAAW,EACX,iBAAiB,OAElB,EADI,KAAK,cALiC,sDAM1C,CADS;IACJ,OAAA,CACJ,6BAAK,SAAS,EAAC,8BAA8B,IAAK,KAAK,eACrD,aAAI,SAAS,EAAC,6CAA6C,YAAE,SAAS,GAAM,EAC5E,aAAI,SAAS,EAAC,qCAAqC,YAChD,KAAK,CAAC,GAAG,CAAC,CAAC,EAAqC,EAAE,EAAE;wBAAzC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,OAAgB,EAAX,SAAS,cAAnC,2BAAqC,CAAF;oBAC7C,IAAI,MAAM,EAAE,CAAC;wBACX,OAAO,IAAI,CAAC;oBACd,CAAC;oBAED,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,OAAO,CACL,uBACE,KAAC,MAAM,oBAAK,SAAS,cAAG,KAAK,IAAU,IADhC,KAAK,CAET,CACN,CAAC;oBACJ,CAAC;oBAED,MAAM,WAAW,GAAG,GAAG,EAAE;wBACvB,IAAI,WAAW,IAAI,iBAAiB,EAAE,CAAC;4BACrC,WAAW,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;wBACvC,CAAC;oBACH,CAAC,CAAC;oBAEF,OAAO,CACL,uBACE,YACE,SAAS,EAAC,oBAAoB,EAC9B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,WAAW,YAEnB,KAAK,GACJ,IAPG,GAAG,IAAI,GAAG,KAAK,EAAE,CAQrB,CACN,CAAC;gBACJ,CAAC,CAAC,GACC,KACD,CACP,CAAA;CAAA,CAAC;AAEF,eAAe,QAAQ,CAAC","sourcesContent":["import React, { HTMLAttributes } from 'react';\nimport { Button } from '@openedx/paragon';\n\ntype ButtonComponentProps = React.ComponentProps<typeof Button>;\n\nexport interface LinkItem {\n title: string,\n href?: string,\n hidden?: boolean,\n onClick?: ButtonComponentProps['onClick'],\n variant?: ButtonComponentProps['variant'],\n size?: ButtonComponentProps['size'],\n id?: ButtonComponentProps['id'],\n className?: ButtonComponentProps['className'],\n}\n\nexport interface LinkListProps extends HTMLAttributes<HTMLDivElement> {\n title: string,\n links?: LinkItem[],\n onLinkClick?: (href: string, eventName: string) => void,\n trackingEventName?: string,\n}\n\nconst LinkList: React.FC<LinkListProps> = ({\n title: listTitle,\n links = [],\n onLinkClick,\n trackingEventName,\n ...props\n}) => (\n <div className=\"d-flex flex-column flex-fill\" {...props}>\n <h2 className=\"footer__section-title text-white mb-2 small\">{listTitle}</h2>\n <ul className=\"list-unstyled p-0 m-0 footer__links\">\n {links.map(({ title, href, hidden, ...linkProps }) => {\n if (hidden) {\n return null;\n }\n\n if (!href) {\n return (\n <li key={title}>\n <Button {...linkProps}>{title}</Button>\n </li>\n );\n }\n\n const handleClick = () => {\n if (onLinkClick && trackingEventName) {\n onLinkClick(href, trackingEventName);\n }\n };\n\n return (\n <li key={`${href}${title}`}>\n <a\n className=\"text-white x-small\"\n href={href}\n onClick={handleClick}\n >\n {title}\n </a>\n </li>\n );\n })}\n </ul>\n </div>\n);\n\nexport default LinkList;\n"]}
@@ -4,10 +4,8 @@ import facebook from '../../assets/facebook.svg';
4
4
  import twitter from '../../assets/twitter.svg';
5
5
  import linkedin from '../../assets/linkedin.svg';
6
6
  import reddit from '../../assets/reddit.svg';
7
- import { sendTrackEvent } from '@openedx/frontend-base';
8
- const EVENT_NAMES = {
9
- FOOTER_LINK: 'edx.bi.footer.link',
10
- };
7
+ import { createEventTracker } from '../../data/services/segment/utils';
8
+ import { categories, eventNames } from '../../tracking/constants';
11
9
  const socialIconLinks = [
12
10
  {
13
11
  title: 'Facebook',
@@ -31,15 +29,10 @@ const socialIconLinks = [
31
29
  },
32
30
  ];
33
31
  export default function SocialIconLinks() {
34
- const externalLinkClickHandler = (event) => {
35
- const label = event.currentTarget.getAttribute('href');
36
- const eventName = EVENT_NAMES.FOOTER_LINK;
37
- const properties = {
38
- category: 'outbound_link',
39
- label,
40
- };
41
- sendTrackEvent(eventName, properties);
32
+ const handleSocialLinkClick = (event) => {
33
+ const platform = event.currentTarget.getAttribute('title');
34
+ createEventTracker(eventNames.footerSocialLinkClicked, { category: categories.footer, label: platform })();
42
35
  };
43
- return (_jsx("ul", { className: "mb-0 d-flex gap-3 list-unstyled", children: socialIconLinks.map(({ title, url, icon }) => (_jsx("li", { children: _jsx("a", { href: url, title: title, "aria-label": title, target: "_blank", rel: "noopener noreferrer", onClick: externalLinkClickHandler, className: "text-decoration-none text-white", children: _jsx("img", { src: icon, alt: title, "aria-hidden": "true" }) }) }, url))) }));
36
+ return (_jsx("ul", { className: "mb-0 d-flex gap-3 list-unstyled", children: socialIconLinks.map(({ title, url, icon }) => (_jsx("li", { children: _jsx("a", { href: url, title: title, "aria-label": title, target: "_blank", rel: "noopener noreferrer", onClick: handleSocialLinkClick, className: "text-decoration-none text-white", children: _jsx("img", { src: icon, alt: title, "aria-hidden": "true" }) }) }, url))) }));
44
37
  }
45
38
  //# sourceMappingURL=SocialLinks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SocialLinks.js","sourceRoot":"","sources":["../../../src/widgets/LearnerDashboardFooter/SocialLinks.tsx"],"names":[],"mappings":";AACA,OAAO,cAAc,CAAC;AAEtB,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AACjD,OAAO,OAAO,MAAM,0BAA0B,CAAC;AAC/C,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AACjD,OAAO,MAAM,MAAM,yBAAyB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,WAAW,GAAG;IAClB,WAAW,EAAE,oBAAoB;CAClC,CAAC;AAQF,MAAM,eAAe,GAAqB;IACxC;QACE,KAAK,EAAE,UAAU;QACjB,GAAG,EAAE,oCAAoC;QACzC,IAAI,EAAE,QAAQ;KACf;IACD;QACE,KAAK,EAAE,sBAAsB;QAC7B,GAAG,EAAE,+BAA+B;QACpC,IAAI,EAAE,OAAO;KACd;IACD;QACE,KAAK,EAAE,UAAU;QACjB,GAAG,EAAE,sCAAsC;QAC3C,IAAI,EAAE,QAAQ;KACf;IACD;QACE,KAAK,EAAE,QAAQ;QACf,GAAG,EAAE,8BAA8B;QACnC,IAAI,EAAE,MAAM;KACb;CACF,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,eAAe;IACrC,MAAM,wBAAwB,GAAG,CAC/B,KAA0C,EAC1C,EAAE;QACF,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAEvD,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC;QAE1C,MAAM,UAAU,GAAG;YACjB,QAAQ,EAAE,eAAe;YACzB,KAAK;SACN,CAAC;QAEF,cAAc,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC,CAAC;IAEF,OAAO,CACL,aAAI,SAAS,EAAC,iCAAiC,YAC5C,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAC7C,uBACE,YACE,IAAI,EAAE,GAAG,EACT,KAAK,EAAE,KAAK,gBACA,KAAK,EACjB,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,OAAO,EAAE,wBAAwB,EACjC,SAAS,EAAC,iCAAiC,YAE3C,cAAK,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,iBAAc,MAAM,GAAG,GAC/C,IAXG,GAAG,CAYP,CACN,CAAC,GACC,CACN,CAAC;AACJ,CAAC","sourcesContent":["import React from 'react';\nimport './index.scss';\n\nimport facebook from '../../assets/facebook.svg';\nimport twitter from '../../assets/twitter.svg';\nimport linkedin from '../../assets/linkedin.svg';\nimport reddit from '../../assets/reddit.svg';\nimport { sendTrackEvent } from '@openedx/frontend-base';\n\nconst EVENT_NAMES = {\n FOOTER_LINK: 'edx.bi.footer.link',\n};\n\ninterface SocialIconLink {\n title: string,\n url: string,\n icon: string,\n}\n\nconst socialIconLinks: SocialIconLink[] = [\n {\n title: 'Facebook',\n url: 'https://www.facebook.com/EdxOnline',\n icon: facebook,\n },\n {\n title: 'X (formerly Twitter)',\n url: 'https://twitter.com/edXOnline',\n icon: twitter,\n },\n {\n title: 'LinkedIn',\n url: 'https://www.linkedin.com/company/edx',\n icon: linkedin,\n },\n {\n title: 'Reddit',\n url: 'https://www.reddit.com/r/edx',\n icon: reddit,\n },\n];\n\nexport default function SocialIconLinks() {\n const externalLinkClickHandler = (\n event: React.MouseEvent<HTMLAnchorElement>,\n ) => {\n const label = event.currentTarget.getAttribute('href');\n\n const eventName = EVENT_NAMES.FOOTER_LINK;\n\n const properties = {\n category: 'outbound_link',\n label,\n };\n\n sendTrackEvent(eventName, properties);\n };\n\n return (\n <ul className=\"mb-0 d-flex gap-3 list-unstyled\">\n {socialIconLinks.map(({ title, url, icon }) => (\n <li key={url}>\n <a\n href={url}\n title={title}\n aria-label={title}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={externalLinkClickHandler}\n className=\"text-decoration-none text-white\"\n >\n <img src={icon} alt={title} aria-hidden=\"true\" />\n </a>\n </li>\n ))}\n </ul>\n );\n}\n"]}
1
+ {"version":3,"file":"SocialLinks.js","sourceRoot":"","sources":["../../../src/widgets/LearnerDashboardFooter/SocialLinks.tsx"],"names":[],"mappings":";AACA,OAAO,cAAc,CAAC;AAEtB,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AACjD,OAAO,OAAO,MAAM,0BAA0B,CAAC;AAC/C,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AACjD,OAAO,MAAM,MAAM,yBAAyB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAQlE,MAAM,eAAe,GAAqB;IACxC;QACE,KAAK,EAAE,UAAU;QACjB,GAAG,EAAE,oCAAoC;QACzC,IAAI,EAAE,QAAQ;KACf;IACD;QACE,KAAK,EAAE,sBAAsB;QAC7B,GAAG,EAAE,+BAA+B;QACpC,IAAI,EAAE,OAAO;KACd;IACD;QACE,KAAK,EAAE,UAAU;QACjB,GAAG,EAAE,sCAAsC;QAC3C,IAAI,EAAE,QAAQ;KACf;IACD;QACE,KAAK,EAAE,QAAQ;QACf,GAAG,EAAE,8BAA8B;QACnC,IAAI,EAAE,MAAM;KACb;CACF,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,eAAe;IACrC,MAAM,qBAAqB,GAAG,CAC5B,KAA0C,EAC1C,EAAE;QACF,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC3D,kBAAkB,CAChB,UAAU,CAAC,uBAAuB,EAClC,EAAE,QAAQ,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CACjD,EAAE,CAAC;IACN,CAAC,CAAC;IAEF,OAAO,CACL,aAAI,SAAS,EAAC,iCAAiC,YAC5C,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAC7C,uBACE,YACE,IAAI,EAAE,GAAG,EACT,KAAK,EAAE,KAAK,gBACA,KAAK,EACjB,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,OAAO,EAAE,qBAAqB,EAC9B,SAAS,EAAC,iCAAiC,YAE3C,cAAK,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,iBAAc,MAAM,GAAG,GAC/C,IAXG,GAAG,CAYP,CACN,CAAC,GACC,CACN,CAAC;AACJ,CAAC","sourcesContent":["import React from 'react';\nimport './index.scss';\n\nimport facebook from '../../assets/facebook.svg';\nimport twitter from '../../assets/twitter.svg';\nimport linkedin from '../../assets/linkedin.svg';\nimport reddit from '../../assets/reddit.svg';\nimport { createEventTracker } from '../../data/services/segment/utils';\nimport { categories, eventNames } from '../../tracking/constants';\n\ninterface SocialIconLink {\n title: string,\n url: string,\n icon: string,\n}\n\nconst socialIconLinks: SocialIconLink[] = [\n {\n title: 'Facebook',\n url: 'https://www.facebook.com/EdxOnline',\n icon: facebook,\n },\n {\n title: 'X (formerly Twitter)',\n url: 'https://twitter.com/edXOnline',\n icon: twitter,\n },\n {\n title: 'LinkedIn',\n url: 'https://www.linkedin.com/company/edx',\n icon: linkedin,\n },\n {\n title: 'Reddit',\n url: 'https://www.reddit.com/r/edx',\n icon: reddit,\n },\n];\n\nexport default function SocialIconLinks() {\n const handleSocialLinkClick = (\n event: React.MouseEvent<HTMLAnchorElement>,\n ) => {\n const platform = event.currentTarget.getAttribute('title');\n createEventTracker(\n eventNames.footerSocialLinkClicked,\n { category: categories.footer, label: platform }\n )();\n };\n\n return (\n <ul className=\"mb-0 d-flex gap-3 list-unstyled\">\n {socialIconLinks.map(({ title, url, icon }) => (\n <li key={url}>\n <a\n href={url}\n title={title}\n aria-label={title}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={handleSocialLinkClick}\n className=\"text-decoration-none text-white\"\n >\n <img src={icon} alt={title} aria-hidden=\"true\" />\n </a>\n </li>\n ))}\n </ul>\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edx/frontend-app-subscription-learner-dashboard",
3
- "version": "1.61.0",
3
+ "version": "1.62.0",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",