@edx/frontend-app-subscription-manage 1.17.0 → 1.18.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.
@@ -4,12 +4,33 @@ import { useIntl } from '@openedx/frontend-base';
4
4
  import { formatDisplayDate } from '../../utils/formatDate';
5
5
  import { resolvePlanLabel } from '../../utils/subscriptionView';
6
6
  import messages from '../messages';
7
+ import { getCommonTrackingProps } from '../../tracking/trackingContext';
8
+ const isRenewEligible = () => {
9
+ const { paymentMethod, subscription_status, isUserSuspended } = getCommonTrackingProps();
10
+ console.log({ paymentMethod, subscription_status, isUserSuspended });
11
+ switch (paymentMethod === null || paymentMethod === void 0 ? void 0 : paymentMethod.toLowerCase()) {
12
+ case 'stripe':
13
+ return (subscription_status === 'RENEWAL_FAILED'
14
+ || subscription_status === 'CANCEL_PENDING');
15
+ case 'paypal':
16
+ // User paused subscription or 3 renewal failures
17
+ if (isUserSuspended)
18
+ return true;
19
+ // First renewal failure, grace period applies
20
+ if (subscription_status === 'RENEWAL_FAILED')
21
+ return false;
22
+ return false;
23
+ default:
24
+ return false;
25
+ }
26
+ };
7
27
  export const RenewBanner = ({ expireDate, onRenew, }) => {
8
28
  const { formatMessage } = useIntl();
9
29
  if (!expireDate) {
10
30
  return null;
11
31
  }
12
- return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "manage-renew-banner__content", children: [_jsx("h2", { className: "manage-renew-banner__title h3 font-weight-bold text-primary-500 mb-2", children: formatMessage(messages['manage.canceled.bannerTitle']) }), _jsx("p", { className: "manage-renew-banner__body text-primary-500 mb-0", children: formatMessage(messages['manage.canceled.bannerBody'], { date: expireDate }) })] }), _jsx("div", { className: "manage-renew-banner__actions", children: _jsx(Button, { className: "manage-btn manage-btn--brand", onClick: onRenew, children: formatMessage(messages['manage.canceled.renew']) }) })] }));
32
+ const showRenewButton = isRenewEligible();
33
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "manage-renew-banner__content", children: [_jsx("h2", { className: "manage-renew-banner__title h3 font-weight-bold text-primary-500 mb-2", children: formatMessage(messages['manage.canceled.bannerTitle']) }), _jsx("p", { className: "manage-renew-banner__body text-primary-500 mb-0", children: formatMessage(messages['manage.canceled.bannerBody'], { date: expireDate }) })] }), _jsx("div", { className: "manage-renew-banner__actions", children: showRenewButton && (_jsx(Button, { className: "manage-btn manage-btn--brand", onClick: onRenew, children: formatMessage(messages['manage.canceled.renew']) })) })] }));
13
34
  };
