{"version":3,"sources":["components/AuthContext.tsx","components/Sidebar.tsx","assets/no-user.png","components/Footer.tsx","assets/contact-us-iphone.png","routes/Home.tsx","assets/code.png","assets/contact-form.png","routes/Learn.tsx","routes/Login.tsx","utils/helpers.ts","routes/SignUp.tsx","components/Input.tsx","components/FormModal.tsx","assets/loader.png","components/Loader.tsx","routes/FormList.tsx","routes/FormShow.tsx","routes/Submissions.tsx","routes/Account.tsx","routes/Help.tsx","utils/schema.ts","components/Page.tsx","components/Submenu.tsx","components/ScrollToTop.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"names":["initialState","JSON","parse","localStorage","getItem","updater","state","update","initialContext","AuthContext","React","createContext","AuthController","props","useReducer","authState","updateAuth","useEffect","setItem","stringify","value","useMemo","Provider","children","Sidebar","useContext","dispatch","history","useHistory","className","data-testid","type","data-bs-toggle","data-bs-target","aria-controls","to","alt","src","width","height","tabIndex","id","aria-labelledby","data-bs-dismiss","aria-label","activeClassName","aria-current","exact","icon","faHome","faGraduationCap","faQuestionSquare","loggedIn","faFileCode","user","data-bs-auto-close","aria-expanded","email","size","faUser","onClick","e","preventDefault","currentTarget","parentElement","classList","replace","push","faSignOutAlt","faSignInAlt","faUserPlus","Footer","process","Date","getFullYear","Home","faCode","faCloud","phone","href","Learn","faArrowToTop","code","contactForm","Login","useState","username","setUserName","password","setPassword","errors","setErrors","apiUrl","loginUser","a","fetch","method","headers","body","then","data","json","handleSubmit","undefined","result","error","name","providerId","access_token","createdAt","onSubmit","length","role","map","fixedWidth","placeholder","autoComplete","aria-describedby","onChange","target","faLock","htmlFor","capitalize","string","toUpperCase","slice","SignUp","setName","passwordConfirmation","setPasswordConfirmation","useMutation","addUser","provider","message","console","faSignature","faCheckSquare","Input","this","invalid","register","required","label","defaultValue","helpText","Component","FormModal","form","title","useForm","formErrors","formState","reset","updateForm","addForm","results","honeyPot","userId","modalElement","document","getElementById","modal","Modal","getInstance","hide","log","aria-hidden","noValidate","Loader","loader","FormList","useQuery","isLoading","sort","b","getTime","faPlus","formatDistance","addSuffix","messageCount","FormShow","formId","useParams","client","deleteForm","delete","faEdit","faQuestionCircle","aria-disabled","faTrashAlt","inverse","Submissions","page","setPage","selectedMessage","setSelectedMessage","meta","refetch","maxPage","Math","ceil","total","messageSummary","Object","values","join","substring","showSelectedMessage","mutate","isRead","getOrCreateInstance","show","markUnread","groups","reduce","date","formatISO","split","keys","data-bs-parent","faEnvelopeOpen","faEnvelope","format","faSearchPlus","disabled","toLocaleString","key","Account","alert","setAlert","updateUser","userErrors","logout","formResults","timeout","setTimeout","clearTimeout","aria-selected","i","isDirty","Help","schema","messages","fields","updatedAt","relationships","forms","readonly","resolve","attrs","users","Page","rest","Submenu","pathname","useLocation","html","setHtml","match","goBack","ScrollToTop","hash","window","scrollTo","App","ApiClient","url","Authorization","path","component","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode"],"mappings":"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","file":"static/js/main.c5942825.chunk.js","sourcesContent":["import React, { ReactNode, useEffect, useMemo, useReducer } from \"react\";\n\nexport type User = {\n id: string;\n password?: string;\n passwordConfirmation?: string;\n email: string;\n name: string;\n providerId: string;\n createdAt: Date;\n};\n\nexport type State = {\n loggedIn: boolean;\n user: User | null;\n};\n\nconst initialState: State = JSON.parse(\n (localStorage.getItem(\"auth\") as string) || \"{}\"\n);\n\nconst updater = (state: State, update: Partial): State => {\n return { ...state, ...update };\n};\n\ntype Props = {\n children: ReactNode[] | ReactNode;\n};\n\ntype IAuthContext = [State, React.Dispatch>];\nconst initialContext: IAuthContext = [{ ...initialState }, () => {}];\n\nexport const AuthContext = React.createContext(initialContext);\n\nexport function AuthController(props: Props) {\n const [authState, updateAuth] = useReducer(updater, initialState);\n useEffect(() => {\n localStorage.setItem(\"auth\", JSON.stringify(authState));\n }, [authState]);\n\n const value = useMemo(() => [authState, updateAuth], [authState]) as [\n State,\n React.Dispatch>\n ];\n return (\n {props.children}\n );\n}\n","import { useContext } from \"react\";\nimport {\n faGraduationCap,\n faHome,\n faFileCode,\n faSignInAlt,\n faUserPlus,\n faSignOutAlt,\n faQuestionSquare,\n faUser,\n} from \"@fortawesome/pro-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { Link, NavLink, useHistory } from \"react-router-dom\";\nimport { AuthContext } from \"./AuthContext\";\nimport Gravatar from \"react-gravatar\";\n\nimport noUser from \"../assets/no-user.png\";\n\nfunction Sidebar() {\n const [state, dispatch] = useContext(AuthContext);\n const history = useHistory();\n\n const logOut = (e: React.SyntheticEvent) => {\n e.preventDefault();\n e?.currentTarget?.parentElement?.parentElement?.classList?.replace(\n \"show\",\n \"hide\"\n );\n\n dispatch({ loggedIn: false, user: null });\n history.push(\"/\");\n };\n\n return (\n \n
\n \n \n \n \n \n \n\n \n
\n \n Post2API\n \n \n
\n
\n
    \n \n \n \n Home\n \n \n \n \n \n Learn\n \n \n\n \n \n \n Help\n \n \n\n {state?.loggedIn && (\n \n \n \n Forms\n \n \n )}\n
\n
\n
\n\n
\n {state?.user ? (\n \n ) : (\n \n \n
\n )}\n\n {state?.loggedIn ? (\n \n
  • \n \n \n Account\n \n
  • \n
  • \n \n
  • \n \n ) : (\n \n
  • \n \n \n Log in\n \n
  • \n
  • \n \n \n Sign up\n \n
  • \n \n )}\n \n \n \n );\n}\n\nexport default Sidebar;\n","export default \"data:image/png;base64,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\"","function Footer() {\n return (\n
    \n
    {`v${process.env.REACT_APP_VERSION}`}
    \n
    \n © {new Date().getFullYear()} Post2API\n
    \n
    \n );\n}\n\nexport default Footer;\n","export default __webpack_public_path__ + \"static/media/contact-us-iphone.8dc7b01d.png\";","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faCode, faCloud } from \"@fortawesome/pro-solid-svg-icons\";\nimport phone from \"../assets/contact-us-iphone.png\";\nimport React from \"react\";\n\nfunction Home() {\n return (\n
    \n
    \n

    Handle any form with ease

    \n
    \n

    \n \n Your form code, our API.\n \n

    \n
    \n With our API, data collection from your form is as easy as signing\n up!\n
    \n
    \n
    \n\n
    \n

    How it Works

    \n
    \n

    \n Take your standard \"Contact Us\" form on your website...\n

    \n \"Contact\n

    \n Simply point your form code's action to Post2API, and\n done!\n
    \n \n Learn More\n \n

    \n
    \n
    \n
    \n );\n}\n\nexport default Home;\n","export default __webpack_public_path__ + \"static/media/code.9ab4c97f.png\";","export default __webpack_public_path__ + \"static/media/contact-form.0d47943c.png\";","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faArrowToTop } from \"@fortawesome/pro-solid-svg-icons\";\nimport React from \"react\";\nimport code from \"../assets/code.png\";\nimport contactForm from \"../assets/contact-form.png\";\n\nfunction Learn() {\n return (\n
    \n

    \n Learn\n

    \n

    Post2API is simple to learn

    \n\n

    \n \n Signing Up\n \n

    \n

    \n First step in getting started is signing up for a new account. We simply\n need your name and email, along with a password. The email address that\n you enter will be your login name, as well as the mailbox where you will\n be receiving new form submissions.\n

    \n \n \n \n\n

    \n \n Forms Overview\n \n

    \n

    \n Forms on Post2API mirror web forms on your website. Be it a \"Contact Us\"\n form, or any other type of form, we will capture submissions and email\n you each time you receive a new one. Doing this, requires a simple\n change to your code. Say you have something like the following code:\n

    \n \"Sample\n

    \n All you would need to do here, is replace the form action{\" \"}\n (the highlighted part of the example) with the URL from the Form Detail\n page. Redeploy to your website, and that's all!\n

    \n \n \n \n\n

    \n \n Forms: Honey Pot\n \n

    \n

    \n When you have a contact or other web form on your site, SPAM is a big\n problem typically. One easy technique for thwarting bots and unwanted\n messages is using a Honey Pot.\n

    \n

    \n A Honey Pot is a hidden field (but not an{\" \"}\n <input type=\"hidden\" ...>) on a form. Take a look at\n the following form:\n

    \n \"Sample\n

    \n This form looks pretty standard. If we look at the code. however, we\n would see there is an extra <input type=\"text\" ...>{\" \"}\n element on the form. It is hidden through some special CSS class on the\n element, so it isn't visible to anyone except bots. A bot is a computer,\n and reads code to fill in forms.\n

    \n

    \n The idea is that it looks like a valid text field in code. We assign it\n a name that we check for when a form is submitted. If that\n field has a value, we don't log or send you the message.\n When you edit your form, or create a new one, you can change/add a Honey\n Pot.\n

    \n

    \n On the form details page, you'll see a simple example of a hidden text\n field, it will have the Honey Pot value that you entered so it's just\n copy and paste. It will look something like this:{\" \"}\n \n <input type=\"text\" name=\"honey-pot\" style=\"display: none\">\n \n \n \n \n

    \n
    \n );\n}\n\nexport default Learn;\n","import { faLock, faUser } from \"@fortawesome/pro-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport React, { useContext, useState } from \"react\";\nimport { Link, useHistory } from \"react-router-dom\";\nimport { AuthContext } from \"../components/AuthContext\";\n\nfunction Login() {\n const [username, setUserName] = useState();\n const [password, setPassword] = useState();\n const [errors, setErrors] = useState([]);\n const history = useHistory();\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [_, dispatch] = useContext(AuthContext);\n\n const apiUrl = process.env.REACT_APP_API_URL;\n\n const validate = () => {\n if (username === undefined || username === \"\") {\n setErrors([\"Email must exist\"]);\n return false;\n }\n\n if (password === undefined || password === \"\") {\n setErrors([\"Password must exist\"]);\n return false;\n }\n return true;\n };\n\n async function loginUser(\n username: string | undefined,\n password: string | undefined\n ) {\n return await fetch(`${apiUrl}/login`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: `username=${username}&password=${password}`,\n }).then((data) => data.json());\n }\n\n const handleSubmit = async (e: React.SyntheticEvent) => {\n setErrors([]);\n\n e.preventDefault();\n\n const validation = validate();\n if (!validation) {\n return false;\n }\n\n try {\n const result = await loginUser(username, password);\n\n if (result.error) {\n setErrors([result.error]);\n return false;\n }\n\n dispatch({\n loggedIn: true,\n user: {\n id: result.user.id,\n email: result.user.email,\n name: result.user.name,\n providerId: result.access_token,\n createdAt: new Date(result.user.createdAt),\n },\n });\n\n history.push(\"/\");\n return true;\n } catch (error: any) {\n setErrors([\"Connection error\"]);\n return false;\n }\n };\n\n return (\n
    \n
    \n
    \n

    Welcome back! 👋

    \n

    Log into your account to continue

    \n
    \n {\n return handleSubmit(e);\n }}\n >\n {errors && errors.length > 0 && (\n
    \n
      \n {errors.map((e: string) => (\n
    • {e}
    • \n ))}\n
    \n
    \n )}\n
    \n
    \n \n \n \n setUserName(e.target.value)}\n />\n
    \n \n We'll never share your email with anyone else.\n \n
    \n
    \n \n \n \n setPassword(e.target.value)}\n />\n
    \n
    \n \n \n
    \n\n
    \n \n
    \n \n
    \n \n Don't have an account yet? Create One\n \n
    \n
    \n
    \n );\n}\n\nexport default Login;\n","export function capitalize(string: string): string {\n return string[0].toUpperCase() + string.slice(1);\n}\n","import { useMutation } from \"jsonapi-react\";\nimport React, { useContext, useState } from \"react\";\nimport { Link, useHistory } from \"react-router-dom\";\nimport {\n faCheckSquare,\n faLock,\n faSignature,\n faUser,\n} from \"@fortawesome/pro-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\n\nimport { AuthContext } from \"../components/AuthContext\";\nimport { capitalize } from \"../utils/helpers\";\n\ntype ApiUser = {\n id: string;\n email: string;\n name: string;\n providerId: string;\n createdAt: Date;\n};\n\nfunction SignUp() {\n const [name, setName] = useState();\n const [username, setUserName] = useState();\n const [password, setPassword] = useState();\n const [passwordConfirmation, setPasswordConfirmation] = useState();\n const [addUser, { error }] = useMutation(\"users\");\n const [errors, setErrors] = useState([]);\n\n const history = useHistory();\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [_, dispatch] = useContext(AuthContext);\n const validate = () => {\n if (name === undefined || name === \"\") {\n setErrors([\"Name must exist\"]);\n return false;\n }\n\n if (username === undefined || username === \"\") {\n setErrors([\"Email must exist\"]);\n return false;\n }\n\n if (password === undefined || password === \"\") {\n setErrors([\"Password must exist\"]);\n return false;\n }\n\n if (password.length < 6) {\n setErrors([\"Password must be at least 6 characters\"]);\n return false;\n }\n\n if (passwordConfirmation === undefined || passwordConfirmation === \"\") {\n setErrors([\"Password Confirmation must exist\"]);\n return false;\n }\n\n if (password !== passwordConfirmation) {\n setErrors([\"Password doesn't match confirmation\"]);\n return false;\n }\n return true;\n };\n\n const handleSubmit = async (e: React.SyntheticEvent) => {\n e.preventDefault();\n setErrors([]);\n const valid = validate();\n\n if (!valid) {\n return false;\n }\n\n try {\n const result = await addUser({\n email: username,\n password,\n provider: \"local\",\n name,\n });\n\n if (error) {\n setErrors(\n error.errors.map((e: { message: string }) => capitalize(e.message))\n );\n return false;\n }\n\n if (!result.data) {\n setErrors([\"No Data in result\"]);\n return false;\n }\n\n dispatch({\n loggedIn: true,\n user: {\n id: result.data?.id,\n email: result.data?.email,\n name: result.data?.name,\n providerId: result.data?.providerId,\n createdAt: result.data?.createdAt,\n },\n });\n\n history.push(\"/\");\n return true;\n } catch (error: any) {\n setErrors([\"Unknown Error\"]);\n console.error(error);\n return false;\n }\n };\n\n return (\n
    \n
    \n
    \n

    Create Account

    \n

    Start doing things in an instant

    \n
    \n {\n return handleSubmit(e);\n }}\n >\n {errors && errors.length > 0 && (\n
    \n
      \n {errors.map((e: string) => (\n
    • {e}
    • \n ))}\n
    \n
    \n )}\n\n
    \n \n \n \n setName(e.target.value)}\n />\n
    \n\n
    \n
    \n \n \n \n setUserName(e.target.value)}\n />\n
    \n \n We'll never share your email with anyone else.\n \n
    \n
    \n
    \n \n \n \n setPassword(e.target.value)}\n />\n
    \n \n Your password should be at least 6 characters\n \n
    \n
    \n \n \n \n setPasswordConfirmation(e.target.value)}\n />\n
    \n
    \n \n
    \n \n
    \n \n Already have an account? Login\n \n
    \n
    \n
    \n );\n}\n\nexport default SignUp;\n","import React from \"react\";\nimport { Path, UseFormRegister } from \"react-hook-form\";\n\ntype InputProps = {\n id: Path;\n label: string;\n register: UseFormRegister;\n required: boolean;\n defaultValue?: string;\n invalid?: boolean;\n helpText?: string;\n type?: string;\n};\n\nexport default class Input extends React.Component> {\n render() {\n return (\n
    \n
    \n \n {this.props.invalid && (\n
    \n {this.props.label} is required\n
    \n )}\n \n
    \n {this.props.helpText && (\n {this.props.helpText}\n )}\n
    \n );\n }\n}\n","import { Modal } from \"bootstrap\";\nimport { useMutation } from \"jsonapi-react\";\nimport { useContext } from \"react\";\nimport { SubmitHandler, useForm } from \"react-hook-form\";\n\nimport { Form } from \"../routes/FormShow\";\nimport { AuthContext } from \"./AuthContext\";\nimport Input from \"./Input\";\n\ntype Props = {\n form: Form;\n id: string;\n title: string;\n};\n\nfunction FormModal({ form, id, title }: Props) {\n const {\n register,\n formState: { errors: formErrors },\n handleSubmit,\n reset,\n } = useForm
    ();\n\n const [updateForm] = useMutation([\"forms\", form.id]);\n const [addForm] = useMutation(\"forms\");\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [state, _] = useContext(AuthContext);\n\n const onSubmit: SubmitHandler = async (results, e) => {\n try {\n if (form.id) {\n await updateForm({\n name: results.name,\n honeyPot: results.honeyPot,\n userId: state?.user?.id,\n });\n } else {\n await addForm({\n name: results.name,\n honeyPot: results.honeyPot,\n userId: state?.user?.id,\n });\n }\n\n const modalElement = document.getElementById(id);\n if (!modalElement) {\n return;\n }\n\n const modal = Modal.getInstance(modalElement);\n if (modal) {\n reset();\n\n modal.hide();\n }\n } catch (e) {\n console.log(e);\n }\n };\n\n return (\n \n
    \n
    \n
    \n
    \n {title}\n
    \n reset()}\n >\n
    \n \n
    \n \n id=\"name\"\n label=\"Form Name\"\n register={register}\n required={true}\n defaultValue={form.name}\n invalid={!!formErrors.name}\n helpText=\"Be sure to give your form a meaningful name\"\n />\n\n \n id=\"honeyPot\"\n label=\"Honey Pot\"\n register={register}\n required={false}\n defaultValue={form.honeyPot}\n />\n
    \n
    \n reset()}\n >\n Cancel\n \n \n
    \n \n
    \n
    \n \n );\n}\n\nexport default FormModal;\n","export default __webpack_public_path__ + \"static/media/loader.e0189800.png\";","import React from \"react\";\nimport loader from \"../assets/loader.png\";\n\nfunction Loader() {\n return (\n
    \n \"Loading\"\n
    \n );\n}\n\nexport default Loader;\n","import { faPlus } from \"@fortawesome/pro-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { formatDistance } from \"date-fns\";\nimport { useQuery } from \"jsonapi-react\";\nimport { Link } from \"react-router-dom\";\n\nimport FormModal from \"../components/FormModal\";\nimport Loader from \"../components/Loader\";\nimport { Form } from \"./FormShow\";\n\nfunction FormList() {\n const { data, isLoading } = useQuery(\"forms\");\n\n if (isLoading) {\n return ;\n }\n\n if (!data) {\n return
    No forms found
    ;\n }\n\n data.sort((a: Form, b: Form) => {\n if (!a || !b || !a.createdAt || !b.createdAt) {\n return 0;\n }\n return b.createdAt.getTime() - a.createdAt.getTime();\n });\n\n return (\n
    \n \n \n \n \n

    Forms

    \n

    Forms for all your contact needs

    \n
    \n {data.length === 0 ? (\n

    There are no forms yet!

    \n ) : (\n data.map((form: any) => {\n return (\n \n
    \n
    \n
    \n
    {form.name}
    \n \n {formatDistance(\n Date.parse(form.createdAt),\n new Date(),\n {\n addSuffix: true,\n }\n )}\n \n
    \n
    \n \n {form.messageCount || 0}\n \n
    \n
    \n
    \n \n );\n })\n )}\n
    \n
    \n );\n}\n\nexport default FormList;\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { useQuery } from \"jsonapi-react\";\nimport { Link, useHistory, useParams } from \"react-router-dom\";\nimport {\n faEdit,\n faQuestionCircle,\n faTrashAlt,\n} from \"@fortawesome/pro-solid-svg-icons\";\nimport { Modal } from \"bootstrap\";\nimport { HashLink } from \"react-router-hash-link\";\n\nimport FormModal from \"../components/FormModal\";\nimport Loader from \"../components/Loader\";\n\nexport type Form = {\n id: string;\n name: string;\n honeyPot?: string;\n createdAt?: Date;\n updatedAt?: Date;\n messageCount?: number;\n messages?: Message[];\n};\n\nexport type Message = {\n id: string;\n formId: string;\n message: any;\n isRead: boolean;\n isEmailed: boolean;\n createdAt: Date;\n updatedAt: Date;\n};\n\nfunction FormShow() {\n const { formId } = useParams<{ formId: string }>();\n const history = useHistory();\n const { data, client, isLoading } = useQuery
    ([\"forms\", formId]);\n\n if (isLoading) {\n return ;\n }\n\n if (!data) {\n return
    Could not find form
    ;\n }\n\n const deleteForm = async () => {\n try {\n const { error } = await client.delete([\"forms\", formId]);\n if (error) {\n console.error(error);\n return;\n }\n\n const modalElement = document.getElementById(\"deleteFormModal\");\n if (!modalElement) {\n return;\n }\n\n const modal = Modal.getInstance(modalElement);\n if (modal) {\n modal.hide();\n }\n\n history.push(\"/forms\");\n } catch (err) {\n console.error(err);\n }\n };\n\n return (\n
    \n
    \n

    {data.name}

    \n \n \n \n
    \n \n
    \n

    \n Your Form's action\n

    \n \n \n \n
    \n
    \n https://api.post2api.com/f/{data.id}\n
    \n

    \n All you need to do is take the URL above and replace your web form's{\" \"}\n action.\n

    \n

    \n Be sure to also set your form's method to{\" \"}\n \"post\"\n

    \n

    Here is an example form with your form id embedded in it:

    \n {/* prettier-ignore */}\n
    {`\n  \n    \n    \n    \n    \n  `}\n          
    \n
    \n \n Learn More\n \n
    \n
    \n
    \n {data.honeyPot && (\n <>\n
    \n

    Honey Pot

    \n \n \n \n
    \n
    \n \n <input type=\"text\" name=\"{data.honeyPot}\" style=\"display:\n none\">\n \n
    \n

    \n What is a HoneyPot? Basically a fake field on your form, that if\n it's filled in, we know it's SPAM\n

    \n

    \n You can just copy the example above and add it to your form.\n

    \n
    \n \n Learn More\n \n
    \n
    \n
    \n \n )}\n\n

    Submissions

    \n
    \n You have {data.messageCount} submissions.\n
    \n \n View Submissions\n \n
    \n
    \n\n

    Danger Zone

    \n
    \n
    \n \n \n Delete Form\n \n

    \n Delete this form?\n
    \n Once you delete a form, there is no going back.\n

    \n
    \n
    \n\n \n
    \n
    \n
    \n
    \n Confirm Delete\n
    \n \n
    \n
    \n

    \n Are you sure you want to delete this form and all your{\" \"}\n {data.messageCount} messages for it?\n

    \n

    \n You will no longer be able to collect for submissions through\n your website.\n

    \n

    \n This cannot be undone.\n

    \n
    \n
    \n \n Cancel\n \n \n Delete\n \n
    \n
    \n
    \n
    \n \n );\n}\n\nexport default FormShow;\n","import {\n faEnvelope,\n faEnvelopeOpen,\n faSearchPlus,\n} from \"@fortawesome/pro-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { Modal } from \"bootstrap\";\nimport { format, formatISO } from \"date-fns\";\nimport { useQuery } from \"jsonapi-react\";\nimport React, { useEffect } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport Loader from \"../components/Loader\";\nimport { Message } from \"./FormShow\";\n\nfunction Submissions() {\n const pageSize = 50;\n const { formId } = useParams<{ formId: string }>();\n const [page, setPage] = React.useState(1);\n const [selectedMessage, setSelectedMessage] = React.useState(\n null\n );\n const { data, isLoading, client, meta, refetch } = useQuery([\n \"forms\",\n formId,\n \"messages\",\n {\n page,\n size: pageSize,\n },\n ]);\n\n const maxPage = Math.ceil(meta?.total / pageSize) || 1;\n\n useEffect(() => {}, [page]);\n\n const messageSummary = (message: Message): string => {\n let values = Object.values(message.message);\n return values.join(\", \").substring(0, 300);\n };\n\n const showSelectedMessage = async (message: Message) => {\n setSelectedMessage(message);\n\n await client?.mutate([\"forms\", formId, \"messages\", message.id], {\n isRead: true,\n });\n\n const modalElement = document.getElementById(\"messageModal\");\n if (!modalElement) {\n return;\n }\n\n const modal = Modal.getOrCreateInstance(modalElement);\n if (modal) {\n modal.show();\n }\n };\n\n const markUnread = async (message: Message) => {\n await client?.mutate([\"forms\", formId, \"messages\", message.id], {\n isRead: false,\n });\n\n const modalElement = document.getElementById(\"messageModal\");\n if (!modalElement) {\n return;\n }\n\n const modal = Modal.getInstance(modalElement);\n if (modal) {\n modal.hide();\n }\n };\n\n if (isLoading) {\n return ;\n }\n\n if (!data) {\n return
    Could not find form
    ;\n }\n\n data.sort((a: Message, b: Message) => {\n if (!a || !b) {\n return 0;\n }\n return b.createdAt.getTime() - a.createdAt.getTime();\n });\n\n const groups = data.reduce((groups: any, message) => {\n const date = formatISO(message.createdAt).split(\"T\")[0];\n if (!groups[date]) {\n groups[date] = [];\n }\n groups[date].push(message);\n return groups;\n }, {});\n\n return (\n
    \n

    Submissions

    \n
    \n {Object.keys(groups).map((date) => (\n
    \n

    \n \n
    \n {date}\n \n {groups[date].length}\n \n
    \n \n

    \n \n
    \n
      \n {groups[date].map((message: Message) => (\n
    • \n
      \n
      \n {message.isRead ? (\n \n ) : (\n \n )}\n \n {format(message.createdAt, \"p\")}\n \n
      \n showSelectedMessage(message)}\n >\n \n \n
      \n \n {messageSummary(message)}\n \n
    • \n ))}\n
    \n
    \n
    \n
    \n ))}\n
    \n\n
    \n {\n setPage(page - 1);\n refetch && refetch();\n }}\n >\n <<\n \n
    \n
    \n Page {page} of {maxPage}\n
    \n ({pageSize} per page)\n
    \n {\n setPage(page + 1);\n refetch && refetch();\n }}\n >\n >>\n \n
    \n \n
    \n
    \n
    \n
    \n {selectedMessage?.createdAt?.toLocaleString()}\n
    \n \n
    \n
    \n
      \n {Object.keys(selectedMessage?.message || {}).map((key) => (\n
    • \n {key}: {selectedMessage?.message[key]}\n
    • \n ))}\n
    \n
    \n
    \n markUnread(selectedMessage!)}\n >\n Mark Unread\n \n \n Close\n \n
    \n
    \n
    \n \n \n );\n}\n\nexport default Submissions;\n","import { formatDistance } from \"date-fns\";\nimport { useMutation } from \"jsonapi-react\";\nimport React, { useContext, useEffect } from \"react\";\nimport { SubmitHandler, useForm } from \"react-hook-form\";\nimport { useHistory } from \"react-router\";\n\nimport { AuthContext, User } from \"../components/AuthContext\";\nimport Input from \"../components/Input\";\nimport { capitalize } from \"../utils/helpers\";\n\nfunction Account() {\n const history = useHistory();\n const [state, dispatch] = useContext(AuthContext);\n const [errors, setErrors] = React.useState([]);\n const [alert, setAlert] = React.useState(\"\");\n const [updateUser, { error }] = useMutation([\"users\", state.user?.id]);\n const {\n register,\n formState: { errors: userErrors },\n handleSubmit,\n reset,\n formState,\n } = useForm();\n\n const onSubmit: SubmitHandler = async (results, e) => {\n let logout = false;\n setAlert(\"\");\n\n try {\n if (results.password !== results.passwordConfirmation) {\n setErrors([\"Passwords do not match.\"]);\n return;\n }\n\n let formResults: any = {\n name: results.name,\n email: results.email,\n };\n\n if (\n results.password &&\n results.passwordConfirmation &&\n results.password === results.passwordConfirmation\n ) {\n formResults.password = results.password;\n logout = true;\n }\n\n const user = await updateUser(formResults);\n\n if (error) {\n setErrors(\n error.errors.map((e: { message: string }) => capitalize(e.message))\n );\n return;\n }\n\n if (!user.data) {\n return;\n }\n\n if (user.data.email !== state.user?.email || logout) {\n dispatch({ loggedIn: false, user: null });\n history.push(\"/\");\n return;\n }\n\n setAlert(\"Account updated successfully.\");\n dispatch({\n loggedIn: true,\n user: {\n id: user.data.id,\n email: user.data.email,\n name: user.data.name,\n providerId: user.data.providerId,\n createdAt: user.data.createdAt,\n },\n });\n reset();\n } catch (e: any) {\n console.log(e);\n }\n };\n\n useEffect(() => {\n const timeout = setTimeout(() => {\n setAlert(\"\");\n }, 5000);\n\n return () => clearTimeout(timeout);\n }, [alert]);\n\n if (state.loggedIn === false || state.user === null) {\n return (\n
    You must be logged in to view this page.
    \n );\n }\n\n return (\n
    \n

    Account

    \n

    👋 Welcome, {state.user.name}

    \n \n
    \n \n

    Overview

    \n
    \n
    \n Name: {state.user.name}\n
    \n Email: {state.user.email}\n
    \n \n You joined{\" \"}\n {formatDistance(new Date(state.user.createdAt), new Date(), {\n addSuffix: true,\n })}\n \n
    \n
    \n
    \n \n

    Edit Account

    \n
    \n
    \n
    \n
    Change Profile
    \n {alert &&
    {alert}
    }\n \n id=\"name\"\n label=\"Name\"\n register={register}\n required={true}\n defaultValue={state.user.name}\n invalid={!!userErrors.name}\n />\n
    \n
    \n\n
    \n
    \n
    Change Credentials
    \n

    \n Note: Changing your credentials will log you out.\n

    \n {errors && errors.length > 0 && (\n
    \n
      \n {errors.map((error, i) => (\n
    • {error}
    • \n ))}\n
    \n
    \n )}\n\n \n id=\"email\"\n label=\"Email\"\n register={register}\n required={true}\n defaultValue={state.user.email}\n invalid={!!userErrors.email}\n helpText=\"This is your username\"\n />\n\n \n id=\"password\"\n label=\"Password\"\n register={register}\n required={false}\n type=\"password\"\n />\n\n \n id=\"passwordConfirmation\"\n label=\"Password Confirmation\"\n register={register}\n required={false}\n type=\"password\"\n />\n
    \n
    \n
    \n {\n reset();\n setErrors([]);\n setAlert(\"\");\n }}\n >\n Reset\n \n \n Save\n \n
    \n
    \n
    \n \n \n );\n}\n\nexport default Account;\n","import React from \"react\";\n\nfunction Help() {\n return (\n
    \n

    Help

    \n

    Need help? You've come to the right place!

    \n\n

    Adding a form

    \n

    \n Adding a new form is simple. All you need to set up a new form is a form\n name. Once you are ready, simply click on the + symbol on the Forms\n screen. You will be presented with a window prompting you to enter the\n form name. Either hit enter or use the \"Add Form\" button to complete the\n task. It will appear in the list and from there you can start working\n with your form.\n

    \n\n

    Using a form

    \n

    \n Once you've created a new form, you can then start using it on your\n site. Simply take you form code and alter the submit action pointing it\n at the URL defined on the Form's Detail screen. There you will also find\n simple form code outlining exactly what your form action should look\n like. After you change the code on your website, you will be able to\n collect submissions through Post2API. You will receive and email each\n time your receive a new submission, and you'll be able to also view the\n submissions on the Post2API site.\n

    \n
    \n );\n}\n\nexport default Help;\n","const schema = {\n messages: {\n type: \"messages\",\n fields: {\n createdAt: {\n type: \"date\",\n },\n updatedAt: {\n type: \"date\",\n },\n },\n relationships: {\n form: {\n type: \"forms\",\n },\n },\n },\n forms: {\n type: \"forms\",\n fields: {\n createdAt: {\n type: \"date\",\n },\n updatedAt: {\n type: \"date\",\n },\n messageCount: {\n readonly: true,\n resolve: (value: any, attrs: any, data: any) => {\n return data?.meta?.messageCount;\n },\n },\n },\n relationships: {\n user: {\n type: \"users\",\n },\n messages: {\n type: \"messages\",\n },\n },\n },\n users: {\n type: \"users\",\n fields: {\n createdAt: {\n type: \"date\",\n },\n },\n relationships: {\n forms: {\n type: \"forms\",\n },\n },\n },\n};\n\nexport default schema;\n","import React, { FunctionComponent, useEffect } from \"react\";\nimport { Route, RouteProps } from \"react-router-dom\";\n\ninterface IPageProps extends RouteProps {\n title: string;\n}\n\nconst Page: FunctionComponent = (props) => {\n useEffect(() => {\n document.title = \"Post2API | \" + props.title;\n });\n\n const { title, ...rest } = props;\n return ;\n};\n\nexport default Page;\n","import React, { useEffect } from \"react\";\nimport { Link, useHistory, useLocation } from \"react-router-dom\";\n\nfunction Submenu() {\n const history = useHistory();\n const { pathname } = useLocation();\n const [html, setHtml] = React.useState(<>);\n\n useEffect(() => {\n if (\n pathname === \"/account\" ||\n pathname === \"/learn\" ||\n pathname === \"/forms\" ||\n pathname === \"/help\"\n ) {\n setHtml(\n \n );\n return;\n }\n const submissionsRegex = /.*\\/submissions$/i;\n if (pathname.match(submissionsRegex) !== null) {\n setHtml(\n \n );\n return;\n }\n const formsRegexp = /^\\/forms\\/.*/i;\n if (pathname.match(formsRegexp) !== null) {\n setHtml(\n \n );\n return;\n }\n\n setHtml(<>);\n }, [pathname, history]);\n\n return html;\n}\n\nexport default Submenu;\n","import { useEffect } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nexport default function ScrollToTop() {\n const { pathname, hash } = useLocation();\n\n useEffect(() => {\n if (hash) {\n return;\n }\n\n window.scrollTo(0, 0);\n }, [pathname, hash]);\n\n return null;\n}\n","import React, { useContext } from \"react\";\nimport { BrowserRouter as Router, Switch } from \"react-router-dom\";\nimport { ApiClient, ApiProvider } from \"jsonapi-react\";\n\nimport Sidebar from \"./components/Sidebar\";\nimport Footer from \"./components/Footer\";\nimport Home from \"./routes/Home\";\nimport Learn from \"./routes/Learn\";\nimport Login from \"./routes/Login\";\nimport SignUp from \"./routes/SignUp\";\nimport FormList from \"./routes/FormList\";\nimport FormShow from \"./routes/FormShow\";\nimport Submissions from \"./routes/Submissions\";\nimport Account from \"./routes/Account\";\nimport Help from \"./routes/Help\";\nimport schema from \"./utils/schema\";\nimport { AuthContext } from \"./components/AuthContext\";\nimport Page from \"./components/Page\";\nimport Submenu from \"./components/Submenu\";\nimport ScrollToTop from \"./components/ScrollToTop\";\n\nfunction App() {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [state, _] = useContext(AuthContext);\n\n const apiUrl = process.env.REACT_APP_API_URL;\n\n const client = new ApiClient({\n url: apiUrl,\n schema,\n headers: {\n Authorization: `JWT ${state?.user?.providerId}`,\n },\n });\n\n return (\n \n \n \n \n \n
    \n \n \n \n \n \n \n \n \n \n \n \n
    \n