agile compass survey completed
This commit is contained in:
parent
a17b6fa63d
commit
974bd38c86
5854
site/app/index.js
5854
site/app/index.js
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@ -7,7 +7,7 @@
|
|||||||
},
|
},
|
||||||
"questions": [
|
"questions": [
|
||||||
{
|
{
|
||||||
"group" : "1",
|
"group" : "Личная сфера",
|
||||||
"title": "Я чувствую себя уставшим(ей) даже после длительного сна и отдыха",
|
"title": "Я чувствую себя уставшим(ей) даже после длительного сна и отдыха",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -26,7 +26,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "2",
|
"group" : "Личная сфера",
|
||||||
"title": "Я могу разозлиться без видимой причины, меня раздражают позитивные и успешные люди",
|
"title": "Я могу разозлиться без видимой причины, меня раздражают позитивные и успешные люди",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -45,7 +45,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Личная сфера",
|
||||||
"title": "Мне сложно концентрироваться на задаче больше 5 минут",
|
"title": "Мне сложно концентрироваться на задаче больше 5 минут",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -64,7 +64,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Личная сфера",
|
||||||
"title": "Я чувствую собственную беспомощность, кажется, что от меня ничего не зависит",
|
"title": "Я чувствую собственную беспомощность, кажется, что от меня ничего не зависит",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -83,7 +83,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Личная сфера",
|
||||||
"title": "Все вокруг кажется пустым и неинтересным",
|
"title": "Все вокруг кажется пустым и неинтересным",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -102,7 +102,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Социальная сфера",
|
||||||
"title": "Я чувствую, что мне не к кому обратиться за помощью и поддержкой в сложной ситуации",
|
"title": "Я чувствую, что мне не к кому обратиться за помощью и поддержкой в сложной ситуации",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -121,7 +121,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Социальная сфера",
|
||||||
"title": "Я думаю, что близкие ценят меня за то, что я делаю и как себя веду, а не просто за то, что я есть",
|
"title": "Я думаю, что близкие ценят меня за то, что я делаю и как себя веду, а не просто за то, что я есть",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -140,7 +140,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Социальная сфера",
|
||||||
"title": "В кругу близких и друзей я вынужден(а) играть чужую роль, чтобы меня принимали таким(ой), какой(ая) я есть",
|
"title": "В кругу близких и друзей я вынужден(а) играть чужую роль, чтобы меня принимали таким(ой), какой(ая) я есть",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -159,7 +159,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Социальная сфера",
|
||||||
"title": "Я чувствую, что никому не нужен (нужна) и никто меня не любит",
|
"title": "Я чувствую, что никому не нужен (нужна) и никто меня не любит",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -178,7 +178,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Социальная сфера",
|
||||||
"title": "Мне кажется, что никто из близких меня не понимает",
|
"title": "Мне кажется, что никто из близких меня не понимает",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -197,7 +197,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Карьерная сфера",
|
||||||
"title": "Я боюсь потерять работу, потому что это приведет к финансовым трудностям",
|
"title": "Я боюсь потерять работу, потому что это приведет к финансовым трудностям",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -216,7 +216,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Карьерная сфера",
|
||||||
"title": "Мне не хватает денег на питание, оплату жилья и на то, чтобы покрыть привычные расходы",
|
"title": "Мне не хватает денег на питание, оплату жилья и на то, чтобы покрыть привычные расходы",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -235,7 +235,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Карьерная сфера",
|
||||||
"title": "Я финансово завишу от других (родителей, супруга(и), босса, партнеров по бизнесу)",
|
"title": "Я финансово завишу от других (родителей, супруга(и), босса, партнеров по бизнесу)",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -254,8 +254,8 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Карьерная сфера",
|
||||||
"title": "Я боюсь, что перемены в стране, отрасли, в которой я работаю, или экономике лишат меня средств к существованиюЭто обязательный вопрос",
|
"title": "Я боюсь, что перемены в стране, отрасли, в которой я работаю, или экономике лишат меня средств к существованию",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
{
|
{
|
||||||
@ -273,7 +273,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Карьерная сфера",
|
||||||
"title": "Мой доход скачет (то густо, то пусто) и находится вне моего контроля",
|
"title": "Мой доход скачет (то густо, то пусто) и находится вне моего контроля",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
|
@ -24,7 +24,8 @@
|
|||||||
"notistack": "^3.0.1",
|
"notistack": "^3.0.1",
|
||||||
"@emotion/styled": "^11.10.5",
|
"@emotion/styled": "^11.10.5",
|
||||||
"@emotion/core": "^11.0.0",
|
"@emotion/core": "^11.0.0",
|
||||||
"@emotion/react": "^11.10.5"
|
"@emotion/react": "^11.10.5",
|
||||||
|
"lodash": "^4.17.21"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "react-scripts start",
|
"start": "react-scripts start",
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
},
|
},
|
||||||
"questions": [
|
"questions": [
|
||||||
{
|
{
|
||||||
"group" : "1",
|
"group" : "Личная сфера",
|
||||||
"title": "Я чувствую себя уставшим(ей) даже после длительного сна и отдыха",
|
"title": "Я чувствую себя уставшим(ей) даже после длительного сна и отдыха",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -26,7 +26,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "2",
|
"group" : "Личная сфера",
|
||||||
"title": "Я могу разозлиться без видимой причины, меня раздражают позитивные и успешные люди",
|
"title": "Я могу разозлиться без видимой причины, меня раздражают позитивные и успешные люди",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -45,7 +45,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Личная сфера",
|
||||||
"title": "Мне сложно концентрироваться на задаче больше 5 минут",
|
"title": "Мне сложно концентрироваться на задаче больше 5 минут",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -64,7 +64,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Личная сфера",
|
||||||
"title": "Я чувствую собственную беспомощность, кажется, что от меня ничего не зависит",
|
"title": "Я чувствую собственную беспомощность, кажется, что от меня ничего не зависит",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -83,7 +83,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Личная сфера",
|
||||||
"title": "Все вокруг кажется пустым и неинтересным",
|
"title": "Все вокруг кажется пустым и неинтересным",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -102,7 +102,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Социальная сфера",
|
||||||
"title": "Я чувствую, что мне не к кому обратиться за помощью и поддержкой в сложной ситуации",
|
"title": "Я чувствую, что мне не к кому обратиться за помощью и поддержкой в сложной ситуации",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -121,7 +121,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Социальная сфера",
|
||||||
"title": "Я думаю, что близкие ценят меня за то, что я делаю и как себя веду, а не просто за то, что я есть",
|
"title": "Я думаю, что близкие ценят меня за то, что я делаю и как себя веду, а не просто за то, что я есть",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -140,7 +140,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Социальная сфера",
|
||||||
"title": "В кругу близких и друзей я вынужден(а) играть чужую роль, чтобы меня принимали таким(ой), какой(ая) я есть",
|
"title": "В кругу близких и друзей я вынужден(а) играть чужую роль, чтобы меня принимали таким(ой), какой(ая) я есть",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -159,7 +159,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Социальная сфера",
|
||||||
"title": "Я чувствую, что никому не нужен (нужна) и никто меня не любит",
|
"title": "Я чувствую, что никому не нужен (нужна) и никто меня не любит",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -178,7 +178,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Социальная сфера",
|
||||||
"title": "Мне кажется, что никто из близких меня не понимает",
|
"title": "Мне кажется, что никто из близких меня не понимает",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -197,7 +197,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Карьерная сфера",
|
||||||
"title": "Я боюсь потерять работу, потому что это приведет к финансовым трудностям",
|
"title": "Я боюсь потерять работу, потому что это приведет к финансовым трудностям",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -216,7 +216,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Карьерная сфера",
|
||||||
"title": "Мне не хватает денег на питание, оплату жилья и на то, чтобы покрыть привычные расходы",
|
"title": "Мне не хватает денег на питание, оплату жилья и на то, чтобы покрыть привычные расходы",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -235,7 +235,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Карьерная сфера",
|
||||||
"title": "Я финансово завишу от других (родителей, супруга(и), босса, партнеров по бизнесу)",
|
"title": "Я финансово завишу от других (родителей, супруга(и), босса, партнеров по бизнесу)",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
@ -254,8 +254,8 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Карьерная сфера",
|
||||||
"title": "Я боюсь, что перемены в стране, отрасли, в которой я работаю, или экономике лишат меня средств к существованиюЭто обязательный вопрос",
|
"title": "Я боюсь, что перемены в стране, отрасли, в которой я работаю, или экономике лишат меня средств к существованию",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
{
|
{
|
||||||
@ -273,7 +273,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"group" : "3",
|
"group" : "Карьерная сфера",
|
||||||
"title": "Мой доход скачет (то густо, то пусто) и находится вне моего контроля",
|
"title": "Мой доход скачет (то густо, то пусто) и находится вне моего контроля",
|
||||||
"question": "Как часто за последний месяц вы испытывали это?",
|
"question": "Как часто за последний месяц вы испытывали это?",
|
||||||
"options": [
|
"options": [
|
||||||
|
@ -3,7 +3,7 @@ import React from 'react'
|
|||||||
import {Provider} from 'react-redux'
|
import {Provider} from 'react-redux'
|
||||||
import {PersistGate} from 'redux-persist/integration/react'
|
import {PersistGate} from 'redux-persist/integration/react'
|
||||||
import RootComponent from './RootComponent'
|
import RootComponent from './RootComponent'
|
||||||
import {persistor, store} from './store/reducers/store'
|
import {persistor, store} from './store/store'
|
||||||
|
|
||||||
const App: React.FC = () => {
|
const App: React.FC = () => {
|
||||||
return (
|
return (
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
import moment from 'moment'
|
|
||||||
import React, { useEffect, useState } from 'react'
|
|
||||||
|
|
||||||
const DateDisplay: React.FC = () => {
|
|
||||||
const [date, setDate] = useState('')
|
|
||||||
|
|
||||||
/**
|
|
||||||
* On component render sets the date state to current date and time
|
|
||||||
*/
|
|
||||||
useEffect(() => {
|
|
||||||
const interval = setInterval(() => {
|
|
||||||
setDate(moment().toDate().toString())
|
|
||||||
}, 1000)
|
|
||||||
return () => clearInterval(interval)
|
|
||||||
}, [])
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div style={{ position: 'relative', width: '100%', display: 'flex', justifyContent: 'center', alignItems: 'center', flexDirection: 'column' }}>
|
|
||||||
<span style={{ color: 'orange' }}>{date}</span>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
export default DateDisplay
|
|
@ -1,27 +1,43 @@
|
|||||||
import './Survey.css'
|
import './Survey.css'
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
|
import {useEffect} from "react";
|
||||||
import {SurveyDto} from "./../../api/Api";
|
import {SurveyDto} from "./../../api/Api";
|
||||||
import {Box, Button, Paper, Step, StepContent, StepLabel, Stepper, Typography} from "@mui/material";
|
import {Box, Button, Paper, Step, StepContent, StepLabel, Stepper, Typography} from "@mui/material";
|
||||||
|
import {store} from "../../store/store";
|
||||||
|
import {setContents, addAnswer} from "../../store/actions/data";
|
||||||
|
import {ResultByGroup} from "../../store/initialState";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
survey: SurveyDto | undefined
|
survey: SurveyDto | undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
const Survey: React.FC<Props> = ({survey}) => {
|
const Survey: React.FC<Props> = ({survey}) => {
|
||||||
const [activeStep, setActiveStep] = React.useState(-1);
|
const [activeStep, setActiveStep] = React.useState(-1)
|
||||||
|
const [results, setResults] = React.useState(store.getState())
|
||||||
|
|
||||||
const handleNext = (group: string | undefined, value: number | undefined) => {
|
const handleNext = (group: string | undefined, value: number | undefined) => {
|
||||||
setActiveStep((prevActiveStep) => prevActiveStep + 1);
|
if (group !== undefined && value !== undefined) {
|
||||||
|
store.dispatch(addAnswer({
|
||||||
|
group: group,
|
||||||
|
value: value
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
setActiveStep((prevActiveStep) => prevActiveStep + 1)
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleBack = () => {
|
const handleBack = () => {
|
||||||
setActiveStep((prevActiveStep) => prevActiveStep - 1);
|
setActiveStep((prevActiveStep) => prevActiveStep - 1)
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleReset = () => {
|
const handleReset = () => {
|
||||||
setActiveStep(-1);
|
store.dispatch(setContents([] as ResultByGroup[]))
|
||||||
|
setActiveStep(-1)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
store.dispatch(setContents([] as ResultByGroup[]))
|
||||||
|
return store.subscribe(() => setResults(store.getState()))
|
||||||
|
}, [])
|
||||||
|
|
||||||
const prepare = (text: string | undefined) => {
|
const prepare = (text: string | undefined) => {
|
||||||
if (text !== undefined) {
|
if (text !== undefined) {
|
||||||
@ -52,7 +68,7 @@ const Survey: React.FC<Props> = ({survey}) => {
|
|||||||
<Box sx={{maxWidth: 400}}>
|
<Box sx={{maxWidth: 400}}>
|
||||||
<Stepper activeStep={activeStep} orientation={"vertical"}>
|
<Stepper activeStep={activeStep} orientation={"vertical"}>
|
||||||
{survey?.questions.map((question, index) =>
|
{survey?.questions.map((question, index) =>
|
||||||
<Step key={question.question}>
|
<Step key={prepare(question.title)}>
|
||||||
<StepLabel optional={
|
<StepLabel optional={
|
||||||
index === survey?.questions.length - 1 ? (
|
index === survey?.questions.length - 1 ? (
|
||||||
<Typography variant="caption">Last step</Typography>
|
<Typography variant="caption">Last step</Typography>
|
||||||
@ -66,7 +82,7 @@ const Survey: React.FC<Props> = ({survey}) => {
|
|||||||
<Box sx={{mb: 2}}>
|
<Box sx={{mb: 2}}>
|
||||||
<div>
|
<div>
|
||||||
{question.options.map((option, index) =>
|
{question.options.map((option, index) =>
|
||||||
<div>
|
<div key={question.group + '/' + question.title + '/' + option.value}>
|
||||||
<Button
|
<Button
|
||||||
variant="contained"
|
variant="contained"
|
||||||
onClick={() => handleNext(question.group, option.value)}
|
onClick={() => handleNext(question.group, option.value)}
|
||||||
@ -86,6 +102,17 @@ const Survey: React.FC<Props> = ({survey}) => {
|
|||||||
{activeStep === survey?.questions.length && (
|
{activeStep === survey?.questions.length && (
|
||||||
<Paper square elevation={0} sx={{p: 3}}>
|
<Paper square elevation={0} sx={{p: 3}}>
|
||||||
<Typography>All steps completed - you're finished</Typography>
|
<Typography>All steps completed - you're finished</Typography>
|
||||||
|
<div>
|
||||||
|
<ul>
|
||||||
|
{results.data.resultsByGroup?.map((result, index) =>
|
||||||
|
<li key={result.group}>
|
||||||
|
<span>{result.group}</span>
|
||||||
|
<span>: </span>
|
||||||
|
<span>{result.value}</span>
|
||||||
|
</li>
|
||||||
|
)}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
<Button onClick={handleReset} sx={{mt: 1, mr: 1}}>
|
<Button onClick={handleReset} sx={{mt: 1, mr: 1}}>
|
||||||
Reset
|
Reset
|
||||||
</Button>
|
</Button>
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
const baseUrl = 'http://exampleurl'
|
|
||||||
|
|
||||||
export const getData = (userId: number): string => {
|
|
||||||
return baseUrl + '/data/' + userId
|
|
||||||
}
|
|
@ -1,3 +1,6 @@
|
|||||||
import { createAction } from '@reduxjs/toolkit'
|
import { createAction } from '@reduxjs/toolkit'
|
||||||
|
import {ResultByGroup} from "../initialState";
|
||||||
|
|
||||||
export const setContents = createAction<string[]>('data/setContents')
|
export const setContents = createAction<ResultByGroup[]>('data/setContents')
|
||||||
|
|
||||||
|
export const addAnswer = createAction<ResultByGroup>('data/addAnswer')
|
||||||
|
14
survey/src/store/initialState.ts
Normal file
14
survey/src/store/initialState.ts
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
export interface ResultByGroup {
|
||||||
|
group: string,
|
||||||
|
value: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface StoreContent {
|
||||||
|
resultsByGroup: ResultByGroup[]
|
||||||
|
}
|
||||||
|
|
||||||
|
const initialState: StoreContent = {
|
||||||
|
resultsByGroup: []
|
||||||
|
}
|
||||||
|
|
||||||
|
export default initialState
|
@ -1,17 +1,28 @@
|
|||||||
import { createReducer } from '@reduxjs/toolkit'
|
import { createReducer } from '@reduxjs/toolkit'
|
||||||
import { setContents } from '../actions/data'
|
import {addAnswer, setContents} from '../actions/data'
|
||||||
|
import initialState, {StoreContent, ResultByGroup} from "../initialState";
|
||||||
|
import * as _ from "lodash";
|
||||||
|
|
||||||
interface DataReducer {
|
const reduceState = (array: ResultByGroup[], addon: ResultByGroup) => {
|
||||||
contents: string[]
|
var added = false;
|
||||||
|
array.forEach((result) => {
|
||||||
|
if (result.group === addon.group) {
|
||||||
|
added = true
|
||||||
|
result.value += addon.value
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (!added) {
|
||||||
|
array = _.concat(array, [addon])
|
||||||
|
}
|
||||||
|
return array
|
||||||
}
|
}
|
||||||
|
|
||||||
const initialState: DataReducer = {
|
const dataReducer = createReducer<StoreContent>(initialState, (builder) => {
|
||||||
contents: []
|
|
||||||
}
|
|
||||||
|
|
||||||
const dataReducer = createReducer<DataReducer>(initialState, (builder) => {
|
|
||||||
builder.addCase(setContents, (state, action) => {
|
builder.addCase(setContents, (state, action) => {
|
||||||
state.contents = action.payload
|
state.resultsByGroup = action.payload
|
||||||
|
})
|
||||||
|
builder.addCase(addAnswer, (state, action) => {
|
||||||
|
state.resultsByGroup = reduceState(state.resultsByGroup, action.payload)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { combineReducers, configureStore } from '@reduxjs/toolkit'
|
import { combineReducers, configureStore } from '@reduxjs/toolkit'
|
||||||
import { persistStore, persistReducer, FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER } from 'redux-persist'
|
import { persistStore, persistReducer, FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER } from 'redux-persist'
|
||||||
import storage from 'redux-persist/lib/storage' // defaults to localStorage
|
import storage from 'redux-persist/lib/storage' // defaults to localStorage
|
||||||
import data from './data'
|
import data from './reducers/data'
|
||||||
import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux'
|
import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux'
|
||||||
|
|
||||||
const rootReducer = combineReducers({
|
const rootReducer = combineReducers({
|
@ -1,65 +0,0 @@
|
|||||||
import axios from 'axios'
|
|
||||||
|
|
||||||
const CustomAxios = axios.create()
|
|
||||||
|
|
||||||
const toCamelCase: any = (object: any) => {
|
|
||||||
let transformedObject = object
|
|
||||||
if (typeof object === 'object' && object !== null) {
|
|
||||||
if (object instanceof Array) {
|
|
||||||
transformedObject = object.map(toCamelCase)
|
|
||||||
} else {
|
|
||||||
transformedObject = {}
|
|
||||||
for (const key in object) {
|
|
||||||
if (object[key] !== undefined) {
|
|
||||||
const newKey = key.replace(/(_\w)|(-\w)/g, (k) => k[1].toUpperCase())
|
|
||||||
transformedObject[newKey] = toCamelCase(object[key])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return transformedObject
|
|
||||||
}
|
|
||||||
|
|
||||||
export const toSnackCase: any = (object: any) => {
|
|
||||||
let transformedObject = object
|
|
||||||
if (typeof object === 'object' && object !== null) {
|
|
||||||
if (object instanceof Array) {
|
|
||||||
transformedObject = object.map(toSnackCase)
|
|
||||||
} else {
|
|
||||||
transformedObject = {}
|
|
||||||
for (const key in object) {
|
|
||||||
if (object[key] !== undefined) {
|
|
||||||
const newKey = key
|
|
||||||
.replace(/\.?([A-Z]+)/g, function (_, y) {
|
|
||||||
return '_' + y.toLowerCase()
|
|
||||||
})
|
|
||||||
.replace(/^_/, '')
|
|
||||||
transformedObject[newKey] = toSnackCase(object[key])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return transformedObject
|
|
||||||
}
|
|
||||||
|
|
||||||
CustomAxios.interceptors.response.use(
|
|
||||||
(response) => {
|
|
||||||
response.data = toCamelCase(response.data)
|
|
||||||
return response
|
|
||||||
},
|
|
||||||
(error) => {
|
|
||||||
return Promise.reject(error)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
CustomAxios.interceptors.request.use(
|
|
||||||
(config) => {
|
|
||||||
config.data = toSnackCase(config.data)
|
|
||||||
return config
|
|
||||||
},
|
|
||||||
(error) => {
|
|
||||||
return Promise.reject(error)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
export default CustomAxios
|
|
@ -1,8 +0,0 @@
|
|||||||
/**
|
|
||||||
* This function can be used anywhere in the app to greet the user
|
|
||||||
* @param userName The user's first name
|
|
||||||
* @returns A kind greeting message
|
|
||||||
*/
|
|
||||||
export const sayHello = (userName: string): string => {
|
|
||||||
return 'Welcome ' + userName + '!'
|
|
||||||
}
|
|
2554
survey/yarn.lock
2554
survey/yarn.lock
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user