14
35
  const CanceledSubscription = ({ subscriber, onRenew, }) => {
15
36
  var _a, _b;
@@ -17,11 +38,12 @@ const CanceledSubscription = ({ subscriber, onRenew, }) => {
17
38
  const plan = resolvePlanLabel(subscriber);
18
39
  const sinceDate = formatDisplayDate(subscriber === null || subscriber === void 0 ? void 0 : subscriber.subscriptionStartDate);
19
40
  const canceledOn = formatDisplayDate((_b = (_a = subscriber === null || subscriber === void 0 ? void 0 : subscriber.canceledAt) !== null && _a !== void 0 ? _a : subscriber === null || subscriber === void 0 ? void 0 : subscriber.subscriptionEndDate) !== null && _b !== void 0 ? _b : subscriber === null || subscriber === void 0 ? void 0 : subscriber.currentPeriodEnd);
41
+ const showRenewButton = isRenewEligible();
20
42
  return (_jsxs("section", { className: "manage-section mt-4", children: [_jsx("h2", { className: "manage-section__title h3 font-weight-bold text-primary-500 mb-1", children: formatMessage(messages['manage.active.heading']) }), sinceDate && (_jsx("p", { className: "manage-section__subtitle text-gray-700 mb-3", children: formatMessage(messages['manage.active.since'], { date: sinceDate }) })), _jsxs("div", { className: "manage-card d-flex flex-column flex-md-row align-items-md-center justify-content-md-between bg-white border p-4 rounded", children: [_jsxs("div", { className: "manage-card__content", children: [_jsxs("div", { className: "manage-card__status-row d-flex align-items-center mb-1", children: [_jsx("span", { className: "manage-card__status-badge manage-card__status-badge--cancel flex-shrink-0", "aria-hidden": "true" }), _jsx("span", { className: "manage-card__status-label font-weight-bold text-primary-500", children: formatMessage(plan === 'annual'
21
43
  ? messages['manage.canceled.statusAnnual']
22
44
  : messages['manage.canceled.statusMonthly']) })] }), _jsx("p", { className: "manage-card__body text-gray-700 mb-0", children: canceledOn
23
45
  ? formatMessage(messages['manage.canceled.noPayments'], { date: canceledOn })
24
- : formatMessage(messages['manage.canceled.noPaymentsNoDate']) })] }), _jsx("div", { className: "manage-card__actions d-flex flex-wrap align-items-center flex-shrink-0", children: _jsx(Button, { className: "manage-btn manage-btn--brand", onClick: onRenew, children: formatMessage(messages['manage.canceled.renew']) }) })] })] }));
46
+ : formatMessage(messages['manage.canceled.noPaymentsNoDate']) })] }), _jsx("div", { className: "manage-card__actions d-flex flex-wrap align-items-center flex-shrink-0", children: showRenewButton && (_jsx(Button, { className: "manage-btn manage-btn--brand", onClick: onRenew, children: formatMessage(messages['manage.canceled.renew']) })) })] })] }));
25
47
  };
26
48
  export default CanceledSubscription;
