@availity/native-form
Version:
Submit JSON data via a native form, not AJAX. Useful when you need to open a new page with a POST action.
120 lines (116 loc) • 4.08 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a, prop, b[prop]);
}
return a;
};
var __async = (__this, __arguments, generator) => {
return new Promise((resolve, reject) => {
var fulfilled = (value) => {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
};
var rejected = (value) => {
try {
step(generator.throw(value));
} catch (e) {
reject(e);
}
};
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
step((generator = generator.apply(__this, __arguments)).next());
});
};
// src/index.js
import { avWebQLApi } from "@availity/api-axios";
// src/flattenObject.js
var parseValue = (value) => value === void 0 || value === null ? value : value.toString();
var flattenObject = (ob) => Object.keys(ob).reduce((toReturn, k) => {
if (Object.prototype.toString.call(ob[k]) === "[object Date]") {
toReturn[k] = ob[k].toJSON();
} else if (ob[k] && typeof ob[k] === "object") {
const flatObject = flattenObject(ob[k]);
const isArray = Array.isArray(ob[k]);
for (const k2 of Object.keys(flatObject)) {
toReturn[`${k}${isArray ? k2.replace(/^(\d+)(\..*)?/, "[$1]$2") : `.${k2}`}`] = parseValue(flatObject[k2]);
}
} else {
toReturn[k] = parseValue(ob[k]);
}
return toReturn;
}, {});
var flattenObject_default = flattenObject;
// src/index.js
var ssoTypeQuery = `
query ssoTypeFindById($id: ID!){
configurationFindOne(id: $id){
...on Saml{
type
}
...on OpenId{
type
}
}
}
`;
var nativeForm = (_0, ..._1) => __async(void 0, [_0, ..._1], function* (spaceId, params = {}, formAttributes = {}, type, clientId = "clientId") {
var _a, _b, _c;
if (!spaceId) throw new Error("spaceId is required and was not provided");
let typeLower = type == null ? void 0 : type.toLowerCase();
if (typeLower !== "saml" && typeLower !== "openid") {
try {
const { data } = yield avWebQLApi.create(
{
query: ssoTypeQuery,
variables: { id: spaceId },
operationName: "ssoTypeFindById"
},
{ headers: { "X-Client-ID": clientId } }
);
typeLower = (_c = (_b = (_a = data == null ? void 0 : data.data) == null ? void 0 : _a.configurationFindOne) == null ? void 0 : _b.type) == null ? void 0 : _c.toLowerCase();
} catch (error) {
if (error.response) {
throw new Error("The server responded with an error");
} else if (error.request) {
throw new Error("No response received");
} else {
throw new Error("An error occurred while setting up request, check your configurations");
}
}
}
const mergedOptions = __spreadValues({
method: "post",
action: `/ms/api/availity/internal/spc/magneto/sso/v1/${typeLower}/${spaceId}`,
target: "_blank"
}, formAttributes);
const form = document.createElement("form");
for (const key of Object.keys(mergedOptions)) {
form.setAttribute(key, mergedOptions[key]);
}
const flat = flattenObject_default(params);
const fields = Object.keys(flat).map((key) => {
const name = key.replaceAll(/\[\d+]/g, "[]");
const value = flat[key];
return `<input type="hidden" name="${name}" value="${value}" />`;
}).join("");
form.insertAdjacentHTML("beforeend", fields);
document.body.appendChild(form);
form.submit();
});
var index_default = nativeForm;
export {
index_default as default
};