UNPKG

@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
'use strict'; 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;