27
49
  //# sourceMappingURL=CanceledSubscription.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CanceledSubscription.js","sourceRoot":"","sources":["../../../src/components/CanceledSubscription/CanceledSubscription.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Button } from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\n\nimport type { CurrentUserSubscriberResult } from '../../types';\nimport { formatDisplayDate } from '../../utils/formatDate';\nimport { resolvePlanLabel } from '../../utils/subscriptionView';\nimport messages from '../messages';\n\ninterface RenewActions {\n onRenew: () => void,\n}\n\ninterface CanceledSubscriptionProps extends RenewActions {\n subscriber: CurrentUserSubscriberResult | null,\n}\n\nexport const RenewBanner: React.FC<RenewActions & { expireDate: string | null }> = ({\n expireDate,\n onRenew,\n}) => {\n const { formatMessage } = useIntl();\n\n if (!expireDate) {\n return null;\n }\n\n return (\n <>\n <div className=\"manage-renew-banner__content\">\n <h2 className=\"manage-renew-banner__title h3 font-weight-bold text-primary-500 mb-2\">\n {formatMessage(messages['manage.canceled.bannerTitle'])}\n </h2>\n <p className=\"manage-renew-banner__body text-primary-500 mb-0\">\n {formatMessage(messages['manage.canceled.bannerBody'], { date: expireDate })}\n </p>\n </div>\n <div className=\"manage-renew-banner__actions\">\n <Button\n className=\"manage-btn manage-btn--brand\"\n onClick={onRenew}\n >\n {formatMessage(messages['manage.canceled.renew'])}\n </Button>\n </div>\n </>\n );\n};\n\nconst CanceledSubscription: React.FC<CanceledSubscriptionProps> = ({\n subscriber,\n onRenew,\n}) => {\n const { formatMessage } = useIntl();\n const plan = resolvePlanLabel(subscriber);\n const sinceDate = formatDisplayDate(subscriber?.subscriptionStartDate);\n const canceledOn = formatDisplayDate(\n subscriber?.canceledAt ?? subscriber?.subscriptionEndDate ?? subscriber?.currentPeriodEnd,\n );\n\n return (\n <section className=\"manage-section mt-4\">\n <h2 className=\"manage-section__title h3 font-weight-bold text-primary-500 mb-1\">\n {formatMessage(messages['manage.active.heading'])}\n </h2>\n {sinceDate && (\n <p className=\"manage-section__subtitle text-gray-700 mb-3\">\n {formatMessage(messages['manage.active.since'], { date: sinceDate })}\n </p>\n )}\n\n <div className=\"manage-card d-flex flex-column flex-md-row align-items-md-center justify-content-md-between bg-white border p-4 rounded\">\n <div className=\"manage-card__content\">\n <div className=\"manage-card__status-row d-flex align-items-center mb-1\">\n <span className=\"manage-card__status-badge manage-card__status-badge--cancel flex-shrink-0\" aria-hidden=\"true\" />\n <span className=\"manage-card__status-label font-weight-bold text-primary-500\">\n {formatMessage(\n plan === 'annual'\n ? messages['manage.canceled.statusAnnual']\n : messages['manage.canceled.statusMonthly'],\n )}\n </span>\n </div>\n <p className=\"manage-card__body text-gray-700 mb-0\">\n {canceledOn\n ? formatMessage(messages['manage.canceled.noPayments'], { date: canceledOn })\n : formatMessage(messages['manage.canceled.noPaymentsNoDate'])}\n </p>\n </div>\n <div className=\"manage-card__actions d-flex flex-wrap align-items-center flex-shrink-0\">\n <Button\n className=\"manage-btn manage-btn--brand\"\n onClick={onRenew}\n >\n {formatMessage(messages['manage.canceled.renew'])}\n </Button>\n </div>\n </div>\n </section>\n );\n};\n\nexport default CanceledSubscription;\n"]}
