mirror of
https://github.com/evgen-app/front-nti-hack.git
synced 2025-02-06 23:00:35 +03:00
add form without UI design
This commit is contained in:
parent
f5d3487cba
commit
b869957ed0
42
package-lock.json
generated
42
package-lock.json
generated
|
@ -1272,8 +1272,7 @@
|
||||||
"asynckit": {
|
"asynckit": {
|
||||||
"version": "0.4.0",
|
"version": "0.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||||
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
|
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"atob": {
|
"atob": {
|
||||||
"version": "2.1.2",
|
"version": "2.1.2",
|
||||||
|
@ -1281,6 +1280,27 @@
|
||||||
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
|
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"axios": {
|
||||||
|
"version": "0.27.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
|
||||||
|
"integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
|
||||||
|
"requires": {
|
||||||
|
"follow-redirects": "^1.14.9",
|
||||||
|
"form-data": "^4.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"form-data": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
|
||||||
|
"requires": {
|
||||||
|
"asynckit": "^0.4.0",
|
||||||
|
"combined-stream": "^1.0.8",
|
||||||
|
"mime-types": "^2.1.12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"babel-jest": {
|
"babel-jest": {
|
||||||
"version": "27.5.1",
|
"version": "27.5.1",
|
||||||
"resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz",
|
||||||
|
@ -1518,7 +1538,6 @@
|
||||||
"version": "1.0.8",
|
"version": "1.0.8",
|
||||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"delayed-stream": "~1.0.0"
|
"delayed-stream": "~1.0.0"
|
||||||
}
|
}
|
||||||
|
@ -1659,8 +1678,7 @@
|
||||||
"delayed-stream": {
|
"delayed-stream": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||||
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
|
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"detect-newline": {
|
"detect-newline": {
|
||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
|
@ -1848,6 +1866,11 @@
|
||||||
"path-exists": "^4.0.0"
|
"path-exists": "^4.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"follow-redirects": {
|
||||||
|
"version": "1.15.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz",
|
||||||
|
"integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA=="
|
||||||
|
},
|
||||||
"form-data": {
|
"form-data": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
|
||||||
|
@ -3027,14 +3050,12 @@
|
||||||
"mime-db": {
|
"mime-db": {
|
||||||
"version": "1.52.0",
|
"version": "1.52.0",
|
||||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
||||||
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"mime-types": {
|
"mime-types": {
|
||||||
"version": "2.1.35",
|
"version": "2.1.35",
|
||||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
|
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
|
||||||
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"mime-db": "1.52.0"
|
"mime-db": "1.52.0"
|
||||||
}
|
}
|
||||||
|
@ -3393,6 +3414,11 @@
|
||||||
"react-is": "^17.0.2"
|
"react-is": "^17.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"react-use-array": {
|
||||||
|
"version": "1.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-use-array/-/react-use-array-1.0.5.tgz",
|
||||||
|
"integrity": "sha512-96wRG+nI7qiGbX9Q8Au/jjY4abi8AeZeYzwtLvrbeSvOP4QzR9IboEUdZNeiEGinGkfVobYeTEIEh/H0My4olg=="
|
||||||
|
},
|
||||||
"redent": {
|
"redent": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
|
||||||
|
|
|
@ -9,10 +9,12 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@reduxjs/toolkit": "^1.3.6",
|
"@reduxjs/toolkit": "^1.3.6",
|
||||||
|
"axios": "^0.27.2",
|
||||||
"next": "latest",
|
"next": "latest",
|
||||||
"react": "^18.1.0",
|
"react": "^18.1.0",
|
||||||
"react-dom": "^18.1.0",
|
"react-dom": "^18.1.0",
|
||||||
"react-redux": "^7.2.0"
|
"react-redux": "^7.2.0",
|
||||||
|
"react-use-array": "^1.0.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@testing-library/jest-dom": "^5.0.0",
|
"@testing-library/jest-dom": "^5.0.0",
|
||||||
|
|
|
@ -1,14 +1,11 @@
|
||||||
import { configureStore, ThunkAction, Action } from '@reduxjs/toolkit'
|
import { configureStore, ThunkAction, Action } from '@reduxjs/toolkit'
|
||||||
|
import onBoardingSlice from './user/onBoardingSlice'
|
||||||
|
|
||||||
let counterReducer = null
|
export const store = configureStore({
|
||||||
|
reducer:onBoardingSlice
|
||||||
|
})
|
||||||
|
|
||||||
export function makeStore() {
|
|
||||||
return configureStore({
|
|
||||||
reducer: { counter: counterReducer },
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const store = makeStore()
|
|
||||||
|
|
||||||
export type AppState = ReturnType<typeof store.getState>
|
export type AppState = ReturnType<typeof store.getState>
|
||||||
|
|
||||||
|
|
123
src/app/user/onBoardingSlice.ts
Normal file
123
src/app/user/onBoardingSlice.ts
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
import { createSlice, PayloadAction, createSelector } from '@reduxjs/toolkit'
|
||||||
|
import { AppState } from '../store'
|
||||||
|
|
||||||
|
|
||||||
|
export interface whyPageIE{
|
||||||
|
whatIwantKnown: string
|
||||||
|
whatIwantLearn: string
|
||||||
|
whatIwantGet: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface superPowerPageIE{
|
||||||
|
communication: number
|
||||||
|
generateIdeas: number
|
||||||
|
coordination: number
|
||||||
|
creative: number
|
||||||
|
searchResources: number
|
||||||
|
achivment: number
|
||||||
|
criticalThinking: number
|
||||||
|
leaders: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface drawDreamPageIE{
|
||||||
|
images: FileList
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface whoIPageIE{
|
||||||
|
introvert: boolean
|
||||||
|
individualist: boolean
|
||||||
|
optimist: boolean
|
||||||
|
serious: boolean
|
||||||
|
organize: boolean
|
||||||
|
leader: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface whatILikePageIE{
|
||||||
|
things: string[]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export interface boardingFormIE{
|
||||||
|
pages:[
|
||||||
|
whyPageIE,
|
||||||
|
superPowerPageIE,
|
||||||
|
drawDreamPageIE,
|
||||||
|
whoIPageIE,
|
||||||
|
whatILikePageIE
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
let initialList = {
|
||||||
|
pages:[
|
||||||
|
{
|
||||||
|
whatIwantGet:"",
|
||||||
|
whatIwantKnown:"",
|
||||||
|
whatIwantLearn:"",
|
||||||
|
} as whyPageIE,
|
||||||
|
{
|
||||||
|
communication: 0,
|
||||||
|
coordination: 0,
|
||||||
|
creative: 0,
|
||||||
|
criticalThinking:0,
|
||||||
|
generateIdeas:0,
|
||||||
|
searchResources:0,
|
||||||
|
achivment:0,
|
||||||
|
leaders:0,
|
||||||
|
} as superPowerPageIE,
|
||||||
|
{
|
||||||
|
images:null
|
||||||
|
} as drawDreamPageIE,
|
||||||
|
{
|
||||||
|
individualist: null,
|
||||||
|
introvert:null,
|
||||||
|
optimist:null,
|
||||||
|
organize:null,
|
||||||
|
serious:null,
|
||||||
|
leader:null
|
||||||
|
} as whoIPageIE,
|
||||||
|
{
|
||||||
|
things: []
|
||||||
|
} as whatILikePageIE
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const onBoardingSlice = createSlice(
|
||||||
|
{
|
||||||
|
name:"onBoardingSlice",
|
||||||
|
initialState: initialList,
|
||||||
|
reducers:{
|
||||||
|
setWhyPage(state, action: PayloadAction<whyPageIE>){
|
||||||
|
state.pages[0] = action.payload
|
||||||
|
},
|
||||||
|
setSuperPowerPage(state, action: PayloadAction<superPowerPageIE>){
|
||||||
|
state.pages[1] = action.payload
|
||||||
|
},
|
||||||
|
setDrawDreamPage(state, action: PayloadAction<drawDreamPageIE>){
|
||||||
|
state.pages[2] = action.payload
|
||||||
|
},
|
||||||
|
setWhoIPage(state, action: PayloadAction<whoIPageIE>){
|
||||||
|
state.pages[3] = action.payload
|
||||||
|
},
|
||||||
|
setWhatILikePage(state, action: PayloadAction<whatILikePageIE>){
|
||||||
|
state.pages[4] = action.payload
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
export const getFormState = createSelector(
|
||||||
|
(state:AppState) => state.pages,
|
||||||
|
(field)=>field
|
||||||
|
)
|
||||||
|
|
||||||
|
export const {
|
||||||
|
setWhyPage,
|
||||||
|
setSuperPowerPage,
|
||||||
|
setDrawDreamPage,
|
||||||
|
setWhoIPage,
|
||||||
|
setWhatILikePage
|
||||||
|
} = onBoardingSlice.actions
|
||||||
|
|
||||||
|
export default onBoardingSlice.reducer
|
|
@ -1,4 +1,4 @@
|
||||||
import React from "react";
|
import React, { useState } from "react";
|
||||||
import styles from "./inp.module.css"
|
import styles from "./inp.module.css"
|
||||||
|
|
||||||
interface InputIE{
|
interface InputIE{
|
||||||
|
@ -6,14 +6,23 @@ interface InputIE{
|
||||||
type?: string
|
type?: string
|
||||||
onChange:(value:string)=>void
|
onChange:(value:string)=>void
|
||||||
class?:string
|
class?:string
|
||||||
|
value?:string
|
||||||
}
|
}
|
||||||
|
|
||||||
export const Input:React.FC<InputIE> = (props) =>{
|
export const Input:React.FC<InputIE> = (props) =>{
|
||||||
|
const [value, setValue] = useState(props.value == undefined? null: props.value)
|
||||||
|
|
||||||
|
const onChange = (value:string) =>{
|
||||||
|
setValue(value)
|
||||||
|
props.onChange(value)
|
||||||
|
}
|
||||||
return(
|
return(
|
||||||
<input
|
<input
|
||||||
|
|
||||||
|
value={value}
|
||||||
placeholder={props.placeholder}
|
placeholder={props.placeholder}
|
||||||
type={props.type == undefined? "text":props.type}
|
type={props.type == undefined? "text":props.type}
|
||||||
onChange={(e)=>props.onChange(e.target.value)}
|
onChange={(e)=>onChange(e.target.value)}
|
||||||
className={styles.inp + " " + props.class}
|
className={styles.inp + " " + props.class}
|
||||||
></input>
|
></input>
|
||||||
)
|
)
|
||||||
|
|
26
src/components/WhoIToggle/index.tsx
Normal file
26
src/components/WhoIToggle/index.tsx
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
import React from "react";
|
||||||
|
import styles from "./toggle.module.css"
|
||||||
|
|
||||||
|
interface toggleIE{
|
||||||
|
active: boolean
|
||||||
|
firstValue: string
|
||||||
|
secondValue:string
|
||||||
|
onChange: (value: boolean) => void
|
||||||
|
}
|
||||||
|
|
||||||
|
export const WhoIToggle:React.FC<toggleIE> = (props) =>{
|
||||||
|
return(
|
||||||
|
<div className={styles.wrapper}>
|
||||||
|
<div
|
||||||
|
onClick={()=>props.onChange(true)}
|
||||||
|
className={styles.value + " " + (props.active == true? styles.active:null)}
|
||||||
|
>{props.firstValue}</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
onClick={()=>props.onChange(false)}
|
||||||
|
className={styles.value + " " + ( props.active == false? styles.active:null)}
|
||||||
|
>{props.secondValue}</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
16
src/components/WhoIToggle/toggle.module.css
Normal file
16
src/components/WhoIToggle/toggle.module.css
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
.wrapper{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
gap:10px;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.value{
|
||||||
|
cursor: pointer;
|
||||||
|
background-color: aqua;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active{
|
||||||
|
background-color: azure !important;
|
||||||
|
}
|
18
src/components/selectSuperPower/index.tsx
Normal file
18
src/components/selectSuperPower/index.tsx
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
import React, { useState } from "react";
|
||||||
|
import styles from "./SelectSuperPower.module.css"
|
||||||
|
|
||||||
|
export const SelectSuperPower: React.FC<{active:Number, onChange: (value:number)=>void}> = (props) =>{
|
||||||
|
let selectors = []
|
||||||
|
|
||||||
|
for (let i=1; i<7; i++){
|
||||||
|
let a = <div onClick={()=>props.onChange(i)} className={styles.selectSuperPower + " " + (props.active == i? styles.active: null)}></div>
|
||||||
|
selectors.push(a)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return(
|
||||||
|
<div className={styles.selectWrapper}>
|
||||||
|
{selectors}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
16
src/components/selectSuperPower/selectSuperPower.module.css
Normal file
16
src/components/selectSuperPower/selectSuperPower.module.css
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
.selectSuperPower{
|
||||||
|
height: 32px;
|
||||||
|
width: 32px;
|
||||||
|
background: #000;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.active{
|
||||||
|
background-color: green !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selectWrapper{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
gap:5px;
|
||||||
|
|
||||||
|
}
|
|
@ -1 +1,14 @@
|
||||||
import React from "react";
|
import { NextPage } from "next";
|
||||||
|
import Link from "next/link";
|
||||||
|
import React, {useState} from "react";
|
||||||
|
import { useDispatch, useSelector } from "react-redux";
|
||||||
|
|
||||||
|
const RegistrPage: NextPage = () => {
|
||||||
|
return(
|
||||||
|
<div>
|
||||||
|
registration
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default RegistrPage
|
||||||
|
|
46
src/pages/registration/onBoarding/1.tsx
Normal file
46
src/pages/registration/onBoarding/1.tsx
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
import { NextPage } from "next";
|
||||||
|
import Link from "next/link";
|
||||||
|
import React, {useState} from "react";
|
||||||
|
import { Input } from "../../../components/Input";
|
||||||
|
import { useDispatch, useSelector } from "react-redux";
|
||||||
|
import { getFormState, setWhyPage, whyPageIE } from "../../../app/user/onBoardingSlice";
|
||||||
|
import { AppState } from '../../../app/store'
|
||||||
|
|
||||||
|
const OnBoardingPage1: NextPage = () => {
|
||||||
|
let initState = useSelector((state: AppState)=>getFormState(state))[0] as whyPageIE
|
||||||
|
|
||||||
|
|
||||||
|
const [whatIwantGet, setWhatIwantGet] = useState(initState.whatIwantGet)
|
||||||
|
const [whatIwantKnown, setWhatIwantKnown] = useState(initState.whatIwantKnown)
|
||||||
|
const [whatIwantLearn, setWhatIwantLearn] = useState(initState.whatIwantLearn)
|
||||||
|
let dispatch = useDispatch()
|
||||||
|
|
||||||
|
let WhyPageState = {
|
||||||
|
whatIwantGet:whatIwantGet,
|
||||||
|
whatIwantKnown:whatIwantKnown,
|
||||||
|
whatIwantLearn:whatIwantLearn
|
||||||
|
} as whyPageIE
|
||||||
|
|
||||||
|
return(
|
||||||
|
<div>
|
||||||
|
<div>Прежде чем что-то сделать, спроси себя "Зачем?"</div>
|
||||||
|
<div>
|
||||||
|
<div>Я хочу узнать:</div>
|
||||||
|
<Input value={initState.whatIwantKnown} placeholder="что хотите узнать?" onChange={(value)=>setWhatIwantKnown(value)}></Input>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div>Я хочу получить:</div>
|
||||||
|
<Input value={initState.whatIwantGet} placeholder="что хотите получить?" onChange={(value)=>setWhatIwantGet(value)}></Input>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div>Я хочу научится:</div>
|
||||||
|
<Input value={initState.whatIwantLearn} placeholder="чему вы хотите научится?" onChange={(value)=>setWhatIwantLearn(value)}></Input>
|
||||||
|
</div>
|
||||||
|
<div onClick={()=>dispatch(setWhyPage(WhyPageState))}>
|
||||||
|
<Link href="/registration/onBoarding" >Назад</Link>
|
||||||
|
<Link href="/registration/onBoarding/2" >Вперед</Link>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
export default OnBoardingPage1
|
79
src/pages/registration/onBoarding/2.tsx
Normal file
79
src/pages/registration/onBoarding/2.tsx
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
import { NextPage } from "next";
|
||||||
|
import Link from "next/link";
|
||||||
|
import React, {useState} from "react";
|
||||||
|
import { Input } from "../../../components/Input";
|
||||||
|
import { useDispatch, useSelector } from "react-redux";
|
||||||
|
import { getFormState, setSuperPowerPage, superPowerPageIE } from "../../../app/user/onBoardingSlice";
|
||||||
|
import { AppState } from '../../../app/store'
|
||||||
|
import { SelectSuperPower } from "../../../components/selectSuperPower";
|
||||||
|
|
||||||
|
const OnBoardingPage2: NextPage = () => {
|
||||||
|
let initState = useSelector((state: AppState)=>getFormState(state))[1] as superPowerPageIE
|
||||||
|
const [communication, setCommunication] = useState(initState.communication)
|
||||||
|
const [coordination, setCoordination] = useState(initState.coordination)
|
||||||
|
const [creative, setCreative] = useState(initState.creative)
|
||||||
|
const [criticalThinking, setCriticalThinking] = useState(initState.criticalThinking)
|
||||||
|
const [generateIdeas, setGenerateIdeas] = useState(initState.generateIdeas)
|
||||||
|
const [searchResources, setSearchResources] = useState(initState.searchResources)
|
||||||
|
const [achivment, setAchivment] = useState(initState.achivment)
|
||||||
|
const [leaders, setLeaders] = useState(initState.leaders)
|
||||||
|
|
||||||
|
let SuperPowerPageState = {
|
||||||
|
communication: communication,
|
||||||
|
coordination: coordination,
|
||||||
|
creative: creative,
|
||||||
|
criticalThinking:criticalThinking,
|
||||||
|
generateIdeas:generateIdeas,
|
||||||
|
searchResources:searchResources,
|
||||||
|
achivment:achivment,
|
||||||
|
leaders:leaders,
|
||||||
|
} as superPowerPageIE
|
||||||
|
|
||||||
|
let dispatch = useDispatch()
|
||||||
|
|
||||||
|
return(
|
||||||
|
<div>
|
||||||
|
<div>Какая у тебя суперсила?</div>
|
||||||
|
<div>
|
||||||
|
<div>
|
||||||
|
<div>Коммуникация и сотрудничество</div>
|
||||||
|
<SelectSuperPower active={communication} onChange={(value)=>setCommunication(value)}></SelectSuperPower>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div>Генерация идей</div>
|
||||||
|
<SelectSuperPower active={generateIdeas} onChange={(value)=>setGenerateIdeas(value)}></SelectSuperPower>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div>Организация и координация</div>
|
||||||
|
<SelectSuperPower active={coordination} onChange={(value)=>setCoordination(value)}></SelectSuperPower>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div>Творчество, создание нового</div>
|
||||||
|
<SelectSuperPower active={creative} onChange={(value)=>setCreative(value)}></SelectSuperPower>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div>Поиск ресурсов</div>
|
||||||
|
<SelectSuperPower active={searchResources} onChange={(value)=>setSearchResources(value)}></SelectSuperPower>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div>Достижение и преодаление</div>
|
||||||
|
<SelectSuperPower active={achivment} onChange={(value)=>setAchivment(value)}></SelectSuperPower>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div>Критическое мышление</div>
|
||||||
|
<SelectSuperPower active={criticalThinking} onChange={(value)=>setCriticalThinking(value)}></SelectSuperPower>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div>Лидерство, умение вести за собой</div>
|
||||||
|
<SelectSuperPower active={leaders} onChange={(value)=>setLeaders(value)}></SelectSuperPower>
|
||||||
|
</div>
|
||||||
|
<div onClick={()=>dispatch(setSuperPowerPage(SuperPowerPageState))}>
|
||||||
|
<Link href="/registration/onBoarding/1">Назад</Link>
|
||||||
|
<Link href="/registration/onBoarding/3">Вперед</Link>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default OnBoardingPage2
|
36
src/pages/registration/onBoarding/3.tsx
Normal file
36
src/pages/registration/onBoarding/3.tsx
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
import { NextPage } from "next";
|
||||||
|
import Link from "next/link";
|
||||||
|
import React, {useState} from "react";
|
||||||
|
import { useDispatch, useSelector } from "react-redux";
|
||||||
|
import { getFormState, setDrawDreamPage, drawDreamPageIE } from "../../../app/user/onBoardingSlice";
|
||||||
|
import { AppState } from '../../../app/store'
|
||||||
|
|
||||||
|
const OnBoardingPage3: NextPage = () => {
|
||||||
|
let initState = useSelector((state: AppState)=>getFormState(state))[2] as drawDreamPageIE
|
||||||
|
|
||||||
|
const [files, setFiles] = useState(initState.images)
|
||||||
|
let dispatch = useDispatch()
|
||||||
|
|
||||||
|
return(
|
||||||
|
<div>
|
||||||
|
<div>Нарисуй свои ассоциации со словом "мечта", подпиши каждый рисунок и приложи их ниже</div>
|
||||||
|
<div>
|
||||||
|
<div>Загрузить рисунки</div>
|
||||||
|
<div>
|
||||||
|
<input
|
||||||
|
onChange={(e)=>setFiles(e.target.files)}
|
||||||
|
type="file"
|
||||||
|
multiple={true}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div onClick={()=>dispatch(setDrawDreamPage({images:files}))}>
|
||||||
|
<Link href="/registration/onBoarding/2">Назад</Link>
|
||||||
|
<Link href="/registration/onBoarding/4">Вперед</Link>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export default OnBoardingPage3
|
80
src/pages/registration/onBoarding/4.tsx
Normal file
80
src/pages/registration/onBoarding/4.tsx
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
import { NextPage } from "next";
|
||||||
|
import Link from "next/link";
|
||||||
|
import React, {useState} from "react";
|
||||||
|
import { useDispatch, useSelector } from "react-redux";
|
||||||
|
import { getFormState, setWhoIPage, whoIPageIE } from "../../../app/user/onBoardingSlice";
|
||||||
|
import { AppState } from '../../../app/store'
|
||||||
|
import { WhoIToggle } from "../../../components/WhoIToggle";
|
||||||
|
|
||||||
|
const OnBoardingPage4: NextPage = () => {
|
||||||
|
let initState = useSelector((state: AppState)=>getFormState(state))[3] as whoIPageIE
|
||||||
|
|
||||||
|
const [introvert, setInrovert] = useState(initState.introvert)
|
||||||
|
const [individualist, setIndividualist] = useState(initState.introvert)
|
||||||
|
const [optimist, setOptimist] = useState(initState.introvert)
|
||||||
|
const [organize, setOrganize] = useState(initState.introvert)
|
||||||
|
const [serious, setSerious] = useState(initState.introvert)
|
||||||
|
const [leader, setLeader] = useState(initState.introvert)
|
||||||
|
|
||||||
|
let state = {
|
||||||
|
individualist:individualist,
|
||||||
|
introvert:introvert,
|
||||||
|
optimist:optimist,
|
||||||
|
organize:organize,
|
||||||
|
serious:serious,
|
||||||
|
leader:leader
|
||||||
|
}as whoIPageIE
|
||||||
|
|
||||||
|
|
||||||
|
let dispatch = useDispatch()
|
||||||
|
return(
|
||||||
|
<div>
|
||||||
|
<div>Какой я?</div>
|
||||||
|
<div>выбери одно из двух</div>
|
||||||
|
<div>
|
||||||
|
<WhoIToggle
|
||||||
|
active={introvert}
|
||||||
|
onChange={(value)=>setInrovert(value)}
|
||||||
|
firstValue="Интроверт"
|
||||||
|
secondValue="Экстроверт"
|
||||||
|
></WhoIToggle>
|
||||||
|
<WhoIToggle
|
||||||
|
active={individualist}
|
||||||
|
onChange={(value)=>setIndividualist(value)}
|
||||||
|
firstValue="Индивидуалист"
|
||||||
|
secondValue="Командный игрок"
|
||||||
|
></WhoIToggle>
|
||||||
|
<WhoIToggle
|
||||||
|
active={optimist}
|
||||||
|
onChange={(value)=>setOptimist(value)}
|
||||||
|
firstValue="Оптимист"
|
||||||
|
secondValue="Пессимист"
|
||||||
|
></WhoIToggle>
|
||||||
|
<WhoIToggle
|
||||||
|
active={serious}
|
||||||
|
onChange={(value)=>setSerious(value)}
|
||||||
|
firstValue="Серьезный"
|
||||||
|
secondValue="Легкомысленный"
|
||||||
|
></WhoIToggle>
|
||||||
|
<WhoIToggle
|
||||||
|
active={organize}
|
||||||
|
onChange={(value)=>setOrganize(value)}
|
||||||
|
firstValue="Организованный"
|
||||||
|
secondValue="Творческий"
|
||||||
|
></WhoIToggle>
|
||||||
|
<WhoIToggle
|
||||||
|
active={leader}
|
||||||
|
onChange={(value)=>setLeader(value)}
|
||||||
|
firstValue="Лидер"
|
||||||
|
secondValue="Исполнитель"
|
||||||
|
></WhoIToggle>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div onClick={()=>dispatch(setWhoIPage(state))}>
|
||||||
|
<Link href="/registration/onBoarding/3">Назад</Link>
|
||||||
|
<Link href="/registration/onBoarding/5">Вперед</Link>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
export default OnBoardingPage4
|
57
src/pages/registration/onBoarding/5.tsx
Normal file
57
src/pages/registration/onBoarding/5.tsx
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
import { NextPage } from "next";
|
||||||
|
import Link from "next/link";
|
||||||
|
import React, {useState} from "react";
|
||||||
|
import { useDispatch, useSelector } from "react-redux";
|
||||||
|
import { getFormState, setWhatILikePage, whatILikePageIE } from "../../../app/user/onBoardingSlice";
|
||||||
|
import { AppState } from '../../../app/store'
|
||||||
|
import { Input } from "../../../components/Input";
|
||||||
|
import styles from "../../../styles/onBoarding/onBoarding.module.css"
|
||||||
|
import useArray from 'react-use-array'
|
||||||
|
|
||||||
|
const OnBoardingPage5: NextPage = () => {
|
||||||
|
let initState = useSelector((state: AppState)=>getFormState(state))[4] as whatILikePageIE
|
||||||
|
let dispatch = useDispatch()
|
||||||
|
const [ list, {
|
||||||
|
set, empty, replace, push,
|
||||||
|
updateAt, setAt, removeAt,
|
||||||
|
filter, map, sort, reverse,
|
||||||
|
mergeBefore, mergeAfter,
|
||||||
|
}] = useArray(initState.things);
|
||||||
|
|
||||||
|
let inputs = []
|
||||||
|
|
||||||
|
const onInpChange = (number:number, value:string) =>{
|
||||||
|
setAt(number, value )
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i=0; i<10; i++){
|
||||||
|
let inp = <Input
|
||||||
|
placeholder="Введи, что ты хочешь сделать"
|
||||||
|
value={list[i] as string}
|
||||||
|
onChange={(value)=>onInpChange(i, value)}
|
||||||
|
></Input>
|
||||||
|
|
||||||
|
inputs.push(inp)
|
||||||
|
}
|
||||||
|
|
||||||
|
return(
|
||||||
|
<div>
|
||||||
|
<div>
|
||||||
|
Как понять, что мне нравится? <br></br>
|
||||||
|
Выбирать, пробовать и снова Выбирать!
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
10 вещей, которые я хотел бы сделать, <br></br>
|
||||||
|
но почему-то до сих пор не сделал:
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
{inputs}
|
||||||
|
</div>
|
||||||
|
<div onClick={()=>dispatch(setWhatILikePage({things:list}))}>
|
||||||
|
<Link href="/registration/onBoarding/4">Назад</Link>
|
||||||
|
<Link href="/registration/onBoarding/lastPage">Вперед</Link>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
export default OnBoardingPage5
|
16
src/pages/registration/onBoarding/index.tsx
Normal file
16
src/pages/registration/onBoarding/index.tsx
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
import { NextPage } from "next";
|
||||||
|
import Link from "next/link";
|
||||||
|
import React from "react";
|
||||||
|
import { Button } from "../../../components/Button";
|
||||||
|
|
||||||
|
const OnBoardingPage: NextPage = () => {
|
||||||
|
return(
|
||||||
|
<div>
|
||||||
|
<div>Сформмируй профиль</div>
|
||||||
|
<Link href="/registration/onBoarding/1">Дальше</Link>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export default OnBoardingPage
|
83
src/pages/registration/onBoarding/lastPage.tsx
Normal file
83
src/pages/registration/onBoarding/lastPage.tsx
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
import { NextPage } from "next";
|
||||||
|
import Link from "next/link";
|
||||||
|
import React, {useState} from "react";
|
||||||
|
import { useDispatch, useSelector } from "react-redux";
|
||||||
|
import { getFormState, setWhatILikePage, superPowerPageIE, whatILikePageIE, whoIPageIE, whyPageIE } from "../../../app/user/onBoardingSlice";
|
||||||
|
import { AppState } from '../../../app/store'
|
||||||
|
import { Input } from "../../../components/Input";
|
||||||
|
import styles from "../../../styles/onBoarding/onBoarding.module.css"
|
||||||
|
import useArray from 'react-use-array'
|
||||||
|
|
||||||
|
const lastPage: NextPage = () => {
|
||||||
|
let formState = useSelector((state: AppState)=>getFormState(state))
|
||||||
|
let you = formState[3] as whoIPageIE
|
||||||
|
let why = formState[0] as whyPageIE
|
||||||
|
let things = formState[4] as whatILikePageIE
|
||||||
|
let BadSkills = ["Надо всегда совершенствовать свои навыки, не забывай про это"]
|
||||||
|
let superPowers = formState[1] as superPowerPageIE
|
||||||
|
if (superPowers.communication <= 3 && superPowers.communication > 0){
|
||||||
|
BadSkills.push("Усовершенствуй навыки коммуникации, больше разговаривай с людьми, заведи новых друзей, помни - знакомства это всегда классно.")
|
||||||
|
}
|
||||||
|
if (superPowers.creative <= 3 && superPowers.creative > 0){
|
||||||
|
BadSkills.push("Мы советуем не забывать также про книжки, ведь они классно развивают воображение и заставляют креативить.")
|
||||||
|
}
|
||||||
|
if (superPowers.coordination <= 3 && superPowers.communication > 0){
|
||||||
|
BadSkills.push("Помни, что организованность это важно. Начинать надо с себя, поставь к примеру себе как цель заправлять каждый день постель и содержать комнату в порядке.")
|
||||||
|
}
|
||||||
|
if (superPowers.generateIdeas <= 3 && superPowers.generateIdeas > 0){
|
||||||
|
BadSkills.push("Мозговой шторм - неплохой способ развивать способность генерировать, поиграй с друзьями в настольные игры ТРИЗ и прокачайся еще больше")
|
||||||
|
}
|
||||||
|
if (superPowers.searchResources <= 3 && superPowers.searchResources > 0){
|
||||||
|
BadSkills.push("Поисковые системы, такие как яндекс - твой лучший друг на все времена. Научись составлять свои запросы в совершенстве и заметишь как большое количество проблем исчезнут из твоей жизни")
|
||||||
|
}
|
||||||
|
if (superPowers.leaders <= 3 && superPowers.leaders > 0){
|
||||||
|
BadSkills.push("Лидерские качества сейчас нужны всем! Советуем их разивать, для этого отлично подходят встречи с вдохновителями.")
|
||||||
|
}
|
||||||
|
|
||||||
|
return(
|
||||||
|
<div>
|
||||||
|
<div>Спасибо что заполнили форму!</div>
|
||||||
|
<div>
|
||||||
|
Вы прошли главный и один из самых главных шагов к успеху,
|
||||||
|
этот небольшой самоанализ поможет вам сформировать первые цели.
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div>Мы подготовили для тебя пару полезных советов:</div>
|
||||||
|
<ul>
|
||||||
|
{
|
||||||
|
BadSkills.map((skill)=><li>{skill}</li>)
|
||||||
|
}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div>Мы рады что ты движешься в нужном направлении и уже определился со многими факторами</div>
|
||||||
|
<div>{why.whatIwantGet == ""? null:("Ты хочешь получить: " + why.whatIwantGet)}</div>
|
||||||
|
<div>{why.whatIwantKnown == ""? null:("Ты хочешь узнать: " + why.whatIwantGet)}</div>
|
||||||
|
<div>{why.whatIwantLearn == ""? null:("Ты хочешь научится: " + why.whatIwantGet)}</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div>Ты очень классный, ведь у тебя есть все качества, чтобы достичь твоих целей и исполнить все твои мечты.</div>
|
||||||
|
<div>{you.individualist == null? null:
|
||||||
|
("Ведь ты:" + you.individualist? "индивидуалист":"командный игрок" + ", "
|
||||||
|
+ you.introvert? "интроверт":"экстроверт" + ", "
|
||||||
|
+ you.leader? "лидер": "исполнитель" + ", "
|
||||||
|
+ you.optimist? "оптимист": "пессимист" + ", "
|
||||||
|
+ you.organize? "организованный":"творческий" + ", "
|
||||||
|
+ you.serious? "серьезный":"легкомысленный" + ", "
|
||||||
|
)}</div>
|
||||||
|
<div>Надо держать грань между всеми качествами, нельзя быть во всех ситуациях серьезным, также как и нельзя быть всегда легкомысленным, надо все делать в меру.</div>
|
||||||
|
<div>
|
||||||
|
<div>Незабывай про вещи, что ты обещал нам сделать:</div>
|
||||||
|
<ul>
|
||||||
|
{
|
||||||
|
things.things.length>0? things.things.map((value)=><li>{value}</li>):null
|
||||||
|
}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>Мы уверены, все твои цели и мечты сбудуться, если следовать четкому плану</div>
|
||||||
|
<Link href="/">Далее</Link>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
export default lastPage
|
|
@ -5,6 +5,7 @@ body {
|
||||||
font-family: 'Jost', sans-serif;
|
font-family: 'Jost', sans-serif;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
background-color: #14171b;
|
background-color: #14171b;
|
||||||
|
color: aliceblue;
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
|
|
0
src/styles/onBoarding/onBoarding.module.css
Normal file
0
src/styles/onBoarding/onBoarding.module.css
Normal file
Loading…
Reference in New Issue
Block a user