@anas_hameed/edly-saas-widget 0.2.53 → 0.2.54

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,35 +5,46 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.DiscussionSidebarWidget = void 0;
7
7
  var _react = require("react");
8
+ const COURSE_PAGE_PATTERN = /\/learning\/(course|preview\/course)\/[^/]+\/[^/]+/;
9
+ const DISCUSSIONS_IFRAME_SELECTOR = 'iframe[src*="inContextSidebar"]';
8
10
  const DiscussionSidebarWidget = () => {
9
11
  (0, _react.useEffect)(() => {
10
- const isCoursePage = /\/learning\/(course|preview\/course)\/[^/]+\/[^/]+/.test(window.location.pathname);
11
- if (!isCoursePage) {
12
+ if (!COURSE_PAGE_PATTERN.test(window.location.pathname)) {
12
13
  return undefined;
13
14
  }
14
- const closeSidebar = () => {
15
- const sidebar = document.querySelector('[data-testid="sidebar-DISCUSSIONS"]');
16
- if (sidebar && !sidebar.classList.contains('d-none')) {
15
+ let rafId;
16
+ const closeDiscussions = () => {
17
+ // Defer to next animation frame so React's useEffect (which registers
18
+ // the message listener in SidebarBase) has run before we post.
19
+ rafId = requestAnimationFrame(() => {
17
20
  window.postMessage({
18
21
  type: 'learning.events.sidebar.close'
19
22
  }, window.location.origin);
20
- return true;
21
- }
22
- return false;
23
+ });
23
24
  };
24
- if (closeSidebar()) {
25
- return undefined;
25
+
26
+ // The discussions iframe is the definitive signal that the sidebar
27
+ // is mounted and its message listener is registered.
28
+ if (document.querySelector(DISCUSSIONS_IFRAME_SELECTOR)) {
29
+ closeDiscussions();
30
+ return () => cancelAnimationFrame(rafId);
26
31
  }
32
+
33
+ // Data hasn't loaded yet — watch for the iframe to appear.
27
34
  const observer = new MutationObserver(() => {
28
- if (closeSidebar()) {
35
+ if (document.querySelector(DISCUSSIONS_IFRAME_SELECTOR)) {
29
36
  observer.disconnect();
37
+ closeDiscussions();
30
38
  }
31
39
  });
32
40
  observer.observe(document.body, {
33
41
  childList: true,
34
42
  subtree: true
35
43
  });
36
- return () => observer.disconnect();
44
+ return () => {
45
+ observer.disconnect();
46
+ cancelAnimationFrame(rafId);
47
+ };
37
48
  }, []);
38
49
  return null;
39
50
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_react","require","DiscussionSidebarWidget","useEffect","isCoursePage","test","window","location","pathname","undefined","closeSidebar","sidebar","document","querySelector","classList","contains","postMessage","type","origin","observer","MutationObserver","disconnect","observe","body","childList","subtree","exports"],"sources":["../../src/DiscussionSidebarWidget/index.jsx"],"sourcesContent":["import { useEffect } from 'react';\n\nconst DiscussionSidebarWidget = () => {\n useEffect(() => {\n const isCoursePage = /\\/learning\\/(course|preview\\/course)\\/[^/]+\\/[^/]+/.test(window.location.pathname);\n if (!isCoursePage) { return undefined; }\n\n const closeSidebar = () => {\n const sidebar = document.querySelector('[data-testid=\"sidebar-DISCUSSIONS\"]');\n if (sidebar && !sidebar.classList.contains('d-none')) {\n window.postMessage({ type: 'learning.events.sidebar.close' }, window.location.origin);\n return true;\n }\n return false;\n };\n\n if (closeSidebar()) { return undefined; }\n\n const observer = new MutationObserver(() => {\n if (closeSidebar()) {\n observer.disconnect();\n }\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n return () => observer.disconnect();\n }, []);\n\n return null;\n};\n\nexport { DiscussionSidebarWidget };\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,MAAMC,uBAAuB,GAAGA,CAAA,KAAM;EACpC,IAAAC,gBAAS,EAAC,MAAM;IACd,MAAMC,YAAY,GAAG,oDAAoD,CAACC,IAAI,CAACC,MAAM,CAACC,QAAQ,CAACC,QAAQ,CAAC;IACxG,IAAI,CAACJ,YAAY,EAAE;MAAE,OAAOK,SAAS;IAAE;IAEvC,MAAMC,YAAY,GAAGA,CAAA,KAAM;MACzB,MAAMC,OAAO,GAAGC,QAAQ,CAACC,aAAa,CAAC,qCAAqC,CAAC;MAC7E,IAAIF,OAAO,IAAI,CAACA,OAAO,CAACG,SAAS,CAACC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QACpDT,MAAM,CAACU,WAAW,CAAC;UAAEC,IAAI,EAAE;QAAgC,CAAC,EAAEX,MAAM,CAACC,QAAQ,CAACW,MAAM,CAAC;QACrF,OAAO,IAAI;MACb;MACA,OAAO,KAAK;IACd,CAAC;IAED,IAAIR,YAAY,CAAC,CAAC,EAAE;MAAE,OAAOD,SAAS;IAAE;IAExC,MAAMU,QAAQ,GAAG,IAAIC,gBAAgB,CAAC,MAAM;MAC1C,IAAIV,YAAY,CAAC,CAAC,EAAE;QAClBS,QAAQ,CAACE,UAAU,CAAC,CAAC;MACvB;IACF,CAAC,CAAC;IAEFF,QAAQ,CAACG,OAAO,CAACV,QAAQ,CAACW,IAAI,EAAE;MAAEC,SAAS,EAAE,IAAI;MAAEC,OAAO,EAAE;IAAK,CAAC,CAAC;IACnE,OAAO,MAAMN,QAAQ,CAACE,UAAU,CAAC,CAAC;EACpC,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO,IAAI;AACb,CAAC;AAACK,OAAA,CAAAxB,uBAAA,GAAAA,uBAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_react","require","COURSE_PAGE_PATTERN","DISCUSSIONS_IFRAME_SELECTOR","DiscussionSidebarWidget","useEffect","test","window","location","pathname","undefined","rafId","closeDiscussions","requestAnimationFrame","postMessage","type","origin","document","querySelector","cancelAnimationFrame","observer","MutationObserver","disconnect","observe","body","childList","subtree","exports"],"sources":["../../src/DiscussionSidebarWidget/index.jsx"],"sourcesContent":["import { useEffect } from 'react';\n\nconst COURSE_PAGE_PATTERN = /\\/learning\\/(course|preview\\/course)\\/[^/]+\\/[^/]+/;\nconst DISCUSSIONS_IFRAME_SELECTOR = 'iframe[src*=\"inContextSidebar\"]';\n\nconst DiscussionSidebarWidget = () => {\n useEffect(() => {\n if (!COURSE_PAGE_PATTERN.test(window.location.pathname)) { return undefined; }\n\n let rafId;\n\n const closeDiscussions = () => {\n // Defer to next animation frame so React's useEffect (which registers\n // the message listener in SidebarBase) has run before we post.\n rafId = requestAnimationFrame(() => {\n window.postMessage({ type: 'learning.events.sidebar.close' }, window.location.origin);\n });\n };\n\n // The discussions iframe is the definitive signal that the sidebar\n // is mounted and its message listener is registered.\n if (document.querySelector(DISCUSSIONS_IFRAME_SELECTOR)) {\n closeDiscussions();\n return () => cancelAnimationFrame(rafId);\n }\n\n // Data hasn't loaded yet — watch for the iframe to appear.\n const observer = new MutationObserver(() => {\n if (document.querySelector(DISCUSSIONS_IFRAME_SELECTOR)) {\n observer.disconnect();\n closeDiscussions();\n }\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n\n return () => {\n observer.disconnect();\n cancelAnimationFrame(rafId);\n };\n }, []);\n\n return null;\n};\n\nexport { DiscussionSidebarWidget };\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,MAAMC,mBAAmB,GAAG,oDAAoD;AAChF,MAAMC,2BAA2B,GAAG,iCAAiC;AAErE,MAAMC,uBAAuB,GAAGA,CAAA,KAAM;EACpC,IAAAC,gBAAS,EAAC,MAAM;IACd,IAAI,CAACH,mBAAmB,CAACI,IAAI,CAACC,MAAM,CAACC,QAAQ,CAACC,QAAQ,CAAC,EAAE;MAAE,OAAOC,SAAS;IAAE;IAE7E,IAAIC,KAAK;IAET,MAAMC,gBAAgB,GAAGA,CAAA,KAAM;MAC7B;MACA;MACAD,KAAK,GAAGE,qBAAqB,CAAC,MAAM;QAClCN,MAAM,CAACO,WAAW,CAAC;UAAEC,IAAI,EAAE;QAAgC,CAAC,EAAER,MAAM,CAACC,QAAQ,CAACQ,MAAM,CAAC;MACvF,CAAC,CAAC;IACJ,CAAC;;IAED;IACA;IACA,IAAIC,QAAQ,CAACC,aAAa,CAACf,2BAA2B,CAAC,EAAE;MACvDS,gBAAgB,CAAC,CAAC;MAClB,OAAO,MAAMO,oBAAoB,CAACR,KAAK,CAAC;IAC1C;;IAEA;IACA,MAAMS,QAAQ,GAAG,IAAIC,gBAAgB,CAAC,MAAM;MAC1C,IAAIJ,QAAQ,CAACC,aAAa,CAACf,2BAA2B,CAAC,EAAE;QACvDiB,QAAQ,CAACE,UAAU,CAAC,CAAC;QACrBV,gBAAgB,CAAC,CAAC;MACpB;IACF,CAAC,CAAC;IAEFQ,QAAQ,CAACG,OAAO,CAACN,QAAQ,CAACO,IAAI,EAAE;MAAEC,SAAS,EAAE,IAAI;MAAEC,OAAO,EAAE;IAAK,CAAC,CAAC;IAEnE,OAAO,MAAM;MACXN,QAAQ,CAACE,UAAU,CAAC,CAAC;MACrBH,oBAAoB,CAACR,KAAK,CAAC;IAC7B,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO,IAAI;AACb,CAAC;AAACgB,OAAA,CAAAvB,uBAAA,GAAAA,uBAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anas_hameed/edly-saas-widget",
3
- "version": "0.2.53",
3
+ "version": "0.2.54",
4
4
  "description": "Frontend application template",
5
5
  "main": "dist/index.js",
6
6
  "repository": {