1
+ {"version":3,"file":"CanceledSubscription.js","sourceRoot":"","sources":["../../../src/components/CanceledSubscription/CanceledSubscription.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Button } from '@openedx/paragon';\nimport { useIntl } from '@openedx/frontend-base';\n\nimport type { CurrentUserSubscriberResult } from '../../types';\nimport { formatDisplayDate } from '../../utils/formatDate';\nimport { resolvePlanLabel } from '../../utils/subscriptionView';\nimport messages from '../messages';\nimport { getCommonTrackingProps } from '@src/tracking/trackingContext';\n\nconst isRenewEligible = () => {\n const { paymentMethod, subscription_status, isUserSuspended } = getCommonTrackingProps();\n console.log({ paymentMethod, subscription_status, isUserSuspended });\n switch (paymentMethod?.toLowerCase()) {\n case 'stripe':\n return (\n subscription_status === 'RENEWAL_FAILED'\n || subscription_status === 'CANCEL_PENDING'\n );\n\n case 'paypal':\n // User paused subscription or 3 renewal failures\n if (isUserSuspended)\n return true;\n\n // First renewal failure, grace period applies\n if (subscription_status === 'RENEWAL_FAILED')\n return false;\n\n return false;\n\n default:\n return false;\n }\n};\n\ninterface RenewActions {\n onRenew: () => void,\n}\n\ninterface CanceledSubscriptionProps extends RenewActions {\n subscriber: CurrentUserSubscriberResult | null,\n}\n\nexport const RenewBanner: React.FC<RenewActions & { expireDate: string | null }> = ({\n expireDate,\n onRenew,\n}) => {\n const { formatMessage } = useIntl();\n if (!expireDate) {\n return null;\n }\n\n const showRenewButton = isRenewEligible();\n\n return (\n <>\n <div className=\"manage-renew-banner__content\">\n <h2 className=\"manage-renew-banner__title h3 font-weight-bold text-primary-500 mb-2\">\n {formatMessage(messages['manage.canceled.bannerTitle'])}\n </h2>\n <p className=\"manage-renew-banner__body text-primary-500 mb-0\">\n {formatMessage(messages['manage.canceled.bannerBody'], { date: expireDate })}\n </p>\n </div>\n <div className=\"manage-renew-banner__actions\">\n {showRenewButton && (\n <Button\n className=\"manage-btn manage-btn--brand\"\n onClick={onRenew}\n >\n {formatMessage(messages['manage.canceled.renew'])}\n </Button>\n )}\n </div>\n </>\n );\n};\n\nconst CanceledSubscription: React.FC<CanceledSubscriptionProps> = ({\n subscriber,\n onRenew,\n}) => {\n const { formatMessage } = useIntl();\n const plan = resolvePlanLabel(subscriber);\n const sinceDate = formatDisplayDate(subscriber?.subscriptionStartDate);\n const canceledOn = formatDisplayDate(\n subscriber?.canceledAt ?? subscriber?.subscriptionEndDate ?? subscriber?.currentPeriodEnd,\n );\n const showRenewButton = isRenewEligible();\n\n return (\n <section className=\"manage-section mt-4\">\n <h2 className=\"manage-section__title h3 font-weight-bold text-primary-500 mb-1\">\n {formatMessage(messages['manage.active.heading'])}\n </h2>\n {sinceDate && (\n <p className=\"manage-section__subtitle text-gray-700 mb-3\">\n {formatMessage(messages['manage.active.since'], { date: sinceDate })}\n </p>\n )}\n\n <div className=\"manage-card d-flex flex-column flex-md-row align-items-md-center justify-content-md-between bg-white border p-4 rounded\">\n <div className=\"manage-card__content\">\n <div className=\"manage-card__status-row d-flex align-items-center mb-1\">\n <span className=\"manage-card__status-badge manage-card__status-badge--cancel flex-shrink-0\" aria-hidden=\"true\" />\n <span className=\"manage-card__status-label font-weight-bold text-primary-500\">\n {formatMessage(\n plan === 'annual'\n ? messages['manage.canceled.statusAnnual']\n : messages['manage.canceled.statusMonthly'],\n )}\n </span>\n </div>\n <p className=\"manage-card__body text-gray-700 mb-0\">\n {canceledOn\n ? formatMessage(messages['manage.canceled.noPayments'], { date: canceledOn })\n : formatMessage(messages['manage.canceled.noPaymentsNoDate'])}\n </p>\n </div>\n <div className=\"manage-card__actions d-flex flex-wrap align-items-center flex-shrink-0\">\n {showRenewButton && (\n <Button\n className=\"manage-btn manage-btn--brand\"\n onClick={onRenew}\n >\n {formatMessage(messages['manage.canceled.renew'])}\n </Button>\n )}\n </div>\n </div>\n </section>\n );\n};\n\nexport default CanceledSubscription;\n"]}
@@ -11,6 +11,7 @@ export interface CommonTrackingProps {
11
11
  experimentation?: string | null;
12
12
  device_type?: string | null;
13
13
  opt_in?: boolean | null;
14
+ isUserSuspended?: boolean | null | undefined;
14
15
  }
15
16
  export declare const setCommonTrackingProps: (props: CommonTrackingProps) => void;
16
17
  export declare const getCommonTrackingProps: () => CommonTrackingProps;
