1 | "use strict";
|
2 | var __assign = (this && this.__assign) || function () {
|
3 | __assign = Object.assign || function(t) {
|
4 | for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5 | s = arguments[i];
|
6 | for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7 | t[p] = s[p];
|
8 | }
|
9 | return t;
|
10 | };
|
11 | return __assign.apply(this, arguments);
|
12 | };
|
13 | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
14 | if (k2 === undefined) k2 = k;
|
15 | Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
16 | }) : (function(o, m, k, k2) {
|
17 | if (k2 === undefined) k2 = k;
|
18 | o[k2] = m[k];
|
19 | }));
|
20 | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
21 | Object.defineProperty(o, "default", { enumerable: true, value: v });
|
22 | }) : function(o, v) {
|
23 | o["default"] = v;
|
24 | });
|
25 | var __importStar = (this && this.__importStar) || function (mod) {
|
26 | if (mod && mod.__esModule) return mod;
|
27 | var result = {};
|
28 | if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
29 | __setModuleDefault(result, mod);
|
30 | return result;
|
31 | };
|
32 | var __rest = (this && this.__rest) || function (s, e) {
|
33 | var t = {};
|
34 | for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
35 | t[p] = s[p];
|
36 | if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
37 | for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
38 | if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
39 | t[p[i]] = s[p[i]];
|
40 | }
|
41 | return t;
|
42 | };
|
43 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
44 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
45 | };
|
46 | Object.defineProperty(exports, "__esModule", { value: true });
|
47 | exports.RouterContext = exports.HostContext = void 0;
|
48 | var react_1 = __importStar(require("react"));
|
49 | var react_redux_1 = require("react-redux");
|
50 | var react_hooks_1 = require("@shopify/react-hooks");
|
51 | var Error_1 = require("@shopify/app-bridge/actions/Error");
|
52 | var Middleware_1 = require("./Middleware");
|
53 | var async_1 = require("./store/async");
|
54 | var actions_1 = require("./store/reducers/embeddedApp/appBridge/actions");
|
55 | var Host_1 = __importDefault(require("./Host"));
|
56 |
|
57 |
|
58 |
|
59 |
|
60 | exports.HostContext = react_1.createContext(null);
|
61 |
|
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 | exports.RouterContext = react_1.createContext(null);
|
68 |
|
69 |
|
70 |
|
71 |
|
72 |
|
73 | function HostProvider(props) {
|
74 | var _a = react_1.useState(false), initialized = _a[0], setInitialized = _a[1];
|
75 | var config = props.config, debug = props.debug, dispatchClientEventHandler = props.dispatchClientEventHandler, initialState = props.initialState, middleware = props.middleware, router = props.router, hostProps = __rest(props, ["config", "debug", "dispatchClientEventHandler", "initialState", "middleware", "router"]);
|
76 | var apiKey = config && config.apiKey;
|
77 | var previousApiKey = react_hooks_1.usePrevious(apiKey);
|
78 | var apiKeyChanged = (!previousApiKey && apiKey !== undefined) || apiKey !== previousApiKey;
|
79 | var previousInitialState = react_hooks_1.usePrevious(JSON.stringify(initialState));
|
80 | var initialStateChanged = JSON.stringify(initialState) !== previousInitialState;
|
81 | var _b = react_1.useState(), addReducer = _b[0], setAddReducer = _b[1];
|
82 | var _c = react_1.useState(), app = _c[0], setApp = _c[1];
|
83 | var appBridgeMiddleware = react_1.useMemo(function () { return Middleware_1.buildMiddleware(async_1.APP_BRIDGE_KEY, dispatchClientEventHandler, true); }, [dispatchClientEventHandler]);
|
84 | react_1.useEffect(function () {
|
85 | if (!appBridgeMiddleware || typeof appBridgeMiddleware.load !== 'function') {
|
86 | Error_1.throwError(Error_1.AppActionType.MISSING_APP_BRIDGE_MIDDLEWARE, 'Missing required context `appBridgeMiddleware`. Maybe you forgot the App Bridge `<Provider>` component?');
|
87 | }
|
88 | }, [appBridgeMiddleware]);
|
89 | var store = react_1.useMemo(function () {
|
90 | var hostMiddleware = middleware
|
91 | ? middleware.concat([appBridgeMiddleware])
|
92 | : [appBridgeMiddleware];
|
93 |
|
94 | var defaultState = initialState.features && { features: initialState.features };
|
95 | return async_1.createStore(hostMiddleware, defaultState, debug);
|
96 | }, [appBridgeMiddleware, debug, middleware]);
|
97 | react_1.useEffect(function () {
|
98 | if (initialized) {
|
99 | return;
|
100 | }
|
101 | store.dispatch(actions_1.StoreReadyAction);
|
102 | setInitialized(true);
|
103 | }, [initialized, store]);
|
104 | react_1.useEffect(function () {
|
105 | if (!config || !apiKeyChanged) {
|
106 | return;
|
107 | }
|
108 | var newApp = appBridgeMiddleware.load({
|
109 | config: config,
|
110 | type: 'application',
|
111 | });
|
112 | setApp(newApp);
|
113 | }, [appBridgeMiddleware, config, apiKeyChanged]);
|
114 | react_1.useEffect(function () {
|
115 | if (!initialStateChanged) {
|
116 | return;
|
117 | }
|
118 | setAddReducer(function () { return async_1.createAddReducer(store, initialState); });
|
119 | }, [store, initialState, initialStateChanged]);
|
120 | var hostContext = react_1.useMemo(function () {
|
121 | if (!config || !app || !addReducer) {
|
122 | return;
|
123 | }
|
124 | return { app: app, addReducer: addReducer, config: config, store: store };
|
125 | }, [app, addReducer, config, store]);
|
126 | if (!hostContext) {
|
127 | return react_1.default.createElement(react_redux_1.Provider, { store: store });
|
128 | }
|
129 | var hostContent = (react_1.default.createElement(exports.HostContext.Provider, { value: hostContext },
|
130 | react_1.default.createElement(react_redux_1.Provider, { store: store },
|
131 | react_1.default.createElement(Host_1.default, __assign({}, hostProps)))));
|
132 | if (!router) {
|
133 | return hostContent;
|
134 | }
|
135 | return react_1.default.createElement(exports.RouterContext.Provider, { value: router }, hostContent);
|
136 | }
|
137 | exports.default = HostProvider;
|