@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.
- package/dist/FooterWidget/index.js +2 -1
- package/dist/FooterWidget/index.js.map +1 -1
- package/dist/HeaderWidget/index.js +1 -1
- package/dist/HeaderWidget/index.js.map +1 -1
- package/dist/MultiSiteBannerWidget/BannerContent.js +68 -0
- package/dist/MultiSiteBannerWidget/BannerContent.js.map +1 -0
- package/dist/MultiSiteBannerWidget/index.js +54 -0
- package/dist/MultiSiteBannerWidget/index.js.map +1 -0
- package/dist/MultiSiteBannerWidget/messages.js +16 -0
- package/dist/MultiSiteBannerWidget/messages.js.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -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":";;;;;;AAAA,IAAAA,iBAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,YAAA,GAAAJ,OAAA;AACAA,OAAA;AAAqB,IAAAK,WAAA,GAAAL,OAAA;AAAA,SAAAG,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAErB,MAAMG,YAAY,GAAGA,CAAA,KAAM;EACzB,MAAM,CAACC,UAAU,EAAEC,aAAa,CAAC,GAAG,IAAAC,eAAQ,EAAC,EAAE,CAAC;EAChD,MAAMC,MAAM,GAAG,IAAAC,2BAAS,EAAC,CAAC;EAE1B,IAAAC,gBAAS,EAAC,MAAM;
|
|
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":[]}
|
|
@@ -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":";;;;;;AAAA,IAAAA,iBAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAC,sBAAA,CAAAH,OAAA;AACAA,OAAA;AAAqB,IAAAI,WAAA,GAAAJ,OAAA;AAAA,SAAAG,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAErB,MAAMG,YAAY,GAAGA,CAAA,KAAM;EACzB,MAAM,CAACC,UAAU,EAAEC,aAAa,CAAC,GAAG,IAAAC,eAAQ,EAAC,EAAE,CAAC;EAChD,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAG,IAAAF,eAAQ,EAAC,KAAK,CAAC;EAC3C,MAAMG,KAAK,GAAG,IAAI;EAClB,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAG,IAAAL,eAAQ,EAACM,MAAM,CAACC,UAAU,GAAGJ,KAAK,CAAC;EACnE,MAAMK,MAAM,GAAG,IAAAC,2BAAS,EAAC,CAAC;EAE1B,IAAAC,gBAAS,EAAC,MAAM;IACdC,QAAQ,CAACC,eAAe,CAACC,KAAK,CAACC,WAAW,CACxC,iBAAiB,EACjBN,MAAM,EAAEO,MAAM,EAAEC,OAAO,IAAI,SAC7B,CAAC;IAED,MAAMC,YAAY,GAAGA,CAAA,KAAM;MACzBZ,WAAW,CAACC,MAAM,CAACC,UAAU,GAAGJ,KAAK,CAAC;MACtC,IAAIG,MAAM,CAACC,UAAU,IAAIJ,KAAK,EAAE;QAC9BD,SAAS,CAAC,KAAK,CAAC;MAClB;IACF,CAAC;IAEDI,MAAM,CAACY,gBAAgB,CAAC,QAAQ,EAAED,YAAY,CAAC;IAC/C,OAAO,MAAM;MACXX,MAAM,CAACa,mBAAmB,CAAC,QAAQ,EAAEF,YAAY,CAAC;MAClDN,QAAQ,CAACC,eAAe,CAACC,KAAK,CAACO,cAAc,CAAC,iBAAiB,CAAC;IAClE,CAAC;EACH,CAAC,EAAE,CAACZ,MAAM,EAAEO,MAAM,CAAC,CAAC;EAEpB,IAAAL,gBAAS,EAAC,MAAM;IACd,MAAMW,SAAS,GAAG,MAAAA,CAAA,KAAY;MAC5B,IAAI;QACF,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CAC1B,GAAGf,MAAM,CAACgB,uBAAuB,kCAAkC,EACnE;UAAEC,WAAW,EAAE;QAAU,CAC3B,CAAC;QACD,IAAI,CAACH,QAAQ,CAACI,EAAE,EAAE;UAChB,MAAM,IAAIC,KAAK,CAAC,uBAAuBL,QAAQ,CAACM,MAAM,EAAE,CAAC;QAC3D;QAEA,MAAMC,QAAQ,GAAG,MAAMP,QAAQ,CAACQ,IAAI,CAAC,CAAC;QAEtC,IAAI,OAAOD,QAAQ,KAAK,QAAQ,EAAE;UAChC,MAAME,SAAS,GAAGC,kBAAS,CAACC,QAAQ,CAACJ,QAAQ,CAACb,OAAO,EAAE;YACrDkB,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO;UAC9B,CAAC,CAAC;UACFnC,aAAa,CAACgC,SAAS,CAAC;QAC1B;MACF,CAAC,CAAC,OAAOI,KAAK,EAAE;QACd;QACAC,OAAO,CAACD,KAAK,CAACA,KAAK,CAAC;MACtB;IACF,CAAC;IAEDd,SAAS,CAAC,CAAC;EACb,CAAC,EAAE,CAACb,MAAM,CAAC,CAAC;
|
|
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":"
|
|
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":[]}
|