UNPKG

@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.

84 lines (81 loc) 2.62 kB
// 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 = async (spaceId, params = {}, formAttributes = {}, type, clientId = "clientId") => { if (!spaceId) throw new Error("spaceId is required and was not provided"); let typeLower = type?.toLowerCase(); if (typeLower !== "saml" && typeLower !== "openid") { try { const { data } = await avWebQLApi.create( { query: ssoTypeQuery, variables: { id: spaceId }, operationName: "ssoTypeFindById" }, { headers: { "X-Client-ID": clientId } } ); typeLower = data?.data?.configurationFindOne?.type?.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 = { 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); for (const key of Object.keys(flat)) { const input = document.createElement("input"); input.type = "hidden"; input.name = key.replaceAll(/\[\d+]/g, "[]"); input.value = flat[key]; form.appendChild(input); } document.body.appendChild(form); form.submit(); }; var index_default = nativeForm; export { index_default as default };