@rgramblado/react-google-forms-interface
Version:
Tools to work with Google Forms and custom forms in react
60 lines (55 loc) • 2.06 kB
JavaScript
import react from "react";
import * as cheerio from 'cheerio';
const formToJson = async (url) => {
const response = await fetch(url + "/viewform")
const html = await response.text()
const $ = cheerio.load(html)
const fbzx = $('[name="fbzx"]').attr('value');
const scriptStringIdentifier = 'var FB_PUBLIC_LOAD_DATA_ =';
var scriptHtml = $('script').filter(function (_, el) {
return $(el).html().includes(scriptStringIdentifier);
}).first().html();
scriptHtml = scriptHtml.replace(';', '');
scriptHtml = scriptHtml.replace(scriptStringIdentifier, '');
const formDataRaw = JSON.parse(scriptHtml);
const title = formDataRaw[1][8]
const fields = formDataRaw[1][1].map((item) => {
// console.log(item[1], " : ", item[4])
return({
id: item[4][0][0],
name: item[1],
required: item[4][0][2],
type: item[3],
options: typeof item[4][0][1] === "object" && item[4][0][1] !== null ? item[4][0][1].map((option) => {
return option[0]
}) : null,
rows: item[3] === 7 ? item[4].map((i) => i[3][0]) : []
})
})
return ( {
title: title,
fields: fields,
fbzx: fbzx
} )
}
// const url = "https://docs.google.com/forms/d/e/1FAIpQLSeUbI_7lIilbvJ-SZSAGoYbO4A_nxX59AkJfKUfE__yiqeFvg"
// const response = await formToJson(url)
// console.log(response.fields)
// const urlSearch = new URLSearchParams()
// response.fields.map((f, index) => {
// urlSearch.append("entry." + f.id, `ASD`)
// })
// const GoogleForm = (url) => {
// const [form, setForm] = react.useState(null)
// const getForm = async () => {
// const response = await formToJson(url);
// return response
// }
// react.useEffect(() => {
// const form = getForm();
// setForm(form)
// }, [])
// return (<Form fields={form?.fields}/>)
// }
// export default GoogleForm
export { formToJson }