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