App.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. import React from 'react';
  2. import './App.scss';
  3. import createHistory from "history/createBrowserHistory";
  4. import {Provider, connect} from 'react-redux';
  5. import thunk from 'redux-thunk';
  6. import {createStore, combineReducers, applyMiddleware} from 'redux';
  7. import Navibar from './Components/NaviBar';
  8. import Footer from './Components/Footer';
  9. import store from './reducers';
  10. import ConnectLog from './pages/Login';
  11. import {
  12. BrowserRouter as Router,
  13. Switch,
  14. Route,
  15. Link
  16. } from "react-router-dom";
  17. import TypeAd, {Home} from "./pages/Home";
  18. import ConnectSign from './pages/Login';
  19. import {Login} from "./pages/Login";
  20. import {Instruction} from "./pages/Instriction";
  21. import {Advertisment} from "./pages/Advertisment";
  22. // const store = createStore((state, action) => { //единственный редьюсер данного хранилища
  23. // if (state === undefined){ //redux запускает редьюсер хотя бы раз, что бы инициализировать хранилище
  24. // return {counter: 0}; //обязательно вернуть новый объект, а не изменить текущий state
  25. // }
  26. // if (action.type === 'COUNTER_INC'){ //в каждом action должен быть type
  27. // return {counter: state.counter +1} //создаем новый объект базируясь на данных из предыдущего состояния
  28. // }
  29. // if (action.type === 'COUNTER_DEC'){
  30. // return {counter: state.counter -1}
  31. // }
  32. // return state; //редьюсеров может быть несколько, в таком случае вызываются все редьюсеры, но далеко не всегда action.type будет относится к этому редьюсеру. Тогда редьюсер должен вернуть state как есть.
  33. // })
  34. // store.subscribe(()=> console.log(store.getState())) // подписка на обновления store
  35. // store.dispatch({
  36. // type: 'COUNTER_INC'
  37. // })
  38. // store.dispatch({
  39. // type: 'COUNTER_DEC'
  40. // })
  41. // const actiononInc = () => ({type: 'COUNTER_INC'})
  42. // const actiononDec = () => ({type: 'COUNTER_DEC'})
  43. // store.dispatch(actiononInc())
  44. // store.dispatch(actiononDec())
  45. // const Counter = ({i=0,onInc,onDec}) => {
  46. // return (
  47. // <>
  48. // <h4>{i}</h4>
  49. // <button onClick={onInc}>+</button>
  50. // <button disabled={i <= 0} onClick={onDec}>-</button>
  51. // </>
  52. // )
  53. // }
  54. // const ConnectedCounter = connect(state => ({i: state.counter}), {onInc: actiononInc ,onDec: actiononDec})(Counter)
  55. // const getGQL = url =>
  56. // (query, variables={}) => fetch(url, {
  57. // method: 'POST',
  58. // headers: {
  59. // //Accept: "application/json",
  60. // "Content-Type": "application/json",
  61. // ...(localStorage.authToken ? {Authorization: "Bearer " + localStorage.authToken } : {})
  62. // },
  63. // body: JSON.stringify({query, variables})
  64. // }).then(res => res.json())
  65. // const actionPending = name => ({type: 'PROMISE', status: 'PENDING', name})
  66. // const actionResolved = (name, payload) => ({type: 'PROMISE', status: 'RESOLVED', name, payload})
  67. // const actionRejected = (name, error) => ({type: 'PROMISE', status: 'REJECTED', name, error})
  68. // let shopGQL = getGQL('http://shop-roles.asmer.fs.a-level.com.ua/graphql')
  69. // const actionPromise = (name, promise) =>
  70. // async dispatch => {
  71. // dispatch(actionPending(name))
  72. // try{
  73. // let payload = await promise
  74. // dispatch(actionResolved(name, payload))
  75. // return payload
  76. // }
  77. // catch(error){
  78. // dispatch(actionRejected(name, error))
  79. // }
  80. // }
  81. // const combineReducer = combineReducers({auth: authReducer, promise: promiseReducer})
  82. // function authReducer(state, action){
  83. // if(state === undefined){
  84. // if(localStorage.authToken || localStorage.authToken === 'null'){
  85. // action.type = 'LOGIN'
  86. // action.token = localStorage.authToken
  87. // }
  88. // else {
  89. // return {}
  90. // }
  91. // }
  92. // if(action.type === 'LOGIN'){
  93. // console.log('LOGIN')
  94. // localStorage.authToken = action.token
  95. // let tok = localStorage.authToken.split('.')[1]
  96. // let decoded = JSON.parse(atob((tok)))
  97. // return {token:action.token, payload: decoded}
  98. // }
  99. // if(action.type === 'LOGOUT'){
  100. // console.log("LOGOUT")
  101. // localStorage.authToken = ''
  102. // return {}
  103. // }
  104. // return state
  105. // }
  106. // function promiseReducer(state={}, {type, status, payload, error, name}){
  107. // if (type === 'PROMISE'){
  108. // return {
  109. // ...state,
  110. // [name]:{status, payload, error}
  111. // }
  112. // }
  113. // return state
  114. // }
  115. // const store = createStore(combineReducer, applyMiddleware(thunk))
  116. // const actionAuthLogin = token => ({type:'LOGIN', token})
  117. // const actionAuthLogout = () => ({type:"LOGOUT"})
  118. // let log = async (login, password) => {
  119. // let query = `query log($l: String, $p: String) {
  120. // login(login: $l, password: $p)
  121. // }`
  122. // let variables = {
  123. // "l": login,
  124. // "p": password
  125. // }
  126. // let token = await shopGQL(query, variables)
  127. // console.log(token)
  128. // return token.data.login
  129. // }
  130. // const actionLogin = (login, password) => actionPromise("login", log(login, password))
  131. // const actionFullLogin = (login, password) => {
  132. // return async (dispatch) => {
  133. // let result = await dispatch(actionLogin(login, password))
  134. // if(result)
  135. // dispatch(actionAuthLogin(result))
  136. // }
  137. // }
  138. // const LoginForm = ({onLogin}) => {
  139. // const [login,setLogin] = useState('')
  140. // const [password,setPassword] = useState('')
  141. // return (
  142. // <div>
  143. // <input value={login} onChange={e => setLogin(e.target.value)} ></input>
  144. // <input value={password} onChange={e => setPassword(e.target.value)} type="password"></input>
  145. // <button onClick={() => onLogin(login,password)}>Send</button>
  146. // </div>
  147. // )
  148. // }
  149. // const ConnectLog = connect(null, {onLogin: actionFullLogin})(LoginForm)
  150. // const ConnectLogout = connect(state => ({children: 'logout'}),{onClick: actionAuthLogout})('button')
  151. function App() {
  152. return (
  153. <>
  154. <Provider store={store}>
  155. <Router history = {createHistory()}>
  156. <Navibar />
  157. <Footer />
  158. <Switch>
  159. <Route exact path='/' component={Home}/>
  160. <Route path='/sign' component={ConnectSign}/>
  161. <Route path='/login' component={ConnectLog}/>
  162. <Route path='/instruction' component={Instruction} />
  163. <Route path='/advertisment' component={Advertisment} />
  164. </Switch>
  165. </Router>
  166. </Provider>
  167. </>
  168. );
  169. }
  170. export default App;