View difference between Paste ID: v7xLLTvY and h8QHQ5pb
SHOW: | | - or go back to the newest paste.
1
/** ReactotronConfig.js **/
2
import Reactotron from 'reactotron-react-native';
3
import sagaPlugin from 'reactotron-redux-saga';
4
5
if (__DEV__) {
6
  const tron = Reactotron.configure({
7
    host: '192.168.25.6',
8
  }) // controls connection & communication settings
9
    .useReactNative() // add all built-in react native plugins
10
    .use(sagaPlugin())
11
    .connect(); // let's connect!
12
13
  tron.clear();
14
15
  console.tron = tron;
16
}
17
18
19
20
/** store.js  **/
21
import { createStore, applyMiddleware, compose } from 'redux';
22
import createSagaMiddleware from 'redux-saga';
23
24
import rootSaga from './sagas';
25
import reducers from './ducks';
26
27
const middleware = [];
28
const enhancers = [];
29
30
/* Saga */
31
const sagaMonitor = __DEV__ ? console.tron.createSagaMonitor() : null;
32
const sagaMiddleware = createSagaMiddleware({ sagaMonitor });
33
middleware.push(sagaMiddleware);
34
35
enhancers.push(applyMiddleware(...middleware));
36
37
/* Store */
38
const createAppropriateStore = __DEV__ ? console.tron.createStore : createStore;
39
const store = createAppropriateStore(reducers, compose(...enhancers));
40
41
/* Run Saga */
42
sagaMiddleware.run(rootSaga);
43
44-
export default store;
44+
export default store;
45
46
47
48
/** ducks/auth.js  **/
49
/* Action Types */
50
export const Types = {
51
  LOGIN: 'auth/LOGIN',
52
  LOGOUT: 'auth/LOGOUT',
53
  SUCCESS: 'auth/SUCCESS',
54
  ERROR: 'auth/ERROR',
55
};
56
57
/* Reducers */
58
const INITIAL_STATE = {
59
  username: '',
60
  password: '',
61
  requesting: false,
62
  error: false,
63
  msgError: '',
64
};
65
66
export default function auth(state = INITIAL_STATE, action) {
67
  switch (action.type) {
68
    case Types.SUCCESS:
69
      return [...state, action.payload.data];
70
    default:
71
      return state;
72
  }
73
}
74
75
/* Action Creators */
76
export function authenticate(username, password) {
77
  return {
78
    type: Types.LOGIN,
79
    payload: {
80
      username,
81
      password,
82
    },
83
  };
84
}
85
86
87
/** ducks/index.js **/
88
import { combineReducers } from 'redux';
89
import auth from './auth';
90
91
export default combineReducers({ auth });
92
93
94
95
96
/** sagas/auth.js **/
97
import api from 'services/api';
98
import { call, put } from 'redux-saga/effects';
99
import { Types } from 'redux/ducks/auth';
100
101
export function* authenticateUser(action) {
102
  const { username, password } = action.payload;
103
  const response = yield call(
104
    api.post,
105
    {},
106
    { headers: { Authorization: `Basic ${btoa(`${username}:${password}`)}` } },
107
  );
108
109
  yield put({ type: Types.SUCCESS, payload: { data: response.data } });
110
}
111
112
113
/** sagas/index.js  **/
114
import { takeLatest } from 'redux-saga/effects';
115
116
import { authenticateUser } from 'redux/sagas/auth';
117
118
import { Types as AuthTypes } from 'redux/ducks/auth';
119
120
export default function* root() {
121
  yield [takeLatest(AuthTypes.LOGIN, authenticateUser)];
122
}