@edirect/form-engine
Version:
Achieve form logic reusage with forms expressed in json format.
94 lines (93 loc) • 2.72 kB
JavaScript
;
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;