✨ completed routing for questions
This commit is contained in:
		
							parent
							
								
									7e00f24fbd
								
							
						
					
					
						commit
						b22140ba3f
					
				
					 11 changed files with 115 additions and 47 deletions
				
			
		
							
								
								
									
										43
									
								
								frontend/src/api/getUserQuestions.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								frontend/src/api/getUserQuestions.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,43 @@ | |||
| interface Question { | ||||
| 	QuestionID: number; | ||||
| 	QuestionText: string; | ||||
| } | ||||
| 
 | ||||
| interface Answer { | ||||
| 	AnswerID: number; | ||||
| 	QuestionID: number; | ||||
| 	IsChatGPT: boolean; | ||||
| 	AnswerText: string; | ||||
| } | ||||
| 
 | ||||
| interface QuestionAnswerPair { | ||||
| 	Question: Question; | ||||
| 	Answers: Answer[]; | ||||
| } | ||||
| 
 | ||||
| interface QAData { | ||||
| 	questions: QuestionAnswerPair[]; | ||||
| } | ||||
| 
 | ||||
| export const getUserQuestions = (respondentID: number): Promise<QAData> => { | ||||
| 	let url = `http://localhost:8080/userquestions?respondentID=${respondentID}`; | ||||
| 
 | ||||
| 	const response = fetch(url, { | ||||
| 		method: "GET", | ||||
| 	}) | ||||
| 		.then((response) => { | ||||
| 			if (!response.ok) { | ||||
| 				throw new Error(`HTTP error! Status: ${response.status}`); | ||||
| 			} | ||||
| 			return response.json(); | ||||
| 		}) | ||||
| 		.then((data) => { | ||||
| 			console.log(data); | ||||
| 			localStorage.setItem("userQuestions", JSON.stringify(data)); | ||||
| 			return data; | ||||
| 		}) | ||||
| 		.catch((error) => { | ||||
| 			console.log(error); | ||||
| 		}); | ||||
| 	return response; | ||||
| }; | ||||
|  | @ -7,7 +7,7 @@ export const postUserformData = ( | |||
| 	education: string, | ||||
| 	healthcare_personnel: string, | ||||
| 	gender: string | ||||
| ): postUserformDataReponse => { | ||||
| ): Promise<postUserformDataReponse> => { | ||||
| 	let url = "http://localhost:8080/submitform"; | ||||
| 	let personnel = healthcare_personnel == "Ja" ? true : false; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,13 +1,15 @@ | |||
| <script> | ||||
| <script lang="ts"> | ||||
|     import UserFormInput from "../../userform/UserFormInput.svelte"; | ||||
|      | ||||
|     export let answerText:string | ||||
| 
 | ||||
| </script> | ||||
| 
 | ||||
| <div class="flex flex-col"> | ||||
|     <div class="flex flex-col gap-2 mb-6"> | ||||
|         <h1 class="text-xl text-primary font-bold text-center">Svar 2:</h1> | ||||
|         <div class="bg-secondary p-6 rounded-xl text-sm"> | ||||
|             Hei, | ||||
|             Nye symptomer som utslett etter påbegynt skabbehandling er ikke uvanlig og betyr ikke nødvendigvis at behandlingen har feilet. Dette skyldes ofte kroppens reaksjon på skabbmiddene og behandlingen. Det er viktig å gjennomføre den andre kuren som planlagt. Vær oppmerksom på at kløe og utslett kan vedvare i opptil fire uker etter siste behandling, selv når behandlingen har vært effektiv. Hvis du opplever nye utslett mer enn fire uker etter behandlingens slutt, anbefales det å kontakte lege for en videre vurdering. | ||||
|             {answerText} | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="flex flex-col justify-start items-center gap-6"> | ||||
|  |  | |||
|  | @ -1,5 +1,7 @@ | |||
| <script> | ||||
| <script lang="ts"> | ||||
|     import CircleExclamation from "../../../components/svg/CircleExclamation.svelte"; | ||||
| 
 | ||||
|     export let formQuestion:string | ||||
| </script> | ||||
| 
 | ||||
| <div class="flex justify-center items-center h-20"> | ||||
|  | @ -7,7 +9,7 @@ | |||
|     <div class="flex justify-center items-center w-2/3 gap-4"> | ||||
|         <h1 class="text-xl text-primary font-bold text-center">Spørsmål 3</h1> | ||||
|         <div class="border-r-2 border-primary h-24"></div> | ||||
|         <p class="text-sm">Hvis man begynner skabbehandling før man har fått symptomer, men får symptomer iløpet av den uka før man skal smøre seg igjen etter 7 dager, har da ikke første smøringen virket?</p> | ||||
|         <p class="text-sm">{formQuestion}</p> | ||||
|     </div> | ||||
|     <div class="flex justify-end pr-20 items-center w-1/3"> | ||||
|         <a class="-" href="/errorreport"> | ||||
|  |  | |||
|  | @ -1,6 +1,5 @@ | |||
| <script lang="ts"> | ||||
|     export let text: string; | ||||
|     export let url: string; | ||||
|     export let filled = false; | ||||
|     export let onclick: () => {}; | ||||
| 
 | ||||
|  | @ -11,4 +10,4 @@ | |||
|     font-bold uppercase border-primary border-2 rounded-full px-8 py-3` | ||||
| </script> | ||||
| 
 | ||||
| <a href={url}><button class={style} on:click={onclick}>{text}</button></a> | ||||
| <button class={style} on:click={onclick}>{text}</button> | ||||
|  |  | |||
|  | @ -15,7 +15,9 @@ | |||
|             </ul> | ||||
|         </div> | ||||
|         <div class="flex justify-center items-center w-2/5"> | ||||
|             <ButtonComponent text="Start undersøkelse" url="/userform" filled={false} /> | ||||
|             <a href="/userform"> | ||||
|                 <ButtonComponent text="Start undersøkelse" filled={false} /> | ||||
|             </a> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="flex justify-center items-center gap-8 text-primary font-bold"> | ||||
|  |  | |||
|  | @ -1,12 +0,0 @@ | |||
| import { error } from '@sveltejs/kit'; | ||||
| 
 | ||||
| /** @type {import('./$types').PageServerLoad} */ | ||||
| export async function load({ params }) { | ||||
| 	const post = await getPostFromDatabase(params.slug); | ||||
| 
 | ||||
| 	if (post) { | ||||
| 		return post; | ||||
| 	} | ||||
| 
 | ||||
| 	error(404, 'Not found'); | ||||
| } | ||||
|  | @ -1,24 +0,0 @@ | |||
| <script> | ||||
|     import FormHeader from "../../components/form/header/FormHeader.svelte"; | ||||
|     import AnswerBox from "../../components/form/answerbox/AnswerBox.svelte"; | ||||
| 	import Footer from "../../components/form/footer/Footer.svelte"; | ||||
| </script> | ||||
| 
 | ||||
| <div class="flex flex-col h-full"> | ||||
|     <FormHeader /> | ||||
|     <div class="flex h-full justify-between gap-12"> | ||||
|         <AnswerBox /> | ||||
|         <AnswerBox /> | ||||
|     </div> | ||||
|     <Footer /> | ||||
| </div> | ||||
| 
 | ||||
| <style lang="postcss"> | ||||
|     :root { | ||||
|         color: theme(colors.content); | ||||
|          | ||||
|     } | ||||
|     p { | ||||
|         font-size: medium; | ||||
|     } | ||||
| </style> | ||||
							
								
								
									
										10
									
								
								frontend/src/routes/form/[slug]/+page.server.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								frontend/src/routes/form/[slug]/+page.server.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,10 @@ | |||
| import { error } from "@sveltejs/kit"; | ||||
| 
 | ||||
| /** @type {import('./$types').PageServerLoad} */ | ||||
| export async function load({ params }) { | ||||
| 	let questionNumber = params; | ||||
| 
 | ||||
| 	if (questionNumber) return questionNumber; | ||||
| 
 | ||||
| 	error(404, "Not found"); | ||||
| } | ||||
							
								
								
									
										40
									
								
								frontend/src/routes/form/[slug]/+page.svelte
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								frontend/src/routes/form/[slug]/+page.svelte
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | |||
| <script lang="ts"> | ||||
|     import FormHeader from "../../../components/form/header/FormHeader.svelte"; | ||||
|     import AnswerBox from "../../../components/form/answerbox/AnswerBox.svelte"; | ||||
| 	import Footer from "../../../components/form/footer/Footer.svelte"; | ||||
| 
 | ||||
|     import { onMount } from "svelte" | ||||
| 
 | ||||
|     export let data; | ||||
| 
 | ||||
|     let formQuestion: string = "" | ||||
|     let questionAnswer1: string = "" | ||||
|     let questionAnswer2: string = "" | ||||
| 
 | ||||
|     onMount(async () => { | ||||
|         const questionNumber = data.slug | ||||
|         let localstoragequestions = localStorage.getItem("userQuestions"); | ||||
| 	    if (localstoragequestions) { | ||||
|             let questions = JSON.parse(localstoragequestions).questions | ||||
|             console.log(questions) | ||||
|             formQuestion = questions[questionNumber].Question.QuestionText | ||||
|             questionAnswer1 = questions[questionNumber].Answers[0].AnswerText | ||||
|             questionAnswer2 = questions[questionNumber].Answers[1].AnswerText | ||||
|             console.log(formQuestion) | ||||
|             console.log(questionAnswer1) | ||||
|             console.log(questionAnswer2) | ||||
|         };   | ||||
|     }) | ||||
| </script> | ||||
| 
 | ||||
| <div class="flex flex-col h-full"> | ||||
|     <FormHeader formQuestion={formQuestion}/> | ||||
|     <div class="flex h-full justify-between gap-12"> | ||||
|         <AnswerBox answerText={questionAnswer1}/> | ||||
|         <AnswerBox answerText={questionAnswer2}/> | ||||
|     </div> | ||||
|     <Footer /> | ||||
| </div> | ||||
| 
 | ||||
| <style lang="postcss"> | ||||
| </style> | ||||
|  | @ -3,16 +3,22 @@ | |||
|     import ArrowBack from "../../components/svg/ArrowBack.svelte"; | ||||
| 	import ButtonComponent from "../../components/userform/inputs/ButtonComponent.svelte"; | ||||
| 	import { postUserformData } from "../../api/postUserformData"; | ||||
| 	import { getUserQuestions } from "../../api/getUserQuestions"; | ||||
|     import { goto } from "$app/navigation"; | ||||
| 
 | ||||
| 
 | ||||
|     let age: string = "18-20" | ||||
|     let education: string = "PhD" | ||||
|     let healthcare_personnel: string = "Ja" | ||||
|     let gender: string = "Mann" | ||||
| 
 | ||||
|     let firstUserQuestion: number = 0 | ||||
| 
 | ||||
|     const handleUserformSubmit = async (age: string, education: string, healthcare_personnel: string, gender: string) => { | ||||
|         const response = await postUserformData(age, education, healthcare_personnel, gender) | ||||
|         const userQuestions = await getUserQuestions(response.respondentID) | ||||
|          | ||||
|         await getUserQuestions(response.respondentID) | ||||
|         goto("form/0") | ||||
|     } | ||||
| </script> | ||||
| 
 | ||||
|  | @ -34,7 +40,7 @@ | |||
|         </div> | ||||
|     </div> | ||||
|     <div class="flex justify-center items-center gap-8 text-primary font-bold"> | ||||
|         <ButtonComponent text="Start undersøkelse" url="/form" filled={true} onclick={() => handleUserformSubmit(age, education, healthcare_personnel, gender)} /> | ||||
|         <ButtonComponent text="Start undersøkelse" filled={true} onclick={() => handleUserformSubmit(age, education, healthcare_personnel, gender)} /> | ||||
|     </div> | ||||
| </div> | ||||
| 
 | ||||
|  |  | |||
		Reference in a new issue
	
	 haraldnilsen
						haraldnilsen