UNPKG

4.59 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var client_1 = require("../client");
4var actions_1 = require("../actions");
5var Error_1 = require("../actions/Error");
6var actions_2 = require("./actions");
7var type_validate_1 = require("./type-validate");
8var utils_1 = require("./utils");
9var helper_1 = require("../actions/helper");
10function updateValidator(localOrigin, group, options) {
11 switch (group) {
12 case actions_1.Group.Button:
13 return actions_2.Button.validateProps(options);
14 case actions_1.Group.ButtonGroup:
15 return actions_2.ButtonGroup.validateProps(options);
16 case actions_1.Group.Modal:
17 return actions_2.Modal.validateProps(options, localOrigin);
18 case actions_1.Group.TitleBar:
19 return actions_2.TitleBar.validateProps(options);
20 case actions_1.Group.ResourcePicker:
21 return actions_2.ResourcePicker.validateProps(options);
22 case actions_1.Group.Toast:
23 return actions_2.Toast.validateProps(options);
24 case actions_1.Group.ContextualSaveBar:
25 return actions_2.ContextualSaveBar.validateProps(options);
26 }
27}
28function dispatchPayloadValidator(action, localOrigin) {
29 switch (action.group) {
30 case actions_1.Group.Button:
31 return actions_2.Button.validateAction(action);
32 case actions_1.Group.ButtonGroup:
33 return actions_2.ButtonGroup.validateAction(action);
34 case actions_1.Group.Modal:
35 return actions_2.Modal.validateAction(action, localOrigin);
36 case actions_1.Group.TitleBar:
37 return actions_2.TitleBar.validateAction(action);
38 case actions_1.Group.ResourcePicker:
39 return actions_2.ResourcePicker.validateAction(action);
40 case actions_1.Group.Loading:
41 return actions_2.Loading.validateAction(action);
42 case actions_1.Group.Toast:
43 return actions_2.Toast.validateAction(action);
44 case actions_1.Group.Cart:
45 return actions_2.Cart.validateAction(action);
46 case actions_1.Group.Navigation:
47 return actions_2.Navigation.validateAction(action);
48 case actions_1.Group.Print:
49 return actions_2.Print.validateAction(action);
50 case actions_1.Group.Scanner:
51 return actions_2.Scanner.validateAction(action);
52 case actions_1.Group.Fullscreen:
53 return actions_2.Fullscreen.validateAction(action);
54 case actions_1.Group.ContextualSaveBar:
55 return actions_2.ContextualSaveBar.validateAction(action);
56 }
57}
58function dispatchValidator(action, origin) {
59 var errors = type_validate_1.validate(action, type_validate_1.matchesObject({
60 group: type_validate_1.matchesEnum(actions_1.Group, {
61 message: function (_, value) { return "Unknown or unsupported action group `" + value + "`"; },
62 }),
63 version: type_validate_1.matchesString(),
64 }));
65 if (errors) {
66 return Error_1.invalidAction(action, utils_1.actionMessage(errors));
67 }
68 var payloadErrors = dispatchPayloadValidator(action, origin);
69 return payloadErrors ? Error_1.invalidPayload(action, utils_1.actionMessage(payloadErrors)) : action;
70}
71exports.connectValidatorToUpdateHook = function (next) {
72 return function (options) {
73 var args = [];
74 for (var _i = 1; _i < arguments.length; _i++) {
75 args[_i - 1] = arguments[_i];
76 }
77 // The group should be staticly set to the default initial group as certain components
78 // (ex. Button and ButtonGroup) can be dynamically grouped under a new group (ex. TitleBar)
79 // We accept partial options so the validator should be called on merged new and old options
80 var mergedOptions = helper_1.getMergedProps(this.options, options);
81 var errors = updateValidator(this.app.localOrigin, this.defaultGroup, mergedOptions);
82 if (errors) {
83 throw Error_1.fromAction(utils_1.actionMessage(errors), Error_1.ActionType.INVALID_OPTIONS);
84 }
85 return next.apply(void 0, [options].concat(args));
86 };
87};
88exports.connectValidatorToDispatchHook = function (next) {
89 return function (action) {
90 var finalAction = dispatchValidator(action, this.localOrigin);
91 return next(finalAction);
92 };
93};
94exports.validatorMiddleware = function (hooks) {
95 hooks.set(client_1.LifecycleHook.UpdateAction, exports.connectValidatorToUpdateHook);
96 hooks.set(client_1.LifecycleHook.DispatchAction, exports.connectValidatorToDispatchHook);
97};