@machinemetrics/mm-react-embeddable 0.9.14 → 0.10.1-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.
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react"),E=require("prop-types"),$=require("styled-components"),R=e.createContext(null),x=({children:t})=>{const[i,d]=e.useState({}),s=e.useRef({}),f=e.useCallback((n,o,r)=>{d(a=>({...a,[n]:{origin:o,frameRef:r}}))},[]);e.useEffect(()=>{const n=(r=[],a)=>{r.forEach(l=>l(a))},o=r=>{var y,M,g,w,b;if(!((y=r==null?void 0:r.data)!=null&&y.instanceId))return;const{instanceId:a,type:l}=r.data,u=s.current;n((M=u[a])==null?void 0:M[l],r.data),n((g=u["*"])==null?void 0:g[l],r.data),n((w=u[a])==null?void 0:w["*"],r.data),n((b=u["*"])==null?void 0:b["*"],r.data)};return window.addEventListener("message",o),()=>{window.removeEventListener("message",o)}},[i]);const c=e.useCallback((n,o,r)=>{const a=i[n];if(!a){console.warn(`Origin not set for id: ${n}. Unable to send message.`);return}a.frameRef.current.contentWindow.postMessage({type:o,...r,instanceId:n},a.origin)},[i]),p=e.useCallback((n,o)=>{c(n,"load-options",o)},[c]),I=e.useCallback((n,o)=>{c(n,"validate",o)},[c]),m={registerFrame:f,sendMessage:c,loadOptions:p,validate:I,addListener:(n,o,r)=>(s.current[n]||(s.current[n]={}),s.current[n][o]||(s.current[n][o]=[]),s.current[n][o].push(r),()=>{s.current[n][o]=s.current[n][o].filter(a=>a!==r)})};return e.createElement(R.Provider,{value:m},t)},h={},P=async t=>{try{const i=new URL(t).origin;if(h[i]!==void 0)return h[i];const s=await(await fetch(`${i}/mm-app-manifest.json`)).json();if(!s.version)throw new Error("Invalid manifest");return h[i]=s,s}catch{}return h[origin]=!1,!1},F=async t=>!!await P(t),L=(t,i,d)=>{const s=e.useContext(R);if(s===null)throw new Error("useEmbeddedEffect must be used within a MMEmbeddableZoneProvider");const f=e.useRef(d);return e.useEffect(()=>{f.current=d},[d]),e.useEffect(()=>{if(!(!t||!i))return s.addListener(t,i,(...c)=>f.current(...c))},[s,t,i]),e.useCallback((c,p)=>s.sendMessage(t,c,p),[s,t])};x.propTypes={children:E.node.isRequired};const Z=$.default||$,v=Z.iframe`
|
|
2
2
|
width: 100%;
|
|
3
3
|
height: 100%;
|
|
4
4
|
border: none;
|
|
5
|
-
visibility: ${t=>t
|
|
6
|
-
`,
|
|
5
|
+
visibility: ${t=>t.$isReady||t.$isVisibilityForced?"visible":"hidden"};
|
|
6
|
+
`,S=({id:t,src:i,path:d,onInit:s=()=>{},context:f,isConfiguring:c,isVisibilityForced:p,...I})=>{const m=e.useRef(),[n,o]=e.useState(),[r,a]=e.useState(0),{registerFrame:l,sendMessage:u}=e.useContext(R),[y,M]=e.useState(!0),[g,w]=e.useState();return e.useEffect(()=>{r&&u(t,"set-context",{context:f})},[f,t,r]),e.useEffect(()=>{d!==void 0&&w(d)},[d]),e.useEffect(()=>{g===void 0||!r||u(t,"navigate",{path:g})},[g,r,t,u]),e.useEffect(()=>{r&&u(t,"set-configuring",{isConfiguring:c})},[r,c]),e.useEffect(()=>{!i||!t||!m||(async()=>{const b=await F(i);if(M(b),b){const C=new URL(i);l(t,C.origin,m),s(),o(`${C.origin}/mm-embedded-interop?id=${t}&origin=${window.location.origin}`);return}})()},[i,t,l,m]),L(t,"ready",()=>a(b=>b+1)),y?e.createElement(v,{$isReady:r,$isVisibilityForced:p,ref:m,src:n,...I}):e.createElement("div",{style:{height:"100%",display:"flex",alignItems:"center",justifyContent:"center"}},e.createElement("div",{style:{textAlign:"center"}},"Application must adhere to the MM App Manifest specification to be embedded."))};S.propTypes={id:E.string,src:E.string.isRequired,path:E.string,isVisibilityForced:E.bool,onInit:E.func};exports.MMEmbeddableZone=S;exports.MMEmbeddableZoneContext=R;exports.MMEmbeddableZoneProvider=x;exports.getAppInfo=P;exports.testIsEmbeddable=F;exports.useEmbeddedEffect=L;
|
|
@@ -1,104 +1,139 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
const
|
|
5
|
-
const [
|
|
6
|
-
|
|
1
|
+
import $, { createContext as C, useState as E, useRef as F, useCallback as w, useEffect as u, useContext as A } from "react";
|
|
2
|
+
import p from "prop-types";
|
|
3
|
+
import v from "styled-components";
|
|
4
|
+
const L = C(null), U = ({ children: e }) => {
|
|
5
|
+
const [s, c] = E({}), n = F({}), f = w((r, i, t) => {
|
|
6
|
+
c((o) => ({ ...o, [r]: { origin: i, frameRef: t } }));
|
|
7
7
|
}, []);
|
|
8
8
|
u(() => {
|
|
9
|
-
const t =
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
const r = (t = [], o) => {
|
|
10
|
+
t.forEach((l) => l(o));
|
|
11
|
+
}, i = (t) => {
|
|
12
|
+
var h, M, g, R, m;
|
|
13
|
+
if (!((h = t == null ? void 0 : t.data) != null && h.instanceId))
|
|
12
14
|
return;
|
|
13
|
-
|
|
15
|
+
const { instanceId: o, type: l } = t.data, d = n.current;
|
|
16
|
+
r((M = d[o]) == null ? void 0 : M[l], t.data), r((g = d["*"]) == null ? void 0 : g[l], t.data), r((R = d[o]) == null ? void 0 : R["*"], t.data), r((m = d["*"]) == null ? void 0 : m["*"], t.data);
|
|
14
17
|
};
|
|
15
|
-
return window.addEventListener("message",
|
|
16
|
-
window.removeEventListener("message",
|
|
18
|
+
return window.addEventListener("message", i), () => {
|
|
19
|
+
window.removeEventListener("message", i);
|
|
17
20
|
};
|
|
18
|
-
}, [
|
|
19
|
-
const
|
|
20
|
-
(
|
|
21
|
-
const
|
|
22
|
-
if (!
|
|
23
|
-
console.warn(`Origin not set for id: ${
|
|
21
|
+
}, [s]);
|
|
22
|
+
const a = w(
|
|
23
|
+
(r, i, t) => {
|
|
24
|
+
const o = s[r];
|
|
25
|
+
if (!o) {
|
|
26
|
+
console.warn(`Origin not set for id: ${r}. Unable to send message.`);
|
|
24
27
|
return;
|
|
25
28
|
}
|
|
26
|
-
|
|
27
|
-
{ type:
|
|
28
|
-
|
|
29
|
+
o.frameRef.current.contentWindow.postMessage(
|
|
30
|
+
{ type: i, ...t, instanceId: r },
|
|
31
|
+
o.origin
|
|
29
32
|
);
|
|
30
33
|
},
|
|
31
|
-
[
|
|
32
|
-
),
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
[s]
|
|
35
|
+
), y = w(
|
|
36
|
+
(r, i) => {
|
|
37
|
+
a(r, "load-options", i);
|
|
38
|
+
},
|
|
39
|
+
[a]
|
|
40
|
+
), x = w(
|
|
41
|
+
(r, i) => {
|
|
42
|
+
a(r, "validate", i);
|
|
43
|
+
},
|
|
44
|
+
[a]
|
|
45
|
+
), b = {
|
|
46
|
+
registerFrame: f,
|
|
47
|
+
sendMessage: a,
|
|
48
|
+
loadOptions: y,
|
|
49
|
+
validate: x,
|
|
50
|
+
addListener: (r, i, t) => (n.current[r] || (n.current[r] = {}), n.current[r][i] || (n.current[r][i] = []), n.current[r][i].push(t), () => {
|
|
51
|
+
n.current[r][i] = n.current[r][i].filter((o) => o !== t);
|
|
38
52
|
})
|
|
39
53
|
};
|
|
40
|
-
return /* @__PURE__ */
|
|
41
|
-
},
|
|
54
|
+
return /* @__PURE__ */ $.createElement(L.Provider, { value: b }, e);
|
|
55
|
+
}, I = {}, Z = async (e) => {
|
|
42
56
|
try {
|
|
43
|
-
const
|
|
44
|
-
if (
|
|
45
|
-
return
|
|
46
|
-
|
|
57
|
+
const s = new URL(e).origin;
|
|
58
|
+
if (I[s] !== void 0)
|
|
59
|
+
return I[s];
|
|
60
|
+
const n = await (await fetch(`${s}/mm-app-manifest.json`)).json();
|
|
61
|
+
if (!n.version)
|
|
47
62
|
throw new Error("Invalid manifest");
|
|
48
|
-
return
|
|
63
|
+
return I[s] = n, n;
|
|
49
64
|
} catch {
|
|
50
65
|
}
|
|
51
|
-
return
|
|
52
|
-
}, j = (e
|
|
53
|
-
const
|
|
54
|
-
if (
|
|
66
|
+
return I[origin] = !1, !1;
|
|
67
|
+
}, j = async (e) => !!await Z(e), O = (e, s, c) => {
|
|
68
|
+
const n = A(L);
|
|
69
|
+
if (n === null)
|
|
55
70
|
throw new Error(
|
|
56
71
|
"useEmbeddedEffect must be used within a MMEmbeddableZoneProvider"
|
|
57
72
|
);
|
|
58
|
-
const f =
|
|
73
|
+
const f = F(c);
|
|
59
74
|
return u(() => {
|
|
60
|
-
f.current =
|
|
61
|
-
}, [
|
|
62
|
-
if (!(!e || !
|
|
63
|
-
return
|
|
75
|
+
f.current = c;
|
|
76
|
+
}, [c]), u(() => {
|
|
77
|
+
if (!(!e || !s))
|
|
78
|
+
return n.addListener(
|
|
64
79
|
e,
|
|
65
|
-
|
|
66
|
-
(...
|
|
80
|
+
s,
|
|
81
|
+
(...a) => f.current(...a)
|
|
67
82
|
);
|
|
68
|
-
}, [
|
|
69
|
-
(
|
|
70
|
-
[
|
|
83
|
+
}, [n, e, s]), w(
|
|
84
|
+
(a, y) => n.sendMessage(e, a, y),
|
|
85
|
+
[n, e]
|
|
71
86
|
);
|
|
72
87
|
};
|
|
73
88
|
U.propTypes = {
|
|
74
|
-
children:
|
|
89
|
+
children: p.node.isRequired
|
|
75
90
|
};
|
|
76
|
-
const
|
|
91
|
+
const T = v.default || v, V = T.iframe`
|
|
77
92
|
width: 100%;
|
|
78
93
|
height: 100%;
|
|
79
94
|
border: none;
|
|
80
|
-
visibility: ${(e) => e
|
|
81
|
-
`, q = ({
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
95
|
+
visibility: ${(e) => e.$isReady || e.$isVisibilityForced ? "visible" : "hidden"};
|
|
96
|
+
`, q = ({
|
|
97
|
+
id: e,
|
|
98
|
+
src: s,
|
|
99
|
+
path: c,
|
|
100
|
+
onInit: n = () => {
|
|
101
|
+
},
|
|
102
|
+
context: f,
|
|
103
|
+
isConfiguring: a,
|
|
104
|
+
isVisibilityForced: y,
|
|
105
|
+
...x
|
|
106
|
+
}) => {
|
|
107
|
+
const b = F(), [r, i] = E(), [t, o] = E(0), { registerFrame: l, sendMessage: d } = A(L), [h, M] = E(!0), [g, R] = E();
|
|
86
108
|
return u(() => {
|
|
87
|
-
|
|
88
|
-
}, [
|
|
89
|
-
|
|
90
|
-
}, [
|
|
91
|
-
|
|
92
|
-
}, [
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
109
|
+
t && d(e, "set-context", { context: f });
|
|
110
|
+
}, [f, e, t]), u(() => {
|
|
111
|
+
c !== void 0 && R(c);
|
|
112
|
+
}, [c]), u(() => {
|
|
113
|
+
g === void 0 || !t || d(e, "navigate", { path: g });
|
|
114
|
+
}, [g, t, e, d]), u(() => {
|
|
115
|
+
t && d(e, "set-configuring", { isConfiguring: a });
|
|
116
|
+
}, [t, a]), u(() => {
|
|
117
|
+
!s || !e || !b || (async () => {
|
|
118
|
+
const m = await j(s);
|
|
119
|
+
if (M(m), m) {
|
|
120
|
+
const P = new URL(s);
|
|
121
|
+
l(e, P.origin, b), n(), i(
|
|
122
|
+
`${P.origin}/mm-embedded-interop?id=${e}&origin=${window.location.origin}`
|
|
123
|
+
);
|
|
98
124
|
return;
|
|
99
125
|
}
|
|
100
126
|
})();
|
|
101
|
-
}, [
|
|
127
|
+
}, [s, e, l, b]), O(e, "ready", () => o((m) => m + 1)), h ? /* @__PURE__ */ $.createElement(
|
|
128
|
+
V,
|
|
129
|
+
{
|
|
130
|
+
$isReady: t,
|
|
131
|
+
$isVisibilityForced: y,
|
|
132
|
+
ref: b,
|
|
133
|
+
src: r,
|
|
134
|
+
...x
|
|
135
|
+
}
|
|
136
|
+
) : /* @__PURE__ */ $.createElement(
|
|
102
137
|
"div",
|
|
103
138
|
{
|
|
104
139
|
style: {
|
|
@@ -108,19 +143,21 @@ const A = L.default || L, T = A.iframe`
|
|
|
108
143
|
justifyContent: "center"
|
|
109
144
|
}
|
|
110
145
|
},
|
|
111
|
-
/* @__PURE__ */
|
|
146
|
+
/* @__PURE__ */ $.createElement("div", { style: { textAlign: "center" } }, "Application must adhere to the MM App Manifest specification to be embedded.")
|
|
112
147
|
);
|
|
113
148
|
};
|
|
114
149
|
q.propTypes = {
|
|
115
|
-
id:
|
|
116
|
-
src:
|
|
117
|
-
path:
|
|
118
|
-
|
|
150
|
+
id: p.string,
|
|
151
|
+
src: p.string.isRequired,
|
|
152
|
+
path: p.string,
|
|
153
|
+
isVisibilityForced: p.bool,
|
|
154
|
+
onInit: p.func
|
|
119
155
|
};
|
|
120
156
|
export {
|
|
121
157
|
q as MMEmbeddableZone,
|
|
122
|
-
|
|
158
|
+
L as MMEmbeddableZoneContext,
|
|
123
159
|
U as MMEmbeddableZoneProvider,
|
|
124
|
-
Z as
|
|
125
|
-
j as
|
|
160
|
+
Z as getAppInfo,
|
|
161
|
+
j as testIsEmbeddable,
|
|
162
|
+
O as useEmbeddedEffect
|
|
126
163
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(d,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("react"),require("prop-types"),require("styled-components")):typeof define=="function"&&define.amd?define(["exports","react","prop-types","styled-components"],e):(d=typeof globalThis<"u"?globalThis:d||self,e(d["mm-react-embeddable"]={},d.React,d.PropTypes,d.styled))})(this,function(d,e,E,F){"use strict";const h=e.createContext(null),L=({children:t})=>{const[i,f]=e.useState({}),r=e.useRef({}),l=e.useCallback((s,o,n)=>{f(u=>({...u,[s]:{origin:o,frameRef:n}}))},[]);e.useEffect(()=>{const s=(n=[],u)=>{n.forEach(b=>b(u))},o=n=>{var w,I,y,C,m;if(!((w=n==null?void 0:n.data)!=null&&w.instanceId))return;const{instanceId:u,type:b}=n.data,c=r.current;s((I=c[u])==null?void 0:I[b],n.data),s((y=c["*"])==null?void 0:y[b],n.data),s((C=c[u])==null?void 0:C["*"],n.data),s((m=c["*"])==null?void 0:m["*"],n.data)};return window.addEventListener("message",o),()=>{window.removeEventListener("message",o)}},[i]);const a=e.useCallback((s,o,n)=>{const u=i[s];if(!u){console.warn(`Origin not set for id: ${s}. Unable to send message.`);return}u.frameRef.current.contentWindow.postMessage({type:o,...n,instanceId:s},u.origin)},[i]),p=e.useCallback((s,o)=>{a(s,"load-options",o)},[a]),$=e.useCallback((s,o)=>{a(s,"validate",o)},[a]),g={registerFrame:l,sendMessage:a,loadOptions:p,validate:$,addListener:(s,o,n)=>(r.current[s]||(r.current[s]={}),r.current[s][o]||(r.current[s][o]=[]),r.current[s][o].push(n),()=>{r.current[s][o]=r.current[s][o].filter(u=>u!==n)})};return e.createElement(h.Provider,{value:g},t)},M={},S=async t=>{try{const i=new URL(t).origin;if(M[i]!==void 0)return M[i];const r=await(await fetch(`${i}/mm-app-manifest.json`)).json();if(!r.version)throw new Error("Invalid manifest");return M[i]=r,r}catch{}return M[origin]=!1,!1},Z=async t=>!!await S(t),v=(t,i,f)=>{const r=e.useContext(h);if(r===null)throw new Error("useEmbeddedEffect must be used within a MMEmbeddableZoneProvider");const l=e.useRef(f);return e.useEffect(()=>{l.current=f},[f]),e.useEffect(()=>{if(!(!t||!i))return r.addListener(t,i,(...a)=>l.current(...a))},[r,t,i]),e.useCallback((a,p)=>r.sendMessage(t,a,p),[r,t])};L.propTypes={children:E.node.isRequired};const x=(F.default||F).iframe`
|
|
2
2
|
width: 100%;
|
|
3
3
|
height: 100%;
|
|
4
4
|
border: none;
|
|
5
|
-
visibility: ${t=>t
|
|
6
|
-
`,
|
|
5
|
+
visibility: ${t=>t.$isReady||t.$isVisibilityForced?"visible":"hidden"};
|
|
6
|
+
`,j=({id:t,src:i,path:f,onInit:r=()=>{},context:l,isConfiguring:a,isVisibilityForced:p,...$})=>{const g=e.useRef(),[s,o]=e.useState(),[n,u]=e.useState(0),{registerFrame:b,sendMessage:c}=e.useContext(h),[w,I]=e.useState(!0),[y,C]=e.useState();return e.useEffect(()=>{n&&c(t,"set-context",{context:l})},[l,t,n]),e.useEffect(()=>{f!==void 0&&C(f)},[f]),e.useEffect(()=>{y===void 0||!n||c(t,"navigate",{path:y})},[y,n,t,c]),e.useEffect(()=>{n&&c(t,"set-configuring",{isConfiguring:a})},[n,a]),e.useEffect(()=>{!i||!t||!g||(async()=>{const m=await Z(i);if(I(m),m){const q=new URL(i);b(t,q.origin,g),r(),o(`${q.origin}/mm-embedded-interop?id=${t}&origin=${window.location.origin}`);return}})()},[i,t,b,g]),v(t,"ready",()=>u(m=>m+1)),w?e.createElement(x,{$isReady:n,$isVisibilityForced:p,ref:g,src:s,...$}):e.createElement("div",{style:{height:"100%",display:"flex",alignItems:"center",justifyContent:"center"}},e.createElement("div",{style:{textAlign:"center"}},"Application must adhere to the MM App Manifest specification to be embedded."))};j.propTypes={id:E.string,src:E.string.isRequired,path:E.string,isVisibilityForced:E.bool,onInit:E.func},d.MMEmbeddableZone=j,d.MMEmbeddableZoneContext=h,d.MMEmbeddableZoneProvider=L,d.getAppInfo=S,d.testIsEmbeddable=Z,d.useEmbeddedEffect=v,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})});
|