diff options
Diffstat (limited to 'src/pages')
| -rw-r--r-- | src/pages/NewSurvey/index.js | 5 | ||||
| -rw-r--r-- | src/pages/Survey/index.js | 7 | ||||
| -rw-r--r-- | src/pages/SurveyAnswer/index.js | 27 | ||||
| -rw-r--r-- | src/pages/SurveyResults/index.js | 58 | ||||
| -rw-r--r-- | src/pages/Surveys/SurveysList.js | 36 | 
5 files changed, 117 insertions, 16 deletions
| diff --git a/src/pages/NewSurvey/index.js b/src/pages/NewSurvey/index.js index f1d4b89..335eb93 100644 --- a/src/pages/NewSurvey/index.js +++ b/src/pages/NewSurvey/index.js @@ -1,4 +1,5 @@ -import FormBuilder from "../../components/FormBuilder"; +import { Navigate } from "react-router-dom";  export default function NewSurvey() { -  return <FormBuilder />; +  const id = crypto.randomUUID(); +  return <Navigate to={{ pathname: `/surveys/${id}` }} />;  } diff --git a/src/pages/Survey/index.js b/src/pages/Survey/index.js new file mode 100644 index 0000000..41bac5e --- /dev/null +++ b/src/pages/Survey/index.js @@ -0,0 +1,7 @@ +import FormBuilder from "../../components/FormBuilder"; +import { useParams } from "react-router-dom"; + +export default function Survey() { +  const { formId } = useParams(); +  return <FormBuilder formId={formId} />; +} diff --git a/src/pages/SurveyAnswer/index.js b/src/pages/SurveyAnswer/index.js new file mode 100644 index 0000000..d1676c1 --- /dev/null +++ b/src/pages/SurveyAnswer/index.js @@ -0,0 +1,27 @@ +import { useState } from "react"; +import { useParams } from "react-router-dom"; +import Form from "../../components/FormBuilder/FinalForm"; +import useLocalStorage from "../../hooks/useLocalStorage"; + +export default function SurveyAnswers() { +  const { runId, surveyId } = useParams(); +  const [resultsSet, setResultsSet] = useLocalStorage( +    `results-${surveyId}-${runId}`, +    {}, +  ); +  const [answerSetId] = useState(crypto.randomUUID()); +  const results = (resultsSet && resultsSet[answerSetId]) || { +    datetime: new Date().toISOString(), +  }; + +  function setResults(newResults) { +    setResultsSet({ ...resultsSet, [answerSetId]: newResults }); +  } + +  return ( +    <div> +      {runId} +      <Form formId={surveyId} results={results} setResults={setResults} /> +    </div> +  ); +} diff --git a/src/pages/SurveyResults/index.js b/src/pages/SurveyResults/index.js index 82d41c6..dec182e 100644 --- a/src/pages/SurveyResults/index.js +++ b/src/pages/SurveyResults/index.js @@ -1,3 +1,59 @@ +import { Button } from "@mui/material"; +import { DataGrid } from "@mui/x-data-grid"; +import { Link, useParams } from "react-router-dom"; +import useLocalStorage from "../../hooks/useLocalStorage"; +import useForm from "../../hooks/useForm"; +  export default function SurveyResults() { -  return <>SurveyResults</>; +  const { surveyId } = useParams(); +  const [runs, setRuns] = useLocalStorage(`runs-${surveyId}`, []); +  const [form] = useForm(surveyId); + +  const columns = form?.fields?.map(({ id, name }) => ({ +    field: id, +    headerName: name, +  })); + +  return ( +    <> +      <h3>SurveyRuns</h3> +      {surveyId} +      <Button onClick={() => setRuns([{ id: crypto.randomUUID() }, ...runs])}> +        New Run +      </Button> + +      {runs && +        runs.map((r) => { +          const runRs = runResults(surveyId, r.id); + +          console.log(runRs); + +          return ( +            <div key={r.id}> +              <Link to={`${r.id}/answer`}>Add Answer</Link> {JSON.stringify(r)} +              Total Results: {Object.keys(runRs).length} +              <DataGrid +                rows={[]} +                columns={columns} +                initialState={{ +                  pagination: { +                    paginationModel: { +                      pageSize: 25, +                    }, +                  }, +                }} +                pageSizeOptions={[25, 50, 100]} +                checkboxSelection +                disableRowSelectionOnClick +              /> +            </div> +          ); +        })} +    </> +  ); +} + +function runResults(surveyId, runId) { +  const str = localStorage[`results-${surveyId}-${runId}`]; +  return !str ? {} : JSON.parse(str);  } diff --git a/src/pages/Surveys/SurveysList.js b/src/pages/Surveys/SurveysList.js index c9c5b90..a320716 100644 --- a/src/pages/Surveys/SurveysList.js +++ b/src/pages/Surveys/SurveysList.js @@ -1,9 +1,10 @@  import React from "react";  import Box from "@mui/material/Box";  import { DataGrid } from "@mui/x-data-grid"; +import useLocalStorage from "../../hooks/useLocalStorage"; +import { Link } from "react-router-dom";  const columns = [ -  { field: "id", headerName: "ID", width: 90 },    {      field: "name",      headerName: "Name", @@ -14,21 +15,30 @@ const columns = [      headerName: "Next Run",      width: 150,    }, -]; - -const rows = [ -  { id: 1, name: "survey", next_run_at: "Mon 28 Aug 16:35:36 EDT 2023" }, -  { id: 2, name: "survey", next_run_at: "Mon 28 Aug 16:35:36 EDT 2023" }, -  { id: 3, name: "survey", next_run_at: "Mon 28 Aug 16:35:36 EDT 2023" }, -  { id: 4, name: "survey", next_run_at: "Mon 28 Aug 16:35:36 EDT 2023" }, -  { id: 5, name: "survey", next_run_at: "Mon 28 Aug 16:35:36 EDT 2023" }, -  { id: 6, name: "survey", next_run_at: "Mon 28 Aug 16:35:36 EDT 2023" }, -  { id: 7, name: "survey", next_run_at: "Mon 28 Aug 16:35:36 EDT 2023" }, -  { id: 8, name: "survey", next_run_at: "Mon 28 Aug 16:35:36 EDT 2023" }, -  { id: 9, name: "survey", next_run_at: "Mon 28 Aug 16:35:36 EDT 2023" }, +  { +    field: "edit_survey_link", +    headerName: "", +    renderCell: ({ row }) => <Link to={`${row?.path}`}>Edit</Link>, +    width: 150, +  }, +  { +    field: "results_survey_link", +    headerName: "", +    renderCell: ({ row }) => <Link to={`${row?.path}/results`}>Results</Link>, +    width: 150, +  },  ];  export default function SurveysList() { +  const [forms] = useLocalStorage(`forms`, {}); + +  const rows = Object.keys(forms).map((id, i) => ({ +    id, +    name: `Survey ${i}`, +    next_run_at: "Mon 28 Aug 16:35:36 EDT 2023", +    path: `/surveys/${id}`, +  })); +    return (      <Box sx={{ minHeight: "100%", width: "100%" }}>        <DataGrid | 