@@ -6,7 +6,7 @@ export const setCommonTrackingProps = (props) => {
6
6
  export const getCommonTrackingProps = () => commonProps;
7
7
  // Single place that maps the subs/init API response -> tracking props
8
8
  export const mapSubsInitToTrackingProps = (data) => {
9
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
9
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
10
10
  return ({
11
11
  free_trial_status: (_a = data === null || data === void 0 ? void 0 : data.userSubscription) === null || _a === void 0 ? void 0 : _a.trialActive,
12
12
  subscription_status: (_b = data === null || data === void 0 ? void 0 : data.userSubscription) === null || _b === void 0 ? void 0 : _b.status,
@@ -20,6 +20,7 @@ export const mapSubsInitToTrackingProps = (data) => {
20
20
  experimentation: '',
21
21
  device_type: '',
22
22
  opt_in: (_p = data === null || data === void 0 ? void 0 : data.opt_in) !== null && _p !== void 0 ? _p : null,
23
+ isUserSuspended: (_r = (_q = data === null || data === void 0 ? void 0 : data.userSubscription) === null || _q === void 0 ? void 0 : _q.tIsUserSuspended) !== null && _r !== void 0 ? _r : null,
23
24
  });
24
25
  };
25
26
  //# sourceMappingURL=trackingContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"trackingContext.js","sourceRoot":"","sources":["../../src/tracking/trackingContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAiB9D,IAAI,WAAW,GAAwB,EAAE,CAAC;AAE1C,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAA0B,EAAE,EAAE;IACnE,WAAW,mCAAQ,WAAW,GAAK,KAAK,CAAE,CAAC;AAC7C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAwB,EAAE,CAAC,WAAW,CAAC;AAE7E,sEAAsE;AACtE,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,IAAS,EAAuB,EAAE;;IAAC,OAAA,CAAC;QAC7E,iBAAiB,EAAE,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,0CAAE,WAAW;QACtD,mBAAmB,EAAE,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,0CAAE,MAAM;QACnD,iBAAiB,EAAE,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,0CAAE,gBAAgB;QAC3D,uBAAuB,EAAE,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,0CAAE,qBAAqB,mCAAI,IAAI;QAC9E,qBAAqB,EAAE,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,0CAAE,mBAAmB,mCAAI,IAAI;QAC1E,kBAAkB,EAAE,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,0CAAE,gBAAgB,mCAAI,IAAI;QACpE,aAAa,EAAE,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,0CAAE,aAAa,mCAAI,IAAI;QAC5D,UAAU,EAAE,MAAA,MAAA,oBAAoB,EAAE,0CAAE,KAAK,mCAAI,IAAI;QACjD,UAAU,EAAE,EAAE;QACd,eAAe,EAAE,EAAE;QACnB,WAAW,EAAE,EAAE;QACf,MAAM,EAAE,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,mCAAI,IAAI;KAC7B,CAAC,CAAA;CAAA,CAAC","sourcesContent":["import { getAuthenticatedUser } from '@openedx/frontend-base';\n\nexport interface CommonTrackingProps {\n free_trial_status?: string,\n subscription_status?: string,\n subscription_tier?: string,\n subscription_start_date?: string | null,\n subscription_end_date?: string | null,\n current_period_end?: string | null,\n paymentMethod?: string | null,\n user_email?: string | null,\n session_id?: string | null,\n experimentation?: string | null,\n device_type?: string | null,\n opt_in?: boolean | null,\n}\n\nlet commonProps: CommonTrackingProps = {};\n\nexport const setCommonTrackingProps = (props: CommonTrackingProps) => {\n commonProps = { ...commonProps, ...props };\n};\n\nexport const getCommonTrackingProps = (): CommonTrackingProps => commonProps;\n\n// Single place that maps the subs/init API response -> tracking props\nexport const mapSubsInitToTrackingProps = (data: any): CommonTrackingProps => ({\n free_trial_status: data?.userSubscription?.trialActive,\n subscription_status: data?.userSubscription?.status,\n subscription_tier: data?.userSubscription?.billingFrequency,\n subscription_start_date: data?.userSubscription?.subscriptionStartDate ?? null,\n subscription_end_date: data?.userSubscription?.subscriptionEndDate ?? null,\n current_period_end: data?.userSubscription?.currentPeriodEnd ?? null,\n paymentMethod: data?.userSubscription?.paymentMethod ?? null,\n user_email: getAuthenticatedUser()?.email ?? null,\n session_id: '',\n experimentation: '',\n device_type: '',\n opt_in: data?.opt_in ?? null,\n});\n"]}
1
+ {"version":3,"file":"trackingContext.js","sourceRoot":"","sources":["../../src/tracking/trackingContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAkB9D,IAAI,WAAW,GAAwB,EAAE,CAAC;AAE1C,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAA0B,EAAE,EAAE;IACnE,WAAW,mCAAQ,WAAW,GAAK,KAAK,CAAE,CAAC;AAC7C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAwB,EAAE,CAAC,WAAW,CAAC;AAE7E,sEAAsE;AACtE,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,IAAS,EAAuB,EAAE;;IAAC,OAAA,CAAC;QAC7E,iBAAiB,EAAE,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,0CAAE,WAAW;QACtD,mBAAmB,EAAE,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,0CAAE,MAAM;QACnD,iBAAiB,EAAE,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,0CAAE,gBAAgB;QAC3D,uBAAuB,EAAE,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,0CAAE,qBAAqB,mCAAI,IAAI;QAC9E,qBAAqB,EAAE,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,0CAAE,mBAAmB,mCAAI,IAAI;QAC1E,kBAAkB,EAAE,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,0CAAE,gBAAgB,mCAAI,IAAI;QACpE,aAAa,EAAE,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,0CAAE,aAAa,mCAAI,IAAI;QAC5D,UAAU,EAAE,MAAA,MAAA,oBAAoB,EAAE,0CAAE,KAAK,mCAAI,IAAI;QACjD,UAAU,EAAE,EAAE;QACd,eAAe,EAAE,EAAE;QACnB,WAAW,EAAE,EAAE;QACf,MAAM,EAAE,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,mCAAI,IAAI;QAC5B,eAAe,EAAE,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,0CAAE,gBAAgB,mCAAI,IAAI;KAClE,CAAC,CAAA;CAAA,CAAC","sourcesContent":["import { getAuthenticatedUser } from '@openedx/frontend-base';\n\nexport interface CommonTrackingProps {\n free_trial_status?: string,\n subscription_status?: string,\n subscription_tier?: string,\n subscription_start_date?: string | null,\n subscription_end_date?: string | null,\n current_period_end?: string | null,\n paymentMethod?: string | null,\n user_email?: string | null,\n session_id?: string | null,\n experimentation?: string | null,\n device_type?: string | null,\n opt_in?: boolean | null,\n isUserSuspended?: boolean | null | undefined,\n}\n\nlet commonProps: CommonTrackingProps = {};\n\nexport const setCommonTrackingProps = (props: CommonTrackingProps) => {\n commonProps = { ...commonProps, ...props };\n};\n\nexport const getCommonTrackingProps = (): CommonTrackingProps => commonProps;\n\n// Single place that maps the subs/init API response -> tracking props\nexport const mapSubsInitToTrackingProps = (data: any): CommonTrackingProps => ({\n free_trial_status: data?.userSubscription?.trialActive,\n subscription_status: data?.userSubscription?.status,\n subscription_tier: data?.userSubscription?.billingFrequency,\n subscription_start_date: data?.userSubscription?.subscriptionStartDate ?? null,\n subscription_end_date: data?.userSubscription?.subscriptionEndDate ?? null,\n current_period_end: data?.userSubscription?.currentPeriodEnd ?? null,\n paymentMethod: data?.userSubscription?.paymentMethod ?? null,\n user_email: getAuthenticatedUser()?.email ?? null,\n session_id: '',\n experimentation: '',\n device_type: '',\n opt_in: data?.opt_in ?? null,\n isUserSuspended: data?.userSubscription?.tIsUserSuspended ?? null,\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edx/frontend-app-subscription-manage",
3
- "version": "1.17.0",
3
+ "version": "1.18.0",
4
4
  "description": "Subscription Manage Frontend application",
5
5
  "repository": {
6
6
  "type": "git",