UNPKG

@rgramblado/react-google-forms-interface

Version:

Tools to work with Google Forms and custom forms in react

60 lines (55 loc) 2.06 kB
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 }