Files
formbricks-formbricks/lib/forms.ts

105 lines
2.4 KiB
TypeScript

import useSWR from "swr";
import { fetcher } from "./utils";
export const useForms = () => {
const { data, error, mutate } = useSWR(`/api/forms/`, fetcher);
return {
forms: data,
isLoadingForms: !error && !data,
isErrorForms: error,
mutateForms: mutate,
};
};
export const useForm = (id) => {
const { data, error, mutate } = useSWR(`/api/forms/${id}/`, fetcher);
return {
form: data,
isLoadingForm: !error && !data,
isErrorForm: error,
mutateForm: mutate,
};
};
export const persistForm = async (form) => {
try {
await fetch(`/api/forms/${form.id}/`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(form),
});
} catch (error) {
console.error(error);
}
};
export const createForm = async (form = {}) => {
try {
const res = await fetch(`/api/forms`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(form),
});
return await res.json();
} catch (error) {
console.error(error);
throw Error(`createForm: unable to create form: ${error.message}`);
}
};
export const getFormElementFieldSetter = (
form: any,
mutateForm: (any, boolean?) => void,
pageId: string,
elementId: string
) => {
return (input, field, parentField = "") =>
setFormElementField(
form,
mutateForm,
pageId,
elementId,
input,
field,
parentField
);
};
export const setFormElementField = (
form: any,
mutateForm: (any, boolean?) => void,
pageId: string,
elementId: string,
input: string | number,
field: string,
parentField: string = ""
) => {
const updatedForm = JSON.parse(JSON.stringify(form));
const elementIdx = getFormPage(updatedForm, pageId).elements.findIndex(
(e) => e.id === elementId
);
if (typeof elementIdx === "undefined") {
throw Error(
`setFormElementField: unable to find element with id ${elementId}`
);
}
if (parentField !== "") {
getFormPage(updatedForm, pageId).elements[elementIdx][parentField][field] =
input;
} else {
getFormPage(updatedForm, pageId).elements[elementIdx][field] = input;
}
mutateForm(updatedForm, false);
return updatedForm;
};
export const getFormPage = (form, pageId) => {
const page = form.pages.find((p) => p.id === pageId);
if (typeof page === "undefined") {
throw Error(`getFormPage: unable to find page with id ${pageId}`);
}
return page;
};