@shopify/app-bridge-core
Version:
**[Join our team and work on libraries like this one.](https://www.shopify.ca/careers)**
67 lines (66 loc) • 3.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateAction = exports.validateProps = void 0;
var NavigationMenu_1 = require("../../actions/Menu/NavigationMenu");
var ChannelMenu_1 = require("../../actions/Menu/ChannelMenu");
var type_validate_1 = require("../type-validate");
var utils_1 = require("../utils");
var helper_1 = require("../../actions/helper");
var link_1 = require("./link");
var linkOptionsValidator = (0, type_validate_1.matchesObject)({ id: (0, type_validate_1.matchesString)(), options: link_1.linkPropsSchema });
function activeLinkError(value) {
return [
{
error: 'invalid_active_item',
value: value,
message: 'expected active item to exist in menu items',
},
];
}
function getOptionsSchema(options) {
var baseSchema = (0, type_validate_1.matchesObject)({
items: (0, type_validate_1.makeOptional)((0, type_validate_1.matchesArray)(linkOptionsValidator)),
active: (0, type_validate_1.makeOptional)(linkOptionsValidator),
});
var items = options.items, active = options.active;
if (items && active) {
var activeItemSchema = (0, type_validate_1.matchesObject)({
active: (0, type_validate_1.composeSchemas)(linkOptionsValidator, function (value) {
return items.find(function (item) { return item.id === value.id; }) ? undefined : activeLinkError(value);
}),
});
return (0, type_validate_1.composeSchemas)(baseSchema, activeItemSchema);
}
return baseSchema;
}
function getPayloadSchema(payload) {
var baseSchema = (0, type_validate_1.matchesObject)({
items: (0, type_validate_1.makeOptional)((0, type_validate_1.matchesArray)(link_1.linkActionSchema)),
active: (0, type_validate_1.makeOptional)((0, type_validate_1.matchesString)()),
});
var items = payload.items, active = payload.active;
if (items && active) {
var activeItemSchema = (0, type_validate_1.matchesObject)({
active: (0, type_validate_1.composeSchemas)((0, type_validate_1.matchesString)(), function (value) {
return items.find(function (item) { return item.id === value; })
? undefined
: activeLinkError(value);
}),
});
return (0, type_validate_1.composeSchemas)(baseSchema, activeItemSchema);
}
return baseSchema;
}
function validateProps(props) {
var result = (0, type_validate_1.validate)(props, getOptionsSchema(props));
return result;
}
exports.validateProps = validateProps;
function validateAction(action) {
var actionType = NavigationMenu_1.Action;
if ((0, helper_1.findMatchInEnum)(ChannelMenu_1.Action, action.type)) {
actionType = ChannelMenu_1.Action;
}
return (0, type_validate_1.validate)(action, (0, utils_1.createActionValidator)(actionType, getPayloadSchema(action.payload), true, false));
}
exports.validateAction = validateAction;