@anas_hameed/edly-saas-widget 0.2.31 → 0.2.42

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.
@@ -15,6 +15,7 @@ const FooterWidget = () => {
15
15
  const [footerData, setFooterData] = (0, _react.useState)('');
16
16
  const config = (0, _frontendPlatform.getConfig)();
17
17
  (0, _react.useEffect)(() => {
18
+ // TODO: remove this with design token PR. Use primary color variable in SaaS instead
18
19
  document.documentElement.style.setProperty('--primary-color', config?.COLORS?.primary || '#de2025');
19
20
  const scrollBtn = document.getElementById('scrollToTop');
20
21
  if (scrollBtn) {
@@ -62,7 +63,7 @@ const FooterWidget = () => {
62
63
  }
63
64
  };
64
65
  fetchData();
65
- }, [config]);
66
+ }, [config.MARKETING_SITE_BASE_URL]);
66
67
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
67
68
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactHelmet.Helmet, {
68
69
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)("link", {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_frontendPlatform","require","_react","_dompurify","_interopRequireDefault","_reactHelmet","_jsxRuntime","e","__esModule","default","FooterWidget","footerData","setFooterData","useState","config","getConfig","useEffect","document","documentElement","style","setProperty","COLORS","primary","scrollBtn","getElementById","scrollToTop","window","scrollTo","top","behavior","toggleVisibility","scrollY","classList","add","remove","addEventListener","removeEventListener","removeProperty","fetchData","response","fetch","MARKETING_SITE_BASE_URL","credentials","ok","Error","status","jsonData","json","cleanHtml","DOMPurify","sanitize","ADD_ATTR","error","console","jsxs","Fragment","children","jsx","Helmet","rel","href","crossOrigin","className","dangerouslySetInnerHTML","__html","_default","exports"],"sources":["../../src/FooterWidget/index.jsx"],"sourcesContent":["import { getConfig } from '@edx/frontend-platform';\nimport { useEffect, useState } from 'react';\nimport DOMPurify from 'dompurify';\nimport { Helmet } from 'react-helmet';\nimport './main.scss';\n\nconst FooterWidget = () => {\n const [footerData, setFooterData] = useState('');\n const config = getConfig();\n\n useEffect(() => {\n document.documentElement.style.setProperty(\n '--primary-color',\n config?.COLORS?.primary || '#de2025',\n );\n const scrollBtn = document.getElementById('scrollToTop');\n if (scrollBtn) {\n const scrollToTop = () => {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n };\n\n const toggleVisibility = () => {\n if (window.scrollY > 300) {\n scrollBtn.classList.add('show-btn'); // We will style this class in SCSS\n } else {\n scrollBtn.classList.remove('show-btn');\n }\n };\n\n scrollBtn.addEventListener('click', scrollToTop);\n window.addEventListener('scroll', toggleVisibility);\n\n return () => {\n scrollBtn.removeEventListener('click', scrollToTop);\n window.removeEventListener('scroll', toggleVisibility);\n };\n }\n return () => {\n document.documentElement.style.removeProperty('--primary-color');\n };\n }, [config?.COLORS?.primary, footerData]);\n\n useEffect(() => {\n const fetchData = async () => {\n try {\n const response = await fetch(\n `${config.MARKETING_SITE_BASE_URL}/wp-json/edly-wp-routes/footer`,\n { credentials: 'include' },\n );\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const jsonData = await response.json();\n const cleanHtml = DOMPurify.sanitize(jsonData, {\n ADD_ATTR: ['target', 'class'],\n });\n setFooterData(cleanHtml);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n };\n\n fetchData();\n }, [config]);\n\n return (\n <>\n <Helmet>\n <link\n rel=\"stylesheet\"\n href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css\"\n crossOrigin=\"anonymous\"\n />\n </Helmet>\n <footer\n className=\"site-header\"\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{ __html: footerData }}\n />\n </>\n );\n};\n\nexport default FooterWidget;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_frontendPlatform","require","_react","_dompurify","_interopRequireDefault","_reactHelmet","_jsxRuntime","e","__esModule","default","FooterWidget","footerData","setFooterData","useState","config","getConfig","useEffect","document","documentElement","style","setProperty","COLORS","primary","scrollBtn","getElementById","scrollToTop","window","scrollTo","top","behavior","toggleVisibility","scrollY","classList","add","remove","addEventListener","removeEventListener","removeProperty","fetchData","response","fetch","MARKETING_SITE_BASE_URL","credentials","ok","Error","status","jsonData","json","cleanHtml","DOMPurify","sanitize","ADD_ATTR","error","console","jsxs","Fragment","children","jsx","Helmet","rel","href","crossOrigin","className","dangerouslySetInnerHTML","__html","_default","exports"],"sources":["../../src/FooterWidget/index.jsx"],"sourcesContent":["import { getConfig } from '@edx/frontend-platform';\nimport { useEffect, useState } from 'react';\nimport DOMPurify from 'dompurify';\nimport { Helmet } from 'react-helmet';\nimport './main.scss';\n\nconst FooterWidget = () => {\n const [footerData, setFooterData] = useState('');\n const config = getConfig();\n\n useEffect(() => {\n // TODO: remove this with design token PR. Use primary color variable in SaaS instead\n document.documentElement.style.setProperty(\n '--primary-color',\n config?.COLORS?.primary || '#de2025',\n );\n const scrollBtn = document.getElementById('scrollToTop');\n if (scrollBtn) {\n const scrollToTop = () => {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n };\n\n const toggleVisibility = () => {\n if (window.scrollY > 300) {\n scrollBtn.classList.add('show-btn'); // We will style this class in SCSS\n } else {\n scrollBtn.classList.remove('show-btn');\n }\n };\n\n scrollBtn.addEventListener('click', scrollToTop);\n window.addEventListener('scroll', toggleVisibility);\n\n return () => {\n scrollBtn.removeEventListener('click', scrollToTop);\n window.removeEventListener('scroll', toggleVisibility);\n };\n }\n return () => {\n document.documentElement.style.removeProperty('--primary-color');\n };\n }, [config?.COLORS?.primary, footerData]);\n\n useEffect(() => {\n const fetchData = async () => {\n try {\n const response = await fetch(\n `${config.MARKETING_SITE_BASE_URL}/wp-json/edly-wp-routes/footer`,\n { credentials: 'include' },\n );\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const jsonData = await response.json();\n const cleanHtml = DOMPurify.sanitize(jsonData, {\n ADD_ATTR: ['target', 'class'],\n });\n setFooterData(cleanHtml);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n };\n\n fetchData();\n }, [config.MARKETING_SITE_BASE_URL]);\n\n return (\n <>\n <Helmet>\n <link\n rel=\"stylesheet\"\n href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css\"\n crossOrigin=\"anonymous\"\n />\n </Helmet>\n <footer\n className=\"site-header\"\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{ __html: footerData }}\n />\n </>\n );\n};\n\nexport default FooterWidget;\n"],"mappings":"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","ignoreList":[]}
@@ -52,7 +52,7 @@ const HeaderWidget = () => {
52
52
  }
53
53
  };
54
54
  fetchData();
55
- }, [config]);
55
+ }, [config.MARKETING_SITE_BASE_URL]);
56
56
  const toggleMenu = () => {
57
57
  setIsOpen(!isOpen);
58
58
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_frontendPlatform","require","_react","_dompurify","_interopRequireDefault","_jsxRuntime","e","__esModule","default","HeaderWidget","headerData","setHeaderData","useState","isOpen","setIsOpen","WIDTH","isMobile","setIsMobile","window","innerWidth","config","getConfig","useEffect","document","documentElement","style","setProperty","COLORS","primary","handleResize","addEventListener","removeEventListener","removeProperty","fetchData","response","fetch","MARKETING_SITE_BASE_URL","credentials","ok","Error","status","jsonData","json","cleanHtml","DOMPurify","sanitize","ADD_ATTR","error","console","toggleMenu","jsxs","className","children","jsx","type","onClick","background","border","cursor","fontSize","href","width","height","src","LOGO_URL","alt","decoding","dangerouslySetInnerHTML","__html","_default","exports"],"sources":["../../src/HeaderWidget/index.jsx"],"sourcesContent":["import { getConfig } from '@edx/frontend-platform';\nimport { useEffect, useState } from 'react';\nimport DOMPurify from 'dompurify';\nimport './main.scss';\n\nconst HeaderWidget = () => {\n const [headerData, setHeaderData] = useState('');\n const [isOpen, setIsOpen] = useState(false);\n const WIDTH = 1230;\n const [isMobile, setIsMobile] = useState(window.innerWidth < WIDTH);\n const config = getConfig();\n\n useEffect(() => {\n document.documentElement.style.setProperty(\n '--primary-color',\n config?.COLORS?.primary || '#de2025',\n );\n\n const handleResize = () => {\n setIsMobile(window.innerWidth < WIDTH);\n if (window.innerWidth >= WIDTH) {\n setIsOpen(false);\n }\n };\n\n window.addEventListener('resize', handleResize);\n return () => {\n window.removeEventListener('resize', handleResize);\n document.documentElement.style.removeProperty('--primary-color');\n };\n }, [config?.COLORS]);\n\n useEffect(() => {\n const fetchData = async () => {\n try {\n const response = await fetch(\n `${config.MARKETING_SITE_BASE_URL}/wp-json/edly-wp-routes/nav-menu`,\n { credentials: 'include' },\n );\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const jsonData = await response.json();\n\n if (typeof jsonData === 'object') {\n const cleanHtml = DOMPurify.sanitize(jsonData.primary, {\n ADD_ATTR: ['target', 'class'],\n });\n setHeaderData(cleanHtml);\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n };\n\n fetchData();\n }, [config]);\n\n const toggleMenu = () => {\n setIsOpen(!isOpen);\n };\n\n return (\n <div className={`shadow-sm ${isMobile ? 'header-frame' : ''}`}>\n {isMobile && (\n <button\n className=\"menuOpner\"\n type=\"button\"\n onClick={toggleMenu}\n style={{\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n fontSize: '24px',\n }}\n >\n {isOpen ? '✖' : '☰'}\n </button>\n )}\n <div\n className={`header-holder ${isMobile ? 'mobile-menu' : ''} ${\n isOpen ? '' : 'mobile-hide'\n }`}\n >\n <a href=\"/\" className=\"custom-logo-link\">\n <img\n width=\"216\"\n height=\"140\"\n src={config.LOGO_URL}\n className=\"custom-logo\"\n alt=\"Venus\"\n decoding=\"async\"\n />\n </a>\n <header\n className=\"site-header\"\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{ __html: headerData }}\n />\n </div>\n </div>\n );\n};\n\nexport default HeaderWidget;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_frontendPlatform","require","_react","_dompurify","_interopRequireDefault","_jsxRuntime","e","__esModule","default","HeaderWidget","headerData","setHeaderData","useState","isOpen","setIsOpen","WIDTH","isMobile","setIsMobile","window","innerWidth","config","getConfig","useEffect","document","documentElement","style","setProperty","COLORS","primary","handleResize","addEventListener","removeEventListener","removeProperty","fetchData","response","fetch","MARKETING_SITE_BASE_URL","credentials","ok","Error","status","jsonData","json","cleanHtml","DOMPurify","sanitize","ADD_ATTR","error","console","toggleMenu","jsxs","className","children","jsx","type","onClick","background","border","cursor","fontSize","href","width","height","src","LOGO_URL","alt","decoding","dangerouslySetInnerHTML","__html","_default","exports"],"sources":["../../src/HeaderWidget/index.jsx"],"sourcesContent":["import { getConfig } from '@edx/frontend-platform';\nimport { useEffect, useState } from 'react';\nimport DOMPurify from 'dompurify';\nimport './main.scss';\n\nconst HeaderWidget = () => {\n const [headerData, setHeaderData] = useState('');\n const [isOpen, setIsOpen] = useState(false);\n const WIDTH = 1230;\n const [isMobile, setIsMobile] = useState(window.innerWidth < WIDTH);\n const config = getConfig();\n\n useEffect(() => {\n document.documentElement.style.setProperty(\n '--primary-color',\n config?.COLORS?.primary || '#de2025',\n );\n\n const handleResize = () => {\n setIsMobile(window.innerWidth < WIDTH);\n if (window.innerWidth >= WIDTH) {\n setIsOpen(false);\n }\n };\n\n window.addEventListener('resize', handleResize);\n return () => {\n window.removeEventListener('resize', handleResize);\n document.documentElement.style.removeProperty('--primary-color');\n };\n }, [config?.COLORS]);\n\n useEffect(() => {\n const fetchData = async () => {\n try {\n const response = await fetch(\n `${config.MARKETING_SITE_BASE_URL}/wp-json/edly-wp-routes/nav-menu`,\n { credentials: 'include' },\n );\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const jsonData = await response.json();\n\n if (typeof jsonData === 'object') {\n const cleanHtml = DOMPurify.sanitize(jsonData.primary, {\n ADD_ATTR: ['target', 'class'],\n });\n setHeaderData(cleanHtml);\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n };\n\n fetchData();\n }, [config.MARKETING_SITE_BASE_URL]);\n\n const toggleMenu = () => {\n setIsOpen(!isOpen);\n };\n\n return (\n <div className={`shadow-sm ${isMobile ? 'header-frame' : ''}`}>\n {isMobile && (\n <button\n className=\"menuOpner\"\n type=\"button\"\n onClick={toggleMenu}\n style={{\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n fontSize: '24px',\n }}\n >\n {isOpen ? '✖' : '☰'}\n </button>\n )}\n <div\n className={`header-holder ${isMobile ? 'mobile-menu' : ''} ${\n isOpen ? '' : 'mobile-hide'\n }`}\n >\n <a href=\"/\" className=\"custom-logo-link\">\n <img\n width=\"216\"\n height=\"140\"\n src={config.LOGO_URL}\n className=\"custom-logo\"\n alt=\"Venus\"\n decoding=\"async\"\n />\n </a>\n <header\n className=\"site-header\"\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{ __html: headerData }}\n />\n </div>\n </div>\n );\n};\n\nexport default HeaderWidget;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _frontendPlatform = require("@edx/frontend-platform");
9
+ var _auth = require("@edx/frontend-platform/auth");
10
+ var _i18n = require("@edx/frontend-platform/i18n");
11
+ var _paragon = require("@openedx/paragon");
12
+ var _icons = require("@openedx/paragon/icons");
13
+ var _messages = _interopRequireDefault(require("./messages"));
14
+ var _jsxRuntime = require("react/jsx-runtime");
15
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
17
+ const MultiSiteBannerContent = ({
18
+ intl
19
+ }) => {
20
+ const [sites, setSites] = (0, _react.useState)([]);
21
+ const [loading, setLoading] = (0, _react.useState)(true);
22
+ (0, _react.useEffect)(() => {
23
+ const fetchSites = async () => {
24
+ try {
25
+ const config = (0, _frontendPlatform.getConfig)();
26
+ const client = (0, _auth.getAuthenticatedHttpClient)();
27
+ const {
28
+ data
29
+ } = await client.get(`${config.LMS_BASE_URL}/api/v1/user/sites/`);
30
+ const activeSites = data.filter(site => site.is_active && !site.is_blocked);
31
+ setSites(activeSites);
32
+ } catch (error) {
33
+ // eslint-disable-next-line no-console
34
+ console.error('Error fetching accessible sites:', error);
35
+ } finally {
36
+ setLoading(false);
37
+ }
38
+ };
39
+ fetchSites();
40
+ }, []);
41
+ if (loading || sites.length < 2) {
42
+ return null;
43
+ }
44
+ const formatSiteNames = () => {
45
+ const names = sites.map(site => site.site);
46
+ if (names.length === 2) {
47
+ return `${names[0]} and ${names[1]}`;
48
+ }
49
+ const last = names.pop();
50
+ return `${names.join(', ')}, and ${last}`;
51
+ };
52
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_paragon.Alert, {
53
+ variant: "info",
54
+ icon: _icons.Info,
55
+ className: "mb-3",
56
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
57
+ className: "mb-0",
58
+ children: intl.formatMessage(_messages.default['multisite.banner.message'], {
59
+ sites: formatSiteNames()
60
+ })
61
+ })
62
+ });
63
+ };
64
+ MultiSiteBannerContent.propTypes = {
65
+ intl: _i18n.intlShape.isRequired
66
+ };
67
+ var _default = exports.default = (0, _i18n.injectIntl)(MultiSiteBannerContent);
68
+ //# sourceMappingURL=BannerContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BannerContent.js","names":["_react","_interopRequireWildcard","require","_frontendPlatform","_auth","_i18n","_paragon","_icons","_messages","_interopRequireDefault","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","MultiSiteBannerContent","intl","sites","setSites","useState","loading","setLoading","useEffect","fetchSites","config","getConfig","client","getAuthenticatedHttpClient","data","LMS_BASE_URL","activeSites","filter","site","is_active","is_blocked","error","console","length","formatSiteNames","names","map","last","pop","join","jsx","Alert","variant","icon","Info","className","children","formatMessage","messages","propTypes","intlShape","isRequired","_default","exports","injectIntl"],"sources":["../../src/MultiSiteBannerWidget/BannerContent.jsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { getConfig } from '@edx/frontend-platform';\nimport { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';\nimport { injectIntl, intlShape } from '@edx/frontend-platform/i18n';\nimport { Alert as ParagonAlert } from '@openedx/paragon';\nimport { Info } from '@openedx/paragon/icons';\nimport messages from './messages';\n\nconst MultiSiteBannerContent = ({ intl }) => {\n const [sites, setSites] = useState([]);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n const fetchSites = async () => {\n try {\n const config = getConfig();\n const client = getAuthenticatedHttpClient();\n const { data } = await client.get(`${config.LMS_BASE_URL}/api/v1/user/sites/`);\n\n const activeSites = data.filter(site => site.is_active && !site.is_blocked);\n setSites(activeSites);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Error fetching accessible sites:', error);\n } finally {\n setLoading(false);\n }\n };\n\n fetchSites();\n }, []);\n\n if (loading || sites.length < 2) { return null; }\n\n const formatSiteNames = () => {\n const names = sites.map(site => site.site);\n if (names.length === 2) { return `${names[0]} and ${names[1]}`; }\n\n const last = names.pop();\n return `${names.join(', ')}, and ${last}`;\n };\n\n return (\n <ParagonAlert variant=\"info\" icon={Info} className=\"mb-3\">\n <p className=\"mb-0\">\n {intl.formatMessage(messages['multisite.banner.message'], {\n sites: formatSiteNames(),\n })}\n </p>\n </ParagonAlert>\n );\n};\n\nMultiSiteBannerContent.propTypes = {\n intl: intlShape.isRequired,\n};\n\nexport default injectIntl(MultiSiteBannerContent);\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MultiSiteBannerWidget = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactDom = _interopRequireDefault(require("react-dom"));
9
+ var _i18n = require("@edx/frontend-platform/i18n");
10
+ var _react2 = require("@edx/frontend-platform/react");
11
+ var _BannerContent = _interopRequireDefault(require("./BannerContent"));
12
+ var _jsxRuntime = require("react/jsx-runtime");
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
15
+ const MultiSiteBannerWidget = (props, context) => {
16
+ (0, _react.useEffect)(() => {
17
+ const isAccountPage = window.location.pathname === '/account/';
18
+ if (!isAccountPage) {
19
+ return undefined;
20
+ }
21
+ const observer = new MutationObserver(() => {
22
+ const section = document.getElementById('basic-information');
23
+ const existing = document.getElementById('multi-site-banner-container');
24
+ if (!section || existing) {
25
+ return;
26
+ }
27
+ const container = document.createElement('div');
28
+ container.id = 'multi-site-banner-container';
29
+ container.style.marginBottom = '1rem';
30
+ const heading = section.querySelector('h2.section-heading');
31
+ const insertPoint = heading || section.firstChild;
32
+ insertPoint.parentNode.insertBefore(container, insertPoint);
33
+ const locale = context?.locale || document.documentElement.lang || 'en';
34
+ const intlMessages = context?.messages || {};
35
+
36
+ // eslint-disable-next-line react/no-deprecated
37
+ _reactDom.default.render(/*#__PURE__*/(0, _jsxRuntime.jsx)(_i18n.IntlProvider, {
38
+ locale: locale,
39
+ messages: intlMessages,
40
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_BannerContent.default, {})
41
+ }), container);
42
+ observer.disconnect();
43
+ });
44
+ observer.observe(document.body, {
45
+ childList: true,
46
+ subtree: true
47
+ });
48
+ return () => observer.disconnect();
49
+ }, [context]);
50
+ return null;
51
+ };
52
+ exports.MultiSiteBannerWidget = MultiSiteBannerWidget;
53
+ MultiSiteBannerWidget.contextType = _react2.AppContext;
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_react","_interopRequireWildcard","require","_reactDom","_interopRequireDefault","_i18n","_react2","_BannerContent","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","MultiSiteBannerWidget","props","context","useEffect","isAccountPage","window","location","pathname","undefined","observer","MutationObserver","section","document","getElementById","existing","container","createElement","id","style","marginBottom","heading","querySelector","insertPoint","firstChild","parentNode","insertBefore","locale","documentElement","lang","intlMessages","messages","ReactDOM","render","jsx","IntlProvider","children","disconnect","observe","body","childList","subtree","exports","contextType","AppContext"],"sources":["../../src/MultiSiteBannerWidget/index.jsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport ReactDOM from 'react-dom';\nimport { IntlProvider } from '@edx/frontend-platform/i18n';\nimport { AppContext } from '@edx/frontend-platform/react';\nimport BannerContent from './BannerContent';\n\nconst MultiSiteBannerWidget = (props, context) => {\n useEffect(() => {\n const isAccountPage = window.location.pathname === '/account/';\n if (!isAccountPage) { return undefined; }\n\n const observer = new MutationObserver(() => {\n const section = document.getElementById('basic-information');\n const existing = document.getElementById('multi-site-banner-container');\n\n if (!section || existing) { return; }\n\n const container = document.createElement('div');\n container.id = 'multi-site-banner-container';\n container.style.marginBottom = '1rem';\n\n const heading = section.querySelector('h2.section-heading');\n const insertPoint = heading || section.firstChild;\n insertPoint.parentNode.insertBefore(container, insertPoint);\n\n const locale = context?.locale || document.documentElement.lang || 'en';\n const intlMessages = context?.messages || {};\n\n // eslint-disable-next-line react/no-deprecated\n ReactDOM.render(\n <IntlProvider locale={locale} messages={intlMessages}>\n <BannerContent />\n </IntlProvider>,\n container,\n );\n\n observer.disconnect();\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n return () => observer.disconnect();\n }, [context]);\n\n return null;\n};\n\nMultiSiteBannerWidget.contextType = AppContext;\n\nexport { MultiSiteBannerWidget };\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _i18n = require("@edx/frontend-platform/i18n");
8
+ const messages = (0, _i18n.defineMessages)({
9
+ 'multisite.banner.message': {
10
+ id: 'multisite.banner.message',
11
+ defaultMessage: 'Please note that any changes to your profile information will be updated on {sites}.',
12
+ description: 'Message informing users that profile changes will be reflected across multiple sites.'
13
+ }
14
+ });
15
+ var _default = exports.default = messages;
16
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","names":["_i18n","require","messages","defineMessages","id","defaultMessage","description","_default","exports","default"],"sources":["../../src/MultiSiteBannerWidget/messages.js"],"sourcesContent":["import { defineMessages } from '@edx/frontend-platform/i18n';\n\nconst messages = defineMessages({\n 'multisite.banner.message': {\n id: 'multisite.banner.message',\n defaultMessage: 'Please note that any changes to your profile information will be updated on {sites}.',\n description: 'Message informing users that profile changes will be reflected across multiple sites.',\n },\n});\n\nexport default messages;\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAEA,MAAMC,QAAQ,GAAG,IAAAC,oBAAc,EAAC;EAC9B,0BAA0B,EAAE;IAC1BC,EAAE,EAAE,0BAA0B;IAC9BC,cAAc,EAAE,sFAAsF;IACtGC,WAAW,EAAE;EACf;AACF,CAAC,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEYP,QAAQ","ignoreList":[]}
package/dist/index.js CHANGED
@@ -27,6 +27,12 @@ Object.defineProperty(exports, "HeaderWidget", {
27
27
  return _HeaderWidget.default;
28
28
  }
29
29
  });
30
+ Object.defineProperty(exports, "MultiSiteBannerWidget", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _MultiSiteBannerWidget.MultiSiteBannerWidget;
34
+ }
35
+ });
30
36
  Object.defineProperty(exports, "emailCheckComplete", {
31
37
  enumerable: true,
32
38
  get: function () {
@@ -55,5 +61,6 @@ var _HeaderWidget = _interopRequireDefault(require("./HeaderWidget"));
55
61
  var _FooterWidget = _interopRequireDefault(require("./FooterWidget"));
56
62
  var _EmailCheckWidget = require("./EmailCheckWidget");
57
63
  var _EdlyLogistrationInfo = require("./EdlyLogistrationInfo");
64
+ var _MultiSiteBannerWidget = require("./MultiSiteBannerWidget");
58
65
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
59
66
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_HeaderWidget","_interopRequireDefault","require","_FooterWidget","_EmailCheckWidget","_EdlyLogistrationInfo","e","__esModule","default"],"sources":["../src/index.js"],"sourcesContent":["import HeaderWidget from './HeaderWidget';\nimport FooterWidget from './FooterWidget';\n\nexport { HeaderWidget, FooterWidget };\nexport {\n EmailCheckWidget,\n reducer as emailCheckReducer,\n saga as emailCheckSaga,\n storeName as emailCheckStoreName,\n emailCheckComplete,\n} from './EmailCheckWidget';\nexport { EdlyLogistrationInfo } from './EdlyLogistrationInfo';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAF,sBAAA,CAAAC,OAAA;AAGA,IAAAE,iBAAA,GAAAF,OAAA;AAOA,IAAAG,qBAAA,GAAAH,OAAA;AAA8D,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_HeaderWidget","_interopRequireDefault","require","_FooterWidget","_EmailCheckWidget","_EdlyLogistrationInfo","_MultiSiteBannerWidget","e","__esModule","default"],"sources":["../src/index.js"],"sourcesContent":["import HeaderWidget from './HeaderWidget';\nimport FooterWidget from './FooterWidget';\n\nexport { HeaderWidget, FooterWidget };\nexport {\n EmailCheckWidget,\n reducer as emailCheckReducer,\n saga as emailCheckSaga,\n storeName as emailCheckStoreName,\n emailCheckComplete,\n} from './EmailCheckWidget';\nexport { EdlyLogistrationInfo } from './EdlyLogistrationInfo';\nexport { MultiSiteBannerWidget } from './MultiSiteBannerWidget';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAF,sBAAA,CAAAC,OAAA;AAGA,IAAAE,iBAAA,GAAAF,OAAA;AAOA,IAAAG,qBAAA,GAAAH,OAAA;AACA,IAAAI,sBAAA,GAAAJ,OAAA;AAAgE,SAAAD,uBAAAM,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anas_hameed/edly-saas-widget",
3
- "version": "0.2.31",
3
+ "version": "0.2.42",
4
4
  "description": "Frontend application template",
5
5
  "main": "dist/index.js",
6
6
  "repository": {