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

70 lines (67 loc) 3.04 kB
import { __assign, __rest } from 'tslib'; import { Modal } from '@shopify/app-bridge-core/actions'; import { validateAction } from '@shopify/app-bridge-core/validate/actions/modal'; import { matchesObject, makeOptional, matchesEnum, validate } from '@shopify/app-bridge-core/validate/type-validate'; import { LEGACY_MODAL_SET_HEIGHT } from './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 = matchesObject({ size: makeOptional(matchesEnum(Modal.Size)), }); var _a = action.payload; _a.size; var excludeSize = __rest(_a, ["size"]); return validate(action, sizeSchema) || validateAction(__assign(__assign({}, action), { payload: excludeSize })); } function modalReducer(state, action) { if (state === void 0) { state = defaultModalStore; } switch (action.type) { case Modal.Action.UPDATE: case 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 || Modal.Size.Medium, open: action.type === Modal.Action.OPEN ? true : state.open, height: height, }; if (Modal.isIframeModal(payload)) { var url = payload.url, path = payload.path, loading = payload.loading; var location_1 = url || path || ''; return __assign(__assign({}, newState), { location: location_1, loading: loading }); } else if (Modal.isMessageModal(payload)) { return __assign(__assign({}, newState), { content: payload.message }); } return state; } case Modal.Action.UPDATE_CONTENT: { var loading = action.payload.loading; return __assign(__assign({}, state), { loading: loading }); } case Modal.Action.CLOSE: { return __assign(__assign({}, state), { open: false, height: undefined }); } case LEGACY_MODAL_SET_HEIGHT: { return __assign(__assign({}, state), { height: action.payload }); } case Modal.Action.UPDATE_SIZE: { return __assign(__assign({}, state), { height: action.payload.height }); } default: return state; } } export { modalReducer as default, defaultModalStore };