import React, { useState } from "react"; import ReactCSSTransitionGroup from "react-addons-css-transition-group"; import { MenuBar } from "./menubar"; import { Container, FormBuilder, NgIf, Icon, Fab } from "../../components/"; import { appendShareToUrl } from "../../helpers/"; import "./formviewer.scss"; export function FormViewer({ filename, data, content, needSaving, isSaving, needSavingUpdate, onSave, }) { const [form, setForm] = useState(JSON.parse(content)); const onFormChange = () => { JSON.stringify(form) === content ? needSavingUpdate(false) : needSavingUpdate(true); }; const onClickSave = () => { if (needSaving === false) return; const blob = new window.Blob([ JSON.stringify(form), ], { type: "text/plain" }); return onSave(blob).then(() => needSavingUpdate(false)); }; const simpleMarkdown = (text) => { const regLink = /\[([^\]]*)\]\(([^\)]+)\)/g; return text .replace(regLink, function(str) { const label = str.replace(regLink, "$1"); const link = str.replace(regLink, "$2"); return "["+label+"]("+appendShareToUrl(link)+")"; }) .replace(regLink, "$1") .replace(/\n/g, "
"); }; const beautify = (label) => { return label .split("_") .map((t) => { if (t.length === 0) return t; else if (/[gu]?u?id/.test(t.toLowerCase())) return t.toUpperCase(); return t[0].toUpperCase() + t.substring(1); }) .join(" "); }; const renderForm = ($input, props, struct, onChange) => { return (