UNPKG

@edirect/form-engine

Version:

Achieve form logic reusage with forms expressed in json format.

94 lines (93 loc) 2.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.handler = exports.events = void 0; var _index = require("../../apis/index.js"); var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; const DEFAULT_DEBOUNCE_MS = 200; const handler = ({ field, form, eventReducedSchema: { api } }) => api.forEach(apiCall => { var _a; const { scope } = field; const meetsRunningCondition = _index.validations.run(field.data.value, apiCall.preConditions || {}, field.scopedComponent.errorMessages, (_a = form === null || form === void 0 ? void 0 : form.formData) === null || _a === void 0 ? void 0 : _a.fields); if (field.fieldHasError(meetsRunningCondition) || apiCall.blockRequestWhenInvalid && field.fieldValidationsHaveError(false)) return; scope.globalScope = { namespace: 'api', key: apiCall.scope, data: { loading: true } }; field.debounce(() => { return fetch(apiCall.url, Object.assign(Object.assign({ method: apiCall.method }, apiCall.body && { body: JSON.stringify(apiCall.body) }), { headers: apiCall.headers || { 'Content-type': 'application/json; charset=UTF-8' } })).then(res => { const parsedResponse = res.json(); if (res.status >= 400) throw parsedResponse; return parsedResponse; }).then(res => { scope.globalScope = { namespace: 'api', key: apiCall.scope, data: Object.assign({ loading: false, response: res }, res) }; }).catch(err => __awaiter(void 0, void 0, void 0, function* () { const jsonErr = yield err; scope.globalScope = { namespace: 'api', key: apiCall.scope, data: { loading: false, error: true, err: jsonErr } }; })); }, apiCall.debounceTime || DEFAULT_DEBOUNCE_MS); }); exports.handler = handler; const events = component => Object.keys(component.api || {}); exports.events = events;