@shopify/app-bridge-host
Version:
App Bridge Host contains components and middleware to be consumed by the app's host, as well as the host itself. The middleware and `Frame` component are responsible for facilitating communication between the client and host, and used to act on actions se
161 lines (153 loc) • 6.42 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var tslib = require('tslib');
var core = require('@remote-ui/core');
var contextualSaveBar = require('@shopify/app-bridge-core/validate/actions/contextualSaveBar');
var ContextualSaveBar = require('@shopify/app-bridge-core/actions/ContextualSaveBar');
var generateUuid = require('@shopify/app-bridge-core/actions/uuid');
var helper = require('@shopify/app-bridge-core/actions/helper');
var utilities = require('../utilities.js');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var ContextualSaveBar__namespace = /*#__PURE__*/_interopNamespace(ContextualSaveBar);
var generateUuid__default = /*#__PURE__*/_interopDefault(generateUuid);
var contextualSaveBarActionCreatorsMap = {
discard: ContextualSaveBar__namespace.discard,
hide: ContextualSaveBar__namespace.hide,
save: ContextualSaveBar__namespace.save,
show: ContextualSaveBar__namespace.show,
update: ContextualSaveBar__namespace.update,
};
var defaultContextualSaveBarStore = null;
function contextualSaveBarReducer(state, action) {
if (state === void 0) { state = null; }
var castedAction = action;
if (contextualSaveBar.validateAction(castedAction)) {
return state;
}
switch (action.type) {
case ContextualSaveBar__namespace.Action.SHOW:
case ContextualSaveBar__namespace.Action.UPDATE: {
var _a = action.payload, id = _a.id, _b = _a.fullWidth, fullWidth = _b === void 0 ? false : _b, _c = _a.saveAction, saveAction = _c === void 0 ? {
disabled: false,
loading: false,
} : _c, _d = _a.discardAction, discardAction = _d === void 0 ? {
disabled: false,
loading: false,
discardConfirmationModal: false,
} : _d, _e = _a.leaveConfirmationDisable, leaveConfirmationDisable = _e === void 0 ? false : _e;
return {
id: id,
fullWidth: fullWidth,
saveAction: {
disabled: saveAction.disabled,
loading: saveAction.loading,
},
discardAction: {
disabled: discardAction.disabled,
loading: discardAction.loading,
discardConfirmationModal: discardAction.discardConfirmationModal,
},
leaveConfirmationDisable: leaveConfirmationDisable,
};
}
case ContextualSaveBar__namespace.Action.HIDE:
return null;
default:
return state;
}
}
var getApi = function (_a) {
var actions = _a.actions, subscribe = _a.subscribe;
var id = generateUuid__default.default();
var showOptions = {};
var visible = false;
function hide() {
actions.hide({ id: id });
visible = false;
}
var currentDiscardAction = {
action: ContextualSaveBar__namespace.Action.DISCARD,
};
var currentSaveAction = {
action: ContextualSaveBar__namespace.Action.SAVE,
};
function updateOnAction(currentSettings, onAction) {
var _a;
(_a = currentSettings.unsubscribe) === null || _a === void 0 ? void 0 : _a.call(currentSettings);
core.retain(onAction);
currentSettings.onAction = onAction;
var unsubscribe = subscribe(currentSettings.action, function () {
onAction === null || onAction === void 0 ? void 0 : onAction();
}, id);
currentSettings.unsubscribe = function () {
unsubscribe();
core.release(onAction);
};
}
function updateAction(currentSettings, nextOptions) {
var onAction = nextOptions.onAction, options = tslib.__rest(nextOptions, ["onAction"]);
var shouldUpdate = JSON.stringify(currentSettings.options) !== JSON.stringify(options);
currentSettings.options = helper.getMergedProps(currentSettings.options || {}, options);
if (shouldUpdate && visible) {
var updatedOptions = tslib.__assign(tslib.__assign({}, showOptions), { saveAction: currentSaveAction.options, discardAction: currentDiscardAction.options });
actions.update(tslib.__assign(tslib.__assign({}, updatedOptions), { id: id }));
}
if (onAction) {
updateOnAction(currentSettings, onAction);
}
}
return {
show: function (options) {
if (options) {
showOptions = helper.getMergedProps(showOptions, options);
}
actions.show(tslib.__assign(tslib.__assign({}, showOptions), { saveAction: currentSaveAction.options, discardAction: currentDiscardAction.options, id: id }));
visible = true;
},
hide: hide,
saveAction: {
setOptions: function (saveActionOptions) {
return updateAction(currentSaveAction, saveActionOptions);
},
},
discardAction: {
setOptions: function (discardActionOptions) {
return updateAction(currentDiscardAction, discardActionOptions);
},
},
};
};
/**
* An object containing the key, actions, initial state and reducer of the Loading feature
* Can be used with the `withFeature` decorator to add the reducer
* and then make its actions and store available to the wrapped component
* @public
* */
var feature = {
actions: contextualSaveBarActionCreatorsMap,
key: 'contextualSaveBar',
initialState: defaultContextualSaveBarStore,
reducer: utilities.resetStateReducer(contextualSaveBarReducer),
getApi: getApi,
};
exports.contextualSaveBarActionCreatorsMap = contextualSaveBarActionCreatorsMap;
exports.default = contextualSaveBarReducer;
exports.defaultContextualSaveBarStore = defaultContextualSaveBarStore;
exports.feature = feature;