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

75 lines (70 loc) 3.3 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var tslib = require('tslib'); var Actions = require('@shopify/app-bridge-core/actions'); var modal = require('@shopify/app-bridge-core/validate/actions/modal'); var typeValidate = require('@shopify/app-bridge-core/validate/type-validate'); var actions = require('./actions.js'); var defaultModalStore = { open: false }; /** * The size `Auto` is being deprecated in version 1.12.x * Until we remove it permanently as a size option we need to allow opening modals with the size set to `Auto` * @internal */ function validateModal(action) { var sizeSchema = typeValidate.matchesObject({ size: typeValidate.makeOptional(typeValidate.matchesEnum(Actions.Modal.Size)), }); var _a = action.payload; _a.size; var excludeSize = tslib.__rest(_a, ["size"]); return typeValidate.validate(action, sizeSchema) || modal.validateAction(tslib.__assign(tslib.__assign({}, action), { payload: excludeSize })); } function modalReducer(state, action) { if (state === void 0) { state = defaultModalStore; } switch (action.type) { case Actions.Modal.Action.UPDATE: case Actions.Modal.Action.OPEN: { var castAction = action; if (validateModal(castAction)) { return state; } var payload = castAction.payload; var id = payload.id, title = payload.title, footer = payload.footer, size = payload.size; var height = state.height; var newState = { id: id, primaryAction: footer && footer.buttons ? footer.buttons.primary : undefined, secondaryActions: footer && footer.buttons ? footer.buttons.secondary : undefined, title: title, size: size || Actions.Modal.Size.Medium, open: action.type === Actions.Modal.Action.OPEN ? true : state.open, height: height, }; if (Actions.Modal.isIframeModal(payload)) { var url = payload.url, path = payload.path, loading = payload.loading; var location_1 = url || path || ''; return tslib.__assign(tslib.__assign({}, newState), { location: location_1, loading: loading }); } else if (Actions.Modal.isMessageModal(payload)) { return tslib.__assign(tslib.__assign({}, newState), { content: payload.message }); } return state; } case Actions.Modal.Action.UPDATE_CONTENT: { var loading = action.payload.loading; return tslib.__assign(tslib.__assign({}, state), { loading: loading }); } case Actions.Modal.Action.CLOSE: { return tslib.__assign(tslib.__assign({}, state), { open: false, height: undefined }); } case actions.LEGACY_MODAL_SET_HEIGHT: { return tslib.__assign(tslib.__assign({}, state), { height: action.payload }); } case Actions.Modal.Action.UPDATE_SIZE: { return tslib.__assign(tslib.__assign({}, state), { height: action.payload.height }); } default: return state; } } exports.default = modalReducer; exports.defaultModalStore = defaultModalStore;