UNPKG

react-native-surveys

Version:

Build your own forms, surveys and polls for your React Native apps.

140 lines (128 loc) 4.09 kB
import { queryStringToJSON } from "./utils"; export const SENDING_STATUS = "sending"; export const PREVIEW_STATUS = "preview"; export const TEMPLATE_STATUS = "template"; export const COMPLETE_STATUS = "complete"; export const ERROR_STATUS = "error"; export const SENDING_STATUSES_ARRAY = [ PREVIEW_STATUS, TEMPLATE_STATUS, COMPLETE_STATUS, ERROR_STATUS ]; export const SOURCE_WEB = "web"; export const SOURCE_REACT_NATIVE = "react-native"; export const FORM_ALREADY_COMPLETED = "Form was already completed"; export const FORM_ERROR = "Form does not exist or the link is broken"; export const FORM_NOT_FOUND = "Ooops, form with given ID doesn't exists"; export const returnInputName = (label = "") => { const search = label.toLowerCase(); if (search.includes("name")) return "name"; if (search.includes("email") || search.includes("mail")) return "email"; if (search.includes("phone")) return "tel"; if (search.includes("address")) return "address"; if (search.includes("city")) return "city"; if (search.includes("state")) return "state"; if (search.includes("zip")) return "zip"; if (search.includes("country")) return "country"; }; export const returnKeyboardType = (label = "") => { const search = label.toLowerCase(); if (search.includes("email") || search.includes("mail")) return "email-address"; if (search.includes("phone")) return "phone-pad"; }; export function findEmailAndName(form) { let email = "", name = ""; const pages = form.pages || []; pages.forEach(page => { const blocks = page.blocks || []; blocks.forEach(block => { if (block.type === "contact") { const fields = block.value || []; fields.forEach(field => { const nameType = returnInputName(field.question); if (nameType === "email") { email = field.value; } if (nameType === "name") { name = field.value; } }); } }); }); return { email, name }; } export function addExtraDataToForm(form, extraProp, queryParams = {}) { if (!form) return; let extraData = extraProp || queryParams.extraData; if (typeof extraData === "string") { try { extraData = JSON.parse(extraData); } catch (e) { console.error("Invalid query parameter for extraData", e); } } if (!extraData) return; if (typeof extraData !== "object") { console.error("extraData prop has invalid format. Should be an object."); return; } form.extraData = form.extraData || {}; Object.keys(extraData).forEach(key => { if (typeof extraData[key] !== "string") { console.error(`${key} has invalid data format. Should be string.`); return; } form.extraData[key] = extraData[key]; }); } export function predefineEmailAndName(form, email, name) { if (!form) return; const query = queryStringToJSON(); form.customer = form.customer || {}; const email_value = email || query.email; const name_value = name || query.name; if (email_value || name_value) { const pages = form.pages || []; form.customer.email = email_value; form.customer.name = name_value; pages.forEach(page => { const blocks = page.blocks || []; blocks.forEach(block => { if (block.type === "contact") { const fields = block.value || []; fields.forEach(field => { const nameType = returnInputName(field.question); if (nameType === "email") { field.value = email_value || ""; } if (nameType === "name") { field.value = name_value || ""; } }); } }); }); } } export function inIframe() { if (!window || !window.location) return false; if (!window) return false; try { return window.self !== window.top; } catch (e) { return true; } } export function getParentURL() { if (!window || !window.location) return ""; return window.location !== window.parent.location ? window.document.referrer : window.document.location.href; }