react-native-surveys
Version:
Build your own forms, surveys and polls for your React Native apps.
140 lines (128 loc) • 4.09 kB
JavaScript
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;
}